From dd2cf16e60612c081741b06182c56151345e948e Mon Sep 17 00:00:00 2001
From: Richard Oliver <richard.oliver@raspberrypi.com>
Date: Fri, 24 May 2024 11:43:07 +0100
Subject: [PATCH] media: dt-bindings: i2c: Add Sony IMX500

Add YAML device tree binding for the Sony IMX500 CMOS image sensor /
CNN inference engine.  Also, add a MAINTAINERS entry.

Signed-off-by: Richard Oliver <richard.oliver@raspberrypi.com>
---
 .../bindings/media/i2c/sony,imx500.yaml       | 132 ++++++++++++++++++
 MAINTAINERS                                   |   7 +
 2 files changed, 139 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/media/i2c/sony,imx500.yaml

--- /dev/null
+++ b/Documentation/devicetree/bindings/media/i2c/sony,imx500.yaml
@@ -0,0 +1,132 @@
+# 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>;
+          };
+        };
+      };
+    };
+
+...
+
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -24077,6 +24077,13 @@ F:	Documentation/devicetree/bindings/med
 F:	Documentation/devicetree/bindings/media/i2c/imx477.yaml
 F:	drivers/media/i2c/imx477.c
 
+SONY IMX500 SENSOR DRIVER
+M:	Raspberry Pi Kernel Maintenance <kernel-list@raspberrypi.com>
+L:	linux-media@vger.kernel.org
+S:	Maintained
+T:	git git://linuxtv.org/media_tree.git
+F:	Documentation/devicetree/bindings/media/i2c/sony,imx500.yaml
+
 SONY IMX519 SENSOR DRIVER
 M:	Arducam Kernel Maintenance <info@arducam.com>
 L:	linux-media@vger.kernel.org
