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

title: Sony CMOS Digital Image Sensor and CNN

maintainers:
  - Raspberry Pi <kernel-list@raspberrypi.com>

description: |-
  The Sony IMX500 is a stacked 1/2.3-inch CMOS digital image sensor and inbuilt
  AI processor with an active array CNN (Convolutional Neural Network) inference
  engine.  The native sensor size is 4056H x 3040V, and the module also contains
  an in-built ISP for the CNN. The module is programmable through an I2C
  interface with firmware and neural network uploads being made over SPI. The
  default I2C address is 0x1A, with an address of 0x10 being selectable via
  SLASEL. The module also has a second I2C interface available with a fixed
  address of 0x36.  Image data is sent through MIPI CSI-2, which is configured
  as either 2 or 4 data lanes.

properties:
  compatible:
    const: sony,imx500

  reg:
    description: I2C device address
    maxItems: 1

  clocks:
    maxItems: 1

  clock-names:
    description: |-
      Input clock (12 to 27 MHz)
    items:
      - const: inck

  interrupts:
    maxItems: 1

  vana-supply:
    description: Supply voltage (analog) - 2.7 V

  vdig-supply:
    description: Supply voltage (digital) - 0.84 V

  vif-supply:
    description: Supply voltage (interface) - 1.8 V

  reset-gpios:
    description: |-
      Sensor reset (XCLR) GPIO

      Chip clear in lieu of built-in power on reset. To be set 'High' after
      power supplies are brought up and INCK supplied.

  port:
    $ref: /schemas/graph.yaml#/$defs/port-base
    additionalProperties: false
    description: |
      Video output port

    properties:
      endpoint:
        $ref: /schemas/media/video-interfaces.yaml#
        type: object
        unevaluatedProperties: false
        properties:
          data-lanes:
            items:
              - const: 2
              - const: 4
          clock-noncontinuous: true
          link-frequencies: true
        required:
          - link-frequencies
          - data-lanes

  spi:
    $ref: /schemas/types.yaml#/definitions/phandle
    description: |-
      SPI peripheral

      Optional SPI peripheral for uploading firmware and network weights to AI
      processor.

required:
  - compatible
  - reg
  - clocks
  - clock-names
  - vana-supply
  - vdig-supply
  - vif-supply
  - port

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

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

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

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

        vana-supply = <&imx500_vana>; /* 2.7  +/- 0.1  V */
        vdig-supply = <&imx500_vdig>; /* 0.84 +/- 0.04 V */
        vif-supply  = <&imx500_vif>;  /* 1.8  +/- 0.1  V */

        reset-gpios = <&gpio_sensor 0 GPIO_ACTIVE_LOW>;

        port {
          imx500_0: endpoint {
            remote-endpoint = <&csi1_ep>;
            data-lanes = <1 2>;
            clock-noncontinuous;
            link-frequencies = /bits/ 64 <499500000>;
          };
        };
      };
    };

...

