Tom Rini | 53633a8 | 2024-02-29 12:33:36 -0500 | [diff] [blame] | 1 | * Spreadtrum Pin Controller |
| 2 | |
| 3 | The Spreadtrum pin controller are organized in 3 blocks (types). |
| 4 | |
| 5 | The first block comprises some global control registers, and each |
| 6 | register contains several bit fields with one bit or several bits |
| 7 | to configure for some global common configuration, such as domain |
| 8 | pad driving level, system control select and so on ("domain pad |
| 9 | driving level": One pin can output 3.0v or 1.8v, depending on the |
| 10 | related domain pad driving selection, if the related domain pad |
| 11 | select 3.0v, then the pin can output 3.0v. "system control" is used |
| 12 | to choose one function (like: UART0) for which system, since we |
| 13 | have several systems (AP/CP/CM4) on one SoC.). |
| 14 | |
| 15 | There are too much various configuration that we can not list all |
| 16 | of them, so we can not make every Spreadtrum-special configuration |
| 17 | as one generic configuration, and maybe it will add more strange |
| 18 | global configuration in future. Then we add one "sprd,control" to |
| 19 | set these various global control configuration, and we need use |
| 20 | magic number for this property. |
| 21 | |
| 22 | Moreover we recognise every fields comprising one bit or several |
| 23 | bits in one global control register as one pin, thus we should |
| 24 | record every pin's bit offset, bit width and register offset to |
| 25 | configure this field (pin). |
| 26 | |
| 27 | The second block comprises some common registers which have unified |
| 28 | register definition, and each register described one pin is used |
| 29 | to configure the pin sleep mode, function select and sleep related |
| 30 | configuration. |
| 31 | |
| 32 | Now we have 4 systems for sleep mode on SC9860 SoC: AP system, |
| 33 | PUBCP system, TGLDSP system and AGDSP system. And the pin sleep |
| 34 | related configuration are: |
| 35 | - input-enable |
| 36 | - input-disable |
| 37 | - output-high |
| 38 | - output-low |
| 39 | - bias-pull-up |
| 40 | - bias-pull-down |
| 41 | |
| 42 | In some situation we need set the pin sleep mode and pin sleep related |
| 43 | configuration, to set the pin sleep related configuration automatically |
| 44 | by hardware when the system specified by sleep mode goes into deep |
| 45 | sleep mode. For example, if we set the pin sleep mode as PUBCP_SLEEP |
| 46 | and set the pin sleep related configuration as "input-enable", which |
| 47 | means when PUBCP system goes into deep sleep mode, this pin will be set |
| 48 | input enable automatically. |
| 49 | |
| 50 | Moreover we can not use the "sleep" state, since some systems (like: |
| 51 | PUBCP system) do not run linux kernel OS (only AP system run linux |
| 52 | kernel on SC9860 platform), then we can not select "sleep" state |
| 53 | when the PUBCP system goes into deep sleep mode. Thus we introduce |
| 54 | "sprd,sleep-mode" property to set pin sleep mode. |
| 55 | |
| 56 | The last block comprises some misc registers which also have unified |
| 57 | register definition, and each register described one pin is used to |
| 58 | configure drive strength, pull up/down and so on. Especially for pull |
| 59 | up, we have two kind pull up resistor: 20K and 4.7K. |
| 60 | |
| 61 | Required properties for Spreadtrum pin controller: |
| 62 | - compatible: "sprd,<soc>-pinctrl" |
| 63 | Please refer to each sprd,<soc>-pinctrl.txt binding doc for supported SoCs. |
| 64 | - reg: The register address of pin controller device. |
| 65 | - pins : An array of pin names. |
| 66 | |
| 67 | Optional properties: |
| 68 | - function: Specified the function name. |
| 69 | - drive-strength: Drive strength in mA. |
| 70 | - input-schmitt-disable: Enable schmitt-trigger mode. |
| 71 | - input-schmitt-enable: Disable schmitt-trigger mode. |
| 72 | - bias-disable: Disable pin bias. |
| 73 | - bias-pull-down: Pull down on pin. |
| 74 | - bias-pull-up: Pull up on pin. |
| 75 | - input-enable: Enable pin input. |
| 76 | - input-disable: Enable pin output. |
| 77 | - output-high: Set the pin as an output level high. |
| 78 | - output-low: Set the pin as an output level low. |
| 79 | - sleep-hardware-state: Indicate these configs in this state are sleep related. |
| 80 | - sprd,control: Control values referring to databook for global control pins. |
| 81 | - sprd,sleep-mode: Sleep mode selection. |
| 82 | |
| 83 | Please refer to each sprd,<soc>-pinctrl.txt binding doc for supported values. |