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

Commit f065a93e authored by Jan Beulich's avatar Jan Beulich Committed by Guenter Roeck
Browse files

hwmon: (lm85) extend to support EMC6D103 chips



The interface is identical EMC6D102, so all that needs to be added are
some definitions and their uses.

Registers apparently missing in EMC6D103S/EMC6D103:A2 compared to EMC6D103:A0,
EMC6D103:A1, and EMC6D102 (according to the data sheets), but used
unconditionally in the driver: 62[5:7], 6D[0:7], and 6E[0:7]. For that
reason, EMC6D103S chips don't get enabled for the time being.

Signed-off-by: default avatarJan Beulich <jbeulich@novell.com>
(Guenter Roeck: Replaced EMC6D103_A2 with EMC6D103S per EMC6D103S datasheet)
Signed-off-by: default avatarGuenter Roeck <guenter.roeck@ericsson.com>
Cc: stable@kernel.org
parent 4eb2abcd
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -575,7 +575,7 @@ config SENSORS_LM85
	help
	help
	  If you say yes here you get support for National Semiconductor LM85
	  If you say yes here you get support for National Semiconductor LM85
	  sensor chips and clones: ADM1027, ADT7463, ADT7468, EMC6D100,
	  sensor chips and clones: ADM1027, ADT7463, ADT7468, EMC6D100,
	  EMC6D101 and EMC6D102.
	  EMC6D101, EMC6D102, and EMC6D103.


	  This driver can also be built as a module.  If so, the module
	  This driver can also be built as a module.  If so, the module
	  will be called lm85.
	  will be called lm85.
+21 −2
Original line number Original line Diff line number Diff line
@@ -41,7 +41,7 @@ static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
enum chips {
enum chips {
	any_chip, lm85b, lm85c,
	any_chip, lm85b, lm85c,
	adm1027, adt7463, adt7468,
	adm1027, adt7463, adt7468,
	emc6d100, emc6d102
	emc6d100, emc6d102, emc6d103
};
};


/* The LM85 registers */
/* The LM85 registers */
@@ -90,6 +90,9 @@ enum chips {
#define	LM85_VERSTEP_EMC6D100_A0        0x60
#define	LM85_VERSTEP_EMC6D100_A0        0x60
#define	LM85_VERSTEP_EMC6D100_A1        0x61
#define	LM85_VERSTEP_EMC6D100_A1        0x61
#define	LM85_VERSTEP_EMC6D102		0x65
#define	LM85_VERSTEP_EMC6D102		0x65
#define	LM85_VERSTEP_EMC6D103_A0	0x68
#define	LM85_VERSTEP_EMC6D103_A1	0x69
#define	LM85_VERSTEP_EMC6D103S		0x6A	/* Also known as EMC6D103:A2 */


#define	LM85_REG_CONFIG			0x40
#define	LM85_REG_CONFIG			0x40


@@ -348,6 +351,7 @@ static const struct i2c_device_id lm85_id[] = {
	{ "emc6d100", emc6d100 },
	{ "emc6d100", emc6d100 },
	{ "emc6d101", emc6d100 },
	{ "emc6d101", emc6d100 },
	{ "emc6d102", emc6d102 },
	{ "emc6d102", emc6d102 },
	{ "emc6d103", emc6d103 },
	{ }
	{ }
};
};
MODULE_DEVICE_TABLE(i2c, lm85_id);
MODULE_DEVICE_TABLE(i2c, lm85_id);
@@ -1250,6 +1254,20 @@ static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info)
		case LM85_VERSTEP_EMC6D102:
		case LM85_VERSTEP_EMC6D102:
			type_name = "emc6d102";
			type_name = "emc6d102";
			break;
			break;
		case LM85_VERSTEP_EMC6D103_A0:
		case LM85_VERSTEP_EMC6D103_A1:
			type_name = "emc6d103";
			break;
		/*
		 * Registers apparently missing in EMC6D103S/EMC6D103:A2
		 * compared to EMC6D103:A0, EMC6D103:A1, and EMC6D102
		 * (according to the data sheets), but used unconditionally
		 * in the driver: 62[5:7], 6D[0:7], and 6E[0:7].
		 * So skip EMC6D103S for now.
		case LM85_VERSTEP_EMC6D103S:
			type_name = "emc6d103s";
			break;
		 */
		}
		}
	} else {
	} else {
		dev_dbg(&adapter->dev,
		dev_dbg(&adapter->dev,
@@ -1283,6 +1301,7 @@ static int lm85_probe(struct i2c_client *client,
	case adt7468:
	case adt7468:
	case emc6d100:
	case emc6d100:
	case emc6d102:
	case emc6d102:
	case emc6d103:
		data->freq_map = adm1027_freq_map;
		data->freq_map = adm1027_freq_map;
		break;
		break;
	default:
	default:
@@ -1468,7 +1487,7 @@ static struct lm85_data *lm85_update_device(struct device *dev)
			/* More alarm bits */
			/* More alarm bits */
			data->alarms |= lm85_read_value(client,
			data->alarms |= lm85_read_value(client,
						EMC6D100_REG_ALARM3) << 16;
						EMC6D100_REG_ALARM3) << 16;
		} else if (data->type == emc6d102) {
		} else if (data->type == emc6d102 || data->type == emc6d103) {
			/* Have to read LSB bits after the MSB ones because
			/* Have to read LSB bits after the MSB ones because
			   the reading of the MSB bits has frozen the
			   the reading of the MSB bits has frozen the
			   LSBs (backward from the ADM1027).
			   LSBs (backward from the ADM1027).