aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJohn Keeping2023-03-27 12:01:09 +0100
committerKever Yang2023-04-21 15:16:01 +0800
commita48d13535a40b818f76c659602be70db6ebaa07a (patch)
tree630ea19c4bcc449f61e1b54608e18ee4fdc1df59 /drivers
parent999680c4ed80e21e014e94c9bdb79c45a5a5a853 (diff)
rockchip: efuse: fix misc_read() return values
The documentation for misc_read() says: Return: number of bytes read if OK (may be 0 if EOF), -ve on error The Rockchip efuse driver implements this so it should return the number of bytes read rather than zero on success. Fix this so that the driver follows the usual contract for read operations. Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Jonas Karlman <jonas@kwiboo.se> Signed-off-by: John Keeping <john@metanate.com> Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/misc/rockchip-efuse.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/misc/rockchip-efuse.c b/drivers/misc/rockchip-efuse.c
index 60931a51312..2f96b79ea40 100644
--- a/drivers/misc/rockchip-efuse.c
+++ b/drivers/misc/rockchip-efuse.c
@@ -73,7 +73,7 @@ static int dump_efuse(struct cmd_tbl *cmdtp, int flag,
for (i = 0; true; i += sizeof(data)) {
ret = misc_read(dev, i, &data, sizeof(data));
- if (ret < 0)
+ if (ret <= 0)
return 0;
print_buffer(i, data, 1, sizeof(data), sizeof(data));
@@ -238,8 +238,10 @@ static int rockchip_efuse_read(struct udevice *dev, int offset,
offset += data->offset;
- if (data->block_size <= 1)
- return data->read(dev, offset, buf, size);
+ if (data->block_size <= 1) {
+ ret = data->read(dev, offset, buf, size);
+ goto done;
+ }
block_start = offset / data->block_size;
block_offset = offset % data->block_size;
@@ -255,7 +257,9 @@ static int rockchip_efuse_read(struct udevice *dev, int offset,
memcpy(buf, buffer + block_offset, size);
free(buffer);
- return ret;
+
+done:
+ return ret < 0 ? ret : size;
}
static const struct misc_ops rockchip_efuse_ops = {