Read callbacks registered with nvmem core expect 0 to be returned on success and a negative value to be returned on failure.
abx80x_nvmem_xfer() on read calls i2c_smbus_read_i2c_block_data() which returns the number of bytes read on success as per its api description, this return value is handled as an error and returned to nvmem even on success.
Fix to handle all possible values that would be returned by i2c_smbus_read_i2c_block_data().
Fixes: e90ff8ede777 ("rtc: abx80x: Add nvmem support") Cc: stable@vger.kernel.org Signed-off-by: Joy Chakraborty joychakr@google.com --- drivers/rtc/rtc-abx80x.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/rtc/rtc-abx80x.c b/drivers/rtc/rtc-abx80x.c index fde2b8054c2e..1298962402ff 100644 --- a/drivers/rtc/rtc-abx80x.c +++ b/drivers/rtc/rtc-abx80x.c @@ -705,14 +705,18 @@ static int abx80x_nvmem_xfer(struct abx80x_priv *priv, unsigned int offset, if (ret) return ret;
- if (write) + if (write) { ret = i2c_smbus_write_i2c_block_data(priv->client, reg, len, val); - else + if (ret) + return ret; + } else { ret = i2c_smbus_read_i2c_block_data(priv->client, reg, len, val); - if (ret) - return ret; + if (ret <= 0) + return ret ? ret : -EIO; + len = ret; + }
offset += len; val += len;
On Thu, Jun 13, 2024 at 12:07:50PM +0000, Joy Chakraborty wrote:
Read callbacks registered with nvmem core expect 0 to be returned on success and a negative value to be returned on failure.
abx80x_nvmem_xfer() on read calls i2c_smbus_read_i2c_block_data() which returns the number of bytes read on success as per its api description, this return value is handled as an error and returned to nvmem even on success.
Fix to handle all possible values that would be returned by i2c_smbus_read_i2c_block_data().
Fixes: e90ff8ede777 ("rtc: abx80x: Add nvmem support") Cc: stable@vger.kernel.org Signed-off-by: Joy Chakraborty joychakr@google.com
Thanks!
Reviewed-by: Dan Carpenter dan.carpenter@linaro.org
regards, dan carpenter
On 6/13/24 08:07, Joy Chakraborty wrote:
Read callbacks registered with nvmem core expect 0 to be returned on success and a negative value to be returned on failure.
abx80x_nvmem_xfer() on read calls i2c_smbus_read_i2c_block_data() which returns the number of bytes read on success as per its api description, this return value is handled as an error and returned to nvmem even on success.
Humm, I wish this were documented in nvmem-provider.h...
Fix to handle all possible values that would be returned by i2c_smbus_read_i2c_block_data().
Fixes: e90ff8ede777 ("rtc: abx80x: Add nvmem support") Cc: stable@vger.kernel.org Signed-off-by: Joy Chakraborty joychakr@google.com
drivers/rtc/rtc-abx80x.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/rtc/rtc-abx80x.c b/drivers/rtc/rtc-abx80x.c index fde2b8054c2e..1298962402ff 100644 --- a/drivers/rtc/rtc-abx80x.c +++ b/drivers/rtc/rtc-abx80x.c @@ -705,14 +705,18 @@ static int abx80x_nvmem_xfer(struct abx80x_priv *priv, unsigned int offset, if (ret) return ret;
if (write)
if (write) { ret = i2c_smbus_write_i2c_block_data(priv->client, reg, len, val);
else
if (ret)
return ret;
} else { ret = i2c_smbus_read_i2c_block_data(priv->client, reg, len, val);
if (ret)
return ret;
if (ret <= 0)
return ret ? ret : -EIO;
len = ret;
}
offset += len; val += len;
Reviewed-by: Sean Anderson sean.anderson@seco.com
On Thu, 13 Jun 2024 12:07:50 +0000, Joy Chakraborty wrote:
Read callbacks registered with nvmem core expect 0 to be returned on success and a negative value to be returned on failure.
abx80x_nvmem_xfer() on read calls i2c_smbus_read_i2c_block_data() which returns the number of bytes read on success as per its api description, this return value is handled as an error and returned to nvmem even on success.
[...]
Applied, thanks!
[1/1] rtc: abx80x: Fix return value of nvmem callback on read commit: 126b2b4ec0f471d46117ca31b99cd76b1eee48d8
Best regards,
On 21/06/2024 07:23:24+0100, Srinivas Kandagatla wrote:
On Thu, 13 Jun 2024 12:07:50 +0000, Joy Chakraborty wrote:
Read callbacks registered with nvmem core expect 0 to be returned on success and a negative value to be returned on failure.
abx80x_nvmem_xfer() on read calls i2c_smbus_read_i2c_block_data() which returns the number of bytes read on success as per its api description, this return value is handled as an error and returned to nvmem even on success.
[...]
Applied, thanks!
[1/1] rtc: abx80x: Fix return value of nvmem callback on read commit: 126b2b4ec0f471d46117ca31b99cd76b1eee48d8
Please drop it from your tree, I'm going to handle the rtc related patches...
Best regards,
Srinivas Kandagatla srinivas.kandagatla@linaro.org
On 21/06/2024 16:03, Alexandre Belloni wrote:
On 21/06/2024 07:23:24+0100, Srinivas Kandagatla wrote:
On Thu, 13 Jun 2024 12:07:50 +0000, Joy Chakraborty wrote:
Read callbacks registered with nvmem core expect 0 to be returned on success and a negative value to be returned on failure.
abx80x_nvmem_xfer() on read calls i2c_smbus_read_i2c_block_data() which returns the number of bytes read on success as per its api description, this return value is handled as an error and returned to nvmem even on success.
[...]
Applied, thanks!
[1/1] rtc: abx80x: Fix return value of nvmem callback on read commit: 126b2b4ec0f471d46117ca31b99cd76b1eee48d8
Please drop it from your tree, I'm going to handle the rtc related patches...
Sure I will drop it.
--srini
Best regards,
Srinivas Kandagatla srinivas.kandagatla@linaro.org
On Thu, 13 Jun 2024 12:07:50 +0000, Joy Chakraborty wrote:
Read callbacks registered with nvmem core expect 0 to be returned on success and a negative value to be returned on failure.
abx80x_nvmem_xfer() on read calls i2c_smbus_read_i2c_block_data() which returns the number of bytes read on success as per its api description, this return value is handled as an error and returned to nvmem even on success.
[...]
Applied, thanks!
[1/1] rtc: abx80x: Fix return value of nvmem callback on read https://git.kernel.org/abelloni/c/fc82336b50e7
Best regards,
linux-stable-mirror@lists.linaro.org