summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSakari Ailus <sakari.ailus@linux.intel.com>2020-09-02 12:09:03 +0200
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>2020-12-03 12:27:31 +0100
commit2989a457171d2b1d457bd378450fe3909eb02623 (patch)
tree6f2808e93835694ac55c94ae3abba57c0caf14e2
parente40f1bcbeea6482bae1e077bb57a21ef5db2b499 (diff)
downloadlinux-2989a457171d2b1d457bd378450fe3909eb02623.tar.bz2
media: ccs: Refactor register reading a little
Rework quirk and 8-bit only access functions with a single function that takes arguments. This is later extensible to support yet more flags. 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-reg-access.c37
1 files changed, 17 insertions, 20 deletions
diff --git a/drivers/media/i2c/ccs/ccs-reg-access.c b/drivers/media/i2c/ccs/ccs-reg-access.c
index a8e9a235bfb3..abec746f3c93 100644
--- a/drivers/media/i2c/ccs/ccs-reg-access.c
+++ b/drivers/media/i2c/ccs/ccs-reg-access.c
@@ -168,39 +168,36 @@ static int __ccs_read_addr(struct ccs_sensor *sensor, u32 reg, u32 *val,
return 0;
}
-int ccs_read_addr_no_quirk(struct ccs_sensor *sensor, u32 reg, u32 *val)
-{
- return __ccs_read_addr(
- sensor, reg, val,
- ccs_needs_quirk(sensor, CCS_QUIRK_FLAG_8BIT_READ_ONLY));
-}
-
-static int ccs_read_addr_quirk(struct ccs_sensor *sensor, u32 reg, u32 *val,
- bool force8)
+static int ccs_read_addr_raw(struct ccs_sensor *sensor, u32 reg, u32 *val,
+ bool force8, bool quirk)
{
int rval;
- *val = 0;
- rval = ccs_call_quirk(sensor, reg_access, false, &reg, val);
- if (rval == -ENOIOCTLCMD)
- return 0;
- if (rval < 0)
- return rval;
+ if (quirk) {
+ *val = 0;
+ rval = ccs_call_quirk(sensor, reg_access, false, &reg, val);
+ if (rval == -ENOIOCTLCMD)
+ return 0;
+ if (rval < 0)
+ return rval;
- if (force8)
- return __ccs_read_addr(sensor, reg, val, true);
+ if (force8)
+ return __ccs_read_addr(sensor, reg, val, true);
+ }
- return ccs_read_addr_no_quirk(sensor, reg, val);
+ return __ccs_read_addr(sensor, reg, val,
+ ccs_needs_quirk(sensor,
+ CCS_QUIRK_FLAG_8BIT_READ_ONLY));
}
int ccs_read_addr(struct ccs_sensor *sensor, u32 reg, u32 *val)
{
- return ccs_read_addr_quirk(sensor, reg, val, false);
+ return ccs_read_addr_raw(sensor, reg, val, false, true);
}
int ccs_read_addr_8only(struct ccs_sensor *sensor, u32 reg, u32 *val)
{
- return ccs_read_addr_quirk(sensor, reg, val, true);
+ return ccs_read_addr_raw(sensor, reg, val, true, true);
}
int ccs_write_addr_no_quirk(struct ccs_sensor *sensor, u32 reg, u32 val)