hwmon: Let w83781d and lm78 load again
authorJean Delvare <khali@linux-fr.org>
Fri, 13 Oct 2006 14:56:28 +0000 (16:56 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 18 Oct 2006 20:03:09 +0000 (13:03 -0700)
Let the w83781d and lm78 hardware monitoring drivers load even when
no chip was detected at the ISA address. There can still be supported
chips connected to an I2C bus or SMBus.

This fixes bug #7293.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/hwmon/lm78.c
drivers/hwmon/w83781d.c
drivers/i2c/busses/i2c-isa.c

index ac1b746df6d0ad765b97bcb2fd77cb5bb99dabcb..73bc2ffc598d2cabf66664f34b43b9f9dbb2d9ce 100644 (file)
@@ -815,18 +815,18 @@ static int __init sm_lm78_init(void)
        if (res)
                return res;
 
-       res = i2c_isa_add_driver(&lm78_isa_driver);
-       if (res) {
-               i2c_del_driver(&lm78_driver);
-               return res;
-       }
+       /* Don't exit if this one fails, we still want the I2C variants
+          to work! */
+       if (i2c_isa_add_driver(&lm78_isa_driver))
+               isa_address = 0;
 
        return 0;
 }
 
 static void __exit sm_lm78_exit(void)
 {
-       i2c_isa_del_driver(&lm78_isa_driver);
+       if (isa_address)
+               i2c_isa_del_driver(&lm78_isa_driver);
        i2c_del_driver(&lm78_driver);
 }
 
index a4584ec69842fba9910d234fc6c80bb58b2a357f..fea92061f863d0a2dbb0853284f265b282f6647c 100644 (file)
@@ -1685,11 +1685,10 @@ sensors_w83781d_init(void)
        if (res)
                return res;
 
-       res = i2c_isa_add_driver(&w83781d_isa_driver);
-       if (res) {
-               i2c_del_driver(&w83781d_driver);
-               return res;
-       }
+       /* Don't exit if this one fails, we still want the I2C variants
+          to work! */
+       if (i2c_isa_add_driver(&w83781d_isa_driver))
+               isa_address = 0;
 
        return 0;
 }
@@ -1697,7 +1696,8 @@ sensors_w83781d_init(void)
 static void __exit
 sensors_w83781d_exit(void)
 {
-       i2c_isa_del_driver(&w83781d_isa_driver);
+       if (isa_address)
+               i2c_isa_del_driver(&w83781d_isa_driver);
        i2c_del_driver(&w83781d_driver);
 }
 
index 4380653748a4c155065bb057148f91e1e1b7eddd..8ed59a2dff532124afc6e899f1df3d6a4622f106 100644 (file)
@@ -91,7 +91,7 @@ int i2c_isa_add_driver(struct i2c_driver *driver)
        /* Now look for clients */
        res = driver->attach_adapter(&isa_adapter);
        if (res) {
-               dev_err(&isa_adapter.dev,
+               dev_dbg(&isa_adapter.dev,
                        "Driver %s failed to attach adapter, unregistering\n",
                        driver->driver.name);
                driver_unregister(&driver->driver);