public inbox for linux-mtd@lists.infradead.org
 help / color / mirror / Atom feed
* [PATCH v1 10/17] mtd: core: Change nvmem reg_read/write return type
@ 2024-06-05 18:02 Joy Chakraborty
  2024-06-05 18:02 ` [PATCH v1 11/17] mtd: ubi: nvmem: " Joy Chakraborty
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Joy Chakraborty @ 2024-06-05 18:02 UTC (permalink / raw)
  To: Srinivas Kandagatla, Greg Kroah-Hartman,
	AngeloGioacchino Del Regno, Lars-Peter Clausen, Sakari Ailus,
	Bingbu Cao, Zhihao Cheng, Jerome Brunet, Martin Blumenstingl
  Cc: linux-hwmon, linux-kernel, linux-iio, linux-media, linux-i2c,
	linux-gpio, linux-mtd, linux-rtc, linux-arm-kernel, linux-amlogic,
	linux-sunxi, linux-tegra, linux-usb, manugautam, Joy Chakraborty,
	kernel test robot

Change nvmem read/write function definition return type to ssize_t.

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202406050200.8BOdZUla-lkp@intel.com/
Signed-off-by: Joy Chakraborty <joychakr@google.com>
---
 drivers/mtd/mtdcore.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index 724f917f91ba..b13752ec2f1c 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -530,8 +530,8 @@ int mtd_pairing_groups(struct mtd_info *mtd)
 }
 EXPORT_SYMBOL_GPL(mtd_pairing_groups);
 
-static int mtd_nvmem_reg_read(void *priv, unsigned int offset,
-			      void *val, size_t bytes)
+static ssize_t mtd_nvmem_reg_read(void *priv, unsigned int offset,
+				  void *val, size_t bytes)
 {
 	struct mtd_info *mtd = priv;
 	size_t retlen;
@@ -541,7 +541,7 @@ static int mtd_nvmem_reg_read(void *priv, unsigned int offset,
 	if (err && err != -EUCLEAN)
 		return err;
 
-	return retlen == bytes ? 0 : -EIO;
+	return retlen;
 }
 
 static int mtd_nvmem_add(struct mtd_info *mtd)
@@ -919,8 +919,8 @@ static struct nvmem_device *mtd_otp_nvmem_register(struct mtd_info *mtd,
 	return nvmem;
 }
 
-static int mtd_nvmem_user_otp_reg_read(void *priv, unsigned int offset,
-				       void *val, size_t bytes)
+static ssize_t mtd_nvmem_user_otp_reg_read(void *priv, unsigned int offset,
+					   void *val, size_t bytes)
 {
 	struct mtd_info *mtd = priv;
 	size_t retlen;
@@ -930,11 +930,11 @@ static int mtd_nvmem_user_otp_reg_read(void *priv, unsigned int offset,
 	if (ret)
 		return ret;
 
-	return retlen == bytes ? 0 : -EIO;
+	return retlen;
 }
 
-static int mtd_nvmem_fact_otp_reg_read(void *priv, unsigned int offset,
-				       void *val, size_t bytes)
+static ssize_t mtd_nvmem_fact_otp_reg_read(void *priv, unsigned int offset,
+					   void *val, size_t bytes)
 {
 	struct mtd_info *mtd = priv;
 	size_t retlen;
@@ -944,7 +944,7 @@ static int mtd_nvmem_fact_otp_reg_read(void *priv, unsigned int offset,
 	if (ret)
 		return ret;
 
-	return retlen == bytes ? 0 : -EIO;
+	return retlen;
 }
 
 static int mtd_otp_nvmem_add(struct mtd_info *mtd)
-- 
2.45.1.467.gbab1589fc0-goog


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v1 11/17] mtd: ubi: nvmem: Change nvmem reg_read/write return type
  2024-06-05 18:02 [PATCH v1 10/17] mtd: core: Change nvmem reg_read/write return type Joy Chakraborty
@ 2024-06-05 18:02 ` Joy Chakraborty
  2024-06-05 18:02 ` [PATCH v1 12/17] soc: atmel: sfr: " Joy Chakraborty
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Joy Chakraborty @ 2024-06-05 18:02 UTC (permalink / raw)
  To: Srinivas Kandagatla, Greg Kroah-Hartman,
	AngeloGioacchino Del Regno, Lars-Peter Clausen, Sakari Ailus,
	Bingbu Cao, Zhihao Cheng, Jerome Brunet, Martin Blumenstingl
  Cc: linux-hwmon, linux-kernel, linux-iio, linux-media, linux-i2c,
	linux-gpio, linux-mtd, linux-rtc, linux-arm-kernel, linux-amlogic,
	linux-sunxi, linux-tegra, linux-usb, manugautam, Joy Chakraborty

Change nvmem read/write function definition return type to ssize_t.

Signed-off-by: Joy Chakraborty <joychakr@google.com>
---
 drivers/mtd/ubi/nvmem.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/ubi/nvmem.c b/drivers/mtd/ubi/nvmem.c
index 8aeb9c428e51..eab14821343d 100644
--- a/drivers/mtd/ubi/nvmem.c
+++ b/drivers/mtd/ubi/nvmem.c
@@ -20,8 +20,8 @@ struct ubi_nvmem {
 	struct list_head list;
 };
 
-static int ubi_nvmem_reg_read(void *priv, unsigned int from,
-			      void *val, size_t bytes)
+static ssize_t ubi_nvmem_reg_read(void *priv, unsigned int from,
+				  void *val, size_t bytes)
 {
 	size_t to_read, bytes_left = bytes;
 	struct ubi_nvmem *unv = priv;
@@ -55,7 +55,7 @@ static int ubi_nvmem_reg_read(void *priv, unsigned int from,
 	if (err)
 		return err;
 
-	return bytes_left == 0 ? 0 : -EIO;
+	return bytes - bytes_left;
 }
 
 static int ubi_nvmem_add(struct ubi_volume_info *vi)
-- 
2.45.1.467.gbab1589fc0-goog


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v1 12/17] soc: atmel: sfr: Change nvmem reg_read/write return type
  2024-06-05 18:02 [PATCH v1 10/17] mtd: core: Change nvmem reg_read/write return type Joy Chakraborty
  2024-06-05 18:02 ` [PATCH v1 11/17] mtd: ubi: nvmem: " Joy Chakraborty
@ 2024-06-05 18:02 ` Joy Chakraborty
  2024-06-05 18:02 ` [PATCH v1 13/17] w1: slaves: w1_ds250x: " Joy Chakraborty
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Joy Chakraborty @ 2024-06-05 18:02 UTC (permalink / raw)
  To: Srinivas Kandagatla, Greg Kroah-Hartman,
	AngeloGioacchino Del Regno, Lars-Peter Clausen, Sakari Ailus,
	Bingbu Cao, Zhihao Cheng, Jerome Brunet, Martin Blumenstingl
  Cc: linux-hwmon, linux-kernel, linux-iio, linux-media, linux-i2c,
	linux-gpio, linux-mtd, linux-rtc, linux-arm-kernel, linux-amlogic,
	linux-sunxi, linux-tegra, linux-usb, manugautam, Joy Chakraborty

Change nvmem read/write function definition return type to ssize_t.

Signed-off-by: Joy Chakraborty <joychakr@google.com>
---
 drivers/soc/atmel/sfr.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/soc/atmel/sfr.c b/drivers/soc/atmel/sfr.c
index cc94ca1b494c..c1c8e59cf6fc 100644
--- a/drivers/soc/atmel/sfr.c
+++ b/drivers/soc/atmel/sfr.c
@@ -20,13 +20,16 @@ struct atmel_sfr_priv {
 	struct regmap			*regmap;
 };
 
-static int atmel_sfr_read(void *context, unsigned int offset,
-			  void *buf, size_t bytes)
+static ssize_t atmel_sfr_read(void *context, unsigned int offset,
+			      void *buf, size_t bytes)
 {
 	struct atmel_sfr_priv *priv = context;
+	int ret;
+
+	ret = regmap_bulk_read(priv->regmap, SFR_SN0 + offset,
+			       buf, bytes / 4);
 
-	return regmap_bulk_read(priv->regmap, SFR_SN0 + offset,
-				buf, bytes / 4);
+	return ret < 0 ? ret : bytes;
 }
 
 static struct nvmem_config atmel_sfr_nvmem_config = {
-- 
2.45.1.467.gbab1589fc0-goog


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v1 13/17] w1: slaves: w1_ds250x: Change nvmem reg_read/write return type
  2024-06-05 18:02 [PATCH v1 10/17] mtd: core: Change nvmem reg_read/write return type Joy Chakraborty
  2024-06-05 18:02 ` [PATCH v1 11/17] mtd: ubi: nvmem: " Joy Chakraborty
  2024-06-05 18:02 ` [PATCH v1 12/17] soc: atmel: sfr: " Joy Chakraborty
@ 2024-06-05 18:02 ` Joy Chakraborty
  2024-06-05 18:02 ` [PATCH v1 14/17] thunderbolt: switch: " Joy Chakraborty
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Joy Chakraborty @ 2024-06-05 18:02 UTC (permalink / raw)
  To: Srinivas Kandagatla, Greg Kroah-Hartman,
	AngeloGioacchino Del Regno, Lars-Peter Clausen, Sakari Ailus,
	Bingbu Cao, Zhihao Cheng, Jerome Brunet, Martin Blumenstingl
  Cc: linux-hwmon, linux-kernel, linux-iio, linux-media, linux-i2c,
	linux-gpio, linux-mtd, linux-rtc, linux-arm-kernel, linux-amlogic,
	linux-sunxi, linux-tegra, linux-usb, manugautam, Joy Chakraborty

Change nvmem read/write function definition return type to ssize_t.

Signed-off-by: Joy Chakraborty <joychakr@google.com>
---
 drivers/w1/slaves/w1_ds250x.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/w1/slaves/w1_ds250x.c b/drivers/w1/slaves/w1_ds250x.c
