|
@@ -561,6 +561,12 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
|
|
|
|
|
|
ret = -EINVAL;
|
|
|
for (i = 0; i < num; i++) {
|
|
|
+ /* This HW can't send STOP after address phase */
|
|
|
+ if (msgs[i].len == 0) {
|
|
|
+ ret = -EOPNOTSUPP;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
/*-------------- spin lock -----------------*/
|
|
|
spin_lock_irqsave(&priv->lock, flags);
|
|
|
|
|
@@ -625,7 +631,8 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
|
|
|
|
|
|
static u32 rcar_i2c_func(struct i2c_adapter *adap)
|
|
|
{
|
|
|
- return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
|
|
|
+ /* This HW can't do SMBUS_QUICK and NOSTART */
|
|
|
+ return I2C_FUNC_I2C | (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK);
|
|
|
}
|
|
|
|
|
|
static const struct i2c_algorithm rcar_i2c_algo = {
|