|
@@ -613,11 +613,6 @@ static void sh_mobile_i2c_xfer_dma(struct sh_mobile_i2c_data *pd)
|
|
|
static int start_ch(struct sh_mobile_i2c_data *pd, struct i2c_msg *usr_msg,
|
|
|
bool do_init)
|
|
|
{
|
|
|
- if (usr_msg->len == 0 && (usr_msg->flags & I2C_M_RD)) {
|
|
|
- dev_err(pd->dev, "Unsupported zero length i2c read\n");
|
|
|
- return -EOPNOTSUPP;
|
|
|
- }
|
|
|
-
|
|
|
if (do_init) {
|
|
|
/* Initialize channel registers */
|
|
|
iic_wr(pd, ICCR, ICCR_SCP);
|
|
@@ -758,6 +753,10 @@ static const struct i2c_algorithm sh_mobile_i2c_algorithm = {
|
|
|
.master_xfer = sh_mobile_i2c_xfer,
|
|
|
};
|
|
|
|
|
|
+static const struct i2c_adapter_quirks sh_mobile_i2c_quirks = {
|
|
|
+ .flags = I2C_AQ_NO_ZERO_LEN_READ,
|
|
|
+};
|
|
|
+
|
|
|
/*
|
|
|
* r8a7740 chip has lasting errata on I2C I/O pad reset.
|
|
|
* this is work-around for it.
|
|
@@ -925,6 +924,7 @@ static int sh_mobile_i2c_probe(struct platform_device *dev)
|
|
|
|
|
|
adap->owner = THIS_MODULE;
|
|
|
adap->algo = &sh_mobile_i2c_algorithm;
|
|
|
+ adap->quirks = &sh_mobile_i2c_quirks;
|
|
|
adap->dev.parent = &dev->dev;
|
|
|
adap->retries = 5;
|
|
|
adap->nr = dev->id;
|