Skip to content

Commit

Permalink
hwmon: (pmbus) Always call _pmbus_read_byte in core driver
Browse files Browse the repository at this point in the history
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: Guenter Roeck <guenter.roeck@ericsson.com>
Reviewed-by: Robert Coulson <robert.coulson@ericsson.com>
  • Loading branch information
Guenter Roeck committed Oct 24, 2011
1 parent 179144a commit da8e48a
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 15 deletions.
2 changes: 1 addition & 1 deletion drivers/hwmon/pmbus/adm1275.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
int mfr_status, ret;

if (page)
if (page > 0)
return -ENXIO;

switch (reg) {
Expand Down
4 changes: 2 additions & 2 deletions drivers/hwmon/pmbus/lm25066.c
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,8 @@ static int lm25066_write_byte(struct i2c_client *client, int page, u8 value)
if (page > 1)
return -ENXIO;

if (page == 0)
return pmbus_write_byte(client, 0, value);
if (page <= 0)
return pmbus_write_byte(client, page, value);

return 0;
}
Expand Down
10 changes: 6 additions & 4 deletions drivers/hwmon/pmbus/max34440.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
int ret;
int ret = 0;
int mfg_status;

ret = pmbus_set_page(client, page);
if (ret < 0)
return ret;
if (page >= 0) {
ret = pmbus_set_page(client, page);
if (ret < 0)
return ret;
}

switch (reg) {
case PMBUS_STATUS_IOUT:
Expand Down
2 changes: 1 addition & 1 deletion drivers/hwmon/pmbus/max8688.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ static int max8688_read_byte_data(struct i2c_client *client, int page, int reg)
int ret = 0;
int mfg_status;

if (page)
if (page > 0)
return -ENXIO;

switch (reg) {
Expand Down
10 changes: 5 additions & 5 deletions drivers/hwmon/pmbus/pmbus_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -316,9 +316,9 @@ static int pmbus_check_status_cml(struct i2c_client *client)
{
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)) {
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))
return -EIO;
}
Expand Down Expand Up @@ -371,8 +371,8 @@ static struct pmbus_data *pmbus_update_device(struct device *dev)

for (i = 0; i < info->pages; i++)
data->status[PB_STATUS_BASE + i]
= pmbus_read_byte_data(client, i,
PMBUS_STATUS_BYTE);
= _pmbus_read_byte_data(client, i,
PMBUS_STATUS_BYTE);
for (i = 0; i < info->pages; i++) {
if (!(info->func[i] & PMBUS_HAVE_STATUS_VOUT))
continue;
Expand Down Expand Up @@ -1596,7 +1596,7 @@ static int pmbus_identify_common(struct i2c_client *client,
int vout_mode = -1, exponent;

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) {
/*
* Not all chips support the VOUT_MODE command,
Expand Down
4 changes: 2 additions & 2 deletions drivers/hwmon/pmbus/ucd9000.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ static int ucd9000_read_byte_data(struct i2c_client *client, int page, int reg)

switch (reg) {
case PMBUS_FAN_CONFIG_12:
if (page)
if (page > 0)
return -ENXIO;

ret = ucd9000_get_fan_config(client, 0);
Expand All @@ -88,7 +88,7 @@ static int ucd9000_read_byte_data(struct i2c_client *client, int page, int reg)
ret = fan_config;
break;
case PMBUS_FAN_CONFIG_34:
if (page)
if (page > 0)
return -ENXIO;

ret = ucd9000_get_fan_config(client, 2);
Expand Down

0 comments on commit da8e48a

Please sign in to comment.