| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/media/microchip,csi2dc.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Microchip CSI2 Demux Controller (CSI2DC) |
| |
| maintainers: |
| - Eugen Hristev <eugen.hristev@microchip.com> |
| |
| description: |
| CSI2DC - Camera Serial Interface 2 Demux Controller |
| |
| CSI2DC is a hardware block that receives incoming data from either from an |
| IDI interface or from a parallel bus interface. |
| It filters IDI packets based on their data type and virtual channel |
| identifier, then converts the byte stream to a pixel stream into a cross |
| clock domain towards a parallel interface that can be read by a sensor |
| controller. |
| IDI interface is Synopsys proprietary. |
| CSI2DC can act a simple bypass bridge if the incoming data is coming from |
| a parallel interface. |
| |
| CSI2DC provides two pipes, one video pipe and one data pipe. Video pipe |
| is connected at the output to a sensor controller and the data pipe is |
| accessible as a DMA slave port to a DMA controller. |
| |
| CSI2DC supports a single 'port' node as a sink port with either Synopsys |
| 32-bit IDI interface or a parallel interface. |
| |
| CSI2DC supports one 'port' node as source port with parallel interface. |
| This is called video pipe. |
| This port has an 'endpoint' that can be connected to a sink port of another |
| controller (next in pipeline). |
| |
| CSI2DC also supports direct access to the data through AHB, via DMA channel, |
| called data pipe. |
| For data pipe to be available, a dma controller and a dma channel must be |
| referenced. |
| |
| properties: |
| compatible: |
| const: microchip,sama7g5-csi2dc |
| |
| reg: |
| maxItems: 1 |
| |
| clocks: |
| minItems: 2 |
| maxItems: 2 |
| |
| clock-names: |
| description: |
| CSI2DC must have two clocks to function correctly. One clock is the |
| peripheral clock for the inside functionality of the hardware block. |
| This is named 'pclk'. The second clock must be the cross domain clock, |
| in which CSI2DC will perform clock crossing. This clock must be fed |
| by the next controller in pipeline, which usually is a sensor controller. |
| Normally this clock should be given by this sensor controller who |
| is also a clock source. This clock is named 'scck', sensor controller clock. |
| items: |
| - const: pclk |
| - const: scck |
| |
| dmas: |
| maxItems: 1 |
| |
| dma-names: |
| const: rx |
| |
| ports: |
| $ref: /schemas/graph.yaml#/properties/ports |
| |
| properties: |
| port@0: |
| $ref: /schemas/graph.yaml#/$defs/port-base |
| unevaluatedProperties: false |
| description: |
| Input port node, single endpoint describing the input port. |
| |
| properties: |
| endpoint: |
| $ref: video-interfaces.yaml# |
| unevaluatedProperties: false |
| description: Endpoint connected to input device |
| |
| properties: |
| bus-type: |
| enum: [4, 5, 6] |
| default: 4 |
| |
| bus-width: |
| enum: [8, 9, 10, 11, 12, 13, 14] |
| default: 14 |
| |
| clock-noncontinuous: |
| type: boolean |
| description: |
| Presence of this boolean property decides whether clock is |
| continuous or noncontinuous. |
| |
| remote-endpoint: true |
| |
| port@1: |
| $ref: /schemas/graph.yaml#/$defs/port-base |
| unevaluatedProperties: false |
| description: |
| Output port node, single endpoint describing the output port. |
| |
| properties: |
| endpoint: |
| unevaluatedProperties: false |
| $ref: video-interfaces.yaml# |
| description: Endpoint connected to output device |
| |
| properties: |
| bus-type: |
| enum: [5, 6] |
| default: 5 |
| |
| bus-width: |
| enum: [8, 9, 10, 11, 12, 13, 14] |
| default: 14 |
| |
| remote-endpoint: true |
| |
| required: |
| - port@0 |
| - port@1 |
| |
| additionalProperties: false |
| |
| required: |
| - compatible |
| - reg |
| - clocks |
| - clock-names |
| - ports |
| |
| examples: |
| # Example for connecting to a parallel sensor controller block (video pipe) |
| # and the input is received from Synopsys IDI interface |
| - | |
| csi2dc@e1404000 { |
| compatible = "microchip,sama7g5-csi2dc"; |
| reg = <0xe1404000 0x500>; |
| clocks = <&pclk>, <&scck>; |
| clock-names = "pclk", "scck"; |
| |
| ports { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| port@0 { |
| reg = <0>; /* must be 0, first child port */ |
| csi2dc_in: endpoint { /* input from IDI interface */ |
| bus-type = <4>; /* MIPI CSI2 D-PHY */ |
| remote-endpoint = <&csi2host_out>; |
| }; |
| }; |
| |
| port@1 { |
| reg = <1>; /* must be 1, second child port */ |
| csi2dc_out: endpoint { |
| remote-endpoint = <&xisc_in>; /* output to sensor controller */ |
| }; |
| }; |
| }; |
| }; |
| |
| # Example for connecting to a DMA master as an AHB slave |
| # and the input is received from Synopsys IDI interface |
| - | |
| #include <dt-bindings/dma/at91.h> |
| csi2dc@e1404000 { |
| compatible = "microchip,sama7g5-csi2dc"; |
| reg = <0xe1404000 0x500>; |
| clocks = <&pclk>, <&scck>; |
| clock-names = "pclk", "scck"; |
| dmas = <&dma0 AT91_XDMAC_DT_PERID(34)>; |
| dma-names = "rx"; |
| |
| ports { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| port@0 { |
| reg = <0>; /* must be 0, first child port */ |
| csi2dc_input: endpoint { /* input from IDI interface */ |
| remote-endpoint = <&csi2host_out>; |
| }; |
| }; |
| |
| port@1 { |
| reg = <1>; |
| }; |
| }; |
| }; |
| |
| ... |