Hi,
This series adds dt-bindings and a V4L2 driver for Sony IMX678 camera
sensor.
More details about the sensor and features supported in the driver are
in the relevant patches.
Support for binning and cropping has been dropped from this series, in
favor of implementing it with the new raw sensor model proposed by
Sakari. [1]
I still have a branch [2] with patches for binning and cropping using
the old model of S_SELECTION/S_FMT on the source pad, fixing the
comments I received on v3 of this series, in case anybody wants to test
or use it while the raw sensor model support is a WIP.
[1]: https://lore.kernel.org/all/20260409201501.975242-1-sakari.ailus@linux.intel.com/
[2]: https://github.com/jailuthra/linux/commits/imx678-v4
Signed-off-by: Jai Luthra <jai.luthra@ideasonboard.com>
---
Changes in v4:
- Drop support for freely-configurable resolution through cropping and binning
- Expect both specific and generic device name in device tree compatible
- Reduce analogue gain maximum to 100 (30dB) as the gain register
includes digital gain from 101 (30.3dB) -> 240 (72dB)
- Minor bug fixes and cleanups following review comments from Sakari,
Tarang on v3
- Link to v3: https://lore.kernel.org/r/20260520-imx678-v3-0-8b5f9676486e@ideasonboard.com
Changes in v3:
- Use `reset-gpios`, mentioning the sensor XCLR acts like RESETN, instead of `xclr-gpios`
- Update minimum crop width and height according to the PIX_[HV]WIDTH
register limits
- Expect the user to first select a crop rectangle using S_SELECTION,
and then choose one of two sizes (non-binned or binned) in S_FMT. This
matches what IMX296 already does, simplifying the selection logic
quite a bit.
- Enumerate only the frame sizes possible for the current crop rectangle
in ENUM_FRAMESIZES
- Link to v2: https://lore.kernel.org/r/20260516-imx678-v2-0-4854ac61d6fb@ideasonboard.com
Changes in v2:
PATCH 1:
- Add per-variant compatibles for mono and colour, alongside the
generic fallback, so the variant can be declared without powering
the sensor at probe.
- Rename reset GPIO to xclr as that's what it's called in the
datasheet, and how it behaves.
- Reference the generic video interface devices schema and switch to
unevaluatedProperties.
- Drop "link-frequencies: true"
- Drop the T: entry for media.git from MAINTAINERS.
PATCH 2:
- Treat the pixel rate as a fixed sensor property rather than deriving
it from link frequency and bit depth. Removes the iclk<->pixel
conversion helpers, instead using a fixed 8x ratio.
- Express HBLANK in pixels with a step of 8.
- Make VBLANK step = 2 and rewrite the exposure register when VBLANK
changes, so the effective exposure does not silently shift.
- Fix power sequencing: hold the sensor in reset until power_on, add the
missing post-reset delay, and disable the clock before the regulators
on power_off.
- Drop the "common regs written" flag, program them in power_on.
- Add variant match data and cross-check the register-reported type
against DT; rename detect() to identify_model().
- Use v4l2_link_freq_to_bitmap() and expose the full link frequency menu
with the configured one as the selected RO option.
- Drop unused includes and defines, misc cleanups
- Kconfig: depend on OF_GPIO
- Link to v1: https://lore.kernel.org/r/20260513-imx678-v1-0-30fc593ed8fa@ideasonboard.com
---
Jai Luthra (2):
dt-bindings: media: i2c: Add Sony IMX678
media: i2c: imx678: Add driver for Sony IMX678
.../devicetree/bindings/media/i2c/sony,imx678.yaml | 130 ++
MAINTAINERS | 7 +
drivers/media/i2c/Kconfig | 11 +
drivers/media/i2c/Makefile | 1 +
drivers/media/i2c/imx678.c | 1527 ++++++++++++++++++++
5 files changed, 1676 insertions(+)
---
base-commit: 254f49634ee16a731174d2ae34bc50bd5f45e731
change-id: 20260513-imx678-5c1aee9c1dcf
Best regards,
--
Jai Luthra <jai.luthra@ideasonboard.com>