diff options
| -rw-r--r-- | drivers/hwmon/applesmc.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c index f41585ecbe2b..75f87f125dac 100644 --- a/drivers/hwmon/applesmc.c +++ b/drivers/hwmon/applesmc.c | |||
| @@ -80,6 +80,8 @@ | |||
| 80 | #define FANS_MANUAL "FS! " /* r-w ui16 */ | 80 | #define FANS_MANUAL "FS! " /* r-w ui16 */ |
| 81 | #define FAN_ID_FMT "F%dID" /* r-o char[16] */ | 81 | #define FAN_ID_FMT "F%dID" /* r-o char[16] */ |
| 82 | 82 | ||
| 83 | #define TEMP_SENSOR_TYPE "sp78" | ||
| 84 | |||
| 83 | /* List of keys used to read/write fan speeds */ | 85 | /* List of keys used to read/write fan speeds */ |
| 84 | static const char *const fan_speed_fmt[] = { | 86 | static const char *const fan_speed_fmt[] = { |
| 85 | "F%dAc", /* actual speed */ | 87 | "F%dAc", /* actual speed */ |
| @@ -720,27 +722,22 @@ static ssize_t applesmc_show_temperature(struct device *dev, | |||
| 720 | int index = smcreg.temp_begin + to_index(devattr); | 722 | int index = smcreg.temp_begin + to_index(devattr); |
| 721 | const struct applesmc_entry *entry; | 723 | const struct applesmc_entry *entry; |
| 722 | int ret; | 724 | int ret; |
| 723 | u8 buffer[2]; | 725 | s16 value; |
| 724 | unsigned int temp; | 726 | int temp; |
| 725 | 727 | ||
| 726 | entry = applesmc_get_entry_by_index(index); | 728 | entry = applesmc_get_entry_by_index(index); |
| 727 | if (IS_ERR(entry)) | 729 | if (IS_ERR(entry)) |
| 728 | return PTR_ERR(entry); | 730 | return PTR_ERR(entry); |
| 729 | if (entry->len > 2) | 731 | if (strcmp(entry->type, TEMP_SENSOR_TYPE)) |
| 730 | return -EINVAL; | 732 | return -EINVAL; |
| 731 | 733 | ||
| 732 | ret = applesmc_read_entry(entry, buffer, entry->len); | 734 | ret = applesmc_read_s16(entry->key, &value); |
| 733 | if (ret) | 735 | if (ret) |
| 734 | return ret; | 736 | return ret; |
| 735 | 737 | ||
| 736 | if (entry->len == 2) { | 738 | temp = 250 * (value >> 6); |
| 737 | temp = buffer[0] * 1000; | ||
| 738 | temp += (buffer[1] >> 6) * 250; | ||
| 739 | } else { | ||
| 740 | temp = buffer[0] * 4000; | ||
| 741 | } | ||
| 742 | 739 | ||
| 743 | return snprintf(sysfsbuf, PAGE_SIZE, "%u\n", temp); | 740 | return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", temp); |
| 744 | } | 741 | } |
| 745 | 742 | ||
| 746 | static ssize_t applesmc_show_fan_speed(struct device *dev, | 743 | static ssize_t applesmc_show_fan_speed(struct device *dev, |
