mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-01 08:59:33 +00:00
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:
parent
0ad40b2463
commit
90a979d788
3 changed files with 47 additions and 0 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue