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