xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/input/adc-joystick.yaml (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2*4882a593Smuzhiyun# Copyright 2019-2020 Artur Rojek
3*4882a593Smuzhiyun%YAML 1.2
4*4882a593Smuzhiyun---
5*4882a593Smuzhiyun$id: "http://devicetree.org/schemas/input/adc-joystick.yaml#"
6*4882a593Smuzhiyun$schema: "http://devicetree.org/meta-schemas/core.yaml#"
7*4882a593Smuzhiyun
8*4882a593Smuzhiyuntitle: ADC attached joystick
9*4882a593Smuzhiyun
10*4882a593Smuzhiyunmaintainers:
11*4882a593Smuzhiyun  - Artur Rojek <contact@artur-rojek.eu>
12*4882a593Smuzhiyun
13*4882a593Smuzhiyundescription: >
14*4882a593Smuzhiyun  Bindings for joystick devices connected to ADC controllers supporting
15*4882a593Smuzhiyun  the Industrial I/O subsystem.
16*4882a593Smuzhiyun
17*4882a593Smuzhiyunproperties:
18*4882a593Smuzhiyun  compatible:
19*4882a593Smuzhiyun    const: adc-joystick
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun  io-channels:
22*4882a593Smuzhiyun    minItems: 1
23*4882a593Smuzhiyun    maxItems: 1024
24*4882a593Smuzhiyun    description: >
25*4882a593Smuzhiyun      List of phandle and IIO specifier pairs.
26*4882a593Smuzhiyun      Each pair defines one ADC channel to which a joystick axis is connected.
27*4882a593Smuzhiyun      See Documentation/devicetree/bindings/iio/iio-bindings.txt for details.
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun  '#address-cells':
30*4882a593Smuzhiyun    const: 1
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun  '#size-cells':
33*4882a593Smuzhiyun    const: 0
34*4882a593Smuzhiyun
35*4882a593Smuzhiyunrequired:
36*4882a593Smuzhiyun  - compatible
37*4882a593Smuzhiyun  - io-channels
38*4882a593Smuzhiyun  - '#address-cells'
39*4882a593Smuzhiyun  - '#size-cells'
40*4882a593Smuzhiyun
41*4882a593SmuzhiyunadditionalProperties: false
42*4882a593Smuzhiyun
43*4882a593SmuzhiyunpatternProperties:
44*4882a593Smuzhiyun  "^axis@[0-9a-f]+$":
45*4882a593Smuzhiyun    type: object
46*4882a593Smuzhiyun    description: >
47*4882a593Smuzhiyun      Represents a joystick axis bound to the given ADC channel.
48*4882a593Smuzhiyun      For each entry in the io-channels list, one axis subnode with a matching
49*4882a593Smuzhiyun      reg property must be specified.
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun    properties:
52*4882a593Smuzhiyun      reg:
53*4882a593Smuzhiyun        minimum: 0
54*4882a593Smuzhiyun        maximum: 1023
55*4882a593Smuzhiyun        description: Index of an io-channels list entry bound to this axis.
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun      linux,code:
58*4882a593Smuzhiyun        $ref: /schemas/types.yaml#/definitions/uint32
59*4882a593Smuzhiyun        description: EV_ABS specific event code generated by the axis.
60*4882a593Smuzhiyun
61*4882a593Smuzhiyun      abs-range:
62*4882a593Smuzhiyun        allOf:
63*4882a593Smuzhiyun          - $ref: /schemas/types.yaml#/definitions/uint32-array
64*4882a593Smuzhiyun          - items:
65*4882a593Smuzhiyun              - description: minimum value
66*4882a593Smuzhiyun              - description: maximum value
67*4882a593Smuzhiyun        description: >
68*4882a593Smuzhiyun          Minimum and maximum values produced by the axis.
69*4882a593Smuzhiyun          For an ABS_X axis this will be the left-most and right-most
70*4882a593Smuzhiyun          inclination of the joystick. If min > max, it is left to userspace to
71*4882a593Smuzhiyun          treat the axis as inverted.
72*4882a593Smuzhiyun          This property is interpreted as two signed 32 bit values.
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun      abs-fuzz:
75*4882a593Smuzhiyun        $ref: /schemas/types.yaml#/definitions/uint32
76*4882a593Smuzhiyun        description: >
77*4882a593Smuzhiyun          Amount of noise in the input value.
78*4882a593Smuzhiyun          Omitting this property indicates the axis is precise.
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun      abs-flat:
81*4882a593Smuzhiyun        $ref: /schemas/types.yaml#/definitions/uint32
82*4882a593Smuzhiyun        description: >
83*4882a593Smuzhiyun          Axial "deadzone", or area around the center position, where the axis
84*4882a593Smuzhiyun          is considered to be at rest.
85*4882a593Smuzhiyun          Omitting this property indicates the axis always returns to exactly
86*4882a593Smuzhiyun          the center position.
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun    required:
89*4882a593Smuzhiyun      - reg
90*4882a593Smuzhiyun      - linux,code
91*4882a593Smuzhiyun      - abs-range
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun    additionalProperties: false
94*4882a593Smuzhiyun
95*4882a593Smuzhiyunexamples:
96*4882a593Smuzhiyun  - |
97*4882a593Smuzhiyun    #include <dt-bindings/iio/adc/ingenic,adc.h>
98*4882a593Smuzhiyun    #include <dt-bindings/input/input.h>
99*4882a593Smuzhiyun
100*4882a593Smuzhiyun    joystick: adc-joystick {
101*4882a593Smuzhiyun      compatible = "adc-joystick";
102*4882a593Smuzhiyun      io-channels = <&adc INGENIC_ADC_TOUCH_XP>,
103*4882a593Smuzhiyun                    <&adc INGENIC_ADC_TOUCH_YP>;
104*4882a593Smuzhiyun      #address-cells = <1>;
105*4882a593Smuzhiyun      #size-cells = <0>;
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun      axis@0 {
108*4882a593Smuzhiyun              reg = <0>;
109*4882a593Smuzhiyun              linux,code = <ABS_X>;
110*4882a593Smuzhiyun              abs-range = <3300 0>;
111*4882a593Smuzhiyun              abs-fuzz = <4>;
112*4882a593Smuzhiyun              abs-flat = <200>;
113*4882a593Smuzhiyun      };
114*4882a593Smuzhiyun      axis@1 {
115*4882a593Smuzhiyun              reg = <1>;
116*4882a593Smuzhiyun              linux,code = <ABS_Y>;
117*4882a593Smuzhiyun              abs-range = <0 3300>;
118*4882a593Smuzhiyun              abs-fuzz = <4>;
119*4882a593Smuzhiyun              abs-flat = <200>;
120*4882a593Smuzhiyun      };
121*4882a593Smuzhiyun    };
122