Commit aee81445 authored by Mathieu Dubois-Briand's avatar Mathieu Dubois-Briand Committed by Lee Jones
Browse files

dt-bindings: mfd: gpio: Add MAX7360



Add device tree bindings for Maxim Integrated MAX7360 device with
support for keypad, rotary, gpios and pwm functionalities.

Reviewed-by: default avatar"Rob Herring (Arm)" <robh@kernel.org>
Reviewed-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: default avatarMathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Link: https://lore.kernel.org/r/20250824-mdb-max7360-support-v14-1-435cfda2b1ea@bootlin.com


Signed-off-by: default avatarLee Jones <lee@kernel.org>
parent 8f5ae30d
Loading
Loading
Loading
Loading
+83 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/gpio/maxim,max7360-gpio.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Maxim MAX7360 GPIO controller

maintainers:
  - Kamel Bouhara <kamel.bouhara@bootlin.com>
  - Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>

description: |
  Maxim MAX7360 GPIO controller, in MAX7360 chipset
  https://www.analog.com/en/products/max7360.html

  The device provides two series of GPIOs, referred here as GPIOs and GPOs.

  PORT0 to PORT7 pins can be used as GPIOs, with support for interrupts and
  constant-current mode. These pins will also be used by the rotary encoder and
  PWM functionalities.

  COL2 to COL7 pins can be used as GPOs, there is no input capability. COL pins
  will be partitioned, with the first pins being affected to the keypad
  functionality and the last ones as GPOs.

properties:
  compatible:
    enum:
      - maxim,max7360-gpio
      - maxim,max7360-gpo

  gpio-controller: true

  "#gpio-cells":
    const: 2

  interrupt-controller: true

  "#interrupt-cells":
    const: 2

  maxim,constant-current-disable:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      Bit field, each bit disables constant-current output of the associated
      GPIO, starting from the least significant bit for the first GPIO.
    maximum: 0xff

required:
  - compatible
  - gpio-controller

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - maxim,max7360-gpio
        ngpios: false
    then:
      required:
        - interrupt-controller
    else:
      properties:
        interrupt-controller: false
        maxim,constant-current-disable: false

additionalProperties: false

examples:
  - |
    gpio {
      compatible = "maxim,max7360-gpio";

      gpio-controller;
      #gpio-cells = <2>;
      maxim,constant-current-disable = <0x06>;

      interrupt-controller;
      #interrupt-cells = <2>;
    };
+191 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/maxim,max7360.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Maxim MAX7360 Keypad, Rotary encoder, PWM and GPIO controller

maintainers:
  - Kamel Bouhara <kamel.bouhara@bootlin.com>
  - Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>

description: |
  Maxim MAX7360 device, with following functions:
    - keypad controller
    - rotary controller
    - GPIO and GPO controller
    - PWM controller

  https://www.analog.com/en/products/max7360.html

allOf:
  - $ref: /schemas/input/matrix-keymap.yaml#
  - $ref: /schemas/input/input.yaml#

properties:
  compatible:
    enum:
      - maxim,max7360

  reg:
    maxItems: 1

  interrupts:
    maxItems: 2

  interrupt-names:
    items:
      - const: inti
      - const: intk

  keypad-debounce-delay-ms:
    description: Keypad debounce delay in ms
    minimum: 9
    maximum: 40
    default: 9

  rotary-debounce-delay-ms:
    description: Rotary encoder debounce delay in ms
    minimum: 0
    maximum: 15
    default: 0

  linux,axis:
    $ref: /schemas/input/rotary-encoder.yaml#/properties/linux,axis

  rotary-encoder,relative-axis:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Register a relative axis rather than an absolute one.

  rotary-encoder,steps:
    $ref: /schemas/types.yaml#/definitions/uint32
    default: 24
    description:
      Number of steps in a full turnaround of the
      encoder. Only relevant for absolute axis. Defaults to 24 which is a
      typical value for such devices.

  rotary-encoder,rollover:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Automatic rollover when the rotary value becomes
      greater than the specified steps or smaller than 0. For absolute axis only.

  "#pwm-cells":
    const: 3

  gpio:
    $ref: /schemas/gpio/maxim,max7360-gpio.yaml#
    description:
      PORT0 to PORT7 general purpose input/output pins configuration.

  gpo:
    $ref: /schemas/gpio/maxim,max7360-gpio.yaml#
    description: >
      COL2 to COL7 general purpose output pins configuration. Allows to use
      unused keypad columns as outputs.

      The MAX7360 has 8 column lines and 6 of them can be used as GPOs. GPIOs
      numbers used for this gpio-controller node do correspond to the column
      numbers: values 0 and 1 are never valid, values from 2 to 7 might be valid
      depending on the value of the keypad,num-column property.

patternProperties:
  '-pins$':
    type: object
    description:
      Pinctrl node's client devices use subnodes for desired pin configuration.
      Client device subnodes use below standard properties.
    $ref: /schemas/pinctrl/pincfg-node.yaml

    properties:
      pins:
        description:
          List of gpio pins affected by the properties specified in this
          subnode.
        items:
          pattern: '^(PORT[0-7]|ROTARY)$'
        minItems: 1
        maxItems: 8

      function:
        description:
          Specify the alternative function to be configured for the specified
          pins.
        enum: [gpio, pwm, rotary]

    additionalProperties: false

required:
  - compatible
  - reg
  - interrupts
  - interrupt-names
  - linux,keymap
  - linux,axis
  - "#pwm-cells"
  - gpio
  - gpo

unevaluatedProperties: false

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

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

      io-expander@38 {
        compatible = "maxim,max7360";
        reg = <0x38>;

        interrupt-parent = <&gpio1>;
        interrupts = <23 IRQ_TYPE_LEVEL_LOW>,
                     <24 IRQ_TYPE_LEVEL_LOW>;
        interrupt-names = "inti", "intk";

        keypad,num-rows = <8>;
        keypad,num-columns = <4>;
        linux,keymap = <
          MATRIX_KEY(0x00, 0x00, KEY_F5)
          MATRIX_KEY(0x01, 0x00, KEY_F4)
          MATRIX_KEY(0x02, 0x01, KEY_F6)
          >;
        keypad-debounce-delay-ms = <10>;
        autorepeat;

        rotary-debounce-delay-ms = <2>;
        linux,axis = <0>; /* REL_X */
        rotary-encoder,relative-axis;

        #pwm-cells = <3>;

        max7360_gpio: gpio {
          compatible = "maxim,max7360-gpio";

          gpio-controller;
          #gpio-cells = <2>;
          maxim,constant-current-disable = <0x06>;

          interrupt-controller;
          #interrupt-cells = <0x2>;
        };

        max7360_gpo: gpo {
          compatible = "maxim,max7360-gpo";

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

        backlight_pins: backlight-pins {
          pins = "PORT2";
          function = "pwm";
        };
      };
    };