
Hi Tom
This patch is landing in the mailing list since a while. Do you expect to merge it in master or in next branch soon ? This patch will be useful for STM32MP SoC in order to clean according machine code.
Thanks Patrice
On 9/22/22 17:53, Quentin Schulz wrote:
From: Marek Vasut marex@denx.de
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
v3:
- removed DM_FLAG_PRE_RELOC flag since it is now handled by patch 1/2
in this series, in the DM core,
v2:
- added missing DM_FLAG_PRE_RELOC flag on the gpio-hog device,
- added comments for flags setting,
- tested on a PX30 ringneck where the gpio-hog is necessary in SPL to
be able to load U-Boot proper from eMMC when booting SPL from SD card,
common/board_r.c | 3 --- common/spl/spl.c | 3 --- doc/README.gpio | 6 ++---- drivers/gpio/gpio-uclass.c | 31 ++++++++----------------------- 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 56eb60fa27..c556aa5a07 100644 --- a/common/board_r.c +++ b/common/board_r.c @@ -750,9 +750,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 29e0898f03..683e0dfc52 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -770,9 +770,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 548ff37b8c..d253f654fa 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 0ed32b7217..b08e482ab3 100644 --- a/drivers/gpio/gpio-uclass.c +++ b/drivers/gpio/gpio-uclass.c @@ -315,34 +315,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);
@@ -1503,9 +1480,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 81f63f06f1..e56d3777ae 100644 --- a/include/asm-generic/gpio.h +++ b/include/asm-generic/gpio.h @@ -460,14 +460,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