# SPDX-License-Identifier: GPL-2.0-only
%YAML 1.2
---
$id: http://devicetree.org/schemas/thermal/rockchip-thermal.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Temperature Sensor ADC (TSADC) on Rockchip SoCs

maintainers:
  - Heiko Stuebner <heiko@sntech.de>

$ref: thermal-sensor.yaml#

properties:
  compatible:
    enum:
      - rockchip,px30-tsadc
      - rockchip,rk3228-tsadc
      - rockchip,rk3288-tsadc
      - rockchip,rk3328-tsadc
      - rockchip,rk3368-tsadc
      - rockchip,rk3399-tsadc
      - rockchip,rk3568-tsadc
      - rockchip,rk3576-tsadc
      - rockchip,rk3588-tsadc
      - rockchip,rv1108-tsadc

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  clocks:
    minItems: 2
    maxItems: 2

  clock-names:
    items:
      - const: tsadc
      - const: apb_pclk

  nvmem-cells:
    items:
      - description: cell handle to where the trim's base temperature is stored
      - description:
          cell handle to where the trim's tenths of Celsius base value is stored

  nvmem-cell-names:
    items:
      - const: trim_base
      - const: trim_base_frac

  resets:
    minItems: 1
    maxItems: 3

  reset-names:
    minItems: 1
    items:
      - const: tsadc-apb
      - const: tsadc
      - const: tsadc-phy

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

  "#thermal-sensor-cells":
    const: 1

  rockchip,grf:
    description: The phandle of the syscon node for the general register file.
    $ref: /schemas/types.yaml#/definitions/phandle

  rockchip,hw-tshut-temp:
    description: The hardware-controlled shutdown temperature value.
    $ref: /schemas/types.yaml#/definitions/uint32

  rockchip,hw-tshut-mode:
    description: The hardware-controlled shutdown mode 0:CRU 1:GPIO.
    $ref: /schemas/types.yaml#/definitions/uint32
    enum: [0, 1]

  rockchip,hw-tshut-polarity:
    description: The hardware-controlled active polarity 0:LOW 1:HIGH.
    $ref: /schemas/types.yaml#/definitions/uint32
    enum: [0, 1]

patternProperties:
  "@[0-9a-f]+$":
    type: object
    properties:
      reg:
        maxItems: 1
        description: sensor ID, a.k.a. channel number

      nvmem-cells:
        items:
          - description: handle of cell containing calibration data

      nvmem-cell-names:
        items:
          - const: trim

    required:
      - reg

    unevaluatedProperties: false

required:
  - compatible
  - reg
  - interrupts
  - clocks
  - clock-names
  - resets

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - rockchip,px30-tsadc
              - rockchip,rk3366-tsadc
              - rockchip,rk3399-tsadc
              - rockchip,rk3568-tsadc
    then:
      required:
        - rockchip,grf
    else:
      properties:
        rockchip,grf: false
  - if:
      not:
        properties:
          compatible:
            contains:
              const: rockchip,rk3568-tsadc
    then:
      properties:
        nvmem-cells: false
        nvmem-cell-names: false
  - if:
      not:
        properties:
          compatible:
            contains:
              enum:
                - rockchip,rk3568-tsadc
                - rockchip,rk3576-tsadc
    then:
      patternProperties:
        "@[0-9a-f]+$": false

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/clock/rk3288-cru.h>

    tsadc: tsadc@ff280000 {
        compatible = "rockchip,rk3288-tsadc";
        reg = <0xff280000 0x100>;
        interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&cru SCLK_TSADC>, <&cru PCLK_TSADC>;
        clock-names = "tsadc", "apb_pclk";
        resets = <&cru SRST_TSADC>;
        reset-names = "tsadc-apb";
        #thermal-sensor-cells = <1>;
        rockchip,hw-tshut-temp = <95000>;
        rockchip,hw-tshut-mode = <0>;
        rockchip,hw-tshut-polarity = <0>;
    };
