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