1e9f81768SJacopo Mondi# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
2e9f81768SJacopo Mondi# Copyright (C) 2019 Renesas Electronics Corp.
3e9f81768SJacopo Mondi%YAML 1.2
4e9f81768SJacopo Mondi---
5e9f81768SJacopo Mondi$id: http://devicetree.org/schemas/media/i2c/imi,rdacm2x-gmsl.yaml#
6e9f81768SJacopo Mondi$schema: http://devicetree.org/meta-schemas/core.yaml#
7e9f81768SJacopo Mondi
8e9f81768SJacopo Mondititle: IMI D&D RDACM20 and RDACM21 Automotive Camera Platforms
9e9f81768SJacopo Mondi
10e9f81768SJacopo Mondimaintainers:
11e9f81768SJacopo Mondi  - Jacopo Mondi <jacopo+renesas@jmondi.org>
12e9f81768SJacopo Mondi  - Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
13e9f81768SJacopo Mondi  - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
14e9f81768SJacopo Mondi  - Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
15e9f81768SJacopo Mondi
16e9f81768SJacopo Mondidescription: -|
17e9f81768SJacopo Mondi  The IMI D&D RDACM20 and RDACM21 are GMSL-compatible camera designed for
18e9f81768SJacopo Mondi  automotive applications.
19e9f81768SJacopo Mondi
20e9f81768SJacopo Mondi  The RDACM20 camera module encloses a Maxim Integrated MAX9271 GMSL serializer,
21e9f81768SJacopo Mondi  coupled with an OV10635 image sensor and an embedded MCU. Both the MCU and
22e9f81768SJacopo Mondi  the image sensor are connected to the serializer local I2C bus and are
23e9f81768SJacopo Mondi  accessible by the host SoC by direct addressing.
24e9f81768SJacopo Mondi
25e9f81768SJacopo Mondi  The RDACM21 camera module encloses the same serializer, coupled with an
26e9f81768SJacopo Mondi  OV10640 image sensor and an OV490 ISP. Only the OV490 ISP is interfaced to
27e9f81768SJacopo Mondi  the serializer local I2C bus while the image sensor is not accessible from
28e9f81768SJacopo Mondi  the host SoC.
29e9f81768SJacopo Mondi
30e9f81768SJacopo Mondi  They both connect to a remote GMSL endpoint through a coaxial cable.
31e9f81768SJacopo Mondi
32e9f81768SJacopo Mondi                                                   IMI RDACM20
33e9f81768SJacopo Mondi  +---------------+                        +--------------------------------+
34e9f81768SJacopo Mondi  |      GMSL     |   <- Video Stream      |       <- Video--------\        |
35e9f81768SJacopo Mondi  |               |< === GMSL Link ====== >|MAX9271<- I2C bus-> <-->OV10635 |
36e9f81768SJacopo Mondi  | de-serializer |   <- I2C messages ->   |                   \<-->MCU     |
37e9f81768SJacopo Mondi  +---------------+                        +--------------------------------+
38e9f81768SJacopo Mondi
39e9f81768SJacopo Mondi                                                   IMI RDACM21
40e9f81768SJacopo Mondi  +---------------+                        +--------------------------------+
41e9f81768SJacopo Mondi  |      GMSL     |   <- Video Stream      |       <- Video--------\        |
42e9f81768SJacopo Mondi  |               |< === GMSL Link ====== >|MAX9271<- I2C bus-> <-->OV490   |
43e9f81768SJacopo Mondi  |               |   <- I2C messages ->   |                          |     |
44e9f81768SJacopo Mondi  | de-serializer |                        |          OV10640 <-------|     |
45e9f81768SJacopo Mondi  +---------------+                        +--------------------------------+
46e9f81768SJacopo Mondi
47e9f81768SJacopo Mondi  Both camera modules serialize video data generated by the embedded camera
48e9f81768SJacopo Mondi  sensor on the GMSL serial channel to a remote GMSL de-serializer. They also
49e9f81768SJacopo Mondi  receive and transmit I2C messages encapsulated and transmitted on the GMSL
50e9f81768SJacopo Mondi  bidirectional control channel.
51e9f81768SJacopo Mondi
52e9f81768SJacopo Mondi  All I2C traffic received on the GMSL link not directed to the serializer is
53e9f81768SJacopo Mondi  propagated on the local I2C bus to the remote device there connected. All the
54e9f81768SJacopo Mondi  I2C traffic generated on the local I2C bus not directed to the serializer is
55e9f81768SJacopo Mondi  propagated to the remote de-serializer encapsulated in the GMSL control
56e9f81768SJacopo Mondi  channel.
57e9f81768SJacopo Mondi
58e9f81768SJacopo Mondi  The RDACM20 and RDACM21 DT node should be a direct child of the GMSL
59e9f81768SJacopo Mondi  deserializer's I2C bus corresponding to the GMSL link that the camera is
60e9f81768SJacopo Mondi  attached to.
61e9f81768SJacopo Mondi
62e9f81768SJacopo Mondiproperties:
63e9f81768SJacopo Mondi  '#address-cells':
64e9f81768SJacopo Mondi    const: 1
65e9f81768SJacopo Mondi
66e9f81768SJacopo Mondi  '#size-cells':
67e9f81768SJacopo Mondi    const: 0
68e9f81768SJacopo Mondi
69e9f81768SJacopo Mondi  compatible:
70e9f81768SJacopo Mondi    enum:
71e9f81768SJacopo Mondi      - imi,rdacm20
72e9f81768SJacopo Mondi      - imi,rdacm21
73e9f81768SJacopo Mondi
74e9f81768SJacopo Mondi  reg:
75e9f81768SJacopo Mondi    description: -|
76e9f81768SJacopo Mondi      I2C device addresses, the first to be assigned to the serializer, the
77e9f81768SJacopo Mondi      following ones to be assigned to the remote devices.
78e9f81768SJacopo Mondi
79e9f81768SJacopo Mondi      For RDACM20 the second entry of the property is assigned to the
80e9f81768SJacopo Mondi      OV10635 image sensor and the optional third one to the embedded MCU.
81e9f81768SJacopo Mondi
82e9f81768SJacopo Mondi      For RDACM21 the second entry is assigned to the OV490 ISP and the optional
83e9f81768SJacopo Mondi      third one ignored.
84e9f81768SJacopo Mondi
85e9f81768SJacopo Mondi    minItems: 2
86e9f81768SJacopo Mondi    maxItems: 3
87e9f81768SJacopo Mondi
88e9f81768SJacopo Mondi  port:
89e9f81768SJacopo Mondi    type: object
90e9f81768SJacopo Mondi    additionalProperties: false
91e9f81768SJacopo Mondi    description: -|
92e9f81768SJacopo Mondi      Connection to the remote GMSL endpoint are modelled using the OF graph
93e9f81768SJacopo Mondi      bindings in accordance with the video interface bindings defined in
94e9f81768SJacopo Mondi      Documentation/devicetree/bindings/media/video-interfaces.txt.
95e9f81768SJacopo Mondi
96e9f81768SJacopo Mondi      The device node contains a single "port" child node with a single
97e9f81768SJacopo Mondi      "endpoint" sub-device.
98e9f81768SJacopo Mondi
99e9f81768SJacopo Mondi    properties:
100e9f81768SJacopo Mondi      endpoint:
101e9f81768SJacopo Mondi        type: object
102e9f81768SJacopo Mondi        additionalProperties: false
103e9f81768SJacopo Mondi
104e9f81768SJacopo Mondi        properties:
105e9f81768SJacopo Mondi          remote-endpoint:
106e9f81768SJacopo Mondi            description: -|
107e9f81768SJacopo Mondi              phandle to the remote GMSL endpoint sub-node in the remote node
108e9f81768SJacopo Mondi              port.
109e9f81768SJacopo Mondi            maxItems: 1
110e9f81768SJacopo Mondi
111e9f81768SJacopo Mondi        required:
112e9f81768SJacopo Mondi          - remote-endpoint
113e9f81768SJacopo Mondi
114e9f81768SJacopo Mondi    required:
115e9f81768SJacopo Mondi      - endpoint
116e9f81768SJacopo Mondi
117e9f81768SJacopo Mondirequired:
118e9f81768SJacopo Mondi  - compatible
119e9f81768SJacopo Mondi  - reg
120e9f81768SJacopo Mondi  - port
121e9f81768SJacopo Mondi
1225be478f9SRob HerringadditionalProperties: false
1235be478f9SRob Herring
124e9f81768SJacopo Mondiexamples:
125e9f81768SJacopo Mondi  - |
126e9f81768SJacopo Mondi    i2c@e66d8000 {
127e9f81768SJacopo Mondi      #address-cells = <1>;
128e9f81768SJacopo Mondi      #size-cells = <0>;
129e9f81768SJacopo Mondi
130e9f81768SJacopo Mondi      reg = <0 0xe66d8000>;
131e9f81768SJacopo Mondi
132e9f81768SJacopo Mondi      camera@31 {
133e9f81768SJacopo Mondi        compatible = "imi,rdacm20";
134e9f81768SJacopo Mondi        reg = <0x31>, <0x41>, <0x51>;
135e9f81768SJacopo Mondi
136e9f81768SJacopo Mondi        port {
137e9f81768SJacopo Mondi          rdacm20_out0: endpoint {
138e9f81768SJacopo Mondi            remote-endpoint = <&max9286_in0>;
139e9f81768SJacopo Mondi          };
140e9f81768SJacopo Mondi        };
141e9f81768SJacopo Mondi      };
142e9f81768SJacopo Mondi    };
143e9f81768SJacopo Mondi
144e9f81768SJacopo Mondi  - |
145e9f81768SJacopo Mondi    i2c@e66d8000 {
146e9f81768SJacopo Mondi      #address-cells = <1>;
147e9f81768SJacopo Mondi      #size-cells = <0>;
148e9f81768SJacopo Mondi
149e9f81768SJacopo Mondi      reg = <0 0xe66d8000>;
150e9f81768SJacopo Mondi
151e9f81768SJacopo Mondi      camera@31 {
152e9f81768SJacopo Mondi        compatible = "imi,rdacm21";
153e9f81768SJacopo Mondi        reg = <0x31>, <0x41>;
154e9f81768SJacopo Mondi
155e9f81768SJacopo Mondi        port {
156e9f81768SJacopo Mondi          rdacm21_out0: endpoint {
157e9f81768SJacopo Mondi            remote-endpoint = <&max9286_in0>;
158e9f81768SJacopo Mondi          };
159e9f81768SJacopo Mondi        };
160e9f81768SJacopo Mondi      };
161e9f81768SJacopo Mondi    };
162