Files
linux/Documentation/devicetree/bindings/media/i2c/ti,ds90ub960.yaml
Yemike Abhilash Chandra 1c067005b0 media: dt-bindings: ti,ds90ub960: Add support for DS90UB954-Q1
DS90UB954-Q1 is an FPDLink-III deserializer that is mostly register
compatible with DS90UB960-Q1. The main difference is that it supports
half of the RX and TX ports, i.e. 2x FPDLink RX ports and 1x CSI TX
port. Therefore, add support for DS90UB954 within the existing bindings.

Link: https://www.ti.com/lit/gpn/ds90ub954-q1
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Yemike Abhilash Chandra <y-abhilashchandra@ti.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
2026-03-11 01:05:30 +01:00

451 lines
10 KiB
YAML

# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/media/i2c/ti,ds90ub960.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Texas Instruments DS90UB9XX Family FPD-Link Deserializer Hubs
maintainers:
- Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
description:
The TI DS90UB9XX devices are FPD-Link video deserializers with I2C and GPIO
forwarding.
properties:
compatible:
enum:
- ti,ds90ub954-q1
- ti,ds90ub960-q1
- ti,ds90ub9702-q1
reg:
maxItems: 1
clocks:
maxItems: 1
description:
Reference clock connected to the REFCLK pin.
clock-names:
items:
- const: refclk
powerdown-gpios:
maxItems: 1
description:
Specifier for the GPIO connected to the PDB pin.
i2c-alias-pool:
minItems: 1
maxItems: 32
links:
type: object
additionalProperties: false
properties:
'#address-cells':
const: 1
'#size-cells':
const: 0
ti,manual-strobe:
type: boolean
description:
Enable manual strobe position and EQ level
patternProperties:
'^link@[0-3]$':
type: object
additionalProperties: false
properties:
reg:
description: The link number
maxItems: 1
'#address-cells':
const: 1
'#size-cells':
const: 0
i2c-alias:
$ref: /schemas/types.yaml#/definitions/uint32
description:
The I2C address used for the serializer. Transactions to this
address on the I2C bus where the deserializer resides are
forwarded to the serializer.
ti,rx-mode:
$ref: /schemas/types.yaml#/definitions/uint32
enum:
- 0 # RAW10
- 1 # RAW12 HF
- 2 # RAW12 LF
- 3 # CSI2 SYNC
- 4 # CSI2 NON-SYNC
description:
FPD-Link Input Mode. This should reflect the hardware and the
default mode of the connected device.
ti,cdr-mode:
$ref: /schemas/types.yaml#/definitions/uint32
enum:
- 0 # FPD-Link III
- 1 # FPD-Link IV
description:
FPD-Link CDR Mode. This should reflect the hardware and the
default mode of the connected device.
ti,strobe-pos:
$ref: /schemas/types.yaml#/definitions/int32
minimum: -13
maximum: 13
description: Manual strobe position
ti,eq-level:
$ref: /schemas/types.yaml#/definitions/uint32
maximum: 14
description: Manual EQ level
patternProperties:
'^serializer(@[0-9a-f]+)*$':
type: object
description: FPD-Link Serializer node
required:
- reg
- i2c-alias
- ti,rx-mode
ports:
$ref: /schemas/graph.yaml#/properties/ports
description:
Ports represent FPD-Link inputs to the deserializer and CSI TX outputs
from the deserializer. The number of ports is model-dependent.
required:
- compatible
- reg
- clocks
- clock-names
- ports
$defs:
FPDLink-input-port:
$ref: /schemas/graph.yaml#/$defs/port-base
unevaluatedProperties: false
description: FPD-Link input
properties:
endpoint:
$ref: /schemas/media/video-interfaces.yaml#
unevaluatedProperties: false
description:
Endpoint for FPD-Link port. If the RX mode for this port is RAW,
hsync-active and vsync-active must be defined.
CSI2-output-port:
$ref: /schemas/graph.yaml#/$defs/port-base
unevaluatedProperties: false
description: CSI-2 Output
properties:
endpoint:
$ref: /schemas/media/video-interfaces.yaml#
unevaluatedProperties: false
properties:
data-lanes:
minItems: 1
maxItems: 4
link-frequencies:
maxItems: 1
required:
- data-lanes
- link-frequencies
allOf:
- $ref: /schemas/i2c/i2c-atr.yaml#
- if:
properties:
compatible:
contains:
enum:
- ti,ds90ub960-q1
- ti,ds90ub9702-q1
then:
properties:
ports:
properties:
port@0:
$ref: '#/$defs/FPDLink-input-port'
description: FPD-Link input 0
port@1:
$ref: '#/$defs/FPDLink-input-port'
description: FPD-Link input 1
port@2:
$ref: '#/$defs/FPDLink-input-port'
description: FPD-Link input 2
port@3:
$ref: '#/$defs/FPDLink-input-port'
description: FPD-Link input 3
port@4:
$ref: '#/$defs/CSI2-output-port'
description: CSI-2 Output 0
port@5:
$ref: '#/$defs/CSI2-output-port'
description: CSI-2 Output 1
required:
- port@0
- port@1
- port@2
- port@3
- port@4
- port@5
- if:
properties:
compatible:
contains:
const: ti,ds90ub954-q1
then:
properties:
ports:
properties:
port@0:
$ref: '#/$defs/FPDLink-input-port'
description: FPD-Link input 0
port@1:
$ref: '#/$defs/FPDLink-input-port'
description: FPD-Link input 1
port@2:
$ref: '#/$defs/CSI2-output-port'
description: CSI-2 Output 0
required:
- port@0
- port@1
- port@2
links:
properties:
link@2: false
link@3: false
unevaluatedProperties: false
examples:
- |
#include <dt-bindings/gpio/gpio.h>
i2c {
clock-frequency = <400000>;
#address-cells = <1>;
#size-cells = <0>;
deser@3d {
compatible = "ti,ds90ub960-q1";
reg = <0x3d>;
clock-names = "refclk";
clocks = <&fixed_clock>;
powerdown-gpios = <&pca9555 7 GPIO_ACTIVE_LOW>;
i2c-alias-pool = <0x4a 0x4b 0x4c 0x4d 0x4e 0x4f>;
ports {
#address-cells = <1>;
#size-cells = <0>;
/* Port 0, Camera 0 */
port@0 {
reg = <0>;
ub960_fpd3_1_in: endpoint {
remote-endpoint = <&ub953_1_out>;
};
};
/* Port 1, Camera 1 */
port@1 {
reg = <1>;
ub960_fpd3_2_in: endpoint {
remote-endpoint = <&ub913_2_out>;
hsync-active = <0>;
vsync-active = <1>;
};
};
/* Port 2, unconnected */
port@2 {
reg = <2>;
};
/* Port 3, unconnected */
port@3 {
reg = <3>;
};
/* Port 4, CSI-2 TX */
port@4 {
reg = <4>;
ds90ub960_0_csi_out: endpoint {
data-lanes = <1 2 3 4>;
link-frequencies = /bits/ 64 <800000000>;
remote-endpoint = <&csi2_phy0>;
};
};
/* Port 5, unconnected */
port@5 {
reg = <5>;
};
};
links {
#address-cells = <1>;
#size-cells = <0>;
/* Link 0 has DS90UB953 serializer and IMX274 sensor */
link@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
i2c-alias = <0x44>;
ti,rx-mode = <3>;
serializer1: serializer@30 {
compatible = "ti,ds90ub953-q1";
reg = <0x30>;
gpio-controller;
#gpio-cells = <2>;
#clock-cells = <0>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
ub953_1_in: endpoint {
data-lanes = <1 2 3 4>;
remote-endpoint = <&sensor_1_out>;
};
};
port@1 {
reg = <1>;
ub953_1_out: endpoint {
remote-endpoint = <&ub960_fpd3_1_in>;
};
};
};
i2c {
#address-cells = <1>;
#size-cells = <0>;
sensor@1a {
compatible = "sony,imx274";
reg = <0x1a>;
clocks = <&serializer>;
clock-names = "inck";
reset-gpios = <&serializer1 0 GPIO_ACTIVE_LOW>;
port {
sensor_1_out: endpoint {
remote-endpoint = <&ub953_1_in>;
};
};
};
};
};
}; /* End of link@0 */
/* Link 1 has DS90UB913 serializer and MT9V111 sensor */
link@1 {
reg = <1>;
i2c-alias = <0x45>;
ti,rx-mode = <0>;
serializer2: serializer {
compatible = "ti,ds90ub913a-q1";
gpio-controller;
#gpio-cells = <2>;
clocks = <&clk_cam_48M>;
clock-names = "clkin";
#clock-cells = <0>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
ub913_2_in: endpoint {
remote-endpoint = <&sensor_2_out>;
pclk-sample = <1>;
};
};
port@1 {
reg = <1>;
ub913_2_out: endpoint {
remote-endpoint = <&ub960_fpd3_2_in>;
};
};
};
i2c {
#address-cells = <1>;
#size-cells = <0>;
sensor@48 {
compatible = "aptina,mt9v111";
reg = <0x48>;
clocks = <&serializer2>;
port {
sensor_2_out: endpoint {
remote-endpoint = <&ub913_2_in>;
};
};
};
};
};
}; /* End of link@1 */
};
};
};
...