hwmon: (i5500_temp) Don't bind to disabled sensors
authorJean Delvare <jdelvare@suse.de>
Sat, 24 Jan 2015 13:16:21 +0000 (14:16 +0100)
committerJean Delvare <jdelvare@suse.de>
Sat, 24 Jan 2015 13:16:21 +0000 (14:16 +0100)
On many motherboards, for an unknown reason, the thermal sensor seems
to be disabled and will return a constant temperature value of 36.5
degrees Celsius. Don't bind to the device in that case, so that we
don't report this bogus value to userspace.

Signed-off-by: Jean Delvare <jdelvare@suse.de>
Cc: Romain Dolbeau <romain@dolbeau.org>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/i5500_temp.c

index fdcfa9f..fb84a0e 100644 (file)
@@ -121,6 +121,8 @@ static int i5500_temp_probe(struct pci_dev *pdev,
 {
        int err;
        struct device *hwmon_dev;
 {
        int err;
        struct device *hwmon_dev;
+       u32 tstimer;
+       s8 tsfsc;
 
        err = pci_enable_device(pdev);
        if (err) {
 
        err = pci_enable_device(pdev);
        if (err) {
@@ -128,6 +130,13 @@ static int i5500_temp_probe(struct pci_dev *pdev,
                return err;
        }
 
                return err;
        }
 
+       pci_read_config_byte(pdev, REG_TSFSC, &tsfsc);
+       pci_read_config_dword(pdev, REG_TSTIMER, &tstimer);
+       if (tsfsc == 0x7F && tstimer == 0x07D30D40) {
+               dev_warn(&pdev->dev, "Sensor seems to be disabled\n");
+               return -ENODEV;
+       }
+
        hwmon_dev = devm_hwmon_device_register_with_groups(&pdev->dev,
                                                           "intel5500", NULL,
                                                           i5500_temp_groups);
        hwmon_dev = devm_hwmon_device_register_with_groups(&pdev->dev,
                                                           "intel5500", NULL,
                                                           i5500_temp_groups);