2020-10-22 00:25:43 +03:00
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
2022-02-21 20:47:22 +03:00
$id : http://devicetree.org/schemas/media/nxp,imx-mipi-csi2.yaml#
2020-10-22 00:25:43 +03:00
$schema : http://devicetree.org/meta-schemas/core.yaml#
2021-04-18 23:15:56 +03:00
title : NXP i.MX7 and i.MX8 MIPI CSI-2 receiver
2020-10-22 00:25:43 +03:00
maintainers :
- Rui Miguel Silva <rmfrfs@gmail.com>
2021-04-18 23:15:56 +03:00
- Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2020-10-22 00:25:43 +03:00
2021-02-15 07:27:25 +03:00
description : |-
2021-04-18 23:15:56 +03:00
The NXP i.MX7 and i.MX8 families contain SoCs that include a MIPI CSI-2
receiver IP core named CSIS. The IP core originates from Samsung, and may be
compatible with some of the Exynos4 and S5P SoCs. i.MX7 SoCs use CSIS version
3.3 , and i.MX8 SoCs use CSIS version 3.6.3.
2021-02-15 07:27:25 +03:00
While the CSI-2 receiver is separate from the MIPI D-PHY IP core, the PHY is
completely wrapped by the CSIS and doesn't expose a control interface of its
own. This binding thus covers both IP cores.
2020-10-22 00:25:43 +03:00
properties :
compatible :
2021-04-11 22:10:22 +03:00
oneOf :
- enum :
- fsl,imx7-mipi-csi2
- fsl,imx8mm-mipi-csi2
- items :
- enum :
- fsl,imx8mp-mipi-csi2
- const : fsl,imx8mm-mipi-csi2
2020-10-22 00:25:43 +03:00
reg :
maxItems : 1
interrupts :
maxItems : 1
clocks :
2021-04-18 23:15:56 +03:00
minItems : 3
2021-02-15 07:27:25 +03:00
items :
- description : The peripheral clock (a.k.a. APB clock)
- description : The external clock (optionally used as the pixel clock)
- description : The MIPI D-PHY clock
2021-04-18 23:15:56 +03:00
- description : The AXI clock
2020-10-22 00:25:43 +03:00
clock-names :
2021-04-18 23:15:56 +03:00
minItems : 3
2020-10-22 00:25:43 +03:00
items :
- const : pclk
- const : wrap
- const : phy
2021-04-18 23:15:56 +03:00
- const : axi
2020-10-22 00:25:43 +03:00
power-domains :
maxItems : 1
phy-supply :
2021-02-15 07:27:25 +03:00
description : The MIPI D-PHY digital power supply
2020-10-22 00:25:43 +03:00
resets :
2021-02-15 07:27:25 +03:00
items :
- description : MIPI D-PHY slave reset
2020-10-22 00:25:43 +03:00
clock-frequency :
2021-02-15 07:27:25 +03:00
description : The desired external clock ("wrap") frequency, in Hz
2020-10-22 00:25:43 +03:00
default : 166000000
ports :
2021-01-04 19:58:08 +03:00
$ref : /schemas/graph.yaml#/properties/ports
2020-10-22 00:25:43 +03:00
properties :
port@0 :
2021-01-04 19:58:08 +03:00
$ref : /schemas/graph.yaml#/$defs/port-base
unevaluatedProperties : false
2020-10-22 00:25:43 +03:00
description :
Input port node, single endpoint describing the CSI-2 transmitter.
properties :
endpoint :
2021-01-04 19:58:08 +03:00
$ref : video-interfaces.yaml#
unevaluatedProperties : false
2020-10-22 00:25:43 +03:00
properties :
data-lanes :
dt-bindings: media: nxp,imx7-mipi-csi2: Drop bad if/then schema
The if/then schema for 'data-lanes' doesn't work as 'compatible' is at a
different level than 'data-lanes'. To make it work, the if/then schema
would have to be moved to the top level and then whole hierarchy of
nodes down to 'data-lanes' created. I don't think it is worth the
complexity to do that, so let's just drop it.
The error in this schema is masked by a fixup in the tools causing the
'allOf' to get overwritten. Removing the fixup as part of moving to
json-schema draft 2019-09 revealed the issue:
Documentation/devicetree/bindings/media/nxp,imx7-mipi-csi2.example.dt.yaml: mipi-csi@30750000: ports:port@0:endpoint:data-lanes:0: [1] is too short
From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/media/nxp,imx7-mipi-csi2.yaml
Documentation/devicetree/bindings/media/nxp,imx7-mipi-csi2.example.dt.yaml: mipi-csi@32e30000: ports:port@0:endpoint:data-lanes:0: [1, 2, 3, 4] is too long
From schema: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/media/nxp,imx7-mipi-csi2.yaml
The if condition was always true because 'compatible' did not exist in
'endpoint' node and a non-existent property is true for json-schema.
Fixes: 85b62ff2cb97 ("media: dt-bindings: media: nxp,imx7-mipi-csi2: Add i.MX8MM support")
Cc: Rui Miguel Silva <rmfrfs@gmail.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: Shawn Guo <shawnguo@kernel.org>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Pengutronix Kernel Team <kernel@pengutronix.de>
Cc: Fabio Estevam <festevam@gmail.com>
Cc: NXP Linux Team <linux-imx@nxp.com>
Cc: linux-media@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Signed-off-by: Rob Herring <robh@kernel.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Rui Miguel Silva <rmfrfs@gmail.com>
Link: https://lore.kernel.org/r/20211203164828.187642-1-robh@kernel.org
2021-12-03 19:48:28 +03:00
description :
Note that 'fsl,imx7-mipi-csi2' only supports up to 2 data lines.
2022-01-19 04:56:26 +03:00
minItems : 1
2021-04-18 23:15:56 +03:00
items :
2022-01-19 04:56:26 +03:00
- const : 1
- const : 2
- const : 3
- const : 4
2020-10-22 00:25:43 +03:00
required :
- data-lanes
port@1 :
2021-01-04 19:58:08 +03:00
$ref : /schemas/graph.yaml#/properties/port
2020-10-22 00:25:43 +03:00
description :
Output port node
required :
- compatible
- reg
- interrupts
- clocks
- clock-names
- power-domains
- ports
additionalProperties : false
2021-04-18 23:15:56 +03:00
allOf :
- if :
properties :
compatible :
contains :
const : fsl,imx7-mipi-csi2
then :
required :
- phy-supply
- resets
else :
properties :
clocks :
minItems : 4
clock-names :
minItems : 4
phy-supply : false
resets : false
2020-10-22 00:25:43 +03:00
examples :
- |
#include <dt-bindings/clock/imx7d-clock.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/reset/imx7-reset.h>
2021-04-18 23:15:56 +03:00
mipi-csi@30750000 {
2021-02-15 07:27:24 +03:00
compatible = "fsl,imx7-mipi-csi2";
reg = <0x30750000 0x10000>;
interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX7D_IPG_ROOT_CLK>,
<&clks IMX7D_MIPI_CSI_ROOT_CLK>,
<&clks IMX7D_MIPI_DPHY_ROOT_CLK>;
clock-names = "pclk", "wrap", "phy";
clock-frequency = <166000000>;
power-domains = <&pgc_mipi_phy>;
phy-supply = <®_1p0d>;
resets = <&src IMX7_RESET_MIPI_PHY_MRST>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
mipi_from_sensor : endpoint {
remote-endpoint = <&ov2680_to_mipi>;
data-lanes = <1>;
};
2020-10-22 00:25:43 +03:00
};
2021-02-15 07:27:24 +03:00
port@1 {
reg = <1>;
mipi_vc0_to_csi_mux : endpoint {
remote-endpoint = <&csi_mux_from_mipi_vc0>;
};
};
};
2020-10-22 00:25:43 +03:00
};
2021-04-18 23:15:56 +03:00
- |
#include <dt-bindings/clock/imx8mm-clock.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/interrupt-controller/irq.h>
mipi-csi@32e30000 {
compatible = "fsl,imx8mm-mipi-csi2";
reg = <0x32e30000 0x1000>;
interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
clock-frequency = <333000000>;
clocks = <&clk IMX8MM_CLK_DISP_APB_ROOT>,
<&clk IMX8MM_CLK_CSI1_ROOT>,
<&clk IMX8MM_CLK_CSI1_PHY_REF>,
<&clk IMX8MM_CLK_DISP_AXI_ROOT>;
clock-names = "pclk", "wrap", "phy", "axi";
power-domains = <&mipi_pd>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
imx8mm_mipi_csi_in : endpoint {
remote-endpoint = <&imx477_out>;
data-lanes = <1 2 3 4>;
};
};
port@1 {
reg = <1>;
imx8mm_mipi_csi_out : endpoint {
remote-endpoint = <&csi_in>;
};
};
};
};
2020-10-22 00:25:43 +03:00
...