summaryrefslogtreecommitdiff
path: root/Documentation/devicetree/bindings/pinctrl/img,tz1090-pinctrl.txt
blob: 509faa87ad0e92ed3d40dbd7e2b238acfa627d3c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
ImgTec TZ1090 pin controller

Required properties:
- compatible: "img,tz1090-pinctrl"
- reg: Should contain the register physical address and length of the pad
  configuration registers (CR_PADS_* and CR_IF_CTL0).

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's pin configuration nodes act as a container for an arbitrary 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
  - drive-strength: Integer, control drive strength of pins in mA.
      2: 2mA
      4: 4mA
      8: 8mA
      12: 12mA


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:

  gpio 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 pins in that group).

    They also all support the some form of muxing. Any pins which are contained
    in one of the mux groups (see below) can be muxed only to the functions
    supported by the mux group. All other pins can be muxed to the "perip"
    function which enables them with their intended peripheral.

    Different pins in the same mux group cannot be muxed to different functions,
    however it is possible to mux only a subset of the pins in a mux group to a
    particular function and leave the remaining pins unmuxed. This is useful if
    the board connects certain pins in a group to other devices to be controlled
    by GPIO, and you don't want the usual peripheral to have any control of the
    pin.

    ant_sel0, ant_sel1, gain0, gain1, gain2, gain3, gain4, gain5, gain6, gain7,
    i2s_bclk_out, i2s_din, i2s_dout0, i2s_dout1, i2s_dout2, i2s_lrclk_out,
    i2s_mclk, pa_on, pdm_a, pdm_b, pdm_c, pdm_d, pll_on, rx_hp, rx_on,
    scb0_sclk, scb0_sdat, scb1_sclk, scb1_sdat, scb2_sclk, scb2_sdat, sdh_cd,
    sdh_clk_in, sdh_wp, sdio_clk, sdio_cmd, sdio_d0, sdio_d1, sdio_d2, sdio_d3,
    spi0_cs0, spi0_cs1, spi0_cs2, spi0_din, spi0_dout, spi0_mclk, spi1_cs0,
    spi1_cs1, spi1_cs2, spi1_din, spi1_dout, spi1_mclk, tft_blank_ls, tft_blue0,
    tft_blue1, tft_blue2, tft_blue3, tft_blue4, tft_blue5, tft_blue6, tft_blue7,
    tft_green0, tft_green1, tft_green2, tft_green3, tft_green4, tft_green5,
    tft_green6, tft_green7, tft_hsync_nr, tft_panelclk, tft_pwrsave, tft_red0,
    tft_red1, tft_red2, tft_red3, tft_red4, tft_red5, tft_red6, tft_red7,
    tft_vd12acb, tft_vdden_gd, tft_vsync_ns, tx_on, uart0_cts, uart0_rts,
    uart0_rxd, uart0_txd, uart1_rxd, uart1_txd.

        bias-high-impediance:  supported.
        bias-pull-up:          supported.
        bias-pull-down:        supported.
        bias-bus-hold:         supported.
        function:              perip or those supported by pin's mux group.

  other pins:

    These other pins are part of various pin groups below, but can't be
    controlled as GPIOs. They do however 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 pins in that group).

    clk_out0, clk_out1, tck, tdi, tdo, tms, trst.

        bias-high-impediance:  supported.
        bias-pull-up:          supported.
        bias-pull-down:        supported.
        bias-bus-hold:         supported.

  mux groups:

    These all support function, and some support drive configs.

    afe
        pins:                  tx_on, rx_on, pll_on, pa_on, rx_hp, ant_sel0,
                               ant_sel1, gain0, gain1, gain2, gain3, gain4,
                               gain5, gain6, gain7.
        function:              afe, ts_out_0.
        input-schmitt-enable:  supported.
        input-schmitt-disable: supported.
        drive-strength:        supported.
    pdm_d
        pins:                  pdm_d.
        function:              pdm_dac, usb_vbus.
    sdh
        pins:                  sdh_cd, sdh_wp, sdh_clk_in.
        function:              sdh, sdio.
    sdio
        pins:                  sdio_clk, sdio_cmd, sdio_d0, sdio_d1, sdio_d2,
                               sdio_d3.
        function:              sdio, sdh.
    spi1_cs2
        pins:                  spi1_cs2.
        function:              spi1_cs2, usb_vbus.
    tft
        pins:                  tft_red0, tft_red1, tft_red2, tft_red3,
                               tft_red4, tft_red5, tft_red6, tft_red7,
                               tft_green0, tft_green1, tft_green2, tft_green3,
                               tft_green4, tft_green5, tft_green6, tft_green7,
                               tft_blue0, tft_blue1, tft_blue2, tft_blue3,
                               tft_blue4, tft_blue5, tft_blue6, tft_blue7,
                               tft_vdden_gd, tft_panelclk, tft_blank_ls,
                               tft_vsync_ns, tft_hsync_nr, tft_vd12acb,
                               tft_pwrsave.
        function:              tft, ext_dac, not_iqadc_stb, iqdac_stb, ts_out_1,
                               lcd_trace, phy_ringosc.
        input-schmitt-enable:  supported.
        input-schmitt-disable: supported.
        drive-strength:        supported.

  drive groups:

    These all support input-schmitt-enable, input-schmitt-disable,
    and drive-strength.

    jtag
        pins:   tck, trst, tdi, tdo, tms.
    scb1
        pins:   scb1_sdat, scb1_sclk.
    scb2
        pins:   scb2_sdat, scb2_sclk.
    spi0
        pins:   spi0_mclk, spi0_cs0, spi0_cs1, spi0_cs2, spi0_dout, spi0_din.
    spi1
        pins:   spi1_mclk, spi1_cs0, spi1_cs1, spi1_cs2, spi1_dout, spi1_din.
    uart
        pins:   uart0_txd, uart0_rxd, uart0_rts, uart0_cts,
                uart1_txd, uart1_rxd.
    drive_i2s
        pins:   clk_out1, i2s_din, i2s_dout0, i2s_dout1, i2s_dout2,
                i2s_lrclk_out, i2s_bclk_out, i2s_mclk.
    drive_pdm
        pins:   clk_out0, pdm_b, pdm_a.
    drive_scb0
        pins:   scb0_sclk, scb0_sdat, pdm_d, pdm_c.
    drive_sdio
        pins:   sdio_clk, sdio_cmd, sdio_d0, sdio_d1, sdio_d2, sdio_d3,
                sdh_wp, sdh_cd, sdh_clk_in.

  convenience groups:

    These are just convenient groupings of pins and don't support any drive
    configs.

    uart0
        pins:   uart0_cts, uart0_rts, uart0_rxd, uart0_txd.
    uart1
        pins:   uart1_rxd, uart1_txd.
    scb0
        pins:   scb0_sclk, scb0_sdat.
    i2s
        pins:   i2s_bclk_out, i2s_din, i2s_dout0, i2s_dout1, i2s_dout2,
                i2s_lrclk_out, i2s_mclk.

Example:

	pinctrl: pinctrl@02005800 {
		#gpio-range-cells = <3>;
		compatible = "img,tz1090-pinctrl";
		reg = <0x02005800 0xe4>;
	};

Example board file extract:

	&pinctrl {
		uart0_default: uart0 {
			uart0_cfg {
				tz1090,pins =	"uart0_rxd",
						"uart0_txd";
				tz1090,function = "perip";
			};
		};
		tft_default: tft {
			tft_cfg {
				tz1090,pins =	"tft";
				tz1090,function = "tft";
			};
		};
	};

	uart@02004b00 {
		pinctrl-names = "default";
		pinctrl-0 = <&uart0_default>;
	};