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

Commit 22e6b231 authored by Guenter Roeck's avatar Guenter Roeck
Browse files

hwmon: (pmbus) Improve auto-detection of temperature status register



It is possible that a PMBus device supports the READ_TEMPERATURE2 and/or
READ_TEMPERATURE3 registers but does not support READ_TEMPERATURE1.
Improve temperature status register detection to address this condition.

Reported-by: default avatarJean Delvare <khali@linux-fr.org>
Signed-off-by: default avatarGuenter Roeck <guenter.roeck@ericsson.com>
Acked-by: default avatarJean Delvare <khali@linux-fr.org>
Cc: stable@kernel.org # 2.6.39+
parent 0c2a40e2
Loading
Loading
Loading
Loading
+6 −5
Original line number Original line Diff line number Diff line
@@ -59,16 +59,17 @@ static void pmbus_find_sensor_groups(struct i2c_client *client,
		if (pmbus_check_byte_register(client, 0, PMBUS_STATUS_FAN_34))
		if (pmbus_check_byte_register(client, 0, PMBUS_STATUS_FAN_34))
			info->func[0] |= PMBUS_HAVE_STATUS_FAN34;
			info->func[0] |= PMBUS_HAVE_STATUS_FAN34;
	}
	}
	if (pmbus_check_word_register(client, 0, PMBUS_READ_TEMPERATURE_1)) {
	if (pmbus_check_word_register(client, 0, PMBUS_READ_TEMPERATURE_1))
		info->func[0] |= PMBUS_HAVE_TEMP;
		info->func[0] |= PMBUS_HAVE_TEMP;
		if (pmbus_check_byte_register(client, 0,
					      PMBUS_STATUS_TEMPERATURE))
			info->func[0] |= PMBUS_HAVE_STATUS_TEMP;
	}
	if (pmbus_check_word_register(client, 0, PMBUS_READ_TEMPERATURE_2))
	if (pmbus_check_word_register(client, 0, PMBUS_READ_TEMPERATURE_2))
		info->func[0] |= PMBUS_HAVE_TEMP2;
		info->func[0] |= PMBUS_HAVE_TEMP2;
	if (pmbus_check_word_register(client, 0, PMBUS_READ_TEMPERATURE_3))
	if (pmbus_check_word_register(client, 0, PMBUS_READ_TEMPERATURE_3))
		info->func[0] |= PMBUS_HAVE_TEMP3;
		info->func[0] |= PMBUS_HAVE_TEMP3;
	if (info->func[0] & (PMBUS_HAVE_TEMP | PMBUS_HAVE_TEMP2
			     | PMBUS_HAVE_TEMP3)
	    && pmbus_check_byte_register(client, 0,
					 PMBUS_STATUS_TEMPERATURE))
			info->func[0] |= PMBUS_HAVE_STATUS_TEMP;


	/* Sensors detected on all pages */
	/* Sensors detected on all pages */
	for (page = 0; page < info->pages; page++) {
	for (page = 0; page < info->pages; page++) {