diff options
Diffstat (limited to 'drivers/i2c/algos')
-rw-r--r-- | drivers/i2c/algos/Kconfig | 14 | ||||
-rw-r--r-- | drivers/i2c/algos/i2c-algo-bit.c | 31 |
2 files changed, 16 insertions, 29 deletions
diff --git a/drivers/i2c/algos/Kconfig b/drivers/i2c/algos/Kconfig index 3998dd620a03..f1cfe7e5508b 100644 --- a/drivers/i2c/algos/Kconfig +++ b/drivers/i2c/algos/Kconfig | |||
@@ -3,7 +3,7 @@ | |||
3 | # | 3 | # |
4 | 4 | ||
5 | menu "I2C Algorithms" | 5 | menu "I2C Algorithms" |
6 | depends on !I2C_HELPER_AUTO | 6 | visible if !I2C_HELPER_AUTO |
7 | 7 | ||
8 | config I2C_ALGOBIT | 8 | config I2C_ALGOBIT |
9 | tristate "I2C bit-banging interfaces" | 9 | tristate "I2C bit-banging interfaces" |
@@ -15,15 +15,3 @@ config I2C_ALGOPCA | |||
15 | tristate "I2C PCA 9564 interfaces" | 15 | tristate "I2C PCA 9564 interfaces" |
16 | 16 | ||
17 | endmenu | 17 | endmenu |
18 | |||
19 | # In automatic configuration mode, we still have to define the | ||
20 | # symbols to avoid unmet dependencies. | ||
21 | |||
22 | if I2C_HELPER_AUTO | ||
23 | config I2C_ALGOBIT | ||
24 | tristate | ||
25 | config I2C_ALGOPCF | ||
26 | tristate | ||
27 | config I2C_ALGOPCA | ||
28 | tristate | ||
29 | endif | ||
diff --git a/drivers/i2c/algos/i2c-algo-bit.c b/drivers/i2c/algos/i2c-algo-bit.c index a39e6cff86e7..38319a69bd0a 100644 --- a/drivers/i2c/algos/i2c-algo-bit.c +++ b/drivers/i2c/algos/i2c-algo-bit.c | |||
@@ -600,12 +600,14 @@ static const struct i2c_algorithm i2c_bit_algo = { | |||
600 | /* | 600 | /* |
601 | * registering functions to load algorithms at runtime | 601 | * registering functions to load algorithms at runtime |
602 | */ | 602 | */ |
603 | static int i2c_bit_prepare_bus(struct i2c_adapter *adap) | 603 | static int __i2c_bit_add_bus(struct i2c_adapter *adap, |
604 | int (*add_adapter)(struct i2c_adapter *)) | ||
604 | { | 605 | { |
605 | struct i2c_algo_bit_data *bit_adap = adap->algo_data; | 606 | struct i2c_algo_bit_data *bit_adap = adap->algo_data; |
607 | int ret; | ||
606 | 608 | ||
607 | if (bit_test) { | 609 | if (bit_test) { |
608 | int ret = test_bus(bit_adap, adap->name); | 610 | ret = test_bus(bit_adap, adap->name); |
609 | if (ret < 0) | 611 | if (ret < 0) |
610 | return -ENODEV; | 612 | return -ENODEV; |
611 | } | 613 | } |
@@ -614,30 +616,27 @@ static int i2c_bit_prepare_bus(struct i2c_adapter *adap) | |||
614 | adap->algo = &i2c_bit_algo; | 616 | adap->algo = &i2c_bit_algo; |
615 | adap->retries = 3; | 617 | adap->retries = 3; |
616 | 618 | ||
619 | ret = add_adapter(adap); | ||
620 | if (ret < 0) | ||
621 | return ret; | ||
622 | |||
623 | /* Complain if SCL can't be read */ | ||
624 | if (bit_adap->getscl == NULL) { | ||
625 | dev_warn(&adap->dev, "Not I2C compliant: can't read SCL\n"); | ||
626 | dev_warn(&adap->dev, "Bus may be unreliable\n"); | ||
627 | } | ||
617 | return 0; | 628 | return 0; |
618 | } | 629 | } |
619 | 630 | ||
620 | int i2c_bit_add_bus(struct i2c_adapter *adap) | 631 | int i2c_bit_add_bus(struct i2c_adapter *adap) |
621 | { | 632 | { |
622 | int err; | 633 | return __i2c_bit_add_bus(adap, i2c_add_adapter); |
623 | |||
624 | err = i2c_bit_prepare_bus(adap); | ||
625 | if (err) | ||
626 | return err; | ||
627 | |||
628 | return i2c_add_adapter(adap); | ||
629 | } | 634 | } |
630 | EXPORT_SYMBOL(i2c_bit_add_bus); | 635 | EXPORT_SYMBOL(i2c_bit_add_bus); |
631 | 636 | ||
632 | int i2c_bit_add_numbered_bus(struct i2c_adapter *adap) | 637 | int i2c_bit_add_numbered_bus(struct i2c_adapter *adap) |
633 | { | 638 | { |
634 | int err; | 639 | return __i2c_bit_add_bus(adap, i2c_add_numbered_adapter); |
635 | |||
636 | err = i2c_bit_prepare_bus(adap); | ||
637 | if (err) | ||
638 | return err; | ||
639 | |||
640 | return i2c_add_numbered_adapter(adap); | ||
641 | } | 640 | } |
642 | EXPORT_SYMBOL(i2c_bit_add_numbered_bus); | 641 | EXPORT_SYMBOL(i2c_bit_add_numbered_bus); |
643 | 642 | ||