84 lines
3.7 KiB
Plaintext
84 lines
3.7 KiB
Plaintext
|
* 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.
|