i2c-algo-bit: Complain about masters which can't read SCL

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 <khali@linux-fr.org>

authored by Jean Delvare and committed by Jean Delvare af5a60ba f451171c

+12 -2
+12 -2
drivers/i2c/algos/i2c-algo-bit.c
··· 604 int (*add_adapter)(struct i2c_adapter *)) 605 { 606 struct i2c_algo_bit_data *bit_adap = adap->algo_data; 607 608 if (bit_test) { 609 - int ret = test_bus(bit_adap, adap->name); 610 if (ret < 0) 611 return -ENODEV; 612 } ··· 616 adap->algo = &i2c_bit_algo; 617 adap->retries = 3; 618 619 - return add_adapter(adap); 620 } 621 622 int i2c_bit_add_bus(struct i2c_adapter *adap)
··· 604 int (*add_adapter)(struct i2c_adapter *)) 605 { 606 struct i2c_algo_bit_data *bit_adap = adap->algo_data; 607 + int ret; 608 609 if (bit_test) { 610 + ret = test_bus(bit_adap, adap->name); 611 if (ret < 0) 612 return -ENODEV; 613 } ··· 615 adap->algo = &i2c_bit_algo; 616 adap->retries = 3; 617 618 + ret = add_adapter(adap); 619 + if (ret < 0) 620 + return ret; 621 + 622 + /* Complain if SCL can't be read */ 623 + if (bit_adap->getscl == NULL) { 624 + dev_warn(&adap->dev, "Not I2C compliant: can't read SCL\n"); 625 + dev_warn(&adap->dev, "Bus may be unreliable\n"); 626 + } 627 + return 0; 628 } 629 630 int i2c_bit_add_bus(struct i2c_adapter *adap)