summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRui Miguel Silva <rui.silva@linaro.org>2018-02-20 23:32:11 +0000
committerBryan O'Donoghue <bryan.odonoghue@linaro.org>2019-02-25 12:35:36 +0000
commit7daa09b8f16a5a4e40327ad98fa75f43950bdbce (patch)
tree6bb8043ed961787d4e877578d4be1276da2c4d15
parent8aadfc5b9d4c220d3a99691866957afccf69d367 (diff)
media: ov2680: fix exposure set and get in registers
Register writing and reading fix to handle the high, middle and low part correctly as in datasheet register split. Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
-rw-r--r--drivers/media/i2c/ov2680.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/drivers/media/i2c/ov2680.c b/drivers/media/i2c/ov2680.c
index 2d64f1bdd4de..fd2fda2eaf8e 100644
--- a/drivers/media/i2c/ov2680.c
+++ b/drivers/media/i2c/ov2680.c
@@ -465,18 +465,17 @@ static int ov2680_exposure_set(struct ov2680_dev *sensor, bool auto_exp)
exp = (u32)ctrls->exposure->val;
exp <<= 4;
- ret = ov2680_write_reg(sensor, OV2680_REG_EXPOSURE_PK_LOW,
- (exp << 4) & 0xf0);
+ ret = ov2680_write_reg(sensor, OV2680_REG_EXPOSURE_PK_LOW, exp & 0xf0);
if (ret)
return ret;
ret = ov2680_write_reg(sensor, OV2680_REG_EXPOSURE_PK_MED,
- (exp >> 4) & 0xff);
+ (exp >> 8) & 0xff);
if (ret)
return ret;
return ov2680_write_reg(sensor, OV2680_REG_EXPOSURE_PK_HIGH,
- (exp >> 12) & 0x0f);
+ (exp >> 16) & 0x0f);
}
static int ov2680_exposure_get(struct ov2680_dev *sensor)
@@ -487,19 +486,19 @@ static int ov2680_exposure_get(struct ov2680_dev *sensor)
ret = ov2680_read_reg(sensor, OV2680_REG_EXPOSURE_PK_HIGH, &temp);
if (ret)
return ret;
- exp = ((int)temp & 0x0f) << 12;
+ exp = ((int)temp & 0x0f) << 16;
ret = ov2680_read_reg(sensor, OV2680_REG_EXPOSURE_PK_MED, &temp);
if (ret)
return ret;
- exp |= ((int)temp << 4);
+ exp |= ((int)temp & 0xff) << 8;
ret = ov2680_read_reg(sensor, OV2680_REG_EXPOSURE_PK_LOW, &temp);
if (ret)
return ret;
- exp |= ((int)temp & 0xf0) >> 4;
+ exp |= ((int)temp & 0xf0);
- return exp;
+ return exp >> 4;
}
static int ov2680_auto_exposure_enable(struct ov2680_dev *sensor)