1*4882a593Smuzhiyun# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2*4882a593Smuzhiyun# Copyright (C) 2019 Renesas Electronics Corp. 3*4882a593Smuzhiyun%YAML 1.2 4*4882a593Smuzhiyun--- 5*4882a593Smuzhiyun$id: http://devicetree.org/schemas/media/i2c/maxim,max9286.yaml# 6*4882a593Smuzhiyun$schema: http://devicetree.org/meta-schemas/core.yaml# 7*4882a593Smuzhiyun 8*4882a593Smuzhiyuntitle: Maxim Integrated Quad GMSL Deserializer 9*4882a593Smuzhiyun 10*4882a593Smuzhiyunmaintainers: 11*4882a593Smuzhiyun - Jacopo Mondi <jacopo+renesas@jmondi.org> 12*4882a593Smuzhiyun - Kieran Bingham <kieran.bingham+renesas@ideasonboard.com> 13*4882a593Smuzhiyun - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> 14*4882a593Smuzhiyun - Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> 15*4882a593Smuzhiyun 16*4882a593Smuzhiyundescription: | 17*4882a593Smuzhiyun The MAX9286 deserializer receives video data on up to 4 Gigabit Multimedia 18*4882a593Smuzhiyun Serial Links (GMSL) and outputs them on a CSI-2 D-PHY port using up to 4 data 19*4882a593Smuzhiyun lanes. 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun In addition to video data, the GMSL links carry a bidirectional control 22*4882a593Smuzhiyun channel that encapsulates I2C messages. The MAX9286 forwards all I2C traffic 23*4882a593Smuzhiyun not addressed to itself to the other side of the links, where a GMSL 24*4882a593Smuzhiyun serializer will output it on a local I2C bus. In the other direction all I2C 25*4882a593Smuzhiyun traffic received over GMSL by the MAX9286 is output on the local I2C bus. 26*4882a593Smuzhiyun 27*4882a593Smuzhiyunproperties: 28*4882a593Smuzhiyun '#address-cells': 29*4882a593Smuzhiyun const: 1 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun '#size-cells': 32*4882a593Smuzhiyun const: 0 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun compatible: 35*4882a593Smuzhiyun const: maxim,max9286 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun reg: 38*4882a593Smuzhiyun description: I2C device address 39*4882a593Smuzhiyun maxItems: 1 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun poc-supply: 42*4882a593Smuzhiyun description: Regulator providing Power over Coax to the cameras 43*4882a593Smuzhiyun maxItems: 1 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun enable-gpios: 46*4882a593Smuzhiyun description: GPIO connected to the \#PWDN pin with inverted polarity 47*4882a593Smuzhiyun maxItems: 1 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun gpio-controller: true 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun '#gpio-cells': 52*4882a593Smuzhiyun const: 2 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun ports: 55*4882a593Smuzhiyun type: object 56*4882a593Smuzhiyun description: | 57*4882a593Smuzhiyun The connections to the MAX9286 GMSL and its endpoint nodes are modelled 58*4882a593Smuzhiyun using the OF graph bindings in accordance with the video interface 59*4882a593Smuzhiyun bindings defined in 60*4882a593Smuzhiyun Documentation/devicetree/bindings/media/video-interfaces.txt. 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun The following table lists the port number corresponding to each device 63*4882a593Smuzhiyun port. 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun Port Description 66*4882a593Smuzhiyun ---------------------------------------- 67*4882a593Smuzhiyun Port 0 GMSL Input 0 68*4882a593Smuzhiyun Port 1 GMSL Input 1 69*4882a593Smuzhiyun Port 2 GMSL Input 2 70*4882a593Smuzhiyun Port 3 GMSL Input 3 71*4882a593Smuzhiyun Port 4 CSI-2 Output 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun properties: 74*4882a593Smuzhiyun '#address-cells': 75*4882a593Smuzhiyun const: 1 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun '#size-cells': 78*4882a593Smuzhiyun const: 0 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun port@[0-3]: 81*4882a593Smuzhiyun type: object 82*4882a593Smuzhiyun properties: 83*4882a593Smuzhiyun reg: 84*4882a593Smuzhiyun enum: [ 0, 1, 2, 3 ] 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun endpoint: 87*4882a593Smuzhiyun type: object 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun properties: 90*4882a593Smuzhiyun remote-endpoint: 91*4882a593Smuzhiyun description: | 92*4882a593Smuzhiyun phandle to the remote GMSL source endpoint subnode in the 93*4882a593Smuzhiyun remote node port. 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun required: 96*4882a593Smuzhiyun - remote-endpoint 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun required: 99*4882a593Smuzhiyun - reg 100*4882a593Smuzhiyun - endpoint 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun additionalProperties: false 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun port@4: 105*4882a593Smuzhiyun type: object 106*4882a593Smuzhiyun properties: 107*4882a593Smuzhiyun reg: 108*4882a593Smuzhiyun const: 4 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun endpoint: 111*4882a593Smuzhiyun type: object 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun properties: 114*4882a593Smuzhiyun remote-endpoint: 115*4882a593Smuzhiyun description: phandle to the remote CSI-2 sink endpoint. 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun data-lanes: 118*4882a593Smuzhiyun description: array of physical CSI-2 data lane indexes. 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun required: 121*4882a593Smuzhiyun - remote-endpoint 122*4882a593Smuzhiyun - data-lanes 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun required: 125*4882a593Smuzhiyun - reg 126*4882a593Smuzhiyun - endpoint 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun additionalProperties: false 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun required: 131*4882a593Smuzhiyun - port@4 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun i2c-mux: 134*4882a593Smuzhiyun type: object 135*4882a593Smuzhiyun description: | 136*4882a593Smuzhiyun Each GMSL link is modelled as a child bus of an i2c bus 137*4882a593Smuzhiyun multiplexer/switch, in accordance with bindings described in 138*4882a593Smuzhiyun Documentation/devicetree/bindings/i2c/i2c-mux.txt. 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun properties: 141*4882a593Smuzhiyun '#address-cells': 142*4882a593Smuzhiyun const: 1 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun '#size-cells': 145*4882a593Smuzhiyun const: 0 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun patternProperties: 148*4882a593Smuzhiyun "^i2c@[0-3]$": 149*4882a593Smuzhiyun type: object 150*4882a593Smuzhiyun description: | 151*4882a593Smuzhiyun Child node of the i2c bus multiplexer which represents a GMSL link. 152*4882a593Smuzhiyun Each serializer device on the GMSL link remote end is represented with 153*4882a593Smuzhiyun an i2c-mux child node. The MAX9286 chip supports up to 4 GMSL 154*4882a593Smuzhiyun channels. 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun properties: 157*4882a593Smuzhiyun '#address-cells': 158*4882a593Smuzhiyun const: 1 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun '#size-cells': 161*4882a593Smuzhiyun const: 0 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun reg: 164*4882a593Smuzhiyun description: The index of the GMSL channel. 165*4882a593Smuzhiyun maxItems: 1 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun patternProperties: 168*4882a593Smuzhiyun "^camera@[a-f0-9]+$": 169*4882a593Smuzhiyun type: object 170*4882a593Smuzhiyun description: | 171*4882a593Smuzhiyun The remote camera device, composed by a GMSL serializer and a 172*4882a593Smuzhiyun connected video source. 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun properties: 175*4882a593Smuzhiyun compatible: 176*4882a593Smuzhiyun description: The remote device compatible string. 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun reg: 179*4882a593Smuzhiyun minItems: 2 180*4882a593Smuzhiyun maxItems: 3 181*4882a593Smuzhiyun description: | 182*4882a593Smuzhiyun The I2C addresses to be assigned to the remote devices through 183*4882a593Smuzhiyun address reprogramming. The number of entries depends on the 184*4882a593Smuzhiyun requirements of the currently connected remote device. 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun port: 187*4882a593Smuzhiyun type: object 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun properties: 190*4882a593Smuzhiyun endpoint: 191*4882a593Smuzhiyun type: object 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun properties: 194*4882a593Smuzhiyun remote-endpoint: 195*4882a593Smuzhiyun description: phandle to the MAX9286 sink endpoint. 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun required: 198*4882a593Smuzhiyun - remote-endpoint 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun additionalProperties: false 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun required: 203*4882a593Smuzhiyun - endpoint 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun additionalProperties: false 206*4882a593Smuzhiyun 207*4882a593Smuzhiyun required: 208*4882a593Smuzhiyun - compatible 209*4882a593Smuzhiyun - reg 210*4882a593Smuzhiyun - port 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun additionalProperties: false 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun additionalProperties: false 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun additionalProperties: false 217*4882a593Smuzhiyun 218*4882a593Smuzhiyunrequired: 219*4882a593Smuzhiyun - compatible 220*4882a593Smuzhiyun - reg 221*4882a593Smuzhiyun - ports 222*4882a593Smuzhiyun - i2c-mux 223*4882a593Smuzhiyun - gpio-controller 224*4882a593Smuzhiyun 225*4882a593SmuzhiyunadditionalProperties: false 226*4882a593Smuzhiyun 227*4882a593Smuzhiyunexamples: 228*4882a593Smuzhiyun - | 229*4882a593Smuzhiyun #include <dt-bindings/gpio/gpio.h> 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun i2c@e66d8000 { 232*4882a593Smuzhiyun #address-cells = <1>; 233*4882a593Smuzhiyun #size-cells = <0>; 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun reg = <0 0xe66d8000>; 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun gmsl-deserializer@2c { 238*4882a593Smuzhiyun compatible = "maxim,max9286"; 239*4882a593Smuzhiyun reg = <0x2c>; 240*4882a593Smuzhiyun poc-supply = <&camera_poc_12v>; 241*4882a593Smuzhiyun enable-gpios = <&gpio 13 GPIO_ACTIVE_HIGH>; 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun gpio-controller; 244*4882a593Smuzhiyun #gpio-cells = <2>; 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun ports { 247*4882a593Smuzhiyun #address-cells = <1>; 248*4882a593Smuzhiyun #size-cells = <0>; 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun port@0 { 251*4882a593Smuzhiyun reg = <0>; 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun max9286_in0: endpoint { 254*4882a593Smuzhiyun remote-endpoint = <&rdacm20_out0>; 255*4882a593Smuzhiyun }; 256*4882a593Smuzhiyun }; 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun port@1 { 259*4882a593Smuzhiyun reg = <1>; 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun max9286_in1: endpoint { 262*4882a593Smuzhiyun remote-endpoint = <&rdacm20_out1>; 263*4882a593Smuzhiyun }; 264*4882a593Smuzhiyun }; 265*4882a593Smuzhiyun 266*4882a593Smuzhiyun port@2 { 267*4882a593Smuzhiyun reg = <2>; 268*4882a593Smuzhiyun 269*4882a593Smuzhiyun max9286_in2: endpoint { 270*4882a593Smuzhiyun remote-endpoint = <&rdacm20_out2>; 271*4882a593Smuzhiyun }; 272*4882a593Smuzhiyun }; 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun port@3 { 275*4882a593Smuzhiyun reg = <3>; 276*4882a593Smuzhiyun 277*4882a593Smuzhiyun max9286_in3: endpoint { 278*4882a593Smuzhiyun remote-endpoint = <&rdacm20_out3>; 279*4882a593Smuzhiyun }; 280*4882a593Smuzhiyun }; 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun port@4 { 283*4882a593Smuzhiyun reg = <4>; 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun max9286_out: endpoint { 286*4882a593Smuzhiyun data-lanes = <1 2 3 4>; 287*4882a593Smuzhiyun remote-endpoint = <&csi40_in>; 288*4882a593Smuzhiyun }; 289*4882a593Smuzhiyun }; 290*4882a593Smuzhiyun }; 291*4882a593Smuzhiyun 292*4882a593Smuzhiyun i2c-mux { 293*4882a593Smuzhiyun #address-cells = <1>; 294*4882a593Smuzhiyun #size-cells = <0>; 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun i2c@0 { 297*4882a593Smuzhiyun #address-cells = <1>; 298*4882a593Smuzhiyun #size-cells = <0>; 299*4882a593Smuzhiyun reg = <0>; 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun camera@51 { 302*4882a593Smuzhiyun compatible = "imi,rdacm20"; 303*4882a593Smuzhiyun reg = <0x51>, <0x61>; 304*4882a593Smuzhiyun 305*4882a593Smuzhiyun port { 306*4882a593Smuzhiyun rdacm20_out0: endpoint { 307*4882a593Smuzhiyun remote-endpoint = <&max9286_in0>; 308*4882a593Smuzhiyun }; 309*4882a593Smuzhiyun }; 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun }; 312*4882a593Smuzhiyun }; 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun i2c@1 { 315*4882a593Smuzhiyun #address-cells = <1>; 316*4882a593Smuzhiyun #size-cells = <0>; 317*4882a593Smuzhiyun reg = <1>; 318*4882a593Smuzhiyun 319*4882a593Smuzhiyun camera@52 { 320*4882a593Smuzhiyun compatible = "imi,rdacm20"; 321*4882a593Smuzhiyun reg = <0x52>, <0x62>; 322*4882a593Smuzhiyun 323*4882a593Smuzhiyun port { 324*4882a593Smuzhiyun rdacm20_out1: endpoint { 325*4882a593Smuzhiyun remote-endpoint = <&max9286_in1>; 326*4882a593Smuzhiyun }; 327*4882a593Smuzhiyun }; 328*4882a593Smuzhiyun }; 329*4882a593Smuzhiyun }; 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun i2c@2 { 332*4882a593Smuzhiyun #address-cells = <1>; 333*4882a593Smuzhiyun #size-cells = <0>; 334*4882a593Smuzhiyun reg = <2>; 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun camera@53 { 337*4882a593Smuzhiyun compatible = "imi,rdacm20"; 338*4882a593Smuzhiyun reg = <0x53>, <0x63>; 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun port { 341*4882a593Smuzhiyun rdacm20_out2: endpoint { 342*4882a593Smuzhiyun remote-endpoint = <&max9286_in2>; 343*4882a593Smuzhiyun }; 344*4882a593Smuzhiyun }; 345*4882a593Smuzhiyun }; 346*4882a593Smuzhiyun }; 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun i2c@3 { 349*4882a593Smuzhiyun #address-cells = <1>; 350*4882a593Smuzhiyun #size-cells = <0>; 351*4882a593Smuzhiyun reg = <3>; 352*4882a593Smuzhiyun 353*4882a593Smuzhiyun camera@54 { 354*4882a593Smuzhiyun compatible = "imi,rdacm20"; 355*4882a593Smuzhiyun reg = <0x54>, <0x64>; 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun port { 358*4882a593Smuzhiyun rdacm20_out3: endpoint { 359*4882a593Smuzhiyun remote-endpoint = <&max9286_in3>; 360*4882a593Smuzhiyun }; 361*4882a593Smuzhiyun }; 362*4882a593Smuzhiyun }; 363*4882a593Smuzhiyun }; 364*4882a593Smuzhiyun }; 365*4882a593Smuzhiyun }; 366*4882a593Smuzhiyun }; 367