Skip to content

Commit

Permalink
i2c-algo-bit: Complain about masters which can't read SCL
Browse files Browse the repository at this point in the history
The I2C specification explicitly describes both SDA and SCL as
bidirectional lines. An I2C master with a read-only SCL is thus not
compliant. If a slow slave stretches the clock, errors will happen,
so the bus can't be considered as reliable.

Signed-off-by: Jean Delvare <[email protected]>
  • Loading branch information
Jean Delvare authored and Jean Delvare committed Jan 10, 2011
1 parent f451171 commit af5a60b
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions drivers/i2c/algos/i2c-algo-bit.c
Original file line number Diff line number Diff line change
Expand Up @@ -604,9 +604,10 @@ static int __i2c_bit_add_bus(struct i2c_adapter *adap,
int (*add_adapter)(struct i2c_adapter *))
{
struct i2c_algo_bit_data *bit_adap = adap->algo_data;
int ret;

if (bit_test) {
int ret = test_bus(bit_adap, adap->name);
ret = test_bus(bit_adap, adap->name);
if (ret < 0)
return -ENODEV;
}
Expand All @@ -615,7 +616,16 @@ static int __i2c_bit_add_bus(struct i2c_adapter *adap,
adap->algo = &i2c_bit_algo;
adap->retries = 3;

return add_adapter(adap);
ret = add_adapter(adap);
if (ret < 0)
return ret;

/* Complain if SCL can't be read */
if (bit_adap->getscl == NULL) {
dev_warn(&adap->dev, "Not I2C compliant: can't read SCL\n");
dev_warn(&adap->dev, "Bus may be unreliable\n");
}
return 0;
}

int i2c_bit_add_bus(struct i2c_adapter *adap)
Expand Down

0 comments on commit af5a60b

Please sign in to comment.