Commit 051e6b7e authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'hwmon-for-v5.7-rc6' of...

Merge tag 'hwmon-for-v5.7-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging

Pull hwmon fixes from Guenter Roeck:

 - Fix ADC access synchronization problem with da9052 driver

 - Fix temperature limit and status reporting in nct7904 driver

 - Fix drivetemp temperature reporting if SCT is supported but SCT data
   tables are not.

* tag 'hwmon-for-v5.7-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
  hwmon: (da9052) Synchronize access with mfd
  hwmon: (nct7904) Fix incorrect range of temperature limit registers
  hwmon: (nct7904) Read all SMI status registers in probe function
  hwmon: (drivetemp) Fix SCT support if SCT data tables are not supported
parents 1742bcd0 333e22db
...@@ -244,9 +244,9 @@ static ssize_t da9052_tsi_show(struct device *dev, ...@@ -244,9 +244,9 @@ static ssize_t da9052_tsi_show(struct device *dev,
int channel = to_sensor_dev_attr(devattr)->index; int channel = to_sensor_dev_attr(devattr)->index;
int ret; int ret;
mutex_lock(&hwmon->hwmon_lock); mutex_lock(&hwmon->da9052->auxadc_lock);
ret = __da9052_read_tsi(dev, channel); ret = __da9052_read_tsi(dev, channel);
mutex_unlock(&hwmon->hwmon_lock); mutex_unlock(&hwmon->da9052->auxadc_lock);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
...@@ -346,7 +346,7 @@ static int drivetemp_identify_sata(struct drivetemp_data *st) ...@@ -346,7 +346,7 @@ static int drivetemp_identify_sata(struct drivetemp_data *st)
st->have_temp_highest = temp_is_valid(buf[SCT_STATUS_TEMP_HIGHEST]); st->have_temp_highest = temp_is_valid(buf[SCT_STATUS_TEMP_HIGHEST]);
if (!have_sct_data_table) if (!have_sct_data_table)
goto skip_sct; goto skip_sct_data;
/* Request and read temperature history table */ /* Request and read temperature history table */
memset(buf, '\0', sizeof(st->smartdata)); memset(buf, '\0', sizeof(st->smartdata));
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#define FANCTL_MAX 4 /* Counted from 1 */ #define FANCTL_MAX 4 /* Counted from 1 */
#define TCPU_MAX 8 /* Counted from 1 */ #define TCPU_MAX 8 /* Counted from 1 */
#define TEMP_MAX 4 /* Counted from 1 */ #define TEMP_MAX 4 /* Counted from 1 */
#define SMI_STS_MAX 10 /* Counted from 1 */
#define VT_ADC_CTRL0_REG 0x20 /* Bank 0 */ #define VT_ADC_CTRL0_REG 0x20 /* Bank 0 */
#define VT_ADC_CTRL1_REG 0x21 /* Bank 0 */ #define VT_ADC_CTRL1_REG 0x21 /* Bank 0 */
...@@ -361,6 +362,7 @@ static int nct7904_read_temp(struct device *dev, u32 attr, int channel, ...@@ -361,6 +362,7 @@ static int nct7904_read_temp(struct device *dev, u32 attr, int channel,
struct nct7904_data *data = dev_get_drvdata(dev); struct nct7904_data *data = dev_get_drvdata(dev);
int ret, temp; int ret, temp;
unsigned int reg1, reg2, reg3; unsigned int reg1, reg2, reg3;
s8 temps;
switch (attr) { switch (attr) {
case hwmon_temp_input: case hwmon_temp_input:
...@@ -466,7 +468,8 @@ static int nct7904_read_temp(struct device *dev, u32 attr, int channel, ...@@ -466,7 +468,8 @@ static int nct7904_read_temp(struct device *dev, u32 attr, int channel,
if (ret < 0) if (ret < 0)
return ret; return ret;
*val = ret * 1000; temps = ret;
*val = temps * 1000;
return 0; return 0;
} }
...@@ -1009,6 +1012,13 @@ static int nct7904_probe(struct i2c_client *client, ...@@ -1009,6 +1012,13 @@ static int nct7904_probe(struct i2c_client *client,
data->fan_mode[i] = ret; data->fan_mode[i] = ret;
} }
/* Read all of SMI status register to clear alarms */
for (i = 0; i < SMI_STS_MAX; i++) {
ret = nct7904_read_reg(data, BANK_0, SMI_STS1_REG + i);
if (ret < 0)
return ret;
}
hwmon_dev = hwmon_dev =
devm_hwmon_device_register_with_info(dev, client->name, data, devm_hwmon_device_register_with_info(dev, client->name, data,
&nct7904_chip_info, NULL); &nct7904_chip_info, NULL);
......
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