Documentation / devicetree / bindings / hwmon / nuvoton,npcm750-pwm-fan.yaml


Based on kernel version 7.2. Page generated on 2026-08-20 08:41 EST.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/hwmon/nuvoton,npcm750-pwm-fan.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Nuvoton NPCM7xx/NPCM8xx PWM and Fan Tach Controller

maintainers:
  - Tomer Maimon <tmaimon77@gmail.com>

description:
  The NPCM7xx/NPCM8xx family includes a PWM and Fan Tachometer controller.
  The controller provides up to 8 (NPCM7xx) or 12 (NPCM8xx) PWM channels and up
  to 16 tachometer inputs. It is used for fan speed control and monitoring.

properties:
  compatible:
    enum:
      - nuvoton,npcm750-pwm-fan
      - nuvoton,npcm845-pwm-fan

  reg:
    maxItems: 2
    description: Register addresses for PWM and Fan Tach units.

  reg-names:
    items:
      - const: pwm
      - const: fan

  clocks:
    maxItems: 2
    description: Clocks for the PWM and Fan Tach modules.

  clock-names:
    items:
      - const: pwm
      - const: fan

  interrupts:
    description:
      Contains the Fan interrupts with flags for falling edge.
      For NPCM7XX, 8 interrupt lines are expected (one per PWM channel).
      For NPCM8XX, 12 interrupt lines are expected (one per PWM channel).

    minItems: 8
    maxItems: 12
 
  "#address-cells":
    const: 1
 
  "#size-cells":
    const: 0

patternProperties:
  "^fan@[0-9a-f]+$":
    type: object
    $ref: fan-common.yaml#
    unevaluatedProperties: false

    properties:
      reg:
        description:
          Specify the PWM output channel. Integer value in the range 0-7 for
          NPCM7XX or 0-11 for NPCM8XX, representing the PWM channel number.

        maximum: 11

      fan-tach-ch:
        $ref: /schemas/types.yaml#/definitions/uint8-array
        description:
          The tach channel(s) used for the fan.
          Integer values in the range 0-15.

        items:
          maximum: 15

      cooling-levels:
        description:
          PWM duty cycle values in a range from 0 to 255 which
          correspond to thermal cooling states. This property enables
          thermal zone integration for automatic fan speed control
          based on temperature.

        items:
          maximum: 255

    required:
      - reg
      - fan-tach-ch

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

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/nuvoton,npcm7xx-clock.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    pwm_fan: pwm-fan@103000 {
        compatible = "nuvoton,npcm750-pwm-fan";
        #address-cells = <1>;
        #size-cells = <0>;
 
        reg = <0x103000 0x2000>, <0x180000 0x8000>;
        reg-names = "pwm", "fan";
 
        clocks = <&clk NPCM7XX_CLK_APB3>, <&clk NPCM7XX_CLK_APB4>;
        clock-names = "pwm", "fan";
 
        interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
        pinctrl-names = "default";
        pinctrl-0 = <&pwm0_pins &fanin0_pins>;
 
        fan@0 {
            reg = <0>;
            fan-tach-ch = <0 1>;
            cooling-levels = <64 128 192 255>;
        };
 
        fan@1 {
            reg = <1>;
            fan-tach-ch = <2>;
        };
    };