[PATCH v5 0/2] media: i2c: Add OmniVision OV6211 image sensor driver
From: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
Date: 2025-08-29 14:42:38
Also in:
linux-media
OmniVision OV6211 is a monochrome image sensor, which produces frames in 8/10-bit raw output format and supports 400x400, 200x200 and 100x100 output image resolution modes. At the moment the only supported resolution in the device driver is 400x400@120fps (Y8). The driver version is based on top of media/master, which contains a new devm_v4l2_sensor_clk_get() helper. Output of v4l2-compliance tool from v4l-utils-1.20.0: ----8<---- v4l2-compliance SHA: not available, 64 bits, 64-bit time_t Compliance test for device /dev/v4l-subdev28: Required ioctls: Allow for multiple opens: test second /dev/v4l-subdev28 open: OK test for unlimited opens: OK test invalid ioctls: OK Debug ioctls: test VIDIOC_LOG_STATUS: OK (Not Supported) Input ioctls: test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported) test VIDIOC_G/S_FREQUENCY: OK (Not Supported) test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported) test VIDIOC_ENUMAUDIO: OK (Not Supported) test VIDIOC_G/S/ENUMINPUT: OK (Not Supported) test VIDIOC_G/S_AUDIO: OK (Not Supported) Inputs: 0 Audio Inputs: 0 Tuners: 0 Output ioctls: test VIDIOC_G/S_MODULATOR: OK (Not Supported) test VIDIOC_G/S_FREQUENCY: OK (Not Supported) test VIDIOC_ENUMAUDOUT: OK (Not Supported) test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported) test VIDIOC_G/S_AUDOUT: OK (Not Supported) Outputs: 0 Audio Outputs: 0 Modulators: 0 Input/Output configuration ioctls: test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported) test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported) test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported) test VIDIOC_G/S_EDID: OK (Not Supported) Control ioctls: test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK test VIDIOC_QUERYCTRL: OK test VIDIOC_G/S_CTRL: OK test VIDIOC_G/S/TRY_EXT_CTRLS: OK test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) Standard Controls: 10 Private Controls: 0 Format ioctls: test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not Supported) test VIDIOC_G/S_PARM: OK (Not Supported) test VIDIOC_G_FBUF: OK (Not Supported) test VIDIOC_G_FMT: OK (Not Supported) test VIDIOC_TRY_FMT: OK (Not Supported) test VIDIOC_S_FMT: OK (Not Supported) test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) test Cropping: OK (Not Supported) test Composing: OK (Not Supported) test Scaling: OK (Not Supported) Codec ioctls: test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) test VIDIOC_G_ENC_INDEX: OK (Not Supported) test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported) Buffer ioctls: test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported) test VIDIOC_EXPBUF: OK (Not Supported) test Requests: OK (Not Supported) Total for device /dev/v4l-subdev28: 41, Succeeded: 41, Failed: 0, Warnings: 0 ----8<---- Link to v4 of the OV6211 camera sensor device driver: - https://lore.kernel.org/all/20250820224541.130229-1-vladimir.zapolskiy@linaro.org/ (local) Changes from v4 to v5: * removed unnecessary explicit setting of ov6211->sd.dev (Tarang), * switched to regulator bulk operations (Sakari, Krzysztof), * minor non-function clean-ups. Link to v3 of the OV6211 camera sensor device driver: - https://lore.kernel.org/all/20250812213024.361267-1-vladimir.zapolskiy@linaro.org/ (local) Changes from v3 to v4: * v4l2_ctrl_handler_init() properly set error in handler, an early check is not mandatory (Tarang, Sakari), * removed pm_runtime_mark_last_busy() since it's called by pm_runtime_put_autosuspend() (Tarang, Sakari), * pm_runtime_get_if_in_use() replaced by pm_runtime_get_if_active() (Sakari), * use v4l2_link_freq_to_bitmap() helper function to check a link frequency map (Sakari), * added a new test pattern control, apparently it's identical to ov7251 one. Link to v2 of the OV6211 camera sensor device driver: - https://lore.kernel.org/all/20250729231454.242748-1-vladimir.zapolskiy@linaro.org/ (local) Changes from v2 to v3: * added Reviewed-by: tag to the device tree binding (Rob), * simplifed access to the associated struct device (Tarang), * ov6211_get_format() replaced by v4l2_subdev_state_get_format() (Tarang), * removed private .cur_mode, since just one mode is supported (Tarang), * removed a custom serialization mutex (Tarang), * set power on before registering the sensor in V4L2 (Tarang), * v4l2_subdev_internal_ops: replaced .open with .init_state, * updated signature of ov6211_update_pad_format() to generalize it and to simplify adding more modes in future, * replaced a custom .s_stream from v4l2_subdev_video_ops by .enable_streams and .disable_streams callbacks in v4l2_subdev_pad_ops, * add support of PM runtime autosuspend into the driver, * taking into account a similarity of OV6211 PLL1 configuration to the known OV7251 PLL1 correct the set MIPI link frequency value. Link to v1 of the OV6211 camera sensor device driver: - https://lore.kernel.org/linux-media/20250717124001.108486-1-vladimir.zapolskiy@linaro.org/ (local) Changes from v1 to v2: * restrict endpoint unevaluated properties (Krzysztof), * changed dev_err() to dev_err_probe() whenever it's applicable (Krzysztof), * removed in-driver I2C operations in favour of V4L2 CCI interface (Kieran), * added hblank, vblank, pixel rate and rotation/orientation V4L2 to the list of controls (Kieran, Dave), * due to unselectable data lanes property removed data_lanes handling (Dave), * replaced devm_clk_get_optional() with devm_v4l2_sensor_clk_get() (Dave, Mehdi), * minor cosmetic updates (reported error messages, goto label names etc.). Vladimir Zapolskiy (2): dt-bindings: media: i2c: Add OmniVision OV6211 image sensor media: i2c: Add OmniVision OV6211 image sensor driver .../bindings/media/i2c/ovti,ov6211.yaml | 96 +++ MAINTAINERS | 8 + drivers/media/i2c/Kconfig | 10 + drivers/media/i2c/Makefile | 1 + drivers/media/i2c/ov6211.c | 793 ++++++++++++++++++ 5 files changed, 908 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/i2c/ovti,ov6211.yaml create mode 100644 drivers/media/i2c/ov6211.c -- 2.49.0