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