index cb426f7dd23d..369de01cd84b 100644
--- a/drivers/w1/slaves/w1_ds250x.c
+++ b/drivers/w1/slaves/w1_ds250x.c
@@ -137,7 +137,7 @@ static int w1_ds2505_read_page(struct w1_slave *sl, int pageno)
 	return ret;
 }
 
-static int w1_nvmem_read(void *priv, unsigned int off, void *buf, size_t count)
+static ssize_t w1_nvmem_read(void *priv, unsigned int off, void *buf, size_t count)
 {
 	struct w1_slave *sl = priv;
 	struct w1_eprom_data *data = sl->family_data;
@@ -159,7 +159,7 @@ static int w1_nvmem_read(void *priv, unsigned int off, void *buf, size_t count)
 	} while (i < OFF2PG(off + count));
 
 	memcpy(buf, &data->eprom[off], count);
-	return 0;
+	return count;
 }
 
 static int w1_eprom_add_slave(struct w1_slave *sl)
-- 
2.45.1.467.gbab1589fc0-goog


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v1 14/17] thunderbolt: switch: Change nvmem reg_read/write return type
  2024-06-05 18:02 [PATCH v1 10/17] mtd: core: Change nvmem reg_read/write return type Joy Chakraborty
                   ` (2 preceding siblings ...)
  2024-06-05 18:02 ` [PATCH v1 13/17] w1: slaves: w1_ds250x: " Joy Chakraborty
@ 2024-06-05 18:02 ` Joy Chakraborty
  2024-06-05 18:02 ` [PATCH v1 15/17] thunderbolt: retimer: " Joy Chakraborty
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Joy Chakraborty @ 2024-06-05 18:02 UTC (permalink / raw)
  To: Srinivas Kandagatla, Greg Kroah-Hartman,
	AngeloGioacchino Del Regno, Lars-Peter Clausen, Sakari Ailus,
	Bingbu Cao, Zhihao Cheng, Jerome Brunet, Martin Blumenstingl
  Cc: linux-hwmon, linux-kernel, linux-iio, linux-media, linux-i2c,
	linux-gpio, linux-mtd, linux-rtc, linux-arm-kernel, linux-amlogic,
	linux-sunxi, linux-tegra, linux-usb, manugautam, Joy Chakraborty

Change nvmem read/write function definition return type to ssize_t.

Signed-off-by: Joy Chakraborty <joychakr@google.com>
---
 drivers/thunderbolt/switch.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c
index 326433df5880..35424a65cd3a 100644
--- a/drivers/thunderbolt/switch.c
+++ b/drivers/thunderbolt/switch.c
@@ -301,7 +301,7 @@ int tb_switch_nvm_read(struct tb_switch *sw, unsigned int address, void *buf,
 	return dma_port_flash_read(sw->dma_port, address, buf, size);
 }
 
-static int nvm_read(void *priv, unsigned int offset, void *val, size_t bytes)
+static ssize_t nvm_read(void *priv, unsigned int offset, void *val, size_t bytes)
 {
 	struct tb_nvm *nvm = priv;
 	struct tb_switch *sw = tb_to_switch(nvm->dev);
@@ -321,10 +321,10 @@ static int nvm_read(void *priv, unsigned int offset, void *val, size_t bytes)
 	pm_runtime_mark_last_busy(&sw->dev);
 	pm_runtime_put_autosuspend(&sw->dev);
 
-	return ret;
+	return ret < 0 ? ret : bytes;
 }
 
-static int nvm_write(void *priv, unsigned int offset, void *val, size_t bytes)
+static ssize_t nvm_write(void *priv, unsigned int offset, void *val, size_t bytes)
 {
 	struct tb_nvm *nvm = priv;
 	struct tb_switch *sw = tb_to_switch(nvm->dev);
@@ -342,7 +342,7 @@ static int nvm_write(void *priv, unsigned int offset, void *val, size_t bytes)
 	ret = tb_nvm_write_buf(nvm, offset, val, bytes);
 	mutex_unlock(&sw->tb->lock);
 
-	return ret;
+	return ret < 0 ? ret : bytes;
 }
 
 static int tb_switch_nvm_add(struct tb_switch *sw)
-- 
2.45.1.467.gbab1589fc0-goog


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v1 15/17] thunderbolt: retimer: Change nvmem reg_read/write return type
  2024-06-05 18:02 [PATCH v1 10/17] mtd: core: Change nvmem reg_read/write return type Joy Chakraborty
                   ` (3 preceding siblings ...)
  2024-06-05 18:02 ` [PATCH v1 14/17] thunderbolt: switch: " Joy Chakraborty
@ 2024-06-05 18:02 ` Joy Chakraborty
  2024-06-05 18:02 ` [PATCH v1 16/17] soc: tegra: fuse: " Joy Chakraborty
  2024-06-05 18:02 ` [PATCH v1 17/17] rtc: " Joy Chakraborty
  6 siblings, 0 replies; 8+ messages in thread
From: Joy Chakraborty @ 2024-06-05 18:02 UTC (permalink / raw)
  To: Srinivas Kandagatla, Greg Kroah-Hartman,
	AngeloGioacchino Del Regno, Lars-Peter Clausen, Sakari Ailus,
	Bingbu Cao, Zhihao Cheng, Jerome Brunet, Martin Blumenstingl
  Cc: linux-hwmon, linux-kernel, linux-iio, linux-media, linux-i2c,
	linux-gpio, linux-mtd, linux-rtc, linux-arm-kernel, linux-amlogic,
	linux-sunxi, linux-tegra, linux-usb, manugautam, Joy Chakraborty

Change nvmem read/write function definition return type to ssize_t.

Signed-off-by: Joy Chakraborty <joychakr@google.com>
---
 drivers/thunderbolt/retimer.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/thunderbolt/retimer.c b/drivers/thunderbolt/retimer.c
index 6eaaa5074ce8..fa52ea11ec28 100644
--- a/drivers/thunderbolt/retimer.c
+++ b/drivers/thunderbolt/retimer.c
@@ -32,7 +32,7 @@ int tb_retimer_nvm_read(struct tb_retimer *rt, unsigned int address, void *buf,
 	return usb4_port_retimer_nvm_read(rt->port, rt->index, address, buf, size);
 }
 
-static int nvm_read(void *priv, unsigned int offset, void *val, size_t bytes)
+static ssize_t nvm_read(void *priv, unsigned int offset, void *val, size_t bytes)
 {
 	struct tb_nvm *nvm = priv;
 	struct tb_retimer *rt = tb_to_retimer(nvm->dev);
@@ -52,10 +52,10 @@ static int nvm_read(void *priv, unsigned int offset, void *val, size_t bytes)
 	pm_runtime_mark_last_busy(&rt->dev);
 	pm_runtime_put_autosuspend(&rt->dev);
 
-	return ret;
+	return ret < 0 ? ret : bytes;
 }
 
-static int nvm_write(void *priv, unsigned int offset, void *val, size_t bytes)
+static ssize_t nvm_write(void *priv, unsigned int offset, void *val, size_t bytes)
 {
 	struct tb_nvm *nvm = priv;
 	struct tb_retimer *rt = tb_to_retimer(nvm->dev);
@@ -67,7 +67,7 @@ static int nvm_write(void *priv, unsigned int offset, void *val, size_t bytes)
 	ret = tb_nvm_write_buf(nvm, offset, val, bytes);
 	mutex_unlock(&rt->tb->lock);
 
-	return ret;
+	return ret < 0 ? ret : bytes;
 }
 
 static int tb_retimer_nvm_add(struct tb_retimer *rt)
-- 
2.45.1.467.gbab1589fc0-goog


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v1 16/17] soc: tegra: fuse: Change nvmem reg_read/write return type
  2024-06-05 18:02 [PATCH v1 10/17] mtd: core: Change nvmem reg_read/write return type Joy Chakraborty
                   ` (4 preceding siblings ...)
  2024-06-05 18:02 ` [PATCH v1 15/17] thunderbolt: retimer: " Joy Chakraborty
@ 2024-06-05 18:02 ` Joy Chakraborty
  2024-06-05 18:02 ` [PATCH v1 17/17] rtc: " Joy Chakraborty
  6 siblings, 0 replies; 8+ messages in thread
From: Joy Chakraborty @ 2024-06-05 18:02 UTC (permalink / raw)
  To: Srinivas Kandagatla, Greg Kroah-Hartman,
	AngeloGioacchino Del Regno, Lars-Peter Clausen, Sakari Ailus,
	Bingbu Cao, Zhihao Cheng, Jerome Brunet, Martin Blumenstingl
  Cc: linux-hwmon, linux-kernel, linux-iio, linux-media, linux-i2c,
	linux-gpio, linux-mtd, linux-rtc, linux-arm-kernel, linux-amlogic,
	linux-sunxi, linux-tegra, linux-usb, manugautam, Joy Chakraborty

Change nvmem read/write function definition return type to ssize_t.

Signed-off-by: Joy Chakraborty <joychakr@google.com>
---
 drivers/soc/tegra/fuse/fuse-tegra.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/soc/tegra/fuse/fuse-tegra.c b/drivers/soc/tegra/fuse/fuse-tegra.c
index b6bfd6729df3..1b067dd8a585 100644
--- a/drivers/soc/tegra/fuse/fuse-tegra.c
+++ b/drivers/soc/tegra/fuse/fuse-tegra.c
@@ -96,8 +96,8 @@ static const struct of_device_id tegra_fuse_match[] = {
 	{ /* sentinel */ }
 };
 
-static int tegra_fuse_read(void *priv, unsigned int offset, void *value,
-			   size_t bytes)
+static ssize_t tegra_fuse_read(void *priv, unsigned int offset, void *value,
+			       size_t bytes)
 {
 	unsigned int count = bytes / 4, i;
 	struct tegra_fuse *fuse = priv;
@@ -106,7 +106,7 @@ static int tegra_fuse_read(void *priv, unsigned int offset, void *value,
 	for (i = 0; i < count; i++)
 		buffer[i] = fuse->read(fuse, offset + i * 4);
 
-	return 0;
+	return bytes;
 }
 
 static void tegra_fuse_restore(void *base)
-- 
2.45.1.467.gbab1589fc0-goog


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v1 17/17] rtc: Change nvmem reg_read/write return type
  2024-06-05 18:02 [PATCH v1 10/17] mtd: core: Change nvmem reg_read/write return type Joy Chakraborty
                   ` (5 preceding siblings ...)
  2024-06-05 18:02 ` [PATCH v1 16/17] soc: tegra: fuse: " Joy Chakraborty
@ 2024-06-05 18:02 ` Joy Chakraborty
  6 siblings, 0 replies; 8+ messages in thread
