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

Simon Glass
2015-05-06T14:34:36Z

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