summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSakari Ailus <sakari.ailus@linux.intel.com>2020-09-02 12:46:59 +0200
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>2020-12-03 12:27:31 +0100
commit5017f8b4e0ed9ec39c04ac85de6ce49603f5f02b (patch)
treefd7360088c68e98ca55719e54f0eab1b813dfd3f
parent7d2f8ddaac2c1d938302022d40b057b5f31c4e9d (diff)
media: ccs: Move limit value real to integer conversion from read to access time
Instead of converting the limit values at register read time, do that at access time instead. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
-rw-r--r--drivers/media/i2c/ccs/ccs-core.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/drivers/media/i2c/ccs/ccs-core.c b/drivers/media/i2c/ccs/ccs-core.c
index 70b4d2180971..57efc34fc67d 100644
--- a/drivers/media/i2c/ccs/ccs-core.c
+++ b/drivers/media/i2c/ccs/ccs-core.c
@@ -130,6 +130,7 @@ static u32 ccs_get_limit(struct ccs_sensor *sensor,
unsigned int limit, unsigned int offset)
{
void *ptr;
+ u32 val;
int ret;
ret = ccs_limit_ptr(sensor, limit, offset, &ptr);
@@ -138,16 +139,20 @@ static u32 ccs_get_limit(struct ccs_sensor *sensor,
switch (ccs_reg_width(ccs_limits[ccs_limit_offsets[limit].info].reg)) {
case sizeof(u8):
- return *(u8 *)ptr;
+ val = *(u8 *)ptr;
+ break;
case sizeof(u16):
- return *(u16 *)ptr;
+ val = *(u16 *)ptr;
+ break;
case sizeof(u32):
- return *(u32 *)ptr;
+ val = *(u32 *)ptr;
+ break;
+ default:
+ WARN_ON(1);
+ return 0;
}
- WARN_ON(1);
-
- return 0;
+ return ccs_reg_conv(sensor, ccs_limits[limit].reg, val);
}
#define CCS_LIM(sensor, limit) \
@@ -188,7 +193,7 @@ static int ccs_read_all_limits(struct ccs_sensor *sensor)
j++, reg += width, ptr += width) {
u32 val;
- ret = ccs_read_addr(sensor, reg, &val);
+ ret = ccs_read_addr_noconv(sensor, reg, &val);
if (ret)
goto out_err;