@@ -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);
}
@@ -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;
@@ -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;
}
/*----------------------------------------------------------------------*/
@@ -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;
}
/*----------------------------------------------------------------------*/
@@ -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,
@@ -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)
@@ -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)
@@ -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;
}
/* ----------------------------------------------------------------------- */
@@ -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)
@@ -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,
@@ -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)
@@ -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);
@@ -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)
@@ -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;
}
/*
@@ -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 = {
@@ -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)
@@ -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 = {
@@ -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 */
@@ -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,
@@ -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 = {
@@ -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)
@@ -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
@@ -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 {
@@ -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)
@@ -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 = {
@@ -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 = {
@@ -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)
@@ -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 = {
@@ -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 = {
@@ -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;
}
/*----------------------------------------------------------------------*/
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(-)