Message ID | 1441773171-4575-7-git-send-email-sjg@chromium.org |
---|---|
State | Superseded |
Delegated to: | Simon Glass |
Headers | show |
Hi Simon, On Wed, Sep 9, 2015 at 12:32 PM, Simon Glass <sjg@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 <sjg@chromium.org> > --- > Reviewed-by: Bin Meng <bmeng.cn@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(sjg@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? > drv_keyboard_init (); > #endif > #ifdef CONFIG_LOGBUFFER > -- Regards, Bin
Hi Bin, On 15 September 2015 at 00:11, Bin Meng <bmeng.cn@gmail.com> wrote: > Hi Simon, > > On Wed, Sep 9, 2015 at 12:32 PM, Simon Glass <sjg@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 <sjg@chromium.org> >> --- >> > > Reviewed-by: Bin Meng <bmeng.cn@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(sjg@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
Applied to u-boot-dm.
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(sjg@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) drv_keyboard_init (); #endif #ifdef CONFIG_LOGBUFFER
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 <sjg@chromium.org> --- common/stdio.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-)