i5k_amb: provide labels for temperature sensors
Export the sensor -> channel/dimm mapping in tempX_label. Signed-off-by: Darrick J. Wong <djwong@us.ibm.com> Cc: "Mark M. Hoffman" <mhoffman@lightlink.com> Cc: Jean Delvare <khali@linux-fr.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
d42139a3fb
commit
963d96b53e
@@ -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)
|
|||||||
* 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,
|
|||||||
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)
|
|||||||
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,
|
||||||
|
Reference in New Issue
Block a user