aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-07-02 17:48:26 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-07-02 17:48:26 -0400
commit19127af9d81f0fcecc3e54fab64b7a7f2f91a92b (patch)
tree95f4f3746d26e177583ad125d0f9a9c78646865d
parent799b63a4b058c6a48dc6805daad81ba66002c48c (diff)
parent347d7e45bd09ce09cbc30d5cea9de377eb22f55c (diff)
Merge tag 'hwmon-for-linus-v4.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging
Pull hwmon fixes from Guenter Roeck: "Two patches headed for stable: - Fix broken output scaling in mcp3021 driver - Fix attribute visibility in nct7802 driver One regression: - Fix name attribute in dell-smm-hwmon driver" * tag 'hwmon-for-linus-v4.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging: hwmon: (mcp3021) Fix broken output scaling hwmon: (nct7802) fix visibility of temp3 hwmon: (dell-smm-hwmon) Use a valid name attribute
-rw-r--r--drivers/hwmon/dell-smm-hwmon.c2
-rw-r--r--drivers/hwmon/mcp3021.c14
-rw-r--r--drivers/hwmon/nct7802.c2
3 files changed, 3 insertions, 15 deletions
diff --git a/drivers/hwmon/dell-smm-hwmon.c b/drivers/hwmon/dell-smm-hwmon.c
index 2a808822af21..37c16afe007a 100644
--- a/drivers/hwmon/dell-smm-hwmon.c
+++ b/drivers/hwmon/dell-smm-hwmon.c
@@ -777,7 +777,7 @@ static int __init i8k_init_hwmon(void)
777 if (err >= 0) 777 if (err >= 0)
778 i8k_hwmon_flags |= I8K_HWMON_HAVE_FAN2; 778 i8k_hwmon_flags |= I8K_HWMON_HAVE_FAN2;
779 779
780 i8k_hwmon_dev = hwmon_device_register_with_groups(NULL, "dell-smm", 780 i8k_hwmon_dev = hwmon_device_register_with_groups(NULL, "dell_smm",
781 NULL, i8k_groups); 781 NULL, i8k_groups);
782 if (IS_ERR(i8k_hwmon_dev)) { 782 if (IS_ERR(i8k_hwmon_dev)) {
783 err = PTR_ERR(i8k_hwmon_dev); 783 err = PTR_ERR(i8k_hwmon_dev);
diff --git a/drivers/hwmon/mcp3021.c b/drivers/hwmon/mcp3021.c
index d219c06a857b..972444a14cca 100644
--- a/drivers/hwmon/mcp3021.c
+++ b/drivers/hwmon/mcp3021.c
@@ -31,14 +31,11 @@
31/* output format */ 31/* output format */
32#define MCP3021_SAR_SHIFT 2 32#define MCP3021_SAR_SHIFT 2
33#define MCP3021_SAR_MASK 0x3ff 33#define MCP3021_SAR_MASK 0x3ff
34
35#define MCP3021_OUTPUT_RES 10 /* 10-bit resolution */ 34#define MCP3021_OUTPUT_RES 10 /* 10-bit resolution */
36#define MCP3021_OUTPUT_SCALE 4
37 35
38#define MCP3221_SAR_SHIFT 0 36#define MCP3221_SAR_SHIFT 0
39#define MCP3221_SAR_MASK 0xfff 37#define MCP3221_SAR_MASK 0xfff
40#define MCP3221_OUTPUT_RES 12 /* 12-bit resolution */ 38#define MCP3221_OUTPUT_RES 12 /* 12-bit resolution */
41#define MCP3221_OUTPUT_SCALE 1
42 39
43enum chips { 40enum chips {
44 mcp3021, 41 mcp3021,
@@ -54,7 +51,6 @@ struct mcp3021_data {
54 u16 sar_shift; 51 u16 sar_shift;
55 u16 sar_mask; 52 u16 sar_mask;
56 u8 output_res; 53 u8 output_res;
57 u8 output_scale;
58}; 54};
59 55
60static int mcp3021_read16(struct i2c_client *client) 56static int mcp3021_read16(struct i2c_client *client)
@@ -84,13 +80,7 @@ static int mcp3021_read16(struct i2c_client *client)
84 80
85static inline u16 volts_from_reg(struct mcp3021_data *data, u16 val) 81static inline u16 volts_from_reg(struct mcp3021_data *data, u16 val)
86{ 82{
87 if (val == 0) 83 return DIV_ROUND_CLOSEST(data->vdd * val, 1 << data->output_res);
88 return 0;
89
90 val = val * data->output_scale - data->output_scale / 2;
91
92 return val * DIV_ROUND_CLOSEST(data->vdd,
93 (1 << data->output_res) * data->output_scale);
94} 84}
95 85
96static ssize_t show_in_input(struct device *dev, struct device_attribute *attr, 86static ssize_t show_in_input(struct device *dev, struct device_attribute *attr,
@@ -132,14 +122,12 @@ static int mcp3021_probe(struct i2c_client *client,
132 data->sar_shift = MCP3021_SAR_SHIFT; 122 data->sar_shift = MCP3021_SAR_SHIFT;
133 data->sar_mask = MCP3021_SAR_MASK; 123 data->sar_mask = MCP3021_SAR_MASK;
134 data->output_res = MCP3021_OUTPUT_RES; 124 data->output_res = MCP3021_OUTPUT_RES;
135 data->output_scale = MCP3021_OUTPUT_SCALE;
136 break; 125 break;
137 126
138 case mcp3221: 127 case mcp3221:
139 data->sar_shift = MCP3221_SAR_SHIFT; 128 data->sar_shift = MCP3221_SAR_SHIFT;
140 data->sar_mask = MCP3221_SAR_MASK; 129 data->sar_mask = MCP3221_SAR_MASK;
141 data->output_res = MCP3221_OUTPUT_RES; 130 data->output_res = MCP3221_OUTPUT_RES;
142 data->output_scale = MCP3221_OUTPUT_SCALE;
143 break; 131 break;
144 } 132 }
145 133
diff --git a/drivers/hwmon/nct7802.c b/drivers/hwmon/nct7802.c
index 55765790907b..28fcb2e246d5 100644
--- a/drivers/hwmon/nct7802.c
+++ b/drivers/hwmon/nct7802.c
@@ -547,7 +547,7 @@ static umode_t nct7802_temp_is_visible(struct kobject *kobj,
547 if (index >= 9 && index < 18 && 547 if (index >= 9 && index < 18 &&
548 (reg & 0x0c) != 0x04 && (reg & 0x0c) != 0x08) /* RD2 */ 548 (reg & 0x0c) != 0x04 && (reg & 0x0c) != 0x08) /* RD2 */
549 return 0; 549 return 0;
550 if (index >= 18 && index < 27 && (reg & 0x30) != 0x10) /* RD3 */ 550 if (index >= 18 && index < 27 && (reg & 0x30) != 0x20) /* RD3 */
551 return 0; 551 return 0;
552 if (index >= 27 && index < 35) /* local */ 552 if (index >= 27 && index < 35) /* local */
553 return attr->mode; 553 return attr->mode;