gpio: Enable hogging support in SPL

Use the CONFIG macros to conditionally build the GPIO hogging support in
either the SPL or U-Boot, or both, depending on the configuration. Also
call the GPIO hog probe function in the common SPL board initialization
as an equivalent to adding it to the U-Boot init sequence functions.

Signed-off-by: Eddie James <eajames@linux.ibm.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Eddie James 2022-02-07 17:09:01 -06:00 committed by Tom Rini
parent 34be6968c3
commit 1d99e673c7
3 changed files with 17 additions and 4 deletions

View File

@ -20,6 +20,7 @@
#include <serial.h> #include <serial.h>
#include <spl.h> #include <spl.h>
#include <asm/global_data.h> #include <asm/global_data.h>
#include <asm-generic/gpio.h>
#include <asm/u-boot.h> #include <asm/u-boot.h>
#include <nand.h> #include <nand.h>
#include <fat.h> #include <fat.h>
@ -743,6 +744,9 @@ 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) #if CONFIG_IS_ENABLED(BOARD_INIT)
spl_board_init(); spl_board_init();
#endif #endif

View File

@ -57,6 +57,15 @@ config GPIO_HOG
is a mechanism providing automatic GPIO request and config- is a mechanism providing automatic GPIO request and config-
uration as part of the gpio-controller's driver probe function. uration as part of the gpio-controller's driver probe function.
config SPL_GPIO_HOG
bool "Enable GPIO hog support in SPL"
depends on SPL_GPIO_SUPPORT
help
Enable gpio hog support in SPL
The GPIO chip may contain GPIO hog definitions. GPIO hogging
is a mechanism providing automatic GPIO request and config-
uration as part of the gpio-controller's driver probe function.
config DM_GPIO_LOOKUP_LABEL config DM_GPIO_LOOKUP_LABEL
bool "Enable searching for gpio labelnames" bool "Enable searching for gpio labelnames"
depends on DM_GPIO depends on DM_GPIO

View File

@ -1458,9 +1458,6 @@ void devm_gpiod_put(struct udevice *dev, struct gpio_desc *desc)
static int gpio_post_bind(struct udevice *dev) static int gpio_post_bind(struct udevice *dev)
{ {
struct udevice *child;
ofnode node;
#if defined(CONFIG_NEEDS_MANUAL_RELOC) #if defined(CONFIG_NEEDS_MANUAL_RELOC)
struct dm_gpio_ops *ops = (struct dm_gpio_ops *)device_get_ops(dev); struct dm_gpio_ops *ops = (struct dm_gpio_ops *)device_get_ops(dev);
static int reloc_done; static int reloc_done;
@ -1491,7 +1488,10 @@ static int gpio_post_bind(struct udevice *dev)
} }
#endif #endif
if (CONFIG_IS_ENABLED(OF_REAL) && IS_ENABLED(CONFIG_GPIO_HOG)) { if (CONFIG_IS_ENABLED(GPIO_HOG)) {
struct udevice *child;
ofnode node;
dev_for_each_subnode(node, dev) { dev_for_each_subnode(node, dev) {
if (ofnode_read_bool(node, "gpio-hog")) { if (ofnode_read_bool(node, "gpio-hog")) {
const char *name = ofnode_get_name(node); const char *name = ofnode_get_name(node);