xref: /linux/Documentation/devicetree/bindings/pinctrl/sprd,sc9860-pinctrl.yaml (revision a110f942672c8995dc1cacb5a44c6730856743aa)
1*ea2bfb85SRob Herring (Arm)# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*ea2bfb85SRob Herring (Arm)%YAML 1.2
3*ea2bfb85SRob Herring (Arm)---
4*ea2bfb85SRob Herring (Arm)$id: http://devicetree.org/schemas/pinctrl/sprd,sc9860-pinctrl.yaml#
5*ea2bfb85SRob Herring (Arm)$schema: http://devicetree.org/meta-schemas/core.yaml#
6*ea2bfb85SRob Herring (Arm)
7*ea2bfb85SRob Herring (Arm)title: Spreadtrum SC9860 Pin Controller
8*ea2bfb85SRob Herring (Arm)
9*ea2bfb85SRob Herring (Arm)maintainers:
10*ea2bfb85SRob Herring (Arm)  - Baolin Wang <baolin.wang@linux.alibaba.com>
11*ea2bfb85SRob Herring (Arm)
12*ea2bfb85SRob Herring (Arm)description: >
13*ea2bfb85SRob Herring (Arm)  The Spreadtrum pin controller are organized in 3 blocks (types).
14*ea2bfb85SRob Herring (Arm)
15*ea2bfb85SRob Herring (Arm)  The first block comprises some global control registers, and each
16*ea2bfb85SRob Herring (Arm)  register contains several bit fields with one bit or several bits
17*ea2bfb85SRob Herring (Arm)  to configure for some global common configuration, such as domain
18*ea2bfb85SRob Herring (Arm)  pad driving level, system control select and so on ("domain pad
19*ea2bfb85SRob Herring (Arm)  driving level": One pin can output 3.0v or 1.8v, depending on the
20*ea2bfb85SRob Herring (Arm)  related domain pad driving selection, if the related domain pad
21*ea2bfb85SRob Herring (Arm)  select 3.0v, then the pin can output 3.0v. "system control" is used
22*ea2bfb85SRob Herring (Arm)  to choose one function (like: UART0) for which system, since we
23*ea2bfb85SRob Herring (Arm)  have several systems (AP/CP/CM4) on one SoC.).
24*ea2bfb85SRob Herring (Arm)
25*ea2bfb85SRob Herring (Arm)  There are too much various configuration that we can not list all
26*ea2bfb85SRob Herring (Arm)  of them, so we can not make every Spreadtrum-special configuration
27*ea2bfb85SRob Herring (Arm)  as one generic configuration, and maybe it will add more strange
28*ea2bfb85SRob Herring (Arm)  global configuration in future. Then we add one "sprd,control" to
29*ea2bfb85SRob Herring (Arm)  set these various global control configuration, and we need use
30*ea2bfb85SRob Herring (Arm)  magic number for this property.
31*ea2bfb85SRob Herring (Arm)
32*ea2bfb85SRob Herring (Arm)  Moreover we recognize every fields comprising one bit or several
33*ea2bfb85SRob Herring (Arm)  bits in one global control register as one pin, thus we should
34*ea2bfb85SRob Herring (Arm)  record every pin's bit offset, bit width and register offset to
35*ea2bfb85SRob Herring (Arm)  configure this field (pin).
36*ea2bfb85SRob Herring (Arm)
37*ea2bfb85SRob Herring (Arm)  The second block comprises some common registers which have unified
38*ea2bfb85SRob Herring (Arm)  register definition, and each register described one pin is used
39*ea2bfb85SRob Herring (Arm)  to configure the pin sleep mode, function select and sleep related
40*ea2bfb85SRob Herring (Arm)  configuration.
41*ea2bfb85SRob Herring (Arm)
42*ea2bfb85SRob Herring (Arm)  Now we have 4 systems for sleep mode on SC9860 SoC: AP system,
43*ea2bfb85SRob Herring (Arm)  PUBCP system, TGLDSP system and AGDSP system. And the pin sleep
44*ea2bfb85SRob Herring (Arm)  related configuration are:
45*ea2bfb85SRob Herring (Arm)    - input-enable
46*ea2bfb85SRob Herring (Arm)    - input-disable
47*ea2bfb85SRob Herring (Arm)    - output-high
48*ea2bfb85SRob Herring (Arm)    - output-low
49*ea2bfb85SRob Herring (Arm)    - bias-pull-up
50*ea2bfb85SRob Herring (Arm)    - bias-pull-down
51*ea2bfb85SRob Herring (Arm)
52*ea2bfb85SRob Herring (Arm)  In some situation we need set the pin sleep mode and pin sleep related
53*ea2bfb85SRob Herring (Arm)  configuration, to set the pin sleep related configuration automatically
54*ea2bfb85SRob Herring (Arm)  by hardware when the system specified by sleep mode goes into deep
55*ea2bfb85SRob Herring (Arm)  sleep mode. For example, if we set the pin sleep mode as PUBCP_SLEEP
56*ea2bfb85SRob Herring (Arm)  and set the pin sleep related configuration as "input-enable", which
57*ea2bfb85SRob Herring (Arm)  means when PUBCP system goes into deep sleep mode, this pin will be set
58*ea2bfb85SRob Herring (Arm)  input enable automatically.
59*ea2bfb85SRob Herring (Arm)
60*ea2bfb85SRob Herring (Arm)  Moreover we can not use the "sleep" state, since some systems (like:
61*ea2bfb85SRob Herring (Arm)  PUBCP system) do not run linux kernel OS (only AP system run linux
62*ea2bfb85SRob Herring (Arm)  kernel on SC9860 platform), then we can not select "sleep" state
63*ea2bfb85SRob Herring (Arm)  when the PUBCP system goes into deep sleep mode. Thus we introduce
64*ea2bfb85SRob Herring (Arm)  "sprd,sleep-mode" property to set pin sleep mode.
65*ea2bfb85SRob Herring (Arm)
66*ea2bfb85SRob Herring (Arm)  The last block comprises some misc registers which also have unified
67*ea2bfb85SRob Herring (Arm)  register definition, and each register described one pin is used to
68*ea2bfb85SRob Herring (Arm)  configure drive strength, pull up/down and so on. Especially for pull
69*ea2bfb85SRob Herring (Arm)  up, we have two kind pull up resistor: 20K and 4.7K.
70*ea2bfb85SRob Herring (Arm)
71*ea2bfb85SRob Herring (Arm)properties:
72*ea2bfb85SRob Herring (Arm)  compatible:
73*ea2bfb85SRob Herring (Arm)    const: sprd,sc9860-pinctrl
74*ea2bfb85SRob Herring (Arm)
75*ea2bfb85SRob Herring (Arm)  reg:
76*ea2bfb85SRob Herring (Arm)    maxItems: 1
77*ea2bfb85SRob Herring (Arm)
78*ea2bfb85SRob Herring (Arm)additionalProperties:
79*ea2bfb85SRob Herring (Arm)  $ref: '#/$defs/pin-node'
80*ea2bfb85SRob Herring (Arm)  unevaluatedProperties: false
81*ea2bfb85SRob Herring (Arm)
82*ea2bfb85SRob Herring (Arm)  properties:
83*ea2bfb85SRob Herring (Arm)    function:
84*ea2bfb85SRob Herring (Arm)      description: Function to assign to the pins.
85*ea2bfb85SRob Herring (Arm)      enum:
86*ea2bfb85SRob Herring (Arm)        - func1
87*ea2bfb85SRob Herring (Arm)        - func2
88*ea2bfb85SRob Herring (Arm)        - func3
89*ea2bfb85SRob Herring (Arm)        - func4
90*ea2bfb85SRob Herring (Arm)
91*ea2bfb85SRob Herring (Arm)    drive-strength:
92*ea2bfb85SRob Herring (Arm)      description: Drive strength in mA.
93*ea2bfb85SRob Herring (Arm)      $ref: /schemas/types.yaml#/definitions/uint32
94*ea2bfb85SRob Herring (Arm)      enum: [2, 4, 6, 8, 10, 12, 14, 16, 20, 21, 24, 25, 27, 29, 31, 33]
95*ea2bfb85SRob Herring (Arm)
96*ea2bfb85SRob Herring (Arm)    input-schmitt-disable: true
97*ea2bfb85SRob Herring (Arm)
98*ea2bfb85SRob Herring (Arm)    input-schmitt-enable: true
99*ea2bfb85SRob Herring (Arm)
100*ea2bfb85SRob Herring (Arm)    bias-pull-up:
101*ea2bfb85SRob Herring (Arm)      enum: [20000, 4700]
102*ea2bfb85SRob Herring (Arm)
103*ea2bfb85SRob Herring (Arm)    sprd,sleep-mode:
104*ea2bfb85SRob Herring (Arm)      description: Pin sleep mode selection.
105*ea2bfb85SRob Herring (Arm)      $ref: /schemas/types.yaml#/definitions/uint32
106*ea2bfb85SRob Herring (Arm)      maximum: 0x1f
107*ea2bfb85SRob Herring (Arm)
108*ea2bfb85SRob Herring (Arm)    sprd,control:
109*ea2bfb85SRob Herring (Arm)      description: Control values referring to databook for global control pins.
110*ea2bfb85SRob Herring (Arm)      $ref: /schemas/types.yaml#/definitions/uint32
111*ea2bfb85SRob Herring (Arm)
112*ea2bfb85SRob Herring (Arm)  patternProperties:
113*ea2bfb85SRob Herring (Arm)    'sleep$':
114*ea2bfb85SRob Herring (Arm)      $ref: '#/$defs/pin-node'
115*ea2bfb85SRob Herring (Arm)      unevaluatedProperties: false
116*ea2bfb85SRob Herring (Arm)
117*ea2bfb85SRob Herring (Arm)      properties:
118*ea2bfb85SRob Herring (Arm)        bias-pull-up:
119*ea2bfb85SRob Herring (Arm)          type: boolean
120*ea2bfb85SRob Herring (Arm)
121*ea2bfb85SRob Herring (Arm)        sleep-hardware-state:
122*ea2bfb85SRob Herring (Arm)          description: Indicate these configs in sleep related state.
123*ea2bfb85SRob Herring (Arm)          type: boolean
124*ea2bfb85SRob Herring (Arm)
125*ea2bfb85SRob Herring (Arm)$defs:
126*ea2bfb85SRob Herring (Arm)  pin-node:
127*ea2bfb85SRob Herring (Arm)    type: object
128*ea2bfb85SRob Herring (Arm)    allOf:
129*ea2bfb85SRob Herring (Arm)      - $ref: /schemas/pinctrl/pincfg-node.yaml#
130*ea2bfb85SRob Herring (Arm)      - $ref: /schemas/pinctrl/pinmux-node.yaml#
131*ea2bfb85SRob Herring (Arm)
132*ea2bfb85SRob Herring (Arm)    properties:
133*ea2bfb85SRob Herring (Arm)      pins:
134*ea2bfb85SRob Herring (Arm)        description: Names of pins to configure.
135*ea2bfb85SRob Herring (Arm)        $ref: /schemas/types.yaml#/definitions/string-array
136*ea2bfb85SRob Herring (Arm)
137*ea2bfb85SRob Herring (Arm)      bias-disable:
138*ea2bfb85SRob Herring (Arm)        description: Disable pin bias.
139*ea2bfb85SRob Herring (Arm)        type: boolean
140*ea2bfb85SRob Herring (Arm)
141*ea2bfb85SRob Herring (Arm)      bias-pull-down:
142*ea2bfb85SRob Herring (Arm)        description: Pull down on pin.
143*ea2bfb85SRob Herring (Arm)        type: boolean
144*ea2bfb85SRob Herring (Arm)
145*ea2bfb85SRob Herring (Arm)      bias-pull-up: true
146*ea2bfb85SRob Herring (Arm)
147*ea2bfb85SRob Herring (Arm)      input-enable:
148*ea2bfb85SRob Herring (Arm)        description: Enable pin input.
149*ea2bfb85SRob Herring (Arm)        type: boolean
150*ea2bfb85SRob Herring (Arm)
151*ea2bfb85SRob Herring (Arm)      input-disable:
152*ea2bfb85SRob Herring (Arm)        description: Enable pin output.
153*ea2bfb85SRob Herring (Arm)        type: boolean
154*ea2bfb85SRob Herring (Arm)
155*ea2bfb85SRob Herring (Arm)      output-high:
156*ea2bfb85SRob Herring (Arm)        description: Set the pin as an output level high.
157*ea2bfb85SRob Herring (Arm)        type: boolean
158*ea2bfb85SRob Herring (Arm)
159*ea2bfb85SRob Herring (Arm)      output-low:
160*ea2bfb85SRob Herring (Arm)        description: Set the pin as an output level low.
161*ea2bfb85SRob Herring (Arm)        type: boolean
162*ea2bfb85SRob Herring (Arm)
163*ea2bfb85SRob Herring (Arm)required:
164*ea2bfb85SRob Herring (Arm)  - compatible
165*ea2bfb85SRob Herring (Arm)  - reg
166*ea2bfb85SRob Herring (Arm)
167*ea2bfb85SRob Herring (Arm)examples:
168*ea2bfb85SRob Herring (Arm)  - |
169*ea2bfb85SRob Herring (Arm)    pin_controller: pinctrl@402a0000 {
170*ea2bfb85SRob Herring (Arm)        compatible = "sprd,sc9860-pinctrl";
171*ea2bfb85SRob Herring (Arm)        reg = <0x402a0000 0x10000>;
172*ea2bfb85SRob Herring (Arm)
173*ea2bfb85SRob Herring (Arm)        grp1: sd0 {
174*ea2bfb85SRob Herring (Arm)            pins = "SC9860_VIO_SD2_IRTE", "SC9860_VIO_SD0_IRTE";
175*ea2bfb85SRob Herring (Arm)            sprd,control = <0x1>;
176*ea2bfb85SRob Herring (Arm)        };
177*ea2bfb85SRob Herring (Arm)
178*ea2bfb85SRob Herring (Arm)        grp2: rfctl_33 {
179*ea2bfb85SRob Herring (Arm)            pins = "SC9860_RFCTL33";
180*ea2bfb85SRob Herring (Arm)            function = "func2";
181*ea2bfb85SRob Herring (Arm)            sprd,sleep-mode = <3>;
182*ea2bfb85SRob Herring (Arm)            grp2_sleep_mode: rfctl_33_sleep {
183*ea2bfb85SRob Herring (Arm)                pins = "SC9860_RFCTL33";
184*ea2bfb85SRob Herring (Arm)                sleep-hardware-state;
185*ea2bfb85SRob Herring (Arm)                output-low;
186*ea2bfb85SRob Herring (Arm)            };
187*ea2bfb85SRob Herring (Arm)        };
188*ea2bfb85SRob Herring (Arm)
189*ea2bfb85SRob Herring (Arm)        grp3: rfctl_misc_20 {
190*ea2bfb85SRob Herring (Arm)            pins = "SC9860_RFCTL20_MISC";
191*ea2bfb85SRob Herring (Arm)            drive-strength = <10>;
192*ea2bfb85SRob Herring (Arm)            bias-pull-up = <4700>;
193*ea2bfb85SRob Herring (Arm)            grp3_sleep_mode: rfctl_misc_sleep {
194*ea2bfb85SRob Herring (Arm)                pins = "SC9860_RFCTL20_MISC";
195*ea2bfb85SRob Herring (Arm)                sleep-hardware-state;
196*ea2bfb85SRob Herring (Arm)                bias-pull-up;
197*ea2bfb85SRob Herring (Arm)            };
198*ea2bfb85SRob Herring (Arm)        };
199*ea2bfb85SRob Herring (Arm)    };
200