linux-loongson/Documentation/devicetree/bindings/media/renesas,isp.yaml
Niklas Söderlund 63fd40f672 dt-bindings: media: renesas,isp: Add ISP core function block
Some R-Car ISP instances have in addition to the channel selector (CS)
an ISP core (CORE) to perform operations on an image stream. The core
function is mapped to a different memory region and has a separate
interrupt than CS, extend the bindings to allow describing this.

On the same SoC different instances of the ISP IP may have, or not have,
the CORE functionality. The CS function on all instances on the SoC are
the same and the documentation describes the full ISP (CS + CORE) as a
single IP block. Where instances not having the CORE function simply
lack the functionality to modify the image data. There are dependencies
on the CS functionality while operating the CORE functionality.

In order for the ISP core to function in memory-to-memory mode it needs
to be feed input data from a Streaming Bridge interface. This interface
is provided thru the VSP-X device. Add an optional new property
"renesas,vspx" to provide a phandle to describe this relationship.

While adding mandatory reg-names and interrupt-names breaks existing
bindings the driver itself remains backward compatible and provides CS
functionality if a single unnamed reg and interrupt property is present.
Furthermore all existing users of the bindings are updated in following
work to add these new mandatory properties.

Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Link: https://lore.kernel.org/r/20250423163113.2961049-2-niklas.soderlund+renesas@ragnatech.se
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
2025-05-02 10:16:43 +02:00

247 lines
6.7 KiB
YAML

# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
# Copyright (C) 2021 Renesas Electronics Corp.
%YAML 1.2
---
$id: http://devicetree.org/schemas/media/renesas,isp.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Renesas R-Car ISP Channel Selector
maintainers:
- Niklas Söderlund <niklas.soderlund@ragnatech.se>
description:
The R-Car ISP Channel Selector provides MIPI CSI-2 VC and DT filtering
capabilities for the Renesas R-Car family of devices. It is used in
conjunction with the R-Car VIN and CSI-2 modules, which provides the video
capture capabilities.
properties:
compatible:
items:
- enum:
- renesas,r8a779a0-isp # V3U
- renesas,r8a779g0-isp # V4H
- renesas,r8a779h0-isp # V4M
- const: renesas,rcar-gen4-isp # Generic R-Car Gen4
reg:
minItems: 1
maxItems: 2
reg-names:
minItems: 1
items:
- const: cs
- const: core
interrupts:
minItems: 1
maxItems: 2
interrupt-names:
minItems: 1
items:
- const: cs
- const: core
clocks:
minItems: 1
maxItems: 2
clock-names:
minItems: 1
items:
- const: cs
- const: core
power-domains:
maxItems: 1
resets:
minItems: 1
maxItems: 2
reset-names:
minItems: 1
items:
- const: cs
- const: core
renesas,vspx:
$ref: /schemas/types.yaml#/definitions/phandle
description:
A phandle to the companion VSPX responsible for the Streaming Bridge
functionality. The Streaming Bridge is responsible for feeding image
and configuration data to the ISP when operating in memory-to-memory
mode.
ports:
$ref: /schemas/graph.yaml#/properties/ports
properties:
port@0:
$ref: /schemas/graph.yaml#/properties/port
description:
Input port node, multiple endpoints describing the connected R-Car
CSI-2 receivers.
port@1:
$ref: /schemas/graph.yaml#/properties/port
description:
Single endpoint describing the R-Car VIN connected to output port 0.
port@2:
$ref: /schemas/graph.yaml#/properties/port
description:
Single endpoint describing the R-Car VIN connected to output port 1.
port@3:
$ref: /schemas/graph.yaml#/properties/port
description:
Single endpoint describing the R-Car VIN connected to output port 2.
port@4:
$ref: /schemas/graph.yaml#/properties/port
description:
Single endpoint describing the R-Car VIN connected to output port 3.
port@5:
$ref: /schemas/graph.yaml#/properties/port
description:
Single endpoint describing the R-Car VIN connected to output port 4.
port@6:
$ref: /schemas/graph.yaml#/properties/port
description:
Single endpoint describing the R-Car VIN connected to output port 5.
port@7:
$ref: /schemas/graph.yaml#/properties/port
description:
Single endpoint describing the R-Car VIN connected to output port 6.
port@8:
$ref: /schemas/graph.yaml#/properties/port
description:
Single endpoint describing the R-Car VIN connected to output port 7.
required:
- port@0
- port@1
- port@2
- port@3
- port@4
- port@5
- port@6
- port@7
- port@8
required:
- compatible
- reg
- reg-names
- interrupts
- interrupt-names
- clocks
- clock-names
- power-domains
- resets
- reset-names
- ports
additionalProperties: false
examples:
- |
#include <dt-bindings/clock/r8a779a0-cpg-mssr.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/power/r8a779a0-sysc.h>
isp1: isp@fed20000 {
compatible = "renesas,r8a779a0-isp", "renesas,rcar-gen4-isp";
reg = <0xfed20000 0x10000>, <0xfee00000 0x100000>;
reg-names = "cs", "core";
interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "cs", "core";
clocks = <&cpg CPG_MOD 613>, <&cpg CPG_MOD 17>;
clock-names = "cs", "core";
power-domains = <&sysc R8A779A0_PD_A3ISP01>;
resets = <&cpg 613>, <&cpg 17>;
reset-names = "cs", "core";
renesas,vspx = <&vspx1>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
isp1csi41: endpoint@1 {
reg = <1>;
remote-endpoint = <&csi41isp1>;
};
};
port@1 {
reg = <1>;
isp1vin08: endpoint {
remote-endpoint = <&vin08isp1>;
};
};
port@2 {
reg = <2>;
isp1vin09: endpoint {
remote-endpoint = <&vin09isp1>;
};
};
port@3 {
reg = <3>;
isp1vin10: endpoint {
remote-endpoint = <&vin10isp1>;
};
};
port@4 {
reg = <4>;
isp1vin11: endpoint {
remote-endpoint = <&vin11isp1>;
};
};
port@5 {
reg = <5>;
isp1vin12: endpoint {
remote-endpoint = <&vin12isp1>;
};
};
port@6 {
reg = <6>;
isp1vin13: endpoint {
remote-endpoint = <&vin13isp1>;
};
};
port@7 {
reg = <7>;
isp1vin14: endpoint {
remote-endpoint = <&vin14isp1>;
};
};
port@8 {
reg = <8>;
isp1vin15: endpoint {
remote-endpoint = <&vin15isp1>;
};
};
};
};