Commit 963d96b5 authored by Darrick J. Wong's avatar Darrick J. Wong Committed by Linus Torvalds

i5k_amb: provide labels for temperature sensors

Export the sensor -> channel/dimm mapping in tempX_label.
Signed-off-by: default avatarDarrick J. Wong <djwong@us.ibm.com>
Cc: "Mark M. Hoffman" <mhoffman@lightlink.com>
Cc: Jean Delvare <khali@linux-fr.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent d42139a3
...@@ -81,6 +81,8 @@ static unsigned long amb_reg_temp(unsigned int amb) ...@@ -81,6 +81,8 @@ static unsigned long amb_reg_temp(unsigned int amb)
#define MAX_AMBS_PER_CHANNEL 16 #define MAX_AMBS_PER_CHANNEL 16
#define MAX_AMBS (MAX_MEM_CHANNELS * \ #define MAX_AMBS (MAX_MEM_CHANNELS * \
MAX_AMBS_PER_CHANNEL) MAX_AMBS_PER_CHANNEL)
#define CHANNEL_SHIFT 4
#define DIMM_MASK 0xF
/* /*
* Ugly hack: For some reason the highest bit is set if there * Ugly hack: For some reason the highest bit is set if there
* are _any_ DIMMs in the channel. Attempting to read from * are _any_ DIMMs in the channel. Attempting to read from
...@@ -89,7 +91,7 @@ static unsigned long amb_reg_temp(unsigned int amb) ...@@ -89,7 +91,7 @@ static unsigned long amb_reg_temp(unsigned int amb)
* might prevent us from seeing the 16th DIMM in the channel. * might prevent us from seeing the 16th DIMM in the channel.
*/ */
#define REAL_MAX_AMBS_PER_CHANNEL 15 #define REAL_MAX_AMBS_PER_CHANNEL 15
#define KNOBS_PER_AMB 5 #define KNOBS_PER_AMB 6
static unsigned long amb_num_from_reg(unsigned int byte_num, unsigned int bit) static unsigned long amb_num_from_reg(unsigned int byte_num, unsigned int bit)
{ {
...@@ -238,6 +240,16 @@ static ssize_t show_amb_temp(struct device *dev, ...@@ -238,6 +240,16 @@ static ssize_t show_amb_temp(struct device *dev,
500 * amb_read_byte(data, amb_reg_temp(attr->index))); 500 * amb_read_byte(data, amb_reg_temp(attr->index)));
} }
static ssize_t show_label(struct device *dev,
struct device_attribute *devattr,
char *buf)
{
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
return sprintf(buf, "Ch. %d DIMM %d\n", attr->index >> CHANNEL_SHIFT,
attr->index & DIMM_MASK);
}
static int __devinit i5k_amb_hwmon_init(struct platform_device *pdev) static int __devinit i5k_amb_hwmon_init(struct platform_device *pdev)
{ {
int i, j, k, d = 0; int i, j, k, d = 0;
...@@ -268,6 +280,20 @@ static int __devinit i5k_amb_hwmon_init(struct platform_device *pdev) ...@@ -268,6 +280,20 @@ static int __devinit i5k_amb_hwmon_init(struct platform_device *pdev)
continue; continue;
d++; d++;
/* sysfs label */
iattr = data->attrs + data->num_attrs;
snprintf(iattr->name, AMB_SYSFS_NAME_LEN,
"temp%d_label", d);
iattr->s_attr.dev_attr.attr.name = iattr->name;
iattr->s_attr.dev_attr.attr.mode = S_IRUGO;
iattr->s_attr.dev_attr.show = show_label;
iattr->s_attr.index = k;
res = device_create_file(&pdev->dev,
&iattr->s_attr.dev_attr);
if (res)
goto exit_remove;
data->num_attrs++;
/* Temperature sysfs knob */ /* Temperature sysfs knob */
iattr = data->attrs + data->num_attrs; iattr = data->attrs + data->num_attrs;
snprintf(iattr->name, AMB_SYSFS_NAME_LEN, snprintf(iattr->name, AMB_SYSFS_NAME_LEN,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment