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 604 int (*add_adapter)(struct i2c_adapter *)) 605 605 { 606 606 struct i2c_algo_bit_data *bit_adap = adap->algo_data; 607 + int ret; 607 608 608 609 if (bit_test) { 609 - int ret = test_bus(bit_adap, adap->name); 610 + ret = test_bus(bit_adap, adap->name); 610 611 if (ret < 0) 611 612 return -ENODEV; 612 613 } ··· 616 615 adap->algo = &i2c_bit_algo; 617 616 adap->retries = 3; 618 617 619 - return add_adapter(adap); 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; 620 628 } 621 629 622 630 int i2c_bit_add_bus(struct i2c_adapter *adap)