Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32dd7c40 authored by Guenter Roeck's avatar Guenter Roeck
Browse files

hwmon: (it87) Add feature flag for VID support



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: default avatarJean Delvare <jdelvare@suse.de>
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent 9faf28ca
Loading
Loading
Loading
Loading
+11 −20
Original line number Diff line number Diff line
@@ -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");