xref: /linux/Documentation/devicetree/bindings/mfd/maxim,max7360.yaml (revision 4f38da1f027ea2c9f01bb71daa7a299c191b6940)
1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/mfd/maxim,max7360.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Maxim MAX7360 Keypad, Rotary encoder, PWM and GPIO controller
8
9maintainers:
10  - Kamel Bouhara <kamel.bouhara@bootlin.com>
11  - Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
12
13description: |
14  Maxim MAX7360 device, with following functions:
15    - keypad controller
16    - rotary controller
17    - GPIO and GPO controller
18    - PWM controller
19
20  https://www.analog.com/en/products/max7360.html
21
22allOf:
23  - $ref: /schemas/input/matrix-keymap.yaml#
24  - $ref: /schemas/input/input.yaml#
25
26properties:
27  compatible:
28    enum:
29      - maxim,max7360
30
31  reg:
32    maxItems: 1
33
34  interrupts:
35    maxItems: 2
36
37  interrupt-names:
38    items:
39      - const: inti
40      - const: intk
41
42  keypad-debounce-delay-ms:
43    description: Keypad debounce delay in ms
44    minimum: 9
45    maximum: 40
46    default: 9
47
48  rotary-debounce-delay-ms:
49    description: Rotary encoder debounce delay in ms
50    minimum: 0
51    maximum: 15
52    default: 0
53
54  linux,axis:
55    $ref: /schemas/input/rotary-encoder.yaml#/properties/linux,axis
56
57  rotary-encoder,relative-axis:
58    $ref: /schemas/types.yaml#/definitions/flag
59    description:
60      Register a relative axis rather than an absolute one.
61
62  rotary-encoder,steps:
63    $ref: /schemas/types.yaml#/definitions/uint32
64    default: 24
65    description:
66      Number of steps in a full turnaround of the
67      encoder. Only relevant for absolute axis. Defaults to 24 which is a
68      typical value for such devices.
69
70  rotary-encoder,rollover:
71    $ref: /schemas/types.yaml#/definitions/flag
72    description:
73      Automatic rollover when the rotary value becomes
74      greater than the specified steps or smaller than 0. For absolute axis only.
75
76  "#pwm-cells":
77    const: 3
78
79  gpio:
80    $ref: /schemas/gpio/maxim,max7360-gpio.yaml#
81    description:
82      PORT0 to PORT7 general purpose input/output pins configuration.
83
84  gpo:
85    $ref: /schemas/gpio/maxim,max7360-gpio.yaml#
86    description: >
87      COL2 to COL7 general purpose output pins configuration. Allows to use
88      unused keypad columns as outputs.
89
90      The MAX7360 has 8 column lines and 6 of them can be used as GPOs. GPIOs
91      numbers used for this gpio-controller node do correspond to the column
92      numbers: values 0 and 1 are never valid, values from 2 to 7 might be valid
93      depending on the value of the keypad,num-column property.
94
95patternProperties:
96  '-pins$':
97    type: object
98    description:
99      Pinctrl node's client devices use subnodes for desired pin configuration.
100      Client device subnodes use below standard properties.
101    $ref: /schemas/pinctrl/pincfg-node.yaml
102
103    properties:
104      pins:
105        description:
106          List of gpio pins affected by the properties specified in this
107          subnode.
108        items:
109          pattern: '^(PORT[0-7]|ROTARY)$'
110        minItems: 1
111        maxItems: 8
112
113      function:
114        description:
115          Specify the alternative function to be configured for the specified
116          pins.
117        enum: [gpio, pwm, rotary]
118
119    additionalProperties: false
120
121required:
122  - compatible
123  - reg
124  - interrupts
125  - interrupt-names
126  - linux,keymap
127  - linux,axis
128  - "#pwm-cells"
129  - gpio
130  - gpo
131
132unevaluatedProperties: false
133
134examples:
135  - |
136    #include <dt-bindings/input/input.h>
137    #include <dt-bindings/interrupt-controller/arm-gic.h>
138
139    i2c {
140      #address-cells = <1>;
141      #size-cells = <0>;
142
143      io-expander@38 {
144        compatible = "maxim,max7360";
145        reg = <0x38>;
146
147        interrupt-parent = <&gpio1>;
148        interrupts = <23 IRQ_TYPE_LEVEL_LOW>,
149                     <24 IRQ_TYPE_LEVEL_LOW>;
150        interrupt-names = "inti", "intk";
151
152        keypad,num-rows = <8>;
153        keypad,num-columns = <4>;
154        linux,keymap = <
155          MATRIX_KEY(0x00, 0x00, KEY_F5)
156          MATRIX_KEY(0x01, 0x00, KEY_F4)
157          MATRIX_KEY(0x02, 0x01, KEY_F6)
158          >;
159        keypad-debounce-delay-ms = <10>;
160        autorepeat;
161
162        rotary-debounce-delay-ms = <2>;
163        linux,axis = <0>; /* REL_X */
164        rotary-encoder,relative-axis;
165
166        #pwm-cells = <3>;
167
168        max7360_gpio: gpio {
169          compatible = "maxim,max7360-gpio";
170
171          gpio-controller;
172          #gpio-cells = <2>;
173          maxim,constant-current-disable = <0x06>;
174
175          interrupt-controller;
176          #interrupt-cells = <0x2>;
177        };
178
179        max7360_gpo: gpo {
180          compatible = "maxim,max7360-gpo";
181
182          gpio-controller;
183          #gpio-cells = <2>;
184        };
185
186        backlight_pins: backlight-pins {
187          pins = "PORT2";
188          function = "pwm";
189        };
190      };
191    };
192