]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/hwmon/w83781d.c
Merge branches 'armv7', 'at91', 'misc' and 'omap' into devel
[linux-2.6-omap-h63xx.git] / drivers / hwmon / w83781d.c
index a4584ec69842fba9910d234fc6c80bb58b2a357f..a47da3ec5472e61eaab91f5c837df97f708502e0 100644 (file)
@@ -221,14 +221,8 @@ DIV_TO_REG(long val, enum chips type)
    a bit - except if there could be more than one SMBus. Groan. No solution
    for this yet. */
 
-/* This module may seem overly long and complicated. In fact, it is not so
-   bad. Quite a lot of bookkeeping is done. A real driver can often cut
-   some corners. */
-
-/* For each registered W83781D, we need to keep some data in memory. That
-   data is pointed to by w83781d_list[NR]->data. The structure itself is
-   dynamically allocated, at the same time when a new w83781d client is
-   allocated. */
+/* For each registered chip, we need to keep some data in memory.
+   The structure is dynamically allocated. */
 struct w83781d_data {
        struct i2c_client client;
        struct class_device *class_dev;
@@ -1099,7 +1093,8 @@ w83781d_detect(struct i2c_adapter *adapter, int address, int kind)
           bank. */
        if (kind < 0) {
                if (w83781d_read_value(client, W83781D_REG_CONFIG) & 0x80) {
-                       dev_dbg(dev, "Detection failed at step 3\n");
+                       dev_dbg(&adapter->dev, "Detection of w83781d chip "
+                               "failed at step 3\n");
                        err = -ENODEV;
                        goto ERROR2;
                }
@@ -1109,7 +1104,8 @@ w83781d_detect(struct i2c_adapter *adapter, int address, int kind)
                if ((!(val1 & 0x07)) &&
                    (((!(val1 & 0x80)) && (val2 != 0xa3) && (val2 != 0xc3))
                     || ((val1 & 0x80) && (val2 != 0x5c) && (val2 != 0x12)))) {
-                       dev_dbg(dev, "Detection failed at step 4\n");
+                       dev_dbg(&adapter->dev, "Detection of w83781d chip "
+                               "failed at step 4\n");
                        err = -ENODEV;
                        goto ERROR2;
                }
@@ -1119,7 +1115,8 @@ w83781d_detect(struct i2c_adapter *adapter, int address, int kind)
                                  ((val1 & 0x80) && (val2 == 0x5c)))) {
                        if (w83781d_read_value
                            (client, W83781D_REG_I2C_ADDR) != address) {
-                               dev_dbg(dev, "Detection failed at step 5\n");
+                               dev_dbg(&adapter->dev, "Detection of w83781d "
+                                       "chip failed at step 5\n");
                                err = -ENODEV;
                                goto ERROR2;
                        }
@@ -1141,8 +1138,8 @@ w83781d_detect(struct i2c_adapter *adapter, int address, int kind)
                else if (val2 == 0x12)
                        vendid = asus;
                else {
-                       dev_dbg(dev, "Chip was made by neither "
-                               "Winbond nor Asus?\n");
+                       dev_dbg(&adapter->dev, "w83781d chip vendor is "
+                               "neither Winbond nor Asus\n");
                        err = -ENODEV;
                        goto ERROR2;
                }
@@ -1161,10 +1158,9 @@ w83781d_detect(struct i2c_adapter *adapter, int address, int kind)
                        kind = as99127f;
                else {
                        if (kind == 0)
-                               dev_warn(dev, "Ignoring 'force' "
+                               dev_warn(&adapter->dev, "Ignoring 'force' "
                                         "parameter for unknown chip at "
-                                        "adapter %d, address 0x%02x\n",
-                                        i2c_adapter_id(adapter), address);
+                                        "address 0x%02x\n", address);
                        err = -EINVAL;
                        goto ERROR2;
                }
@@ -1685,11 +1681,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 +1692,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);
 }