[U-Boot] [PATCH 04/24] dm: i2c: Implement 'i2c bus' command for driver model

Simon Glass
2015-05-12T22:40:44Z

On 6 May 2015 at 08:34, Simon Glass <sjg@chromium.org> wrote:
> Hi Heiko,
>
> On 5 May 2015 at 23:44, Heiko Schocher <hs@denx.de> wrote:
>> Hello Simon,
>>
>>
>> Am 04.05.2015 19:30, schrieb Simon Glass:
>>>
>>> This command was missed in the conversion. Add it back for driver model.
>>>
>>> Signed-off-by: Simon Glass <sjg@chromium.org>
>>> ---
>>>
>>> common/cmd_i2c.c | 63
>>> +++++++++++++++++++++++++++++++++++++++++++++++++-------
>>> 1 file changed, 55 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/common/cmd_i2c.c b/common/cmd_i2c.c
>>> index ad38cbf..1bc0db8 100644
>>> --- a/common/cmd_i2c.c
>>> +++ b/common/cmd_i2c.c
>>> @@ -1623,6 +1623,27 @@ int do_edid(cmd_tbl_t *cmdtp, int flag, int argc,
>>> char *const argv[])
>>> }
>>> #endif /* CONFIG_I2C_EDID */
>>>
>>> +#ifdef CONFIG_DM_I2C
>>> +static void show_bus(struct udevice *bus)
>>> +{
>>> + struct udevice *dev;
>>> +
>>> + printf("Bus %d:\t%s", bus->req_seq, bus->name);
>>> + if (device_active(bus))
>>> + printf(" (active %d)", bus->seq);
>>> + printf("\n");
>>> + for (device_find_first_child(bus, &dev);
>>> + dev;
>>> + device_find_next_child(&dev)) {
>>> + struct dm_i2c_chip *chip = dev_get_parent_platdata(dev);
>>> +
>>> + printf(" %02x: %s, offset len %x, flags %x\n",
>>> + chip->chip_addr, dev->name, chip->offset_len,
>>> + chip->flags);
>>> + }
>>> +}
>>> +#endif
>>> +
>>> /**
>>> * do_i2c_show_bus() - Handle the "i2c bus" command-line command
>>> * @cmdtp: Command data struct pointer
>>> @@ -1632,20 +1653,30 @@ int do_edid(cmd_tbl_t *cmdtp, int flag, int argc,
>>> char *const argv[])
>>> *
>>> * Returns zero always.
>>> */
>>> -#if defined(CONFIG_SYS_I2C)
>>> +#if defined(CONFIG_SYS_I2C) || defined(CONFIG_DM_I2C)
>>> static int do_i2c_show_bus(cmd_tbl_t *cmdtp, int flag, int argc,
>>> char * const argv[])
>>> {
>>> - int i;
>>> -#ifndef CONFIG_SYS_I2C_DIRECT_BUS
>>> - int j;
>>> -#endif
>>> -
>>> if (argc == 1) {
>>> /* show all busses */
>>> +#ifdef CONFIG_DM_I2C
>>> + struct udevice *bus;
>>> + struct uclass *uc;
>>> + int ret;
>>> +
>>> + ret = uclass_get(UCLASS_I2C, &uc);
>>> + if (ret)
>>> + return CMD_RET_FAILURE;
>>> + uclass_foreach_dev(bus, uc)
>>> + show_bus(bus);
>>> +#else
>>> + int i;
>>> +
>>> for (i = 0; i < CONFIG_SYS_NUM_I2C_BUSES; i++) {
>>> printf("Bus %d:\t%s", i, I2C_ADAP_NR(i)->name);
>>> #ifndef CONFIG_SYS_I2C_DIRECT_BUS
>>> + int j;
>>> +
>>
>>
>> I thought this drops an error, because var j is declared in the middle of
>> code, but just tried it with gcc 4.7.2 and gcc 4.8.1 vor the mgcoge board,
>> drops no warning, so:
>>
>> Acked-by: Heiko Schocher <hs@denx.de>
>
> Yes, I probably shouldn't do that.
>
> [snip]
>
> Regards,
> Simon

Actually this is OK because it is not really in the middle of the
code, due to the #ifdef.

Applied to u-boot-dm.