Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=69f2f96d9c189070ed5e40ec186b755ef697288d
Commit:     69f2f96d9c189070ed5e40ec186b755ef697288d
Parent:     dabf375b87407757ec4c8ea54f936918ec88b7ca
Author:     Jean Delvare <[EMAIL PROTECTED]>
AuthorDate: Wed Sep 5 14:15:37 2007 +0200
Committer:  Mark M. Hoffman <[EMAIL PROTECTED]>
CommitDate: Tue Oct 9 22:56:31 2007 -0400

    hwmon: (lm90) Export temperature offset values
    
    Now that we have standard sysfs names to export temperature offset
    values, add this feature to the lm90 driver. All supported chips
    except the MAX6657, MAX6658 and MAX6659 support it.
    
    Signed-off-by: Jean Delvare <[EMAIL PROTECTED]>
    Acked-by: Hans de Goede <[EMAIL PROTECTED]>
    Signed-off-by: Mark M. Hoffman <[EMAIL PROTECTED]>
---
 drivers/hwmon/lm90.c |   29 +++++++++++++++++++++++++----
 1 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
index 98b53b1..960df9f 100644
--- a/drivers/hwmon/lm90.c
+++ b/drivers/hwmon/lm90.c
@@ -41,7 +41,8 @@
  *   http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2578
  * Note that there is no easy way to differentiate between the three
  * variants. The extra address and features of the MAX6659 are not
- * supported by this driver.
+ * supported by this driver. These chips lack the remote temperature
+ * offset feature.
  *
  * This driver also supports the MAX6680 and MAX6681, two other sensor
  * chips made by Maxim. These are quite similar to the other Maxim
@@ -226,9 +227,10 @@ struct lm90_data {
                           2: local high limit
                           3: local critical limit
                           4: remote critical limit */
-       s16 temp11[3];  /* 0: remote input
+       s16 temp11[4];  /* 0: remote input
                           1: remote low limit
-                          2: remote high limit */
+                          2: remote high limit
+                          3: remote offset (except max6657) */
        u8 temp_hyst;
        u8 alarms; /* bitvector */
 };
@@ -282,11 +284,13 @@ static ssize_t show_temp11(struct device *dev, struct 
device_attribute *devattr,
 static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr,
                          const char *buf, size_t count)
 {
-       static const u8 reg[4] = {
+       static const u8 reg[6] = {
                LM90_REG_W_REMOTE_LOWH,
                LM90_REG_W_REMOTE_LOWL,
                LM90_REG_W_REMOTE_HIGHH,
                LM90_REG_W_REMOTE_HIGHL,
+               LM90_REG_W_REMOTE_OFFSH,
+               LM90_REG_W_REMOTE_OFFSL,
        };
 
        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
@@ -367,6 +371,8 @@ static SENSOR_DEVICE_ATTR(temp2_crit, S_IWUSR | S_IRUGO, 
show_temp8,
 static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, show_temphyst,
        set_temphyst, 3);
 static SENSOR_DEVICE_ATTR(temp2_crit_hyst, S_IRUGO, show_temphyst, NULL, 4);
+static SENSOR_DEVICE_ATTR(temp2_offset, S_IWUSR | S_IRUGO, show_temp11,
+       set_temp11, 3);
 
 /* Individual alarm files */
 static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 0);
@@ -652,6 +658,11 @@ static int lm90_detect(struct i2c_adapter *adapter, int 
address, int kind)
                                              &dev_attr_pec)))
                        goto exit_remove_files;
        }
+       if (data->kind != max6657) {
+               if ((err = device_create_file(&new_client->dev,
+                               &sensor_dev_attr_temp2_offset.dev_attr)))
+                       goto exit_remove_files;
+       }
 
        data->hwmon_dev = hwmon_device_register(&new_client->dev);
        if (IS_ERR(data->hwmon_dev)) {
@@ -710,6 +721,9 @@ static int lm90_detach_client(struct i2c_client *client)
        hwmon_device_unregister(data->hwmon_dev);
        sysfs_remove_group(&client->dev.kobj, &lm90_group);
        device_remove_file(&client->dev, &dev_attr_pec);
+       if (data->kind != max6657)
+               device_remove_file(&client->dev,
+                                  &sensor_dev_attr_temp2_offset.dev_attr);
 
        if ((err = i2c_detach_client(client)))
                return err;
@@ -763,6 +777,13 @@ static struct lm90_data *lm90_update_device(struct device 
*dev)
                if (lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHH, &newh) == 0
                 && lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHL, &l) == 0)
                        data->temp11[2] = (newh << 8) | l;
+               if (data->kind != max6657) {
+                       if (lm90_read_reg(client, LM90_REG_R_REMOTE_OFFSH,
+                                         &newh) == 0
+                        && lm90_read_reg(client, LM90_REG_R_REMOTE_OFFSL,
+                                         &l) == 0)
+                               data->temp11[3] = (newh << 8) | l;
+               }
                lm90_read_reg(client, LM90_REG_R_STATUS, &data->alarms);
 
                data->last_updated = jiffies;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to