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

Simon Glass sjg at chromium.org
Mon Oct 19 01:17:16 CEST 2015


Hi Bin,

On 15 September 2015 at 00:11, Bin Meng <bmeng.cn at gmail.com> wrote:
> Hi Simon,
>
> On Wed, Sep 9, 2015 at 12:32 PM, Simon Glass <sjg at 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 at chromium.org>
>> ---
>>
>
> Reviewed-by: Bin Meng <bmeng.cn at 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 at 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


More information about the U-Boot mailing list