[PATCH v4 3/6] commands: add i2c commands

Eric Bénard eric at eukrea.com
Tue May 25 05:17:55 EDT 2010


Le 25/05/2010 11:02, Marc Kleine-Budde a écrit :
>> +		case 'b':
>> +			adapter = i2c_get_adapter(simple_strtoul(optarg, NULL, 0));
>
> I'd just save the optarg in a variable...
>
>> +			break;
>> +		case 'v':
>> +			verbose = 1;
>> +			break;
>> +		}
>> +	}
>> +
>> +	count = argc - optind;
>> +
>> +	if ((addr<  0) || (reg<  0) || (count == 0) || (addr>  0x7F))
>> +		return COMMAND_ERROR_USAGE;
>> +
>> +	if (!adapter)
>> +		adapter = i2c_get_adapter(0);
>
> and use it here. Because if you specify an invalid adapter number,
> adapter 0 will be used silently (if it exists).
>
you're right, in fact I should exit in the case 'b' handling if the 
adapter doesn't exist, that will be simpler.

>> +	if (!adapter)
>> +		return -ENODEV;
>> +
>> +	client.adapter = adapter;
>> +	client.addr = addr;
>> +
>> +	buf = xmalloc(count);
>> +	for (i = 0; i<  count; i++)
>> +		*(buf + i) = (char) simple_strtol(argv[optind+i], NULL, 16);
>> +
>> +	ret = i2c_write_reg(&client, reg, buf, count);
>> +	if (ret != count)
>> +		goto out;
>
> better set a return value indicating an error here...
ret should already be set by i2c_write_reg so it there is no error, I 
can simply set ret to 0.
>
>> +
>> +	if (verbose) {
>> +		printf("wrote %i bytes starting at reg 0x%02x to i2cdev 0x%02x on bus %i\n",
>> +			count, reg, addr, adapter->nr);
>> +		for (i = 0; i<  count; i++)
>> +			printf("0x%02x ", *(buf + i));
>> +		printf("\n");
>> +	}
>> +
>> +out:
>> +	free(buf);
>> +	return 0;
>
> ... and return it here.

yes, that should be return ret

Eric



More information about the barebox mailing list