i2c: designware-master: use core to detect 'no zero length' quirk
authorWolfram Sang <wsa+renesas@sang-engineering.com>
Mon, 23 Jul 2018 20:26:06 +0000 (22:26 +0200)
committerWolfram Sang <wsa@the-dreams.de>
Sat, 4 Aug 2018 21:24:50 +0000 (23:24 +0200)
And don't reimplement in the driver.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Tested-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/busses/i2c-designware-master.c

index fc7c255c80afa37313e9d4b397aaee3ffcf8dc7f..a1717bff06a82092c1c4d11129e5d03a989f28fb 100644 (file)
@@ -274,13 +274,6 @@ i2c_dw_xfer_msg(struct dw_i2c_dev *dev)
                        break;
                }
 
-               if (msgs[dev->msg_write_idx].len == 0) {
-                       dev_err(dev->dev,
-                               "%s: invalid message length\n", __func__);
-                       dev->msg_err = -EINVAL;
-                       break;
-               }
-
                if (!(dev->status & STATUS_WRITE_IN_PROGRESS)) {
                        /* new i2c_msg */
                        buf = msgs[dev->msg_write_idx].buf;
@@ -523,6 +516,10 @@ static const struct i2c_algorithm i2c_dw_algo = {
        .functionality = i2c_dw_func,
 };
 
+static const struct i2c_adapter_quirks i2c_dw_quirks = {
+       .flags = I2C_AQ_NO_ZERO_LEN,
+};
+
 static u32 i2c_dw_read_clear_intrbits(struct dw_i2c_dev *dev)
 {
        u32 stat;
@@ -718,6 +715,7 @@ int i2c_dw_probe(struct dw_i2c_dev *dev)
                 "Synopsys DesignWare I2C adapter");
        adap->retries = 3;
        adap->algo = &i2c_dw_algo;
+       adap->quirks = &i2c_dw_quirks;
        adap->dev.parent = dev->dev;
        i2c_set_adapdata(adap, dev);