[PATCH 1/2] dt-bindings: media: i2c: Add OmniVision OV3660 image sensor
From: Nguyen Minh Tien
Date: Thu Oct 08 2026 - 12:08:05 EST
Add a binding for the OmniVision OV3660, a 1/5" 3 megapixel CMOS image
sensor with an image signal processor and a parallel (DVP) output.
Its 1.5 V core can come from an internal regulator, so the DVDD supply
is optional. The endpoint gives the bus width, the sync and pixel clock
polarities, and the pixel clock frequencies the board can take.
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Nguyen Minh Tien <tien.nguyenminh@xxxxxxxxxxxxxxxxxx>
---
.../bindings/media/i2c/ovti,ov3660.yaml | 121 ++++++++++++++++++
MAINTAINERS | 6 +
2 files changed, 127 insertions(+)
create mode 100644 Documentation/devicetree/bindings/media/i2c/ovti,ov3660.yaml
diff --git a/Documentation/devicetree/bindings/media/i2c/ovti,ov3660.yaml b/Documentation/devicetree/bindings/media/i2c/ovti,ov3660.yaml
new file mode 100644
index 0000000000..f19dda1f71
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/i2c/ovti,ov3660.yaml
@@ -0,0 +1,121 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/i2c/ovti,ov3660.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: OmniVision OV3660 Image Sensor
+
+maintainers:
+ - Nguyen Minh Tien <tien.nguyenminh@xxxxxxxxxxxxxxxxxx>
+
+description:
+ The OmniVision OV3660 is a 1/5" 3 megapixel (2048x1536) CMOS image sensor
+ with an image signal processor and a parallel (DVP) output. It is
+ controlled over SCCB (I2C) and has an internal 1.5 V regulator for its
+ digital core.
+
+allOf:
+ - $ref: /schemas/media/video-interface-devices.yaml#
+
+properties:
+ compatible:
+ const: ovti,ov3660
+
+ reg:
+ maxItems: 1
+
+ clocks:
+ description: XVCLK input clock (6 - 27 MHz)
+ maxItems: 1
+
+ avdd-supply:
+ description: Analog voltage supply, 2.8 volts
+
+ dovdd-supply:
+ description: Digital I/O voltage supply, 1.8 or 2.8 volts
+
+ dvdd-supply:
+ description:
+ Digital core voltage supply, 1.5 volts. Not needed when the internal
+ regulator is used.
+
+ powerdown-gpios:
+ maxItems: 1
+ description: Reference to the GPIO connected to the PWDN pin, if any.
+
+ reset-gpios:
+ maxItems: 1
+ description: Reference to the GPIO connected to the RESETB pin, if any.
+
+ port:
+ description: Parallel output port
+ $ref: /schemas/graph.yaml#/$defs/port-base
+ additionalProperties: false
+
+ properties:
+ endpoint:
+ $ref: /schemas/media/video-interfaces.yaml#
+ unevaluatedProperties: false
+
+ properties:
+ bus-width:
+ enum: [8, 10]
+
+ data-shift:
+ enum: [0, 2]
+
+ pclk-sample:
+ enum: [0, 1]
+
+ required:
+ - bus-width
+ - hsync-active
+ - vsync-active
+ - pclk-sample
+ - link-frequencies
+
+ required:
+ - endpoint
+
+required:
+ - compatible
+ - reg
+ - clocks
+ - avdd-supply
+ - dovdd-supply
+ - port
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+
+ i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ camera@3c {
+ compatible = "ovti,ov3660";
+ reg = <0x3c>;
+ clocks = <&camera_clk>;
+ avdd-supply = <®_2v8>;
+ dovdd-supply = <®_2v8>;
+ powerdown-gpios = <&gpio 5 GPIO_ACTIVE_HIGH>;
+ reset-gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
+
+ port {
+ endpoint {
+ remote-endpoint = <¶llel_from_ov3660>;
+ bus-width = <8>;
+ data-shift = <2>; /* D[9:2] */
+ hsync-active = <1>;
+ vsync-active = <0>;
+ pclk-sample = <1>;
+ link-frequencies = /bits/ 64 <54000000 108000000>;
+ };
+ };
+ };
+ };
+...
diff --git a/MAINTAINERS b/MAINTAINERS
index 6bdc32e7c8..da86107263 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -20280,6 +20280,12 @@ S: Maintained
T: git git://linuxtv.org/media.git
F: drivers/media/i2c/ov2740.c
+OMNIVISION OV3660 SENSOR DRIVER
+M: Nguyen Minh Tien <tien.nguyenminh@xxxxxxxxxxxxxxxxxx>
+L: linux-media@xxxxxxxxxxxxxxx
+S: Maintained
+F: Documentation/devicetree/bindings/media/i2c/ovti,ov3660.yaml
+
OMNIVISION OV4689 SENSOR DRIVER
M: Mikhail Rudenko <mike.rudenko@xxxxxxxxx>
L: linux-media@xxxxxxxxxxxxxxx
--
2.34.1