[PATCH v3 00/20] media/imx355: General code cleanups, and adding support for 2 lane operation

From: Dave Stevenson

Date: Wed Jul 08 2026 - 10:56:40 EST


This series came about as we had a customer ask about using imx355,
so I had a look at what was going on.

There was significant duplication between the various mode register lists,
unused parameters around, and no support for advertising the crop
rectangles through get_selection. It also wasn't using V4L2_CCI so
had all the boilerplate for writing registers.
The customer also wanted to run the sensor over only 2 CSI2 data lanes
which required some rework of the clock setup so that the MIPI link
frequency could be run at 445MHz instead of the 360MHz used for 4 lane
mode.

V2 has some fairly substantial differences to V1 as I obtained a datasheet.
Whilst some things worked perfectly, the datasheet declared them as
prohibited. This was largely using dual PLL mode in 2 lane mode, and
LLP is restricted to specific values. Link frequencies are therefore now
derived from the PLL configuration, and pixel rate is computed from that.

Being able to refer against the datasheet, I've pulled an updated version
of David Heidelberg's patch for 24MHz clock support into this series.

I've tried to keep it that the earlier patches are largely cleanups or
minor improvements, and then we get adding 2 lane support, and converting
to using subdev state as they are larger patches.

---
Changes in v3:
- Fixed a number of issues picked up by sashiko-bot
- Unintentionally dropped writing reg 0x030b, which is at the default value anyway.
- Swapped len and val in intermediate patches adding imx355_write_reg before converting
to cci_write
- Initialise colorspace in _open for try_fmt.
- IMX355_REG_TEST_PATTERN is a 16 bit register, but was defined as 8 bit.
- Call pm_runtime_dont_use_autosuspend on remove / probe error
- Missed subdev_lock in set_stream.
- Not addressed the pre-existing issues of double power_off in _probe error path, nor
potential for VBLANK update on mode change not calling s_ctrl if the new value happens
to be the same and therefore exposure range being incorrect. I'll look at them as
separate fixes.
- Variable definition for format and state in imx355_set_ctrl got pushed into the wrong patch
- Collected Krzysztof's R-b tag for the binding patch.
- Link to v2: https://lore.kernel.org/r/20260707-media-imx355-v2-0-1683ec07b897@xxxxxxxxxxxxxxx

Changes in v2:
- Collected Jacopo's R-b tags and implement his review comments.
- Add patches to switch to using the subdev state, clean up colorspace
(sets RAW), use a define for the exposure offset.
- Added DT binding update to permit 2 CSI2 data lanes.
- Link to v1: https://lore.kernel.org/r/20260506-media-imx355-v1-0-660685030455@xxxxxxxxxxxxxxx

---
Dave Stevenson (19):
dt-bindings: media: imx355: Allow 2 CSI2 data lane output
media: imx355: Remove duplicated registers from the mode tables
media: imx355: Remove setting FRM_LENGTH_LINES in the mode regs
media: imx355: Programmatically set the crop parameters for each mode
media: imx355: Set register LINE_LENGTH_PCK programmatically
media: imx355: Set binning mode registers programmatically
media: imx355: Remove link_freq_index from each mode as ununsed
media: imx355: pixel_rate never changes, so don't recompute
media: imx355: Remove redundant fll_min, and implement fixed offset
media: imx355: Add support for get_selection
media: imx355: Use pm_runtime autosuspend_delay
media: imx355: Convert to new CCI register access helpers
media: imx355: Set the colorspace in the format
media: imx355: Define the exposure offset, and use that define
media: imx355: Use NULL ctrl_ops for HBLANK as it is a read-only control
media: imx355: Compute link frequency from PLL setup
media: imx355: Support 2 lane readout
media: imx355: Switch to using the subdev state
media: imx355: Remove storing cur_mode in the state

David Heidelberg (1):
media: i2c: imx355: Add support for 24 MHz external clock

.../devicetree/bindings/media/i2c/sony,imx355.yaml | 11 +-
drivers/media/i2c/Kconfig | 1 +
drivers/media/i2c/imx355.c | 1518 +++++++-------------
3 files changed, 498 insertions(+), 1032 deletions(-)
---
base-commit: 254f49634ee16a731174d2ae34bc50bd5f45e731
change-id: 20260506-media-imx355-a30f5be3deda

Best regards,
--
Dave Stevenson <dave.stevenson@xxxxxxxxxxxxxxx>