Re: [BUG] OV02C10: image upside down in kernel 6.16

From: Frederic Stuyk
Date: Fri Aug 08 2025 - 10:52:10 EST


Hi Bryan,

Based on your answer below, I tested the following minimal patch on kernel 6.16 and confirmed it fixes the image orientation on my laptop (Lenovo ThinkBook 13x G4 IMH):

--- a/drivers/media/i2c/ov02c10.c
+++ b/drivers/media/i2c/ov02c10.c
@@ -107,7 +107,7 @@ static const struct reg_sequence sensor_1928x1092_30fps_setting[] = {
     {0x3816, 0x01},
     {0x3817, 0x01},

-    {0x3820, 0xb0},
+    {0x3820, 0xa8},
     {0x3821, 0x00},
     {0x3822, 0x80},
     {0x3823, 0x08},


Tested ok with gnome camera, qcam & firefox.

Would it make sense to add a quirk specific to this laptop model?

Also, the image appears heavily blue-ish under normal lighting conditions, regardless of the application used. It's a different topic, but I thought it was worth mentioning.

Let me know if there's anything else I can try or information to provide.

Best regards,
Frederic




On 08/08/2025 11:33, Bryan O'Donoghue wrote:
On 08/08/2025 10:27, Bryan O'Donoghue wrote:
On 08/08/2025 10:03, Frederic Stuyk wrote:
Querying the sensor orientation metadata shows:

      $ v4l2-ctl -d /dev/v4l-subdev6 -C camera_sensor_rotation
      camera_sensor_rotation: 0

This control is read-only and cannot be changed.

Register is defined but not used.

deckard$ grep ROT drivers/media/i2c/ov02c10.c
#define OV02C10_ROTATE_CONTROL        CCI_REG8(0x3820)
#define OV02C10_CONFIG_ROTATE        0x18

::set_ctrl()
case V4L2_CID_HFLIP:
case V4L2_CID_VFLIP:
cci_write(ov02c10->regmap, OV02C10_ROTATE_CONTROL,
           ov02c10->hflip->val | ov02c10->vflip->val << 1, &ret);

::init_controls()

ov02c10->hflip = v4l2_ctrl_new_std(ctrl_hdlr, &ov02c10_ctrl_ops,
                                    V4L2_CID_HFLIP, 0, 1, 1, 0);
if (ov02e10->hflip)
         ov02e10->hflip->flags |= V4L2_CTRL_FLAG_MODIFY_LAYOUT;

ov02c10->vflip = v4l2_ctrl_new_std(ctrl_hdlr, &ov02c10_ctrl_ops,
                                    V4L2_CID_VFLIP, 0, 1, 1, 0);
if (ov02c10->vflip)
         ov02c10->vflip->flags |= V4L2_CTRL_FLAG_MODIFY_LAYOUT;

Something like that should work.

I think Hans said the ACPI tables provide the orientation for the sensor.

---
bod

0x3820: default 0xa0

bit5: vflip_blc_0
bit4: vflip_0
bit3: hmirror_0
bit2: hbin4_0
bit1: hbin2_0
bit0: vbinf_0

So you want to set bit3 = 0x08

---
bod