# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/media/i2c/ti,ds90ub953.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Texas Instruments DS90UB953 FPD-Link III Serializer

maintainers:
  - Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>

description:
  The TI DS90UB953 is an FPD-Link III video serializer for MIPI CSI-2.

properties:
  compatible:
    enum:
      - ti,ds90ub953-q1
      - ti,ds90ub971-q1

  '#gpio-cells':
    const: 2
    description:
      First cell is the GPIO pin number, second cell is the flags. The GPIO pin
      number must be in range of [0, 3].

  gpio-controller: true

  clocks:
    maxItems: 1
    description:
      Reference clock connected to the CLKIN pin.

  clock-names:
    items:
      - const: clkin

  '#clock-cells':
    const: 0

  ports:
    $ref: /schemas/graph.yaml#/properties/ports

    properties:
      port@0:
        $ref: /schemas/graph.yaml#/$defs/port-base
        unevaluatedProperties: false
        description: CSI-2 input port

        properties:
          endpoint:
            $ref: /schemas/media/video-interfaces.yaml#
            unevaluatedProperties: false

            required:
              - data-lanes

      port@1:
        $ref: /schemas/graph.yaml#/properties/port
        unevaluatedProperties: false
        description: FPD-Link III output port

    required:
      - port@0
      - port@1

  i2c:
    $ref: /schemas/i2c/i2c-controller.yaml#
    unevaluatedProperties: false

required:
  - compatible
  - '#gpio-cells'
  - gpio-controller
  - '#clock-cells'
  - ports

additionalProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>

    serializer {
      compatible = "ti,ds90ub953-q1";

      gpio-controller;
      #gpio-cells = <2>;

      #clock-cells = <0>;

      ports {
        #address-cells = <1>;
        #size-cells = <0>;

        port@0 {
          reg = <0>;
          ub953_in: endpoint {
            clock-lanes = <0>;
            data-lanes = <1 2 3 4>;
            remote-endpoint = <&sensor_out>;
          };
        };

        port@1 {
          reg = <1>;
          endpoint {
            remote-endpoint = <&deser_fpd_in>;
          };
        };
      };

      i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        sensor@1a {
          compatible = "sony,imx274";
          reg = <0x1a>;

          reset-gpios = <&serializer 0 GPIO_ACTIVE_LOW>;

          clocks = <&serializer>;
          clock-names = "inck";

          port {
            sensor_out: endpoint {
              remote-endpoint = <&ub953_in>;
            };
          };
        };
      };
    };
...
