pinctrl-tz1090-pdc: add TZ1090 PDC pinctrl driver
Add a pin control driver for the TZ1090's low power pins via the powerdown controller SOC_GPIO_CONTROL registers. These pins have individually controlled pull-up, and group controlled schmitt, slew-rate, drive-strength, and power-on-start (pos). The pdc_gpio0 and pdc_gpio1 pins can also be muxed onto the ir_mod_stable_out and ir_mod_power_out functions respectively. If no function is set they remain in GPIO mode. These muxes can be overridden by requesting them as GPIOs. Signed-off-by: James Hogan <james.hogan@imgtec.com> Cc: Grant Likely <grant.likely@linaro.org> Cc: Rob Herring <rob.herring@calxeda.com> Cc: Rob Landley <rob@landley.net> Cc: Linus Walleij <linus.walleij@linaro.org> Cc: linux-doc@vger.kernel.org Cc: devicetree-discuss@lists.ozlabs.org Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
d5025f9f53
commit
b58f0273f0
4 changed files with 1166 additions and 0 deletions
|
@ -0,0 +1,130 @@
|
||||||
|
ImgTec TZ1090 PDC pin controller
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible: "img,tz1090-pdc-pinctrl"
|
||||||
|
- reg: Should contain the register physical address and length of the
|
||||||
|
SOC_GPIO_CONTROL registers in the PDC register region.
|
||||||
|
|
||||||
|
Please refer to pinctrl-bindings.txt in this directory for details of the
|
||||||
|
common pinctrl bindings used by client devices, including the meaning of the
|
||||||
|
phrase "pin configuration node".
|
||||||
|
|
||||||
|
TZ1090-PDC's pin configuration nodes act as a container for an abitrary number
|
||||||
|
of subnodes. Each of these subnodes represents some desired configuration for a
|
||||||
|
pin, a group, or a list of pins or groups. This configuration can include the
|
||||||
|
mux function to select on those pin(s)/group(s), and various pin configuration
|
||||||
|
parameters, such as pull-up, drive strength, etc.
|
||||||
|
|
||||||
|
The name of each subnode is not important; all subnodes should be enumerated
|
||||||
|
and processed purely based on their content.
|
||||||
|
|
||||||
|
Each subnode only affects those parameters that are explicitly listed. In
|
||||||
|
other words, a subnode that lists a mux function but no pin configuration
|
||||||
|
parameters implies no information about any pin configuration parameters.
|
||||||
|
Similarly, a pin subnode that describes a pullup parameter implies no
|
||||||
|
information about e.g. the mux function. For this reason, even seemingly boolean
|
||||||
|
values are actually tristates in this binding: unspecified, off, or on.
|
||||||
|
Unspecified is represented as an absent property, and off/on are represented as
|
||||||
|
integer values 0 and 1.
|
||||||
|
|
||||||
|
Required subnode-properties:
|
||||||
|
- tz1090,pins : An array of strings. Each string contains the name of a pin or
|
||||||
|
group. Valid values for these names are listed below.
|
||||||
|
|
||||||
|
Optional subnode-properties:
|
||||||
|
- tz1090,function: A string containing the name of the function to mux to the
|
||||||
|
pin or group. Valid values for function names are listed below, including
|
||||||
|
which pingroups can be muxed to them.
|
||||||
|
- supported generic pinconfig properties (for further details see
|
||||||
|
Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt):
|
||||||
|
- bias-disable
|
||||||
|
- bias-high-impedance
|
||||||
|
- bias-bus-hold
|
||||||
|
- bias-pull-up
|
||||||
|
- bias-pull-down
|
||||||
|
- input-schmitt-enable
|
||||||
|
- input-schmitt-disable
|
||||||
|
- slew-rate: Integer, control slew rate of pins.
|
||||||
|
0: slow (half frequency)
|
||||||
|
1: fast
|
||||||
|
- drive-strength: Integer, control drive strength of pins in mA.
|
||||||
|
2: 2mA
|
||||||
|
4: 4mA
|
||||||
|
8: 8mA
|
||||||
|
12: 12mA
|
||||||
|
- low-power-enable: Flag, power-on-start weak pull-down for invalid power.
|
||||||
|
- low-power-disable: Flag, power-on-start weak pull-down disabled.
|
||||||
|
|
||||||
|
Note that many of these properties are only valid for certain specific pins
|
||||||
|
or groups. See the TZ1090 TRM for complete details regarding which groups
|
||||||
|
support which functionality. The Linux pinctrl driver may also be a useful
|
||||||
|
reference.
|
||||||
|
|
||||||
|
Valid values for pin and group names are:
|
||||||
|
|
||||||
|
pins:
|
||||||
|
|
||||||
|
These all support bias-high-impediance, bias-pull-up, bias-pull-down, and
|
||||||
|
bias-bus-hold (which can also be provided to any of the groups below to set
|
||||||
|
it for all gpio pins in that group).
|
||||||
|
|
||||||
|
gpio0, gpio1, sys_wake0, sys_wake1, sys_wake2, ir_data, ext_power.
|
||||||
|
|
||||||
|
mux groups:
|
||||||
|
|
||||||
|
These all support function.
|
||||||
|
|
||||||
|
gpio0
|
||||||
|
pins: gpio0.
|
||||||
|
function: ir_mod_stable_out.
|
||||||
|
gpio1
|
||||||
|
pins: gpio1.
|
||||||
|
function: ir_mod_power_out.
|
||||||
|
|
||||||
|
drive groups:
|
||||||
|
|
||||||
|
These support input-schmitt-enable, input-schmitt-disable, slew-rate,
|
||||||
|
drive-strength, low-power-enable, and low-power-disable.
|
||||||
|
|
||||||
|
pdc
|
||||||
|
pins: gpio0, gpio1, sys_wake0, sys_wake1, sys_wake2, ir_data,
|
||||||
|
ext_power.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
pinctrl_pdc: pinctrl@02006500 {
|
||||||
|
#gpio-range-cells = <3>;
|
||||||
|
compatible = "img,tz1090-pdc-pinctrl";
|
||||||
|
reg = <0x02006500 0x100>;
|
||||||
|
};
|
||||||
|
|
||||||
|
Example board file extracts:
|
||||||
|
|
||||||
|
&pinctrl_pdc {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&syswake_default>;
|
||||||
|
|
||||||
|
syswake_default: syswakes {
|
||||||
|
syswake_cfg {
|
||||||
|
tz1090,pins = "sys_wake0",
|
||||||
|
"sys_wake1",
|
||||||
|
"sys_wake2";
|
||||||
|
pull-up;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
irmod_default: irmod {
|
||||||
|
gpio0_cfg {
|
||||||
|
tz1090,pins = "gpio0";
|
||||||
|
tz1090,function = "ir_mod_stable_out";
|
||||||
|
};
|
||||||
|
gpio1_cfg {
|
||||||
|
tz1090,pins = "gpio1";
|
||||||
|
tz1090,function = "ir_mod_power_out";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
ir: ir@02006200 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&irmod_default>;
|
||||||
|
};
|
|
@ -218,6 +218,12 @@ config PINCTRL_TZ1090
|
||||||
select PINMUX
|
select PINMUX
|
||||||
select GENERIC_PINCONF
|
select GENERIC_PINCONF
|
||||||
|
|
||||||
|
config PINCTRL_TZ1090_PDC
|
||||||
|
bool "Toumaz Xenif TZ1090 PDC pin control driver"
|
||||||
|
depends on SOC_TZ1090
|
||||||
|
select PINMUX
|
||||||
|
select PINCONF
|
||||||
|
|
||||||
config PINCTRL_U300
|
config PINCTRL_U300
|
||||||
bool "U300 pin controller driver"
|
bool "U300 pin controller driver"
|
||||||
depends on ARCH_U300
|
depends on ARCH_U300
|
||||||
|
|
|
@ -41,6 +41,7 @@ obj-$(CONFIG_PINCTRL_TEGRA20) += pinctrl-tegra20.o
|
||||||
obj-$(CONFIG_PINCTRL_TEGRA30) += pinctrl-tegra30.o
|
obj-$(CONFIG_PINCTRL_TEGRA30) += pinctrl-tegra30.o
|
||||||
obj-$(CONFIG_PINCTRL_TEGRA114) += pinctrl-tegra114.o
|
obj-$(CONFIG_PINCTRL_TEGRA114) += pinctrl-tegra114.o
|
||||||
obj-$(CONFIG_PINCTRL_TZ1090) += pinctrl-tz1090.o
|
obj-$(CONFIG_PINCTRL_TZ1090) += pinctrl-tz1090.o
|
||||||
|
obj-$(CONFIG_PINCTRL_TZ1090_PDC) += pinctrl-tz1090-pdc.o
|
||||||
obj-$(CONFIG_PINCTRL_U300) += pinctrl-u300.o
|
obj-$(CONFIG_PINCTRL_U300) += pinctrl-u300.o
|
||||||
obj-$(CONFIG_PINCTRL_COH901) += pinctrl-coh901.o
|
obj-$(CONFIG_PINCTRL_COH901) += pinctrl-coh901.o
|
||||||
obj-$(CONFIG_PINCTRL_SAMSUNG) += pinctrl-samsung.o
|
obj-$(CONFIG_PINCTRL_SAMSUNG) += pinctrl-samsung.o
|
||||||
|
|
1029
drivers/pinctrl/pinctrl-tz1090-pdc.c
Normal file
1029
drivers/pinctrl/pinctrl-tz1090-pdc.c
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue