]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
dm: i2c: Provide an offset length parameter where needed
authorSimon Glass <sjg@chromium.org>
Sun, 25 Jan 2015 15:26:55 +0000 (08:26 -0700)
committerSimon Glass <sjg@chromium.org>
Fri, 30 Jan 2015 00:09:53 +0000 (17:09 -0700)
Rather than assuming that the chip offset length is 1, allow it to be
provided. This allows chips that don't use the default offset length to
be used (at present they are only supported by the command line 'i2c'
command which sets the offset length explicitly).

Signed-off-by: Simon Glass <sjg@chromium.org>
Acked-by: Heiko Schocher <hs@denx.de>
12 files changed:
arch/arm/cpu/tegra20-common/pmu.c
board/avionic-design/common/tamonten-ng.c
board/nvidia/cardhu/cardhu.c
board/nvidia/dalmore/dalmore.c
board/nvidia/whistler/whistler.c
board/toradex/apalis_t30/apalis_t30.c
common/cmd_i2c.c
drivers/i2c/i2c-uclass.c
drivers/i2c/sandbox_i2c.c
drivers/power/as3722.c
include/i2c.h
test/dm/i2c.c

index 36a76a24d971e7d012570cc7ad7e3c16a2a1a4f5..a774246a2779435b47376b4f7e2cb093a59a991d 100644 (file)
@@ -52,7 +52,7 @@ int pmu_set_nominal(void)
                debug("%s: Cannot find DVC I2C bus\n", __func__);
                return ret;
        }
