diff options
author | Marek Vasut <marex@denx.de> | 2022-09-22 17:53:26 +0200 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2023-01-12 14:06:16 -0500 |
commit | 48b3ecbedf8208845ac5956a3fb8817269fafedd (patch) | |
tree | 9a2a90d475abd35c8945bb3af7aa0c14bfc149f7 | |
parent | 942918f2acd3634dee7813f7b9f801ffd54d9f2e (diff) | |
download | u-boot-48b3ecbedf8208845ac5956a3fb8817269fafedd.zip u-boot-48b3ecbedf8208845ac5956a3fb8817269fafedd.tar.gz u-boot-48b3ecbedf8208845ac5956a3fb8817269fafedd.tar.bz2 |
gpio: Get rid of gpio_hog_probe_all()
The gpio_hog_probe_all() functionality can be perfectly well replaced by
DM_FLAG_PROBE_AFTER_BIND DM flag, which would trigger .probe() callback
of each GPIO hog driver instance after .bind() and thus configure the
hogged GPIO accordingly.
Signed-off-by: Marek Vasut <marex@denx.de>
Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
Reviewed-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Reviewed-by: Samuel Holland <samuel@sholland.org>
-rw-r--r-- | common/board_r.c | 3 | ||||
-rw-r--r-- | common/spl/spl.c | 3 | ||||
-rw-r--r-- | doc/README.gpio | 6 | ||||
-rw-r--r-- | drivers/gpio/gpio-uclass.c | 31 | ||||
-rw-r--r-- | include/asm-generic/gpio.h | 8 |
5 files changed, 10 insertions, 41 deletions
diff --git a/common/board_r.c b/common/board_r.c index 42060ee..3618aca 100644 --- a/common/board_r.c +++ b/common/board_r.c @@ -756,9 +756,6 @@ static init_fnc_t init_sequence_r[] = { initr_status_led, #endif /* PPC has a udelay(20) here dating from 2002. Why? */ -#if defined(CONFIG_GPIO_HOG) - gpio_hog_probe_all, -#endif #ifdef CONFIG_BOARD_LATE_INIT board_late_init, #endif diff --git a/common/spl/spl.c b/common/spl/spl.c index 4668367..a630e79 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -786,9 +786,6 @@ void board_init_r(gd_t *dummy1, ulong dummy2) } } - if (CONFIG_IS_ENABLED(GPIO_HOG)) - gpio_hog_probe_all(); - #if CONFIG_IS_ENABLED(BOARD_INIT) spl_board_init(); #endif diff --git a/doc/README.gpio b/doc/README.gpio index 548ff37..d253f65 100644 --- a/doc/README.gpio +++ b/doc/README.gpio @@ -2,10 +2,8 @@ GPIO hog (CONFIG_GPIO_HOG) -------- -All the GPIO hog are initialized in gpio_hog_probe_all() function called in -board_r.c just before board_late_init() but you can also acces directly to -the gpio with gpio_hog_lookup_name(). - +All the GPIO hog are initialized using DM_FLAG_PROBE_AFTER_BIND DM flag +after bind(). Example, for the device tree: diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c index 3a6ef3b..dbebf3a 100644 --- a/drivers/gpio/gpio-uclass.c +++ b/drivers/gpio/gpio-uclass.c @@ -311,34 +311,11 @@ static int gpio_hog_probe(struct udevice *dev) return 0; } -int gpio_hog_probe_all(void) -{ - struct udevice *dev; - int ret; - int retval = 0; - - for (uclass_first_device(UCLASS_NOP, &dev); - dev; - uclass_find_next_device(&dev)) { - if (dev->driver == DM_DRIVER_GET(gpio_hog)) { - ret = device_probe(dev); - if (ret) { - printf("Failed to probe device %s err: %d\n", - dev->name, ret); - retval = ret; - } - } - } - - return retval; -} - int gpio_hog_lookup_name(const char *name, struct gpio_desc **desc) { struct udevice *dev; *desc = NULL; - gpio_hog_probe_all(); if (!uclass_get_device_by_name(UCLASS_NOP, name, &dev)) { struct gpio_hog_priv *priv = dev_get_priv(dev); @@ -1505,9 +1482,17 @@ static int gpio_post_bind(struct udevice *dev) &child); if (ret) return ret; + + /* + * Make sure gpio-hogs are probed after bind + * since hogs can be essential to the hardware + * system. + */ + dev_or_flags(child, DM_FLAG_PROBE_AFTER_BIND); } } } + return 0; } diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h index 0fcf709..dd0bdf2 100644 --- a/include/asm-generic/gpio.h +++ b/include/asm-generic/gpio.h @@ -462,14 +462,6 @@ int dm_gpio_lookup_name(const char *name, struct gpio_desc *desc); int gpio_hog_lookup_name(const char *name, struct gpio_desc **desc); /** - * gpio_hog_probe_all() - probe all gpio devices with - * gpio-hog subnodes. - * - * @return: Returns return value from device_probe() - */ -int gpio_hog_probe_all(void); - -/** * gpio_lookup_name - Look up a GPIO name and return its details * * This is used to convert a named GPIO into a device, offset and GPIO |