1
0

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: "Rob Herring (Arm)" <robh@kernel.org>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: Mathieu 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: Lee Jones <lee@kernel.org>
This commit is contained in:
Mathieu Dubois-Briand
2025-08-24 13:57:20 +02:00
committed by Lee Jones
parent 8f5ae30d69
commit aee814458f
2 changed files with 274 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
# 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>;
};

View File

@@ -0,0 +1,191 @@
# 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";
};
};
};