Ver código fonte

i2c: designware-master: use core to detect 'no zero length' quirk

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>
Wolfram Sang 7 anos atrás
pai
commit
40fce52170
1 arquivos alterados com 5 adições e 7 exclusões
  1. 5 7
      drivers/i2c/busses/i2c-designware-master.c

+ 5 - 7
drivers/i2c/busses/i2c-designware-master.c

@@ -274,13 +274,6 @@ i2c_dw_xfer_msg(struct dw_i2c_dev *dev)
 			break;
 			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)) {
 		if (!(dev->status & STATUS_WRITE_IN_PROGRESS)) {
 			/* new i2c_msg */
 			/* new i2c_msg */
 			buf = msgs[dev->msg_write_idx].buf;
 			buf = msgs[dev->msg_write_idx].buf;
@@ -523,6 +516,10 @@ static const struct i2c_algorithm i2c_dw_algo = {
 	.functionality = i2c_dw_func,
 	.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)
 static u32 i2c_dw_read_clear_intrbits(struct dw_i2c_dev *dev)
 {
 {
 	u32 stat;
 	u32 stat;
@@ -718,6 +715,7 @@ int i2c_dw_probe(struct dw_i2c_dev *dev)
 		 "Synopsys DesignWare I2C adapter");
 		 "Synopsys DesignWare I2C adapter");
 	adap->retries = 3;
 	adap->retries = 3;
 	adap->algo = &i2c_dw_algo;
 	adap->algo = &i2c_dw_algo;
+	adap->quirks = &i2c_dw_quirks;
 	adap->dev.parent = dev->dev;
 	adap->dev.parent = dev->dev;
 	i2c_set_adapdata(adap, dev);
 	i2c_set_adapdata(adap, dev);