diff options
author | Jean-Jacques Hiblot | 2020-10-16 16:16:31 +0530 |
---|---|---|
committer | Tom Rini | 2020-10-28 11:48:55 -0400 |
commit | 90a979d7887ba75b05143f6704c9638e775635e2 (patch) | |
tree | 89095058cf3dd7c955cbb287d86e113516ea8498 | |
parent | 0ad40b2463053947da052e74be72938fa5e4735e (diff) |
dm: board: complete the initialization of the muxes in initr_dm()
This will probe the multiplexer devices that have a "u-boot,mux-autoprobe"
property. As a consequence they will be put in their idle state.
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Pratyush Yadav <p.yadav@ti.com>
-rw-r--r-- | common/board_r.c | 12 | ||||
-rw-r--r-- | drivers/mux/mux-uclass.c | 23 | ||||
-rw-r--r-- | include/mux.h | 12 |
3 files changed, 47 insertions, 0 deletions
diff --git a/common/board_r.c b/common/board_r.c index 9b2fec701a5..b9217b2e27f 100644 --- a/common/board_r.c +++ b/common/board_r.c @@ -46,6 +46,7 @@ #include <miiphy.h> #endif #include <mmc.h> +#include <mux.h> #include <nand.h> #include <of_live.h> #include <onenand_uboot.h> @@ -341,6 +342,17 @@ static int initr_dm_devices(void) return ret; } + if (IS_ENABLED(CONFIG_MULTIPLEXER)) { + /* + * Initialize the multiplexer controls to their default state. + * This must be done early as other drivers may unknowingly + * rely on it. + */ + ret = dm_mux_init(); + if (ret) + return ret; + } + return 0; } diff --git a/drivers/mux/mux-uclass.c b/drivers/mux/mux-uclass.c index 815df938aad..a35c3d9c948 100644 --- a/drivers/mux/mux-uclass.c +++ b/drivers/mux/mux-uclass.c @@ -304,6 +304,29 @@ static int mux_uclass_post_probe(struct udevice *dev) return 0; } +int dm_mux_init(void) +{ + struct uclass *uc; + struct udevice *dev; + int ret; + + ret = uclass_get(UCLASS_MUX, &uc); + if (ret < 0) { + log_debug("unable to get MUX uclass\n"); + return ret; + } + uclass_foreach_dev(dev, uc) { + if (dev_read_bool(dev, "u-boot,mux-autoprobe")) { + ret = device_probe(dev); + if (ret) + log_debug("unable to probe device %s\n", + dev->name); + } + } + + return 0; +} + UCLASS_DRIVER(mux) = { .id = UCLASS_MUX, .name = "mux", diff --git a/include/mux.h b/include/mux.h index 85eb7d42fc9..23844f480ac 100644 --- a/include/mux.h +++ b/include/mux.h @@ -109,6 +109,13 @@ void mux_control_put(struct mux_control *mux); */ struct mux_control *devm_mux_control_get(struct udevice *dev, const char *mux_name); +/** + * dm_mux_init() - Initialize the multiplexer controls to their default state. + * + * Return: 0 if OK, -errno otherwise. + */ +int dm_mux_init(void); + #else unsigned int mux_control_states(struct mux_control *mux) { @@ -142,6 +149,11 @@ struct mux_control *devm_mux_control_get(struct udevice *dev, { return NULL; } + +int dm_mux_init(void) +{ + return -ENOSYS; +} #endif #endif |