1c509d8b9SMaxime Ripard# SPDX-License-Identifier: GPL-2.0
2c509d8b9SMaxime Ripard%YAML 1.2
3c509d8b9SMaxime Ripard---
4c509d8b9SMaxime Ripard$id: http://devicetree.org/schemas/media/i2c/ovti,ov5640.yaml#
5c509d8b9SMaxime Ripard$schema: http://devicetree.org/meta-schemas/core.yaml#
6c509d8b9SMaxime Ripard
7*a612130cSKrzysztof Kozlowskititle: OmniVision OV5640 Image Sensor
8c509d8b9SMaxime Ripard
9c509d8b9SMaxime Ripardmaintainers:
10c509d8b9SMaxime Ripard  - Steve Longerbeam <slongerbeam@gmail.com>
11c509d8b9SMaxime Ripard
12c509d8b9SMaxime RipardallOf:
13c509d8b9SMaxime Ripard  - $ref: /schemas/media/video-interface-devices.yaml#
14c509d8b9SMaxime Ripard
15c509d8b9SMaxime Ripardproperties:
16c509d8b9SMaxime Ripard  compatible:
17c509d8b9SMaxime Ripard    const: ovti,ov5640
18c509d8b9SMaxime Ripard
19c509d8b9SMaxime Ripard  reg:
20c509d8b9SMaxime Ripard    maxItems: 1
21c509d8b9SMaxime Ripard
22c509d8b9SMaxime Ripard  clocks:
23c509d8b9SMaxime Ripard    description: XCLK Input Clock
24c509d8b9SMaxime Ripard
25c509d8b9SMaxime Ripard  clock-names:
26c509d8b9SMaxime Ripard    const: xclk
27c509d8b9SMaxime Ripard
28c509d8b9SMaxime Ripard  AVDD-supply:
29c509d8b9SMaxime Ripard    description: Analog voltage supply, 2.8 volts
30c509d8b9SMaxime Ripard
31c509d8b9SMaxime Ripard  DVDD-supply:
32c509d8b9SMaxime Ripard    description: Digital core voltage supply, 1.5 volts
33c509d8b9SMaxime Ripard
34c509d8b9SMaxime Ripard  DOVDD-supply:
35c509d8b9SMaxime Ripard    description: Digital I/O voltage supply, 1.8 volts
36c509d8b9SMaxime Ripard
37c509d8b9SMaxime Ripard  powerdown-gpios:
38c509d8b9SMaxime Ripard    maxItems: 1
39c509d8b9SMaxime Ripard    description: >
40c509d8b9SMaxime Ripard      Reference to the GPIO connected to the powerdown pin, if any.
41c509d8b9SMaxime Ripard
42c509d8b9SMaxime Ripard  reset-gpios:
43c509d8b9SMaxime Ripard    maxItems: 1
44c509d8b9SMaxime Ripard    description: >
45c509d8b9SMaxime Ripard      Reference to the GPIO connected to the reset pin, if any.
46c509d8b9SMaxime Ripard
47c509d8b9SMaxime Ripard  rotation:
48c509d8b9SMaxime Ripard    enum:
49c509d8b9SMaxime Ripard      - 0
50c509d8b9SMaxime Ripard      - 180
51c509d8b9SMaxime Ripard
52c509d8b9SMaxime Ripard  port:
53c509d8b9SMaxime Ripard    description: Digital Output Port
54c509d8b9SMaxime Ripard    $ref: /schemas/graph.yaml#/$defs/port-base
55c509d8b9SMaxime Ripard    additionalProperties: false
56c509d8b9SMaxime Ripard
57c509d8b9SMaxime Ripard    properties:
58c509d8b9SMaxime Ripard      endpoint:
59c509d8b9SMaxime Ripard        $ref: /schemas/media/video-interfaces.yaml#
60c509d8b9SMaxime Ripard        unevaluatedProperties: false
61c509d8b9SMaxime Ripard
62c509d8b9SMaxime Ripard        properties:
63c509d8b9SMaxime Ripard          clock-lanes:
64c509d8b9SMaxime Ripard            const: 0
65c509d8b9SMaxime Ripard
66c509d8b9SMaxime Ripard          data-lanes:
67c509d8b9SMaxime Ripard            minItems: 1
68c509d8b9SMaxime Ripard            maxItems: 2
69c509d8b9SMaxime Ripard            items:
70c509d8b9SMaxime Ripard              enum: [1, 2]
71c509d8b9SMaxime Ripard
72c509d8b9SMaxime Ripard          bus-width:
73c509d8b9SMaxime Ripard            enum: [8, 10]
74c509d8b9SMaxime Ripard
75c509d8b9SMaxime Ripard          data-shift:
76c509d8b9SMaxime Ripard            enum: [0, 2]
77c509d8b9SMaxime Ripard
78c509d8b9SMaxime Ripardrequired:
79c509d8b9SMaxime Ripard  - compatible
80c509d8b9SMaxime Ripard  - reg
81c509d8b9SMaxime Ripard  - clocks
82c509d8b9SMaxime Ripard  - clock-names
83c509d8b9SMaxime Ripard  - AVDD-supply
84c509d8b9SMaxime Ripard  - DVDD-supply
85c509d8b9SMaxime Ripard  - DOVDD-supply
86c509d8b9SMaxime Ripard  - port
87c509d8b9SMaxime Ripard
88c509d8b9SMaxime RipardadditionalProperties: false
89c509d8b9SMaxime Ripard
90c509d8b9SMaxime Ripardexamples:
91c509d8b9SMaxime Ripard  - |
92c509d8b9SMaxime Ripard      #include <dt-bindings/clock/imx6qdl-clock.h>
93c509d8b9SMaxime Ripard      #include <dt-bindings/gpio/gpio.h>
94c509d8b9SMaxime Ripard
95c509d8b9SMaxime Ripard      i2c {
96c509d8b9SMaxime Ripard          #address-cells = <1>;
97c509d8b9SMaxime Ripard          #size-cells = <0>;
98c509d8b9SMaxime Ripard
99c509d8b9SMaxime Ripard          camera@3c {
100c509d8b9SMaxime Ripard              compatible = "ovti,ov5640";
101c509d8b9SMaxime Ripard              pinctrl-names = "default";
102c509d8b9SMaxime Ripard              pinctrl-0 = <&pinctrl_ov5640>;
103c509d8b9SMaxime Ripard              reg = <0x3c>;
104c509d8b9SMaxime Ripard              clocks = <&clks IMX6QDL_CLK_CKO>;
105c509d8b9SMaxime Ripard              clock-names = "xclk";
106c509d8b9SMaxime Ripard              DOVDD-supply = <&vgen4_reg>; /* 1.8v */
107c509d8b9SMaxime Ripard              AVDD-supply = <&vgen3_reg>;  /* 2.8v */
108c509d8b9SMaxime Ripard              DVDD-supply = <&vgen2_reg>;  /* 1.5v */
109c509d8b9SMaxime Ripard              powerdown-gpios = <&gpio1 19 GPIO_ACTIVE_HIGH>;
110c509d8b9SMaxime Ripard              reset-gpios = <&gpio1 20 GPIO_ACTIVE_LOW>;
111c509d8b9SMaxime Ripard              rotation = <180>;
112c509d8b9SMaxime Ripard
113c509d8b9SMaxime Ripard              port {
114c509d8b9SMaxime Ripard                  /* MIPI CSI-2 bus endpoint */
115c509d8b9SMaxime Ripard                  ov5640_to_mipi_csi2: endpoint {
116c509d8b9SMaxime Ripard                      remote-endpoint = <&mipi_csi2_from_ov5640>;
117c509d8b9SMaxime Ripard                      clock-lanes = <0>;
118c509d8b9SMaxime Ripard                      data-lanes = <1 2>;
119c509d8b9SMaxime Ripard                  };
120c509d8b9SMaxime Ripard              };
121c509d8b9SMaxime Ripard          };
122c509d8b9SMaxime Ripard      };
123c509d8b9SMaxime Ripard
124c509d8b9SMaxime Ripard  - |
125c509d8b9SMaxime Ripard      i2c {
126c509d8b9SMaxime Ripard          #address-cells = <1>;
127c509d8b9SMaxime Ripard          #size-cells = <0>;
128c509d8b9SMaxime Ripard
129c509d8b9SMaxime Ripard          camera@3c {
130c509d8b9SMaxime Ripard              compatible = "ovti,ov5640";
131c509d8b9SMaxime Ripard              pinctrl-names = "default";
132c509d8b9SMaxime Ripard              pinctrl-0 = <&pinctrl_ov5640>;
133c509d8b9SMaxime Ripard              reg = <0x3c>;
134c509d8b9SMaxime Ripard              clocks = <&clk_ext_camera>;
135c509d8b9SMaxime Ripard              clock-names = "xclk";
136c509d8b9SMaxime Ripard              DOVDD-supply = <&vgen4_reg>; /* 1.8v */
137c509d8b9SMaxime Ripard              AVDD-supply = <&vgen3_reg>;  /* 2.8v */
138c509d8b9SMaxime Ripard              DVDD-supply = <&vgen2_reg>;  /* 1.5v */
139c509d8b9SMaxime Ripard
140c509d8b9SMaxime Ripard              port {
141c509d8b9SMaxime Ripard                  /* Parallel bus endpoint */
142c509d8b9SMaxime Ripard                  ov5640_to_parallel: endpoint {
143c509d8b9SMaxime Ripard                      remote-endpoint = <&parallel_from_ov5640>;
144c509d8b9SMaxime Ripard                      bus-width = <8>;
145c509d8b9SMaxime Ripard                      data-shift = <2>; /* lines 9:2 are used */
146c509d8b9SMaxime Ripard                      hsync-active = <0>;
147c509d8b9SMaxime Ripard                      vsync-active = <0>;
148c509d8b9SMaxime Ripard                      pclk-sample = <1>;
149c509d8b9SMaxime Ripard                  };
150c509d8b9SMaxime Ripard              };
151c509d8b9SMaxime Ripard          };
152c509d8b9SMaxime Ripard      };
153c509d8b9SMaxime Ripard
154c509d8b9SMaxime Ripard...
155