imx477 and imx708: changing long exposure shift doesn't rewrite exposure register

Open
#5,489 1 comment 0 reactions 1 assignee View on GitHub

@6by9 is already working on this.

Since Jun 2, 2023.

Assessment

This issue has not been assessed yet.

Description

Describe the bug

Noted when reviewing imx258, and logging so we don't forget.
https://patchwork.linuxtv.org/project/linux-media/patch/20230530173000.3060865-15-dave.stevenson@raspberrypi.com/

Start the sensor and __v4l2_ctrl_handler_setup will set all the registers for all controls.
Change V4L2_CID_VBLANK to a value that requires a different value in IMX477_LONG_EXP_SHIFT_REG
IMX477_REG_EXPOSURE will not get rewritten, therefore the exposure is incorrect.

Similarly there is no guarantee that __v4l2_ctrl_handler_setup will call s_ctrl for V4L2_CID_VBLANK (and set imx477->long_exp_shift) before s_ctrl V4L2_CID_EXPOSURE, therefore the initial register setting for exposure may be incorrect.

The shift needs to be computed before the check for pm_runtime_get_if_in_use, and the code after that conditional that applies the settings needs to rewrite IMX477_REG_EXPOSURE if IMX477_LONG_EXP_SHIFT_REG changes.

This applies for imx477 and imx708.

@naushir for info.

Steps to reproduce the behaviour

See above

Device (s)

Raspberry Pi CM4

System

6.1 kernel

Logs

No response

Additional context

No response

Dominant language
C
Stars
13.2k
Forks
5.5k
Avg merge
2d 21h
Merged PRs (30d)
21

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from raspberrypi/linux

All issues in raspberrypi/linux

Similar issues

More C issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.