mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 05:55:44 +02:00
media: atomisp-ov2680: Fix and simplify ov2680_q_exposure()
Switch to ov2680_read_reg() to read all 24 bits in one go; and the exposure value sits in bits 4-19 of the 24 bit exposure register, so we need to shift the read value by 4 to report the correct value. Link: https://lore.kernel.org/linux-media/20211107171549.267583-9-hdegoede@redhat.com Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
3aa39a4935
commit
bc53e5bdbc
|
|
@ -410,32 +410,17 @@ static long ov2680_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
|
|||
static int ov2680_q_exposure(struct v4l2_subdev *sd, s32 *value)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
u32 reg_v, reg_v2;
|
||||
u32 reg_val;
|
||||
int ret;
|
||||
|
||||
/* get exposure */
|
||||
ret = ov2680_read_reg(client, 1,
|
||||
OV2680_EXPOSURE_L,
|
||||
®_v);
|
||||
ret = ov2680_read_reg(client, 3, OV2680_EXPOSURE_H, ®_val);
|
||||
if (ret)
|
||||
goto err;
|
||||
return ret;
|
||||
|
||||
ret = ov2680_read_reg(client, 1,
|
||||
OV2680_EXPOSURE_M,
|
||||
®_v2);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
reg_v += reg_v2 << 8;
|
||||
ret = ov2680_read_reg(client, 1,
|
||||
OV2680_EXPOSURE_H,
|
||||
®_v2);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
*value = reg_v + (reg_v2 << 16);
|
||||
err:
|
||||
return ret;
|
||||
/* Lower four bits are not part of the exposure val (always 0) */
|
||||
*value = reg_val >> 4;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ov2680_v_flip(struct v4l2_subdev *sd, s32 value)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user