From: Joy Chakraborty @ 2024-06-05 18:02 UTC (permalink / raw)
  To: Srinivas Kandagatla, Greg Kroah-Hartman,
	AngeloGioacchino Del Regno, Lars-Peter Clausen, Sakari Ailus,
	Bingbu Cao, Zhihao Cheng, Jerome Brunet, Martin Blumenstingl
  Cc: linux-hwmon, linux-kernel, linux-iio, linux-media, linux-i2c,
	linux-gpio, linux-mtd, linux-rtc, linux-arm-kernel, linux-amlogic,
	linux-sunxi, linux-tegra, linux-usb, manugautam, Joy Chakraborty,
	kernel test robot

Change nvmem read/write function definition return type to ssize_t,
which is inturn used by devm_rtc_nvmem_register()

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202406050200.8BOdZUla-lkp@intel.com/
Closes: https://lore.kernel.org/oe-kbuild-all/202406050356.LGDJ3PPU-lkp@intel.com/
Signed-off-by: Joy Chakraborty <joychakr@google.com>
---
 drivers/rtc/rtc-abx80x.c   | 15 ++++++++-------
 drivers/rtc/rtc-cmos.c     |  8 ++++----
 drivers/rtc/rtc-ds1305.c   | 18 ++++++++++++------
 drivers/rtc/rtc-ds1307.c   | 22 +++++++++++++--------
 drivers/rtc/rtc-ds1343.c   | 18 ++++++++++++------
 drivers/rtc/rtc-ds1511.c   | 12 ++++++------
 drivers/rtc/rtc-ds1553.c   | 14 ++++++++------
 drivers/rtc/rtc-ds1685.c   | 14 ++++++++------
 drivers/rtc/rtc-ds1742.c   | 14 ++++++++------
 drivers/rtc/rtc-ds3232.c   | 22 +++++++++++++--------
 drivers/rtc/rtc-isl12026.c | 12 ++++++------
 drivers/rtc/rtc-isl1208.c  |  8 ++++----
 drivers/rtc/rtc-m48t59.c   | 12 ++++++------
 drivers/rtc/rtc-m48t86.c   | 12 ++++++------
 drivers/rtc/rtc-max31335.c | 18 ++++++++++++------
 drivers/rtc/rtc-meson.c    | 18 ++++++++++++------
 drivers/rtc/rtc-omap.c     | 12 ++++++------
 drivers/rtc/rtc-pcf2127.c  | 20 +++++++++++--------
 drivers/rtc/rtc-pcf85063.c | 20 +++++++++++++------
 drivers/rtc/rtc-pcf85363.c | 39 +++++++++++++++++++++++---------------
 drivers/rtc/rtc-rp5c01.c   | 14 ++++++++------
 drivers/rtc/rtc-rv3028.c   | 32 +++++++++++++++++++------------
 drivers/rtc/rtc-rv3029c2.c | 20 +++++++++++++------
 drivers/rtc/rtc-rv3032.c   | 24 +++++++++++++++--------
 drivers/rtc/rtc-rv8803.c   | 16 ++++++++++------
 drivers/rtc/rtc-rx8581.c   | 39 +++++++++++++++++++++++---------------
 drivers/rtc/rtc-stk17ta8.c | 14 ++++++++------
 drivers/rtc/rtc-sun6i.c    |  8 ++++----
 drivers/rtc/rtc-ti-k3.c    | 16 ++++++++++------
 drivers/rtc/rtc-twl.c      | 20 +++++++++++++------
 30 files changed, 324 insertions(+), 207 deletions(-)

diff --git a/drivers/rtc/rtc-abx80x.c b/drivers/rtc/rtc-abx80x.c
index fde2b8054c2e..415a575c904b 100644
--- a/drivers/rtc/rtc-abx80x.c
+++ b/drivers/rtc/rtc-abx80x.c
@@ -685,10 +685,11 @@ static int abx80x_setup_watchdog(struct abx80x_priv *priv)
 }
 #endif
 
