diff mbox

[U-Boot,06/28] dm: stdio: Plumb in the new keyboard uclass

Message ID 1441773171-4575-7-git-send-email-sjg@chromium.org
State Superseded
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass Sept. 9, 2015, 4:32 a.m. UTC
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(-)

Comments

Bin Meng Sept. 15, 2015, 6:11 a.m. UTC | #1
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
Simon Glass Oct. 18, 2015, 11:17 p.m. UTC | #2
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
Simon Glass Oct. 30, 2015, 8:24 p.m. UTC | #3
Applied to u-boot-dm.
diff mbox

Patch

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