| * Spreadtrum Pin Controller |
| |
| The Spreadtrum pin controller are organized in 3 blocks (types). |
| |
| The first block comprises some global control registers, and each |
| register contains several bit fields with one bit or several bits |
| to configure for some global common configuration, such as domain |
| pad driving level, system control select and so on ("domain pad |
| driving level": One pin can output 3.0v or 1.8v, depending on the |
| related domain pad driving selection, if the related domain pad |
| slect 3.0v, then the pin can output 3.0v. "system control" is used |
| to choose one function (like: UART0) for which system, since we |
| have several systems (AP/CP/CM4) on one SoC.). |
| |
| There are too much various configuration that we can not list all |
| of them, so we can not make every Spreadtrum-special configuration |
| as one generic configuration, and maybe it will add more strange |
| global configuration in future. Then we add one "sprd,control" to |
| set these various global control configuration, and we need use |
| magic number for this property. |
| |
| Moreover we recognise every fields comprising one bit or several |
| bits in one global control register as one pin, thus we should |
| record every pin's bit offset, bit width and register offset to |
| configure this field (pin). |
| |
| The second block comprises some common registers which have unified |
| register definition, and each register described one pin is used |
| to configure the pin sleep mode, function select and sleep related |
| configuration. |
| |
| Now we have 4 systems for sleep mode on SC9860 SoC: AP system, |
| PUBCP system, TGLDSP system and AGDSP system. And the pin sleep |
| related configuration are: |
| - input-enable |
| - input-disable |
| - output-high |
| - output-low |
| - bias-pull-up |
| - bias-pull-down |
| |
| In some situation we need set the pin sleep mode and pin sleep related |
| configuration, to set the pin sleep related configuration automatically |
| by hardware when the system specified by sleep mode goes into deep |
| sleep mode. For example, if we set the pin sleep mode as PUBCP_SLEEP |
| and set the pin sleep related configuration as "input-enable", which |
| means when PUBCP system goes into deep sleep mode, this pin will be set |
| input enable automatically. |
| |
| Moreover we can not use the "sleep" state, since some systems (like: |
| PUBCP system) do not run linux kernel OS (only AP system run linux |
| kernel on SC9860 platform), then we can not select "sleep" state |
| when the PUBCP system goes into deep sleep mode. Thus we introduce |
| "sprd,sleep-mode" property to set pin sleep mode. |
| |
| The last block comprises some misc registers which also have unified |
| register definition, and each register described one pin is used to |
| configure drive strength, pull up/down and so on. Especially for pull |
| up, we have two kind pull up resistor: 20K and 4.7K. |
| |
| Required properties for Spreadtrum pin controller: |
| - compatible: "sprd,<soc>-pinctrl" |
| Please refer to each sprd,<soc>-pinctrl.txt binding doc for supported SoCs. |
| - reg: The register address of pin controller device. |
| - pins : An array of pin names. |
| |
| Optional properties: |
| - function: Specified the function name. |
| - drive-strength: Drive strength in mA. |
| - input-schmitt-disable: Enable schmitt-trigger mode. |
| - input-schmitt-enable: Disable schmitt-trigger mode. |
| - bias-disable: Disable pin bias. |
| - bias-pull-down: Pull down on pin. |
| - bias-pull-up: Pull up on pin. |
| - input-enable: Enable pin input. |
| - input-disable: Enable pin output. |
| - output-high: Set the pin as an output level high. |
| - output-low: Set the pin as an output level low. |
| - sleep-hardware-state: Indicate these configs in this state are sleep related. |
| - sprd,control: Control values referring to databook for global control pins. |
| - sprd,sleep-mode: Sleep mode selection. |
| |
| Please refer to each sprd,<soc>-pinctrl.txt binding doc for supported values. |