From c710fa9ca43dc761a961ef22157c483d8b2ef1d2 Mon Sep 17 00:00:00 2001 From: Zefa Chen Date: Thu, 3 Jul 2025 11:51:07 +0800 Subject: [PATCH] media: i2c: add Lenc calibration initialization configuration Change-Id: I1dd50ed3ed8effe5aa955ff46a09baa177c32cf7 Signed-off-by: Zefa Chen --- drivers/media/i2c/ox03c10.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/drivers/media/i2c/ox03c10.c b/drivers/media/i2c/ox03c10.c index 02d4c8b75f1f..7e213282e76e 100644 --- a/drivers/media/i2c/ox03c10.c +++ b/drivers/media/i2c/ox03c10.c @@ -5200,6 +5200,10 @@ static long ox03c10_compat_ioctl32(struct v4l2_subdev *sd, static int __ox03c10_start_stream(struct ox03c10 *ox03c10) { int ret; +#ifdef OX03C10_LENC_CALIBRATION + u32 val = 0; + int i = 0; +#endif if (ox03c10->cur_mode->hdr_mode == NO_HDR) { if (ox03c10->cur_mode->single_mode == EXPAND_SINGLE_HCG) @@ -5253,7 +5257,36 @@ static int __ox03c10_start_stream(struct ox03c10 *ox03c10) return ret; } } +#ifdef OX03C10_LENC_CALIBRATION + ret = ox03c10_read_reg(ox03c10->client, 0x5003, + OX03C10_REG_VALUE_08BIT, &val); + if (ret) + return -EINVAL; + val &= ~BIT(2); + ret |= ox03c10_write_reg(ox03c10->client, 0x5003, + OX03C10_REG_VALUE_08BIT, val); + val = 0x400; + //init lcg wb gain + for (i = 0; i < 4; i++) + ret |= ox03c10_write_reg(ox03c10->client, OX03C10_REG_LCG_B_GAIN + i * 2, + OX03C10_REG_VALUE_16BIT, val); + //init hcg wb gain + for (i = 0; i < 4; i++) + ret |= ox03c10_write_reg(ox03c10->client, OX03C10_REG_HCG_B_GAIN + i * 2, + OX03C10_REG_VALUE_16BIT, val); + //init vs wb gain + for (i = 0; i < 4; i++) + ret |= ox03c10_write_reg(ox03c10->client, OX03C10_REG_VS_B_GAIN + i * 2, + OX03C10_REG_VALUE_16BIT, val); + + //init spd wb gain + for (i = 0; i < 4; i++) + ret |= ox03c10_write_reg(ox03c10->client, OX03C10_REG_SPD_B_GAIN + i * 2, + OX03C10_REG_VALUE_16BIT, val); + if (ret) + return -EINVAL; +#endif return ox03c10_write_reg(ox03c10->client, OX03C10_REG_CTRL_MODE, OX03C10_REG_VALUE_08BIT, OX03C10_MODE_STREAMING); }