-static int abx80x_nvmem_xfer(struct abx80x_priv *priv, unsigned int offset,
-			     void *val, size_t bytes, bool write)
+static ssize_t abx80x_nvmem_xfer(struct abx80x_priv *priv, unsigned int offset,
+				 void *val, size_t bytes, bool write)
 {
 	int ret;
+	size_t byte_count = bytes;
 
 	while (bytes) {
 		u8 extram, reg, len, lower, upper;
@@ -719,17 +720,17 @@ static int abx80x_nvmem_xfer(struct abx80x_priv *priv, unsigned int offset,
 		bytes -= len;
 	}
 
-	return 0;
+	return byte_count;
 }
 
-static int abx80x_nvmem_read(void *priv, unsigned int offset, void *val,
-			     size_t bytes)
+static ssize_t abx80x_nvmem_read(void *priv, unsigned int offset, void *val,
+				 size_t bytes)
 {
 	return abx80x_nvmem_xfer(priv, offset, val, bytes, false);
 }
 
-static int abx80x_nvmem_write(void *priv, unsigned int offset, void *val,
-			      size_t bytes)
+static ssize_t abx80x_nvmem_write(void *priv, unsigned int offset, void *val,
+				  size_t bytes)
 {
 	return abx80x_nvmem_xfer(priv, offset, val, bytes, true);
 }
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
index 7d99cd2c37a0..eb8e6947a7e3 100644
--- a/drivers/rtc/rtc-cmos.c
+++ b/drivers/rtc/rtc-cmos.c
@@ -639,8 +639,8 @@ static const struct rtc_class_ops cmos_rtc_ops = {
 
 #define NVRAM_OFFSET	(RTC_REG_D + 1)
 
-static int cmos_nvram_read(void *priv, unsigned int off, void *val,
-			   size_t count)
+static ssize_t cmos_nvram_read(void *priv, unsigned int off, void *val,
+			       size_t count)
 {
 	unsigned char *buf = val;
 	int	retval;
@@ -660,8 +660,8 @@ static int cmos_nvram_read(void *priv, unsigned int off, void *val,
 	return retval;
 }
 
-static int cmos_nvram_write(void *priv, unsigned int off, void *val,
-			    size_t count)
+static ssize_t cmos_nvram_write(void *priv, unsigned int off, void *val,
+				size_t count)
 {
 	struct cmos_rtc	*cmos = priv;
 	unsigned char	*buf = val;
diff --git a/drivers/rtc/rtc-ds1305.c b/drivers/rtc/rtc-ds1305.c
index d4de401548b4..d59798c93dd8 100644
--- a/drivers/rtc/rtc-ds1305.c
+++ b/drivers/rtc/rtc-ds1305.c
@@ -504,34 +504,40 @@ static void msg_init(struct spi_message *m, struct spi_transfer *x,
 	spi_message_add_tail(x, m);
 }
 
-static int ds1305_nvram_read(void *priv, unsigned int off, void *buf,
-			     size_t count)
+static ssize_t ds1305_nvram_read(void *priv, unsigned int off, void *buf,
+				 size_t count)
 {
 	struct ds1305		*ds1305 = priv;
 	struct spi_device	*spi = ds1305->spi;
 	u8			addr;
 	struct spi_message	m;
 	struct spi_transfer	x[2];
+	int ret;
 
 	addr = DS1305_NVRAM + off;
 	msg_init(&m, x, &addr, count, NULL, buf);
 
-	return spi_sync(spi, &m);
+	ret = spi_sync(spi, &m);
+
+	return ret < 0 ? ret : count;
 }
 
-static int ds1305_nvram_write(void *priv, unsigned int off, void *buf,
-			      size_t count)
+static ssize_t ds1305_nvram_write(void *priv, unsigned int off, void *buf,
+				  size_t count)
 {
 	struct ds1305		*ds1305 = priv;
 	struct spi_device	*spi = ds1305->spi;
 	u8			addr;
 	struct spi_message	m;
 	struct spi_transfer	x[2];
+	int ret;
 
 	addr = (DS1305_WRITE | DS1305_NVRAM) + off;
 	msg_init(&m, x, &addr, count, buf, NULL);
 
-	return spi_sync(spi, &m);
+	ret = spi_sync(spi, &m);
+
+	return ret < 0 ? ret : count;
 }
 
 /*----------------------------------------------------------------------*/
diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c
index 506b7d1c2397..179bb3b930d9 100644
--- a/drivers/rtc/rtc-ds1307.c
+++ b/drivers/rtc/rtc-ds1307.c
@@ -1254,24 +1254,30 @@ static int ds1307_add_frequency_test(struct ds1307 *ds1307)
 
 /*----------------------------------------------------------------------*/
 
-static int ds1307_nvram_read(void *priv, unsigned int offset, void *val,
-			     size_t bytes)
+static ssize_t ds1307_nvram_read(void *priv, unsigned int offset, void *val,
+				 size_t bytes)
 {
 	struct ds1307 *ds1307 = priv;
 	const struct chip_desc *chip = &chips[ds1307->type];
+	int ret;
 
-	return regmap_bulk_read(ds1307->regmap, chip->nvram_offset + offset,
-				val, bytes);
+	ret = regmap_bulk_read(ds1307->regmap, chip->nvram_offset + offset,
+			       val, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int ds1307_nvram_write(void *priv, unsigned int offset, void *val,
-			      size_t bytes)
+static ssize_t ds1307_nvram_write(void *priv, unsigned int offset, void *val,
+				  size_t bytes)
 {
 	struct ds1307 *ds1307 = priv;
 	const struct chip_desc *chip = &chips[ds1307->type];
+	int ret;
+
+	ret = regmap_bulk_write(ds1307->regmap, chip->nvram_offset + offset,
+				val, bytes);
 
-	return regmap_bulk_write(ds1307->regmap, chip->nvram_offset + offset,
-				 val, bytes);
+	return ret < 0 ? ret : bytes;
 }
 
 /*----------------------------------------------------------------------*/
diff --git a/drivers/rtc/rtc-ds1343.c b/drivers/rtc/rtc-ds1343.c
index ed5a6ba89a3e..910ee0a0320c 100644
--- a/drivers/rtc/rtc-ds1343.c
+++ b/drivers/rtc/rtc-ds1343.c
@@ -123,20 +123,26 @@ static ssize_t ds1343_store_glitchfilter(struct device *dev,
 static DEVICE_ATTR(glitch_filter, S_IRUGO | S_IWUSR, ds1343_show_glitchfilter,
 			ds1343_store_glitchfilter);
 
-static int ds1343_nvram_write(void *priv, unsigned int off, void *val,
-			      size_t bytes)
+static ssize_t ds1343_nvram_write(void *priv, unsigned int off, void *val,
+				  size_t bytes)
 {
 	struct ds1343_priv *ds1343 = priv;
+	int ret;
 
-	return regmap_bulk_write(ds1343->map, DS1343_NVRAM + off, val, bytes);
+	ret = regmap_bulk_write(ds1343->map, DS1343_NVRAM + off, val, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int ds1343_nvram_read(void *priv, unsigned int off, void *val,
-			     size_t bytes)
+static ssize_t ds1343_nvram_read(void *priv, unsigned int off, void *val,
+				 size_t bytes)
 {
 	struct ds1343_priv *ds1343 = priv;
+	int ret;
+
+	ret = regmap_bulk_read(ds1343->map, DS1343_NVRAM + off, val, bytes);
 
-	return regmap_bulk_read(ds1343->map, DS1343_NVRAM + off, val, bytes);
+	return ret < 0 ? ret : bytes;
 }
 
 static ssize_t ds1343_show_tricklecharger(struct device *dev,
diff --git a/drivers/rtc/rtc-ds1511.c b/drivers/rtc/rtc-ds1511.c
index 8b087d9556be..87128130e106 100644
--- a/drivers/rtc/rtc-ds1511.c
+++ b/drivers/rtc/rtc-ds1511.c
@@ -245,8 +245,8 @@ static const struct rtc_class_ops ds1511_rtc_ops = {
 	.alarm_irq_enable	= ds1511_rtc_alarm_irq_enable,
 };
 
-static int ds1511_nvram_read(void *priv, unsigned int pos, void *buf,
-			     size_t size)
+static ssize_t ds1511_nvram_read(void *priv, unsigned int pos, void *buf,
+				 size_t size)
 {
 	int i;
 
@@ -254,11 +254,11 @@ static int ds1511_nvram_read(void *priv, unsigned int pos, void *buf,
 	for (i = 0; i < size; i++)
 		*(char *)buf++ = rtc_read(DS1511_RAMDATA);
 
-	return 0;
+	return size;
 }
 
-static int ds1511_nvram_write(void *priv, unsigned int pos, void *buf,
-			      size_t size)
+static ssize_t ds1511_nvram_write(void *priv, unsigned int pos, void *buf,
+				  size_t size)
 {
 	int i;
 
@@ -266,7 +266,7 @@ static int ds1511_nvram_write(void *priv, unsigned int pos, void *buf,
 	for (i = 0; i < size; i++)
 		rtc_write(*(char *)buf++, DS1511_RAMDATA);
 
-	return 0;
+	return size;
 }
 
 static int ds1511_rtc_probe(struct platform_device *pdev)
diff --git a/drivers/rtc/rtc-ds1553.c b/drivers/rtc/rtc-ds1553.c
index dbff5b621ef5..ac4304ec21fa 100644
--- a/drivers/rtc/rtc-ds1553.c
+++ b/drivers/rtc/rtc-ds1553.c
@@ -221,30 +221,32 @@ static const struct rtc_class_ops ds1553_rtc_ops = {
 	.alarm_irq_enable	= ds1553_rtc_alarm_irq_enable,
 };
 
-static int ds1553_nvram_read(void *priv, unsigned int pos, void *val,
-			     size_t bytes)
+static ssize_t ds1553_nvram_read(void *priv, unsigned int pos, void *val,
+				 size_t bytes)
 {
 	struct platform_device *pdev = priv;
 	struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
 	void __iomem *ioaddr = pdata->ioaddr;
+	size_t bytes_read = bytes;
 	u8 *buf = val;
 
 	for (; bytes; bytes--)
 		*buf++ = readb(ioaddr + pos++);
-	return 0;
+	return bytes_read;
 }
 
-static int ds1553_nvram_write(void *priv, unsigned int pos, void *val,
-			      size_t bytes)
+static ssize_t ds1553_nvram_write(void *priv, unsigned int pos, void *val,
+				  size_t bytes)
 {
 	struct platform_device *pdev = priv;
 	struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
 	void __iomem *ioaddr = pdata->ioaddr;
+	size_t bytes_written = bytes;
 	u8 *buf = val;
 
 	for (; bytes; bytes--)
 		writeb(*buf++, ioaddr + pos++);
-	return 0;
+	return bytes_written;
 }
 
 static int ds1553_rtc_probe(struct platform_device *pdev)
diff --git a/drivers/rtc/rtc-ds1685.c b/drivers/rtc/rtc-ds1685.c
index 04dbf35cf3b7..0f113cff4b69 100644
--- a/drivers/rtc/rtc-ds1685.c
+++ b/drivers/rtc/rtc-ds1685.c
@@ -837,11 +837,12 @@ ds1685_rtc_ops = {
 };
 /* ----------------------------------------------------------------------- */
 
-static int ds1685_nvram_read(void *priv, unsigned int pos, void *val,
-			     size_t size)
+static ssize_t ds1685_nvram_read(void *priv, unsigned int pos, void *val,
+				 size_t size)
 {
 	struct ds1685_priv *rtc = priv;
 	struct mutex *rtc_mutex = &rtc->dev->ops_lock;
+	size_t size_read = size;
 	ssize_t count;
 	u8 *buf = val;
 	int err;
@@ -901,14 +902,15 @@ static int ds1685_nvram_read(void *priv, unsigned int pos, void *val,
 #endif /* !CONFIG_RTC_DRV_DS1689 */
 	mutex_unlock(rtc_mutex);
 
-	return 0;
+	return size_read;
 }
 
-static int ds1685_nvram_write(void *priv, unsigned int pos, void *val,
-			      size_t size)
+static ssize_t ds1685_nvram_write(void *priv, unsigned int pos, void *val,
+				  size_t size)
 {
 	struct ds1685_priv *rtc = priv;
 	struct mutex *rtc_mutex = &rtc->dev->ops_lock;
+	size_t size_written = size;
 	ssize_t count;
 	u8 *buf = val;
 	int err;
@@ -968,7 +970,7 @@ static int ds1685_nvram_write(void *priv, unsigned int pos, void *val,
 #endif /* !CONFIG_RTC_DRV_DS1689 */
 	mutex_unlock(rtc_mutex);
 
-	return 0;
+	return size_written;
 }
 
 /* ----------------------------------------------------------------------- */
diff --git a/drivers/rtc/rtc-ds1742.c b/drivers/rtc/rtc-ds1742.c
index 6ae8b9a294fe..cdc3159dd69a 100644
--- a/drivers/rtc/rtc-ds1742.c
+++ b/drivers/rtc/rtc-ds1742.c
@@ -114,28 +114,30 @@ static const struct rtc_class_ops ds1742_rtc_ops = {
 	.set_time	= ds1742_rtc_set_time,
 };
 
-static int ds1742_nvram_read(void *priv, unsigned int pos, void *val,
-			     size_t bytes)
+static ssize_t ds1742_nvram_read(void *priv, unsigned int pos, void *val,
+				 size_t bytes)
 {
 	struct rtc_plat_data *pdata = priv;
 	void __iomem *ioaddr = pdata->ioaddr_nvram;
+	ssize_t bytes_read = bytes;
 	u8 *buf = val;
 
 	for (; bytes; bytes--)
 		*buf++ = readb(ioaddr + pos++);
-	return 0;
+	return bytes_read;
 }
 
-static int ds1742_nvram_write(void *priv, unsigned int pos, void *val,
-			      size_t bytes)
+static ssize_t ds1742_nvram_write(void *priv, unsigned int pos, void *val,
+				  size_t bytes)
 {
 	struct rtc_plat_data *pdata = priv;
 	void __iomem *ioaddr = pdata->ioaddr_nvram;
+	ssize_t bytes_written = bytes;
 	u8 *buf = val;
 
 	for (; bytes; bytes--)
 		writeb(*buf++, ioaddr + pos++);
-	return 0;
+	return bytes_written;
 }
 
 static int ds1742_rtc_probe(struct platform_device *pdev)
diff --git a/drivers/rtc/rtc-ds3232.c b/drivers/rtc/rtc-ds3232.c
index 1485a6ae51e6..0ea97da761b6 100644
--- a/drivers/rtc/rtc-ds3232.c
+++ b/drivers/rtc/rtc-ds3232.c
@@ -460,22 +460,28 @@ static const struct rtc_class_ops ds3232_rtc_ops = {
 	.alarm_irq_enable = ds3232_alarm_irq_enable,
 };
 
-static int ds3232_nvmem_read(void *priv, unsigned int offset, void *val,
-			     size_t bytes)
+static ssize_t ds3232_nvmem_read(void *priv, unsigned int offset, void *val,
+				 size_t bytes)
 {
 	struct regmap *ds3232_regmap = (struct regmap *)priv;
+	int ret;
 
-	return regmap_bulk_read(ds3232_regmap, DS3232_REG_SRAM_START + offset,
-				val, bytes);
+	ret = regmap_bulk_read(ds3232_regmap, DS3232_REG_SRAM_START + offset,
+			       val, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int ds3232_nvmem_write(void *priv, unsigned int offset, void *val,
-			      size_t bytes)
+static ssize_t ds3232_nvmem_write(void *priv, unsigned int offset, void *val,
+				  size_t bytes)
 {
 	struct regmap *ds3232_regmap = (struct regmap *)priv;
+	int ret;
+
+	ret = regmap_bulk_write(ds3232_regmap, DS3232_REG_SRAM_START + offset,
+				val, bytes);
 
-	return regmap_bulk_write(ds3232_regmap, DS3232_REG_SRAM_START + offset,
-				 val, bytes);
+	return ret < 0 ? ret : bytes;
 }
 
 static int ds3232_probe(struct device *dev, struct regmap *regmap, int irq,
diff --git a/drivers/rtc/rtc-isl12026.c b/drivers/rtc/rtc-isl12026.c
index 2aabb9151d4c..0368cf3c95cd 100644
--- a/drivers/rtc/rtc-isl12026.c
+++ b/drivers/rtc/rtc-isl12026.c
@@ -274,8 +274,8 @@ static const struct rtc_class_ops isl12026_rtc_ops = {
 	.set_time	= isl12026_rtc_set_time,
 };
 
-static int isl12026_nvm_read(void *p, unsigned int offset,
-			     void *val, size_t bytes)
+static ssize_t isl12026_nvm_read(void *p, unsigned int offset,
+				 void *val, size_t bytes)
 {
 	struct isl12026 *priv = p;
 	int ret;
@@ -315,11 +315,11 @@ static int isl12026_nvm_read(void *p, unsigned int offset,
 		return ret < 0 ? ret : -EIO;
 	}
 
-	return 0;
+	return bytes;
 }
 
-static int isl12026_nvm_write(void *p, unsigned int offset,
-			      void *val, size_t bytes)
+static ssize_t isl12026_nvm_write(void *p, unsigned int offset,
+				  void *val, size_t bytes)
 {
 	struct isl12026 *priv = p;
 	int ret;
@@ -372,7 +372,7 @@ static int isl12026_nvm_write(void *p, unsigned int offset,
 
 	mutex_unlock(&priv->rtc->ops_lock);
 
-	return ret;
+	return ret < 0 ? ret : num_written;
 }
 
 static void isl12026_force_power_modes(struct i2c_client *client)
diff --git a/drivers/rtc/rtc-isl1208.c b/drivers/rtc/rtc-isl1208.c
index e50c23ee1646..3523c18f4034 100644
--- a/drivers/rtc/rtc-isl1208.c
+++ b/drivers/rtc/rtc-isl1208.c
@@ -770,8 +770,8 @@ static const struct attribute_group isl1219_rtc_sysfs_files = {
 	.attrs	= isl1219_rtc_attrs,
 };
 
-static int isl1208_nvmem_read(void *priv, unsigned int off, void *buf,
-			      size_t count)
+static ssize_t isl1208_nvmem_read(void *priv, unsigned int off, void *buf,
+				  size_t count)
 {
 	struct isl1208_state *isl1208 = priv;
 	struct i2c_client *client = to_i2c_client(isl1208->rtc->dev.parent);
@@ -785,8 +785,8 @@ static int isl1208_nvmem_read(void *priv, unsigned int off, void *buf,
 	return ret == 0 ? count : ret;
 }
 
-static int isl1208_nvmem_write(void *priv, unsigned int off, void *buf,
-			       size_t count)
+static ssize_t isl1208_nvmem_write(void *priv, unsigned int off, void *buf,
+				   size_t count)
 {
 	struct isl1208_state *isl1208 = priv;
 	struct i2c_client *client = to_i2c_client(isl1208->rtc->dev.parent);
diff --git a/drivers/rtc/rtc-m48t59.c b/drivers/rtc/rtc-m48t59.c
index f0f6b9b6daec..53e21878effc 100644
--- a/drivers/rtc/rtc-m48t59.c
+++ b/drivers/rtc/rtc-m48t59.c
@@ -313,8 +313,8 @@ static const struct rtc_class_ops m48t59_rtc_ops = {
 	.alarm_irq_enable = m48t59_rtc_alarm_irq_enable,
 };
 
-static int m48t59_nvram_read(void *priv, unsigned int offset, void *val,
-			     size_t size)
+static ssize_t m48t59_nvram_read(void *priv, unsigned int offset, void *val,
+				 size_t size)
 {
 	struct platform_device *pdev = priv;
 	struct device *dev = &pdev->dev;
@@ -331,11 +331,11 @@ static int m48t59_nvram_read(void *priv, unsigned int offset, void *val,
 
 	spin_unlock_irqrestore(&m48t59->lock, flags);
 
-	return 0;
+	return cnt;
 }
 
-static int m48t59_nvram_write(void *priv, unsigned int offset, void *val,
-			      size_t size)
+static ssize_t m48t59_nvram_write(void *priv, unsigned int offset, void *val,
+				  size_t size)
 {
 	struct platform_device *pdev = priv;
 	struct device *dev = &pdev->dev;
@@ -352,7 +352,7 @@ static int m48t59_nvram_write(void *priv, unsigned int offset, void *val,
 
 	spin_unlock_irqrestore(&m48t59->lock, flags);
 
-	return 0;
+	return cnt;
 }
 
 static int m48t59_rtc_probe(struct platform_device *pdev)
diff --git a/drivers/rtc/rtc-m48t86.c b/drivers/rtc/rtc-m48t86.c
index dd4a62e2d39c..c10829617d2e 100644
--- a/drivers/rtc/rtc-m48t86.c
+++ b/drivers/rtc/rtc-m48t86.c
@@ -161,8 +161,8 @@ static const struct rtc_class_ops m48t86_rtc_ops = {
 	.proc		= m48t86_rtc_proc,
 };
 
-static int m48t86_nvram_read(void *priv, unsigned int off, void *buf,
-			     size_t count)
+static ssize_t m48t86_nvram_read(void *priv, unsigned int off, void *buf,
+				 size_t count)
 {
 	struct device *dev = priv;
 	unsigned int i;
@@ -170,11 +170,11 @@ static int m48t86_nvram_read(void *priv, unsigned int off, void *buf,
 	for (i = 0; i < count; i++)
 		((u8 *)buf)[i] = m48t86_readb(dev, M48T86_NVRAM(off + i));
 
-	return 0;
+	return count;
 }
 
-static int m48t86_nvram_write(void *priv, unsigned int off, void *buf,
-			      size_t count)
+static ssize_t m48t86_nvram_write(void *priv, unsigned int off, void *buf,
+				  size_t count)
 {
 	struct device *dev = priv;
 	unsigned int i;
@@ -182,7 +182,7 @@ static int m48t86_nvram_write(void *priv, unsigned int off, void *buf,
 	for (i = 0; i < count; i++)
 		m48t86_writeb(dev, ((u8 *)buf)[i], M48T86_NVRAM(off + i));
 
-	return 0;
+	return count;
 }
 
 /*
diff --git a/drivers/rtc/rtc-max31335.c b/drivers/rtc/rtc-max31335.c
index a2441e5c2c74..03f29ed19e58 100644
--- a/drivers/rtc/rtc-max31335.c
+++ b/drivers/rtc/rtc-max31335.c
@@ -496,22 +496,28 @@ static struct clk_init_data max31335_clk_init = {
 	.ops = &max31335_clkout_ops,
 };
 
-static int max31335_nvmem_reg_read(void *priv, unsigned int offset,
-				   void *val, size_t bytes)
+static ssize_t max31335_nvmem_reg_read(void *priv, unsigned int offset,
+				       void *val, size_t bytes)
 {
 	struct max31335_data *max31335 = priv;
 	unsigned int reg = MAX31335_TS0_SEC_1_128 + offset;
+	int ret;
+
+	ret = regmap_bulk_read(max31335->regmap, reg, val, bytes);
 
-	return regmap_bulk_read(max31335->regmap, reg, val, bytes);
+	return ret < 0 ? ret : bytes;
 }
 
-static int max31335_nvmem_reg_write(void *priv, unsigned int offset,
-				    void *val, size_t bytes)
+static ssize_t max31335_nvmem_reg_write(void *priv, unsigned int offset,
+					void *val, size_t bytes)
 {
 	struct max31335_data *max31335 = priv;
 	unsigned int reg = MAX31335_TS0_SEC_1_128 + offset;
+	int ret;
+
+	ret = regmap_bulk_write(max31335->regmap, reg, val, bytes);
 
-	return regmap_bulk_write(max31335->regmap, reg, val, bytes);
+	return ret < 0 ? ret : bytes;
 }
 
 static struct nvmem_config max31335_nvmem_cfg = {
diff --git a/drivers/rtc/rtc-meson.c b/drivers/rtc/rtc-meson.c
index db1d626edca5..0e4d05a4c68d 100644
--- a/drivers/rtc/rtc-meson.c
+++ b/drivers/rtc/rtc-meson.c
@@ -255,28 +255,34 @@ static const struct rtc_class_ops meson_rtc_ops = {
 
 /* NVMEM interface layer functions */
 
-static int meson_rtc_regmem_read(void *context, unsigned int offset,
-				 void *buf, size_t bytes)
+static ssize_t meson_rtc_regmem_read(void *context, unsigned int offset,
+				     void *buf, size_t bytes)
 {
 	struct meson_rtc *rtc = context;
 	unsigned int read_offset, read_size;
+	int ret;
 
 	read_offset = RTC_REGMEM_0 + (offset / 4);
 	read_size = bytes / 4;
 
-	return regmap_bulk_read(rtc->serial, read_offset, buf, read_size);
+	ret = regmap_bulk_read(rtc->serial, read_offset, buf, read_size);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int meson_rtc_regmem_write(void *context, unsigned int offset,
-				  void *buf, size_t bytes)
+static ssize_t meson_rtc_regmem_write(void *context, unsigned int offset,
+				      void *buf, size_t bytes)
 {
 	struct meson_rtc *rtc = context;
 	unsigned int write_offset, write_size;
+	int ret;
 
 	write_offset = RTC_REGMEM_0 + (offset / 4);
 	write_size = bytes / 4;
 
-	return regmap_bulk_write(rtc->serial, write_offset, buf, write_size);
+	ret = regmap_bulk_write(rtc->serial, write_offset, buf, write_size);
+
+	return ret < 0 ? ret : bytes;
 }
 
 static int meson_rtc_probe(struct platform_device *pdev)
diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
index c6155c48a4ac..81cad3c3690b 100644
--- a/drivers/rtc/rtc-omap.c
+++ b/drivers/rtc/rtc-omap.c
@@ -685,8 +685,8 @@ static struct pinctrl_desc rtc_pinctrl_desc = {
 	.owner = THIS_MODULE,
 };
 
-static int omap_rtc_scratch_read(void *priv, unsigned int offset, void *_val,
-				 size_t bytes)
+static ssize_t omap_rtc_scratch_read(void *priv, unsigned int offset, void *_val,
+				     size_t bytes)
 {
 	struct omap_rtc	*rtc = priv;
 	u32 *val = _val;
@@ -696,11 +696,11 @@ static int omap_rtc_scratch_read(void *priv, unsigned int offset, void *_val,
 		val[i] = rtc_readl(rtc,
 				   OMAP_RTC_SCRATCH0_REG + offset + (i * 4));
 
-	return 0;
+	return bytes;
 }
 
-static int omap_rtc_scratch_write(void *priv, unsigned int offset, void *_val,
-				  size_t bytes)
+static ssize_t omap_rtc_scratch_write(void *priv, unsigned int offset, void *_val,
+				      size_t bytes)
 {
 	struct omap_rtc	*rtc = priv;
 	u32 *val = _val;
@@ -712,7 +712,7 @@ static int omap_rtc_scratch_write(void *priv, unsigned int offset, void *_val,
 			   OMAP_RTC_SCRATCH0_REG + offset + (i * 4), val[i]);
 	rtc->type->lock(rtc);
 
-	return 0;
+	return bytes;
 }
 
 static struct nvmem_config omap_rtc_nvmem_config = {
diff --git a/drivers/rtc/rtc-pcf2127.c b/drivers/rtc/rtc-pcf2127.c
index 9c04c4e1a49c..0303cf51fb3e 100644
--- a/drivers/rtc/rtc-pcf2127.c
+++ b/drivers/rtc/rtc-pcf2127.c
@@ -361,8 +361,8 @@ static int pcf2127_rtc_ioctl(struct device *dev,
 	}
 }
 
-static int pcf2127_nvmem_read(void *priv, unsigned int offset,
-			      void *val, size_t bytes)
+static ssize_t pcf2127_nvmem_read(void *priv, unsigned int offset,
+				  void *val, size_t bytes)
 {
 	struct pcf2127 *pcf2127 = priv;
 	int ret;
@@ -373,12 +373,14 @@ static int pcf2127_nvmem_read(void *priv, unsigned int offset,
 	if (ret)
 		return ret;
 
-	return regmap_bulk_read(pcf2127->regmap, PCF2127_REG_RAM_RD_CMD,
-				val, bytes);
+	ret = regmap_bulk_read(pcf2127->regmap, PCF2127_REG_RAM_RD_CMD,
+			       val, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int pcf2127_nvmem_write(void *priv, unsigned int offset,
-			       void *val, size_t bytes)
+static ssize_t pcf2127_nvmem_write(void *priv, unsigned int offset,
+				   void *val, size_t bytes)
 {
 	struct pcf2127 *pcf2127 = priv;
 	int ret;
@@ -389,8 +391,10 @@ static int pcf2127_nvmem_write(void *priv, unsigned int offset,
 	if (ret)
 		return ret;
 
-	return regmap_bulk_write(pcf2127->regmap, PCF2127_REG_RAM_WRT_CMD,
-				 val, bytes);
+	ret = regmap_bulk_write(pcf2127->regmap, PCF2127_REG_RAM_WRT_CMD,
+				val, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
 /* watchdog driver */
diff --git a/drivers/rtc/rtc-pcf85063.c b/drivers/rtc/rtc-pcf85063.c
index fdbc07f14036..bccb55b4985c 100644
--- a/drivers/rtc/rtc-pcf85063.c
+++ b/drivers/rtc/rtc-pcf85063.c
@@ -319,16 +319,24 @@ static const struct rtc_class_ops pcf85063_rtc_ops = {
 	.ioctl		= pcf85063_ioctl,
 };
 
-static int pcf85063_nvmem_read(void *priv, unsigned int offset,
-			       void *val, size_t bytes)
+static ssize_t pcf85063_nvmem_read(void *priv, unsigned int offset,
+				   void *val, size_t bytes)
 {
-	return regmap_read(priv, PCF85063_REG_RAM, val);
+	int ret;
+
+	ret = regmap_read(priv, PCF85063_REG_RAM, val);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int pcf85063_nvmem_write(void *priv, unsigned int offset,
-				void *val, size_t bytes)
+static ssize_t pcf85063_nvmem_write(void *priv, unsigned int offset,
+				    void *val, size_t bytes)
 {
-	return regmap_write(priv, PCF85063_REG_RAM, *(u8 *)val);
+	int ret;
+
+	ret = regmap_write(priv, PCF85063_REG_RAM, *(u8 *)val);
+
+	return ret < 0 ? ret : bytes;
 }
 
 static int pcf85063_load_capacitance(struct pcf85063 *pcf85063,
diff --git a/drivers/rtc/rtc-pcf85363.c b/drivers/rtc/rtc-pcf85363.c
index 540042b9eec8..3ad91f2ee417 100644
--- a/drivers/rtc/rtc-pcf85363.c
+++ b/drivers/rtc/rtc-pcf85363.c
@@ -319,26 +319,32 @@ static const struct rtc_class_ops rtc_ops = {
 	.alarm_irq_enable = pcf85363_rtc_alarm_irq_enable,
 };
 
-static int pcf85363_nvram_read(void *priv, unsigned int offset, void *val,
-			       size_t bytes)
+static ssize_t pcf85363_nvram_read(void *priv, unsigned int offset, void *val,
+				   size_t bytes)
 {
 	struct pcf85363 *pcf85363 = priv;
+	int ret;
 
-	return regmap_bulk_read(pcf85363->regmap, CTRL_RAM + offset,
-				val, bytes);
+	ret = regmap_bulk_read(pcf85363->regmap, CTRL_RAM + offset,
+			       val, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int pcf85363_nvram_write(void *priv, unsigned int offset, void *val,
-				size_t bytes)
+static ssize_t pcf85363_nvram_write(void *priv, unsigned int offset, void *val,
+				    size_t bytes)
 {
 	struct pcf85363 *pcf85363 = priv;
+	int ret;
 
-	return regmap_bulk_write(pcf85363->regmap, CTRL_RAM + offset,
-				 val, bytes);
+	ret = regmap_bulk_write(pcf85363->regmap, CTRL_RAM + offset,
+				val, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int pcf85x63_nvram_read(void *priv, unsigned int offset, void *val,
-			       size_t bytes)
+static ssize_t pcf85x63_nvram_read(void *priv, unsigned int offset, void *val,
+				   size_t bytes)
 {
 	struct pcf85363 *pcf85363 = priv;
 	unsigned int tmp_val;
@@ -347,18 +353,21 @@ static int pcf85x63_nvram_read(void *priv, unsigned int offset, void *val,
 	ret = regmap_read(pcf85363->regmap, CTRL_RAMBYTE, &tmp_val);
 	(*(unsigned char *) val) = (unsigned char) tmp_val;
 
-	return ret;
+	return ret < 0 ? ret : bytes;
 }
 
-static int pcf85x63_nvram_write(void *priv, unsigned int offset, void *val,
-				size_t bytes)
+static ssize_t pcf85x63_nvram_write(void *priv, unsigned int offset, void *val,
+				    size_t bytes)
 {
 	struct pcf85363 *pcf85363 = priv;
 	unsigned char tmp_val;
+	int ret;
 
 	tmp_val = *((unsigned char *)val);
-	return regmap_write(pcf85363->regmap, CTRL_RAMBYTE,
-				(unsigned int)tmp_val);
+	ret = regmap_write(pcf85363->regmap, CTRL_RAMBYTE,
+			   (unsigned int)tmp_val);
+
+	return ret < 0 ? ret : bytes;
 }
 
 static const struct pcf85x63_config pcf_85263_config = {
diff --git a/drivers/rtc/rtc-rp5c01.c b/drivers/rtc/rtc-rp5c01.c
index 44afa6d996e7..156f9086caab 100644
--- a/drivers/rtc/rtc-rp5c01.c
+++ b/drivers/rtc/rtc-rp5c01.c
@@ -160,10 +160,11 @@ static const struct rtc_class_ops rp5c01_rtc_ops = {
  * byte is stored in BLOCK10, the low nibble in BLOCK11.
  */
 
-static int rp5c01_nvram_read(void *_priv, unsigned int pos, void *val,
-			     size_t bytes)
+static ssize_t rp5c01_nvram_read(void *_priv, unsigned int pos, void *val,
+				 size_t bytes)
 {
 	struct rp5c01_priv *priv = _priv;
+	size_t bytes_read = bytes;
 	u8 *buf = val;
 
 	spin_lock_irq(&priv->lock);
@@ -185,13 +186,14 @@ static int rp5c01_nvram_read(void *_priv, unsigned int pos, void *val,
 	}
 
 	spin_unlock_irq(&priv->lock);
-	return 0;
+	return bytes_read;
 }
 
-static int rp5c01_nvram_write(void *_priv, unsigned int pos, void *val,
-			      size_t bytes)
+static ssize_t rp5c01_nvram_write(void *_priv, unsigned int pos, void *val,
+				  size_t bytes)
 {
 	struct rp5c01_priv *priv = _priv;
+	size_t bytes_written = bytes;
 	u8 *buf = val;
 
 	spin_lock_irq(&priv->lock);
@@ -212,7 +214,7 @@ static int rp5c01_nvram_write(void *_priv, unsigned int pos, void *val,
 	}
 
 	spin_unlock_irq(&priv->lock);
-	return 0;
+	return bytes_written;
 }
 
 static int __init rp5c01_rtc_probe(struct platform_device *dev)
diff --git a/drivers/rtc/rtc-rv3028.c b/drivers/rtc/rtc-rv3028.c
index 2f001c59c61d..3e2c6497f4d7 100644
--- a/drivers/rtc/rtc-rv3028.c
+++ b/drivers/rtc/rtc-rv3028.c
@@ -600,20 +600,28 @@ static int rv3028_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
 	}
 }
 
-static int rv3028_nvram_write(void *priv, unsigned int offset, void *val,
-			      size_t bytes)
+static ssize_t rv3028_nvram_write(void *priv, unsigned int offset, void *val,
+				  size_t bytes)
 {
-	return regmap_bulk_write(priv, RV3028_RAM1 + offset, val, bytes);
+	int ret;
+
+	ret = regmap_bulk_write(priv, RV3028_RAM1 + offset, val, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int rv3028_nvram_read(void *priv, unsigned int offset, void *val,
-			     size_t bytes)
+static ssize_t rv3028_nvram_read(void *priv, unsigned int offset, void *val,
+				 size_t bytes)
 {
-	return regmap_bulk_read(priv, RV3028_RAM1 + offset, val, bytes);
+	int ret;
+
+	ret = regmap_bulk_read(priv, RV3028_RAM1 + offset, val, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int rv3028_eeprom_write(void *priv, unsigned int offset, void *val,
-			       size_t bytes)
+static ssize_t rv3028_eeprom_write(void *priv, unsigned int offset, void *val,
+				   size_t bytes)
 {
 	struct rv3028_data *rv3028 = priv;
 	u32 status, eerd;
@@ -655,11 +663,11 @@ static int rv3028_eeprom_write(void *priv, unsigned int offset, void *val,
 restore_eerd:
 	rv3028_exit_eerd(rv3028, eerd);
 
-	return ret;
+	return ret < 0 ? ret : bytes;
 }
 
-static int rv3028_eeprom_read(void *priv, unsigned int offset, void *val,
-			      size_t bytes)
+static ssize_t rv3028_eeprom_read(void *priv, unsigned int offset, void *val,
+				  size_t bytes)
 {
 	struct rv3028_data *rv3028 = priv;
 	u32 status, eerd, data;
@@ -700,7 +708,7 @@ static int rv3028_eeprom_read(void *priv, unsigned int offset, void *val,
 restore_eerd:
 	rv3028_exit_eerd(rv3028, eerd);
 
-	return ret;
+	return ret < 0 ? ret : bytes;
 }
 
 #ifdef CONFIG_COMMON_CLK
diff --git a/drivers/rtc/rtc-rv3029c2.c b/drivers/rtc/rtc-rv3029c2.c
index 4a81feeb00ff..63466d76eaa1 100644
--- a/drivers/rtc/rtc-rv3029c2.c
+++ b/drivers/rtc/rtc-rv3029c2.c
@@ -472,16 +472,24 @@ static int rv3029_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
 	}
 }
 
-static int rv3029_nvram_write(void *priv, unsigned int offset, void *val,
-			      size_t bytes)
+static ssize_t rv3029_nvram_write(void *priv, unsigned int offset, void *val,
+				  size_t bytes)
 {
-	return regmap_bulk_write(priv, RV3029_RAM_PAGE + offset, val, bytes);
+	int ret;
+
+	ret = regmap_bulk_write(priv, RV3029_RAM_PAGE + offset, val, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int rv3029_nvram_read(void *priv, unsigned int offset, void *val,
-			     size_t bytes)
+static ssize_t rv3029_nvram_read(void *priv, unsigned int offset, void *val,
+				 size_t bytes)
 {
-	return regmap_bulk_read(priv, RV3029_RAM_PAGE + offset, val, bytes);
+	int ret;
+
+	ret = regmap_bulk_read(priv, RV3029_RAM_PAGE + offset, val, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
 static const struct rv3029_trickle_tab_elem {
diff --git a/drivers/rtc/rtc-rv3032.c b/drivers/rtc/rtc-rv3032.c
index 35b2e36b426a..179ea03725c1 100644
--- a/drivers/rtc/rtc-rv3032.c
+++ b/drivers/rtc/rtc-rv3032.c
@@ -484,17 +484,25 @@ static int rv3032_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
 	}
 }
 
-static int rv3032_nvram_write(void *priv, unsigned int offset, void *val, size_t bytes)
+static ssize_t rv3032_nvram_write(void *priv, unsigned int offset, void *val, size_t bytes)
 {
-	return regmap_bulk_write(priv, RV3032_RAM1 + offset, val, bytes);
+	int ret;
+
+	ret = regmap_bulk_write(priv, RV3032_RAM1 + offset, val, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int rv3032_nvram_read(void *priv, unsigned int offset, void *val, size_t bytes)
+static ssize_t rv3032_nvram_read(void *priv, unsigned int offset, void *val, size_t bytes)
 {
-	return regmap_bulk_read(priv, RV3032_RAM1 + offset, val, bytes);
+	int ret;
+
+	ret = regmap_bulk_read(priv, RV3032_RAM1 + offset, val, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int rv3032_eeprom_write(void *priv, unsigned int offset, void *val, size_t bytes)
+static ssize_t rv3032_eeprom_write(void *priv, unsigned int offset, void *val, size_t bytes)
 {
 	struct rv3032_data *rv3032 = priv;
 	u32 status, eerd;
@@ -532,10 +540,10 @@ static int rv3032_eeprom_write(void *priv, unsigned int offset, void *val, size_
 exit_eerd:
 	rv3032_exit_eerd(rv3032, eerd);
 
-	return ret;
+	return ret < 0 ? ret : bytes;
 }
 
-static int rv3032_eeprom_read(void *priv, unsigned int offset, void *val, size_t bytes)
+static ssize_t rv3032_eeprom_read(void *priv, unsigned int offset, void *val, size_t bytes)
 {
 	struct rv3032_data *rv3032 = priv;
 	u32 status, eerd, data;
@@ -572,7 +580,7 @@ static int rv3032_eeprom_read(void *priv, unsigned int offset, void *val, size_t
 exit_eerd:
 	rv3032_exit_eerd(rv3032, eerd);
 
-	return ret;
+	return ret < 0 ? ret : bytes;
 }
 
 static int rv3032_trickle_charger_setup(struct device *dev, struct rv3032_data *rv3032)
diff --git a/drivers/rtc/rtc-rv8803.c b/drivers/rtc/rtc-rv8803.c
index 1327251e527c..a6b02b78b0e6 100644
--- a/drivers/rtc/rtc-rv8803.c
+++ b/drivers/rtc/rtc-rv8803.c
@@ -536,14 +536,18 @@ static int rv8803_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
 	}
 }
 
-static int rv8803_nvram_write(void *priv, unsigned int offset, void *val,
-			      size_t bytes)
+static ssize_t rv8803_nvram_write(void *priv, unsigned int offset, void *val,
+				  size_t bytes)
 {
-	return rv8803_write_reg(priv, RV8803_RAM, *(u8 *)val);
+	int ret;
+
+	ret = rv8803_write_reg(priv, RV8803_RAM, *(u8 *)val);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int rv8803_nvram_read(void *priv, unsigned int offset,
-			     void *val, size_t bytes)
+static ssize_t rv8803_nvram_read(void *priv, unsigned int offset,
+				 void *val, size_t bytes)
 {
 	int ret;
 
@@ -553,7 +557,7 @@ static int rv8803_nvram_read(void *priv, unsigned int offset,
 
 	*(u8 *)val = ret;
 
-	return 0;
+	return ret < 0 ? ret : bytes;
 }
 
 static const struct rtc_class_ops rv8803_rtc_ops = {
diff --git a/drivers/rtc/rtc-rx8581.c b/drivers/rtc/rtc-rx8581.c
index 48efd61a114d..e0d49c2861f2 100644
--- a/drivers/rtc/rtc-rx8581.c
+++ b/drivers/rtc/rtc-rx8581.c
@@ -187,26 +187,32 @@ static const struct rtc_class_ops rx8581_rtc_ops = {
 	.set_time	= rx8581_rtc_set_time,
 };
 
-static int rx8571_nvram_read(void *priv, unsigned int offset, void *val,
-			     size_t bytes)
+static ssize_t rx8571_nvram_read(void *priv, unsigned int offset, void *val,
+				 size_t bytes)
 {
 	struct rx8581 *rx8581 = priv;
+	int ret;
 
-	return regmap_bulk_read(rx8581->regmap, RX8571_USER_RAM + offset,
-				val, bytes);
+	ret = regmap_bulk_read(rx8581->regmap, RX8571_USER_RAM + offset,
+			       val, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int rx8571_nvram_write(void *priv, unsigned int offset, void *val,
-			      size_t bytes)
+static ssize_t rx8571_nvram_write(void *priv, unsigned int offset, void *val,
+				  size_t bytes)
 {
 	struct rx8581 *rx8581 = priv;
+	int ret;
 
-	return regmap_bulk_write(rx8581->regmap, RX8571_USER_RAM + offset,
-				 val, bytes);
+	ret = regmap_bulk_write(rx8581->regmap, RX8571_USER_RAM + offset,
+				val, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int rx85x1_nvram_read(void *priv, unsigned int offset, void *val,
-			     size_t bytes)
+static ssize_t rx85x1_nvram_read(void *priv, unsigned int offset, void *val,
+				 size_t bytes)
 {
 	struct rx8581 *rx8581 = priv;
 	unsigned int tmp_val;
@@ -215,18 +221,21 @@ static int rx85x1_nvram_read(void *priv, unsigned int offset, void *val,
 	ret = regmap_read(rx8581->regmap, RX8581_REG_RAM, &tmp_val);
 	(*(unsigned char *)val) = (unsigned char) tmp_val;
 
-	return ret;
+	return ret < 0 ? ret : bytes;
 }
 
-static int rx85x1_nvram_write(void *priv, unsigned int offset, void *val,
-			      size_t bytes)
+static ssize_t rx85x1_nvram_write(void *priv, unsigned int offset, void *val,
+				  size_t bytes)
 {
 	struct rx8581 *rx8581 = priv;
 	unsigned char tmp_val;
+	int ret;
 
 	tmp_val = *((unsigned char *)val);
-	return regmap_write(rx8581->regmap, RX8581_REG_RAM,
-				(unsigned int)tmp_val);
+	ret = regmap_write(rx8581->regmap, RX8581_REG_RAM,
+			   (unsigned int)tmp_val);
+
+	return ret < 0 ? ret : bytes;
 }
 
 static const struct rx85x1_config rx8581_config = {
diff --git a/drivers/rtc/rtc-stk17ta8.c b/drivers/rtc/rtc-stk17ta8.c
index 7cb6be1b7815..85d811b68a9b 100644
--- a/drivers/rtc/rtc-stk17ta8.c
+++ b/drivers/rtc/rtc-stk17ta8.c
@@ -230,28 +230,30 @@ static const struct rtc_class_ops stk17ta8_rtc_ops = {
 	.alarm_irq_enable	= stk17ta8_rtc_alarm_irq_enable,
 };
 
-static int stk17ta8_nvram_read(void *priv, unsigned int pos, void *val,
-			       size_t bytes)
+static ssize_t stk17ta8_nvram_read(void *priv, unsigned int pos, void *val,
+				   size_t bytes)
 {
 	struct rtc_plat_data *pdata = priv;
 	void __iomem *ioaddr = pdata->ioaddr;
+	size_t bytes_read = bytes;
 	u8 *buf = val;
 
 	for (; bytes; bytes--)
 		*buf++ = readb(ioaddr + pos++);
-	return 0;
+	return bytes_read;
 }
 
-static int stk17ta8_nvram_write(void *priv, unsigned int pos, void *val,
-				size_t bytes)
+static ssize_t stk17ta8_nvram_write(void *priv, unsigned int pos, void *val,
+				    size_t bytes)
 {
 	struct rtc_plat_data *pdata = priv;
 	void __iomem *ioaddr = pdata->ioaddr;
+	size_t bytes_written = bytes;
 	u8 *buf = val;
 
 	for (; bytes; bytes--)
 		writeb(*buf++, ioaddr + pos++);
-	return 0;
+	return bytes_written;
 }
 
 static int stk17ta8_rtc_probe(struct platform_device *pdev)
diff --git a/drivers/rtc/rtc-sun6i.c b/drivers/rtc/rtc-sun6i.c
index 8e0c66906103..62fda0f86364 100644
--- a/drivers/rtc/rtc-sun6i.c
+++ b/drivers/rtc/rtc-sun6i.c
@@ -675,7 +675,7 @@ static const struct rtc_class_ops sun6i_rtc_ops = {
 	.alarm_irq_enable	= sun6i_rtc_alarm_irq_enable
 };
 
-static int sun6i_rtc_nvmem_read(void *priv, unsigned int offset, void *_val, size_t bytes)
+static ssize_t sun6i_rtc_nvmem_read(void *priv, unsigned int offset, void *_val, size_t bytes)
 {
 	struct sun6i_rtc_dev *chip = priv;
 	u32 *val = _val;
@@ -684,10 +684,10 @@ static int sun6i_rtc_nvmem_read(void *priv, unsigned int offset, void *_val, siz
 	for (i = 0; i < bytes / 4; ++i)
 		val[i] = readl(chip->base + SUN6I_GP_DATA + offset + 4 * i);
 
-	return 0;
+	return bytes;
 }
 
-static int sun6i_rtc_nvmem_write(void *priv, unsigned int offset, void *_val, size_t bytes)
+static ssize_t sun6i_rtc_nvmem_write(void *priv, unsigned int offset, void *_val, size_t bytes)
 {
 	struct sun6i_rtc_dev *chip = priv;
 	u32 *val = _val;
@@ -696,7 +696,7 @@ static int sun6i_rtc_nvmem_write(void *priv, unsigned int offset, void *_val, si
 	for (i = 0; i < bytes / 4; ++i)
 		writel(val[i], chip->base + SUN6I_GP_DATA + offset + 4 * i);
 
-	return 0;
+	return bytes;
 }
 
 static struct nvmem_config sun6i_rtc_nvmem_cfg = {
diff --git a/drivers/rtc/rtc-ti-k3.c b/drivers/rtc/rtc-ti-k3.c
index ec759d8f7023..9a1097fcdad6 100644
--- a/drivers/rtc/rtc-ti-k3.c
+++ b/drivers/rtc/rtc-ti-k3.c
@@ -483,16 +483,19 @@ static const struct rtc_class_ops ti_k3_rtc_ops = {
 	.alarm_irq_enable = ti_k3_rtc_alarm_irq_enable,
 };
 
-static int ti_k3_rtc_scratch_read(void *priv_data, unsigned int offset,
-				  void *val, size_t bytes)
+static ssize_t ti_k3_rtc_scratch_read(void *priv_data, unsigned int offset,
+				      void *val, size_t bytes)
 {
 	struct ti_k3_rtc *priv = (struct ti_k3_rtc *)priv_data;
+	int ret;
+
+	ret =  regmap_bulk_read(priv->regmap, REG_K3RTC_SCRATCH0 + offset, val, bytes / 4);
 
-	return regmap_bulk_read(priv->regmap, REG_K3RTC_SCRATCH0 + offset, val, bytes / 4);
+	return ret < 0 ? ret : bytes;
 }
 
-static int ti_k3_rtc_scratch_write(void *priv_data, unsigned int offset,
-				   void *val, size_t bytes)
+static ssize_t ti_k3_rtc_scratch_write(void *priv_data, unsigned int offset,
+				       void *val, size_t bytes)
 {
 	struct ti_k3_rtc *priv = (struct ti_k3_rtc *)priv_data;
 	int ret;
@@ -501,7 +504,8 @@ static int ti_k3_rtc_scratch_write(void *priv_data, unsigned int offset,
 	if (ret)
 		return ret;
 
-	return k3rtc_fence(priv);
+	ret = k3rtc_fence(priv);
+	return ret < 0 ? ret : bytes;
 }
 
 static struct nvmem_config ti_k3_rtc_nvmem_config = {
diff --git a/drivers/rtc/rtc-twl.c b/drivers/rtc/rtc-twl.c
index 13f8ce08243c..b770a5cc1aad 100644
--- a/drivers/rtc/rtc-twl.c
+++ b/drivers/rtc/rtc-twl.c
@@ -487,16 +487,24 @@ static const struct rtc_class_ops twl_rtc_ops = {
 	.alarm_irq_enable = twl_rtc_alarm_irq_enable,
 };
 
-static int twl_nvram_read(void *priv, unsigned int offset, void *val,
-			  size_t bytes)
+static ssize_t twl_nvram_read(void *priv, unsigned int offset, void *val,
+			      size_t bytes)
 {
-	return twl_i2c_read((long)priv, val, offset, bytes);
+	int ret;
+
+	ret = twl_i2c_read((long)priv, val, offset, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
-static int twl_nvram_write(void *priv, unsigned int offset, void *val,
-			   size_t bytes)
+static ssize_t twl_nvram_write(void *priv, unsigned int offset, void *val,
+			       size_t bytes)
 {
-	return twl_i2c_write((long)priv, val, offset, bytes);
+	int ret;
+
+	ret = twl_i2c_write((long)priv, val, offset, bytes);
+
+	return ret < 0 ? ret : bytes;
 }
 
 /*----------------------------------------------------------------------*/
-- 
2.45.1.467.gbab1589fc0-goog


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-06-05 19:17 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-05 18:02 [PATCH v1 10/17] mtd: core: Change nvmem reg_read/write return type Joy Chakraborty
2024-06-05 18:02 ` [PATCH v1 11/17] mtd: ubi: nvmem: " Joy Chakraborty
2024-06-05 18:02 ` [PATCH v1 12/17] soc: atmel: sfr: " Joy Chakraborty
2024-06-05 18:02 ` [PATCH v1 13/17] w1: slaves: w1_ds250x: " Joy Chakraborty
2024-06-05 18:02 ` [PATCH v1 14/17] thunderbolt: switch: " Joy Chakraborty
2024-06-05 18:02 ` [PATCH v1 15/17] thunderbolt: retimer: " Joy Chakraborty
2024-06-05 18:02 ` [PATCH v1 16/17] soc: tegra: fuse: " Joy Chakraborty
2024-06-05 18:02 ` [PATCH v1 17/17] rtc: " Joy Chakraborty

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox