hwmon: (it87) Add feature flag for VID support
authorGuenter Roeck <linux@roeck-us.net>
Thu, 12 Feb 2015 15:40:23 +0000 (07:40 -0800)
committerGuenter Roeck <linux@roeck-us.net>
Mon, 9 Mar 2015 16:59:36 +0000 (09:59 -0700)
Newer chips don't typically support VID inputs or control.
Add a feature flag for VID support to simplify adding support for
new chips.

Reviewed-by: Jean Delvare <jdelvare@suse.de>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/it87.c

index 48b48939d8938a6c7ce9387e2f5c0d939b6eda6e..9ca10a73aee8a7cb0fe83cc8ded8a416364e440b 100644 (file)
@@ -254,6 +254,7 @@ struct it87_devices {
 #define FEAT_TEMP_OLD_PECI     (1 << 6)
 #define FEAT_FAN16_CONFIG      (1 << 7)        /* Need to enable 16-bit fans */
 #define FEAT_FIVE_FANS         (1 << 8)        /* Supports five fans */
+#define FEAT_VID               (1 << 9)        /* Set if chip supports VID */
 
 static const struct it87_devices it87_devices[] = {
        [it87] = {
@@ -262,22 +263,23 @@ static const struct it87_devices it87_devices[] = {
        },
        [it8712] = {
                .name = "it8712",
-               .features = FEAT_OLD_AUTOPWM,   /* may need to overwrite */
+               .features = FEAT_OLD_AUTOPWM | FEAT_VID,
+                                               /* may need to overwrite */
        },
        [it8716] = {
                .name = "it8716",
-               .features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET
+               .features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET | FEAT_VID
                  | FEAT_FAN16_CONFIG | FEAT_FIVE_FANS,
        },
        [it8718] = {
                .name = "it8718",
-               .features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET
+               .features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET | FEAT_VID
                  | FEAT_TEMP_OLD_PECI | FEAT_FAN16_CONFIG | FEAT_FIVE_FANS,
                .old_peci_mask = 0x4,
        },
        [it8720] = {
                .name = "it8720",
-               .features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET
+               .features = FEAT_16BIT_FANS | FEAT_TEMP_OFFSET | FEAT_VID
                  | FEAT_TEMP_OLD_PECI | FEAT_FAN16_CONFIG | FEAT_FIVE_FANS,
                .old_peci_mask = 0x4,
        },
@@ -353,6 +355,7 @@ static const struct it87_devices it87_devices[] = {
                                 ((data)->old_peci_mask & (1 << nr)))
 #define has_fan16_config(data) ((data)->features & FEAT_FAN16_CONFIG)
 #define has_five_fans(data)    ((data)->features & FEAT_FIVE_FANS)
+#define has_vid(data)          ((data)->features & FEAT_VID)
 
 struct it87_sio_data {
        enum chips type;
@@ -1822,19 +1825,17 @@ static int __init it87_find(unsigned short *address,
        if (sio_data->type != it8603)
                sio_data->skip_in |= (1 << 9);
 
-       /* Read GPIO config and VID value from LDN 7 (GPIO) */
-       if (sio_data->type == it87) {
-               /* The IT8705F doesn't have VID pins at all */
+       if (!(it87_devices[sio_data->type].features & FEAT_VID))
                sio_data->skip_vid = 1;
 
+       /* Read GPIO config and VID value from LDN 7 (GPIO) */
+       if (sio_data->type == it87) {
                /* The IT8705F has a different LD number for GPIO */
                superio_select(5);
                sio_data->beep_pin = superio_inb(IT87_SIO_BEEP_PIN_REG) & 0x3f;
        } else if (sio_data->type == it8783) {
                int reg25, reg27, reg2a, reg2c, regef;
 
-               sio_data->skip_vid = 1; /* No VID */
-
                superio_select(GPIO);
 
                reg25 = superio_inb(IT87_SIO_GPIO1_REG);
@@ -1900,7 +1901,6 @@ static int __init it87_find(unsigned short *address,
        } else if (sio_data->type == it8603) {
                int reg27, reg29;
 
-               sio_data->skip_vid = 1; /* No VID */
                superio_select(GPIO);
 
                reg27 = superio_inb(IT87_SIO_GPIO3_REG);
@@ -1936,16 +1936,7 @@ static int __init it87_find(unsigned short *address,
                superio_select(GPIO);
 
                reg = superio_inb(IT87_SIO_GPIO3_REG);
-               if (sio_data->type == it8721 || sio_data->type == it8728 ||
-                   sio_data->type == it8771 || sio_data->type == it8772 ||
-                   sio_data->type == it8781 || sio_data->type == it8782) {
-                       /*
-                        * IT8721F/IT8758E, IT8728F, IT8772F, IT8781F, and
-                        * IT8782F don't have VID pins at all, not sure about
-                        * the IT8771F.
-                        */
-                       sio_data->skip_vid = 1;
-               } else {
+               if (!sio_data->skip_vid) {
                        /* We need at least 4 VID pins */
                        if (reg & 0x0f) {
                                pr_info("VID is disabled (pins used for GPIO)\n");