]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/hwmon/lm90.c
Merge ../linux-2.6
[linux-2.6-omap-h63xx.git] / drivers / hwmon / lm90.c
index fa0793e684fdba03bc29c461e47c62f5e6d96478..d9eeaf7585bd3be3d171ba2d8f33a3b9393564e3 100644 (file)
@@ -31,7 +31,7 @@
  * Devices. That chip is similar to the LM90, with a few differences
  * that are not handled by this driver. Complete datasheet can be
  * obtained from Analog's website at:
- *   http://products.analog.com/products/info.asp?product=ADM1032
+ *   http://www.analog.com/en/prod/0,2877,ADM1032,00.html
  * Among others, it has a higher accuracy than the LM90, much like the
  * LM86 does.
  *
@@ -49,7 +49,7 @@
  * register values are decoded differently) it is ignored by this
  * driver. Complete datasheet can be obtained from Analog's website
  * at:
- *   http://products.analog.com/products/info.asp?product=ADT7461
+ *   http://www.analog.com/en/prod/0,2877,ADT7461,00.html
  *
  * Since the LM90 was the first chipset supported by this driver, most
  * comments will refer to this chipset, but are actually general and
 #include <linux/hwmon-sysfs.h>
 #include <linux/hwmon.h>
 #include <linux/err.h>
+#include <linux/mutex.h>
 
 /*
  * Addresses to scan
  * Address is fully defined internally and cannot be changed except for
  * MAX6659.
- * LM86, LM89, LM90, LM99, ADM1032, MAX6657 and MAX6658 have address 0x4c.
- * LM89-1, and LM99-1 have address 0x4d.
+ * LM86, LM89, LM90, LM99, ADM1032, ADM1032-1, ADT7461, MAX6657 and MAX6658
+ * have address 0x4c.
+ * ADM1032-2, ADT7461-2, LM89-1, and LM99-1 have address 0x4d.
  * MAX6659 can have address 0x4c, 0x4d or 0x4e (unsupported).
- * ADT7461 always has address 0x4c.
  */
 
 static unsigned short normal_i2c[] = { 0x4c, 0x4d, I2C_CLIENT_END };
@@ -186,10 +187,10 @@ static struct lm90_data *lm90_update_device(struct device *dev);
  */
 
 static struct i2c_driver lm90_driver = {
-       .owner          = THIS_MODULE,
-       .name           = "lm90",
+       .driver = {
+               .name   = "lm90",
+       },
        .id             = I2C_DRIVERID_LM90,
-       .flags          = I2C_DF_NOTIFY,
        .attach_adapter = lm90_attach_adapter,
        .detach_client  = lm90_detach_client,
 };
@@ -201,7 +202,7 @@ static struct i2c_driver lm90_driver = {
 struct lm90_data {
        struct i2c_client client;
        struct class_device *class_dev;
-       struct semaphore update_lock;
+       struct mutex update_lock;
        char valid; /* zero until following fields are valid */
        unsigned long last_updated; /* in jiffies */
        int kind;
@@ -247,13 +248,13 @@ static ssize_t set_temp8(struct device *dev, struct device_attribute *devattr,
        long val = simple_strtol(buf, NULL, 10);
        int nr = attr->index;
 
-       down(&data->update_lock);
+       mutex_lock(&data->update_lock);
        if (data->kind == adt7461)
                data->temp8[nr] = TEMP1_TO_REG_ADT7461(val);
        else
                data->temp8[nr] = TEMP1_TO_REG(val);
        i2c_smbus_write_byte_data(client, reg[nr - 1], data->temp8[nr]);
-       up(&data->update_lock);
+       mutex_unlock(&data->update_lock);
        return count;
 }
 
@@ -281,7 +282,7 @@ static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr,
        long val = simple_strtol(buf, NULL, 10);
        int nr = attr->index;
 
-       down(&data->update_lock);
+       mutex_lock(&data->update_lock);
        if (data->kind == adt7461)
                data->temp11[nr] = TEMP2_TO_REG_ADT7461(val);
        else
@@ -290,7 +291,7 @@ static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr,
                                  data->temp11[nr] >> 8);
        i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2 + 1],
                                  data->temp11[nr] & 0xff);
-       up(&data->update_lock);
+       mutex_unlock(&data->update_lock);
        return count;
 }
 
@@ -311,11 +312,11 @@ static ssize_t set_temphyst(struct device *dev, struct device_attribute *dummy,
        long val = simple_strtol(buf, NULL, 10);
        long hyst;
 
-       down(&data->update_lock);
+       mutex_lock(&data->update_lock);
        hyst = TEMP1_FROM_REG(data->temp8[3]) - val;
        i2c_smbus_write_byte_data(client, LM90_REG_W_TCRIT_HYST,
                                  HYST_TO_REG(hyst));
-       up(&data->update_lock);
+       mutex_unlock(&data->update_lock);
        return count;
 }
 
@@ -500,14 +501,12 @@ static int lm90_detect(struct i2c_adapter *adapter, int address, int kind)
                        }
                } else
                if (man_id == 0x41) { /* Analog Devices */
-                       if (address == 0x4C
-                        && (chip_id & 0xF0) == 0x40 /* ADM1032 */
+                       if ((chip_id & 0xF0) == 0x40 /* ADM1032 */
                         && (reg_config1 & 0x3F) == 0x00
                         && reg_convrate <= 0x0A) {
                                kind = adm1032;
                        } else
-                       if (address == 0x4c
-                        && chip_id == 0x51 /* ADT7461 */
+                       if (chip_id == 0x51 /* ADT7461 */
                         && (reg_config1 & 0x1F) == 0x00 /* check compat mode */
                         && reg_convrate <= 0x0A) {
                                kind = adt7461;
@@ -560,7 +559,7 @@ static int lm90_detect(struct i2c_adapter *adapter, int address, int kind)
        strlcpy(new_client->name, name, I2C_NAME_SIZE);
        data->valid = 0;
        data->kind = kind;
-       init_MUTEX(&data->update_lock);
+       mutex_init(&data->update_lock);
 
        /* Tell the I2C layer a new client has arrived */
        if ((err = i2c_attach_client(new_client)))
@@ -648,7 +647,7 @@ static struct lm90_data *lm90_update_device(struct device *dev)
        struct i2c_client *client = to_i2c_client(dev);
        struct lm90_data *data = i2c_get_clientdata(client);
 
-       down(&data->update_lock);
+       mutex_lock(&data->update_lock);
 
        if (time_after(jiffies, data->last_updated + HZ * 2) || !data->valid) {
                u8 oldh, newh, l;
@@ -694,7 +693,7 @@ static struct lm90_data *lm90_update_device(struct device *dev)
                data->valid = 1;
        }
 
-       up(&data->update_lock);
+       mutex_unlock(&data->update_lock);
 
        return data;
 }