
Hi Simon,
This one is fine with me.
Acked-by: Christophe Ricardchristophe-h.ricard@st.com
Best Regards Christophe
On 23/08/2015 02:31, Simon Glass wrote:
I2C chips can support a register offset, with registers accessible by sending this offset as the first part of any read or write transaction. Most I2C chips have a single byte offset, thus the offset length is 1. This provides access for up 256 registers.
However other offset lengths are supported, including 0.
Add a command to provide access to the offset length from the command line. This allows the offset length to be read or written.
Signed-off-by: Simon Glass sjg@chromium.org
Changes in v2: None
common/cmd_i2c.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+)
diff --git a/common/cmd_i2c.c b/common/cmd_i2c.c index 1bc0db8..864b259 100644 --- a/common/cmd_i2c.c +++ b/common/cmd_i2c.c @@ -453,6 +453,37 @@ static int do_i2c_flags(cmd_tbl_t *cmdtp, int flag, int argc,
return 0; }
+static int do_i2c_olen(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) +{
- struct udevice *dev;
- uint olen;
- int chip;
- int ret;
- if (argc < 2)
return CMD_RET_USAGE;
- chip = simple_strtoul(argv[1], NULL, 16);
- ret = i2c_get_cur_bus_chip(chip, &dev);
- if (ret)
return i2c_report_err(ret, I2C_ERR_READ);
- if (argc > 2) {
olen = simple_strtoul(argv[2], NULL, 16);
ret = i2c_set_chip_offset_len(dev, olen);
- } else {
ret = i2c_get_chip_offset_len(dev);
if (ret >= 0) {
printf("%x\n", ret);
ret = 0;
}
- }
- if (ret)
return i2c_report_err(ret, I2C_ERR_READ);
- return 0;
+} #endif
/** @@ -1903,6 +1934,7 @@ static cmd_tbl_t cmd_i2c_sub[] = { U_BOOT_CMD_MKENT(write, 6, 0, do_i2c_write, "", ""), #ifdef CONFIG_DM_I2C U_BOOT_CMD_MKENT(flags, 2, 1, do_i2c_flags, "", ""),
- U_BOOT_CMD_MKENT(olen, 2, 1, do_i2c_olen, "", ""), #endif U_BOOT_CMD_MKENT(reset, 0, 1, do_i2c_reset, "", ""), #if defined(CONFIG_CMD_SDRAM)
@@ -1971,6 +2003,7 @@ static char i2c_help_text[] = " to I2C; the -s option selects bulk write in a single transaction\n" #ifdef CONFIG_DM_I2C "i2c flags chip [flags] - set or get chip flags\n"
- "i2c olen chip [offset_length] - set or get chip offset length\n" #endif "i2c reset - re-init the I2C Controller\n" #if defined(CONFIG_CMD_SDRAM)