123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- * Freescale MXS Pin Controller
- The pins controlled by mxs pin controller are organized in banks, each bank
- has 32 pins. Each pin has 4 multiplexing functions, and generally, the 4th
- function is GPIO. The configuration on the pins includes drive strength,
- voltage and pull-up.
- Required properties:
- - compatible: "fsl,imx23-pinctrl" or "fsl,imx28-pinctrl"
- - reg: Should contain the register physical address and length for the
- pin controller.
- Please refer to pinctrl-bindings.txt in this directory for details of the
- common pinctrl bindings used by client devices.
- The node of mxs pin controller acts as a container for an arbitrary number of
- subnodes. Each of these subnodes represents some desired configuration for
- a group of pins, and only affects those parameters that are explicitly listed.
- In other words, a subnode that describes a drive strength parameter implies no
- information about pull-up. 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.
- Those subnodes under mxs pin controller node will fall into two categories.
- One is to set up a group of pins for a function, both mux selection and pin
- configurations, and it's called group node in the binding document. The other
- one is to adjust the pin configuration for some particular pins that need a
- different configuration than what is defined in group node. The binding
- document calls this type of node config node.
- On mxs, there is no hardware pin group. The pin group in this binding only
- means a group of pins put together for particular peripheral to work in
- particular function, like SSP0 functioning as mmc0-8bit. That said, the
- group node should include all the pins needed for one function rather than
- having these pins defined in several group nodes. It also means each of
- "pinctrl-*" phandle in client device node should only have one group node
- pointed in there, while the phandle can have multiple config node referenced
- there to adjust configurations for some pins in the group.
- Required subnode-properties:
- - fsl,pinmux-ids: An integer array. Each integer in the array specify a pin
- with given mux function, with bank, pin and mux packed as below.
- [15..12] : bank number
- [11..4] : pin number
- [3..0] : mux selection
- This integer with mux selection packed is used as an entity by both group
- and config nodes to identify a pin. The mux selection in the integer takes
- effects only on group node, and will get ignored by driver with config node,
- since config node is only meant to set up pin configurations.
- Valid values for these integers are listed below.
- - reg: Should be the index of the group nodes for same function. This property
- is required only for group nodes, and should not be present in any config
- nodes.
- Optional subnode-properties:
- - fsl,drive-strength: Integer.
- 0: MXS_DRIVE_4mA
- 1: MXS_DRIVE_8mA
- 2: MXS_DRIVE_12mA
- 3: MXS_DRIVE_16mA
- - fsl,voltage: Integer.
- 0: MXS_VOLTAGE_LOW - 1.8 V
- 1: MXS_VOLTAGE_HIGH - 3.3 V
- - fsl,pull-up: Integer.
- 0: MXS_PULL_DISABLE - Disable the internal pull-up
- 1: MXS_PULL_ENABLE - Enable the internal pull-up
- Note that when enabling the pull-up, the internal pad keeper gets disabled.
- Also, some pins doesn't have a pull up, in that case, setting the fsl,pull-up
- will only disable the internal pad keeper.
- Examples:
- pinctrl@80018000 {
- #address-cells = <1>;
- #size-cells = <0>;
- compatible = "fsl,imx28-pinctrl";
- reg = <0x80018000 2000>;
- mmc0_8bit_pins_a: mmc0-8bit@0 {
- reg = <0>;
- fsl,pinmux-ids = <
- MX28_PAD_SSP0_DATA0__SSP0_D0
- MX28_PAD_SSP0_DATA1__SSP0_D1
- MX28_PAD_SSP0_DATA2__SSP0_D2
- MX28_PAD_SSP0_DATA3__SSP0_D3
- MX28_PAD_SSP0_DATA4__SSP0_D4
- MX28_PAD_SSP0_DATA5__SSP0_D5
- MX28_PAD_SSP0_DATA6__SSP0_D6
- MX28_PAD_SSP0_DATA7__SSP0_D7
- MX28_PAD_SSP0_CMD__SSP0_CMD
- MX28_PAD_SSP0_DETECT__SSP0_CARD_DETECT
- MX28_PAD_SSP0_SCK__SSP0_SCK
- >;
- fsl,drive-strength = <MXS_DRIVE_4mA>;
- fsl,voltage = <MXS_VOLTAGE_HIGH>;
- fsl,pull-up = <MXS_PULL_ENABLE>;
- };
- mmc_cd_cfg: mmc-cd-cfg {
- fsl,pinmux-ids = <MX28_PAD_SSP0_DETECT__SSP0_CARD_DETECT>;
- fsl,pull-up = <MXS_PULL_DISABLE>;
- };
- mmc_sck_cfg: mmc-sck-cfg {
- fsl,pinmux-ids = <MX28_PAD_SSP0_SCK__SSP0_SCK>;
- fsl,drive-strength = <MXS_DRIVE_12mA>;
- fsl,pull-up = <MXS_PULL_DISABLE>;
- };
- };
- In this example, group node mmc0-8bit defines a group of pins for mxs SSP0
- to function as a 8-bit mmc device, with 8mA, 3.3V and pull-up configurations
- applied on all these pins. And config nodes mmc-cd-cfg and mmc-sck-cfg are
- adjusting the configuration for pins card-detection and clock from what group
- node mmc0-8bit defines. Only the configuration properties to be adjusted need
- to be listed in the config nodes.
- Valid values for i.MX28/i.MX23 pinmux-id are defined in
- arch/arm/boot/dts/imx28-pinfunc.h and arch/arm/boot/dts/imx23-pinfunc.h.
- The definitions for the padconfig properties can be found in
- arch/arm/boot/dts/mxs-pinfunc.h.
|