Hi Bin, On 15 September 2015 at 00:11, Bin Meng <bmeng...@gmail.com> wrote: > Hi Simon, > > On Wed, Sep 9, 2015 at 12:32 PM, Simon Glass <s...@chromium.org> wrote: >> When driver model is used for keyboards we must scan the available keyboards >> and register them with stdio. Add code to do this. >> >> At some point (once LCD/video is converted) we should be able to convert >> stdio to driver model and avoid these dual data structures. >> >> Signed-off-by: Simon Glass <s...@chromium.org> >> --- >> > > Reviewed-by: Bin Meng <bmeng...@gmail.com> > > Please see one question below. > >> common/stdio.c | 31 ++++++++++++++++++++++++++++++- >> 1 file changed, 30 insertions(+), 1 deletion(-) >> >> diff --git a/common/stdio.c b/common/stdio.c >> index adbfc89..71cc32e 100644 >> --- a/common/stdio.c >> +++ b/common/stdio.c >> @@ -11,6 +11,7 @@ >> >> #include <config.h> >> #include <common.h> >> +#include <dm.h> >> #include <errno.h> >> #include <stdarg.h> >> #include <malloc.h> >> @@ -24,6 +25,8 @@ >> #include <i2c.h> >> #endif >> >> +#include <dm/device-internal.h> >> + >> DECLARE_GLOBAL_DATA_PTR; >> >> static struct stdio_dev devs; >> @@ -245,6 +248,32 @@ int stdio_init_tables(void) >> >> int stdio_add_devices(void) >> { >> +#ifdef CONFIG_DM_KEYBOARD >> + struct udevice *dev; >> + struct uclass *uc; >> + int ret; >> + >> + /* >> + * For now we probe all the devices here. At some point this should >> be >> + * done only when the devices are required - e.g. we have a list of >> + * input devices to start up in the stdin environment variable. That >> + * work probably makes more sense when stdio itself is converted to >> + * driver model. >> + * >> + * TODO(s...@chromium.org): Convert changing uclass_first_device() >> etc. >> + * to return the device even on error. Then we could use that here. >> + */ >> + ret = uclass_get(UCLASS_KEYBOARD, &uc); >> + if (ret) >> + return ret; >> + >> + /* Don't report errors to the caller - assume that they are >> non-fatal */ >> + uclass_foreach_dev(dev, uc) { >> + ret = device_probe(dev); >> + if (ret) >> + printf("Failed to probe keyboard '%s'\n", dev->name); >> + } >> +#endif >> #ifdef CONFIG_SYS_I2C >> i2c_init_all(); >> #else >> @@ -258,7 +287,7 @@ int stdio_add_devices(void) >> #if defined(CONFIG_VIDEO) || defined(CONFIG_CFB_CONSOLE) >> drv_video_init (); >> #endif >> -#ifdef CONFIG_KEYBOARD >> +#if defined(CONFIG_KEYBOARD) && !defined(CONFIG_DM_KEYBOARD) > > Should we remove this non-dm driver call completely?
We can once 'novena' is converted over. > >> drv_keyboard_init (); >> #endif >> #ifdef CONFIG_LOGBUFFER >> -- Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot