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>
This commit is contained in:
Jean-Jacques Hiblot 2020-10-16 16:16:31 +05:30 committed by Tom Rini
parent 0ad40b2463
commit 90a979d788
3 changed files with 47 additions and 0 deletions

View file

@ -46,6 +46,7 @@
#include <miiphy.h> #include <miiphy.h>
#endif #endif
#include <mmc.h> #include <mmc.h>
#include <mux.h>
#include <nand.h> #include <nand.h>
#include <of_live.h> #include <of_live.h>
#include <onenand_uboot.h> #include <onenand_uboot.h>
@ -341,6 +342,17 @@ static int initr_dm_devices(void)
return ret; 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; return 0;
} }

View file

@ -304,6 +304,29 @@ static int mux_uclass_post_probe(struct udevice *dev)
return 0; 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) = { UCLASS_DRIVER(mux) = {
.id = UCLASS_MUX, .id = UCLASS_MUX,
.name = "mux", .name = "mux",

View file

@ -109,6 +109,13 @@ void mux_control_put(struct mux_control *mux);
*/ */
struct mux_control *devm_mux_control_get(struct udevice *dev, struct mux_control *devm_mux_control_get(struct udevice *dev,
const char *mux_name); 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 #else
unsigned int mux_control_states(struct mux_control *mux) 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; return NULL;
} }
int dm_mux_init(void)
{
return -ENOSYS;
}
#endif #endif
#endif #endif