200 lines
5.9 KiB
YAML
200 lines
5.9 KiB
YAML
|
# 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>;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
...
|