Re: [PATCH] i8k: Add support for temperature sensor labels

Guenter Roeck
2014-11-29T18:05:36Z

On 11/29/2014 09:51 AM, Greg Kroah-Hartman wrote:
> On Sat, Nov 29, 2014 at 06:49:43PM +0100, Pali Rohár wrote:
>> On Saturday 29 November 2014 18:43:15 Greg Kroah-Hartman wrote:
>>> On Sat, Nov 29, 2014 at 05:04:07PM +0100, Pali Rohár wrote:
>>>> This patch adds labels for temperature sensors if SMM
>>>> function with EAX register 0x11a3 reports it. These
>>>> informations was taken from DOS binary NBSVC.MDM.
>>>>
>>>> Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
>>>> ---
>>>>
>>>> drivers/char/i8k.c | 110
>>>> +++++++++++++++++++++++++++++++++++++++++----------- 1
>>>> file changed, 88 insertions(+), 22 deletions(-)
>>>>
>>>> diff --git a/drivers/char/i8k.c b/drivers/char/i8k.c
>>>> index e34a019..77af46b 100644
>>>> --- a/drivers/char/i8k.c
>>>> +++ b/drivers/char/i8k.c
>>>> @@ -42,6 +42,7 @@
>>>>
>>>> #define I8K_SMM_GET_FAN 0x00a3
>>>> #define I8K_SMM_GET_SPEED 0x02a3
>>>> #define I8K_SMM_GET_TEMP 0x10a3
>>>>
>>>> +#define I8K_SMM_GET_TEMP_TYPE 0x11a3
>>>>
>>>> #define I8K_SMM_GET_DELL_SIG1 0xfea3
>>>> #define I8K_SMM_GET_DELL_SIG2 0xffa3
>>>>
>>>> @@ -288,6 +289,14 @@ static int i8k_set_fan(int fan, int
>>>> speed)
>>>>
>>>> return i8k_smm(&regs) ? : i8k_get_fan_status(fan);
>>>>
>>>> }
>>>>
>>>> +static int i8k_get_temp_type(int sensor)
>>>> +{
>>>> + struct smm_regs regs = { .eax = I8K_SMM_GET_TEMP_TYPE, };
>>>> +
>>>> + regs.ebx = sensor & 0xff;
>>>> + return i8k_smm(&regs) ? : regs.eax & 0xff;
>>>> +}
>>>> +
>>>>
>>>> /*
>>>>
>>>> * Read the cpu temperature.
>>>> */
>>>>
>>>> @@ -493,6 +502,29 @@ static int i8k_open_fs(struct inode
>>>> *inode, struct file *file)
>>>>
>>>> * Hwmon interface
>>>> */
>>>>
>>>> +static ssize_t i8k_hwmon_show_temp_label(struct device
>>>> *dev, + struct device_attribute *devattr,
>>>> + char *buf)
>>>> +{
>>>> + static const char * const labels[] = {
>>>> + "CPU",
>>>> + "GPU",
>>>> + "SODIMM",
>>>> + "Other",
>>>> + "Ambient",
>>>> + "Other",
>>>> + };
>>>> + int index = to_sensor_dev_attr(devattr)->index;
>>>> + int type;
>>>> +
>>>> + type = i8k_get_temp_type(index);
>>>> + if (type < 0)
>>>> + return type;
>>>> + if (type >= ARRAY_SIZE(labels))
>>>> + type = ARRAY_SIZE(labels) - 1;
>>>> + return sprintf(buf, "%s\n", labels[type]);
>>>> +}
>>>
>>> No Documentation/ABI/ entry for your new sysfs file?
>>
>> It is standard hwmon sysfs entry which is used by other hwmon
>> drivers... It is not i8k.ko driver specific.
>
> Ok, then why is this driver not in a "hwmon-standard" location in the
> kernel tree?
>
Another historic reason. hwmon support was added to the driver
only in 2011. Initially it only had support for the proc interface.
The driver exists at least since 2005, when Linux started to use git.

Maybe we should move it ?

Guenter