-       ret = i2c_get_chip(bus, PMI_I2C_ADDRESS, &dev);
+       ret = i2c_get_chip(bus, PMI_I2C_ADDRESS, 1, &dev);
        if (ret) {
                debug("%s: Cannot find DVC I2C chip\n", __func__);
                return ret;
index bca91831e0ef487db30241b01854a9c9de7321ab..1704627112642027a42bf1f8f13bfd8436808d09 100644 (file)
@@ -55,7 +55,7 @@ void pmu_write(uchar reg, uchar data)
        struct udevice *dev;
        int ret;
 
-       ret = i2c_get_chip_for_busnum(4, PMU_I2C_ADDRESS, &dev);
+       ret = i2c_get_chip_for_busnum(4, PMU_I2C_ADDRESS, 1, &dev);
        if (ret) {
                debug("%s: Cannot find PMIC I2C chip\n", __func__);
                return;
index fc31d29140b474950195b4b11db1ee0a9dcb8b0d..1540526a61348eb1959a6f6864b135c648adcbd6 100644 (file)
@@ -46,7 +46,7 @@ void board_sdmmc_voltage_init(void)
        int ret;
        int i;
 
-       ret = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, &dev);
+       ret = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, 1, &dev);
        if (ret) {
                debug("%s: Cannot find PMIC I2C chip\n", __func__);
                return;
@@ -94,7 +94,7 @@ int tegra_pcie_board_init(void)
        u8 addr, data[1];
        int err;
 
-       err = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, &dev);
+       err = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, 1, &dev);
        if (err) {
                debug("failed to find PMU bus\n");
                return err;
index c0991c57a97d6dfddb8ba6705c73138d02eb1797..d7c1a695ff804562459791b2dd28d67d64609300 100644 (file)
@@ -55,7 +55,7 @@ void board_sdmmc_voltage_init(void)
        uchar reg, data_buffer[1];
        int ret;
 
-       ret = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, &dev);
+       ret = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, 1, &dev);
        if (ret) {
                debug("%s: Cannot find PMIC I2C chip\n", __func__);
                return;
@@ -83,7 +83,7 @@ void board_sdmmc_voltage_init(void)
        data_buffer[0] = 0x03;
        reg = 0x14;
 
-       ret = i2c_get_chip_for_busnum(0, BAT_I2C_ADDRESS, &dev);
+       ret = i2c_get_chip_for_busnum(0, BAT_I2C_ADDRESS, 1, &dev);
        if (ret) {
                debug("%s: Cannot find charger I2C chip\n", __func__);
                return;
index ad6ea091df7c6bf130dea49f47bebd4a623f7e15..3476f1159feadc70ca214bb72af914143ef15153 100644 (file)
@@ -27,7 +27,7 @@ void pin_mux_mmc(void)
        int ret;
 
        /* Turn on MAX8907B LDO12 to 2.8V for J40 power */
-       ret = i2c_get_chip_for_busnum(0, 0x3c, &dev);
+       ret = i2c_get_chip_for_busnum(0, 0x3c, 1, &dev);
        if (ret) {
                printf("%s: Cannot find MAX8907B I2C chip\n", __func__);
                return;
@@ -64,7 +64,7 @@ void pin_mux_usb(void)
         */
 
        /* Turn on TAC6416's GPIO 0+1 for USB1/3's VBUS */
-       ret = i2c_get_chip_for_busnum(0, 0x20, &dev);
+       ret = i2c_get_chip_for_busnum(0, 0x20, 1, &dev);
        if (ret) {
                printf("%s: Cannot find TAC6416 I2C chip\n", __func__);
                return;
index 1c4b4c1cd487ab684d5c6b99d742865425914af2..624421496a408fe72128bdf31083ab249559da8f 100644 (file)
@@ -42,7 +42,7 @@ int tegra_pcie_board_init(void)
        u8 addr, data[1];
        int err;
 
-       err = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, &dev);
+       err = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, 1, &dev);
        if (err) {
                debug("%s: Cannot find PMIC I2C chip\n", __func__);
                return err;
index 1e500fbf2cc66b68d7746b9b8d53f7fbe823071d..7c3ad00fdf03f30ee358cf4501717d6e657e5d18 100644 (file)
@@ -168,7 +168,7 @@ static int i2c_get_cur_bus_chip(uint chip_addr, struct udevice **devp)
        if (ret)
                return ret;
 
-       return i2c_get_chip(bus, chip_addr, devp);
+       return i2c_get_chip(bus, chip_addr, 1, devp);
 }
 
 #endif
index 25f2c18cf4f235dc0f74b28c27efb5c02fa1c02e..24e5ec68f2b4207d22ebaeb20a9e7e99d112d838 100644 (file)
@@ -220,7 +220,7 @@ static int i2c_probe_chip(struct udevice *bus, uint chip_addr,
        return ops->xfer(bus, msg, 1);
 }
 
-static int i2c_bind_driver(struct udevice *bus, uint chip_addr,
+static int i2c_bind_driver(struct udevice *bus, uint chip_addr, uint offset_len,
                           struct udevice **devp)
 {
        struct dm_i2c_chip chip;
@@ -238,7 +238,7 @@ static int i2c_bind_driver(struct udevice *bus, uint chip_addr,
        /* Tell the device what we know about it */
        memset(&chip, '\0', sizeof(chip));
        chip.chip_addr = chip_addr;
-       chip.offset_len = 1;    /* we assume */
+       chip.offset_len = offset_len;
        ret = device_probe_child(dev, &chip);
        debug("%s:  device_probe_child: ret=%d\n", __func__, ret);
        if (ret)
@@ -254,7 +254,8 @@ err_bind:
        return ret;
 }
 
-int i2c_get_chip(struct udevice *bus, uint chip_addr, struct udevice **devp)
+int i2c_get_chip(struct udevice *bus, uint chip_addr, uint offset_len,
+                struct udevice **devp)
 {
        struct udevice *dev;
 
@@ -281,10 +282,11 @@ int i2c_get_chip(struct udevice *bus, uint chip_addr, struct udevice **devp)
                }
        }
        debug("not found\n");
-       return i2c_bind_driver(bus, chip_addr, devp);
+       return i2c_bind_driver(bus, chip_addr, offset_len, devp);
 }
 
-int i2c_get_chip_for_busnum(int busnum, int chip_addr, struct udevice **devp)
+int i2c_get_chip_for_busnum(int busnum, int chip_addr, uint offset_len,
+                           struct udevice **devp)
 {
        struct udevice *bus;
        int ret;
@@ -294,7 +296,7 @@ int i2c_get_chip_for_busnum(int busnum, int chip_addr, struct udevice **devp)
                debug("Cannot find I2C bus %d\n", busnum);
                return ret;
        }
-       ret = i2c_get_chip(bus, chip_addr, devp);
+       ret = i2c_get_chip(bus, chip_addr, offset_len, devp);
        if (ret) {
                debug("Cannot find I2C chip %02x on bus %d\n", chip_addr,
                      busnum);
@@ -319,7 +321,7 @@ int dm_i2c_probe(struct udevice *bus, uint chip_addr, uint chip_flags,
                return ret;
 
        /* The chip was found, see if we have a driver, and probe it */
-       ret = i2c_get_chip(bus, chip_addr, devp);
+       ret = i2c_get_chip(bus, chip_addr, 1, devp);
        debug("%s:  i2c_get_chip: ret=%d\n", __func__, ret);
 
        return ret;
index f0e9f51a1f28fda9822e765a5821b095f6badfef..e2f6c3b9bb50b790d57073fe0e4416def84081d5 100644 (file)
@@ -60,7 +60,7 @@ static int sandbox_i2c_xfer(struct udevice *bus, struct i2c_msg *msg,
        if (msg->addr == SANDBOX_I2C_TEST_ADDR)
                return 0;
 
-       ret = i2c_get_chip(bus, msg->addr, &dev);
+       ret = i2c_get_chip(bus, msg->addr, 1, &dev);
        if (ret)
                return ret;
 
index 3aafdc96704a070c5c9ac49d7e9139626d92af68..a60bb5f83fbc5cda5a5533b3893f85e47d450c0a 100644 (file)
@@ -242,7 +242,7 @@ int as3722_init(struct udevice **devp)
        const unsigned int address = 0x40;
        int err;
 
-       err = i2c_get_chip_for_busnum(bus, address, &pmic);
+       err = i2c_get_chip_for_busnum(bus, address, 1, &pmic);
        if (err)
                return err;
        err = as3722_read_id(pmic, &id, &revision);
index 47529f4b283fe1b1c73157148cb615480f46f15a..76090b7a93ac5d0c92f9a3fbf09936ef1f012fe0 100644 (file)
@@ -388,10 +388,12 @@ struct dm_i2c_ops {
  *
  * @bus:       Bus to examine
  * @chip_addr: Chip address for the new device
+ * @offset_len:        Length of a register offset in bytes (normally 1)
  * @devp:      Returns pointer to new device if found or -ENODEV if not
  *             found
  */
-int i2c_get_chip(struct udevice *bus, uint chip_addr, struct udevice **devp);
+int i2c_get_chip(struct udevice *bus, uint chip_addr, uint offset_len,
+                struct udevice **devp);
 
 /**
  * i2c_get_chip() - get a device to use to access a chip on a bus number
@@ -401,10 +403,12 @@ int i2c_get_chip(struct udevice *bus, uint chip_addr, struct udevice **devp);
  *
  * @busnum:    Bus number to examine
  * @chip_addr: Chip address for the new device
+ * @offset_len:        Length of a register offset in bytes (normally 1)
  * @devp:      Returns pointer to new device if found or -ENODEV if not
  *             found
  */
-int i2c_get_chip_for_busnum(int busnum, int chip_addr, struct udevice **devp);
+int i2c_get_chip_for_busnum(int busnum, int chip_addr, uint offset_len,
+                           struct udevice **devp);
 
 /**
  * i2c_chip_ofdata_to_platdata() - Decode standard I2C platform data
index 4823b0c6483655c4cd112e736f08c25965b49d32..ef88372d56361ab40186a34787cc6c7a8e0c40d4 100644 (file)
@@ -49,7 +49,7 @@ static int dm_test_i2c_read_write(struct dm_test_state *dms)
        uint8_t buf[5];
 
        ut_assertok(uclass_get_device_by_seq(UCLASS_I2C, busnum, &bus));
-       ut_assertok(i2c_get_chip(bus, chip, &dev));
+       ut_assertok(i2c_get_chip(bus, chip, 1, &dev));
        ut_assertok(dm_i2c_read(dev, 0, buf, 5));
        ut_assertok(memcmp(buf, "\0\0\0\0\0", sizeof(buf)));
        ut_assertok(dm_i2c_write(dev, 2, (uint8_t *)"AB", 2));
@@ -66,7 +66,7 @@ static int dm_test_i2c_speed(struct dm_test_state *dms)
        uint8_t buf[5];
 
        ut_assertok(uclass_get_device_by_seq(UCLASS_I2C, busnum, &bus));
-       ut_assertok(i2c_get_chip(bus, chip, &dev));
+       ut_assertok(i2c_get_chip(bus, chip, 1, &dev));
        ut_assertok(i2c_set_bus_speed(bus, 100000));
        ut_assertok(dm_i2c_read(dev, 0, buf, 5));
        ut_assertok(i2c_set_bus_speed(bus, 400000));
@@ -84,7 +84,7 @@ static int dm_test_i2c_offset_len(struct dm_test_state *dms)
        uint8_t buf[5];
 
        ut_assertok(uclass_get_device_by_seq(UCLASS_I2C, busnum, &bus));
-       ut_assertok(i2c_get_chip(bus, chip, &dev));
+       ut_assertok(i2c_get_chip(bus, chip, 1, &dev));
        ut_assertok(i2c_set_chip_offset_len(dev, 1));
        ut_assertok(dm_i2c_read(dev, 0, buf, 5));
 
@@ -113,7 +113,7 @@ static int dm_test_i2c_bytewise(struct dm_test_state *dms)
        uint8_t buf[5];
 
        ut_assertok(uclass_get_device_by_seq(UCLASS_I2C, busnum, &bus));
-       ut_assertok(i2c_get_chip(bus, chip, &dev));
+       ut_assertok(i2c_get_chip(bus, chip, 1, &dev));
        ut_assertok(dm_i2c_read(dev, 0, buf, 5));
        ut_assertok(memcmp(buf, "\0\0\0\0\0", sizeof(buf)));
 
@@ -167,7 +167,7 @@ static int dm_test_i2c_offset(struct dm_test_state *dms)
        struct udevice *dev;
        uint8_t buf[5];
 
-       ut_assertok(i2c_get_chip_for_busnum(busnum, chip, &dev));
+       ut_assertok(i2c_get_chip_for_busnum(busnum, chip, 1, &dev));
 
        /* Do a transfer so we can find the emulator */
        ut_assertok(dm_i2c_read(dev, 0, buf, 5));