From: Guenter Roeck Date: Tue, 1 Mar 2011 21:49:18 +0000 (-0800) Subject: hwmon: (pmbus) More stringent checking of VOUT_MODE register X-Git-Tag: firefly_0821_release~7613^2~2176^2~30 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=83274c68a34094bbb465589e61f91a3714f8d026;p=firefly-linux-kernel-4.4.55.git hwmon: (pmbus) More stringent checking of VOUT_MODE register Some PMBus chips do not support the VOUT_MODE register. To make matters worse, such chips may not return an error when reading the register either, but instead return 0xff. Check if the register exists using pmbus_check_byte_register() before reading its value. In addition, validate the returned value and ignore it if it is 0xff (which is invalid). Reported-by: Greg Schnorr Tested-by: Greg Schnorr Signed-off-by: Guenter Roeck Acked-by: Greg Schnorr --- diff --git a/drivers/hwmon/pmbus_core.c b/drivers/hwmon/pmbus_core.c index 0edab1c9553e..b7c64ba31f4c 100644 --- a/drivers/hwmon/pmbus_core.c +++ b/drivers/hwmon/pmbus_core.c @@ -1426,10 +1426,11 @@ static void pmbus_find_attributes(struct i2c_client *client, static int pmbus_identify_common(struct i2c_client *client, struct pmbus_data *data) { - int vout_mode, exponent; + int vout_mode = -1, exponent; - vout_mode = pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE); - if (vout_mode >= 0) { + if (pmbus_check_byte_register(client, 0, PMBUS_VOUT_MODE)) + vout_mode = pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE); + if (vout_mode >= 0 && vout_mode != 0xff) { /* * Not all chips support the VOUT_MODE command, * so a failure to read it is not an error.