[PATCH] i2c: Adjust i2c_probe() for busses without SMBUS_QUICK
authorJean Delvare <khali@linux-fr.org>
Sun, 25 Sep 2005 14:50:06 +0000 (16:50 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 28 Oct 2005 21:02:07 +0000 (14:02 -0700)
Move the check for SMBUS_QUICK in i2c_probe() after the forced
addresses have been handled. This makes it possible for a driver to
leave the probed address lists empty, only providing forced addresses,
and get i2c_probe to work even if the bus doesn't support SMBUS_QUICK.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
 drivers/i2c/i2c-core.c |   15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

drivers/i2c/i2c-core.c

index 45aa0e5..b55097d 100644 (file)
@@ -706,10 +706,6 @@ int i2c_probe(struct i2c_adapter *adapter,
        int i, err;
        int adap_id = i2c_adapter_id(adapter);
 
-       /* Forget it if we can't probe using SMBUS_QUICK */
-       if (! i2c_check_functionality(adapter,I2C_FUNC_SMBUS_QUICK))
-               return -1;
-
        /* Force entries are done first, and are not affected by ignore
           entries */
        if (address_data->forces) {
@@ -736,6 +732,17 @@ int i2c_probe(struct i2c_adapter *adapter,
                }
        }
 
+       /* Stop here if we can't use SMBUS_QUICK */
+       if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_QUICK)) {
+               if (address_data->probe[0] == I2C_CLIENT_END
+                && address_data->normal_i2c[0] == I2C_CLIENT_END)
+                       return 0;
+
+               dev_warn(&adapter->dev, "SMBus Quick command not supported, "
+                        "can't probe for chips\n");
+               return -1;
+       }
+
        /* Probe entries are done second, and are not affected by ignore
           entries either */
        for (i = 0; address_data->probe[i] != I2C_CLIENT_END; i += 2) {