Commit fdf042df authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'hwmon-for-v6.11-rc8' of...

Merge tag 'hwmon-for-v6.11-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging

Pull hwmon fix from Guenter Roeck:

 - Fix clearing status register bits for chips supporting older
   PMBus versions

* tag 'hwmon-for-v6.11-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
  hwmon: (pmbus) Conditionally clear individual status bits for pmbus rev >= 1.2
parents 5da02886 20471071
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -418,6 +418,12 @@ enum pmbus_sensor_classes {
enum pmbus_data_format { linear = 0, ieee754, direct, vid };
enum vrm_version { vr11 = 0, vr12, vr13, imvp9, amd625mv };

/* PMBus revision identifiers */
#define PMBUS_REV_10 0x00	/* PMBus revision 1.0 */
#define PMBUS_REV_11 0x11	/* PMBus revision 1.1 */
#define PMBUS_REV_12 0x22	/* PMBus revision 1.2 */
#define PMBUS_REV_13 0x33	/* PMBus revision 1.3 */

struct pmbus_driver_info {
	int pages;		/* Total number of pages */
	u8 phases[PMBUS_PAGES];	/* Number of phases per page */
+14 −3
Original line number Diff line number Diff line
@@ -85,6 +85,8 @@ struct pmbus_data {

	u32 flags;		/* from platform data */

	u8 revision;	/* The PMBus revision the device is compliant with */

	int exponent[PMBUS_PAGES];
				/* linear mode: exponent for output voltages */

@@ -1095,9 +1097,14 @@ static int pmbus_get_boolean(struct i2c_client *client, struct pmbus_boolean *b,

	regval = status & mask;
	if (regval) {
		if (data->revision >= PMBUS_REV_12) {
			ret = _pmbus_write_byte_data(client, page, reg, regval);
			if (ret)
				goto unlock;
		} else {
			pmbus_clear_fault_page(client, page);
		}

	}
	if (s1 && s2) {
		s64 v1, v2;
@@ -2640,6 +2647,10 @@ static int pmbus_init_common(struct i2c_client *client, struct pmbus_data *data,
			data->flags |= PMBUS_WRITE_PROTECTED | PMBUS_SKIP_STATUS_CHECK;
	}

	ret = i2c_smbus_read_byte_data(client, PMBUS_REVISION);
	if (ret >= 0)
		data->revision = ret;

	if (data->info->pages)
		pmbus_clear_faults(client);
	else