Commit 19127af9 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'hwmon-for-linus-v4.2-rc1' of...

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
parents 799b63a4 347d7e45
...@@ -777,7 +777,7 @@ static int __init i8k_init_hwmon(void) ...@@ -777,7 +777,7 @@ static int __init i8k_init_hwmon(void)
if (err >= 0) if (err >= 0)
i8k_hwmon_flags |= I8K_HWMON_HAVE_FAN2; i8k_hwmon_flags |= I8K_HWMON_HAVE_FAN2;
i8k_hwmon_dev = hwmon_device_register_with_groups(NULL, "dell-smm", i8k_hwmon_dev = hwmon_device_register_with_groups(NULL, "dell_smm",
NULL, i8k_groups); NULL, i8k_groups);
if (IS_ERR(i8k_hwmon_dev)) { if (IS_ERR(i8k_hwmon_dev)) {
err = PTR_ERR(i8k_hwmon_dev); err = PTR_ERR(i8k_hwmon_dev);
......
...@@ -31,14 +31,11 @@ ...@@ -31,14 +31,11 @@
/* output format */ /* output format */
#define MCP3021_SAR_SHIFT 2 #define MCP3021_SAR_SHIFT 2
#define MCP3021_SAR_MASK 0x3ff #define MCP3021_SAR_MASK 0x3ff
#define MCP3021_OUTPUT_RES 10 /* 10-bit resolution */ #define MCP3021_OUTPUT_RES 10 /* 10-bit resolution */
#define MCP3021_OUTPUT_SCALE 4
#define MCP3221_SAR_SHIFT 0 #define MCP3221_SAR_SHIFT 0
#define MCP3221_SAR_MASK 0xfff #define MCP3221_SAR_MASK 0xfff
#define MCP3221_OUTPUT_RES 12 /* 12-bit resolution */ #define MCP3221_OUTPUT_RES 12 /* 12-bit resolution */
#define MCP3221_OUTPUT_SCALE 1
enum chips { enum chips {
mcp3021, mcp3021,
...@@ -54,7 +51,6 @@ struct mcp3021_data { ...@@ -54,7 +51,6 @@ struct mcp3021_data {
u16 sar_shift; u16 sar_shift;
u16 sar_mask; u16 sar_mask;
u8 output_res; u8 output_res;
u8 output_scale;
}; };
static int mcp3021_read16(struct i2c_client *client) static int mcp3021_read16(struct i2c_client *client)
...@@ -84,13 +80,7 @@ static int mcp3021_read16(struct i2c_client *client) ...@@ -84,13 +80,7 @@ static int mcp3021_read16(struct i2c_client *client)
static inline u16 volts_from_reg(struct mcp3021_data *data, u16 val) static inline u16 volts_from_reg(struct mcp3021_data *data, u16 val)
{ {
if (val == 0) return DIV_ROUND_CLOSEST(data->vdd * val, 1 << data->output_res);
return 0;
val = val * data->output_scale - data->output_scale / 2;
return val * DIV_ROUND_CLOSEST(data->vdd,
(1 << data->output_res) * data->output_scale);
} }
static ssize_t show_in_input(struct device *dev, struct device_attribute *attr, static 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,14 +122,12 @@ static int mcp3021_probe(struct i2c_client *client,
data->sar_shift = MCP3021_SAR_SHIFT; data->sar_shift = MCP3021_SAR_SHIFT;
data->sar_mask = MCP3021_SAR_MASK; data->sar_mask = MCP3021_SAR_MASK;
data->output_res = MCP3021_OUTPUT_RES; data->output_res = MCP3021_OUTPUT_RES;
data->output_scale = MCP3021_OUTPUT_SCALE;
break; break;
case mcp3221: case mcp3221:
data->sar_shift = MCP3221_SAR_SHIFT; data->sar_shift = MCP3221_SAR_SHIFT;
data->sar_mask = MCP3221_SAR_MASK; data->sar_mask = MCP3221_SAR_MASK;
data->output_res = MCP3221_OUTPUT_RES; data->output_res = MCP3221_OUTPUT_RES;
data->output_scale = MCP3221_OUTPUT_SCALE;
break; break;
} }
......
...@@ -547,7 +547,7 @@ static umode_t nct7802_temp_is_visible(struct kobject *kobj, ...@@ -547,7 +547,7 @@ static umode_t nct7802_temp_is_visible(struct kobject *kobj,
if (index >= 9 && index < 18 && if (index >= 9 && index < 18 &&
(reg & 0x0c) != 0x04 && (reg & 0x0c) != 0x08) /* RD2 */ (reg & 0x0c) != 0x04 && (reg & 0x0c) != 0x08) /* RD2 */
return 0; return 0;
if (index >= 18 && index < 27 && (reg & 0x30) != 0x10) /* RD3 */ if (index >= 18 && index < 27 && (reg & 0x30) != 0x20) /* RD3 */
return 0; return 0;
if (index >= 27 && index < 35) /* local */ if (index >= 27 && index < 35) /* local */
return attr->mode; return attr->mode;
......
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