From: Jeff Angielski <jeff@theptrgroup.com>
To: Andre Prendel <andre.prendel@gmx.de>
Cc: Jean Delvare <khali@linux-fr.org>,
linuxppc-dev@lists.ozlabs.org, lm-sensors@lm-sensors.org
Subject: Re: [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd
Date: Wed, 19 May 2010 17:13:04 +0000 [thread overview]
Message-ID: <4BF41C20.60502@theptrgroup.com> (raw)
In-Reply-To: <20100519072659.GA2069@andre-laptop>
On 05/19/2010 03:26 AM, Andre Prendel wrote:
> Ok, so there is only one remaining task :) Please update the documentation under
> Documentation/hwmon/tmp421. Then you will get my Acked-by.
Documentation is updated in this patch along with the source file.
There is a small cosmetic change in this patch. I changed the name of the
sysfs entry and internal variable name from nfactor to n_adjust. This was
done to make sure the users know we are modifying the N[adjust] parameter
in the nfactor corrections register and not the actual nfactor itself. I
also changed the reference to the register from NFACTOR to N_CORRECT since
the datasheet uses that name for the register in question.
I think the method of using the nfactor adjustment value is specific to this
chipset. Consequently, it's not appropriate to go into the general documentation.
From 61f1c203620b06463695b399bae27a884008f169 Mon Sep 17 00:00:00 2001
From: Jeff Angielski <jeff@theptrgroup.com>
Date: Mon, 10 May 2010 10:26:34 -0400
Subject: [PATCH] hwmon: (tmp421) Add nfactor support
Add support for reading and writing the n-factor correction
registers. This is needed to compensate for the characteristics
of a particular sensor hanging off of the remote channels.
Signed-off-by: Jeff Angielski <jeff@theptrgroup.com>
---
Documentation/hwmon/tmp421 | 19 +++++++++++++++++++
drivers/hwmon/tmp421.c | 41 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 60 insertions(+), 0 deletions(-)
diff --git a/Documentation/hwmon/tmp421 b/Documentation/hwmon/tmp421
index 0cf07f8..668228a 100644
--- a/Documentation/hwmon/tmp421
+++ b/Documentation/hwmon/tmp421
@@ -17,6 +17,7 @@ Supported chips:
Authors:
Andre Prendel <andre.prendel@gmx.de>
+ Jeff Angielski <jeff@theptrgroup.com>
Description
-----------
@@ -34,3 +35,21 @@ the temperature values via the following sysfs files:
temp[1-4]_input
temp[2-4]_fault
+
+The chips allow the user to adjust the n-factor value that is used
+when converting the remote channel measurements to temperature. The
+adjustment has a range of -128 to +127 that yields an effective
+n-factor range of 0.706542 to 1.747977. The power on reset value
+for the adjustment is 0 which results in an n-factor of 1.008.
+
+The effective n-factor is calculated according to the following
+equation:
+
+n_factor = (1.008 * 300) / (300 - nfactor_adjust)
+
+The driver exports the n-factor adjustment value via the following
+sysfs files:
+
+temp[2-4]_n_adjust
+
+
diff --git a/drivers/hwmon/tmp421.c b/drivers/hwmon/tmp421.c
index 738c472..83edbc8 100644
--- a/drivers/hwmon/tmp421.c
+++ b/drivers/hwmon/tmp421.c
@@ -49,6 +49,7 @@ enum chips { tmp421, tmp422, tmp423 };
static const u8 TMP421_TEMP_MSB[4] = { 0x00, 0x01, 0x02, 0x03 };
static const u8 TMP421_TEMP_LSB[4] = { 0x10, 0x11, 0x12, 0x13 };
+static const u8 TMP421_N_CORRECT[3] = { 0x21, 0x22, 0x23 };
/* Flags */
#define TMP421_CONFIG_SHUTDOWN 0x40
@@ -76,6 +77,7 @@ struct tmp421_data {
int channels;
u8 config;
s16 temp[4];
+ s8 n_adjust[3];
};
static int temp_from_s16(s16 reg)
@@ -115,6 +117,10 @@ static struct tmp421_data *tmp421_update_device(struct device *dev)
data->temp[i] |= i2c_smbus_read_byte_data(client,
TMP421_TEMP_LSB[i]);
}
+ for (i = 1; i < data->channels; i++) {
+ data->n_adjust[i - 1] = i2c_smbus_read_byte_data(client,
+ TMP421_N_CORRECT[i - 1]);
+ }
data->last_updated = jiffies;
data->valid = 1;
}
@@ -157,6 +163,32 @@ static ssize_t show_fault(struct device *dev,
return sprintf(buf, "0\n");
}
+static ssize_t show_n_adjust(struct device *dev,
+ struct device_attribute *devattr, char *buf)
+{
+ int index = to_sensor_dev_attr(devattr)->index;
+ struct tmp421_data *data = tmp421_update_device(dev);
+
+ return sprintf(buf, "%d\n", data->n_adjust[index - 1]);
+}
+
+static ssize_t set_n_adjust(struct device *dev,
+ struct device_attribute *devattr,
+ const char *buf, size_t count)
+{
+ struct i2c_client *client = to_i2c_client(dev);
+ struct tmp421_data *data = i2c_get_clientdata(client);
+ int index = to_sensor_dev_attr(devattr)->index;
+ int n_adjust= simple_strtol(buf, NULL, 10);
+
+ mutex_lock(&data->update_lock);
+ i2c_smbus_write_byte_data(client, TMP421_N_CORRECT[index - 1],
+ SENSORS_LIMIT(n_adjust, -128, 127));
+ mutex_unlock(&data->update_lock);
+
+ return count;
+}
+
static mode_t tmp421_is_visible(struct kobject *kobj, struct attribute *a,
int n)
{
@@ -177,19 +209,28 @@ static mode_t tmp421_is_visible(struct kobject *kobj, struct attribute *a,
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp_value, NULL, 0);
static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp_value, NULL, 1);
static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_fault, NULL, 1);
+static SENSOR_DEVICE_ATTR(temp2_n_adjust, S_IRUSR | S_IWUSR | S_IRGRP,
+ show_n_adjust, set_n_adjust, 1);
static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp_value, NULL, 2);
static SENSOR_DEVICE_ATTR(temp3_fault, S_IRUGO, show_fault, NULL, 2);
+static SENSOR_DEVICE_ATTR(temp3_n_adjust, S_IRUSR | S_IWUSR | S_IRGRP,
+ show_n_adjust, set_n_adjust, 2);
static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO, show_temp_value, NULL, 3);
static SENSOR_DEVICE_ATTR(temp4_fault, S_IRUGO, show_fault, NULL, 3);
+static SENSOR_DEVICE_ATTR(temp4_n_adjust, S_IRUSR | S_IWUSR | S_IRGRP,
+ show_n_adjust, set_n_adjust, 3);
static struct attribute *tmp421_attr[] = {
&sensor_dev_attr_temp1_input.dev_attr.attr,
&sensor_dev_attr_temp2_input.dev_attr.attr,
&sensor_dev_attr_temp2_fault.dev_attr.attr,
+ &sensor_dev_attr_temp2_n_adjust.dev_attr.attr,
&sensor_dev_attr_temp3_input.dev_attr.attr,
&sensor_dev_attr_temp3_fault.dev_attr.attr,
+ &sensor_dev_attr_temp3_n_adjust.dev_attr.attr,
&sensor_dev_attr_temp4_input.dev_attr.attr,
&sensor_dev_attr_temp4_fault.dev_attr.attr,
+ &sensor_dev_attr_temp4_n_adjust.dev_attr.attr,
NULL
};
--
1.7.0.4
--
Jeff Angielski
The PTR Group
www.theptrgroup.com
_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
WARNING: multiple messages have this Message-ID (diff)
From: Jeff Angielski <jeff@theptrgroup.com>
To: Andre Prendel <andre.prendel@gmx.de>
Cc: Jean Delvare <khali@linux-fr.org>,
linuxppc-dev@lists.ozlabs.org, lm-sensors@lm-sensors.org
Subject: Re: [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd attempt)
Date: Wed, 19 May 2010 13:13:04 -0400 [thread overview]
Message-ID: <4BF41C20.60502@theptrgroup.com> (raw)
In-Reply-To: <20100519072659.GA2069@andre-laptop>
On 05/19/2010 03:26 AM, Andre Prendel wrote:
> Ok, so there is only one remaining task :) Please update the documentation under
> Documentation/hwmon/tmp421. Then you will get my Acked-by.
Documentation is updated in this patch along with the source file.
There is a small cosmetic change in this patch. I changed the name of the
sysfs entry and internal variable name from nfactor to n_adjust. This was
done to make sure the users know we are modifying the N[adjust] parameter
in the nfactor corrections register and not the actual nfactor itself. I
also changed the reference to the register from NFACTOR to N_CORRECT since
the datasheet uses that name for the register in question.
I think the method of using the nfactor adjustment value is specific to this
chipset. Consequently, it's not appropriate to go into the general documentation.
>From 61f1c203620b06463695b399bae27a884008f169 Mon Sep 17 00:00:00 2001
From: Jeff Angielski <jeff@theptrgroup.com>
Date: Mon, 10 May 2010 10:26:34 -0400
Subject: [PATCH] hwmon: (tmp421) Add nfactor support
Add support for reading and writing the n-factor correction
registers. This is needed to compensate for the characteristics
of a particular sensor hanging off of the remote channels.
Signed-off-by: Jeff Angielski <jeff@theptrgroup.com>
---
Documentation/hwmon/tmp421 | 19 +++++++++++++++++++
drivers/hwmon/tmp421.c | 41 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 60 insertions(+), 0 deletions(-)
diff --git a/Documentation/hwmon/tmp421 b/Documentation/hwmon/tmp421
index 0cf07f8..668228a 100644
--- a/Documentation/hwmon/tmp421
+++ b/Documentation/hwmon/tmp421
@@ -17,6 +17,7 @@ Supported chips:
Authors:
Andre Prendel <andre.prendel@gmx.de>
+ Jeff Angielski <jeff@theptrgroup.com>
Description
-----------
@@ -34,3 +35,21 @@ the temperature values via the following sysfs files:
temp[1-4]_input
temp[2-4]_fault
+
+The chips allow the user to adjust the n-factor value that is used
+when converting the remote channel measurements to temperature. The
+adjustment has a range of -128 to +127 that yields an effective
+n-factor range of 0.706542 to 1.747977. The power on reset value
+for the adjustment is 0 which results in an n-factor of 1.008.
+
+The effective n-factor is calculated according to the following
+equation:
+
+n_factor = (1.008 * 300) / (300 - nfactor_adjust)
+
+The driver exports the n-factor adjustment value via the following
+sysfs files:
+
+temp[2-4]_n_adjust
+
+
diff --git a/drivers/hwmon/tmp421.c b/drivers/hwmon/tmp421.c
index 738c472..83edbc8 100644
--- a/drivers/hwmon/tmp421.c
+++ b/drivers/hwmon/tmp421.c
@@ -49,6 +49,7 @@ enum chips { tmp421, tmp422, tmp423 };
static const u8 TMP421_TEMP_MSB[4] = { 0x00, 0x01, 0x02, 0x03 };
static const u8 TMP421_TEMP_LSB[4] = { 0x10, 0x11, 0x12, 0x13 };
+static const u8 TMP421_N_CORRECT[3] = { 0x21, 0x22, 0x23 };
/* Flags */
#define TMP421_CONFIG_SHUTDOWN 0x40
@@ -76,6 +77,7 @@ struct tmp421_data {
int channels;
u8 config;
s16 temp[4];
+ s8 n_adjust[3];
};
static int temp_from_s16(s16 reg)
@@ -115,6 +117,10 @@ static struct tmp421_data *tmp421_update_device(struct device *dev)
data->temp[i] |= i2c_smbus_read_byte_data(client,
TMP421_TEMP_LSB[i]);
}
+ for (i = 1; i < data->channels; i++) {
+ data->n_adjust[i - 1] = i2c_smbus_read_byte_data(client,
+ TMP421_N_CORRECT[i - 1]);
+ }
data->last_updated = jiffies;
data->valid = 1;
}
@@ -157,6 +163,32 @@ static ssize_t show_fault(struct device *dev,
return sprintf(buf, "0\n");
}
+static ssize_t show_n_adjust(struct device *dev,
+ struct device_attribute *devattr, char *buf)
+{
+ int index = to_sensor_dev_attr(devattr)->index;
+ struct tmp421_data *data = tmp421_update_device(dev);
+
+ return sprintf(buf, "%d\n", data->n_adjust[index - 1]);
+}
+
+static ssize_t set_n_adjust(struct device *dev,
+ struct device_attribute *devattr,
+ const char *buf, size_t count)
+{
+ struct i2c_client *client = to_i2c_client(dev);
+ struct tmp421_data *data = i2c_get_clientdata(client);
+ int index = to_sensor_dev_attr(devattr)->index;
+ int n_adjust= simple_strtol(buf, NULL, 10);
+
+ mutex_lock(&data->update_lock);
+ i2c_smbus_write_byte_data(client, TMP421_N_CORRECT[index - 1],
+ SENSORS_LIMIT(n_adjust, -128, 127));
+ mutex_unlock(&data->update_lock);
+
+ return count;
+}
+
static mode_t tmp421_is_visible(struct kobject *kobj, struct attribute *a,
int n)
{
@@ -177,19 +209,28 @@ static mode_t tmp421_is_visible(struct kobject *kobj, struct attribute *a,
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp_value, NULL, 0);
static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp_value, NULL, 1);
static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_fault, NULL, 1);
+static SENSOR_DEVICE_ATTR(temp2_n_adjust, S_IRUSR | S_IWUSR | S_IRGRP,
+ show_n_adjust, set_n_adjust, 1);
static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp_value, NULL, 2);
static SENSOR_DEVICE_ATTR(temp3_fault, S_IRUGO, show_fault, NULL, 2);
+static SENSOR_DEVICE_ATTR(temp3_n_adjust, S_IRUSR | S_IWUSR | S_IRGRP,
+ show_n_adjust, set_n_adjust, 2);
static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO, show_temp_value, NULL, 3);
static SENSOR_DEVICE_ATTR(temp4_fault, S_IRUGO, show_fault, NULL, 3);
+static SENSOR_DEVICE_ATTR(temp4_n_adjust, S_IRUSR | S_IWUSR | S_IRGRP,
+ show_n_adjust, set_n_adjust, 3);
static struct attribute *tmp421_attr[] = {
&sensor_dev_attr_temp1_input.dev_attr.attr,
&sensor_dev_attr_temp2_input.dev_attr.attr,
&sensor_dev_attr_temp2_fault.dev_attr.attr,
+ &sensor_dev_attr_temp2_n_adjust.dev_attr.attr,
&sensor_dev_attr_temp3_input.dev_attr.attr,
&sensor_dev_attr_temp3_fault.dev_attr.attr,
+ &sensor_dev_attr_temp3_n_adjust.dev_attr.attr,
&sensor_dev_attr_temp4_input.dev_attr.attr,
&sensor_dev_attr_temp4_fault.dev_attr.attr,
+ &sensor_dev_attr_temp4_n_adjust.dev_attr.attr,
NULL
};
--
1.7.0.4
--
Jeff Angielski
The PTR Group
www.theptrgroup.com
next prev parent reply other threads:[~2010-05-19 17:13 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-10 14:43 [PATCH] hwmon: (tmp421) Add nfactor support Jeff Angielski
2010-05-11 19:03 ` [lm-sensors] " Andre Prendel
2010-05-11 19:03 ` Andre Prendel
2010-05-11 19:12 ` [lm-sensors] " Jean Delvare
2010-05-11 19:12 ` Jean Delvare
2010-05-11 19:34 ` [lm-sensors] " Jeff Angielski
2010-05-11 19:34 ` Jeff Angielski
2010-05-12 7:27 ` [lm-sensors] " Jean Delvare
2010-05-12 7:27 ` Jean Delvare
2010-05-17 20:30 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd Jeff Angielski
2010-05-17 20:30 ` [PATCH] hwmon: (tmp421) Add nfactor support (2nd attempt) Jeff Angielski
2010-05-18 11:38 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd Andre Prendel
2010-05-18 11:38 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd attempt) Andre Prendel
2010-05-18 14:35 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd Jeff Angielski
2010-05-18 14:35 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd attempt) Jeff Angielski
2010-05-19 7:26 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd Andre Prendel
2010-05-19 7:26 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd attempt) Andre Prendel
2010-05-19 13:16 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd Jean Delvare
2010-05-19 13:16 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd attempt) Jean Delvare
2010-05-19 17:13 ` Jeff Angielski [this message]
2010-05-19 17:13 ` Jeff Angielski
2010-05-20 18:50 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd Andre Prendel
2010-05-20 18:50 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd attempt) Andre Prendel
2010-05-20 19:07 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd Jeff Angielski
2010-05-20 19:07 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd attempt) Jeff Angielski
2010-05-20 19:35 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd Andre Prendel
2010-05-20 19:35 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd attempt) Andre Prendel
2010-06-18 14:53 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd Andre Prendel
2010-06-18 14:53 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd attempt) Andre Prendel
2010-07-20 15:09 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd Andre Prendel
2010-07-20 15:09 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd attempt) Andre Prendel
2010-07-20 15:59 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd Guenter Roeck
2010-07-21 19:46 ` Andre Prendel
2010-07-21 19:46 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd attempt) Andre Prendel
2010-08-14 19:15 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd Jean Delvare
2010-08-14 19:15 ` [lm-sensors] [PATCH] hwmon: (tmp421) Add nfactor support (2nd attempt) Jean Delvare
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4BF41C20.60502@theptrgroup.com \
--to=jeff@theptrgroup.com \
--cc=andre.prendel@gmx.de \
--cc=khali@linux-fr.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lm-sensors@lm-sensors.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.