|
@@ -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);
|
|
|
|