Commit da8e48ab authored by Guenter Roeck's avatar Guenter Roeck

hwmon: (pmbus) Always call _pmbus_read_byte in core driver

Always call _pmbus_read_byte() instead of pmbus_read_byte() in PMBus core
driver. With this change, device specific read functions can be implemented for
all registers.

Since the device specific read_byte function is now always called, we need to be
more careful with page validations. Only fail if the passed page number is larger
than 0, since -1 means "current page".
Signed-off-by: default avatarGuenter Roeck <guenter.roeck@ericsson.com>
Reviewed-by: default avatarRobert Coulson <robert.coulson@ericsson.com>
parent 179144a0
...@@ -144,7 +144,7 @@ static int adm1275_read_byte_data(struct i2c_client *client, int page, int reg) ...@@ -144,7 +144,7 @@ static int adm1275_read_byte_data(struct i2c_client *client, int page, int reg)
const struct adm1275_data *data = to_adm1275_data(info); const struct adm1275_data *data = to_adm1275_data(info);
int mfr_status, ret; int mfr_status, ret;
if (page) if (page > 0)
return -ENXIO; return -ENXIO;
switch (reg) { switch (reg) {
......
...@@ -166,8 +166,8 @@ static int lm25066_write_byte(struct i2c_client *client, int page, u8 value) ...@@ -166,8 +166,8 @@ static int lm25066_write_byte(struct i2c_client *client, int page, u8 value)
if (page > 1) if (page > 1)
return -ENXIO; return -ENXIO;
if (page == 0) if (page <= 0)
return pmbus_write_byte(client, 0, value); return pmbus_write_byte(client, page, value);
return 0; return 0;
} }
......
...@@ -93,12 +93,14 @@ static int max34440_write_word_data(struct i2c_client *client, int page, ...@@ -93,12 +93,14 @@ static int max34440_write_word_data(struct i2c_client *client, int page,
static int max34440_read_byte_data(struct i2c_client *client, int page, int reg) static int max34440_read_byte_data(struct i2c_client *client, int page, int reg)
{ {
int ret; int ret = 0;
int mfg_status; int mfg_status;
ret = pmbus_set_page(client, page); if (page >= 0) {
if (ret < 0) ret = pmbus_set_page(client, page);
return ret; if (ret < 0)
return ret;
}
switch (reg) { switch (reg) {
case PMBUS_STATUS_IOUT: case PMBUS_STATUS_IOUT:
......
...@@ -101,7 +101,7 @@ static int max8688_read_byte_data(struct i2c_client *client, int page, int reg) ...@@ -101,7 +101,7 @@ static int max8688_read_byte_data(struct i2c_client *client, int page, int reg)
int ret = 0; int ret = 0;
int mfg_status; int mfg_status;
if (page) if (page > 0)
return -ENXIO; return -ENXIO;
switch (reg) { switch (reg) {
......
...@@ -316,9 +316,9 @@ static int pmbus_check_status_cml(struct i2c_client *client) ...@@ -316,9 +316,9 @@ static int pmbus_check_status_cml(struct i2c_client *client)
{ {
int status, status2; int status, status2;
status = pmbus_read_byte_data(client, -1, PMBUS_STATUS_BYTE); status = _pmbus_read_byte_data(client, -1, PMBUS_STATUS_BYTE);
if (status < 0 || (status & PB_STATUS_CML)) { if (status < 0 || (status & PB_STATUS_CML)) {
status2 = pmbus_read_byte_data(client, -1, PMBUS_STATUS_CML); status2 = _pmbus_read_byte_data(client, -1, PMBUS_STATUS_CML);
if (status2 < 0 || (status2 & PB_CML_FAULT_INVALID_COMMAND)) if (status2 < 0 || (status2 & PB_CML_FAULT_INVALID_COMMAND))
return -EIO; return -EIO;
} }
...@@ -371,8 +371,8 @@ static struct pmbus_data *pmbus_update_device(struct device *dev) ...@@ -371,8 +371,8 @@ static struct pmbus_data *pmbus_update_device(struct device *dev)
for (i = 0; i < info->pages; i++) for (i = 0; i < info->pages; i++)
data->status[PB_STATUS_BASE + i] data->status[PB_STATUS_BASE + i]
= pmbus_read_byte_data(client, i, = _pmbus_read_byte_data(client, i,
PMBUS_STATUS_BYTE); PMBUS_STATUS_BYTE);
for (i = 0; i < info->pages; i++) { for (i = 0; i < info->pages; i++) {
if (!(info->func[i] & PMBUS_HAVE_STATUS_VOUT)) if (!(info->func[i] & PMBUS_HAVE_STATUS_VOUT))
continue; continue;
...@@ -1596,7 +1596,7 @@ static int pmbus_identify_common(struct i2c_client *client, ...@@ -1596,7 +1596,7 @@ static int pmbus_identify_common(struct i2c_client *client,
int vout_mode = -1, exponent; int vout_mode = -1, exponent;
if (pmbus_check_byte_register(client, 0, PMBUS_VOUT_MODE)) if (pmbus_check_byte_register(client, 0, PMBUS_VOUT_MODE))
vout_mode = pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE); vout_mode = _pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE);
if (vout_mode >= 0 && vout_mode != 0xff) { if (vout_mode >= 0 && vout_mode != 0xff) {
/* /*
* Not all chips support the VOUT_MODE command, * Not all chips support the VOUT_MODE command,
......
...@@ -74,7 +74,7 @@ static int ucd9000_read_byte_data(struct i2c_client *client, int page, int reg) ...@@ -74,7 +74,7 @@ static int ucd9000_read_byte_data(struct i2c_client *client, int page, int reg)
switch (reg) { switch (reg) {
case PMBUS_FAN_CONFIG_12: case PMBUS_FAN_CONFIG_12:
if (page) if (page > 0)
return -ENXIO; return -ENXIO;
ret = ucd9000_get_fan_config(client, 0); ret = ucd9000_get_fan_config(client, 0);
...@@ -88,7 +88,7 @@ static int ucd9000_read_byte_data(struct i2c_client *client, int page, int reg) ...@@ -88,7 +88,7 @@ static int ucd9000_read_byte_data(struct i2c_client *client, int page, int reg)
ret = fan_config; ret = fan_config;
break; break;
case PMBUS_FAN_CONFIG_34: case PMBUS_FAN_CONFIG_34:
if (page) if (page > 0)
return -ENXIO; return -ENXIO;
ret = ucd9000_get_fan_config(client, 2); ret = ucd9000_get_fan_config(client, 2);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment