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: Guenter Roeck <guenter.roeck@ericsson.com> Reviewed-by: Robert Coulson <robert.coulson@ericsson.com>
This commit is contained in:
parent
179144a0d4
commit
da8e48ab48
@ -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)
|
|||||||
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,
|
|||||||
|
|
||||||
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;
|
||||||
|
|
||||||
|
if (page >= 0) {
|
||||||
ret = pmbus_set_page(client, page);
|
ret = pmbus_set_page(client, page);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
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)
|
|||||||
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)
|
|||||||
{
|
{
|
||||||
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,7 +371,7 @@ 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))
|
||||||
@ -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)
|
|||||||
|
|
||||||
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)
|
|||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user