diff options
author | Eric Miao <eric.y.miao@gmail.com> | 2012-01-16 16:51:45 -0500 |
---|---|---|
committer | Jean Delvare <khali@endymion.delvare> | 2012-01-16 16:51:45 -0500 |
commit | 012f3b9118c7aaa3549f89299386f92b6580d235 (patch) | |
tree | 7ee22ace6e9446c699ffa2451e03225bddc80590 /drivers/hwmon | |
parent | 53999bf34d55981328f8ba9def558d3e104d6e36 (diff) |
hwmon: (max1111) Change sysfs interface to in[0-3]_input in millivolts
This patch fixed the inconsistent max1111 sysfs interface as pointed
out by Jean Delvare:
It was pointed to me that the max1111 driver doesn't implement the
standard sysfs interface for hwmon drivers (as described in
Documentation/hwmon/sysfs-interface). It exports files adc[0-3]_in,
which
aren't part of the standard interface. Presumably these should be
renamed to in[0-3]_input. Renaming them is probably not sufficient
though, as I see no scaling done in the driver. As the MAX1111 chip has
a documented full scale of 2.048V, I take it that the LSB of the ADC
has a weight of 8 mV. Exporting raw register values to user-space is
not OK.
Reported-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Eric Miao <eric.y.miao@gmail.com>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r-- | drivers/hwmon/max1111.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/hwmon/max1111.c b/drivers/hwmon/max1111.c index 84ef3a898707..482ca901db30 100644 --- a/drivers/hwmon/max1111.c +++ b/drivers/hwmon/max1111.c | |||
@@ -106,11 +106,14 @@ static ssize_t show_adc(struct device *dev, | |||
106 | if (ret < 0) | 106 | if (ret < 0) |
107 | return ret; | 107 | return ret; |
108 | 108 | ||
109 | return sprintf(buf, "%d\n", ret); | 109 | /* assume the reference voltage to be 2.048V, with an 8-bit sample, |
110 | * the LSB weight is 8mV | ||
111 | */ | ||
112 | return sprintf(buf, "%d\n", ret * 8); | ||
110 | } | 113 | } |
111 | 114 | ||
112 | #define MAX1111_ADC_ATTR(_id) \ | 115 | #define MAX1111_ADC_ATTR(_id) \ |
113 | SENSOR_DEVICE_ATTR(adc##_id##_in, S_IRUGO, show_adc, NULL, _id) | 116 | SENSOR_DEVICE_ATTR(in##_id##_input, S_IRUGO, show_adc, NULL, _id) |
114 | 117 | ||
115 | static DEVICE_ATTR(name, S_IRUGO, show_name, NULL); | 118 | static DEVICE_ATTR(name, S_IRUGO, show_name, NULL); |
116 | static MAX1111_ADC_ATTR(0); | 119 | static MAX1111_ADC_ATTR(0); |
@@ -120,10 +123,10 @@ static MAX1111_ADC_ATTR(3); | |||
120 | 123 | ||
121 | static struct attribute *max1111_attributes[] = { | 124 | static struct attribute *max1111_attributes[] = { |
122 | &dev_attr_name.attr, | 125 | &dev_attr_name.attr, |
123 | &sensor_dev_attr_adc0_in.dev_attr.attr, | 126 | &sensor_dev_attr_in0_input.dev_attr.attr, |
124 | &sensor_dev_attr_adc1_in.dev_attr.attr, | 127 | &sensor_dev_attr_in1_input.dev_attr.attr, |
125 | &sensor_dev_attr_adc2_in.dev_attr.attr, | 128 | &sensor_dev_attr_in2_input.dev_attr.attr, |
126 | &sensor_dev_attr_adc3_in.dev_attr.attr, | 129 | &sensor_dev_attr_in3_input.dev_attr.attr, |
127 | NULL, | 130 | NULL, |
128 | }; | 131 | }; |
129 | 132 | ||