Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da8e48ab authored by Guenter Roeck's avatar Guenter Roeck
Browse files

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
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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) {
+2 −2
Original line number Diff line number Diff line
@@ -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;
}
+6 −4
Original line number Diff line number Diff line
@@ -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;

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

	switch (reg) {
	case PMBUS_STATUS_IOUT:
+1 −1
Original line number Diff line number Diff line
@@ -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) {
+5 −5
Original line number Diff line number Diff line
@@ -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;
	}
@@ -371,7 +371,7 @@ 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_read_byte_data(client, i,
						    PMBUS_STATUS_BYTE);
		for (i = 0; i < info->pages; i++) {
			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;

	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,
Loading