aboutsummaryrefslogtreecommitdiff
path: root/drivers/media/i2c/ccs/ccs-reg-access.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/i2c/ccs/ccs-reg-access.c')
-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)