Skip to content

Commit

Permalink
gpio: Get rid of gpio_hog_probe_all()
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Quentin Schulz <[email protected]>
Reviewed-by: Patrick Delaunay <[email protected]>
Reviewed-by: Samuel Holland <[email protected]>
  • Loading branch information
Marek Vasut authored and trini committed Jan 12, 2023
1 parent 942918f commit 48b3ecb
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 41 deletions.
3 changes: 0 additions & 3 deletions common/board_r.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 0 additions & 3 deletions common/spl/spl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 2 additions & 4 deletions doc/README.gpio
Original file line number Diff line number Diff line change
Expand Up @@ -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:

Expand Down
31 changes: 8 additions & 23 deletions drivers/gpio/gpio-uclass.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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;
}

Expand Down
8 changes: 0 additions & 8 deletions include/asm-generic/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -461,14 +461,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
*
Expand Down

0 comments on commit 48b3ecb

Please sign in to comment.