]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Merge tag 'hwmon-for-v5.7-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/groec...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 15 May 2020 17:14:05 +0000 (10:14 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 15 May 2020 17:14:05 +0000 (10:14 -0700)
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

drivers/hwmon/da9052-hwmon.c
drivers/hwmon/drivetemp.c
drivers/hwmon/nct7904.c

index 53b517dbe7e6ecaffab8c2a85053f82bc5caaf55..4af2fc309c28689ff4214f186fc3b27a38dad2c8 100644 (file)
@@ -244,9 +244,9 @@ static ssize_t da9052_tsi_show(struct device *dev,
        int channel = to_sensor_dev_attr(devattr)->index;
        int ret;
 
-       mutex_lock(&hwmon->hwmon_lock);
+       mutex_lock(&hwmon->da9052->auxadc_lock);
        ret = __da9052_read_tsi(dev, channel);
-       mutex_unlock(&hwmon->hwmon_lock);
+       mutex_unlock(&hwmon->da9052->auxadc_lock);
 
        if (ret < 0)
                return ret;
index 9179460c2d9d586e1358859a485234126aa7bc8c..0d4f3d97ffc61f8af1d4d4dff6c269353fcd5c9a 100644 (file)
@@ -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]);
 
        if (!have_sct_data_table)
-               goto skip_sct;
+               goto skip_sct_data;
 
        /* Request and read temperature history table */
        memset(buf, '\0', sizeof(st->smartdata));
index 1f5743d68984cfb93ef9ea25084f3db6e1fcbf8a..a7eb10d2a0539029bb301fb936491618e4177128 100644 (file)
@@ -41,6 +41,7 @@
 #define FANCTL_MAX             4       /* Counted from 1 */
 #define TCPU_MAX               8       /* 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_CTRL1_REG       0x21    /* Bank 0 */
@@ -361,6 +362,7 @@ static int nct7904_read_temp(struct device *dev, u32 attr, int channel,
        struct nct7904_data *data = dev_get_drvdata(dev);
        int ret, temp;
        unsigned int reg1, reg2, reg3;
+       s8 temps;
 
        switch (attr) {
        case hwmon_temp_input:
@@ -466,7 +468,8 @@ static int nct7904_read_temp(struct device *dev, u32 attr, int channel,
 
        if (ret < 0)
                return ret;
-       *val = ret * 1000;
+       temps = ret;
+       *val = temps * 1000;
        return 0;
 }
 
@@ -1009,6 +1012,13 @@ static int nct7904_probe(struct i2c_client *client,
                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 =
                devm_hwmon_device_register_with_info(dev, client->name, data,
                                                     &nct7904_chip_info, NULL);