aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-06-24 22:21:02 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-06-24 22:21:02 -0400
commit93a4b1b9465d92e8be031b57166afa3d5611e142 (patch)
tree0ac95e35f24a754e01bdc40c56d71068eed49e4c
parentd59b92f93df2d545d87d2341eb0705cc926ea22a (diff)
parentdaecdc66968f122fe53038ded8cb7abe93e0aa8c (diff)
Merge tag 'pinctrl-v4.2-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl
Pull pin control updates from Linus Walleij: "Here is the bulk of pin control changes for the v4.2 series: Quite a lot of new SoC subdrivers and two new main drivers this time, apart from that business as usual. Details: Core functionality: - Enable exclusive pin ownership: it is possible to flag a pin controller so that GPIO and other functions cannot use a single pin simultaneously. New drivers: - NXP LPC18xx System Control Unit pin controller - Imagination Pistachio SoC pin controller New subdrivers: - Freescale i.MX7d SoC - Intel Sunrisepoint-H PCH - Renesas PFC R8A7793 - Renesas PFC R8A7794 - Mediatek MT6397, MT8127 - SiRF Atlas 7 - Allwinner A33 - Qualcomm MSM8660 - Marvell Armada 395 - Rockchip RK3368 Cleanups: - A big cleanup of the Marvell MVEBU driver rectifying it to correspond to reality - Drop platform device probing from the SH PFC driver, we are now a DT only shop for SuperH - Drop obsolte multi-platform check for SH PFC - Various janitorial: constification, grammar etc Improvements: - The AT91 GPIO portions now supports the set_multiple() feature - Split out SPI pins on the Xilinx Zynq - Support DTs without specific function nodes in the i.MX driver" * tag 'pinctrl-v4.2-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl: (99 commits) pinctrl: rockchip: add support for the rk3368 pinctrl: rockchip: generalize perpin driver-strength setting pinctrl: sh-pfc: r8a7794: add SDHI pin groups pinctrl: sh-pfc: r8a7794: add MMCIF pin groups pinctrl: sh-pfc: add R8A7794 PFC support pinctrl: make pinctrl_register() return proper error code pinctrl: mvebu: armada-39x: add support for Armada 395 variant pinctrl: mvebu: armada-39x: add missing SATA functions pinctrl: mvebu: armada-39x: add missing PCIe functions pinctrl: mvebu: armada-38x: add ptp functions pinctrl: mvebu: armada-38x: add ua1 functions pinctrl: mvebu: armada-38x: add nand functions pinctrl: mvebu: armada-38x: add sata functions pinctrl: mvebu: armada-xp: add dram functions pinctrl: mvebu: armada-xp: add nand rb function pinctrl: mvebu: armada-xp: add spi1 function pinctrl: mvebu: armada-39x: normalize ref clock naming pinctrl: mvebu: armada-xp: rename spi to spi0 pinctrl: mvebu: armada-370: align spi1 clock pin naming pinctrl: mvebu: armada-370: align VDD cpu-pd pin naming with datasheet ...
-rw-r--r--Documentation/devicetree/bindings/gpio/gpio-atlas7.txt50
-rw-r--r--Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt2
-rw-r--r--Documentation/devicetree/bindings/pinctrl/img,pistachio-pinctrl.txt217
-rw-r--r--Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt18
-rw-r--r--Documentation/devicetree/bindings/pinctrl/marvell,armada-375-pinctrl.txt34
-rw-r--r--Documentation/devicetree/bindings/pinctrl/marvell,armada-38x-pinctrl.txt66
-rw-r--r--Documentation/devicetree/bindings/pinctrl/marvell,armada-39x-pinctrl.txt84
-rw-r--r--Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt80
-rw-r--r--Documentation/devicetree/bindings/pinctrl/nxp,lpc1850-scu.txt57
-rw-r--r--Documentation/devicetree/bindings/pinctrl/pinctrl-atlas7.txt109
-rw-r--r--Documentation/devicetree/bindings/pinctrl/pinctrl-mt65xx.txt9
-rw-r--r--Documentation/devicetree/bindings/pinctrl/qcom,msm8660-pinctrl.txt90
-rw-r--r--Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt4
-rw-r--r--Documentation/devicetree/bindings/pinctrl/rockchip,pinctrl.txt5
-rw-r--r--Documentation/devicetree/bindings/pinctrl/xlnx,zynq-pinctrl.txt7
-rw-r--r--Documentation/pinctrl.txt11
-rw-r--r--drivers/gpio/gpio-bcm-kona.c2
-rw-r--r--drivers/gpio/gpio-em.c2
-rw-r--r--drivers/gpio/gpio-grgpio.c2
-rw-r--r--drivers/gpio/gpio-mpc8xxx.c2
-rw-r--r--drivers/gpio/gpio-sa1100.c2
-rw-r--r--drivers/gpio/gpio-sodaville.c2
-rw-r--r--drivers/pinctrl/Kconfig19
-rw-r--r--drivers/pinctrl/Makefile2
-rw-r--r--drivers/pinctrl/bcm/pinctrl-bcm281xx.c4
-rw-r--r--drivers/pinctrl/bcm/pinctrl-bcm2835.c4
-rw-r--r--drivers/pinctrl/bcm/pinctrl-cygnus-gpio.c8
-rw-r--r--drivers/pinctrl/bcm/pinctrl-cygnus-mux.c4
-rw-r--r--drivers/pinctrl/berlin/berlin-bg2.c18
-rw-r--r--drivers/pinctrl/berlin/berlin-bg2cd.c8
-rw-r--r--drivers/pinctrl/berlin/berlin-bg2q.c16
-rw-r--r--drivers/pinctrl/berlin/berlin.c4
-rw-r--r--drivers/pinctrl/core.c21
-rw-r--r--drivers/pinctrl/freescale/Kconfig7
-rw-r--r--drivers/pinctrl/freescale/Makefile1
-rw-r--r--drivers/pinctrl/freescale/pinctrl-imx.c59
-rw-r--r--drivers/pinctrl/freescale/pinctrl-imx1-core.c4
-rw-r--r--drivers/pinctrl/freescale/pinctrl-imx7d.c384
-rw-r--r--drivers/pinctrl/freescale/pinctrl-mxs.c4
-rw-r--r--drivers/pinctrl/intel/pinctrl-cherryview.c4
-rw-r--r--drivers/pinctrl/intel/pinctrl-intel.c4
-rw-r--r--drivers/pinctrl/intel/pinctrl-sunrisepoint.c263
-rw-r--r--drivers/pinctrl/mediatek/Kconfig13
-rw-r--r--drivers/pinctrl/mediatek/Makefile2
-rw-r--r--drivers/pinctrl/mediatek/pinctrl-mt6397.c77
-rw-r--r--drivers/pinctrl/mediatek/pinctrl-mt8127.c358
-rw-r--r--drivers/pinctrl/mediatek/pinctrl-mt8135.c13
-rw-r--r--drivers/pinctrl/mediatek/pinctrl-mt8173.c377
-rw-r--r--drivers/pinctrl/mediatek/pinctrl-mtk-common.c161
-rw-r--r--drivers/pinctrl/mediatek/pinctrl-mtk-common.h75
-rw-r--r--drivers/pinctrl/mediatek/pinctrl-mtk-mt6397.h424
-rw-r--r--drivers/pinctrl/mediatek/pinctrl-mtk-mt8127.h1318
-rw-r--r--drivers/pinctrl/meson/pinctrl-meson.c4
-rw-r--r--drivers/pinctrl/mvebu/pinctrl-armada-370.c22
-rw-r--r--drivers/pinctrl/mvebu/pinctrl-armada-375.c50
-rw-r--r--drivers/pinctrl/mvebu/pinctrl-armada-38x.c120
-rw-r--r--drivers/pinctrl/mvebu/pinctrl-armada-39x.c131
-rw-r--r--drivers/pinctrl/mvebu/pinctrl-armada-xp.c98
-rw-r--r--drivers/pinctrl/mvebu/pinctrl-mvebu.c4
-rw-r--r--drivers/pinctrl/nomadik/pinctrl-ab8505.c2
-rw-r--r--drivers/pinctrl/nomadik/pinctrl-abx500.c5
-rw-r--r--drivers/pinctrl/nomadik/pinctrl-nomadik.c66
-rw-r--r--drivers/pinctrl/pinctrl-adi2.c5
-rw-r--r--drivers/pinctrl/pinctrl-amd.c5
-rw-r--r--drivers/pinctrl/pinctrl-as3722.c4
-rw-r--r--drivers/pinctrl/pinctrl-at91.c20
-rw-r--r--drivers/pinctrl/pinctrl-lantiq.c4
-rw-r--r--drivers/pinctrl/pinctrl-lpc18xx.c1220
-rw-r--r--drivers/pinctrl/pinctrl-palmas.c4
-rw-r--r--drivers/pinctrl/pinctrl-pistachio.c1504
-rw-r--r--drivers/pinctrl/pinctrl-rockchip.c131
-rw-r--r--drivers/pinctrl/pinctrl-single.c6
-rw-r--r--drivers/pinctrl/pinctrl-st.c4
-rw-r--r--drivers/pinctrl/pinctrl-tb10x.c4
-rw-r--r--drivers/pinctrl/pinctrl-tegra-xusb.c27
-rw-r--r--drivers/pinctrl/pinctrl-tegra.c4
-rw-r--r--drivers/pinctrl/pinctrl-tz1090-pdc.c4
-rw-r--r--drivers/pinctrl/pinctrl-tz1090.c4
-rw-r--r--drivers/pinctrl/pinctrl-u300.c4
-rw-r--r--drivers/pinctrl/pinctrl-zynq.c91
-rw-r--r--drivers/pinctrl/pinmux.c59
-rw-r--r--drivers/pinctrl/qcom/Kconfig8
-rw-r--r--drivers/pinctrl/qcom/Makefile1
-rw-r--r--drivers/pinctrl/qcom/pinctrl-msm.c4
-rw-r--r--drivers/pinctrl/qcom/pinctrl-msm8660.c984
-rw-r--r--drivers/pinctrl/qcom/pinctrl-spmi-gpio.c4
-rw-r--r--drivers/pinctrl/qcom/pinctrl-spmi-mpp.c4
-rw-r--r--drivers/pinctrl/samsung/pinctrl-exynos5440.c4
-rw-r--r--drivers/pinctrl/samsung/pinctrl-samsung.c6
-rw-r--r--drivers/pinctrl/sh-pfc/Kconfig10
-rw-r--r--drivers/pinctrl/sh-pfc/Makefile2
-rw-r--r--drivers/pinctrl/sh-pfc/core.c15
-rw-r--r--drivers/pinctrl/sh-pfc/core.h2
-rw-r--r--drivers/pinctrl/sh-pfc/pfc-r8a73a4.c4
-rw-r--r--drivers/pinctrl/sh-pfc/pfc-r8a7740.c2
-rw-r--r--drivers/pinctrl/sh-pfc/pfc-r8a7790.c101
-rw-r--r--drivers/pinctrl/sh-pfc/pfc-r8a7791.c186
-rw-r--r--drivers/pinctrl/sh-pfc/pfc-r8a7794.c4207
-rw-r--r--drivers/pinctrl/sh-pfc/pinctrl.c4
-rw-r--r--drivers/pinctrl/sirf/Makefile1
-rw-r--r--drivers/pinctrl/sirf/pinctrl-atlas7.c4637
-rw-r--r--drivers/pinctrl/sirf/pinctrl-sirf.c4
-rw-r--r--drivers/pinctrl/spear/pinctrl-spear.c4
-rw-r--r--drivers/pinctrl/sunxi/Kconfig4
-rw-r--r--drivers/pinctrl/sunxi/Makefile1
-rw-r--r--drivers/pinctrl/sunxi/pinctrl-sun6i-a31s.c1
-rw-r--r--drivers/pinctrl/sunxi/pinctrl-sun8i-a33.c513
-rw-r--r--drivers/pinctrl/sunxi/pinctrl-sunxi.c4
-rw-r--r--drivers/pinctrl/vt8500/pinctrl-wmt.c4
-rw-r--r--include/dt-bindings/pinctrl/mt6397-pinfunc.h256
-rw-r--r--include/linux/pinctrl/consumer.h2
-rw-r--r--include/linux/pinctrl/pinctrl.h2
-rw-r--r--include/linux/pinctrl/pinmux.h6
113 files changed, 18261 insertions, 843 deletions
diff --git a/Documentation/devicetree/bindings/gpio/gpio-atlas7.txt b/Documentation/devicetree/bindings/gpio/gpio-atlas7.txt
new file mode 100644
index 000000000000..d7e123fc90b5
--- /dev/null
+++ b/Documentation/devicetree/bindings/gpio/gpio-atlas7.txt
@@ -0,0 +1,50 @@
1CSR SiRFatlas7 GPIO controller bindings
2
3Required properties:
4- compatible : "sirf,atlas7-gpio"
5- reg : Address range of the pinctrl registers
6- interrupts : Interrupts used by every GPIO group
7- gpio-banks : How many gpio banks on this controller
8- gpio-controller : Indicates this device is a GPIO controller
9- interrupt-controller : Marks the device node as an interrupt controller
10
11The GPIO controller also acts as an interrupt controller. It uses the default
12two cells specifier as described in Documentation/devicetree/bindings/
13interrupt-controller/interrupts.txt.
14
15Example:
16
17 gpio_0: gpio_mediam@17040000 {
18 compatible = "sirf,atlas7-gpio";
19 reg = <0x17040000 0x1000>;
20 interrupts = <0 13 0>, <0 14 0>;
21
22 #gpio-cells = <2>;
23 #interrupt-cells = <2>;
24
25 gpio-controller;
26 interrupt-controller;
27
28 gpio-banks = <2>;
29 gpio-ranges = <&pinctrl 0 0 0>,
30 <&pinctrl 32 0 0>;
31 gpio-ranges-group-names = "lvds_gpio_grp",
32 "uart_nand_gpio_grp";
33 };
34
35 leds {
36 compatible = "gpio-leds";
37
38 led1 {
39 gpios = <&gpio_1 15 0>;
40 ...
41 };
42
43 led2 {
44 gpios = <&gpio_2 34 0>;
45 ...
46 };
47 };
48
49Please refer to gpio.txt in this directory for details of the common
50gpio properties used by devices.
diff --git a/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt
index fdd8046e650a..9462ab7ddd1f 100644
--- a/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt
+++ b/Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt
@@ -16,6 +16,8 @@ Required properties:
16 "allwinner,sun7i-a20-pinctrl" 16 "allwinner,sun7i-a20-pinctrl"
17 "allwinner,sun8i-a23-pinctrl" 17 "allwinner,sun8i-a23-pinctrl"
18 "allwinner,sun8i-a23-r-pinctrl" 18 "allwinner,sun8i-a23-r-pinctrl"
19 "allwinner,sun8i-a33-pinctrl"
20
19- reg: Should contain the register physical address and length for the 21- reg: Should contain the register physical address and length for the
20 pin controller. 22 pin controller.
21 23
diff --git a/Documentation/devicetree/bindings/pinctrl/img,pistachio-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/img,pistachio-pinctrl.txt
new file mode 100644
index 000000000000..08a4a32c8eb0
--- /dev/null
+++ b/Documentation/devicetree/bindings/pinctrl/img,pistachio-pinctrl.txt
@@ -0,0 +1,217 @@
1Imagination Technologies Pistachio SoC pin controllers
2======================================================
3
4The pin controllers on Pistachio are a combined GPIO controller, (GPIO)
5interrupt controller, and pinmux + pinconf device. The system ("east") pin
6controller on Pistachio has 99 pins, 90 of which are MFIOs which can be
7configured as GPIOs. The 90 GPIOs are divided into 6 banks of up to 16 GPIOs
8each. The GPIO banks are represented as sub-nodes of the pad controller node.
9
10Please refer to pinctrl-bindings.txt, ../gpio/gpio.txt, and
11../interrupt-controller/interrupts.txt for generic information regarding
12pin controller, GPIO, and interrupt bindings.
13
14Required properties for pin controller node:
15--------------------------------------------
16 - compatible: "img,pistachio-system-pinctrl".
17 - reg: Address range of the pinctrl registers.
18
19Required properties for GPIO bank sub-nodes:
20--------------------------------------------
21 - interrupts: Interrupt line for the GPIO bank.
22 - gpio-controller: Indicates the device is a GPIO controller.
23 - #gpio-cells: Must be two. The first cell is the GPIO pin number and the
24 second cell indicates the polarity. See <dt-bindings/gpio/gpio.h> for
25 a list of possible values.
26 - interrupt-controller: Indicates the device is an interrupt controller.
27 - #interrupt-cells: Must be two. The first cell is the GPIO pin number and
28 the second cell encodes the interrupt flags. See
29 <dt-bindings/interrupt-controller/irq.h> for a list of valid flags.
30
31Note that the N GPIO bank sub-nodes *must* be named gpio0, gpio1, ... gpioN-1.
32
33Required properties for pin configuration sub-nodes:
34----------------------------------------------------
35 - pins: List of pins to which the configuration applies. See below for a
36 list of possible pins.
37
38Optional properties for pin configuration sub-nodes:
39----------------------------------------------------
40 - function: Mux function for the specified pins. This is not applicable for
41 non-MFIO pins. See below for a list of valid functions for each pin.
42 - bias-high-impedance: Enable high-impedance mode.
43 - bias-pull-up: Enable weak pull-up.
44 - bias-pull-down: Enable weak pull-down.
45 - bias-bus-hold: Enable bus-keeper mode.
46 - drive-strength: Drive strength in mA. Supported values: 2, 4, 8, 12.
47 - input-schmitt-enable: Enable Schmitt trigger.
48 - input-schmitt-disable: Disable Schmitt trigger.
49 - slew-rate: Slew rate control. 0 for slow, 1 for fast.
50
51Pin Functions
52--- ---------
53mfio0 spim1
54mfio1 spim1, spim0, uart1
55mfio2 spim1, spim0, uart1
56mfio3 spim1
57mfio4 spim1
58mfio5 spim1
59mfio6 spim1
60mfio7 spim1
61mfio8 spim0
62mfio9 spim0
63mfio10 spim0
64mfio11 spis
65mfio12 spis
66mfio13 spis
67mfio14 spis
68mfio15 sdhost, mips_trace_clk, mips_trace_data
69mfio16 sdhost, mips_trace_dint, mips_trace_data
70mfio17 sdhost, mips_trace_trigout, mips_trace_data
71mfio18 sdhost, mips_trace_trigin, mips_trace_data
72mfio19 sdhost, mips_trace_dm, mips_trace_data
73mfio20 sdhost, mips_trace_probe_n, mips_trace_data
74mfio21 sdhost, mips_trace_data
75mfio22 sdhost, mips_trace_data
76mfio23 sdhost
77mfio24 sdhost
78mfio25 sdhost
79mfio26 sdhost
80mfio27 sdhost
81mfio28 i2c0, spim0
82mfio29 i2c0, spim0
83mfio30 i2c1, spim0
84mfio31 i2c1, spim1
85mfio32 i2c2
86mfio33 i2c2
87mfio34 i2c3
88mfio35 i2c3
89mfio36 i2s_out, audio_clk_in
90mfio37 i2s_out, debug_raw_cca_ind
91mfio38 i2s_out, debug_ed_sec20_cca_ind
92mfio39 i2s_out, debug_ed_sec40_cca_ind
93mfio40 i2s_out, debug_agc_done_0
94mfio41 i2s_out, debug_agc_done_1
95mfio42 i2s_out, debug_ed_cca_ind
96mfio43 i2s_out, debug_s2l_done
97mfio44 i2s_out
98mfio45 i2s_dac_clk, audio_sync
99mfio46 audio_trigger
100mfio47 i2s_in
101mfio48 i2s_in
102mfio49 i2s_in
103mfio50 i2s_in
104mfio51 i2s_in
105mfio52 i2s_in
106mfio53 i2s_in
107mfio54 i2s_in, spdif_in
108mfio55 uart0, spim0, spim1
109mfio56 uart0, spim0, spim1
110mfio57 uart0, spim0, spim1
111mfio58 uart0, spim1
112mfio59 uart1
113mfio60 uart1
114mfio61 spdif_out
115mfio62 spdif_in
116mfio63 eth, mips_trace_clk, mips_trace_data
117mfio64 eth, mips_trace_dint, mips_trace_data
118mfio65 eth, mips_trace_trigout, mips_trace_data
119mfio66 eth, mips_trace_trigin, mips_trace_data
120mfio67 eth, mips_trace_dm, mips_trace_data
121mfio68 eth, mips_trace_probe_n, mips_trace_data
122mfio69 eth, mips_trace_data
123mfio70 eth, mips_trace_data
124mfio71 eth
125mfio72 ir
126mfio73 pwmpdm, mips_trace_clk, sram_debug
127mfio74 pwmpdm, mips_trace_dint, sram_debug
128mfio75 pwmpdm, mips_trace_trigout, rom_debug
129mfio76 pwmpdm, mips_trace_trigin, rom_debug
130mfio77 mdc_debug, mips_trace_dm, rpu_debug
131mfio78 mdc_debug, mips_trace_probe_n, rpu_debug
132mfio79 ddr_debug, mips_trace_data, mips_debug
133mfio80 ddr_debug, mips_trace_data, mips_debug
134mfio81 dreq0, mips_trace_data, eth_debug
135mfio82 dreq1, mips_trace_data, eth_debug
136mfio83 mips_pll_lock, mips_trace_data, usb_debug
137mfio84 sys_pll_lock, mips_trace_data, usb_debug
138mfio85 wifi_pll_lock, mips_trace_data, sdhost_debug
139mfio86 bt_pll_lock, mips_trace_data, sdhost_debug
140mfio87 rpu_v_pll_lock, dreq2, socif_debug
141mfio88 rpu_l_pll_lock, dreq3, socif_debug
142mfio89 audio_pll_lock, dreq4, dreq5
143tck
144trstn
145tdi
146tms
147tdo
148jtag_comply
149safe_mode
150por_disable
151resetn
152
153Example:
154--------
155pinctrl@18101C00 {
156 compatible = "img,pistachio-system-pinctrl";
157 reg = <0x18101C00 0x400>;
158
159 gpio0: gpio0 {
160 interrupts = <GIC_SHARED 71 IRQ_TYPE_LEVEL_HIGH>;
161
162 gpio-controller;
163 #gpio-cells = <2>;
164
165 interrupt-controller;
166 #interrupt-cells = <2>;
167 };
168
169 ...
170
171 gpio5: gpio5 {
172 interrupts = <GIC_SHARED 76 IRQ_TYPE_LEVEL_HIGH>;
173
174 gpio-controller;
175 #gpio-cells = <2>;
176
177 interrupt-controller;
178 #interrupt-cells = <2>;
179 };
180
181 ...
182
183 uart0_xfer: uart0-xfer {
184 uart0-rxd {
185 pins = "mfio55";
186 function = "uart0";
187 };
188 uart0-txd {
189 pins = "mfio56";
190 function = "uart0";
191 };
192 };
193
194 uart0_rts_cts: uart0-rts-cts {
195 uart0-rts {
196 pins = "mfio57";
197 function = "uart0";
198 };
199 uart0-cts {
200 pins = "mfio58";
201 function = "uart0";
202 };
203 };
204};
205
206uart@... {
207 ...
208 pinctrl-names = "default";
209 pinctrl-0 = <&uart0_xfer>, <&uart0_rts_cts>;
210 ...
211};
212
213usb_vbus: fixed-regulator {
214 ...
215 gpio = <&gpio5 6 GPIO_ACTIVE_HIGH>;
216 ...
217};
diff --git a/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt
index adda2a8d1d52..add7c38ec7d8 100644
--- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt
+++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-370-pinctrl.txt
@@ -17,10 +17,10 @@ mpp0 0 gpio, uart0(rxd)
17mpp1 1 gpo, uart0(txd) 17mpp1 1 gpo, uart0(txd)
18mpp2 2 gpio, i2c0(sck), uart0(txd) 18mpp2 2 gpio, i2c0(sck), uart0(txd)
19mpp3 3 gpio, i2c0(sda), uart0(rxd) 19mpp3 3 gpio, i2c0(sda), uart0(rxd)
20mpp4 4 gpio, cpu_pd(vdd) 20mpp4 4 gpio, vdd(cpu-pd)
21mpp5 5 gpo, ge0(txclko), uart1(txd), spi1(clk), audio(mclk) 21mpp5 5 gpo, ge0(txclkout), uart1(txd), spi1(sck), audio(mclk)
22mpp6 6 gpio, ge0(txd0), sata0(prsnt), tdm(rst), audio(sdo) 22mpp6 6 gpio, ge0(txd0), sata0(prsnt), tdm(rst), audio(sdo)
23mpp7 7 gpo, ge0(txd1), tdm(tdx), audio(lrclk) 23mpp7 7 gpo, ge0(txd1), tdm(dtx), audio(lrclk)
24mpp8 8 gpio, ge0(txd2), uart0(rts), tdm(drx), audio(bclk) 24mpp8 8 gpio, ge0(txd2), uart0(rts), tdm(drx), audio(bclk)
25mpp9 9 gpo, ge0(txd3), uart1(txd), sd0(clk), audio(spdifo) 25mpp9 9 gpo, ge0(txd3), uart1(txd), sd0(clk), audio(spdifo)
26mpp10 10 gpio, ge0(txctl), uart0(cts), tdm(fsync), audio(sdi) 26mpp10 10 gpio, ge0(txctl), uart0(cts), tdm(fsync), audio(sdi)
@@ -52,8 +52,8 @@ mpp30 30 gpio, ge0(rxd7), ge1(rxclk), i2c1(sck)
52mpp31 31 gpio, tclk, ge0(txerr) 52mpp31 31 gpio, tclk, ge0(txerr)
53mpp32 32 gpio, spi0(cs0) 53mpp32 32 gpio, spi0(cs0)
54mpp33 33 gpio, dev(bootcs), spi0(cs0) 54mpp33 33 gpio, dev(bootcs), spi0(cs0)
55mpp34 34 gpo, dev(wen0), spi0(mosi) 55mpp34 34 gpo, dev(we0), spi0(mosi)
56mpp35 35 gpo, dev(oen), spi0(sck) 56mpp35 35 gpo, dev(oe), spi0(sck)
57mpp36 36 gpo, dev(a1), spi0(miso) 57mpp36 36 gpo, dev(a1), spi0(miso)
58mpp37 37 gpo, dev(a0), sata0(prsnt) 58mpp37 37 gpo, dev(a0), sata0(prsnt)
59mpp38 38 gpio, dev(ready), uart1(cts), uart0(cts) 59mpp38 38 gpio, dev(ready), uart1(cts), uart0(cts)
@@ -86,11 +86,11 @@ mpp57 57 gpio, dev(cs3), uart1(rxd), tdm(fsync), sata0(prsnt),
86mpp58 58 gpio, dev(cs0), uart1(rts), tdm(int), audio(extclk), 86mpp58 58 gpio, dev(cs0), uart1(rts), tdm(int), audio(extclk),
87 uart0(rts) 87 uart0(rts)
88mpp59 59 gpo, dev(ale0), uart1(rts), uart0(rts), audio(bclk) 88mpp59 59 gpo, dev(ale0), uart1(rts), uart0(rts), audio(bclk)
89mpp60 60 gpio, dev(ale1), uart1(rxd), sata0(prsnt), pcie(rst-out), 89mpp60 60 gpio, dev(ale1), uart1(rxd), sata0(prsnt), pcie(rstout),
90 audio(sdi) 90 audio(sdi)
91mpp61 61 gpo, dev(wen1), uart1(txd), audio(rclk) 91mpp61 61 gpo, dev(we1), uart1(txd), audio(lrclk)
92mpp62 62 gpio, dev(a2), uart1(cts), tdm(drx), pcie(clkreq0), 92mpp62 62 gpio, dev(a2), uart1(cts), tdm(drx), pcie(clkreq0),
93 audio(mclk), uart0(cts) 93 audio(mclk), uart0(cts)
94mpp63 63 gpo, spi0(sck), tclk 94mpp63 63 gpo, spi0(sck), tclk
95mpp64 64 gpio, spi0(miso), spi0-1(cs1) 95mpp64 64 gpio, spi0(miso), spi0(cs1)
96mpp65 65 gpio, spi0(mosi), spi0-1(cs2) 96mpp65 65 gpio, spi0(mosi), spi0(cs2)
diff --git a/Documentation/devicetree/bindings/pinctrl/marvell,armada-375-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/marvell,armada-375-pinctrl.txt
index 7de0cda4a379..06e5bb0367f5 100644
--- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-375-pinctrl.txt
+++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-375-pinctrl.txt
@@ -15,24 +15,24 @@ name pins functions
15================================================================================ 15================================================================================
16mpp0 0 gpio, dev(ad2), spi0(cs1), spi1(cs1) 16mpp0 0 gpio, dev(ad2), spi0(cs1), spi1(cs1)
17mpp1 1 gpio, dev(ad3), spi0(mosi), spi1(mosi) 17mpp1 1 gpio, dev(ad3), spi0(mosi), spi1(mosi)
18mpp2 2 gpio, dev(ad4), ptp(eventreq), led(c0), audio(sdi) 18mpp2 2 gpio, dev(ad4), ptp(evreq), led(c0), audio(sdi)
19mpp3 3 gpio, dev(ad5), ptp(triggen), led(p3), audio(mclk) 19mpp3 3 gpio, dev(ad5), ptp(trig), led(p3), audio(mclk)
20mpp4 4 gpio, dev(ad6), spi0(miso), spi1(miso) 20mpp4 4 gpio, dev(ad6), spi0(miso), spi1(miso)
21mpp5 5 gpio, dev(ad7), spi0(cs2), spi1(cs2) 21mpp5 5 gpio, dev(ad7), spi0(cs2), spi1(cs2)
22mpp6 6 gpio, dev(ad0), led(p1), audio(rclk) 22mpp6 6 gpio, dev(ad0), led(p1), audio(lrclk)
23mpp7 7 gpio, dev(ad1), ptp(clk), led(p2), audio(extclk) 23mpp7 7 gpio, dev(ad1), ptp(clk), led(p2), audio(extclk)
24mpp8 8 gpio, dev (bootcs), spi0(cs0), spi1(cs0) 24mpp8 8 gpio, dev (bootcs), spi0(cs0), spi1(cs0)
25mpp9 9 gpio, nf(wen), spi0(sck), spi1(sck) 25mpp9 9 gpio, spi0(sck), spi1(sck), nand(we)
26mpp10 10 gpio, nf(ren), dram(vttctrl), led(c1) 26mpp10 10 gpio, dram(vttctrl), led(c1), nand(re)
27mpp11 11 gpio, dev(a0), led(c2), audio(sdo) 27mpp11 11 gpio, dev(a0), led(c2), audio(sdo)
28mpp12 12 gpio, dev(a1), audio(bclk) 28mpp12 12 gpio, dev(a1), audio(bclk)
29mpp13 13 gpio, dev(readyn), pcie0(rstoutn), pcie1(rstoutn) 29mpp13 13 gpio, dev(ready), pcie0(rstout), pcie1(rstout)
30mpp14 14 gpio, i2c0(sda), uart1(txd) 30mpp14 14 gpio, i2c0(sda), uart1(txd)
31mpp15 15 gpio, i2c0(sck), uart1(rxd) 31mpp15 15 gpio, i2c0(sck), uart1(rxd)
32mpp16 16 gpio, uart0(txd) 32mpp16 16 gpio, uart0(txd)
33mpp17 17 gpio, uart0(rxd) 33mpp17 17 gpio, uart0(rxd)
34mpp18 18 gpio, tdm(intn) 34mpp18 18 gpio, tdm(int)
35mpp19 19 gpio, tdm(rstn) 35mpp19 19 gpio, tdm(rst)
36mpp20 20 gpio, tdm(pclk) 36mpp20 20 gpio, tdm(pclk)
37mpp21 21 gpio, tdm(fsync) 37mpp21 21 gpio, tdm(fsync)
38mpp22 22 gpio, tdm(drx) 38mpp22 22 gpio, tdm(drx)
@@ -45,12 +45,12 @@ mpp28 28 gpio, led(p3), ge1(txctl), sd(clk)
45mpp29 29 gpio, pcie1(clkreq), ge1(rxclk), sd(d3) 45mpp29 29 gpio, pcie1(clkreq), ge1(rxclk), sd(d3)
46mpp30 30 gpio, ge1(txd0), spi1(cs0) 46mpp30 30 gpio, ge1(txd0), spi1(cs0)
47mpp31 31 gpio, ge1(txd1), spi1(mosi) 47mpp31 31 gpio, ge1(txd1), spi1(mosi)
48mpp32 32 gpio, ge1(txd2), spi1(sck), ptp(triggen) 48mpp32 32 gpio, ge1(txd2), spi1(sck), ptp(trig)
49mpp33 33 gpio, ge1(txd3), spi1(miso) 49mpp33 33 gpio, ge1(txd3), spi1(miso)
50mpp34 34 gpio, ge1(txclkout), spi1(sck) 50mpp34 34 gpio, ge1(txclkout), spi1(sck)
51mpp35 35 gpio, ge1(rxctl), spi1(cs1), spi0(cs2) 51mpp35 35 gpio, ge1(rxctl), spi1(cs1), spi0(cs2)
52mpp36 36 gpio, pcie0(clkreq) 52mpp36 36 gpio, pcie0(clkreq)
53mpp37 37 gpio, pcie0(clkreq), tdm(intn), ge(mdc) 53mpp37 37 gpio, pcie0(clkreq), tdm(int), ge(mdc)
54mpp38 38 gpio, pcie1(clkreq), ge(mdio) 54mpp38 38 gpio, pcie1(clkreq), ge(mdio)
55mpp39 39 gpio, ref(clkout) 55mpp39 39 gpio, ref(clkout)
56mpp40 40 gpio, uart1(txd) 56mpp40 40 gpio, uart1(txd)
@@ -58,25 +58,25 @@ mpp41 41 gpio, uart1(rxd)
58mpp42 42 gpio, spi1(cs2), led(c0) 58mpp42 42 gpio, spi1(cs2), led(c0)
59mpp43 43 gpio, sata0(prsnt), dram(vttctrl) 59mpp43 43 gpio, sata0(prsnt), dram(vttctrl)
60mpp44 44 gpio, sata0(prsnt) 60mpp44 44 gpio, sata0(prsnt)
61mpp45 45 gpio, spi0(cs2), pcie0(rstoutn) 61mpp45 45 gpio, spi0(cs2), pcie0(rstout)
62mpp46 46 gpio, led(p0), ge0(txd0), ge1(txd0) 62mpp46 46 gpio, led(p0), ge0(txd0), ge1(txd0), dev(we1)
63mpp47 47 gpio, led(p1), ge0(txd1), ge1(txd1) 63mpp47 47 gpio, led(p1), ge0(txd1), ge1(txd1)
64mpp48 48 gpio, led(p2), ge0(txd2), ge1(txd2) 64mpp48 48 gpio, led(p2), ge0(txd2), ge1(txd2)
65mpp49 49 gpio, led(p3), ge0(txd3), ge1(txd3) 65mpp49 49 gpio, led(p3), ge0(txd3), ge1(txd3)
66mpp50 50 gpio, led(c0), ge0(rxd0), ge1(rxd0) 66mpp50 50 gpio, led(c0), ge0(rxd0), ge1(rxd0)
67mpp51 51 gpio, led(c1), ge0(rxd1), ge1(rxd1) 67mpp51 51 gpio, led(c1), ge0(rxd1), ge1(rxd1)
68mpp52 52 gpio, led(c2), ge0(rxd2), ge1(rxd2) 68mpp52 52 gpio, led(c2), ge0(rxd2), ge1(rxd2)
69mpp53 53 gpio, pcie1(rstoutn), ge0(rxd3), ge1(rxd3) 69mpp53 53 gpio, pcie1(rstout), ge0(rxd3), ge1(rxd3)
70mpp54 54 gpio, pcie0(rstoutn), ge0(rxctl), ge1(rxctl) 70mpp54 54 gpio, pcie0(rstout), ge0(rxctl), ge1(rxctl)
71mpp55 55 gpio, ge0(rxclk), ge1(rxclk) 71mpp55 55 gpio, ge0(rxclk), ge1(rxclk)
72mpp56 56 gpio, ge0(txclkout), ge1(txclkout) 72mpp56 56 gpio, ge0(txclkout), ge1(txclkout)
73mpp57 57 gpio, ge0(txctl), ge1(txctl) 73mpp57 57 gpio, ge0(txctl), ge1(txctl), dev(we0)
74mpp58 58 gpio, led(c0) 74mpp58 58 gpio, led(c0)
75mpp59 59 gpio, led(c1) 75mpp59 59 gpio, led(c1)
76mpp60 60 gpio, uart1(txd), led(c2) 76mpp60 60 gpio, uart1(txd), led(c2)
77mpp61 61 gpio, i2c1(sda), uart1(rxd), spi1(cs2), led(p0) 77mpp61 61 gpio, i2c1(sda), uart1(rxd), spi1(cs2), led(p0)
78mpp62 62 gpio, i2c1(sck), led(p1) 78mpp62 62 gpio, i2c1(sck), led(p1)
79mpp63 63 gpio, ptp(triggen), led(p2) 79mpp63 63 gpio, ptp(trig), led(p2), dev(burst/last)
80mpp64 64 gpio, dram(vttctrl), led(p3) 80mpp64 64 gpio, dram(vttctrl), led(p3)
81mpp65 65 gpio, sata1(prsnt) 81mpp65 65 gpio, sata1(prsnt)
82mpp66 66 gpio, ptp(eventreq), spi1(cs3) 82mpp66 66 gpio, ptp(evreq), spi1(cs3)
diff --git a/Documentation/devicetree/bindings/pinctrl/marvell,armada-38x-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/marvell,armada-38x-pinctrl.txt
index b17c96849fc9..54ec4c0a0d0e 100644
--- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-38x-pinctrl.txt
+++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-38x-pinctrl.txt
@@ -27,16 +27,16 @@ mpp8 8 gpio, ge0(txd1), dev(ad10)
27mpp9 9 gpio, ge0(txd2), dev(ad11) 27mpp9 9 gpio, ge0(txd2), dev(ad11)
28mpp10 10 gpio, ge0(txd3), dev(ad12) 28mpp10 10 gpio, ge0(txd3), dev(ad12)
29mpp11 11 gpio, ge0(txctl), dev(ad13) 29mpp11 11 gpio, ge0(txctl), dev(ad13)
30mpp12 12 gpio, ge0(rxd0), pcie0(rstout), pcie1(rstout) [1], spi0(cs1), dev(ad14) 30mpp12 12 gpio, ge0(rxd0), pcie0(rstout), spi0(cs1), dev(ad14), pcie3(clkreq)
31mpp13 13 gpio, ge0(rxd1), pcie0(clkreq), pcie1(clkreq) [1], spi0(cs2), dev(ad15) 31mpp13 13 gpio, ge0(rxd1), pcie0(clkreq), pcie1(clkreq) [1], spi0(cs2), dev(ad15), pcie2(clkreq)
32mpp14 14 gpio, ge0(rxd2), ptp(clk), m(vtt_ctrl), spi0(cs3), dev(wen1) 32mpp14 14 gpio, ge0(rxd2), ptp(clk), dram(vttctrl), spi0(cs3), dev(we1), pcie3(clkreq)
33mpp15 15 gpio, ge0(rxd3), ge(mdc slave), pcie0(rstout), spi0(mosi), pcie1(rstout) [1] 33mpp15 15 gpio, ge0(rxd3), ge(mdc slave), pcie0(rstout), spi0(mosi)
34mpp16 16 gpio, ge0(rxctl), ge(mdio slave), m(decc_err), spi0(miso), pcie0(clkreq) 34mpp16 16 gpio, ge0(rxctl), ge(mdio slave), dram(deccerr), spi0(miso), pcie0(clkreq), pcie1(clkreq) [1]
35mpp17 17 gpio, ge0(rxclk), ptp(clk), ua1(rxd), spi0(sck), sata1(prsnt) 35mpp17 17 gpio, ge0(rxclk), ptp(clk), ua1(rxd), spi0(sck), sata1(prsnt), sata0(prsnt)
36mpp18 18 gpio, ge0(rxerr), ptp(trig_gen), ua1(txd), spi0(cs0), pcie1(rstout) [1] 36mpp18 18 gpio, ge0(rxerr), ptp(trig), ua1(txd), spi0(cs0)
37mpp19 19 gpio, ge0(col), ptp(event_req), pcie0(clkreq), sata1(prsnt), ua0(cts) 37mpp19 19 gpio, ge0(col), ptp(evreq), ge0(txerr), sata1(prsnt), ua0(cts)
38mpp20 20 gpio, ge0(txclk), ptp(clk), pcie1(rstout) [1], sata0(prsnt), ua0(rts) 38mpp20 20 gpio, ge0(txclk), ptp(clk), sata0(prsnt), ua0(rts)
39mpp21 21 gpio, spi0(cs1), ge1(rxd0), sata0(prsnt), sd0(cmd), dev(bootcs) 39mpp21 21 gpio, spi0(cs1), ge1(rxd0), sata0(prsnt), sd0(cmd), dev(bootcs), sata1(prsnt)
40mpp22 22 gpio, spi0(mosi), dev(ad0) 40mpp22 22 gpio, spi0(mosi), dev(ad0)
41mpp23 23 gpio, spi0(sck), dev(ad2) 41mpp23 23 gpio, spi0(sck), dev(ad2)
42mpp24 24 gpio, spi0(miso), ua0(cts), ua1(rxd), sd0(d4), dev(ready) 42mpp24 24 gpio, spi0(miso), ua0(cts), ua1(rxd), sd0(d4), dev(ready)
@@ -45,36 +45,36 @@ mpp26 26 gpio, spi0(cs2), i2c1(sck), sd0(d6), dev(cs1)
45mpp27 27 gpio, spi0(cs3), ge1(txclkout), i2c1(sda), sd0(d7), dev(cs2) 45mpp27 27 gpio, spi0(cs3), ge1(txclkout), i2c1(sda), sd0(d7), dev(cs2)
46mpp28 28 gpio, ge1(txd0), sd0(clk), dev(ad5) 46mpp28 28 gpio, ge1(txd0), sd0(clk), dev(ad5)
47mpp29 29 gpio, ge1(txd1), dev(ale0) 47mpp29 29 gpio, ge1(txd1), dev(ale0)
48mpp30 30 gpio, ge1(txd2), dev(oen) 48mpp30 30 gpio, ge1(txd2), dev(oe)
49mpp31 31 gpio, ge1(txd3), dev(ale1) 49mpp31 31 gpio, ge1(txd3), dev(ale1)
50mpp32 32 gpio, ge1(txctl), dev(wen0) 50mpp32 32 gpio, ge1(txctl), dev(we0)
51mpp33 33 gpio, m(decc_err), dev(ad3) 51mpp33 33 gpio, dram(deccerr), dev(ad3)
52mpp34 34 gpio, dev(ad1) 52mpp34 34 gpio, dev(ad1)
53mpp35 35 gpio, ref(clk_out1), dev(a1) 53mpp35 35 gpio, ref(clk_out1), dev(a1)
54mpp36 36 gpio, ptp(trig_gen), dev(a0) 54mpp36 36 gpio, ptp(trig), dev(a0)
55mpp37 37 gpio, ptp(clk), ge1(rxclk), sd0(d3), dev(ad8) 55mpp37 37 gpio, ptp(clk), ge1(rxclk), sd0(d3), dev(ad8)
56mpp38 38 gpio, ptp(event_req), ge1(rxd1), ref(clk_out0), sd0(d0), dev(ad4) 56mpp38 38 gpio, ptp(evreq), ge1(rxd1), ref(clk_out0), sd0(d0), dev(ad4)
57mpp39 39 gpio, i2c1(sck), ge1(rxd2), ua0(cts), sd0(d1), dev(a2) 57mpp39 39 gpio, i2c1(sck), ge1(rxd2), ua0(cts), sd0(d1), dev(a2)
58mpp40 40 gpio, i2c1(sda), ge1(rxd3), ua0(rts), sd0(d2), dev(ad6) 58mpp40 40 gpio, i2c1(sda), ge1(rxd3), ua0(rts), sd0(d2), dev(ad6)
59mpp41 41 gpio, ua1(rxd), ge1(rxctl), ua0(cts), spi1(cs3), dev(burst/last) 59mpp41 41 gpio, ua1(rxd), ge1(rxctl), ua0(cts), spi1(cs3), dev(burst/last), nand(rb0)
60mpp42 42 gpio, ua1(txd), ua0(rts), dev(ad7) 60mpp42 42 gpio, ua1(txd), ua0(rts), dev(ad7)
61mpp43 43 gpio, pcie0(clkreq), m(vtt_ctrl), m(decc_err), pcie0(rstout), dev(clkout) 61mpp43 43 gpio, pcie0(clkreq), dram(vttctrl), dram(deccerr), spi1(cs2), dev(clkout), nand(rb1)
62mpp44 44 gpio, sata0(prsnt), sata1(prsnt), sata2(prsnt) [2], sata3(prsnt) [3], pcie0(rstout) 62mpp44 44 gpio, sata0(prsnt), sata1(prsnt), sata2(prsnt) [2], sata3(prsnt) [3]
63mpp45 45 gpio, ref(clk_out0), pcie0(rstout), pcie1(rstout) [1], pcie2(rstout), pcie3(rstout) 63mpp45 45 gpio, ref(clk_out0), pcie0(rstout), ua1(rxd)
64mpp46 46 gpio, ref(clk_out1), pcie0(rstout), pcie1(rstout) [1], pcie2(rstout), pcie3(rstout) 64mpp46 46 gpio, ref(clk_out1), pcie0(rstout), ua1(txd)
65mpp47 47 gpio, sata0(prsnt), sata1(prsnt), sata2(prsnt) [2], spi1(cs2), sata3(prsnt) [2] 65mpp47 47 gpio, sata0(prsnt), sata1(prsnt), sata2(prsnt) [2], sata3(prsnt) [2]
66mpp48 48 gpio, sata0(prsnt), m(vtt_ctrl), tdm2c(pclk), audio(mclk), sd0(d4) 66mpp48 48 gpio, sata0(prsnt), dram(vttctrl), tdm(pclk), audio(mclk), sd0(d4), pcie0(clkreq)
67mpp49 49 gpio, sata2(prsnt) [2], sata3(prsnt) [2], tdm2c(fsync), audio(lrclk), sd0(d5) 67mpp49 49 gpio, sata2(prsnt) [2], sata3(prsnt) [2], tdm(fsync), audio(lrclk), sd0(d5), pcie1(clkreq)
68mpp50 50 gpio, pcie0(rstout), pcie1(rstout) [1], tdm2c(drx), audio(extclk), sd0(cmd) 68mpp50 50 gpio, pcie0(rstout), tdm(drx), audio(extclk), sd0(cmd)
69mpp51 51 gpio, tdm2c(dtx), audio(sdo), m(decc_err) 69mpp51 51 gpio, tdm(dtx), audio(sdo), dram(deccerr), ptp(trig)
70mpp52 52 gpio, pcie0(rstout), pcie1(rstout) [1], tdm2c(intn), audio(sdi), sd0(d6) 70mpp52 52 gpio, pcie0(rstout), tdm(int), audio(sdi), sd0(d6), ptp(clk)
71mpp53 53 gpio, sata1(prsnt), sata0(prsnt), tdm2c(rstn), audio(bclk), sd0(d7) 71mpp53 53 gpio, sata1(prsnt), sata0(prsnt), tdm(rst), audio(bclk), sd0(d7), ptp(evreq)
72mpp54 54 gpio, sata0(prsnt), sata1(prsnt), pcie0(rstout), pcie1(rstout) [1], sd0(d3) 72mpp54 54 gpio, sata0(prsnt), sata1(prsnt), pcie0(rstout), ge0(txerr), sd0(d3)
73mpp55 55 gpio, ua1(cts), ge(mdio), pcie1(clkreq) [1], spi1(cs1), sd0(d0) 73mpp55 55 gpio, ua1(cts), ge(mdio), pcie1(clkreq) [1], spi1(cs1), sd0(d0), ua1(rxd)
74mpp56 56 gpio, ua1(rts), ge(mdc), m(decc_err), spi1(mosi) 74mpp56 56 gpio, ua1(rts), ge(mdc), dram(deccerr), spi1(mosi), ua1(txd)
75mpp57 57 gpio, spi1(sck), sd0(clk) 75mpp57 57 gpio, spi1(sck), sd0(clk), ua1(txd)
76mpp58 58 gpio, pcie1(clkreq) [1], i2c1(sck), pcie2(clkreq), spi1(miso), sd0(d1) 76mpp58 58 gpio, pcie1(clkreq) [1], i2c1(sck), pcie2(clkreq), spi1(miso), sd0(d1), ua1(rxd)
77mpp59 59 gpio, pcie0(rstout), i2c1(sda), pcie1(rstout) [1], spi1(cs0), sd0(d2) 77mpp59 59 gpio, pcie0(rstout), i2c1(sda), spi1(cs0), sd0(d2)
78 78
79[1]: only available on 88F6820 and 88F6828 79[1]: only available on 88F6820 and 88F6828
80[2]: only available on 88F6828 80[2]: only available on 88F6828
diff --git a/Documentation/devicetree/bindings/pinctrl/marvell,armada-39x-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/marvell,armada-39x-pinctrl.txt
index 5b1a9dc004f4..a40b60f1ca4c 100644
--- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-39x-pinctrl.txt
+++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-39x-pinctrl.txt
@@ -4,8 +4,9 @@ Please refer to marvell,mvebu-pinctrl.txt in this directory for common binding
4part and usage. 4part and usage.
5 5
6Required properties: 6Required properties:
7- compatible: "marvell,88f6920-pinctrl", "marvell,88f6928-pinctrl" 7- compatible: "marvell,88f6920-pinctrl", "marvell,88f6925-pinctrl" or
8 depending on the specific variant of the SoC being used. 8 "marvell,88f6928-pinctrl" depending on the specific variant of the
9 SoC being used.
9- reg: register specifier of MPP registers 10- reg: register specifier of MPP registers
10 11
11Available mpp pins/groups and functions: 12Available mpp pins/groups and functions:
@@ -24,55 +25,60 @@ mpp6 6 gpio, dev(cs3), xsmi(mdio)
24mpp7 7 gpio, dev(ad9), xsmi(mdc) 25mpp7 7 gpio, dev(ad9), xsmi(mdc)
25mpp8 8 gpio, dev(ad10), ptp(trig) 26mpp8 8 gpio, dev(ad10), ptp(trig)
26mpp9 9 gpio, dev(ad11), ptp(clk) 27mpp9 9 gpio, dev(ad11), ptp(clk)
27mpp10 10 gpio, dev(ad12), ptp(event) 28mpp10 10 gpio, dev(ad12), ptp(evreq)
28mpp11 11 gpio, dev(ad13), led(clk) 29mpp11 11 gpio, dev(ad13), led(clk)
29mpp12 12 gpio, pcie0(rstout), dev(ad14), led(stb) 30mpp12 12 gpio, pcie0(rstout), dev(ad14), led(stb)
30mpp13 13 gpio, dev(ad15), led(data) 31mpp13 13 gpio, dev(ad15), pcie2(clkreq), led(data)
31mpp14 14 gpio, m(vtt), dev(wen1), ua1(txd) 32mpp14 14 gpio, dram(vttctrl), dev(we1), ua1(txd)
32mpp15 15 gpio, pcie0(rstout), spi0(mosi), i2c1(sck) 33mpp15 15 gpio, pcie0(rstout), spi0(mosi), i2c1(sck)
33mpp16 16 gpio, m(decc), spi0(miso), i2c1(sda) 34mpp16 16 gpio, dram(deccerr), spi0(miso), pcie0(clkreq), i2c1(sda)
34mpp17 17 gpio, ua1(rxd), spi0(sck), smi(mdio) 35mpp17 17 gpio, ua1(rxd), spi0(sck), sata1(prsnt) [1], sata0(prsnt) [1], smi(mdio)
35mpp18 18 gpio, ua1(txd), spi0(cs0), i2c2(sck) 36mpp18 18 gpio, ua1(txd), spi0(cs0), i2c2(sck)
36mpp19 19 gpio, sata1(present) [1], ua0(cts), ua1(rxd), i2c2(sda) 37mpp19 19 gpio, sata1(prsnt) [1], ua0(cts), ua1(rxd), i2c2(sda)
37mpp20 20 gpio, sata0(present) [1], ua0(rts), ua1(txd), smi(mdc) 38mpp20 20 gpio, sata0(prsnt) [1], ua0(rts), ua1(txd), smi(mdc)
38mpp21 21 gpio, spi0(cs1), sata0(present) [1], sd(cmd), dev(bootcs), ge(rxd0) 39mpp21 21 gpio, spi0(cs1), sata0(prsnt) [1], sd0(cmd), dev(bootcs),
40 sata1(prsnt) [1], ge(rxd0)
39mpp22 22 gpio, spi0(mosi), dev(ad0) 41mpp22 22 gpio, spi0(mosi), dev(ad0)
40mpp23 23 gpio, spi0(sck), dev(ad2) 42mpp23 23 gpio, spi0(sck), dev(ad2)
41mpp24 24 gpio, spi0(miso), ua0(cts), ua1(rxd), sd(d4), dev(readyn) 43mpp24 24 gpio, spi0(miso), ua0(cts), ua1(rxd), sd0(d4), dev(ready)
42mpp25 25 gpio, spi0(cs0), ua0(rts), ua1(txd), sd(d5), dev(cs0) 44mpp25 25 gpio, spi0(cs0), ua0(rts), ua1(txd), sd0(d5), dev(cs0)
43mpp26 26 gpio, spi0(cs2), i2c1(sck), sd(d6), dev(cs1) 45mpp26 26 gpio, spi0(cs2), i2c1(sck), sd0(d6), dev(cs1)
44mpp27 27 gpio, spi0(cs3), i2c1(sda), sd(d7), dev(cs2), ge(txclkout) 46mpp27 27 gpio, spi0(cs3), i2c1(sda), sd0(d7), dev(cs2), ge(txclkout)
45mpp28 28 gpio, sd(clk), dev(ad5), ge(txd0) 47mpp28 28 gpio, sd0(clk), dev(ad5), ge(txd0)
46mpp29 29 gpio, dev(ale0), ge(txd1) 48mpp29 29 gpio, dev(ale0), ge(txd1)
47mpp30 30 gpio, dev(oen), ge(txd2) 49mpp30 30 gpio, dev(oe), ge(txd2)
48mpp31 31 gpio, dev(ale1), ge(txd3) 50mpp31 31 gpio, dev(ale1), ge(txd3)
49mpp32 32 gpio, dev(wen0), ge(txctl) 51mpp32 32 gpio, dev(we0), ge(txctl)
50mpp33 33 gpio, m(decc), dev(ad3) 52mpp33 33 gpio, dram(deccerr), dev(ad3)
51mpp34 34 gpio, dev(ad1) 53mpp34 34 gpio, dev(ad1)
52mpp35 35 gpio, ref(clk), dev(a1) 54mpp35 35 gpio, ref(clk), dev(a1)
53mpp36 36 gpio, dev(a0) 55mpp36 36 gpio, dev(a0)
54mpp37 37 gpio, sd(d3), dev(ad8), ge(rxclk) 56mpp37 37 gpio, sd0(d3), dev(ad8), ge(rxclk)
55mpp38 38 gpio, ref(clk), sd(d0), dev(ad4), ge(rxd1) 57mpp38 38 gpio, ref(clk), sd0(d0), dev(ad4), ge(rxd1)
56mpp39 39 gpio, i2c1(sck), ua0(cts), sd(d1), dev(a2), ge(rxd2) 58mpp39 39 gpio, i2c1(sck), ua0(cts), sd0(d1), dev(a2), ge(rxd2)
57mpp40 40 gpio, i2c1(sda), ua0(rts), sd(d2), dev(ad6), ge(rxd3) 59mpp40 40 gpio, i2c1(sda), ua0(rts), sd0(d2), dev(ad6), ge(rxd3)
58mpp41 41 gpio, ua1(rxd), ua0(cts), spi1(cs3), dev(burstn), nd(rbn0), ge(rxctl) 60mpp41 41 gpio, ua1(rxd), ua0(cts), spi1(cs3), dev(burst/last), nand(rb0), ge(rxctl)
59mpp42 42 gpio, ua1(txd), ua0(rts), dev(ad7) 61mpp42 42 gpio, ua1(txd), ua0(rts), dev(ad7)
60mpp43 43 gpio, pcie0(clkreq), m(vtt), m(decc), spi1(cs2), dev(clkout), nd(rbn1) 62mpp43 43 gpio, pcie0(clkreq), dram(vttctrl), dram(deccerr), spi1(cs2), dev(clkout), nand(rb1)
61mpp44 44 gpio, sata0(present) [1], sata1(present) [1], led(clk) 63mpp44 44 gpio, sata0(prsnt) [1], sata1(prsnt) [1], sata2(prsnt) [2],
64 sata3(prsnt) [2], led(clk)
62mpp45 45 gpio, ref(clk), pcie0(rstout), ua1(rxd) 65mpp45 45 gpio, ref(clk), pcie0(rstout), ua1(rxd)
63mpp46 46 gpio, ref(clk), pcie0(rstout), ua1(txd), led(stb) 66mpp46 46 gpio, ref(clk), pcie0(rstout), ua1(txd), led(stb)
64mpp47 47 gpio, sata0(present) [1], sata1(present) [1], led(data) 67mpp47 47 gpio, sata0(prsnt) [1], sata1(prsnt) [1], sata2(prsnt) [2],
65mpp48 48 gpio, sata0(present) [1], m(vtt), tdm(pclk) [1], audio(mclk) [1], sd(d4), pcie0(clkreq), ua1(txd) 68 sata3(prsnt) [2], led(data)
66mpp49 49 gpio, tdm(fsync) [1], audio(lrclk) [1], sd(d5), ua2(rxd) 69mpp48 48 gpio, sata0(prsnt) [1], dram(vttctrl), tdm(pclk) [2], audio(mclk) [2], sd0(d4), pcie0(clkreq), ua1(txd)
67mpp50 50 gpio, pcie0(rstout), tdm(drx) [1], audio(extclk) [1], sd(cmd), ua2(rxd) 70mpp49 49 gpio, sata2(prsnt) [2], sata3(prsnt) [2], tdm(fsync) [2],
68mpp51 51 gpio, tdm(dtx) [1], audio(sdo) [1], m(decc), ua2(txd) 71 audio(lrclk) [2], sd0(d5), ua2(rxd)
69mpp52 52 gpio, pcie0(rstout), tdm(intn) [1], audio(sdi) [1], sd(d6), i2c3(sck) 72mpp50 50 gpio, pcie0(rstout), tdm(drx) [2], audio(extclk) [2], sd0(cmd), ua2(rxd)
70mpp53 53 gpio, sata1(present) [1], sata0(present) [1], tdm(rstn) [1], audio(bclk) [1], sd(d7), i2c3(sda) 73mpp51 51 gpio, tdm(dtx) [2], audio(sdo) [2], dram(deccerr), ua2(txd)
71mpp54 54 gpio, sata0(present) [1], sata1(present) [1], pcie0(rstout), sd(d3), ua3(txd) 74mpp52 52 gpio, pcie0(rstout), tdm(int) [2], audio(sdi) [2], sd0(d6), i2c3(sck)
72mpp55 55 gpio, ua1(cts), spi1(cs1), sd(d0), ua1(rxd), ua3(rxd) 75mpp53 53 gpio, sata1(prsnt) [1], sata0(prsnt) [1], tdm(rst) [2], audio(bclk) [2], sd0(d7), i2c3(sda)
73mpp56 56 gpio, ua1(rts), m(decc), spi1(mosi), ua1(txd) 76mpp54 54 gpio, sata0(prsnt) [1], sata1(prsnt) [1], pcie0(rstout), sd0(d3), ua3(txd)
74mpp57 57 gpio, spi1(sck), sd(clk), ua1(txd) 77mpp55 55 gpio, ua1(cts), spi1(cs1), sd0(d0), ua1(rxd), ua3(rxd)
75mpp58 58 gpio, i2c1(sck), pcie2(clkreq), spi1(miso), sd(d1), ua1(rxd) 78mpp56 56 gpio, ua1(rts), dram(deccerr), spi1(mosi), ua1(txd)
76mpp59 59 gpio, pcie0(rstout), i2c1(sda), spi1(cs0), sd(d2) 79mpp57 57 gpio, spi1(sck), sd0(clk), ua1(txd)
80mpp58 58 gpio, i2c1(sck), pcie2(clkreq), spi1(miso), sd0(d1), ua1(rxd)
81mpp59 59 gpio, pcie0(rstout), i2c1(sda), spi1(cs0), sd0(d2)
77 82
78[1]: only available on 88F6928 83[1]: only available on 88F6925/88F6928
84[2]: only available on 88F6928
diff --git a/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt
index 373dbccd7ab0..76da7222ff92 100644
--- a/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt
+++ b/Documentation/devicetree/bindings/pinctrl/marvell,armada-xp-pinctrl.txt
@@ -18,7 +18,7 @@ only for more detailed description in this document.
18 18
19name pins functions 19name pins functions
20================================================================================ 20================================================================================
21mpp0 0 gpio, ge0(txclko), lcd(d0) 21mpp0 0 gpio, ge0(txclkout), lcd(d0)
22mpp1 1 gpio, ge0(txd0), lcd(d1) 22mpp1 1 gpio, ge0(txd0), lcd(d1)
23mpp2 2 gpio, ge0(txd1), lcd(d2) 23mpp2 2 gpio, ge0(txd1), lcd(d2)
24mpp3 3 gpio, ge0(txd2), lcd(d3) 24mpp3 3 gpio, ge0(txd2), lcd(d3)
@@ -30,49 +30,50 @@ mpp8 8 gpio, ge0(rxd2), lcd(d8)
30mpp9 9 gpio, ge0(rxd3), lcd(d9) 30mpp9 9 gpio, ge0(rxd3), lcd(d9)
31mpp10 10 gpio, ge0(rxctl), lcd(d10) 31mpp10 10 gpio, ge0(rxctl), lcd(d10)
32mpp11 11 gpio, ge0(rxclk), lcd(d11) 32mpp11 11 gpio, ge0(rxclk), lcd(d11)
33mpp12 12 gpio, ge0(txd4), ge1(txd0), lcd(d12) 33mpp12 12 gpio, ge0(txd4), ge1(txclkout), lcd(d12)
34mpp13 13 gpio, ge0(txd5), ge1(txd1), lcd(d13) 34mpp13 13 gpio, ge0(txd5), ge1(txd0), spi1(mosi), lcd(d13)
35mpp14 14 gpio, ge0(txd6), ge1(txd2), lcd(d15) 35mpp14 14 gpio, ge0(txd6), ge1(txd1), spi1(sck), lcd(d15)
36mpp15 15 gpio, ge0(txd7), ge1(txd3), lcd(d16) 36mpp15 15 gpio, ge0(txd7), ge1(txd2), lcd(d16)
37mpp16 16 gpio, ge0(txd7), ge1(txd3), lcd(d16) 37mpp16 16 gpio, ge0(txd7), ge1(txd3), spi1(cs0), lcd(d16)
38mpp17 17 gpio, ge0(col), ge1(txctl), lcd(d17) 38mpp17 17 gpio, ge0(col), ge1(txctl), spi1(miso), lcd(d17)
39mpp18 18 gpio, ge0(rxerr), ge1(rxd0), lcd(d18), ptp(trig) 39mpp18 18 gpio, ge0(rxerr), ge1(rxd0), lcd(d18), ptp(trig)
40mpp19 19 gpio, ge0(crs), ge1(rxd1), lcd(d19), ptp(evreq) 40mpp19 19 gpio, ge0(crs), ge1(rxd1), lcd(d19), ptp(evreq)
41mpp20 20 gpio, ge0(rxd4), ge1(rxd2), lcd(d20), ptp(clk) 41mpp20 20 gpio, ge0(rxd4), ge1(rxd2), lcd(d20), ptp(clk)
42mpp21 21 gpio, ge0(rxd5), ge1(rxd3), lcd(d21), mem(bat) 42mpp21 21 gpio, ge0(rxd5), ge1(rxd3), lcd(d21), dram(bat)
43mpp22 22 gpio, ge0(rxd6), ge1(rxctl), lcd(d22), sata0(prsnt) 43mpp22 22 gpio, ge0(rxd6), ge1(rxctl), lcd(d22), sata0(prsnt)
44mpp23 23 gpio, ge0(rxd7), ge1(rxclk), lcd(d23), sata1(prsnt) 44mpp23 23 gpio, ge0(rxd7), ge1(rxclk), lcd(d23), sata1(prsnt)
45mpp24 24 gpio, lcd(hsync), sata1(prsnt), nf(bootcs-re), tdm(rst) 45mpp24 24 gpio, lcd(hsync), sata1(prsnt), tdm(rst)
46mpp25 25 gpio, lcd(vsync), sata0(prsnt), nf(bootcs-we), tdm(pclk) 46mpp25 25 gpio, lcd(vsync), sata0(prsnt), tdm(pclk)
47mpp26 26 gpio, lcd(clk), tdm(fsync), vdd(cpu1-pd) 47mpp26 26 gpio, lcd(clk), tdm(fsync)
48mpp27 27 gpio, lcd(e), tdm(dtx), ptp(trig) 48mpp27 27 gpio, lcd(e), tdm(dtx), ptp(trig)
49mpp28 28 gpio, lcd(pwm), tdm(drx), ptp(evreq) 49mpp28 28 gpio, lcd(pwm), tdm(drx), ptp(evreq)
50mpp29 29 gpio, lcd(ref-clk), tdm(int0), ptp(clk), vdd(cpu0-pd) 50mpp29 29 gpio, lcd(ref-clk), tdm(int0), ptp(clk)
51mpp30 30 gpio, tdm(int1), sd0(clk) 51mpp30 30 gpio, tdm(int1), sd0(clk)
52mpp31 31 gpio, tdm(int2), sd0(cmd), vdd(cpu0-pd) 52mpp31 31 gpio, tdm(int2), sd0(cmd)
53mpp32 32 gpio, tdm(int3), sd0(d0), vdd(cpu1-pd) 53mpp32 32 gpio, tdm(int3), sd0(d0)
54mpp33 33 gpio, tdm(int4), sd0(d1), mem(bat) 54mpp33 33 gpio, tdm(int4), sd0(d1), dram(bat), dram(vttctrl)
55mpp34 34 gpio, tdm(int5), sd0(d2), sata0(prsnt) 55mpp34 34 gpio, tdm(int5), sd0(d2), sata0(prsnt), dram(deccerr)
56mpp35 35 gpio, tdm(int6), sd0(d3), sata1(prsnt) 56mpp35 35 gpio, tdm(int6), sd0(d3), sata1(prsnt)
57mpp36 36 gpio, spi(mosi) 57mpp36 36 gpio, spi0(mosi)
58mpp37 37 gpio, spi(miso) 58mpp37 37 gpio, spi0(miso)
59mpp38 38 gpio, spi(sck) 59mpp38 38 gpio, spi0(sck)
60mpp39 39 gpio, spi(cs0) 60mpp39 39 gpio, spi0(cs0)
61mpp40 40 gpio, spi(cs1), uart2(cts), lcd(vga-hsync), vdd(cpu1-pd), 61mpp40 40 gpio, spi0(cs1), uart2(cts), lcd(vga-hsync), pcie(clkreq0),
62 pcie(clkreq0) 62 spi1(cs1)
63mpp41 41 gpio, spi(cs2), uart2(rts), lcd(vga-vsync), sata1(prsnt), 63mpp41 41 gpio, spi0(cs2), uart2(rts), lcd(vga-vsync), sata1(prsnt),
64 pcie(clkreq1) 64 pcie(clkreq1), spi1(cs2)
65mpp42 42 gpio, uart2(rxd), uart0(cts), tdm(int7), tdm-1(timer), 65mpp42 42 gpio, uart2(rxd), uart0(cts), tdm(int7), tdm(timer)
66 vdd(cpu0-pd) 66mpp43 43 gpio, uart2(txd), uart0(rts), spi0(cs3), pcie(rstout),
67mpp43 43 gpio, uart2(txd), uart0(rts), spi(cs3), pcie(rstout), 67 spi1(cs3)
68 vdd(cpu2-3-pd){1} 68mpp44 44 gpio, uart2(cts), uart3(rxd), spi0(cs4), pcie(clkreq2),
69mpp44 44 gpio, uart2(cts), uart3(rxd), spi(cs4), pcie(clkreq2), 69 dram(bat), spi1(cs4)
70 mem(bat) 70mpp45 45 gpio, uart2(rts), uart3(txd), spi0(cs5), sata1(prsnt),
71mpp45 45 gpio, uart2(rts), uart3(txd), spi(cs5), sata1(prsnt) 71 spi1(cs5), dram(vttctrl)
72mpp46 46 gpio, uart3(rts), uart1(rts), spi(cs6), sata0(prsnt) 72mpp46 46 gpio, uart3(rts), uart1(rts), spi0(cs6), sata0(prsnt),
73mpp47 47 gpio, uart3(cts), uart1(cts), spi(cs7), pcie(clkreq3), 73 spi1(cs6)
74 ref(clkout) 74mpp47 47 gpio, uart3(cts), uart1(cts), spi0(cs7), pcie(clkreq3),
75mpp48 48 gpio, tclk, dev(burst/last) 75 ref(clkout), spi1(cs7)
76mpp48 48 gpio, dev(clkout), dev(burst/last), nand(rb)
76 77
77* Marvell Armada XP (mv78260 and mv78460 only) 78* Marvell Armada XP (mv78260 and mv78460 only)
78 79
@@ -84,9 +85,9 @@ mpp51 51 gpio, dev(ad16)
84mpp52 52 gpio, dev(ad17) 85mpp52 52 gpio, dev(ad17)
85mpp53 53 gpio, dev(ad18) 86mpp53 53 gpio, dev(ad18)
86mpp54 54 gpio, dev(ad19) 87mpp54 54 gpio, dev(ad19)
87mpp55 55 gpio, dev(ad20), vdd(cpu0-pd) 88mpp55 55 gpio, dev(ad20)
88mpp56 56 gpio, dev(ad21), vdd(cpu1-pd) 89mpp56 56 gpio, dev(ad21)
89mpp57 57 gpio, dev(ad22), vdd(cpu2-3-pd){1} 90mpp57 57 gpio, dev(ad22)
90mpp58 58 gpio, dev(ad23) 91mpp58 58 gpio, dev(ad23)
91mpp59 59 gpio, dev(ad24) 92mpp59 59 gpio, dev(ad24)
92mpp60 60 gpio, dev(ad25) 93mpp60 60 gpio, dev(ad25)
@@ -96,6 +97,3 @@ mpp63 63 gpio, dev(ad28)
96mpp64 64 gpio, dev(ad29) 97mpp64 64 gpio, dev(ad29)
97mpp65 65 gpio, dev(ad30) 98mpp65 65 gpio, dev(ad30)
98mpp66 66 gpio, dev(ad31) 99mpp66 66 gpio, dev(ad31)
99
100Notes:
101* {1} vdd(cpu2-3-pd) only available on mv78460.
diff --git a/Documentation/devicetree/bindings/pinctrl/nxp,lpc1850-scu.txt b/Documentation/devicetree/bindings/pinctrl/nxp,lpc1850-scu.txt
new file mode 100644
index 000000000000..df0309c57505
--- /dev/null
+++ b/Documentation/devicetree/bindings/pinctrl/nxp,lpc1850-scu.txt
@@ -0,0 +1,57 @@
1NXP LPC18xx/43xx SCU pin controller Device Tree Bindings
2--------------------------------------------------------
3
4Required properties:
5- compatible : Should be "nxp,lpc1850-scu"
6- reg : Address and length of the register set for the device
7- clocks : Clock specifier (see clock bindings for details)
8
9The lpc1850-scu driver uses the generic pin multiplexing and generic pin
10configuration documented in pinctrl-bindings.txt.
11
12The following generic nodes are supported:
13 - function
14 - pins
15 - bias-disable
16 - bias-pull-up
17 - bias-pull-down
18 - drive-strength
19 - input-enable
20 - input-disable
21 - input-schmitt-enable
22 - input-schmitt-disable
23 - slew-rate
24
25Not all pins support all properties so either refer to the NXP 1850/4350
26user manual or the pin table in the pinctrl-lpc18xx driver for supported
27pin properties.
28
29Example:
30pinctrl: pinctrl@40086000 {
31 compatible = "nxp,lpc1850-scu";
32 reg = <0x40086000 0x1000>;
33 clocks = <&ccu1 CLK_CPU_SCU>;
34
35 i2c0_pins: i2c0-pins {
36 i2c0_pins_cfg {
37 pins = "i2c0_scl", "i2c0_sda";
38 function = "i2c0";
39 input-enable;
40 };
41 };
42
43 uart0_pins: uart0-pins {
44 uart0_rx_cfg {
45 pins = "pf_11";
46 function = "uart0";
47 bias-disable;
48 input-enable;
49 };
50
51 uart0_tx_cfg {
52 pins = "pf_10";
53 function = "uart0";
54 bias-disable;
55 };
56 };
57};
diff --git a/Documentation/devicetree/bindings/pinctrl/pinctrl-atlas7.txt b/Documentation/devicetree/bindings/pinctrl/pinctrl-atlas7.txt
new file mode 100644
index 000000000000..eecf028ff485
--- /dev/null
+++ b/Documentation/devicetree/bindings/pinctrl/pinctrl-atlas7.txt
@@ -0,0 +1,109 @@
1CSR SiRFatlas7 pinmux controller
2
3Required properties:
4- compatible : "sirf,atlas7-ioc"
5- reg : Address range of the pinctrl registers
6
7For example, pinctrl might have properties like the following:
8 pinctrl: ioc@18880000 {
9 compatible = "sirf,atlas7-ioc";
10 reg = <0x18880000 0x1000>;
11
12 a_ac97_pmx: ac97@0 {
13 ac97 {
14 groups = "audio_ac97_grp";
15 function = "audio_ac97";
16 };
17 };
18
19 ...
20
21 sd2_pmx: sd2@0 {
22 sd2 {
23 groups = "sd2_grp0";
24 function = "sd2";
25 };
26 };
27
28 ...
29
30
31 sample0_cfg: sample0@0 {
32 sample0 {
33 pins = "ldd_0", "ldd_1";
34 bias-pull-up;
35 };
36 };
37
38 sample1_cfg: sample1@0 {
39 sample1 {
40 pins = "ldd_2", "ldd_3";
41 input-schmitt-enable;
42 };
43 };
44
45 sample2_cfg: sample2@0 {
46 sample2 {
47 groups = "uart4_nopause_grp";
48 bias-pull-down;
49 };
50 };
51
52 sample3_cfg: sample3@0 {
53 sample3 {
54 pins = "ldd_4", "ldd_5";
55 drive-strength = <2>;
56 };
57 };
58 };
59
60Please refer to pinctrl-bindings.txt in this directory for details of the common
61pinctrl bindings used by client devices.
62
63SiRFatlas7's pinmux nodes act as a container for an abitrary number of subnodes.
64Each of these subnodes represents some desired configuration for a group of pins.
65
66Required subnode-properties:
67- groups : An array of strings. Each string contains the name of a group.
68- function: A string containing the name of the function to mux to the
69 group.
70
71 Valid values for group and function names can be found from looking at the
72 group and function arrays in driver files:
73 drivers/pinctrl/pinctrl-sirf.c
74
75For example, pinctrl might have subnodes like the following:
76 sd0_pmx: sd0@0 {
77 sd0 {
78 groups = "sd0_grp";
79 function = "sd0";
80 };
81 };
82
83 sd1_pmx0: sd1@0 {
84 sd1 {
85 groups = "sd1_grp0";
86 function = "sd1_m0";
87 };
88 };
89
90 sd1_pmx1: sd1@1 {
91 sd1 {
92 groups = "sd1_grp1";
93 function = "sd1_m1";
94 };
95 };
96
97For a specific board, if it wants to use sd1,
98it can add the following to its board-specific .dts file.
99sd1: sd@0x12340000 {
100 pinctrl-names = "default";
101 pinctrl-0 = <&sd1_pmx0>;
102}
103
104or
105
106sd1: sd@0x12340000 {
107 pinctrl-names = "default";
108 pinctrl-0 = <&sd1_pmx1>;
109}
diff --git a/Documentation/devicetree/bindings/pinctrl/pinctrl-mt65xx.txt b/Documentation/devicetree/bindings/pinctrl/pinctrl-mt65xx.txt
index 5868a0f7255d..0480bc31bfd7 100644
--- a/Documentation/devicetree/bindings/pinctrl/pinctrl-mt65xx.txt
+++ b/Documentation/devicetree/bindings/pinctrl/pinctrl-mt65xx.txt
@@ -3,9 +3,11 @@
3The Mediatek's Pin controller is used to control SoC pins. 3The Mediatek's Pin controller is used to control SoC pins.
4 4
5Required properties: 5Required properties:
6- compatible: value should be either of the following. 6- compatible: value should be one of the following.
7 (a) "mediatek,mt8135-pinctrl", compatible with mt8135 pinctrl. 7 (a) "mediatek,mt8135-pinctrl", compatible with mt8135 pinctrl.
8- mediatek,pctl-regmap: Should be a phandle of the syscfg node. 8 (b) "mediatek,mt8173-pinctrl", compatible with mt8173 pinctrl.
9 (c) "mediatek,mt6397-pinctrl", compatible with mt6397 pinctrl.
10 (d) "mediatek,mt8127-pinctrl", compatible with mt8127 pinctrl.
9- pins-are-numbered: Specify the subnodes are using numbered pinmux to 11- pins-are-numbered: Specify the subnodes are using numbered pinmux to
10 specify pins. 12 specify pins.
11- gpio-controller : Marks the device node as a gpio controller. 13- gpio-controller : Marks the device node as a gpio controller.
@@ -24,6 +26,9 @@ Required properties:
24 Only the following flags are supported: 26 Only the following flags are supported:
25 0 - GPIO_ACTIVE_HIGH 27 0 - GPIO_ACTIVE_HIGH
26 1 - GPIO_ACTIVE_LOW 28 1 - GPIO_ACTIVE_LOW
29
30Optional properties:
31- mediatek,pctl-regmap: Should be a phandle of the syscfg node.
27- reg: physicall address base for EINT registers 32- reg: physicall address base for EINT registers
28- interrupt-controller: Marks the device node as an interrupt controller 33- interrupt-controller: Marks the device node as an interrupt controller
29- #interrupt-cells: Should be two. 34- #interrupt-cells: Should be two.
diff --git a/Documentation/devicetree/bindings/pinctrl/qcom,msm8660-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/qcom,msm8660-pinctrl.txt
new file mode 100644
index 000000000000..77aa11790163
--- /dev/null
+++ b/Documentation/devicetree/bindings/pinctrl/qcom,msm8660-pinctrl.txt
@@ -0,0 +1,90 @@
1Qualcomm MSM8660 TLMM block
2
3Required properties:
4- compatible: "qcom,msm8660-pinctrl"
5- reg: Should be the base address and length of the TLMM block.
6- interrupts: Should be the parent IRQ of the TLMM block.
7- interrupt-controller: Marks the device node as an interrupt controller.
8- #interrupt-cells: Should be two.
9- gpio-controller: Marks the device node as a GPIO controller.
10- #gpio-cells : Should be two.
11 The first cell is the gpio pin number and the
12 second cell is used for optional parameters.
13
14Please refer to ../gpio/gpio.txt and ../interrupt-controller/interrupts.txt for
15a general description of GPIO and interrupt bindings.
16
17Please refer to pinctrl-bindings.txt in this directory for details of the
18common pinctrl bindings used by client devices, including the meaning of the
19phrase "pin configuration node".
20
21Qualcomm's pin configuration nodes act as a container for an arbitrary number of
22subnodes. Each of these subnodes represents some desired configuration for a
23pin, a group, or a list of pins or groups. This configuration can include the
24mux function to select on those pin(s)/group(s), and various pin configuration
25parameters, such as pull-up, drive strength, etc.
26
27The name of each subnode is not important; all subnodes should be enumerated
28and processed purely based on their content.
29
30Each subnode only affects those parameters that are explicitly listed. In
31other words, a subnode that lists a mux function but no pin configuration
32parameters implies no information about any pin configuration parameters.
33Similarly, a pin subnode that describes a pullup parameter implies no
34information about e.g. the mux function.
35
36
37The following generic properties as defined in pinctrl-bindings.txt are valid
38to specify in a pin configuration subnode:
39
40 pins, function, bias-disable, bias-pull-down, bias-pull,up, drive-strength,
41 output-low, output-high.
42
43Non-empty subnodes must specify the 'pins' property.
44
45Valid values for pins are:
46 gpio0-gpio172, sdc3_clk, sdc3_cmd, sdc3_data sdc4_clk, sdc4_cmd, sdc4_data
47
48Valid values for function are:
49 gpio, cam_mclk, dsub, ext_gps, gp_clk_0a, gp_clk_0b, gp_clk_1a, gp_clk_1b,
50 gp_clk_2a, gp_clk_2b, gp_mn, gsbi1, gsbi1_spi_cs1_n, gsbi1_spi_cs2a_n,
51 gsbi1_spi_cs2b_n, gsbi1_spi_cs3_n, gsbi2, gsbi2_spi_cs1_n, gsbi2_spi_cs2_n,
52 gsbi2_spi_cs3_n, gsbi3, gsbi3_spi_cs1_n, gsbi3_spi_cs2_n, gsbi3_spi_cs3_n,
53 gsbi4, gsbi5, gsbi6, gsbi7, gsbi8, gsbi9, gsbi10, gsbi11, gsbi12, hdmi, i2s,
54 lcdc, mdp_vsync, mi2s, pcm, ps_hold, sdc1, sdc2, sdc5, tsif1, tsif2, usb_fs1,
55 usb_fs1_oe_n, usb_fs2, usb_fs2_oe_n, vfe, vsens_alarm,
56
57Example:
58
59 msmgpio: pinctrl@800000 {
60 compatible = "qcom,msm8660-pinctrl";
61 reg = <0x800000 0x4000>;
62
63 gpio-controller;
64 #gpio-cells = <2>;
65 interrupt-controller;
66 #interrupt-cells = <2>;
67 interrupts = <0 16 0x4>;
68
69 pinctrl-names = "default";
70 pinctrl-0 = <&gsbi12_uart>;
71
72 gsbi12_uart: gsbi12-uart {
73 mux {
74 pins = "gpio117", "gpio118";
75 function = "gsbi12";
76 };
77
78 tx {
79 pins = "gpio118";
80 drive-strength = <8>;
81 bias-disable;
82 };
83
84 rx {
85 pins = "gpio117";
86 drive-strength = <2>;
87 bias-pull-up;
88 };
89 };
90 };
diff --git a/Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt
index bfe72ec055e3..51cee44fc140 100644
--- a/Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt
+++ b/Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt
@@ -16,7 +16,9 @@ Required Properties:
16 - "renesas,pfc-r8a7778": for R8A7778 (R-Mobile M1) compatible pin-controller. 16 - "renesas,pfc-r8a7778": for R8A7778 (R-Mobile M1) compatible pin-controller.
17 - "renesas,pfc-r8a7779": for R8A7779 (R-Car H1) compatible pin-controller. 17 - "renesas,pfc-r8a7779": for R8A7779 (R-Car H1) compatible pin-controller.
18 - "renesas,pfc-r8a7790": for R8A7790 (R-Car H2) compatible pin-controller. 18 - "renesas,pfc-r8a7790": for R8A7790 (R-Car H2) compatible pin-controller.
19 - "renesas,pfc-r8a7791": for R8A7791 (R-Car M2) compatible pin-controller. 19 - "renesas,pfc-r8a7791": for R8A7791 (R-Car M2-W) compatible pin-controller.
20 - "renesas,pfc-r8a7793": for R8A7793 (R-Car M2-N) compatible pin-controller.
21 - "renesas,pfc-r8a7794": for R8A7794 (R-Car E2) compatible pin-controller.
20 - "renesas,pfc-sh73a0": for SH73A0 (SH-Mobile AG5) compatible pin-controller. 22 - "renesas,pfc-sh73a0": for SH73A0 (SH-Mobile AG5) compatible pin-controller.
21 23
22 - reg: Base address and length of each memory resource used by the pin 24 - reg: Base address and length of each memory resource used by the pin
diff --git a/Documentation/devicetree/bindings/pinctrl/rockchip,pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/rockchip,pinctrl.txt
index 388b213249fd..391ef4be8d50 100644
--- a/Documentation/devicetree/bindings/pinctrl/rockchip,pinctrl.txt
+++ b/Documentation/devicetree/bindings/pinctrl/rockchip,pinctrl.txt
@@ -21,14 +21,15 @@ defined as gpio sub-nodes of the pinmux controller.
21Required properties for iomux controller: 21Required properties for iomux controller:
22 - compatible: one of "rockchip,rk2928-pinctrl", "rockchip,rk3066a-pinctrl" 22 - compatible: one of "rockchip,rk2928-pinctrl", "rockchip,rk3066a-pinctrl"
23 "rockchip,rk3066b-pinctrl", "rockchip,rk3188-pinctrl" 23 "rockchip,rk3066b-pinctrl", "rockchip,rk3188-pinctrl"
24 "rockchip,rk3288-pinctrl" 24 "rockchip,rk3288-pinctrl", "rockchip,rk3368-pinctrl"
25 - rockchip,grf: phandle referencing a syscon providing the 25 - rockchip,grf: phandle referencing a syscon providing the
26 "general register files" 26 "general register files"
27 27
28Optional properties for iomux controller: 28Optional properties for iomux controller:
29 - rockchip,pmu: phandle referencing a syscon providing the pmu registers 29 - rockchip,pmu: phandle referencing a syscon providing the pmu registers
30 as some SoCs carry parts of the iomux controller registers there. 30 as some SoCs carry parts of the iomux controller registers there.
31 Required for at least rk3188 and rk3288. 31 Required for at least rk3188 and rk3288. On the rk3368 this should
32 point to the PMUGRF syscon.
32 33
33Deprecated properties for iomux controller: 34Deprecated properties for iomux controller:
34 - reg: first element is the general register space of the iomux controller 35 - reg: first element is the general register space of the iomux controller
diff --git a/Documentation/devicetree/bindings/pinctrl/xlnx,zynq-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/xlnx,zynq-pinctrl.txt
index b7b55a964f65..f488b0f77406 100644
--- a/Documentation/devicetree/bindings/pinctrl/xlnx,zynq-pinctrl.txt
+++ b/Documentation/devicetree/bindings/pinctrl/xlnx,zynq-pinctrl.txt
@@ -45,8 +45,9 @@ to specify in a pinconf subnode:
45 45
46 Valid values for groups are: 46 Valid values for groups are:
47 ethernet0_0_grp, ethernet1_0_grp, mdio0_0_grp, mdio1_0_grp, 47 ethernet0_0_grp, ethernet1_0_grp, mdio0_0_grp, mdio1_0_grp,
48 qspi0_0_grp, qspi1_0_grp, qspi_fbclk, qspi_cs1_grp, spi0_0_grp, 48 qspi0_0_grp, qspi1_0_grp, qspi_fbclk, qspi_cs1_grp, spi0_0_grp - spi0_2_grp,
49 spi0_1_grp - spi0_2_grp, spi1_0_grp - spi1_3_grp, sdio0_0_grp - sdio0_2_grp, 49 spi0_X_ssY (X=0..2, Y=0..2), spi1_0_grp - spi1_3_grp,
50 spi1_X_ssY (X=0..3, Y=0..2), sdio0_0_grp - sdio0_2_grp,
50 sdio1_0_grp - sdio1_3_grp, sdio0_emio_wp, sdio0_emio_cd, sdio1_emio_wp, 51 sdio1_0_grp - sdio1_3_grp, sdio0_emio_wp, sdio0_emio_cd, sdio1_emio_wp,
51 sdio1_emio_cd, smc0_nor, smc0_nor_cs1_grp, smc0_nor_addr25_grp, smc0_nand, 52 sdio1_emio_cd, smc0_nor, smc0_nor_cs1_grp, smc0_nor_addr25_grp, smc0_nand,
52 can0_0_grp - can0_10_grp, can1_0_grp - can1_11_grp, uart0_0_grp - uart0_10_grp, 53 can0_0_grp - can0_10_grp, can1_0_grp - can1_11_grp, uart0_0_grp - uart0_10_grp,
@@ -59,7 +60,7 @@ to specify in a pinconf subnode:
59 60
60 Valid values for function are: 61 Valid values for function are:
61 ethernet0, ethernet1, mdio0, mdio1, qspi0, qspi1, qspi_fbclk, qspi_cs1, 62 ethernet0, ethernet1, mdio0, mdio1, qspi0, qspi1, qspi_fbclk, qspi_cs1,
62 spi0, spi1, sdio0, sdio0_pc, sdio0_cd, sdio0_wp, 63 spi0, spi0_ss, spi1, spi1_ss, sdio0, sdio0_pc, sdio0_cd, sdio0_wp,
63 sdio1, sdio1_pc, sdio1_cd, sdio1_wp, 64 sdio1, sdio1_pc, sdio1_cd, sdio1_wp,
64 smc0_nor, smc0_nor_cs1, smc0_nor_addr25, smc0_nand, can0, can1, uart0, uart1, 65 smc0_nor, smc0_nor_cs1, smc0_nor_addr25, smc0_nand, can0, can1, uart0, uart1,
65 i2c0, i2c1, ttc0, ttc1, swdt0, gpio0, usb0, usb1 66 i2c0, i2c1, ttc0, ttc1, swdt0, gpio0, usb0, usb1
diff --git a/Documentation/pinctrl.txt b/Documentation/pinctrl.txt
index a9b47163bb5d..4976389e432d 100644
--- a/Documentation/pinctrl.txt
+++ b/Documentation/pinctrl.txt
@@ -714,6 +714,7 @@ static struct pinmux_ops foo_pmxops = {
714 .get_function_name = foo_get_fname, 714 .get_function_name = foo_get_fname,
715 .get_function_groups = foo_get_groups, 715 .get_function_groups = foo_get_groups,
716 .set_mux = foo_set_mux, 716 .set_mux = foo_set_mux,
717 .strict = true,
717}; 718};
718 719
719/* Pinmux operations are handled by some pin controller */ 720/* Pinmux operations are handled by some pin controller */
@@ -830,6 +831,11 @@ separate memory range only intended for GPIO driving, and the register
830range dealing with pin config and pin multiplexing get placed into a 831range dealing with pin config and pin multiplexing get placed into a
831different memory range and a separate section of the data sheet. 832different memory range and a separate section of the data sheet.
832 833
834A flag "strict" in struct pinctrl_desc is available to check and deny
835simultaneous access to the same pin from GPIO and pin multiplexing
836consumers on hardware of this type. The pinctrl driver should set this flag
837accordingly.
838
833(B) 839(B)
834 840
835 pin config 841 pin config
@@ -850,6 +856,11 @@ possible that the GPIO, pin config and pin multiplex registers are placed into
850the same memory range and the same section of the data sheet, although that 856the same memory range and the same section of the data sheet, although that
851need not be the case. 857need not be the case.
852 858
859In some pin controllers, although the physical pins are designed in the same
860way as (B), the GPIO function still can't be enabled at the same time as the
861peripheral functions. So again the "strict" flag should be set, denying
862simultaneous activation by GPIO and other muxed in devices.
863
853From a kernel point of view, however, these are different aspects of the 864From a kernel point of view, however, these are different aspects of the
854hardware and shall be put into different subsystems: 865hardware and shall be put into different subsystems:
855 866
diff --git a/drivers/gpio/gpio-bcm-kona.c b/drivers/gpio/gpio-bcm-kona.c
index a6e79225886d..8333f878919c 100644
--- a/drivers/gpio/gpio-bcm-kona.c
+++ b/drivers/gpio/gpio-bcm-kona.c
@@ -540,7 +540,7 @@ static void bcm_kona_gpio_irq_unmap(struct irq_domain *d, unsigned int irq)
540 irq_set_chip_data(irq, NULL); 540 irq_set_chip_data(irq, NULL);
541} 541}
542 542
543static struct irq_domain_ops bcm_kona_irq_ops = { 543static const struct irq_domain_ops bcm_kona_irq_ops = {
544 .map = bcm_kona_gpio_irq_map, 544 .map = bcm_kona_gpio_irq_map,
545 .unmap = bcm_kona_gpio_irq_unmap, 545 .unmap = bcm_kona_gpio_irq_unmap,
546 .xlate = irq_domain_xlate_twocell, 546 .xlate = irq_domain_xlate_twocell,
diff --git a/drivers/gpio/gpio-em.c b/drivers/gpio/gpio-em.c
index 3cfcfc620c8e..fbf287307c4c 100644
--- a/drivers/gpio/gpio-em.c
+++ b/drivers/gpio/gpio-em.c
@@ -266,7 +266,7 @@ static int em_gio_irq_domain_map(struct irq_domain *h, unsigned int irq,
266 return 0; 266 return 0;
267} 267}
268 268
269static struct irq_domain_ops em_gio_irq_domain_ops = { 269static const struct irq_domain_ops em_gio_irq_domain_ops = {
270 .map = em_gio_irq_domain_map, 270 .map = em_gio_irq_domain_map,
271 .xlate = irq_domain_xlate_twocell, 271 .xlate = irq_domain_xlate_twocell,
272}; 272};
diff --git a/drivers/gpio/gpio-grgpio.c b/drivers/gpio/gpio-grgpio.c
index 35a02770c8b0..0a8f7617e72e 100644
--- a/drivers/gpio/gpio-grgpio.c
+++ b/drivers/gpio/gpio-grgpio.c
@@ -332,7 +332,7 @@ static void grgpio_irq_unmap(struct irq_domain *d, unsigned int irq)
332 spin_unlock_irqrestore(&priv->bgc.lock, flags); 332 spin_unlock_irqrestore(&priv->bgc.lock, flags);
333} 333}
334 334
335static struct irq_domain_ops grgpio_irq_domain_ops = { 335static const struct irq_domain_ops grgpio_irq_domain_ops = {
336 .map = grgpio_irq_map, 336 .map = grgpio_irq_map,
337 .unmap = grgpio_irq_unmap, 337 .unmap = grgpio_irq_unmap,
338}; 338};
diff --git a/drivers/gpio/gpio-mpc8xxx.c b/drivers/gpio/gpio-mpc8xxx.c
index a65b75161aa4..20aa66f34f6e 100644
--- a/drivers/gpio/gpio-mpc8xxx.c
+++ b/drivers/gpio/gpio-mpc8xxx.c
@@ -329,7 +329,7 @@ static int mpc8xxx_gpio_irq_map(struct irq_domain *h, unsigned int irq,
329 return 0; 329 return 0;
330} 330}
331 331
332static struct irq_domain_ops mpc8xxx_gpio_irq_ops = { 332static const struct irq_domain_ops mpc8xxx_gpio_irq_ops = {
333 .map = mpc8xxx_gpio_irq_map, 333 .map = mpc8xxx_gpio_irq_map,
334 .xlate = irq_domain_xlate_twocell, 334 .xlate = irq_domain_xlate_twocell,
335}; 335};
diff --git a/drivers/gpio/gpio-sa1100.c b/drivers/gpio/gpio-sa1100.c
index bec397a60204..3fa22dade243 100644
--- a/drivers/gpio/gpio-sa1100.c
+++ b/drivers/gpio/gpio-sa1100.c
@@ -160,7 +160,7 @@ static int sa1100_gpio_irqdomain_map(struct irq_domain *d,
160 return 0; 160 return 0;
161} 161}
162 162
163static struct irq_domain_ops sa1100_gpio_irqdomain_ops = { 163static const struct irq_domain_ops sa1100_gpio_irqdomain_ops = {
164 .map = sa1100_gpio_irqdomain_map, 164 .map = sa1100_gpio_irqdomain_map,
165 .xlate = irq_domain_xlate_onetwocell, 165 .xlate = irq_domain_xlate_onetwocell,
166}; 166};
diff --git a/drivers/gpio/gpio-sodaville.c b/drivers/gpio/gpio-sodaville.c
index d8da36cd8123..65bc9f47a68e 100644
--- a/drivers/gpio/gpio-sodaville.c
+++ b/drivers/gpio/gpio-sodaville.c
@@ -125,7 +125,7 @@ static int sdv_xlate(struct irq_domain *h, struct device_node *node,
125 return 0; 125 return 0;
126} 126}
127 127
128static struct irq_domain_ops irq_domain_sdv_ops = { 128static const struct irq_domain_ops irq_domain_sdv_ops = {
129 .xlate = sdv_xlate, 129 .xlate = sdv_xlate,
130}; 130};
131 131
diff --git a/drivers/pinctrl/Kconfig b/drivers/pinctrl/Kconfig
index aeb5729fbda6..100d9ac2ae1f 100644
--- a/drivers/pinctrl/Kconfig
+++ b/drivers/pinctrl/Kconfig
@@ -88,6 +88,15 @@ config PINCTRL_LANTIQ
88 select PINMUX 88 select PINMUX
89 select PINCONF 89 select PINCONF
90 90
91config PINCTRL_LPC18XX
92 bool "NXP LPC18XX/43XX SCU pinctrl driver"
93 depends on OF && (ARCH_LPC18XX || COMPILE_TEST)
94 default ARCH_LPC18XX
95 select PINMUX
96 select GENERIC_PINCONF
97 help
98 Pinctrl driver for NXP LPC18xx/43xx System Control Unit (SCU).
99
91config PINCTRL_FALCON 100config PINCTRL_FALCON
92 bool 101 bool
93 depends on SOC_FALCON 102 depends on SOC_FALCON
@@ -123,7 +132,17 @@ config PINCTRL_SIRF
123 bool "CSR SiRFprimaII pin controller driver" 132 bool "CSR SiRFprimaII pin controller driver"
124 depends on ARCH_SIRF 133 depends on ARCH_SIRF
125 select PINMUX 134 select PINMUX
135 select PINCONF
136 select GENERIC_PINCONF
137 select GPIOLIB_IRQCHIP
138
139config PINCTRL_PISTACHIO
140 def_bool y if MACH_PISTACHIO
141 depends on GPIOLIB
142 select PINMUX
143 select GENERIC_PINCONF
126 select GPIOLIB_IRQCHIP 144 select GPIOLIB_IRQCHIP
145 select OF_GPIO
127 146
128config PINCTRL_ST 147config PINCTRL_ST
129 bool 148 bool
diff --git a/drivers/pinctrl/Makefile b/drivers/pinctrl/Makefile
index 6eadf04a33b3..f4216d9347e2 100644
--- a/drivers/pinctrl/Makefile
+++ b/drivers/pinctrl/Makefile
@@ -18,6 +18,7 @@ obj-$(CONFIG_PINCTRL_AMD) += pinctrl-amd.o
18obj-$(CONFIG_PINCTRL_FALCON) += pinctrl-falcon.o 18obj-$(CONFIG_PINCTRL_FALCON) += pinctrl-falcon.o
19obj-$(CONFIG_PINCTRL_MESON) += meson/ 19obj-$(CONFIG_PINCTRL_MESON) += meson/
20obj-$(CONFIG_PINCTRL_PALMAS) += pinctrl-palmas.o 20obj-$(CONFIG_PINCTRL_PALMAS) += pinctrl-palmas.o
21obj-$(CONFIG_PINCTRL_PISTACHIO) += pinctrl-pistachio.o
21obj-$(CONFIG_PINCTRL_ROCKCHIP) += pinctrl-rockchip.o 22obj-$(CONFIG_PINCTRL_ROCKCHIP) += pinctrl-rockchip.o
22obj-$(CONFIG_PINCTRL_SINGLE) += pinctrl-single.o 23obj-$(CONFIG_PINCTRL_SINGLE) += pinctrl-single.o
23obj-$(CONFIG_PINCTRL_SIRF) += sirf/ 24obj-$(CONFIG_PINCTRL_SIRF) += sirf/
@@ -34,6 +35,7 @@ obj-$(CONFIG_PINCTRL_U300) += pinctrl-u300.o
34obj-$(CONFIG_PINCTRL_COH901) += pinctrl-coh901.o 35obj-$(CONFIG_PINCTRL_COH901) += pinctrl-coh901.o
35obj-$(CONFIG_PINCTRL_XWAY) += pinctrl-xway.o 36obj-$(CONFIG_PINCTRL_XWAY) += pinctrl-xway.o
36obj-$(CONFIG_PINCTRL_LANTIQ) += pinctrl-lantiq.o 37obj-$(CONFIG_PINCTRL_LANTIQ) += pinctrl-lantiq.o
38obj-$(CONFIG_PINCTRL_LPC18XX) += pinctrl-lpc18xx.o
37obj-$(CONFIG_PINCTRL_TB10X) += pinctrl-tb10x.o 39obj-$(CONFIG_PINCTRL_TB10X) += pinctrl-tb10x.o
38obj-$(CONFIG_PINCTRL_ST) += pinctrl-st.o 40obj-$(CONFIG_PINCTRL_ST) += pinctrl-st.o
39obj-$(CONFIG_PINCTRL_ZYNQ) += pinctrl-zynq.o 41obj-$(CONFIG_PINCTRL_ZYNQ) += pinctrl-zynq.o
diff --git a/drivers/pinctrl/bcm/pinctrl-bcm281xx.c b/drivers/pinctrl/bcm/pinctrl-bcm281xx.c
index 9641f1c7617e..c3c692e508e8 100644
--- a/drivers/pinctrl/bcm/pinctrl-bcm281xx.c
+++ b/drivers/pinctrl/bcm/pinctrl-bcm281xx.c
@@ -1425,9 +1425,9 @@ static int __init bcm281xx_pinctrl_probe(struct platform_device *pdev)
1425 pctl = pinctrl_register(&bcm281xx_pinctrl_desc, 1425 pctl = pinctrl_register(&bcm281xx_pinctrl_desc,
1426 &pdev->dev, 1426 &pdev->dev,
1427 pdata); 1427 pdata);
1428 if (!pctl) { 1428 if (IS_ERR(pctl)) {
1429 dev_err(&pdev->dev, "Failed to register pinctrl\n"); 1429 dev_err(&pdev->dev, "Failed to register pinctrl\n");
1430 return -ENODEV; 1430 return PTR_ERR(pctl);
1431 } 1431 }
1432 1432
1433 platform_set_drvdata(pdev, pdata); 1433 platform_set_drvdata(pdev, pdata);
diff --git a/drivers/pinctrl/bcm/pinctrl-bcm2835.c b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
index 8d908e3f42c3..efcf2a2b3975 100644
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
@@ -1036,9 +1036,9 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev)
1036 } 1036 }
1037 1037
1038 pc->pctl_dev = pinctrl_register(&bcm2835_pinctrl_desc, dev, pc); 1038 pc->pctl_dev = pinctrl_register(&bcm2835_pinctrl_desc, dev, pc);
1039 if (!pc->pctl_dev) { 1039 if (IS_ERR(pc->pctl_dev)) {
1040 gpiochip_remove(&pc->gpio_chip); 1040 gpiochip_remove(&pc->gpio_chip);
1041 return -EINVAL; 1041 return PTR_ERR(pc->pctl_dev);
1042 } 1042 }
1043 1043
1044 pc->gpio_range = bcm2835_pinctrl_gpio_range; 1044 pc->gpio_range = bcm2835_pinctrl_gpio_range;
diff --git a/drivers/pinctrl/bcm/pinctrl-cygnus-gpio.c b/drivers/pinctrl/bcm/pinctrl-cygnus-gpio.c
index e406e3d8c1c7..7d9482bf8252 100644
--- a/drivers/pinctrl/bcm/pinctrl-cygnus-gpio.c
+++ b/drivers/pinctrl/bcm/pinctrl-cygnus-gpio.c
@@ -38,7 +38,7 @@
38#define CYGNUS_GPIO_DATA_IN_OFFSET 0x00 38#define CYGNUS_GPIO_DATA_IN_OFFSET 0x00
39#define CYGNUS_GPIO_DATA_OUT_OFFSET 0x04 39#define CYGNUS_GPIO_DATA_OUT_OFFSET 0x04
40#define CYGNUS_GPIO_OUT_EN_OFFSET 0x08 40#define CYGNUS_GPIO_OUT_EN_OFFSET 0x08
41#define CYGNUS_GPIO_IN_TYPE_OFFSET 0x0c 41#define CYGNUS_GPIO_INT_TYPE_OFFSET 0x0c
42#define CYGNUS_GPIO_INT_DE_OFFSET 0x10 42#define CYGNUS_GPIO_INT_DE_OFFSET 0x10
43#define CYGNUS_GPIO_INT_EDGE_OFFSET 0x14 43#define CYGNUS_GPIO_INT_EDGE_OFFSET 0x14
44#define CYGNUS_GPIO_INT_MSK_OFFSET 0x18 44#define CYGNUS_GPIO_INT_MSK_OFFSET 0x18
@@ -264,7 +264,7 @@ static int cygnus_gpio_irq_set_type(struct irq_data *d, unsigned int type)
264 } 264 }
265 265
266 spin_lock_irqsave(&chip->lock, flags); 266 spin_lock_irqsave(&chip->lock, flags);
267 cygnus_set_bit(chip, CYGNUS_GPIO_IN_TYPE_OFFSET, gpio, 267 cygnus_set_bit(chip, CYGNUS_GPIO_INT_TYPE_OFFSET, gpio,
268 level_triggered); 268 level_triggered);
269 cygnus_set_bit(chip, CYGNUS_GPIO_INT_DE_OFFSET, gpio, dual_edge); 269 cygnus_set_bit(chip, CYGNUS_GPIO_INT_DE_OFFSET, gpio, dual_edge);
270 cygnus_set_bit(chip, CYGNUS_GPIO_INT_EDGE_OFFSET, gpio, 270 cygnus_set_bit(chip, CYGNUS_GPIO_INT_EDGE_OFFSET, gpio,
@@ -750,9 +750,9 @@ static int cygnus_gpio_register_pinconf(struct cygnus_gpio *chip)
750 pctldesc->confops = &cygnus_pconf_ops; 750 pctldesc->confops = &cygnus_pconf_ops;
751 751
752 chip->pctl = pinctrl_register(pctldesc, chip->dev, chip); 752 chip->pctl = pinctrl_register(pctldesc, chip->dev, chip);
753 if (!chip->pctl) { 753 if (IS_ERR(chip->pctl)) {
754 dev_err(chip->dev, "unable to register pinctrl device\n"); 754 dev_err(chip->dev, "unable to register pinctrl device\n");
755 return -EINVAL; 755 return PTR_ERR(chip->pctl);
756 } 756 }
757 757
758 return 0; 758 return 0;
diff --git a/drivers/pinctrl/bcm/pinctrl-cygnus-mux.c b/drivers/pinctrl/bcm/pinctrl-cygnus-mux.c
index f9a9283caf81..9728f3db9126 100644
--- a/drivers/pinctrl/bcm/pinctrl-cygnus-mux.c
+++ b/drivers/pinctrl/bcm/pinctrl-cygnus-mux.c
@@ -989,9 +989,9 @@ static int cygnus_pinmux_probe(struct platform_device *pdev)
989 989
990 pinctrl->pctl = pinctrl_register(&cygnus_pinctrl_desc, &pdev->dev, 990 pinctrl->pctl = pinctrl_register(&cygnus_pinctrl_desc, &pdev->dev,
991 pinctrl); 991 pinctrl);
992 if (!pinctrl->pctl) { 992 if (IS_ERR(pinctrl->pctl)) {
993 dev_err(&pdev->dev, "unable to register Cygnus IOMUX pinctrl\n"); 993 dev_err(&pdev->dev, "unable to register Cygnus IOMUX pinctrl\n");
994 return -EINVAL; 994 return PTR_ERR(pinctrl->pctl);
995 } 995 }
996 996
997 return 0; 997 return 0;
diff --git a/drivers/pinctrl/berlin/berlin-bg2.c b/drivers/pinctrl/berlin/berlin-bg2.c
index b71a6fffef1b..b467e6e14f8a 100644
--- a/drivers/pinctrl/berlin/berlin-bg2.c
+++ b/drivers/pinctrl/berlin/berlin-bg2.c
@@ -20,24 +20,24 @@
20static const struct berlin_desc_group berlin2_soc_pinctrl_groups[] = { 20static const struct berlin_desc_group berlin2_soc_pinctrl_groups[] = {
21 /* G */ 21 /* G */
22 BERLIN_PINCTRL_GROUP("G0", 0x00, 0x1, 0x00, 22 BERLIN_PINCTRL_GROUP("G0", 0x00, 0x1, 0x00,
23 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), 23 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SS0n */
24 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")), 24 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
25 BERLIN_PINCTRL_GROUP("G1", 0x00, 0x2, 0x01, 25 BERLIN_PINCTRL_GROUP("G1", 0x00, 0x2, 0x01,
26 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), 26 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SS1n */
27 BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), 27 BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
28 BERLIN_PINCTRL_FUNCTION(0x2, "usb1")), 28 BERLIN_PINCTRL_FUNCTION(0x2, "usb1")),
29 BERLIN_PINCTRL_GROUP("G2", 0x00, 0x2, 0x02, 29 BERLIN_PINCTRL_GROUP("G2", 0x00, 0x2, 0x02,
30 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), 30 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
31 BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), 31 BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), /* SS2n */
32 BERLIN_PINCTRL_FUNCTION(0x2, "pwm"), 32 BERLIN_PINCTRL_FUNCTION(0x2, "pwm"),
33 BERLIN_PINCTRL_FUNCTION(0x3, "i2s0")), 33 BERLIN_PINCTRL_FUNCTION(0x3, "i2s0")),
34 BERLIN_PINCTRL_GROUP("G3", 0x00, 0x2, 0x04, 34 BERLIN_PINCTRL_GROUP("G3", 0x00, 0x2, 0x04,
35 BERLIN_PINCTRL_FUNCTION(0x0, "soc"), 35 BERLIN_PINCTRL_FUNCTION(0x0, "soc"),
36 BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), 36 BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), /* SS3n */
37 BERLIN_PINCTRL_FUNCTION(0x2, "gpio"), 37 BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
38 BERLIN_PINCTRL_FUNCTION(0x3, "i2s1")), 38 BERLIN_PINCTRL_FUNCTION(0x3, "i2s1")),
39 BERLIN_PINCTRL_GROUP("G4", 0x00, 0x2, 0x06, 39 BERLIN_PINCTRL_GROUP("G4", 0x00, 0x2, 0x06,
40 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), 40 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* CLK/SDI/SDO */
41 BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), 41 BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
42 BERLIN_PINCTRL_FUNCTION(0x2, "pwm")), 42 BERLIN_PINCTRL_FUNCTION(0x2, "pwm")),
43 BERLIN_PINCTRL_GROUP("G5", 0x00, 0x3, 0x08, 43 BERLIN_PINCTRL_GROUP("G5", 0x00, 0x3, 0x08,
@@ -163,15 +163,15 @@ static const struct berlin_desc_group berlin2_sysmgr_pinctrl_groups[] = {
163 /* GSM */ 163 /* GSM */
164 BERLIN_PINCTRL_GROUP("GSM0", 0x40, 0x2, 0x00, 164 BERLIN_PINCTRL_GROUP("GSM0", 0x40, 0x2, 0x00,
165 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), 165 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
166 BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), 166 BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* SS0n */
167 BERLIN_PINCTRL_FUNCTION(0x2, "eth1")), 167 BERLIN_PINCTRL_FUNCTION(0x2, "eth1")),
168 BERLIN_PINCTRL_GROUP("GSM1", 0x40, 0x2, 0x02, 168 BERLIN_PINCTRL_GROUP("GSM1", 0x40, 0x2, 0x02,
169 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), 169 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
170 BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), 170 BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* SS1n */
171 BERLIN_PINCTRL_FUNCTION(0x2, "eth1")), 171 BERLIN_PINCTRL_FUNCTION(0x2, "eth1")),
172 BERLIN_PINCTRL_GROUP("GSM2", 0x40, 0x2, 0x04, 172 BERLIN_PINCTRL_GROUP("GSM2", 0x40, 0x2, 0x04,
173 BERLIN_PINCTRL_FUNCTION(0x0, "twsi2"), 173 BERLIN_PINCTRL_FUNCTION(0x0, "twsi2"),
174 BERLIN_PINCTRL_FUNCTION(0x1, "spi2")), 174 BERLIN_PINCTRL_FUNCTION(0x1, "spi2")), /* SS2n/SS3n */
175 BERLIN_PINCTRL_GROUP("GSM3", 0x40, 0x2, 0x06, 175 BERLIN_PINCTRL_GROUP("GSM3", 0x40, 0x2, 0x06,
176 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), 176 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
177 BERLIN_PINCTRL_FUNCTION(0x1, "uart0"), /* CTS/RTS */ 177 BERLIN_PINCTRL_FUNCTION(0x1, "uart0"), /* CTS/RTS */
@@ -187,7 +187,7 @@ static const struct berlin_desc_group berlin2_sysmgr_pinctrl_groups[] = {
187 BERLIN_PINCTRL_FUNCTION(0x3, "twsi3")), 187 BERLIN_PINCTRL_FUNCTION(0x3, "twsi3")),
188 BERLIN_PINCTRL_GROUP("GSM6", 0x40, 0x2, 0x0c, 188 BERLIN_PINCTRL_GROUP("GSM6", 0x40, 0x2, 0x0c,
189 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), 189 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
190 BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), 190 BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* CLK/SDO */
191 BERLIN_PINCTRL_FUNCTION(0x1, "clki")), 191 BERLIN_PINCTRL_FUNCTION(0x1, "clki")),
192 BERLIN_PINCTRL_GROUP("GSM7", 0x40, 0x1, 0x0e, 192 BERLIN_PINCTRL_GROUP("GSM7", 0x40, 0x1, 0x0e,
193 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), 193 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
diff --git a/drivers/pinctrl/berlin/berlin-bg2cd.c b/drivers/pinctrl/berlin/berlin-bg2cd.c
index 19ac5a22c947..a8b98083a031 100644
--- a/drivers/pinctrl/berlin/berlin-bg2cd.c
+++ b/drivers/pinctrl/berlin/berlin-bg2cd.c
@@ -68,17 +68,17 @@ static const struct berlin_desc_group berlin2cd_soc_pinctrl_groups[] = {
68 BERLIN_PINCTRL_FUNCTION(0x1, "twsi1"), 68 BERLIN_PINCTRL_FUNCTION(0x1, "twsi1"),
69 BERLIN_PINCTRL_FUNCTION(0x2, "gpio")), 69 BERLIN_PINCTRL_FUNCTION(0x2, "gpio")),
70 BERLIN_PINCTRL_GROUP("G8", 0x00, 0x3, 0x10, 70 BERLIN_PINCTRL_GROUP("G8", 0x00, 0x3, 0x10,
71 BERLIN_PINCTRL_FUNCTION(0x0, "ss0"), 71 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SS0n */
72 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")), 72 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
73 BERLIN_PINCTRL_GROUP("G9", 0x00, 0x3, 0x13, 73 BERLIN_PINCTRL_GROUP("G9", 0x00, 0x3, 0x13,
74 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), 74 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
75 BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), 75 BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), /* SS1n/SS2n */
76 BERLIN_PINCTRL_FUNCTION(0x2, "twsi0")), 76 BERLIN_PINCTRL_FUNCTION(0x2, "twsi0")),
77 BERLIN_PINCTRL_GROUP("G10", 0x00, 0x2, 0x16, 77 BERLIN_PINCTRL_GROUP("G10", 0x00, 0x2, 0x16,
78 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), 78 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* CLK */
79 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")), 79 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
80 BERLIN_PINCTRL_GROUP("G11", 0x00, 0x2, 0x18, 80 BERLIN_PINCTRL_GROUP("G11", 0x00, 0x2, 0x18,
81 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), 81 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SDI/SDO */
82 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")), 82 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
83 BERLIN_PINCTRL_GROUP("G12", 0x00, 0x3, 0x1a, 83 BERLIN_PINCTRL_GROUP("G12", 0x00, 0x3, 0x1a,
84 BERLIN_PINCTRL_FUNCTION(0x0, "usb1"), 84 BERLIN_PINCTRL_FUNCTION(0x0, "usb1"),
diff --git a/drivers/pinctrl/berlin/berlin-bg2q.c b/drivers/pinctrl/berlin/berlin-bg2q.c
index bd9662e57ad3..65fb8711a42f 100644
--- a/drivers/pinctrl/berlin/berlin-bg2q.c
+++ b/drivers/pinctrl/berlin/berlin-bg2q.c
@@ -59,21 +59,21 @@ static const struct berlin_desc_group berlin2q_soc_pinctrl_groups[] = {
59 BERLIN_PINCTRL_FUNCTION(0x2, "gpio"), 59 BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
60 BERLIN_PINCTRL_FUNCTION(0x3, "eddc")), 60 BERLIN_PINCTRL_FUNCTION(0x3, "eddc")),
61 BERLIN_PINCTRL_GROUP("G8", 0x18, 0x3, 0x18, 61 BERLIN_PINCTRL_GROUP("G8", 0x18, 0x3, 0x18,
62 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), 62 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* CLK/SDI/SDO */
63 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")), 63 BERLIN_PINCTRL_FUNCTION(0x1, "gpio")),
64 BERLIN_PINCTRL_GROUP("G9", 0x18, 0x3, 0x1b, 64 BERLIN_PINCTRL_GROUP("G9", 0x18, 0x3, 0x1b,
65 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), 65 BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SS0n/SS1n */
66 BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), 66 BERLIN_PINCTRL_FUNCTION(0x1, "gpio"),
67 BERLIN_PINCTRL_FUNCTION(0x5, "sata")), 67 BERLIN_PINCTRL_FUNCTION(0x5, "sata")),
68 BERLIN_PINCTRL_GROUP("G10", 0x1c, 0x3, 0x00, 68 BERLIN_PINCTRL_GROUP("G10", 0x1c, 0x3, 0x00,
69 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), 69 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
70 BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), 70 BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), /* SS2n */
71 BERLIN_PINCTRL_FUNCTION(0x3, "i2s0"), 71 BERLIN_PINCTRL_FUNCTION(0x3, "i2s0"),
72 BERLIN_PINCTRL_FUNCTION(0x4, "pwm"), 72 BERLIN_PINCTRL_FUNCTION(0x4, "pwm"),
73 BERLIN_PINCTRL_FUNCTION(0x5, "sata")), 73 BERLIN_PINCTRL_FUNCTION(0x5, "sata")),
74 BERLIN_PINCTRL_GROUP("G11", 0x1c, 0x3, 0x03, 74 BERLIN_PINCTRL_GROUP("G11", 0x1c, 0x3, 0x03,
75 BERLIN_PINCTRL_FUNCTION(0x0, "jtag"), 75 BERLIN_PINCTRL_FUNCTION(0x0, "jtag"),
76 BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), 76 BERLIN_PINCTRL_FUNCTION(0x1, "spi1"), /* SS3n */
77 BERLIN_PINCTRL_FUNCTION(0x2, "gpio"), 77 BERLIN_PINCTRL_FUNCTION(0x2, "gpio"),
78 BERLIN_PINCTRL_FUNCTION(0x3, "i2s1"), 78 BERLIN_PINCTRL_FUNCTION(0x3, "i2s1"),
79 BERLIN_PINCTRL_FUNCTION(0x4, "pwm"), 79 BERLIN_PINCTRL_FUNCTION(0x4, "pwm"),
@@ -301,19 +301,19 @@ static const struct berlin_desc_group berlin2q_sysmgr_pinctrl_groups[] = {
301 /* GSM */ 301 /* GSM */
302 BERLIN_PINCTRL_GROUP("GSM0", 0x40, 0x2, 0x00, 302 BERLIN_PINCTRL_GROUP("GSM0", 0x40, 0x2, 0x00,
303 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), 303 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
304 BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), 304 BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* SS0n */
305 BERLIN_PINCTRL_FUNCTION(0x2, "eth1")), 305 BERLIN_PINCTRL_FUNCTION(0x2, "eth1")),
306 BERLIN_PINCTRL_GROUP("GSM1", 0x40, 0x2, 0x02, 306 BERLIN_PINCTRL_GROUP("GSM1", 0x40, 0x2, 0x02,
307 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), 307 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
308 BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), 308 BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* SS1n */
309 BERLIN_PINCTRL_FUNCTION(0x2, "eth1")), 309 BERLIN_PINCTRL_FUNCTION(0x2, "eth1")),
310 BERLIN_PINCTRL_GROUP("GSM2", 0x40, 0x2, 0x04, 310 BERLIN_PINCTRL_GROUP("GSM2", 0x40, 0x2, 0x04,
311 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), 311 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
312 BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), 312 BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* SS2n/SS3n */
313 BERLIN_PINCTRL_FUNCTION(0x2, "eddc")), 313 BERLIN_PINCTRL_FUNCTION(0x2, "eddc")),
314 BERLIN_PINCTRL_GROUP("GSM3", 0x40, 0x2, 0x06, 314 BERLIN_PINCTRL_GROUP("GSM3", 0x40, 0x2, 0x06,
315 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), 315 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
316 BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), 316 BERLIN_PINCTRL_FUNCTION(0x1, "spi2"), /* CLK/SDO */
317 BERLIN_PINCTRL_FUNCTION(0x2, "eddc")), 317 BERLIN_PINCTRL_FUNCTION(0x2, "eddc")),
318 BERLIN_PINCTRL_GROUP("GSM4", 0x40, 0x1, 0x08, 318 BERLIN_PINCTRL_GROUP("GSM4", 0x40, 0x1, 0x08,
319 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), 319 BERLIN_PINCTRL_FUNCTION(0x0, "gpio"),
diff --git a/drivers/pinctrl/berlin/berlin.c b/drivers/pinctrl/berlin/berlin.c
index 7f0b0f93242b..ddbcd1d7de52 100644
--- a/drivers/pinctrl/berlin/berlin.c
+++ b/drivers/pinctrl/berlin/berlin.c
@@ -320,9 +320,9 @@ int berlin_pinctrl_probe(struct platform_device *pdev,
320 } 320 }
321 321
322 pctrl->pctrl_dev = pinctrl_register(&berlin_pctrl_desc, dev, pctrl); 322 pctrl->pctrl_dev = pinctrl_register(&berlin_pctrl_desc, dev, pctrl);
323 if (!pctrl->pctrl_dev) { 323 if (IS_ERR(pctrl->pctrl_dev)) {
324 dev_err(dev, "failed to register pinctrl driver\n"); 324 dev_err(dev, "failed to register pinctrl driver\n");
325 return -EINVAL; 325 return PTR_ERR(pctrl->pctrl_dev);
326 } 326 }
327 327
328 return 0; 328 return 0;
diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
index 18ee2089df4a..8b8f3a04c353 100644
--- a/drivers/pinctrl/core.c
+++ b/drivers/pinctrl/core.c
@@ -558,7 +558,7 @@ int pinctrl_get_group_selector(struct pinctrl_dev *pctldev,
558} 558}
559 559
560/** 560/**
561 * pinctrl_request_gpio() - request a single pin to be used in as GPIO 561 * pinctrl_request_gpio() - request a single pin to be used as GPIO
562 * @gpio: the GPIO pin number from the GPIO subsystem number space 562 * @gpio: the GPIO pin number from the GPIO subsystem number space
563 * 563 *
564 * This function should *ONLY* be used from gpiolib-based GPIO drivers, 564 * This function should *ONLY* be used from gpiolib-based GPIO drivers,
@@ -1115,7 +1115,7 @@ int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
1115 int i, ret; 1115 int i, ret;
1116 struct pinctrl_maps *maps_node; 1116 struct pinctrl_maps *maps_node;
1117 1117
1118 pr_debug("add %d pinmux maps\n", num_maps); 1118 pr_debug("add %u pinctrl maps\n", num_maps);
1119 1119
1120 /* First sanity check the new mapping */ 1120 /* First sanity check the new mapping */
1121 for (i = 0; i < num_maps; i++) { 1121 for (i = 0; i < num_maps; i++) {
@@ -1704,14 +1704,14 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
1704 int ret; 1704 int ret;
1705 1705
1706 if (!pctldesc) 1706 if (!pctldesc)
1707 return NULL; 1707 return ERR_PTR(-EINVAL);
1708 if (!pctldesc->name) 1708 if (!pctldesc->name)
1709 return NULL; 1709 return ERR_PTR(-EINVAL);
1710 1710
1711 pctldev = kzalloc(sizeof(*pctldev), GFP_KERNEL); 1711 pctldev = kzalloc(sizeof(*pctldev), GFP_KERNEL);
1712 if (pctldev == NULL) { 1712 if (pctldev == NULL) {
1713 dev_err(dev, "failed to alloc struct pinctrl_dev\n"); 1713 dev_err(dev, "failed to alloc struct pinctrl_dev\n");
1714 return NULL; 1714 return ERR_PTR(-ENOMEM);
1715 } 1715 }
1716 1716
1717 /* Initialize pin control device struct */ 1717 /* Initialize pin control device struct */
@@ -1724,20 +1724,23 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
1724 mutex_init(&pctldev->mutex); 1724 mutex_init(&pctldev->mutex);
1725 1725
1726 /* check core ops for sanity */ 1726 /* check core ops for sanity */
1727 if (pinctrl_check_ops(pctldev)) { 1727 ret = pinctrl_check_ops(pctldev);
1728 if (ret) {
1728 dev_err(dev, "pinctrl ops lacks necessary functions\n"); 1729 dev_err(dev, "pinctrl ops lacks necessary functions\n");
1729 goto out_err; 1730 goto out_err;
1730 } 1731 }
1731 1732
1732 /* If we're implementing pinmuxing, check the ops for sanity */ 1733 /* If we're implementing pinmuxing, check the ops for sanity */
1733 if (pctldesc->pmxops) { 1734 if (pctldesc->pmxops) {
1734 if (pinmux_check_ops(pctldev)) 1735 ret = pinmux_check_ops(pctldev);
1736 if (ret)
1735 goto out_err; 1737 goto out_err;
1736 } 1738 }
1737 1739
1738 /* If we're implementing pinconfig, check the ops for sanity */ 1740 /* If we're implementing pinconfig, check the ops for sanity */
1739 if (pctldesc->confops) { 1741 if (pctldesc->confops) {
1740 if (pinconf_check_ops(pctldev)) 1742 ret = pinconf_check_ops(pctldev);
1743 if (ret)
1741 goto out_err; 1744 goto out_err;
1742 } 1745 }
1743 1746
@@ -1783,7 +1786,7 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
1783out_err: 1786out_err:
1784 mutex_destroy(&pctldev->mutex); 1787 mutex_destroy(&pctldev->mutex);
1785 kfree(pctldev); 1788 kfree(pctldev);
1786 return NULL; 1789 return ERR_PTR(ret);
1787} 1790}
1788EXPORT_SYMBOL_GPL(pinctrl_register); 1791EXPORT_SYMBOL_GPL(pinctrl_register);
1789 1792
diff --git a/drivers/pinctrl/freescale/Kconfig b/drivers/pinctrl/freescale/Kconfig
index 16aac38793fe..12ef544b4894 100644
--- a/drivers/pinctrl/freescale/Kconfig
+++ b/drivers/pinctrl/freescale/Kconfig
@@ -87,6 +87,13 @@ config PINCTRL_IMX6SX
87 help 87 help
88 Say Y here to enable the imx6sx pinctrl driver 88 Say Y here to enable the imx6sx pinctrl driver
89 89
90config PINCTRL_IMX7D
91 bool "IMX7D pinctrl driver"
92 depends on SOC_IMX7D
93 select PINCTRL_IMX
94 help
95 Say Y here to enable the imx7d pinctrl driver
96
90config PINCTRL_VF610 97config PINCTRL_VF610
91 bool "Freescale Vybrid VF610 pinctrl driver" 98 bool "Freescale Vybrid VF610 pinctrl driver"
92 depends on SOC_VF610 99 depends on SOC_VF610
diff --git a/drivers/pinctrl/freescale/Makefile b/drivers/pinctrl/freescale/Makefile
index bba73c22f043..343cb436ab17 100644
--- a/drivers/pinctrl/freescale/Makefile
+++ b/drivers/pinctrl/freescale/Makefile
@@ -12,6 +12,7 @@ obj-$(CONFIG_PINCTRL_IMX6Q) += pinctrl-imx6q.o
12obj-$(CONFIG_PINCTRL_IMX6Q) += pinctrl-imx6dl.o 12obj-$(CONFIG_PINCTRL_IMX6Q) += pinctrl-imx6dl.o
13obj-$(CONFIG_PINCTRL_IMX6SL) += pinctrl-imx6sl.o 13obj-$(CONFIG_PINCTRL_IMX6SL) += pinctrl-imx6sl.o
14obj-$(CONFIG_PINCTRL_IMX6SX) += pinctrl-imx6sx.o 14obj-$(CONFIG_PINCTRL_IMX6SX) += pinctrl-imx6sx.o
15obj-$(CONFIG_PINCTRL_IMX7D) += pinctrl-imx7d.o
15obj-$(CONFIG_PINCTRL_VF610) += pinctrl-vf610.o 16obj-$(CONFIG_PINCTRL_VF610) += pinctrl-vf610.o
16obj-$(CONFIG_PINCTRL_MXS) += pinctrl-mxs.o 17obj-$(CONFIG_PINCTRL_MXS) += pinctrl-mxs.o
17obj-$(CONFIG_PINCTRL_IMX23) += pinctrl-imx23.o 18obj-$(CONFIG_PINCTRL_IMX23) += pinctrl-imx23.o
diff --git a/drivers/pinctrl/freescale/pinctrl-imx.c b/drivers/pinctrl/freescale/pinctrl-imx.c
index e261f1cf85c6..d7b98ba36825 100644
--- a/drivers/pinctrl/freescale/pinctrl-imx.c
+++ b/drivers/pinctrl/freescale/pinctrl-imx.c
@@ -606,6 +606,29 @@ static int imx_pinctrl_parse_functions(struct device_node *np,
606 return 0; 606 return 0;
607} 607}
608 608
609/*
610 * Check if the DT contains pins in the direct child nodes. This indicates the
611 * newer DT format to store pins. This function returns true if the first found
612 * fsl,pins property is in a child of np. Otherwise false is returned.
613 */
614static bool imx_pinctrl_dt_is_flat_functions(struct device_node *np)
615{
616 struct device_node *function_np;
617 struct device_node *pinctrl_np;
618
619 for_each_child_of_node(np, function_np) {
620 if (of_property_read_bool(function_np, "fsl,pins"))
621 return true;
622
623 for_each_child_of_node(function_np, pinctrl_np) {
624 if (of_property_read_bool(pinctrl_np, "fsl,pins"))
625 return false;
626 }
627 }
628
629 return true;
630}
631
609static int imx_pinctrl_probe_dt(struct platform_device *pdev, 632static int imx_pinctrl_probe_dt(struct platform_device *pdev,
610 struct imx_pinctrl_soc_info *info) 633 struct imx_pinctrl_soc_info *info)
611{ 634{
@@ -613,14 +636,20 @@ static int imx_pinctrl_probe_dt(struct platform_device *pdev,
613 struct device_node *child; 636 struct device_node *child;
614 u32 nfuncs = 0; 637 u32 nfuncs = 0;
615 u32 i = 0; 638 u32 i = 0;
639 bool flat_funcs;
616 640
617 if (!np) 641 if (!np)
618 return -ENODEV; 642 return -ENODEV;
619 643
620 nfuncs = of_get_child_count(np); 644 flat_funcs = imx_pinctrl_dt_is_flat_functions(np);
621 if (nfuncs <= 0) { 645 if (flat_funcs) {
622 dev_err(&pdev->dev, "no functions defined\n"); 646 nfuncs = 1;
623 return -EINVAL; 647 } else {
648 nfuncs = of_get_child_count(np);
649 if (nfuncs <= 0) {
650 dev_err(&pdev->dev, "no functions defined\n");
651 return -EINVAL;
652 }
624 } 653 }
625 654
626 info->nfunctions = nfuncs; 655 info->nfunctions = nfuncs;
@@ -629,16 +658,24 @@ static int imx_pinctrl_probe_dt(struct platform_device *pdev,
629 if (!info->functions) 658 if (!info->functions)
630 return -ENOMEM; 659 return -ENOMEM;
631 660
632 info->ngroups = 0; 661 if (flat_funcs) {
633 for_each_child_of_node(np, child) 662 info->ngroups = of_get_child_count(np);
634 info->ngroups += of_get_child_count(child); 663 } else {
664 info->ngroups = 0;
665 for_each_child_of_node(np, child)
666 info->ngroups += of_get_child_count(child);
667 }
635 info->groups = devm_kzalloc(&pdev->dev, info->ngroups * sizeof(struct imx_pin_group), 668 info->groups = devm_kzalloc(&pdev->dev, info->ngroups * sizeof(struct imx_pin_group),
636 GFP_KERNEL); 669 GFP_KERNEL);
637 if (!info->groups) 670 if (!info->groups)
638 return -ENOMEM; 671 return -ENOMEM;
639 672
640 for_each_child_of_node(np, child) 673 if (flat_funcs) {
641 imx_pinctrl_parse_functions(child, info, i++); 674 imx_pinctrl_parse_functions(np, info, 0);
675 } else {
676 for_each_child_of_node(np, child)
677 imx_pinctrl_parse_functions(child, info, i++);
678 }
642 679
643 return 0; 680 return 0;
644} 681}
@@ -690,9 +727,9 @@ int imx_pinctrl_probe(struct platform_device *pdev,
690 ipctl->dev = info->dev; 727 ipctl->dev = info->dev;
691 platform_set_drvdata(pdev, ipctl); 728 platform_set_drvdata(pdev, ipctl);
692 ipctl->pctl = pinctrl_register(&imx_pinctrl_desc, &pdev->dev, ipctl); 729 ipctl->pctl = pinctrl_register(&imx_pinctrl_desc, &pdev->dev, ipctl);
693 if (!ipctl->pctl) { 730 if (IS_ERR(ipctl->pctl)) {
694 dev_err(&pdev->dev, "could not register IMX pinctrl driver\n"); 731 dev_err(&pdev->dev, "could not register IMX pinctrl driver\n");
695 return -EINVAL; 732 return PTR_ERR(ipctl->pctl);
696 } 733 }
697 734
698 dev_info(&pdev->dev, "initialized IMX pinctrl driver\n"); 735 dev_info(&pdev->dev, "initialized IMX pinctrl driver\n");
diff --git a/drivers/pinctrl/freescale/pinctrl-imx1-core.c b/drivers/pinctrl/freescale/pinctrl-imx1-core.c
index 5ac59fbb2440..5fd4437cee15 100644
--- a/drivers/pinctrl/freescale/pinctrl-imx1-core.c
+++ b/drivers/pinctrl/freescale/pinctrl-imx1-core.c
@@ -633,9 +633,9 @@ int imx1_pinctrl_core_probe(struct platform_device *pdev,
633 ipctl->dev = info->dev; 633 ipctl->dev = info->dev;
634 platform_set_drvdata(pdev, ipctl); 634 platform_set_drvdata(pdev, ipctl);
635 ipctl->pctl = pinctrl_register(pctl_desc, &pdev->dev, ipctl); 635 ipctl->pctl = pinctrl_register(pctl_desc, &pdev->dev, ipctl);
636 if (!ipctl->pctl) { 636 if (IS_ERR(ipctl->pctl)) {
637 dev_err(&pdev->dev, "could not register IMX pinctrl driver\n"); 637 dev_err(&pdev->dev, "could not register IMX pinctrl driver\n");
638 return -EINVAL; 638 return PTR_ERR(ipctl->pctl);
639 } 639 }
640 640
641 ret = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev); 641 ret = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev);
diff --git a/drivers/pinctrl/freescale/pinctrl-imx7d.c b/drivers/pinctrl/freescale/pinctrl-imx7d.c
new file mode 100644
index 000000000000..1fa7530530dd
--- /dev/null
+++ b/drivers/pinctrl/freescale/pinctrl-imx7d.c
@@ -0,0 +1,384 @@
1/*
2 * Copyright (C) 2014-2015 Freescale Semiconductor, Inc.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9#include <linux/err.h>
10#include <linux/init.h>
11#include <linux/io.h>
12#include <linux/module.h>
13#include <linux/of.h>
14#include <linux/of_device.h>
15#include <linux/pinctrl/pinctrl.h>
16
17#include "pinctrl-imx.h"
18
19enum imx7d_pads {
20 MX7D_PAD_RESERVE0 = 0,
21 MX7D_PAD_RESERVE1 = 1,
22 MX7D_PAD_RESERVE2 = 2,
23 MX7D_PAD_RESERVE3 = 3,
24 MX7D_PAD_RESERVE4 = 4,
25 MX7D_PAD_GPIO1_IO08 = 5,
26 MX7D_PAD_GPIO1_IO09 = 6,
27 MX7D_PAD_GPIO1_IO10 = 7,
28 MX7D_PAD_GPIO1_IO11 = 8,
29 MX7D_PAD_GPIO1_IO12 = 9,
30 MX7D_PAD_GPIO1_IO13 = 10,
31 MX7D_PAD_GPIO1_IO14 = 11,
32 MX7D_PAD_GPIO1_IO15 = 12,
33 MX7D_PAD_EPDC_DATA00 = 13,
34 MX7D_PAD_EPDC_DATA01 = 14,
35 MX7D_PAD_EPDC_DATA02 = 15,
36 MX7D_PAD_EPDC_DATA03 = 16,
37 MX7D_PAD_EPDC_DATA04 = 17,
38 MX7D_PAD_EPDC_DATA05 = 18,
39 MX7D_PAD_EPDC_DATA06 = 19,
40 MX7D_PAD_EPDC_DATA07 = 20,
41 MX7D_PAD_EPDC_DATA08 = 21,
42 MX7D_PAD_EPDC_DATA09 = 22,
43 MX7D_PAD_EPDC_DATA10 = 23,
44 MX7D_PAD_EPDC_DATA11 = 24,
45 MX7D_PAD_EPDC_DATA12 = 25,
46 MX7D_PAD_EPDC_DATA13 = 26,
47 MX7D_PAD_EPDC_DATA14 = 27,
48 MX7D_PAD_EPDC_DATA15 = 28,
49 MX7D_PAD_EPDC_SDCLK = 29,
50 MX7D_PAD_EPDC_SDLE = 30,
51 MX7D_PAD_EPDC_SDOE = 31,
52 MX7D_PAD_EPDC_SDSHR = 32,
53 MX7D_PAD_EPDC_SDCE0 = 33,
54 MX7D_PAD_EPDC_SDCE1 = 34,
55 MX7D_PAD_EPDC_SDCE2 = 35,
56 MX7D_PAD_EPDC_SDCE3 = 36,
57 MX7D_PAD_EPDC_GDCLK = 37,
58 MX7D_PAD_EPDC_GDOE = 38,
59 MX7D_PAD_EPDC_GDRL = 39,
60 MX7D_PAD_EPDC_GDSP = 40,
61 MX7D_PAD_EPDC_BDR0 = 41,
62 MX7D_PAD_EPDC_BDR1 = 42,
63 MX7D_PAD_EPDC_PWR_COM = 43,
64 MX7D_PAD_EPDC_PWR_STAT = 44,
65 MX7D_PAD_LCD_CLK = 45,
66 MX7D_PAD_LCD_ENABLE = 46,
67 MX7D_PAD_LCD_HSYNC = 47,
68 MX7D_PAD_LCD_VSYNC = 48,
69 MX7D_PAD_LCD_RESET = 49,
70 MX7D_PAD_LCD_DATA00 = 50,
71 MX7D_PAD_LCD_DATA01 = 51,
72 MX7D_PAD_LCD_DATA02 = 52,
73 MX7D_PAD_LCD_DATA03 = 53,
74 MX7D_PAD_LCD_DATA04 = 54,
75 MX7D_PAD_LCD_DATA05 = 55,
76 MX7D_PAD_LCD_DATA06 = 56,
77 MX7D_PAD_LCD_DATA07 = 57,
78 MX7D_PAD_LCD_DATA08 = 58,
79 MX7D_PAD_LCD_DATA09 = 59,
80 MX7D_PAD_LCD_DATA10 = 60,
81 MX7D_PAD_LCD_DATA11 = 61,
82 MX7D_PAD_LCD_DATA12 = 62,
83 MX7D_PAD_LCD_DATA13 = 63,
84 MX7D_PAD_LCD_DATA14 = 64,
85 MX7D_PAD_LCD_DATA15 = 65,
86 MX7D_PAD_LCD_DATA16 = 66,
87 MX7D_PAD_LCD_DATA17 = 67,
88 MX7D_PAD_LCD_DATA18 = 68,
89 MX7D_PAD_LCD_DATA19 = 69,
90 MX7D_PAD_LCD_DATA20 = 70,
91 MX7D_PAD_LCD_DATA21 = 71,
92 MX7D_PAD_LCD_DATA22 = 72,
93 MX7D_PAD_LCD_DATA23 = 73,
94 MX7D_PAD_UART1_RX_DATA = 74,
95 MX7D_PAD_UART1_TX_DATA = 75,
96 MX7D_PAD_UART2_RX_DATA = 76,
97 MX7D_PAD_UART2_TX_DATA = 77,
98 MX7D_PAD_UART3_RX_DATA = 78,
99 MX7D_PAD_UART3_TX_DATA = 79,
100 MX7D_PAD_UART3_RTS_B = 80,
101 MX7D_PAD_UART3_CTS_B = 81,
102 MX7D_PAD_I2C1_SCL = 82,
103 MX7D_PAD_I2C1_SDA = 83,
104 MX7D_PAD_I2C2_SCL = 84,
105 MX7D_PAD_I2C2_SDA = 85,
106 MX7D_PAD_I2C3_SCL = 86,
107 MX7D_PAD_I2C3_SDA = 87,
108 MX7D_PAD_I2C4_SCL = 88,
109 MX7D_PAD_I2C4_SDA = 89,
110 MX7D_PAD_ECSPI1_SCLK = 90,
111 MX7D_PAD_ECSPI1_MOSI = 91,
112 MX7D_PAD_ECSPI1_MISO = 92,
113 MX7D_PAD_ECSPI1_SS0 = 93,
114 MX7D_PAD_ECSPI2_SCLK = 94,
115 MX7D_PAD_ECSPI2_MOSI = 95,
116 MX7D_PAD_ECSPI2_MISO = 96,
117 MX7D_PAD_ECSPI2_SS0 = 97,
118 MX7D_PAD_SD1_CD_B = 98,
119 MX7D_PAD_SD1_WP = 99,
120 MX7D_PAD_SD1_RESET_B = 100,
121 MX7D_PAD_SD1_CLK = 101,
122 MX7D_PAD_SD1_CMD = 102,
123 MX7D_PAD_SD1_DATA0 = 103,
124 MX7D_PAD_SD1_DATA1 = 104,
125 MX7D_PAD_SD1_DATA2 = 105,
126 MX7D_PAD_SD1_DATA3 = 106,
127 MX7D_PAD_SD2_CD_B = 107,
128 MX7D_PAD_SD2_WP = 108,
129 MX7D_PAD_SD2_RESET_B = 109,
130 MX7D_PAD_SD2_CLK = 110,
131 MX7D_PAD_SD2_CMD = 111,
132 MX7D_PAD_SD2_DATA0 = 112,
133 MX7D_PAD_SD2_DATA1 = 113,
134 MX7D_PAD_SD2_DATA2 = 114,
135 MX7D_PAD_SD2_DATA3 = 115,
136 MX7D_PAD_SD3_CLK = 116,
137 MX7D_PAD_SD3_CMD = 117,
138 MX7D_PAD_SD3_DATA0 = 118,
139 MX7D_PAD_SD3_DATA1 = 119,
140 MX7D_PAD_SD3_DATA2 = 120,
141 MX7D_PAD_SD3_DATA3 = 121,
142 MX7D_PAD_SD3_DATA4 = 122,
143 MX7D_PAD_SD3_DATA5 = 123,
144 MX7D_PAD_SD3_DATA6 = 124,
145 MX7D_PAD_SD3_DATA7 = 125,
146 MX7D_PAD_SD3_STROBE = 126,
147 MX7D_PAD_SD3_RESET_B = 127,
148 MX7D_PAD_SAI1_RX_DATA = 128,
149 MX7D_PAD_SAI1_TX_BCLK = 129,
150 MX7D_PAD_SAI1_TX_SYNC = 130,
151 MX7D_PAD_SAI1_TX_DATA = 131,
152 MX7D_PAD_SAI1_RX_SYNC = 132,
153 MX7D_PAD_SAI1_RX_BCLK = 133,
154 MX7D_PAD_SAI1_MCLK = 134,
155 MX7D_PAD_SAI2_TX_SYNC = 135,
156 MX7D_PAD_SAI2_TX_BCLK = 136,
157 MX7D_PAD_SAI2_RX_DATA = 137,
158 MX7D_PAD_SAI2_TX_DATA = 138,
159 MX7D_PAD_ENET1_RGMII_RD0 = 139,
160 MX7D_PAD_ENET1_RGMII_RD1 = 140,
161 MX7D_PAD_ENET1_RGMII_RD2 = 141,
162 MX7D_PAD_ENET1_RGMII_RD3 = 142,
163 MX7D_PAD_ENET1_RGMII_RX_CTL = 143,
164 MX7D_PAD_ENET1_RGMII_RXC = 144,
165 MX7D_PAD_ENET1_RGMII_TD0 = 145,
166 MX7D_PAD_ENET1_RGMII_TD1 = 146,
167 MX7D_PAD_ENET1_RGMII_TD2 = 147,
168 MX7D_PAD_ENET1_RGMII_TD3 = 148,
169 MX7D_PAD_ENET1_RGMII_TX_CTL = 149,
170 MX7D_PAD_ENET1_RGMII_TXC = 150,
171 MX7D_PAD_ENET1_TX_CLK = 151,
172 MX7D_PAD_ENET1_RX_CLK = 152,
173 MX7D_PAD_ENET1_CRS = 153,
174 MX7D_PAD_ENET1_COL = 154,
175};
176
177/* Pad names for the pinmux subsystem */
178static const struct pinctrl_pin_desc imx7d_pinctrl_pads[] = {
179 IMX_PINCTRL_PIN(MX7D_PAD_RESERVE0),
180 IMX_PINCTRL_PIN(MX7D_PAD_RESERVE1),
181 IMX_PINCTRL_PIN(MX7D_PAD_RESERVE2),
182 IMX_PINCTRL_PIN(MX7D_PAD_RESERVE3),
183 IMX_PINCTRL_PIN(MX7D_PAD_RESERVE4),
184 IMX_PINCTRL_PIN(MX7D_PAD_GPIO1_IO08),
185 IMX_PINCTRL_PIN(MX7D_PAD_GPIO1_IO09),
186 IMX_PINCTRL_PIN(MX7D_PAD_GPIO1_IO10),
187 IMX_PINCTRL_PIN(MX7D_PAD_GPIO1_IO11),
188 IMX_PINCTRL_PIN(MX7D_PAD_GPIO1_IO12),
189 IMX_PINCTRL_PIN(MX7D_PAD_GPIO1_IO13),
190 IMX_PINCTRL_PIN(MX7D_PAD_GPIO1_IO14),
191 IMX_PINCTRL_PIN(MX7D_PAD_GPIO1_IO15),
192 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA00),
193 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA01),
194 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA02),
195 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA03),
196 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA04),
197 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA05),
198 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA06),
199 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA07),
200 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA08),
201 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA09),
202 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA10),
203 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA11),
204 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA12),
205 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA13),
206 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA14),
207 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_DATA15),
208 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_SDCLK),
209 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_SDLE),
210 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_SDOE),
211 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_SDSHR),
212 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_SDCE0),
213 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_SDCE1),
214 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_SDCE2),
215 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_SDCE3),
216 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_GDCLK),
217 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_GDOE),
218 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_GDRL),
219 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_GDSP),
220 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_BDR0),
221 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_BDR1),
222 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_PWR_COM),
223 IMX_PINCTRL_PIN(MX7D_PAD_EPDC_PWR_STAT),
224 IMX_PINCTRL_PIN(MX7D_PAD_LCD_CLK),
225 IMX_PINCTRL_PIN(MX7D_PAD_LCD_ENABLE),
226 IMX_PINCTRL_PIN(MX7D_PAD_LCD_HSYNC),
227 IMX_PINCTRL_PIN(MX7D_PAD_LCD_VSYNC),
228 IMX_PINCTRL_PIN(MX7D_PAD_LCD_RESET),
229 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA00),
230 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA01),
231 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA02),
232 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA03),
233 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA04),
234 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA05),
235 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA06),
236 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA07),
237 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA08),
238 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA09),
239 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA10),
240 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA11),
241 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA12),
242 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA13),
243 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA14),
244 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA15),
245 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA16),
246 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA17),
247 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA18),
248 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA19),
249 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA20),
250 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA21),
251 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA22),
252 IMX_PINCTRL_PIN(MX7D_PAD_LCD_DATA23),
253 IMX_PINCTRL_PIN(MX7D_PAD_UART1_RX_DATA),
254 IMX_PINCTRL_PIN(MX7D_PAD_UART1_TX_DATA),
255 IMX_PINCTRL_PIN(MX7D_PAD_UART2_RX_DATA),
256 IMX_PINCTRL_PIN(MX7D_PAD_UART2_TX_DATA),
257 IMX_PINCTRL_PIN(MX7D_PAD_UART3_RX_DATA),
258 IMX_PINCTRL_PIN(MX7D_PAD_UART3_TX_DATA),
259 IMX_PINCTRL_PIN(MX7D_PAD_UART3_RTS_B),
260 IMX_PINCTRL_PIN(MX7D_PAD_UART3_CTS_B),
261 IMX_PINCTRL_PIN(MX7D_PAD_I2C1_SCL),
262 IMX_PINCTRL_PIN(MX7D_PAD_I2C1_SDA),
263 IMX_PINCTRL_PIN(MX7D_PAD_I2C2_SCL),
264 IMX_PINCTRL_PIN(MX7D_PAD_I2C2_SDA),
265 IMX_PINCTRL_PIN(MX7D_PAD_I2C3_SCL),
266 IMX_PINCTRL_PIN(MX7D_PAD_I2C3_SDA),
267 IMX_PINCTRL_PIN(MX7D_PAD_I2C4_SCL),
268 IMX_PINCTRL_PIN(MX7D_PAD_I2C4_SDA),
269 IMX_PINCTRL_PIN(MX7D_PAD_ECSPI1_SCLK),
270 IMX_PINCTRL_PIN(MX7D_PAD_ECSPI1_MOSI),
271 IMX_PINCTRL_PIN(MX7D_PAD_ECSPI1_MISO),
272 IMX_PINCTRL_PIN(MX7D_PAD_ECSPI1_SS0),
273 IMX_PINCTRL_PIN(MX7D_PAD_ECSPI2_SCLK),
274 IMX_PINCTRL_PIN(MX7D_PAD_ECSPI2_MOSI),
275 IMX_PINCTRL_PIN(MX7D_PAD_ECSPI2_MISO),
276 IMX_PINCTRL_PIN(MX7D_PAD_ECSPI2_SS0),
277 IMX_PINCTRL_PIN(MX7D_PAD_SD1_CD_B),
278 IMX_PINCTRL_PIN(MX7D_PAD_SD1_WP),
279 IMX_PINCTRL_PIN(MX7D_PAD_SD1_RESET_B),
280 IMX_PINCTRL_PIN(MX7D_PAD_SD1_CLK),
281 IMX_PINCTRL_PIN(MX7D_PAD_SD1_CMD),
282 IMX_PINCTRL_PIN(MX7D_PAD_SD1_DATA0),
283 IMX_PINCTRL_PIN(MX7D_PAD_SD1_DATA1),
284 IMX_PINCTRL_PIN(MX7D_PAD_SD1_DATA2),
285 IMX_PINCTRL_PIN(MX7D_PAD_SD1_DATA3),
286 IMX_PINCTRL_PIN(MX7D_PAD_SD2_CD_B),
287 IMX_PINCTRL_PIN(MX7D_PAD_SD2_WP),
288 IMX_PINCTRL_PIN(MX7D_PAD_SD2_RESET_B),
289 IMX_PINCTRL_PIN(MX7D_PAD_SD2_CLK),
290 IMX_PINCTRL_PIN(MX7D_PAD_SD2_CMD),
291 IMX_PINCTRL_PIN(MX7D_PAD_SD2_DATA0),
292 IMX_PINCTRL_PIN(MX7D_PAD_SD2_DATA1),
293 IMX_PINCTRL_PIN(MX7D_PAD_SD2_DATA2),
294 IMX_PINCTRL_PIN(MX7D_PAD_SD2_DATA3),
295 IMX_PINCTRL_PIN(MX7D_PAD_SD3_CLK),
296 IMX_PINCTRL_PIN(MX7D_PAD_SD3_CMD),
297 IMX_PINCTRL_PIN(MX7D_PAD_SD3_DATA0),
298 IMX_PINCTRL_PIN(MX7D_PAD_SD3_DATA1),
299 IMX_PINCTRL_PIN(MX7D_PAD_SD3_DATA2),
300 IMX_PINCTRL_PIN(MX7D_PAD_SD3_DATA3),
301 IMX_PINCTRL_PIN(MX7D_PAD_SD3_DATA4),
302 IMX_PINCTRL_PIN(MX7D_PAD_SD3_DATA5),
303 IMX_PINCTRL_PIN(MX7D_PAD_SD3_DATA6),
304 IMX_PINCTRL_PIN(MX7D_PAD_SD3_DATA7),
305 IMX_PINCTRL_PIN(MX7D_PAD_SD3_STROBE),
306 IMX_PINCTRL_PIN(MX7D_PAD_SD3_RESET_B),
307 IMX_PINCTRL_PIN(MX7D_PAD_SAI1_RX_DATA),
308 IMX_PINCTRL_PIN(MX7D_PAD_SAI1_TX_BCLK),
309 IMX_PINCTRL_PIN(MX7D_PAD_SAI1_TX_SYNC),
310 IMX_PINCTRL_PIN(MX7D_PAD_SAI1_TX_DATA),
311 IMX_PINCTRL_PIN(MX7D_PAD_SAI1_RX_SYNC),
312 IMX_PINCTRL_PIN(MX7D_PAD_SAI1_RX_BCLK),
313 IMX_PINCTRL_PIN(MX7D_PAD_SAI1_MCLK),
314 IMX_PINCTRL_PIN(MX7D_PAD_SAI2_TX_SYNC),
315 IMX_PINCTRL_PIN(MX7D_PAD_SAI2_TX_BCLK),
316 IMX_PINCTRL_PIN(MX7D_PAD_SAI2_RX_DATA),
317 IMX_PINCTRL_PIN(MX7D_PAD_SAI2_TX_DATA),
318 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_RGMII_RD0),
319 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_RGMII_RD1),
320 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_RGMII_RD2),
321 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_RGMII_RD3),
322 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_RGMII_RX_CTL),
323 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_RGMII_RXC),
324 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_RGMII_TD0),
325 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_RGMII_TD1),
326 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_RGMII_TD2),
327 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_RGMII_TD3),
328 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_RGMII_TX_CTL),
329 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_RGMII_TXC),
330 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_TX_CLK),
331 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_RX_CLK),
332 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_CRS),
333 IMX_PINCTRL_PIN(MX7D_PAD_ENET1_COL),
334};
335
336static struct imx_pinctrl_soc_info imx7d_pinctrl_info = {
337 .pins = imx7d_pinctrl_pads,
338 .npins = ARRAY_SIZE(imx7d_pinctrl_pads),
339};
340
341static struct of_device_id imx7d_pinctrl_of_match[] = {
342 { .compatible = "fsl,imx7d-iomuxc", .data = &imx7d_pinctrl_info, },
343 { /* sentinel */ }
344};
345
346static int imx7d_pinctrl_probe(struct platform_device *pdev)
347{
348 const struct of_device_id *match;
349 struct imx_pinctrl_soc_info *pinctrl_info;
350
351 match = of_match_device(imx7d_pinctrl_of_match, &pdev->dev);
352
353 if (!match)
354 return -ENODEV;
355
356 pinctrl_info = (struct imx_pinctrl_soc_info *) match->data;
357
358 return imx_pinctrl_probe(pdev, pinctrl_info);
359}
360
361static struct platform_driver imx7d_pinctrl_driver = {
362 .driver = {
363 .name = "imx7d-pinctrl",
364 .of_match_table = of_match_ptr(imx7d_pinctrl_of_match),
365 },
366 .probe = imx7d_pinctrl_probe,
367 .remove = imx_pinctrl_remove,
368};
369
370static int __init imx7d_pinctrl_init(void)
371{
372 return platform_driver_register(&imx7d_pinctrl_driver);
373}
374arch_initcall(imx7d_pinctrl_init);
375
376static void __exit imx7d_pinctrl_exit(void)
377{
378 platform_driver_unregister(&imx7d_pinctrl_driver);
379}
380module_exit(imx7d_pinctrl_exit);
381
382MODULE_AUTHOR("Anson Huang <Anson.Huang@freescale.com>");
383MODULE_DESCRIPTION("Freescale imx7d pinctrl driver");
384MODULE_LICENSE("GPL v2");
diff --git a/drivers/pinctrl/freescale/pinctrl-mxs.c b/drivers/pinctrl/freescale/pinctrl-mxs.c
index 646d5c244af1..f64eecb24755 100644
--- a/drivers/pinctrl/freescale/pinctrl-mxs.c
+++ b/drivers/pinctrl/freescale/pinctrl-mxs.c
@@ -540,9 +540,9 @@ int mxs_pinctrl_probe(struct platform_device *pdev,
540 } 540 }
541 541
542 d->pctl = pinctrl_register(&mxs_pinctrl_desc, &pdev->dev, d); 542 d->pctl = pinctrl_register(&mxs_pinctrl_desc, &pdev->dev, d);
543 if (!d->pctl) { 543 if (IS_ERR(d->pctl)) {
544 dev_err(&pdev->dev, "Couldn't register MXS pinctrl driver\n"); 544 dev_err(&pdev->dev, "Couldn't register MXS pinctrl driver\n");
545 ret = -EINVAL; 545 ret = PTR_ERR(d->pctl);
546 goto err; 546 goto err;
547 } 547 }
548 548
diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c
index 732ff757a95f..3f737daa3fd2 100644
--- a/drivers/pinctrl/intel/pinctrl-cherryview.c
+++ b/drivers/pinctrl/intel/pinctrl-cherryview.c
@@ -1533,9 +1533,9 @@ static int chv_pinctrl_probe(struct platform_device *pdev)
1533 pctrl->pctldesc.npins = pctrl->community->npins; 1533 pctrl->pctldesc.npins = pctrl->community->npins;
1534 1534
1535 pctrl->pctldev = pinctrl_register(&pctrl->pctldesc, &pdev->dev, pctrl); 1535 pctrl->pctldev = pinctrl_register(&pctrl->pctldesc, &pdev->dev, pctrl);
1536 if (!pctrl->pctldev) { 1536 if (IS_ERR(pctrl->pctldev)) {
1537 dev_err(&pdev->dev, "failed to register pinctrl driver\n"); 1537 dev_err(&pdev->dev, "failed to register pinctrl driver\n");
1538 return -ENODEV; 1538 return PTR_ERR(pctrl->pctldev);
1539 } 1539 }
1540 1540
1541 ret = chv_gpio_probe(pctrl, irq); 1541 ret = chv_gpio_probe(pctrl, irq);
diff --git a/drivers/pinctrl/intel/pinctrl-intel.c b/drivers/pinctrl/intel/pinctrl-intel.c
index 00768e53deec..f9ee0d68b288 100644
--- a/drivers/pinctrl/intel/pinctrl-intel.c
+++ b/drivers/pinctrl/intel/pinctrl-intel.c
@@ -1021,9 +1021,9 @@ int intel_pinctrl_probe(struct platform_device *pdev,
1021 pctrl->pctldesc.npins = pctrl->soc->npins; 1021 pctrl->pctldesc.npins = pctrl->soc->npins;
1022 1022
1023 pctrl->pctldev = pinctrl_register(&pctrl->pctldesc, &pdev->dev, pctrl); 1023 pctrl->pctldev = pinctrl_register(&pctrl->pctldesc, &pdev->dev, pctrl);
1024 if (!pctrl->pctldev) { 1024 if (IS_ERR(pctrl->pctldev)) {
1025 dev_err(&pdev->dev, "failed to register pinctrl driver\n"); 1025 dev_err(&pdev->dev, "failed to register pinctrl driver\n");
1026 return -ENODEV; 1026 return PTR_ERR(pctrl->pctldev);
1027 } 1027 }
1028 1028
1029 ret = intel_gpio_probe(pctrl, irq); 1029 ret = intel_gpio_probe(pctrl, irq);
diff --git a/drivers/pinctrl/intel/pinctrl-sunrisepoint.c b/drivers/pinctrl/intel/pinctrl-sunrisepoint.c
index 55d025dc89e8..1de9ae5010db 100644
--- a/drivers/pinctrl/intel/pinctrl-sunrisepoint.c
+++ b/drivers/pinctrl/intel/pinctrl-sunrisepoint.c
@@ -284,8 +284,271 @@ static const struct intel_pinctrl_soc_data sptlp_soc_data = {
284 .ncommunities = ARRAY_SIZE(sptlp_communities), 284 .ncommunities = ARRAY_SIZE(sptlp_communities),
285}; 285};
286 286
287/* Sunrisepoint-H */
288static const struct pinctrl_pin_desc spth_pins[] = {
289 /* GPP_A */
290 PINCTRL_PIN(0, "RCINB"),
291 PINCTRL_PIN(1, "LAD_0"),
292 PINCTRL_PIN(2, "LAD_1"),
293 PINCTRL_PIN(3, "LAD_2"),
294 PINCTRL_PIN(4, "LAD_3"),
295 PINCTRL_PIN(5, "LFRAMEB"),
296 PINCTRL_PIN(6, "SERIQ"),
297 PINCTRL_PIN(7, "PIRQAB"),
298 PINCTRL_PIN(8, "CLKRUNB"),
299 PINCTRL_PIN(9, "CLKOUT_LPC_0"),
300 PINCTRL_PIN(10, "CLKOUT_LPC_1"),
301 PINCTRL_PIN(11, "PMEB"),
302 PINCTRL_PIN(12, "BM_BUSYB"),
303 PINCTRL_PIN(13, "SUSWARNB_SUS_PWRDNACK"),
304 PINCTRL_PIN(14, "SUS_STATB"),
305 PINCTRL_PIN(15, "SUSACKB"),
306 PINCTRL_PIN(16, "CLKOUT_48"),
307 PINCTRL_PIN(17, "ISH_GP_7"),
308 PINCTRL_PIN(18, "ISH_GP_0"),
309 PINCTRL_PIN(19, "ISH_GP_1"),
310 PINCTRL_PIN(20, "ISH_GP_2"),
311 PINCTRL_PIN(21, "ISH_GP_3"),
312 PINCTRL_PIN(22, "ISH_GP_4"),
313 PINCTRL_PIN(23, "ISH_GP_5"),
314 /* GPP_B */
315 PINCTRL_PIN(24, "CORE_VID_0"),
316 PINCTRL_PIN(25, "CORE_VID_1"),
317 PINCTRL_PIN(26, "VRALERTB"),
318 PINCTRL_PIN(27, "CPU_GP_2"),
319 PINCTRL_PIN(28, "CPU_GP_3"),
320 PINCTRL_PIN(29, "SRCCLKREQB_0"),
321 PINCTRL_PIN(30, "SRCCLKREQB_1"),
322 PINCTRL_PIN(31, "SRCCLKREQB_2"),
323 PINCTRL_PIN(32, "SRCCLKREQB_3"),
324 PINCTRL_PIN(33, "SRCCLKREQB_4"),
325 PINCTRL_PIN(34, "SRCCLKREQB_5"),
326 PINCTRL_PIN(35, "EXT_PWR_GATEB"),
327 PINCTRL_PIN(36, "SLP_S0B"),
328 PINCTRL_PIN(37, "PLTRSTB"),
329 PINCTRL_PIN(38, "SPKR"),
330 PINCTRL_PIN(39, "GSPI0_CSB"),
331 PINCTRL_PIN(40, "GSPI0_CLK"),
332 PINCTRL_PIN(41, "GSPI0_MISO"),
333 PINCTRL_PIN(42, "GSPI0_MOSI"),
334 PINCTRL_PIN(43, "GSPI1_CSB"),
335 PINCTRL_PIN(44, "GSPI1_CLK"),
336 PINCTRL_PIN(45, "GSPI1_MISO"),
337 PINCTRL_PIN(46, "GSPI1_MOSI"),
338 PINCTRL_PIN(47, "SML1ALERTB"),
339 /* GPP_C */
340 PINCTRL_PIN(48, "SMBCLK"),
341 PINCTRL_PIN(49, "SMBDATA"),
342 PINCTRL_PIN(50, "SMBALERTB"),
343 PINCTRL_PIN(51, "SML0CLK"),
344 PINCTRL_PIN(52, "SML0DATA"),
345 PINCTRL_PIN(53, "SML0ALERTB"),
346 PINCTRL_PIN(54, "SML1CLK"),
347 PINCTRL_PIN(55, "SML1DATA"),
348 PINCTRL_PIN(56, "UART0_RXD"),
349 PINCTRL_PIN(57, "UART0_TXD"),
350 PINCTRL_PIN(58, "UART0_RTSB"),
351 PINCTRL_PIN(59, "UART0_CTSB"),
352 PINCTRL_PIN(60, "UART1_RXD"),
353 PINCTRL_PIN(61, "UART1_TXD"),
354 PINCTRL_PIN(62, "UART1_RTSB"),
355 PINCTRL_PIN(63, "UART1_CTSB"),
356 PINCTRL_PIN(64, "I2C0_SDA"),
357 PINCTRL_PIN(65, "I2C0_SCL"),
358 PINCTRL_PIN(66, "I2C1_SDA"),
359 PINCTRL_PIN(67, "I2C1_SCL"),
360 PINCTRL_PIN(68, "UART2_RXD"),
361 PINCTRL_PIN(69, "UART2_TXD"),
362 PINCTRL_PIN(70, "UART2_RTSB"),
363 PINCTRL_PIN(71, "UART2_CTSB"),
364 /* GPP_D */
365 PINCTRL_PIN(72, "SPI1_CSB"),
366 PINCTRL_PIN(73, "SPI1_CLK"),
367 PINCTRL_PIN(74, "SPI1_MISO_IO_1"),
368 PINCTRL_PIN(75, "SPI1_MOSI_IO_0"),
369 PINCTRL_PIN(76, "ISH_I2C2_SDA"),
370 PINCTRL_PIN(77, "SSP0_SFRM"),
371 PINCTRL_PIN(78, "SSP0_TXD"),
372 PINCTRL_PIN(79, "SSP0_RXD"),
373 PINCTRL_PIN(80, "SSP0_SCLK"),
374 PINCTRL_PIN(81, "ISH_SPI_CSB"),
375 PINCTRL_PIN(82, "ISH_SPI_CLK"),
376 PINCTRL_PIN(83, "ISH_SPI_MISO"),
377 PINCTRL_PIN(84, "ISH_SPI_MOSI"),
378 PINCTRL_PIN(85, "ISH_UART0_RXD"),
379 PINCTRL_PIN(86, "ISH_UART0_TXD"),
380 PINCTRL_PIN(87, "ISH_UART0_RTSB"),
381 PINCTRL_PIN(88, "ISH_UART0_CTSB"),
382 PINCTRL_PIN(89, "DMIC_CLK_1"),
383 PINCTRL_PIN(90, "DMIC_DATA_1"),
384 PINCTRL_PIN(91, "DMIC_CLK_0"),
385 PINCTRL_PIN(92, "DMIC_DATA_0"),
386 PINCTRL_PIN(93, "SPI1_IO_2"),
387 PINCTRL_PIN(94, "SPI1_IO_3"),
388 PINCTRL_PIN(95, "ISH_I2C2_SCL"),
389 /* GPP_E */
390 PINCTRL_PIN(96, "SATAXPCIE_0"),
391 PINCTRL_PIN(97, "SATAXPCIE_1"),
392 PINCTRL_PIN(98, "SATAXPCIE_2"),
393 PINCTRL_PIN(99, "CPU_GP_0"),
394 PINCTRL_PIN(100, "SATA_DEVSLP_0"),
395 PINCTRL_PIN(101, "SATA_DEVSLP_1"),
396 PINCTRL_PIN(102, "SATA_DEVSLP_2"),
397 PINCTRL_PIN(103, "CPU_GP_1"),
398 PINCTRL_PIN(104, "SATA_LEDB"),
399 PINCTRL_PIN(105, "USB2_OCB_0"),
400 PINCTRL_PIN(106, "USB2_OCB_1"),
401 PINCTRL_PIN(107, "USB2_OCB_2"),
402 PINCTRL_PIN(108, "USB2_OCB_3"),
403 /* GPP_F */
404 PINCTRL_PIN(109, "SATAXPCIE_3"),
405 PINCTRL_PIN(110, "SATAXPCIE_4"),
406 PINCTRL_PIN(111, "SATAXPCIE_5"),
407 PINCTRL_PIN(112, "SATAXPCIE_6"),
408 PINCTRL_PIN(113, "SATAXPCIE_7"),
409 PINCTRL_PIN(114, "SATA_DEVSLP_3"),
410 PINCTRL_PIN(115, "SATA_DEVSLP_4"),
411 PINCTRL_PIN(116, "SATA_DEVSLP_5"),
412 PINCTRL_PIN(117, "SATA_DEVSLP_6"),
413 PINCTRL_PIN(118, "SATA_DEVSLP_7"),
414 PINCTRL_PIN(119, "SATA_SCLOCK"),
415 PINCTRL_PIN(120, "SATA_SLOAD"),
416 PINCTRL_PIN(121, "SATA_SDATAOUT1"),
417 PINCTRL_PIN(122, "SATA_SDATAOUT0"),
418 PINCTRL_PIN(123, "GPP_F_14"),
419 PINCTRL_PIN(124, "USB_OCB_4"),
420 PINCTRL_PIN(125, "USB_OCB_5"),
421 PINCTRL_PIN(126, "USB_OCB_6"),
422 PINCTRL_PIN(127, "USB_OCB_7"),
423 PINCTRL_PIN(128, "L_VDDEN"),
424 PINCTRL_PIN(129, "L_BKLTEN"),
425 PINCTRL_PIN(130, "L_BKLTCTL"),
426 PINCTRL_PIN(131, "GPP_F_22"),
427 PINCTRL_PIN(132, "GPP_F_23"),
428 /* GPP_G */
429 PINCTRL_PIN(133, "FAN_TACH_0"),
430 PINCTRL_PIN(134, "FAN_TACH_1"),
431 PINCTRL_PIN(135, "FAN_TACH_2"),
432 PINCTRL_PIN(136, "FAN_TACH_3"),
433 PINCTRL_PIN(137, "FAN_TACH_4"),
434 PINCTRL_PIN(138, "FAN_TACH_5"),
435 PINCTRL_PIN(139, "FAN_TACH_6"),
436 PINCTRL_PIN(140, "FAN_TACH_7"),
437 PINCTRL_PIN(141, "FAN_PWM_0"),
438 PINCTRL_PIN(142, "FAN_PWM_1"),
439 PINCTRL_PIN(143, "FAN_PWM_2"),
440 PINCTRL_PIN(144, "FAN_PWM_3"),
441 PINCTRL_PIN(145, "GSXDOUT"),
442 PINCTRL_PIN(146, "GSXSLOAD"),
443 PINCTRL_PIN(147, "GSXDIN"),
444 PINCTRL_PIN(148, "GSXRESETB"),
445 PINCTRL_PIN(149, "GSXCLK"),
446 PINCTRL_PIN(150, "ADR_COMPLETE"),
447 PINCTRL_PIN(151, "NMIB"),
448 PINCTRL_PIN(152, "SMIB"),
449 PINCTRL_PIN(153, "GPP_G_20"),
450 PINCTRL_PIN(154, "GPP_G_21"),
451 PINCTRL_PIN(155, "GPP_G_22"),
452 PINCTRL_PIN(156, "GPP_G_23"),
453 /* GPP_H */
454 PINCTRL_PIN(157, "SRCCLKREQB_6"),
455 PINCTRL_PIN(158, "SRCCLKREQB_7"),
456 PINCTRL_PIN(159, "SRCCLKREQB_8"),
457 PINCTRL_PIN(160, "SRCCLKREQB_9"),
458 PINCTRL_PIN(161, "SRCCLKREQB_10"),
459 PINCTRL_PIN(162, "SRCCLKREQB_11"),
460 PINCTRL_PIN(163, "SRCCLKREQB_12"),
461 PINCTRL_PIN(164, "SRCCLKREQB_13"),
462 PINCTRL_PIN(165, "SRCCLKREQB_14"),
463 PINCTRL_PIN(166, "SRCCLKREQB_15"),
464 PINCTRL_PIN(167, "SML2CLK"),
465 PINCTRL_PIN(168, "SML2DATA"),
466 PINCTRL_PIN(169, "SML2ALERTB"),
467 PINCTRL_PIN(170, "SML3CLK"),
468 PINCTRL_PIN(171, "SML3DATA"),
469 PINCTRL_PIN(172, "SML3ALERTB"),
470 PINCTRL_PIN(173, "SML4CLK"),
471 PINCTRL_PIN(174, "SML4DATA"),
472 PINCTRL_PIN(175, "SML4ALERTB"),
473 PINCTRL_PIN(176, "ISH_I2C0_SDA"),
474 PINCTRL_PIN(177, "ISH_I2C0_SCL"),
475 PINCTRL_PIN(178, "ISH_I2C1_SDA"),
476 PINCTRL_PIN(179, "ISH_I2C1_SCL"),
477 PINCTRL_PIN(180, "GPP_H_23"),
478 /* GPP_I */
479 PINCTRL_PIN(181, "DDSP_HDP_0"),
480 PINCTRL_PIN(182, "DDSP_HDP_1"),
481 PINCTRL_PIN(183, "DDSP_HDP_2"),
482 PINCTRL_PIN(184, "DDSP_HDP_3"),
483 PINCTRL_PIN(185, "EDP_HPD"),
484 PINCTRL_PIN(186, "DDPB_CTRLCLK"),
485 PINCTRL_PIN(187, "DDPB_CTRLDATA"),
486 PINCTRL_PIN(188, "DDPC_CTRLCLK"),
487 PINCTRL_PIN(189, "DDPC_CTRLDATA"),
488 PINCTRL_PIN(190, "DDPD_CTRLCLK"),
489 PINCTRL_PIN(191, "DDPD_CTRLDATA"),
490};
491
492static const unsigned spth_spi0_pins[] = { 39, 40, 41, 42 };
493static const unsigned spth_spi1_pins[] = { 43, 44, 45, 46 };
494static const unsigned spth_uart0_pins[] = { 56, 57, 58, 59 };
495static const unsigned spth_uart1_pins[] = { 60, 61, 62, 63 };
496static const unsigned spth_uart2_pins[] = { 68, 69, 71, 71 };
497static const unsigned spth_i2c0_pins[] = { 64, 65 };
498static const unsigned spth_i2c1_pins[] = { 66, 67 };
499static const unsigned spth_i2c2_pins[] = { 76, 95 };
500
501static const struct intel_pingroup spth_groups[] = {
502 PIN_GROUP("spi0_grp", spth_spi0_pins, 1),
503 PIN_GROUP("spi1_grp", spth_spi1_pins, 1),
504 PIN_GROUP("uart0_grp", spth_uart0_pins, 1),
505 PIN_GROUP("uart1_grp", spth_uart1_pins, 1),
506 PIN_GROUP("uart2_grp", spth_uart2_pins, 1),
507 PIN_GROUP("i2c0_grp", spth_i2c0_pins, 1),
508 PIN_GROUP("i2c1_grp", spth_i2c1_pins, 1),
509 PIN_GROUP("i2c2_grp", spth_i2c2_pins, 2),
510};
511
512static const char * const spth_spi0_groups[] = { "spi0_grp" };
513static const char * const spth_spi1_groups[] = { "spi0_grp" };
514static const char * const spth_uart0_groups[] = { "uart0_grp" };
515static const char * const spth_uart1_groups[] = { "uart1_grp" };
516static const char * const spth_uart2_groups[] = { "uart2_grp" };
517static const char * const spth_i2c0_groups[] = { "i2c0_grp" };
518static const char * const spth_i2c1_groups[] = { "i2c1_grp" };
519static const char * const spth_i2c2_groups[] = { "i2c2_grp" };
520
521static const struct intel_function spth_functions[] = {
522 FUNCTION("spi0", spth_spi0_groups),
523 FUNCTION("spi1", spth_spi1_groups),
524 FUNCTION("uart0", spth_uart0_groups),
525 FUNCTION("uart1", spth_uart1_groups),
526 FUNCTION("uart2", spth_uart2_groups),
527 FUNCTION("i2c0", spth_i2c0_groups),
528 FUNCTION("i2c1", spth_i2c1_groups),
529 FUNCTION("i2c2", spth_i2c2_groups),
530};
531
532static const struct intel_community spth_communities[] = {
533 SPT_COMMUNITY(0, 0, 47),
534 SPT_COMMUNITY(1, 48, 180),
535 SPT_COMMUNITY(2, 181, 191),
536};
537
538static const struct intel_pinctrl_soc_data spth_soc_data = {
539 .pins = spth_pins,
540 .npins = ARRAY_SIZE(spth_pins),
541 .groups = spth_groups,
542 .ngroups = ARRAY_SIZE(spth_groups),
543 .functions = spth_functions,
544 .nfunctions = ARRAY_SIZE(spth_functions),
545 .communities = spth_communities,
546 .ncommunities = ARRAY_SIZE(spth_communities),
547};
548
287static const struct acpi_device_id spt_pinctrl_acpi_match[] = { 549static const struct acpi_device_id spt_pinctrl_acpi_match[] = {
288 { "INT344B", (kernel_ulong_t)&sptlp_soc_data }, 550 { "INT344B", (kernel_ulong_t)&sptlp_soc_data },
551 { "INT345D", (kernel_ulong_t)&spth_soc_data },
289 { } 552 { }
290}; 553};
291MODULE_DEVICE_TABLE(acpi, spt_pinctrl_acpi_match); 554MODULE_DEVICE_TABLE(acpi, spt_pinctrl_acpi_match);
diff --git a/drivers/pinctrl/mediatek/Kconfig b/drivers/pinctrl/mediatek/Kconfig
index 6b3551cad111..02f6f92df86c 100644
--- a/drivers/pinctrl/mediatek/Kconfig
+++ b/drivers/pinctrl/mediatek/Kconfig
@@ -15,6 +15,12 @@ config PINCTRL_MT8135
15 default MACH_MT8135 15 default MACH_MT8135
16 select PINCTRL_MTK_COMMON 16 select PINCTRL_MTK_COMMON
17 17
18config PINCTRL_MT8127
19 bool "Mediatek MT8127 pin control" if COMPILE_TEST && !MACH_MT8127
20 depends on OF
21 default MACH_MT8127
22 select PINCTRL_MTK_COMMON
23
18# For ARMv8 SoCs 24# For ARMv8 SoCs
19config PINCTRL_MT8173 25config PINCTRL_MT8173
20 bool "Mediatek MT8173 pin control" 26 bool "Mediatek MT8173 pin control"
@@ -23,4 +29,11 @@ config PINCTRL_MT8173
23 default ARM64 && ARCH_MEDIATEK 29 default ARM64 && ARCH_MEDIATEK
24 select PINCTRL_MTK_COMMON 30 select PINCTRL_MTK_COMMON
25 31
32# For PMIC
33config PINCTRL_MT6397
34 bool "Mediatek MT6397 pin control" if COMPILE_TEST && !MFD_MT6397
35 depends on OF
36 default MFD_MT6397
37 select PINCTRL_MTK_COMMON
38
26endif 39endif
diff --git a/drivers/pinctrl/mediatek/Makefile b/drivers/pinctrl/mediatek/Makefile
index d8606a2179cf..eb923d64d387 100644
--- a/drivers/pinctrl/mediatek/Makefile
+++ b/drivers/pinctrl/mediatek/Makefile
@@ -3,4 +3,6 @@ obj-$(CONFIG_PINCTRL_MTK_COMMON) += pinctrl-mtk-common.o
3 3
4# SoC Drivers 4# SoC Drivers
5obj-$(CONFIG_PINCTRL_MT8135) += pinctrl-mt8135.o 5obj-$(CONFIG_PINCTRL_MT8135) += pinctrl-mt8135.o
6obj-$(CONFIG_PINCTRL_MT8127) += pinctrl-mt8127.o
6obj-$(CONFIG_PINCTRL_MT8173) += pinctrl-mt8173.o 7obj-$(CONFIG_PINCTRL_MT8173) += pinctrl-mt8173.o
8obj-$(CONFIG_PINCTRL_MT6397) += pinctrl-mt6397.o
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt6397.c b/drivers/pinctrl/mediatek/pinctrl-mt6397.c
new file mode 100644
index 000000000000..f9751ae28e32
--- /dev/null
+++ b/drivers/pinctrl/mediatek/pinctrl-mt6397.c
@@ -0,0 +1,77 @@
1/*
2 * Copyright (c) 2015 MediaTek Inc.
3 * Author: Hongzhou.Yang <hongzhou.yang@mediatek.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 */
14
15#include <linux/module.h>
16#include <linux/platform_device.h>
17#include <linux/of.h>
18#include <linux/of_device.h>
19#include <linux/pinctrl/pinctrl.h>
20#include <linux/pinctrl/pinconf-generic.h>
21#include <linux/mfd/mt6397/core.h>
22
23#include "pinctrl-mtk-common.h"
24#include "pinctrl-mtk-mt6397.h"
25
26#define MT6397_PIN_REG_BASE 0xc000
27
28static const struct mtk_pinctrl_devdata mt6397_pinctrl_data = {
29 .pins = mtk_pins_mt6397,
30 .npins = ARRAY_SIZE(mtk_pins_mt6397),
31 .dir_offset = (MT6397_PIN_REG_BASE + 0x000),
32 .ies_offset = MTK_PINCTRL_NOT_SUPPORT,
33 .smt_offset = MTK_PINCTRL_NOT_SUPPORT,
34 .pullen_offset = (MT6397_PIN_REG_BASE + 0x020),
35 .pullsel_offset = (MT6397_PIN_REG_BASE + 0x040),
36 .dout_offset = (MT6397_PIN_REG_BASE + 0x080),
37 .din_offset = (MT6397_PIN_REG_BASE + 0x0a0),
38 .pinmux_offset = (MT6397_PIN_REG_BASE + 0x0c0),
39 .type1_start = 41,
40 .type1_end = 41,
41 .port_shf = 3,
42 .port_mask = 0x3,
43 .port_align = 2,
44};
45
46static int mt6397_pinctrl_probe(struct platform_device *pdev)
47{
48 struct mt6397_chip *mt6397;
49
50 mt6397 = dev_get_drvdata(pdev->dev.parent);
51 return mtk_pctrl_init(pdev, &mt6397_pinctrl_data, mt6397->regmap);
52}
53
54static const struct of_device_id mt6397_pctrl_match[] = {
55 { .compatible = "mediatek,mt6397-pinctrl", },
56 { }
57};
58MODULE_DEVICE_TABLE(of, mt6397_pctrl_match);
59
60static struct platform_driver mtk_pinctrl_driver = {
61 .probe = mt6397_pinctrl_probe,
62 .driver = {
63 .name = "mediatek-mt6397-pinctrl",
64 .of_match_table = mt6397_pctrl_match,
65 },
66};
67
68static int __init mtk_pinctrl_init(void)
69{
70 return platform_driver_register(&mtk_pinctrl_driver);
71}
72
73module_init(mtk_pinctrl_init);
74
75MODULE_LICENSE("GPL v2");
76MODULE_DESCRIPTION("MediaTek MT6397 Pinctrl Driver");
77MODULE_AUTHOR("Hongzhou Yang <hongzhou.yang@mediatek.com>");
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8127.c b/drivers/pinctrl/mediatek/pinctrl-mt8127.c
new file mode 100644
index 000000000000..b317b0b664ea
--- /dev/null
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8127.c
@@ -0,0 +1,358 @@
1/*
2 * Copyright (c) 2015 MediaTek Inc.
3 * Author: Hongzhou.Yang <hongzhou.yang@mediatek.com>
4 * Yingjoe Chen <yingjoe.chen@mediatek.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15
16#include <linux/module.h>
17#include <linux/platform_device.h>
18#include <linux/of.h>
19#include <linux/of_device.h>
20#include <linux/pinctrl/pinctrl.h>
21#include <linux/regmap.h>
22#include <dt-bindings/pinctrl/mt65xx.h>
23
24#include "pinctrl-mtk-common.h"
25#include "pinctrl-mtk-mt8127.h"
26
27static const struct mtk_drv_group_desc mt8127_drv_grp[] = {
28 /* 0E4E8SR 4/8/12/16 */
29 MTK_DRV_GRP(4, 16, 1, 2, 4),
30 /* 0E2E4SR 2/4/6/8 */
31 MTK_DRV_GRP(2, 8, 1, 2, 2),
32 /* E8E4E2 2/4/6/8/10/12/14/16 */
33 MTK_DRV_GRP(2, 16, 0, 2, 2)
34};
35
36static const struct mtk_pin_drv_grp mt8127_pin_drv[] = {
37 MTK_PIN_DRV_GRP(0, 0xb00, 0, 1),
38 MTK_PIN_DRV_GRP(1, 0xb00, 0, 1),
39 MTK_PIN_DRV_GRP(2, 0xb00, 0, 1),
40 MTK_PIN_DRV_GRP(3, 0xb00, 0, 1),
41 MTK_PIN_DRV_GRP(4, 0xb00, 0, 1),
42 MTK_PIN_DRV_GRP(5, 0xb00, 0, 1),
43 MTK_PIN_DRV_GRP(6, 0xb00, 0, 1),
44 MTK_PIN_DRV_GRP(7, 0xb00, 12, 1),
45 MTK_PIN_DRV_GRP(8, 0xb00, 12, 1),
46 MTK_PIN_DRV_GRP(9, 0xb00, 12, 1),
47 MTK_PIN_DRV_GRP(10, 0xb00, 8, 1),
48 MTK_PIN_DRV_GRP(11, 0xb00, 8, 1),
49 MTK_PIN_DRV_GRP(12, 0xb00, 8, 1),
50 MTK_PIN_DRV_GRP(13, 0xb00, 8, 1),
51 MTK_PIN_DRV_GRP(14, 0xb10, 4, 0),
52 MTK_PIN_DRV_GRP(15, 0xb10, 4, 0),
53 MTK_PIN_DRV_GRP(16, 0xb10, 4, 0),
54 MTK_PIN_DRV_GRP(17, 0xb10, 4, 0),
55 MTK_PIN_DRV_GRP(18, 0xb10, 8, 0),
56 MTK_PIN_DRV_GRP(19, 0xb10, 8, 0),
57 MTK_PIN_DRV_GRP(20, 0xb10, 8, 0),
58 MTK_PIN_DRV_GRP(21, 0xb10, 8, 0),
59 MTK_PIN_DRV_GRP(22, 0xb20, 0, 0),
60 MTK_PIN_DRV_GRP(23, 0xb20, 0, 0),
61 MTK_PIN_DRV_GRP(24, 0xb20, 0, 0),
62 MTK_PIN_DRV_GRP(25, 0xb20, 0, 0),
63 MTK_PIN_DRV_GRP(26, 0xb20, 0, 0),
64 MTK_PIN_DRV_GRP(27, 0xb20, 4, 0),
65 MTK_PIN_DRV_GRP(28, 0xb20, 4, 0),
66 MTK_PIN_DRV_GRP(29, 0xb20, 4, 0),
67 MTK_PIN_DRV_GRP(30, 0xb20, 4, 0),
68 MTK_PIN_DRV_GRP(31, 0xb20, 4, 0),
69 MTK_PIN_DRV_GRP(32, 0xb20, 4, 0),
70 MTK_PIN_DRV_GRP(33, 0xb30, 4, 1),
71 MTK_PIN_DRV_GRP(34, 0xb30, 8, 1),
72 MTK_PIN_DRV_GRP(35, 0xb30, 8, 1),
73 MTK_PIN_DRV_GRP(36, 0xb30, 8, 1),
74 MTK_PIN_DRV_GRP(37, 0xb30, 8, 1),
75 MTK_PIN_DRV_GRP(38, 0xb30, 8, 1),
76 MTK_PIN_DRV_GRP(39, 0xb30, 12, 1),
77 MTK_PIN_DRV_GRP(40, 0xb30, 12, 1),
78 MTK_PIN_DRV_GRP(41, 0xb30, 12, 1),
79 MTK_PIN_DRV_GRP(42, 0xb30, 12, 1),
80 MTK_PIN_DRV_GRP(43, 0xb40, 12, 0),
81 MTK_PIN_DRV_GRP(44, 0xb40, 12, 0),
82 MTK_PIN_DRV_GRP(45, 0xb40, 12, 0),
83 MTK_PIN_DRV_GRP(46, 0xb50, 0, 2),
84 MTK_PIN_DRV_GRP(47, 0xb50, 0, 2),
85 MTK_PIN_DRV_GRP(48, 0xb50, 0, 2),
86 MTK_PIN_DRV_GRP(49, 0xb50, 0, 2),
87 MTK_PIN_DRV_GRP(50, 0xb70, 0, 1),
88 MTK_PIN_DRV_GRP(51, 0xb70, 0, 1),
89 MTK_PIN_DRV_GRP(52, 0xb70, 0, 1),
90 MTK_PIN_DRV_GRP(53, 0xb50, 12, 1),
91 MTK_PIN_DRV_GRP(54, 0xb50, 12, 1),
92 MTK_PIN_DRV_GRP(55, 0xb50, 12, 1),
93 MTK_PIN_DRV_GRP(56, 0xb50, 12, 1),
94 MTK_PIN_DRV_GRP(59, 0xb40, 4, 1),
95 MTK_PIN_DRV_GRP(60, 0xb40, 0, 1),
96 MTK_PIN_DRV_GRP(61, 0xb40, 0, 1),
97 MTK_PIN_DRV_GRP(62, 0xb40, 0, 1),
98 MTK_PIN_DRV_GRP(63, 0xb40, 4, 1),
99 MTK_PIN_DRV_GRP(64, 0xb40, 4, 1),
100 MTK_PIN_DRV_GRP(65, 0xb40, 4, 1),
101 MTK_PIN_DRV_GRP(66, 0xb40, 8, 1),
102 MTK_PIN_DRV_GRP(67, 0xb40, 8, 1),
103 MTK_PIN_DRV_GRP(68, 0xb40, 8, 1),
104 MTK_PIN_DRV_GRP(69, 0xb40, 8, 1),
105 MTK_PIN_DRV_GRP(70, 0xb40, 8, 1),
106 MTK_PIN_DRV_GRP(71, 0xb40, 8, 1),
107 MTK_PIN_DRV_GRP(72, 0xb50, 4, 1),
108 MTK_PIN_DRV_GRP(73, 0xb50, 4, 1),
109 MTK_PIN_DRV_GRP(74, 0xb50, 4, 1),
110 MTK_PIN_DRV_GRP(79, 0xb50, 8, 1),
111 MTK_PIN_DRV_GRP(80, 0xb50, 8, 1),
112 MTK_PIN_DRV_GRP(81, 0xb50, 8, 1),
113 MTK_PIN_DRV_GRP(82, 0xb50, 8, 1),
114 MTK_PIN_DRV_GRP(83, 0xb50, 8, 1),
115 MTK_PIN_DRV_GRP(84, 0xb50, 8, 1),
116 MTK_PIN_DRV_GRP(85, 0xce0, 0, 2),
117 MTK_PIN_DRV_GRP(86, 0xcd0, 0, 2),
118 MTK_PIN_DRV_GRP(87, 0xcf0, 0, 2),
119 MTK_PIN_DRV_GRP(88, 0xcf0, 0, 2),
120 MTK_PIN_DRV_GRP(89, 0xcf0, 0, 2),
121 MTK_PIN_DRV_GRP(90, 0xcf0, 0, 2),
122 MTK_PIN_DRV_GRP(117, 0xb60, 12, 1),
123 MTK_PIN_DRV_GRP(118, 0xb60, 12, 1),
124 MTK_PIN_DRV_GRP(119, 0xb60, 12, 1),
125 MTK_PIN_DRV_GRP(120, 0xb60, 12, 1),
126 MTK_PIN_DRV_GRP(121, 0xc80, 0, 2),
127 MTK_PIN_DRV_GRP(122, 0xc70, 0, 2),
128 MTK_PIN_DRV_GRP(123, 0xc90, 0, 2),
129 MTK_PIN_DRV_GRP(124, 0xc90, 0, 2),
130 MTK_PIN_DRV_GRP(125, 0xc90, 0, 2),
131 MTK_PIN_DRV_GRP(126, 0xc90, 0, 2),
132 MTK_PIN_DRV_GRP(127, 0xc20, 0, 2),
133 MTK_PIN_DRV_GRP(128, 0xc20, 0, 2),
134 MTK_PIN_DRV_GRP(129, 0xc20, 0, 2),
135 MTK_PIN_DRV_GRP(130, 0xc20, 0, 2),
136 MTK_PIN_DRV_GRP(131, 0xc20, 0, 2),
137 MTK_PIN_DRV_GRP(132, 0xc10, 0, 2),
138 MTK_PIN_DRV_GRP(133, 0xc00, 0, 2),
139 MTK_PIN_DRV_GRP(134, 0xc20, 0, 2),
140 MTK_PIN_DRV_GRP(135, 0xc20, 0, 2),
141 MTK_PIN_DRV_GRP(136, 0xc20, 0, 2),
142 MTK_PIN_DRV_GRP(137, 0xc20, 0, 2),
143 MTK_PIN_DRV_GRP(142, 0xb50, 0, 2),
144};
145
146static const struct mtk_pin_spec_pupd_set_samereg mt8127_spec_pupd[] = {
147 MTK_PIN_PUPD_SPEC_SR(33, 0xd90, 2, 0, 1), /* KPROW0 */
148 MTK_PIN_PUPD_SPEC_SR(34, 0xd90, 6, 4, 5), /* KPROW1 */
149 MTK_PIN_PUPD_SPEC_SR(35, 0xd90, 10, 8, 9), /* KPROW2 */
150 MTK_PIN_PUPD_SPEC_SR(36, 0xda0, 2, 0, 1), /* KPCOL0 */
151 MTK_PIN_PUPD_SPEC_SR(37, 0xda0, 6, 4, 5), /* KPCOL1 */
152 MTK_PIN_PUPD_SPEC_SR(38, 0xda0, 10, 8, 9), /* KPCOL2 */
153 MTK_PIN_PUPD_SPEC_SR(46, 0xdb0, 2, 0, 1), /* EINT14 */
154 MTK_PIN_PUPD_SPEC_SR(47, 0xdb0, 6, 4, 5), /* EINT15 */
155 MTK_PIN_PUPD_SPEC_SR(48, 0xdb0, 10, 8, 9), /* EINT16 */
156 MTK_PIN_PUPD_SPEC_SR(49, 0xdb0, 14, 12, 13), /* EINT17 */
157 MTK_PIN_PUPD_SPEC_SR(85, 0xce0, 8, 10, 9), /* MSDC2_CMD */
158 MTK_PIN_PUPD_SPEC_SR(86, 0xcd0, 8, 10, 9), /* MSDC2_CLK */
159 MTK_PIN_PUPD_SPEC_SR(87, 0xd00, 0, 2, 1), /* MSDC2_DAT0 */
160 MTK_PIN_PUPD_SPEC_SR(88, 0xd00, 4, 6, 5), /* MSDC2_DAT1 */
161 MTK_PIN_PUPD_SPEC_SR(89, 0xd00, 8, 10, 9), /* MSDC2_DAT2 */
162 MTK_PIN_PUPD_SPEC_SR(90, 0xd00, 12, 14, 13), /* MSDC2_DAT3 */
163 MTK_PIN_PUPD_SPEC_SR(121, 0xc80, 8, 10, 9), /* MSDC1_CMD */
164 MTK_PIN_PUPD_SPEC_SR(122, 0xc70, 8, 10, 9), /* MSDC1_CLK */
165 MTK_PIN_PUPD_SPEC_SR(123, 0xca0, 0, 2, 1), /* MSDC1_DAT0 */
166 MTK_PIN_PUPD_SPEC_SR(124, 0xca0, 4, 6, 5), /* MSDC1_DAT1 */
167 MTK_PIN_PUPD_SPEC_SR(125, 0xca0, 8, 10, 9), /* MSDC1_DAT2 */
168 MTK_PIN_PUPD_SPEC_SR(126, 0xca0, 12, 14, 13), /* MSDC1_DAT3 */
169 MTK_PIN_PUPD_SPEC_SR(127, 0xc40, 12, 14, 13), /* MSDC0_DAT7 */
170 MTK_PIN_PUPD_SPEC_SR(128, 0xc40, 8, 10, 9), /* MSDC0_DAT6 */
171 MTK_PIN_PUPD_SPEC_SR(129, 0xc40, 4, 6, 5), /* MSDC0_DAT5 */
172 MTK_PIN_PUPD_SPEC_SR(130, 0xc40, 0, 2, 1), /* MSDC0_DAT4 */
173 MTK_PIN_PUPD_SPEC_SR(131, 0xc50, 0, 2, 1), /* MSDC0_RSTB */
174 MTK_PIN_PUPD_SPEC_SR(132, 0xc10, 8, 10, 9), /* MSDC0_CMD */
175 MTK_PIN_PUPD_SPEC_SR(133, 0xc00, 8, 10, 9), /* MSDC0_CLK */
176 MTK_PIN_PUPD_SPEC_SR(134, 0xc30, 12, 14, 13), /* MSDC0_DAT3 */
177 MTK_PIN_PUPD_SPEC_SR(135, 0xc30, 8, 10, 9), /* MSDC0_DAT2 */
178 MTK_PIN_PUPD_SPEC_SR(136, 0xc30, 4, 6, 5), /* MSDC0_DAT1 */
179 MTK_PIN_PUPD_SPEC_SR(137, 0xc30, 0, 2, 1), /* MSDC0_DAT0 */
180 MTK_PIN_PUPD_SPEC_SR(142, 0xdc0, 2, 0, 1), /* EINT21 */
181};
182
183static int mt8127_spec_pull_set(struct regmap *regmap, unsigned int pin,
184 unsigned char align, bool isup, unsigned int r1r0)
185{
186 return mtk_pctrl_spec_pull_set_samereg(regmap, mt8127_spec_pupd,
187 ARRAY_SIZE(mt8127_spec_pupd), pin, align, isup, r1r0);
188}
189
190static const struct mtk_pin_ies_smt_set mt8127_ies_set[] = {
191 MTK_PIN_IES_SMT_SPEC(0, 9, 0x900, 0),
192 MTK_PIN_IES_SMT_SPEC(10, 13, 0x900, 1),
193 MTK_PIN_IES_SMT_SPEC(14, 28, 0x900, 2),
194 MTK_PIN_IES_SMT_SPEC(29, 32, 0x900, 3),
195 MTK_PIN_IES_SMT_SPEC(33, 33, 0x910, 11),
196 MTK_PIN_IES_SMT_SPEC(34, 38, 0x900, 10),
197 MTK_PIN_IES_SMT_SPEC(39, 42, 0x900, 11),
198 MTK_PIN_IES_SMT_SPEC(43, 45, 0x900, 12),
199 MTK_PIN_IES_SMT_SPEC(46, 49, 0x900, 13),
200 MTK_PIN_IES_SMT_SPEC(50, 52, 0x910, 10),
201 MTK_PIN_IES_SMT_SPEC(53, 56, 0x900, 14),
202 MTK_PIN_IES_SMT_SPEC(57, 58, 0x910, 0),
203 MTK_PIN_IES_SMT_SPEC(59, 65, 0x910, 2),
204 MTK_PIN_IES_SMT_SPEC(66, 71, 0x910, 3),
205 MTK_PIN_IES_SMT_SPEC(72, 74, 0x910, 4),
206 MTK_PIN_IES_SMT_SPEC(75, 76, 0x900, 15),
207 MTK_PIN_IES_SMT_SPEC(77, 78, 0x910, 1),
208 MTK_PIN_IES_SMT_SPEC(79, 82, 0x910, 5),
209 MTK_PIN_IES_SMT_SPEC(83, 84, 0x910, 6),
210 MTK_PIN_IES_SMT_SPEC(117, 120, 0x910, 7),
211 MTK_PIN_IES_SMT_SPEC(121, 121, 0xc80, 4),
212 MTK_PIN_IES_SMT_SPEC(122, 122, 0xc70, 4),
213 MTK_PIN_IES_SMT_SPEC(123, 126, 0xc90, 4),
214 MTK_PIN_IES_SMT_SPEC(127, 131, 0xc20, 4),
215 MTK_PIN_IES_SMT_SPEC(132, 132, 0xc10, 4),
216 MTK_PIN_IES_SMT_SPEC(133, 133, 0xc00, 4),
217 MTK_PIN_IES_SMT_SPEC(134, 137, 0xc20, 4),
218 MTK_PIN_IES_SMT_SPEC(138, 141, 0x910, 9),
219 MTK_PIN_IES_SMT_SPEC(142, 142, 0x900, 13),
220};
221
222static const struct mtk_pin_ies_smt_set mt8127_smt_set[] = {
223 MTK_PIN_IES_SMT_SPEC(0, 9, 0x920, 0),
224 MTK_PIN_IES_SMT_SPEC(10, 13, 0x920, 1),
225 MTK_PIN_IES_SMT_SPEC(14, 28, 0x920, 2),
226 MTK_PIN_IES_SMT_SPEC(29, 32, 0x920, 3),
227 MTK_PIN_IES_SMT_SPEC(33, 33, 0x930, 11),
228 MTK_PIN_IES_SMT_SPEC(34, 38, 0x920, 10),
229 MTK_PIN_IES_SMT_SPEC(39, 42, 0x920, 11),
230 MTK_PIN_IES_SMT_SPEC(43, 45, 0x920, 12),
231 MTK_PIN_IES_SMT_SPEC(46, 49, 0x920, 13),
232 MTK_PIN_IES_SMT_SPEC(50, 52, 0x930, 10),
233 MTK_PIN_IES_SMT_SPEC(53, 56, 0x920, 14),
234 MTK_PIN_IES_SMT_SPEC(57, 58, 0x930, 0),
235 MTK_PIN_IES_SMT_SPEC(59, 65, 0x930, 2),
236 MTK_PIN_IES_SMT_SPEC(66, 71, 0x930, 3),
237 MTK_PIN_IES_SMT_SPEC(72, 74, 0x930, 4),
238 MTK_PIN_IES_SMT_SPEC(75, 76, 0x920, 15),
239 MTK_PIN_IES_SMT_SPEC(77, 78, 0x930, 1),
240 MTK_PIN_IES_SMT_SPEC(79, 82, 0x930, 5),
241 MTK_PIN_IES_SMT_SPEC(83, 84, 0x930, 6),
242 MTK_PIN_IES_SMT_SPEC(85, 85, 0xce0, 11),
243 MTK_PIN_IES_SMT_SPEC(86, 86, 0xcd0, 11),
244 MTK_PIN_IES_SMT_SPEC(87, 87, 0xd00, 3),
245 MTK_PIN_IES_SMT_SPEC(88, 88, 0xd00, 7),
246 MTK_PIN_IES_SMT_SPEC(89, 89, 0xd00, 11),
247 MTK_PIN_IES_SMT_SPEC(90, 90, 0xd00, 15),
248 MTK_PIN_IES_SMT_SPEC(117, 120, 0x930, 7),
249 MTK_PIN_IES_SMT_SPEC(121, 121, 0xc80, 11),
250 MTK_PIN_IES_SMT_SPEC(122, 122, 0xc70, 11),
251 MTK_PIN_IES_SMT_SPEC(123, 123, 0xca0, 3),
252 MTK_PIN_IES_SMT_SPEC(124, 124, 0xca0, 7),
253 MTK_PIN_IES_SMT_SPEC(125, 125, 0xca0, 11),
254 MTK_PIN_IES_SMT_SPEC(126, 126, 0xca0, 15),
255 MTK_PIN_IES_SMT_SPEC(127, 127, 0xc40, 15),
256 MTK_PIN_IES_SMT_SPEC(128, 128, 0xc40, 11),
257 MTK_PIN_IES_SMT_SPEC(129, 129, 0xc40, 7),
258 MTK_PIN_IES_SMT_SPEC(130, 130, 0xc40, 3),
259 MTK_PIN_IES_SMT_SPEC(131, 131, 0xc50, 3),
260 MTK_PIN_IES_SMT_SPEC(132, 132, 0xc10, 11),
261 MTK_PIN_IES_SMT_SPEC(133, 133, 0xc00, 11),
262 MTK_PIN_IES_SMT_SPEC(134, 134, 0xc30, 15),
263 MTK_PIN_IES_SMT_SPEC(135, 135, 0xc30, 11),
264 MTK_PIN_IES_SMT_SPEC(136, 136, 0xc30, 7),
265 MTK_PIN_IES_SMT_SPEC(137, 137, 0xc30, 3),
266 MTK_PIN_IES_SMT_SPEC(138, 141, 0x930, 9),
267 MTK_PIN_IES_SMT_SPEC(142, 142, 0x920, 13),
268};
269
270static int mt8127_ies_smt_set(struct regmap *regmap, unsigned int pin,
271 unsigned char align, int value, enum pin_config_param arg)
272{
273 if (arg == PIN_CONFIG_INPUT_ENABLE)
274 return mtk_pconf_spec_set_ies_smt_range(regmap, mt8127_ies_set,
275 ARRAY_SIZE(mt8127_ies_set), pin, align, value);
276 else if (arg == PIN_CONFIG_INPUT_SCHMITT_ENABLE)
277 return mtk_pconf_spec_set_ies_smt_range(regmap, mt8127_smt_set,
278 ARRAY_SIZE(mt8127_smt_set), pin, align, value);
279 return -EINVAL;
280}
281
282
283static const struct mtk_pinctrl_devdata mt8127_pinctrl_data = {
284 .pins = mtk_pins_mt8127,
285 .npins = ARRAY_SIZE(mtk_pins_mt8127),
286 .grp_desc = mt8127_drv_grp,
287 .n_grp_cls = ARRAY_SIZE(mt8127_drv_grp),
288 .pin_drv_grp = mt8127_pin_drv,
289 .n_pin_drv_grps = ARRAY_SIZE(mt8127_pin_drv),
290 .spec_pull_set = mt8127_spec_pull_set,
291 .spec_ies_smt_set = mt8127_ies_smt_set,
292 .dir_offset = 0x0000,
293 .pullen_offset = 0x0100,
294 .pullsel_offset = 0x0200,
295 .dout_offset = 0x0400,
296 .din_offset = 0x0500,
297 .pinmux_offset = 0x0600,
298 .type1_start = 143,
299 .type1_end = 143,
300 .port_shf = 4,
301 .port_mask = 0xf,
302 .port_align = 4,
303 .eint_offsets = {
304 .name = "mt8127_eint",
305 .stat = 0x000,
306 .ack = 0x040,
307 .mask = 0x080,
308 .mask_set = 0x0c0,
309 .mask_clr = 0x100,
310 .sens = 0x140,
311 .sens_set = 0x180,
312 .sens_clr = 0x1c0,
313 .soft = 0x200,
314 .soft_set = 0x240,
315 .soft_clr = 0x280,
316 .pol = 0x300,
317 .pol_set = 0x340,
318 .pol_clr = 0x380,
319 .dom_en = 0x400,
320 .dbnc_ctrl = 0x500,
321 .dbnc_set = 0x600,
322 .dbnc_clr = 0x700,
323 .port_mask = 7,
324 .ports = 6,
325 },
326 .ap_num = 143,
327 .db_cnt = 16,
328};
329
330static int mt8127_pinctrl_probe(struct platform_device *pdev)
331{
332 return mtk_pctrl_init(pdev, &mt8127_pinctrl_data, NULL);
333}
334
335static const struct of_device_id mt8127_pctrl_match[] = {
336 { .compatible = "mediatek,mt8127-pinctrl", },
337 { }
338};
339MODULE_DEVICE_TABLE(of, mt8127_pctrl_match);
340
341static struct platform_driver mtk_pinctrl_driver = {
342 .probe = mt8127_pinctrl_probe,
343 .driver = {
344 .name = "mediatek-mt8127-pinctrl",
345 .of_match_table = mt8127_pctrl_match,
346 },
347};
348
349static int __init mtk_pinctrl_init(void)
350{
351 return platform_driver_register(&mtk_pinctrl_driver);
352}
353
354module_init(mtk_pinctrl_init);
355
356MODULE_LICENSE("GPL v2");
357MODULE_DESCRIPTION("MediaTek MT8127 Pinctrl Driver");
358MODULE_AUTHOR("Yingjoe Chen <yingjoe.chen@mediatek.com>");
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8135.c b/drivers/pinctrl/mediatek/pinctrl-mt8135.c
index f1e1e187ce96..404f1178511d 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8135.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8135.c
@@ -32,12 +32,12 @@
32#define R1_BASE2 0x250 32#define R1_BASE2 0x250
33 33
34struct mtk_spec_pull_set { 34struct mtk_spec_pull_set {
35 unsigned int pin; 35 unsigned char pin;
36 unsigned int pupd_offset;
37 unsigned char pupd_bit; 36 unsigned char pupd_bit;
38 unsigned int r0_offset; 37 unsigned short pupd_offset;
38 unsigned short r0_offset;
39 unsigned short r1_offset;
39 unsigned char r0_bit; 40 unsigned char r0_bit;
40 unsigned int r1_offset;
41 unsigned char r1_bit; 41 unsigned char r1_bit;
42}; 42};
43 43
@@ -305,7 +305,6 @@ static const struct mtk_pinctrl_devdata mt8135_pinctrl_data = {
305 .pullen_offset = 0x0200, 305 .pullen_offset = 0x0200,
306 .smt_offset = 0x0300, 306 .smt_offset = 0x0300,
307 .pullsel_offset = 0x0400, 307 .pullsel_offset = 0x0400,
308 .invser_offset = 0x0600,
309 .dout_offset = 0x0800, 308 .dout_offset = 0x0800,
310 .din_offset = 0x0A00, 309 .din_offset = 0x0A00,
311 .pinmux_offset = 0x0C00, 310 .pinmux_offset = 0x0C00,
@@ -314,7 +313,6 @@ static const struct mtk_pinctrl_devdata mt8135_pinctrl_data = {
314 .port_shf = 4, 313 .port_shf = 4,
315 .port_mask = 0xf, 314 .port_mask = 0xf,
316 .port_align = 4, 315 .port_align = 4,
317 .chip_type = MTK_CHIP_TYPE_BASE,
318 .eint_offsets = { 316 .eint_offsets = {
319 .name = "mt8135_eint", 317 .name = "mt8135_eint",
320 .stat = 0x000, 318 .stat = 0x000,
@@ -344,7 +342,7 @@ static const struct mtk_pinctrl_devdata mt8135_pinctrl_data = {
344 342
345static int mt8135_pinctrl_probe(struct platform_device *pdev) 343static int mt8135_pinctrl_probe(struct platform_device *pdev)
346{ 344{
347 return mtk_pctrl_init(pdev, &mt8135_pinctrl_data); 345 return mtk_pctrl_init(pdev, &mt8135_pinctrl_data, NULL);
348} 346}
349 347
350static const struct of_device_id mt8135_pctrl_match[] = { 348static const struct of_device_id mt8135_pctrl_match[] = {
@@ -359,7 +357,6 @@ static struct platform_driver mtk_pinctrl_driver = {
359 .probe = mt8135_pinctrl_probe, 357 .probe = mt8135_pinctrl_probe,
360 .driver = { 358 .driver = {
361 .name = "mediatek-mt8135-pinctrl", 359 .name = "mediatek-mt8135-pinctrl",
362 .owner = THIS_MODULE,
363 .of_match_table = mt8135_pctrl_match, 360 .of_match_table = mt8135_pctrl_match,
364 }, 361 },
365}; 362};
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8173.c b/drivers/pinctrl/mediatek/pinctrl-mt8173.c
index 412ea84836a1..d0c811d5f07b 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mt8173.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mt8173.c
@@ -18,6 +18,7 @@
18#include <linux/of_device.h> 18#include <linux/of_device.h>
19#include <linux/pinctrl/pinctrl.h> 19#include <linux/pinctrl/pinctrl.h>
20#include <linux/regmap.h> 20#include <linux/regmap.h>
21#include <linux/pinctrl/pinconf-generic.h>
21#include <dt-bindings/pinctrl/mt65xx.h> 22#include <dt-bindings/pinctrl/mt65xx.h>
22 23
23#include "pinctrl-mtk-common.h" 24#include "pinctrl-mtk-common.h"
@@ -25,228 +26,172 @@
25 26
26#define DRV_BASE 0xb00 27#define DRV_BASE 0xb00
27 28
28/** 29static const struct mtk_pin_spec_pupd_set_samereg mt8173_spec_pupd[] = {
29 * struct mtk_pin_ies_smt_set - For special pins' ies and smt setting. 30 MTK_PIN_PUPD_SPEC_SR(119, 0xe00, 2, 1, 0), /* KROW0 */
30 * @start: The start pin number of those special pins. 31 MTK_PIN_PUPD_SPEC_SR(120, 0xe00, 6, 5, 4), /* KROW1 */
31 * @end: The end pin number of those special pins. 32 MTK_PIN_PUPD_SPEC_SR(121, 0xe00, 10, 9, 8), /* KROW2 */
32 * @offset: The offset of special setting register. 33 MTK_PIN_PUPD_SPEC_SR(122, 0xe10, 2, 1, 0), /* KCOL0 */
33 * @bit: The bit of special setting register. 34 MTK_PIN_PUPD_SPEC_SR(123, 0xe10, 6, 5, 4), /* KCOL1 */
34 */ 35 MTK_PIN_PUPD_SPEC_SR(124, 0xe10, 10, 9, 8), /* KCOL2 */
35struct mtk_pin_ies_smt_set { 36
36 unsigned int start; 37 MTK_PIN_PUPD_SPEC_SR(67, 0xd10, 2, 1, 0), /* ms0 DS */
37 unsigned int end; 38 MTK_PIN_PUPD_SPEC_SR(68, 0xd00, 2, 1, 0), /* ms0 RST */
38 unsigned int offset; 39 MTK_PIN_PUPD_SPEC_SR(66, 0xc10, 2, 1, 0), /* ms0 cmd */
39 unsigned char bit; 40 MTK_PIN_PUPD_SPEC_SR(65, 0xc00, 2, 1, 0), /* ms0 clk */
41 MTK_PIN_PUPD_SPEC_SR(57, 0xc20, 2, 1, 0), /* ms0 data0 */
42 MTK_PIN_PUPD_SPEC_SR(58, 0xc20, 2, 1, 0), /* ms0 data1 */
43 MTK_PIN_PUPD_SPEC_SR(59, 0xc20, 2, 1, 0), /* ms0 data2 */
44 MTK_PIN_PUPD_SPEC_SR(60, 0xc20, 2, 1, 0), /* ms0 data3 */
45 MTK_PIN_PUPD_SPEC_SR(61, 0xc20, 2, 1, 0), /* ms0 data4 */
46 MTK_PIN_PUPD_SPEC_SR(62, 0xc20, 2, 1, 0), /* ms0 data5 */
47 MTK_PIN_PUPD_SPEC_SR(63, 0xc20, 2, 1, 0), /* ms0 data6 */
48 MTK_PIN_PUPD_SPEC_SR(64, 0xc20, 2, 1, 0), /* ms0 data7 */
49
50 MTK_PIN_PUPD_SPEC_SR(78, 0xc50, 2, 1, 0), /* ms1 cmd */
51 MTK_PIN_PUPD_SPEC_SR(73, 0xd20, 2, 1, 0), /* ms1 dat0 */
52 MTK_PIN_PUPD_SPEC_SR(74, 0xd20, 6, 5, 4), /* ms1 dat1 */
53 MTK_PIN_PUPD_SPEC_SR(75, 0xd20, 10, 9, 8), /* ms1 dat2 */
54 MTK_PIN_PUPD_SPEC_SR(76, 0xd20, 14, 13, 12), /* ms1 dat3 */
55 MTK_PIN_PUPD_SPEC_SR(77, 0xc40, 2, 1, 0), /* ms1 clk */
56
57 MTK_PIN_PUPD_SPEC_SR(100, 0xd40, 2, 1, 0), /* ms2 dat0 */
58 MTK_PIN_PUPD_SPEC_SR(101, 0xd40, 6, 5, 4), /* ms2 dat1 */
59 MTK_PIN_PUPD_SPEC_SR(102, 0xd40, 10, 9, 8), /* ms2 dat2 */
60 MTK_PIN_PUPD_SPEC_SR(103, 0xd40, 14, 13, 12), /* ms2 dat3 */
61 MTK_PIN_PUPD_SPEC_SR(104, 0xc80, 2, 1, 0), /* ms2 clk */
62 MTK_PIN_PUPD_SPEC_SR(105, 0xc90, 2, 1, 0), /* ms2 cmd */
63
64 MTK_PIN_PUPD_SPEC_SR(22, 0xd60, 2, 1, 0), /* ms3 dat0 */
65 MTK_PIN_PUPD_SPEC_SR(23, 0xd60, 6, 5, 4), /* ms3 dat1 */
66 MTK_PIN_PUPD_SPEC_SR(24, 0xd60, 10, 9, 8), /* ms3 dat2 */
67 MTK_PIN_PUPD_SPEC_SR(25, 0xd60, 14, 13, 12), /* ms3 dat3 */
68 MTK_PIN_PUPD_SPEC_SR(26, 0xcc0, 2, 1, 0), /* ms3 clk */
69 MTK_PIN_PUPD_SPEC_SR(27, 0xcd0, 2, 1, 0) /* ms3 cmd */
40}; 70};
41 71
42#define MTK_PIN_IES_SMT_SET(_start, _end, _offset, _bit) \ 72static int mt8173_spec_pull_set(struct regmap *regmap, unsigned int pin,
43 { \
44 .start = _start, \
45 .end = _end, \
46 .bit = _bit, \
47 .offset = _offset, \
48 }
49
50/**
51 * struct mtk_pin_spec_pupd_set - For special pins' pull up/down setting.
52 * @pin: The pin number.
53 * @offset: The offset of special pull up/down setting register.
54 * @pupd_bit: The pull up/down bit in this register.
55 * @r0_bit: The r0 bit of pull resistor.
56 * @r1_bit: The r1 bit of pull resistor.
57 */
58struct mtk_pin_spec_pupd_set {
59 unsigned int pin;
60 unsigned int offset;
61 unsigned char pupd_bit;
62 unsigned char r1_bit;
63 unsigned char r0_bit;
64};
65
66#define MTK_PIN_PUPD_SPEC(_pin, _offset, _pupd, _r1, _r0) \
67 { \
68 .pin = _pin, \
69 .offset = _offset, \
70 .pupd_bit = _pupd, \
71 .r1_bit = _r1, \
72 .r0_bit = _r0, \
73 }
74
75static const struct mtk_pin_spec_pupd_set mt8173_spec_pupd[] = {
76 MTK_PIN_PUPD_SPEC(119, 0xe00, 2, 1, 0), /* KROW0 */
77 MTK_PIN_PUPD_SPEC(120, 0xe00, 6, 5, 4), /* KROW1 */
78 MTK_PIN_PUPD_SPEC(121, 0xe00, 10, 9, 8), /* KROW2 */
79 MTK_PIN_PUPD_SPEC(122, 0xe10, 2, 1, 0), /* KCOL0 */
80 MTK_PIN_PUPD_SPEC(123, 0xe10, 6, 5, 4), /* KCOL1 */
81 MTK_PIN_PUPD_SPEC(124, 0xe10, 10, 9, 8), /* KCOL2 */
82
83 MTK_PIN_PUPD_SPEC(67, 0xd10, 2, 1, 0), /* ms0 DS */
84 MTK_PIN_PUPD_SPEC(68, 0xd00, 2, 1, 0), /* ms0 RST */
85 MTK_PIN_PUPD_SPEC(66, 0xc10, 2, 1, 0), /* ms0 cmd */
86 MTK_PIN_PUPD_SPEC(65, 0xc00, 2, 1, 0), /* ms0 clk */
87 MTK_PIN_PUPD_SPEC(57, 0xc20, 2, 1, 0), /* ms0 data0 */
88 MTK_PIN_PUPD_SPEC(58, 0xc20, 2, 1, 0), /* ms0 data1 */
89 MTK_PIN_PUPD_SPEC(59, 0xc20, 2, 1, 0), /* ms0 data2 */
90 MTK_PIN_PUPD_SPEC(60, 0xc20, 2, 1, 0), /* ms0 data3 */
91 MTK_PIN_PUPD_SPEC(61, 0xc20, 2, 1, 0), /* ms0 data4 */
92 MTK_PIN_PUPD_SPEC(62, 0xc20, 2, 1, 0), /* ms0 data5 */
93 MTK_PIN_PUPD_SPEC(63, 0xc20, 2, 1, 0), /* ms0 data6 */
94 MTK_PIN_PUPD_SPEC(64, 0xc20, 2, 1, 0), /* ms0 data7 */
95
96 MTK_PIN_PUPD_SPEC(78, 0xc50, 2, 1, 0), /* ms1 cmd */
97 MTK_PIN_PUPD_SPEC(73, 0xd20, 2, 1, 0), /* ms1 dat0 */
98 MTK_PIN_PUPD_SPEC(74, 0xd20, 6, 5, 4), /* ms1 dat1 */
99 MTK_PIN_PUPD_SPEC(75, 0xd20, 10, 9, 8), /* ms1 dat2 */
100 MTK_PIN_PUPD_SPEC(76, 0xd20, 14, 13, 12), /* ms1 dat3 */
101 MTK_PIN_PUPD_SPEC(77, 0xc40, 2, 1, 0), /* ms1 clk */
102
103 MTK_PIN_PUPD_SPEC(100, 0xd40, 2, 1, 0), /* ms2 dat0 */
104 MTK_PIN_PUPD_SPEC(101, 0xd40, 6, 5, 4), /* ms2 dat1 */
105 MTK_PIN_PUPD_SPEC(102, 0xd40, 10, 9, 8), /* ms2 dat2 */
106 MTK_PIN_PUPD_SPEC(103, 0xd40, 14, 13, 12), /* ms2 dat3 */
107 MTK_PIN_PUPD_SPEC(104, 0xc80, 2, 1, 0), /* ms2 clk */
108 MTK_PIN_PUPD_SPEC(105, 0xc90, 2, 1, 0), /* ms2 cmd */
109
110 MTK_PIN_PUPD_SPEC(22, 0xd60, 2, 1, 0), /* ms3 dat0 */
111 MTK_PIN_PUPD_SPEC(23, 0xd60, 6, 5, 4), /* ms3 dat1 */
112 MTK_PIN_PUPD_SPEC(24, 0xd60, 10, 9, 8), /* ms3 dat2 */
113 MTK_PIN_PUPD_SPEC(25, 0xd60, 14, 13, 12), /* ms3 dat3 */
114 MTK_PIN_PUPD_SPEC(26, 0xcc0, 2, 1, 0), /* ms3 clk */
115 MTK_PIN_PUPD_SPEC(27, 0xcd0, 2, 1, 0) /* ms3 cmd */
116};
117
118static int spec_pull_set(struct regmap *regmap, unsigned int pin,
119 unsigned char align, bool isup, unsigned int r1r0) 73 unsigned char align, bool isup, unsigned int r1r0)
120{ 74{
121 unsigned int i; 75 return mtk_pctrl_spec_pull_set_samereg(regmap, mt8173_spec_pupd,
122 unsigned int reg_pupd, reg_set, reg_rst; 76 ARRAY_SIZE(mt8173_spec_pupd), pin, align, isup, r1r0);
123 unsigned int bit_pupd, bit_r0, bit_r1;
124 const struct mtk_pin_spec_pupd_set *spec_pupd_pin;
125 bool find = false;
126
127 for (i = 0; i < ARRAY_SIZE(mt8173_spec_pupd); i++) {
128 if (pin == mt8173_spec_pupd[i].pin) {
129 find = true;
130 break;
131 }
132 }
133
134 if (!find)
135 return -EINVAL;
136
137 spec_pupd_pin = mt8173_spec_pupd + i;
138 reg_set = spec_pupd_pin->offset + align;
139 reg_rst = spec_pupd_pin->offset + (align << 1);
140
141 if (isup)
142 reg_pupd = reg_rst;
143 else
144 reg_pupd = reg_set;
145
146 bit_pupd = BIT(spec_pupd_pin->pupd_bit);
147 regmap_write(regmap, reg_pupd, bit_pupd);
148
149 bit_r0 = BIT(spec_pupd_pin->r0_bit);
150 bit_r1 = BIT(spec_pupd_pin->r1_bit);
151
152 switch (r1r0) {
153 case MTK_PUPD_SET_R1R0_00:
154 regmap_write(regmap, reg_rst, bit_r0);
155 regmap_write(regmap, reg_rst, bit_r1);
156 break;
157 case MTK_PUPD_SET_R1R0_01:
158 regmap_write(regmap, reg_set, bit_r0);
159 regmap_write(regmap, reg_rst, bit_r1);
160 break;
161 case MTK_PUPD_SET_R1R0_10:
162 regmap_write(regmap, reg_rst, bit_r0);
163 regmap_write(regmap, reg_set, bit_r1);
164 break;
165 case MTK_PUPD_SET_R1R0_11:
166 regmap_write(regmap, reg_set, bit_r0);
167 regmap_write(regmap, reg_set, bit_r1);
168 break;
169 default:
170 return -EINVAL;
171 }
172
173 return 0;
174} 77}
175 78
176static const struct mtk_pin_ies_smt_set mt8173_ies_smt_set[] = { 79static const struct mtk_pin_ies_smt_set mt8173_smt_set[] = {
177 MTK_PIN_IES_SMT_SET(0, 4, 0x930, 1), 80 MTK_PIN_IES_SMT_SPEC(0, 4, 0x930, 1),
178 MTK_PIN_IES_SMT_SET(5, 9, 0x930, 2), 81 MTK_PIN_IES_SMT_SPEC(5, 9, 0x930, 2),
179 MTK_PIN_IES_SMT_SET(10, 13, 0x930, 10), 82 MTK_PIN_IES_SMT_SPEC(10, 13, 0x930, 10),
180 MTK_PIN_IES_SMT_SET(14, 15, 0x940, 10), 83 MTK_PIN_IES_SMT_SPEC(14, 15, 0x940, 10),
181 MTK_PIN_IES_SMT_SET(16, 16, 0x930, 0), 84 MTK_PIN_IES_SMT_SPEC(16, 16, 0x930, 0),
182 MTK_PIN_IES_SMT_SET(17, 17, 0x950, 2), 85 MTK_PIN_IES_SMT_SPEC(17, 17, 0x950, 2),
183 MTK_PIN_IES_SMT_SET(18, 21, 0x940, 3), 86 MTK_PIN_IES_SMT_SPEC(18, 21, 0x940, 3),
184 MTK_PIN_IES_SMT_SET(29, 32, 0x930, 3), 87 MTK_PIN_IES_SMT_SPEC(22, 25, 0xce0, 13),
185 MTK_PIN_IES_SMT_SET(33, 33, 0x930, 4), 88 MTK_PIN_IES_SMT_SPEC(26, 26, 0xcc0, 13),
186 MTK_PIN_IES_SMT_SET(34, 36, 0x930, 5), 89 MTK_PIN_IES_SMT_SPEC(27, 27, 0xcd0, 13),
187 MTK_PIN_IES_SMT_SET(37, 38, 0x930, 6), 90 MTK_PIN_IES_SMT_SPEC(28, 28, 0xd70, 13),
188 MTK_PIN_IES_SMT_SET(39, 39, 0x930, 7), 91 MTK_PIN_IES_SMT_SPEC(29, 32, 0x930, 3),
189 MTK_PIN_IES_SMT_SET(40, 41, 0x930, 9), 92 MTK_PIN_IES_SMT_SPEC(33, 33, 0x930, 4),
190 MTK_PIN_IES_SMT_SET(42, 42, 0x940, 0), 93 MTK_PIN_IES_SMT_SPEC(34, 36, 0x930, 5),
191 MTK_PIN_IES_SMT_SET(43, 44, 0x930, 11), 94 MTK_PIN_IES_SMT_SPEC(37, 38, 0x930, 6),
192 MTK_PIN_IES_SMT_SET(45, 46, 0x930, 12), 95 MTK_PIN_IES_SMT_SPEC(39, 39, 0x930, 7),
193 MTK_PIN_IES_SMT_SET(57, 64, 0xc20, 13), 96 MTK_PIN_IES_SMT_SPEC(40, 41, 0x930, 9),
194 MTK_PIN_IES_SMT_SET(65, 65, 0xc10, 13), 97 MTK_PIN_IES_SMT_SPEC(42, 42, 0x940, 0),
195 MTK_PIN_IES_SMT_SET(66, 66, 0xc00, 13), 98 MTK_PIN_IES_SMT_SPEC(43, 44, 0x930, 11),
196 MTK_PIN_IES_SMT_SET(67, 67, 0xd10, 13), 99 MTK_PIN_IES_SMT_SPEC(45, 46, 0x930, 12),
197 MTK_PIN_IES_SMT_SET(68, 68, 0xd00, 13), 100 MTK_PIN_IES_SMT_SPEC(57, 64, 0xc20, 13),
198 MTK_PIN_IES_SMT_SET(69, 72, 0x940, 14), 101 MTK_PIN_IES_SMT_SPEC(65, 65, 0xc10, 13),
199 MTK_PIN_IES_SMT_SET(73, 76, 0xc60, 13), 102 MTK_PIN_IES_SMT_SPEC(66, 66, 0xc00, 13),
200 MTK_PIN_IES_SMT_SET(77, 77, 0xc40, 13), 103 MTK_PIN_IES_SMT_SPEC(67, 67, 0xd10, 13),
201 MTK_PIN_IES_SMT_SET(78, 78, 0xc50, 13), 104 MTK_PIN_IES_SMT_SPEC(68, 68, 0xd00, 13),
202 MTK_PIN_IES_SMT_SET(79, 82, 0x940, 15), 105 MTK_PIN_IES_SMT_SPEC(69, 72, 0x940, 14),
203 MTK_PIN_IES_SMT_SET(83, 83, 0x950, 0), 106 MTK_PIN_IES_SMT_SPEC(73, 76, 0xc60, 13),
204 MTK_PIN_IES_SMT_SET(84, 85, 0x950, 1), 107 MTK_PIN_IES_SMT_SPEC(77, 77, 0xc40, 13),
205 MTK_PIN_IES_SMT_SET(86, 91, 0x950, 2), 108 MTK_PIN_IES_SMT_SPEC(78, 78, 0xc50, 13),
206 MTK_PIN_IES_SMT_SET(92, 92, 0x930, 13), 109 MTK_PIN_IES_SMT_SPEC(79, 82, 0x940, 15),
207 MTK_PIN_IES_SMT_SET(93, 95, 0x930, 14), 110 MTK_PIN_IES_SMT_SPEC(83, 83, 0x950, 0),
208 MTK_PIN_IES_SMT_SET(96, 99, 0x930, 15), 111 MTK_PIN_IES_SMT_SPEC(84, 85, 0x950, 1),
209 MTK_PIN_IES_SMT_SET(100, 103, 0xca0, 13), 112 MTK_PIN_IES_SMT_SPEC(86, 91, 0x950, 2),
210 MTK_PIN_IES_SMT_SET(104, 104, 0xc80, 13), 113 MTK_PIN_IES_SMT_SPEC(92, 92, 0x930, 13),
211 MTK_PIN_IES_SMT_SET(105, 105, 0xc90, 13), 114 MTK_PIN_IES_SMT_SPEC(93, 95, 0x930, 14),
212 MTK_PIN_IES_SMT_SET(106, 107, 0x940, 4), 115 MTK_PIN_IES_SMT_SPEC(96, 99, 0x930, 15),
213 MTK_PIN_IES_SMT_SET(108, 112, 0x940, 1), 116 MTK_PIN_IES_SMT_SPEC(100, 103, 0xca0, 13),
214 MTK_PIN_IES_SMT_SET(113, 116, 0x940, 2), 117 MTK_PIN_IES_SMT_SPEC(104, 104, 0xc80, 13),
215 MTK_PIN_IES_SMT_SET(117, 118, 0x940, 5), 118 MTK_PIN_IES_SMT_SPEC(105, 105, 0xc90, 13),
216 MTK_PIN_IES_SMT_SET(119, 124, 0x940, 6), 119 MTK_PIN_IES_SMT_SPEC(106, 107, 0x940, 4),
217 MTK_PIN_IES_SMT_SET(125, 126, 0x940, 7), 120 MTK_PIN_IES_SMT_SPEC(108, 112, 0x940, 1),
218 MTK_PIN_IES_SMT_SET(127, 127, 0x940, 0), 121 MTK_PIN_IES_SMT_SPEC(113, 116, 0x940, 2),
219 MTK_PIN_IES_SMT_SET(128, 128, 0x950, 8), 122 MTK_PIN_IES_SMT_SPEC(117, 118, 0x940, 5),
220 MTK_PIN_IES_SMT_SET(129, 130, 0x950, 9), 123 MTK_PIN_IES_SMT_SPEC(119, 124, 0x940, 6),
221 MTK_PIN_IES_SMT_SET(131, 132, 0x950, 8), 124 MTK_PIN_IES_SMT_SPEC(125, 126, 0x940, 7),
222 MTK_PIN_IES_SMT_SET(133, 134, 0x910, 8) 125 MTK_PIN_IES_SMT_SPEC(127, 127, 0x940, 0),
126 MTK_PIN_IES_SMT_SPEC(128, 128, 0x950, 8),
127 MTK_PIN_IES_SMT_SPEC(129, 130, 0x950, 9),
128 MTK_PIN_IES_SMT_SPEC(131, 132, 0x950, 8),
129 MTK_PIN_IES_SMT_SPEC(133, 134, 0x910, 8)
223}; 130};
224 131
225static int spec_ies_smt_set(struct regmap *regmap, unsigned int pin, 132static const struct mtk_pin_ies_smt_set mt8173_ies_set[] = {
226 unsigned char align, int value) 133 MTK_PIN_IES_SMT_SPEC(0, 4, 0x900, 1),
227{ 134 MTK_PIN_IES_SMT_SPEC(5, 9, 0x900, 2),
228 unsigned int i, reg_addr, bit; 135 MTK_PIN_IES_SMT_SPEC(10, 13, 0x900, 10),
229 bool find = false; 136 MTK_PIN_IES_SMT_SPEC(14, 15, 0x910, 10),
230 137 MTK_PIN_IES_SMT_SPEC(16, 16, 0x900, 0),
231 for (i = 0; i < ARRAY_SIZE(mt8173_ies_smt_set); i++) { 138 MTK_PIN_IES_SMT_SPEC(17, 17, 0x920, 2),
232 if (pin >= mt8173_ies_smt_set[i].start && 139 MTK_PIN_IES_SMT_SPEC(18, 21, 0x910, 3),
233 pin <= mt8173_ies_smt_set[i].end) { 140 MTK_PIN_IES_SMT_SPEC(22, 25, 0xce0, 14),
234 find = true; 141 MTK_PIN_IES_SMT_SPEC(26, 26, 0xcc0, 14),
235 break; 142 MTK_PIN_IES_SMT_SPEC(27, 27, 0xcd0, 14),
236 } 143 MTK_PIN_IES_SMT_SPEC(28, 28, 0xd70, 14),
237 } 144 MTK_PIN_IES_SMT_SPEC(29, 32, 0x900, 3),
238 145 MTK_PIN_IES_SMT_SPEC(33, 33, 0x900, 4),
239 if (!find) 146 MTK_PIN_IES_SMT_SPEC(34, 36, 0x900, 5),
240 return -EINVAL; 147 MTK_PIN_IES_SMT_SPEC(37, 38, 0x900, 6),
241 148 MTK_PIN_IES_SMT_SPEC(39, 39, 0x900, 7),
242 if (value) 149 MTK_PIN_IES_SMT_SPEC(40, 41, 0x900, 9),
243 reg_addr = mt8173_ies_smt_set[i].offset + align; 150 MTK_PIN_IES_SMT_SPEC(42, 42, 0x910, 0),
244 else 151 MTK_PIN_IES_SMT_SPEC(43, 44, 0x900, 11),
245 reg_addr = mt8173_ies_smt_set[i].offset + (align << 1); 152 MTK_PIN_IES_SMT_SPEC(45, 46, 0x900, 12),
153 MTK_PIN_IES_SMT_SPEC(57, 64, 0xc20, 14),
154 MTK_PIN_IES_SMT_SPEC(65, 65, 0xc10, 14),
155 MTK_PIN_IES_SMT_SPEC(66, 66, 0xc00, 14),
156 MTK_PIN_IES_SMT_SPEC(67, 67, 0xd10, 14),
157 MTK_PIN_IES_SMT_SPEC(68, 68, 0xd00, 14),
158 MTK_PIN_IES_SMT_SPEC(69, 72, 0x910, 14),
159 MTK_PIN_IES_SMT_SPEC(73, 76, 0xc60, 14),
160 MTK_PIN_IES_SMT_SPEC(77, 77, 0xc40, 14),
161 MTK_PIN_IES_SMT_SPEC(78, 78, 0xc50, 14),
162 MTK_PIN_IES_SMT_SPEC(79, 82, 0x910, 15),
163 MTK_PIN_IES_SMT_SPEC(83, 83, 0x920, 0),
164 MTK_PIN_IES_SMT_SPEC(84, 85, 0x920, 1),
165 MTK_PIN_IES_SMT_SPEC(86, 91, 0x920, 2),
166 MTK_PIN_IES_SMT_SPEC(92, 92, 0x900, 13),
167 MTK_PIN_IES_SMT_SPEC(93, 95, 0x900, 14),
168 MTK_PIN_IES_SMT_SPEC(96, 99, 0x900, 15),
169 MTK_PIN_IES_SMT_SPEC(100, 103, 0xca0, 14),
170 MTK_PIN_IES_SMT_SPEC(104, 104, 0xc80, 14),
171 MTK_PIN_IES_SMT_SPEC(105, 105, 0xc90, 14),
172 MTK_PIN_IES_SMT_SPEC(106, 107, 0x910, 4),
173 MTK_PIN_IES_SMT_SPEC(108, 112, 0x910, 1),
174 MTK_PIN_IES_SMT_SPEC(113, 116, 0x910, 2),
175 MTK_PIN_IES_SMT_SPEC(117, 118, 0x910, 5),
176 MTK_PIN_IES_SMT_SPEC(119, 124, 0x910, 6),
177 MTK_PIN_IES_SMT_SPEC(125, 126, 0x910, 7),
178 MTK_PIN_IES_SMT_SPEC(127, 127, 0x910, 0),
179 MTK_PIN_IES_SMT_SPEC(128, 128, 0x920, 8),
180 MTK_PIN_IES_SMT_SPEC(129, 130, 0x920, 9),
181 MTK_PIN_IES_SMT_SPEC(131, 132, 0x920, 8),
182 MTK_PIN_IES_SMT_SPEC(133, 134, 0x910, 8)
183};
246 184
247 bit = BIT(mt8173_ies_smt_set[i].bit); 185static int mt8173_ies_smt_set(struct regmap *regmap, unsigned int pin,
248 regmap_write(regmap, reg_addr, bit); 186 unsigned char align, int value, enum pin_config_param arg)
249 return 0; 187{
188 if (arg == PIN_CONFIG_INPUT_ENABLE)
189 return mtk_pconf_spec_set_ies_smt_range(regmap, mt8173_ies_set,
190 ARRAY_SIZE(mt8173_ies_set), pin, align, value);
191 else if (arg == PIN_CONFIG_INPUT_SCHMITT_ENABLE)
192 return mtk_pconf_spec_set_ies_smt_range(regmap, mt8173_smt_set,
193 ARRAY_SIZE(mt8173_smt_set), pin, align, value);
194 return -EINVAL;
250} 195}
251 196
252static const struct mtk_drv_group_desc mt8173_drv_grp[] = { 197static const struct mtk_drv_group_desc mt8173_drv_grp[] = {
@@ -382,8 +327,8 @@ static const struct mtk_pinctrl_devdata mt8173_pinctrl_data = {
382 .n_grp_cls = ARRAY_SIZE(mt8173_drv_grp), 327 .n_grp_cls = ARRAY_SIZE(mt8173_drv_grp),
383 .pin_drv_grp = mt8173_pin_drv, 328 .pin_drv_grp = mt8173_pin_drv,
384 .n_pin_drv_grps = ARRAY_SIZE(mt8173_pin_drv), 329 .n_pin_drv_grps = ARRAY_SIZE(mt8173_pin_drv),
385 .spec_pull_set = spec_pull_set, 330 .spec_pull_set = mt8173_spec_pull_set,
386 .spec_ies_smt_set = spec_ies_smt_set, 331 .spec_ies_smt_set = mt8173_ies_smt_set,
387 .dir_offset = 0x0000, 332 .dir_offset = 0x0000,
388 .pullen_offset = 0x0100, 333 .pullen_offset = 0x0100,
389 .pullsel_offset = 0x0200, 334 .pullsel_offset = 0x0200,
@@ -424,7 +369,7 @@ static const struct mtk_pinctrl_devdata mt8173_pinctrl_data = {
424 369
425static int mt8173_pinctrl_probe(struct platform_device *pdev) 370static int mt8173_pinctrl_probe(struct platform_device *pdev)
426{ 371{
427 return mtk_pctrl_init(pdev, &mt8173_pinctrl_data); 372 return mtk_pctrl_init(pdev, &mt8173_pinctrl_data, NULL);
428} 373}
429 374
430static const struct of_device_id mt8173_pctrl_match[] = { 375static const struct of_device_id mt8173_pctrl_match[] = {
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
index 474812e2b0cb..c4fc77aa766e 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
@@ -107,28 +107,38 @@ static void mtk_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
107 regmap_write(mtk_get_regmap(pctl, offset), reg_addr, bit); 107 regmap_write(mtk_get_regmap(pctl, offset), reg_addr, bit);
108} 108}
109 109
110static void mtk_pconf_set_ies_smt(struct mtk_pinctrl *pctl, unsigned pin, 110static int mtk_pconf_set_ies_smt(struct mtk_pinctrl *pctl, unsigned pin,
111 int value, enum pin_config_param param) 111 int value, enum pin_config_param arg)
112{ 112{
113 unsigned int reg_addr, offset; 113 unsigned int reg_addr, offset;
114 unsigned int bit; 114 unsigned int bit;
115 int ret; 115
116 /**
117 * Due to some soc are not support ies/smt config, add this special
118 * control to handle it.
119 */
120 if (!pctl->devdata->spec_ies_smt_set &&
121 pctl->devdata->ies_offset == MTK_PINCTRL_NOT_SUPPORT &&
122 arg == PIN_CONFIG_INPUT_ENABLE)
123 return -EINVAL;
124
125 if (!pctl->devdata->spec_ies_smt_set &&
126 pctl->devdata->smt_offset == MTK_PINCTRL_NOT_SUPPORT &&
127 arg == PIN_CONFIG_INPUT_SCHMITT_ENABLE)
128 return -EINVAL;
116 129
117 /* 130 /*
118 * Due to some pins are irregular, their input enable and smt 131 * Due to some pins are irregular, their input enable and smt
119 * control register are discontinuous, but they are mapping together. 132 * control register are discontinuous, so we need this special handle.
120 * So we need this special handle.
121 */ 133 */
122 if (pctl->devdata->spec_ies_smt_set) { 134 if (pctl->devdata->spec_ies_smt_set) {
123 ret = pctl->devdata->spec_ies_smt_set(mtk_get_regmap(pctl, pin), 135 return pctl->devdata->spec_ies_smt_set(mtk_get_regmap(pctl, pin),
124 pin, pctl->devdata->port_align, value); 136 pin, pctl->devdata->port_align, value, arg);
125 if (!ret)
126 return;
127 } 137 }
128 138
129 bit = BIT(pin & 0xf); 139 bit = BIT(pin & 0xf);
130 140
131 if (param == PIN_CONFIG_INPUT_ENABLE) 141 if (arg == PIN_CONFIG_INPUT_ENABLE)
132 offset = pctl->devdata->ies_offset; 142 offset = pctl->devdata->ies_offset;
133 else 143 else
134 offset = pctl->devdata->smt_offset; 144 offset = pctl->devdata->smt_offset;
@@ -139,6 +149,33 @@ static void mtk_pconf_set_ies_smt(struct mtk_pinctrl *pctl, unsigned pin,
139 reg_addr = CLR_ADDR(mtk_get_port(pctl, pin) + offset, pctl); 149 reg_addr = CLR_ADDR(mtk_get_port(pctl, pin) + offset, pctl);
140 150
141 regmap_write(mtk_get_regmap(pctl, pin), reg_addr, bit); 151 regmap_write(mtk_get_regmap(pctl, pin), reg_addr, bit);
152 return 0;
153}
154
155int mtk_pconf_spec_set_ies_smt_range(struct regmap *regmap,
156 const struct mtk_pin_ies_smt_set *ies_smt_infos, unsigned int info_num,
157 unsigned int pin, unsigned char align, int value)
158{
159 unsigned int i, reg_addr, bit;
160
161 for (i = 0; i < info_num; i++) {
162 if (pin >= ies_smt_infos[i].start &&
163 pin <= ies_smt_infos[i].end) {
164 break;
165 }
166 }
167
168 if (i == info_num)
169 return -EINVAL;
170
171 if (value)
172 reg_addr = ies_smt_infos[i].offset + align;
173 else
174 reg_addr = ies_smt_infos[i].offset + (align << 1);
175
176 bit = BIT(ies_smt_infos[i].bit);
177 regmap_write(regmap, reg_addr, bit);
178 return 0;
142} 179}
143 180
144static const struct mtk_pin_drv_grp *mtk_find_pin_drv_grp_by_pin( 181static const struct mtk_pin_drv_grp *mtk_find_pin_drv_grp_by_pin(
@@ -186,6 +223,66 @@ static int mtk_pconf_set_driving(struct mtk_pinctrl *pctl,
186 return -EINVAL; 223 return -EINVAL;
187} 224}
188 225
226int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
227 const struct mtk_pin_spec_pupd_set_samereg *pupd_infos,
228 unsigned int info_num, unsigned int pin,
229 unsigned char align, bool isup, unsigned int r1r0)
230{
231 unsigned int i;
232 unsigned int reg_pupd, reg_set, reg_rst;
233 unsigned int bit_pupd, bit_r0, bit_r1;
234 const struct mtk_pin_spec_pupd_set_samereg *spec_pupd_pin;
235 bool find = false;
236
237 for (i = 0; i < info_num; i++) {
238 if (pin == pupd_infos[i].pin) {
239 find = true;
240 break;
241 }
242 }
243
244 if (!find)
245 return -EINVAL;
246
247 spec_pupd_pin = pupd_infos + i;
248 reg_set = spec_pupd_pin->offset + align;
249 reg_rst = spec_pupd_pin->offset + (align << 1);
250
251 if (isup)
252 reg_pupd = reg_rst;
253 else
254 reg_pupd = reg_set;
255
256 bit_pupd = BIT(spec_pupd_pin->pupd_bit);
257 regmap_write(regmap, reg_pupd, bit_pupd);
258
259 bit_r0 = BIT(spec_pupd_pin->r0_bit);
260 bit_r1 = BIT(spec_pupd_pin->r1_bit);
261
262 switch (r1r0) {
263 case MTK_PUPD_SET_R1R0_00:
264 regmap_write(regmap, reg_rst, bit_r0);
265 regmap_write(regmap, reg_rst, bit_r1);
266 break;
267 case MTK_PUPD_SET_R1R0_01:
268 regmap_write(regmap, reg_set, bit_r0);
269 regmap_write(regmap, reg_rst, bit_r1);
270 break;
271 case MTK_PUPD_SET_R1R0_10:
272 regmap_write(regmap, reg_rst, bit_r0);
273 regmap_write(regmap, reg_set, bit_r1);
274 break;
275 case MTK_PUPD_SET_R1R0_11:
276 regmap_write(regmap, reg_set, bit_r0);
277 regmap_write(regmap, reg_set, bit_r1);
278 break;
279 default:
280 return -EINVAL;
281 }
282
283 return 0;
284}
285
189static int mtk_pconf_set_pull_select(struct mtk_pinctrl *pctl, 286static int mtk_pconf_set_pull_select(struct mtk_pinctrl *pctl,
190 unsigned int pin, bool enable, bool isup, unsigned int arg) 287 unsigned int pin, bool enable, bool isup, unsigned int arg)
191{ 288{
@@ -235,36 +332,37 @@ static int mtk_pconf_parse_conf(struct pinctrl_dev *pctldev,
235 unsigned int pin, enum pin_config_param param, 332 unsigned int pin, enum pin_config_param param,
236 enum pin_config_param arg) 333 enum pin_config_param arg)
237{ 334{
335 int ret = 0;
238 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev); 336 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
239 337
240 switch (param) { 338 switch (param) {
241 case PIN_CONFIG_BIAS_DISABLE: 339 case PIN_CONFIG_BIAS_DISABLE:
242 mtk_pconf_set_pull_select(pctl, pin, false, false, arg); 340 ret = mtk_pconf_set_pull_select(pctl, pin, false, false, arg);
243 break; 341 break;
244 case PIN_CONFIG_BIAS_PULL_UP: 342 case PIN_CONFIG_BIAS_PULL_UP:
245 mtk_pconf_set_pull_select(pctl, pin, true, true, arg); 343 ret = mtk_pconf_set_pull_select(pctl, pin, true, true, arg);
246 break; 344 break;
247 case PIN_CONFIG_BIAS_PULL_DOWN: 345 case PIN_CONFIG_BIAS_PULL_DOWN:
248 mtk_pconf_set_pull_select(pctl, pin, true, false, arg); 346 ret = mtk_pconf_set_pull_select(pctl, pin, true, false, arg);
249 break; 347 break;
250 case PIN_CONFIG_INPUT_ENABLE: 348 case PIN_CONFIG_INPUT_ENABLE:
251 mtk_pconf_set_ies_smt(pctl, pin, arg, param); 349 ret = mtk_pconf_set_ies_smt(pctl, pin, arg, param);
252 break; 350 break;
253 case PIN_CONFIG_OUTPUT: 351 case PIN_CONFIG_OUTPUT:
254 mtk_gpio_set(pctl->chip, pin, arg); 352 mtk_gpio_set(pctl->chip, pin, arg);
255 mtk_pmx_gpio_set_direction(pctldev, NULL, pin, false); 353 ret = mtk_pmx_gpio_set_direction(pctldev, NULL, pin, false);
256 break; 354 break;
257 case PIN_CONFIG_INPUT_SCHMITT_ENABLE: 355 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
258 mtk_pconf_set_ies_smt(pctl, pin, arg, param); 356 ret = mtk_pconf_set_ies_smt(pctl, pin, arg, param);
259 break; 357 break;
260 case PIN_CONFIG_DRIVE_STRENGTH: 358 case PIN_CONFIG_DRIVE_STRENGTH:
261 mtk_pconf_set_driving(pctl, pin, arg); 359 ret = mtk_pconf_set_driving(pctl, pin, arg);
262 break; 360 break;
263 default: 361 default:
264 return -EINVAL; 362 ret = -EINVAL;
265 } 363 }
266 364
267 return 0; 365 return ret;
268} 366}
269 367
270static int mtk_pconf_group_get(struct pinctrl_dev *pctldev, 368static int mtk_pconf_group_get(struct pinctrl_dev *pctldev,
@@ -283,12 +381,14 @@ static int mtk_pconf_group_set(struct pinctrl_dev *pctldev, unsigned group,
283{ 381{
284 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev); 382 struct mtk_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
285 struct mtk_pinctrl_group *g = &pctl->groups[group]; 383 struct mtk_pinctrl_group *g = &pctl->groups[group];
286 int i; 384 int i, ret;
287 385
288 for (i = 0; i < num_configs; i++) { 386 for (i = 0; i < num_configs; i++) {
289 mtk_pconf_parse_conf(pctldev, g->pin, 387 ret = mtk_pconf_parse_conf(pctldev, g->pin,
290 pinconf_to_config_param(configs[i]), 388 pinconf_to_config_param(configs[i]),
291 pinconf_to_config_argument(configs[i])); 389 pinconf_to_config_argument(configs[i]));
390 if (ret < 0)
391 return ret;
292 392
293 g->config = configs[i]; 393 g->config = configs[i];
294 } 394 }
@@ -1109,7 +1209,8 @@ static struct pinctrl_desc mtk_pctrl_desc = {
1109}; 1209};
1110 1210
1111int mtk_pctrl_init(struct platform_device *pdev, 1211int mtk_pctrl_init(struct platform_device *pdev,
1112 const struct mtk_pinctrl_devdata *data) 1212 const struct mtk_pinctrl_devdata *data,
1213 struct regmap *regmap)
1113{ 1214{
1114 struct pinctrl_pin_desc *pins; 1215 struct pinctrl_pin_desc *pins;
1115 struct mtk_pinctrl *pctl; 1216 struct mtk_pinctrl *pctl;
@@ -1135,6 +1236,11 @@ int mtk_pctrl_init(struct platform_device *pdev,
1135 pctl->regmap1 = syscon_node_to_regmap(node); 1236 pctl->regmap1 = syscon_node_to_regmap(node);
1136 if (IS_ERR(pctl->regmap1)) 1237 if (IS_ERR(pctl->regmap1))
1137 return PTR_ERR(pctl->regmap1); 1238 return PTR_ERR(pctl->regmap1);
1239 } else if (regmap) {
1240 pctl->regmap1 = regmap;
1241 } else {
1242 dev_err(&pdev->dev, "Pinctrl node has not register regmap.\n");
1243 return -EINVAL;
1138 } 1244 }
1139 1245
1140 /* Only 8135 has two base addr, other SoCs have only one. */ 1246 /* Only 8135 has two base addr, other SoCs have only one. */
@@ -1165,9 +1271,9 @@ int mtk_pctrl_init(struct platform_device *pdev,
1165 mtk_pctrl_desc.npins = pctl->devdata->npins; 1271 mtk_pctrl_desc.npins = pctl->devdata->npins;
1166 pctl->dev = &pdev->dev; 1272 pctl->dev = &pdev->dev;
1167 pctl->pctl_dev = pinctrl_register(&mtk_pctrl_desc, &pdev->dev, pctl); 1273 pctl->pctl_dev = pinctrl_register(&mtk_pctrl_desc, &pdev->dev, pctl);
1168 if (!pctl->pctl_dev) { 1274 if (IS_ERR(pctl->pctl_dev)) {
1169 dev_err(&pdev->dev, "couldn't register pinctrl driver\n"); 1275 dev_err(&pdev->dev, "couldn't register pinctrl driver\n");
1170 return -EINVAL; 1276 return PTR_ERR(pctl->pctl_dev);
1171 } 1277 }
1172 1278
1173 pctl->chip = devm_kzalloc(&pdev->dev, sizeof(*pctl->chip), GFP_KERNEL); 1279 pctl->chip = devm_kzalloc(&pdev->dev, sizeof(*pctl->chip), GFP_KERNEL);
@@ -1176,11 +1282,11 @@ int mtk_pctrl_init(struct platform_device *pdev,
1176 goto pctrl_error; 1282 goto pctrl_error;
1177 } 1283 }
1178 1284
1179 pctl->chip = &mtk_gpio_chip; 1285 *pctl->chip = mtk_gpio_chip;
1180 pctl->chip->ngpio = pctl->devdata->npins; 1286 pctl->chip->ngpio = pctl->devdata->npins;
1181 pctl->chip->label = dev_name(&pdev->dev); 1287 pctl->chip->label = dev_name(&pdev->dev);
1182 pctl->chip->dev = &pdev->dev; 1288 pctl->chip->dev = &pdev->dev;
1183 pctl->chip->base = 0; 1289 pctl->chip->base = -1;
1184 1290
1185 ret = gpiochip_add(pctl->chip); 1291 ret = gpiochip_add(pctl->chip);
1186 if (ret) { 1292 if (ret) {
@@ -1196,6 +1302,9 @@ int mtk_pctrl_init(struct platform_device *pdev,
1196 goto chip_error; 1302 goto chip_error;
1197 } 1303 }
1198 1304
1305 if (!of_property_read_bool(np, "interrupt-controller"))
1306 return 0;
1307
1199 /* Get EINT register base from dts. */ 1308 /* Get EINT register base from dts. */
1200 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1309 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1201 if (!res) { 1310 if (!res) {
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.h b/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
index 375771db9bd0..30213e514c2f 100644
--- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.h
@@ -17,16 +17,17 @@
17 17
18#include <linux/pinctrl/pinctrl.h> 18#include <linux/pinctrl/pinctrl.h>
19#include <linux/regmap.h> 19#include <linux/regmap.h>
20#include <linux/pinctrl/pinconf-generic.h>
20 21
21#define NO_EINT_SUPPORT 255 22#define NO_EINT_SUPPORT 255
22#define MTK_CHIP_TYPE_BASE 0
23#define MTK_CHIP_TYPE_PMIC 1
24#define MT_EDGE_SENSITIVE 0 23#define MT_EDGE_SENSITIVE 0
25#define MT_LEVEL_SENSITIVE 1 24#define MT_LEVEL_SENSITIVE 1
26#define EINT_DBNC_SET_DBNC_BITS 4 25#define EINT_DBNC_SET_DBNC_BITS 4
27#define EINT_DBNC_RST_BIT (0x1 << 1) 26#define EINT_DBNC_RST_BIT (0x1 << 1)
28#define EINT_DBNC_SET_EN (0x1 << 0) 27#define EINT_DBNC_SET_EN (0x1 << 0)
29 28
29#define MTK_PINCTRL_NOT_SUPPORT (0xffff)
30
30struct mtk_desc_function { 31struct mtk_desc_function {
31 const char *name; 32 const char *name;
32 unsigned char muxval; 33 unsigned char muxval;
@@ -39,7 +40,6 @@ struct mtk_desc_eint {
39 40
40struct mtk_desc_pin { 41struct mtk_desc_pin {
41 struct pinctrl_pin_desc pin; 42 struct pinctrl_pin_desc pin;
42 const char *chip;
43 const struct mtk_desc_eint eint; 43 const struct mtk_desc_eint eint;
44 const struct mtk_desc_function *functions; 44 const struct mtk_desc_function *functions;
45}; 45};
@@ -47,7 +47,6 @@ struct mtk_desc_pin {
47#define MTK_PIN(_pin, _pad, _chip, _eint, ...) \ 47#define MTK_PIN(_pin, _pad, _chip, _eint, ...) \
48 { \ 48 { \
49 .pin = _pin, \ 49 .pin = _pin, \
50 .chip = _chip, \
51 .eint = _eint, \ 50 .eint = _eint, \
52 .functions = (struct mtk_desc_function[]){ \ 51 .functions = (struct mtk_desc_function[]){ \
53 __VA_ARGS__, { } }, \ 52 __VA_ARGS__, { } }, \
@@ -107,8 +106,8 @@ struct mtk_drv_group_desc {
107 * @grp: The group for this pin belongs to. 106 * @grp: The group for this pin belongs to.
108 */ 107 */
109struct mtk_pin_drv_grp { 108struct mtk_pin_drv_grp {
110 unsigned int pin; 109 unsigned short pin;
111 unsigned int offset; 110 unsigned short offset;
112 unsigned char bit; 111 unsigned char bit;
113 unsigned char grp; 112 unsigned char grp;
114}; 113};
@@ -121,6 +120,54 @@ struct mtk_pin_drv_grp {
121 .grp = _grp, \ 120 .grp = _grp, \
122 } 121 }
123 122
123/**
124 * struct mtk_pin_spec_pupd_set_samereg
125 * - For special pins' pull up/down setting which resides in same register
126 * @pin: The pin number.
127 * @offset: The offset of special pull up/down setting register.
128 * @pupd_bit: The pull up/down bit in this register.
129 * @r0_bit: The r0 bit of pull resistor.
130 * @r1_bit: The r1 bit of pull resistor.
131 */
132struct mtk_pin_spec_pupd_set_samereg {
133 unsigned short pin;
134 unsigned short offset;
135 unsigned char pupd_bit;
136 unsigned char r1_bit;
137 unsigned char r0_bit;
138};
139
140#define MTK_PIN_PUPD_SPEC_SR(_pin, _offset, _pupd, _r1, _r0) \
141 { \
142 .pin = _pin, \
143 .offset = _offset, \
144 .pupd_bit = _pupd, \
145 .r1_bit = _r1, \
146 .r0_bit = _r0, \
147 }
148
149/**
150 * struct mtk_pin_ies_set - For special pins' ies and smt setting.
151 * @start: The start pin number of those special pins.
152 * @end: The end pin number of those special pins.
153 * @offset: The offset of special setting register.
154 * @bit: The bit of special setting register.
155 */
156struct mtk_pin_ies_smt_set {
157 unsigned short start;
158 unsigned short end;
159 unsigned short offset;
160 unsigned char bit;
161};
162
163#define MTK_PIN_IES_SMT_SPEC(_start, _end, _offset, _bit) \
164 { \
165 .start = _start, \
166 .end = _end, \
167 .bit = _bit, \
168 .offset = _offset, \
169 }
170
124struct mtk_eint_offsets { 171struct mtk_eint_offsets {
125 const char *name; 172 const char *name;
126 unsigned int stat; 173 unsigned int stat;
@@ -186,14 +233,13 @@ struct mtk_pinctrl_devdata {
186 int (*spec_pull_set)(struct regmap *reg, unsigned int pin, 233 int (*spec_pull_set)(struct regmap *reg, unsigned int pin,
187 unsigned char align, bool isup, unsigned int arg); 234 unsigned char align, bool isup, unsigned int arg);
188 int (*spec_ies_smt_set)(struct regmap *reg, unsigned int pin, 235 int (*spec_ies_smt_set)(struct regmap *reg, unsigned int pin,
189 unsigned char align, int value); 236 unsigned char align, int value, enum pin_config_param arg);
190 unsigned int dir_offset; 237 unsigned int dir_offset;
191 unsigned int ies_offset; 238 unsigned int ies_offset;
192 unsigned int smt_offset; 239 unsigned int smt_offset;
193 unsigned int pullen_offset; 240 unsigned int pullen_offset;
194 unsigned int pullsel_offset; 241 unsigned int pullsel_offset;
195 unsigned int drv_offset; 242 unsigned int drv_offset;
196 unsigned int invser_offset;
197 unsigned int dout_offset; 243 unsigned int dout_offset;
198 unsigned int din_offset; 244 unsigned int din_offset;
199 unsigned int pinmux_offset; 245 unsigned int pinmux_offset;
@@ -202,7 +248,6 @@ struct mtk_pinctrl_devdata {
202 unsigned char port_shf; 248 unsigned char port_shf;
203 unsigned char port_mask; 249 unsigned char port_mask;
204 unsigned char port_align; 250 unsigned char port_align;
205 unsigned char chip_type;
206 struct mtk_eint_offsets eint_offsets; 251 struct mtk_eint_offsets eint_offsets;
207 unsigned int ap_num; 252 unsigned int ap_num;
208 unsigned int db_cnt; 253 unsigned int db_cnt;
@@ -224,6 +269,16 @@ struct mtk_pinctrl {
224}; 269};
225 270
226int mtk_pctrl_init(struct platform_device *pdev, 271int mtk_pctrl_init(struct platform_device *pdev,
227 const struct mtk_pinctrl_devdata *data); 272 const struct mtk_pinctrl_devdata *data,
273 struct regmap *regmap);
274
275int mtk_pctrl_spec_pull_set_samereg(struct regmap *regmap,
276 const struct mtk_pin_spec_pupd_set_samereg *pupd_infos,
277 unsigned int info_num, unsigned int pin,
278 unsigned char align, bool isup, unsigned int r1r0);
279
280int mtk_pconf_spec_set_ies_smt_range(struct regmap *regmap,
281 const struct mtk_pin_ies_smt_set *ies_smt_infos, unsigned int info_num,
282 unsigned int pin, unsigned char align, int value);
228 283
229#endif /* __PINCTRL_MTK_COMMON_H */ 284#endif /* __PINCTRL_MTK_COMMON_H */
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-mt6397.h b/drivers/pinctrl/mediatek/pinctrl-mtk-mt6397.h
new file mode 100644
index 000000000000..4eb98ddb40a4
--- /dev/null
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-mt6397.h
@@ -0,0 +1,424 @@
1#ifndef __PINCTRL_MTK_MT6397_H
2#define __PINCTRL_MTK_MT6397_H
3
4#include <linux/pinctrl/pinctrl.h>
5#include "pinctrl-mtk-common.h"
6
7static const struct mtk_desc_pin mtk_pins_mt6397[] = {
8 MTK_PIN(
9 PINCTRL_PIN(0, "INT"),
10 "N2", "mt6397",
11 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
12 MTK_FUNCTION(0, "GPIO0"),
13 MTK_FUNCTION(1, "INT")
14 ),
15 MTK_PIN(
16 PINCTRL_PIN(1, "SRCVOLTEN"),
17 "M4", "mt6397",
18 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
19 MTK_FUNCTION(0, "GPIO1"),
20 MTK_FUNCTION(1, "SRCVOLTEN"),
21 MTK_FUNCTION(6, "TEST_CK1")
22 ),
23 MTK_PIN(
24 PINCTRL_PIN(2, "SRCLKEN_PERI"),
25 "M2", "mt6397",
26 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
27 MTK_FUNCTION(0, "GPIO2"),
28 MTK_FUNCTION(1, "SRCLKEN_PERI"),
29 MTK_FUNCTION(6, "TEST_CK2")
30 ),
31 MTK_PIN(
32 PINCTRL_PIN(3, "RTC_32K1V8"),
33 "K3", "mt6397",
34 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
35 MTK_FUNCTION(0, "GPIO3"),
36 MTK_FUNCTION(1, "RTC_32K1V8"),
37 MTK_FUNCTION(6, "TEST_CK3")
38 ),
39 MTK_PIN(
40 PINCTRL_PIN(4, "WRAP_EVENT"),
41 "J2", "mt6397",
42 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
43 MTK_FUNCTION(0, "GPIO4"),
44 MTK_FUNCTION(1, "WRAP_EVENT")
45 ),
46 MTK_PIN(
47 PINCTRL_PIN(5, "SPI_CLK"),
48 "L4", "mt6397",
49 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
50 MTK_FUNCTION(0, "GPIO5"),
51 MTK_FUNCTION(1, "SPI_CLK")
52 ),
53 MTK_PIN(
54 PINCTRL_PIN(6, "SPI_CSN"),
55 "J3", "mt6397",
56 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
57 MTK_FUNCTION(0, "GPIO6"),
58 MTK_FUNCTION(1, "SPI_CSN")
59 ),
60 MTK_PIN(
61 PINCTRL_PIN(7, "SPI_MOSI"),
62 "J1", "mt6397",
63 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
64 MTK_FUNCTION(0, "GPIO7"),
65 MTK_FUNCTION(1, "SPI_MOSI")
66 ),
67 MTK_PIN(
68 PINCTRL_PIN(8, "SPI_MISO"),
69 "L3", "mt6397",
70 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
71 MTK_FUNCTION(0, "GPIO8"),
72 MTK_FUNCTION(1, "SPI_MISO")
73 ),
74 MTK_PIN(
75 PINCTRL_PIN(9, "AUD_CLK_MOSI"),
76 "H2", "mt6397",
77 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
78 MTK_FUNCTION(0, "GPIO9"),
79 MTK_FUNCTION(1, "AUD_CLK"),
80 MTK_FUNCTION(6, "TEST_IN0"),
81 MTK_FUNCTION(7, "TEST_OUT0")
82 ),
83 MTK_PIN(
84 PINCTRL_PIN(10, "AUD_DAT_MISO"),
85 "H3", "mt6397",
86 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
87 MTK_FUNCTION(0, "GPIO10"),
88 MTK_FUNCTION(1, "AUD_MISO"),
89 MTK_FUNCTION(6, "TEST_IN1"),
90 MTK_FUNCTION(7, "TEST_OUT1")
91 ),
92 MTK_PIN(
93 PINCTRL_PIN(11, "AUD_DAT_MOSI"),
94 "H1", "mt6397",
95 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
96 MTK_FUNCTION(0, "GPIO11"),
97 MTK_FUNCTION(1, "AUD_MOSI"),
98 MTK_FUNCTION(6, "TEST_IN2"),
99 MTK_FUNCTION(7, "TEST_OUT2")
100 ),
101 MTK_PIN(
102 PINCTRL_PIN(12, "COL0"),
103 "F3", "mt6397",
104 MTK_EINT_FUNCTION(2, 10),
105 MTK_FUNCTION(0, "GPIO12"),
106 MTK_FUNCTION(1, "COL0_USBDL"),
107 MTK_FUNCTION(2, "EINT10_1X"),
108 MTK_FUNCTION(3, "PWM1_3X"),
109 MTK_FUNCTION(6, "TEST_IN3"),
110 MTK_FUNCTION(7, "TEST_OUT3")
111 ),
112 MTK_PIN(
113 PINCTRL_PIN(13, "COL1"),
114 "G8", "mt6397",
115 MTK_EINT_FUNCTION(2, 11),
116 MTK_FUNCTION(0, "GPIO13"),
117 MTK_FUNCTION(1, "COL1"),
118 MTK_FUNCTION(2, "EINT11_1X"),
119 MTK_FUNCTION(3, "SCL0_2X"),
120 MTK_FUNCTION(6, "TEST_IN4"),
121 MTK_FUNCTION(7, "TEST_OUT4")
122 ),
123 MTK_PIN(
124 PINCTRL_PIN(14, "COL2"),
125 "H4", "mt6397",
126 MTK_EINT_FUNCTION(2, 12),
127 MTK_FUNCTION(0, "GPIO14"),
128 MTK_FUNCTION(1, "COL2"),
129 MTK_FUNCTION(2, "EINT12_1X"),
130 MTK_FUNCTION(3, "SDA0_2X"),
131 MTK_FUNCTION(6, "TEST_IN5"),
132 MTK_FUNCTION(7, "TEST_OUT5")
133 ),
134 MTK_PIN(
135 PINCTRL_PIN(15, "COL3"),
136 "G2", "mt6397",
137 MTK_EINT_FUNCTION(2, 13),
138 MTK_FUNCTION(0, "GPIO15"),
139 MTK_FUNCTION(1, "COL3"),
140 MTK_FUNCTION(2, "EINT13_1X"),
141 MTK_FUNCTION(3, "SCL1_2X"),
142 MTK_FUNCTION(6, "TEST_IN6"),
143 MTK_FUNCTION(7, "TEST_OUT6")
144 ),
145 MTK_PIN(
146 PINCTRL_PIN(16, "COL4"),
147 "F2", "mt6397",
148 MTK_EINT_FUNCTION(2, 14),
149 MTK_FUNCTION(0, "GPIO16"),
150 MTK_FUNCTION(1, "COL4"),
151 MTK_FUNCTION(2, "EINT14_1X"),
152 MTK_FUNCTION(3, "SDA1_2X"),
153 MTK_FUNCTION(6, "TEST_IN7"),
154 MTK_FUNCTION(7, "TEST_OUT7")
155 ),
156 MTK_PIN(
157 PINCTRL_PIN(17, "COL5"),
158 "G7", "mt6397",
159 MTK_EINT_FUNCTION(2, 15),
160 MTK_FUNCTION(0, "GPIO17"),
161 MTK_FUNCTION(1, "COL5"),
162 MTK_FUNCTION(2, "EINT15_1X"),
163 MTK_FUNCTION(3, "SCL2_2X"),
164 MTK_FUNCTION(6, "TEST_IN8"),
165 MTK_FUNCTION(7, "TEST_OUT8")
166 ),
167 MTK_PIN(
168 PINCTRL_PIN(18, "COL6"),
169 "J6", "mt6397",
170 MTK_EINT_FUNCTION(2, 16),
171 MTK_FUNCTION(0, "GPIO18"),
172 MTK_FUNCTION(1, "COL6"),
173 MTK_FUNCTION(2, "EINT16_1X"),
174 MTK_FUNCTION(3, "SDA2_2X"),
175 MTK_FUNCTION(4, "GPIO32K_0"),
176 MTK_FUNCTION(5, "GPIO26M_0"),
177 MTK_FUNCTION(6, "TEST_IN9"),
178 MTK_FUNCTION(7, "TEST_OUT9")
179 ),
180 MTK_PIN(
181 PINCTRL_PIN(19, "COL7"),
182 "J5", "mt6397",
183 MTK_EINT_FUNCTION(2, 17),
184 MTK_FUNCTION(0, "GPIO19"),
185 MTK_FUNCTION(1, "COL7"),
186 MTK_FUNCTION(2, "EINT17_1X"),
187 MTK_FUNCTION(3, "PWM2_3X"),
188 MTK_FUNCTION(4, "GPIO32K_1"),
189 MTK_FUNCTION(5, "GPIO26M_1"),
190 MTK_FUNCTION(6, "TEST_IN10"),
191 MTK_FUNCTION(7, "TEST_OUT10")
192 ),
193 MTK_PIN(
194 PINCTRL_PIN(20, "ROW0"),
195 "L7", "mt6397",
196 MTK_EINT_FUNCTION(2, 18),
197 MTK_FUNCTION(0, "GPIO20"),
198 MTK_FUNCTION(1, "ROW0"),
199 MTK_FUNCTION(2, "EINT18_1X"),
200 MTK_FUNCTION(3, "SCL0_3X"),
201 MTK_FUNCTION(6, "TEST_IN11"),
202 MTK_FUNCTION(7, "TEST_OUT11")
203 ),
204 MTK_PIN(
205 PINCTRL_PIN(21, "ROW1"),
206 "P1", "mt6397",
207 MTK_EINT_FUNCTION(2, 19),
208 MTK_FUNCTION(0, "GPIO21"),
209 MTK_FUNCTION(1, "ROW1"),
210 MTK_FUNCTION(2, "EINT19_1X"),
211 MTK_FUNCTION(3, "SDA0_3X"),
212 MTK_FUNCTION(4, "AUD_TSTCK"),
213 MTK_FUNCTION(6, "TEST_IN12"),
214 MTK_FUNCTION(7, "TEST_OUT12")
215 ),
216 MTK_PIN(
217 PINCTRL_PIN(22, "ROW2"),
218 "J8", "mt6397",
219 MTK_EINT_FUNCTION(2, 20),
220 MTK_FUNCTION(0, "GPIO22"),
221 MTK_FUNCTION(1, "ROW2"),
222 MTK_FUNCTION(2, "EINT20_1X"),
223 MTK_FUNCTION(3, "SCL1_3X"),
224 MTK_FUNCTION(6, "TEST_IN13"),
225 MTK_FUNCTION(7, "TEST_OUT13")
226 ),
227 MTK_PIN(
228 PINCTRL_PIN(23, "ROW3"),
229 "J7", "mt6397",
230 MTK_EINT_FUNCTION(2, 21),
231 MTK_FUNCTION(0, "GPIO23"),
232 MTK_FUNCTION(1, "ROW3"),
233 MTK_FUNCTION(2, "EINT21_1X"),
234 MTK_FUNCTION(3, "SDA1_3X"),
235 MTK_FUNCTION(6, "TEST_IN14"),
236 MTK_FUNCTION(7, "TEST_OUT14")
237 ),
238 MTK_PIN(
239 PINCTRL_PIN(24, "ROW4"),
240 "L5", "mt6397",
241 MTK_EINT_FUNCTION(2, 22),
242 MTK_FUNCTION(0, "GPIO24"),
243 MTK_FUNCTION(1, "ROW4"),
244 MTK_FUNCTION(2, "EINT22_1X"),
245 MTK_FUNCTION(3, "SCL2_3X"),
246 MTK_FUNCTION(6, "TEST_IN15"),
247 MTK_FUNCTION(7, "TEST_OUT15")
248 ),
249 MTK_PIN(
250 PINCTRL_PIN(25, "ROW5"),
251 "N6", "mt6397",
252 MTK_EINT_FUNCTION(2, 23),
253 MTK_FUNCTION(0, "GPIO25"),
254 MTK_FUNCTION(1, "ROW5"),
255 MTK_FUNCTION(2, "EINT23_1X"),
256 MTK_FUNCTION(3, "SDA2_3X"),
257 MTK_FUNCTION(6, "TEST_IN16"),
258 MTK_FUNCTION(7, "TEST_OUT16")
259 ),
260 MTK_PIN(
261 PINCTRL_PIN(26, "ROW6"),
262 "L6", "mt6397",
263 MTK_EINT_FUNCTION(2, 24),
264 MTK_FUNCTION(0, "GPIO26"),
265 MTK_FUNCTION(1, "ROW6"),
266 MTK_FUNCTION(2, "EINT24_1X"),
267 MTK_FUNCTION(3, "PWM3_3X"),
268 MTK_FUNCTION(4, "GPIO32K_2"),
269 MTK_FUNCTION(5, "GPIO26M_2"),
270 MTK_FUNCTION(6, "TEST_IN17"),
271 MTK_FUNCTION(7, "TEST_OUT17")
272 ),
273 MTK_PIN(
274 PINCTRL_PIN(27, "ROW7"),
275 "P2", "mt6397",
276 MTK_EINT_FUNCTION(2, 3),
277 MTK_FUNCTION(0, "GPIO27"),
278 MTK_FUNCTION(1, "ROW7"),
279 MTK_FUNCTION(2, "EINT3_1X"),
280 MTK_FUNCTION(3, "CBUS"),
281 MTK_FUNCTION(4, "GPIO32K_3"),
282 MTK_FUNCTION(5, "GPIO26M_3"),
283 MTK_FUNCTION(6, "TEST_IN18"),
284 MTK_FUNCTION(7, "TEST_OUT18")
285 ),
286 MTK_PIN(
287 PINCTRL_PIN(28, "PWM1(VMSEL1)"),
288 "J4", "mt6397",
289 MTK_EINT_FUNCTION(2, 4),
290 MTK_FUNCTION(0, "GPIO28"),
291 MTK_FUNCTION(1, "PWM1"),
292 MTK_FUNCTION(2, "EINT4_1X"),
293 MTK_FUNCTION(4, "GPIO32K_4"),
294 MTK_FUNCTION(5, "GPIO26M_4"),
295 MTK_FUNCTION(6, "TEST_IN19"),
296 MTK_FUNCTION(7, "TEST_OUT19")
297 ),
298 MTK_PIN(
299 PINCTRL_PIN(29, "PWM2(VMSEL2)"),
300 "N5", "mt6397",
301 MTK_EINT_FUNCTION(2, 5),
302 MTK_FUNCTION(0, "GPIO29"),
303 MTK_FUNCTION(1, "PWM2"),
304 MTK_FUNCTION(2, "EINT5_1X"),
305 MTK_FUNCTION(4, "GPIO32K_5"),
306 MTK_FUNCTION(5, "GPIO26M_5"),
307 MTK_FUNCTION(6, "TEST_IN20"),
308 MTK_FUNCTION(7, "TEST_OUT20")
309 ),
310 MTK_PIN(
311 PINCTRL_PIN(30, "PWM3(PWM)"),
312 "R3", "mt6397",
313 MTK_EINT_FUNCTION(2, 6),
314 MTK_FUNCTION(0, "GPIO30"),
315 MTK_FUNCTION(1, "PWM3"),
316 MTK_FUNCTION(2, "EINT6_1X"),
317 MTK_FUNCTION(3, "COL0"),
318 MTK_FUNCTION(4, "GPIO32K_6"),
319 MTK_FUNCTION(5, "GPIO26M_6"),
320 MTK_FUNCTION(6, "TEST_IN21"),
321 MTK_FUNCTION(7, "TEST_OUT21")
322 ),
323 MTK_PIN(
324 PINCTRL_PIN(31, "SCL0"),
325 "N1", "mt6397",
326 MTK_EINT_FUNCTION(2, 7),
327 MTK_FUNCTION(0, "GPIO31"),
328 MTK_FUNCTION(1, "SCL0"),
329 MTK_FUNCTION(2, "EINT7_1X"),
330 MTK_FUNCTION(3, "PWM1_2X"),
331 MTK_FUNCTION(6, "TEST_IN22"),
332 MTK_FUNCTION(7, "TEST_OUT22")
333 ),
334 MTK_PIN(
335 PINCTRL_PIN(32, "SDA0"),
336 "N3", "mt6397",
337 MTK_EINT_FUNCTION(2, 8),
338 MTK_FUNCTION(0, "GPIO32"),
339 MTK_FUNCTION(1, "SDA0"),
340 MTK_FUNCTION(2, "EINT8_1X"),
341 MTK_FUNCTION(6, "TEST_IN23"),
342 MTK_FUNCTION(7, "TEST_OUT23")
343 ),
344 MTK_PIN(
345 PINCTRL_PIN(33, "SCL1"),
346 "T1", "mt6397",
347 MTK_EINT_FUNCTION(2, 9),
348 MTK_FUNCTION(0, "GPIO33"),
349 MTK_FUNCTION(1, "SCL1"),
350 MTK_FUNCTION(2, "EINT9_1X"),
351 MTK_FUNCTION(3, "PWM2_2X"),
352 MTK_FUNCTION(6, "TEST_IN24"),
353 MTK_FUNCTION(7, "TEST_OUT24")
354 ),
355 MTK_PIN(
356 PINCTRL_PIN(34, "SDA1"),
357 "T2", "mt6397",
358 MTK_EINT_FUNCTION(2, 0),
359 MTK_FUNCTION(0, "GPIO34"),
360 MTK_FUNCTION(1, "SDA1"),
361 MTK_FUNCTION(2, "EINT0_1X"),
362 MTK_FUNCTION(6, "TEST_IN25"),
363 MTK_FUNCTION(7, "TEST_OUT25")
364 ),
365 MTK_PIN(
366 PINCTRL_PIN(35, "SCL2"),
367 "T3", "mt6397",
368 MTK_EINT_FUNCTION(2, 1),
369 MTK_FUNCTION(0, "GPIO35"),
370 MTK_FUNCTION(1, "SCL2"),
371 MTK_FUNCTION(2, "EINT1_1X"),
372 MTK_FUNCTION(3, "PWM3_2X"),
373 MTK_FUNCTION(6, "TEST_IN26"),
374 MTK_FUNCTION(7, "TEST_OUT26")
375 ),
376 MTK_PIN(
377 PINCTRL_PIN(36, "SDA2"),
378 "U2", "mt6397",
379 MTK_EINT_FUNCTION(2, 2),
380 MTK_FUNCTION(0, "GPIO36"),
381 MTK_FUNCTION(1, "SDA2"),
382 MTK_FUNCTION(2, "EINT2_1X"),
383 MTK_FUNCTION(6, "TEST_IN27"),
384 MTK_FUNCTION(7, "TEST_OUT27")
385 ),
386 MTK_PIN(
387 PINCTRL_PIN(37, "HDMISD"),
388 "H6", "mt6397",
389 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
390 MTK_FUNCTION(0, "GPIO37"),
391 MTK_FUNCTION(1, "HDMISD"),
392 MTK_FUNCTION(6, "TEST_IN28"),
393 MTK_FUNCTION(7, "TEST_OUT28")
394 ),
395 MTK_PIN(
396 PINCTRL_PIN(38, "HDMISCK"),
397 "H5", "mt6397",
398 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
399 MTK_FUNCTION(0, "GPIO38"),
400 MTK_FUNCTION(1, "HDMISCK"),
401 MTK_FUNCTION(6, "TEST_IN29"),
402 MTK_FUNCTION(7, "TEST_OUT29")
403 ),
404 MTK_PIN(
405 PINCTRL_PIN(39, "HTPLG"),
406 "H7", "mt6397",
407 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
408 MTK_FUNCTION(0, "GPIO39"),
409 MTK_FUNCTION(1, "HTPLG"),
410 MTK_FUNCTION(6, "TEST_IN30"),
411 MTK_FUNCTION(7, "TEST_OUT30")
412 ),
413 MTK_PIN(
414 PINCTRL_PIN(40, "CEC"),
415 "J9", "mt6397",
416 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
417 MTK_FUNCTION(0, "GPIO40"),
418 MTK_FUNCTION(1, "CEC"),
419 MTK_FUNCTION(6, "TEST_IN31"),
420 MTK_FUNCTION(7, "TEST_OUT31")
421 ),
422};
423
424#endif /* __PINCTRL_MTK_MT6397_H */
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-mt8127.h b/drivers/pinctrl/mediatek/pinctrl-mtk-mt8127.h
new file mode 100644
index 000000000000..212559c147f8
--- /dev/null
+++ b/drivers/pinctrl/mediatek/pinctrl-mtk-mt8127.h
@@ -0,0 +1,1318 @@
1#ifndef __PINCTRL_MTK_MT8127_H
2#define __PINCTRL_MTK_MT8127_H
3
4#include <linux/pinctrl/pinctrl.h>
5#include "pinctrl-mtk-common.h"
6
7static const struct mtk_desc_pin mtk_pins_mt8127[] = {
8 MTK_PIN(
9 PINCTRL_PIN(0, "PWRAP_SPI0_MI"),
10 "P22", "mt8127",
11 MTK_EINT_FUNCTION(0, 22),
12 MTK_FUNCTION(0, "GPIO0"),
13 MTK_FUNCTION(1, "PWRAP_SPIDO"),
14 MTK_FUNCTION(2, "PWRAP_SPIDI")
15 ),
16 MTK_PIN(
17 PINCTRL_PIN(1, "PWRAP_SPI0_MO"),
18 "M22", "mt8127",
19 MTK_EINT_FUNCTION(0, 23),
20 MTK_FUNCTION(0, "GPIO1"),
21 MTK_FUNCTION(1, "PWRAP_SPIDI"),
22 MTK_FUNCTION(2, "PWRAP_SPIDO")
23 ),
24 MTK_PIN(
25 PINCTRL_PIN(2, "PWRAP_INT"),
26 "L23", "mt8127",
27 MTK_EINT_FUNCTION(0, 24),
28 MTK_FUNCTION(0, "GPIO2")
29 ),
30 MTK_PIN(
31 PINCTRL_PIN(3, "PWRAP_SPI0_CK"),
32 "N23", "mt8127",
33 MTK_EINT_FUNCTION(0, 25),
34 MTK_FUNCTION(0, "GPIO3"),
35 MTK_FUNCTION(1, "PWRAP_SPICK_I")
36 ),
37 MTK_PIN(
38 PINCTRL_PIN(4, "PWRAP_SPI0_CSN"),
39 "N22", "mt8127",
40 MTK_EINT_FUNCTION(0, 26),
41 MTK_FUNCTION(0, "GPIO4"),
42 MTK_FUNCTION(1, "PWRAP_SPICS_B_I")
43 ),
44 MTK_PIN(
45 PINCTRL_PIN(5, "PWRAP_SPI0_CK2"),
46 "L19", "mt8127",
47 MTK_EINT_FUNCTION(0, 27),
48 MTK_FUNCTION(0, "GPIO5"),
49 MTK_FUNCTION(1, "PWRAP_SPICK2_I"),
50 MTK_FUNCTION(2, "ANT_SEL1"),
51 MTK_FUNCTION(3, "VDEC_TEST_CK"),
52 MTK_FUNCTION(7, "DBG_MON_B[0]")
53 ),
54 MTK_PIN(
55 PINCTRL_PIN(6, "PWRAP_SPI0_CSN2"),
56 "M23", "mt8127",
57 MTK_EINT_FUNCTION(0, 28),
58 MTK_FUNCTION(0, "GPIO6"),
59 MTK_FUNCTION(1, "PWRAP_SPICS2_B_I"),
60 MTK_FUNCTION(2, "ANT_SEL0"),
61 MTK_FUNCTION(3, "MM_TEST_CK"),
62 MTK_FUNCTION(7, "DBG_MON_B[1]")
63 ),
64 MTK_PIN(
65 PINCTRL_PIN(7, "AUD_CLK_MOSI"),
66 "K23", "mt8127",
67 MTK_EINT_FUNCTION(0, 29),
68 MTK_FUNCTION(0, "GPIO7"),
69 MTK_FUNCTION(1, "AUD_CLK"),
70 MTK_FUNCTION(2, "ADC_CK")
71 ),
72 MTK_PIN(
73 PINCTRL_PIN(8, "AUD_DAT_MISO"),
74 "K24", "mt8127",
75 MTK_EINT_FUNCTION(0, 30),
76 MTK_FUNCTION(0, "GPIO8"),
77 MTK_FUNCTION(1, "AUD_MISO"),
78 MTK_FUNCTION(2, "ADC_DAT_IN"),
79 MTK_FUNCTION(3, "AUD_MOSI")
80 ),
81 MTK_PIN(
82 PINCTRL_PIN(9, "AUD_DAT_MOSI"),
83 "K22", "mt8127",
84 MTK_EINT_FUNCTION(0, 31),
85 MTK_FUNCTION(0, "GPIO9"),
86 MTK_FUNCTION(1, "AUD_MOSI"),
87 MTK_FUNCTION(2, "ADC_WS"),
88 MTK_FUNCTION(3, "AUD_MISO")
89 ),
90 MTK_PIN(
91 PINCTRL_PIN(10, "RTC32K_CK"),
92 "R21", "mt8127",
93 MTK_EINT_FUNCTION(0, 32),
94 MTK_FUNCTION(0, "GPIO10"),
95 MTK_FUNCTION(1, "RTC32K_CK")
96 ),
97 MTK_PIN(
98 PINCTRL_PIN(11, "WATCHDOG"),
99 "P24", "mt8127",
100 MTK_EINT_FUNCTION(0, 33),
101 MTK_FUNCTION(0, "GPIO11"),
102 MTK_FUNCTION(1, "WATCHDOG")
103 ),
104 MTK_PIN(
105 PINCTRL_PIN(12, "SRCLKENA"),
106 "R22", "mt8127",
107 MTK_EINT_FUNCTION(0, 34),
108 MTK_FUNCTION(0, "GPIO12"),
109 MTK_FUNCTION(1, "SRCLKENA")
110 ),
111 MTK_PIN(
112 PINCTRL_PIN(13, "SRCLKENAI"),
113 "P23", "mt8127",
114 MTK_EINT_FUNCTION(0, 35),
115 MTK_FUNCTION(0, "GPIO13"),
116 MTK_FUNCTION(1, "SRCLKENAI")
117 ),
118 MTK_PIN(
119 PINCTRL_PIN(14, "URXD2"),
120 "U19", "mt8127",
121 MTK_EINT_FUNCTION(0, 36),
122 MTK_FUNCTION(0, "GPIO14"),
123 MTK_FUNCTION(1, "URXD2"),
124 MTK_FUNCTION(2, "DPI_D5"),
125 MTK_FUNCTION(3, "UTXD2"),
126 MTK_FUNCTION(5, "SRCCLKENAI2"),
127 MTK_FUNCTION(6, "KROW4")
128 ),
129 MTK_PIN(
130 PINCTRL_PIN(15, "UTXD2"),
131 "U20", "mt8127",
132 MTK_EINT_FUNCTION(0, 37),
133 MTK_FUNCTION(0, "GPIO15"),
134 MTK_FUNCTION(1, "UTXD2"),
135 MTK_FUNCTION(2, "DPI_HSYNC"),
136 MTK_FUNCTION(3, "URXD2"),
137 MTK_FUNCTION(6, "KROW5")
138 ),
139 MTK_PIN(
140 PINCTRL_PIN(16, "URXD3"),
141 "U18", "mt8127",
142 MTK_EINT_FUNCTION(0, 38),
143 MTK_FUNCTION(0, "GPIO16"),
144 MTK_FUNCTION(1, "URXD3"),
145 MTK_FUNCTION(2, "DPI_DE"),
146 MTK_FUNCTION(3, "UTXD3"),
147 MTK_FUNCTION(4, "UCTS2"),
148 MTK_FUNCTION(5, "PWM3"),
149 MTK_FUNCTION(6, "KROW6")
150 ),
151 MTK_PIN(
152 PINCTRL_PIN(17, "UTXD3"),
153 "R18", "mt8127",
154 MTK_EINT_FUNCTION(0, 39),
155 MTK_FUNCTION(0, "GPIO17"),
156 MTK_FUNCTION(1, "UTXD3"),
157 MTK_FUNCTION(2, "DPI_VSYNC"),
158 MTK_FUNCTION(3, "URXD3"),
159 MTK_FUNCTION(4, "URTS2"),
160 MTK_FUNCTION(5, "PWM4"),
161 MTK_FUNCTION(6, "KROW7")
162 ),
163 MTK_PIN(
164 PINCTRL_PIN(18, "PCM_CLK"),
165 "U22", "mt8127",
166 MTK_EINT_FUNCTION(0, 40),
167 MTK_FUNCTION(0, "GPIO18"),
168 MTK_FUNCTION(1, "PCM_CLK0"),
169 MTK_FUNCTION(2, "DPI_D4"),
170 MTK_FUNCTION(3, "I2SIN1_BCK0"),
171 MTK_FUNCTION(4, "I2SOUT_BCK"),
172 MTK_FUNCTION(5, "CONN_DSP_JCK"),
173 MTK_FUNCTION(6, "IR"),
174 MTK_FUNCTION(7, "DBG_MON_A[0]")
175 ),
176 MTK_PIN(
177 PINCTRL_PIN(19, "PCM_SYNC"),
178 "U23", "mt8127",
179 MTK_EINT_FUNCTION(0, 41),
180 MTK_FUNCTION(0, "GPIO19"),
181 MTK_FUNCTION(1, "PCM_SYNC"),
182 MTK_FUNCTION(2, "DPI_D3"),
183 MTK_FUNCTION(3, "I2SIN1_LRCK"),
184 MTK_FUNCTION(4, "I2SOUT_LRCK"),
185 MTK_FUNCTION(5, "CONN_DSP_JINTP"),
186 MTK_FUNCTION(6, "EXT_COL"),
187 MTK_FUNCTION(7, "DBG_MON_A[1]")
188 ),
189 MTK_PIN(
190 PINCTRL_PIN(20, "PCM_RX"),
191 "V22", "mt8127",
192 MTK_EINT_FUNCTION(0, 42),
193 MTK_FUNCTION(0, "GPIO20"),
194 MTK_FUNCTION(1, "PCM_RX"),
195 MTK_FUNCTION(2, "DPI_D1"),
196 MTK_FUNCTION(3, "I2SIN1_DATA_IN"),
197 MTK_FUNCTION(4, "PCM_TX"),
198 MTK_FUNCTION(5, "CONN_DSP_JDI"),
199 MTK_FUNCTION(6, "EXT_MDIO"),
200 MTK_FUNCTION(7, "DBG_MON_A[2]")
201 ),
202 MTK_PIN(
203 PINCTRL_PIN(21, "PCM_TX"),
204 "U21", "mt8127",
205 MTK_EINT_FUNCTION(0, 43),
206 MTK_FUNCTION(0, "GPIO21"),
207 MTK_FUNCTION(1, "PCM_TX"),
208 MTK_FUNCTION(2, "DPI_D2"),
209 MTK_FUNCTION(3, "I2SOUT_DATA_OUT"),
210 MTK_FUNCTION(4, "PCM_RX"),
211 MTK_FUNCTION(5, "CONN_DSP_JMS"),
212 MTK_FUNCTION(6, "EXT_MDC"),
213 MTK_FUNCTION(7, "DBG_MON_A[3]")
214 ),
215 MTK_PIN(
216 PINCTRL_PIN(22, "EINT0"),
217 "AB19", "mt8127",
218 MTK_EINT_FUNCTION(0, 0),
219 MTK_FUNCTION(0, "GPIO22"),
220 MTK_FUNCTION(1, "PWM1"),
221 MTK_FUNCTION(2, "DPI_CK"),
222 MTK_FUNCTION(4, "EXT_TXD0"),
223 MTK_FUNCTION(5, "CONN_DSP_JDO"),
224 MTK_FUNCTION(7, "DBG_MON_A[4]")
225 ),
226 MTK_PIN(
227 PINCTRL_PIN(23, "EINT1"),
228 "AA21", "mt8127",
229 MTK_EINT_FUNCTION(0, 1),
230 MTK_FUNCTION(0, "GPIO23"),
231 MTK_FUNCTION(1, "PWM2"),
232 MTK_FUNCTION(2, "DPI_D12"),
233 MTK_FUNCTION(4, "EXT_TXD1"),
234 MTK_FUNCTION(5, "CONN_MCU_TDO"),
235 MTK_FUNCTION(7, "DBG_MON_A[5]")
236 ),
237 MTK_PIN(
238 PINCTRL_PIN(24, "EINT2"),
239 "AA19", "mt8127",
240 MTK_EINT_FUNCTION(0, 2),
241 MTK_FUNCTION(0, "GPIO24"),
242 MTK_FUNCTION(1, "CLKM0"),
243 MTK_FUNCTION(2, "DPI_D13"),
244 MTK_FUNCTION(4, "EXT_TXD2"),
245 MTK_FUNCTION(5, "CONN_MCU_DBGACK_N"),
246 MTK_FUNCTION(6, "KCOL4"),
247 MTK_FUNCTION(7, "DBG_MON_A[6]")
248 ),
249 MTK_PIN(
250 PINCTRL_PIN(25, "EINT3"),
251 "Y19", "mt8127",
252 MTK_EINT_FUNCTION(0, 3),
253 MTK_FUNCTION(0, "GPIO25"),
254 MTK_FUNCTION(1, "CLKM1"),
255 MTK_FUNCTION(2, "DPI_D14"),
256 MTK_FUNCTION(3, "SPI_MI"),
257 MTK_FUNCTION(4, "EXT_TXD3"),
258 MTK_FUNCTION(5, "CONN_MCU_DBGI_N"),
259 MTK_FUNCTION(6, "KCOL5"),
260 MTK_FUNCTION(7, "DBG_MON_A[7]")
261 ),
262 MTK_PIN(
263 PINCTRL_PIN(26, "EINT4"),
264 "V21", "mt8127",
265 MTK_EINT_FUNCTION(0, 4),
266 MTK_FUNCTION(0, "GPIO26"),
267 MTK_FUNCTION(1, "CLKM2"),
268 MTK_FUNCTION(2, "DPI_D15"),
269 MTK_FUNCTION(3, "SPI_MO"),
270 MTK_FUNCTION(4, "EXT_TXC"),
271 MTK_FUNCTION(5, "CONN_MCU_TCK0"),
272 MTK_FUNCTION(6, "CONN_MCU_AICE_JCKC"),
273 MTK_FUNCTION(7, "DBG_MON_A[8]")
274 ),
275 MTK_PIN(
276 PINCTRL_PIN(27, "EINT5"),
277 "AB22", "mt8127",
278 MTK_EINT_FUNCTION(0, 5),
279 MTK_FUNCTION(0, "GPIO27"),
280 MTK_FUNCTION(1, "UCTS2"),
281 MTK_FUNCTION(2, "DPI_D16"),
282 MTK_FUNCTION(3, "SPI_CS"),
283 MTK_FUNCTION(4, "EXT_RXER"),
284 MTK_FUNCTION(5, "CONN_MCU_TDI"),
285 MTK_FUNCTION(6, "KCOL6"),
286 MTK_FUNCTION(7, "DBG_MON_A[9]")
287 ),
288 MTK_PIN(
289 PINCTRL_PIN(28, "EINT6"),
290 "AA23", "mt8127",
291 MTK_EINT_FUNCTION(0, 6),
292 MTK_FUNCTION(0, "GPIO28"),
293 MTK_FUNCTION(1, "URTS2"),
294 MTK_FUNCTION(2, "DPI_D17"),
295 MTK_FUNCTION(3, "SPI_CK"),
296 MTK_FUNCTION(4, "EXT_RXC"),
297 MTK_FUNCTION(5, "CONN_MCU_TRST_B"),
298 MTK_FUNCTION(6, "KCOL7"),
299 MTK_FUNCTION(7, "DBG_MON_A[10]")
300 ),
301 MTK_PIN(
302 PINCTRL_PIN(29, "EINT7"),
303 "Y23", "mt8127",
304 MTK_EINT_FUNCTION(0, 7),
305 MTK_FUNCTION(0, "GPIO29"),
306 MTK_FUNCTION(1, "UCTS3"),
307 MTK_FUNCTION(2, "DPI_D6"),
308 MTK_FUNCTION(3, "SDA1"),
309 MTK_FUNCTION(4, "EXT_RXDV"),
310 MTK_FUNCTION(5, "CONN_MCU_TMS"),
311 MTK_FUNCTION(6, "CONN_MCU_AICE_JMSC"),
312 MTK_FUNCTION(7, "DBG_MON_A[11]")
313 ),
314 MTK_PIN(
315 PINCTRL_PIN(30, "EINT8"),
316 "Y24", "mt8127",
317 MTK_EINT_FUNCTION(0, 8),
318 MTK_FUNCTION(0, "GPIO30"),
319 MTK_FUNCTION(1, "URTS3"),
320 MTK_FUNCTION(2, "CLKM3"),
321 MTK_FUNCTION(3, "SCL1"),
322 MTK_FUNCTION(4, "EXT_RXD0"),
323 MTK_FUNCTION(5, "ANT_SEL0"),
324 MTK_FUNCTION(6, "DPI_D7"),
325 MTK_FUNCTION(7, "DBG_MON_B[2]")
326 ),
327 MTK_PIN(
328 PINCTRL_PIN(31, "EINT9"),
329 "W23", "mt8127",
330 MTK_EINT_FUNCTION(0, 9),
331 MTK_FUNCTION(0, "GPIO31"),
332 MTK_FUNCTION(1, "CLKM4"),
333 MTK_FUNCTION(2, "SDA2"),
334 MTK_FUNCTION(3, "EXT_FRAME_SYNC"),
335 MTK_FUNCTION(4, "EXT_RXD1"),
336 MTK_FUNCTION(5, "ANT_SEL1"),
337 MTK_FUNCTION(6, "DPI_D8"),
338 MTK_FUNCTION(7, "DBG_MON_B[3]")
339 ),
340 MTK_PIN(
341 PINCTRL_PIN(32, "EINT10"),
342 "W24", "mt8127",
343 MTK_EINT_FUNCTION(0, 10),
344 MTK_FUNCTION(0, "GPIO32"),
345 MTK_FUNCTION(1, "CLKM5"),
346 MTK_FUNCTION(2, "SCL2"),
347 MTK_FUNCTION(3, "EXT_FRAME_SYNC"),
348 MTK_FUNCTION(4, "EXT_RXD2"),
349 MTK_FUNCTION(5, "ANT_SEL2"),
350 MTK_FUNCTION(6, "DPI_D9"),
351 MTK_FUNCTION(7, "DBG_MON_B[4]")
352 ),
353 MTK_PIN(
354 PINCTRL_PIN(33, "KPROW0"),
355 "AB24", "mt8127",
356 MTK_EINT_FUNCTION(0, 44),
357 MTK_FUNCTION(0, "GPIO33"),
358 MTK_FUNCTION(1, "KROW0"),
359 MTK_FUNCTION(4, "IMG_TEST_CK"),
360 MTK_FUNCTION(7, "DBG_MON_A[12]")
361 ),
362 MTK_PIN(
363 PINCTRL_PIN(34, "KPROW1"),
364 "AC24", "mt8127",
365 MTK_EINT_FUNCTION(0, 45),
366 MTK_FUNCTION(0, "GPIO34"),
367 MTK_FUNCTION(1, "KROW1"),
368 MTK_FUNCTION(2, "IDDIG"),
369 MTK_FUNCTION(3, "EXT_FRAME_SYNC"),
370 MTK_FUNCTION(4, "MFG_TEST_CK"),
371 MTK_FUNCTION(7, "DBG_MON_B[5]")
372 ),
373 MTK_PIN(
374 PINCTRL_PIN(35, "KPROW2"),
375 "AD24", "mt8127",
376 MTK_EINT_FUNCTION(0, 46),
377 MTK_FUNCTION(0, "GPIO35"),
378 MTK_FUNCTION(1, "KROW2"),
379 MTK_FUNCTION(2, "DRV_VBUS"),
380 MTK_FUNCTION(3, "EXT_FRAME_SYNC"),
381 MTK_FUNCTION(4, "CONN_TEST_CK"),
382 MTK_FUNCTION(7, "DBG_MON_B[6]")
383 ),
384 MTK_PIN(
385 PINCTRL_PIN(36, "KPCOL0"),
386 "AB23", "mt8127",
387 MTK_EINT_FUNCTION(0, 47),
388 MTK_FUNCTION(0, "GPIO36"),
389 MTK_FUNCTION(1, "KCOL0"),
390 MTK_FUNCTION(7, "DBG_MON_A[13]")
391 ),
392 MTK_PIN(
393 PINCTRL_PIN(37, "KPCOL1"),
394 "AC22", "mt8127",
395 MTK_EINT_FUNCTION(0, 48),
396 MTK_FUNCTION(0, "GPIO37"),
397 MTK_FUNCTION(1, "KCOL1"),
398 MTK_FUNCTION(7, "DBG_MON_B[7]")
399 ),
400 MTK_PIN(
401 PINCTRL_PIN(38, "KPCOL2"),
402 "AC23", "mt8127",
403 MTK_EINT_FUNCTION(0, 49),
404 MTK_FUNCTION(0, "GPIO38"),
405 MTK_FUNCTION(1, "KCOL2"),
406 MTK_FUNCTION(2, "IDDIG"),
407 MTK_FUNCTION(3, "EXT_FRAME_SYNC"),
408 MTK_FUNCTION(7, "DBG_MON_B[8]")
409 ),
410 MTK_PIN(
411 PINCTRL_PIN(39, "JTMS"),
412 "V18", "mt8127",
413 MTK_EINT_FUNCTION(0, 50),
414 MTK_FUNCTION(0, "GPIO39"),
415 MTK_FUNCTION(1, "JTMS"),
416 MTK_FUNCTION(2, "CONN_MCU_TMS"),
417 MTK_FUNCTION(3, "CONN_MCU_AICE_JMSC")
418 ),
419 MTK_PIN(
420 PINCTRL_PIN(40, "JTCK"),
421 "AA18", "mt8127",
422 MTK_EINT_FUNCTION(0, 51),
423 MTK_FUNCTION(0, "GPIO40"),
424 MTK_FUNCTION(1, "JTCK"),
425 MTK_FUNCTION(2, "CONN_MCU_TCK1"),
426 MTK_FUNCTION(3, "CONN_MCU_AICE_JCKC")
427 ),
428 MTK_PIN(
429 PINCTRL_PIN(41, "JTDI"),
430 "W18", "mt8127",
431 MTK_EINT_FUNCTION(0, 52),
432 MTK_FUNCTION(0, "GPIO41"),
433 MTK_FUNCTION(1, "JTDI"),
434 MTK_FUNCTION(2, "CONN_MCU_TDI")
435 ),
436 MTK_PIN(
437 PINCTRL_PIN(42, "JTDO"),
438 "Y18", "mt8127",
439 MTK_EINT_FUNCTION(0, 53),
440 MTK_FUNCTION(0, "GPIO42"),
441 MTK_FUNCTION(1, "JTDO"),
442 MTK_FUNCTION(2, "CONN_MCU_TDO")
443 ),
444 MTK_PIN(
445 PINCTRL_PIN(43, "EINT11"),
446 "W22", "mt8127",
447 MTK_EINT_FUNCTION(0, 11),
448 MTK_FUNCTION(0, "GPIO43"),
449 MTK_FUNCTION(1, "CLKM4"),
450 MTK_FUNCTION(2, "PWM2"),
451 MTK_FUNCTION(3, "KROW3"),
452 MTK_FUNCTION(4, "ANT_SEL3"),
453 MTK_FUNCTION(5, "DPI_D10"),
454 MTK_FUNCTION(6, "EXT_RXD3"),
455 MTK_FUNCTION(7, "DBG_MON_B[9]")
456 ),
457 MTK_PIN(
458 PINCTRL_PIN(44, "EINT12"),
459 "V23", "mt8127",
460 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
461 MTK_FUNCTION(0, "GPIO44"),
462 MTK_FUNCTION(1, "CLKM5"),
463 MTK_FUNCTION(2, "PWM0"),
464 MTK_FUNCTION(3, "KCOL3"),
465 MTK_FUNCTION(4, "ANT_SEL4"),
466 MTK_FUNCTION(5, "DPI_D11"),
467 MTK_FUNCTION(6, "EXT_TXEN"),
468 MTK_FUNCTION(7, "DBG_MON_B[10]")
469 ),
470 MTK_PIN(
471 PINCTRL_PIN(45, "EINT13"),
472 "Y21", "mt8127",
473 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
474 MTK_FUNCTION(0, "GPIO45"),
475 MTK_FUNCTION(4, "ANT_SEL5"),
476 MTK_FUNCTION(5, "DPI_D0"),
477 MTK_FUNCTION(6, "SPDIF"),
478 MTK_FUNCTION(7, "DBG_MON_B[11]")
479 ),
480 MTK_PIN(
481 PINCTRL_PIN(46, "EINT14"),
482 "F23", "mt8127",
483 MTK_EINT_FUNCTION(0, 14),
484 MTK_FUNCTION(0, "GPIO46"),
485 MTK_FUNCTION(2, "DAC_DAT_OUT"),
486 MTK_FUNCTION(4, "ANT_SEL1"),
487 MTK_FUNCTION(5, "CONN_MCU_DBGACK_N"),
488 MTK_FUNCTION(6, "NCLE"),
489 MTK_FUNCTION(7, "DBG_MON_A[14]")
490 ),
491 MTK_PIN(
492 PINCTRL_PIN(47, "EINT15"),
493 "G23", "mt8127",
494 MTK_EINT_FUNCTION(0, 15),
495 MTK_FUNCTION(0, "GPIO47"),
496 MTK_FUNCTION(2, "DAC_WS"),
497 MTK_FUNCTION(4, "ANT_SEL2"),
498 MTK_FUNCTION(5, "CONN_MCU_DBGI_N"),
499 MTK_FUNCTION(6, "NCEB1"),
500 MTK_FUNCTION(7, "DBG_MON_A[15]")
501 ),
502 MTK_PIN(
503 PINCTRL_PIN(48, "EINT16"),
504 "H23", "mt8127",
505 MTK_EINT_FUNCTION(0, 16),
506 MTK_FUNCTION(0, "GPIO48"),
507 MTK_FUNCTION(2, "DAC_CK"),
508 MTK_FUNCTION(4, "ANT_SEL3"),
509 MTK_FUNCTION(5, "CONN_MCU_TRST_B"),
510 MTK_FUNCTION(6, "NCEB0"),
511 MTK_FUNCTION(7, "DBG_MON_A[16]")
512 ),
513 MTK_PIN(
514 PINCTRL_PIN(49, "EINT17"),
515 "J22", "mt8127",
516 MTK_EINT_FUNCTION(0, 17),
517 MTK_FUNCTION(0, "GPIO49"),
518 MTK_FUNCTION(1, "UCTS0"),
519 MTK_FUNCTION(3, "CLKM0"),
520 MTK_FUNCTION(4, "IDDIG"),
521 MTK_FUNCTION(5, "ANT_SEL4"),
522 MTK_FUNCTION(6, "NREB"),
523 MTK_FUNCTION(7, "DBG_MON_A[17]")
524 ),
525 MTK_PIN(
526 PINCTRL_PIN(50, "EINT18"),
527 "AD20", "mt8127",
528 MTK_EINT_FUNCTION(0, 18),
529 MTK_FUNCTION(0, "GPIO50"),
530 MTK_FUNCTION(1, "URTS0"),
531 MTK_FUNCTION(2, "CLKM3"),
532 MTK_FUNCTION(3, "I2SOUT_LRCK"),
533 MTK_FUNCTION(4, "DRV_VBUS"),
534 MTK_FUNCTION(5, "ANT_SEL3"),
535 MTK_FUNCTION(6, "ADC_CK"),
536 MTK_FUNCTION(7, "DBG_MON_B[12]")
537 ),
538 MTK_PIN(
539 PINCTRL_PIN(51, "EINT19"),
540 "AC21", "mt8127",
541 MTK_EINT_FUNCTION(0, 19),
542 MTK_FUNCTION(0, "GPIO51"),
543 MTK_FUNCTION(1, "UCTS1"),
544 MTK_FUNCTION(3, "I2SOUT_BCK"),
545 MTK_FUNCTION(4, "CLKM1"),
546 MTK_FUNCTION(5, "ANT_SEL4"),
547 MTK_FUNCTION(6, "ADC_DAT_IN"),
548 MTK_FUNCTION(7, "DBG_MON_B[13]")
549 ),
550 MTK_PIN(
551 PINCTRL_PIN(52, "EINT20"),
552 "V20", "mt8127",
553 MTK_EINT_FUNCTION(0, 20),
554 MTK_FUNCTION(0, "GPIO52"),
555 MTK_FUNCTION(1, "URTS1"),
556 MTK_FUNCTION(2, "PCM_TX"),
557 MTK_FUNCTION(3, "I2SOUT_DATA_OUT"),
558 MTK_FUNCTION(4, "CLKM2"),
559 MTK_FUNCTION(5, "ANT_SEL5"),
560 MTK_FUNCTION(6, "ADC_WS"),
561 MTK_FUNCTION(7, "DBG_MON_B[14]")
562 ),
563 MTK_PIN(
564 PINCTRL_PIN(53, "SPI_CS"),
565 "AD19", "mt8127",
566 MTK_EINT_FUNCTION(0, 54),
567 MTK_FUNCTION(0, "GPIO53"),
568 MTK_FUNCTION(1, "SPI_CS"),
569 MTK_FUNCTION(3, "I2SIN1_DATA_IN"),
570 MTK_FUNCTION(4, "ADC_CK"),
571 MTK_FUNCTION(7, "DBG_MON_B[15]")
572 ),
573 MTK_PIN(
574 PINCTRL_PIN(54, "SPI_CK"),
575 "AC18", "mt8127",
576 MTK_EINT_FUNCTION(0, 55),
577 MTK_FUNCTION(0, "GPIO54"),
578 MTK_FUNCTION(1, "SPI_CK"),
579 MTK_FUNCTION(3, "I2SIN1_LRCK"),
580 MTK_FUNCTION(4, "ADC_DAT_IN"),
581 MTK_FUNCTION(7, "DBG_MON_B[16]")
582 ),
583 MTK_PIN(
584 PINCTRL_PIN(55, "SPI_MI"),
585 "AC19", "mt8127",
586 MTK_EINT_FUNCTION(0, 56),
587 MTK_FUNCTION(0, "GPIO55"),
588 MTK_FUNCTION(1, "SPI_MI"),
589 MTK_FUNCTION(2, "SPI_MO"),
590 MTK_FUNCTION(3, "I2SIN1_BCK1"),
591 MTK_FUNCTION(4, "ADC_WS"),
592 MTK_FUNCTION(7, "DBG_MON_B[17]")
593 ),
594 MTK_PIN(
595 PINCTRL_PIN(56, "SPI_MO"),
596 "AD18", "mt8127",
597 MTK_EINT_FUNCTION(0, 57),
598 MTK_FUNCTION(0, "GPIO56"),
599 MTK_FUNCTION(1, "SPI_MO"),
600 MTK_FUNCTION(2, "SPI_MI"),
601 MTK_FUNCTION(7, "DBG_MON_B[18]")
602 ),
603 MTK_PIN(
604 PINCTRL_PIN(57, "SDA1"),
605 "AE23", "mt8127",
606 MTK_EINT_FUNCTION(0, 58),
607 MTK_FUNCTION(0, "GPIO57"),
608 MTK_FUNCTION(1, "SDA1")
609 ),
610 MTK_PIN(
611 PINCTRL_PIN(58, "SCL1"),
612 "AD23", "mt8127",
613 MTK_EINT_FUNCTION(0, 59),
614 MTK_FUNCTION(0, "GPIO58"),
615 MTK_FUNCTION(1, "SCL1")
616 ),
617 MTK_PIN(
618 PINCTRL_PIN(59, "DISP_PWM"),
619 "AC20", "mt8127",
620 MTK_EINT_FUNCTION(0, 60),
621 MTK_FUNCTION(0, "GPIO59"),
622 MTK_FUNCTION(1, "DISP_PWM"),
623 MTK_FUNCTION(2, "PWM1"),
624 MTK_FUNCTION(7, "DBG_MON_A[18]")
625 ),
626 MTK_PIN(
627 PINCTRL_PIN(60, "WB_RSTB"),
628 "AD7", "mt8127",
629 MTK_EINT_FUNCTION(0, 61),
630 MTK_FUNCTION(0, "GPIO60"),
631 MTK_FUNCTION(1, "WB_RSTB"),
632 MTK_FUNCTION(7, "DBG_MON_A[19]")
633 ),
634 MTK_PIN(
635 PINCTRL_PIN(61, "F2W_DATA"),
636 "Y10", "mt8127",
637 MTK_EINT_FUNCTION(0, 62),
638 MTK_FUNCTION(0, "GPIO61"),
639 MTK_FUNCTION(1, "F2W_DATA"),
640 MTK_FUNCTION(7, "DBG_MON_A[20]")
641 ),
642 MTK_PIN(
643 PINCTRL_PIN(62, "F2W_CLK"),
644 "W10", "mt8127",
645 MTK_EINT_FUNCTION(0, 63),
646 MTK_FUNCTION(0, "GPIO62"),
647 MTK_FUNCTION(1, "F2W_CK"),
648 MTK_FUNCTION(7, "DBG_MON_A[21]")
649 ),
650 MTK_PIN(
651 PINCTRL_PIN(63, "WB_SCLK"),
652 "AB7", "mt8127",
653 MTK_EINT_FUNCTION(0, 64),
654 MTK_FUNCTION(0, "GPIO63"),
655 MTK_FUNCTION(1, "WB_SCLK"),
656 MTK_FUNCTION(7, "DBG_MON_A[22]")
657 ),
658 MTK_PIN(
659 PINCTRL_PIN(64, "WB_SDATA"),
660 "AA7", "mt8127",
661 MTK_EINT_FUNCTION(0, 65),
662 MTK_FUNCTION(0, "GPIO64"),
663 MTK_FUNCTION(1, "WB_SDATA"),
664 MTK_FUNCTION(7, "DBG_MON_A[23]")
665 ),
666 MTK_PIN(
667 PINCTRL_PIN(65, "WB_SEN"),
668 "Y7", "mt8127",
669 MTK_EINT_FUNCTION(0, 66),
670 MTK_FUNCTION(0, "GPIO65"),
671 MTK_FUNCTION(1, "WB_SEN"),
672 MTK_FUNCTION(7, "DBG_MON_A[24]")
673 ),
674 MTK_PIN(
675 PINCTRL_PIN(66, "WB_CRTL0"),
676 "AA1", "mt8127",
677 MTK_EINT_FUNCTION(0, 67),
678 MTK_FUNCTION(0, "GPIO66"),
679 MTK_FUNCTION(1, "WB_CRTL0"),
680 MTK_FUNCTION(2, "DFD_NTRST_XI"),
681 MTK_FUNCTION(7, "DBG_MON_A[25]")
682 ),
683 MTK_PIN(
684 PINCTRL_PIN(67, "WB_CRTL1"),
685 "AA2", "mt8127",
686 MTK_EINT_FUNCTION(0, 68),
687 MTK_FUNCTION(0, "GPIO67"),
688 MTK_FUNCTION(1, "WB_CRTL1"),
689 MTK_FUNCTION(2, "DFD_TMS_XI"),
690 MTK_FUNCTION(7, "DBG_MON_A[26]")
691 ),
692 MTK_PIN(
693 PINCTRL_PIN(68, "WB_CRTL2"),
694 "Y1", "mt8127",
695 MTK_EINT_FUNCTION(0, 69),
696 MTK_FUNCTION(0, "GPIO68"),
697 MTK_FUNCTION(1, "WB_CRTL2"),
698 MTK_FUNCTION(2, "DFD_TCK_XI"),
699 MTK_FUNCTION(7, "DBG_MON_A[27]")
700 ),
701 MTK_PIN(
702 PINCTRL_PIN(69, "WB_CRTL3"),
703 "Y2", "mt8127",
704 MTK_EINT_FUNCTION(0, 70),
705 MTK_FUNCTION(0, "GPIO69"),
706 MTK_FUNCTION(1, "WB_CRTL3"),
707 MTK_FUNCTION(2, "DFD_TDI_XI"),
708 MTK_FUNCTION(7, "DBG_MON_A[28]")
709 ),
710 MTK_PIN(
711 PINCTRL_PIN(70, "WB_CRTL4"),
712 "Y3", "mt8127",
713 MTK_EINT_FUNCTION(0, 71),
714 MTK_FUNCTION(0, "GPIO70"),
715 MTK_FUNCTION(1, "WB_CRTL4"),
716 MTK_FUNCTION(2, "DFD_TDO"),
717 MTK_FUNCTION(7, "DBG_MON_A[29]")
718 ),
719 MTK_PIN(
720 PINCTRL_PIN(71, "WB_CRTL5"),
721 "Y4", "mt8127",
722 MTK_EINT_FUNCTION(0, 72),
723 MTK_FUNCTION(0, "GPIO71"),
724 MTK_FUNCTION(1, "WB_CRTL5"),
725 MTK_FUNCTION(7, "DBG_MON_A[30]")
726 ),
727 MTK_PIN(
728 PINCTRL_PIN(72, "I2S_DATA_IN"),
729 "K21", "mt8127",
730 MTK_EINT_FUNCTION(0, 73),
731 MTK_FUNCTION(0, "GPIO72"),
732 MTK_FUNCTION(1, "I2SIN1_DATA_IN"),
733 MTK_FUNCTION(2, "PCM_RX"),
734 MTK_FUNCTION(3, "I2SOUT_DATA_OUT"),
735 MTK_FUNCTION(4, "DAC_DAT_OUT"),
736 MTK_FUNCTION(5, "PWM0"),
737 MTK_FUNCTION(6, "ADC_CK"),
738 MTK_FUNCTION(7, "DBG_MON_B[19]")
739 ),
740 MTK_PIN(
741 PINCTRL_PIN(73, "I2S_LRCK"),
742 "L21", "mt8127",
743 MTK_EINT_FUNCTION(0, 74),
744 MTK_FUNCTION(0, "GPIO73"),
745 MTK_FUNCTION(1, "I2SIN1_LRCK"),
746 MTK_FUNCTION(2, "PCM_SYNC"),
747 MTK_FUNCTION(3, "I2SOUT_LRCK"),
748 MTK_FUNCTION(4, "DAC_WS"),
749 MTK_FUNCTION(5, "PWM3"),
750 MTK_FUNCTION(6, "ADC_DAT_IN"),
751 MTK_FUNCTION(7, "DBG_MON_B[20]")
752 ),
753 MTK_PIN(
754 PINCTRL_PIN(74, "I2S_BCK"),
755 "L20", "mt8127",
756 MTK_EINT_FUNCTION(0, 75),
757 MTK_FUNCTION(0, "GPIO74"),
758 MTK_FUNCTION(1, "I2SIN1_BCK2"),
759 MTK_FUNCTION(2, "PCM_CLK1"),
760 MTK_FUNCTION(3, "I2SOUT_BCK"),
761 MTK_FUNCTION(4, "DAC_CK"),
762 MTK_FUNCTION(5, "PWM4"),
763 MTK_FUNCTION(6, "ADC_WS"),
764 MTK_FUNCTION(7, "DBG_MON_B[21]")
765 ),
766 MTK_PIN(
767 PINCTRL_PIN(75, "SDA0"),
768 "W3", "mt8127",
769 MTK_EINT_FUNCTION(0, 76),
770 MTK_FUNCTION(0, "GPIO75"),
771 MTK_FUNCTION(1, "SDA0")
772 ),
773 MTK_PIN(
774 PINCTRL_PIN(76, "SCL0"),
775 "W4", "mt8127",
776 MTK_EINT_FUNCTION(0, 77),
777 MTK_FUNCTION(0, "GPIO76"),
778 MTK_FUNCTION(1, "SCL0")
779 ),
780 MTK_PIN(
781 PINCTRL_PIN(77, "SDA2"),
782 "K19", "mt8127",
783 MTK_EINT_FUNCTION(0, 78),
784 MTK_FUNCTION(0, "GPIO77"),
785 MTK_FUNCTION(1, "SDA2"),
786 MTK_FUNCTION(2, "PWM1")
787 ),
788 MTK_PIN(
789 PINCTRL_PIN(78, "SCL2"),
790 "K20", "mt8127",
791 MTK_EINT_FUNCTION(0, 79),
792 MTK_FUNCTION(0, "GPIO78"),
793 MTK_FUNCTION(1, "SCL2"),
794 MTK_FUNCTION(2, "PWM2")
795 ),
796 MTK_PIN(
797 PINCTRL_PIN(79, "URXD0"),
798 "K18", "mt8127",
799 MTK_EINT_FUNCTION(0, 80),
800 MTK_FUNCTION(0, "GPIO79"),
801 MTK_FUNCTION(1, "URXD0"),
802 MTK_FUNCTION(2, "UTXD0")
803 ),
804 MTK_PIN(
805 PINCTRL_PIN(80, "UTXD0"),
806 "K17", "mt8127",
807 MTK_EINT_FUNCTION(0, 81),
808 MTK_FUNCTION(0, "GPIO80"),
809 MTK_FUNCTION(1, "UTXD0"),
810 MTK_FUNCTION(2, "URXD0")
811 ),
812 MTK_PIN(
813 PINCTRL_PIN(81, "URXD1"),
814 "L17", "mt8127",
815 MTK_EINT_FUNCTION(0, 82),
816 MTK_FUNCTION(0, "GPIO81"),
817 MTK_FUNCTION(1, "URXD1"),
818 MTK_FUNCTION(2, "UTXD1")
819 ),
820 MTK_PIN(
821 PINCTRL_PIN(82, "UTXD1"),
822 "L18", "mt8127",
823 MTK_EINT_FUNCTION(0, 83),
824 MTK_FUNCTION(0, "GPIO82"),
825 MTK_FUNCTION(1, "UTXD1"),
826 MTK_FUNCTION(2, "URXD1")
827 ),
828 MTK_PIN(
829 PINCTRL_PIN(83, "LCM_RST"),
830 "W5", "mt8127",
831 MTK_EINT_FUNCTION(0, 84),
832 MTK_FUNCTION(0, "GPIO83"),
833 MTK_FUNCTION(1, "LCM_RST"),
834 MTK_FUNCTION(2, "VDAC_CK_XI"),
835 MTK_FUNCTION(7, "DBG_MON_A[31]")
836 ),
837 MTK_PIN(
838 PINCTRL_PIN(84, "DSI_TE"),
839 "W6", "mt8127",
840 MTK_EINT_FUNCTION(0, 85),
841 MTK_FUNCTION(0, "GPIO84"),
842 MTK_FUNCTION(1, "DSI_TE"),
843 MTK_FUNCTION(7, "DBG_MON_A[32]")
844 ),
845 MTK_PIN(
846 PINCTRL_PIN(85, "MSDC2_CMD"),
847 "U7", "mt8127",
848 MTK_EINT_FUNCTION(0, 86),
849 MTK_FUNCTION(0, "GPIO85"),
850 MTK_FUNCTION(1, "MSDC2_CMD"),
851 MTK_FUNCTION(2, "ANT_SEL0"),
852 MTK_FUNCTION(3, "SDA1"),
853 MTK_FUNCTION(6, "I2SOUT_BCK"),
854 MTK_FUNCTION(7, "DBG_MON_B[22]")
855 ),
856 MTK_PIN(
857 PINCTRL_PIN(86, "MSDC2_CLK"),
858 "T8", "mt8127",
859 MTK_EINT_FUNCTION(0, 87),
860 MTK_FUNCTION(0, "GPIO86"),
861 MTK_FUNCTION(1, "MSDC2_CLK"),
862 MTK_FUNCTION(2, "ANT_SEL1"),
863 MTK_FUNCTION(3, "SCL1"),
864 MTK_FUNCTION(6, "I2SOUT_LRCK"),
865 MTK_FUNCTION(7, "DBG_MON_B[23]")
866 ),
867 MTK_PIN(
868 PINCTRL_PIN(87, "MSDC2_DAT0"),
869 "V3", "mt8127",
870 MTK_EINT_FUNCTION(0, 88),
871 MTK_FUNCTION(0, "GPIO87"),
872 MTK_FUNCTION(1, "MSDC2_DAT0"),
873 MTK_FUNCTION(2, "ANT_SEL2"),
874 MTK_FUNCTION(5, "UTXD0"),
875 MTK_FUNCTION(6, "I2SOUT_DATA_OUT"),
876 MTK_FUNCTION(7, "DBG_MON_B[24]")
877 ),
878 MTK_PIN(
879 PINCTRL_PIN(88, "MSDC2_DAT1"),
880 "V4", "mt8127",
881 MTK_EINT_FUNCTION(0, 89),
882 MTK_FUNCTION(0, "GPIO88"),
883 MTK_FUNCTION(1, "MSDC2_DAT1"),
884 MTK_FUNCTION(2, "ANT_SEL3"),
885 MTK_FUNCTION(3, "PWM0"),
886 MTK_FUNCTION(5, "URXD0"),
887 MTK_FUNCTION(6, "PWM1"),
888 MTK_FUNCTION(7, "DBG_MON_B[25]")
889 ),
890 MTK_PIN(
891 PINCTRL_PIN(89, "MSDC2_DAT2"),
892 "U5", "mt8127",
893 MTK_EINT_FUNCTION(0, 90),
894 MTK_FUNCTION(0, "GPIO89"),
895 MTK_FUNCTION(1, "MSDC2_DAT2"),
896 MTK_FUNCTION(2, "ANT_SEL4"),
897 MTK_FUNCTION(3, "SDA2"),
898 MTK_FUNCTION(5, "UTXD1"),
899 MTK_FUNCTION(6, "PWM2"),
900 MTK_FUNCTION(7, "DBG_MON_B[26]")
901 ),
902 MTK_PIN(
903 PINCTRL_PIN(90, "MSDC2_DAT3"),
904 "U6", "mt8127",
905 MTK_EINT_FUNCTION(0, 91),
906 MTK_FUNCTION(0, "GPIO90"),
907 MTK_FUNCTION(1, "MSDC2_DAT3"),
908 MTK_FUNCTION(2, "ANT_SEL5"),
909 MTK_FUNCTION(3, "SCL2"),
910 MTK_FUNCTION(4, "EXT_FRAME_SYNC"),
911 MTK_FUNCTION(5, "URXD1"),
912 MTK_FUNCTION(6, "PWM3"),
913 MTK_FUNCTION(7, "DBG_MON_B[27]")
914 ),
915 MTK_PIN(
916 PINCTRL_PIN(91, "TDN3"),
917 "U2", "mt8127",
918 MTK_EINT_FUNCTION(0, 92),
919 MTK_FUNCTION(0, "GPI91"),
920 MTK_FUNCTION(1, "TDN3")
921 ),
922 MTK_PIN(
923 PINCTRL_PIN(92, "TDP3"),
924 "U1", "mt8127",
925 MTK_EINT_FUNCTION(0, 93),
926 MTK_FUNCTION(0, "GPI92"),
927 MTK_FUNCTION(1, "TDP3")
928 ),
929 MTK_PIN(
930 PINCTRL_PIN(93, "TDN2"),
931 "T2", "mt8127",
932 MTK_EINT_FUNCTION(0, 94),
933 MTK_FUNCTION(0, "GPI93"),
934 MTK_FUNCTION(1, "TDN2")
935 ),
936 MTK_PIN(
937 PINCTRL_PIN(94, "TDP2"),
938 "T1", "mt8127",
939 MTK_EINT_FUNCTION(0, 95),
940 MTK_FUNCTION(0, "GPI94"),
941 MTK_FUNCTION(1, "TDP2")
942 ),
943 MTK_PIN(
944 PINCTRL_PIN(95, "TCN"),
945 "R5", "mt8127",
946 MTK_EINT_FUNCTION(0, 96),
947 MTK_FUNCTION(0, "GPI95"),
948 MTK_FUNCTION(1, "TCN")
949 ),
950 MTK_PIN(
951 PINCTRL_PIN(96, "TCP"),
952 "R4", "mt8127",
953 MTK_EINT_FUNCTION(0, 97),
954 MTK_FUNCTION(0, "GPI96"),
955 MTK_FUNCTION(1, "TCP")
956 ),
957 MTK_PIN(
958 PINCTRL_PIN(97, "TDN1"),
959 "R3", "mt8127",
960 MTK_EINT_FUNCTION(0, 98),
961 MTK_FUNCTION(0, "GPI97"),
962 MTK_FUNCTION(1, "TDN1")
963 ),
964 MTK_PIN(
965 PINCTRL_PIN(98, "TDP1"),
966 "R2", "mt8127",
967 MTK_EINT_FUNCTION(0, 99),
968 MTK_FUNCTION(0, "GPI98"),
969 MTK_FUNCTION(1, "TDP1")
970 ),
971 MTK_PIN(
972 PINCTRL_PIN(99, "TDN0"),
973 "P3", "mt8127",
974 MTK_EINT_FUNCTION(0, 100),
975 MTK_FUNCTION(0, "GPI99"),
976 MTK_FUNCTION(1, "TDN0")
977 ),
978 MTK_PIN(
979 PINCTRL_PIN(100, "TDP0"),
980 "P2", "mt8127",
981 MTK_EINT_FUNCTION(0, 101),
982 MTK_FUNCTION(0, "GPI100"),
983 MTK_FUNCTION(1, "TDP0")
984 ),
985 MTK_PIN(
986 PINCTRL_PIN(101, "RDN0"),
987 "K1", "mt8127",
988 MTK_EINT_FUNCTION(0, 102),
989 MTK_FUNCTION(0, "GPI101"),
990 MTK_FUNCTION(1, "RDN0")
991 ),
992 MTK_PIN(
993 PINCTRL_PIN(102, "RDP0"),
994 "K2", "mt8127",
995 MTK_EINT_FUNCTION(0, 103),
996 MTK_FUNCTION(0, "GPI102"),
997 MTK_FUNCTION(1, "RDP0")
998 ),
999 MTK_PIN(
1000 PINCTRL_PIN(103, "RDN1"),
1001 "L2", "mt8127",
1002 MTK_EINT_FUNCTION(0, 104),
1003 MTK_FUNCTION(0, "GPI103"),
1004 MTK_FUNCTION(1, "RDN1")
1005 ),
1006 MTK_PIN(
1007 PINCTRL_PIN(104, "RDP1"),
1008 "L3", "mt8127",
1009 MTK_EINT_FUNCTION(0, 105),
1010 MTK_FUNCTION(0, "GPI104"),
1011 MTK_FUNCTION(1, "RDP1")
1012 ),
1013 MTK_PIN(
1014 PINCTRL_PIN(105, "RCN"),
1015 "M4", "mt8127",
1016 MTK_EINT_FUNCTION(0, 106),
1017 MTK_FUNCTION(0, "GPI105"),
1018 MTK_FUNCTION(1, "RCN")
1019 ),
1020 MTK_PIN(
1021 PINCTRL_PIN(106, "RCP"),
1022 "M5", "mt8127",
1023 MTK_EINT_FUNCTION(0, 107),
1024 MTK_FUNCTION(0, "GPI106"),
1025 MTK_FUNCTION(1, "RCP")
1026 ),
1027 MTK_PIN(
1028 PINCTRL_PIN(107, "RDN2"),
1029 "M2", "mt8127",
1030 MTK_EINT_FUNCTION(0, 108),
1031 MTK_FUNCTION(0, "GPI107"),
1032 MTK_FUNCTION(1, "RDN2"),
1033 MTK_FUNCTION(2, "CMDAT8")
1034 ),
1035 MTK_PIN(
1036 PINCTRL_PIN(108, "RDP2"),
1037 "M3", "mt8127",
1038 MTK_EINT_FUNCTION(0, 109),
1039 MTK_FUNCTION(0, "GPI108"),
1040 MTK_FUNCTION(1, "RDP2"),
1041 MTK_FUNCTION(2, "CMDAT9")
1042 ),
1043 MTK_PIN(
1044 PINCTRL_PIN(109, "RDN3"),
1045 "N2", "mt8127",
1046 MTK_EINT_FUNCTION(0, 110),
1047 MTK_FUNCTION(0, "GPI109"),
1048 MTK_FUNCTION(1, "RDN3"),
1049 MTK_FUNCTION(2, "CMDAT4")
1050 ),
1051 MTK_PIN(
1052 PINCTRL_PIN(110, "RDP3"),
1053 "N3", "mt8127",
1054 MTK_EINT_FUNCTION(0, 111),
1055 MTK_FUNCTION(0, "GPI110"),
1056 MTK_FUNCTION(1, "RDP3"),
1057 MTK_FUNCTION(2, "CMDAT5")
1058 ),
1059 MTK_PIN(
1060 PINCTRL_PIN(111, "RCN_A"),
1061 "J5", "mt8127",
1062 MTK_EINT_FUNCTION(0, 112),
1063 MTK_FUNCTION(0, "GPI111"),
1064 MTK_FUNCTION(1, "RCN_A"),
1065 MTK_FUNCTION(2, "CMDAT6")
1066 ),
1067 MTK_PIN(
1068 PINCTRL_PIN(112, "RCP_A"),
1069 "J4", "mt8127",
1070 MTK_EINT_FUNCTION(0, 113),
1071 MTK_FUNCTION(0, "GPI112"),
1072 MTK_FUNCTION(1, "RCP_A"),
1073 MTK_FUNCTION(2, "CMDAT7")
1074 ),
1075 MTK_PIN(
1076 PINCTRL_PIN(113, "RDN1_A"),
1077 "J2", "mt8127",
1078 MTK_EINT_FUNCTION(0, 114),
1079 MTK_FUNCTION(0, "GPI113"),
1080 MTK_FUNCTION(1, "RDN1_A"),
1081 MTK_FUNCTION(2, "CMDAT2"),
1082 MTK_FUNCTION(3, "CMCSD2")
1083 ),
1084 MTK_PIN(
1085 PINCTRL_PIN(114, "RDP1_A"),
1086 "J3", "mt8127",
1087 MTK_EINT_FUNCTION(0, 115),
1088 MTK_FUNCTION(0, "GPI114"),
1089 MTK_FUNCTION(1, "RDP1_A"),
1090 MTK_FUNCTION(2, "CMDAT3"),
1091 MTK_FUNCTION(3, "CMCSD3")
1092 ),
1093 MTK_PIN(
1094 PINCTRL_PIN(115, "RDN0_A"),
1095 "H2", "mt8127",
1096 MTK_EINT_FUNCTION(0, 116),
1097 MTK_FUNCTION(0, "GPI115"),
1098 MTK_FUNCTION(1, "RDN0_A"),
1099 MTK_FUNCTION(2, "CMHSYNC")
1100 ),
1101 MTK_PIN(
1102 PINCTRL_PIN(116, "RDP0_A"),
1103 "H3", "mt8127",
1104 MTK_EINT_FUNCTION(0, 117),
1105 MTK_FUNCTION(0, "GPI116"),
1106 MTK_FUNCTION(1, "RDP0_A"),
1107 MTK_FUNCTION(2, "CMVSYNC")
1108 ),
1109 MTK_PIN(
1110 PINCTRL_PIN(117, "CMDAT0"),
1111 "G5", "mt8127",
1112 MTK_EINT_FUNCTION(0, 118),
1113 MTK_FUNCTION(0, "GPIO117"),
1114 MTK_FUNCTION(1, "CMDAT0"),
1115 MTK_FUNCTION(2, "CMCSD0"),
1116 MTK_FUNCTION(3, "ANT_SEL2"),
1117 MTK_FUNCTION(7, "DBG_MON_B[28]")
1118 ),
1119 MTK_PIN(
1120 PINCTRL_PIN(118, "CMDAT1"),
1121 "G4", "mt8127",
1122 MTK_EINT_FUNCTION(0, 119),
1123 MTK_FUNCTION(0, "GPIO118"),
1124 MTK_FUNCTION(1, "CMDAT1"),
1125 MTK_FUNCTION(2, "CMCSD1"),
1126 MTK_FUNCTION(3, "ANT_SEL3"),
1127 MTK_FUNCTION(7, "DBG_MON_B[29]")
1128 ),
1129 MTK_PIN(
1130 PINCTRL_PIN(119, "CMMCLK"),
1131 "F3", "mt8127",
1132 MTK_EINT_FUNCTION(0, 120),
1133 MTK_FUNCTION(0, "GPIO119"),
1134 MTK_FUNCTION(1, "CMMCLK"),
1135 MTK_FUNCTION(3, "ANT_SEL4"),
1136 MTK_FUNCTION(7, "DBG_MON_B[30]")
1137 ),
1138 MTK_PIN(
1139 PINCTRL_PIN(120, "CMPCLK"),
1140 "G6", "mt8127",
1141 MTK_EINT_FUNCTION(0, 121),
1142 MTK_FUNCTION(0, "GPIO120"),
1143 MTK_FUNCTION(1, "CMPCLK"),
1144 MTK_FUNCTION(2, "CMCSK"),
1145 MTK_FUNCTION(3, "ANT_SEL5"),
1146 MTK_FUNCTION(7, "DBG_MON_B[31]")
1147 ),
1148 MTK_PIN(
1149 PINCTRL_PIN(121, "MSDC1_CMD"),
1150 "E3", "mt8127",
1151 MTK_EINT_FUNCTION(0, 122),
1152 MTK_FUNCTION(0, "GPIO121"),
1153 MTK_FUNCTION(1, "MSDC1_CMD")
1154 ),
1155 MTK_PIN(
1156 PINCTRL_PIN(122, "MSDC1_CLK"),
1157 "D1", "mt8127",
1158 MTK_EINT_FUNCTION(0, 123),
1159 MTK_FUNCTION(0, "GPIO122"),
1160 MTK_FUNCTION(1, "MSDC1_CLK")
1161 ),
1162 MTK_PIN(
1163 PINCTRL_PIN(123, "MSDC1_DAT0"),
1164 "D2", "mt8127",
1165 MTK_EINT_FUNCTION(0, 124),
1166 MTK_FUNCTION(0, "GPIO123"),
1167 MTK_FUNCTION(1, "MSDC1_DAT0")
1168 ),
1169 MTK_PIN(
1170 PINCTRL_PIN(124, "MSDC1_DAT1"),
1171 "D3", "mt8127",
1172 MTK_EINT_FUNCTION(0, 125),
1173 MTK_FUNCTION(0, "GPIO124"),
1174 MTK_FUNCTION(1, "MSDC1_DAT1")
1175 ),
1176 MTK_PIN(
1177 PINCTRL_PIN(125, "MSDC1_DAT2"),
1178 "F2", "mt8127",
1179 MTK_EINT_FUNCTION(0, 126),
1180 MTK_FUNCTION(0, "GPIO125"),
1181 MTK_FUNCTION(1, "MSDC1_DAT2")
1182 ),
1183 MTK_PIN(
1184 PINCTRL_PIN(126, "MSDC1_DAT3"),
1185 "E2", "mt8127",
1186 MTK_EINT_FUNCTION(0, 127),
1187 MTK_FUNCTION(0, "GPIO126"),
1188 MTK_FUNCTION(1, "MSDC1_DAT3")
1189 ),
1190 MTK_PIN(
1191 PINCTRL_PIN(127, "MSDC0_DAT7"),
1192 "C23", "mt8127",
1193 MTK_EINT_FUNCTION(0, 128),
1194 MTK_FUNCTION(0, "GPIO127"),
1195 MTK_FUNCTION(1, "MSDC0_DAT7"),
1196 MTK_FUNCTION(4, "NLD7")
1197 ),
1198 MTK_PIN(
1199 PINCTRL_PIN(128, "MSDC0_DAT6"),
1200 "C24", "mt8127",
1201 MTK_EINT_FUNCTION(0, 129),
1202 MTK_FUNCTION(0, "GPIO128"),
1203 MTK_FUNCTION(1, "MSDC0_DAT6"),
1204 MTK_FUNCTION(4, "NLD6")
1205 ),
1206 MTK_PIN(
1207 PINCTRL_PIN(129, "MSDC0_DAT5"),
1208 "D22", "mt8127",
1209 MTK_EINT_FUNCTION(0, 130),
1210 MTK_FUNCTION(0, "GPIO129"),
1211 MTK_FUNCTION(1, "MSDC0_DAT5"),
1212 MTK_FUNCTION(4, "NLD4")
1213 ),
1214 MTK_PIN(
1215 PINCTRL_PIN(130, "MSDC0_DAT4"),
1216 "D24", "mt8127",
1217 MTK_EINT_FUNCTION(0, 131),
1218 MTK_FUNCTION(0, "GPIO130"),
1219 MTK_FUNCTION(1, "MSDC0_DAT4"),
1220 MTK_FUNCTION(4, "NLD3")
1221 ),
1222 MTK_PIN(
1223 PINCTRL_PIN(131, "MSDC0_RSTB"),
1224 "F24", "mt8127",
1225 MTK_EINT_FUNCTION(0, 132),
1226 MTK_FUNCTION(0, "GPIO131"),
1227 MTK_FUNCTION(1, "MSDC0_RSTB"),
1228 MTK_FUNCTION(4, "NLD0")
1229 ),
1230 MTK_PIN(
1231 PINCTRL_PIN(132, "MSDC0_CMD"),
1232 "G20", "mt8127",
1233 MTK_EINT_FUNCTION(0, 133),
1234 MTK_FUNCTION(0, "GPIO132"),
1235 MTK_FUNCTION(1, "MSDC0_CMD"),
1236 MTK_FUNCTION(4, "NALE")
1237 ),
1238 MTK_PIN(
1239 PINCTRL_PIN(133, "MSDC0_CLK"),
1240 "G21", "mt8127",
1241 MTK_EINT_FUNCTION(0, 134),
1242 MTK_FUNCTION(0, "GPIO133"),
1243 MTK_FUNCTION(1, "MSDC0_CLK"),
1244 MTK_FUNCTION(4, "NWEB")
1245 ),
1246 MTK_PIN(
1247 PINCTRL_PIN(134, "MSDC0_DAT3"),
1248 "D23", "mt8127",
1249 MTK_EINT_FUNCTION(0, 135),
1250 MTK_FUNCTION(0, "GPIO134"),
1251 MTK_FUNCTION(1, "MSDC0_DAT3"),
1252 MTK_FUNCTION(4, "NLD1")
1253 ),
1254 MTK_PIN(
1255 PINCTRL_PIN(135, "MSDC0_DAT2"),
1256 "E22", "mt8127",
1257 MTK_EINT_FUNCTION(0, 136),
1258 MTK_FUNCTION(0, "GPIO135"),
1259 MTK_FUNCTION(1, "MSDC0_DAT2"),
1260 MTK_FUNCTION(4, "NLD5")
1261 ),
1262 MTK_PIN(
1263 PINCTRL_PIN(136, "MSDC0_DAT1"),
1264 "E23", "mt8127",
1265 MTK_EINT_FUNCTION(0, 137),
1266 MTK_FUNCTION(0, "GPIO136"),
1267 MTK_FUNCTION(1, "MSDC0_DAT1"),
1268 MTK_FUNCTION(4, "NLD8")
1269 ),
1270 MTK_PIN(
1271 PINCTRL_PIN(137, "MSDC0_DAT0"),
1272 "F22", "mt8127",
1273 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
1274 MTK_FUNCTION(0, "GPIO137"),
1275 MTK_FUNCTION(1, "MSDC0_DAT0"),
1276 MTK_FUNCTION(4, "WATCHDOG"),
1277 MTK_FUNCTION(5, "NLD2")
1278 ),
1279 MTK_PIN(
1280 PINCTRL_PIN(138, "CEC"),
1281 "AE21", "mt8127",
1282 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
1283 MTK_FUNCTION(0, "GPIO138"),
1284 MTK_FUNCTION(1, "CEC")
1285 ),
1286 MTK_PIN(
1287 PINCTRL_PIN(139, "HTPLG"),
1288 "AD21", "mt8127",
1289 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
1290 MTK_FUNCTION(0, "GPIO139"),
1291 MTK_FUNCTION(1, "HTPLG")
1292 ),
1293 MTK_PIN(
1294 PINCTRL_PIN(140, "HDMISCK"),
1295 "AE22", "mt8127",
1296 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
1297 MTK_FUNCTION(0, "GPIO140"),
1298 MTK_FUNCTION(1, "HDMISCK")
1299 ),
1300 MTK_PIN(
1301 PINCTRL_PIN(141, "HDMISD"),
1302 "AD22", "mt8127",
1303 MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
1304 MTK_FUNCTION(0, "GPIO141"),
1305 MTK_FUNCTION(1, "HDMISD")
1306 ),
1307 MTK_PIN(
1308 PINCTRL_PIN(142, "EINT21"),
1309 "J23", "mt8127",
1310 MTK_EINT_FUNCTION(0, 21),
1311 MTK_FUNCTION(0, "GPIO142"),
1312 MTK_FUNCTION(1, "NRNB"),
1313 MTK_FUNCTION(2, "ANT_SEL0"),
1314 MTK_FUNCTION(7, "DBG_MON_B[32]")
1315 ),
1316};
1317
1318#endif /* __PINCTRL_MTK_MT8127_H */
diff --git a/drivers/pinctrl/meson/pinctrl-meson.c b/drivers/pinctrl/meson/pinctrl-meson.c
index a70a5fe79d44..84943e4cff09 100644
--- a/drivers/pinctrl/meson/pinctrl-meson.c
+++ b/drivers/pinctrl/meson/pinctrl-meson.c
@@ -738,9 +738,9 @@ static int meson_pinctrl_probe(struct platform_device *pdev)
738 pc->desc.npins = pc->data->num_pins; 738 pc->desc.npins = pc->data->num_pins;
739 739
740 pc->pcdev = pinctrl_register(&pc->desc, pc->dev, pc); 740 pc->pcdev = pinctrl_register(&pc->desc, pc->dev, pc);
741 if (!pc->pcdev) { 741 if (IS_ERR(pc->pcdev)) {
742 dev_err(pc->dev, "can't register pinctrl device"); 742 dev_err(pc->dev, "can't register pinctrl device");
743 return -EINVAL; 743 return PTR_ERR(pc->pcdev);
744 } 744 }
745 745
746 ret = meson_gpiolib_register(pc); 746 ret = meson_gpiolib_register(pc);
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-370.c b/drivers/pinctrl/mvebu/pinctrl-armada-370.c
index 03aa58c4cb85..73dc1bc5f32c 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-370.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-370.c
@@ -52,12 +52,12 @@ static struct mvebu_mpp_mode mv88f6710_mpp_modes[] = {
52 MPP_FUNCTION(0x2, "uart0", "rxd")), 52 MPP_FUNCTION(0x2, "uart0", "rxd")),
53 MPP_MODE(4, 53 MPP_MODE(4,
54 MPP_FUNCTION(0x0, "gpio", NULL), 54 MPP_FUNCTION(0x0, "gpio", NULL),
55 MPP_FUNCTION(0x1, "cpu_pd", "vdd")), 55 MPP_FUNCTION(0x1, "vdd", "cpu-pd")),
56 MPP_MODE(5, 56 MPP_MODE(5,
57 MPP_FUNCTION(0x0, "gpo", NULL), 57 MPP_FUNCTION(0x0, "gpo", NULL),
58 MPP_FUNCTION(0x1, "ge0", "txclko"), 58 MPP_FUNCTION(0x1, "ge0", "txclkout"),
59 MPP_FUNCTION(0x2, "uart1", "txd"), 59 MPP_FUNCTION(0x2, "uart1", "txd"),
60 MPP_FUNCTION(0x4, "spi1", "clk"), 60 MPP_FUNCTION(0x4, "spi1", "sck"),
61 MPP_FUNCTION(0x5, "audio", "mclk")), 61 MPP_FUNCTION(0x5, "audio", "mclk")),
62 MPP_MODE(6, 62 MPP_MODE(6,
63 MPP_FUNCTION(0x0, "gpio", NULL), 63 MPP_FUNCTION(0x0, "gpio", NULL),
@@ -68,7 +68,7 @@ static struct mvebu_mpp_mode mv88f6710_mpp_modes[] = {
68 MPP_MODE(7, 68 MPP_MODE(7,
69 MPP_FUNCTION(0x0, "gpo", NULL), 69 MPP_FUNCTION(0x0, "gpo", NULL),
70 MPP_FUNCTION(0x1, "ge0", "txd1"), 70 MPP_FUNCTION(0x1, "ge0", "txd1"),
71 MPP_FUNCTION(0x4, "tdm", "tdx"), 71 MPP_FUNCTION(0x4, "tdm", "dtx"),
72 MPP_FUNCTION(0x5, "audio", "lrclk")), 72 MPP_FUNCTION(0x5, "audio", "lrclk")),
73 MPP_MODE(8, 73 MPP_MODE(8,
74 MPP_FUNCTION(0x0, "gpio", NULL), 74 MPP_FUNCTION(0x0, "gpio", NULL),
@@ -207,11 +207,11 @@ static struct mvebu_mpp_mode mv88f6710_mpp_modes[] = {
207 MPP_FUNCTION(0x2, "spi0", "cs0")), 207 MPP_FUNCTION(0x2, "spi0", "cs0")),
208 MPP_MODE(34, 208 MPP_MODE(34,
209 MPP_FUNCTION(0x0, "gpo", NULL), 209 MPP_FUNCTION(0x0, "gpo", NULL),
210 MPP_FUNCTION(0x1, "dev", "wen0"), 210 MPP_FUNCTION(0x1, "dev", "we0"),
211 MPP_FUNCTION(0x2, "spi0", "mosi")), 211 MPP_FUNCTION(0x2, "spi0", "mosi")),
212 MPP_MODE(35, 212 MPP_MODE(35,
213 MPP_FUNCTION(0x0, "gpo", NULL), 213 MPP_FUNCTION(0x0, "gpo", NULL),
214 MPP_FUNCTION(0x1, "dev", "oen"), 214 MPP_FUNCTION(0x1, "dev", "oe"),
215 MPP_FUNCTION(0x2, "spi0", "sck")), 215 MPP_FUNCTION(0x2, "spi0", "sck")),
216 MPP_MODE(36, 216 MPP_MODE(36,
217 MPP_FUNCTION(0x0, "gpo", NULL), 217 MPP_FUNCTION(0x0, "gpo", NULL),
@@ -348,13 +348,13 @@ static struct mvebu_mpp_mode mv88f6710_mpp_modes[] = {
348 MPP_FUNCTION(0x1, "dev", "ale1"), 348 MPP_FUNCTION(0x1, "dev", "ale1"),
349 MPP_FUNCTION(0x2, "uart1", "rxd"), 349 MPP_FUNCTION(0x2, "uart1", "rxd"),
350 MPP_FUNCTION(0x3, "sata0", "prsnt"), 350 MPP_FUNCTION(0x3, "sata0", "prsnt"),
351 MPP_FUNCTION(0x4, "pcie", "rst-out"), 351 MPP_FUNCTION(0x4, "pcie", "rstout"),
352 MPP_FUNCTION(0x5, "audio", "sdi")), 352 MPP_FUNCTION(0x5, "audio", "sdi")),
353 MPP_MODE(61, 353 MPP_MODE(61,
354 MPP_FUNCTION(0x0, "gpo", NULL), 354 MPP_FUNCTION(0x0, "gpo", NULL),
355 MPP_FUNCTION(0x1, "dev", "wen1"), 355 MPP_FUNCTION(0x1, "dev", "we1"),
356 MPP_FUNCTION(0x2, "uart1", "txd"), 356 MPP_FUNCTION(0x2, "uart1", "txd"),
357 MPP_FUNCTION(0x5, "audio", "rclk")), 357 MPP_FUNCTION(0x5, "audio", "lrclk")),
358 MPP_MODE(62, 358 MPP_MODE(62,
359 MPP_FUNCTION(0x0, "gpio", NULL), 359 MPP_FUNCTION(0x0, "gpio", NULL),
360 MPP_FUNCTION(0x1, "dev", "a2"), 360 MPP_FUNCTION(0x1, "dev", "a2"),
@@ -370,11 +370,11 @@ static struct mvebu_mpp_mode mv88f6710_mpp_modes[] = {
370 MPP_MODE(64, 370 MPP_MODE(64,
371 MPP_FUNCTION(0x0, "gpio", NULL), 371 MPP_FUNCTION(0x0, "gpio", NULL),
372 MPP_FUNCTION(0x1, "spi0", "miso"), 372 MPP_FUNCTION(0x1, "spi0", "miso"),
373 MPP_FUNCTION(0x2, "spi0-1", "cs1")), 373 MPP_FUNCTION(0x2, "spi0", "cs1")),
374 MPP_MODE(65, 374 MPP_MODE(65,
375 MPP_FUNCTION(0x0, "gpio", NULL), 375 MPP_FUNCTION(0x0, "gpio", NULL),
376 MPP_FUNCTION(0x1, "spi0", "mosi"), 376 MPP_FUNCTION(0x1, "spi0", "mosi"),
377 MPP_FUNCTION(0x2, "spi0-1", "cs2")), 377 MPP_FUNCTION(0x2, "spi0", "cs2")),
378}; 378};
379 379
380static struct mvebu_pinctrl_soc_info armada_370_pinctrl_info; 380static struct mvebu_pinctrl_soc_info armada_370_pinctrl_info;
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-375.c b/drivers/pinctrl/mvebu/pinctrl-armada-375.c
index ca1e7571fedb..54e9fbd0121f 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-375.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-375.c
@@ -51,7 +51,7 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
51 MPP_MODE(2, 51 MPP_MODE(2,
52 MPP_FUNCTION(0x0, "gpio", NULL), 52 MPP_FUNCTION(0x0, "gpio", NULL),
53 MPP_FUNCTION(0x1, "dev", "ad4"), 53 MPP_FUNCTION(0x1, "dev", "ad4"),
54 MPP_FUNCTION(0x2, "ptp", "eventreq"), 54 MPP_FUNCTION(0x2, "ptp", "evreq"),
55 MPP_FUNCTION(0x3, "led", "c0"), 55 MPP_FUNCTION(0x3, "led", "c0"),
56 MPP_FUNCTION(0x4, "audio", "sdi"), 56 MPP_FUNCTION(0x4, "audio", "sdi"),
57 MPP_FUNCTION(0x5, "nand", "io4"), 57 MPP_FUNCTION(0x5, "nand", "io4"),
@@ -59,7 +59,7 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
59 MPP_MODE(3, 59 MPP_MODE(3,
60 MPP_FUNCTION(0x0, "gpio", NULL), 60 MPP_FUNCTION(0x0, "gpio", NULL),
61 MPP_FUNCTION(0x1, "dev", "ad5"), 61 MPP_FUNCTION(0x1, "dev", "ad5"),
62 MPP_FUNCTION(0x2, "ptp", "triggen"), 62 MPP_FUNCTION(0x2, "ptp", "trig"),
63 MPP_FUNCTION(0x3, "led", "p3"), 63 MPP_FUNCTION(0x3, "led", "p3"),
64 MPP_FUNCTION(0x4, "audio", "mclk"), 64 MPP_FUNCTION(0x4, "audio", "mclk"),
65 MPP_FUNCTION(0x5, "nand", "io5"), 65 MPP_FUNCTION(0x5, "nand", "io5"),
@@ -81,7 +81,7 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
81 MPP_FUNCTION(0x0, "gpio", NULL), 81 MPP_FUNCTION(0x0, "gpio", NULL),
82 MPP_FUNCTION(0x1, "dev", "ad0"), 82 MPP_FUNCTION(0x1, "dev", "ad0"),
83 MPP_FUNCTION(0x3, "led", "p1"), 83 MPP_FUNCTION(0x3, "led", "p1"),
84 MPP_FUNCTION(0x4, "audio", "rclk"), 84 MPP_FUNCTION(0x4, "audio", "lrclk"),
85 MPP_FUNCTION(0x5, "nand", "io0")), 85 MPP_FUNCTION(0x5, "nand", "io0")),
86 MPP_MODE(7, 86 MPP_MODE(7,
87 MPP_FUNCTION(0x0, "gpio", NULL), 87 MPP_FUNCTION(0x0, "gpio", NULL),
@@ -92,19 +92,17 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
92 MPP_FUNCTION(0x5, "nand", "io1")), 92 MPP_FUNCTION(0x5, "nand", "io1")),
93 MPP_MODE(8, 93 MPP_MODE(8,
94 MPP_FUNCTION(0x0, "gpio", NULL), 94 MPP_FUNCTION(0x0, "gpio", NULL),
95 MPP_FUNCTION(0x1, "dev ", "bootcs"), 95 MPP_FUNCTION(0x1, "dev", "bootcs"),
96 MPP_FUNCTION(0x2, "spi0", "cs0"), 96 MPP_FUNCTION(0x2, "spi0", "cs0"),
97 MPP_FUNCTION(0x3, "spi1", "cs0"), 97 MPP_FUNCTION(0x3, "spi1", "cs0"),
98 MPP_FUNCTION(0x5, "nand", "ce")), 98 MPP_FUNCTION(0x5, "nand", "ce")),
99 MPP_MODE(9, 99 MPP_MODE(9,
100 MPP_FUNCTION(0x0, "gpio", NULL), 100 MPP_FUNCTION(0x0, "gpio", NULL),
101 MPP_FUNCTION(0x1, "nf", "wen"),
102 MPP_FUNCTION(0x2, "spi0", "sck"), 101 MPP_FUNCTION(0x2, "spi0", "sck"),
103 MPP_FUNCTION(0x3, "spi1", "sck"), 102 MPP_FUNCTION(0x3, "spi1", "sck"),
104 MPP_FUNCTION(0x5, "nand", "we")), 103 MPP_FUNCTION(0x5, "nand", "we")),
105 MPP_MODE(10, 104 MPP_MODE(10,
106 MPP_FUNCTION(0x0, "gpio", NULL), 105 MPP_FUNCTION(0x0, "gpio", NULL),
107 MPP_FUNCTION(0x1, "nf", "ren"),
108 MPP_FUNCTION(0x2, "dram", "vttctrl"), 106 MPP_FUNCTION(0x2, "dram", "vttctrl"),
109 MPP_FUNCTION(0x3, "led", "c1"), 107 MPP_FUNCTION(0x3, "led", "c1"),
110 MPP_FUNCTION(0x5, "nand", "re"), 108 MPP_FUNCTION(0x5, "nand", "re"),
@@ -122,9 +120,9 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
122 MPP_FUNCTION(0x5, "nand", "ale")), 120 MPP_FUNCTION(0x5, "nand", "ale")),
123 MPP_MODE(13, 121 MPP_MODE(13,
124 MPP_FUNCTION(0x0, "gpio", NULL), 122 MPP_FUNCTION(0x0, "gpio", NULL),
125 MPP_FUNCTION(0x1, "dev", "readyn"), 123 MPP_FUNCTION(0x1, "dev", "ready"),
126 MPP_FUNCTION(0x2, "pcie0", "rstoutn"), 124 MPP_FUNCTION(0x2, "pcie0", "rstout"),
127 MPP_FUNCTION(0x3, "pcie1", "rstoutn"), 125 MPP_FUNCTION(0x3, "pcie1", "rstout"),
128 MPP_FUNCTION(0x5, "nand", "rb"), 126 MPP_FUNCTION(0x5, "nand", "rb"),
129 MPP_FUNCTION(0x6, "spi1", "mosi")), 127 MPP_FUNCTION(0x6, "spi1", "mosi")),
130 MPP_MODE(14, 128 MPP_MODE(14,
@@ -143,10 +141,10 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
143 MPP_FUNCTION(0x2, "uart0", "rxd")), 141 MPP_FUNCTION(0x2, "uart0", "rxd")),
144 MPP_MODE(18, 142 MPP_MODE(18,
145 MPP_FUNCTION(0x0, "gpio", NULL), 143 MPP_FUNCTION(0x0, "gpio", NULL),
146 MPP_FUNCTION(0x2, "tdm", "intn")), 144 MPP_FUNCTION(0x2, "tdm", "int")),
147 MPP_MODE(19, 145 MPP_MODE(19,
148 MPP_FUNCTION(0x0, "gpio", NULL), 146 MPP_FUNCTION(0x0, "gpio", NULL),
149 MPP_FUNCTION(0x2, "tdm", "rstn")), 147 MPP_FUNCTION(0x2, "tdm", "rst")),
150 MPP_MODE(20, 148 MPP_MODE(20,
151 MPP_FUNCTION(0x0, "gpio", NULL), 149 MPP_FUNCTION(0x0, "gpio", NULL),
152 MPP_FUNCTION(0x2, "tdm", "pclk")), 150 MPP_FUNCTION(0x2, "tdm", "pclk")),
@@ -203,13 +201,13 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
203 MPP_FUNCTION(0x2, "ge1", "rxclk"), 201 MPP_FUNCTION(0x2, "ge1", "rxclk"),
204 MPP_FUNCTION(0x3, "sd", "d3"), 202 MPP_FUNCTION(0x3, "sd", "d3"),
205 MPP_FUNCTION(0x5, "spi0", "sck"), 203 MPP_FUNCTION(0x5, "spi0", "sck"),
206 MPP_FUNCTION(0x6, "pcie0", "rstoutn")), 204 MPP_FUNCTION(0x6, "pcie0", "rstout")),
207 MPP_MODE(30, 205 MPP_MODE(30,
208 MPP_FUNCTION(0x0, "gpio", NULL), 206 MPP_FUNCTION(0x0, "gpio", NULL),
209 MPP_FUNCTION(0x2, "ge1", "txd0"), 207 MPP_FUNCTION(0x2, "ge1", "txd0"),
210 MPP_FUNCTION(0x3, "spi1", "cs0"), 208 MPP_FUNCTION(0x3, "spi1", "cs0"),
211 MPP_FUNCTION(0x5, "led", "p3"), 209 MPP_FUNCTION(0x5, "led", "p3"),
212 MPP_FUNCTION(0x6, "ptp", "eventreq")), 210 MPP_FUNCTION(0x6, "ptp", "evreq")),
213 MPP_MODE(31, 211 MPP_MODE(31,
214 MPP_FUNCTION(0x0, "gpio", NULL), 212 MPP_FUNCTION(0x0, "gpio", NULL),
215 MPP_FUNCTION(0x2, "ge1", "txd1"), 213 MPP_FUNCTION(0x2, "ge1", "txd1"),
@@ -219,7 +217,7 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
219 MPP_FUNCTION(0x0, "gpio", NULL), 217 MPP_FUNCTION(0x0, "gpio", NULL),
220 MPP_FUNCTION(0x2, "ge1", "txd2"), 218 MPP_FUNCTION(0x2, "ge1", "txd2"),
221 MPP_FUNCTION(0x3, "spi1", "sck"), 219 MPP_FUNCTION(0x3, "spi1", "sck"),
222 MPP_FUNCTION(0x4, "ptp", "triggen"), 220 MPP_FUNCTION(0x4, "ptp", "trig"),
223 MPP_FUNCTION(0x5, "led", "c0")), 221 MPP_FUNCTION(0x5, "led", "c0")),
224 MPP_MODE(33, 222 MPP_MODE(33,
225 MPP_FUNCTION(0x0, "gpio", NULL), 223 MPP_FUNCTION(0x0, "gpio", NULL),
@@ -244,7 +242,7 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
244 MPP_MODE(37, 242 MPP_MODE(37,
245 MPP_FUNCTION(0x0, "gpio", NULL), 243 MPP_FUNCTION(0x0, "gpio", NULL),
246 MPP_FUNCTION(0x1, "pcie0", "clkreq"), 244 MPP_FUNCTION(0x1, "pcie0", "clkreq"),
247 MPP_FUNCTION(0x2, "tdm", "intn"), 245 MPP_FUNCTION(0x2, "tdm", "int"),
248 MPP_FUNCTION(0x4, "ge", "mdc")), 246 MPP_FUNCTION(0x4, "ge", "mdc")),
249 MPP_MODE(38, 247 MPP_MODE(38,
250 MPP_FUNCTION(0x0, "gpio", NULL), 248 MPP_FUNCTION(0x0, "gpio", NULL),
@@ -278,7 +276,7 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
278 MPP_MODE(45, 276 MPP_MODE(45,
279 MPP_FUNCTION(0x0, "gpio", NULL), 277 MPP_FUNCTION(0x0, "gpio", NULL),
280 MPP_FUNCTION(0x2, "spi0", "cs2"), 278 MPP_FUNCTION(0x2, "spi0", "cs2"),
281 MPP_FUNCTION(0x4, "pcie0", "rstoutn"), 279 MPP_FUNCTION(0x4, "pcie0", "rstout"),
282 MPP_FUNCTION(0x5, "led", "c2"), 280 MPP_FUNCTION(0x5, "led", "c2"),
283 MPP_FUNCTION(0x6, "spi1", "cs2")), 281 MPP_FUNCTION(0x6, "spi1", "cs2")),
284 MPP_MODE(46, 282 MPP_MODE(46,
@@ -286,13 +284,13 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
286 MPP_FUNCTION(0x1, "led", "p0"), 284 MPP_FUNCTION(0x1, "led", "p0"),
287 MPP_FUNCTION(0x2, "ge0", "txd0"), 285 MPP_FUNCTION(0x2, "ge0", "txd0"),
288 MPP_FUNCTION(0x3, "ge1", "txd0"), 286 MPP_FUNCTION(0x3, "ge1", "txd0"),
289 MPP_FUNCTION(0x6, "dev", "wen1")), 287 MPP_FUNCTION(0x6, "dev", "we1")),
290 MPP_MODE(47, 288 MPP_MODE(47,
291 MPP_FUNCTION(0x0, "gpio", NULL), 289 MPP_FUNCTION(0x0, "gpio", NULL),
292 MPP_FUNCTION(0x1, "led", "p1"), 290 MPP_FUNCTION(0x1, "led", "p1"),
293 MPP_FUNCTION(0x2, "ge0", "txd1"), 291 MPP_FUNCTION(0x2, "ge0", "txd1"),
294 MPP_FUNCTION(0x3, "ge1", "txd1"), 292 MPP_FUNCTION(0x3, "ge1", "txd1"),
295 MPP_FUNCTION(0x5, "ptp", "triggen"), 293 MPP_FUNCTION(0x5, "ptp", "trig"),
296 MPP_FUNCTION(0x6, "dev", "ale0")), 294 MPP_FUNCTION(0x6, "dev", "ale0")),
297 MPP_MODE(48, 295 MPP_MODE(48,
298 MPP_FUNCTION(0x0, "gpio", NULL), 296 MPP_FUNCTION(0x0, "gpio", NULL),
@@ -311,7 +309,7 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
311 MPP_FUNCTION(0x1, "led", "c0"), 309 MPP_FUNCTION(0x1, "led", "c0"),
312 MPP_FUNCTION(0x2, "ge0", "rxd0"), 310 MPP_FUNCTION(0x2, "ge0", "rxd0"),
313 MPP_FUNCTION(0x3, "ge1", "rxd0"), 311 MPP_FUNCTION(0x3, "ge1", "rxd0"),
314 MPP_FUNCTION(0x5, "ptp", "eventreq"), 312 MPP_FUNCTION(0x5, "ptp", "evreq"),
315 MPP_FUNCTION(0x6, "dev", "ad12")), 313 MPP_FUNCTION(0x6, "dev", "ad12")),
316 MPP_MODE(51, 314 MPP_MODE(51,
317 MPP_FUNCTION(0x0, "gpio", NULL), 315 MPP_FUNCTION(0x0, "gpio", NULL),
@@ -328,14 +326,14 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
328 MPP_FUNCTION(0x6, "dev", "ad9")), 326 MPP_FUNCTION(0x6, "dev", "ad9")),
329 MPP_MODE(53, 327 MPP_MODE(53,
330 MPP_FUNCTION(0x0, "gpio", NULL), 328 MPP_FUNCTION(0x0, "gpio", NULL),
331 MPP_FUNCTION(0x1, "pcie1", "rstoutn"), 329 MPP_FUNCTION(0x1, "pcie1", "rstout"),
332 MPP_FUNCTION(0x2, "ge0", "rxd3"), 330 MPP_FUNCTION(0x2, "ge0", "rxd3"),
333 MPP_FUNCTION(0x3, "ge1", "rxd3"), 331 MPP_FUNCTION(0x3, "ge1", "rxd3"),
334 MPP_FUNCTION(0x5, "i2c0", "sck"), 332 MPP_FUNCTION(0x5, "i2c0", "sck"),
335 MPP_FUNCTION(0x6, "dev", "ad10")), 333 MPP_FUNCTION(0x6, "dev", "ad10")),
336 MPP_MODE(54, 334 MPP_MODE(54,
337 MPP_FUNCTION(0x0, "gpio", NULL), 335 MPP_FUNCTION(0x0, "gpio", NULL),
338 MPP_FUNCTION(0x1, "pcie0", "rstoutn"), 336 MPP_FUNCTION(0x1, "pcie0", "rstout"),
339 MPP_FUNCTION(0x2, "ge0", "rxctl"), 337 MPP_FUNCTION(0x2, "ge0", "rxctl"),
340 MPP_FUNCTION(0x3, "ge1", "rxctl"), 338 MPP_FUNCTION(0x3, "ge1", "rxctl"),
341 MPP_FUNCTION(0x6, "dev", "ad11")), 339 MPP_FUNCTION(0x6, "dev", "ad11")),
@@ -353,7 +351,7 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
353 MPP_FUNCTION(0x0, "gpio", NULL), 351 MPP_FUNCTION(0x0, "gpio", NULL),
354 MPP_FUNCTION(0x2, "ge0", "txctl"), 352 MPP_FUNCTION(0x2, "ge0", "txctl"),
355 MPP_FUNCTION(0x3, "ge1", "txctl"), 353 MPP_FUNCTION(0x3, "ge1", "txctl"),
356 MPP_FUNCTION(0x6, "dev", "wen0")), 354 MPP_FUNCTION(0x6, "dev", "we0")),
357 MPP_MODE(58, 355 MPP_MODE(58,
358 MPP_FUNCTION(0x0, "gpio", NULL), 356 MPP_FUNCTION(0x0, "gpio", NULL),
359 MPP_FUNCTION(0x4, "led", "c0")), 357 MPP_FUNCTION(0x4, "led", "c0")),
@@ -379,9 +377,9 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
379 MPP_FUNCTION(0x6, "dev", "ad15")), 377 MPP_FUNCTION(0x6, "dev", "ad15")),
380 MPP_MODE(63, 378 MPP_MODE(63,
381 MPP_FUNCTION(0x0, "gpio", NULL), 379 MPP_FUNCTION(0x0, "gpio", NULL),
382 MPP_FUNCTION(0x2, "ptp", "triggen"), 380 MPP_FUNCTION(0x2, "ptp", "trig"),
383 MPP_FUNCTION(0x4, "led", "p2"), 381 MPP_FUNCTION(0x4, "led", "p2"),
384 MPP_FUNCTION(0x6, "dev", "burst")), 382 MPP_FUNCTION(0x6, "dev", "burst/last")),
385 MPP_MODE(64, 383 MPP_MODE(64,
386 MPP_FUNCTION(0x0, "gpio", NULL), 384 MPP_FUNCTION(0x0, "gpio", NULL),
387 MPP_FUNCTION(0x2, "dram", "vttctrl"), 385 MPP_FUNCTION(0x2, "dram", "vttctrl"),
@@ -391,9 +389,9 @@ static struct mvebu_mpp_mode mv88f6720_mpp_modes[] = {
391 MPP_FUNCTION(0x1, "sata1", "prsnt")), 389 MPP_FUNCTION(0x1, "sata1", "prsnt")),
392 MPP_MODE(66, 390 MPP_MODE(66,
393 MPP_FUNCTION(0x0, "gpio", NULL), 391 MPP_FUNCTION(0x0, "gpio", NULL),
394 MPP_FUNCTION(0x2, "ptp", "eventreq"), 392 MPP_FUNCTION(0x2, "ptp", "evreq"),
395 MPP_FUNCTION(0x4, "spi1", "cs3"), 393 MPP_FUNCTION(0x4, "spi1", "cs3"),
396 MPP_FUNCTION(0x5, "pcie0", "rstoutn"), 394 MPP_FUNCTION(0x5, "pcie0", "rstout"),
397 MPP_FUNCTION(0x6, "dev", "cs3")), 395 MPP_FUNCTION(0x6, "dev", "cs3")),
398}; 396};
399 397
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-38x.c b/drivers/pinctrl/mvebu/pinctrl-armada-38x.c
index 83bbcc72be1f..6ec82c62dff7 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-38x.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-38x.c
@@ -94,56 +94,58 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
94 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 94 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
95 MPP_VAR_FUNCTION(1, "ge0", "rxd0", V_88F6810_PLUS), 95 MPP_VAR_FUNCTION(1, "ge0", "rxd0", V_88F6810_PLUS),
96 MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS), 96 MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS),
97 MPP_VAR_FUNCTION(3, "pcie1", "rstout", V_88F6820_PLUS),
98 MPP_VAR_FUNCTION(4, "spi0", "cs1", V_88F6810_PLUS), 97 MPP_VAR_FUNCTION(4, "spi0", "cs1", V_88F6810_PLUS),
99 MPP_VAR_FUNCTION(5, "dev", "ad14", V_88F6810_PLUS)), 98 MPP_VAR_FUNCTION(5, "dev", "ad14", V_88F6810_PLUS),
99 MPP_VAR_FUNCTION(6, "pcie3", "clkreq", V_88F6810_PLUS)),
100 MPP_MODE(13, 100 MPP_MODE(13,
101 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 101 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
102 MPP_VAR_FUNCTION(1, "ge0", "rxd1", V_88F6810_PLUS), 102 MPP_VAR_FUNCTION(1, "ge0", "rxd1", V_88F6810_PLUS),
103 MPP_VAR_FUNCTION(2, "pcie0", "clkreq", V_88F6810_PLUS), 103 MPP_VAR_FUNCTION(2, "pcie0", "clkreq", V_88F6810_PLUS),
104 MPP_VAR_FUNCTION(3, "pcie1", "clkreq", V_88F6820_PLUS), 104 MPP_VAR_FUNCTION(3, "pcie1", "clkreq", V_88F6820_PLUS),
105 MPP_VAR_FUNCTION(4, "spi0", "cs2", V_88F6810_PLUS), 105 MPP_VAR_FUNCTION(4, "spi0", "cs2", V_88F6810_PLUS),
106 MPP_VAR_FUNCTION(5, "dev", "ad15", V_88F6810_PLUS)), 106 MPP_VAR_FUNCTION(5, "dev", "ad15", V_88F6810_PLUS),
107 MPP_VAR_FUNCTION(6, "pcie2", "clkreq", V_88F6810_PLUS)),
107 MPP_MODE(14, 108 MPP_MODE(14,
108 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 109 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
109 MPP_VAR_FUNCTION(1, "ge0", "rxd2", V_88F6810_PLUS), 110 MPP_VAR_FUNCTION(1, "ge0", "rxd2", V_88F6810_PLUS),
110 MPP_VAR_FUNCTION(2, "ptp", "clk", V_88F6810_PLUS), 111 MPP_VAR_FUNCTION(2, "ptp", "clk", V_88F6810_PLUS),
111 MPP_VAR_FUNCTION(3, "m", "vtt_ctrl", V_88F6810_PLUS), 112 MPP_VAR_FUNCTION(3, "dram", "vttctrl", V_88F6810_PLUS),
112 MPP_VAR_FUNCTION(4, "spi0", "cs3", V_88F6810_PLUS), 113 MPP_VAR_FUNCTION(4, "spi0", "cs3", V_88F6810_PLUS),
113 MPP_VAR_FUNCTION(5, "dev", "wen1", V_88F6810_PLUS)), 114 MPP_VAR_FUNCTION(5, "dev", "we1", V_88F6810_PLUS),
115 MPP_VAR_FUNCTION(6, "pcie3", "clkreq", V_88F6810_PLUS)),
114 MPP_MODE(15, 116 MPP_MODE(15,
115 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 117 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
116 MPP_VAR_FUNCTION(1, "ge0", "rxd3", V_88F6810_PLUS), 118 MPP_VAR_FUNCTION(1, "ge0", "rxd3", V_88F6810_PLUS),
117 MPP_VAR_FUNCTION(2, "ge", "mdc slave", V_88F6810_PLUS), 119 MPP_VAR_FUNCTION(2, "ge", "mdc slave", V_88F6810_PLUS),
118 MPP_VAR_FUNCTION(3, "pcie0", "rstout", V_88F6810_PLUS), 120 MPP_VAR_FUNCTION(3, "pcie0", "rstout", V_88F6810_PLUS),
119 MPP_VAR_FUNCTION(4, "spi0", "mosi", V_88F6810_PLUS), 121 MPP_VAR_FUNCTION(4, "spi0", "mosi", V_88F6810_PLUS)),
120 MPP_VAR_FUNCTION(5, "pcie1", "rstout", V_88F6820_PLUS)),
121 MPP_MODE(16, 122 MPP_MODE(16,
122 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 123 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
123 MPP_VAR_FUNCTION(1, "ge0", "rxctl", V_88F6810_PLUS), 124 MPP_VAR_FUNCTION(1, "ge0", "rxctl", V_88F6810_PLUS),
124 MPP_VAR_FUNCTION(2, "ge", "mdio slave", V_88F6810_PLUS), 125 MPP_VAR_FUNCTION(2, "ge", "mdio slave", V_88F6810_PLUS),
125 MPP_VAR_FUNCTION(3, "m", "decc_err", V_88F6810_PLUS), 126 MPP_VAR_FUNCTION(3, "dram", "deccerr", V_88F6810_PLUS),
126 MPP_VAR_FUNCTION(4, "spi0", "miso", V_88F6810_PLUS), 127 MPP_VAR_FUNCTION(4, "spi0", "miso", V_88F6810_PLUS),
127 MPP_VAR_FUNCTION(5, "pcie0", "clkreq", V_88F6810_PLUS)), 128 MPP_VAR_FUNCTION(5, "pcie0", "clkreq", V_88F6810_PLUS),
129 MPP_VAR_FUNCTION(6, "pcie1", "clkreq", V_88F6820_PLUS)),
128 MPP_MODE(17, 130 MPP_MODE(17,
129 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 131 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
130 MPP_VAR_FUNCTION(1, "ge0", "rxclk", V_88F6810_PLUS), 132 MPP_VAR_FUNCTION(1, "ge0", "rxclk", V_88F6810_PLUS),
131 MPP_VAR_FUNCTION(2, "ptp", "clk", V_88F6810_PLUS), 133 MPP_VAR_FUNCTION(2, "ptp", "clk", V_88F6810_PLUS),
132 MPP_VAR_FUNCTION(3, "ua1", "rxd", V_88F6810_PLUS), 134 MPP_VAR_FUNCTION(3, "ua1", "rxd", V_88F6810_PLUS),
133 MPP_VAR_FUNCTION(4, "spi0", "sck", V_88F6810_PLUS), 135 MPP_VAR_FUNCTION(4, "spi0", "sck", V_88F6810_PLUS),
134 MPP_VAR_FUNCTION(5, "sata1", "prsnt", V_88F6810_PLUS)), 136 MPP_VAR_FUNCTION(5, "sata1", "prsnt", V_88F6810_PLUS),
137 MPP_VAR_FUNCTION(6, "sata0", "prsnt", V_88F6810_PLUS)),
135 MPP_MODE(18, 138 MPP_MODE(18,
136 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 139 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
137 MPP_VAR_FUNCTION(1, "ge0", "rxerr", V_88F6810_PLUS), 140 MPP_VAR_FUNCTION(1, "ge0", "rxerr", V_88F6810_PLUS),
138 MPP_VAR_FUNCTION(2, "ptp", "trig_gen", V_88F6810_PLUS), 141 MPP_VAR_FUNCTION(2, "ptp", "trig", V_88F6810_PLUS),
139 MPP_VAR_FUNCTION(3, "ua1", "txd", V_88F6810_PLUS), 142 MPP_VAR_FUNCTION(3, "ua1", "txd", V_88F6810_PLUS),
140 MPP_VAR_FUNCTION(4, "spi0", "cs0", V_88F6810_PLUS), 143 MPP_VAR_FUNCTION(4, "spi0", "cs0", V_88F6810_PLUS)),
141 MPP_VAR_FUNCTION(5, "pcie1", "rstout", V_88F6820_PLUS)),
142 MPP_MODE(19, 144 MPP_MODE(19,
143 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 145 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
144 MPP_VAR_FUNCTION(1, "ge0", "col", V_88F6810_PLUS), 146 MPP_VAR_FUNCTION(1, "ge0", "col", V_88F6810_PLUS),
145 MPP_VAR_FUNCTION(2, "ptp", "event_req", V_88F6810_PLUS), 147 MPP_VAR_FUNCTION(2, "ptp", "evreq", V_88F6810_PLUS),
146 MPP_VAR_FUNCTION(3, "pcie0", "clkreq", V_88F6810_PLUS), 148 MPP_VAR_FUNCTION(3, "ge0", "txerr", V_88F6810_PLUS),
147 MPP_VAR_FUNCTION(4, "sata1", "prsnt", V_88F6810_PLUS), 149 MPP_VAR_FUNCTION(4, "sata1", "prsnt", V_88F6810_PLUS),
148 MPP_VAR_FUNCTION(5, "ua0", "cts", V_88F6810_PLUS), 150 MPP_VAR_FUNCTION(5, "ua0", "cts", V_88F6810_PLUS),
149 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6810_PLUS)), 151 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6810_PLUS)),
@@ -151,7 +153,6 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
151 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 153 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
152 MPP_VAR_FUNCTION(1, "ge0", "txclk", V_88F6810_PLUS), 154 MPP_VAR_FUNCTION(1, "ge0", "txclk", V_88F6810_PLUS),
153 MPP_VAR_FUNCTION(2, "ptp", "clk", V_88F6810_PLUS), 155 MPP_VAR_FUNCTION(2, "ptp", "clk", V_88F6810_PLUS),
154 MPP_VAR_FUNCTION(3, "pcie1", "rstout", V_88F6820_PLUS),
155 MPP_VAR_FUNCTION(4, "sata0", "prsnt", V_88F6810_PLUS), 156 MPP_VAR_FUNCTION(4, "sata0", "prsnt", V_88F6810_PLUS),
156 MPP_VAR_FUNCTION(5, "ua0", "rts", V_88F6810_PLUS), 157 MPP_VAR_FUNCTION(5, "ua0", "rts", V_88F6810_PLUS),
157 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6810_PLUS)), 158 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6810_PLUS)),
@@ -161,7 +162,8 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
161 MPP_VAR_FUNCTION(2, "ge1", "rxd0", V_88F6810_PLUS), 162 MPP_VAR_FUNCTION(2, "ge1", "rxd0", V_88F6810_PLUS),
162 MPP_VAR_FUNCTION(3, "sata0", "prsnt", V_88F6810_PLUS), 163 MPP_VAR_FUNCTION(3, "sata0", "prsnt", V_88F6810_PLUS),
163 MPP_VAR_FUNCTION(4, "sd0", "cmd", V_88F6810_PLUS), 164 MPP_VAR_FUNCTION(4, "sd0", "cmd", V_88F6810_PLUS),
164 MPP_VAR_FUNCTION(5, "dev", "bootcs", V_88F6810_PLUS)), 165 MPP_VAR_FUNCTION(5, "dev", "bootcs", V_88F6810_PLUS),
166 MPP_VAR_FUNCTION(6, "sata1", "prsnt", V_88F6810_PLUS)),
165 MPP_MODE(22, 167 MPP_MODE(22,
166 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 168 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
167 MPP_VAR_FUNCTION(1, "spi0", "mosi", V_88F6810_PLUS), 169 MPP_VAR_FUNCTION(1, "spi0", "mosi", V_88F6810_PLUS),
@@ -209,7 +211,7 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
209 MPP_MODE(30, 211 MPP_MODE(30,
210 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 212 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
211 MPP_VAR_FUNCTION(2, "ge1", "txd2", V_88F6810_PLUS), 213 MPP_VAR_FUNCTION(2, "ge1", "txd2", V_88F6810_PLUS),
212 MPP_VAR_FUNCTION(5, "dev", "oen", V_88F6810_PLUS)), 214 MPP_VAR_FUNCTION(5, "dev", "oe", V_88F6810_PLUS)),
213 MPP_MODE(31, 215 MPP_MODE(31,
214 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 216 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
215 MPP_VAR_FUNCTION(2, "ge1", "txd3", V_88F6810_PLUS), 217 MPP_VAR_FUNCTION(2, "ge1", "txd3", V_88F6810_PLUS),
@@ -217,10 +219,10 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
217 MPP_MODE(32, 219 MPP_MODE(32,
218 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 220 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
219 MPP_VAR_FUNCTION(2, "ge1", "txctl", V_88F6810_PLUS), 221 MPP_VAR_FUNCTION(2, "ge1", "txctl", V_88F6810_PLUS),
220 MPP_VAR_FUNCTION(5, "dev", "wen0", V_88F6810_PLUS)), 222 MPP_VAR_FUNCTION(5, "dev", "we0", V_88F6810_PLUS)),
221 MPP_MODE(33, 223 MPP_MODE(33,
222 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 224 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
223 MPP_VAR_FUNCTION(1, "m", "decc_err", V_88F6810_PLUS), 225 MPP_VAR_FUNCTION(1, "dram", "deccerr", V_88F6810_PLUS),
224 MPP_VAR_FUNCTION(5, "dev", "ad3", V_88F6810_PLUS)), 226 MPP_VAR_FUNCTION(5, "dev", "ad3", V_88F6810_PLUS)),
225 MPP_MODE(34, 227 MPP_MODE(34,
226 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 228 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
@@ -231,7 +233,7 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
231 MPP_VAR_FUNCTION(5, "dev", "a1", V_88F6810_PLUS)), 233 MPP_VAR_FUNCTION(5, "dev", "a1", V_88F6810_PLUS)),
232 MPP_MODE(36, 234 MPP_MODE(36,
233 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 235 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
234 MPP_VAR_FUNCTION(1, "ptp", "trig_gen", V_88F6810_PLUS), 236 MPP_VAR_FUNCTION(1, "ptp", "trig", V_88F6810_PLUS),
235 MPP_VAR_FUNCTION(5, "dev", "a0", V_88F6810_PLUS)), 237 MPP_VAR_FUNCTION(5, "dev", "a0", V_88F6810_PLUS)),
236 MPP_MODE(37, 238 MPP_MODE(37,
237 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 239 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
@@ -241,7 +243,7 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
241 MPP_VAR_FUNCTION(5, "dev", "ad8", V_88F6810_PLUS)), 243 MPP_VAR_FUNCTION(5, "dev", "ad8", V_88F6810_PLUS)),
242 MPP_MODE(38, 244 MPP_MODE(38,
243 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 245 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
244 MPP_VAR_FUNCTION(1, "ptp", "event_req", V_88F6810_PLUS), 246 MPP_VAR_FUNCTION(1, "ptp", "evreq", V_88F6810_PLUS),
245 MPP_VAR_FUNCTION(2, "ge1", "rxd1", V_88F6810_PLUS), 247 MPP_VAR_FUNCTION(2, "ge1", "rxd1", V_88F6810_PLUS),
246 MPP_VAR_FUNCTION(3, "ref", "clk_out0", V_88F6810_PLUS), 248 MPP_VAR_FUNCTION(3, "ref", "clk_out0", V_88F6810_PLUS),
247 MPP_VAR_FUNCTION(4, "sd0", "d0", V_88F6810_PLUS), 249 MPP_VAR_FUNCTION(4, "sd0", "d0", V_88F6810_PLUS),
@@ -266,7 +268,8 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
266 MPP_VAR_FUNCTION(2, "ge1", "rxctl", V_88F6810_PLUS), 268 MPP_VAR_FUNCTION(2, "ge1", "rxctl", V_88F6810_PLUS),
267 MPP_VAR_FUNCTION(3, "ua0", "cts", V_88F6810_PLUS), 269 MPP_VAR_FUNCTION(3, "ua0", "cts", V_88F6810_PLUS),
268 MPP_VAR_FUNCTION(4, "spi1", "cs3", V_88F6810_PLUS), 270 MPP_VAR_FUNCTION(4, "spi1", "cs3", V_88F6810_PLUS),
269 MPP_VAR_FUNCTION(5, "dev", "burst/last", V_88F6810_PLUS)), 271 MPP_VAR_FUNCTION(5, "dev", "burst/last", V_88F6810_PLUS),
272 MPP_VAR_FUNCTION(6, "nand", "rb0", V_88F6810_PLUS)),
270 MPP_MODE(42, 273 MPP_MODE(42,
271 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 274 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
272 MPP_VAR_FUNCTION(1, "ua1", "txd", V_88F6810_PLUS), 275 MPP_VAR_FUNCTION(1, "ua1", "txd", V_88F6810_PLUS),
@@ -275,84 +278,82 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
275 MPP_MODE(43, 278 MPP_MODE(43,
276 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 279 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
277 MPP_VAR_FUNCTION(1, "pcie0", "clkreq", V_88F6810_PLUS), 280 MPP_VAR_FUNCTION(1, "pcie0", "clkreq", V_88F6810_PLUS),
278 MPP_VAR_FUNCTION(2, "m", "vtt_ctrl", V_88F6810_PLUS), 281 MPP_VAR_FUNCTION(2, "dram", "vttctrl", V_88F6810_PLUS),
279 MPP_VAR_FUNCTION(3, "m", "decc_err", V_88F6810_PLUS), 282 MPP_VAR_FUNCTION(3, "dram", "deccerr", V_88F6810_PLUS),
280 MPP_VAR_FUNCTION(4, "pcie0", "rstout", V_88F6810_PLUS), 283 MPP_VAR_FUNCTION(4, "spi1", "cs2", V_88F6810_PLUS),
281 MPP_VAR_FUNCTION(5, "dev", "clkout", V_88F6810_PLUS)), 284 MPP_VAR_FUNCTION(5, "dev", "clkout", V_88F6810_PLUS),
285 MPP_VAR_FUNCTION(6, "nand", "rb1", V_88F6810_PLUS)),
282 MPP_MODE(44, 286 MPP_MODE(44,
283 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 287 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
284 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6810_PLUS), 288 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6810_PLUS),
285 MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6810_PLUS), 289 MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6810_PLUS),
286 MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6828), 290 MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6828),
287 MPP_VAR_FUNCTION(4, "sata3", "prsnt", V_88F6828), 291 MPP_VAR_FUNCTION(4, "sata3", "prsnt", V_88F6828)),
288 MPP_VAR_FUNCTION(5, "pcie0", "rstout", V_88F6810_PLUS)),
289 MPP_MODE(45, 292 MPP_MODE(45,
290 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 293 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
291 MPP_VAR_FUNCTION(1, "ref", "clk_out0", V_88F6810_PLUS), 294 MPP_VAR_FUNCTION(1, "ref", "clk_out0", V_88F6810_PLUS),
292 MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS), 295 MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS),
293 MPP_VAR_FUNCTION(3, "pcie1", "rstout", V_88F6820_PLUS), 296 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6810_PLUS)),
294 MPP_VAR_FUNCTION(4, "pcie2", "rstout", V_88F6810_PLUS),
295 MPP_VAR_FUNCTION(5, "pcie3", "rstout", V_88F6810_PLUS)),
296 MPP_MODE(46, 297 MPP_MODE(46,
297 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 298 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
298 MPP_VAR_FUNCTION(1, "ref", "clk_out1", V_88F6810_PLUS), 299 MPP_VAR_FUNCTION(1, "ref", "clk_out1", V_88F6810_PLUS),
299 MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS), 300 MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6810_PLUS),
300 MPP_VAR_FUNCTION(3, "pcie1", "rstout", V_88F6820_PLUS), 301 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6810_PLUS)),
301 MPP_VAR_FUNCTION(4, "pcie2", "rstout", V_88F6810_PLUS),
302 MPP_VAR_FUNCTION(5, "pcie3", "rstout", V_88F6810_PLUS)),
303 MPP_MODE(47, 302 MPP_MODE(47,
304 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 303 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
305 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6810_PLUS), 304 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6810_PLUS),
306 MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6810_PLUS), 305 MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6810_PLUS),
307 MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6828), 306 MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6828),
308 MPP_VAR_FUNCTION(4, "spi1", "cs2", V_88F6810_PLUS),
309 MPP_VAR_FUNCTION(5, "sata3", "prsnt", V_88F6828)), 307 MPP_VAR_FUNCTION(5, "sata3", "prsnt", V_88F6828)),
310 MPP_MODE(48, 308 MPP_MODE(48,
311 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 309 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
312 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6810_PLUS), 310 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6810_PLUS),
313 MPP_VAR_FUNCTION(2, "m", "vtt_ctrl", V_88F6810_PLUS), 311 MPP_VAR_FUNCTION(2, "dram", "vttctrl", V_88F6810_PLUS),
314 MPP_VAR_FUNCTION(3, "tdm2c", "pclk", V_88F6810_PLUS), 312 MPP_VAR_FUNCTION(3, "tdm", "pclk", V_88F6810_PLUS),
315 MPP_VAR_FUNCTION(4, "audio", "mclk", V_88F6810_PLUS), 313 MPP_VAR_FUNCTION(4, "audio", "mclk", V_88F6810_PLUS),
316 MPP_VAR_FUNCTION(5, "sd0", "d4", V_88F6810_PLUS)), 314 MPP_VAR_FUNCTION(5, "sd0", "d4", V_88F6810_PLUS),
315 MPP_VAR_FUNCTION(6, "pcie0", "clkreq", V_88F6810_PLUS)),
317 MPP_MODE(49, 316 MPP_MODE(49,
318 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 317 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
319 MPP_VAR_FUNCTION(1, "sata2", "prsnt", V_88F6828), 318 MPP_VAR_FUNCTION(1, "sata2", "prsnt", V_88F6828),
320 MPP_VAR_FUNCTION(2, "sata3", "prsnt", V_88F6828), 319 MPP_VAR_FUNCTION(2, "sata3", "prsnt", V_88F6828),
321 MPP_VAR_FUNCTION(3, "tdm2c", "fsync", V_88F6810_PLUS), 320 MPP_VAR_FUNCTION(3, "tdm", "fsync", V_88F6810_PLUS),
322 MPP_VAR_FUNCTION(4, "audio", "lrclk", V_88F6810_PLUS), 321 MPP_VAR_FUNCTION(4, "audio", "lrclk", V_88F6810_PLUS),
323 MPP_VAR_FUNCTION(5, "sd0", "d5", V_88F6810_PLUS)), 322 MPP_VAR_FUNCTION(5, "sd0", "d5", V_88F6810_PLUS),
323 MPP_VAR_FUNCTION(6, "pcie1", "clkreq", V_88F6820_PLUS)),
324 MPP_MODE(50, 324 MPP_MODE(50,
325 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 325 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
326 MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6810_PLUS), 326 MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6810_PLUS),
327 MPP_VAR_FUNCTION(2, "pcie1", "rstout", V_88F6820_PLUS), 327 MPP_VAR_FUNCTION(3, "tdm", "drx", V_88F6810_PLUS),
328 MPP_VAR_FUNCTION(3, "tdm2c", "drx", V_88F6810_PLUS),
329 MPP_VAR_FUNCTION(4, "audio", "extclk", V_88F6810_PLUS), 328 MPP_VAR_FUNCTION(4, "audio", "extclk", V_88F6810_PLUS),
330 MPP_VAR_FUNCTION(5, "sd0", "cmd", V_88F6810_PLUS)), 329 MPP_VAR_FUNCTION(5, "sd0", "cmd", V_88F6810_PLUS)),
331 MPP_MODE(51, 330 MPP_MODE(51,
332 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 331 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
333 MPP_VAR_FUNCTION(3, "tdm2c", "dtx", V_88F6810_PLUS), 332 MPP_VAR_FUNCTION(3, "tdm", "dtx", V_88F6810_PLUS),
334 MPP_VAR_FUNCTION(4, "audio", "sdo", V_88F6810_PLUS), 333 MPP_VAR_FUNCTION(4, "audio", "sdo", V_88F6810_PLUS),
335 MPP_VAR_FUNCTION(5, "m", "decc_err", V_88F6810_PLUS)), 334 MPP_VAR_FUNCTION(5, "dram", "deccerr", V_88F6810_PLUS),
335 MPP_VAR_FUNCTION(6, "ptp", "trig", V_88F6810_PLUS)),
336 MPP_MODE(52, 336 MPP_MODE(52,
337 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 337 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
338 MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6810_PLUS), 338 MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6810_PLUS),
339 MPP_VAR_FUNCTION(2, "pcie1", "rstout", V_88F6820_PLUS), 339 MPP_VAR_FUNCTION(3, "tdm", "int", V_88F6810_PLUS),
340 MPP_VAR_FUNCTION(3, "tdm2c", "intn", V_88F6810_PLUS),
341 MPP_VAR_FUNCTION(4, "audio", "sdi", V_88F6810_PLUS), 340 MPP_VAR_FUNCTION(4, "audio", "sdi", V_88F6810_PLUS),
342 MPP_VAR_FUNCTION(5, "sd0", "d6", V_88F6810_PLUS)), 341 MPP_VAR_FUNCTION(5, "sd0", "d6", V_88F6810_PLUS),
342 MPP_VAR_FUNCTION(6, "ptp", "clk", V_88F6810_PLUS)),
343 MPP_MODE(53, 343 MPP_MODE(53,
344 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 344 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
345 MPP_VAR_FUNCTION(1, "sata1", "prsnt", V_88F6810_PLUS), 345 MPP_VAR_FUNCTION(1, "sata1", "prsnt", V_88F6810_PLUS),
346 MPP_VAR_FUNCTION(2, "sata0", "prsnt", V_88F6810_PLUS), 346 MPP_VAR_FUNCTION(2, "sata0", "prsnt", V_88F6810_PLUS),
347 MPP_VAR_FUNCTION(3, "tdm2c", "rstn", V_88F6810_PLUS), 347 MPP_VAR_FUNCTION(3, "tdm", "rst", V_88F6810_PLUS),
348 MPP_VAR_FUNCTION(4, "audio", "bclk", V_88F6810_PLUS), 348 MPP_VAR_FUNCTION(4, "audio", "bclk", V_88F6810_PLUS),
349 MPP_VAR_FUNCTION(5, "sd0", "d7", V_88F6810_PLUS)), 349 MPP_VAR_FUNCTION(5, "sd0", "d7", V_88F6810_PLUS),
350 MPP_VAR_FUNCTION(6, "ptp", "evreq", V_88F6810_PLUS)),
350 MPP_MODE(54, 351 MPP_MODE(54,
351 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 352 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
352 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6810_PLUS), 353 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6810_PLUS),
353 MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6810_PLUS), 354 MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6810_PLUS),
354 MPP_VAR_FUNCTION(3, "pcie0", "rstout", V_88F6810_PLUS), 355 MPP_VAR_FUNCTION(3, "pcie0", "rstout", V_88F6810_PLUS),
355 MPP_VAR_FUNCTION(4, "pcie1", "rstout", V_88F6820_PLUS), 356 MPP_VAR_FUNCTION(4, "ge0", "txerr", V_88F6810_PLUS),
356 MPP_VAR_FUNCTION(5, "sd0", "d3", V_88F6810_PLUS)), 357 MPP_VAR_FUNCTION(5, "sd0", "d3", V_88F6810_PLUS)),
357 MPP_MODE(55, 358 MPP_MODE(55,
358 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 359 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
@@ -360,29 +361,32 @@ static struct mvebu_mpp_mode armada_38x_mpp_modes[] = {
360 MPP_VAR_FUNCTION(2, "ge", "mdio", V_88F6810_PLUS), 361 MPP_VAR_FUNCTION(2, "ge", "mdio", V_88F6810_PLUS),
361 MPP_VAR_FUNCTION(3, "pcie1", "clkreq", V_88F6820_PLUS), 362 MPP_VAR_FUNCTION(3, "pcie1", "clkreq", V_88F6820_PLUS),
362 MPP_VAR_FUNCTION(4, "spi1", "cs1", V_88F6810_PLUS), 363 MPP_VAR_FUNCTION(4, "spi1", "cs1", V_88F6810_PLUS),
363 MPP_VAR_FUNCTION(5, "sd0", "d0", V_88F6810_PLUS)), 364 MPP_VAR_FUNCTION(5, "sd0", "d0", V_88F6810_PLUS),
365 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6810_PLUS)),
364 MPP_MODE(56, 366 MPP_MODE(56,
365 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 367 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
366 MPP_VAR_FUNCTION(1, "ua1", "rts", V_88F6810_PLUS), 368 MPP_VAR_FUNCTION(1, "ua1", "rts", V_88F6810_PLUS),
367 MPP_VAR_FUNCTION(2, "ge", "mdc", V_88F6810_PLUS), 369 MPP_VAR_FUNCTION(2, "ge", "mdc", V_88F6810_PLUS),
368 MPP_VAR_FUNCTION(3, "m", "decc_err", V_88F6810_PLUS), 370 MPP_VAR_FUNCTION(3, "dram", "deccerr", V_88F6810_PLUS),
369 MPP_VAR_FUNCTION(4, "spi1", "mosi", V_88F6810_PLUS)), 371 MPP_VAR_FUNCTION(4, "spi1", "mosi", V_88F6810_PLUS),
372 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6810_PLUS)),
370 MPP_MODE(57, 373 MPP_MODE(57,
371 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 374 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
372 MPP_VAR_FUNCTION(4, "spi1", "sck", V_88F6810_PLUS), 375 MPP_VAR_FUNCTION(4, "spi1", "sck", V_88F6810_PLUS),
373 MPP_VAR_FUNCTION(5, "sd0", "clk", V_88F6810_PLUS)), 376 MPP_VAR_FUNCTION(5, "sd0", "clk", V_88F6810_PLUS),
377 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6810_PLUS)),
374 MPP_MODE(58, 378 MPP_MODE(58,
375 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 379 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
376 MPP_VAR_FUNCTION(1, "pcie1", "clkreq", V_88F6820_PLUS), 380 MPP_VAR_FUNCTION(1, "pcie1", "clkreq", V_88F6820_PLUS),
377 MPP_VAR_FUNCTION(2, "i2c1", "sck", V_88F6810_PLUS), 381 MPP_VAR_FUNCTION(2, "i2c1", "sck", V_88F6810_PLUS),
378 MPP_VAR_FUNCTION(3, "pcie2", "clkreq", V_88F6810_PLUS), 382 MPP_VAR_FUNCTION(3, "pcie2", "clkreq", V_88F6810_PLUS),
379 MPP_VAR_FUNCTION(4, "spi1", "miso", V_88F6810_PLUS), 383 MPP_VAR_FUNCTION(4, "spi1", "miso", V_88F6810_PLUS),
380 MPP_VAR_FUNCTION(5, "sd0", "d1", V_88F6810_PLUS)), 384 MPP_VAR_FUNCTION(5, "sd0", "d1", V_88F6810_PLUS),
385 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6810_PLUS)),
381 MPP_MODE(59, 386 MPP_MODE(59,
382 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS), 387 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6810_PLUS),
383 MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6810_PLUS), 388 MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6810_PLUS),
384 MPP_VAR_FUNCTION(2, "i2c1", "sda", V_88F6810_PLUS), 389 MPP_VAR_FUNCTION(2, "i2c1", "sda", V_88F6810_PLUS),
385 MPP_VAR_FUNCTION(3, "pcie1", "rstout", V_88F6820_PLUS),
386 MPP_VAR_FUNCTION(4, "spi1", "cs0", V_88F6810_PLUS), 390 MPP_VAR_FUNCTION(4, "spi1", "cs0", V_88F6810_PLUS),
387 MPP_VAR_FUNCTION(5, "sd0", "d2", V_88F6810_PLUS)), 391 MPP_VAR_FUNCTION(5, "sd0", "d2", V_88F6810_PLUS)),
388}; 392};
@@ -411,7 +415,7 @@ static struct mvebu_mpp_ctrl armada_38x_mpp_controls[] = {
411 415
412static struct pinctrl_gpio_range armada_38x_mpp_gpio_ranges[] = { 416static struct pinctrl_gpio_range armada_38x_mpp_gpio_ranges[] = {
413 MPP_GPIO_RANGE(0, 0, 0, 32), 417 MPP_GPIO_RANGE(0, 0, 0, 32),
414 MPP_GPIO_RANGE(1, 32, 32, 27), 418 MPP_GPIO_RANGE(1, 32, 32, 28),
415}; 419};
416 420
417static int armada_38x_pinctrl_probe(struct platform_device *pdev) 421static int armada_38x_pinctrl_probe(struct platform_device *pdev)
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-39x.c b/drivers/pinctrl/mvebu/pinctrl-armada-39x.c
index 42491624d660..fcfe9b478a2e 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-39x.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-39x.c
@@ -36,8 +36,10 @@ static int armada_39x_mpp_ctrl_set(unsigned pid, unsigned long config)
36 36
37enum { 37enum {
38 V_88F6920 = BIT(0), 38 V_88F6920 = BIT(0),
39 V_88F6928 = BIT(1), 39 V_88F6925 = BIT(1),
40 V_88F6920_PLUS = (V_88F6920 | V_88F6928), 40 V_88F6928 = BIT(2),
41 V_88F6920_PLUS = (V_88F6920 | V_88F6925 | V_88F6928),
42 V_88F6925_PLUS = (V_88F6925 | V_88F6928),
41}; 43};
42 44
43static struct mvebu_mpp_mode armada_39x_mpp_modes[] = { 45static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
@@ -82,7 +84,7 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
82 MPP_MODE(10, 84 MPP_MODE(10,
83 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 85 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
84 MPP_VAR_FUNCTION(5, "dev", "ad12", V_88F6920_PLUS), 86 MPP_VAR_FUNCTION(5, "dev", "ad12", V_88F6920_PLUS),
85 MPP_VAR_FUNCTION(7, "ptp", "event", V_88F6920_PLUS)), 87 MPP_VAR_FUNCTION(7, "ptp", "evreq", V_88F6920_PLUS)),
86 MPP_MODE(11, 88 MPP_MODE(11,
87 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 89 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
88 MPP_VAR_FUNCTION(5, "dev", "ad13", V_88F6920_PLUS), 90 MPP_VAR_FUNCTION(5, "dev", "ad13", V_88F6920_PLUS),
@@ -95,11 +97,12 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
95 MPP_MODE(13, 97 MPP_MODE(13,
96 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 98 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
97 MPP_VAR_FUNCTION(5, "dev", "ad15", V_88F6920_PLUS), 99 MPP_VAR_FUNCTION(5, "dev", "ad15", V_88F6920_PLUS),
100 MPP_VAR_FUNCTION(6, "pcie2", "clkreq", V_88F6920_PLUS),
98 MPP_VAR_FUNCTION(7, "led", "data", V_88F6920_PLUS)), 101 MPP_VAR_FUNCTION(7, "led", "data", V_88F6920_PLUS)),
99 MPP_MODE(14, 102 MPP_MODE(14,
100 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 103 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
101 MPP_VAR_FUNCTION(3, "m", "vtt", V_88F6920_PLUS), 104 MPP_VAR_FUNCTION(3, "dram", "vttctrl", V_88F6920_PLUS),
102 MPP_VAR_FUNCTION(5, "dev", "wen1", V_88F6920_PLUS), 105 MPP_VAR_FUNCTION(5, "dev", "we1", V_88F6920_PLUS),
103 MPP_VAR_FUNCTION(7, "ua1", "txd", V_88F6920_PLUS)), 106 MPP_VAR_FUNCTION(7, "ua1", "txd", V_88F6920_PLUS)),
104 MPP_MODE(15, 107 MPP_MODE(15,
105 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 108 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
@@ -108,13 +111,16 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
108 MPP_VAR_FUNCTION(7, "i2c1", "sck", V_88F6920_PLUS)), 111 MPP_VAR_FUNCTION(7, "i2c1", "sck", V_88F6920_PLUS)),
109 MPP_MODE(16, 112 MPP_MODE(16,
110 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 113 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
111 MPP_VAR_FUNCTION(3, "m", "decc", V_88F6920_PLUS), 114 MPP_VAR_FUNCTION(3, "dram", "deccerr", V_88F6920_PLUS),
112 MPP_VAR_FUNCTION(4, "spi0", "miso", V_88F6920_PLUS), 115 MPP_VAR_FUNCTION(4, "spi0", "miso", V_88F6920_PLUS),
116 MPP_VAR_FUNCTION(5, "pcie0", "clkreq", V_88F6920_PLUS),
113 MPP_VAR_FUNCTION(7, "i2c1", "sda", V_88F6920_PLUS)), 117 MPP_VAR_FUNCTION(7, "i2c1", "sda", V_88F6920_PLUS)),
114 MPP_MODE(17, 118 MPP_MODE(17,
115 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 119 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
116 MPP_VAR_FUNCTION(3, "ua1", "rxd", V_88F6920_PLUS), 120 MPP_VAR_FUNCTION(3, "ua1", "rxd", V_88F6920_PLUS),
117 MPP_VAR_FUNCTION(4, "spi0", "sck", V_88F6920_PLUS), 121 MPP_VAR_FUNCTION(4, "spi0", "sck", V_88F6920_PLUS),
122 MPP_VAR_FUNCTION(5, "sata1", "prsnt", V_88F6925_PLUS),
123 MPP_VAR_FUNCTION(6, "sata0", "prsnt", V_88F6925_PLUS),
118 MPP_VAR_FUNCTION(7, "smi", "mdio", V_88F6920_PLUS)), 124 MPP_VAR_FUNCTION(7, "smi", "mdio", V_88F6920_PLUS)),
119 MPP_MODE(18, 125 MPP_MODE(18,
120 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 126 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
@@ -123,22 +129,23 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
123 MPP_VAR_FUNCTION(7, "i2c2", "sck", V_88F6920_PLUS)), 129 MPP_VAR_FUNCTION(7, "i2c2", "sck", V_88F6920_PLUS)),
124 MPP_MODE(19, 130 MPP_MODE(19,
125 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 131 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
126 MPP_VAR_FUNCTION(4, "sata1", "present", V_88F6928), 132 MPP_VAR_FUNCTION(4, "sata1", "prsnt", V_88F6925_PLUS),
127 MPP_VAR_FUNCTION(5, "ua0", "cts", V_88F6920_PLUS), 133 MPP_VAR_FUNCTION(5, "ua0", "cts", V_88F6920_PLUS),
128 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6920_PLUS), 134 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6920_PLUS),
129 MPP_VAR_FUNCTION(7, "i2c2", "sda", V_88F6920_PLUS)), 135 MPP_VAR_FUNCTION(7, "i2c2", "sda", V_88F6920_PLUS)),
130 MPP_MODE(20, 136 MPP_MODE(20,
131 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 137 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
132 MPP_VAR_FUNCTION(4, "sata0", "present", V_88F6928), 138 MPP_VAR_FUNCTION(4, "sata0", "prsnt", V_88F6925_PLUS),
133 MPP_VAR_FUNCTION(5, "ua0", "rts", V_88F6920_PLUS), 139 MPP_VAR_FUNCTION(5, "ua0", "rts", V_88F6920_PLUS),
134 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6920_PLUS), 140 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6920_PLUS),
135 MPP_VAR_FUNCTION(7, "smi", "mdc", V_88F6920_PLUS)), 141 MPP_VAR_FUNCTION(7, "smi", "mdc", V_88F6920_PLUS)),
136 MPP_MODE(21, 142 MPP_MODE(21,
137 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 143 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
138 MPP_VAR_FUNCTION(1, "spi0", "cs1", V_88F6920_PLUS), 144 MPP_VAR_FUNCTION(1, "spi0", "cs1", V_88F6920_PLUS),
139 MPP_VAR_FUNCTION(3, "sata0", "present", V_88F6928), 145 MPP_VAR_FUNCTION(3, "sata0", "prsnt", V_88F6925_PLUS),
140 MPP_VAR_FUNCTION(4, "sd", "cmd", V_88F6920_PLUS), 146 MPP_VAR_FUNCTION(4, "sd0", "cmd", V_88F6920_PLUS),
141 MPP_VAR_FUNCTION(5, "dev", "bootcs", V_88F6920_PLUS), 147 MPP_VAR_FUNCTION(5, "dev", "bootcs", V_88F6920_PLUS),
148 MPP_VAR_FUNCTION(6, "sata1", "prsnt", V_88F6925_PLUS),
142 MPP_VAR_FUNCTION(8, "ge", "rxd0", V_88F6920_PLUS)), 149 MPP_VAR_FUNCTION(8, "ge", "rxd0", V_88F6920_PLUS)),
143 MPP_MODE(22, 150 MPP_MODE(22,
144 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 151 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
@@ -153,31 +160,31 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
153 MPP_VAR_FUNCTION(1, "spi0", "miso", V_88F6920_PLUS), 160 MPP_VAR_FUNCTION(1, "spi0", "miso", V_88F6920_PLUS),
154 MPP_VAR_FUNCTION(2, "ua0", "cts", V_88F6920_PLUS), 161 MPP_VAR_FUNCTION(2, "ua0", "cts", V_88F6920_PLUS),
155 MPP_VAR_FUNCTION(3, "ua1", "rxd", V_88F6920_PLUS), 162 MPP_VAR_FUNCTION(3, "ua1", "rxd", V_88F6920_PLUS),
156 MPP_VAR_FUNCTION(4, "sd", "d4", V_88F6920_PLUS), 163 MPP_VAR_FUNCTION(4, "sd0", "d4", V_88F6920_PLUS),
157 MPP_VAR_FUNCTION(5, "dev", "readyn", V_88F6920_PLUS)), 164 MPP_VAR_FUNCTION(5, "dev", "ready", V_88F6920_PLUS)),
158 MPP_MODE(25, 165 MPP_MODE(25,
159 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 166 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
160 MPP_VAR_FUNCTION(1, "spi0", "cs0", V_88F6920_PLUS), 167 MPP_VAR_FUNCTION(1, "spi0", "cs0", V_88F6920_PLUS),
161 MPP_VAR_FUNCTION(2, "ua0", "rts", V_88F6920_PLUS), 168 MPP_VAR_FUNCTION(2, "ua0", "rts", V_88F6920_PLUS),
162 MPP_VAR_FUNCTION(3, "ua1", "txd", V_88F6920_PLUS), 169 MPP_VAR_FUNCTION(3, "ua1", "txd", V_88F6920_PLUS),
163 MPP_VAR_FUNCTION(4, "sd", "d5", V_88F6920_PLUS), 170 MPP_VAR_FUNCTION(4, "sd0", "d5", V_88F6920_PLUS),
164 MPP_VAR_FUNCTION(5, "dev", "cs0", V_88F6920_PLUS)), 171 MPP_VAR_FUNCTION(5, "dev", "cs0", V_88F6920_PLUS)),
165 MPP_MODE(26, 172 MPP_MODE(26,
166 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 173 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
167 MPP_VAR_FUNCTION(1, "spi0", "cs2", V_88F6920_PLUS), 174 MPP_VAR_FUNCTION(1, "spi0", "cs2", V_88F6920_PLUS),
168 MPP_VAR_FUNCTION(3, "i2c1", "sck", V_88F6920_PLUS), 175 MPP_VAR_FUNCTION(3, "i2c1", "sck", V_88F6920_PLUS),
169 MPP_VAR_FUNCTION(4, "sd", "d6", V_88F6920_PLUS), 176 MPP_VAR_FUNCTION(4, "sd0", "d6", V_88F6920_PLUS),
170 MPP_VAR_FUNCTION(5, "dev", "cs1", V_88F6920_PLUS)), 177 MPP_VAR_FUNCTION(5, "dev", "cs1", V_88F6920_PLUS)),
171 MPP_MODE(27, 178 MPP_MODE(27,
172 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 179 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
173 MPP_VAR_FUNCTION(1, "spi0", "cs3", V_88F6920_PLUS), 180 MPP_VAR_FUNCTION(1, "spi0", "cs3", V_88F6920_PLUS),
174 MPP_VAR_FUNCTION(3, "i2c1", "sda", V_88F6920_PLUS), 181 MPP_VAR_FUNCTION(3, "i2c1", "sda", V_88F6920_PLUS),
175 MPP_VAR_FUNCTION(4, "sd", "d7", V_88F6920_PLUS), 182 MPP_VAR_FUNCTION(4, "sd0", "d7", V_88F6920_PLUS),
176 MPP_VAR_FUNCTION(5, "dev", "cs2", V_88F6920_PLUS), 183 MPP_VAR_FUNCTION(5, "dev", "cs2", V_88F6920_PLUS),
177 MPP_VAR_FUNCTION(8, "ge", "txclkout", V_88F6920_PLUS)), 184 MPP_VAR_FUNCTION(8, "ge", "txclkout", V_88F6920_PLUS)),
178 MPP_MODE(28, 185 MPP_MODE(28,
179 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 186 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
180 MPP_VAR_FUNCTION(4, "sd", "clk", V_88F6920_PLUS), 187 MPP_VAR_FUNCTION(4, "sd0", "clk", V_88F6920_PLUS),
181 MPP_VAR_FUNCTION(5, "dev", "ad5", V_88F6920_PLUS), 188 MPP_VAR_FUNCTION(5, "dev", "ad5", V_88F6920_PLUS),
182 MPP_VAR_FUNCTION(8, "ge", "txd0", V_88F6920_PLUS)), 189 MPP_VAR_FUNCTION(8, "ge", "txd0", V_88F6920_PLUS)),
183 MPP_MODE(29, 190 MPP_MODE(29,
@@ -186,7 +193,7 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
186 MPP_VAR_FUNCTION(8, "ge", "txd1", V_88F6920_PLUS)), 193 MPP_VAR_FUNCTION(8, "ge", "txd1", V_88F6920_PLUS)),
187 MPP_MODE(30, 194 MPP_MODE(30,
188 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 195 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
189 MPP_VAR_FUNCTION(5, "dev", "oen", V_88F6920_PLUS), 196 MPP_VAR_FUNCTION(5, "dev", "oe", V_88F6920_PLUS),
190 MPP_VAR_FUNCTION(8, "ge", "txd2", V_88F6920_PLUS)), 197 MPP_VAR_FUNCTION(8, "ge", "txd2", V_88F6920_PLUS)),
191 MPP_MODE(31, 198 MPP_MODE(31,
192 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 199 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
@@ -194,45 +201,45 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
194 MPP_VAR_FUNCTION(8, "ge", "txd3", V_88F6920_PLUS)), 201 MPP_VAR_FUNCTION(8, "ge", "txd3", V_88F6920_PLUS)),
195 MPP_MODE(32, 202 MPP_MODE(32,
196 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 203 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
197 MPP_VAR_FUNCTION(5, "dev", "wen0", V_88F6920_PLUS), 204 MPP_VAR_FUNCTION(5, "dev", "we0", V_88F6920_PLUS),
198 MPP_VAR_FUNCTION(8, "ge", "txctl", V_88F6920_PLUS)), 205 MPP_VAR_FUNCTION(8, "ge", "txctl", V_88F6920_PLUS)),
199 MPP_MODE(33, 206 MPP_MODE(33,
200 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 207 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
201 MPP_VAR_FUNCTION(1, "m", "decc", V_88F6920_PLUS), 208 MPP_VAR_FUNCTION(1, "dram", "deccerr", V_88F6920_PLUS),
202 MPP_VAR_FUNCTION(5, "dev", "ad3", V_88F6920_PLUS)), 209 MPP_VAR_FUNCTION(5, "dev", "ad3", V_88F6920_PLUS)),
203 MPP_MODE(34, 210 MPP_MODE(34,
204 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 211 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
205 MPP_VAR_FUNCTION(5, "dev", "ad1", V_88F6920_PLUS)), 212 MPP_VAR_FUNCTION(5, "dev", "ad1", V_88F6920_PLUS)),
206 MPP_MODE(35, 213 MPP_MODE(35,
207 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 214 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
208 MPP_VAR_FUNCTION(1, "ref", "clk", V_88F6920_PLUS), 215 MPP_VAR_FUNCTION(1, "ref", "clk_out1", V_88F6920_PLUS),
209 MPP_VAR_FUNCTION(5, "dev", "a1", V_88F6920_PLUS)), 216 MPP_VAR_FUNCTION(5, "dev", "a1", V_88F6920_PLUS)),
210 MPP_MODE(36, 217 MPP_MODE(36,
211 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 218 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
212 MPP_VAR_FUNCTION(5, "dev", "a0", V_88F6920_PLUS)), 219 MPP_VAR_FUNCTION(5, "dev", "a0", V_88F6920_PLUS)),
213 MPP_MODE(37, 220 MPP_MODE(37,
214 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 221 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
215 MPP_VAR_FUNCTION(4, "sd", "d3", V_88F6920_PLUS), 222 MPP_VAR_FUNCTION(4, "sd0", "d3", V_88F6920_PLUS),
216 MPP_VAR_FUNCTION(5, "dev", "ad8", V_88F6920_PLUS), 223 MPP_VAR_FUNCTION(5, "dev", "ad8", V_88F6920_PLUS),
217 MPP_VAR_FUNCTION(8, "ge", "rxclk", V_88F6920_PLUS)), 224 MPP_VAR_FUNCTION(8, "ge", "rxclk", V_88F6920_PLUS)),
218 MPP_MODE(38, 225 MPP_MODE(38,
219 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 226 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
220 MPP_VAR_FUNCTION(3, "ref", "clk", V_88F6920_PLUS), 227 MPP_VAR_FUNCTION(3, "ref", "clk_out0", V_88F6920_PLUS),
221 MPP_VAR_FUNCTION(4, "sd", "d0", V_88F6920_PLUS), 228 MPP_VAR_FUNCTION(4, "sd0", "d0", V_88F6920_PLUS),
222 MPP_VAR_FUNCTION(5, "dev", "ad4", V_88F6920_PLUS), 229 MPP_VAR_FUNCTION(5, "dev", "ad4", V_88F6920_PLUS),
223 MPP_VAR_FUNCTION(8, "ge", "rxd1", V_88F6920_PLUS)), 230 MPP_VAR_FUNCTION(8, "ge", "rxd1", V_88F6920_PLUS)),
224 MPP_MODE(39, 231 MPP_MODE(39,
225 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 232 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
226 MPP_VAR_FUNCTION(1, "i2c1", "sck", V_88F6920_PLUS), 233 MPP_VAR_FUNCTION(1, "i2c1", "sck", V_88F6920_PLUS),
227 MPP_VAR_FUNCTION(3, "ua0", "cts", V_88F6920_PLUS), 234 MPP_VAR_FUNCTION(3, "ua0", "cts", V_88F6920_PLUS),
228 MPP_VAR_FUNCTION(4, "sd", "d1", V_88F6920_PLUS), 235 MPP_VAR_FUNCTION(4, "sd0", "d1", V_88F6920_PLUS),
229 MPP_VAR_FUNCTION(5, "dev", "a2", V_88F6920_PLUS), 236 MPP_VAR_FUNCTION(5, "dev", "a2", V_88F6920_PLUS),
230 MPP_VAR_FUNCTION(8, "ge", "rxd2", V_88F6920_PLUS)), 237 MPP_VAR_FUNCTION(8, "ge", "rxd2", V_88F6920_PLUS)),
231 MPP_MODE(40, 238 MPP_MODE(40,
232 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 239 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
233 MPP_VAR_FUNCTION(1, "i2c1", "sda", V_88F6920_PLUS), 240 MPP_VAR_FUNCTION(1, "i2c1", "sda", V_88F6920_PLUS),
234 MPP_VAR_FUNCTION(3, "ua0", "rts", V_88F6920_PLUS), 241 MPP_VAR_FUNCTION(3, "ua0", "rts", V_88F6920_PLUS),
235 MPP_VAR_FUNCTION(4, "sd", "d2", V_88F6920_PLUS), 242 MPP_VAR_FUNCTION(4, "sd0", "d2", V_88F6920_PLUS),
236 MPP_VAR_FUNCTION(5, "dev", "ad6", V_88F6920_PLUS), 243 MPP_VAR_FUNCTION(5, "dev", "ad6", V_88F6920_PLUS),
237 MPP_VAR_FUNCTION(8, "ge", "rxd3", V_88F6920_PLUS)), 244 MPP_VAR_FUNCTION(8, "ge", "rxd3", V_88F6920_PLUS)),
238 MPP_MODE(41, 245 MPP_MODE(41,
@@ -240,8 +247,8 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
240 MPP_VAR_FUNCTION(1, "ua1", "rxd", V_88F6920_PLUS), 247 MPP_VAR_FUNCTION(1, "ua1", "rxd", V_88F6920_PLUS),
241 MPP_VAR_FUNCTION(3, "ua0", "cts", V_88F6920_PLUS), 248 MPP_VAR_FUNCTION(3, "ua0", "cts", V_88F6920_PLUS),
242 MPP_VAR_FUNCTION(4, "spi1", "cs3", V_88F6920_PLUS), 249 MPP_VAR_FUNCTION(4, "spi1", "cs3", V_88F6920_PLUS),
243 MPP_VAR_FUNCTION(5, "dev", "burstn", V_88F6920_PLUS), 250 MPP_VAR_FUNCTION(5, "dev", "burst/last", V_88F6920_PLUS),
244 MPP_VAR_FUNCTION(6, "nd", "rbn0", V_88F6920_PLUS), 251 MPP_VAR_FUNCTION(6, "nand", "rb0", V_88F6920_PLUS),
245 MPP_VAR_FUNCTION(8, "ge", "rxctl", V_88F6920_PLUS)), 252 MPP_VAR_FUNCTION(8, "ge", "rxctl", V_88F6920_PLUS)),
246 MPP_MODE(42, 253 MPP_MODE(42,
247 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 254 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
@@ -251,113 +258,119 @@ static struct mvebu_mpp_mode armada_39x_mpp_modes[] = {
251 MPP_MODE(43, 258 MPP_MODE(43,
252 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 259 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
253 MPP_VAR_FUNCTION(1, "pcie0", "clkreq", V_88F6920_PLUS), 260 MPP_VAR_FUNCTION(1, "pcie0", "clkreq", V_88F6920_PLUS),
254 MPP_VAR_FUNCTION(2, "m", "vtt", V_88F6920_PLUS), 261 MPP_VAR_FUNCTION(2, "dram", "vttctrl", V_88F6920_PLUS),
255 MPP_VAR_FUNCTION(3, "m", "decc", V_88F6920_PLUS), 262 MPP_VAR_FUNCTION(3, "dram", "deccerr", V_88F6920_PLUS),
256 MPP_VAR_FUNCTION(4, "spi1", "cs2", V_88F6920_PLUS), 263 MPP_VAR_FUNCTION(4, "spi1", "cs2", V_88F6920_PLUS),
257 MPP_VAR_FUNCTION(5, "dev", "clkout", V_88F6920_PLUS), 264 MPP_VAR_FUNCTION(5, "dev", "clkout", V_88F6920_PLUS),
258 MPP_VAR_FUNCTION(6, "nd", "rbn1", V_88F6920_PLUS)), 265 MPP_VAR_FUNCTION(6, "nand", "rb1", V_88F6920_PLUS)),
259 MPP_MODE(44, 266 MPP_MODE(44,
260 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 267 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
261 MPP_VAR_FUNCTION(1, "sata0", "present", V_88F6928), 268 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6925_PLUS),
262 MPP_VAR_FUNCTION(2, "sata1", "present", V_88F6928), 269 MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6925_PLUS),
270 MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6928),
271 MPP_VAR_FUNCTION(4, "sata3", "prsnt", V_88F6928),
263 MPP_VAR_FUNCTION(7, "led", "clk", V_88F6920_PLUS)), 272 MPP_VAR_FUNCTION(7, "led", "clk", V_88F6920_PLUS)),
264 MPP_MODE(45, 273 MPP_MODE(45,
265 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 274 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
266 MPP_VAR_FUNCTION(1, "ref", "clk", V_88F6920_PLUS), 275 MPP_VAR_FUNCTION(1, "ref", "clk_out0", V_88F6920_PLUS),
267 MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6920_PLUS), 276 MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6920_PLUS),
268 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6920_PLUS)), 277 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6920_PLUS)),
269 MPP_MODE(46, 278 MPP_MODE(46,
270 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 279 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
271 MPP_VAR_FUNCTION(1, "ref", "clk", V_88F6920_PLUS), 280 MPP_VAR_FUNCTION(1, "ref", "clk_out1", V_88F6920_PLUS),
272 MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6920_PLUS), 281 MPP_VAR_FUNCTION(2, "pcie0", "rstout", V_88F6920_PLUS),
273 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6920_PLUS), 282 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6920_PLUS),
274 MPP_VAR_FUNCTION(7, "led", "stb", V_88F6920_PLUS)), 283 MPP_VAR_FUNCTION(7, "led", "stb", V_88F6920_PLUS)),
275 MPP_MODE(47, 284 MPP_MODE(47,
276 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 285 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
277 MPP_VAR_FUNCTION(1, "sata0", "present", V_88F6928), 286 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6925_PLUS),
278 MPP_VAR_FUNCTION(2, "sata1", "present", V_88F6928), 287 MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6925_PLUS),
288 MPP_VAR_FUNCTION(3, "sata2", "prsnt", V_88F6928),
289 MPP_VAR_FUNCTION(5, "sata3", "prsnt", V_88F6928),
279 MPP_VAR_FUNCTION(7, "led", "data", V_88F6920_PLUS)), 290 MPP_VAR_FUNCTION(7, "led", "data", V_88F6920_PLUS)),
280 MPP_MODE(48, 291 MPP_MODE(48,
281 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 292 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
282 MPP_VAR_FUNCTION(1, "sata0", "present", V_88F6928), 293 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6925_PLUS),
283 MPP_VAR_FUNCTION(2, "m", "vtt", V_88F6920_PLUS), 294 MPP_VAR_FUNCTION(2, "dram", "vttctrl", V_88F6920_PLUS),
284 MPP_VAR_FUNCTION(3, "tdm", "pclk", V_88F6928), 295 MPP_VAR_FUNCTION(3, "tdm", "pclk", V_88F6928),
285 MPP_VAR_FUNCTION(4, "audio", "mclk", V_88F6928), 296 MPP_VAR_FUNCTION(4, "audio", "mclk", V_88F6928),
286 MPP_VAR_FUNCTION(5, "sd", "d4", V_88F6920_PLUS), 297 MPP_VAR_FUNCTION(5, "sd0", "d4", V_88F6920_PLUS),
287 MPP_VAR_FUNCTION(6, "pcie0", "clkreq", V_88F6920_PLUS), 298 MPP_VAR_FUNCTION(6, "pcie0", "clkreq", V_88F6920_PLUS),
288 MPP_VAR_FUNCTION(7, "ua1", "txd", V_88F6920_PLUS)), 299 MPP_VAR_FUNCTION(7, "ua1", "txd", V_88F6920_PLUS)),
289 MPP_MODE(49, 300 MPP_MODE(49,
290 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 301 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
302 MPP_VAR_FUNCTION(1, "sata2", "prsnt", V_88F6928),
303 MPP_VAR_FUNCTION(2, "sata3", "prsnt", V_88F6928),
291 MPP_VAR_FUNCTION(3, "tdm", "fsync", V_88F6928), 304 MPP_VAR_FUNCTION(3, "tdm", "fsync", V_88F6928),
292 MPP_VAR_FUNCTION(4, "audio", "lrclk", V_88F6928), 305 MPP_VAR_FUNCTION(4, "audio", "lrclk", V_88F6928),
293 MPP_VAR_FUNCTION(5, "sd", "d5", V_88F6920_PLUS), 306 MPP_VAR_FUNCTION(5, "sd0", "d5", V_88F6920_PLUS),
294 MPP_VAR_FUNCTION(7, "ua2", "rxd", V_88F6920_PLUS)), 307 MPP_VAR_FUNCTION(7, "ua2", "rxd", V_88F6920_PLUS)),
295 MPP_MODE(50, 308 MPP_MODE(50,
296 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 309 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
297 MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6920_PLUS), 310 MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6920_PLUS),
298 MPP_VAR_FUNCTION(3, "tdm", "drx", V_88F6928), 311 MPP_VAR_FUNCTION(3, "tdm", "drx", V_88F6928),
299 MPP_VAR_FUNCTION(4, "audio", "extclk", V_88F6928), 312 MPP_VAR_FUNCTION(4, "audio", "extclk", V_88F6928),
300 MPP_VAR_FUNCTION(5, "sd", "cmd", V_88F6920_PLUS), 313 MPP_VAR_FUNCTION(5, "sd0", "cmd", V_88F6920_PLUS),
301 MPP_VAR_FUNCTION(7, "ua2", "rxd", V_88F6920_PLUS)), 314 MPP_VAR_FUNCTION(7, "ua2", "rxd", V_88F6920_PLUS)),
302 MPP_MODE(51, 315 MPP_MODE(51,
303 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 316 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
304 MPP_VAR_FUNCTION(3, "tdm", "dtx", V_88F6928), 317 MPP_VAR_FUNCTION(3, "tdm", "dtx", V_88F6928),
305 MPP_VAR_FUNCTION(4, "audio", "sdo", V_88F6928), 318 MPP_VAR_FUNCTION(4, "audio", "sdo", V_88F6928),
306 MPP_VAR_FUNCTION(5, "m", "decc", V_88F6920_PLUS), 319 MPP_VAR_FUNCTION(5, "dram", "deccerr", V_88F6920_PLUS),
307 MPP_VAR_FUNCTION(7, "ua2", "txd", V_88F6920_PLUS)), 320 MPP_VAR_FUNCTION(7, "ua2", "txd", V_88F6920_PLUS)),
308 MPP_MODE(52, 321 MPP_MODE(52,
309 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 322 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
310 MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6920_PLUS), 323 MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6920_PLUS),
311 MPP_VAR_FUNCTION(3, "tdm", "intn", V_88F6928), 324 MPP_VAR_FUNCTION(3, "tdm", "int", V_88F6928),
312 MPP_VAR_FUNCTION(4, "audio", "sdi", V_88F6928), 325 MPP_VAR_FUNCTION(4, "audio", "sdi", V_88F6928),
313 MPP_VAR_FUNCTION(5, "sd", "d6", V_88F6920_PLUS), 326 MPP_VAR_FUNCTION(5, "sd0", "d6", V_88F6920_PLUS),
314 MPP_VAR_FUNCTION(7, "i2c3", "sck", V_88F6920_PLUS)), 327 MPP_VAR_FUNCTION(7, "i2c3", "sck", V_88F6920_PLUS)),
315 MPP_MODE(53, 328 MPP_MODE(53,
316 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 329 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
317 MPP_VAR_FUNCTION(1, "sata1", "present", V_88F6928), 330 MPP_VAR_FUNCTION(1, "sata1", "prsnt", V_88F6925_PLUS),
318 MPP_VAR_FUNCTION(2, "sata0", "present", V_88F6928), 331 MPP_VAR_FUNCTION(2, "sata0", "prsnt", V_88F6925_PLUS),
319 MPP_VAR_FUNCTION(3, "tdm", "rstn", V_88F6928), 332 MPP_VAR_FUNCTION(3, "tdm", "rst", V_88F6928),
320 MPP_VAR_FUNCTION(4, "audio", "bclk", V_88F6928), 333 MPP_VAR_FUNCTION(4, "audio", "bclk", V_88F6928),
321 MPP_VAR_FUNCTION(5, "sd", "d7", V_88F6920_PLUS), 334 MPP_VAR_FUNCTION(5, "sd0", "d7", V_88F6920_PLUS),
322 MPP_VAR_FUNCTION(7, "i2c3", "sda", V_88F6920_PLUS)), 335 MPP_VAR_FUNCTION(7, "i2c3", "sda", V_88F6920_PLUS)),
323 MPP_MODE(54, 336 MPP_MODE(54,
324 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 337 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
325 MPP_VAR_FUNCTION(1, "sata0", "present", V_88F6928), 338 MPP_VAR_FUNCTION(1, "sata0", "prsnt", V_88F6925_PLUS),
326 MPP_VAR_FUNCTION(2, "sata1", "present", V_88F6928), 339 MPP_VAR_FUNCTION(2, "sata1", "prsnt", V_88F6925_PLUS),
327 MPP_VAR_FUNCTION(3, "pcie0", "rstout", V_88F6920_PLUS), 340 MPP_VAR_FUNCTION(3, "pcie0", "rstout", V_88F6920_PLUS),
328 MPP_VAR_FUNCTION(5, "sd", "d3", V_88F6920_PLUS), 341 MPP_VAR_FUNCTION(5, "sd0", "d3", V_88F6920_PLUS),
329 MPP_VAR_FUNCTION(7, "ua3", "txd", V_88F6920_PLUS)), 342 MPP_VAR_FUNCTION(7, "ua3", "txd", V_88F6920_PLUS)),
330 MPP_MODE(55, 343 MPP_MODE(55,
331 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 344 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
332 MPP_VAR_FUNCTION(1, "ua1", "cts", V_88F6920_PLUS), 345 MPP_VAR_FUNCTION(1, "ua1", "cts", V_88F6920_PLUS),
333 MPP_VAR_FUNCTION(4, "spi1", "cs1", V_88F6920_PLUS), 346 MPP_VAR_FUNCTION(4, "spi1", "cs1", V_88F6920_PLUS),
334 MPP_VAR_FUNCTION(5, "sd", "d0", V_88F6920_PLUS), 347 MPP_VAR_FUNCTION(5, "sd0", "d0", V_88F6920_PLUS),
335 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6920_PLUS), 348 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6920_PLUS),
336 MPP_VAR_FUNCTION(7, "ua3", "rxd", V_88F6920_PLUS)), 349 MPP_VAR_FUNCTION(7, "ua3", "rxd", V_88F6920_PLUS)),
337 MPP_MODE(56, 350 MPP_MODE(56,
338 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 351 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
339 MPP_VAR_FUNCTION(1, "ua1", "rts", V_88F6920_PLUS), 352 MPP_VAR_FUNCTION(1, "ua1", "rts", V_88F6920_PLUS),
340 MPP_VAR_FUNCTION(3, "m", "decc", V_88F6920_PLUS), 353 MPP_VAR_FUNCTION(3, "dram", "deccerr", V_88F6920_PLUS),
341 MPP_VAR_FUNCTION(4, "spi1", "mosi", V_88F6920_PLUS), 354 MPP_VAR_FUNCTION(4, "spi1", "mosi", V_88F6920_PLUS),
342 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6920_PLUS)), 355 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6920_PLUS)),
343 MPP_MODE(57, 356 MPP_MODE(57,
344 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 357 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
345 MPP_VAR_FUNCTION(4, "spi1", "sck", V_88F6920_PLUS), 358 MPP_VAR_FUNCTION(4, "spi1", "sck", V_88F6920_PLUS),
346 MPP_VAR_FUNCTION(5, "sd", "clk", V_88F6920_PLUS), 359 MPP_VAR_FUNCTION(5, "sd0", "clk", V_88F6920_PLUS),
347 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6920_PLUS)), 360 MPP_VAR_FUNCTION(6, "ua1", "txd", V_88F6920_PLUS)),
348 MPP_MODE(58, 361 MPP_MODE(58,
349 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 362 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
350 MPP_VAR_FUNCTION(2, "i2c1", "sck", V_88F6920_PLUS), 363 MPP_VAR_FUNCTION(2, "i2c1", "sck", V_88F6920_PLUS),
351 MPP_VAR_FUNCTION(3, "pcie2", "clkreq", V_88F6920_PLUS), 364 MPP_VAR_FUNCTION(3, "pcie2", "clkreq", V_88F6920_PLUS),
352 MPP_VAR_FUNCTION(4, "spi1", "miso", V_88F6920_PLUS), 365 MPP_VAR_FUNCTION(4, "spi1", "miso", V_88F6920_PLUS),
353 MPP_VAR_FUNCTION(5, "sd", "d1", V_88F6920_PLUS), 366 MPP_VAR_FUNCTION(5, "sd0", "d1", V_88F6920_PLUS),
354 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6920_PLUS)), 367 MPP_VAR_FUNCTION(6, "ua1", "rxd", V_88F6920_PLUS)),
355 MPP_MODE(59, 368 MPP_MODE(59,
356 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS), 369 MPP_VAR_FUNCTION(0, "gpio", NULL, V_88F6920_PLUS),
357 MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6920_PLUS), 370 MPP_VAR_FUNCTION(1, "pcie0", "rstout", V_88F6920_PLUS),
358 MPP_VAR_FUNCTION(2, "i2c1", "sda", V_88F6920_PLUS), 371 MPP_VAR_FUNCTION(2, "i2c1", "sda", V_88F6920_PLUS),
359 MPP_VAR_FUNCTION(4, "spi1", "cs0", V_88F6920_PLUS), 372 MPP_VAR_FUNCTION(4, "spi1", "cs0", V_88F6920_PLUS),
360 MPP_VAR_FUNCTION(5, "sd", "d2", V_88F6920_PLUS)), 373 MPP_VAR_FUNCTION(5, "sd0", "d2", V_88F6920_PLUS)),
361}; 374};
362 375
363static struct mvebu_pinctrl_soc_info armada_39x_pinctrl_info; 376static struct mvebu_pinctrl_soc_info armada_39x_pinctrl_info;
@@ -368,6 +381,10 @@ static const struct of_device_id armada_39x_pinctrl_of_match[] = {
368 .data = (void *) V_88F6920, 381 .data = (void *) V_88F6920,
369 }, 382 },
370 { 383 {
384 .compatible = "marvell,mv88f6925-pinctrl",
385 .data = (void *) V_88F6925,
386 },
387 {
371 .compatible = "marvell,mv88f6928-pinctrl", 388 .compatible = "marvell,mv88f6928-pinctrl",
372 .data = (void *) V_88F6928, 389 .data = (void *) V_88F6928,
373 }, 390 },
@@ -380,7 +397,7 @@ static struct mvebu_mpp_ctrl armada_39x_mpp_controls[] = {
380 397
381static struct pinctrl_gpio_range armada_39x_mpp_gpio_ranges[] = { 398static struct pinctrl_gpio_range armada_39x_mpp_gpio_ranges[] = {
382 MPP_GPIO_RANGE(0, 0, 0, 32), 399 MPP_GPIO_RANGE(0, 0, 0, 32),
383 MPP_GPIO_RANGE(1, 32, 32, 27), 400 MPP_GPIO_RANGE(1, 32, 32, 28),
384}; 401};
385 402
386static int armada_39x_pinctrl_probe(struct platform_device *pdev) 403static int armada_39x_pinctrl_probe(struct platform_device *pdev)
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-xp.c b/drivers/pinctrl/mvebu/pinctrl-armada-xp.c
index 578db9f033b2..bf70e0953576 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-xp.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-xp.c
@@ -14,10 +14,7 @@
14 * available: mv78230, mv78260 and mv78460. From a pin muxing 14 * available: mv78230, mv78260 and mv78460. From a pin muxing
15 * perspective, the mv78230 has 49 MPP pins. The mv78260 and mv78460 15 * perspective, the mv78230 has 49 MPP pins. The mv78260 and mv78460
16 * both have 67 MPP pins (more GPIOs and address lines for the memory 16 * both have 67 MPP pins (more GPIOs and address lines for the memory
17 * bus mainly). The only difference between the mv78260 and the 17 * bus mainly).
18 * mv78460 in terms of pin muxing is the addition of two functions on
19 * pins 43 and 56 to access the VDD of the CPU2 and 3 (mv78260 has two
20 * cores, mv78460 has four cores).
21 */ 18 */
22 19
23#include <linux/err.h> 20#include <linux/err.h>
@@ -57,7 +54,7 @@ enum armada_xp_variant {
57static struct mvebu_mpp_mode armada_xp_mpp_modes[] = { 54static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
58 MPP_MODE(0, 55 MPP_MODE(0,
59 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 56 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
60 MPP_VAR_FUNCTION(0x1, "ge0", "txclko", V_MV78230_PLUS), 57 MPP_VAR_FUNCTION(0x1, "ge0", "txclkout", V_MV78230_PLUS),
61 MPP_VAR_FUNCTION(0x4, "lcd", "d0", V_MV78230_PLUS)), 58 MPP_VAR_FUNCTION(0x4, "lcd", "d0", V_MV78230_PLUS)),
62 MPP_MODE(1, 59 MPP_MODE(1,
63 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 60 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
@@ -106,17 +103,19 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
106 MPP_MODE(12, 103 MPP_MODE(12,
107 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 104 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
108 MPP_VAR_FUNCTION(0x1, "ge0", "txd4", V_MV78230_PLUS), 105 MPP_VAR_FUNCTION(0x1, "ge0", "txd4", V_MV78230_PLUS),
109 MPP_VAR_FUNCTION(0x2, "ge1", "clkout", V_MV78230_PLUS), 106 MPP_VAR_FUNCTION(0x2, "ge1", "txclkout", V_MV78230_PLUS),
110 MPP_VAR_FUNCTION(0x4, "lcd", "d12", V_MV78230_PLUS)), 107 MPP_VAR_FUNCTION(0x4, "lcd", "d12", V_MV78230_PLUS)),
111 MPP_MODE(13, 108 MPP_MODE(13,
112 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 109 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
113 MPP_VAR_FUNCTION(0x1, "ge0", "txd5", V_MV78230_PLUS), 110 MPP_VAR_FUNCTION(0x1, "ge0", "txd5", V_MV78230_PLUS),
114 MPP_VAR_FUNCTION(0x2, "ge1", "txd0", V_MV78230_PLUS), 111 MPP_VAR_FUNCTION(0x2, "ge1", "txd0", V_MV78230_PLUS),
112 MPP_VAR_FUNCTION(0x3, "spi1", "mosi", V_MV78230_PLUS),
115 MPP_VAR_FUNCTION(0x4, "lcd", "d13", V_MV78230_PLUS)), 113 MPP_VAR_FUNCTION(0x4, "lcd", "d13", V_MV78230_PLUS)),
116 MPP_MODE(14, 114 MPP_MODE(14,
117 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 115 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
118 MPP_VAR_FUNCTION(0x1, "ge0", "txd6", V_MV78230_PLUS), 116 MPP_VAR_FUNCTION(0x1, "ge0", "txd6", V_MV78230_PLUS),
119 MPP_VAR_FUNCTION(0x2, "ge1", "txd1", V_MV78230_PLUS), 117 MPP_VAR_FUNCTION(0x2, "ge1", "txd1", V_MV78230_PLUS),
118 MPP_VAR_FUNCTION(0x3, "spi1", "sck", V_MV78230_PLUS),
120 MPP_VAR_FUNCTION(0x4, "lcd", "d14", V_MV78230_PLUS)), 119 MPP_VAR_FUNCTION(0x4, "lcd", "d14", V_MV78230_PLUS)),
121 MPP_MODE(15, 120 MPP_MODE(15,
122 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 121 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
@@ -127,11 +126,13 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
127 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 126 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
128 MPP_VAR_FUNCTION(0x1, "ge0", "txclk", V_MV78230_PLUS), 127 MPP_VAR_FUNCTION(0x1, "ge0", "txclk", V_MV78230_PLUS),
129 MPP_VAR_FUNCTION(0x2, "ge1", "txd3", V_MV78230_PLUS), 128 MPP_VAR_FUNCTION(0x2, "ge1", "txd3", V_MV78230_PLUS),
129 MPP_VAR_FUNCTION(0x3, "spi1", "cs0", V_MV78230_PLUS),
130 MPP_VAR_FUNCTION(0x4, "lcd", "d16", V_MV78230_PLUS)), 130 MPP_VAR_FUNCTION(0x4, "lcd", "d16", V_MV78230_PLUS)),
131 MPP_MODE(17, 131 MPP_MODE(17,
132 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 132 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
133 MPP_VAR_FUNCTION(0x1, "ge0", "col", V_MV78230_PLUS), 133 MPP_VAR_FUNCTION(0x1, "ge0", "col", V_MV78230_PLUS),
134 MPP_VAR_FUNCTION(0x2, "ge1", "txctl", V_MV78230_PLUS), 134 MPP_VAR_FUNCTION(0x2, "ge1", "txctl", V_MV78230_PLUS),
135 MPP_VAR_FUNCTION(0x3, "spi1", "miso", V_MV78230_PLUS),
135 MPP_VAR_FUNCTION(0x4, "lcd", "d17", V_MV78230_PLUS)), 136 MPP_VAR_FUNCTION(0x4, "lcd", "d17", V_MV78230_PLUS)),
136 MPP_MODE(18, 137 MPP_MODE(18,
137 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 138 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
@@ -155,7 +156,7 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
155 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 156 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
156 MPP_VAR_FUNCTION(0x1, "ge0", "rxd5", V_MV78230_PLUS), 157 MPP_VAR_FUNCTION(0x1, "ge0", "rxd5", V_MV78230_PLUS),
157 MPP_VAR_FUNCTION(0x2, "ge1", "rxd3", V_MV78230_PLUS), 158 MPP_VAR_FUNCTION(0x2, "ge1", "rxd3", V_MV78230_PLUS),
158 MPP_VAR_FUNCTION(0x3, "mem", "bat", V_MV78230_PLUS), 159 MPP_VAR_FUNCTION(0x3, "dram", "bat", V_MV78230_PLUS),
159 MPP_VAR_FUNCTION(0x4, "lcd", "d21", V_MV78230_PLUS)), 160 MPP_VAR_FUNCTION(0x4, "lcd", "d21", V_MV78230_PLUS)),
160 MPP_MODE(22, 161 MPP_MODE(22,
161 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 162 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
@@ -172,20 +173,17 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
172 MPP_MODE(24, 173 MPP_MODE(24,
173 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 174 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
174 MPP_VAR_FUNCTION(0x1, "sata1", "prsnt", V_MV78230_PLUS), 175 MPP_VAR_FUNCTION(0x1, "sata1", "prsnt", V_MV78230_PLUS),
175 MPP_VAR_FUNCTION(0x2, "nf", "bootcs-re", V_MV78230_PLUS),
176 MPP_VAR_FUNCTION(0x3, "tdm", "rst", V_MV78230_PLUS), 176 MPP_VAR_FUNCTION(0x3, "tdm", "rst", V_MV78230_PLUS),
177 MPP_VAR_FUNCTION(0x4, "lcd", "hsync", V_MV78230_PLUS)), 177 MPP_VAR_FUNCTION(0x4, "lcd", "hsync", V_MV78230_PLUS)),
178 MPP_MODE(25, 178 MPP_MODE(25,
179 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 179 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
180 MPP_VAR_FUNCTION(0x1, "sata0", "prsnt", V_MV78230_PLUS), 180 MPP_VAR_FUNCTION(0x1, "sata0", "prsnt", V_MV78230_PLUS),
181 MPP_VAR_FUNCTION(0x2, "nf", "bootcs-we", V_MV78230_PLUS),
182 MPP_VAR_FUNCTION(0x3, "tdm", "pclk", V_MV78230_PLUS), 181 MPP_VAR_FUNCTION(0x3, "tdm", "pclk", V_MV78230_PLUS),
183 MPP_VAR_FUNCTION(0x4, "lcd", "vsync", V_MV78230_PLUS)), 182 MPP_VAR_FUNCTION(0x4, "lcd", "vsync", V_MV78230_PLUS)),
184 MPP_MODE(26, 183 MPP_MODE(26,
185 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 184 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
186 MPP_VAR_FUNCTION(0x3, "tdm", "fsync", V_MV78230_PLUS), 185 MPP_VAR_FUNCTION(0x3, "tdm", "fsync", V_MV78230_PLUS),
187 MPP_VAR_FUNCTION(0x4, "lcd", "clk", V_MV78230_PLUS), 186 MPP_VAR_FUNCTION(0x4, "lcd", "clk", V_MV78230_PLUS)),
188 MPP_VAR_FUNCTION(0x5, "vdd", "cpu1-pd", V_MV78230_PLUS)),
189 MPP_MODE(27, 187 MPP_MODE(27,
190 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 188 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
191 MPP_VAR_FUNCTION(0x1, "ptp", "trig", V_MV78230_PLUS), 189 MPP_VAR_FUNCTION(0x1, "ptp", "trig", V_MV78230_PLUS),
@@ -200,8 +198,7 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
200 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 198 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
201 MPP_VAR_FUNCTION(0x1, "ptp", "clk", V_MV78230_PLUS), 199 MPP_VAR_FUNCTION(0x1, "ptp", "clk", V_MV78230_PLUS),
202 MPP_VAR_FUNCTION(0x3, "tdm", "int0", V_MV78230_PLUS), 200 MPP_VAR_FUNCTION(0x3, "tdm", "int0", V_MV78230_PLUS),
203 MPP_VAR_FUNCTION(0x4, "lcd", "ref-clk", V_MV78230_PLUS), 201 MPP_VAR_FUNCTION(0x4, "lcd", "ref-clk", V_MV78230_PLUS)),
204 MPP_VAR_FUNCTION(0x5, "vdd", "cpu0-pd", V_MV78230_PLUS)),
205 MPP_MODE(30, 202 MPP_MODE(30,
206 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 203 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
207 MPP_VAR_FUNCTION(0x1, "sd0", "clk", V_MV78230_PLUS), 204 MPP_VAR_FUNCTION(0x1, "sd0", "clk", V_MV78230_PLUS),
@@ -209,23 +206,23 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
209 MPP_MODE(31, 206 MPP_MODE(31,
210 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 207 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
211 MPP_VAR_FUNCTION(0x1, "sd0", "cmd", V_MV78230_PLUS), 208 MPP_VAR_FUNCTION(0x1, "sd0", "cmd", V_MV78230_PLUS),
212 MPP_VAR_FUNCTION(0x3, "tdm", "int2", V_MV78230_PLUS), 209 MPP_VAR_FUNCTION(0x3, "tdm", "int2", V_MV78230_PLUS)),
213 MPP_VAR_FUNCTION(0x5, "vdd", "cpu0-pd", V_MV78230_PLUS)),
214 MPP_MODE(32, 210 MPP_MODE(32,
215 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 211 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
216 MPP_VAR_FUNCTION(0x1, "sd0", "d0", V_MV78230_PLUS), 212 MPP_VAR_FUNCTION(0x1, "sd0", "d0", V_MV78230_PLUS),
217 MPP_VAR_FUNCTION(0x3, "tdm", "int3", V_MV78230_PLUS), 213 MPP_VAR_FUNCTION(0x3, "tdm", "int3", V_MV78230_PLUS)),
218 MPP_VAR_FUNCTION(0x5, "vdd", "cpu1-pd", V_MV78230_PLUS)),
219 MPP_MODE(33, 214 MPP_MODE(33,
220 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 215 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
221 MPP_VAR_FUNCTION(0x1, "sd0", "d1", V_MV78230_PLUS), 216 MPP_VAR_FUNCTION(0x1, "sd0", "d1", V_MV78230_PLUS),
222 MPP_VAR_FUNCTION(0x3, "tdm", "int4", V_MV78230_PLUS), 217 MPP_VAR_FUNCTION(0x3, "tdm", "int4", V_MV78230_PLUS),
223 MPP_VAR_FUNCTION(0x4, "mem", "bat", V_MV78230_PLUS)), 218 MPP_VAR_FUNCTION(0x4, "dram", "bat", V_MV78230_PLUS),
219 MPP_VAR_FUNCTION(0x5, "dram", "vttctrl", V_MV78230_PLUS)),
224 MPP_MODE(34, 220 MPP_MODE(34,
225 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 221 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
226 MPP_VAR_FUNCTION(0x1, "sd0", "d2", V_MV78230_PLUS), 222 MPP_VAR_FUNCTION(0x1, "sd0", "d2", V_MV78230_PLUS),
227 MPP_VAR_FUNCTION(0x2, "sata0", "prsnt", V_MV78230_PLUS), 223 MPP_VAR_FUNCTION(0x2, "sata0", "prsnt", V_MV78230_PLUS),
228 MPP_VAR_FUNCTION(0x3, "tdm", "int5", V_MV78230_PLUS)), 224 MPP_VAR_FUNCTION(0x3, "tdm", "int5", V_MV78230_PLUS),
225 MPP_VAR_FUNCTION(0x4, "dram", "deccerr", V_MV78230_PLUS)),
229 MPP_MODE(35, 226 MPP_MODE(35,
230 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 227 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
231 MPP_VAR_FUNCTION(0x1, "sd0", "d3", V_MV78230_PLUS), 228 MPP_VAR_FUNCTION(0x1, "sd0", "d3", V_MV78230_PLUS),
@@ -233,74 +230,80 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
233 MPP_VAR_FUNCTION(0x3, "tdm", "int6", V_MV78230_PLUS)), 230 MPP_VAR_FUNCTION(0x3, "tdm", "int6", V_MV78230_PLUS)),
234 MPP_MODE(36, 231 MPP_MODE(36,
235 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 232 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
236 MPP_VAR_FUNCTION(0x1, "spi", "mosi", V_MV78230_PLUS)), 233 MPP_VAR_FUNCTION(0x1, "spi0", "mosi", V_MV78230_PLUS)),
237 MPP_MODE(37, 234 MPP_MODE(37,
238 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 235 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
239 MPP_VAR_FUNCTION(0x1, "spi", "miso", V_MV78230_PLUS)), 236 MPP_VAR_FUNCTION(0x1, "spi0", "miso", V_MV78230_PLUS)),
240 MPP_MODE(38, 237 MPP_MODE(38,
241 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 238 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
242 MPP_VAR_FUNCTION(0x1, "spi", "sck", V_MV78230_PLUS)), 239 MPP_VAR_FUNCTION(0x1, "spi0", "sck", V_MV78230_PLUS)),
243 MPP_MODE(39, 240 MPP_MODE(39,
244 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 241 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
245 MPP_VAR_FUNCTION(0x1, "spi", "cs0", V_MV78230_PLUS)), 242 MPP_VAR_FUNCTION(0x1, "spi0", "cs0", V_MV78230_PLUS)),
246 MPP_MODE(40, 243 MPP_MODE(40,
247 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 244 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
248 MPP_VAR_FUNCTION(0x1, "spi", "cs1", V_MV78230_PLUS), 245 MPP_VAR_FUNCTION(0x1, "spi0", "cs1", V_MV78230_PLUS),
249 MPP_VAR_FUNCTION(0x2, "uart2", "cts", V_MV78230_PLUS), 246 MPP_VAR_FUNCTION(0x2, "uart2", "cts", V_MV78230_PLUS),
250 MPP_VAR_FUNCTION(0x3, "vdd", "cpu1-pd", V_MV78230_PLUS),
251 MPP_VAR_FUNCTION(0x4, "lcd", "vga-hsync", V_MV78230_PLUS), 247 MPP_VAR_FUNCTION(0x4, "lcd", "vga-hsync", V_MV78230_PLUS),
252 MPP_VAR_FUNCTION(0x5, "pcie", "clkreq0", V_MV78230_PLUS)), 248 MPP_VAR_FUNCTION(0x5, "pcie", "clkreq0", V_MV78230_PLUS),
249 MPP_VAR_FUNCTION(0x6, "spi1", "cs1", V_MV78230_PLUS)),
253 MPP_MODE(41, 250 MPP_MODE(41,
254 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 251 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
255 MPP_VAR_FUNCTION(0x1, "spi", "cs2", V_MV78230_PLUS), 252 MPP_VAR_FUNCTION(0x1, "spi0", "cs2", V_MV78230_PLUS),
256 MPP_VAR_FUNCTION(0x2, "uart2", "rts", V_MV78230_PLUS), 253 MPP_VAR_FUNCTION(0x2, "uart2", "rts", V_MV78230_PLUS),
257 MPP_VAR_FUNCTION(0x3, "sata1", "prsnt", V_MV78230_PLUS), 254 MPP_VAR_FUNCTION(0x3, "sata1", "prsnt", V_MV78230_PLUS),
258 MPP_VAR_FUNCTION(0x4, "lcd", "vga-vsync", V_MV78230_PLUS), 255 MPP_VAR_FUNCTION(0x4, "lcd", "vga-vsync", V_MV78230_PLUS),
259 MPP_VAR_FUNCTION(0x5, "pcie", "clkreq1", V_MV78230_PLUS)), 256 MPP_VAR_FUNCTION(0x5, "pcie", "clkreq1", V_MV78230_PLUS),
257 MPP_VAR_FUNCTION(0x6, "spi1", "cs2", V_MV78230_PLUS)),
260 MPP_MODE(42, 258 MPP_MODE(42,
261 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 259 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
262 MPP_VAR_FUNCTION(0x1, "uart2", "rxd", V_MV78230_PLUS), 260 MPP_VAR_FUNCTION(0x1, "uart2", "rxd", V_MV78230_PLUS),
263 MPP_VAR_FUNCTION(0x2, "uart0", "cts", V_MV78230_PLUS), 261 MPP_VAR_FUNCTION(0x2, "uart0", "cts", V_MV78230_PLUS),
264 MPP_VAR_FUNCTION(0x3, "tdm", "int7", V_MV78230_PLUS), 262 MPP_VAR_FUNCTION(0x3, "tdm", "int7", V_MV78230_PLUS),
265 MPP_VAR_FUNCTION(0x4, "tdm-1", "timer", V_MV78230_PLUS), 263 MPP_VAR_FUNCTION(0x4, "tdm", "timer", V_MV78230_PLUS)),
266 MPP_VAR_FUNCTION(0x5, "vdd", "cpu0-pd", V_MV78230_PLUS)),
267 MPP_MODE(43, 264 MPP_MODE(43,
268 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 265 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
269 MPP_VAR_FUNCTION(0x1, "uart2", "txd", V_MV78230_PLUS), 266 MPP_VAR_FUNCTION(0x1, "uart2", "txd", V_MV78230_PLUS),
270 MPP_VAR_FUNCTION(0x2, "uart0", "rts", V_MV78230_PLUS), 267 MPP_VAR_FUNCTION(0x2, "uart0", "rts", V_MV78230_PLUS),
271 MPP_VAR_FUNCTION(0x3, "spi", "cs3", V_MV78230_PLUS), 268 MPP_VAR_FUNCTION(0x3, "spi0", "cs3", V_MV78230_PLUS),
272 MPP_VAR_FUNCTION(0x4, "pcie", "rstout", V_MV78230_PLUS), 269 MPP_VAR_FUNCTION(0x4, "pcie", "rstout", V_MV78230_PLUS),
273 MPP_VAR_FUNCTION(0x5, "vdd", "cpu2-3-pd", V_MV78460)), 270 MPP_VAR_FUNCTION(0x6, "spi1", "cs3", V_MV78230_PLUS)),
274 MPP_MODE(44, 271 MPP_MODE(44,
275 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 272 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
276 MPP_VAR_FUNCTION(0x1, "uart2", "cts", V_MV78230_PLUS), 273 MPP_VAR_FUNCTION(0x1, "uart2", "cts", V_MV78230_PLUS),
277 MPP_VAR_FUNCTION(0x2, "uart3", "rxd", V_MV78230_PLUS), 274 MPP_VAR_FUNCTION(0x2, "uart3", "rxd", V_MV78230_PLUS),
278 MPP_VAR_FUNCTION(0x3, "spi", "cs4", V_MV78230_PLUS), 275 MPP_VAR_FUNCTION(0x3, "spi0", "cs4", V_MV78230_PLUS),
279 MPP_VAR_FUNCTION(0x4, "mem", "bat", V_MV78230_PLUS), 276 MPP_VAR_FUNCTION(0x4, "dram", "bat", V_MV78230_PLUS),
280 MPP_VAR_FUNCTION(0x5, "pcie", "clkreq2", V_MV78230_PLUS)), 277 MPP_VAR_FUNCTION(0x5, "pcie", "clkreq2", V_MV78230_PLUS),
278 MPP_VAR_FUNCTION(0x6, "spi1", "cs4", V_MV78230_PLUS)),
281 MPP_MODE(45, 279 MPP_MODE(45,
282 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 280 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
283 MPP_VAR_FUNCTION(0x1, "uart2", "rts", V_MV78230_PLUS), 281 MPP_VAR_FUNCTION(0x1, "uart2", "rts", V_MV78230_PLUS),
284 MPP_VAR_FUNCTION(0x2, "uart3", "txd", V_MV78230_PLUS), 282 MPP_VAR_FUNCTION(0x2, "uart3", "txd", V_MV78230_PLUS),
285 MPP_VAR_FUNCTION(0x3, "spi", "cs5", V_MV78230_PLUS), 283 MPP_VAR_FUNCTION(0x3, "spi0", "cs5", V_MV78230_PLUS),
286 MPP_VAR_FUNCTION(0x4, "sata1", "prsnt", V_MV78230_PLUS)), 284 MPP_VAR_FUNCTION(0x4, "sata1", "prsnt", V_MV78230_PLUS),
285 MPP_VAR_FUNCTION(0x5, "dram", "vttctrl", V_MV78230_PLUS),
286 MPP_VAR_FUNCTION(0x6, "spi1", "cs5", V_MV78230_PLUS)),
287 MPP_MODE(46, 287 MPP_MODE(46,
288 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 288 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
289 MPP_VAR_FUNCTION(0x1, "uart3", "rts", V_MV78230_PLUS), 289 MPP_VAR_FUNCTION(0x1, "uart3", "rts", V_MV78230_PLUS),
290 MPP_VAR_FUNCTION(0x2, "uart1", "rts", V_MV78230_PLUS), 290 MPP_VAR_FUNCTION(0x2, "uart1", "rts", V_MV78230_PLUS),
291 MPP_VAR_FUNCTION(0x3, "spi", "cs6", V_MV78230_PLUS), 291 MPP_VAR_FUNCTION(0x3, "spi0", "cs6", V_MV78230_PLUS),
292 MPP_VAR_FUNCTION(0x4, "sata0", "prsnt", V_MV78230_PLUS)), 292 MPP_VAR_FUNCTION(0x4, "sata0", "prsnt", V_MV78230_PLUS),
293 MPP_VAR_FUNCTION(0x6, "spi1", "cs6", V_MV78230_PLUS)),
293 MPP_MODE(47, 294 MPP_MODE(47,
294 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 295 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
295 MPP_VAR_FUNCTION(0x1, "uart3", "cts", V_MV78230_PLUS), 296 MPP_VAR_FUNCTION(0x1, "uart3", "cts", V_MV78230_PLUS),
296 MPP_VAR_FUNCTION(0x2, "uart1", "cts", V_MV78230_PLUS), 297 MPP_VAR_FUNCTION(0x2, "uart1", "cts", V_MV78230_PLUS),
297 MPP_VAR_FUNCTION(0x3, "spi", "cs7", V_MV78230_PLUS), 298 MPP_VAR_FUNCTION(0x3, "spi0", "cs7", V_MV78230_PLUS),
298 MPP_VAR_FUNCTION(0x4, "ref", "clkout", V_MV78230_PLUS), 299 MPP_VAR_FUNCTION(0x4, "ref", "clkout", V_MV78230_PLUS),
299 MPP_VAR_FUNCTION(0x5, "pcie", "clkreq3", V_MV78230_PLUS)), 300 MPP_VAR_FUNCTION(0x5, "pcie", "clkreq3", V_MV78230_PLUS),
301 MPP_VAR_FUNCTION(0x6, "spi1", "cs7", V_MV78230_PLUS)),
300 MPP_MODE(48, 302 MPP_MODE(48,
301 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS), 303 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78230_PLUS),
302 MPP_VAR_FUNCTION(0x1, "tclk", NULL, V_MV78230_PLUS), 304 MPP_VAR_FUNCTION(0x1, "dev", "clkout", V_MV78230_PLUS),
303 MPP_VAR_FUNCTION(0x2, "dev", "burst/last", V_MV78230_PLUS)), 305 MPP_VAR_FUNCTION(0x2, "dev", "burst/last", V_MV78230_PLUS),
306 MPP_VAR_FUNCTION(0x3, "nand", "rb", V_MV78230_PLUS)),
304 MPP_MODE(49, 307 MPP_MODE(49,
305 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS), 308 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS),
306 MPP_VAR_FUNCTION(0x1, "dev", "we3", V_MV78260_PLUS)), 309 MPP_VAR_FUNCTION(0x1, "dev", "we3", V_MV78260_PLUS)),
@@ -321,16 +324,13 @@ static struct mvebu_mpp_mode armada_xp_mpp_modes[] = {
321 MPP_VAR_FUNCTION(0x1, "dev", "ad19", V_MV78260_PLUS)), 324 MPP_VAR_FUNCTION(0x1, "dev", "ad19", V_MV78260_PLUS)),
322 MPP_MODE(55, 325 MPP_MODE(55,
323 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS), 326 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS),
324 MPP_VAR_FUNCTION(0x1, "dev", "ad20", V_MV78260_PLUS), 327 MPP_VAR_FUNCTION(0x1, "dev", "ad20", V_MV78260_PLUS)),
325 MPP_VAR_FUNCTION(0x2, "vdd", "cpu0-pd", V_MV78260_PLUS)),
326 MPP_MODE(56, 328 MPP_MODE(56,
327 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS), 329 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS),
328 MPP_VAR_FUNCTION(0x1, "dev", "ad21", V_MV78260_PLUS), 330 MPP_VAR_FUNCTION(0x1, "dev", "ad21", V_MV78260_PLUS)),
329 MPP_VAR_FUNCTION(0x2, "vdd", "cpu1-pd", V_MV78260_PLUS)),
330 MPP_MODE(57, 331 MPP_MODE(57,
331 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS), 332 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS),
332 MPP_VAR_FUNCTION(0x1, "dev", "ad22", V_MV78260_PLUS), 333 MPP_VAR_FUNCTION(0x1, "dev", "ad22", V_MV78260_PLUS)),
333 MPP_VAR_FUNCTION(0x2, "vdd", "cpu2-3-pd", V_MV78460)),
334 MPP_MODE(58, 334 MPP_MODE(58,
335 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS), 335 MPP_VAR_FUNCTION(0x0, "gpio", NULL, V_MV78260_PLUS),
336 MPP_VAR_FUNCTION(0x1, "dev", "ad23", V_MV78260_PLUS)), 336 MPP_VAR_FUNCTION(0x1, "dev", "ad23", V_MV78260_PLUS)),
diff --git a/drivers/pinctrl/mvebu/pinctrl-mvebu.c b/drivers/pinctrl/mvebu/pinctrl-mvebu.c
index f3b426cdaf8f..77d2221d379d 100644
--- a/drivers/pinctrl/mvebu/pinctrl-mvebu.c
+++ b/drivers/pinctrl/mvebu/pinctrl-mvebu.c
@@ -706,9 +706,9 @@ int mvebu_pinctrl_probe(struct platform_device *pdev)
706 } 706 }
707 707
708 pctl->pctldev = pinctrl_register(&pctl->desc, &pdev->dev, pctl); 708 pctl->pctldev = pinctrl_register(&pctl->desc, &pdev->dev, pctl);
709 if (!pctl->pctldev) { 709 if (IS_ERR(pctl->pctldev)) {
710 dev_err(&pdev->dev, "unable to register pinctrl driver\n"); 710 dev_err(&pdev->dev, "unable to register pinctrl driver\n");
711 return -EINVAL; 711 return PTR_ERR(pctl->pctldev);
712 } 712 }
713 713
714 dev_info(&pdev->dev, "registered pinctrl driver\n"); 714 dev_info(&pdev->dev, "registered pinctrl driver\n");
diff --git a/drivers/pinctrl/nomadik/pinctrl-ab8505.c b/drivers/pinctrl/nomadik/pinctrl-ab8505.c
index bf0ef4ac376f..42c6e1f7886b 100644
--- a/drivers/pinctrl/nomadik/pinctrl-ab8505.c
+++ b/drivers/pinctrl/nomadik/pinctrl-ab8505.c
@@ -286,7 +286,7 @@ alternate_functions ab8505_alternate_functions[AB8505_GPIO_MAX_NUMBER + 1] = {
286 ALTERNATE_FUNCTIONS(9, UNUSED, UNUSED, UNUSED, 0, 0, 0), /* no GPIO9, bit 0 reserved */ 286 ALTERNATE_FUNCTIONS(9, UNUSED, UNUSED, UNUSED, 0, 0, 0), /* no GPIO9, bit 0 reserved */
287 ALTERNATE_FUNCTIONS(10, 1, 0, UNUSED, 1, 0, 0), /* GPIO10, altA and altB controlled by bit 0 */ 287 ALTERNATE_FUNCTIONS(10, 1, 0, UNUSED, 1, 0, 0), /* GPIO10, altA and altB controlled by bit 0 */
288 ALTERNATE_FUNCTIONS(11, 2, 1, UNUSED, 0, 0, 0), /* GPIO11, altA controlled by bit 2 */ 288 ALTERNATE_FUNCTIONS(11, 2, 1, UNUSED, 0, 0, 0), /* GPIO11, altA controlled by bit 2 */
289 ALTERNATE_FUNCTIONS(12, UNUSED, UNUSED, UNUSED, 0, 0, 0), /* no GPIO12, bit3 reseved */ 289 ALTERNATE_FUNCTIONS(12, UNUSED, UNUSED, UNUSED, 0, 0, 0), /* no GPIO12, bit3 reserved */
290 ALTERNATE_FUNCTIONS(13, 4, 3, 4, 1, 0, 2), /* GPIO13, altA altB and altC controlled by bit 3 and 4 */ 290 ALTERNATE_FUNCTIONS(13, 4, 3, 4, 1, 0, 2), /* GPIO13, altA altB and altC controlled by bit 3 and 4 */
291 ALTERNATE_FUNCTIONS(14, 5, UNUSED, UNUSED, 0, 0, 0), /* GPIO14, altA controlled by bit 5 */ 291 ALTERNATE_FUNCTIONS(14, 5, UNUSED, UNUSED, 0, 0, 0), /* GPIO14, altA controlled by bit 5 */
292 ALTERNATE_FUNCTIONS(15, UNUSED, UNUSED, UNUSED, 0, 0, 0), /* no GPIO15, bit 6 reserved */ 292 ALTERNATE_FUNCTIONS(15, UNUSED, UNUSED, UNUSED, 0, 0, 0), /* no GPIO15, bit 6 reserved */
diff --git a/drivers/pinctrl/nomadik/pinctrl-abx500.c b/drivers/pinctrl/nomadik/pinctrl-abx500.c
index 23db4c9ac76c..557d0f2a3031 100644
--- a/drivers/pinctrl/nomadik/pinctrl-abx500.c
+++ b/drivers/pinctrl/nomadik/pinctrl-abx500.c
@@ -787,6 +787,7 @@ static const struct pinmux_ops abx500_pinmux_ops = {
787 .set_mux = abx500_pmx_set, 787 .set_mux = abx500_pmx_set,
788 .gpio_request_enable = abx500_gpio_request_enable, 788 .gpio_request_enable = abx500_gpio_request_enable,
789 .gpio_disable_free = abx500_gpio_disable_free, 789 .gpio_disable_free = abx500_gpio_disable_free,
790 .strict = true,
790}; 791};
791 792
792static int abx500_get_groups_cnt(struct pinctrl_dev *pctldev) 793static int abx500_get_groups_cnt(struct pinctrl_dev *pctldev)
@@ -1234,10 +1235,10 @@ static int abx500_gpio_probe(struct platform_device *pdev)
1234 abx500_pinctrl_desc.pins = pct->soc->pins; 1235 abx500_pinctrl_desc.pins = pct->soc->pins;
1235 abx500_pinctrl_desc.npins = pct->soc->npins; 1236 abx500_pinctrl_desc.npins = pct->soc->npins;
1236 pct->pctldev = pinctrl_register(&abx500_pinctrl_desc, &pdev->dev, pct); 1237 pct->pctldev = pinctrl_register(&abx500_pinctrl_desc, &pdev->dev, pct);
1237 if (!pct->pctldev) { 1238 if (IS_ERR(pct->pctldev)) {
1238 dev_err(&pdev->dev, 1239 dev_err(&pdev->dev,
1239 "could not register abx500 pinctrl driver\n"); 1240 "could not register abx500 pinctrl driver\n");
1240 ret = -EINVAL; 1241 ret = PTR_ERR(pct->pctldev);
1241 goto out_rem_chip; 1242 goto out_rem_chip;
1242 } 1243 }
1243 dev_info(&pdev->dev, "registered pin controller\n"); 1244 dev_info(&pdev->dev, "registered pin controller\n");
diff --git a/drivers/pinctrl/nomadik/pinctrl-nomadik.c b/drivers/pinctrl/nomadik/pinctrl-nomadik.c
index a6a22054c0ba..809d88445db5 100644
--- a/drivers/pinctrl/nomadik/pinctrl-nomadik.c
+++ b/drivers/pinctrl/nomadik/pinctrl-nomadik.c
@@ -246,6 +246,7 @@ enum nmk_gpio_slpm {
246 246
247struct nmk_gpio_chip { 247struct nmk_gpio_chip {
248 struct gpio_chip chip; 248 struct gpio_chip chip;
249 struct irq_chip irqchip;
249 void __iomem *addr; 250 void __iomem *addr;
250 struct clk *clk; 251 struct clk *clk;
251 unsigned int bank; 252 unsigned int bank;
@@ -842,18 +843,6 @@ static void nmk_gpio_irq_shutdown(struct irq_data *d)
842 clk_disable(nmk_chip->clk); 843 clk_disable(nmk_chip->clk);
843} 844}
844 845
845static struct irq_chip nmk_gpio_irq_chip = {
846 .name = "Nomadik-GPIO",
847 .irq_ack = nmk_gpio_irq_ack,
848 .irq_mask = nmk_gpio_irq_mask,
849 .irq_unmask = nmk_gpio_irq_unmask,
850 .irq_set_type = nmk_gpio_irq_set_type,
851 .irq_set_wake = nmk_gpio_irq_set_wake,
852 .irq_startup = nmk_gpio_irq_startup,
853 .irq_shutdown = nmk_gpio_irq_shutdown,
854 .flags = IRQCHIP_MASK_ON_SUSPEND,
855};
856
857static void __nmk_gpio_irq_handler(unsigned int irq, struct irq_desc *desc, 846static void __nmk_gpio_irq_handler(unsigned int irq, struct irq_desc *desc,
858 u32 status) 847 u32 status)
859{ 848{
@@ -1077,18 +1066,6 @@ static inline void nmk_gpio_dbg_show_one(struct seq_file *s,
1077#define nmk_gpio_dbg_show NULL 1066#define nmk_gpio_dbg_show NULL
1078#endif 1067#endif
1079 1068
1080/* This structure is replicated for each GPIO block allocated at probe time */
1081static struct gpio_chip nmk_gpio_template = {
1082 .request = nmk_gpio_request,
1083 .free = nmk_gpio_free,
1084 .direction_input = nmk_gpio_make_input,
1085 .get = nmk_gpio_get_input,
1086 .direction_output = nmk_gpio_make_output,
1087 .set = nmk_gpio_set_output,
1088 .dbg_show = nmk_gpio_dbg_show,
1089 .can_sleep = false,
1090};
1091
1092void nmk_gpio_clocks_enable(void) 1069void nmk_gpio_clocks_enable(void)
1093{ 1070{
1094 int i; 1071 int i;
@@ -1190,6 +1167,7 @@ static int nmk_gpio_probe(struct platform_device *dev)
1190 struct device_node *np = dev->dev.of_node; 1167 struct device_node *np = dev->dev.of_node;
1191 struct nmk_gpio_chip *nmk_chip; 1168 struct nmk_gpio_chip *nmk_chip;
1192 struct gpio_chip *chip; 1169 struct gpio_chip *chip;
1170 struct irq_chip *irqchip;
1193 struct resource *res; 1171 struct resource *res;
1194 struct clk *clk; 1172 struct clk *clk;
1195 int latent_irq; 1173 int latent_irq;
@@ -1236,19 +1214,40 @@ static int nmk_gpio_probe(struct platform_device *dev)
1236 nmk_chip->bank = dev->id; 1214 nmk_chip->bank = dev->id;
1237 nmk_chip->clk = clk; 1215 nmk_chip->clk = clk;
1238 nmk_chip->addr = base; 1216 nmk_chip->addr = base;
1239 nmk_chip->chip = nmk_gpio_template;
1240 nmk_chip->parent_irq = irq; 1217 nmk_chip->parent_irq = irq;
1241 nmk_chip->latent_parent_irq = latent_irq; 1218 nmk_chip->latent_parent_irq = latent_irq;
1242 nmk_chip->sleepmode = supports_sleepmode; 1219 nmk_chip->sleepmode = supports_sleepmode;
1243 spin_lock_init(&nmk_chip->lock); 1220 spin_lock_init(&nmk_chip->lock);
1244 1221
1245 chip = &nmk_chip->chip; 1222 chip = &nmk_chip->chip;
1223 chip->request = nmk_gpio_request;
1224 chip->free = nmk_gpio_free;
1225 chip->direction_input = nmk_gpio_make_input;
1226 chip->get = nmk_gpio_get_input;
1227 chip->direction_output = nmk_gpio_make_output;
1228 chip->set = nmk_gpio_set_output;
1229 chip->dbg_show = nmk_gpio_dbg_show;
1230 chip->can_sleep = false;
1246 chip->base = dev->id * NMK_GPIO_PER_CHIP; 1231 chip->base = dev->id * NMK_GPIO_PER_CHIP;
1247 chip->ngpio = NMK_GPIO_PER_CHIP; 1232 chip->ngpio = NMK_GPIO_PER_CHIP;
1248 chip->label = dev_name(&dev->dev); 1233 chip->label = dev_name(&dev->dev);
1249 chip->dev = &dev->dev; 1234 chip->dev = &dev->dev;
1250 chip->owner = THIS_MODULE; 1235 chip->owner = THIS_MODULE;
1251 1236
1237 irqchip = &nmk_chip->irqchip;
1238 irqchip->irq_ack = nmk_gpio_irq_ack;
1239 irqchip->irq_mask = nmk_gpio_irq_mask;
1240 irqchip->irq_unmask = nmk_gpio_irq_unmask;
1241 irqchip->irq_set_type = nmk_gpio_irq_set_type;
1242 irqchip->irq_set_wake = nmk_gpio_irq_set_wake;
1243 irqchip->irq_startup = nmk_gpio_irq_startup;
1244 irqchip->irq_shutdown = nmk_gpio_irq_shutdown;
1245 irqchip->flags = IRQCHIP_MASK_ON_SUSPEND;
1246 irqchip->name = kasprintf(GFP_KERNEL, "nmk%u-%u-%u",
1247 dev->id,
1248 chip->base,
1249 chip->base + chip->ngpio - 1);
1250
1252 clk_enable(nmk_chip->clk); 1251 clk_enable(nmk_chip->clk);
1253 nmk_chip->lowemi = readl_relaxed(nmk_chip->addr + NMK_GPIO_LOWEMI); 1252 nmk_chip->lowemi = readl_relaxed(nmk_chip->addr + NMK_GPIO_LOWEMI);
1254 clk_disable(nmk_chip->clk); 1253 clk_disable(nmk_chip->clk);
@@ -1269,8 +1268,8 @@ static int nmk_gpio_probe(struct platform_device *dev)
1269 * handler will perform the actual work of handling the parent 1268 * handler will perform the actual work of handling the parent
1270 * interrupt. 1269 * interrupt.
1271 */ 1270 */
1272 ret = gpiochip_irqchip_add(&nmk_chip->chip, 1271 ret = gpiochip_irqchip_add(chip,
1273 &nmk_gpio_irq_chip, 1272 irqchip,
1274 0, 1273 0,
1275 handle_edge_irq, 1274 handle_edge_irq,
1276 IRQ_TYPE_EDGE_FALLING); 1275 IRQ_TYPE_EDGE_FALLING);
@@ -1280,13 +1279,13 @@ static int nmk_gpio_probe(struct platform_device *dev)
1280 return -ENODEV; 1279 return -ENODEV;
1281 } 1280 }
1282 /* Then register the chain on the parent IRQ */ 1281 /* Then register the chain on the parent IRQ */
1283 gpiochip_set_chained_irqchip(&nmk_chip->chip, 1282 gpiochip_set_chained_irqchip(chip,
1284 &nmk_gpio_irq_chip, 1283 irqchip,
1285 nmk_chip->parent_irq, 1284 nmk_chip->parent_irq,
1286 nmk_gpio_irq_handler); 1285 nmk_gpio_irq_handler);
1287 if (nmk_chip->latent_parent_irq > 0) 1286 if (nmk_chip->latent_parent_irq > 0)
1288 gpiochip_set_chained_irqchip(&nmk_chip->chip, 1287 gpiochip_set_chained_irqchip(chip,
1289 &nmk_gpio_irq_chip, 1288 irqchip,
1290 nmk_chip->latent_parent_irq, 1289 nmk_chip->latent_parent_irq,
1291 nmk_gpio_latent_irq_handler); 1290 nmk_gpio_latent_irq_handler);
1292 1291
@@ -1803,6 +1802,7 @@ static const struct pinmux_ops nmk_pinmux_ops = {
1803 .set_mux = nmk_pmx_set, 1802 .set_mux = nmk_pmx_set,
1804 .gpio_request_enable = nmk_gpio_request_enable, 1803 .gpio_request_enable = nmk_gpio_request_enable,
1805 .gpio_disable_free = nmk_gpio_disable_free, 1804 .gpio_disable_free = nmk_gpio_disable_free,
1805 .strict = true,
1806}; 1806};
1807 1807
1808static int nmk_pin_config_get(struct pinctrl_dev *pctldev, unsigned pin, 1808static int nmk_pin_config_get(struct pinctrl_dev *pctldev, unsigned pin,
@@ -2029,9 +2029,9 @@ static int nmk_pinctrl_probe(struct platform_device *pdev)
2029 npct->dev = &pdev->dev; 2029 npct->dev = &pdev->dev;
2030 2030
2031 npct->pctl = pinctrl_register(&nmk_pinctrl_desc, &pdev->dev, npct); 2031 npct->pctl = pinctrl_register(&nmk_pinctrl_desc, &pdev->dev, npct);
2032 if (!npct->pctl) { 2032 if (IS_ERR(npct->pctl)) {
2033 dev_err(&pdev->dev, "could not register Nomadik pinctrl driver\n"); 2033 dev_err(&pdev->dev, "could not register Nomadik pinctrl driver\n");
2034 return -EINVAL; 2034 return PTR_ERR(npct->pctl);
2035 } 2035 }
2036 2036
2037 /* We will handle a range of GPIO pins */ 2037 /* We will handle a range of GPIO pins */
diff --git a/drivers/pinctrl/pinctrl-adi2.c b/drivers/pinctrl/pinctrl-adi2.c
index 8434439c5017..873433da0f2c 100644
--- a/drivers/pinctrl/pinctrl-adi2.c
+++ b/drivers/pinctrl/pinctrl-adi2.c
@@ -703,6 +703,7 @@ static struct pinmux_ops adi_pinmux_ops = {
703 .get_function_name = adi_pinmux_get_func_name, 703 .get_function_name = adi_pinmux_get_func_name,
704 .get_function_groups = adi_pinmux_get_groups, 704 .get_function_groups = adi_pinmux_get_groups,
705 .gpio_request_enable = adi_pinmux_request_gpio, 705 .gpio_request_enable = adi_pinmux_request_gpio,
706 .strict = true,
706}; 707};
707 708
708 709
@@ -1069,9 +1070,9 @@ static int adi_pinctrl_probe(struct platform_device *pdev)
1069 1070
1070 /* Now register the pin controller and all pins it handles */ 1071 /* Now register the pin controller and all pins it handles */
1071 pinctrl->pctl = pinctrl_register(&adi_pinmux_desc, &pdev->dev, pinctrl); 1072 pinctrl->pctl = pinctrl_register(&adi_pinmux_desc, &pdev->dev, pinctrl);
1072 if (!pinctrl->pctl) { 1073 if (IS_ERR(pinctrl->pctl)) {
1073 dev_err(&pdev->dev, "could not register pinctrl ADI2 driver\n"); 1074 dev_err(&pdev->dev, "could not register pinctrl ADI2 driver\n");
1074 return -EINVAL; 1075 return PTR_ERR(pinctrl->pctl);
1075 } 1076 }
1076 1077
1077 platform_set_drvdata(pdev, pinctrl); 1078 platform_set_drvdata(pdev, pinctrl);
diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c
index 7de3b64bf142..d8e3f7c7fea3 100644
--- a/drivers/pinctrl/pinctrl-amd.c
+++ b/drivers/pinctrl/pinctrl-amd.c
@@ -789,9 +789,9 @@ static int amd_gpio_probe(struct platform_device *pdev)
789 amd_pinctrl_desc.name = dev_name(&pdev->dev); 789 amd_pinctrl_desc.name = dev_name(&pdev->dev);
790 gpio_dev->pctrl = pinctrl_register(&amd_pinctrl_desc, 790 gpio_dev->pctrl = pinctrl_register(&amd_pinctrl_desc,
791 &pdev->dev, gpio_dev); 791 &pdev->dev, gpio_dev);
792 if (!gpio_dev->pctrl) { 792 if (IS_ERR(gpio_dev->pctrl)) {
793 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n"); 793 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
794 return -ENODEV; 794 return PTR_ERR(gpio_dev->pctrl);
795 } 795 }
796 796
797 ret = gpiochip_add(&gpio_dev->gc); 797 ret = gpiochip_add(&gpio_dev->gc);
@@ -855,7 +855,6 @@ MODULE_DEVICE_TABLE(acpi, amd_gpio_acpi_match);
855static struct platform_driver amd_gpio_driver = { 855static struct platform_driver amd_gpio_driver = {
856 .driver = { 856 .driver = {
857 .name = "amd_gpio", 857 .name = "amd_gpio",
858 .owner = THIS_MODULE,
859 .acpi_match_table = ACPI_PTR(amd_gpio_acpi_match), 858 .acpi_match_table = ACPI_PTR(amd_gpio_acpi_match),
860 }, 859 },
861 .probe = amd_gpio_probe, 860 .probe = amd_gpio_probe,
diff --git a/drivers/pinctrl/pinctrl-as3722.c b/drivers/pinctrl/pinctrl-as3722.c
index db0571ffbe99..4747e08f5389 100644
--- a/drivers/pinctrl/pinctrl-as3722.c
+++ b/drivers/pinctrl/pinctrl-as3722.c
@@ -586,9 +586,9 @@ static int as3722_pinctrl_probe(struct platform_device *pdev)
586 as3722_pinctrl_desc.npins = ARRAY_SIZE(as3722_pins_desc); 586 as3722_pinctrl_desc.npins = ARRAY_SIZE(as3722_pins_desc);
587 as_pci->pctl = pinctrl_register(&as3722_pinctrl_desc, 587 as_pci->pctl = pinctrl_register(&as3722_pinctrl_desc,
588 &pdev->dev, as_pci); 588 &pdev->dev, as_pci);
589 if (!as_pci->pctl) { 589 if (IS_ERR(as_pci->pctl)) {
590 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n"); 590 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
591 return -EINVAL; 591 return PTR_ERR(as_pci->pctl);
592 } 592 }
593 593
594 as_pci->gpio_chip = as3722_gpio_chip; 594 as_pci->gpio_chip = as3722_gpio_chip;
diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c
index 2f797cb7e205..a0824477072b 100644
--- a/drivers/pinctrl/pinctrl-at91.c
+++ b/drivers/pinctrl/pinctrl-at91.c
@@ -1238,9 +1238,9 @@ static int at91_pinctrl_probe(struct platform_device *pdev)
1238 platform_set_drvdata(pdev, info); 1238 platform_set_drvdata(pdev, info);
1239 info->pctl = pinctrl_register(&at91_pinctrl_desc, &pdev->dev, info); 1239 info->pctl = pinctrl_register(&at91_pinctrl_desc, &pdev->dev, info);
1240 1240
1241 if (!info->pctl) { 1241 if (IS_ERR(info->pctl)) {
1242 dev_err(&pdev->dev, "could not register AT91 pinctrl driver\n"); 1242 dev_err(&pdev->dev, "could not register AT91 pinctrl driver\n");
1243 return -EINVAL; 1243 return PTR_ERR(info->pctl);
1244 } 1244 }
1245 1245
1246 /* We will handle a range of GPIO pins */ 1246 /* We will handle a range of GPIO pins */
@@ -1326,6 +1326,21 @@ static void at91_gpio_set(struct gpio_chip *chip, unsigned offset,
1326 writel_relaxed(mask, pio + (val ? PIO_SODR : PIO_CODR)); 1326 writel_relaxed(mask, pio + (val ? PIO_SODR : PIO_CODR));
1327} 1327}
1328 1328
1329static void at91_gpio_set_multiple(struct gpio_chip *chip,
1330 unsigned long *mask, unsigned long *bits)
1331{
1332 struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip);
1333 void __iomem *pio = at91_gpio->regbase;
1334
1335#define BITS_MASK(bits) (((bits) == 32) ? ~0U : (BIT(bits) - 1))
1336 /* Mask additionally to ngpio as not all GPIO controllers have 32 pins */
1337 uint32_t set_mask = (*mask & *bits) & BITS_MASK(chip->ngpio);
1338 uint32_t clear_mask = (*mask & ~(*bits)) & BITS_MASK(chip->ngpio);
1339
1340 writel_relaxed(set_mask, pio + PIO_SODR);
1341 writel_relaxed(clear_mask, pio + PIO_CODR);
1342}
1343
1329static int at91_gpio_direction_output(struct gpio_chip *chip, unsigned offset, 1344static int at91_gpio_direction_output(struct gpio_chip *chip, unsigned offset,
1330 int val) 1345 int val)
1331{ 1346{
@@ -1685,6 +1700,7 @@ static struct gpio_chip at91_gpio_template = {
1685 .get = at91_gpio_get, 1700 .get = at91_gpio_get,
1686 .direction_output = at91_gpio_direction_output, 1701 .direction_output = at91_gpio_direction_output,
1687 .set = at91_gpio_set, 1702 .set = at91_gpio_set,
1703 .set_multiple = at91_gpio_set_multiple,
1688 .dbg_show = at91_gpio_dbg_show, 1704 .dbg_show = at91_gpio_dbg_show,
1689 .can_sleep = false, 1705 .can_sleep = false,
1690 .ngpio = MAX_NB_GPIO_PER_BANK, 1706 .ngpio = MAX_NB_GPIO_PER_BANK,
diff --git a/drivers/pinctrl/pinctrl-lantiq.c b/drivers/pinctrl/pinctrl-lantiq.c
index 296e5b37f768..fc38a8540544 100644
--- a/drivers/pinctrl/pinctrl-lantiq.c
+++ b/drivers/pinctrl/pinctrl-lantiq.c
@@ -337,9 +337,9 @@ int ltq_pinctrl_register(struct platform_device *pdev,
337 info->dev = &pdev->dev; 337 info->dev = &pdev->dev;
338 338
339 info->pctrl = pinctrl_register(desc, &pdev->dev, info); 339 info->pctrl = pinctrl_register(desc, &pdev->dev, info);
340 if (!info->pctrl) { 340 if (IS_ERR(info->pctrl)) {
341 dev_err(&pdev->dev, "failed to register LTQ pinmux driver\n"); 341 dev_err(&pdev->dev, "failed to register LTQ pinmux driver\n");
342 return -EINVAL; 342 return PTR_ERR(info->pctrl);
343 } 343 }
344 platform_set_drvdata(pdev, info); 344 platform_set_drvdata(pdev, info);
345 return 0; 345 return 0;
diff --git a/drivers/pinctrl/pinctrl-lpc18xx.c b/drivers/pinctrl/pinctrl-lpc18xx.c
new file mode 100644
index 000000000000..ef0b697639a7
--- /dev/null
+++ b/drivers/pinctrl/pinctrl-lpc18xx.c
@@ -0,0 +1,1220 @@
1/*
2 * Pinctrl driver for NXP LPC18xx/LPC43xx System Control Unit (SCU)
3 *
4 * Copyright (C) 2015 Joachim Eastwood <manabian@gmail.com>
5 *
6 * This file is licensed under the terms of the GNU General Public
7 * License version 2. This program is licensed "as is" without any
8 * warranty of any kind, whether express or implied.
9 */
10
11#include <linux/bitops.h>
12#include <linux/clk.h>
13#include <linux/io.h>
14#include <linux/module.h>
15#include <linux/of.h>
16#include <linux/of_device.h>
17#include <linux/pinctrl/pinctrl.h>
18#include <linux/pinctrl/pinmux.h>
19#include <linux/pinctrl/pinconf-generic.h>
20
21#include "core.h"
22#include "pinctrl-utils.h"
23
24/* LPC18XX SCU analog function registers */
25#define LPC18XX_SCU_REG_ENAIO0 0xc88
26#define LPC18XX_SCU_REG_ENAIO1 0xc8c
27#define LPC18XX_SCU_REG_ENAIO2 0xc90
28#define LPC18XX_SCU_REG_ENAIO2_DAC BIT(0)
29
30/* LPC18XX SCU pin register definitions */
31#define LPC18XX_SCU_PIN_MODE_MASK 0x7
32#define LPC18XX_SCU_PIN_EPD BIT(3)
33#define LPC18XX_SCU_PIN_EPUN BIT(4)
34#define LPC18XX_SCU_PIN_EHS BIT(5)
35#define LPC18XX_SCU_PIN_EZI BIT(6)
36#define LPC18XX_SCU_PIN_ZIF BIT(7)
37#define LPC18XX_SCU_PIN_EHD_MASK 0x300
38#define LPC18XX_SCU_PIN_EHD_POS 8
39
40#define LPC18XX_SCU_I2C0_EFP BIT(0)
41#define LPC18XX_SCU_I2C0_EHD BIT(2)
42#define LPC18XX_SCU_I2C0_EZI BIT(3)
43#define LPC18XX_SCU_I2C0_ZIF BIT(7)
44#define LPC18XX_SCU_I2C0_SCL_SHIFT 0
45#define LPC18XX_SCU_I2C0_SDA_SHIFT 8
46
47#define LPC18XX_SCU_FUNC_PER_PIN 8
48
49/* LPC18xx pin types */
50enum {
51 TYPE_ND, /* Normal-drive */
52 TYPE_HD, /* High-drive */
53 TYPE_HS, /* High-speed */
54 TYPE_I2C0,
55 TYPE_USB1,
56};
57
58/* LPC18xx pin functions */
59enum {
60 FUNC_R, /* Reserved */
61 FUNC_ADC,
62 FUNC_ADCTRIG,
63 FUNC_CAN0,
64 FUNC_CAN1,
65 FUNC_CGU_OUT,
66 FUNC_CLKIN,
67 FUNC_CLKOUT,
68 FUNC_CTIN,
69 FUNC_CTOUT,
70 FUNC_DAC,
71 FUNC_EMC,
72 FUNC_EMC_ALT,
73 FUNC_ENET,
74 FUNC_ENET_ALT,
75 FUNC_GPIO,
76 FUNC_I2C0,
77 FUNC_I2C1,
78 FUNC_I2S0_RX_MCLK,
79 FUNC_I2S0_RX_SCK,
80 FUNC_I2S0_RX_SDA,
81 FUNC_I2S0_RX_WS,
82 FUNC_I2S0_TX_MCLK,
83 FUNC_I2S0_TX_SCK,
84 FUNC_I2S0_TX_SDA,
85 FUNC_I2S0_TX_WS,
86 FUNC_I2S1,
87 FUNC_LCD,
88 FUNC_LCD_ALT,
89 FUNC_MCTRL,
90 FUNC_NMI,
91 FUNC_QEI,
92 FUNC_SDMMC,
93 FUNC_SGPIO,
94 FUNC_SPI,
95 FUNC_SPIFI,
96 FUNC_SSP0,
97 FUNC_SSP0_ALT,
98 FUNC_SSP1,
99 FUNC_TIMER0,
100 FUNC_TIMER1,
101 FUNC_TIMER2,
102 FUNC_TIMER3,
103 FUNC_TRACE,
104 FUNC_UART0,
105 FUNC_UART1,
106 FUNC_UART2,
107 FUNC_UART3,
108 FUNC_USB0,
109 FUNC_USB1,
110 FUNC_MAX
111};
112
113static const char *const lpc18xx_function_names[] = {
114 [FUNC_R] = "reserved",
115 [FUNC_ADC] = "adc",
116 [FUNC_ADCTRIG] = "adctrig",
117 [FUNC_CAN0] = "can0",
118 [FUNC_CAN1] = "can1",
119 [FUNC_CGU_OUT] = "cgu_out",
120 [FUNC_CLKIN] = "clkin",
121 [FUNC_CLKOUT] = "clkout",
122 [FUNC_CTIN] = "ctin",
123 [FUNC_CTOUT] = "ctout",
124 [FUNC_DAC] = "dac",
125 [FUNC_EMC] = "emc",
126 [FUNC_EMC_ALT] = "emc_alt",
127 [FUNC_ENET] = "enet",
128 [FUNC_ENET_ALT] = "enet_alt",
129 [FUNC_GPIO] = "gpio",
130 [FUNC_I2C0] = "i2c0",
131 [FUNC_I2C1] = "i2c1",
132 [FUNC_I2S0_RX_MCLK] = "i2s0_rx_mclk",
133 [FUNC_I2S0_RX_SCK] = "i2s0_rx_sck",
134 [FUNC_I2S0_RX_SDA] = "i2s0_rx_sda",
135 [FUNC_I2S0_RX_WS] = "i2s0_rx_ws",
136 [FUNC_I2S0_TX_MCLK] = "i2s0_tx_mclk",
137 [FUNC_I2S0_TX_SCK] = "i2s0_tx_sck",
138 [FUNC_I2S0_TX_SDA] = "i2s0_tx_sda",
139 [FUNC_I2S0_TX_WS] = "i2s0_tx_ws",
140 [FUNC_I2S1] = "i2s1",
141 [FUNC_LCD] = "lcd",
142 [FUNC_LCD_ALT] = "lcd_alt",
143 [FUNC_MCTRL] = "mctrl",
144 [FUNC_NMI] = "nmi",
145 [FUNC_QEI] = "qei",
146 [FUNC_SDMMC] = "sdmmc",
147 [FUNC_SGPIO] = "sgpio",
148 [FUNC_SPI] = "spi",
149 [FUNC_SPIFI] = "spifi",
150 [FUNC_SSP0] = "ssp0",
151 [FUNC_SSP0_ALT] = "ssp0_alt",
152 [FUNC_SSP1] = "ssp1",
153 [FUNC_TIMER0] = "timer0",
154 [FUNC_TIMER1] = "timer1",
155 [FUNC_TIMER2] = "timer2",
156 [FUNC_TIMER3] = "timer3",
157 [FUNC_TRACE] = "trace",
158 [FUNC_UART0] = "uart0",
159 [FUNC_UART1] = "uart1",
160 [FUNC_UART2] = "uart2",
161 [FUNC_UART3] = "uart3",
162 [FUNC_USB0] = "usb0",
163 [FUNC_USB1] = "usb1",
164};
165
166struct lpc18xx_pmx_func {
167 const char **groups;
168 unsigned ngroups;
169};
170
171struct lpc18xx_scu_data {
172 struct pinctrl_dev *pctl;
173 void __iomem *base;
174 struct clk *clk;
175 struct lpc18xx_pmx_func func[FUNC_MAX];
176};
177
178struct lpc18xx_pin_caps {
179 unsigned int offset;
180 unsigned char functions[LPC18XX_SCU_FUNC_PER_PIN];
181 unsigned char analog;
182 unsigned char type;
183};
184
185/* Analog pins are required to have both bias and input disabled */
186#define LPC18XX_SCU_ANALOG_PIN_CFG 0x10
187
188/* Macros to maniupluate analog member in lpc18xx_pin_caps */
189#define LPC18XX_ANALOG_PIN BIT(7)
190#define LPC18XX_ANALOG_ADC(a) ((a >> 5) & 0x3)
191#define LPC18XX_ANALOG_BIT_MASK 0x1f
192#define ADC0 (LPC18XX_ANALOG_PIN | (0x00 << 5))
193#define ADC1 (LPC18XX_ANALOG_PIN | (0x01 << 5))
194#define DAC LPC18XX_ANALOG_PIN
195
196#define LPC_P(port, pin, f0, f1, f2, f3, f4, f5, f6, f7, a, t) \
197static struct lpc18xx_pin_caps lpc18xx_pin_p##port##_##pin = { \
198 .offset = 0x##port * 32 * 4 + pin * 4, \
199 .functions = { \
200 FUNC_##f0, FUNC_##f1, FUNC_##f2, \
201 FUNC_##f3, FUNC_##f4, FUNC_##f5, \
202 FUNC_##f6, FUNC_##f7, \
203 }, \
204 .analog = a, \
205 .type = TYPE_##t, \
206}
207
208#define LPC_N(pname, off, f0, f1, f2, f3, f4, f5, f6, f7, a, t) \
209static struct lpc18xx_pin_caps lpc18xx_pin_##pname = { \
210 .offset = off, \
211 .functions = { \
212 FUNC_##f0, FUNC_##f1, FUNC_##f2, \
213 FUNC_##f3, FUNC_##f4, FUNC_##f5, \
214 FUNC_##f6, FUNC_##f7, \
215 }, \
216 .analog = a, \
217 .type = TYPE_##t, \
218}
219
220
221/* Pinmuxing table taken from data sheet */
222/* Pin FUNC0 FUNC1 FUNC2 FUNC3 FUNC4 FUNC5 FUNC6 FUNC7 ANALOG TYPE */
223LPC_P(0,0, GPIO, SSP1, ENET, SGPIO, R, R, I2S0_TX_WS,I2S1, 0, ND);
224LPC_P(0,1, GPIO, SSP1,ENET_ALT,SGPIO, R, R, ENET, I2S1, 0, ND);
225LPC_P(1,0, GPIO, CTIN, EMC, R, R, SSP0, SGPIO, R, 0, ND);
226LPC_P(1,1, GPIO, CTOUT, EMC, SGPIO, R, SSP0, R, R, 0, ND);
227LPC_P(1,2, GPIO, CTOUT, EMC, SGPIO, R, SSP0, R, R, 0, ND);
228LPC_P(1,3, GPIO, CTOUT, SGPIO, EMC, USB0, SSP1, R, SDMMC, 0, ND);
229LPC_P(1,4, GPIO, CTOUT, SGPIO, EMC, USB0, SSP1, R, SDMMC, 0, ND);
230LPC_P(1,5, GPIO, CTOUT, R, EMC, USB0, SSP1, SGPIO, SDMMC, 0, ND);
231LPC_P(1,6, GPIO, CTIN, R, EMC, R, R, SGPIO, SDMMC, 0, ND);
232LPC_P(1,7, GPIO, UART1, CTOUT, EMC, USB0, R, R, R, 0, ND);
233LPC_P(1,8, GPIO, UART1, CTOUT, EMC, R, R, R, SDMMC, 0, ND);
234LPC_P(1,9, GPIO, UART1, CTOUT, EMC, R, R, R, SDMMC, 0, ND);
235LPC_P(1,10, GPIO, UART1, CTOUT, EMC, R, R, R, SDMMC, 0, ND);
236LPC_P(1,11, GPIO, UART1, CTOUT, EMC, R, R, R, SDMMC, 0, ND);
237LPC_P(1,12, GPIO, UART1, R, EMC, TIMER0, R, SGPIO, SDMMC, 0, ND);
238LPC_P(1,13, GPIO, UART1, R, EMC, TIMER0, R, SGPIO, SDMMC, 0, ND);
239LPC_P(1,14, GPIO, UART1, R, EMC, TIMER0, R, SGPIO, R, 0, ND);
240LPC_P(1,15, GPIO, UART2, SGPIO, ENET, TIMER0, R, R, R, 0, ND);
241LPC_P(1,16, GPIO, UART2, SGPIO,ENET_ALT,TIMER0, R, R, ENET, 0, ND);
242LPC_P(1,17, GPIO, UART2, R, ENET, TIMER0, CAN1, SGPIO, R, 0, HD);
243LPC_P(1,18, GPIO, UART2, R, ENET, TIMER0, CAN1, SGPIO, R, 0, ND);
244LPC_P(1,19, ENET, SSP1, R, R, CLKOUT, R, I2S0_RX_MCLK,I2S1, 0, ND);
245LPC_P(1,20, GPIO, SSP1, R, ENET, TIMER0, R, SGPIO, R, 0, ND);
246LPC_P(2,0, SGPIO, UART0, EMC, USB0, GPIO, R, TIMER3, ENET, 0, ND);
247LPC_P(2,1, SGPIO, UART0, EMC, USB0, GPIO, R, TIMER3, R, 0, ND);
248LPC_P(2,2, SGPIO, UART0, EMC, USB0, GPIO, CTIN, TIMER3, R, 0, ND);
249LPC_P(2,3, SGPIO, I2C1, UART3, CTIN, GPIO, R, TIMER3, USB0, 0, HD);
250LPC_P(2,4, SGPIO, I2C1, UART3, CTIN, GPIO, R, TIMER3, USB0, 0, HD);
251LPC_P(2,5, SGPIO, CTIN, USB1, ADCTRIG, GPIO, R, TIMER3, USB0, 0, HD);
252LPC_P(2,6, SGPIO, UART0, EMC, USB0, GPIO, CTIN, TIMER3, R, 0, ND);
253LPC_P(2,7, GPIO, CTOUT, UART3, EMC, R, R, TIMER3, R, 0, ND);
254LPC_P(2,8, SGPIO, CTOUT, UART3, EMC, GPIO, R, R, R, 0, ND);
255LPC_P(2,9, GPIO, CTOUT, UART3, EMC, R, R, R, R, 0, ND);
256LPC_P(2,10, GPIO, CTOUT, UART2, EMC, R, R, R, R, 0, ND);
257LPC_P(2,11, GPIO, CTOUT, UART2, EMC, R, R, R, R, 0, ND);
258LPC_P(2,12, GPIO, CTOUT, R, EMC, R, R, R, UART2, 0, ND);
259LPC_P(2,13, GPIO, CTIN, R, EMC, R, R, R, UART2, 0, ND);
260LPC_P(3,0, I2S0_RX_SCK, I2S0_RX_MCLK, I2S0_TX_SCK, I2S0_TX_MCLK,SSP0,R,R,R, 0, ND);
261LPC_P(3,1, I2S0_TX_WS, I2S0_RX_WS,CAN0,USB1,GPIO, R, LCD, R, 0, ND);
262LPC_P(3,2, I2S0_TX_SDA, I2S0_RX_SDA,CAN0,USB1,GPIO, R, LCD, R, 0, ND);
263LPC_P(3,3, R, SPI, SSP0, SPIFI, CGU_OUT,R, I2S0_TX_MCLK, I2S1, 0, HS);
264LPC_P(3,4, GPIO, R, R, SPIFI, UART1, I2S0_TX_WS, I2S1, LCD, 0, ND);
265LPC_P(3,5, GPIO, R, R, SPIFI, UART1, I2S0_TX_SDA,I2S1, LCD, 0, ND);
266LPC_P(3,6, GPIO, SPI, SSP0, SPIFI, R, SSP0_ALT, R, R, 0, ND);
267LPC_P(3,7, R, SPI, SSP0, SPIFI, GPIO, SSP0_ALT, R, R, 0, ND);
268LPC_P(3,8, R, SPI, SSP0, SPIFI, GPIO, SSP0_ALT, R, R, 0, ND);
269LPC_P(4,0, GPIO, MCTRL, NMI, R, R, LCD, UART3, R, 0, ND);
270LPC_P(4,1, GPIO, CTOUT, LCD, R, R, LCD_ALT, UART3, ENET, ADC0|1, ND);
271LPC_P(4,2, GPIO, CTOUT, LCD, R, R, LCD_ALT, UART3, SGPIO, 0, ND);
272LPC_P(4,3, GPIO, CTOUT, LCD, R, R, LCD_ALT, UART3, SGPIO, ADC0|0, ND);
273LPC_P(4,4, GPIO, CTOUT, LCD, R, R, LCD_ALT, UART3, SGPIO, DAC, ND);
274LPC_P(4,5, GPIO, CTOUT, LCD, R, R, R, R, SGPIO, 0, ND);
275LPC_P(4,6, GPIO, CTOUT, LCD, R, R, R, R, SGPIO, 0, ND);
276LPC_P(4,7, LCD, CLKIN, R, R, R, R, I2S1,I2S0_TX_SCK, 0, ND);
277LPC_P(4,8, R, CTIN, LCD, R, GPIO, LCD_ALT, CAN1, SGPIO, 0, ND);
278LPC_P(4,9, R, CTIN, LCD, R, GPIO, LCD_ALT, CAN1, SGPIO, 0, ND);
279LPC_P(4,10, R, CTIN, LCD, R, GPIO, LCD_ALT, R, SGPIO, 0, ND);
280LPC_P(5,0, GPIO, MCTRL, EMC, R, UART1, TIMER1, R, R, 0, ND);
281LPC_P(5,1, GPIO, MCTRL, EMC, R, UART1, TIMER1, R, R, 0, ND);
282LPC_P(5,2, GPIO, MCTRL, EMC, R, UART1, TIMER1, R, R, 0, ND);
283LPC_P(5,3, GPIO, MCTRL, EMC, R, UART1, TIMER1, R, R, 0, ND);
284LPC_P(5,4, GPIO, MCTRL, EMC, R, UART1, TIMER1, R, R, 0, ND);
285LPC_P(5,5, GPIO, MCTRL, EMC, R, UART1, TIMER1, R, R, 0, ND);
286LPC_P(5,6, GPIO, MCTRL, EMC, R, UART1, TIMER1, R, R, 0, ND);
287LPC_P(5,7, GPIO, MCTRL, EMC, R, UART1, TIMER1, R, R, 0, ND);
288LPC_P(6,0, R, I2S0_RX_MCLK,R, R, I2S0_RX_SCK, R, R, R, 0, ND);
289LPC_P(6,1, GPIO, EMC, UART0, I2S0_RX_WS, R, TIMER2, R, R, 0, ND);
290LPC_P(6,2, GPIO, EMC, UART0, I2S0_RX_SDA, R, TIMER2, R, R, 0, ND);
291LPC_P(6,3, GPIO, USB0, SGPIO, EMC, R, TIMER2, R, R, 0, ND);
292LPC_P(6,4, GPIO, CTIN, UART0, EMC, R, R, R, R, 0, ND);
293LPC_P(6,5, GPIO, CTOUT, UART0, EMC, R, R, R, R, 0, ND);
294LPC_P(6,6, GPIO, EMC, SGPIO, USB0, R, TIMER2, R, R, 0, ND);
295LPC_P(6,7, R, EMC, SGPIO, USB0, GPIO, TIMER2, R, R, 0, ND);
296LPC_P(6,8, R, EMC, SGPIO, USB0, GPIO, TIMER2, R, R, 0, ND);
297LPC_P(6,9, GPIO, R, R, EMC, R, TIMER2, R, R, 0, ND);
298LPC_P(6,10, GPIO, MCTRL, R, EMC, R, R, R, R, 0, ND);
299LPC_P(6,11, GPIO, R, R, EMC, R, TIMER2, R, R, 0, ND);
300LPC_P(6,12, GPIO, CTOUT, R, EMC, R, R, R, R, 0, ND);
301LPC_P(7,0, GPIO, CTOUT, R, LCD, R, R, R, SGPIO, 0, ND);
302LPC_P(7,1, GPIO, CTOUT,I2S0_TX_WS,LCD,LCD_ALT, R, UART2, SGPIO, 0, ND);
303LPC_P(7,2, GPIO, CTIN,I2S0_TX_SDA,LCD,LCD_ALT, R, UART2, SGPIO, 0, ND);
304LPC_P(7,3, GPIO, CTIN, R, LCD,LCD_ALT, R, R, R, 0, ND);
305LPC_P(7,4, GPIO, CTOUT, R, LCD,LCD_ALT, TRACE, R, R, ADC0|4, ND);
306LPC_P(7,5, GPIO, CTOUT, R, LCD,LCD_ALT, TRACE, R, R, ADC0|3, ND);
307LPC_P(7,6, GPIO, CTOUT, R, LCD, R, TRACE, R, R, 0, ND);
308LPC_P(7,7, GPIO, CTOUT, R, LCD, R, TRACE, ENET, SGPIO, ADC1|6, ND);
309LPC_P(8,0, GPIO, USB0, R, MCTRL, SGPIO, R, R, TIMER0, 0, HD);
310LPC_P(8,1, GPIO, USB0, R, MCTRL, SGPIO, R, R, TIMER0, 0, HD);
311LPC_P(8,2, GPIO, USB0, R, MCTRL, SGPIO, R, R, TIMER0, 0, HD);
312LPC_P(8,3, GPIO, USB1, R, LCD, LCD_ALT, R, R, TIMER0, 0, ND);
313LPC_P(8,4, GPIO, USB1, R, LCD, LCD_ALT, R, R, TIMER0, 0, ND);
314LPC_P(8,5, GPIO, USB1, R, LCD, LCD_ALT, R, R, TIMER0, 0, ND);
315LPC_P(8,6, GPIO, USB1, R, LCD, LCD_ALT, R, R, TIMER0, 0, ND);
316LPC_P(8,7, GPIO, USB1, R, LCD, LCD_ALT, R, R, TIMER0, 0, ND);
317LPC_P(8,8, R, USB1, R, R, R, R,CGU_OUT, I2S1, 0, ND);
318LPC_P(9,0, GPIO, MCTRL, R, R, R, ENET, SGPIO, SSP0, 0, ND);
319LPC_P(9,1, GPIO, MCTRL, R, R, I2S0_TX_WS,ENET, SGPIO, SSP0, 0, ND);
320LPC_P(9,2, GPIO, MCTRL, R, R, I2S0_TX_SDA,ENET,SGPIO, SSP0, 0, ND);
321LPC_P(9,3, GPIO, MCTRL, USB1, R, R, ENET, SGPIO, UART3, 0, ND);
322LPC_P(9,4, R, MCTRL, USB1, R, GPIO, ENET, SGPIO, UART3, 0, ND);
323LPC_P(9,5, R, MCTRL, USB1, R, GPIO, ENET, SGPIO, UART0, 0, ND);
324LPC_P(9,6, GPIO, MCTRL, USB1, R, R, ENET, SGPIO, UART0, 0, ND);
325LPC_P(a,0, R, R, R, R, R, I2S1, CGU_OUT, R, 0, ND);
326LPC_P(a,1, GPIO, QEI, R, UART2, R, R, R, R, 0, HD);
327LPC_P(a,2, GPIO, QEI, R, UART2, R, R, R, R, 0, HD);
328LPC_P(a,3, GPIO, QEI, R, R, R, R, R, R, 0, HD);
329LPC_P(a,4, R, CTOUT, R, EMC, GPIO, R, R, R, 0, ND);
330LPC_P(b,0, R, CTOUT, LCD, R, GPIO, R, R, R, 0, ND);
331LPC_P(b,1, R, USB1, LCD, R, GPIO, CTOUT, R, R, 0, ND);
332LPC_P(b,2, R, USB1, LCD, R, GPIO, CTOUT, R, R, 0, ND);
333LPC_P(b,3, R, USB1, LCD, R, GPIO, CTOUT, R, R, 0, ND);
334LPC_P(b,4, R, USB1, LCD, R, GPIO, CTIN, R, R, 0, ND);
335LPC_P(b,5, R, USB1, LCD, R, GPIO, CTIN, LCD_ALT, R, 0, ND);
336LPC_P(b,6, R, USB1, LCD, R, GPIO, CTIN, LCD_ALT, R, ADC0|6, ND);
337LPC_P(c,0, R, USB1, R, ENET, LCD, R, R, SDMMC, ADC1|1, ND);
338LPC_P(c,1, USB1, R, UART1, ENET, GPIO, R, TIMER3, SDMMC, 0, ND);
339LPC_P(c,2, USB1, R, UART1, ENET, GPIO, R, R, SDMMC, 0, ND);
340LPC_P(c,3, USB1, R, UART1, ENET, GPIO, R, R, SDMMC, ADC1|0, ND);
341LPC_P(c,4, R, USB1, R, ENET, GPIO, R, TIMER3, SDMMC, 0, ND);
342LPC_P(c,5, R, USB1, R, ENET, GPIO, R, TIMER3, SDMMC, 0, ND);
343LPC_P(c,6, R, USB1, R, ENET, GPIO, R, TIMER3, SDMMC, 0, ND);
344LPC_P(c,7, R, USB1, R, ENET, GPIO, R, TIMER3, SDMMC, 0, ND);
345LPC_P(c,8, R, USB1, R, ENET, GPIO, R, TIMER3, SDMMC, 0, ND);
346LPC_P(c,9, R, USB1, R, ENET, GPIO, R, TIMER3, SDMMC, 0, ND);
347LPC_P(c,10, R, USB1, UART1, R, GPIO, R, TIMER3, SDMMC, 0, ND);
348LPC_P(c,11, R, USB1, UART1, R, GPIO, R, R, SDMMC, 0, ND);
349LPC_P(c,12, R, R, UART1, R, GPIO, SGPIO, I2S0_TX_SDA,SDMMC, 0, ND);
350LPC_P(c,13, R, R, UART1, R, GPIO, SGPIO, I2S0_TX_WS, SDMMC, 0, ND);
351LPC_P(c,14, R, R, UART1, R, GPIO, SGPIO, ENET, SDMMC, 0, ND);
352LPC_P(d,0, R, CTOUT, EMC, R, GPIO, R, R, SGPIO, 0, ND);
353LPC_P(d,1, R, R, EMC, R, GPIO, SDMMC, R, SGPIO, 0, ND);
354LPC_P(d,2, R, CTOUT, EMC, R, GPIO, R, R, SGPIO, 0, ND);
355LPC_P(d,3, R, CTOUT, EMC, R, GPIO, R, R, SGPIO, 0, ND);
356LPC_P(d,4, R, CTOUT, EMC, R, GPIO, R, R, SGPIO, 0, ND);
357LPC_P(d,5, R, CTOUT, EMC, R, GPIO, R, R, SGPIO, 0, ND);
358LPC_P(d,6, R, CTOUT, EMC, R, GPIO, R, R, SGPIO, 0, ND);
359LPC_P(d,7, R, CTIN, EMC, R, GPIO, R, R, SGPIO, 0, ND);
360LPC_P(d,8, R, CTIN, EMC, R, GPIO, R, R, SGPIO, 0, ND);
361LPC_P(d,9, R, CTOUT, EMC, R, GPIO, R, R, SGPIO, 0, ND);
362LPC_P(d,10, R, CTIN, EMC, R, GPIO, R, R, R, 0, ND);
363LPC_P(d,11, R, R, EMC, R, GPIO, USB1, CTOUT, R, 0, ND);
364LPC_P(d,12, R, R, EMC, R, GPIO, R, CTOUT, R, 0, ND);
365LPC_P(d,13, R, CTIN, EMC, R, GPIO, R, CTOUT, R, 0, ND);
366LPC_P(d,14, R, R, EMC, R, GPIO, R, CTOUT, R, 0, ND);
367LPC_P(d,15, R, R, EMC, R, GPIO, SDMMC, CTOUT, R, 0, ND);
368LPC_P(d,16, R, R, EMC, R, GPIO, SDMMC, CTOUT, R, 0, ND);
369LPC_P(e,0, R, R, R, EMC, GPIO, CAN1, R, R, 0, ND);
370LPC_P(e,1, R, R, R, EMC, GPIO, CAN1, R, R, 0, ND);
371LPC_P(e,2,ADCTRIG, CAN0, R, EMC, GPIO, R, R, R, 0, ND);
372LPC_P(e,3, R, CAN0,ADCTRIG, EMC, GPIO, R, R, R, 0, ND);
373LPC_P(e,4, R, NMI, R, EMC, GPIO, R, R, R, 0, ND);
374LPC_P(e,5, R, CTOUT, UART1, EMC, GPIO, R, R, R, 0, ND);
375LPC_P(e,6, R, CTOUT, UART1, EMC, GPIO, R, R, R, 0, ND);
376LPC_P(e,7, R, CTOUT, UART1, EMC, GPIO, R, R, R, 0, ND);
377LPC_P(e,8, R, CTOUT, UART1, EMC, GPIO, R, R, R, 0, ND);
378LPC_P(e,9, R, CTIN, UART1, EMC, GPIO, R, R, R, 0, ND);
379LPC_P(e,10, R, CTIN, UART1, EMC, GPIO, R, R, R, 0, ND);
380LPC_P(e,11, R, CTOUT, UART1, EMC, GPIO, R, R, R, 0, ND);
381LPC_P(e,12, R, CTOUT, UART1, EMC, GPIO, R, R, R, 0, ND);
382LPC_P(e,13, R, CTOUT, I2C1, EMC, GPIO, R, R, R, 0, ND);
383LPC_P(e,14, R, R, R, EMC, GPIO, R, R, R, 0, ND);
384LPC_P(e,15, R, CTOUT, I2C1, EMC, GPIO, R, R, R, 0, ND);
385LPC_P(f,0, SSP0, CLKIN, R, R, R, R, R, I2S1, 0, ND);
386LPC_P(f,1, R, R, SSP0, R, GPIO, R, SGPIO, R, 0, ND);
387LPC_P(f,2, R, UART3, SSP0, R, GPIO, R, SGPIO, R, 0, ND);
388LPC_P(f,3, R, UART3, SSP0, R, GPIO, R, SGPIO, R, 0, ND);
389LPC_P(f,4, SSP1, CLKIN, TRACE, R, R, R, I2S0_TX_MCLK,I2S0_RX_SCK, 0, ND);
390LPC_P(f,5, R, UART3, SSP1, TRACE, GPIO, R, SGPIO, R, ADC1|4, ND);
391LPC_P(f,6, R, UART3, SSP1, TRACE, GPIO, R, SGPIO, I2S1, ADC1|3, ND);
392LPC_P(f,7, R, UART3, SSP1, TRACE, GPIO, R, SGPIO, I2S1, ADC1|7, ND);
393LPC_P(f,8, R, UART0, CTIN, TRACE, GPIO, R, SGPIO, R, ADC0|2, ND);
394LPC_P(f,9, R, UART0, CTOUT, R, GPIO, R, SGPIO, R, ADC1|2, ND);
395LPC_P(f,10, R, UART0, R, R, GPIO, R, SDMMC, R, ADC0|5, ND);
396LPC_P(f,11, R, UART0, R, R, GPIO, R, SDMMC, R, ADC1|5, ND);
397
398/* Pin Offset FUNC0 FUNC1 FUNC2 FUNC3 FUNC4 FUNC5 FUNC6 FUNC7 ANALOG TYPE */
399LPC_N(clk0, 0xc00, EMC, CLKOUT, R, R, SDMMC, EMC_ALT, SSP1, ENET, 0, HS);
400LPC_N(clk1, 0xc04, EMC, CLKOUT, R, R, R, CGU_OUT, R, I2S1, 0, HS);
401LPC_N(clk2, 0xc08, EMC, CLKOUT, R, R, SDMMC, EMC_ALT,I2S0_TX_MCLK,I2S1, 0, HS);
402LPC_N(clk3, 0xc0c, EMC, CLKOUT, R, R, R, CGU_OUT, R, I2S1, 0, HS);
403LPC_N(usb1_dm, 0xc80, R, R, R, R, R, R, R, R, 0, USB1);
404LPC_N(usb1_dp, 0xc80, R, R, R, R, R, R, R, R, 0, USB1);
405LPC_N(i2c0_scl, 0xc84, R, R, R, R, R, R, R, R, 0, I2C0);
406LPC_N(i2c0_sda, 0xc84, R, R, R, R, R, R, R, R, 0, I2C0);
407
408#define LPC18XX_PIN_P(port, pin) { \
409 .number = 0x##port * 32 + pin, \
410 .name = "p"#port"_"#pin, \
411 .drv_data = &lpc18xx_pin_p##port##_##pin \
412}
413
414/* Pin numbers for special pins */
415enum {
416 PIN_CLK0 = 600,
417 PIN_CLK1,
418 PIN_CLK2,
419 PIN_CLK3,
420 PIN_USB1_DM,
421 PIN_USB1_DP,
422 PIN_I2C0_SCL,
423 PIN_I2C0_SDA,
424};
425
426#define LPC18XX_PIN(pname, n) { \
427 .number = n, \
428 .name = #pname, \
429 .drv_data = &lpc18xx_pin_##pname \
430}
431
432static const struct pinctrl_pin_desc lpc18xx_pins[] = {
433 LPC18XX_PIN_P(0,0),
434 LPC18XX_PIN_P(0,1),
435 LPC18XX_PIN_P(1,0),
436 LPC18XX_PIN_P(1,1),
437 LPC18XX_PIN_P(1,2),
438 LPC18XX_PIN_P(1,3),
439 LPC18XX_PIN_P(1,4),
440 LPC18XX_PIN_P(1,5),
441 LPC18XX_PIN_P(1,6),
442 LPC18XX_PIN_P(1,7),
443 LPC18XX_PIN_P(1,8),
444 LPC18XX_PIN_P(1,9),
445 LPC18XX_PIN_P(1,10),
446 LPC18XX_PIN_P(1,11),
447 LPC18XX_PIN_P(1,12),
448 LPC18XX_PIN_P(1,13),
449 LPC18XX_PIN_P(1,14),
450 LPC18XX_PIN_P(1,15),
451 LPC18XX_PIN_P(1,16),
452 LPC18XX_PIN_P(1,17),
453 LPC18XX_PIN_P(1,18),
454 LPC18XX_PIN_P(1,19),
455 LPC18XX_PIN_P(1,20),
456 LPC18XX_PIN_P(2,0),
457 LPC18XX_PIN_P(2,1),
458 LPC18XX_PIN_P(2,2),
459 LPC18XX_PIN_P(2,3),
460 LPC18XX_PIN_P(2,4),
461 LPC18XX_PIN_P(2,5),
462 LPC18XX_PIN_P(2,6),
463 LPC18XX_PIN_P(2,7),
464 LPC18XX_PIN_P(2,8),
465 LPC18XX_PIN_P(2,9),
466 LPC18XX_PIN_P(2,10),
467 LPC18XX_PIN_P(2,11),
468 LPC18XX_PIN_P(2,12),
469 LPC18XX_PIN_P(2,13),
470 LPC18XX_PIN_P(3,0),
471 LPC18XX_PIN_P(3,1),
472 LPC18XX_PIN_P(3,2),
473 LPC18XX_PIN_P(3,3),
474 LPC18XX_PIN_P(3,4),
475 LPC18XX_PIN_P(3,5),
476 LPC18XX_PIN_P(3,6),
477 LPC18XX_PIN_P(3,7),
478 LPC18XX_PIN_P(3,8),
479 LPC18XX_PIN_P(4,0),
480 LPC18XX_PIN_P(4,1),
481 LPC18XX_PIN_P(4,2),
482 LPC18XX_PIN_P(4,3),
483 LPC18XX_PIN_P(4,4),
484 LPC18XX_PIN_P(4,5),
485 LPC18XX_PIN_P(4,6),
486 LPC18XX_PIN_P(4,7),
487 LPC18XX_PIN_P(4,8),
488 LPC18XX_PIN_P(4,9),
489 LPC18XX_PIN_P(4,10),
490 LPC18XX_PIN_P(5,0),
491 LPC18XX_PIN_P(5,1),
492 LPC18XX_PIN_P(5,2),
493 LPC18XX_PIN_P(5,3),
494 LPC18XX_PIN_P(5,4),
495 LPC18XX_PIN_P(5,5),
496 LPC18XX_PIN_P(5,6),
497 LPC18XX_PIN_P(5,7),
498 LPC18XX_PIN_P(6,0),
499 LPC18XX_PIN_P(6,1),
500 LPC18XX_PIN_P(6,2),
501 LPC18XX_PIN_P(6,3),
502 LPC18XX_PIN_P(6,4),
503 LPC18XX_PIN_P(6,5),
504 LPC18XX_PIN_P(6,6),
505 LPC18XX_PIN_P(6,7),
506 LPC18XX_PIN_P(6,8),
507 LPC18XX_PIN_P(6,9),
508 LPC18XX_PIN_P(6,10),
509 LPC18XX_PIN_P(6,11),
510 LPC18XX_PIN_P(6,12),
511 LPC18XX_PIN_P(7,0),
512 LPC18XX_PIN_P(7,1),
513 LPC18XX_PIN_P(7,2),
514 LPC18XX_PIN_P(7,3),
515 LPC18XX_PIN_P(7,4),
516 LPC18XX_PIN_P(7,5),
517 LPC18XX_PIN_P(7,6),
518 LPC18XX_PIN_P(7,7),
519 LPC18XX_PIN_P(8,0),
520 LPC18XX_PIN_P(8,1),
521 LPC18XX_PIN_P(8,2),
522 LPC18XX_PIN_P(8,3),
523 LPC18XX_PIN_P(8,4),
524 LPC18XX_PIN_P(8,5),
525 LPC18XX_PIN_P(8,6),
526 LPC18XX_PIN_P(8,7),
527 LPC18XX_PIN_P(8,8),
528 LPC18XX_PIN_P(9,0),
529 LPC18XX_PIN_P(9,1),
530 LPC18XX_PIN_P(9,2),
531 LPC18XX_PIN_P(9,3),
532 LPC18XX_PIN_P(9,4),
533 LPC18XX_PIN_P(9,5),
534 LPC18XX_PIN_P(9,6),
535 LPC18XX_PIN_P(a,0),
536 LPC18XX_PIN_P(a,1),
537 LPC18XX_PIN_P(a,2),
538 LPC18XX_PIN_P(a,3),
539 LPC18XX_PIN_P(a,4),
540 LPC18XX_PIN_P(b,0),
541 LPC18XX_PIN_P(b,1),
542 LPC18XX_PIN_P(b,2),
543 LPC18XX_PIN_P(b,3),
544 LPC18XX_PIN_P(b,4),
545 LPC18XX_PIN_P(b,5),
546 LPC18XX_PIN_P(b,6),
547 LPC18XX_PIN_P(c,0),
548 LPC18XX_PIN_P(c,1),
549 LPC18XX_PIN_P(c,2),
550 LPC18XX_PIN_P(c,3),
551 LPC18XX_PIN_P(c,4),
552 LPC18XX_PIN_P(c,5),
553 LPC18XX_PIN_P(c,6),
554 LPC18XX_PIN_P(c,7),
555 LPC18XX_PIN_P(c,8),
556 LPC18XX_PIN_P(c,9),
557 LPC18XX_PIN_P(c,10),
558 LPC18XX_PIN_P(c,11),
559 LPC18XX_PIN_P(c,12),
560 LPC18XX_PIN_P(c,13),
561 LPC18XX_PIN_P(c,14),
562 LPC18XX_PIN_P(d,0),
563 LPC18XX_PIN_P(d,1),
564 LPC18XX_PIN_P(d,2),
565 LPC18XX_PIN_P(d,3),
566 LPC18XX_PIN_P(d,4),
567 LPC18XX_PIN_P(d,5),
568 LPC18XX_PIN_P(d,6),
569 LPC18XX_PIN_P(d,7),
570 LPC18XX_PIN_P(d,8),
571 LPC18XX_PIN_P(d,9),
572 LPC18XX_PIN_P(d,10),
573 LPC18XX_PIN_P(d,11),
574 LPC18XX_PIN_P(d,12),
575 LPC18XX_PIN_P(d,13),
576 LPC18XX_PIN_P(d,14),
577 LPC18XX_PIN_P(d,15),
578 LPC18XX_PIN_P(d,16),
579 LPC18XX_PIN_P(e,0),
580 LPC18XX_PIN_P(e,1),
581 LPC18XX_PIN_P(e,2),
582 LPC18XX_PIN_P(e,3),
583 LPC18XX_PIN_P(e,4),
584 LPC18XX_PIN_P(e,5),
585 LPC18XX_PIN_P(e,6),
586 LPC18XX_PIN_P(e,7),
587 LPC18XX_PIN_P(e,8),
588 LPC18XX_PIN_P(e,9),
589 LPC18XX_PIN_P(e,10),
590 LPC18XX_PIN_P(e,11),
591 LPC18XX_PIN_P(e,12),
592 LPC18XX_PIN_P(e,13),
593 LPC18XX_PIN_P(e,14),
594 LPC18XX_PIN_P(e,15),
595 LPC18XX_PIN_P(f,0),
596 LPC18XX_PIN_P(f,1),
597 LPC18XX_PIN_P(f,2),
598 LPC18XX_PIN_P(f,3),
599 LPC18XX_PIN_P(f,4),
600 LPC18XX_PIN_P(f,5),
601 LPC18XX_PIN_P(f,6),
602 LPC18XX_PIN_P(f,7),
603 LPC18XX_PIN_P(f,8),
604 LPC18XX_PIN_P(f,9),
605 LPC18XX_PIN_P(f,10),
606 LPC18XX_PIN_P(f,11),
607
608 LPC18XX_PIN(clk0, PIN_CLK0),
609 LPC18XX_PIN(clk1, PIN_CLK1),
610 LPC18XX_PIN(clk2, PIN_CLK2),
611 LPC18XX_PIN(clk3, PIN_CLK3),
612 LPC18XX_PIN(usb1_dm, PIN_USB1_DM),
613 LPC18XX_PIN(usb1_dp, PIN_USB1_DP),
614 LPC18XX_PIN(i2c0_scl, PIN_I2C0_SCL),
615 LPC18XX_PIN(i2c0_sda, PIN_I2C0_SDA),
616};
617
618static int lpc18xx_pconf_get_usb1(enum pin_config_param param, int *arg, u32 reg)
619{
620 /* TODO */
621 return -ENOTSUPP;
622}
623
624static int lpc18xx_pconf_get_i2c0(enum pin_config_param param, int *arg, u32 reg,
625 unsigned pin)
626{
627 u8 shift;
628
629 if (pin == PIN_I2C0_SCL)
630 shift = LPC18XX_SCU_I2C0_SCL_SHIFT;
631 else
632 shift = LPC18XX_SCU_I2C0_SDA_SHIFT;
633
634 switch (param) {
635 case PIN_CONFIG_INPUT_ENABLE:
636 if (reg & (LPC18XX_SCU_I2C0_EZI << shift))
637 *arg = 1;
638 else
639 return -EINVAL;
640 break;
641
642 case PIN_CONFIG_SLEW_RATE:
643 if (reg & (LPC18XX_SCU_I2C0_EHD << shift))
644 *arg = 1;
645 else
646 *arg = 0;
647 break;
648
649 case PIN_CONFIG_INPUT_SCHMITT:
650 if (reg & (LPC18XX_SCU_I2C0_EFP << shift))
651 *arg = 3;
652 else
653 *arg = 50;
654 break;
655
656 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
657 if (reg & (LPC18XX_SCU_I2C0_ZIF << shift))
658 return -EINVAL;
659 else
660 *arg = 1;
661 break;
662
663 default:
664 return -ENOTSUPP;
665 }
666
667 return 0;
668}
669
670static int lpc18xx_pconf_get_pin(enum pin_config_param param, int *arg, u32 reg,
671 struct lpc18xx_pin_caps *pin_cap)
672{
673 switch (param) {
674 case PIN_CONFIG_BIAS_DISABLE:
675 if ((!(reg & LPC18XX_SCU_PIN_EPD)) && (reg & LPC18XX_SCU_PIN_EPUN))
676 ;
677 else
678 return -EINVAL;
679 break;
680
681 case PIN_CONFIG_BIAS_PULL_UP:
682 if (reg & LPC18XX_SCU_PIN_EPUN)
683 return -EINVAL;
684 else
685 *arg = 1;
686 break;
687
688 case PIN_CONFIG_BIAS_PULL_DOWN:
689 if (reg & LPC18XX_SCU_PIN_EPD)
690 *arg = 1;
691 else
692 return -EINVAL;
693 break;
694
695 case PIN_CONFIG_INPUT_ENABLE:
696 if (reg & LPC18XX_SCU_PIN_EZI)
697 *arg = 1;
698 else
699 return -EINVAL;
700 break;
701
702 case PIN_CONFIG_SLEW_RATE:
703 if (pin_cap->type == TYPE_HD)
704 return -ENOTSUPP;
705
706 if (reg & LPC18XX_SCU_PIN_EHS)
707 *arg = 1;
708 else
709 *arg = 0;
710 break;
711
712 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
713 if (reg & LPC18XX_SCU_PIN_ZIF)
714 return -EINVAL;
715 else
716 *arg = 1;
717 break;
718
719 case PIN_CONFIG_DRIVE_STRENGTH:
720 if (pin_cap->type != TYPE_HD)
721 return -ENOTSUPP;
722
723 *arg = (reg & LPC18XX_SCU_PIN_EHD_MASK) >> LPC18XX_SCU_PIN_EHD_POS;
724 switch (*arg) {
725 case 3: *arg += 5;
726 case 2: *arg += 5;
727 case 1: *arg += 3;
728 case 0: *arg += 4;
729 }
730 break;
731
732 default:
733 return -ENOTSUPP;
734 }
735
736 return 0;
737}
738
739static struct lpc18xx_pin_caps *lpc18xx_get_pin_caps(unsigned pin)
740{
741 int i;
742
743 for (i = 0; i < ARRAY_SIZE(lpc18xx_pins); i++) {
744 if (lpc18xx_pins[i].number == pin)
745 return lpc18xx_pins[i].drv_data;
746 }
747
748 return NULL;
749}
750
751static int lpc18xx_pconf_get(struct pinctrl_dev *pctldev, unsigned pin,
752 unsigned long *config)
753{
754 struct lpc18xx_scu_data *scu = pinctrl_dev_get_drvdata(pctldev);
755 enum pin_config_param param = pinconf_to_config_param(*config);
756 struct lpc18xx_pin_caps *pin_cap;
757 int ret, arg = 0;
758 u32 reg;
759
760 pin_cap = lpc18xx_get_pin_caps(pin);
761 if (!pin_cap)
762 return -EINVAL;
763
764 reg = readl(scu->base + pin_cap->offset);
765
766 if (pin_cap->type == TYPE_I2C0)
767 ret = lpc18xx_pconf_get_i2c0(param, &arg, reg, pin);
768 else if (pin_cap->type == TYPE_USB1)
769 ret = lpc18xx_pconf_get_usb1(param, &arg, reg);
770 else
771 ret = lpc18xx_pconf_get_pin(param, &arg, reg, pin_cap);
772
773 if (ret < 0)
774 return ret;
775
776 *config = pinconf_to_config_packed(param, (u16)arg);
777
778 return 0;
779}
780
781static int lpc18xx_pconf_set_usb1(struct pinctrl_dev *pctldev,
782 enum pin_config_param param,
783 u16 param_val, u32 *reg)
784{
785 /* TODO */
786 return -ENOTSUPP;
787}
788
789static int lpc18xx_pconf_set_i2c0(struct pinctrl_dev *pctldev,
790 enum pin_config_param param,
791 u16 param_val, u32 *reg,
792 unsigned pin)
793{
794 u8 shift;
795
796 if (pin == PIN_I2C0_SCL)
797 shift = LPC18XX_SCU_I2C0_SCL_SHIFT;
798 else
799 shift = LPC18XX_SCU_I2C0_SDA_SHIFT;
800
801 switch (param) {
802 case PIN_CONFIG_INPUT_ENABLE:
803 if (param_val)
804 *reg |= (LPC18XX_SCU_I2C0_EZI << shift);
805 else
806 *reg &= ~(LPC18XX_SCU_I2C0_EZI << shift);
807 break;
808
809 case PIN_CONFIG_SLEW_RATE:
810 if (param_val)
811 *reg |= (LPC18XX_SCU_I2C0_EHD << shift);
812 else
813 *reg &= ~(LPC18XX_SCU_I2C0_EHD << shift);
814 break;
815
816 case PIN_CONFIG_INPUT_SCHMITT:
817 if (param_val == 3)
818 *reg |= (LPC18XX_SCU_I2C0_EFP << shift);
819 else if (param_val == 50)
820 *reg &= ~(LPC18XX_SCU_I2C0_EFP << shift);
821 else
822 return -ENOTSUPP;
823 break;
824
825 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
826 if (param)
827 *reg &= ~(LPC18XX_SCU_I2C0_ZIF << shift);
828 else
829 *reg |= (LPC18XX_SCU_I2C0_ZIF << shift);
830 break;
831
832 default:
833 dev_err(pctldev->dev, "Property not supported\n");
834 return -ENOTSUPP;
835 }
836
837 return 0;
838}
839
840static int lpc18xx_pconf_set_pin(struct pinctrl_dev *pctldev,
841 enum pin_config_param param,
842 u16 param_val, u32 *reg,
843 struct lpc18xx_pin_caps *pin_cap)
844{
845 switch (param) {
846 case PIN_CONFIG_BIAS_DISABLE:
847 *reg &= ~LPC18XX_SCU_PIN_EPD;
848 *reg |= LPC18XX_SCU_PIN_EPUN;
849 break;
850
851 case PIN_CONFIG_BIAS_PULL_UP:
852 *reg &= ~LPC18XX_SCU_PIN_EPUN;
853 break;
854
855 case PIN_CONFIG_BIAS_PULL_DOWN:
856 *reg |= LPC18XX_SCU_PIN_EPD;
857 break;
858
859 case PIN_CONFIG_INPUT_ENABLE:
860 if (param_val)
861 *reg |= LPC18XX_SCU_PIN_EZI;
862 else
863 *reg &= ~LPC18XX_SCU_PIN_EZI;
864 break;
865
866 case PIN_CONFIG_SLEW_RATE:
867 if (pin_cap->type == TYPE_HD) {
868 dev_err(pctldev->dev, "Slew rate unsupported on high-drive pins\n");
869 return -ENOTSUPP;
870 }
871
872 if (param_val == 0)
873 *reg &= ~LPC18XX_SCU_PIN_EHS;
874 else
875 *reg |= LPC18XX_SCU_PIN_EHS;
876 break;
877
878 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
879 if (param)
880 *reg &= ~LPC18XX_SCU_PIN_ZIF;
881 else
882 *reg |= LPC18XX_SCU_PIN_ZIF;
883 break;
884
885 case PIN_CONFIG_DRIVE_STRENGTH:
886 if (pin_cap->type != TYPE_HD) {
887 dev_err(pctldev->dev, "Drive strength available only on high-drive pins\n");
888 return -ENOTSUPP;
889 }
890 *reg &= ~LPC18XX_SCU_PIN_EHD_MASK;
891
892 switch (param_val) {
893 case 20: param_val -= 5;
894 case 14: param_val -= 5;
895 case 8: param_val -= 3;
896 case 4: param_val -= 4;
897 break;
898 default:
899 dev_err(pctldev->dev, "Drive strength %u unsupported\n", param_val);
900 return -ENOTSUPP;
901 }
902 *reg |= param_val << LPC18XX_SCU_PIN_EHD_POS;
903 break;
904
905 default:
906 dev_err(pctldev->dev, "Property not supported\n");
907 return -ENOTSUPP;
908 }
909
910 return 0;
911}
912
913static int lpc18xx_pconf_set(struct pinctrl_dev *pctldev, unsigned pin,
914 unsigned long *configs, unsigned num_configs)
915{
916 struct lpc18xx_scu_data *scu = pinctrl_dev_get_drvdata(pctldev);
917 struct lpc18xx_pin_caps *pin_cap;
918 enum pin_config_param param;
919 u16 param_val;
920 u32 reg;
921 int ret;
922 int i;
923
924 pin_cap = lpc18xx_get_pin_caps(pin);
925 if (!pin_cap)
926 return -EINVAL;
927
928 reg = readl(scu->base + pin_cap->offset);
929
930 for (i = 0; i < num_configs; i++) {
931 param = pinconf_to_config_param(configs[i]);
932 param_val = pinconf_to_config_argument(configs[i]);
933
934 if (pin_cap->type == TYPE_I2C0)
935 ret = lpc18xx_pconf_set_i2c0(pctldev, param, param_val, &reg, pin);
936 else if (pin_cap->type == TYPE_USB1)
937 ret = lpc18xx_pconf_set_usb1(pctldev, param, param_val, &reg);
938 else
939 ret = lpc18xx_pconf_set_pin(pctldev, param, param_val, &reg, pin_cap);
940
941 if (ret)
942 return ret;
943 }
944
945 writel(reg, scu->base + pin_cap->offset);
946
947 return 0;
948}
949
950static const struct pinconf_ops lpc18xx_pconf_ops = {
951 .is_generic = true,
952 .pin_config_get = lpc18xx_pconf_get,
953 .pin_config_set = lpc18xx_pconf_set,
954};
955
956static int lpc18xx_pmx_get_funcs_count(struct pinctrl_dev *pctldev)
957{
958 return ARRAY_SIZE(lpc18xx_function_names);
959}
960
961static const char *lpc18xx_pmx_get_func_name(struct pinctrl_dev *pctldev,
962 unsigned function)
963{
964 return lpc18xx_function_names[function];
965}
966
967static int lpc18xx_pmx_get_func_groups(struct pinctrl_dev *pctldev,
968 unsigned function,
969 const char *const **groups,
970 unsigned *const num_groups)
971{
972 struct lpc18xx_scu_data *scu = pinctrl_dev_get_drvdata(pctldev);
973
974 *groups = scu->func[function].groups;
975 *num_groups = scu->func[function].ngroups;
976
977 return 0;
978}
979
980static int lpc18xx_pmx_set(struct pinctrl_dev *pctldev, unsigned function,
981 unsigned group)
982{
983 struct lpc18xx_scu_data *scu = pinctrl_dev_get_drvdata(pctldev);
984 struct lpc18xx_pin_caps *pin = lpc18xx_pins[group].drv_data;
985 int func;
986 u32 reg;
987
988 /* Dedicated USB1 and I2C0 pins doesn't support muxing */
989 if (pin->type == TYPE_USB1) {
990 if (function == FUNC_USB1)
991 return 0;
992
993 goto fail;
994 }
995
996 if (pin->type == TYPE_I2C0) {
997 if (function == FUNC_I2C0)
998 return 0;
999
1000 goto fail;
1001 }
1002
1003 if (function == FUNC_ADC && (pin->analog & LPC18XX_ANALOG_PIN)) {
1004 u32 offset;
1005
1006 writel(LPC18XX_SCU_ANALOG_PIN_CFG, scu->base + pin->offset);
1007
1008 if (LPC18XX_ANALOG_ADC(pin->analog) == 0)
1009 offset = LPC18XX_SCU_REG_ENAIO0;
1010 else
1011 offset = LPC18XX_SCU_REG_ENAIO1;
1012
1013 reg = readl(scu->base + offset);
1014 reg |= pin->analog & LPC18XX_ANALOG_BIT_MASK;
1015 writel(reg, scu->base + offset);
1016
1017 return 0;
1018 }
1019
1020 if (function == FUNC_DAC && (pin->analog & LPC18XX_ANALOG_PIN)) {
1021 writel(LPC18XX_SCU_ANALOG_PIN_CFG, scu->base + pin->offset);
1022
1023 reg = readl(scu->base + LPC18XX_SCU_REG_ENAIO2);
1024 reg |= LPC18XX_SCU_REG_ENAIO2_DAC;
1025 writel(reg, scu->base + LPC18XX_SCU_REG_ENAIO2);
1026
1027 return 0;
1028 }
1029
1030 for (func = 0; func < LPC18XX_SCU_FUNC_PER_PIN; func++) {
1031 if (function == pin->functions[func])
1032 break;
1033 }
1034
1035 if (func >= LPC18XX_SCU_FUNC_PER_PIN)
1036 goto fail;
1037
1038 reg = readl(scu->base + pin->offset);
1039 reg &= ~LPC18XX_SCU_PIN_MODE_MASK;
1040 writel(reg | func, scu->base + pin->offset);
1041
1042 return 0;
1043fail:
1044 dev_err(pctldev->dev, "Pin %s can't be %s\n", lpc18xx_pins[group].name,
1045 lpc18xx_function_names[function]);
1046 return -EINVAL;
1047}
1048
1049static const struct pinmux_ops lpc18xx_pmx_ops = {
1050 .get_functions_count = lpc18xx_pmx_get_funcs_count,
1051 .get_function_name = lpc18xx_pmx_get_func_name,
1052 .get_function_groups = lpc18xx_pmx_get_func_groups,
1053 .set_mux = lpc18xx_pmx_set,
1054};
1055
1056static int lpc18xx_pctl_get_groups_count(struct pinctrl_dev *pctldev)
1057{
1058 return ARRAY_SIZE(lpc18xx_pins);
1059}
1060
1061static const char *lpc18xx_pctl_get_group_name(struct pinctrl_dev *pctldev,
1062 unsigned group)
1063{
1064 return lpc18xx_pins[group].name;
1065}
1066
1067static int lpc18xx_pctl_get_group_pins(struct pinctrl_dev *pctldev,
1068 unsigned group,
1069 const unsigned **pins,
1070 unsigned *num_pins)
1071{
1072 *pins = &lpc18xx_pins[group].number;
1073 *num_pins = 1;
1074
1075 return 0;
1076}
1077
1078static const struct pinctrl_ops lpc18xx_pctl_ops = {
1079 .get_groups_count = lpc18xx_pctl_get_groups_count,
1080 .get_group_name = lpc18xx_pctl_get_group_name,
1081 .get_group_pins = lpc18xx_pctl_get_group_pins,
1082 .dt_node_to_map = pinconf_generic_dt_node_to_map_pin,
1083 .dt_free_map = pinctrl_utils_dt_free_map,
1084};
1085
1086static struct pinctrl_desc lpc18xx_scu_desc = {
1087 .name = "lpc18xx/43xx-scu",
1088 .pins = lpc18xx_pins,
1089 .npins = ARRAY_SIZE(lpc18xx_pins),
1090 .pctlops = &lpc18xx_pctl_ops,
1091 .pmxops = &lpc18xx_pmx_ops,
1092 .confops = &lpc18xx_pconf_ops,
1093 .owner = THIS_MODULE,
1094};
1095
1096static bool lpc18xx_valid_pin_function(unsigned pin, unsigned function)
1097{
1098 struct lpc18xx_pin_caps *p = lpc18xx_pins[pin].drv_data;
1099 int i;
1100
1101 if (function == FUNC_DAC && p->analog == DAC)
1102 return true;
1103
1104 if (function == FUNC_ADC && p->analog)
1105 return true;
1106
1107 if (function == FUNC_I2C0 && p->type == TYPE_I2C0)
1108 return true;
1109
1110 if (function == FUNC_USB1 && p->type == TYPE_USB1)
1111 return true;
1112
1113 for (i = 0; i < LPC18XX_SCU_FUNC_PER_PIN; i++) {
1114 if (function == p->functions[i])
1115 return true;
1116 }
1117
1118 return false;
1119}
1120
1121static int lpc18xx_create_group_func_map(struct device *dev,
1122 struct lpc18xx_scu_data *scu)
1123{
1124 u16 pins[ARRAY_SIZE(lpc18xx_pins)];
1125 int func, ngroups, i;
1126
1127 for (func = 0; func < FUNC_MAX; ngroups = 0, func++) {
1128
1129 for (i = 0; i < ARRAY_SIZE(lpc18xx_pins); i++) {
1130 if (lpc18xx_valid_pin_function(i, func))
1131 pins[ngroups++] = i;
1132 }
1133
1134 scu->func[func].ngroups = ngroups;
1135 scu->func[func].groups = devm_kzalloc(dev, ngroups *
1136 sizeof(char *), GFP_KERNEL);
1137 if (!scu->func[func].groups)
1138 return -ENOMEM;
1139
1140 for (i = 0; i < ngroups; i++)
1141 scu->func[func].groups[i] = lpc18xx_pins[pins[i]].name;
1142 }
1143
1144 return 0;
1145}
1146
1147static int lpc18xx_scu_probe(struct platform_device *pdev)
1148{
1149 struct lpc18xx_scu_data *scu;
1150 struct resource *res;
1151 int ret;
1152
1153 scu = devm_kzalloc(&pdev->dev, sizeof(*scu), GFP_KERNEL);
1154 if (!scu)
1155 return -ENOMEM;
1156
1157 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1158 scu->base = devm_ioremap_resource(&pdev->dev, res);
1159 if (IS_ERR(scu->base))
1160 return PTR_ERR(scu->base);
1161
1162 scu->clk = devm_clk_get(&pdev->dev, NULL);
1163 if (IS_ERR(scu->clk)) {
1164 dev_err(&pdev->dev, "Input clock not found.\n");
1165 return PTR_ERR(scu->clk);
1166 }
1167
1168 ret = lpc18xx_create_group_func_map(&pdev->dev, scu);
1169 if (ret) {
1170 dev_err(&pdev->dev, "Unable to create group func map.\n");
1171 return ret;
1172 }
1173
1174 ret = clk_prepare_enable(scu->clk);
1175 if (ret) {
1176 dev_err(&pdev->dev, "Unable to enable clock.\n");
1177 return ret;
1178 }
1179
1180 platform_set_drvdata(pdev, scu);
1181
1182 scu->pctl = pinctrl_register(&lpc18xx_scu_desc, &pdev->dev, scu);
1183 if (IS_ERR(scu->pctl)) {
1184 dev_err(&pdev->dev, "Could not register pinctrl driver\n");
1185 clk_disable_unprepare(scu->clk);
1186 return PTR_ERR(scu->pctl);
1187 }
1188
1189 return 0;
1190}
1191
1192static int lpc18xx_scu_remove(struct platform_device *pdev)
1193{
1194 struct lpc18xx_scu_data *scu = platform_get_drvdata(pdev);
1195
1196 pinctrl_unregister(scu->pctl);
1197 clk_disable_unprepare(scu->clk);
1198
1199 return 0;
1200}
1201
1202static const struct of_device_id lpc18xx_scu_match[] = {
1203 { .compatible = "nxp,lpc1850-scu" },
1204 {},
1205};
1206MODULE_DEVICE_TABLE(of, lpc18xx_scu_match);
1207
1208static struct platform_driver lpc18xx_scu_driver = {
1209 .probe = lpc18xx_scu_probe,
1210 .remove = lpc18xx_scu_remove,
1211 .driver = {
1212 .name = "lpc18xx-scu",
1213 .of_match_table = lpc18xx_scu_match,
1214 },
1215};
1216module_platform_driver(lpc18xx_scu_driver);
1217
1218MODULE_AUTHOR("Joachim Eastwood <manabian@gmail.com>");
1219MODULE_DESCRIPTION("Pinctrl driver for NXP LPC18xx/43xx SCU");
1220MODULE_LICENSE("GPL v2");
diff --git a/drivers/pinctrl/pinctrl-palmas.c b/drivers/pinctrl/pinctrl-palmas.c
index 2631df0504bd..f7e168044baf 100644
--- a/drivers/pinctrl/pinctrl-palmas.c
+++ b/drivers/pinctrl/pinctrl-palmas.c
@@ -1044,9 +1044,9 @@ static int palmas_pinctrl_probe(struct platform_device *pdev)
1044 palmas_pinctrl_desc.pins = palmas_pins_desc; 1044 palmas_pinctrl_desc.pins = palmas_pins_desc;
1045 palmas_pinctrl_desc.npins = ARRAY_SIZE(palmas_pins_desc); 1045 palmas_pinctrl_desc.npins = ARRAY_SIZE(palmas_pins_desc);
1046 pci->pctl = pinctrl_register(&palmas_pinctrl_desc, &pdev->dev, pci); 1046 pci->pctl = pinctrl_register(&palmas_pinctrl_desc, &pdev->dev, pci);
1047 if (!pci->pctl) { 1047 if (IS_ERR(pci->pctl)) {
1048 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n"); 1048 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
1049 return -ENODEV; 1049 return PTR_ERR(pci->pctl);
1050 } 1050 }
1051 return 0; 1051 return 0;
1052} 1052}
diff --git a/drivers/pinctrl/pinctrl-pistachio.c b/drivers/pinctrl/pinctrl-pistachio.c
new file mode 100644
index 000000000000..63100be81015
--- /dev/null
+++ b/drivers/pinctrl/pinctrl-pistachio.c
@@ -0,0 +1,1504 @@
1/*
2 * Pistachio SoC pinctrl driver
3 *
4 * Copyright (C) 2014 Imagination Technologies Ltd.
5 * Copyright (C) 2014 Google, Inc.
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms and conditions of the GNU General Public License,
9 * version 2, as published by the Free Software Foundation.
10 */
11
12#include <linux/gpio.h>
13#include <linux/gpio/driver.h>
14#include <linux/interrupt.h>
15#include <linux/io.h>
16#include <linux/irq.h>
17#include <linux/of.h>
18#include <linux/of_irq.h>
19#include <linux/pinctrl/pinconf.h>
20#include <linux/pinctrl/pinconf-generic.h>
21#include <linux/pinctrl/pinctrl.h>
22#include <linux/pinctrl/pinmux.h>
23#include <linux/platform_device.h>
24#include <linux/slab.h>
25#include <linux/spinlock.h>
26
27#include "pinctrl-utils.h"
28
29#define PADS_SCHMITT_EN0 0x000
30#define PADS_SCHMITT_EN_REG(pin) (PADS_SCHMITT_EN0 + 0x4 * ((pin) / 32))
31#define PADS_SCHMITT_EN_BIT(pin) BIT((pin) % 32)
32
33#define PADS_PU_PD0 0x040
34#define PADS_PU_PD_REG(pin) (PADS_PU_PD0 + 0x4 * ((pin) / 16))
35#define PADS_PU_PD_SHIFT(pin) (2 * ((pin) % 16))
36#define PADS_PU_PD_MASK 0x3
37#define PADS_PU_PD_HIGHZ 0x0
38#define PADS_PU_PD_UP 0x1
39#define PADS_PU_PD_DOWN 0x2
40#define PADS_PU_PD_BUS 0x3
41
42#define PADS_FUNCTION_SELECT0 0x0c0
43#define PADS_FUNCTION_SELECT1 0x0c4
44#define PADS_FUNCTION_SELECT2 0x0c8
45#define PADS_SCENARIO_SELECT 0x0f8
46
47#define PADS_SLEW_RATE0 0x100
48#define PADS_SLEW_RATE_REG(pin) (PADS_SLEW_RATE0 + 0x4 * ((pin) / 32))
49#define PADS_SLEW_RATE_BIT(pin) BIT((pin) % 32)
50
51#define PADS_DRIVE_STRENGTH0 0x120
52#define PADS_DRIVE_STRENGTH_REG(pin) \
53 (PADS_DRIVE_STRENGTH0 + 0x4 * ((pin) / 16))
54#define PADS_DRIVE_STRENGTH_SHIFT(pin) (2 * ((pin) % 16))
55#define PADS_DRIVE_STRENGTH_MASK 0x3
56#define PADS_DRIVE_STRENGTH_2MA 0x0
57#define PADS_DRIVE_STRENGTH_4MA 0x1
58#define PADS_DRIVE_STRENGTH_8MA 0x2
59#define PADS_DRIVE_STRENGTH_12MA 0x3
60
61#define GPIO_BANK_BASE(bank) (0x200 + 0x24 * (bank))
62
63#define GPIO_BIT_EN 0x00
64#define GPIO_OUTPUT_EN 0x04
65#define GPIO_OUTPUT 0x08
66#define GPIO_INPUT 0x0c
67#define GPIO_INPUT_POLARITY 0x10
68#define GPIO_INTERRUPT_TYPE 0x14
69#define GPIO_INTERRUPT_TYPE_LEVEL 0x0
70#define GPIO_INTERRUPT_TYPE_EDGE 0x1
71#define GPIO_INTERRUPT_EDGE 0x18
72#define GPIO_INTERRUPT_EDGE_SINGLE 0x0
73#define GPIO_INTERRUPT_EDGE_DUAL 0x1
74#define GPIO_INTERRUPT_EN 0x1c
75#define GPIO_INTERRUPT_STATUS 0x20
76
77struct pistachio_function {
78 const char *name;
79 const char * const *groups;
80 unsigned int ngroups;
81 const int *scenarios;
82 unsigned int nscenarios;
83 unsigned int scenario_reg;
84 unsigned int scenario_shift;
85 unsigned int scenario_mask;
86};
87
88struct pistachio_pin_group {
89 const char *name;
90 unsigned int pin;
91 int mux_option[3];
92 int mux_reg;
93 int mux_shift;
94 int mux_mask;
95};
96
97struct pistachio_gpio_bank {
98 struct pistachio_pinctrl *pctl;
99 void __iomem *base;
100 unsigned int pin_base;
101 unsigned int npins;
102 struct gpio_chip gpio_chip;
103 struct irq_chip irq_chip;
104};
105
106struct pistachio_pinctrl {
107 struct device *dev;
108 void __iomem *base;
109 struct pinctrl_dev *pctldev;
110 const struct pinctrl_pin_desc *pins;
111 unsigned int npins;
112 const struct pistachio_function *functions;
113 unsigned int nfunctions;
114 const struct pistachio_pin_group *groups;
115 unsigned int ngroups;
116 struct pistachio_gpio_bank *gpio_banks;
117 unsigned int nbanks;
118};
119
120#define PISTACHIO_PIN_MFIO(p) (p)
121#define PISTACHIO_PIN_TCK 90
122#define PISTACHIO_PIN_TRSTN 91
123#define PISTACHIO_PIN_TDI 92
124#define PISTACHIO_PIN_TMS 93
125#define PISTACHIO_PIN_TDO 94
126#define PISTACHIO_PIN_JTAG_COMPLY 95
127#define PISTACHIO_PIN_SAFE_MODE 96
128#define PISTACHIO_PIN_POR_DISABLE 97
129#define PISTACHIO_PIN_RESETN 98
130
131#define MFIO_PIN_DESC(p) PINCTRL_PIN(PISTACHIO_PIN_MFIO(p), "mfio" #p)
132
133static const struct pinctrl_pin_desc pistachio_pins[] = {
134 MFIO_PIN_DESC(0),
135 MFIO_PIN_DESC(1),
136 MFIO_PIN_DESC(2),
137 MFIO_PIN_DESC(3),
138 MFIO_PIN_DESC(4),
139 MFIO_PIN_DESC(5),
140 MFIO_PIN_DESC(6),
141 MFIO_PIN_DESC(7),
142 MFIO_PIN_DESC(8),
143 MFIO_PIN_DESC(9),
144 MFIO_PIN_DESC(10),
145 MFIO_PIN_DESC(11),
146 MFIO_PIN_DESC(12),
147 MFIO_PIN_DESC(13),
148 MFIO_PIN_DESC(14),
149 MFIO_PIN_DESC(15),
150 MFIO_PIN_DESC(16),
151 MFIO_PIN_DESC(17),
152 MFIO_PIN_DESC(18),
153 MFIO_PIN_DESC(19),
154 MFIO_PIN_DESC(20),
155 MFIO_PIN_DESC(21),
156 MFIO_PIN_DESC(22),
157 MFIO_PIN_DESC(23),
158 MFIO_PIN_DESC(24),
159 MFIO_PIN_DESC(25),
160 MFIO_PIN_DESC(26),
161 MFIO_PIN_DESC(27),
162 MFIO_PIN_DESC(28),
163 MFIO_PIN_DESC(29),
164 MFIO_PIN_DESC(30),
165 MFIO_PIN_DESC(31),
166 MFIO_PIN_DESC(32),
167 MFIO_PIN_DESC(33),
168 MFIO_PIN_DESC(34),
169 MFIO_PIN_DESC(35),
170 MFIO_PIN_DESC(36),
171 MFIO_PIN_DESC(37),
172 MFIO_PIN_DESC(38),
173 MFIO_PIN_DESC(39),
174 MFIO_PIN_DESC(40),
175 MFIO_PIN_DESC(41),
176 MFIO_PIN_DESC(42),
177 MFIO_PIN_DESC(43),
178 MFIO_PIN_DESC(44),
179 MFIO_PIN_DESC(45),
180 MFIO_PIN_DESC(46),
181 MFIO_PIN_DESC(47),
182 MFIO_PIN_DESC(48),
183 MFIO_PIN_DESC(49),
184 MFIO_PIN_DESC(50),
185 MFIO_PIN_DESC(51),
186 MFIO_PIN_DESC(52),
187 MFIO_PIN_DESC(53),
188 MFIO_PIN_DESC(54),
189 MFIO_PIN_DESC(55),
190 MFIO_PIN_DESC(56),
191 MFIO_PIN_DESC(57),
192 MFIO_PIN_DESC(58),
193 MFIO_PIN_DESC(59),
194 MFIO_PIN_DESC(60),
195 MFIO_PIN_DESC(61),
196 MFIO_PIN_DESC(62),
197 MFIO_PIN_DESC(63),
198 MFIO_PIN_DESC(64),
199 MFIO_PIN_DESC(65),
200 MFIO_PIN_DESC(66),
201 MFIO_PIN_DESC(67),
202 MFIO_PIN_DESC(68),
203 MFIO_PIN_DESC(69),
204 MFIO_PIN_DESC(70),
205 MFIO_PIN_DESC(71),
206 MFIO_PIN_DESC(72),
207 MFIO_PIN_DESC(73),
208 MFIO_PIN_DESC(74),
209 MFIO_PIN_DESC(75),
210 MFIO_PIN_DESC(76),
211 MFIO_PIN_DESC(77),
212 MFIO_PIN_DESC(78),
213 MFIO_PIN_DESC(79),
214 MFIO_PIN_DESC(80),
215 MFIO_PIN_DESC(81),
216 MFIO_PIN_DESC(82),
217 MFIO_PIN_DESC(83),
218 MFIO_PIN_DESC(84),
219 MFIO_PIN_DESC(85),
220 MFIO_PIN_DESC(86),
221 MFIO_PIN_DESC(87),
222 MFIO_PIN_DESC(88),
223 MFIO_PIN_DESC(89),
224 PINCTRL_PIN(PISTACHIO_PIN_TCK, "tck"),
225 PINCTRL_PIN(PISTACHIO_PIN_TRSTN, "trstn"),
226 PINCTRL_PIN(PISTACHIO_PIN_TDI, "tdi"),
227 PINCTRL_PIN(PISTACHIO_PIN_TMS, "tms"),
228 PINCTRL_PIN(PISTACHIO_PIN_TDO, "tdo"),
229 PINCTRL_PIN(PISTACHIO_PIN_JTAG_COMPLY, "jtag_comply"),
230 PINCTRL_PIN(PISTACHIO_PIN_SAFE_MODE, "safe_mode"),
231 PINCTRL_PIN(PISTACHIO_PIN_POR_DISABLE, "por_disable"),
232 PINCTRL_PIN(PISTACHIO_PIN_RESETN, "resetn"),
233};
234
235static const char * const pistachio_spim0_groups[] = {
236 "mfio1", "mfio2", "mfio8", "mfio9", "mfio10", "mfio28", "mfio29",
237 "mfio30", "mfio55", "mfio56", "mfio57",
238};
239
240static const char * const pistachio_spim1_groups[] = {
241 "mfio0", "mfio1", "mfio2", "mfio3", "mfio4", "mfio5", "mfio6",
242 "mfio7", "mfio31", "mfio55", "mfio56", "mfio57", "mfio58",
243};
244
245static const char * const pistachio_spis_groups[] = {
246 "mfio11", "mfio12", "mfio13", "mfio14",
247};
248
249static const char *const pistachio_sdhost_groups[] = {
250 "mfio15", "mfio16", "mfio17", "mfio18", "mfio19", "mfio20",
251 "mfio21", "mfio22", "mfio23", "mfio24", "mfio25", "mfio26",
252 "mfio27",
253};
254
255static const char * const pistachio_i2c0_groups[] = {
256 "mfio28", "mfio29",
257};
258
259static const char * const pistachio_i2c1_groups[] = {
260 "mfio30", "mfio31",
261};
262
263static const char * const pistachio_i2c2_groups[] = {
264 "mfio32", "mfio33",
265};
266
267static const char * const pistachio_i2c3_groups[] = {
268 "mfio34", "mfio35",
269};
270
271static const char * const pistachio_audio_clk_in_groups[] = {
272 "mfio36",
273};
274
275static const char * const pistachio_i2s_out_groups[] = {
276 "mfio36", "mfio37", "mfio38", "mfio39", "mfio40", "mfio41",
277 "mfio42", "mfio43", "mfio44",
278};
279
280static const char * const pistachio_debug_raw_cca_ind_groups[] = {
281 "mfio37",
282};
283
284static const char * const pistachio_debug_ed_sec20_cca_ind_groups[] = {
285 "mfio38",
286};
287
288static const char * const pistachio_debug_ed_sec40_cca_ind_groups[] = {
289 "mfio39",
290};
291
292static const char * const pistachio_debug_agc_done_0_groups[] = {
293 "mfio40",
294};
295
296static const char * const pistachio_debug_agc_done_1_groups[] = {
297 "mfio41",
298};
299
300static const char * const pistachio_debug_ed_cca_ind_groups[] = {
301 "mfio42",
302};
303
304static const char * const pistachio_debug_s2l_done_groups[] = {
305 "mfio43",
306};
307
308static const char * const pistachio_i2s_dac_clk_groups[] = {
309 "mfio45",
310};
311
312static const char * const pistachio_audio_sync_groups[] = {
313 "mfio45",
314};
315
316static const char * const pistachio_audio_trigger_groups[] = {
317 "mfio46",
318};
319
320static const char * const pistachio_i2s_in_groups[] = {
321 "mfio47", "mfio48", "mfio49", "mfio50", "mfio51", "mfio52",
322 "mfio53", "mfio54",
323};
324
325static const char * const pistachio_uart0_groups[] = {
326 "mfio55", "mfio56", "mfio57", "mfio58",
327};
328
329static const char * const pistachio_uart1_groups[] = {
330 "mfio59", "mfio60", "mfio1", "mfio2",
331};
332
333static const char * const pistachio_spdif_out_groups[] = {
334 "mfio61",
335};
336
337static const char * const pistachio_spdif_in_groups[] = {
338 "mfio62", "mfio54",
339};
340static const int pistachio_spdif_in_scenarios[] = {
341 PISTACHIO_PIN_MFIO(62),
342 PISTACHIO_PIN_MFIO(54),
343};
344
345static const char * const pistachio_eth_groups[] = {
346 "mfio63", "mfio64", "mfio65", "mfio66", "mfio67", "mfio68",
347 "mfio69", "mfio70", "mfio71",
348};
349
350static const char * const pistachio_ir_groups[] = {
351 "mfio72",
352};
353
354static const char * const pistachio_pwmpdm_groups[] = {
355 "mfio73", "mfio74", "mfio75", "mfio76",
356};
357
358static const char * const pistachio_mips_trace_clk_groups[] = {
359 "mfio15", "mfio63", "mfio73",
360};
361
362static const char * const pistachio_mips_trace_dint_groups[] = {
363 "mfio16", "mfio64", "mfio74",
364};
365static const int pistachio_mips_trace_dint_scenarios[] = {
366 PISTACHIO_PIN_MFIO(16),
367 PISTACHIO_PIN_MFIO(64),
368 PISTACHIO_PIN_MFIO(74),
369};
370
371static const char * const pistachio_mips_trace_trigout_groups[] = {
372 "mfio17", "mfio65", "mfio75",
373};
374
375static const char * const pistachio_mips_trace_trigin_groups[] = {
376 "mfio18", "mfio66", "mfio76",
377};
378static const int pistachio_mips_trace_trigin_scenarios[] = {
379 PISTACHIO_PIN_MFIO(18),
380 PISTACHIO_PIN_MFIO(66),
381 PISTACHIO_PIN_MFIO(76),
382};
383
384static const char * const pistachio_mips_trace_dm_groups[] = {
385 "mfio19", "mfio67", "mfio77",
386};
387
388static const char * const pistachio_mips_probe_n_groups[] = {
389 "mfio20", "mfio68", "mfio78",
390};
391static const int pistachio_mips_probe_n_scenarios[] = {
392 PISTACHIO_PIN_MFIO(20),
393 PISTACHIO_PIN_MFIO(68),
394 PISTACHIO_PIN_MFIO(78),
395};
396
397static const char * const pistachio_mips_trace_data_groups[] = {
398 "mfio15", "mfio16", "mfio17", "mfio18", "mfio19", "mfio20",
399 "mfio21", "mfio22", "mfio63", "mfio64", "mfio65", "mfio66",
400 "mfio67", "mfio68", "mfio69", "mfio70", "mfio79", "mfio80",
401 "mfio81", "mfio82", "mfio83", "mfio84", "mfio85", "mfio86",
402};
403
404static const char * const pistachio_sram_debug_groups[] = {
405 "mfio73", "mfio74",
406};
407
408static const char * const pistachio_rom_debug_groups[] = {
409 "mfio75", "mfio76",
410};
411
412static const char * const pistachio_rpu_debug_groups[] = {
413 "mfio77", "mfio78",
414};
415
416static const char * const pistachio_mips_debug_groups[] = {
417 "mfio79", "mfio80",
418};
419
420static const char * const pistachio_eth_debug_groups[] = {
421 "mfio81", "mfio82",
422};
423
424static const char * const pistachio_usb_debug_groups[] = {
425 "mfio83", "mfio84",
426};
427
428static const char * const pistachio_sdhost_debug_groups[] = {
429 "mfio85", "mfio86",
430};
431
432static const char * const pistachio_socif_debug_groups[] = {
433 "mfio87", "mfio88",
434};
435
436static const char * const pistachio_mdc_debug_groups[] = {
437 "mfio77", "mfio78",
438};
439
440static const char * const pistachio_ddr_debug_groups[] = {
441 "mfio79", "mfio80",
442};
443
444static const char * const pistachio_dreq0_groups[] = {
445 "mfio81",
446};
447
448static const char * const pistachio_dreq1_groups[] = {
449 "mfio82",
450};
451
452static const char * const pistachio_dreq2_groups[] = {
453 "mfio87",
454};
455
456static const char * const pistachio_dreq3_groups[] = {
457 "mfio88",
458};
459
460static const char * const pistachio_dreq4_groups[] = {
461 "mfio89",
462};
463
464static const char * const pistachio_dreq5_groups[] = {
465 "mfio89",
466};
467
468static const char * const pistachio_mips_pll_lock_groups[] = {
469 "mfio83",
470};
471
472static const char * const pistachio_sys_pll_lock_groups[] = {
473 "mfio84",
474};
475
476static const char * const pistachio_wifi_pll_lock_groups[] = {
477 "mfio85",
478};
479
480static const char * const pistachio_bt_pll_lock_groups[] = {
481 "mfio86",
482};
483
484static const char * const pistachio_rpu_v_pll_lock_groups[] = {
485 "mfio87",
486};
487
488static const char * const pistachio_rpu_l_pll_lock_groups[] = {
489 "mfio88",
490};
491
492static const char * const pistachio_audio_pll_lock_groups[] = {
493 "mfio89",
494};
495
496#define FUNCTION(_name) \
497 { \
498 .name = #_name, \
499 .groups = pistachio_##_name##_groups, \
500 .ngroups = ARRAY_SIZE(pistachio_##_name##_groups), \
501 }
502
503#define FUNCTION_SCENARIO(_name, _reg, _shift, _mask) \
504 { \
505 .name = #_name, \
506 .groups = pistachio_##_name##_groups, \
507 .ngroups = ARRAY_SIZE(pistachio_##_name##_groups), \
508 .scenarios = pistachio_##_name##_scenarios, \
509 .nscenarios = ARRAY_SIZE(pistachio_##_name##_scenarios),\
510 .scenario_reg = _reg, \
511 .scenario_shift = _shift, \
512 .scenario_mask = _mask, \
513 }
514
515enum pistachio_mux_option {
516 PISTACHIO_FUNCTION_NONE = -1,
517 PISTACHIO_FUNCTION_SPIM0,
518 PISTACHIO_FUNCTION_SPIM1,
519 PISTACHIO_FUNCTION_SPIS,
520 PISTACHIO_FUNCTION_SDHOST,
521 PISTACHIO_FUNCTION_I2C0,
522 PISTACHIO_FUNCTION_I2C1,
523 PISTACHIO_FUNCTION_I2C2,
524 PISTACHIO_FUNCTION_I2C3,
525 PISTACHIO_FUNCTION_AUDIO_CLK_IN,
526 PISTACHIO_FUNCTION_I2S_OUT,
527 PISTACHIO_FUNCTION_I2S_DAC_CLK,
528 PISTACHIO_FUNCTION_AUDIO_SYNC,
529 PISTACHIO_FUNCTION_AUDIO_TRIGGER,
530 PISTACHIO_FUNCTION_I2S_IN,
531 PISTACHIO_FUNCTION_UART0,
532 PISTACHIO_FUNCTION_UART1,
533 PISTACHIO_FUNCTION_SPDIF_OUT,
534 PISTACHIO_FUNCTION_SPDIF_IN,
535 PISTACHIO_FUNCTION_ETH,
536 PISTACHIO_FUNCTION_IR,
537 PISTACHIO_FUNCTION_PWMPDM,
538 PISTACHIO_FUNCTION_MIPS_TRACE_CLK,
539 PISTACHIO_FUNCTION_MIPS_TRACE_DINT,
540 PISTACHIO_FUNCTION_MIPS_TRACE_TRIGOUT,
541 PISTACHIO_FUNCTION_MIPS_TRACE_TRIGIN,
542 PISTACHIO_FUNCTION_MIPS_TRACE_DM,
543 PISTACHIO_FUNCTION_MIPS_TRACE_PROBE_N,
544 PISTACHIO_FUNCTION_MIPS_TRACE_DATA,
545 PISTACHIO_FUNCTION_SRAM_DEBUG,
546 PISTACHIO_FUNCTION_ROM_DEBUG,
547 PISTACHIO_FUNCTION_RPU_DEBUG,
548 PISTACHIO_FUNCTION_MIPS_DEBUG,
549 PISTACHIO_FUNCTION_ETH_DEBUG,
550 PISTACHIO_FUNCTION_USB_DEBUG,
551 PISTACHIO_FUNCTION_SDHOST_DEBUG,
552 PISTACHIO_FUNCTION_SOCIF_DEBUG,
553 PISTACHIO_FUNCTION_MDC_DEBUG,
554 PISTACHIO_FUNCTION_DDR_DEBUG,
555 PISTACHIO_FUNCTION_DREQ0,
556 PISTACHIO_FUNCTION_DREQ1,
557 PISTACHIO_FUNCTION_DREQ2,
558 PISTACHIO_FUNCTION_DREQ3,
559 PISTACHIO_FUNCTION_DREQ4,
560 PISTACHIO_FUNCTION_DREQ5,
561 PISTACHIO_FUNCTION_MIPS_PLL_LOCK,
562 PISTACHIO_FUNCTION_SYS_PLL_LOCK,
563 PISTACHIO_FUNCTION_WIFI_PLL_LOCK,
564 PISTACHIO_FUNCTION_BT_PLL_LOCK,
565 PISTACHIO_FUNCTION_RPU_V_PLL_LOCK,
566 PISTACHIO_FUNCTION_RPU_L_PLL_LOCK,
567 PISTACHIO_FUNCTION_AUDIO_PLL_LOCK,
568 PISTACHIO_FUNCTION_DEBUG_RAW_CCA_IND,
569 PISTACHIO_FUNCTION_DEBUG_ED_SEC20_CCA_IND,
570 PISTACHIO_FUNCTION_DEBUG_ED_SEC40_CCA_IND,
571 PISTACHIO_FUNCTION_DEBUG_AGC_DONE_0,
572 PISTACHIO_FUNCTION_DEBUG_AGC_DONE_1,
573 PISTACHIO_FUNCTION_DEBUG_ED_CCA_IND,
574 PISTACHIO_FUNCTION_DEBUG_S2L_DONE,
575};
576
577static const struct pistachio_function pistachio_functions[] = {
578 FUNCTION(spim0),
579 FUNCTION(spim1),
580 FUNCTION(spis),
581 FUNCTION(sdhost),
582 FUNCTION(i2c0),
583 FUNCTION(i2c1),
584 FUNCTION(i2c2),
585 FUNCTION(i2c3),
586 FUNCTION(audio_clk_in),
587 FUNCTION(i2s_out),
588 FUNCTION(i2s_dac_clk),
589 FUNCTION(audio_sync),
590 FUNCTION(audio_trigger),
591 FUNCTION(i2s_in),
592 FUNCTION(uart0),
593 FUNCTION(uart1),
594 FUNCTION(spdif_out),
595 FUNCTION_SCENARIO(spdif_in, PADS_SCENARIO_SELECT, 0, 0x1),
596 FUNCTION(eth),
597 FUNCTION(ir),
598 FUNCTION(pwmpdm),
599 FUNCTION(mips_trace_clk),
600 FUNCTION_SCENARIO(mips_trace_dint, PADS_SCENARIO_SELECT, 1, 0x3),
601 FUNCTION(mips_trace_trigout),
602 FUNCTION_SCENARIO(mips_trace_trigin, PADS_SCENARIO_SELECT, 3, 0x3),
603 FUNCTION(mips_trace_dm),
604 FUNCTION_SCENARIO(mips_probe_n, PADS_SCENARIO_SELECT, 5, 0x3),
605 FUNCTION(mips_trace_data),
606 FUNCTION(sram_debug),
607 FUNCTION(rom_debug),
608 FUNCTION(rpu_debug),
609 FUNCTION(mips_debug),
610 FUNCTION(eth_debug),
611 FUNCTION(usb_debug),
612 FUNCTION(sdhost_debug),
613 FUNCTION(socif_debug),
614 FUNCTION(mdc_debug),
615 FUNCTION(ddr_debug),
616 FUNCTION(dreq0),
617 FUNCTION(dreq1),
618 FUNCTION(dreq2),
619 FUNCTION(dreq3),
620 FUNCTION(dreq4),
621 FUNCTION(dreq5),
622 FUNCTION(mips_pll_lock),
623 FUNCTION(sys_pll_lock),
624 FUNCTION(wifi_pll_lock),
625 FUNCTION(bt_pll_lock),
626 FUNCTION(rpu_v_pll_lock),
627 FUNCTION(rpu_l_pll_lock),
628 FUNCTION(audio_pll_lock),
629 FUNCTION(debug_raw_cca_ind),
630 FUNCTION(debug_ed_sec20_cca_ind),
631 FUNCTION(debug_ed_sec40_cca_ind),
632 FUNCTION(debug_agc_done_0),
633 FUNCTION(debug_agc_done_1),
634 FUNCTION(debug_ed_cca_ind),
635 FUNCTION(debug_s2l_done),
636};
637
638#define PIN_GROUP(_pin, _name) \
639 { \
640 .name = #_name, \
641 .pin = PISTACHIO_PIN_##_pin, \
642 .mux_option = { \
643 PISTACHIO_FUNCTION_NONE, \
644 PISTACHIO_FUNCTION_NONE, \
645 PISTACHIO_FUNCTION_NONE, \
646 }, \
647 .mux_reg = -1, \
648 .mux_shift = -1, \
649 .mux_mask = -1, \
650 }
651
652#define MFIO_PIN_GROUP(_pin, _func) \
653 { \
654 .name = "mfio" #_pin, \
655 .pin = PISTACHIO_PIN_MFIO(_pin), \
656 .mux_option = { \
657 PISTACHIO_FUNCTION_##_func, \
658 PISTACHIO_FUNCTION_NONE, \
659 PISTACHIO_FUNCTION_NONE, \
660 }, \
661 .mux_reg = -1, \
662 .mux_shift = -1, \
663 .mux_mask = -1, \
664 }
665
666#define MFIO_MUX_PIN_GROUP(_pin, _f0, _f1, _f2, _reg, _shift, _mask) \
667 { \
668 .name = "mfio" #_pin, \
669 .pin = PISTACHIO_PIN_MFIO(_pin), \
670 .mux_option = { \
671 PISTACHIO_FUNCTION_##_f0, \
672 PISTACHIO_FUNCTION_##_f1, \
673 PISTACHIO_FUNCTION_##_f2, \
674 }, \
675 .mux_reg = _reg, \
676 .mux_shift = _shift, \
677 .mux_mask = _mask, \
678 }
679
680static const struct pistachio_pin_group pistachio_groups[] = {
681 MFIO_PIN_GROUP(0, SPIM1),
682 MFIO_MUX_PIN_GROUP(1, SPIM1, SPIM0, UART1,
683 PADS_FUNCTION_SELECT0, 0, 0x3),
684 MFIO_MUX_PIN_GROUP(2, SPIM1, SPIM0, UART1,
685 PADS_FUNCTION_SELECT0, 2, 0x3),
686 MFIO_PIN_GROUP(3, SPIM1),
687 MFIO_PIN_GROUP(4, SPIM1),
688 MFIO_PIN_GROUP(5, SPIM1),
689 MFIO_PIN_GROUP(6, SPIM1),
690 MFIO_PIN_GROUP(7, SPIM1),
691 MFIO_PIN_GROUP(8, SPIM0),
692 MFIO_PIN_GROUP(9, SPIM0),
693 MFIO_PIN_GROUP(10, SPIM0),
694 MFIO_PIN_GROUP(11, SPIS),
695 MFIO_PIN_GROUP(12, SPIS),
696 MFIO_PIN_GROUP(13, SPIS),
697 MFIO_PIN_GROUP(14, SPIS),
698 MFIO_MUX_PIN_GROUP(15, SDHOST, MIPS_TRACE_CLK, MIPS_TRACE_DATA,
699 PADS_FUNCTION_SELECT0, 4, 0x3),
700 MFIO_MUX_PIN_GROUP(16, SDHOST, MIPS_TRACE_DINT, MIPS_TRACE_DATA,
701 PADS_FUNCTION_SELECT0, 6, 0x3),
702 MFIO_MUX_PIN_GROUP(17, SDHOST, MIPS_TRACE_TRIGOUT, MIPS_TRACE_DATA,
703 PADS_FUNCTION_SELECT0, 8, 0x3),
704 MFIO_MUX_PIN_GROUP(18, SDHOST, MIPS_TRACE_TRIGIN, MIPS_TRACE_DATA,
705 PADS_FUNCTION_SELECT0, 10, 0x3),
706 MFIO_MUX_PIN_GROUP(19, SDHOST, MIPS_TRACE_DM, MIPS_TRACE_DATA,
707 PADS_FUNCTION_SELECT0, 12, 0x3),
708 MFIO_MUX_PIN_GROUP(20, SDHOST, MIPS_TRACE_PROBE_N, MIPS_TRACE_DATA,
709 PADS_FUNCTION_SELECT0, 14, 0x3),
710 MFIO_MUX_PIN_GROUP(21, SDHOST, NONE, MIPS_TRACE_DATA,
711 PADS_FUNCTION_SELECT0, 16, 0x3),
712 MFIO_MUX_PIN_GROUP(22, SDHOST, NONE, MIPS_TRACE_DATA,
713 PADS_FUNCTION_SELECT0, 18, 0x3),
714 MFIO_PIN_GROUP(23, SDHOST),
715 MFIO_PIN_GROUP(24, SDHOST),
716 MFIO_PIN_GROUP(25, SDHOST),
717 MFIO_PIN_GROUP(26, SDHOST),
718 MFIO_PIN_GROUP(27, SDHOST),
719 MFIO_MUX_PIN_GROUP(28, I2C0, SPIM0, NONE,
720 PADS_FUNCTION_SELECT0, 20, 0x1),
721 MFIO_MUX_PIN_GROUP(29, I2C0, SPIM0, NONE,
722 PADS_FUNCTION_SELECT0, 21, 0x1),
723 MFIO_MUX_PIN_GROUP(30, I2C1, SPIM0, NONE,
724 PADS_FUNCTION_SELECT0, 22, 0x1),
725 MFIO_MUX_PIN_GROUP(31, I2C1, SPIM1, NONE,
726 PADS_FUNCTION_SELECT0, 23, 0x1),
727 MFIO_PIN_GROUP(32, I2C2),
728 MFIO_PIN_GROUP(33, I2C2),
729 MFIO_PIN_GROUP(34, I2C3),
730 MFIO_PIN_GROUP(35, I2C3),
731 MFIO_MUX_PIN_GROUP(36, I2S_OUT, AUDIO_CLK_IN, NONE,
732 PADS_FUNCTION_SELECT0, 24, 0x1),
733 MFIO_MUX_PIN_GROUP(37, I2S_OUT, DEBUG_RAW_CCA_IND, NONE,
734 PADS_FUNCTION_SELECT0, 25, 0x1),
735 MFIO_MUX_PIN_GROUP(38, I2S_OUT, DEBUG_ED_SEC20_CCA_IND, NONE,
736 PADS_FUNCTION_SELECT0, 26, 0x1),
737 MFIO_MUX_PIN_GROUP(39, I2S_OUT, DEBUG_ED_SEC40_CCA_IND, NONE,
738 PADS_FUNCTION_SELECT0, 27, 0x1),
739 MFIO_MUX_PIN_GROUP(40, I2S_OUT, DEBUG_AGC_DONE_0, NONE,
740 PADS_FUNCTION_SELECT0, 28, 0x1),
741 MFIO_MUX_PIN_GROUP(41, I2S_OUT, DEBUG_AGC_DONE_1, NONE,
742 PADS_FUNCTION_SELECT0, 29, 0x1),
743 MFIO_MUX_PIN_GROUP(42, I2S_OUT, DEBUG_ED_CCA_IND, NONE,
744 PADS_FUNCTION_SELECT0, 30, 0x1),
745 MFIO_MUX_PIN_GROUP(43, I2S_OUT, DEBUG_S2L_DONE, NONE,
746 PADS_FUNCTION_SELECT0, 31, 0x1),
747 MFIO_PIN_GROUP(44, I2S_OUT),
748 MFIO_MUX_PIN_GROUP(45, I2S_DAC_CLK, AUDIO_SYNC, NONE,
749 PADS_FUNCTION_SELECT1, 0, 0x1),
750 MFIO_PIN_GROUP(46, AUDIO_TRIGGER),
751 MFIO_PIN_GROUP(47, I2S_IN),
752 MFIO_PIN_GROUP(48, I2S_IN),
753 MFIO_PIN_GROUP(49, I2S_IN),
754 MFIO_PIN_GROUP(50, I2S_IN),
755 MFIO_PIN_GROUP(51, I2S_IN),
756 MFIO_PIN_GROUP(52, I2S_IN),
757 MFIO_PIN_GROUP(53, I2S_IN),
758 MFIO_MUX_PIN_GROUP(54, I2S_IN, NONE, SPDIF_IN,
759 PADS_FUNCTION_SELECT1, 1, 0x3),
760 MFIO_MUX_PIN_GROUP(55, UART0, SPIM0, SPIM1,
761 PADS_FUNCTION_SELECT1, 3, 0x3),
762 MFIO_MUX_PIN_GROUP(56, UART0, SPIM0, SPIM1,
763 PADS_FUNCTION_SELECT1, 5, 0x3),
764 MFIO_MUX_PIN_GROUP(57, UART0, SPIM0, SPIM1,
765 PADS_FUNCTION_SELECT1, 7, 0x3),
766 MFIO_MUX_PIN_GROUP(58, UART0, SPIM1, NONE,
767 PADS_FUNCTION_SELECT1, 9, 0x1),
768 MFIO_PIN_GROUP(59, UART1),
769 MFIO_PIN_GROUP(60, UART1),
770 MFIO_PIN_GROUP(61, SPDIF_OUT),
771 MFIO_PIN_GROUP(62, SPDIF_IN),
772 MFIO_MUX_PIN_GROUP(63, ETH, MIPS_TRACE_CLK, MIPS_TRACE_DATA,
773 PADS_FUNCTION_SELECT1, 10, 0x3),
774 MFIO_MUX_PIN_GROUP(64, ETH, MIPS_TRACE_DINT, MIPS_TRACE_DATA,
775 PADS_FUNCTION_SELECT1, 12, 0x3),
776 MFIO_MUX_PIN_GROUP(65, ETH, MIPS_TRACE_TRIGOUT, MIPS_TRACE_DATA,
777 PADS_FUNCTION_SELECT1, 14, 0x3),
778 MFIO_MUX_PIN_GROUP(66, ETH, MIPS_TRACE_TRIGIN, MIPS_TRACE_DATA,
779 PADS_FUNCTION_SELECT1, 16, 0x3),
780 MFIO_MUX_PIN_GROUP(67, ETH, MIPS_TRACE_DM, MIPS_TRACE_DATA,
781 PADS_FUNCTION_SELECT1, 18, 0x3),
782 MFIO_MUX_PIN_GROUP(68, ETH, MIPS_TRACE_PROBE_N, MIPS_TRACE_DATA,
783 PADS_FUNCTION_SELECT1, 20, 0x3),
784 MFIO_MUX_PIN_GROUP(69, ETH, NONE, MIPS_TRACE_DATA,
785 PADS_FUNCTION_SELECT1, 22, 0x3),
786 MFIO_MUX_PIN_GROUP(70, ETH, NONE, MIPS_TRACE_DATA,
787 PADS_FUNCTION_SELECT1, 24, 0x3),
788 MFIO_PIN_GROUP(71, ETH),
789 MFIO_PIN_GROUP(72, IR),
790 MFIO_MUX_PIN_GROUP(73, PWMPDM, MIPS_TRACE_CLK, SRAM_DEBUG,
791 PADS_FUNCTION_SELECT1, 26, 0x3),
792 MFIO_MUX_PIN_GROUP(74, PWMPDM, MIPS_TRACE_DINT, SRAM_DEBUG,
793 PADS_FUNCTION_SELECT1, 28, 0x3),
794 MFIO_MUX_PIN_GROUP(75, PWMPDM, MIPS_TRACE_TRIGOUT, ROM_DEBUG,
795 PADS_FUNCTION_SELECT1, 30, 0x3),
796 MFIO_MUX_PIN_GROUP(76, PWMPDM, MIPS_TRACE_TRIGIN, ROM_DEBUG,
797 PADS_FUNCTION_SELECT2, 0, 0x3),
798 MFIO_MUX_PIN_GROUP(77, MDC_DEBUG, MIPS_TRACE_DM, RPU_DEBUG,
799 PADS_FUNCTION_SELECT2, 2, 0x3),
800 MFIO_MUX_PIN_GROUP(78, MDC_DEBUG, MIPS_TRACE_PROBE_N, RPU_DEBUG,
801 PADS_FUNCTION_SELECT2, 4, 0x3),
802 MFIO_MUX_PIN_GROUP(79, DDR_DEBUG, MIPS_TRACE_DATA, MIPS_DEBUG,
803 PADS_FUNCTION_SELECT2, 6, 0x3),
804 MFIO_MUX_PIN_GROUP(80, DDR_DEBUG, MIPS_TRACE_DATA, MIPS_DEBUG,
805 PADS_FUNCTION_SELECT2, 8, 0x3),
806 MFIO_MUX_PIN_GROUP(81, DREQ0, MIPS_TRACE_DATA, ETH_DEBUG,
807 PADS_FUNCTION_SELECT2, 10, 0x3),
808 MFIO_MUX_PIN_GROUP(82, DREQ1, MIPS_TRACE_DATA, ETH_DEBUG,
809 PADS_FUNCTION_SELECT2, 12, 0x3),
810 MFIO_MUX_PIN_GROUP(83, MIPS_PLL_LOCK, MIPS_TRACE_DATA, USB_DEBUG,
811 PADS_FUNCTION_SELECT2, 14, 0x3),
812 MFIO_MUX_PIN_GROUP(84, SYS_PLL_LOCK, MIPS_TRACE_DATA, USB_DEBUG,
813 PADS_FUNCTION_SELECT2, 16, 0x3),
814 MFIO_MUX_PIN_GROUP(85, WIFI_PLL_LOCK, MIPS_TRACE_DATA, SDHOST_DEBUG,
815 PADS_FUNCTION_SELECT2, 18, 0x3),
816 MFIO_MUX_PIN_GROUP(86, BT_PLL_LOCK, MIPS_TRACE_DATA, SDHOST_DEBUG,
817 PADS_FUNCTION_SELECT2, 20, 0x3),
818 MFIO_MUX_PIN_GROUP(87, RPU_V_PLL_LOCK, DREQ2, SOCIF_DEBUG,
819 PADS_FUNCTION_SELECT2, 22, 0x3),
820 MFIO_MUX_PIN_GROUP(88, RPU_L_PLL_LOCK, DREQ3, SOCIF_DEBUG,
821 PADS_FUNCTION_SELECT2, 24, 0x3),
822 MFIO_MUX_PIN_GROUP(89, AUDIO_PLL_LOCK, DREQ4, DREQ5,
823 PADS_FUNCTION_SELECT2, 26, 0x3),
824 PIN_GROUP(TCK, "tck"),
825 PIN_GROUP(TRSTN, "trstn"),
826 PIN_GROUP(TDI, "tdi"),
827 PIN_GROUP(TMS, "tms"),
828 PIN_GROUP(TDO, "tdo"),
829 PIN_GROUP(JTAG_COMPLY, "jtag_comply"),
830 PIN_GROUP(SAFE_MODE, "safe_mode"),
831 PIN_GROUP(POR_DISABLE, "por_disable"),
832 PIN_GROUP(RESETN, "resetn"),
833};
834
835static inline u32 pctl_readl(struct pistachio_pinctrl *pctl, u32 reg)
836{
837 return readl(pctl->base + reg);
838}
839
840static inline void pctl_writel(struct pistachio_pinctrl *pctl, u32 val, u32 reg)
841{
842 writel(val, pctl->base + reg);
843}
844
845static inline struct pistachio_gpio_bank *gc_to_bank(struct gpio_chip *gc)
846{
847 return container_of(gc, struct pistachio_gpio_bank, gpio_chip);
848}
849
850static inline struct pistachio_gpio_bank *irqd_to_bank(struct irq_data *d)
851{
852 return gc_to_bank(irq_data_get_irq_chip_data(d));
853}
854
855static inline u32 gpio_readl(struct pistachio_gpio_bank *bank, u32 reg)
856{
857 return readl(bank->base + reg);
858}
859
860static inline void gpio_writel(struct pistachio_gpio_bank *bank, u32 val,
861 u32 reg)
862{
863 writel(val, bank->base + reg);
864}
865
866static inline void gpio_mask_writel(struct pistachio_gpio_bank *bank,
867 u32 reg, unsigned int bit, u32 val)
868{
869 /*
870 * For most of the GPIO registers, bit 16 + X must be set in order to
871 * write bit X.
872 */
873 gpio_writel(bank, (0x10000 | val) << bit, reg);
874}
875
876static inline void gpio_enable(struct pistachio_gpio_bank *bank,
877 unsigned offset)
878{
879 gpio_mask_writel(bank, GPIO_BIT_EN, offset, 1);
880}
881
882static inline void gpio_disable(struct pistachio_gpio_bank *bank,
883 unsigned offset)
884{
885 gpio_mask_writel(bank, GPIO_BIT_EN, offset, 0);
886}
887
888static int pistachio_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
889{
890 struct pistachio_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
891
892 return pctl->ngroups;
893}
894
895static const char *pistachio_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
896 unsigned group)
897{
898 struct pistachio_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
899
900 return pctl->groups[group].name;
901}
902
903static int pistachio_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
904 unsigned group,
905 const unsigned **pins,
906 unsigned *num_pins)
907{
908 struct pistachio_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
909
910 *pins = &pctl->groups[group].pin;
911 *num_pins = 1;
912
913 return 0;
914}
915
916static const struct pinctrl_ops pistachio_pinctrl_ops = {
917 .get_groups_count = pistachio_pinctrl_get_groups_count,
918 .get_group_name = pistachio_pinctrl_get_group_name,
919 .get_group_pins = pistachio_pinctrl_get_group_pins,
920 .dt_node_to_map = pinconf_generic_dt_node_to_map_pin,
921 .dt_free_map = pinctrl_utils_dt_free_map,
922};
923
924static int pistachio_pinmux_get_functions_count(struct pinctrl_dev *pctldev)
925{
926 struct pistachio_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
927
928 return pctl->nfunctions;
929}
930
931static const char *
932pistachio_pinmux_get_function_name(struct pinctrl_dev *pctldev, unsigned func)
933{
934 struct pistachio_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
935
936 return pctl->functions[func].name;
937}
938
939static int pistachio_pinmux_get_function_groups(struct pinctrl_dev *pctldev,
940 unsigned func,
941 const char * const **groups,
942 unsigned * const num_groups)
943{
944 struct pistachio_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
945
946 *groups = pctl->functions[func].groups;
947 *num_groups = pctl->functions[func].ngroups;
948
949 return 0;
950}
951
952static int pistachio_pinmux_enable(struct pinctrl_dev *pctldev,
953 unsigned func, unsigned group)
954{
955 struct pistachio_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
956 const struct pistachio_pin_group *pg = &pctl->groups[group];
957 const struct pistachio_function *pf = &pctl->functions[func];
958 struct pinctrl_gpio_range *range;
959 unsigned int i;
960 u32 val;
961
962 if (pg->mux_reg > 0) {
963 for (i = 0; i < ARRAY_SIZE(pg->mux_option); i++) {
964 if (pg->mux_option[i] == func)
965 break;
966 }
967 if (i == ARRAY_SIZE(pg->mux_option)) {
968 dev_err(pctl->dev, "Cannot mux pin %u to function %u\n",
969 group, func);
970 return -EINVAL;
971 }
972
973 val = pctl_readl(pctl, pg->mux_reg);
974 val &= ~(pg->mux_mask << pg->mux_shift);
975 val |= i << pg->mux_shift;
976 pctl_writel(pctl, val, pg->mux_reg);
977
978 if (pf->scenarios) {
979 for (i = 0; i < pf->nscenarios; i++) {
980 if (pf->scenarios[i] == group)
981 break;
982 }
983 if (WARN_ON(i == pf->nscenarios))
984 return -EINVAL;
985
986 val = pctl_readl(pctl, pf->scenario_reg);
987 val &= ~(pf->scenario_mask << pf->scenario_shift);
988 val |= i << pf->scenario_shift;
989 pctl_writel(pctl, val, pf->scenario_reg);
990 }
991 }
992
993 range = pinctrl_find_gpio_range_from_pin(pctl->pctldev, pg->pin);
994 if (range)
995 gpio_disable(gc_to_bank(range->gc), pg->pin - range->pin_base);
996
997 return 0;
998}
999
1000static const struct pinmux_ops pistachio_pinmux_ops = {
1001 .get_functions_count = pistachio_pinmux_get_functions_count,
1002 .get_function_name = pistachio_pinmux_get_function_name,
1003 .get_function_groups = pistachio_pinmux_get_function_groups,
1004 .set_mux = pistachio_pinmux_enable,
1005};
1006
1007static int pistachio_pinconf_get(struct pinctrl_dev *pctldev, unsigned pin,
1008 unsigned long *config)
1009{
1010 struct pistachio_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
1011 enum pin_config_param param = pinconf_to_config_param(*config);
1012 u32 val, arg;
1013
1014 switch (param) {
1015 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
1016 val = pctl_readl(pctl, PADS_SCHMITT_EN_REG(pin));
1017 arg = !!(val & PADS_SCHMITT_EN_BIT(pin));
1018 break;
1019 case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
1020 val = pctl_readl(pctl, PADS_PU_PD_REG(pin)) >>
1021 PADS_PU_PD_SHIFT(pin);
1022 arg = (val & PADS_PU_PD_MASK) == PADS_PU_PD_HIGHZ;
1023 break;
1024 case PIN_CONFIG_BIAS_PULL_UP:
1025 val = pctl_readl(pctl, PADS_PU_PD_REG(pin)) >>
1026 PADS_PU_PD_SHIFT(pin);
1027 arg = (val & PADS_PU_PD_MASK) == PADS_PU_PD_UP;
1028 break;
1029 case PIN_CONFIG_BIAS_PULL_DOWN:
1030 val = pctl_readl(pctl, PADS_PU_PD_REG(pin)) >>
1031 PADS_PU_PD_SHIFT(pin);
1032 arg = (val & PADS_PU_PD_MASK) == PADS_PU_PD_DOWN;
1033 break;
1034 case PIN_CONFIG_BIAS_BUS_HOLD:
1035 val = pctl_readl(pctl, PADS_PU_PD_REG(pin)) >>
1036 PADS_PU_PD_SHIFT(pin);
1037 arg = (val & PADS_PU_PD_MASK) == PADS_PU_PD_BUS;
1038 break;
1039 case PIN_CONFIG_SLEW_RATE:
1040 val = pctl_readl(pctl, PADS_SLEW_RATE_REG(pin));
1041 arg = !!(val & PADS_SLEW_RATE_BIT(pin));
1042 break;
1043 case PIN_CONFIG_DRIVE_STRENGTH:
1044 val = pctl_readl(pctl, PADS_DRIVE_STRENGTH_REG(pin)) >>
1045 PADS_DRIVE_STRENGTH_SHIFT(pin);
1046 switch (val & PADS_DRIVE_STRENGTH_MASK) {
1047 case PADS_DRIVE_STRENGTH_2MA:
1048 arg = 2;
1049 break;
1050 case PADS_DRIVE_STRENGTH_4MA:
1051 arg = 4;
1052 break;
1053 case PADS_DRIVE_STRENGTH_8MA:
1054 arg = 8;
1055 break;
1056 case PADS_DRIVE_STRENGTH_12MA:
1057 default:
1058 arg = 12;
1059 break;
1060 }
1061 break;
1062 default:
1063 dev_dbg(pctl->dev, "Property %u not supported\n", param);
1064 return -ENOTSUPP;
1065 }
1066
1067 *config = pinconf_to_config_packed(param, arg);
1068
1069 return 0;
1070}
1071
1072static int pistachio_pinconf_set(struct pinctrl_dev *pctldev, unsigned pin,
1073 unsigned long *configs, unsigned num_configs)
1074{
1075 struct pistachio_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
1076 enum pin_config_param param;
1077 u32 drv, val, arg;
1078 unsigned int i;
1079
1080 for (i = 0; i < num_configs; i++) {
1081 param = pinconf_to_config_param(configs[i]);
1082 arg = pinconf_to_config_argument(configs[i]);
1083
1084 switch (param) {
1085 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
1086 val = pctl_readl(pctl, PADS_SCHMITT_EN_REG(pin));
1087 if (arg)
1088 val |= PADS_SCHMITT_EN_BIT(pin);
1089 else
1090 val &= ~PADS_SCHMITT_EN_BIT(pin);
1091 pctl_writel(pctl, val, PADS_SCHMITT_EN_REG(pin));
1092 break;
1093 case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
1094 val = pctl_readl(pctl, PADS_PU_PD_REG(pin));
1095 val &= ~(PADS_PU_PD_MASK << PADS_PU_PD_SHIFT(pin));
1096 val |= PADS_PU_PD_HIGHZ << PADS_PU_PD_SHIFT(pin);
1097 pctl_writel(pctl, val, PADS_PU_PD_REG(pin));
1098 break;
1099 case PIN_CONFIG_BIAS_PULL_UP:
1100 val = pctl_readl(pctl, PADS_PU_PD_REG(pin));
1101 val &= ~(PADS_PU_PD_MASK << PADS_PU_PD_SHIFT(pin));
1102 val |= PADS_PU_PD_UP << PADS_PU_PD_SHIFT(pin);
1103 pctl_writel(pctl, val, PADS_PU_PD_REG(pin));
1104 break;
1105 case PIN_CONFIG_BIAS_PULL_DOWN:
1106 val = pctl_readl(pctl, PADS_PU_PD_REG(pin));
1107 val &= ~(PADS_PU_PD_MASK << PADS_PU_PD_SHIFT(pin));
1108 val |= PADS_PU_PD_DOWN << PADS_PU_PD_SHIFT(pin);
1109 pctl_writel(pctl, val, PADS_PU_PD_REG(pin));
1110 break;
1111 case PIN_CONFIG_BIAS_BUS_HOLD:
1112 val = pctl_readl(pctl, PADS_PU_PD_REG(pin));
1113 val &= ~(PADS_PU_PD_MASK << PADS_PU_PD_SHIFT(pin));
1114 val |= PADS_PU_PD_BUS << PADS_PU_PD_SHIFT(pin);
1115 pctl_writel(pctl, val, PADS_PU_PD_REG(pin));
1116 break;
1117 case PIN_CONFIG_SLEW_RATE:
1118 val = pctl_readl(pctl, PADS_SLEW_RATE_REG(pin));
1119 if (arg)
1120 val |= PADS_SLEW_RATE_BIT(pin);
1121 else
1122 val &= ~PADS_SLEW_RATE_BIT(pin);
1123 pctl_writel(pctl, val, PADS_SLEW_RATE_REG(pin));
1124 break;
1125 case PIN_CONFIG_DRIVE_STRENGTH:
1126 val = pctl_readl(pctl, PADS_DRIVE_STRENGTH_REG(pin));
1127 val &= ~(PADS_DRIVE_STRENGTH_MASK <<
1128 PADS_DRIVE_STRENGTH_SHIFT(pin));
1129 switch (arg) {
1130 case 2:
1131 drv = PADS_DRIVE_STRENGTH_2MA;
1132 break;
1133 case 4:
1134 drv = PADS_DRIVE_STRENGTH_4MA;
1135 break;
1136 case 8:
1137 drv = PADS_DRIVE_STRENGTH_8MA;
1138 break;
1139 case 12:
1140 drv = PADS_DRIVE_STRENGTH_12MA;
1141 break;
1142 default:
1143 dev_err(pctl->dev,
1144 "Drive strength %umA not supported\n",
1145 arg);
1146 return -EINVAL;
1147 }
1148 val |= drv << PADS_DRIVE_STRENGTH_SHIFT(pin);
1149 pctl_writel(pctl, val, PADS_DRIVE_STRENGTH_REG(pin));
1150 break;
1151 default:
1152 dev_err(pctl->dev, "Property %u not supported\n",
1153 param);
1154 return -ENOTSUPP;
1155 }
1156 }
1157
1158 return 0;
1159}
1160
1161static const struct pinconf_ops pistachio_pinconf_ops = {
1162 .pin_config_get = pistachio_pinconf_get,
1163 .pin_config_set = pistachio_pinconf_set,
1164 .is_generic = true,
1165};
1166
1167static struct pinctrl_desc pistachio_pinctrl_desc = {
1168 .name = "pistachio-pinctrl",
1169 .pctlops = &pistachio_pinctrl_ops,
1170 .pmxops = &pistachio_pinmux_ops,
1171 .confops = &pistachio_pinconf_ops,
1172};
1173
1174static int pistachio_gpio_request(struct gpio_chip *chip, unsigned offset)
1175{
1176 return pinctrl_request_gpio(chip->base + offset);
1177}
1178
1179static void pistachio_gpio_free(struct gpio_chip *chip, unsigned offset)
1180{
1181 pinctrl_free_gpio(chip->base + offset);
1182}
1183
1184static int pistachio_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
1185{
1186 struct pistachio_gpio_bank *bank = gc_to_bank(chip);
1187
1188 return !(gpio_readl(bank, GPIO_OUTPUT_EN) & BIT(offset));
1189}
1190
1191static int pistachio_gpio_get(struct gpio_chip *chip, unsigned offset)
1192{
1193 struct pistachio_gpio_bank *bank = gc_to_bank(chip);
1194 u32 reg;
1195
1196 if (gpio_readl(bank, GPIO_OUTPUT_EN) & BIT(offset))
1197 reg = GPIO_OUTPUT;
1198 else
1199 reg = GPIO_INPUT;
1200
1201 return !!(gpio_readl(bank, reg) & BIT(offset));
1202}
1203
1204static void pistachio_gpio_set(struct gpio_chip *chip, unsigned offset,
1205 int value)
1206{
1207 struct pistachio_gpio_bank *bank = gc_to_bank(chip);
1208
1209 gpio_mask_writel(bank, GPIO_OUTPUT, offset, !!value);
1210}
1211
1212static int pistachio_gpio_direction_input(struct gpio_chip *chip,
1213 unsigned offset)
1214{
1215 struct pistachio_gpio_bank *bank = gc_to_bank(chip);
1216
1217 gpio_mask_writel(bank, GPIO_OUTPUT_EN, offset, 0);
1218 gpio_enable(bank, offset);
1219
1220 return 0;
1221}
1222
1223static int pistachio_gpio_direction_output(struct gpio_chip *chip,
1224 unsigned offset, int value)
1225{
1226 struct pistachio_gpio_bank *bank = gc_to_bank(chip);
1227
1228 pistachio_gpio_set(chip, offset, value);
1229 gpio_mask_writel(bank, GPIO_OUTPUT_EN, offset, 1);
1230 gpio_enable(bank, offset);
1231
1232 return 0;
1233}
1234
1235static void pistachio_gpio_irq_ack(struct irq_data *data)
1236{
1237 struct pistachio_gpio_bank *bank = irqd_to_bank(data);
1238
1239 gpio_mask_writel(bank, GPIO_INTERRUPT_STATUS, data->hwirq, 0);
1240}
1241
1242static void pistachio_gpio_irq_mask(struct irq_data *data)
1243{
1244 struct pistachio_gpio_bank *bank = irqd_to_bank(data);
1245
1246 gpio_mask_writel(bank, GPIO_INTERRUPT_EN, data->hwirq, 0);
1247}
1248
1249static void pistachio_gpio_irq_unmask(struct irq_data *data)
1250{
1251 struct pistachio_gpio_bank *bank = irqd_to_bank(data);
1252
1253 gpio_mask_writel(bank, GPIO_INTERRUPT_EN, data->hwirq, 1);
1254}
1255
1256static unsigned int pistachio_gpio_irq_startup(struct irq_data *data)
1257{
1258 struct gpio_chip *chip = irq_data_get_irq_chip_data(data);
1259
1260 pistachio_gpio_direction_input(chip, data->hwirq);
1261 pistachio_gpio_irq_unmask(data);
1262
1263 return 0;
1264}
1265
1266static int pistachio_gpio_irq_set_type(struct irq_data *data, unsigned int type)
1267{
1268 struct pistachio_gpio_bank *bank = irqd_to_bank(data);
1269
1270 switch (type & IRQ_TYPE_SENSE_MASK) {
1271 case IRQ_TYPE_EDGE_RISING:
1272 gpio_mask_writel(bank, GPIO_INPUT_POLARITY, data->hwirq, 1);
1273 gpio_mask_writel(bank, GPIO_INTERRUPT_TYPE, data->hwirq,
1274 GPIO_INTERRUPT_TYPE_EDGE);
1275 gpio_mask_writel(bank, GPIO_INTERRUPT_EDGE, data->hwirq,
1276 GPIO_INTERRUPT_EDGE_SINGLE);
1277 break;
1278 case IRQ_TYPE_EDGE_FALLING:
1279 gpio_mask_writel(bank, GPIO_INPUT_POLARITY, data->hwirq, 0);
1280 gpio_mask_writel(bank, GPIO_INTERRUPT_TYPE, data->hwirq,
1281 GPIO_INTERRUPT_TYPE_EDGE);
1282 gpio_mask_writel(bank, GPIO_INTERRUPT_EDGE, data->hwirq,
1283 GPIO_INTERRUPT_EDGE_SINGLE);
1284 break;
1285 case IRQ_TYPE_EDGE_BOTH:
1286 gpio_mask_writel(bank, GPIO_INTERRUPT_TYPE, data->hwirq,
1287 GPIO_INTERRUPT_TYPE_EDGE);
1288 gpio_mask_writel(bank, GPIO_INTERRUPT_EDGE, data->hwirq,
1289 GPIO_INTERRUPT_EDGE_DUAL);
1290 break;
1291 case IRQ_TYPE_LEVEL_HIGH:
1292 gpio_mask_writel(bank, GPIO_INPUT_POLARITY, data->hwirq, 1);
1293 gpio_mask_writel(bank, GPIO_INTERRUPT_TYPE, data->hwirq,
1294 GPIO_INTERRUPT_TYPE_LEVEL);
1295 break;
1296 case IRQ_TYPE_LEVEL_LOW:
1297 gpio_mask_writel(bank, GPIO_INPUT_POLARITY, data->hwirq, 0);
1298 gpio_mask_writel(bank, GPIO_INTERRUPT_TYPE, data->hwirq,
1299 GPIO_INTERRUPT_TYPE_LEVEL);
1300 break;
1301 default:
1302 return -EINVAL;
1303 }
1304
1305 if (type & IRQ_TYPE_LEVEL_MASK)
1306 __irq_set_handler_locked(data->irq, handle_level_irq);
1307 else
1308 __irq_set_handler_locked(data->irq, handle_edge_irq);
1309
1310 return 0;
1311}
1312
1313static void pistachio_gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
1314{
1315 struct gpio_chip *gc = irq_get_handler_data(irq);
1316 struct pistachio_gpio_bank *bank = gc_to_bank(gc);
1317 struct irq_chip *chip = irq_get_chip(irq);
1318 unsigned long pending;
1319 unsigned int pin;
1320
1321 chained_irq_enter(chip, desc);
1322 pending = gpio_readl(bank, GPIO_INTERRUPT_STATUS) &
1323 gpio_readl(bank, GPIO_INTERRUPT_EN);
1324 for_each_set_bit(pin, &pending, 16)
1325 generic_handle_irq(irq_linear_revmap(gc->irqdomain, pin));
1326 chained_irq_exit(chip, desc);
1327}
1328
1329#define GPIO_BANK(_bank, _pin_base, _npins) \
1330 { \
1331 .pin_base = _pin_base, \
1332 .npins = _npins, \
1333 .gpio_chip = { \
1334 .label = "GPIO" #_bank, \
1335 .request = pistachio_gpio_request, \
1336 .free = pistachio_gpio_free, \
1337 .get_direction = pistachio_gpio_get_direction, \
1338 .direction_input = pistachio_gpio_direction_input, \
1339 .direction_output = pistachio_gpio_direction_output, \
1340 .get = pistachio_gpio_get, \
1341 .set = pistachio_gpio_set, \
1342 .base = _pin_base, \
1343 .ngpio = _npins, \
1344 }, \
1345 .irq_chip = { \
1346 .name = "GPIO" #_bank, \
1347 .irq_startup = pistachio_gpio_irq_startup, \
1348 .irq_ack = pistachio_gpio_irq_ack, \
1349 .irq_mask = pistachio_gpio_irq_mask, \
1350 .irq_unmask = pistachio_gpio_irq_unmask, \
1351 .irq_set_type = pistachio_gpio_irq_set_type, \
1352 }, \
1353 }
1354
1355static struct pistachio_gpio_bank pistachio_gpio_banks[] = {
1356 GPIO_BANK(0, PISTACHIO_PIN_MFIO(0), 16),
1357 GPIO_BANK(1, PISTACHIO_PIN_MFIO(16), 16),
1358 GPIO_BANK(2, PISTACHIO_PIN_MFIO(32), 16),
1359 GPIO_BANK(3, PISTACHIO_PIN_MFIO(48), 16),
1360 GPIO_BANK(4, PISTACHIO_PIN_MFIO(64), 16),
1361 GPIO_BANK(5, PISTACHIO_PIN_MFIO(80), 10),
1362};
1363
1364static int pistachio_gpio_register(struct pistachio_pinctrl *pctl)
1365{
1366 struct device_node *node = pctl->dev->of_node;
1367 struct pistachio_gpio_bank *bank;
1368 unsigned int i;
1369 int irq, ret = 0;
1370
1371 for (i = 0; i < pctl->nbanks; i++) {
1372 char child_name[sizeof("gpioXX")];
1373 struct device_node *child;
1374
1375 snprintf(child_name, sizeof(child_name), "gpio%d", i);
1376 child = of_get_child_by_name(node, child_name);
1377 if (!child) {
1378 dev_err(pctl->dev, "No node for bank %u\n", i);
1379 ret = -ENODEV;
1380 goto err;
1381 }
1382
1383 if (!of_find_property(child, "gpio-controller", NULL)) {
1384 dev_err(pctl->dev,
1385 "No gpio-controller property for bank %u\n", i);
1386 ret = -ENODEV;
1387 goto err;
1388 }
1389
1390 irq = irq_of_parse_and_map(child, 0);
1391 if (irq < 0) {
1392 dev_err(pctl->dev, "No IRQ for bank %u: %d\n", i, irq);
1393 ret = irq;
1394 goto err;
1395 }
1396
1397 bank = &pctl->gpio_banks[i];
1398 bank->pctl = pctl;
1399 bank->base = pctl->base + GPIO_BANK_BASE(i);
1400
1401 bank->gpio_chip.dev = pctl->dev;
1402 bank->gpio_chip.of_node = child;
1403 ret = gpiochip_add(&bank->gpio_chip);
1404 if (ret < 0) {
1405 dev_err(pctl->dev, "Failed to add GPIO chip %u: %d\n",
1406 i, ret);
1407 goto err;
1408 }
1409
1410 ret = gpiochip_irqchip_add(&bank->gpio_chip, &bank->irq_chip,
1411 0, handle_level_irq, IRQ_TYPE_NONE);
1412 if (ret < 0) {
1413 dev_err(pctl->dev, "Failed to add IRQ chip %u: %d\n",
1414 i, ret);
1415 gpiochip_remove(&bank->gpio_chip);
1416 goto err;
1417 }
1418 gpiochip_set_chained_irqchip(&bank->gpio_chip, &bank->irq_chip,
1419 irq, pistachio_gpio_irq_handler);
1420
1421 ret = gpiochip_add_pin_range(&bank->gpio_chip,
1422 dev_name(pctl->dev), 0,
1423 bank->pin_base, bank->npins);
1424 if (ret < 0) {
1425 dev_err(pctl->dev, "Failed to add GPIO range %u: %d\n",
1426 i, ret);
1427 gpiochip_remove(&bank->gpio_chip);
1428 goto err;
1429 }
1430 }
1431
1432 return 0;
1433err:
1434 for (; i > 0; i--) {
1435 bank = &pctl->gpio_banks[i - 1];
1436 gpiochip_remove(&bank->gpio_chip);
1437 }
1438 return ret;
1439}
1440
1441static const struct of_device_id pistachio_pinctrl_of_match[] = {
1442 { .compatible = "img,pistachio-system-pinctrl", },
1443 { },
1444};
1445
1446static int pistachio_pinctrl_probe(struct platform_device *pdev)
1447{
1448 struct pistachio_pinctrl *pctl;
1449 struct resource *res;
1450 int ret;
1451
1452 pctl = devm_kzalloc(&pdev->dev, sizeof(*pctl), GFP_KERNEL);
1453 if (!pctl)
1454 return -ENOMEM;
1455 pctl->dev = &pdev->dev;
1456 dev_set_drvdata(&pdev->dev, pctl);
1457
1458 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1459 pctl->base = devm_ioremap_resource(&pdev->dev, res);
1460 if (IS_ERR(pctl->base))
1461 return PTR_ERR(pctl->base);
1462
1463 pctl->pins = pistachio_pins;
1464 pctl->npins = ARRAY_SIZE(pistachio_pins);
1465 pctl->functions = pistachio_functions;
1466 pctl->nfunctions = ARRAY_SIZE(pistachio_functions);
1467 pctl->groups = pistachio_groups;
1468 pctl->ngroups = ARRAY_SIZE(pistachio_groups);
1469 pctl->gpio_banks = pistachio_gpio_banks;
1470 pctl->nbanks = ARRAY_SIZE(pistachio_gpio_banks);
1471
1472 pistachio_pinctrl_desc.pins = pctl->pins;
1473 pistachio_pinctrl_desc.npins = pctl->npins;
1474
1475 pctl->pctldev = pinctrl_register(&pistachio_pinctrl_desc, &pdev->dev,
1476 pctl);
1477 if (IS_ERR(pctl->pctldev)) {
1478 dev_err(&pdev->dev, "Failed to register pinctrl device\n");
1479 return PTR_ERR(pctl->pctldev);
1480 }
1481
1482 ret = pistachio_gpio_register(pctl);
1483 if (ret < 0) {
1484 pinctrl_unregister(pctl->pctldev);
1485 return ret;
1486 }
1487
1488 return 0;
1489}
1490
1491static struct platform_driver pistachio_pinctrl_driver = {
1492 .driver = {
1493 .name = "pistachio-pinctrl",
1494 .of_match_table = pistachio_pinctrl_of_match,
1495 .suppress_bind_attrs = true,
1496 },
1497 .probe = pistachio_pinctrl_probe,
1498};
1499
1500static int __init pistachio_pinctrl_register(void)
1501{
1502 return platform_driver_register(&pistachio_pinctrl_driver);
1503}
1504arch_initcall(pistachio_pinctrl_register);
diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
index dee7d5f06c60..9affcd725776 100644
--- a/drivers/pinctrl/pinctrl-rockchip.c
+++ b/drivers/pinctrl/pinctrl-rockchip.c
@@ -63,6 +63,7 @@ enum rockchip_pinctrl_type {
63 RK3066B, 63 RK3066B,
64 RK3188, 64 RK3188,
65 RK3288, 65 RK3288,
66 RK3368,
66}; 67};
67 68
68/** 69/**
@@ -163,6 +164,9 @@ struct rockchip_pin_ctrl {
163 void (*pull_calc_reg)(struct rockchip_pin_bank *bank, 164 void (*pull_calc_reg)(struct rockchip_pin_bank *bank,
164 int pin_num, struct regmap **regmap, 165 int pin_num, struct regmap **regmap,
165 int *reg, u8 *bit); 166 int *reg, u8 *bit);
167 void (*drv_calc_reg)(struct rockchip_pin_bank *bank,
168 int pin_num, struct regmap **regmap,
169 int *reg, u8 *bit);
166}; 170};
167 171
168struct rockchip_pin_config { 172struct rockchip_pin_config {
@@ -581,7 +585,6 @@ static void rk3288_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
581#define RK3288_DRV_BITS_PER_PIN 2 585#define RK3288_DRV_BITS_PER_PIN 2
582#define RK3288_DRV_PINS_PER_REG 8 586#define RK3288_DRV_PINS_PER_REG 8
583#define RK3288_DRV_BANK_STRIDE 16 587#define RK3288_DRV_BANK_STRIDE 16
584static int rk3288_drv_list[] = { 2, 4, 8, 12 };
585 588
586static void rk3288_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank, 589static void rk3288_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
587 int pin_num, struct regmap **regmap, 590 int pin_num, struct regmap **regmap,
@@ -611,14 +614,81 @@ static void rk3288_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
611 } 614 }
612} 615}
613 616
614static int rk3288_get_drive(struct rockchip_pin_bank *bank, int pin_num) 617#define RK3368_PULL_GRF_OFFSET 0x100
618#define RK3368_PULL_PMU_OFFSET 0x10
619
620static void rk3368_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
621 int pin_num, struct regmap **regmap,
622 int *reg, u8 *bit)
615{ 623{
624 struct rockchip_pinctrl *info = bank->drvdata;
625
626 /* The first 32 pins of the first bank are located in PMU */
627 if (bank->bank_num == 0) {
628 *regmap = info->regmap_pmu;
629 *reg = RK3368_PULL_PMU_OFFSET;
630
631 *reg += ((pin_num / RK3188_PULL_PINS_PER_REG) * 4);
632 *bit = pin_num % RK3188_PULL_PINS_PER_REG;
633 *bit *= RK3188_PULL_BITS_PER_PIN;
634 } else {
635 *regmap = info->regmap_base;
636 *reg = RK3368_PULL_GRF_OFFSET;
637
638 /* correct the offset, as we're starting with the 2nd bank */
639 *reg -= 0x10;
640 *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
641 *reg += ((pin_num / RK3188_PULL_PINS_PER_REG) * 4);
642
643 *bit = (pin_num % RK3188_PULL_PINS_PER_REG);
644 *bit *= RK3188_PULL_BITS_PER_PIN;
645 }
646}
647
648#define RK3368_DRV_PMU_OFFSET 0x20
649#define RK3368_DRV_GRF_OFFSET 0x200
650
651static void rk3368_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
652 int pin_num, struct regmap **regmap,
653 int *reg, u8 *bit)
654{
655 struct rockchip_pinctrl *info = bank->drvdata;
656
657 /* The first 32 pins of the first bank are located in PMU */
658 if (bank->bank_num == 0) {
659 *regmap = info->regmap_pmu;
660 *reg = RK3368_DRV_PMU_OFFSET;
661
662 *reg += ((pin_num / RK3288_DRV_PINS_PER_REG) * 4);
663 *bit = pin_num % RK3288_DRV_PINS_PER_REG;
664 *bit *= RK3288_DRV_BITS_PER_PIN;
665 } else {
666 *regmap = info->regmap_base;
667 *reg = RK3368_DRV_GRF_OFFSET;
668
669 /* correct the offset, as we're starting with the 2nd bank */
670 *reg -= 0x10;
671 *reg += bank->bank_num * RK3288_DRV_BANK_STRIDE;
672 *reg += ((pin_num / RK3288_DRV_PINS_PER_REG) * 4);
673
674 *bit = (pin_num % RK3288_DRV_PINS_PER_REG);
675 *bit *= RK3288_DRV_BITS_PER_PIN;
676 }
677}
678
679static int rockchip_perpin_drv_list[] = { 2, 4, 8, 12 };
680
681static int rockchip_get_drive_perpin(struct rockchip_pin_bank *bank,
682 int pin_num)
683{
684 struct rockchip_pinctrl *info = bank->drvdata;
685 struct rockchip_pin_ctrl *ctrl = info->ctrl;
616 struct regmap *regmap; 686 struct regmap *regmap;
617 int reg, ret; 687 int reg, ret;
618 u32 data; 688 u32 data;
619 u8 bit; 689 u8 bit;
620 690
621 rk3288_calc_drv_reg_and_bit(bank, pin_num, &regmap, &reg, &bit); 691 ctrl->drv_calc_reg(bank, pin_num, &regmap, &reg, &bit);
622 692
623 ret = regmap_read(regmap, reg, &data); 693 ret = regmap_read(regmap, reg, &data);
624 if (ret) 694 if (ret)
@@ -627,24 +697,25 @@ static int rk3288_get_drive(struct rockchip_pin_bank *bank, int pin_num)
627 data >>= bit; 697 data >>= bit;
628 data &= (1 << RK3288_DRV_BITS_PER_PIN) - 1; 698 data &= (1 << RK3288_DRV_BITS_PER_PIN) - 1;
629 699
630 return rk3288_drv_list[data]; 700 return rockchip_perpin_drv_list[data];
631} 701}
632 702
633static int rk3288_set_drive(struct rockchip_pin_bank *bank, int pin_num, 703static int rockchip_set_drive_perpin(struct rockchip_pin_bank *bank,
634 int strength) 704 int pin_num, int strength)
635{ 705{
636 struct rockchip_pinctrl *info = bank->drvdata; 706 struct rockchip_pinctrl *info = bank->drvdata;
707 struct rockchip_pin_ctrl *ctrl = info->ctrl;
637 struct regmap *regmap; 708 struct regmap *regmap;
638 unsigned long flags; 709 unsigned long flags;
639 int reg, ret, i; 710 int reg, ret, i;
640 u32 data, rmask; 711 u32 data, rmask;
641 u8 bit; 712 u8 bit;
642 713
643 rk3288_calc_drv_reg_and_bit(bank, pin_num, &regmap, &reg, &bit); 714 ctrl->drv_calc_reg(bank, pin_num, &regmap, &reg, &bit);
644 715
645 ret = -EINVAL; 716 ret = -EINVAL;
646 for (i = 0; i < ARRAY_SIZE(rk3288_drv_list); i++) { 717 for (i = 0; i < ARRAY_SIZE(rockchip_perpin_drv_list); i++) {
647 if (rk3288_drv_list[i] == strength) { 718 if (rockchip_perpin_drv_list[i] == strength) {
648 ret = i; 719 ret = i;
649 break; 720 break;
650 } 721 }
@@ -695,6 +766,7 @@ static int rockchip_get_pull(struct rockchip_pin_bank *bank, int pin_num)
695 : PIN_CONFIG_BIAS_DISABLE; 766 : PIN_CONFIG_BIAS_DISABLE;
696 case RK3188: 767 case RK3188:
697 case RK3288: 768 case RK3288:
769 case RK3368:
698 data >>= bit; 770 data >>= bit;
699 data &= (1 << RK3188_PULL_BITS_PER_PIN) - 1; 771 data &= (1 << RK3188_PULL_BITS_PER_PIN) - 1;
700 772
@@ -750,6 +822,7 @@ static int rockchip_set_pull(struct rockchip_pin_bank *bank,
750 break; 822 break;
751 case RK3188: 823 case RK3188:
752 case RK3288: 824 case RK3288:
825 case RK3368:
753 spin_lock_irqsave(&bank->slock, flags); 826 spin_lock_irqsave(&bank->slock, flags);
754 827
755 /* enable the write to the equivalent lower bits */ 828 /* enable the write to the equivalent lower bits */
@@ -927,6 +1000,7 @@ static bool rockchip_pinconf_pull_valid(struct rockchip_pin_ctrl *ctrl,
927 return pull ? false : true; 1000 return pull ? false : true;
928 case RK3188: 1001 case RK3188:
929 case RK3288: 1002 case RK3288:
1003 case RK3368:
930 return (pull != PIN_CONFIG_BIAS_PULL_PIN_DEFAULT); 1004 return (pull != PIN_CONFIG_BIAS_PULL_PIN_DEFAULT);
931 } 1005 }
932 1006
@@ -983,10 +1057,11 @@ static int rockchip_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
983 break; 1057 break;
984 case PIN_CONFIG_DRIVE_STRENGTH: 1058 case PIN_CONFIG_DRIVE_STRENGTH:
985 /* rk3288 is the first with per-pin drive-strength */ 1059 /* rk3288 is the first with per-pin drive-strength */
986 if (info->ctrl->type != RK3288) 1060 if (!info->ctrl->drv_calc_reg)
987 return -ENOTSUPP; 1061 return -ENOTSUPP;
988 1062
989 rc = rk3288_set_drive(bank, pin - bank->pin_base, arg); 1063 rc = rockchip_set_drive_perpin(bank,
1064 pin - bank->pin_base, arg);
990 if (rc < 0) 1065 if (rc < 0)
991 return rc; 1066 return rc;
992 break; 1067 break;
@@ -1041,10 +1116,10 @@ static int rockchip_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin,
1041 break; 1116 break;
1042 case PIN_CONFIG_DRIVE_STRENGTH: 1117 case PIN_CONFIG_DRIVE_STRENGTH:
1043 /* rk3288 is the first with per-pin drive-strength */ 1118 /* rk3288 is the first with per-pin drive-strength */
1044 if (info->ctrl->type != RK3288) 1119 if (!info->ctrl->drv_calc_reg)
1045 return -ENOTSUPP; 1120 return -ENOTSUPP;
1046 1121
1047 rc = rk3288_get_drive(bank, pin - bank->pin_base); 1122 rc = rockchip_get_drive_perpin(bank, pin - bank->pin_base);
1048 if (rc < 0) 1123 if (rc < 0)
1049 return rc; 1124 return rc;
1050 1125
@@ -1274,9 +1349,9 @@ static int rockchip_pinctrl_register(struct platform_device *pdev,
1274 return ret; 1349 return ret;
1275 1350
1276 info->pctl_dev = pinctrl_register(ctrldesc, &pdev->dev, info); 1351 info->pctl_dev = pinctrl_register(ctrldesc, &pdev->dev, info);
1277 if (!info->pctl_dev) { 1352 if (IS_ERR(info->pctl_dev)) {
1278 dev_err(&pdev->dev, "could not register pinctrl driver\n"); 1353 dev_err(&pdev->dev, "could not register pinctrl driver\n");
1279 return -EINVAL; 1354 return PTR_ERR(info->pctl_dev);
1280 } 1355 }
1281 1356
1282 for (bank = 0; bank < info->ctrl->nr_banks; ++bank) { 1357 for (bank = 0; bank < info->ctrl->nr_banks; ++bank) {
@@ -2056,8 +2131,32 @@ static struct rockchip_pin_ctrl rk3288_pin_ctrl = {
2056 .grf_mux_offset = 0x0, 2131 .grf_mux_offset = 0x0,
2057 .pmu_mux_offset = 0x84, 2132 .pmu_mux_offset = 0x84,
2058 .pull_calc_reg = rk3288_calc_pull_reg_and_bit, 2133 .pull_calc_reg = rk3288_calc_pull_reg_and_bit,
2134 .drv_calc_reg = rk3288_calc_drv_reg_and_bit,
2059}; 2135};
2060 2136
2137static struct rockchip_pin_bank rk3368_pin_banks[] = {
2138 PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0", IOMUX_SOURCE_PMU,
2139 IOMUX_SOURCE_PMU,
2140 IOMUX_SOURCE_PMU,
2141 IOMUX_SOURCE_PMU
2142 ),
2143 PIN_BANK(1, 32, "gpio1"),
2144 PIN_BANK(2, 32, "gpio2"),
2145 PIN_BANK(3, 32, "gpio3"),
2146};
2147
2148static struct rockchip_pin_ctrl rk3368_pin_ctrl = {
2149 .pin_banks = rk3368_pin_banks,
2150 .nr_banks = ARRAY_SIZE(rk3368_pin_banks),
2151 .label = "RK3368-GPIO",
2152 .type = RK3368,
2153 .grf_mux_offset = 0x0,
2154 .pmu_mux_offset = 0x0,
2155 .pull_calc_reg = rk3368_calc_pull_reg_and_bit,
2156 .drv_calc_reg = rk3368_calc_drv_reg_and_bit,
2157};
2158
2159
2061static const struct of_device_id rockchip_pinctrl_dt_match[] = { 2160static const struct of_device_id rockchip_pinctrl_dt_match[] = {
2062 { .compatible = "rockchip,rk2928-pinctrl", 2161 { .compatible = "rockchip,rk2928-pinctrl",
2063 .data = (void *)&rk2928_pin_ctrl }, 2162 .data = (void *)&rk2928_pin_ctrl },
@@ -2069,6 +2168,8 @@ static const struct of_device_id rockchip_pinctrl_dt_match[] = {
2069 .data = (void *)&rk3188_pin_ctrl }, 2168 .data = (void *)&rk3188_pin_ctrl },
2070 { .compatible = "rockchip,rk3288-pinctrl", 2169 { .compatible = "rockchip,rk3288-pinctrl",
2071 .data = (void *)&rk3288_pin_ctrl }, 2170 .data = (void *)&rk3288_pin_ctrl },
2171 { .compatible = "rockchip,rk3368-pinctrl",
2172 .data = (void *)&rk3368_pin_ctrl },
2072 {}, 2173 {},
2073}; 2174};
2074MODULE_DEVICE_TABLE(of, rockchip_pinctrl_dt_match); 2175MODULE_DEVICE_TABLE(of, rockchip_pinctrl_dt_match);
diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
index 13b45f297727..b2de09d3b1a0 100644
--- a/drivers/pinctrl/pinctrl-single.c
+++ b/drivers/pinctrl/pinctrl-single.c
@@ -1726,7 +1726,7 @@ static int pcs_irqdomain_map(struct irq_domain *d, unsigned int irq,
1726 return 0; 1726 return 0;
1727} 1727}
1728 1728
1729static struct irq_domain_ops pcs_irqdomain_ops = { 1729static const struct irq_domain_ops pcs_irqdomain_ops = {
1730 .map = pcs_irqdomain_map, 1730 .map = pcs_irqdomain_map,
1731 .xlate = irq_domain_xlate_onecell, 1731 .xlate = irq_domain_xlate_onecell,
1732}; 1732};
@@ -1921,9 +1921,9 @@ static int pcs_probe(struct platform_device *pdev)
1921 goto free; 1921 goto free;
1922 1922
1923 pcs->pctl = pinctrl_register(&pcs->desc, pcs->dev, pcs); 1923 pcs->pctl = pinctrl_register(&pcs->desc, pcs->dev, pcs);
1924 if (!pcs->pctl) { 1924 if (IS_ERR(pcs->pctl)) {
1925 dev_err(pcs->dev, "could not register single pinctrl driver\n"); 1925 dev_err(pcs->dev, "could not register single pinctrl driver\n");
1926 ret = -EINVAL; 1926 ret = PTR_ERR(pcs->pctl);
1927 goto free; 1927 goto free;
1928 } 1928 }
1929 1929
diff --git a/drivers/pinctrl/pinctrl-st.c b/drivers/pinctrl/pinctrl-st.c
index 65bf73b70e34..d34ac879af9e 100644
--- a/drivers/pinctrl/pinctrl-st.c
+++ b/drivers/pinctrl/pinctrl-st.c
@@ -1737,9 +1737,9 @@ static int st_pctl_probe(struct platform_device *pdev)
1737 pctl_desc->name = dev_name(&pdev->dev); 1737 pctl_desc->name = dev_name(&pdev->dev);
1738 1738
1739 info->pctl = pinctrl_register(pctl_desc, &pdev->dev, info); 1739 info->pctl = pinctrl_register(pctl_desc, &pdev->dev, info);
1740 if (!info->pctl) { 1740 if (IS_ERR(info->pctl)) {
1741 dev_err(&pdev->dev, "Failed pinctrl registration\n"); 1741 dev_err(&pdev->dev, "Failed pinctrl registration\n");
1742 return -EINVAL; 1742 return PTR_ERR(info->pctl);
1743 } 1743 }
1744 1744
1745 for (i = 0; i < info->nbanks; i++) 1745 for (i = 0; i < info->nbanks; i++)
diff --git a/drivers/pinctrl/pinctrl-tb10x.c b/drivers/pinctrl/pinctrl-tb10x.c
index 160a1f5e9896..6546b9bb2e06 100644
--- a/drivers/pinctrl/pinctrl-tb10x.c
+++ b/drivers/pinctrl/pinctrl-tb10x.c
@@ -807,9 +807,9 @@ static int tb10x_pinctrl_probe(struct platform_device *pdev)
807 } 807 }
808 808
809 state->pctl = pinctrl_register(&tb10x_pindesc, dev, state); 809 state->pctl = pinctrl_register(&tb10x_pindesc, dev, state);
810 if (!state->pctl) { 810 if (IS_ERR(state->pctl)) {
811 dev_err(dev, "could not register TB10x pin driver\n"); 811 dev_err(dev, "could not register TB10x pin driver\n");
812 ret = -EINVAL; 812 ret = PTR_ERR(state->pctl);
813 goto fail; 813 goto fail;
814 } 814 }
815 815
diff --git a/drivers/pinctrl/pinctrl-tegra-xusb.c b/drivers/pinctrl/pinctrl-tegra-xusb.c
index 753d747d4261..2651d04bd1be 100644
--- a/drivers/pinctrl/pinctrl-tegra-xusb.c
+++ b/drivers/pinctrl/pinctrl-tegra-xusb.c
@@ -59,11 +59,6 @@ struct tegra_xusb_padctl_function {
59 unsigned int num_groups; 59 unsigned int num_groups;
60}; 60};
61 61
62struct tegra_xusb_padctl_group {
63 const unsigned int *funcs;
64 unsigned int num_funcs;
65};
66
67struct tegra_xusb_padctl_soc { 62struct tegra_xusb_padctl_soc {
68 const struct pinctrl_pin_desc *pins; 63 const struct pinctrl_pin_desc *pins;
69 unsigned int num_pins; 64 unsigned int num_pins;
@@ -130,6 +125,21 @@ static const char *tegra_xusb_padctl_get_group_name(struct pinctrl_dev *pinctrl,
130 return padctl->soc->pins[group].name; 125 return padctl->soc->pins[group].name;
131} 126}
132 127
128static int tegra_xusb_padctl_get_group_pins(struct pinctrl_dev *pinctrl,
129 unsigned group,
130 const unsigned **pins,
131 unsigned *num_pins)
132{
133 /*
134 * For the tegra-xusb pad controller groups are synonomous
135 * with lanes/pins and there is always one lane/pin per group.
136 */
137 *pins = &pinctrl->desc->pins[group].number;
138 *num_pins = 1;
139
140 return 0;
141}
142
133enum tegra_xusb_padctl_param { 143enum tegra_xusb_padctl_param {
134 TEGRA_XUSB_PADCTL_IDDQ, 144 TEGRA_XUSB_PADCTL_IDDQ,
135}; 145};
@@ -253,6 +263,7 @@ static int tegra_xusb_padctl_dt_node_to_map(struct pinctrl_dev *pinctrl,
253static const struct pinctrl_ops tegra_xusb_padctl_pinctrl_ops = { 263static const struct pinctrl_ops tegra_xusb_padctl_pinctrl_ops = {
254 .get_groups_count = tegra_xusb_padctl_get_groups_count, 264 .get_groups_count = tegra_xusb_padctl_get_groups_count,
255 .get_group_name = tegra_xusb_padctl_get_group_name, 265 .get_group_name = tegra_xusb_padctl_get_group_name,
266 .get_group_pins = tegra_xusb_padctl_get_group_pins,
256 .dt_node_to_map = tegra_xusb_padctl_dt_node_to_map, 267 .dt_node_to_map = tegra_xusb_padctl_dt_node_to_map,
257 .dt_free_map = pinctrl_utils_dt_free_map, 268 .dt_free_map = pinctrl_utils_dt_free_map,
258}; 269};
@@ -903,15 +914,17 @@ static int tegra_xusb_padctl_probe(struct platform_device *pdev)
903 914
904 memset(&padctl->desc, 0, sizeof(padctl->desc)); 915 memset(&padctl->desc, 0, sizeof(padctl->desc));
905 padctl->desc.name = dev_name(padctl->dev); 916 padctl->desc.name = dev_name(padctl->dev);
917 padctl->desc.pins = tegra124_pins;
918 padctl->desc.npins = ARRAY_SIZE(tegra124_pins);
906 padctl->desc.pctlops = &tegra_xusb_padctl_pinctrl_ops; 919 padctl->desc.pctlops = &tegra_xusb_padctl_pinctrl_ops;
907 padctl->desc.pmxops = &tegra_xusb_padctl_pinmux_ops; 920 padctl->desc.pmxops = &tegra_xusb_padctl_pinmux_ops;
908 padctl->desc.confops = &tegra_xusb_padctl_pinconf_ops; 921 padctl->desc.confops = &tegra_xusb_padctl_pinconf_ops;
909 padctl->desc.owner = THIS_MODULE; 922 padctl->desc.owner = THIS_MODULE;
910 923
911 padctl->pinctrl = pinctrl_register(&padctl->desc, &pdev->dev, padctl); 924 padctl->pinctrl = pinctrl_register(&padctl->desc, &pdev->dev, padctl);
912 if (!padctl->pinctrl) { 925 if (IS_ERR(padctl->pinctrl)) {
913 dev_err(&pdev->dev, "failed to register pincontrol\n"); 926 dev_err(&pdev->dev, "failed to register pincontrol\n");
914 err = -ENODEV; 927 err = PTR_ERR(padctl->pinctrl);
915 goto reset; 928 goto reset;
916 } 929 }
917 930
diff --git a/drivers/pinctrl/pinctrl-tegra.c b/drivers/pinctrl/pinctrl-tegra.c
index 4c95c2024a1c..0f982b829be1 100644
--- a/drivers/pinctrl/pinctrl-tegra.c
+++ b/drivers/pinctrl/pinctrl-tegra.c
@@ -703,9 +703,9 @@ int tegra_pinctrl_probe(struct platform_device *pdev,
703 } 703 }
704 704
705 pmx->pctl = pinctrl_register(&tegra_pinctrl_desc, &pdev->dev, pmx); 705 pmx->pctl = pinctrl_register(&tegra_pinctrl_desc, &pdev->dev, pmx);
706 if (!pmx->pctl) { 706 if (IS_ERR(pmx->pctl)) {
707 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n"); 707 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
708 return -ENODEV; 708 return PTR_ERR(pmx->pctl);
709 } 709 }
710 710
711 pinctrl_add_gpio_range(pmx->pctl, &tegra_pinctrl_gpio_range); 711 pinctrl_add_gpio_range(pmx->pctl, &tegra_pinctrl_gpio_range);
diff --git a/drivers/pinctrl/pinctrl-tz1090-pdc.c b/drivers/pinctrl/pinctrl-tz1090-pdc.c
index 8a8911bb883a..c349911708ef 100644
--- a/drivers/pinctrl/pinctrl-tz1090-pdc.c
+++ b/drivers/pinctrl/pinctrl-tz1090-pdc.c
@@ -948,9 +948,9 @@ static int tz1090_pdc_pinctrl_probe(struct platform_device *pdev)
948 return PTR_ERR(pmx->regs); 948 return PTR_ERR(pmx->regs);
949 949
950 pmx->pctl = pinctrl_register(&tz1090_pdc_pinctrl_desc, &pdev->dev, pmx); 950 pmx->pctl = pinctrl_register(&tz1090_pdc_pinctrl_desc, &pdev->dev, pmx);
951 if (!pmx->pctl) { 951 if (IS_ERR(pmx->pctl)) {
952 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n"); 952 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
953 return -ENODEV; 953 return PTR_ERR(pmx->pctl);
954 } 954 }
955 955
956 platform_set_drvdata(pdev, pmx); 956 platform_set_drvdata(pdev, pmx);
diff --git a/drivers/pinctrl/pinctrl-tz1090.c b/drivers/pinctrl/pinctrl-tz1090.c
index fc5594a530c2..6d07a2f64d97 100644
--- a/drivers/pinctrl/pinctrl-tz1090.c
+++ b/drivers/pinctrl/pinctrl-tz1090.c
@@ -1963,9 +1963,9 @@ static int tz1090_pinctrl_probe(struct platform_device *pdev)
1963 return PTR_ERR(pmx->regs); 1963 return PTR_ERR(pmx->regs);
1964 1964
1965 pmx->pctl = pinctrl_register(&tz1090_pinctrl_desc, &pdev->dev, pmx); 1965 pmx->pctl = pinctrl_register(&tz1090_pinctrl_desc, &pdev->dev, pmx);
1966 if (!pmx->pctl) { 1966 if (IS_ERR(pmx->pctl)) {
1967 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n"); 1967 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
1968 return -ENODEV; 1968 return PTR_ERR(pmx->pctl);
1969 } 1969 }
1970 1970
1971 platform_set_drvdata(pdev, pmx); 1971 platform_set_drvdata(pdev, pmx);
diff --git a/drivers/pinctrl/pinctrl-u300.c b/drivers/pinctrl/pinctrl-u300.c
index f931e65aba3a..c076021f37d2 100644
--- a/drivers/pinctrl/pinctrl-u300.c
+++ b/drivers/pinctrl/pinctrl-u300.c
@@ -1068,9 +1068,9 @@ static int u300_pmx_probe(struct platform_device *pdev)
1068 return PTR_ERR(upmx->virtbase); 1068 return PTR_ERR(upmx->virtbase);
1069 1069
1070 upmx->pctl = pinctrl_register(&u300_pmx_desc, &pdev->dev, upmx); 1070 upmx->pctl = pinctrl_register(&u300_pmx_desc, &pdev->dev, upmx);
1071 if (!upmx->pctl) { 1071 if (IS_ERR(upmx->pctl)) {
1072 dev_err(&pdev->dev, "could not register U300 pinmux driver\n"); 1072 dev_err(&pdev->dev, "could not register U300 pinmux driver\n");
1073 return -EINVAL; 1073 return PTR_ERR(upmx->pctl);
1074 } 1074 }
1075 1075
1076 platform_set_drvdata(pdev, upmx); 1076 platform_set_drvdata(pdev, upmx);
diff --git a/drivers/pinctrl/pinctrl-zynq.c b/drivers/pinctrl/pinctrl-zynq.c
index 22280bddb9e2..7ce23b6282ad 100644
--- a/drivers/pinctrl/pinctrl-zynq.c
+++ b/drivers/pinctrl/pinctrl-zynq.c
@@ -101,6 +101,8 @@ enum zynq_pinmux_functions {
101 ZYNQ_PMUX_qspi_cs1, 101 ZYNQ_PMUX_qspi_cs1,
102 ZYNQ_PMUX_spi0, 102 ZYNQ_PMUX_spi0,
103 ZYNQ_PMUX_spi1, 103 ZYNQ_PMUX_spi1,
104 ZYNQ_PMUX_spi0_ss,
105 ZYNQ_PMUX_spi1_ss,
104 ZYNQ_PMUX_sdio0, 106 ZYNQ_PMUX_sdio0,
105 ZYNQ_PMUX_sdio0_pc, 107 ZYNQ_PMUX_sdio0_pc,
106 ZYNQ_PMUX_sdio0_cd, 108 ZYNQ_PMUX_sdio0_cd,
@@ -123,7 +125,7 @@ enum zynq_pinmux_functions {
123 ZYNQ_PMUX_MAX_FUNC 125 ZYNQ_PMUX_MAX_FUNC
124}; 126};
125 127
126const struct pinctrl_pin_desc zynq_pins[] = { 128static const struct pinctrl_pin_desc zynq_pins[] = {
127 PINCTRL_PIN(0, "MIO0"), 129 PINCTRL_PIN(0, "MIO0"),
128 PINCTRL_PIN(1, "MIO1"), 130 PINCTRL_PIN(1, "MIO1"),
129 PINCTRL_PIN(2, "MIO2"), 131 PINCTRL_PIN(2, "MIO2"),
@@ -196,13 +198,35 @@ static const unsigned int qspi0_0_pins[] = {1, 2, 3, 4, 5, 6};
196static const unsigned int qspi1_0_pins[] = {9, 10, 11, 12, 13}; 198static const unsigned int qspi1_0_pins[] = {9, 10, 11, 12, 13};
197static const unsigned int qspi_cs1_pins[] = {0}; 199static const unsigned int qspi_cs1_pins[] = {0};
198static const unsigned int qspi_fbclk_pins[] = {8}; 200static const unsigned int qspi_fbclk_pins[] = {8};
199static const unsigned int spi0_0_pins[] = {16, 17, 18, 19, 20, 21}; 201static const unsigned int spi0_0_pins[] = {16, 17, 21};
200static const unsigned int spi0_1_pins[] = {28, 29, 30, 31, 32, 33}; 202static const unsigned int spi0_0_ss0_pins[] = {18};
201static const unsigned int spi0_2_pins[] = {40, 41, 42, 43, 44, 45}; 203static const unsigned int spi0_0_ss1_pins[] = {19};
202static const unsigned int spi1_0_pins[] = {10, 11, 12, 13, 14, 15}; 204static const unsigned int spi0_0_ss2_pins[] = {20,};
203static const unsigned int spi1_1_pins[] = {22, 23, 24, 25, 26, 27}; 205static const unsigned int spi0_1_pins[] = {28, 29, 33};
204static const unsigned int spi1_2_pins[] = {34, 35, 36, 37, 38, 39}; 206static const unsigned int spi0_1_ss0_pins[] = {30};
205static const unsigned int spi1_3_pins[] = {46, 47, 48, 49, 40, 51}; 207static const unsigned int spi0_1_ss1_pins[] = {31};
208static const unsigned int spi0_1_ss2_pins[] = {32};
209static const unsigned int spi0_2_pins[] = {40, 41, 45};
210static const unsigned int spi0_2_ss0_pins[] = {42};
211static const unsigned int spi0_2_ss1_pins[] = {43};
212static const unsigned int spi0_2_ss2_pins[] = {44};
213static const unsigned int spi1_0_pins[] = {10, 11, 12};
214static const unsigned int spi1_0_ss0_pins[] = {13};
215static const unsigned int spi1_0_ss1_pins[] = {14};
216static const unsigned int spi1_0_ss2_pins[] = {15};
217static const unsigned int spi1_1_pins[] = {22, 23, 24};
218static const unsigned int spi1_1_ss0_pins[] = {25};
219static const unsigned int spi1_1_ss1_pins[] = {26};
220static const unsigned int spi1_1_ss2_pins[] = {27};
221static const unsigned int spi1_2_pins[] = {34, 35, 36};
222static const unsigned int spi1_2_ss0_pins[] = {37};
223static const unsigned int spi1_2_ss1_pins[] = {38};
224static const unsigned int spi1_2_ss2_pins[] = {39};
225static const unsigned int spi1_3_pins[] = {46, 47, 48, 49};
226static const unsigned int spi1_3_ss0_pins[] = {49};
227static const unsigned int spi1_3_ss1_pins[] = {50};
228static const unsigned int spi1_3_ss2_pins[] = {51};
229
206static const unsigned int sdio0_0_pins[] = {16, 17, 18, 19, 20, 21}; 230static const unsigned int sdio0_0_pins[] = {16, 17, 18, 19, 20, 21};
207static const unsigned int sdio0_1_pins[] = {28, 29, 30, 31, 32, 33}; 231static const unsigned int sdio0_1_pins[] = {28, 29, 30, 31, 32, 33};
208static const unsigned int sdio0_2_pins[] = {40, 41, 42, 43, 44, 45}; 232static const unsigned int sdio0_2_pins[] = {40, 41, 42, 43, 44, 45};
@@ -369,7 +393,7 @@ static const unsigned int usb1_0_pins[] = {40, 41, 42, 43, 44, 45, 46, 47, 48,
369 .npins = ARRAY_SIZE(nm ## _pins), \ 393 .npins = ARRAY_SIZE(nm ## _pins), \
370 } 394 }
371 395
372struct zynq_pctrl_group zynq_pctrl_groups[] = { 396static const struct zynq_pctrl_group zynq_pctrl_groups[] = {
373 DEFINE_ZYNQ_PINCTRL_GRP(ethernet0_0), 397 DEFINE_ZYNQ_PINCTRL_GRP(ethernet0_0),
374 DEFINE_ZYNQ_PINCTRL_GRP(ethernet1_0), 398 DEFINE_ZYNQ_PINCTRL_GRP(ethernet1_0),
375 DEFINE_ZYNQ_PINCTRL_GRP(mdio0_0), 399 DEFINE_ZYNQ_PINCTRL_GRP(mdio0_0),
@@ -379,12 +403,33 @@ struct zynq_pctrl_group zynq_pctrl_groups[] = {
379 DEFINE_ZYNQ_PINCTRL_GRP(qspi_fbclk), 403 DEFINE_ZYNQ_PINCTRL_GRP(qspi_fbclk),
380 DEFINE_ZYNQ_PINCTRL_GRP(qspi_cs1), 404 DEFINE_ZYNQ_PINCTRL_GRP(qspi_cs1),
381 DEFINE_ZYNQ_PINCTRL_GRP(spi0_0), 405 DEFINE_ZYNQ_PINCTRL_GRP(spi0_0),
406 DEFINE_ZYNQ_PINCTRL_GRP(spi0_0_ss0),
407 DEFINE_ZYNQ_PINCTRL_GRP(spi0_0_ss1),
408 DEFINE_ZYNQ_PINCTRL_GRP(spi0_0_ss2),
382 DEFINE_ZYNQ_PINCTRL_GRP(spi0_1), 409 DEFINE_ZYNQ_PINCTRL_GRP(spi0_1),
410 DEFINE_ZYNQ_PINCTRL_GRP(spi0_1_ss0),
411 DEFINE_ZYNQ_PINCTRL_GRP(spi0_1_ss1),
412 DEFINE_ZYNQ_PINCTRL_GRP(spi0_1_ss2),
383 DEFINE_ZYNQ_PINCTRL_GRP(spi0_2), 413 DEFINE_ZYNQ_PINCTRL_GRP(spi0_2),
414 DEFINE_ZYNQ_PINCTRL_GRP(spi0_2_ss0),
415 DEFINE_ZYNQ_PINCTRL_GRP(spi0_2_ss1),
416 DEFINE_ZYNQ_PINCTRL_GRP(spi0_2_ss2),
384 DEFINE_ZYNQ_PINCTRL_GRP(spi1_0), 417 DEFINE_ZYNQ_PINCTRL_GRP(spi1_0),
418 DEFINE_ZYNQ_PINCTRL_GRP(spi1_0_ss0),
419 DEFINE_ZYNQ_PINCTRL_GRP(spi1_0_ss1),
420 DEFINE_ZYNQ_PINCTRL_GRP(spi1_0_ss2),
385 DEFINE_ZYNQ_PINCTRL_GRP(spi1_1), 421 DEFINE_ZYNQ_PINCTRL_GRP(spi1_1),
422 DEFINE_ZYNQ_PINCTRL_GRP(spi1_1_ss0),
423 DEFINE_ZYNQ_PINCTRL_GRP(spi1_1_ss1),
424 DEFINE_ZYNQ_PINCTRL_GRP(spi1_1_ss2),
386 DEFINE_ZYNQ_PINCTRL_GRP(spi1_2), 425 DEFINE_ZYNQ_PINCTRL_GRP(spi1_2),
426 DEFINE_ZYNQ_PINCTRL_GRP(spi1_2_ss0),
427 DEFINE_ZYNQ_PINCTRL_GRP(spi1_2_ss1),
428 DEFINE_ZYNQ_PINCTRL_GRP(spi1_2_ss2),
387 DEFINE_ZYNQ_PINCTRL_GRP(spi1_3), 429 DEFINE_ZYNQ_PINCTRL_GRP(spi1_3),
430 DEFINE_ZYNQ_PINCTRL_GRP(spi1_3_ss0),
431 DEFINE_ZYNQ_PINCTRL_GRP(spi1_3_ss1),
432 DEFINE_ZYNQ_PINCTRL_GRP(spi1_3_ss2),
388 DEFINE_ZYNQ_PINCTRL_GRP(sdio0_0), 433 DEFINE_ZYNQ_PINCTRL_GRP(sdio0_0),
389 DEFINE_ZYNQ_PINCTRL_GRP(sdio0_1), 434 DEFINE_ZYNQ_PINCTRL_GRP(sdio0_1),
390 DEFINE_ZYNQ_PINCTRL_GRP(sdio0_2), 435 DEFINE_ZYNQ_PINCTRL_GRP(sdio0_2),
@@ -552,6 +597,15 @@ static const char * const spi0_groups[] = {"spi0_0_grp", "spi0_1_grp",
552 "spi0_2_grp"}; 597 "spi0_2_grp"};
553static const char * const spi1_groups[] = {"spi1_0_grp", "spi1_1_grp", 598static const char * const spi1_groups[] = {"spi1_0_grp", "spi1_1_grp",
554 "spi1_2_grp", "spi1_3_grp"}; 599 "spi1_2_grp", "spi1_3_grp"};
600static const char * const spi0_ss_groups[] = {"spi0_0_ss0_grp",
601 "spi0_0_ss1_grp", "spi0_0_ss2_grp", "spi0_1_ss0_grp",
602 "spi0_1_ss1_grp", "spi0_1_ss2_grp", "spi0_2_ss0_grp",
603 "spi0_2_ss1_grp", "spi0_2_ss2_grp"};
604static const char * const spi1_ss_groups[] = {"spi1_0_ss0_grp",
605 "spi1_0_ss1_grp", "spi1_0_ss2_grp", "spi1_1_ss0_grp",
606 "spi1_1_ss1_grp", "spi1_1_ss2_grp", "spi1_2_ss0_grp",
607 "spi1_2_ss1_grp", "spi1_2_ss2_grp", "spi1_3_ss0_grp",
608 "spi1_3_ss1_grp", "spi1_3_ss2_grp"};
555static const char * const sdio0_groups[] = {"sdio0_0_grp", "sdio0_1_grp", 609static const char * const sdio0_groups[] = {"sdio0_0_grp", "sdio0_1_grp",
556 "sdio0_2_grp"}; 610 "sdio0_2_grp"};
557static const char * const sdio1_groups[] = {"sdio1_0_grp", "sdio1_1_grp", 611static const char * const sdio1_groups[] = {"sdio1_0_grp", "sdio1_1_grp",
@@ -714,12 +768,13 @@ static const char * const gpio0_groups[] = {"gpio0_0_grp",
714 .mux_val = mval, \ 768 .mux_val = mval, \
715 } 769 }
716 770
717#define DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(fname, mval, mux, mask, shift) \ 771#define DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(fname, mval, offset, mask, shift)\
718 [ZYNQ_PMUX_##fname] = { \ 772 [ZYNQ_PMUX_##fname] = { \
719 .name = #fname, \ 773 .name = #fname, \
720 .groups = fname##_groups, \ 774 .groups = fname##_groups, \
721 .ngroups = ARRAY_SIZE(fname##_groups), \ 775 .ngroups = ARRAY_SIZE(fname##_groups), \
722 .mux_val = mval, \ 776 .mux_val = mval, \
777 .mux = offset, \
723 .mux_mask = mask, \ 778 .mux_mask = mask, \
724 .mux_shift = shift, \ 779 .mux_shift = shift, \
725 } 780 }
@@ -742,17 +797,19 @@ static const struct zynq_pinmux_function zynq_pmux_functions[] = {
742 DEFINE_ZYNQ_PINMUX_FUNCTION(qspi_cs1, 1), 797 DEFINE_ZYNQ_PINMUX_FUNCTION(qspi_cs1, 1),
743 DEFINE_ZYNQ_PINMUX_FUNCTION(spi0, 0x50), 798 DEFINE_ZYNQ_PINMUX_FUNCTION(spi0, 0x50),
744 DEFINE_ZYNQ_PINMUX_FUNCTION(spi1, 0x50), 799 DEFINE_ZYNQ_PINMUX_FUNCTION(spi1, 0x50),
800 DEFINE_ZYNQ_PINMUX_FUNCTION(spi0_ss, 0x50),
801 DEFINE_ZYNQ_PINMUX_FUNCTION(spi1_ss, 0x50),
745 DEFINE_ZYNQ_PINMUX_FUNCTION(sdio0, 0x40), 802 DEFINE_ZYNQ_PINMUX_FUNCTION(sdio0, 0x40),
746 DEFINE_ZYNQ_PINMUX_FUNCTION(sdio0_pc, 0xc), 803 DEFINE_ZYNQ_PINMUX_FUNCTION(sdio0_pc, 0xc),
747 DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio0_wp, 0, 130, ZYNQ_SDIO_WP_MASK, 804 DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio0_wp, 0, 0x130, ZYNQ_SDIO_WP_MASK,
748 ZYNQ_SDIO_WP_SHIFT), 805 ZYNQ_SDIO_WP_SHIFT),
749 DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio0_cd, 0, 130, ZYNQ_SDIO_CD_MASK, 806 DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio0_cd, 0, 0x130, ZYNQ_SDIO_CD_MASK,
750 ZYNQ_SDIO_CD_SHIFT), 807 ZYNQ_SDIO_CD_SHIFT),
751 DEFINE_ZYNQ_PINMUX_FUNCTION(sdio1, 0x40), 808 DEFINE_ZYNQ_PINMUX_FUNCTION(sdio1, 0x40),
752 DEFINE_ZYNQ_PINMUX_FUNCTION(sdio1_pc, 0xc), 809 DEFINE_ZYNQ_PINMUX_FUNCTION(sdio1_pc, 0xc),
753 DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio1_wp, 0, 134, ZYNQ_SDIO_WP_MASK, 810 DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio1_wp, 0, 0x134, ZYNQ_SDIO_WP_MASK,
754 ZYNQ_SDIO_WP_SHIFT), 811 ZYNQ_SDIO_WP_SHIFT),
755 DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio1_cd, 0, 134, ZYNQ_SDIO_CD_MASK, 812 DEFINE_ZYNQ_PINMUX_FUNCTION_MUX(sdio1_cd, 0, 0x134, ZYNQ_SDIO_CD_MASK,
756 ZYNQ_SDIO_CD_SHIFT), 813 ZYNQ_SDIO_CD_SHIFT),
757 DEFINE_ZYNQ_PINMUX_FUNCTION(smc0_nor, 4), 814 DEFINE_ZYNQ_PINMUX_FUNCTION(smc0_nor, 4),
758 DEFINE_ZYNQ_PINMUX_FUNCTION(smc0_nor_cs1, 8), 815 DEFINE_ZYNQ_PINMUX_FUNCTION(smc0_nor_cs1, 8),
@@ -1139,8 +1196,8 @@ static int zynq_pinctrl_probe(struct platform_device *pdev)
1139 pctrl->nfuncs = ARRAY_SIZE(zynq_pmux_functions); 1196 pctrl->nfuncs = ARRAY_SIZE(zynq_pmux_functions);
1140 1197
1141 pctrl->pctrl = pinctrl_register(&zynq_desc, &pdev->dev, pctrl); 1198 pctrl->pctrl = pinctrl_register(&zynq_desc, &pdev->dev, pctrl);
1142 if (!pctrl->pctrl) 1199 if (IS_ERR(pctrl->pctrl))
1143 return -ENOMEM; 1200 return PTR_ERR(pctrl->pctrl);
1144 1201
1145 platform_set_drvdata(pdev, pctrl); 1202 platform_set_drvdata(pdev, pctrl);
1146 1203
@@ -1149,7 +1206,7 @@ static int zynq_pinctrl_probe(struct platform_device *pdev)
1149 return 0; 1206 return 0;
1150} 1207}
1151 1208
1152int zynq_pinctrl_remove(struct platform_device *pdev) 1209static int zynq_pinctrl_remove(struct platform_device *pdev)
1153{ 1210{
1154 struct zynq_pinctrl *pctrl = platform_get_drvdata(pdev); 1211 struct zynq_pinctrl *pctrl = platform_get_drvdata(pdev);
1155 1212
diff --git a/drivers/pinctrl/pinmux.c b/drivers/pinctrl/pinmux.c
index b874458dcb88..e7ae890dcf1a 100644
--- a/drivers/pinctrl/pinmux.c
+++ b/drivers/pinctrl/pinmux.c
@@ -107,6 +107,13 @@ static int pin_request(struct pinctrl_dev *pctldev,
107 desc->name, desc->gpio_owner, owner); 107 desc->name, desc->gpio_owner, owner);
108 goto out; 108 goto out;
109 } 109 }
110 if (ops->strict && desc->mux_usecount &&
111 strcmp(desc->mux_owner, owner)) {
112 dev_err(pctldev->dev,
113 "pin %s already requested by %s; cannot claim for %s\n",
114 desc->name, desc->mux_owner, owner);
115 goto out;
116 }
110 117
111 desc->gpio_owner = owner; 118 desc->gpio_owner = owner;
112 } else { 119 } else {
@@ -116,6 +123,12 @@ static int pin_request(struct pinctrl_dev *pctldev,
116 desc->name, desc->mux_owner, owner); 123 desc->name, desc->mux_owner, owner);
117 goto out; 124 goto out;
118 } 125 }
126 if (ops->strict && desc->gpio_owner) {
127 dev_err(pctldev->dev,
128 "pin %s already requested by %s; cannot claim for %s\n",
129 desc->name, desc->gpio_owner, owner);
130 goto out;
131 }
119 132
120 desc->mux_usecount++; 133 desc->mux_usecount++;
121 if (desc->mux_usecount > 1) 134 if (desc->mux_usecount > 1)
@@ -544,9 +557,12 @@ static int pinmux_functions_show(struct seq_file *s, void *what)
544 557
545 ret = pmxops->get_function_groups(pctldev, func_selector, 558 ret = pmxops->get_function_groups(pctldev, func_selector,
546 &groups, &num_groups); 559 &groups, &num_groups);
547 if (ret) 560 if (ret) {
548 seq_printf(s, "function %s: COULD NOT GET GROUPS\n", 561 seq_printf(s, "function %s: COULD NOT GET GROUPS\n",
549 func); 562 func);
563 func_selector++;
564 continue;
565 }
550 566
551 seq_printf(s, "function: %s, groups = [ ", func); 567 seq_printf(s, "function: %s, groups = [ ", func);
552 for (i = 0; i < num_groups; i++) 568 for (i = 0; i < num_groups; i++)
@@ -572,7 +588,12 @@ static int pinmux_pins_show(struct seq_file *s, void *what)
572 return 0; 588 return 0;
573 589
574 seq_puts(s, "Pinmux settings per pin\n"); 590 seq_puts(s, "Pinmux settings per pin\n");
575 seq_puts(s, "Format: pin (name): mux_owner gpio_owner hog?\n"); 591 if (pmxops->strict)
592 seq_puts(s,
593 "Format: pin (name): mux_owner|gpio_owner (strict) hog?\n");
594 else
595 seq_puts(s,
596 "Format: pin (name): mux_owner gpio_owner hog?\n");
576 597
577 mutex_lock(&pctldev->mutex); 598 mutex_lock(&pctldev->mutex);
578 599
@@ -591,14 +612,34 @@ static int pinmux_pins_show(struct seq_file *s, void *what)
591 !strcmp(desc->mux_owner, pinctrl_dev_get_name(pctldev))) 612 !strcmp(desc->mux_owner, pinctrl_dev_get_name(pctldev)))
592 is_hog = true; 613 is_hog = true;
593 614
594 seq_printf(s, "pin %d (%s): %s %s%s", pin, 615 if (pmxops->strict) {
595 desc->name ? desc->name : "unnamed", 616 if (desc->mux_owner)
596 desc->mux_owner ? desc->mux_owner 617 seq_printf(s, "pin %d (%s): device %s%s",
597 : "(MUX UNCLAIMED)", 618 pin,
598 desc->gpio_owner ? desc->gpio_owner 619 desc->name ? desc->name : "unnamed",
599 : "(GPIO UNCLAIMED)", 620 desc->mux_owner,
600 is_hog ? " (HOG)" : ""); 621 is_hog ? " (HOG)" : "");
622 else if (desc->gpio_owner)
623 seq_printf(s, "pin %d (%s): GPIO %s",
624 pin,
625 desc->name ? desc->name : "unnamed",
626 desc->gpio_owner);
627 else
628 seq_printf(s, "pin %d (%s): UNCLAIMED",
629 pin,
630 desc->name ? desc->name : "unnamed");
631 } else {
632 /* For non-strict controllers */
633 seq_printf(s, "pin %d (%s): %s %s%s", pin,
634 desc->name ? desc->name : "unnamed",
635 desc->mux_owner ? desc->mux_owner
636 : "(MUX UNCLAIMED)",
637 desc->gpio_owner ? desc->gpio_owner
638 : "(GPIO UNCLAIMED)",
639 is_hog ? " (HOG)" : "");
640 }
601 641
642 /* If mux: print function+group claiming the pin */
602 if (desc->mux_setting) 643 if (desc->mux_setting)
603 seq_printf(s, " function %s group %s\n", 644 seq_printf(s, " function %s group %s\n",
604 pmxops->get_function_name(pctldev, 645 pmxops->get_function_name(pctldev,
diff --git a/drivers/pinctrl/qcom/Kconfig b/drivers/pinctrl/qcom/Kconfig
index ea575f60f001..58f5632b27f4 100644
--- a/drivers/pinctrl/qcom/Kconfig
+++ b/drivers/pinctrl/qcom/Kconfig
@@ -31,6 +31,14 @@ config PINCTRL_IPQ8064
31 This is the pinctrl, pinmux, pinconf and gpiolib driver for the 31 This is the pinctrl, pinmux, pinconf and gpiolib driver for the
32 Qualcomm TLMM block found in the Qualcomm IPQ8064 platform. 32 Qualcomm TLMM block found in the Qualcomm IPQ8064 platform.
33 33
34config PINCTRL_MSM8660
35 tristate "Qualcomm 8660 pin controller driver"
36 depends on GPIOLIB && OF
37 select PINCTRL_MSM
38 help
39 This is the pinctrl, pinmux, pinconf and gpiolib driver for the
40 Qualcomm TLMM block found in the Qualcomm 8660 platform.
41
34config PINCTRL_MSM8960 42config PINCTRL_MSM8960
35 tristate "Qualcomm 8960 pin controller driver" 43 tristate "Qualcomm 8960 pin controller driver"
36 depends on GPIOLIB && OF 44 depends on GPIOLIB && OF
diff --git a/drivers/pinctrl/qcom/Makefile b/drivers/pinctrl/qcom/Makefile
index 68958702917d..3666c703ce88 100644
--- a/drivers/pinctrl/qcom/Makefile
+++ b/drivers/pinctrl/qcom/Makefile
@@ -3,6 +3,7 @@ obj-$(CONFIG_PINCTRL_MSM) += pinctrl-msm.o
3obj-$(CONFIG_PINCTRL_APQ8064) += pinctrl-apq8064.o 3obj-$(CONFIG_PINCTRL_APQ8064) += pinctrl-apq8064.o
4obj-$(CONFIG_PINCTRL_APQ8084) += pinctrl-apq8084.o 4obj-$(CONFIG_PINCTRL_APQ8084) += pinctrl-apq8084.o
5obj-$(CONFIG_PINCTRL_IPQ8064) += pinctrl-ipq8064.o 5obj-$(CONFIG_PINCTRL_IPQ8064) += pinctrl-ipq8064.o
6obj-$(CONFIG_PINCTRL_MSM8660) += pinctrl-msm8660.o
6obj-$(CONFIG_PINCTRL_MSM8960) += pinctrl-msm8960.o 7obj-$(CONFIG_PINCTRL_MSM8960) += pinctrl-msm8960.o
7obj-$(CONFIG_PINCTRL_MSM8X74) += pinctrl-msm8x74.o 8obj-$(CONFIG_PINCTRL_MSM8X74) += pinctrl-msm8x74.o
8obj-$(CONFIG_PINCTRL_MSM8916) += pinctrl-msm8916.o 9obj-$(CONFIG_PINCTRL_MSM8916) += pinctrl-msm8916.o
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
index f3d800f796c2..e457d52302a2 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm.c
@@ -906,9 +906,9 @@ int msm_pinctrl_probe(struct platform_device *pdev,
906 msm_pinctrl_desc.pins = pctrl->soc->pins; 906 msm_pinctrl_desc.pins = pctrl->soc->pins;
907 msm_pinctrl_desc.npins = pctrl->soc->npins; 907 msm_pinctrl_desc.npins = pctrl->soc->npins;
908 pctrl->pctrl = pinctrl_register(&msm_pinctrl_desc, &pdev->dev, pctrl); 908 pctrl->pctrl = pinctrl_register(&msm_pinctrl_desc, &pdev->dev, pctrl);
909 if (!pctrl->pctrl) { 909 if (IS_ERR(pctrl->pctrl)) {
910 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n"); 910 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
911 return -ENODEV; 911 return PTR_ERR(pctrl->pctrl);
912 } 912 }
913 913
914 ret = msm_gpio_init(pctrl); 914 ret = msm_gpio_init(pctrl);
diff --git a/drivers/pinctrl/qcom/pinctrl-msm8660.c b/drivers/pinctrl/qcom/pinctrl-msm8660.c
new file mode 100644
index 000000000000..3e8f7ac2ac8a
--- /dev/null
+++ b/drivers/pinctrl/qcom/pinctrl-msm8660.c
@@ -0,0 +1,984 @@
1/*
2 * Copyright (c) 2015, Sony Mobile Communications AB.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 and
6 * only version 2 as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#include <linux/module.h>
15#include <linux/of.h>
16#include <linux/platform_device.h>
17#include <linux/pinctrl/pinctrl.h>
18
19#include "pinctrl-msm.h"
20
21static const struct pinctrl_pin_desc msm8660_pins[] = {
22 PINCTRL_PIN(0, "GPIO_0"),
23 PINCTRL_PIN(1, "GPIO_1"),
24 PINCTRL_PIN(2, "GPIO_2"),
25 PINCTRL_PIN(3, "GPIO_3"),
26 PINCTRL_PIN(4, "GPIO_4"),
27 PINCTRL_PIN(5, "GPIO_5"),
28 PINCTRL_PIN(6, "GPIO_6"),
29 PINCTRL_PIN(7, "GPIO_7"),
30 PINCTRL_PIN(8, "GPIO_8"),
31 PINCTRL_PIN(9, "GPIO_9"),
32 PINCTRL_PIN(10, "GPIO_10"),
33 PINCTRL_PIN(11, "GPIO_11"),
34 PINCTRL_PIN(12, "GPIO_12"),
35 PINCTRL_PIN(13, "GPIO_13"),
36 PINCTRL_PIN(14, "GPIO_14"),
37 PINCTRL_PIN(15, "GPIO_15"),
38 PINCTRL_PIN(16, "GPIO_16"),
39 PINCTRL_PIN(17, "GPIO_17"),
40 PINCTRL_PIN(18, "GPIO_18"),
41 PINCTRL_PIN(19, "GPIO_19"),
42 PINCTRL_PIN(20, "GPIO_20"),
43 PINCTRL_PIN(21, "GPIO_21"),
44 PINCTRL_PIN(22, "GPIO_22"),
45 PINCTRL_PIN(23, "GPIO_23"),
46 PINCTRL_PIN(24, "GPIO_24"),
47 PINCTRL_PIN(25, "GPIO_25"),
48 PINCTRL_PIN(26, "GPIO_26"),
49 PINCTRL_PIN(27, "GPIO_27"),
50 PINCTRL_PIN(28, "GPIO_28"),
51 PINCTRL_PIN(29, "GPIO_29"),
52 PINCTRL_PIN(30, "GPIO_30"),
53 PINCTRL_PIN(31, "GPIO_31"),
54 PINCTRL_PIN(32, "GPIO_32"),
55 PINCTRL_PIN(33, "GPIO_33"),
56 PINCTRL_PIN(34, "GPIO_34"),
57 PINCTRL_PIN(35, "GPIO_35"),
58 PINCTRL_PIN(36, "GPIO_36"),
59 PINCTRL_PIN(37, "GPIO_37"),
60 PINCTRL_PIN(38, "GPIO_38"),
61 PINCTRL_PIN(39, "GPIO_39"),
62 PINCTRL_PIN(40, "GPIO_40"),
63 PINCTRL_PIN(41, "GPIO_41"),
64 PINCTRL_PIN(42, "GPIO_42"),
65 PINCTRL_PIN(43, "GPIO_43"),
66 PINCTRL_PIN(44, "GPIO_44"),
67 PINCTRL_PIN(45, "GPIO_45"),
68 PINCTRL_PIN(46, "GPIO_46"),
69 PINCTRL_PIN(47, "GPIO_47"),
70 PINCTRL_PIN(48, "GPIO_48"),
71 PINCTRL_PIN(49, "GPIO_49"),
72 PINCTRL_PIN(50, "GPIO_50"),
73 PINCTRL_PIN(51, "GPIO_51"),
74 PINCTRL_PIN(52, "GPIO_52"),
75 PINCTRL_PIN(53, "GPIO_53"),
76 PINCTRL_PIN(54, "GPIO_54"),
77 PINCTRL_PIN(55, "GPIO_55"),
78 PINCTRL_PIN(56, "GPIO_56"),
79 PINCTRL_PIN(57, "GPIO_57"),
80 PINCTRL_PIN(58, "GPIO_58"),
81 PINCTRL_PIN(59, "GPIO_59"),
82 PINCTRL_PIN(60, "GPIO_60"),
83 PINCTRL_PIN(61, "GPIO_61"),
84 PINCTRL_PIN(62, "GPIO_62"),
85 PINCTRL_PIN(63, "GPIO_63"),
86 PINCTRL_PIN(64, "GPIO_64"),
87 PINCTRL_PIN(65, "GPIO_65"),
88 PINCTRL_PIN(66, "GPIO_66"),
89 PINCTRL_PIN(67, "GPIO_67"),
90 PINCTRL_PIN(68, "GPIO_68"),
91 PINCTRL_PIN(69, "GPIO_69"),
92 PINCTRL_PIN(70, "GPIO_70"),
93 PINCTRL_PIN(71, "GPIO_71"),
94 PINCTRL_PIN(72, "GPIO_72"),
95 PINCTRL_PIN(73, "GPIO_73"),
96 PINCTRL_PIN(74, "GPIO_74"),
97 PINCTRL_PIN(75, "GPIO_75"),
98 PINCTRL_PIN(76, "GPIO_76"),
99 PINCTRL_PIN(77, "GPIO_77"),
100 PINCTRL_PIN(78, "GPIO_78"),
101 PINCTRL_PIN(79, "GPIO_79"),
102 PINCTRL_PIN(80, "GPIO_80"),
103 PINCTRL_PIN(81, "GPIO_81"),
104 PINCTRL_PIN(82, "GPIO_82"),
105 PINCTRL_PIN(83, "GPIO_83"),
106 PINCTRL_PIN(84, "GPIO_84"),
107 PINCTRL_PIN(85, "GPIO_85"),
108 PINCTRL_PIN(86, "GPIO_86"),
109 PINCTRL_PIN(87, "GPIO_87"),
110 PINCTRL_PIN(88, "GPIO_88"),
111 PINCTRL_PIN(89, "GPIO_89"),
112 PINCTRL_PIN(90, "GPIO_90"),
113 PINCTRL_PIN(91, "GPIO_91"),
114 PINCTRL_PIN(92, "GPIO_92"),
115 PINCTRL_PIN(93, "GPIO_93"),
116 PINCTRL_PIN(94, "GPIO_94"),
117 PINCTRL_PIN(95, "GPIO_95"),
118 PINCTRL_PIN(96, "GPIO_96"),
119 PINCTRL_PIN(97, "GPIO_97"),
120 PINCTRL_PIN(98, "GPIO_98"),
121 PINCTRL_PIN(99, "GPIO_99"),
122 PINCTRL_PIN(100, "GPIO_100"),
123 PINCTRL_PIN(101, "GPIO_101"),
124 PINCTRL_PIN(102, "GPIO_102"),
125 PINCTRL_PIN(103, "GPIO_103"),
126 PINCTRL_PIN(104, "GPIO_104"),
127 PINCTRL_PIN(105, "GPIO_105"),
128 PINCTRL_PIN(106, "GPIO_106"),
129 PINCTRL_PIN(107, "GPIO_107"),
130 PINCTRL_PIN(108, "GPIO_108"),
131 PINCTRL_PIN(109, "GPIO_109"),
132 PINCTRL_PIN(110, "GPIO_110"),
133 PINCTRL_PIN(111, "GPIO_111"),
134 PINCTRL_PIN(112, "GPIO_112"),
135 PINCTRL_PIN(113, "GPIO_113"),
136 PINCTRL_PIN(114, "GPIO_114"),
137 PINCTRL_PIN(115, "GPIO_115"),
138 PINCTRL_PIN(116, "GPIO_116"),
139 PINCTRL_PIN(117, "GPIO_117"),
140 PINCTRL_PIN(118, "GPIO_118"),
141 PINCTRL_PIN(119, "GPIO_119"),
142 PINCTRL_PIN(120, "GPIO_120"),
143 PINCTRL_PIN(121, "GPIO_121"),
144 PINCTRL_PIN(122, "GPIO_122"),
145 PINCTRL_PIN(123, "GPIO_123"),
146 PINCTRL_PIN(124, "GPIO_124"),
147 PINCTRL_PIN(125, "GPIO_125"),
148 PINCTRL_PIN(126, "GPIO_126"),
149 PINCTRL_PIN(127, "GPIO_127"),
150 PINCTRL_PIN(128, "GPIO_128"),
151 PINCTRL_PIN(129, "GPIO_129"),
152 PINCTRL_PIN(130, "GPIO_130"),
153 PINCTRL_PIN(131, "GPIO_131"),
154 PINCTRL_PIN(132, "GPIO_132"),
155 PINCTRL_PIN(133, "GPIO_133"),
156 PINCTRL_PIN(134, "GPIO_134"),
157 PINCTRL_PIN(135, "GPIO_135"),
158 PINCTRL_PIN(136, "GPIO_136"),
159 PINCTRL_PIN(137, "GPIO_137"),
160 PINCTRL_PIN(138, "GPIO_138"),
161 PINCTRL_PIN(139, "GPIO_139"),
162 PINCTRL_PIN(140, "GPIO_140"),
163 PINCTRL_PIN(141, "GPIO_141"),
164 PINCTRL_PIN(142, "GPIO_142"),
165 PINCTRL_PIN(143, "GPIO_143"),
166 PINCTRL_PIN(144, "GPIO_144"),
167 PINCTRL_PIN(145, "GPIO_145"),
168 PINCTRL_PIN(146, "GPIO_146"),
169 PINCTRL_PIN(147, "GPIO_147"),
170 PINCTRL_PIN(148, "GPIO_148"),
171 PINCTRL_PIN(149, "GPIO_149"),
172 PINCTRL_PIN(150, "GPIO_150"),
173 PINCTRL_PIN(151, "GPIO_151"),
174 PINCTRL_PIN(152, "GPIO_152"),
175 PINCTRL_PIN(153, "GPIO_153"),
176 PINCTRL_PIN(154, "GPIO_154"),
177 PINCTRL_PIN(155, "GPIO_155"),
178 PINCTRL_PIN(156, "GPIO_156"),
179 PINCTRL_PIN(157, "GPIO_157"),
180 PINCTRL_PIN(158, "GPIO_158"),
181 PINCTRL_PIN(159, "GPIO_159"),
182 PINCTRL_PIN(160, "GPIO_160"),
183 PINCTRL_PIN(161, "GPIO_161"),
184 PINCTRL_PIN(162, "GPIO_162"),
185 PINCTRL_PIN(163, "GPIO_163"),
186 PINCTRL_PIN(164, "GPIO_164"),
187 PINCTRL_PIN(165, "GPIO_165"),
188 PINCTRL_PIN(166, "GPIO_166"),
189 PINCTRL_PIN(167, "GPIO_167"),
190 PINCTRL_PIN(168, "GPIO_168"),
191 PINCTRL_PIN(169, "GPIO_169"),
192 PINCTRL_PIN(170, "GPIO_170"),
193 PINCTRL_PIN(171, "GPIO_171"),
194 PINCTRL_PIN(172, "GPIO_172"),
195
196 PINCTRL_PIN(173, "SDC1_CLK"),
197 PINCTRL_PIN(174, "SDC1_CMD"),
198 PINCTRL_PIN(175, "SDC1_DATA"),
199 PINCTRL_PIN(176, "SDC3_CLK"),
200 PINCTRL_PIN(177, "SDC3_CMD"),
201 PINCTRL_PIN(178, "SDC3_DATA"),
202};
203
204#define DECLARE_MSM_GPIO_PIN(pin) static const unsigned int gpio##pin##_pins[] = { pin }
205DECLARE_MSM_GPIO_PIN(0);
206DECLARE_MSM_GPIO_PIN(1);
207DECLARE_MSM_GPIO_PIN(2);
208DECLARE_MSM_GPIO_PIN(3);
209DECLARE_MSM_GPIO_PIN(4);
210DECLARE_MSM_GPIO_PIN(5);
211DECLARE_MSM_GPIO_PIN(6);
212DECLARE_MSM_GPIO_PIN(7);
213DECLARE_MSM_GPIO_PIN(8);
214DECLARE_MSM_GPIO_PIN(9);
215DECLARE_MSM_GPIO_PIN(10);
216DECLARE_MSM_GPIO_PIN(11);
217DECLARE_MSM_GPIO_PIN(12);
218DECLARE_MSM_GPIO_PIN(13);
219DECLARE_MSM_GPIO_PIN(14);
220DECLARE_MSM_GPIO_PIN(15);
221DECLARE_MSM_GPIO_PIN(16);
222DECLARE_MSM_GPIO_PIN(17);
223DECLARE_MSM_GPIO_PIN(18);
224DECLARE_MSM_GPIO_PIN(19);
225DECLARE_MSM_GPIO_PIN(20);
226DECLARE_MSM_GPIO_PIN(21);
227DECLARE_MSM_GPIO_PIN(22);
228DECLARE_MSM_GPIO_PIN(23);
229DECLARE_MSM_GPIO_PIN(24);
230DECLARE_MSM_GPIO_PIN(25);
231DECLARE_MSM_GPIO_PIN(26);
232DECLARE_MSM_GPIO_PIN(27);
233DECLARE_MSM_GPIO_PIN(28);
234DECLARE_MSM_GPIO_PIN(29);
235DECLARE_MSM_GPIO_PIN(30);
236DECLARE_MSM_GPIO_PIN(31);
237DECLARE_MSM_GPIO_PIN(32);
238DECLARE_MSM_GPIO_PIN(33);
239DECLARE_MSM_GPIO_PIN(34);
240DECLARE_MSM_GPIO_PIN(35);
241DECLARE_MSM_GPIO_PIN(36);
242DECLARE_MSM_GPIO_PIN(37);
243DECLARE_MSM_GPIO_PIN(38);
244DECLARE_MSM_GPIO_PIN(39);
245DECLARE_MSM_GPIO_PIN(40);
246DECLARE_MSM_GPIO_PIN(41);
247DECLARE_MSM_GPIO_PIN(42);
248DECLARE_MSM_GPIO_PIN(43);
249DECLARE_MSM_GPIO_PIN(44);
250DECLARE_MSM_GPIO_PIN(45);
251DECLARE_MSM_GPIO_PIN(46);
252DECLARE_MSM_GPIO_PIN(47);
253DECLARE_MSM_GPIO_PIN(48);
254DECLARE_MSM_GPIO_PIN(49);
255DECLARE_MSM_GPIO_PIN(50);
256DECLARE_MSM_GPIO_PIN(51);
257DECLARE_MSM_GPIO_PIN(52);
258DECLARE_MSM_GPIO_PIN(53);
259DECLARE_MSM_GPIO_PIN(54);
260DECLARE_MSM_GPIO_PIN(55);
261DECLARE_MSM_GPIO_PIN(56);
262DECLARE_MSM_GPIO_PIN(57);
263DECLARE_MSM_GPIO_PIN(58);
264DECLARE_MSM_GPIO_PIN(59);
265DECLARE_MSM_GPIO_PIN(60);
266DECLARE_MSM_GPIO_PIN(61);
267DECLARE_MSM_GPIO_PIN(62);
268DECLARE_MSM_GPIO_PIN(63);
269DECLARE_MSM_GPIO_PIN(64);
270DECLARE_MSM_GPIO_PIN(65);
271DECLARE_MSM_GPIO_PIN(66);
272DECLARE_MSM_GPIO_PIN(67);
273DECLARE_MSM_GPIO_PIN(68);
274DECLARE_MSM_GPIO_PIN(69);
275DECLARE_MSM_GPIO_PIN(70);
276DECLARE_MSM_GPIO_PIN(71);
277DECLARE_MSM_GPIO_PIN(72);
278DECLARE_MSM_GPIO_PIN(73);
279DECLARE_MSM_GPIO_PIN(74);
280DECLARE_MSM_GPIO_PIN(75);
281DECLARE_MSM_GPIO_PIN(76);
282DECLARE_MSM_GPIO_PIN(77);
283DECLARE_MSM_GPIO_PIN(78);
284DECLARE_MSM_GPIO_PIN(79);
285DECLARE_MSM_GPIO_PIN(80);
286DECLARE_MSM_GPIO_PIN(81);
287DECLARE_MSM_GPIO_PIN(82);
288DECLARE_MSM_GPIO_PIN(83);
289DECLARE_MSM_GPIO_PIN(84);
290DECLARE_MSM_GPIO_PIN(85);
291DECLARE_MSM_GPIO_PIN(86);
292DECLARE_MSM_GPIO_PIN(87);
293DECLARE_MSM_GPIO_PIN(88);
294DECLARE_MSM_GPIO_PIN(89);
295DECLARE_MSM_GPIO_PIN(90);
296DECLARE_MSM_GPIO_PIN(91);
297DECLARE_MSM_GPIO_PIN(92);
298DECLARE_MSM_GPIO_PIN(93);
299DECLARE_MSM_GPIO_PIN(94);
300DECLARE_MSM_GPIO_PIN(95);
301DECLARE_MSM_GPIO_PIN(96);
302DECLARE_MSM_GPIO_PIN(97);
303DECLARE_MSM_GPIO_PIN(98);
304DECLARE_MSM_GPIO_PIN(99);
305DECLARE_MSM_GPIO_PIN(100);
306DECLARE_MSM_GPIO_PIN(101);
307DECLARE_MSM_GPIO_PIN(102);
308DECLARE_MSM_GPIO_PIN(103);
309DECLARE_MSM_GPIO_PIN(104);
310DECLARE_MSM_GPIO_PIN(105);
311DECLARE_MSM_GPIO_PIN(106);
312DECLARE_MSM_GPIO_PIN(107);
313DECLARE_MSM_GPIO_PIN(108);
314DECLARE_MSM_GPIO_PIN(109);
315DECLARE_MSM_GPIO_PIN(110);
316DECLARE_MSM_GPIO_PIN(111);
317DECLARE_MSM_GPIO_PIN(112);
318DECLARE_MSM_GPIO_PIN(113);
319DECLARE_MSM_GPIO_PIN(114);
320DECLARE_MSM_GPIO_PIN(115);
321DECLARE_MSM_GPIO_PIN(116);
322DECLARE_MSM_GPIO_PIN(117);
323DECLARE_MSM_GPIO_PIN(118);
324DECLARE_MSM_GPIO_PIN(119);
325DECLARE_MSM_GPIO_PIN(120);
326DECLARE_MSM_GPIO_PIN(121);
327DECLARE_MSM_GPIO_PIN(122);
328DECLARE_MSM_GPIO_PIN(123);
329DECLARE_MSM_GPIO_PIN(124);
330DECLARE_MSM_GPIO_PIN(125);
331DECLARE_MSM_GPIO_PIN(126);
332DECLARE_MSM_GPIO_PIN(127);
333DECLARE_MSM_GPIO_PIN(128);
334DECLARE_MSM_GPIO_PIN(129);
335DECLARE_MSM_GPIO_PIN(130);
336DECLARE_MSM_GPIO_PIN(131);
337DECLARE_MSM_GPIO_PIN(132);
338DECLARE_MSM_GPIO_PIN(133);
339DECLARE_MSM_GPIO_PIN(134);
340DECLARE_MSM_GPIO_PIN(135);
341DECLARE_MSM_GPIO_PIN(136);
342DECLARE_MSM_GPIO_PIN(137);
343DECLARE_MSM_GPIO_PIN(138);
344DECLARE_MSM_GPIO_PIN(139);
345DECLARE_MSM_GPIO_PIN(140);
346DECLARE_MSM_GPIO_PIN(141);
347DECLARE_MSM_GPIO_PIN(142);
348DECLARE_MSM_GPIO_PIN(143);
349DECLARE_MSM_GPIO_PIN(144);
350DECLARE_MSM_GPIO_PIN(145);
351DECLARE_MSM_GPIO_PIN(146);
352DECLARE_MSM_GPIO_PIN(147);
353DECLARE_MSM_GPIO_PIN(148);
354DECLARE_MSM_GPIO_PIN(149);
355DECLARE_MSM_GPIO_PIN(150);
356DECLARE_MSM_GPIO_PIN(151);
357DECLARE_MSM_GPIO_PIN(152);
358DECLARE_MSM_GPIO_PIN(153);
359DECLARE_MSM_GPIO_PIN(154);
360DECLARE_MSM_GPIO_PIN(155);
361DECLARE_MSM_GPIO_PIN(156);
362DECLARE_MSM_GPIO_PIN(157);
363DECLARE_MSM_GPIO_PIN(158);
364DECLARE_MSM_GPIO_PIN(159);
365DECLARE_MSM_GPIO_PIN(160);
366DECLARE_MSM_GPIO_PIN(161);
367DECLARE_MSM_GPIO_PIN(162);
368DECLARE_MSM_GPIO_PIN(163);
369DECLARE_MSM_GPIO_PIN(164);
370DECLARE_MSM_GPIO_PIN(165);
371DECLARE_MSM_GPIO_PIN(166);
372DECLARE_MSM_GPIO_PIN(167);
373DECLARE_MSM_GPIO_PIN(168);
374DECLARE_MSM_GPIO_PIN(169);
375DECLARE_MSM_GPIO_PIN(170);
376DECLARE_MSM_GPIO_PIN(171);
377DECLARE_MSM_GPIO_PIN(172);
378
379static const unsigned int sdc4_clk_pins[] = { 173 };
380static const unsigned int sdc4_cmd_pins[] = { 174 };
381static const unsigned int sdc4_data_pins[] = { 175 };
382static const unsigned int sdc3_clk_pins[] = { 176 };
383static const unsigned int sdc3_cmd_pins[] = { 177 };
384static const unsigned int sdc3_data_pins[] = { 178 };
385
386#define FUNCTION(fname) \
387 [MSM_MUX_##fname] = { \
388 .name = #fname, \
389 .groups = fname##_groups, \
390 .ngroups = ARRAY_SIZE(fname##_groups), \
391 }
392
393#define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7) \
394 { \
395 .name = "gpio" #id, \
396 .pins = gpio##id##_pins, \
397 .npins = ARRAY_SIZE(gpio##id##_pins), \
398 .funcs = (int[]){ \
399 MSM_MUX_gpio, \
400 MSM_MUX_##f1, \
401 MSM_MUX_##f2, \
402 MSM_MUX_##f3, \
403 MSM_MUX_##f4, \
404 MSM_MUX_##f5, \
405 MSM_MUX_##f6, \
406 MSM_MUX_##f7, \
407 }, \
408 .nfuncs = 8, \
409 .ctl_reg = 0x1000 + 0x10 * id, \
410 .io_reg = 0x1004 + 0x10 * id, \
411 .intr_cfg_reg = 0x1008 + 0x10 * id, \
412 .intr_status_reg = 0x100c + 0x10 * id, \
413 .intr_target_reg = 0x400 + 0x4 * id, \
414 .mux_bit = 2, \
415 .pull_bit = 0, \
416 .drv_bit = 6, \
417 .oe_bit = 9, \
418 .in_bit = 0, \
419 .out_bit = 1, \
420 .intr_enable_bit = 0, \
421 .intr_status_bit = 0, \
422 .intr_ack_high = 1, \
423 .intr_target_bit = 0, \
424 .intr_target_kpss_val = 4, \
425 .intr_raw_status_bit = 3, \
426 .intr_polarity_bit = 1, \
427 .intr_detection_bit = 2, \
428 .intr_detection_width = 1, \
429 }
430
431#define SDC_PINGROUP(pg_name, ctl, pull, drv) \
432 { \
433 .name = #pg_name, \
434 .pins = pg_name##_pins, \
435 .npins = ARRAY_SIZE(pg_name##_pins), \
436 .ctl_reg = ctl, \
437 .io_reg = 0, \
438 .intr_cfg_reg = 0, \
439 .intr_status_reg = 0, \
440 .intr_target_reg = 0, \
441 .mux_bit = -1, \
442 .pull_bit = pull, \
443 .drv_bit = drv, \
444 .oe_bit = -1, \
445 .in_bit = -1, \
446 .out_bit = -1, \
447 .intr_enable_bit = -1, \
448 .intr_status_bit = -1, \
449 .intr_target_bit = -1, \
450 .intr_target_kpss_val = -1, \
451 .intr_raw_status_bit = -1, \
452 .intr_polarity_bit = -1, \
453 .intr_detection_bit = -1, \
454 .intr_detection_width = -1, \
455 }
456
457enum msm8660_functions {
458 MSM_MUX_gpio,
459 MSM_MUX_cam_mclk,
460 MSM_MUX_dsub,
461 MSM_MUX_ext_gps,
462 MSM_MUX_gp_clk_0a,
463 MSM_MUX_gp_clk_0b,
464 MSM_MUX_gp_clk_1a,
465 MSM_MUX_gp_clk_1b,
466 MSM_MUX_gp_clk_2a,
467 MSM_MUX_gp_clk_2b,
468 MSM_MUX_gp_mn,
469 MSM_MUX_gsbi1,
470 MSM_MUX_gsbi1_spi_cs1_n,
471 MSM_MUX_gsbi1_spi_cs2a_n,
472 MSM_MUX_gsbi1_spi_cs2b_n,
473 MSM_MUX_gsbi1_spi_cs3_n,
474 MSM_MUX_gsbi2,
475 MSM_MUX_gsbi2_spi_cs1_n,
476 MSM_MUX_gsbi2_spi_cs2_n,
477 MSM_MUX_gsbi2_spi_cs3_n,
478 MSM_MUX_gsbi3,
479 MSM_MUX_gsbi3_spi_cs1_n,
480 MSM_MUX_gsbi3_spi_cs2_n,
481 MSM_MUX_gsbi3_spi_cs3_n,
482 MSM_MUX_gsbi4,
483 MSM_MUX_gsbi5,
484 MSM_MUX_gsbi6,
485 MSM_MUX_gsbi7,
486 MSM_MUX_gsbi8,
487 MSM_MUX_gsbi9,
488 MSM_MUX_gsbi10,
489 MSM_MUX_gsbi11,
490 MSM_MUX_gsbi12,
491 MSM_MUX_hdmi,
492 MSM_MUX_i2s,
493 MSM_MUX_lcdc,
494 MSM_MUX_mdp_vsync,
495 MSM_MUX_mi2s,
496 MSM_MUX_pcm,
497 MSM_MUX_ps_hold,
498 MSM_MUX_sdc1,
499 MSM_MUX_sdc2,
500 MSM_MUX_sdc5,
501 MSM_MUX_tsif1,
502 MSM_MUX_tsif2,
503 MSM_MUX_usb_fs1,
504 MSM_MUX_usb_fs1_oe_n,
505 MSM_MUX_usb_fs2,
506 MSM_MUX_usb_fs2_oe_n,
507 MSM_MUX_vfe,
508 MSM_MUX_vsens_alarm,
509 MSM_MUX__,
510};
511
512static const char * const gpio_groups[] = {
513 "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
514 "gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
515 "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
516 "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
517 "gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
518 "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
519 "gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
520 "gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56",
521 "gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
522 "gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70",
523 "gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77",
524 "gpio78", "gpio79", "gpio80", "gpio81", "gpio82", "gpio83", "gpio84",
525 "gpio85", "gpio86", "gpio87", "gpio88", "gpio89", "gpio90", "gpio91",
526 "gpio92", "gpio93", "gpio94", "gpio95", "gpio96", "gpio97", "gpio98",
527 "gpio99", "gpio100", "gpio101", "gpio102", "gpio103", "gpio104",
528 "gpio105", "gpio106", "gpio107", "gpio108", "gpio109", "gpio110",
529 "gpio111", "gpio112", "gpio113", "gpio114", "gpio115", "gpio116",
530 "gpio117", "gpio118", "gpio119", "gpio120", "gpio121", "gpio122",
531 "gpio123", "gpio124", "gpio125", "gpio126", "gpio127", "gpio128",
532 "gpio129", "gpio130", "gpio131", "gpio132", "gpio133", "gpio134",
533 "gpio135", "gpio136", "gpio137", "gpio138", "gpio139", "gpio140",
534 "gpio141", "gpio142", "gpio143", "gpio144", "gpio145", "gpio146",
535 "gpio147", "gpio148", "gpio149", "gpio150", "gpio151", "gpio152",
536 "gpio153", "gpio154", "gpio155", "gpio156", "gpio157", "gpio158",
537 "gpio159", "gpio160", "gpio161", "gpio162", "gpio163", "gpio164",
538 "gpio165", "gpio166", "gpio167", "gpio168", "gpio169", "gpio170",
539 "gpio171", "gpio172"
540};
541
542static const char * const cam_mclk_groups[] = {
543 "gpio32"
544};
545static const char * const dsub_groups[] = {
546 "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
547 "gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
548 "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
549 "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27"
550};
551static const char * const ext_gps_groups[] = {
552 "gpio66", "gpio67", "gpio68", "gpio69"
553};
554static const char * const gp_clk_0a_groups[] = {
555 "gpio30"
556};
557static const char * const gp_clk_0b_groups[] = {
558 "gpio115"
559};
560static const char * const gp_clk_1a_groups[] = {
561 "gpio31"
562};
563static const char * const gp_clk_1b_groups[] = {
564 "gpio122"
565};
566static const char * const gp_clk_2a_groups[] = {
567 "gpio103"
568};
569static const char * const gp_clk_2b_groups[] = {
570 "gpio70"
571};
572static const char * const gp_mn_groups[] = {
573 "gpio29"
574};
575static const char * const gsbi1_groups[] = {
576 "gpio33", "gpio34", "gpio35", "gpio36"
577};
578static const char * const gsbi1_spi_cs1_n_groups[] = {
579};
580static const char * const gsbi1_spi_cs2a_n_groups[] = {
581};
582static const char * const gsbi1_spi_cs2b_n_groups[] = {
583};
584static const char * const gsbi1_spi_cs3_n_groups[] = {
585};
586static const char * const gsbi2_groups[] = {
587 "gpio37", "gpio38", "gpio39", "gpio40"
588};
589static const char * const gsbi2_spi_cs1_n_groups[] = {
590 "gpio123"
591};
592static const char * const gsbi2_spi_cs2_n_groups[] = {
593 "gpio124"
594};
595static const char * const gsbi2_spi_cs3_n_groups[] = {
596 "gpio125"
597};
598static const char * const gsbi3_groups[] = {
599 "gpio41", "gpio42", "gpio43", "gpio44"
600};
601static const char * const gsbi3_spi_cs1_n_groups[] = {
602 "gpio62"
603};
604static const char * const gsbi3_spi_cs2_n_groups[] = {
605 "gpio45"
606};
607static const char * const gsbi3_spi_cs3_n_groups[] = {
608 "gpio46"
609};
610static const char * const gsbi4_groups[] = {
611 "gpio45", "gpio56", "gpio47", "gpio48"
612};
613static const char * const gsbi5_groups[] = {
614 "gpio49", "gpio50", "gpio51", "gpio52"
615};
616static const char * const gsbi6_groups[] = {
617 "gpio53", "gpio54", "gpio55", "gpio56"
618};
619static const char * const gsbi7_groups[] = {
620 "gpio57", "gpio58", "gpio59", "gpio60"
621};
622static const char * const gsbi8_groups[] = {
623 "gpio62", "gpio63", "gpio64", "gpio65"
624};
625static const char * const gsbi9_groups[] = {
626 "gpio66", "gpio67", "gpio68", "gpio69"
627};
628static const char * const gsbi10_groups[] = {
629 "gpio70", "gpio71", "gpio72", "gpio73"
630};
631static const char * const gsbi11_groups[] = {
632 "gpio103", "gpio104", "gpio105", "gpio106"
633};
634static const char * const gsbi12_groups[] = {
635 "gpio115", "gpio116", "gpio117", "gpio118"
636};
637static const char * const hdmi_groups[] = {
638 "gpio169", "gpio170", "gpio171", "gpio172"
639};
640static const char * const i2s_groups[] = {
641 "gpio108", "gpio109", "gpio110", "gpio115", "gpio116", "gpio117",
642 "gpio118", "gpio119", "gpio120", "gpio121", "gpio122"
643};
644static const char * const lcdc_groups[] = {
645 "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
646 "gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
647 "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
648 "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27"
649};
650static const char * const mdp_vsync_groups[] = {
651 "gpio28", "gpio39", "gpio41"
652};
653static const char * const mi2s_groups[] = {
654 "gpio101", "gpio102", "gpio103", "gpio104", "gpio105", "gpio106",
655 "gpio107"
656};
657static const char * const pcm_groups[] = {
658 "gpio111", "gpio112", "gpio113", "gpio114"
659};
660static const char * const ps_hold_groups[] = {
661 "gpio92"
662};
663static const char * const sdc1_groups[] = {
664 "gpio159", "gpio160", "gpio161", "gpio162", "gpio163", "gpio164",
665 "gpio165", "gpio166", "gpio167", "gpio168"
666};
667static const char * const sdc2_groups[] = {
668 "gpio143", "gpio144", "gpio145", "gpio146", "gpio147", "gpio148",
669 "gpio149", "gpio150", "gpio151", "gpio152"
670};
671static const char * const sdc5_groups[] = {
672 "gpio95", "gpio96", "gpio97", "gpio98", "gpio99", "gpio100"
673};
674static const char * const tsif1_groups[] = {
675 "gpio93", "gpio94", "gpio95", "gpio96"
676};
677static const char * const tsif2_groups[] = {
678 "gpio97", "gpio98", "gpio99", "gpio100"
679};
680static const char * const usb_fs1_groups[] = {
681 "gpio49", "gpio50", "gpio51"
682};
683static const char * const usb_fs1_oe_n_groups[] = {
684 "gpio51"
685};
686static const char * const usb_fs2_groups[] = {
687 "gpio71", "gpio72", "gpio73"
688};
689static const char * const usb_fs2_oe_n_groups[] = {
690 "gpio73"
691};
692static const char * const vfe_groups[] = {
693 "gpio29", "gpio30", "gpio31", "gpio42", "gpio46", "gpio105", "gpio106",
694 "gpio117"
695};
696static const char * const vsens_alarm_groups[] = {
697 "gpio127"
698};
699
700static const struct msm_function msm8660_functions[] = {
701 FUNCTION(gpio),
702 FUNCTION(cam_mclk),
703 FUNCTION(dsub),
704 FUNCTION(ext_gps),
705 FUNCTION(gp_clk_0a),
706 FUNCTION(gp_clk_0b),
707 FUNCTION(gp_clk_1a),
708 FUNCTION(gp_clk_1b),
709 FUNCTION(gp_clk_2a),
710 FUNCTION(gp_clk_2b),
711 FUNCTION(gp_mn),
712 FUNCTION(gsbi1),
713 FUNCTION(gsbi1_spi_cs1_n),
714 FUNCTION(gsbi1_spi_cs2a_n),
715 FUNCTION(gsbi1_spi_cs2b_n),
716 FUNCTION(gsbi1_spi_cs3_n),
717 FUNCTION(gsbi2),
718 FUNCTION(gsbi2_spi_cs1_n),
719 FUNCTION(gsbi2_spi_cs2_n),
720 FUNCTION(gsbi2_spi_cs3_n),
721 FUNCTION(gsbi3),
722 FUNCTION(gsbi3_spi_cs1_n),
723 FUNCTION(gsbi3_spi_cs2_n),
724 FUNCTION(gsbi3_spi_cs3_n),
725 FUNCTION(gsbi4),
726 FUNCTION(gsbi5),
727 FUNCTION(gsbi6),
728 FUNCTION(gsbi7),
729 FUNCTION(gsbi8),
730 FUNCTION(gsbi9),
731 FUNCTION(gsbi10),
732 FUNCTION(gsbi11),
733 FUNCTION(gsbi12),
734 FUNCTION(hdmi),
735 FUNCTION(i2s),
736 FUNCTION(lcdc),
737 FUNCTION(mdp_vsync),
738 FUNCTION(mi2s),
739 FUNCTION(pcm),
740 FUNCTION(ps_hold),
741 FUNCTION(sdc1),
742 FUNCTION(sdc2),
743 FUNCTION(sdc5),
744 FUNCTION(tsif1),
745 FUNCTION(tsif2),
746 FUNCTION(usb_fs1),
747 FUNCTION(usb_fs1_oe_n),
748 FUNCTION(usb_fs2),
749 FUNCTION(usb_fs2_oe_n),
750 FUNCTION(vfe),
751 FUNCTION(vsens_alarm),
752};
753
754static const struct msm_pingroup msm8660_groups[] = {
755 PINGROUP(0, lcdc, dsub, _, _, _, _, _),
756 PINGROUP(1, lcdc, dsub, _, _, _, _, _),
757 PINGROUP(2, lcdc, dsub, _, _, _, _, _),
758 PINGROUP(3, lcdc, dsub, _, _, _, _, _),
759 PINGROUP(4, lcdc, dsub, _, _, _, _, _),
760 PINGROUP(5, lcdc, dsub, _, _, _, _, _),
761 PINGROUP(6, lcdc, dsub, _, _, _, _, _),
762 PINGROUP(7, lcdc, dsub, _, _, _, _, _),
763 PINGROUP(8, lcdc, dsub, _, _, _, _, _),
764 PINGROUP(9, lcdc, dsub, _, _, _, _, _),
765 PINGROUP(10, lcdc, dsub, _, _, _, _, _),
766 PINGROUP(11, lcdc, dsub, _, _, _, _, _),
767 PINGROUP(12, lcdc, dsub, _, _, _, _, _),
768 PINGROUP(13, lcdc, dsub, _, _, _, _, _),
769 PINGROUP(14, lcdc, dsub, _, _, _, _, _),
770 PINGROUP(15, lcdc, dsub, _, _, _, _, _),
771 PINGROUP(16, lcdc, dsub, _, _, _, _, _),
772 PINGROUP(17, lcdc, dsub, _, _, _, _, _),
773 PINGROUP(18, lcdc, dsub, _, _, _, _, _),
774 PINGROUP(19, lcdc, dsub, _, _, _, _, _),
775 PINGROUP(20, lcdc, dsub, _, _, _, _, _),
776 PINGROUP(21, lcdc, dsub, _, _, _, _, _),
777 PINGROUP(22, lcdc, dsub, _, _, _, _, _),
778 PINGROUP(23, lcdc, dsub, _, _, _, _, _),
779 PINGROUP(24, lcdc, dsub, _, _, _, _, _),
780 PINGROUP(25, lcdc, dsub, _, _, _, _, _),
781 PINGROUP(26, lcdc, dsub, _, _, _, _, _),
782 PINGROUP(27, lcdc, dsub, _, _, _, _, _),
783 PINGROUP(28, mdp_vsync, _, _, _, _, _, _),
784 PINGROUP(29, vfe, gp_mn, _, _, _, _, _),
785 PINGROUP(30, vfe, gp_clk_0a, _, _, _, _, _),
786 PINGROUP(31, vfe, gp_clk_1a, _, _, _, _, _),
787 PINGROUP(32, cam_mclk, _, _, _, _, _, _),
788 PINGROUP(33, gsbi1, _, _, _, _, _, _),
789 PINGROUP(34, gsbi1, _, _, _, _, _, _),
790 PINGROUP(35, gsbi1, _, _, _, _, _, _),
791 PINGROUP(36, gsbi1, _, _, _, _, _, _),
792 PINGROUP(37, gsbi2, _, _, _, _, _, _),
793 PINGROUP(38, gsbi2, _, _, _, _, _, _),
794 PINGROUP(39, gsbi2, _, mdp_vsync, _, _, _, _),
795 PINGROUP(40, gsbi2, _, _, _, _, _, _),
796 PINGROUP(41, gsbi3, mdp_vsync, _, _, _, _, _),
797 PINGROUP(42, gsbi3, vfe, _, _, _, _, _),
798 PINGROUP(43, gsbi3, _, _, _, _, _, _),
799 PINGROUP(44, gsbi3, _, _, _, _, _, _),
800 PINGROUP(45, gsbi4, gsbi3_spi_cs2_n, _, _, _, _, _),
801 PINGROUP(46, gsbi4, gsbi3_spi_cs3_n, vfe, _, _, _, _),
802 PINGROUP(47, gsbi4, _, _, _, _, _, _),
803 PINGROUP(48, gsbi4, _, _, _, _, _, _),
804 PINGROUP(49, gsbi5, usb_fs1, _, _, _, _, _),
805 PINGROUP(50, gsbi5, usb_fs1, _, _, _, _, _),
806 PINGROUP(51, gsbi5, usb_fs1, usb_fs1_oe_n, _, _, _, _),
807 PINGROUP(52, gsbi5, _, _, _, _, _, _),
808 PINGROUP(53, gsbi6, _, _, _, _, _, _),
809 PINGROUP(54, gsbi6, _, _, _, _, _, _),
810 PINGROUP(55, gsbi6, _, _, _, _, _, _),
811 PINGROUP(56, gsbi6, _, _, _, _, _, _),
812 PINGROUP(57, gsbi7, _, _, _, _, _, _),
813 PINGROUP(58, gsbi7, _, _, _, _, _, _),
814 PINGROUP(59, gsbi7, _, _, _, _, _, _),
815 PINGROUP(60, gsbi7, _, _, _, _, _, _),
816 PINGROUP(61, _, _, _, _, _, _, _),
817 PINGROUP(62, gsbi8, gsbi3_spi_cs1_n, gsbi1_spi_cs2a_n, _, _, _, _),
818 PINGROUP(63, gsbi8, gsbi1_spi_cs1_n, _, _, _, _, _),
819 PINGROUP(64, gsbi8, gsbi1_spi_cs2b_n, _, _, _, _, _),
820 PINGROUP(65, gsbi8, gsbi1_spi_cs3_n, _, _, _, _, _),
821 PINGROUP(66, gsbi9, ext_gps, _, _, _, _, _),
822 PINGROUP(67, gsbi9, ext_gps, _, _, _, _, _),
823 PINGROUP(68, gsbi9, ext_gps, _, _, _, _, _),
824 PINGROUP(69, gsbi9, ext_gps, _, _, _, _, _),
825 PINGROUP(70, gsbi10, gp_clk_2b, _, _, _, _, _),
826 PINGROUP(71, gsbi10, usb_fs2, _, _, _, _, _),
827 PINGROUP(72, gsbi10, usb_fs2, _, _, _, _, _),
828 PINGROUP(73, gsbi10, usb_fs2, usb_fs2_oe_n, _, _, _, _),
829 PINGROUP(74, _, _, _, _, _, _, _),
830 PINGROUP(75, _, _, _, _, _, _, _),
831 PINGROUP(76, _, _, _, _, _, _, _),
832 PINGROUP(77, _, _, _, _, _, _, _),
833 PINGROUP(78, _, _, _, _, _, _, _),
834 PINGROUP(79, _, _, _, _, _, _, _),
835 PINGROUP(80, _, _, _, _, _, _, _),
836 PINGROUP(81, _, _, _, _, _, _, _),
837 PINGROUP(82, _, _, _, _, _, _, _),
838 PINGROUP(83, _, _, _, _, _, _, _),
839 PINGROUP(84, _, _, _, _, _, _, _),
840 PINGROUP(85, _, _, _, _, _, _, _),
841 PINGROUP(86, _, _, _, _, _, _, _),
842 PINGROUP(87, _, _, _, _, _, _, _),
843 PINGROUP(88, _, _, _, _, _, _, _),
844 PINGROUP(89, _, _, _, _, _, _, _),
845 PINGROUP(90, _, _, _, _, _, _, _),
846 PINGROUP(91, _, _, _, _, _, _, _),
847 PINGROUP(92, ps_hold, _, _, _, _, _, _),
848 PINGROUP(93, tsif1, _, _, _, _, _, _),
849 PINGROUP(94, tsif1, _, _, _, _, _, _),
850 PINGROUP(95, tsif1, sdc5, _, _, _, _, _),
851 PINGROUP(96, tsif1, sdc5, _, _, _, _, _),
852 PINGROUP(97, tsif2, sdc5, _, _, _, _, _),
853 PINGROUP(98, tsif2, sdc5, _, _, _, _, _),
854 PINGROUP(99, tsif2, sdc5, _, _, _, _, _),
855 PINGROUP(100, tsif2, sdc5, _, _, _, _, _),
856 PINGROUP(101, mi2s, _, _, _, _, _, _),
857 PINGROUP(102, mi2s, _, _, _, _, _, _),
858 PINGROUP(103, mi2s, gsbi11, gp_clk_2a, _, _, _, _),
859 PINGROUP(104, mi2s, gsbi11, _, _, _, _, _),
860 PINGROUP(105, mi2s, gsbi11, vfe, _, _, _, _),
861 PINGROUP(106, mi2s, gsbi11, vfe, _, _, _, _),
862 PINGROUP(107, mi2s, _, _, _, _, _, _),
863 PINGROUP(108, i2s, _, _, _, _, _, _),
864 PINGROUP(109, i2s, _, _, _, _, _, _),
865 PINGROUP(110, i2s, _, _, _, _, _, _),
866 PINGROUP(111, pcm, _, _, _, _, _, _),
867 PINGROUP(112, pcm, _, _, _, _, _, _),
868 PINGROUP(113, pcm, _, _, _, _, _, _),
869 PINGROUP(114, pcm, _, _, _, _, _, _),
870 PINGROUP(115, i2s, gsbi12, gp_clk_0b, _, _, _, _),
871 PINGROUP(116, i2s, gsbi12, _, _, _, _, _),
872 PINGROUP(117, i2s, gsbi12, vfe, _, _, _, _),
873 PINGROUP(118, i2s, gsbi12, _, _, _, _, _),
874 PINGROUP(119, i2s, _, _, _, _, _, _),
875 PINGROUP(120, i2s, _, _, _, _, _, _),
876 PINGROUP(121, i2s, _, _, _, _, _, _),
877 PINGROUP(122, i2s, gp_clk_1b, _, _, _, _, _),
878 PINGROUP(123, _, gsbi2_spi_cs1_n, _, _, _, _, _),
879 PINGROUP(124, _, gsbi2_spi_cs2_n, _, _, _, _, _),
880 PINGROUP(125, _, gsbi2_spi_cs3_n, _, _, _, _, _),
881 PINGROUP(126, _, _, _, _, _, _, _),
882 PINGROUP(127, _, vsens_alarm, _, _, _, _, _),
883 PINGROUP(128, _, _, _, _, _, _, _),
884 PINGROUP(129, _, _, _, _, _, _, _),
885 PINGROUP(130, _, _, _, _, _, _, _),
886 PINGROUP(131, _, _, _, _, _, _, _),
887 PINGROUP(132, _, _, _, _, _, _, _),
888 PINGROUP(133, _, _, _, _, _, _, _),
889 PINGROUP(134, _, _, _, _, _, _, _),
890 PINGROUP(135, _, _, _, _, _, _, _),
891 PINGROUP(136, _, _, _, _, _, _, _),
892 PINGROUP(137, _, _, _, _, _, _, _),
893 PINGROUP(138, _, _, _, _, _, _, _),
894 PINGROUP(139, _, _, _, _, _, _, _),
895 PINGROUP(140, _, _, _, _, _, _, _),
896 PINGROUP(141, _, _, _, _, _, _, _),
897 PINGROUP(142, _, _, _, _, _, _, _),
898 PINGROUP(143, _, sdc2, _, _, _, _, _),
899 PINGROUP(144, _, sdc2, _, _, _, _, _),
900 PINGROUP(145, _, sdc2, _, _, _, _, _),
901 PINGROUP(146, _, sdc2, _, _, _, _, _),
902 PINGROUP(147, _, sdc2, _, _, _, _, _),
903 PINGROUP(148, _, sdc2, _, _, _, _, _),
904 PINGROUP(149, _, sdc2, _, _, _, _, _),
905 PINGROUP(150, _, sdc2, _, _, _, _, _),
906 PINGROUP(151, _, sdc2, _, _, _, _, _),
907 PINGROUP(152, _, sdc2, _, _, _, _, _),
908 PINGROUP(153, _, _, _, _, _, _, _),
909 PINGROUP(154, _, _, _, _, _, _, _),
910 PINGROUP(155, _, _, _, _, _, _, _),
911 PINGROUP(156, _, _, _, _, _, _, _),
912 PINGROUP(157, _, _, _, _, _, _, _),
913 PINGROUP(158, _, _, _, _, _, _, _),
914 PINGROUP(159, sdc1, _, _, _, _, _, _),
915 PINGROUP(160, sdc1, _, _, _, _, _, _),
916 PINGROUP(161, sdc1, _, _, _, _, _, _),
917 PINGROUP(162, sdc1, _, _, _, _, _, _),
918 PINGROUP(163, sdc1, _, _, _, _, _, _),
919 PINGROUP(164, sdc1, _, _, _, _, _, _),
920 PINGROUP(165, sdc1, _, _, _, _, _, _),
921 PINGROUP(166, sdc1, _, _, _, _, _, _),
922 PINGROUP(167, sdc1, _, _, _, _, _, _),
923 PINGROUP(168, sdc1, _, _, _, _, _, _),
924 PINGROUP(169, hdmi, _, _, _, _, _, _),
925 PINGROUP(170, hdmi, _, _, _, _, _, _),
926 PINGROUP(171, hdmi, _, _, _, _, _, _),
927 PINGROUP(172, hdmi, _, _, _, _, _, _),
928
929 SDC_PINGROUP(sdc4_clk, 0x20a0, -1, 6),
930 SDC_PINGROUP(sdc4_cmd, 0x20a0, 11, 3),
931 SDC_PINGROUP(sdc4_data, 0x20a0, 9, 0),
932
933 SDC_PINGROUP(sdc3_clk, 0x20a4, -1, 6),
934 SDC_PINGROUP(sdc3_cmd, 0x20a4, 11, 3),
935 SDC_PINGROUP(sdc3_data, 0x20a4, 9, 0),
936};
937
938#define NUM_GPIO_PINGROUPS 173
939
940static const struct msm_pinctrl_soc_data msm8660_pinctrl = {
941 .pins = msm8660_pins,
942 .npins = ARRAY_SIZE(msm8660_pins),
943 .functions = msm8660_functions,
944 .nfunctions = ARRAY_SIZE(msm8660_functions),
945 .groups = msm8660_groups,
946 .ngroups = ARRAY_SIZE(msm8660_groups),
947 .ngpios = NUM_GPIO_PINGROUPS,
948};
949
950static int msm8660_pinctrl_probe(struct platform_device *pdev)
951{
952 return msm_pinctrl_probe(pdev, &msm8660_pinctrl);
953}
954
955static const struct of_device_id msm8660_pinctrl_of_match[] = {
956 { .compatible = "qcom,msm8660-pinctrl", },
957 { },
958};
959
960static struct platform_driver msm8660_pinctrl_driver = {
961 .driver = {
962 .name = "msm8660-pinctrl",
963 .of_match_table = msm8660_pinctrl_of_match,
964 },
965 .probe = msm8660_pinctrl_probe,
966 .remove = msm_pinctrl_remove,
967};
968
969static int __init msm8660_pinctrl_init(void)
970{
971 return platform_driver_register(&msm8660_pinctrl_driver);
972}
973arch_initcall(msm8660_pinctrl_init);
974
975static void __exit msm8660_pinctrl_exit(void)
976{
977 platform_driver_unregister(&msm8660_pinctrl_driver);
978}
979module_exit(msm8660_pinctrl_exit);
980
981MODULE_AUTHOR("Bjorn Andersson <bjorn.andersson@sonymobile.com>");
982MODULE_DESCRIPTION("Qualcomm MSM8660 pinctrl driver");
983MODULE_LICENSE("GPL v2");
984MODULE_DEVICE_TABLE(of, msm8660_pinctrl_of_match);
diff --git a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
index ae4115e4b4ef..bd1e24598e12 100644
--- a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
+++ b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
@@ -778,8 +778,8 @@ static int pmic_gpio_probe(struct platform_device *pdev)
778 state->chip.can_sleep = false; 778 state->chip.can_sleep = false;
779 779
780 state->ctrl = pinctrl_register(pctrldesc, dev, state); 780 state->ctrl = pinctrl_register(pctrldesc, dev, state);
781 if (!state->ctrl) 781 if (IS_ERR(state->ctrl))
782 return -ENODEV; 782 return PTR_ERR(state->ctrl);
783 783
784 ret = gpiochip_add(&state->chip); 784 ret = gpiochip_add(&state->chip);
785 if (ret) { 785 if (ret) {
diff --git a/drivers/pinctrl/qcom/pinctrl-spmi-mpp.c b/drivers/pinctrl/qcom/pinctrl-spmi-mpp.c
index 211b942ad6d5..3121de9b6331 100644
--- a/drivers/pinctrl/qcom/pinctrl-spmi-mpp.c
+++ b/drivers/pinctrl/qcom/pinctrl-spmi-mpp.c
@@ -892,8 +892,8 @@ static int pmic_mpp_probe(struct platform_device *pdev)
892 state->chip.can_sleep = false; 892 state->chip.can_sleep = false;
893 893
894 state->ctrl = pinctrl_register(pctrldesc, dev, state); 894 state->ctrl = pinctrl_register(pctrldesc, dev, state);
895 if (!state->ctrl) 895 if (IS_ERR(state->ctrl))
896 return -ENODEV; 896 return PTR_ERR(state->ctrl);
897 897
898 ret = gpiochip_add(&state->chip); 898 ret = gpiochip_add(&state->chip);
899 if (ret) { 899 if (ret) {
diff --git a/drivers/pinctrl/samsung/pinctrl-exynos5440.c b/drivers/pinctrl/samsung/pinctrl-exynos5440.c
index 86192be3b679..f5619fb50447 100644
--- a/drivers/pinctrl/samsung/pinctrl-exynos5440.c
+++ b/drivers/pinctrl/samsung/pinctrl-exynos5440.c
@@ -822,9 +822,9 @@ static int exynos5440_pinctrl_register(struct platform_device *pdev,
822 return ret; 822 return ret;
823 823
824 pctl_dev = pinctrl_register(ctrldesc, &pdev->dev, priv); 824 pctl_dev = pinctrl_register(ctrldesc, &pdev->dev, priv);
825 if (!pctl_dev) { 825 if (IS_ERR(pctl_dev)) {
826 dev_err(&pdev->dev, "could not register pinctrl driver\n"); 826 dev_err(&pdev->dev, "could not register pinctrl driver\n");
827 return -EINVAL; 827 return PTR_ERR(pctl_dev);
828 } 828 }
829 829
830 grange.name = "exynos5440-pctrl-gpio-range"; 830 grange.name = "exynos5440-pctrl-gpio-range";
diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.c b/drivers/pinctrl/samsung/pinctrl-samsung.c
index ed165ba2eb2f..3dd5a3b2ac62 100644
--- a/drivers/pinctrl/samsung/pinctrl-samsung.c
+++ b/drivers/pinctrl/samsung/pinctrl-samsung.c
@@ -806,7 +806,7 @@ static int samsung_pinctrl_parse_dt(struct platform_device *pdev,
806 functions = samsung_pinctrl_create_functions(dev, drvdata, &func_cnt); 806 functions = samsung_pinctrl_create_functions(dev, drvdata, &func_cnt);
807 if (IS_ERR(functions)) { 807 if (IS_ERR(functions)) {
808 dev_err(dev, "failed to parse pin functions\n"); 808 dev_err(dev, "failed to parse pin functions\n");
809 return PTR_ERR(groups); 809 return PTR_ERR(functions);
810 } 810 }
811 811
812 drvdata->pin_groups = groups; 812 drvdata->pin_groups = groups;
@@ -873,9 +873,9 @@ static int samsung_pinctrl_register(struct platform_device *pdev,
873 return ret; 873 return ret;
874 874
875 drvdata->pctl_dev = pinctrl_register(ctrldesc, &pdev->dev, drvdata); 875 drvdata->pctl_dev = pinctrl_register(ctrldesc, &pdev->dev, drvdata);
876 if (!drvdata->pctl_dev) { 876 if (IS_ERR(drvdata->pctl_dev)) {
877 dev_err(&pdev->dev, "could not register pinctrl driver\n"); 877 dev_err(&pdev->dev, "could not register pinctrl driver\n");
878 return -EINVAL; 878 return PTR_ERR(drvdata->pctl_dev);
879 } 879 }
880 880
881 for (bank = 0; bank < drvdata->nr_banks; ++bank) { 881 for (bank = 0; bank < drvdata->nr_banks; ++bank) {
diff --git a/drivers/pinctrl/sh-pfc/Kconfig b/drivers/pinctrl/sh-pfc/Kconfig
index 8c4b3d391823..8e024c9c9115 100644
--- a/drivers/pinctrl/sh-pfc/Kconfig
+++ b/drivers/pinctrl/sh-pfc/Kconfig
@@ -55,6 +55,16 @@ config PINCTRL_PFC_R8A7791
55 depends on ARCH_R8A7791 55 depends on ARCH_R8A7791
56 select PINCTRL_SH_PFC 56 select PINCTRL_SH_PFC
57 57
58config PINCTRL_PFC_R8A7793
59 def_bool y
60 depends on ARCH_R8A7793
61 select PINCTRL_SH_PFC
62
63config PINCTRL_PFC_R8A7794
64 def_bool y
65 depends on ARCH_R8A7794
66 select PINCTRL_SH_PFC
67
58config PINCTRL_PFC_SH7203 68config PINCTRL_PFC_SH7203
59 def_bool y 69 def_bool y
60 depends on CPU_SUBTYPE_SH7203 70 depends on CPU_SUBTYPE_SH7203
diff --git a/drivers/pinctrl/sh-pfc/Makefile b/drivers/pinctrl/sh-pfc/Makefile
index f4074e166bcf..ea2a60ef122a 100644
--- a/drivers/pinctrl/sh-pfc/Makefile
+++ b/drivers/pinctrl/sh-pfc/Makefile
@@ -10,6 +10,8 @@ obj-$(CONFIG_PINCTRL_PFC_R8A7778) += pfc-r8a7778.o
10obj-$(CONFIG_PINCTRL_PFC_R8A7779) += pfc-r8a7779.o 10obj-$(CONFIG_PINCTRL_PFC_R8A7779) += pfc-r8a7779.o
11obj-$(CONFIG_PINCTRL_PFC_R8A7790) += pfc-r8a7790.o 11obj-$(CONFIG_PINCTRL_PFC_R8A7790) += pfc-r8a7790.o
12obj-$(CONFIG_PINCTRL_PFC_R8A7791) += pfc-r8a7791.o 12obj-$(CONFIG_PINCTRL_PFC_R8A7791) += pfc-r8a7791.o
13obj-$(CONFIG_PINCTRL_PFC_R8A7793) += pfc-r8a7791.o
14obj-$(CONFIG_PINCTRL_PFC_R8A7794) += pfc-r8a7794.o
13obj-$(CONFIG_PINCTRL_PFC_SH7203) += pfc-sh7203.o 15obj-$(CONFIG_PINCTRL_PFC_SH7203) += pfc-sh7203.o
14obj-$(CONFIG_PINCTRL_PFC_SH7264) += pfc-sh7264.o 16obj-$(CONFIG_PINCTRL_PFC_SH7264) += pfc-sh7264.o
15obj-$(CONFIG_PINCTRL_PFC_SH7269) += pfc-sh7269.o 17obj-$(CONFIG_PINCTRL_PFC_SH7269) += pfc-sh7269.o
diff --git a/drivers/pinctrl/sh-pfc/core.c b/drivers/pinctrl/sh-pfc/core.c
index 7b2c9495c383..865d235612c5 100644
--- a/drivers/pinctrl/sh-pfc/core.c
+++ b/drivers/pinctrl/sh-pfc/core.c
@@ -481,6 +481,18 @@ static const struct of_device_id sh_pfc_of_table[] = {
481 .data = &r8a7791_pinmux_info, 481 .data = &r8a7791_pinmux_info,
482 }, 482 },
483#endif 483#endif
484#ifdef CONFIG_PINCTRL_PFC_R8A7793
485 {
486 .compatible = "renesas,pfc-r8a7793",
487 .data = &r8a7793_pinmux_info,
488 },
489#endif
490#ifdef CONFIG_PINCTRL_PFC_R8A7794
491 {
492 .compatible = "renesas,pfc-r8a7794",
493 .data = &r8a7794_pinmux_info,
494 },
495#endif
484#ifdef CONFIG_PINCTRL_PFC_SH73A0 496#ifdef CONFIG_PINCTRL_PFC_SH73A0
485 { 497 {
486 .compatible = "renesas,pfc-sh73a0", 498 .compatible = "renesas,pfc-sh73a0",
@@ -579,9 +591,6 @@ static int sh_pfc_remove(struct platform_device *pdev)
579} 591}
580 592
581static const struct platform_device_id sh_pfc_id_table[] = { 593static const struct platform_device_id sh_pfc_id_table[] = {
582#ifdef CONFIG_PINCTRL_PFC_R8A73A4
583 { "pfc-r8a73a4", (kernel_ulong_t)&r8a73a4_pinmux_info },
584#endif
585#ifdef CONFIG_PINCTRL_PFC_R8A7740 594#ifdef CONFIG_PINCTRL_PFC_R8A7740
586 { "pfc-r8a7740", (kernel_ulong_t)&r8a7740_pinmux_info }, 595 { "pfc-r8a7740", (kernel_ulong_t)&r8a7740_pinmux_info },
587#endif 596#endif
diff --git a/drivers/pinctrl/sh-pfc/core.h b/drivers/pinctrl/sh-pfc/core.h
index 6dc8a6fc2746..4c3c37bf7161 100644
--- a/drivers/pinctrl/sh-pfc/core.h
+++ b/drivers/pinctrl/sh-pfc/core.h
@@ -71,6 +71,8 @@ extern const struct sh_pfc_soc_info r8a7778_pinmux_info;
71extern const struct sh_pfc_soc_info r8a7779_pinmux_info; 71extern const struct sh_pfc_soc_info r8a7779_pinmux_info;
72extern const struct sh_pfc_soc_info r8a7790_pinmux_info; 72extern const struct sh_pfc_soc_info r8a7790_pinmux_info;
73extern const struct sh_pfc_soc_info r8a7791_pinmux_info; 73extern const struct sh_pfc_soc_info r8a7791_pinmux_info;
74extern const struct sh_pfc_soc_info r8a7793_pinmux_info;
75extern const struct sh_pfc_soc_info r8a7794_pinmux_info;
74extern const struct sh_pfc_soc_info sh7203_pinmux_info; 76extern const struct sh_pfc_soc_info sh7203_pinmux_info;
75extern const struct sh_pfc_soc_info sh7264_pinmux_info; 77extern const struct sh_pfc_soc_info sh7264_pinmux_info;
76extern const struct sh_pfc_soc_info sh7269_pinmux_info; 78extern const struct sh_pfc_soc_info sh7269_pinmux_info;
diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a73a4.c b/drivers/pinctrl/sh-pfc/pfc-r8a73a4.c
index 280a56f97786..ba18d2e65e67 100644
--- a/drivers/pinctrl/sh-pfc/pfc-r8a73a4.c
+++ b/drivers/pinctrl/sh-pfc/pfc-r8a73a4.c
@@ -21,10 +21,6 @@
21#include <linux/kernel.h> 21#include <linux/kernel.h>
22#include <linux/pinctrl/pinconf-generic.h> 22#include <linux/pinctrl/pinconf-generic.h>
23 23
24#ifndef CONFIG_ARCH_MULTIPLATFORM
25#include <mach/irqs.h>
26#endif
27
28#include "core.h" 24#include "core.h"
29#include "sh_pfc.h" 25#include "sh_pfc.h"
30 26
diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7740.c b/drivers/pinctrl/sh-pfc/pfc-r8a7740.c
index b486e9d20cc2..d0bb1459783a 100644
--- a/drivers/pinctrl/sh-pfc/pfc-r8a7740.c
+++ b/drivers/pinctrl/sh-pfc/pfc-r8a7740.c
@@ -258,7 +258,7 @@ enum {
258 /* SCIFA7 */ 258 /* SCIFA7 */
259 SCIFA7_TXD_MARK, SCIFA7_RXD_MARK, 259 SCIFA7_TXD_MARK, SCIFA7_RXD_MARK,
260 260
261 /* SCIFAB */ 261 /* SCIFB */
262 SCIFB_SCK_PORT190_MARK, /* MSEL5CR_17_0 */ 262 SCIFB_SCK_PORT190_MARK, /* MSEL5CR_17_0 */
263 SCIFB_RXD_PORT191_MARK, 263 SCIFB_RXD_PORT191_MARK,
264 SCIFB_TXD_PORT192_MARK, 264 SCIFB_TXD_PORT192_MARK,
diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7790.c b/drivers/pinctrl/sh-pfc/pfc-r8a7790.c
index 22a5470889f5..baab81ead9ff 100644
--- a/drivers/pinctrl/sh-pfc/pfc-r8a7790.c
+++ b/drivers/pinctrl/sh-pfc/pfc-r8a7790.c
@@ -2664,6 +2664,61 @@ static const unsigned int msiof3_tx_b_pins[] = {
2664static const unsigned int msiof3_tx_b_mux[] = { 2664static const unsigned int msiof3_tx_b_mux[] = {
2665 MSIOF3_TXD_B_MARK, 2665 MSIOF3_TXD_B_MARK,
2666}; 2666};
2667/* - PWM -------------------------------------------------------------------- */
2668static const unsigned int pwm0_pins[] = {
2669 RCAR_GP_PIN(5, 29),
2670};
2671static const unsigned int pwm0_mux[] = {
2672 PWM0_MARK,
2673};
2674static const unsigned int pwm0_b_pins[] = {
2675 RCAR_GP_PIN(4, 30),
2676};
2677static const unsigned int pwm0_b_mux[] = {
2678 PWM0_B_MARK,
2679};
2680static const unsigned int pwm1_pins[] = {
2681 RCAR_GP_PIN(5, 30),
2682};
2683static const unsigned int pwm1_mux[] = {
2684 PWM1_MARK,
2685};
2686static const unsigned int pwm1_b_pins[] = {
2687 RCAR_GP_PIN(4, 31),
2688};
2689static const unsigned int pwm1_b_mux[] = {
2690 PWM1_B_MARK,
2691};
2692static const unsigned int pwm2_pins[] = {
2693 RCAR_GP_PIN(5, 31),
2694};
2695static const unsigned int pwm2_mux[] = {
2696 PWM2_MARK,
2697};
2698static const unsigned int pwm3_pins[] = {
2699 RCAR_GP_PIN(0, 16),
2700};
2701static const unsigned int pwm3_mux[] = {
2702 PWM3_MARK,
2703};
2704static const unsigned int pwm4_pins[] = {
2705 RCAR_GP_PIN(0, 17),
2706};
2707static const unsigned int pwm4_mux[] = {
2708 PWM4_MARK,
2709};
2710static const unsigned int pwm5_pins[] = {
2711 RCAR_GP_PIN(0, 18),
2712};
2713static const unsigned int pwm5_mux[] = {
2714 PWM5_MARK,
2715};
2716static const unsigned int pwm6_pins[] = {
2717 RCAR_GP_PIN(0, 19),
2718};
2719static const unsigned int pwm6_mux[] = {
2720 PWM6_MARK,
2721};
2667/* - QSPI ------------------------------------------------------------------- */ 2722/* - QSPI ------------------------------------------------------------------- */
2668static const unsigned int qspi_ctrl_pins[] = { 2723static const unsigned int qspi_ctrl_pins[] = {
2669 /* SPCLK, SSL */ 2724 /* SPCLK, SSL */
@@ -4008,6 +4063,15 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
4008 SH_PFC_PIN_GROUP(msiof3_sync_b), 4063 SH_PFC_PIN_GROUP(msiof3_sync_b),
4009 SH_PFC_PIN_GROUP(msiof3_rx_b), 4064 SH_PFC_PIN_GROUP(msiof3_rx_b),
4010 SH_PFC_PIN_GROUP(msiof3_tx_b), 4065 SH_PFC_PIN_GROUP(msiof3_tx_b),
4066 SH_PFC_PIN_GROUP(pwm0),
4067 SH_PFC_PIN_GROUP(pwm0_b),
4068 SH_PFC_PIN_GROUP(pwm1),
4069 SH_PFC_PIN_GROUP(pwm1_b),
4070 SH_PFC_PIN_GROUP(pwm2),
4071 SH_PFC_PIN_GROUP(pwm3),
4072 SH_PFC_PIN_GROUP(pwm4),
4073 SH_PFC_PIN_GROUP(pwm5),
4074 SH_PFC_PIN_GROUP(pwm6),
4011 SH_PFC_PIN_GROUP(qspi_ctrl), 4075 SH_PFC_PIN_GROUP(qspi_ctrl),
4012 SH_PFC_PIN_GROUP(qspi_data2), 4076 SH_PFC_PIN_GROUP(qspi_data2),
4013 SH_PFC_PIN_GROUP(qspi_data4), 4077 SH_PFC_PIN_GROUP(qspi_data4),
@@ -4364,6 +4428,36 @@ static const char * const msiof3_groups[] = {
4364 "msiof3_tx_b", 4428 "msiof3_tx_b",
4365}; 4429};
4366 4430
4431static const char * const pwm0_groups[] = {
4432 "pwm0",
4433 "pwm0_b",
4434};
4435
4436static const char * const pwm1_groups[] = {
4437 "pwm1",
4438 "pwm1_b",
4439};
4440
4441static const char * const pwm2_groups[] = {
4442 "pwm2",
4443};
4444
4445static const char * const pwm3_groups[] = {
4446 "pwm3",
4447};
4448
4449static const char * const pwm4_groups[] = {
4450 "pwm4",
4451};
4452
4453static const char * const pwm5_groups[] = {
4454 "pwm5",
4455};
4456
4457static const char * const pwm6_groups[] = {
4458 "pwm6",
4459};
4460
4367static const char * const qspi_groups[] = { 4461static const char * const qspi_groups[] = {
4368 "qspi_ctrl", 4462 "qspi_ctrl",
4369 "qspi_data2", 4463 "qspi_data2",
@@ -4621,6 +4715,13 @@ static const struct sh_pfc_function pinmux_functions[] = {
4621 SH_PFC_FUNCTION(msiof1), 4715 SH_PFC_FUNCTION(msiof1),
4622 SH_PFC_FUNCTION(msiof2), 4716 SH_PFC_FUNCTION(msiof2),
4623 SH_PFC_FUNCTION(msiof3), 4717 SH_PFC_FUNCTION(msiof3),
4718 SH_PFC_FUNCTION(pwm0),
4719 SH_PFC_FUNCTION(pwm1),
4720 SH_PFC_FUNCTION(pwm2),
4721 SH_PFC_FUNCTION(pwm3),
4722 SH_PFC_FUNCTION(pwm4),
4723 SH_PFC_FUNCTION(pwm5),
4724 SH_PFC_FUNCTION(pwm6),
4624 SH_PFC_FUNCTION(qspi), 4725 SH_PFC_FUNCTION(qspi),
4625 SH_PFC_FUNCTION(scif0), 4726 SH_PFC_FUNCTION(scif0),
4626 SH_PFC_FUNCTION(scif1), 4727 SH_PFC_FUNCTION(scif1),
diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7791.c b/drivers/pinctrl/sh-pfc/pfc-r8a7791.c
index fdd2c8729791..3ddf23ec9f0b 100644
--- a/drivers/pinctrl/sh-pfc/pfc-r8a7791.c
+++ b/drivers/pinctrl/sh-pfc/pfc-r8a7791.c
@@ -2928,6 +2928,79 @@ static const unsigned int msiof2_tx_e_pins[] = {
2928static const unsigned int msiof2_tx_e_mux[] = { 2928static const unsigned int msiof2_tx_e_mux[] = {
2929 MSIOF2_TXD_E_MARK, 2929 MSIOF2_TXD_E_MARK,
2930}; 2930};
2931/* - PWM -------------------------------------------------------------------- */
2932static const unsigned int pwm0_pins[] = {
2933 RCAR_GP_PIN(6, 14),
2934};
2935static const unsigned int pwm0_mux[] = {
2936 PWM0_MARK,
2937};
2938static const unsigned int pwm0_b_pins[] = {
2939 RCAR_GP_PIN(5, 30),
2940};
2941static const unsigned int pwm0_b_mux[] = {
2942 PWM0_B_MARK,
2943};
2944static const unsigned int pwm1_pins[] = {
2945 RCAR_GP_PIN(1, 17),
2946};
2947static const unsigned int pwm1_mux[] = {
2948 PWM1_MARK,
2949};
2950static const unsigned int pwm1_b_pins[] = {
2951 RCAR_GP_PIN(6, 15),
2952};
2953static const unsigned int pwm1_b_mux[] = {
2954 PWM1_B_MARK,
2955};
2956static const unsigned int pwm2_pins[] = {
2957 RCAR_GP_PIN(1, 18),
2958};
2959static const unsigned int pwm2_mux[] = {
2960 PWM2_MARK,
2961};
2962static const unsigned int pwm2_b_pins[] = {
2963 RCAR_GP_PIN(0, 16),
2964};
2965static const unsigned int pwm2_b_mux[] = {
2966 PWM2_B_MARK,
2967};
2968static const unsigned int pwm3_pins[] = {
2969 RCAR_GP_PIN(1, 24),
2970};
2971static const unsigned int pwm3_mux[] = {
2972 PWM3_MARK,
2973};
2974static const unsigned int pwm4_pins[] = {
2975 RCAR_GP_PIN(3, 26),
2976};
2977static const unsigned int pwm4_mux[] = {
2978 PWM4_MARK,
2979};
2980static const unsigned int pwm4_b_pins[] = {
2981 RCAR_GP_PIN(3, 31),
2982};
2983static const unsigned int pwm4_b_mux[] = {
2984 PWM4_B_MARK,
2985};
2986static const unsigned int pwm5_pins[] = {
2987 RCAR_GP_PIN(7, 21),
2988};
2989static const unsigned int pwm5_mux[] = {
2990 PWM5_MARK,
2991};
2992static const unsigned int pwm5_b_pins[] = {
2993 RCAR_GP_PIN(7, 20),
2994};
2995static const unsigned int pwm5_b_mux[] = {
2996 PWM5_B_MARK,
2997};
2998static const unsigned int pwm6_pins[] = {
2999 RCAR_GP_PIN(7, 22),
3000};
3001static const unsigned int pwm6_mux[] = {
3002 PWM6_MARK,
3003};
2931/* - QSPI ------------------------------------------------------------------- */ 3004/* - QSPI ------------------------------------------------------------------- */
2932static const unsigned int qspi_ctrl_pins[] = { 3005static const unsigned int qspi_ctrl_pins[] = {
2933 /* SPCLK, SSL */ 3006 /* SPCLK, SSL */
@@ -4348,6 +4421,18 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
4348 SH_PFC_PIN_GROUP(msiof2_sync_e), 4421 SH_PFC_PIN_GROUP(msiof2_sync_e),
4349 SH_PFC_PIN_GROUP(msiof2_rx_e), 4422 SH_PFC_PIN_GROUP(msiof2_rx_e),
4350 SH_PFC_PIN_GROUP(msiof2_tx_e), 4423 SH_PFC_PIN_GROUP(msiof2_tx_e),
4424 SH_PFC_PIN_GROUP(pwm0),
4425 SH_PFC_PIN_GROUP(pwm0_b),
4426 SH_PFC_PIN_GROUP(pwm1),
4427 SH_PFC_PIN_GROUP(pwm1_b),
4428 SH_PFC_PIN_GROUP(pwm2),
4429 SH_PFC_PIN_GROUP(pwm2_b),
4430 SH_PFC_PIN_GROUP(pwm3),
4431 SH_PFC_PIN_GROUP(pwm4),
4432 SH_PFC_PIN_GROUP(pwm4_b),
4433 SH_PFC_PIN_GROUP(pwm5),
4434 SH_PFC_PIN_GROUP(pwm5_b),
4435 SH_PFC_PIN_GROUP(pwm6),
4351 SH_PFC_PIN_GROUP(qspi_ctrl), 4436 SH_PFC_PIN_GROUP(qspi_ctrl),
4352 SH_PFC_PIN_GROUP(qspi_data2), 4437 SH_PFC_PIN_GROUP(qspi_data2),
4353 SH_PFC_PIN_GROUP(qspi_data4), 4438 SH_PFC_PIN_GROUP(qspi_data4),
@@ -4745,6 +4830,39 @@ static const char * const msiof2_groups[] = {
4745 "msiof2_tx_e", 4830 "msiof2_tx_e",
4746}; 4831};
4747 4832
4833static const char * const pwm0_groups[] = {
4834 "pwm0",
4835 "pwm0_b",
4836};
4837
4838static const char * const pwm1_groups[] = {
4839 "pwm1",
4840 "pwm1_b",
4841};
4842
4843static const char * const pwm2_groups[] = {
4844 "pwm2",
4845 "pwm2_b",
4846};
4847
4848static const char * const pwm3_groups[] = {
4849 "pwm3",
4850};
4851
4852static const char * const pwm4_groups[] = {
4853 "pwm4",
4854 "pwm4_b",
4855};
4856
4857static const char * const pwm5_groups[] = {
4858 "pwm5",
4859 "pwm5_b",
4860};
4861
4862static const char * const pwm6_groups[] = {
4863 "pwm6",
4864};
4865
4748static const char * const qspi_groups[] = { 4866static const char * const qspi_groups[] = {
4749 "qspi_ctrl", 4867 "qspi_ctrl",
4750 "qspi_data2", 4868 "qspi_data2",
@@ -4989,6 +5107,13 @@ static const struct sh_pfc_function pinmux_functions[] = {
4989 SH_PFC_FUNCTION(msiof0), 5107 SH_PFC_FUNCTION(msiof0),
4990 SH_PFC_FUNCTION(msiof1), 5108 SH_PFC_FUNCTION(msiof1),
4991 SH_PFC_FUNCTION(msiof2), 5109 SH_PFC_FUNCTION(msiof2),
5110 SH_PFC_FUNCTION(pwm0),
5111 SH_PFC_FUNCTION(pwm1),
5112 SH_PFC_FUNCTION(pwm2),
5113 SH_PFC_FUNCTION(pwm3),
5114 SH_PFC_FUNCTION(pwm4),
5115 SH_PFC_FUNCTION(pwm5),
5116 SH_PFC_FUNCTION(pwm6),
4992 SH_PFC_FUNCTION(qspi), 5117 SH_PFC_FUNCTION(qspi),
4993 SH_PFC_FUNCTION(scif0), 5118 SH_PFC_FUNCTION(scif0),
4994 SH_PFC_FUNCTION(scif1), 5119 SH_PFC_FUNCTION(scif1),
@@ -6000,7 +6125,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
6000 { PINMUX_CFG_REG_VAR("MOD_SEL", 0xE6060090, 32, 6125 { PINMUX_CFG_REG_VAR("MOD_SEL", 0xE6060090, 32,
6001 1, 2, 2, 2, 3, 2, 1, 1, 1, 1, 6126 1, 2, 2, 2, 3, 2, 1, 1, 1, 1,
6002 3, 2, 2, 2, 1, 2, 2, 2) { 6127 3, 2, 2, 2, 1, 2, 2, 2) {
6003 /* RESEVED [1] */ 6128 /* RESERVED [1] */
6004 0, 0, 6129 0, 0,
6005 /* SEL_SCIF1 [2] */ 6130 /* SEL_SCIF1 [2] */
6006 FN_SEL_SCIF1_0, FN_SEL_SCIF1_1, FN_SEL_SCIF1_2, FN_SEL_SCIF1_3, 6131 FN_SEL_SCIF1_0, FN_SEL_SCIF1_1, FN_SEL_SCIF1_2, FN_SEL_SCIF1_3,
@@ -6027,11 +6152,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
6027 FN_SEL_HSCIF1_0, FN_SEL_HSCIF1_1, FN_SEL_HSCIF1_2, 6152 FN_SEL_HSCIF1_0, FN_SEL_HSCIF1_1, FN_SEL_HSCIF1_2,
6028 FN_SEL_HSCIF1_3, FN_SEL_HSCIF1_4, 6153 FN_SEL_HSCIF1_3, FN_SEL_HSCIF1_4,
6029 0, 0, 0, 6154 0, 0, 0,
6030 /* RESEVED [2] */ 6155 /* RESERVED [2] */
6031 0, 0, 0, 0, 6156 0, 0, 0, 0,
6032 /* SEL_VI1 [2] */ 6157 /* SEL_VI1 [2] */
6033 FN_SEL_VI1_0, FN_SEL_VI1_1, FN_SEL_VI1_2, 0, 6158 FN_SEL_VI1_0, FN_SEL_VI1_1, FN_SEL_VI1_2, 0,
6034 /* RESEVED [2] */ 6159 /* RESERVED [2] */
6035 0, 0, 0, 0, 6160 0, 0, 0, 0,
6036 /* SEL_TMU [1] */ 6161 /* SEL_TMU [1] */
6037 FN_SEL_TMU1_0, FN_SEL_TMU1_1, 6162 FN_SEL_TMU1_0, FN_SEL_TMU1_1,
@@ -6049,7 +6174,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
6049 FN_SEL_SCIF0_0, FN_SEL_SCIF0_1, FN_SEL_SCIF0_2, 6174 FN_SEL_SCIF0_0, FN_SEL_SCIF0_1, FN_SEL_SCIF0_2,
6050 FN_SEL_SCIF0_3, FN_SEL_SCIF0_4, 6175 FN_SEL_SCIF0_3, FN_SEL_SCIF0_4,
6051 0, 0, 0, 6176 0, 0, 0,
6052 /* RESEVED [1] */ 6177 /* RESERVED [1] */
6053 0, 0, 6178 0, 0,
6054 /* SEL_SCIF [1] */ 6179 /* SEL_SCIF [1] */
6055 FN_SEL_SCIF_0, FN_SEL_SCIF_1, 6180 FN_SEL_SCIF_0, FN_SEL_SCIF_1,
@@ -6059,13 +6184,13 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
6059 0, 0, 6184 0, 0,
6060 /* SEL_CAN1 [2] */ 6185 /* SEL_CAN1 [2] */
6061 FN_SEL_CAN1_0, FN_SEL_CAN1_1, FN_SEL_CAN1_2, FN_SEL_CAN1_3, 6186 FN_SEL_CAN1_0, FN_SEL_CAN1_1, FN_SEL_CAN1_2, FN_SEL_CAN1_3,
6062 /* RESEVED [1] */ 6187 /* RESERVED [1] */
6063 0, 0, 6188 0, 0,
6064 /* SEL_SCIFA2 [1] */ 6189 /* SEL_SCIFA2 [1] */
6065 FN_SEL_SCIFA2_0, FN_SEL_SCIFA2_1, 6190 FN_SEL_SCIFA2_0, FN_SEL_SCIFA2_1,
6066 /* SEL_SCIF4 [2] */ 6191 /* SEL_SCIF4 [2] */
6067 FN_SEL_SCIF4_0, FN_SEL_SCIF4_1, FN_SEL_SCIF4_2, 0, 6192 FN_SEL_SCIF4_0, FN_SEL_SCIF4_1, FN_SEL_SCIF4_2, 0,
6068 /* RESEVED [2] */ 6193 /* RESERVED [2] */
6069 0, 0, 0, 0, 6194 0, 0, 0, 0,
6070 /* SEL_ADG [1] */ 6195 /* SEL_ADG [1] */
6071 FN_SEL_ADG_0, FN_SEL_ADG_1, 6196 FN_SEL_ADG_0, FN_SEL_ADG_1,
@@ -6075,7 +6200,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
6075 0, 0, 0, 6200 0, 0, 0,
6076 /* SEL_SCIFA5 [2] */ 6201 /* SEL_SCIFA5 [2] */
6077 FN_SEL_SCIFA5_0, FN_SEL_SCIFA5_1, FN_SEL_SCIFA5_2, 0, 6202 FN_SEL_SCIFA5_0, FN_SEL_SCIFA5_1, FN_SEL_SCIFA5_2, 0,
6078 /* RESEVED [1] */ 6203 /* RESERVED [1] */
6079 0, 0, 6204 0, 0,
6080 /* SEL_GPS [2] */ 6205 /* SEL_GPS [2] */
6081 FN_SEL_GPS_0, FN_SEL_GPS_1, FN_SEL_GPS_2, FN_SEL_GPS_3, 6206 FN_SEL_GPS_0, FN_SEL_GPS_1, FN_SEL_GPS_2, FN_SEL_GPS_3,
@@ -6085,7 +6210,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
6085 FN_SEL_SCIFA3_0, FN_SEL_SCIFA3_1, FN_SEL_SCIFA3_2, 0, 6210 FN_SEL_SCIFA3_0, FN_SEL_SCIFA3_1, FN_SEL_SCIFA3_2, 0,
6086 /* SEL_SIM [1] */ 6211 /* SEL_SIM [1] */
6087 FN_SEL_SIM_0, FN_SEL_SIM_1, 6212 FN_SEL_SIM_0, FN_SEL_SIM_1,
6088 /* RESEVED [1] */ 6213 /* RESERVED [1] */
6089 0, 0, 6214 0, 0,
6090 /* SEL_SSI8 [1] */ 6215 /* SEL_SSI8 [1] */
6091 FN_SEL_SSI8_0, FN_SEL_SSI8_1, } 6216 FN_SEL_SSI8_0, FN_SEL_SSI8_1, }
@@ -6115,7 +6240,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
6115 FN_SEL_MMC_0, FN_SEL_MMC_1, 6240 FN_SEL_MMC_0, FN_SEL_MMC_1,
6116 /* SEL_SCIF5 [1] */ 6241 /* SEL_SCIF5 [1] */
6117 FN_SEL_SCIF5_0, FN_SEL_SCIF5_1, 6242 FN_SEL_SCIF5_0, FN_SEL_SCIF5_1,
6118 /* RESEVED [2] */ 6243 /* RESERVED [2] */
6119 0, 0, 0, 0, 6244 0, 0, 0, 0,
6120 /* SEL_IIC2 [2] */ 6245 /* SEL_IIC2 [2] */
6121 FN_SEL_IIC2_0, FN_SEL_IIC2_1, FN_SEL_IIC2_2, FN_SEL_IIC2_3, 6246 FN_SEL_IIC2_0, FN_SEL_IIC2_1, FN_SEL_IIC2_2, FN_SEL_IIC2_3,
@@ -6125,11 +6250,11 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
6125 0, 0, 0, 6250 0, 0, 0,
6126 /* SEL_IIC0 [2] */ 6251 /* SEL_IIC0 [2] */
6127 FN_SEL_IIC0_0, FN_SEL_IIC0_1, FN_SEL_IIC0_2, 0, 6252 FN_SEL_IIC0_0, FN_SEL_IIC0_1, FN_SEL_IIC0_2, 0,
6128 /* RESEVED [2] */ 6253 /* RESERVED [2] */
6129 0, 0, 0, 0, 6254 0, 0, 0, 0,
6130 /* RESEVED [2] */ 6255 /* RESERVED [2] */
6131 0, 0, 0, 0, 6256 0, 0, 0, 0,
6132 /* RESEVED [1] */ 6257 /* RESERVED [1] */
6133 0, 0, } 6258 0, 0, }
6134 }, 6259 },
6135 { PINMUX_CFG_REG_VAR("MOD_SEL4", 0xE606009C, 32, 6260 { PINMUX_CFG_REG_VAR("MOD_SEL4", 0xE606009C, 32,
@@ -6143,7 +6268,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
6143 FN_SEL_HSCIF0_0, FN_SEL_HSCIF0_1, FN_SEL_HSCIF0_2, 0, 6268 FN_SEL_HSCIF0_0, FN_SEL_HSCIF0_1, FN_SEL_HSCIF0_2, 0,
6144 /* SEL_DIS [2] */ 6269 /* SEL_DIS [2] */
6145 FN_SEL_DIS_0, FN_SEL_DIS_1, FN_SEL_DIS_2, 0, 6270 FN_SEL_DIS_0, FN_SEL_DIS_1, FN_SEL_DIS_2, 0,
6146 /* RESEVED [1] */ 6271 /* RESERVED [1] */
6147 0, 0, 6272 0, 0,
6148 /* SEL_RAD [1] */ 6273 /* SEL_RAD [1] */
6149 FN_SEL_RAD_0, FN_SEL_RAD_1, 6274 FN_SEL_RAD_0, FN_SEL_RAD_1,
@@ -6155,15 +6280,15 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
6155 FN_SEL_SCIF2_0, FN_SEL_SCIF2_1, FN_SEL_SCIF2_2, 6280 FN_SEL_SCIF2_0, FN_SEL_SCIF2_1, FN_SEL_SCIF2_2,
6156 FN_SEL_SCIF2_3, FN_SEL_SCIF2_4, 6281 FN_SEL_SCIF2_3, FN_SEL_SCIF2_4,
6157 0, 0, 0, 6282 0, 0, 0,
6158 /* RESEVED [2] */ 6283 /* RESERVED [2] */
6159 0, 0, 0, 0, 6284 0, 0, 0, 0,
6160 /* RESEVED [2] */ 6285 /* RESERVED [2] */
6161 0, 0, 0, 0, 6286 0, 0, 0, 0,
6162 /* SEL_SOF2 [3] */ 6287 /* SEL_SOF2 [3] */
6163 FN_SEL_SOF2_0, FN_SEL_SOF2_1, FN_SEL_SOF2_2, 6288 FN_SEL_SOF2_0, FN_SEL_SOF2_1, FN_SEL_SOF2_2,
6164 FN_SEL_SOF2_3, FN_SEL_SOF2_4, 6289 FN_SEL_SOF2_3, FN_SEL_SOF2_4,
6165 0, 0, 0, 6290 0, 0, 0,
6166 /* RESEVED [1] */ 6291 /* RESERVED [1] */
6167 0, 0, 6292 0, 0,
6168 /* SEL_SSI1 [1] */ 6293 /* SEL_SSI1 [1] */
6169 FN_SEL_SSI1_0, FN_SEL_SSI1_1, 6294 FN_SEL_SSI1_0, FN_SEL_SSI1_1,
@@ -6171,16 +6296,17 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
6171 FN_SEL_SSI0_0, FN_SEL_SSI0_1, 6296 FN_SEL_SSI0_0, FN_SEL_SSI0_1,
6172 /* SEL_SSP [2] */ 6297 /* SEL_SSP [2] */
6173 FN_SEL_SSP_0, FN_SEL_SSP_1, FN_SEL_SSP_2, 0, 6298 FN_SEL_SSP_0, FN_SEL_SSP_1, FN_SEL_SSP_2, 0,
6174 /* RESEVED [2] */ 6299 /* RESERVED [2] */
6175 0, 0, 0, 0, 6300 0, 0, 0, 0,
6176 /* RESEVED [2] */ 6301 /* RESERVED [2] */
6177 0, 0, 0, 0, 6302 0, 0, 0, 0,
6178 /* RESEVED [2] */ 6303 /* RESERVED [2] */
6179 0, 0, 0, 0, } 6304 0, 0, 0, 0, }
6180 }, 6305 },
6181 { }, 6306 { },
6182}; 6307};
6183 6308
6309#ifdef CONFIG_PINCTRL_PFC_R8A7791
6184const struct sh_pfc_soc_info r8a7791_pinmux_info = { 6310const struct sh_pfc_soc_info r8a7791_pinmux_info = {
6185 .name = "r8a77910_pfc", 6311 .name = "r8a77910_pfc",
6186 .unlock_reg = 0xe6060000, /* PMMR */ 6312 .unlock_reg = 0xe6060000, /* PMMR */
@@ -6199,3 +6325,25 @@ const struct sh_pfc_soc_info r8a7791_pinmux_info = {
6199 .gpio_data = pinmux_data, 6325 .gpio_data = pinmux_data,
6200 .gpio_data_size = ARRAY_SIZE(pinmux_data), 6326 .gpio_data_size = ARRAY_SIZE(pinmux_data),
6201}; 6327};
6328#endif
6329
6330#ifdef CONFIG_PINCTRL_PFC_R8A7793
6331const struct sh_pfc_soc_info r8a7793_pinmux_info = {
6332 .name = "r8a77930_pfc",
6333 .unlock_reg = 0xe6060000, /* PMMR */
6334
6335 .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END },
6336
6337 .pins = pinmux_pins,
6338 .nr_pins = ARRAY_SIZE(pinmux_pins),
6339 .groups = pinmux_groups,
6340 .nr_groups = ARRAY_SIZE(pinmux_groups),
6341 .functions = pinmux_functions,
6342 .nr_functions = ARRAY_SIZE(pinmux_functions),
6343
6344 .cfg_regs = pinmux_config_regs,
6345
6346 .gpio_data = pinmux_data,
6347 .gpio_data_size = ARRAY_SIZE(pinmux_data),
6348};
6349#endif
diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7794.c b/drivers/pinctrl/sh-pfc/pfc-r8a7794.c
new file mode 100644
index 000000000000..bfdcac4b3bc4
--- /dev/null
+++ b/drivers/pinctrl/sh-pfc/pfc-r8a7794.c
@@ -0,0 +1,4207 @@
1/*
2 * r8a7794 processor support - PFC hardware block.
3 *
4 * Copyright (C) 2014 Renesas Electronics Corporation
5 * Copyright (C) 2015 Renesas Solutions Corp.
6 * Copyright (C) 2015 Cogent Embedded, Inc., <source@cogentembedded.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2
10 * as published by the Free Software Foundation.
11 */
12
13#include <linux/kernel.h>
14#include <linux/platform_data/gpio-rcar.h>
15
16#include "core.h"
17#include "sh_pfc.h"
18
19#define PORT_GP_26(bank, fn, sfx) \
20 PORT_GP_1(bank, 0, fn, sfx), PORT_GP_1(bank, 1, fn, sfx), \
21 PORT_GP_1(bank, 2, fn, sfx), PORT_GP_1(bank, 3, fn, sfx), \
22 PORT_GP_1(bank, 4, fn, sfx), PORT_GP_1(bank, 5, fn, sfx), \
23 PORT_GP_1(bank, 6, fn, sfx), PORT_GP_1(bank, 7, fn, sfx), \
24 PORT_GP_1(bank, 8, fn, sfx), PORT_GP_1(bank, 9, fn, sfx), \
25 PORT_GP_1(bank, 10, fn, sfx), PORT_GP_1(bank, 11, fn, sfx), \
26 PORT_GP_1(bank, 12, fn, sfx), PORT_GP_1(bank, 13, fn, sfx), \
27 PORT_GP_1(bank, 14, fn, sfx), PORT_GP_1(bank, 15, fn, sfx), \
28 PORT_GP_1(bank, 16, fn, sfx), PORT_GP_1(bank, 17, fn, sfx), \
29 PORT_GP_1(bank, 18, fn, sfx), PORT_GP_1(bank, 19, fn, sfx), \
30 PORT_GP_1(bank, 20, fn, sfx), PORT_GP_1(bank, 21, fn, sfx), \
31 PORT_GP_1(bank, 22, fn, sfx), PORT_GP_1(bank, 23, fn, sfx), \
32 PORT_GP_1(bank, 24, fn, sfx), PORT_GP_1(bank, 25, fn, sfx)
33
34#define PORT_GP_28(bank, fn, sfx) \
35 PORT_GP_26(bank, fn, sfx), \
36 PORT_GP_1(bank, 26, fn, sfx), PORT_GP_1(bank, 27, fn, sfx)
37
38#define CPU_ALL_PORT(fn, sfx) \
39 PORT_GP_32(0, fn, sfx), \
40 PORT_GP_26(1, fn, sfx), \
41 PORT_GP_32(2, fn, sfx), \
42 PORT_GP_32(3, fn, sfx), \
43 PORT_GP_32(4, fn, sfx), \
44 PORT_GP_28(5, fn, sfx), \
45 PORT_GP_26(6, fn, sfx)
46
47enum {
48 PINMUX_RESERVED = 0,
49
50 PINMUX_DATA_BEGIN,
51 GP_ALL(DATA),
52 PINMUX_DATA_END,
53
54 PINMUX_FUNCTION_BEGIN,
55 GP_ALL(FN),
56
57 /* GPSR0 */
58 FN_IP0_23_22, FN_IP0_24, FN_IP0_25, FN_IP0_27_26, FN_IP0_29_28,
59 FN_IP0_31_30, FN_IP1_1_0, FN_IP1_3_2, FN_IP1_5_4, FN_IP1_7_6,
60 FN_IP1_10_8, FN_IP1_12_11, FN_IP1_14_13, FN_IP1_17_15, FN_IP1_19_18,
61 FN_IP1_21_20, FN_IP1_23_22, FN_IP1_24, FN_A2, FN_IP1_26, FN_IP1_27,
62 FN_IP1_29_28, FN_IP1_31_30, FN_IP2_1_0, FN_IP2_3_2, FN_IP2_5_4,
63 FN_IP2_7_6, FN_IP2_9_8, FN_IP2_11_10, FN_IP2_13_12, FN_IP2_15_14,
64 FN_IP2_17_16,
65
66 /* GPSR1 */
67 FN_IP2_20_18, FN_IP2_23_21, FN_IP2_26_24, FN_IP2_29_27, FN_IP2_31_30,
68 FN_IP3_1_0, FN_IP3_3_2, FN_IP3_5_4, FN_IP3_7_6, FN_IP3_9_8, FN_IP3_10,
69 FN_IP3_11, FN_IP3_12, FN_IP3_14_13, FN_IP3_17_15, FN_IP3_20_18,
70 FN_IP3_23_21, FN_IP3_26_24, FN_IP3_29_27, FN_IP3_30, FN_IP3_31,
71 FN_WE0_N, FN_WE1_N, FN_IP4_1_0 , FN_IP7_31, FN_DACK0,
72
73 /* GPSR2 */
74 FN_IP4_4_2, FN_IP4_7_5, FN_IP4_9_8, FN_IP4_11_10, FN_IP4_13_12,
75 FN_IP4_15_14, FN_IP4_17_16, FN_IP4_19_18, FN_IP4_22_20, FN_IP4_25_23,
76 FN_IP4_27_26, FN_IP4_29_28, FN_IP4_31_30, FN_IP5_1_0, FN_IP5_3_2,
77 FN_IP5_5_4, FN_IP5_8_6, FN_IP5_11_9, FN_IP5_13_12, FN_IP5_15_14,
78 FN_IP5_17_16, FN_IP5_19_18, FN_IP5_21_20, FN_IP5_23_22, FN_IP5_25_24,
79 FN_IP5_27_26, FN_IP5_29_28, FN_IP5_31_30, FN_IP6_1_0, FN_IP6_3_2,
80 FN_IP6_5_4, FN_IP6_7_6,
81
82 /* GPSR3 */
83 FN_IP6_8, FN_IP6_9, FN_IP6_10, FN_IP6_11, FN_IP6_12, FN_IP6_13,
84 FN_IP6_14, FN_IP6_15, FN_IP6_16, FN_IP6_19_17, FN_IP6_22_20,
85 FN_IP6_25_23, FN_IP6_28_26, FN_IP6_31_29, FN_IP7_2_0, FN_IP7_5_3,
86 FN_IP7_8_6, FN_IP7_11_9, FN_IP7_14_12, FN_IP7_17_15, FN_IP7_20_18,
87 FN_IP7_23_21, FN_IP7_26_24, FN_IP7_29_27, FN_IP8_2_0, FN_IP8_5_3,
88 FN_IP8_8_6, FN_IP8_11_9, FN_IP8_14_12, FN_IP8_16_15, FN_IP8_19_17,
89 FN_IP8_22_20,
90
91 /* GPSR4 */
92 FN_IP8_25_23, FN_IP8_28_26, FN_IP8_31_29, FN_IP9_2_0, FN_IP9_5_3,
93 FN_IP9_8_6, FN_IP9_11_9, FN_IP9_14_12, FN_IP9_16_15, FN_IP9_18_17,
94 FN_IP9_21_19, FN_IP9_24_22, FN_IP9_27_25, FN_IP9_30_28, FN_IP10_2_0,
95 FN_IP10_5_3, FN_IP10_8_6, FN_IP10_11_9, FN_IP10_14_12, FN_IP10_17_15,
96 FN_IP10_20_18, FN_IP10_23_21, FN_IP10_26_24, FN_IP10_29_27,
97 FN_IP10_31_30, FN_IP11_2_0, FN_IP11_5_3, FN_IP11_7_6, FN_IP11_10_8,
98 FN_IP11_13_11, FN_IP11_15_14, FN_IP11_17_16,
99
100 /* GPSR5 */
101 FN_IP11_20_18, FN_IP11_23_21, FN_IP11_26_24, FN_IP11_29_27, FN_IP12_2_0,
102 FN_IP12_5_3, FN_IP12_8_6, FN_IP12_10_9, FN_IP12_12_11, FN_IP12_14_13,
103 FN_IP12_17_15, FN_IP12_20_18, FN_IP12_23_21, FN_IP12_26_24,
104 FN_IP12_29_27, FN_IP13_2_0, FN_IP13_5_3, FN_IP13_8_6, FN_IP13_11_9,
105 FN_IP13_14_12, FN_IP13_17_15, FN_IP13_20_18, FN_IP13_23_21,
106 FN_IP13_26_24, FN_USB0_PWEN, FN_USB0_OVC, FN_USB1_PWEN, FN_USB1_OVC,
107
108 /* GPSR6 */
109 FN_SD0_CLK, FN_SD0_CMD, FN_SD0_DATA0, FN_SD0_DATA1, FN_SD0_DATA2,
110 FN_SD0_DATA3, FN_SD0_CD, FN_SD0_WP, FN_SD1_CLK, FN_SD1_CMD,
111 FN_SD1_DATA0, FN_SD1_DATA1, FN_SD1_DATA2, FN_SD1_DATA3, FN_IP0_0,
112 FN_IP0_9_8, FN_IP0_10, FN_IP0_11, FN_IP0_12, FN_IP0_13, FN_IP0_14,
113 FN_IP0_15, FN_IP0_16, FN_IP0_17, FN_IP0_19_18, FN_IP0_21_20,
114
115 /* IPSR0 */
116 FN_SD1_CD, FN_CAN0_RX, FN_SD1_WP, FN_IRQ7, FN_CAN0_TX, FN_MMC_CLK,
117 FN_SD2_CLK, FN_MMC_CMD, FN_SD2_CMD, FN_MMC_D0, FN_SD2_DATA0, FN_MMC_D1,
118 FN_SD2_DATA1, FN_MMC_D2, FN_SD2_DATA2, FN_MMC_D3, FN_SD2_DATA3,
119 FN_MMC_D4, FN_SD2_CD, FN_MMC_D5, FN_SD2_WP, FN_MMC_D6, FN_SCIF0_RXD,
120 FN_I2C2_SCL_B, FN_CAN1_RX, FN_MMC_D7, FN_SCIF0_TXD, FN_I2C2_SDA_B,
121 FN_CAN1_TX, FN_D0, FN_SCIFA3_SCK_B, FN_IRQ4, FN_D1, FN_SCIFA3_RXD_B,
122 FN_D2, FN_SCIFA3_TXD_B, FN_D3, FN_I2C3_SCL_B, FN_SCIF5_RXD_B, FN_D4,
123 FN_I2C3_SDA_B, FN_SCIF5_TXD_B, FN_D5, FN_SCIF4_RXD_B, FN_I2C0_SCL_D,
124
125 /* IPSR1 */
126 FN_D6, FN_SCIF4_TXD_B, FN_I2C0_SDA_D, FN_D7, FN_IRQ3, FN_TCLK1,
127 FN_PWM6_B, FN_D8, FN_HSCIF2_HRX, FN_I2C1_SCL_B, FN_D9, FN_HSCIF2_HTX,
128 FN_I2C1_SDA_B, FN_D10, FN_HSCIF2_HSCK, FN_SCIF1_SCK_C, FN_IRQ6,
129 FN_PWM5_C, FN_D11, FN_HSCIF2_HCTS_N, FN_SCIF1_RXD_C, FN_I2C1_SCL_D,
130 FN_D12, FN_HSCIF2_HRTS_N, FN_SCIF1_TXD_C, FN_I2C1_SDA_D, FN_D13,
131 FN_SCIFA1_SCK, FN_TANS1, FN_PWM2_C, FN_TCLK2_B, FN_D14, FN_SCIFA1_RXD,
132 FN_IIC0_SCL_B, FN_D15, FN_SCIFA1_TXD, FN_IIC0_SDA_B, FN_A0,
133 FN_SCIFB1_SCK, FN_PWM3_B, FN_A1, FN_SCIFB1_TXD, FN_A3, FN_SCIFB0_SCK,
134 FN_A4, FN_SCIFB0_TXD, FN_A5, FN_SCIFB0_RXD, FN_PWM4_B, FN_TPUTO3_C,
135 FN_A6, FN_SCIFB0_CTS_N, FN_SCIFA4_RXD_B, FN_TPUTO2_C,
136
137 /* IPSR2 */
138 FN_A7, FN_SCIFB0_RTS_N, FN_SCIFA4_TXD_B, FN_A8, FN_MSIOF1_RXD,
139 FN_SCIFA0_RXD_B, FN_A9, FN_MSIOF1_TXD, FN_SCIFA0_TXD_B, FN_A10,
140 FN_MSIOF1_SCK, FN_IIC1_SCL_B, FN_A11, FN_MSIOF1_SYNC, FN_IIC1_SDA_B,
141 FN_A12, FN_MSIOF1_SS1, FN_SCIFA5_RXD_B, FN_A13, FN_MSIOF1_SS2,
142 FN_SCIFA5_TXD_B, FN_A14, FN_MSIOF2_RXD, FN_HSCIF0_HRX_B, FN_DREQ1_N,
143 FN_A15, FN_MSIOF2_TXD, FN_HSCIF0_HTX_B, FN_DACK1, FN_A16,
144 FN_MSIOF2_SCK, FN_HSCIF0_HSCK_B, FN_SPEEDIN, FN_VSP, FN_CAN_CLK_C,
145 FN_TPUTO2_B, FN_A17, FN_MSIOF2_SYNC, FN_SCIF4_RXD_E, FN_CAN1_RX_B,
146 FN_AVB_AVTP_CAPTURE_B, FN_A18, FN_MSIOF2_SS1, FN_SCIF4_TXD_E,
147 FN_CAN1_TX_B, FN_AVB_AVTP_MATCH_B, FN_A19, FN_MSIOF2_SS2, FN_PWM4,
148 FN_TPUTO2, FN_MOUT0, FN_A20, FN_SPCLK, FN_MOUT1,
149
150 /* IPSR3 */
151 FN_A21, FN_MOSI_IO0, FN_MOUT2, FN_A22, FN_MISO_IO1, FN_MOUT5,
152 FN_ATADIR1_N, FN_A23, FN_IO2, FN_MOUT6, FN_ATAWR1_N, FN_A24, FN_IO3,
153 FN_EX_WAIT2, FN_A25, FN_SSL, FN_ATARD1_N, FN_CS0_N, FN_VI1_DATA8,
154 FN_CS1_N_A26, FN_VI1_DATA9, FN_EX_CS0_N, FN_VI1_DATA10, FN_EX_CS1_N,
155 FN_TPUTO3_B, FN_SCIFB2_RXD, FN_VI1_DATA11, FN_EX_CS2_N, FN_PWM0,
156 FN_SCIF4_RXD_C, FN_TS_SDATA_B, FN_RIF0_SYNC, FN_TPUTO3, FN_SCIFB2_TXD,
157 FN_SDATA_B, FN_EX_CS3_N, FN_SCIFA2_SCK, FN_SCIF4_TXD_C, FN_TS_SCK_B,
158 FN_RIF0_CLK, FN_BPFCLK, FN_SCIFB2_SCK, FN_MDATA_B, FN_EX_CS4_N,
159 FN_SCIFA2_RXD, FN_I2C2_SCL_E, FN_TS_SDEN_B, FN_RIF0_D0, FN_FMCLK,
160 FN_SCIFB2_CTS_N, FN_SCKZ_B, FN_EX_CS5_N, FN_SCIFA2_TXD, FN_I2C2_SDA_E,
161 FN_TS_SPSYNC_B, FN_RIF0_D1, FN_FMIN, FN_SCIFB2_RTS_N, FN_STM_N_B,
162 FN_BS_N, FN_DRACK0, FN_PWM1_C, FN_TPUTO0_C, FN_ATACS01_N, FN_MTS_N_B,
163 FN_RD_N, FN_ATACS11_N, FN_RD_WR_N, FN_ATAG1_N,
164
165 /* IPSR4 */
166 FN_EX_WAIT0, FN_CAN_CLK_B, FN_SCIF_CLK, FN_PWMFSW0, FN_DU0_DR0,
167 FN_LCDOUT16, FN_SCIF5_RXD_C, FN_I2C2_SCL_D, FN_CC50_STATE0,
168 FN_DU0_DR1, FN_LCDOUT17, FN_SCIF5_TXD_C, FN_I2C2_SDA_D, FN_CC50_STATE1,
169 FN_DU0_DR2, FN_LCDOUT18, FN_CC50_STATE2, FN_DU0_DR3, FN_LCDOUT19,
170 FN_CC50_STATE3, FN_DU0_DR4, FN_LCDOUT20, FN_CC50_STATE4, FN_DU0_DR5,
171 FN_LCDOUT21, FN_CC50_STATE5, FN_DU0_DR6, FN_LCDOUT22, FN_CC50_STATE6,
172 FN_DU0_DR7, FN_LCDOUT23, FN_CC50_STATE7, FN_DU0_DG0, FN_LCDOUT8,
173 FN_SCIFA0_RXD_C, FN_I2C3_SCL_D, FN_CC50_STATE8, FN_DU0_DG1, FN_LCDOUT9,
174 FN_SCIFA0_TXD_C, FN_I2C3_SDA_D, FN_CC50_STATE9, FN_DU0_DG2, FN_LCDOUT10,
175 FN_CC50_STATE10, FN_DU0_DG3, FN_LCDOUT11, FN_CC50_STATE11, FN_DU0_DG4,
176 FN_LCDOUT12, FN_CC50_STATE12,
177
178 /* IPSR5 */
179 FN_DU0_DG5, FN_LCDOUT13, FN_CC50_STATE13, FN_DU0_DG6, FN_LCDOUT14,
180 FN_CC50_STATE14, FN_DU0_DG7, FN_LCDOUT15, FN_CC50_STATE15, FN_DU0_DB0,
181 FN_LCDOUT0, FN_SCIFA4_RXD_C, FN_I2C4_SCL_D, FN_CAN0_RX_C,
182 FN_CC50_STATE16, FN_DU0_DB1, FN_LCDOUT1, FN_SCIFA4_TXD_C, FN_I2C4_SDA_D,
183 FN_CAN0_TX_C, FN_CC50_STATE17, FN_DU0_DB2, FN_LCDOUT2, FN_CC50_STATE18,
184 FN_DU0_DB3, FN_LCDOUT3, FN_CC50_STATE19, FN_DU0_DB4, FN_LCDOUT4,
185 FN_CC50_STATE20, FN_DU0_DB5, FN_LCDOUT5, FN_CC50_STATE21, FN_DU0_DB6,
186 FN_LCDOUT6, FN_CC50_STATE22, FN_DU0_DB7, FN_LCDOUT7, FN_CC50_STATE23,
187 FN_DU0_DOTCLKIN, FN_QSTVA_QVS, FN_CC50_STATE24, FN_DU0_DOTCLKOUT0,
188 FN_QCLK, FN_CC50_STATE25, FN_DU0_DOTCLKOUT1, FN_QSTVB_QVE,
189 FN_CC50_STATE26, FN_DU0_EXHSYNC_DU0_HSYNC, FN_QSTH_QHS, FN_CC50_STATE27,
190
191 /* IPSR6 */
192 FN_DU0_EXVSYNC_DU0_VSYNC, FN_QSTB_QHE, FN_CC50_STATE28,
193 FN_DU0_EXODDF_DU0_ODDF_DISP_CDE, FN_QCPV_QDE, FN_CC50_STATE29,
194 FN_DU0_DISP, FN_QPOLA, FN_CC50_STATE30, FN_DU0_CDE, FN_QPOLB,
195 FN_CC50_STATE31, FN_VI0_CLK, FN_AVB_RX_CLK, FN_VI0_DATA0_VI0_B0,
196 FN_AVB_RX_DV, FN_VI0_DATA1_VI0_B1, FN_AVB_RXD0, FN_VI0_DATA2_VI0_B2,
197 FN_AVB_RXD1, FN_VI0_DATA3_VI0_B3, FN_AVB_RXD2, FN_VI0_DATA4_VI0_B4,
198 FN_AVB_RXD3, FN_VI0_DATA5_VI0_B5, FN_AVB_RXD4, FN_VI0_DATA6_VI0_B6,
199 FN_AVB_RXD5, FN_VI0_DATA7_VI0_B7, FN_AVB_RXD6, FN_VI0_CLKENB,
200 FN_I2C3_SCL, FN_SCIFA5_RXD_C, FN_IETX_C, FN_AVB_RXD7, FN_VI0_FIELD,
201 FN_I2C3_SDA, FN_SCIFA5_TXD_C, FN_IECLK_C, FN_AVB_RX_ER, FN_VI0_HSYNC_N,
202 FN_SCIF0_RXD_B, FN_I2C0_SCL_C, FN_IERX_C, FN_AVB_COL, FN_VI0_VSYNC_N,
203 FN_SCIF0_TXD_B, FN_I2C0_SDA_C, FN_AUDIO_CLKOUT_B, FN_AVB_TX_EN,
204 FN_ETH_MDIO, FN_VI0_G0, FN_MSIOF2_RXD_B, FN_IIC0_SCL_D, FN_AVB_TX_CLK,
205 FN_ADIDATA, FN_AD_DI,
206
207 /* IPSR7 */
208 FN_ETH_CRS_DV, FN_VI0_G1, FN_MSIOF2_TXD_B, FN_IIC0_SDA_D, FN_AVB_TXD0,
209 FN_ADICS_SAMP, FN_AD_DO, FN_ETH_RX_ER, FN_VI0_G2, FN_MSIOF2_SCK_B,
210 FN_CAN0_RX_B, FN_AVB_TXD1, FN_ADICLK, FN_AD_CLK, FN_ETH_RXD0, FN_VI0_G3,
211 FN_MSIOF2_SYNC_B, FN_CAN0_TX_B, FN_AVB_TXD2, FN_ADICHS0, FN_AD_NCS_N,
212 FN_ETH_RXD1, FN_VI0_G4, FN_MSIOF2_SS1_B, FN_SCIF4_RXD_D, FN_AVB_TXD3,
213 FN_ADICHS1, FN_ETH_LINK, FN_VI0_G5, FN_MSIOF2_SS2_B, FN_SCIF4_TXD_D,
214 FN_AVB_TXD4, FN_ADICHS2, FN_ETH_REFCLK, FN_VI0_G6, FN_SCIF2_SCK_C,
215 FN_AVB_TXD5, FN_SSI_SCK5_B, FN_ETH_TXD1, FN_VI0_G7, FN_SCIF2_RXD_C,
216 FN_IIC1_SCL_D, FN_AVB_TXD6, FN_SSI_WS5_B, FN_ETH_TX_EN, FN_VI0_R0,
217 FN_SCIF2_TXD_C, FN_IIC1_SDA_D, FN_AVB_TXD7, FN_SSI_SDATA5_B,
218 FN_ETH_MAGIC, FN_VI0_R1, FN_SCIF3_SCK_B, FN_AVB_TX_ER, FN_SSI_SCK6_B,
219 FN_ETH_TXD0, FN_VI0_R2, FN_SCIF3_RXD_B, FN_I2C4_SCL_E, FN_AVB_GTX_CLK,
220 FN_SSI_WS6_B, FN_DREQ0_N, FN_SCIFB1_RXD,
221
222 /* IPSR8 */
223 FN_ETH_MDC, FN_VI0_R3, FN_SCIF3_TXD_B, FN_I2C4_SDA_E, FN_AVB_MDC,
224 FN_SSI_SDATA6_B, FN_HSCIF0_HRX, FN_VI0_R4, FN_I2C1_SCL_C,
225 FN_AUDIO_CLKA_B, FN_AVB_MDIO, FN_SSI_SCK78_B, FN_HSCIF0_HTX,
226 FN_VI0_R5, FN_I2C1_SDA_C, FN_AUDIO_CLKB_B, FN_AVB_LINK, FN_SSI_WS78_B,
227 FN_HSCIF0_HCTS_N, FN_VI0_R6, FN_SCIF0_RXD_D, FN_I2C0_SCL_E,
228 FN_AVB_MAGIC, FN_SSI_SDATA7_B, FN_HSCIF0_HRTS_N, FN_VI0_R7,
229 FN_SCIF0_TXD_D, FN_I2C0_SDA_E, FN_AVB_PHY_INT, FN_SSI_SDATA8_B,
230 FN_HSCIF0_HSCK, FN_SCIF_CLK_B, FN_AVB_CRS, FN_AUDIO_CLKC_B,
231 FN_I2C0_SCL, FN_SCIF0_RXD_C, FN_PWM5, FN_TCLK1_B, FN_AVB_GTXREFCLK,
232 FN_CAN1_RX_D, FN_TPUTO0_B, FN_I2C0_SDA, FN_SCIF0_TXD_C, FN_TPUTO0,
233 FN_CAN_CLK, FN_DVC_MUTE, FN_CAN1_TX_D, FN_I2C1_SCL, FN_SCIF4_RXD,
234 FN_PWM5_B, FN_DU1_DR0, FN_RIF1_SYNC_B, FN_TS_SDATA_D, FN_TPUTO1_B,
235 FN_I2C1_SDA, FN_SCIF4_TXD, FN_IRQ5, FN_DU1_DR1, FN_RIF1_CLK_B,
236 FN_TS_SCK_D, FN_BPFCLK_C, FN_MSIOF0_RXD, FN_SCIF5_RXD, FN_I2C2_SCL_C,
237 FN_DU1_DR2, FN_RIF1_D0_B, FN_TS_SDEN_D, FN_FMCLK_C, FN_RDS_CLK,
238
239 /* IPSR9 */
240 FN_MSIOF0_TXD, FN_SCIF5_TXD, FN_I2C2_SDA_C, FN_DU1_DR3, FN_RIF1_D1_B,
241 FN_TS_SPSYNC_D, FN_FMIN_C, FN_RDS_DATA, FN_MSIOF0_SCK, FN_IRQ0,
242 FN_TS_SDATA, FN_DU1_DR4, FN_RIF1_SYNC, FN_TPUTO1_C, FN_MSIOF0_SYNC,
243 FN_PWM1, FN_TS_SCK, FN_DU1_DR5, FN_RIF1_CLK, FN_BPFCLK_B, FN_MSIOF0_SS1,
244 FN_SCIFA0_RXD, FN_TS_SDEN, FN_DU1_DR6, FN_RIF1_D0, FN_FMCLK_B,
245 FN_RDS_CLK_B, FN_MSIOF0_SS2, FN_SCIFA0_TXD, FN_TS_SPSYNC, FN_DU1_DR7,
246 FN_RIF1_D1, FN_FMIN_B, FN_RDS_DATA_B, FN_HSCIF1_HRX, FN_I2C4_SCL,
247 FN_PWM6, FN_DU1_DG0, FN_HSCIF1_HTX, FN_I2C4_SDA, FN_TPUTO1, FN_DU1_DG1,
248 FN_HSCIF1_HSCK, FN_PWM2, FN_IETX, FN_DU1_DG2, FN_REMOCON_B,
249 FN_SPEEDIN_B, FN_VSP_B, FN_HSCIF1_HCTS_N, FN_SCIFA4_RXD, FN_IECLK,
250 FN_DU1_DG3, FN_SSI_SCK1_B, FN_CAN_DEBUG_HW_TRIGGER, FN_CC50_STATE32,
251 FN_HSCIF1_HRTS_N, FN_SCIFA4_TXD, FN_IERX, FN_DU1_DG4, FN_SSI_WS1_B,
252 FN_CAN_STEP0, FN_CC50_STATE33, FN_SCIF1_SCK, FN_PWM3, FN_TCLK2,
253 FN_DU1_DG5, FN_SSI_SDATA1_B, FN_CAN_TXCLK, FN_CC50_STATE34,
254
255 /* IPSR10 */
256 FN_SCIF1_RXD, FN_IIC0_SCL, FN_DU1_DG6, FN_SSI_SCK2_B, FN_CAN_DEBUGOUT0,
257 FN_CC50_STATE35, FN_SCIF1_TXD, FN_IIC0_SDA, FN_DU1_DG7, FN_SSI_WS2_B,
258 FN_CAN_DEBUGOUT1, FN_CC50_STATE36, FN_SCIF2_RXD, FN_IIC1_SCL,
259 FN_DU1_DB0, FN_SSI_SDATA2_B, FN_USB0_EXTLP, FN_CAN_DEBUGOUT2,
260 FN_CC50_STATE37, FN_SCIF2_TXD, FN_IIC1_SDA, FN_DU1_DB1, FN_SSI_SCK9_B,
261 FN_USB0_OVC1, FN_CAN_DEBUGOUT3, FN_CC50_STATE38, FN_SCIF2_SCK, FN_IRQ1,
262 FN_DU1_DB2, FN_SSI_WS9_B, FN_USB0_IDIN, FN_CAN_DEBUGOUT4,
263 FN_CC50_STATE39, FN_SCIF3_SCK, FN_IRQ2, FN_BPFCLK_D, FN_DU1_DB3,
264 FN_SSI_SDATA9_B, FN_TANS2, FN_CAN_DEBUGOUT5, FN_CC50_OSCOUT,
265 FN_SCIF3_RXD, FN_I2C1_SCL_E, FN_FMCLK_D, FN_DU1_DB4, FN_AUDIO_CLKA_C,
266 FN_SSI_SCK4_B, FN_CAN_DEBUGOUT6, FN_RDS_CLK_C, FN_SCIF3_TXD,
267 FN_I2C1_SDA_E, FN_FMIN_D, FN_DU1_DB5, FN_AUDIO_CLKB_C, FN_SSI_WS4_B,
268 FN_CAN_DEBUGOUT7, FN_RDS_DATA_C, FN_I2C2_SCL, FN_SCIFA5_RXD, FN_DU1_DB6,
269 FN_AUDIO_CLKC_C, FN_SSI_SDATA4_B, FN_CAN_DEBUGOUT8, FN_I2C2_SDA,
270 FN_SCIFA5_TXD, FN_DU1_DB7, FN_AUDIO_CLKOUT_C, FN_CAN_DEBUGOUT9,
271 FN_SSI_SCK5, FN_SCIFA3_SCK, FN_DU1_DOTCLKIN, FN_CAN_DEBUGOUT10,
272
273 /* IPSR11 */
274 FN_SSI_WS5, FN_SCIFA3_RXD, FN_I2C3_SCL_C, FN_DU1_DOTCLKOUT0,
275 FN_CAN_DEBUGOUT11, FN_SSI_SDATA5, FN_SCIFA3_TXD, FN_I2C3_SDA_C,
276 FN_DU1_DOTCLKOUT1, FN_CAN_DEBUGOUT12, FN_SSI_SCK6, FN_SCIFA1_SCK_B,
277 FN_DU1_EXHSYNC_DU1_HSYNC, FN_CAN_DEBUGOUT13, FN_SSI_WS6,
278 FN_SCIFA1_RXD_B, FN_I2C4_SCL_C, FN_DU1_EXVSYNC_DU1_VSYNC,
279 FN_CAN_DEBUGOUT14, FN_SSI_SDATA6, FN_SCIFA1_TXD_B, FN_I2C4_SDA_C,
280 FN_DU1_EXODDF_DU1_ODDF_DISP_CDE, FN_CAN_DEBUGOUT15, FN_SSI_SCK78,
281 FN_SCIFA2_SCK_B, FN_IIC0_SDA_C, FN_DU1_DISP, FN_SSI_WS78,
282 FN_SCIFA2_RXD_B, FN_IIC0_SCL_C, FN_DU1_CDE, FN_SSI_SDATA7,
283 FN_SCIFA2_TXD_B, FN_IRQ8, FN_AUDIO_CLKA_D, FN_CAN_CLK_D, FN_PCMOE_N,
284 FN_SSI_SCK0129, FN_MSIOF1_RXD_B, FN_SCIF5_RXD_D, FN_ADIDATA_B,
285 FN_AD_DI_B, FN_PCMWE_N, FN_SSI_WS0129, FN_MSIOF1_TXD_B, FN_SCIF5_TXD_D,
286 FN_ADICS_SAMP_B, FN_AD_DO_B, FN_SSI_SDATA0, FN_MSIOF1_SCK_B, FN_PWM0_B,
287 FN_ADICLK_B, FN_AD_CLK_B,
288
289 /* IPSR12 */
290 FN_SSI_SCK34, FN_MSIOF1_SYNC_B, FN_SCIFA1_SCK_C, FN_ADICHS0_B,
291 FN_AD_NCS_N_B, FN_DREQ1_N_B, FN_SSI_WS34, FN_MSIOF1_SS1_B,
292 FN_SCIFA1_RXD_C, FN_ADICHS1_B, FN_CAN1_RX_C, FN_DACK1_B, FN_SSI_SDATA3,
293 FN_MSIOF1_SS2_B, FN_SCIFA1_TXD_C, FN_ADICHS2_B, FN_CAN1_TX_C,
294 FN_DREQ2_N, FN_SSI_SCK4, FN_MLB_CLK, FN_IETX_B, FN_IRD_TX, FN_SSI_WS4,
295 FN_MLB_SIG, FN_IECLK_B, FN_IRD_RX, FN_SSI_SDATA4, FN_MLB_DAT,
296 FN_IERX_B, FN_IRD_SCK, FN_SSI_SDATA8, FN_SCIF1_SCK_B,
297 FN_PWM1_B, FN_IRQ9, FN_REMOCON, FN_DACK2, FN_ETH_MDIO_B, FN_SSI_SCK1,
298 FN_SCIF1_RXD_B, FN_IIC1_SCL_C, FN_VI1_CLK, FN_CAN0_RX_D,
299 FN_AVB_AVTP_CAPTURE, FN_ETH_CRS_DV_B, FN_SSI_WS1, FN_SCIF1_TXD_B,
300 FN_IIC1_SDA_C, FN_VI1_DATA0, FN_CAN0_TX_D, FN_AVB_AVTP_MATCH,
301 FN_ETH_RX_ER_B, FN_SSI_SDATA1, FN_HSCIF1_HRX_B, FN_SDATA, FN_VI1_DATA1,
302 FN_ATAG0_N, FN_ETH_RXD0_B, FN_SSI_SCK2, FN_HSCIF1_HTX_B, FN_VI1_DATA2,
303 FN_MDATA, FN_ATAWR0_N, FN_ETH_RXD1_B,
304
305 /* IPSR13 */
306 FN_SSI_WS2, FN_HSCIF1_HCTS_N_B, FN_SCIFA0_RXD_D, FN_VI1_DATA3, FN_SCKZ,
307 FN_ATACS00_N, FN_ETH_LINK_B, FN_SSI_SDATA2, FN_HSCIF1_HRTS_N_B,
308 FN_SCIFA0_TXD_D, FN_VI1_DATA4, FN_STM_N, FN_ATACS10_N, FN_ETH_REFCLK_B,
309 FN_SSI_SCK9, FN_SCIF2_SCK_B, FN_PWM2_B, FN_VI1_DATA5, FN_MTS_N,
310 FN_EX_WAIT1, FN_ETH_TXD1_B, FN_SSI_WS9, FN_SCIF2_RXD_B, FN_I2C3_SCL_E,
311 FN_VI1_DATA6, FN_ATARD0_N, FN_ETH_TX_EN_B, FN_SSI_SDATA9,
312 FN_SCIF2_TXD_B, FN_I2C3_SDA_E, FN_VI1_DATA7, FN_ATADIR0_N,
313 FN_ETH_MAGIC_B, FN_AUDIO_CLKA, FN_I2C0_SCL_B, FN_SCIFA4_RXD_D,
314 FN_VI1_CLKENB, FN_TS_SDATA_C, FN_RIF0_SYNC_B, FN_ETH_TXD0_B,
315 FN_AUDIO_CLKB, FN_I2C0_SDA_B, FN_SCIFA4_TXD_D, FN_VI1_FIELD,
316 FN_TS_SCK_C, FN_RIF0_CLK_B, FN_BPFCLK_E, FN_ETH_MDC_B, FN_AUDIO_CLKC,
317 FN_I2C4_SCL_B, FN_SCIFA5_RXD_D, FN_VI1_HSYNC_N, FN_TS_SDEN_C,
318 FN_RIF0_D0_B, FN_FMCLK_E, FN_RDS_CLK_D, FN_AUDIO_CLKOUT, FN_I2C4_SDA_B,
319 FN_SCIFA5_TXD_D, FN_VI1_VSYNC_N, FN_TS_SPSYNC_C, FN_RIF0_D1_B,
320 FN_FMIN_E, FN_RDS_DATA_D,
321
322 /* MOD_SEL */
323 FN_SEL_ADG_0, FN_SEL_ADG_1, FN_SEL_ADG_2, FN_SEL_ADG_3,
324 FN_SEL_ADI_0, FN_SEL_ADI_1, FN_SEL_CAN_0, FN_SEL_CAN_1,
325 FN_SEL_CAN_2, FN_SEL_CAN_3, FN_SEL_DARC_0, FN_SEL_DARC_1,
326 FN_SEL_DARC_2, FN_SEL_DARC_3, FN_SEL_DARC_4, FN_SEL_DR0_0,
327 FN_SEL_DR0_1, FN_SEL_DR1_0, FN_SEL_DR1_1, FN_SEL_DR2_0, FN_SEL_DR2_1,
328 FN_SEL_DR3_0, FN_SEL_DR3_1, FN_SEL_ETH_0, FN_SEL_ETH_1, FN_SEL_FSN_0,
329 FN_SEL_FSN_1, FN_SEL_I2C00_0, FN_SEL_I2C00_1, FN_SEL_I2C00_2,
330 FN_SEL_I2C00_3, FN_SEL_I2C00_4, FN_SEL_I2C01_0, FN_SEL_I2C01_1,
331 FN_SEL_I2C01_2, FN_SEL_I2C01_3, FN_SEL_I2C01_4, FN_SEL_I2C02_0,
332 FN_SEL_I2C02_1, FN_SEL_I2C02_2, FN_SEL_I2C02_3, FN_SEL_I2C02_4,
333 FN_SEL_I2C03_0, FN_SEL_I2C03_1, FN_SEL_I2C03_2, FN_SEL_I2C03_3,
334 FN_SEL_I2C03_4, FN_SEL_I2C04_0, FN_SEL_I2C04_1, FN_SEL_I2C04_2,
335 FN_SEL_I2C04_3, FN_SEL_I2C04_4, FN_SEL_IIC00_0, FN_SEL_IIC00_1,
336 FN_SEL_IIC00_2, FN_SEL_IIC00_3, FN_SEL_AVB_0, FN_SEL_AVB_1,
337
338 /* MOD_SEL2 */
339 FN_SEL_IEB_0, FN_SEL_IEB_1, FN_SEL_IEB_2, FN_SEL_IIC01_0,
340 FN_SEL_IIC01_1, FN_SEL_IIC01_2, FN_SEL_IIC01_3, FN_SEL_LBS_0,
341 FN_SEL_LBS_1, FN_SEL_MSI1_0, FN_SEL_MSI1_1, FN_SEL_MSI2_0,
342 FN_SEL_MSI2_1, FN_SEL_RAD_0, FN_SEL_RAD_1, FN_SEL_RCN_0,
343 FN_SEL_RCN_1, FN_SEL_RSP_0, FN_SEL_RSP_1, FN_SEL_SCIFA0_0,
344 FN_SEL_SCIFA0_1, FN_SEL_SCIFA0_2, FN_SEL_SCIFA0_3, FN_SEL_SCIFA1_0,
345 FN_SEL_SCIFA1_1, FN_SEL_SCIFA1_2, FN_SEL_SCIFA2_0, FN_SEL_SCIFA2_1,
346 FN_SEL_SCIFA3_0, FN_SEL_SCIFA3_1, FN_SEL_SCIFA4_0, FN_SEL_SCIFA4_1,
347 FN_SEL_SCIFA4_2, FN_SEL_SCIFA4_3, FN_SEL_SCIFA5_0, FN_SEL_SCIFA5_1,
348 FN_SEL_SCIFA5_2, FN_SEL_SCIFA5_3, FN_SEL_SPDM_0, FN_SEL_SPDM_1,
349 FN_SEL_TMU_0, FN_SEL_TMU_1, FN_SEL_TSIF0_0, FN_SEL_TSIF0_1,
350 FN_SEL_TSIF0_2, FN_SEL_TSIF0_3, FN_SEL_CAN0_0, FN_SEL_CAN0_1,
351 FN_SEL_CAN0_2, FN_SEL_CAN0_3, FN_SEL_CAN1_0, FN_SEL_CAN1_1,
352 FN_SEL_CAN1_2, FN_SEL_CAN1_3, FN_SEL_HSCIF0_0, FN_SEL_HSCIF0_1,
353 FN_SEL_HSCIF1_0, FN_SEL_HSCIF1_1, FN_SEL_RDS_0, FN_SEL_RDS_1,
354 FN_SEL_RDS_2, FN_SEL_RDS_3,
355
356 /* MOD_SEL3 */
357 FN_SEL_SCIF0_0, FN_SEL_SCIF0_1, FN_SEL_SCIF0_2, FN_SEL_SCIF0_3,
358 FN_SEL_SCIF1_0, FN_SEL_SCIF1_1, FN_SEL_SCIF1_2, FN_SEL_SCIF2_0,
359 FN_SEL_SCIF2_1, FN_SEL_SCIF2_2, FN_SEL_SCIF3_0, FN_SEL_SCIF3_1,
360 FN_SEL_SCIF4_0, FN_SEL_SCIF4_1, FN_SEL_SCIF4_2, FN_SEL_SCIF4_3,
361 FN_SEL_SCIF4_4, FN_SEL_SCIF5_0, FN_SEL_SCIF5_1, FN_SEL_SCIF5_2,
362 FN_SEL_SCIF5_3, FN_SEL_SSI1_0, FN_SEL_SSI1_1, FN_SEL_SSI2_0,
363 FN_SEL_SSI2_1, FN_SEL_SSI4_0, FN_SEL_SSI4_1, FN_SEL_SSI5_0,
364 FN_SEL_SSI5_1, FN_SEL_SSI6_0, FN_SEL_SSI6_1, FN_SEL_SSI7_0,
365 FN_SEL_SSI7_1, FN_SEL_SSI8_0, FN_SEL_SSI8_1, FN_SEL_SSI9_0,
366 FN_SEL_SSI9_1,
367 PINMUX_FUNCTION_END,
368
369 PINMUX_MARK_BEGIN,
370 A2_MARK, WE0_N_MARK, WE1_N_MARK, DACK0_MARK,
371
372 USB0_PWEN_MARK, USB0_OVC_MARK, USB1_PWEN_MARK, USB1_OVC_MARK,
373
374 SD0_CLK_MARK, SD0_CMD_MARK, SD0_DATA0_MARK, SD0_DATA1_MARK,
375 SD0_DATA2_MARK, SD0_DATA3_MARK, SD0_CD_MARK, SD0_WP_MARK,
376
377 SD1_CLK_MARK, SD1_CMD_MARK, SD1_DATA0_MARK, SD1_DATA1_MARK,
378 SD1_DATA2_MARK, SD1_DATA3_MARK,
379
380 /* IPSR0 */
381 SD1_CD_MARK, CAN0_RX_MARK, SD1_WP_MARK, IRQ7_MARK, CAN0_TX_MARK,
382 MMC_CLK_MARK, SD2_CLK_MARK, MMC_CMD_MARK, SD2_CMD_MARK, MMC_D0_MARK,
383 SD2_DATA0_MARK, MMC_D1_MARK, SD2_DATA1_MARK, MMC_D2_MARK,
384 SD2_DATA2_MARK, MMC_D3_MARK, SD2_DATA3_MARK, MMC_D4_MARK, SD2_CD_MARK,
385 MMC_D5_MARK, SD2_WP_MARK, MMC_D6_MARK, SCIF0_RXD_MARK, I2C2_SCL_B_MARK,
386 CAN1_RX_MARK, MMC_D7_MARK, SCIF0_TXD_MARK, I2C2_SDA_B_MARK,
387 CAN1_TX_MARK, D0_MARK, SCIFA3_SCK_B_MARK, IRQ4_MARK, D1_MARK,
388 SCIFA3_RXD_B_MARK, D2_MARK, SCIFA3_TXD_B_MARK, D3_MARK, I2C3_SCL_B_MARK,
389 SCIF5_RXD_B_MARK, D4_MARK, I2C3_SDA_B_MARK, SCIF5_TXD_B_MARK, D5_MARK,
390 SCIF4_RXD_B_MARK, I2C0_SCL_D_MARK,
391
392 /* IPSR1 */
393 D6_MARK, SCIF4_TXD_B_MARK, I2C0_SDA_D_MARK, D7_MARK, IRQ3_MARK,
394 TCLK1_MARK, PWM6_B_MARK, D8_MARK, HSCIF2_HRX_MARK, I2C1_SCL_B_MARK,
395 D9_MARK, HSCIF2_HTX_MARK, I2C1_SDA_B_MARK, D10_MARK,
396 HSCIF2_HSCK_MARK, SCIF1_SCK_C_MARK, IRQ6_MARK, PWM5_C_MARK,
397 D11_MARK, HSCIF2_HCTS_N_MARK, SCIF1_RXD_C_MARK, I2C1_SCL_D_MARK,
398 D12_MARK, HSCIF2_HRTS_N_MARK, SCIF1_TXD_C_MARK, I2C1_SDA_D_MARK,
399 D13_MARK, SCIFA1_SCK_MARK, TANS1_MARK, PWM2_C_MARK, TCLK2_B_MARK,
400 D14_MARK, SCIFA1_RXD_MARK, IIC0_SCL_B_MARK, D15_MARK, SCIFA1_TXD_MARK,
401 IIC0_SDA_B_MARK, A0_MARK, SCIFB1_SCK_MARK, PWM3_B_MARK, A1_MARK,
402 SCIFB1_TXD_MARK, A3_MARK, SCIFB0_SCK_MARK, A4_MARK, SCIFB0_TXD_MARK,
403 A5_MARK, SCIFB0_RXD_MARK, PWM4_B_MARK, TPUTO3_C_MARK, A6_MARK,
404 SCIFB0_CTS_N_MARK, SCIFA4_RXD_B_MARK, TPUTO2_C_MARK,
405
406 /* IPSR2 */
407 A7_MARK, SCIFB0_RTS_N_MARK, SCIFA4_TXD_B_MARK, A8_MARK, MSIOF1_RXD_MARK,
408 SCIFA0_RXD_B_MARK, A9_MARK, MSIOF1_TXD_MARK, SCIFA0_TXD_B_MARK,
409 A10_MARK, MSIOF1_SCK_MARK, IIC1_SCL_B_MARK, A11_MARK, MSIOF1_SYNC_MARK,
410 IIC1_SDA_B_MARK, A12_MARK, MSIOF1_SS1_MARK, SCIFA5_RXD_B_MARK,
411 A13_MARK, MSIOF1_SS2_MARK, SCIFA5_TXD_B_MARK, A14_MARK, MSIOF2_RXD_MARK,
412 HSCIF0_HRX_B_MARK, DREQ1_N_MARK, A15_MARK, MSIOF2_TXD_MARK,
413 HSCIF0_HTX_B_MARK, DACK1_MARK, A16_MARK, MSIOF2_SCK_MARK,
414 HSCIF0_HSCK_B_MARK, SPEEDIN_MARK, VSP_MARK, CAN_CLK_C_MARK,
415 TPUTO2_B_MARK, A17_MARK, MSIOF2_SYNC_MARK, SCIF4_RXD_E_MARK,
416 CAN1_RX_B_MARK, AVB_AVTP_CAPTURE_B_MARK, A18_MARK, MSIOF2_SS1_MARK,
417 SCIF4_TXD_E_MARK, CAN1_TX_B_MARK, AVB_AVTP_MATCH_B_MARK, A19_MARK,
418 MSIOF2_SS2_MARK, PWM4_MARK, TPUTO2_MARK, MOUT0_MARK, A20_MARK,
419 SPCLK_MARK, MOUT1_MARK,
420
421 /* IPSR3 */
422 A21_MARK, MOSI_IO0_MARK, MOUT2_MARK, A22_MARK, MISO_IO1_MARK,
423 MOUT5_MARK, ATADIR1_N_MARK, A23_MARK, IO2_MARK, MOUT6_MARK,
424 ATAWR1_N_MARK, A24_MARK, IO3_MARK, EX_WAIT2_MARK, A25_MARK, SSL_MARK,
425 ATARD1_N_MARK, CS0_N_MARK, VI1_DATA8_MARK, CS1_N_A26_MARK,
426 VI1_DATA9_MARK, EX_CS0_N_MARK, VI1_DATA10_MARK, EX_CS1_N_MARK,
427 TPUTO3_B_MARK, SCIFB2_RXD_MARK, VI1_DATA11_MARK, EX_CS2_N_MARK,
428 PWM0_MARK, SCIF4_RXD_C_MARK, TS_SDATA_B_MARK, RIF0_SYNC_MARK,
429 TPUTO3_MARK, SCIFB2_TXD_MARK, SDATA_B_MARK, EX_CS3_N_MARK,
430 SCIFA2_SCK_MARK, SCIF4_TXD_C_MARK, TS_SCK_B_MARK, RIF0_CLK_MARK,
431 BPFCLK_MARK, SCIFB2_SCK_MARK, MDATA_B_MARK, EX_CS4_N_MARK,
432 SCIFA2_RXD_MARK, I2C2_SCL_E_MARK, TS_SDEN_B_MARK, RIF0_D0_MARK,
433 FMCLK_MARK, SCIFB2_CTS_N_MARK, SCKZ_B_MARK, EX_CS5_N_MARK,
434 SCIFA2_TXD_MARK, I2C2_SDA_E_MARK, TS_SPSYNC_B_MARK, RIF0_D1_MARK,
435 FMIN_MARK, SCIFB2_RTS_N_MARK, STM_N_B_MARK, BS_N_MARK, DRACK0_MARK,
436 PWM1_C_MARK, TPUTO0_C_MARK, ATACS01_N_MARK, MTS_N_B_MARK, RD_N_MARK,
437 ATACS11_N_MARK, RD_WR_N_MARK, ATAG1_N_MARK,
438
439 /* IPSR4 */
440 EX_WAIT0_MARK, CAN_CLK_B_MARK, SCIF_CLK_MARK, PWMFSW0_MARK,
441 DU0_DR0_MARK, LCDOUT16_MARK, SCIF5_RXD_C_MARK, I2C2_SCL_D_MARK,
442 CC50_STATE0_MARK, DU0_DR1_MARK, LCDOUT17_MARK, SCIF5_TXD_C_MARK,
443 I2C2_SDA_D_MARK, CC50_STATE1_MARK, DU0_DR2_MARK, LCDOUT18_MARK,
444 CC50_STATE2_MARK, DU0_DR3_MARK, LCDOUT19_MARK, CC50_STATE3_MARK,
445 DU0_DR4_MARK, LCDOUT20_MARK, CC50_STATE4_MARK, DU0_DR5_MARK,
446 LCDOUT21_MARK, CC50_STATE5_MARK, DU0_DR6_MARK, LCDOUT22_MARK,
447 CC50_STATE6_MARK, DU0_DR7_MARK, LCDOUT23_MARK, CC50_STATE7_MARK,
448 DU0_DG0_MARK, LCDOUT8_MARK, SCIFA0_RXD_C_MARK, I2C3_SCL_D_MARK,
449 CC50_STATE8_MARK, DU0_DG1_MARK, LCDOUT9_MARK, SCIFA0_TXD_C_MARK,
450 I2C3_SDA_D_MARK, CC50_STATE9_MARK, DU0_DG2_MARK, LCDOUT10_MARK,
451 CC50_STATE10_MARK, DU0_DG3_MARK, LCDOUT11_MARK, CC50_STATE11_MARK,
452 DU0_DG4_MARK, LCDOUT12_MARK, CC50_STATE12_MARK,
453
454 /* IPSR5 */
455 DU0_DG5_MARK, LCDOUT13_MARK, CC50_STATE13_MARK, DU0_DG6_MARK,
456 LCDOUT14_MARK, CC50_STATE14_MARK, DU0_DG7_MARK, LCDOUT15_MARK,
457 CC50_STATE15_MARK, DU0_DB0_MARK, LCDOUT0_MARK, SCIFA4_RXD_C_MARK,
458 I2C4_SCL_D_MARK, CAN0_RX_C_MARK, CC50_STATE16_MARK, DU0_DB1_MARK,
459 LCDOUT1_MARK, SCIFA4_TXD_C_MARK, I2C4_SDA_D_MARK, CAN0_TX_C_MARK,
460 CC50_STATE17_MARK, DU0_DB2_MARK, LCDOUT2_MARK, CC50_STATE18_MARK,
461 DU0_DB3_MARK, LCDOUT3_MARK, CC50_STATE19_MARK, DU0_DB4_MARK,
462 LCDOUT4_MARK, CC50_STATE20_MARK, DU0_DB5_MARK, LCDOUT5_MARK,
463 CC50_STATE21_MARK, DU0_DB6_MARK, LCDOUT6_MARK, CC50_STATE22_MARK,
464 DU0_DB7_MARK, LCDOUT7_MARK, CC50_STATE23_MARK, DU0_DOTCLKIN_MARK,
465 QSTVA_QVS_MARK, CC50_STATE24_MARK, DU0_DOTCLKOUT0_MARK,
466 QCLK_MARK, CC50_STATE25_MARK, DU0_DOTCLKOUT1_MARK, QSTVB_QVE_MARK,
467 CC50_STATE26_MARK, DU0_EXHSYNC_DU0_HSYNC_MARK, QSTH_QHS_MARK,
468 CC50_STATE27_MARK,
469
470 /* IPSR6 */
471 DU0_EXVSYNC_DU0_VSYNC_MARK, QSTB_QHE_MARK, CC50_STATE28_MARK,
472 DU0_EXODDF_DU0_ODDF_DISP_CDE_MARK, QCPV_QDE_MARK, CC50_STATE29_MARK,
473 DU0_DISP_MARK, QPOLA_MARK, CC50_STATE30_MARK, DU0_CDE_MARK, QPOLB_MARK,
474 CC50_STATE31_MARK, VI0_CLK_MARK, AVB_RX_CLK_MARK, VI0_DATA0_VI0_B0_MARK,
475 AVB_RX_DV_MARK, VI0_DATA1_VI0_B1_MARK, AVB_RXD0_MARK,
476 VI0_DATA2_VI0_B2_MARK, AVB_RXD1_MARK, VI0_DATA3_VI0_B3_MARK,
477 AVB_RXD2_MARK, VI0_DATA4_VI0_B4_MARK, AVB_RXD3_MARK,
478 VI0_DATA5_VI0_B5_MARK, AVB_RXD4_MARK, VI0_DATA6_VI0_B6_MARK,
479 AVB_RXD5_MARK, VI0_DATA7_VI0_B7_MARK, AVB_RXD6_MARK, VI0_CLKENB_MARK,
480 I2C3_SCL_MARK, SCIFA5_RXD_C_MARK, IETX_C_MARK, AVB_RXD7_MARK,
481 VI0_FIELD_MARK, I2C3_SDA_MARK, SCIFA5_TXD_C_MARK, IECLK_C_MARK,
482 AVB_RX_ER_MARK, VI0_HSYNC_N_MARK, SCIF0_RXD_B_MARK, I2C0_SCL_C_MARK,
483 IERX_C_MARK, AVB_COL_MARK, VI0_VSYNC_N_MARK, SCIF0_TXD_B_MARK,
484 I2C0_SDA_C_MARK, AUDIO_CLKOUT_B_MARK, AVB_TX_EN_MARK, ETH_MDIO_MARK,
485 VI0_G0_MARK, MSIOF2_RXD_B_MARK, IIC0_SCL_D_MARK, AVB_TX_CLK_MARK,
486 ADIDATA_MARK, AD_DI_MARK,
487
488 /* IPSR7 */
489 ETH_CRS_DV_MARK, VI0_G1_MARK, MSIOF2_TXD_B_MARK, IIC0_SDA_D_MARK,
490 AVB_TXD0_MARK, ADICS_SAMP_MARK, AD_DO_MARK, ETH_RX_ER_MARK, VI0_G2_MARK,
491 MSIOF2_SCK_B_MARK, CAN0_RX_B_MARK, AVB_TXD1_MARK, ADICLK_MARK,
492 AD_CLK_MARK, ETH_RXD0_MARK, VI0_G3_MARK, MSIOF2_SYNC_B_MARK,
493 CAN0_TX_B_MARK, AVB_TXD2_MARK, ADICHS0_MARK, AD_NCS_N_MARK,
494 ETH_RXD1_MARK, VI0_G4_MARK, MSIOF2_SS1_B_MARK, SCIF4_RXD_D_MARK,
495 AVB_TXD3_MARK, ADICHS1_MARK, ETH_LINK_MARK, VI0_G5_MARK,
496 MSIOF2_SS2_B_MARK, SCIF4_TXD_D_MARK, AVB_TXD4_MARK, ADICHS2_MARK,
497 ETH_REFCLK_MARK, VI0_G6_MARK, SCIF2_SCK_C_MARK, AVB_TXD5_MARK,
498 SSI_SCK5_B_MARK, ETH_TXD1_MARK, VI0_G7_MARK, SCIF2_RXD_C_MARK,
499 IIC1_SCL_D_MARK, AVB_TXD6_MARK, SSI_WS5_B_MARK, ETH_TX_EN_MARK,
500 VI0_R0_MARK, SCIF2_TXD_C_MARK, IIC1_SDA_D_MARK, AVB_TXD7_MARK,
501 SSI_SDATA5_B_MARK, ETH_MAGIC_MARK, VI0_R1_MARK, SCIF3_SCK_B_MARK,
502 AVB_TX_ER_MARK, SSI_SCK6_B_MARK, ETH_TXD0_MARK, VI0_R2_MARK,
503 SCIF3_RXD_B_MARK, I2C4_SCL_E_MARK, AVB_GTX_CLK_MARK, SSI_WS6_B_MARK,
504 DREQ0_N_MARK, SCIFB1_RXD_MARK,
505
506 /* IPSR8 */
507 ETH_MDC_MARK, VI0_R3_MARK, SCIF3_TXD_B_MARK, I2C4_SDA_E_MARK,
508 AVB_MDC_MARK, SSI_SDATA6_B_MARK, HSCIF0_HRX_MARK, VI0_R4_MARK,
509 I2C1_SCL_C_MARK, AUDIO_CLKA_B_MARK, AVB_MDIO_MARK, SSI_SCK78_B_MARK,
510 HSCIF0_HTX_MARK, VI0_R5_MARK, I2C1_SDA_C_MARK, AUDIO_CLKB_B_MARK,
511 AVB_LINK_MARK, SSI_WS78_B_MARK, HSCIF0_HCTS_N_MARK, VI0_R6_MARK,
512 SCIF0_RXD_D_MARK, I2C0_SCL_E_MARK, AVB_MAGIC_MARK, SSI_SDATA7_B_MARK,
513 HSCIF0_HRTS_N_MARK, VI0_R7_MARK, SCIF0_TXD_D_MARK, I2C0_SDA_E_MARK,
514 AVB_PHY_INT_MARK, SSI_SDATA8_B_MARK,
515 HSCIF0_HSCK_MARK, SCIF_CLK_B_MARK, AVB_CRS_MARK, AUDIO_CLKC_B_MARK,
516 I2C0_SCL_MARK, SCIF0_RXD_C_MARK, PWM5_MARK, TCLK1_B_MARK,
517 AVB_GTXREFCLK_MARK, CAN1_RX_D_MARK, TPUTO0_B_MARK, I2C0_SDA_MARK,
518 SCIF0_TXD_C_MARK, TPUTO0_MARK, CAN_CLK_MARK, DVC_MUTE_MARK,
519 CAN1_TX_D_MARK, I2C1_SCL_MARK, SCIF4_RXD_MARK, PWM5_B_MARK,
520 DU1_DR0_MARK, RIF1_SYNC_B_MARK, TS_SDATA_D_MARK, TPUTO1_B_MARK,
521 I2C1_SDA_MARK, SCIF4_TXD_MARK, IRQ5_MARK, DU1_DR1_MARK, RIF1_CLK_B_MARK,
522 TS_SCK_D_MARK, BPFCLK_C_MARK, MSIOF0_RXD_MARK, SCIF5_RXD_MARK,
523 I2C2_SCL_C_MARK, DU1_DR2_MARK, RIF1_D0_B_MARK, TS_SDEN_D_MARK,
524 FMCLK_C_MARK, RDS_CLK_MARK,
525
526 /* IPSR9 */
527 MSIOF0_TXD_MARK, SCIF5_TXD_MARK, I2C2_SDA_C_MARK, DU1_DR3_MARK,
528 RIF1_D1_B_MARK, TS_SPSYNC_D_MARK, FMIN_C_MARK, RDS_DATA_MARK,
529 MSIOF0_SCK_MARK, IRQ0_MARK, TS_SDATA_MARK, DU1_DR4_MARK, RIF1_SYNC_MARK,
530 TPUTO1_C_MARK, MSIOF0_SYNC_MARK, PWM1_MARK, TS_SCK_MARK, DU1_DR5_MARK,
531 RIF1_CLK_MARK, BPFCLK_B_MARK, MSIOF0_SS1_MARK, SCIFA0_RXD_MARK,
532 TS_SDEN_MARK, DU1_DR6_MARK, RIF1_D0_MARK, FMCLK_B_MARK, RDS_CLK_B_MARK,
533 MSIOF0_SS2_MARK, SCIFA0_TXD_MARK, TS_SPSYNC_MARK, DU1_DR7_MARK,
534 RIF1_D1_MARK, FMIN_B_MARK, RDS_DATA_B_MARK, HSCIF1_HRX_MARK,
535 I2C4_SCL_MARK, PWM6_MARK, DU1_DG0_MARK, HSCIF1_HTX_MARK,
536 I2C4_SDA_MARK, TPUTO1_MARK, DU1_DG1_MARK, HSCIF1_HSCK_MARK,
537 PWM2_MARK, IETX_MARK, DU1_DG2_MARK, REMOCON_B_MARK, SPEEDIN_B_MARK,
538 VSP_B_MARK, HSCIF1_HCTS_N_MARK, SCIFA4_RXD_MARK, IECLK_MARK,
539 DU1_DG3_MARK, SSI_SCK1_B_MARK, CAN_DEBUG_HW_TRIGGER_MARK,
540 CC50_STATE32_MARK, HSCIF1_HRTS_N_MARK, SCIFA4_TXD_MARK, IERX_MARK,
541 DU1_DG4_MARK, SSI_WS1_B_MARK, CAN_STEP0_MARK, CC50_STATE33_MARK,
542 SCIF1_SCK_MARK, PWM3_MARK, TCLK2_MARK, DU1_DG5_MARK, SSI_SDATA1_B_MARK,
543 CAN_TXCLK_MARK, CC50_STATE34_MARK,
544
545 /* IPSR10 */
546 SCIF1_RXD_MARK, IIC0_SCL_MARK, DU1_DG6_MARK, SSI_SCK2_B_MARK,
547 CAN_DEBUGOUT0_MARK, CC50_STATE35_MARK, SCIF1_TXD_MARK, IIC0_SDA_MARK,
548 DU1_DG7_MARK, SSI_WS2_B_MARK, CAN_DEBUGOUT1_MARK, CC50_STATE36_MARK,
549 SCIF2_RXD_MARK, IIC1_SCL_MARK, DU1_DB0_MARK, SSI_SDATA2_B_MARK,
550 USB0_EXTLP_MARK, CAN_DEBUGOUT2_MARK, CC50_STATE37_MARK, SCIF2_TXD_MARK,
551 IIC1_SDA_MARK, DU1_DB1_MARK, SSI_SCK9_B_MARK, USB0_OVC1_MARK,
552 CAN_DEBUGOUT3_MARK, CC50_STATE38_MARK, SCIF2_SCK_MARK, IRQ1_MARK,
553 DU1_DB2_MARK, SSI_WS9_B_MARK, USB0_IDIN_MARK, CAN_DEBUGOUT4_MARK,
554 CC50_STATE39_MARK, SCIF3_SCK_MARK, IRQ2_MARK, BPFCLK_D_MARK,
555 DU1_DB3_MARK, SSI_SDATA9_B_MARK, TANS2_MARK, CAN_DEBUGOUT5_MARK,
556 CC50_OSCOUT_MARK, SCIF3_RXD_MARK, I2C1_SCL_E_MARK, FMCLK_D_MARK,
557 DU1_DB4_MARK, AUDIO_CLKA_C_MARK, SSI_SCK4_B_MARK, CAN_DEBUGOUT6_MARK,
558 RDS_CLK_C_MARK, SCIF3_TXD_MARK, I2C1_SDA_E_MARK, FMIN_D_MARK,
559 DU1_DB5_MARK, AUDIO_CLKB_C_MARK, SSI_WS4_B_MARK, CAN_DEBUGOUT7_MARK,
560 RDS_DATA_C_MARK, I2C2_SCL_MARK, SCIFA5_RXD_MARK, DU1_DB6_MARK,
561 AUDIO_CLKC_C_MARK, SSI_SDATA4_B_MARK, CAN_DEBUGOUT8_MARK, I2C2_SDA_MARK,
562 SCIFA5_TXD_MARK, DU1_DB7_MARK, AUDIO_CLKOUT_C_MARK, CAN_DEBUGOUT9_MARK,
563 SSI_SCK5_MARK, SCIFA3_SCK_MARK, DU1_DOTCLKIN_MARK, CAN_DEBUGOUT10_MARK,
564
565 /* IPSR11 */
566 SSI_WS5_MARK, SCIFA3_RXD_MARK, I2C3_SCL_C_MARK, DU1_DOTCLKOUT0_MARK,
567 CAN_DEBUGOUT11_MARK, SSI_SDATA5_MARK, SCIFA3_TXD_MARK, I2C3_SDA_C_MARK,
568 DU1_DOTCLKOUT1_MARK, CAN_DEBUGOUT12_MARK, SSI_SCK6_MARK,
569 SCIFA1_SCK_B_MARK, DU1_EXHSYNC_DU1_HSYNC_MARK, CAN_DEBUGOUT13_MARK,
570 SSI_WS6_MARK, SCIFA1_RXD_B_MARK, I2C4_SCL_C_MARK,
571 DU1_EXVSYNC_DU1_VSYNC_MARK, CAN_DEBUGOUT14_MARK, SSI_SDATA6_MARK,
572 SCIFA1_TXD_B_MARK, I2C4_SDA_C_MARK, DU1_EXODDF_DU1_ODDF_DISP_CDE_MARK,
573 CAN_DEBUGOUT15_MARK, SSI_SCK78_MARK, SCIFA2_SCK_B_MARK, IIC0_SDA_C_MARK,
574 DU1_DISP_MARK, SSI_WS78_MARK, SCIFA2_RXD_B_MARK, IIC0_SCL_C_MARK,
575 DU1_CDE_MARK, SSI_SDATA7_MARK, SCIFA2_TXD_B_MARK, IRQ8_MARK,
576 AUDIO_CLKA_D_MARK, CAN_CLK_D_MARK, PCMOE_N_MARK, SSI_SCK0129_MARK,
577 MSIOF1_RXD_B_MARK, SCIF5_RXD_D_MARK, ADIDATA_B_MARK, AD_DI_B_MARK,
578 PCMWE_N_MARK, SSI_WS0129_MARK, MSIOF1_TXD_B_MARK, SCIF5_TXD_D_MARK,
579 ADICS_SAMP_B_MARK, AD_DO_B_MARK, SSI_SDATA0_MARK, MSIOF1_SCK_B_MARK,
580 PWM0_B_MARK, ADICLK_B_MARK, AD_CLK_B_MARK,
581
582 /* IPSR12 */
583 SSI_SCK34_MARK, MSIOF1_SYNC_B_MARK, SCIFA1_SCK_C_MARK, ADICHS0_B_MARK,
584 AD_NCS_N_B_MARK, DREQ1_N_B_MARK, SSI_WS34_MARK, MSIOF1_SS1_B_MARK,
585 SCIFA1_RXD_C_MARK, ADICHS1_B_MARK, CAN1_RX_C_MARK, DACK1_B_MARK,
586 SSI_SDATA3_MARK, MSIOF1_SS2_B_MARK, SCIFA1_TXD_C_MARK, ADICHS2_B_MARK,
587 CAN1_TX_C_MARK, DREQ2_N_MARK, SSI_SCK4_MARK, MLB_CLK_MARK, IETX_B_MARK,
588 IRD_TX_MARK, SSI_WS4_MARK, MLB_SIG_MARK, IECLK_B_MARK, IRD_RX_MARK,
589 SSI_SDATA4_MARK, MLB_DAT_MARK, IERX_B_MARK, IRD_SCK_MARK,
590 SSI_SDATA8_MARK, SCIF1_SCK_B_MARK, PWM1_B_MARK, IRQ9_MARK, REMOCON_MARK,
591 DACK2_MARK, ETH_MDIO_B_MARK, SSI_SCK1_MARK, SCIF1_RXD_B_MARK,
592 IIC1_SCL_C_MARK, VI1_CLK_MARK, CAN0_RX_D_MARK, AVB_AVTP_CAPTURE_MARK,
593 ETH_CRS_DV_B_MARK, SSI_WS1_MARK, SCIF1_TXD_B_MARK, IIC1_SDA_C_MARK,
594 VI1_DATA0_MARK, CAN0_TX_D_MARK, AVB_AVTP_MATCH_MARK, ETH_RX_ER_B_MARK,
595 SSI_SDATA1_MARK, HSCIF1_HRX_B_MARK, VI1_DATA1_MARK, SDATA_MARK,
596 ATAG0_N_MARK, ETH_RXD0_B_MARK, SSI_SCK2_MARK, HSCIF1_HTX_B_MARK,
597 VI1_DATA2_MARK, MDATA_MARK, ATAWR0_N_MARK, ETH_RXD1_B_MARK,
598
599 /* IPSR13 */
600 SSI_WS2_MARK, HSCIF1_HCTS_N_B_MARK, SCIFA0_RXD_D_MARK, VI1_DATA3_MARK,
601 SCKZ_MARK, ATACS00_N_MARK, ETH_LINK_B_MARK, SSI_SDATA2_MARK,
602 HSCIF1_HRTS_N_B_MARK, SCIFA0_TXD_D_MARK, VI1_DATA4_MARK, STM_N_MARK,
603 ATACS10_N_MARK, ETH_REFCLK_B_MARK, SSI_SCK9_MARK, SCIF2_SCK_B_MARK,
604 PWM2_B_MARK, VI1_DATA5_MARK, MTS_N_MARK, EX_WAIT1_MARK,
605 ETH_TXD1_B_MARK, SSI_WS9_MARK, SCIF2_RXD_B_MARK, I2C3_SCL_E_MARK,
606 VI1_DATA6_MARK, ATARD0_N_MARK, ETH_TX_EN_B_MARK, SSI_SDATA9_MARK,
607 SCIF2_TXD_B_MARK, I2C3_SDA_E_MARK, VI1_DATA7_MARK, ATADIR0_N_MARK,
608 ETH_MAGIC_B_MARK, AUDIO_CLKA_MARK, I2C0_SCL_B_MARK, SCIFA4_RXD_D_MARK,
609 VI1_CLKENB_MARK, TS_SDATA_C_MARK, RIF0_SYNC_B_MARK, ETH_TXD0_B_MARK,
610 AUDIO_CLKB_MARK, I2C0_SDA_B_MARK, SCIFA4_TXD_D_MARK, VI1_FIELD_MARK,
611 TS_SCK_C_MARK, RIF0_CLK_B_MARK, BPFCLK_E_MARK, ETH_MDC_B_MARK,
612 AUDIO_CLKC_MARK, I2C4_SCL_B_MARK, SCIFA5_RXD_D_MARK, VI1_HSYNC_N_MARK,
613 TS_SDEN_C_MARK, RIF0_D0_B_MARK, FMCLK_E_MARK, RDS_CLK_D_MARK,
614 AUDIO_CLKOUT_MARK, I2C4_SDA_B_MARK, SCIFA5_TXD_D_MARK, VI1_VSYNC_N_MARK,
615 TS_SPSYNC_C_MARK, RIF0_D1_B_MARK, FMIN_E_MARK, RDS_DATA_D_MARK,
616 PINMUX_MARK_END,
617};
618
619static const u16 pinmux_data[] = {
620 PINMUX_DATA_GP_ALL(), /* PINMUX_DATA(GP_M_N_DATA, GP_M_N_FN...), */
621
622 PINMUX_DATA(A2_MARK, FN_A2),
623 PINMUX_DATA(WE0_N_MARK, FN_WE0_N),
624 PINMUX_DATA(WE1_N_MARK, FN_WE1_N),
625 PINMUX_DATA(DACK0_MARK, FN_DACK0),
626 PINMUX_DATA(USB0_PWEN_MARK, FN_USB0_PWEN),
627 PINMUX_DATA(USB0_OVC_MARK, FN_USB0_OVC),
628 PINMUX_DATA(USB1_PWEN_MARK, FN_USB1_PWEN),
629 PINMUX_DATA(USB1_OVC_MARK, FN_USB1_OVC),
630 PINMUX_DATA(SD0_CLK_MARK, FN_SD0_CLK),
631 PINMUX_DATA(SD0_CMD_MARK, FN_SD0_CMD),
632 PINMUX_DATA(SD0_DATA0_MARK, FN_SD0_DATA0),
633 PINMUX_DATA(SD0_DATA1_MARK, FN_SD0_DATA1),
634 PINMUX_DATA(SD0_DATA2_MARK, FN_SD0_DATA2),
635 PINMUX_DATA(SD0_DATA3_MARK, FN_SD0_DATA3),
636 PINMUX_DATA(SD0_CD_MARK, FN_SD0_CD),
637 PINMUX_DATA(SD0_WP_MARK, FN_SD0_WP),
638 PINMUX_DATA(SD1_CLK_MARK, FN_SD1_CLK),
639 PINMUX_DATA(SD1_CMD_MARK, FN_SD1_CMD),
640 PINMUX_DATA(SD1_DATA0_MARK, FN_SD1_DATA0),
641 PINMUX_DATA(SD1_DATA1_MARK, FN_SD1_DATA1),
642 PINMUX_DATA(SD1_DATA2_MARK, FN_SD1_DATA2),
643 PINMUX_DATA(SD1_DATA3_MARK, FN_SD1_DATA3),
644
645 /* IPSR0 */
646 PINMUX_IPSR_DATA(IP0_0, SD1_CD),
647 PINMUX_IPSR_MODSEL_DATA(IP0_0, CAN0_RX, SEL_CAN0_0),
648 PINMUX_IPSR_DATA(IP0_9_8, SD1_WP),
649 PINMUX_IPSR_DATA(IP0_9_8, IRQ7),
650 PINMUX_IPSR_MODSEL_DATA(IP0_9_8, CAN0_TX, SEL_CAN0_0),
651 PINMUX_IPSR_DATA(IP0_10, MMC_CLK),
652 PINMUX_IPSR_DATA(IP0_10, SD2_CLK),
653 PINMUX_IPSR_DATA(IP0_11, MMC_CMD),
654 PINMUX_IPSR_DATA(IP0_11, SD2_CMD),
655 PINMUX_IPSR_DATA(IP0_12, MMC_D0),
656 PINMUX_IPSR_DATA(IP0_12, SD2_DATA0),
657 PINMUX_IPSR_DATA(IP0_13, MMC_D1),
658 PINMUX_IPSR_DATA(IP0_13, SD2_DATA1),
659 PINMUX_IPSR_DATA(IP0_14, MMC_D2),
660 PINMUX_IPSR_DATA(IP0_14, SD2_DATA2),
661 PINMUX_IPSR_DATA(IP0_15, MMC_D3),
662 PINMUX_IPSR_DATA(IP0_15, SD2_DATA3),
663 PINMUX_IPSR_DATA(IP0_16, MMC_D4),
664 PINMUX_IPSR_DATA(IP0_16, SD2_CD),
665 PINMUX_IPSR_DATA(IP0_17, MMC_D5),
666 PINMUX_IPSR_DATA(IP0_17, SD2_WP),
667 PINMUX_IPSR_DATA(IP0_19_18, MMC_D6),
668 PINMUX_IPSR_MODSEL_DATA(IP0_19_18, SCIF0_RXD, SEL_SCIF0_0),
669 PINMUX_IPSR_MODSEL_DATA(IP0_19_18, I2C2_SCL_B, SEL_I2C02_1),
670 PINMUX_IPSR_MODSEL_DATA(IP0_19_18, CAN1_RX, SEL_CAN1_0),
671 PINMUX_IPSR_DATA(IP0_21_20, MMC_D7),
672 PINMUX_IPSR_MODSEL_DATA(IP0_21_20, SCIF0_TXD, SEL_SCIF0_0),
673 PINMUX_IPSR_MODSEL_DATA(IP0_21_20, I2C2_SDA_B, SEL_I2C02_1),
674 PINMUX_IPSR_MODSEL_DATA(IP0_21_20, CAN1_TX, SEL_CAN1_0),
675 PINMUX_IPSR_DATA(IP0_23_22, D0),
676 PINMUX_IPSR_MODSEL_DATA(IP0_23_22, SCIFA3_SCK_B, SEL_SCIFA3_1),
677 PINMUX_IPSR_DATA(IP0_23_22, IRQ4),
678 PINMUX_IPSR_DATA(IP0_24, D1),
679 PINMUX_IPSR_MODSEL_DATA(IP0_24, SCIFA3_RXD_B, SEL_SCIFA3_1),
680 PINMUX_IPSR_DATA(IP0_25, D2),
681 PINMUX_IPSR_MODSEL_DATA(IP0_25, SCIFA3_TXD_B, SEL_SCIFA3_1),
682 PINMUX_IPSR_DATA(IP0_27_26, D3),
683 PINMUX_IPSR_MODSEL_DATA(IP0_27_26, I2C3_SCL_B, SEL_I2C03_1),
684 PINMUX_IPSR_MODSEL_DATA(IP0_27_26, SCIF5_RXD_B, SEL_SCIF5_1),
685 PINMUX_IPSR_DATA(IP0_29_28, D4),
686 PINMUX_IPSR_MODSEL_DATA(IP0_29_28, I2C3_SDA_B, SEL_I2C03_1),
687 PINMUX_IPSR_MODSEL_DATA(IP0_29_28, SCIF5_TXD_B, SEL_SCIF5_1),
688 PINMUX_IPSR_DATA(IP0_31_30, D5),
689 PINMUX_IPSR_MODSEL_DATA(IP0_31_30, SCIF4_RXD_B, SEL_SCIF4_1),
690 PINMUX_IPSR_MODSEL_DATA(IP0_31_30, I2C0_SCL_D, SEL_I2C00_3),
691
692 /* IPSR1 */
693 PINMUX_IPSR_DATA(IP1_1_0, D6),
694 PINMUX_IPSR_MODSEL_DATA(IP1_1_0, SCIF4_TXD_B, SEL_SCIF4_1),
695 PINMUX_IPSR_MODSEL_DATA(IP1_1_0, I2C0_SDA_D, SEL_I2C00_3),
696 PINMUX_IPSR_DATA(IP1_3_2, D7),
697 PINMUX_IPSR_DATA(IP1_3_2, IRQ3),
698 PINMUX_IPSR_MODSEL_DATA(IP1_3_2, TCLK1, SEL_TMU_0),
699 PINMUX_IPSR_DATA(IP1_3_2, PWM6_B),
700 PINMUX_IPSR_DATA(IP1_5_4, D8),
701 PINMUX_IPSR_DATA(IP1_5_4, HSCIF2_HRX),
702 PINMUX_IPSR_MODSEL_DATA(IP1_5_4, I2C1_SCL_B, SEL_I2C01_1),
703 PINMUX_IPSR_DATA(IP1_7_6, D9),
704 PINMUX_IPSR_DATA(IP1_7_6, HSCIF2_HTX),
705 PINMUX_IPSR_MODSEL_DATA(IP1_7_6, I2C1_SDA_B, SEL_I2C01_1),
706 PINMUX_IPSR_DATA(IP1_10_8, D10),
707 PINMUX_IPSR_DATA(IP1_10_8, HSCIF2_HSCK),
708 PINMUX_IPSR_MODSEL_DATA(IP1_10_8, SCIF1_SCK_C, SEL_SCIF1_2),
709 PINMUX_IPSR_DATA(IP1_10_8, IRQ6),
710 PINMUX_IPSR_DATA(IP1_10_8, PWM5_C),
711 PINMUX_IPSR_DATA(IP1_12_11, D11),
712 PINMUX_IPSR_DATA(IP1_12_11, HSCIF2_HCTS_N),
713 PINMUX_IPSR_MODSEL_DATA(IP1_12_11, SCIF1_RXD_C, SEL_SCIF1_2),
714 PINMUX_IPSR_MODSEL_DATA(IP1_12_11, I2C1_SCL_D, SEL_I2C01_3),
715 PINMUX_IPSR_DATA(IP1_14_13, D12),
716 PINMUX_IPSR_DATA(IP1_14_13, HSCIF2_HRTS_N),
717 PINMUX_IPSR_MODSEL_DATA(IP1_14_13, SCIF1_TXD_C, SEL_SCIF1_2),
718 PINMUX_IPSR_MODSEL_DATA(IP1_14_13, I2C1_SDA_D, SEL_I2C01_3),
719 PINMUX_IPSR_DATA(IP1_17_15, D13),
720 PINMUX_IPSR_MODSEL_DATA(IP1_17_15, SCIFA1_SCK, SEL_SCIFA1_0),
721 PINMUX_IPSR_DATA(IP1_17_15, TANS1),
722 PINMUX_IPSR_DATA(IP1_17_15, PWM2_C),
723 PINMUX_IPSR_MODSEL_DATA(IP1_17_15, TCLK2_B, SEL_TMU_1),
724 PINMUX_IPSR_DATA(IP1_19_18, D14),
725 PINMUX_IPSR_MODSEL_DATA(IP1_19_18, SCIFA1_RXD, SEL_SCIFA1_0),
726 PINMUX_IPSR_MODSEL_DATA(IP1_19_18, IIC0_SCL_B, SEL_IIC00_1),
727 PINMUX_IPSR_DATA(IP1_21_20, D15),
728 PINMUX_IPSR_MODSEL_DATA(IP1_21_20, SCIFA1_TXD, SEL_SCIFA1_0),
729 PINMUX_IPSR_MODSEL_DATA(IP1_21_20, IIC0_SDA_B, SEL_IIC00_1),
730 PINMUX_IPSR_DATA(IP1_23_22, A0),
731 PINMUX_IPSR_DATA(IP1_23_22, SCIFB1_SCK),
732 PINMUX_IPSR_DATA(IP1_23_22, PWM3_B),
733 PINMUX_IPSR_DATA(IP1_24, A1),
734 PINMUX_IPSR_DATA(IP1_24, SCIFB1_TXD),
735 PINMUX_IPSR_DATA(IP1_26, A3),
736 PINMUX_IPSR_DATA(IP1_26, SCIFB0_SCK),
737 PINMUX_IPSR_DATA(IP1_27, A4),
738 PINMUX_IPSR_DATA(IP1_27, SCIFB0_TXD),
739 PINMUX_IPSR_DATA(IP1_29_28, A5),
740 PINMUX_IPSR_DATA(IP1_29_28, SCIFB0_RXD),
741 PINMUX_IPSR_DATA(IP1_29_28, PWM4_B),
742 PINMUX_IPSR_DATA(IP1_29_28, TPUTO3_C),
743 PINMUX_IPSR_DATA(IP1_31_30, A6),
744 PINMUX_IPSR_DATA(IP1_31_30, SCIFB0_CTS_N),
745 PINMUX_IPSR_MODSEL_DATA(IP1_31_30, SCIFA4_RXD_B, SEL_SCIFA4_1),
746 PINMUX_IPSR_DATA(IP1_31_30, TPUTO2_C),
747
748 /* IPSR2 */
749 PINMUX_IPSR_DATA(IP2_1_0, A7),
750 PINMUX_IPSR_DATA(IP2_1_0, SCIFB0_RTS_N),
751 PINMUX_IPSR_MODSEL_DATA(IP2_1_0, SCIFA4_TXD_B, SEL_SCIFA4_1),
752 PINMUX_IPSR_DATA(IP2_3_2, A8),
753 PINMUX_IPSR_MODSEL_DATA(IP2_3_2, MSIOF1_RXD, SEL_MSI1_0),
754 PINMUX_IPSR_MODSEL_DATA(IP2_3_2, SCIFA0_RXD_B, SEL_SCIFA0_1),
755 PINMUX_IPSR_DATA(IP2_5_4, A9),
756 PINMUX_IPSR_MODSEL_DATA(IP2_5_4, MSIOF1_TXD, SEL_MSI1_0),
757 PINMUX_IPSR_MODSEL_DATA(IP2_5_4, SCIFA0_TXD_B, SEL_SCIFA0_1),
758 PINMUX_IPSR_DATA(IP2_7_6, A10),
759 PINMUX_IPSR_MODSEL_DATA(IP2_7_6, MSIOF1_SCK, SEL_MSI1_0),
760 PINMUX_IPSR_MODSEL_DATA(IP2_7_6, IIC1_SCL_B, SEL_IIC01_1),
761 PINMUX_IPSR_DATA(IP2_9_8, A11),
762 PINMUX_IPSR_MODSEL_DATA(IP2_9_8, MSIOF1_SYNC, SEL_MSI1_0),
763 PINMUX_IPSR_MODSEL_DATA(IP2_9_8, IIC1_SDA_B, SEL_IIC01_1),
764 PINMUX_IPSR_DATA(IP2_11_10, A12),
765 PINMUX_IPSR_MODSEL_DATA(IP2_11_10, MSIOF1_SS1, SEL_MSI1_0),
766 PINMUX_IPSR_MODSEL_DATA(IP2_11_10, SCIFA5_RXD_B, SEL_SCIFA5_1),
767 PINMUX_IPSR_DATA(IP2_13_12, A13),
768 PINMUX_IPSR_MODSEL_DATA(IP2_13_12, MSIOF1_SS2, SEL_MSI1_0),
769 PINMUX_IPSR_MODSEL_DATA(IP2_13_12, SCIFA5_TXD_B, SEL_SCIFA5_1),
770 PINMUX_IPSR_DATA(IP2_15_14, A14),
771 PINMUX_IPSR_MODSEL_DATA(IP2_15_14, MSIOF2_RXD, SEL_MSI2_0),
772 PINMUX_IPSR_MODSEL_DATA(IP2_15_14, HSCIF0_HRX_B, SEL_HSCIF0_1),
773 PINMUX_IPSR_MODSEL_DATA(IP2_15_14, DREQ1_N, SEL_LBS_0),
774 PINMUX_IPSR_DATA(IP2_17_16, A15),
775 PINMUX_IPSR_MODSEL_DATA(IP2_17_16, MSIOF2_TXD, SEL_MSI2_0),
776 PINMUX_IPSR_MODSEL_DATA(IP2_17_16, HSCIF0_HTX_B, SEL_HSCIF0_1),
777 PINMUX_IPSR_MODSEL_DATA(IP2_17_16, DACK1, SEL_LBS_0),
778 PINMUX_IPSR_DATA(IP2_20_18, A16),
779 PINMUX_IPSR_MODSEL_DATA(IP2_20_18, MSIOF2_SCK, SEL_MSI2_0),
780 PINMUX_IPSR_MODSEL_DATA(IP2_20_18, HSCIF0_HSCK_B, SEL_HSCIF0_1),
781 PINMUX_IPSR_MODSEL_DATA(IP2_20_18, SPEEDIN, SEL_RSP_0),
782 PINMUX_IPSR_MODSEL_DATA(IP2_20_18, VSP, SEL_SPDM_0),
783 PINMUX_IPSR_MODSEL_DATA(IP2_20_18, CAN_CLK_C, SEL_CAN_2),
784 PINMUX_IPSR_DATA(IP2_20_18, TPUTO2_B),
785 PINMUX_IPSR_DATA(IP2_23_21, A17),
786 PINMUX_IPSR_MODSEL_DATA(IP2_23_21, MSIOF2_SYNC, SEL_MSI2_0),
787 PINMUX_IPSR_MODSEL_DATA(IP2_23_21, SCIF4_RXD_E, SEL_SCIF4_4),
788 PINMUX_IPSR_MODSEL_DATA(IP2_23_21, CAN1_RX_B, SEL_CAN1_1),
789 PINMUX_IPSR_MODSEL_DATA(IP2_23_21, AVB_AVTP_CAPTURE_B, SEL_AVB_1),
790 PINMUX_IPSR_DATA(IP2_26_24, A18),
791 PINMUX_IPSR_MODSEL_DATA(IP2_26_24, MSIOF2_SS1, SEL_MSI2_0),
792 PINMUX_IPSR_MODSEL_DATA(IP2_26_24, SCIF4_TXD_E, SEL_SCIF4_4),
793 PINMUX_IPSR_MODSEL_DATA(IP2_26_24, CAN1_TX_B, SEL_CAN1_1),
794 PINMUX_IPSR_MODSEL_DATA(IP2_26_24, AVB_AVTP_MATCH_B, SEL_AVB_1),
795 PINMUX_IPSR_DATA(IP2_29_27, A19),
796 PINMUX_IPSR_MODSEL_DATA(IP2_29_27, MSIOF2_SS2, SEL_MSI2_0),
797 PINMUX_IPSR_DATA(IP2_29_27, PWM4),
798 PINMUX_IPSR_DATA(IP2_29_27, TPUTO2),
799 PINMUX_IPSR_DATA(IP2_29_27, MOUT0),
800 PINMUX_IPSR_DATA(IP2_31_30, A20),
801 PINMUX_IPSR_DATA(IP2_31_30, SPCLK),
802 PINMUX_IPSR_DATA(IP2_29_27, MOUT1),
803
804 /* IPSR3 */
805 PINMUX_IPSR_DATA(IP3_1_0, A21),
806 PINMUX_IPSR_DATA(IP3_1_0, MOSI_IO0),
807 PINMUX_IPSR_DATA(IP3_1_0, MOUT2),
808 PINMUX_IPSR_DATA(IP3_3_2, A22),
809 PINMUX_IPSR_DATA(IP3_3_2, MISO_IO1),
810 PINMUX_IPSR_DATA(IP3_3_2, MOUT5),
811 PINMUX_IPSR_DATA(IP3_3_2, ATADIR1_N),
812 PINMUX_IPSR_DATA(IP3_5_4, A23),
813 PINMUX_IPSR_DATA(IP3_5_4, IO2),
814 PINMUX_IPSR_DATA(IP3_5_4, MOUT6),
815 PINMUX_IPSR_DATA(IP3_5_4, ATAWR1_N),
816 PINMUX_IPSR_DATA(IP3_7_6, A24),
817 PINMUX_IPSR_DATA(IP3_7_6, IO3),
818 PINMUX_IPSR_DATA(IP3_7_6, EX_WAIT2),
819 PINMUX_IPSR_DATA(IP3_9_8, A25),
820 PINMUX_IPSR_DATA(IP3_9_8, SSL),
821 PINMUX_IPSR_DATA(IP3_9_8, ATARD1_N),
822 PINMUX_IPSR_DATA(IP3_10, CS0_N),
823 PINMUX_IPSR_DATA(IP3_10, VI1_DATA8),
824 PINMUX_IPSR_DATA(IP3_11, CS1_N_A26),
825 PINMUX_IPSR_DATA(IP3_11, VI1_DATA9),
826 PINMUX_IPSR_DATA(IP3_12, EX_CS0_N),
827 PINMUX_IPSR_DATA(IP3_12, VI1_DATA10),
828 PINMUX_IPSR_DATA(IP3_14_13, EX_CS1_N),
829 PINMUX_IPSR_DATA(IP3_14_13, TPUTO3_B),
830 PINMUX_IPSR_DATA(IP3_14_13, SCIFB2_RXD),
831 PINMUX_IPSR_DATA(IP3_14_13, VI1_DATA11),
832 PINMUX_IPSR_DATA(IP3_17_15, EX_CS2_N),
833 PINMUX_IPSR_DATA(IP3_17_15, PWM0),
834 PINMUX_IPSR_MODSEL_DATA(IP3_17_15, SCIF4_RXD_C, SEL_SCIF4_2),
835 PINMUX_IPSR_MODSEL_DATA(IP3_17_15, TS_SDATA_B, SEL_TSIF0_1),
836 PINMUX_IPSR_MODSEL_DATA(IP3_17_15, RIF0_SYNC, SEL_DR0_0),
837 PINMUX_IPSR_DATA(IP3_17_15, TPUTO3),
838 PINMUX_IPSR_DATA(IP3_17_15, SCIFB2_TXD),
839 PINMUX_IPSR_MODSEL_DATA(IP3_17_15, SDATA_B, SEL_FSN_1),
840 PINMUX_IPSR_DATA(IP3_20_18, EX_CS3_N),
841 PINMUX_IPSR_MODSEL_DATA(IP3_20_18, SCIFA2_SCK, SEL_SCIFA2_0),
842 PINMUX_IPSR_MODSEL_DATA(IP3_20_18, SCIF4_TXD_C, SEL_SCIF4_2),
843 PINMUX_IPSR_MODSEL_DATA(IP3_20_18, TS_SCK_B, SEL_TSIF0_1),
844 PINMUX_IPSR_MODSEL_DATA(IP3_20_18, RIF0_CLK, SEL_DR0_0),
845 PINMUX_IPSR_MODSEL_DATA(IP3_20_18, BPFCLK, SEL_DARC_0),
846 PINMUX_IPSR_DATA(IP3_20_18, SCIFB2_SCK),
847 PINMUX_IPSR_MODSEL_DATA(IP3_20_18, MDATA_B, SEL_FSN_1),
848 PINMUX_IPSR_DATA(IP3_23_21, EX_CS4_N),
849 PINMUX_IPSR_MODSEL_DATA(IP3_23_21, SCIFA2_RXD, SEL_SCIFA2_0),
850 PINMUX_IPSR_MODSEL_DATA(IP3_23_21, I2C2_SCL_E, SEL_I2C02_4),
851 PINMUX_IPSR_MODSEL_DATA(IP3_23_21, TS_SDEN_B, SEL_TSIF0_1),
852 PINMUX_IPSR_MODSEL_DATA(IP3_23_21, RIF0_D0, SEL_DR0_0),
853 PINMUX_IPSR_MODSEL_DATA(IP3_23_21, FMCLK, SEL_DARC_0),
854 PINMUX_IPSR_DATA(IP3_23_21, SCIFB2_CTS_N),
855 PINMUX_IPSR_MODSEL_DATA(IP3_23_21, SCKZ_B, SEL_FSN_1),
856 PINMUX_IPSR_DATA(IP3_26_24, EX_CS5_N),
857 PINMUX_IPSR_MODSEL_DATA(IP3_26_24, SCIFA2_TXD, SEL_SCIFA2_0),
858 PINMUX_IPSR_MODSEL_DATA(IP3_26_24, I2C2_SDA_E, SEL_I2C02_4),
859 PINMUX_IPSR_MODSEL_DATA(IP3_26_24, TS_SPSYNC_B, SEL_TSIF0_1),
860 PINMUX_IPSR_MODSEL_DATA(IP3_26_24, RIF0_D1, SEL_DR1_0),
861 PINMUX_IPSR_MODSEL_DATA(IP3_26_24, FMIN, SEL_DARC_0),
862 PINMUX_IPSR_DATA(IP3_26_24, SCIFB2_RTS_N),
863 PINMUX_IPSR_MODSEL_DATA(IP3_26_24, STM_N_B, SEL_FSN_1),
864 PINMUX_IPSR_DATA(IP3_29_27, BS_N),
865 PINMUX_IPSR_DATA(IP3_29_27, DRACK0),
866 PINMUX_IPSR_DATA(IP3_29_27, PWM1_C),
867 PINMUX_IPSR_DATA(IP3_29_27, TPUTO0_C),
868 PINMUX_IPSR_DATA(IP3_29_27, ATACS01_N),
869 PINMUX_IPSR_MODSEL_DATA(IP3_29_27, MTS_N_B, SEL_FSN_1),
870 PINMUX_IPSR_DATA(IP3_30, RD_N),
871 PINMUX_IPSR_DATA(IP3_30, ATACS11_N),
872 PINMUX_IPSR_DATA(IP3_31, RD_WR_N),
873 PINMUX_IPSR_DATA(IP3_31, ATAG1_N),
874
875 /* IPSR4 */
876 PINMUX_IPSR_DATA(IP4_1_0, EX_WAIT0),
877 PINMUX_IPSR_MODSEL_DATA(IP4_1_0, CAN_CLK_B, SEL_CAN_1),
878 PINMUX_IPSR_MODSEL_DATA(IP4_1_0, SCIF_CLK, SEL_SCIF0_0),
879 PINMUX_IPSR_DATA(IP4_1_0, PWMFSW0),
880 PINMUX_IPSR_DATA(IP4_4_2, DU0_DR0),
881 PINMUX_IPSR_DATA(IP4_4_2, LCDOUT16),
882 PINMUX_IPSR_MODSEL_DATA(IP4_4_2, SCIF5_RXD_C, SEL_SCIF5_2),
883 PINMUX_IPSR_MODSEL_DATA(IP4_4_2, I2C2_SCL_D, SEL_I2C02_3),
884 PINMUX_IPSR_DATA(IP4_4_2, CC50_STATE0),
885 PINMUX_IPSR_DATA(IP4_7_5, DU0_DR1),
886 PINMUX_IPSR_DATA(IP4_7_5, LCDOUT17),
887 PINMUX_IPSR_MODSEL_DATA(IP4_7_5, SCIF5_TXD_C, SEL_SCIF5_2),
888 PINMUX_IPSR_MODSEL_DATA(IP4_7_5, I2C2_SDA_D, SEL_I2C02_3),
889 PINMUX_IPSR_DATA(IP4_9_8, CC50_STATE1),
890 PINMUX_IPSR_DATA(IP4_9_8, DU0_DR2),
891 PINMUX_IPSR_DATA(IP4_9_8, LCDOUT18),
892 PINMUX_IPSR_DATA(IP4_9_8, CC50_STATE2),
893 PINMUX_IPSR_DATA(IP4_11_10, DU0_DR3),
894 PINMUX_IPSR_DATA(IP4_11_10, LCDOUT19),
895 PINMUX_IPSR_DATA(IP4_11_10, CC50_STATE3),
896 PINMUX_IPSR_DATA(IP4_13_12, DU0_DR4),
897 PINMUX_IPSR_DATA(IP4_13_12, LCDOUT20),
898 PINMUX_IPSR_DATA(IP4_13_12, CC50_STATE4),
899 PINMUX_IPSR_DATA(IP4_15_14, DU0_DR5),
900 PINMUX_IPSR_DATA(IP4_15_14, LCDOUT21),
901 PINMUX_IPSR_DATA(IP4_15_14, CC50_STATE5),
902 PINMUX_IPSR_DATA(IP4_17_16, DU0_DR6),
903 PINMUX_IPSR_DATA(IP4_17_16, LCDOUT22),
904 PINMUX_IPSR_DATA(IP4_17_16, CC50_STATE6),
905 PINMUX_IPSR_DATA(IP4_19_18, DU0_DR7),
906 PINMUX_IPSR_DATA(IP4_19_18, LCDOUT23),
907 PINMUX_IPSR_DATA(IP4_19_18, CC50_STATE7),
908 PINMUX_IPSR_DATA(IP4_22_20, DU0_DG0),
909 PINMUX_IPSR_DATA(IP4_22_20, LCDOUT8),
910 PINMUX_IPSR_MODSEL_DATA(IP4_22_20, SCIFA0_RXD_C, SEL_SCIFA0_2),
911 PINMUX_IPSR_MODSEL_DATA(IP4_22_20, I2C3_SCL_D, SEL_I2C03_3),
912 PINMUX_IPSR_DATA(IP4_22_20, CC50_STATE8),
913 PINMUX_IPSR_DATA(IP4_25_23, DU0_DG1),
914 PINMUX_IPSR_DATA(IP4_25_23, LCDOUT9),
915 PINMUX_IPSR_MODSEL_DATA(IP4_25_23, SCIFA0_TXD_C, SEL_SCIFA0_2),
916 PINMUX_IPSR_MODSEL_DATA(IP4_25_23, I2C3_SDA_D, SEL_I2C03_3),
917 PINMUX_IPSR_DATA(IP4_25_23, CC50_STATE9),
918 PINMUX_IPSR_DATA(IP4_27_26, DU0_DG2),
919 PINMUX_IPSR_DATA(IP4_27_26, LCDOUT10),
920 PINMUX_IPSR_DATA(IP4_27_26, CC50_STATE10),
921 PINMUX_IPSR_DATA(IP4_29_28, DU0_DG3),
922 PINMUX_IPSR_DATA(IP4_29_28, LCDOUT11),
923 PINMUX_IPSR_DATA(IP4_29_28, CC50_STATE11),
924 PINMUX_IPSR_DATA(IP4_31_30, DU0_DG4),
925 PINMUX_IPSR_DATA(IP4_31_30, LCDOUT12),
926 PINMUX_IPSR_DATA(IP4_31_30, CC50_STATE12),
927
928 /* IPSR5 */
929 PINMUX_IPSR_DATA(IP5_1_0, DU0_DG5),
930 PINMUX_IPSR_DATA(IP5_1_0, LCDOUT13),
931 PINMUX_IPSR_DATA(IP5_1_0, CC50_STATE13),
932 PINMUX_IPSR_DATA(IP5_3_2, DU0_DG6),
933 PINMUX_IPSR_DATA(IP5_3_2, LCDOUT14),
934 PINMUX_IPSR_DATA(IP5_3_2, CC50_STATE14),
935 PINMUX_IPSR_DATA(IP5_5_4, DU0_DG7),
936 PINMUX_IPSR_DATA(IP5_5_4, LCDOUT15),
937 PINMUX_IPSR_DATA(IP5_5_4, CC50_STATE15),
938 PINMUX_IPSR_DATA(IP5_8_6, DU0_DB0),
939 PINMUX_IPSR_DATA(IP5_8_6, LCDOUT0),
940 PINMUX_IPSR_MODSEL_DATA(IP5_8_6, SCIFA4_RXD_C, SEL_SCIFA4_2),
941 PINMUX_IPSR_MODSEL_DATA(IP5_8_6, I2C4_SCL_D, SEL_I2C04_3),
942 PINMUX_IPSR_MODSEL_DATA(IP7_8_6, CAN0_RX_C, SEL_CAN0_2),
943 PINMUX_IPSR_DATA(IP5_8_6, CC50_STATE16),
944 PINMUX_IPSR_DATA(IP5_11_9, DU0_DB1),
945 PINMUX_IPSR_DATA(IP5_11_9, LCDOUT1),
946 PINMUX_IPSR_MODSEL_DATA(IP5_11_9, SCIFA4_TXD_C, SEL_SCIFA4_2),
947 PINMUX_IPSR_MODSEL_DATA(IP5_11_9, I2C4_SDA_D, SEL_I2C04_3),
948 PINMUX_IPSR_MODSEL_DATA(IP5_11_9, CAN0_TX_C, SEL_CAN0_2),
949 PINMUX_IPSR_DATA(IP5_11_9, CC50_STATE17),
950 PINMUX_IPSR_DATA(IP5_13_12, DU0_DB2),
951 PINMUX_IPSR_DATA(IP5_13_12, LCDOUT2),
952 PINMUX_IPSR_DATA(IP5_13_12, CC50_STATE18),
953 PINMUX_IPSR_DATA(IP5_15_14, DU0_DB3),
954 PINMUX_IPSR_DATA(IP5_15_14, LCDOUT3),
955 PINMUX_IPSR_DATA(IP5_15_14, CC50_STATE19),
956 PINMUX_IPSR_DATA(IP5_17_16, DU0_DB4),
957 PINMUX_IPSR_DATA(IP5_17_16, LCDOUT4),
958 PINMUX_IPSR_DATA(IP5_17_16, CC50_STATE20),
959 PINMUX_IPSR_DATA(IP5_19_18, DU0_DB5),
960 PINMUX_IPSR_DATA(IP5_19_18, LCDOUT5),
961 PINMUX_IPSR_DATA(IP5_19_18, CC50_STATE21),
962 PINMUX_IPSR_DATA(IP5_21_20, DU0_DB6),
963 PINMUX_IPSR_DATA(IP5_21_20, LCDOUT6),
964 PINMUX_IPSR_DATA(IP5_21_20, CC50_STATE22),
965 PINMUX_IPSR_DATA(IP5_23_22, DU0_DB7),
966 PINMUX_IPSR_DATA(IP5_23_22, LCDOUT7),
967 PINMUX_IPSR_DATA(IP5_23_22, CC50_STATE23),
968 PINMUX_IPSR_DATA(IP5_25_24, DU0_DOTCLKIN),
969 PINMUX_IPSR_DATA(IP5_25_24, QSTVA_QVS),
970 PINMUX_IPSR_DATA(IP5_25_24, CC50_STATE24),
971 PINMUX_IPSR_DATA(IP5_27_26, DU0_DOTCLKOUT0),
972 PINMUX_IPSR_DATA(IP5_27_26, QCLK),
973 PINMUX_IPSR_DATA(IP5_27_26, CC50_STATE25),
974 PINMUX_IPSR_DATA(IP5_29_28, DU0_DOTCLKOUT1),
975 PINMUX_IPSR_DATA(IP5_29_28, QSTVB_QVE),
976 PINMUX_IPSR_DATA(IP5_29_28, CC50_STATE26),
977 PINMUX_IPSR_DATA(IP5_31_30, DU0_EXHSYNC_DU0_HSYNC),
978 PINMUX_IPSR_DATA(IP5_31_30, QSTH_QHS),
979 PINMUX_IPSR_DATA(IP5_31_30, CC50_STATE27),
980
981 /* IPSR6 */
982 PINMUX_IPSR_DATA(IP6_1_0, DU0_EXVSYNC_DU0_VSYNC),
983 PINMUX_IPSR_DATA(IP6_1_0, QSTB_QHE),
984 PINMUX_IPSR_DATA(IP6_1_0, CC50_STATE28),
985 PINMUX_IPSR_DATA(IP6_3_2, DU0_EXODDF_DU0_ODDF_DISP_CDE),
986 PINMUX_IPSR_DATA(IP6_3_2, QCPV_QDE),
987 PINMUX_IPSR_DATA(IP6_3_2, CC50_STATE29),
988 PINMUX_IPSR_DATA(IP6_5_4, DU0_DISP),
989 PINMUX_IPSR_DATA(IP6_5_4, QPOLA),
990 PINMUX_IPSR_DATA(IP6_5_4, CC50_STATE30),
991 PINMUX_IPSR_DATA(IP6_7_6, DU0_CDE),
992 PINMUX_IPSR_DATA(IP6_7_6, QPOLB),
993 PINMUX_IPSR_DATA(IP6_7_6, CC50_STATE31),
994 PINMUX_IPSR_DATA(IP6_8, VI0_CLK),
995 PINMUX_IPSR_DATA(IP6_8, AVB_RX_CLK),
996 PINMUX_IPSR_DATA(IP6_9, VI0_DATA0_VI0_B0),
997 PINMUX_IPSR_DATA(IP6_9, AVB_RX_DV),
998 PINMUX_IPSR_DATA(IP6_10, VI0_DATA1_VI0_B1),
999 PINMUX_IPSR_DATA(IP6_10, AVB_RXD0),
1000 PINMUX_IPSR_DATA(IP6_11, VI0_DATA2_VI0_B2),
1001 PINMUX_IPSR_DATA(IP6_11, AVB_RXD1),
1002 PINMUX_IPSR_DATA(IP6_12, VI0_DATA3_VI0_B3),
1003 PINMUX_IPSR_DATA(IP6_12, AVB_RXD2),
1004 PINMUX_IPSR_DATA(IP6_13, VI0_DATA4_VI0_B4),
1005 PINMUX_IPSR_DATA(IP6_13, AVB_RXD3),
1006 PINMUX_IPSR_DATA(IP6_14, VI0_DATA5_VI0_B5),
1007 PINMUX_IPSR_DATA(IP6_14, AVB_RXD4),
1008 PINMUX_IPSR_DATA(IP6_15, VI0_DATA6_VI0_B6),
1009 PINMUX_IPSR_DATA(IP6_15, AVB_RXD5),
1010 PINMUX_IPSR_DATA(IP6_16, VI0_DATA7_VI0_B7),
1011 PINMUX_IPSR_DATA(IP6_16, AVB_RXD6),
1012 PINMUX_IPSR_DATA(IP6_19_17, VI0_CLKENB),
1013 PINMUX_IPSR_MODSEL_DATA(IP6_19_17, I2C3_SCL, SEL_I2C03_0),
1014 PINMUX_IPSR_MODSEL_DATA(IP6_19_17, SCIFA5_RXD_C, SEL_SCIFA5_2),
1015 PINMUX_IPSR_MODSEL_DATA(IP6_19_17, IETX_C, SEL_IEB_2),
1016 PINMUX_IPSR_DATA(IP6_19_17, AVB_RXD7),
1017 PINMUX_IPSR_DATA(IP6_22_20, VI0_FIELD),
1018 PINMUX_IPSR_MODSEL_DATA(IP6_22_20, I2C3_SDA, SEL_I2C03_0),
1019 PINMUX_IPSR_MODSEL_DATA(IP6_22_20, SCIFA5_TXD_C, SEL_SCIFA5_2),
1020 PINMUX_IPSR_MODSEL_DATA(IP6_22_20, IECLK_C, SEL_IEB_2),
1021 PINMUX_IPSR_DATA(IP6_22_20, AVB_RX_ER),
1022 PINMUX_IPSR_DATA(IP6_25_23, VI0_HSYNC_N),
1023 PINMUX_IPSR_MODSEL_DATA(IP6_25_23, SCIF0_RXD_B, SEL_SCIF0_1),
1024 PINMUX_IPSR_MODSEL_DATA(IP6_25_23, I2C0_SCL_C, SEL_I2C00_2),
1025 PINMUX_IPSR_MODSEL_DATA(IP6_25_23, IERX_C, SEL_IEB_2),
1026 PINMUX_IPSR_DATA(IP6_25_23, AVB_COL),
1027 PINMUX_IPSR_DATA(IP6_28_26, VI0_VSYNC_N),
1028 PINMUX_IPSR_MODSEL_DATA(IP6_28_26, SCIF0_TXD_B, SEL_SCIF0_1),
1029 PINMUX_IPSR_MODSEL_DATA(IP6_28_26, I2C0_SDA_C, SEL_I2C00_2),
1030 PINMUX_IPSR_MODSEL_DATA(IP6_28_26, AUDIO_CLKOUT_B, SEL_ADG_1),
1031 PINMUX_IPSR_DATA(IP6_28_26, AVB_TX_EN),
1032 PINMUX_IPSR_MODSEL_DATA(IP6_31_29, ETH_MDIO, SEL_ETH_0),
1033 PINMUX_IPSR_DATA(IP6_31_29, VI0_G0),
1034 PINMUX_IPSR_MODSEL_DATA(IP6_31_29, MSIOF2_RXD_B, SEL_MSI2_1),
1035 PINMUX_IPSR_MODSEL_DATA(IP6_31_29, IIC0_SCL_D, SEL_IIC00_3),
1036 PINMUX_IPSR_DATA(IP6_31_29, AVB_TX_CLK),
1037 PINMUX_IPSR_MODSEL_DATA(IP6_31_29, ADIDATA, SEL_RAD_0),
1038 PINMUX_IPSR_MODSEL_DATA(IP6_31_29, AD_DI, SEL_ADI_0),
1039
1040 /* IPSR7 */
1041 PINMUX_IPSR_MODSEL_DATA(IP7_2_0, ETH_CRS_DV, SEL_ETH_0),
1042 PINMUX_IPSR_DATA(IP7_2_0, VI0_G1),
1043 PINMUX_IPSR_MODSEL_DATA(IP7_2_0, MSIOF2_TXD_B, SEL_MSI2_1),
1044 PINMUX_IPSR_MODSEL_DATA(IP7_2_0, IIC0_SDA_D, SEL_IIC00_3),
1045 PINMUX_IPSR_DATA(IP7_2_0, AVB_TXD0),
1046 PINMUX_IPSR_MODSEL_DATA(IP7_2_0, ADICS_SAMP, SEL_RAD_0),
1047 PINMUX_IPSR_MODSEL_DATA(IP7_2_0, AD_DO, SEL_ADI_0),
1048 PINMUX_IPSR_MODSEL_DATA(IP7_5_3, ETH_RX_ER, SEL_ETH_0),
1049 PINMUX_IPSR_DATA(IP7_5_3, VI0_G2),
1050 PINMUX_IPSR_MODSEL_DATA(IP7_5_3, MSIOF2_SCK_B, SEL_MSI2_1),
1051 PINMUX_IPSR_MODSEL_DATA(IP7_5_3, CAN0_RX_B, SEL_CAN0_1),
1052 PINMUX_IPSR_DATA(IP7_5_3, AVB_TXD1),
1053 PINMUX_IPSR_MODSEL_DATA(IP7_5_3, ADICLK, SEL_RAD_0),
1054 PINMUX_IPSR_MODSEL_DATA(IP7_5_3, AD_CLK, SEL_ADI_0),
1055 PINMUX_IPSR_MODSEL_DATA(IP7_8_6, ETH_RXD0, SEL_ETH_0),
1056 PINMUX_IPSR_DATA(IP7_8_6, VI0_G3),
1057 PINMUX_IPSR_MODSEL_DATA(IP7_8_6, MSIOF2_SYNC_B, SEL_MSI2_1),
1058 PINMUX_IPSR_MODSEL_DATA(IP7_8_6, CAN0_TX_B, SEL_CAN0_1),
1059 PINMUX_IPSR_DATA(IP7_8_6, AVB_TXD2),
1060 PINMUX_IPSR_MODSEL_DATA(IP7_8_6, ADICHS0, SEL_RAD_0),
1061 PINMUX_IPSR_MODSEL_DATA(IP7_8_6, AD_NCS_N, SEL_ADI_0),
1062 PINMUX_IPSR_MODSEL_DATA(IP7_11_9, ETH_RXD1, SEL_ETH_0),
1063 PINMUX_IPSR_DATA(IP7_11_9, VI0_G4),
1064 PINMUX_IPSR_MODSEL_DATA(IP7_11_9, MSIOF2_SS1_B, SEL_MSI2_1),
1065 PINMUX_IPSR_MODSEL_DATA(IP7_11_9, SCIF4_RXD_D, SEL_SCIF4_3),
1066 PINMUX_IPSR_DATA(IP7_11_9, AVB_TXD3),
1067 PINMUX_IPSR_MODSEL_DATA(IP7_11_9, ADICHS1, SEL_RAD_0),
1068 PINMUX_IPSR_MODSEL_DATA(IP7_14_12, ETH_LINK, SEL_ETH_0),
1069 PINMUX_IPSR_DATA(IP7_14_12, VI0_G5),
1070 PINMUX_IPSR_MODSEL_DATA(IP7_14_12, MSIOF2_SS2_B, SEL_MSI2_1),
1071 PINMUX_IPSR_MODSEL_DATA(IP7_14_12, SCIF4_TXD_D, SEL_SCIF4_3),
1072 PINMUX_IPSR_DATA(IP7_14_12, AVB_TXD4),
1073 PINMUX_IPSR_MODSEL_DATA(IP7_14_12, ADICHS2, SEL_RAD_0),
1074 PINMUX_IPSR_MODSEL_DATA(IP7_17_15, ETH_REFCLK, SEL_ETH_0),
1075 PINMUX_IPSR_DATA(IP7_17_15, VI0_G6),
1076 PINMUX_IPSR_MODSEL_DATA(IP7_17_15, SCIF2_SCK_C, SEL_SCIF2_2),
1077 PINMUX_IPSR_DATA(IP7_17_15, AVB_TXD5),
1078 PINMUX_IPSR_MODSEL_DATA(IP7_17_15, SSI_SCK5_B, SEL_SSI5_1),
1079 PINMUX_IPSR_MODSEL_DATA(IP7_20_18, ETH_TXD1, SEL_ETH_0),
1080 PINMUX_IPSR_DATA(IP7_20_18, VI0_G7),
1081 PINMUX_IPSR_MODSEL_DATA(IP7_20_18, SCIF2_RXD_C, SEL_SCIF2_2),
1082 PINMUX_IPSR_MODSEL_DATA(IP7_20_18, IIC1_SCL_D, SEL_IIC01_3),
1083 PINMUX_IPSR_DATA(IP7_20_18, AVB_TXD6),
1084 PINMUX_IPSR_MODSEL_DATA(IP7_20_18, SSI_WS5_B, SEL_SSI5_1),
1085 PINMUX_IPSR_MODSEL_DATA(IP7_23_21, ETH_TX_EN, SEL_ETH_0),
1086 PINMUX_IPSR_DATA(IP7_23_21, VI0_R0),
1087 PINMUX_IPSR_MODSEL_DATA(IP7_23_21, SCIF2_TXD_C, SEL_SCIF2_2),
1088 PINMUX_IPSR_MODSEL_DATA(IP7_23_21, IIC1_SDA_D, SEL_IIC01_3),
1089 PINMUX_IPSR_DATA(IP7_23_21, AVB_TXD7),
1090 PINMUX_IPSR_MODSEL_DATA(IP7_23_21, SSI_SDATA5_B, SEL_SSI5_1),
1091 PINMUX_IPSR_MODSEL_DATA(IP7_26_24, ETH_MAGIC, SEL_ETH_0),
1092 PINMUX_IPSR_DATA(IP7_26_24, VI0_R1),
1093 PINMUX_IPSR_MODSEL_DATA(IP7_26_24, SCIF3_SCK_B, SEL_SCIF3_1),
1094 PINMUX_IPSR_DATA(IP7_26_24, AVB_TX_ER),
1095 PINMUX_IPSR_MODSEL_DATA(IP7_26_24, SSI_SCK6_B, SEL_SSI6_1),
1096 PINMUX_IPSR_MODSEL_DATA(IP7_29_27, ETH_TXD0, SEL_ETH_0),
1097 PINMUX_IPSR_DATA(IP7_29_27, VI0_R2),
1098 PINMUX_IPSR_MODSEL_DATA(IP7_29_27, SCIF3_RXD_B, SEL_SCIF3_1),
1099 PINMUX_IPSR_MODSEL_DATA(IP7_29_27, I2C4_SCL_E, SEL_I2C04_4),
1100 PINMUX_IPSR_DATA(IP7_29_27, AVB_GTX_CLK),
1101 PINMUX_IPSR_MODSEL_DATA(IP7_29_27, SSI_WS6_B, SEL_SSI6_1),
1102 PINMUX_IPSR_DATA(IP7_31, DREQ0_N),
1103 PINMUX_IPSR_DATA(IP7_31, SCIFB1_RXD),
1104
1105 /* IPSR8 */
1106 PINMUX_IPSR_MODSEL_DATA(IP8_2_0, ETH_MDC, SEL_ETH_0),
1107 PINMUX_IPSR_DATA(IP8_2_0, VI0_R3),
1108 PINMUX_IPSR_MODSEL_DATA(IP8_2_0, SCIF3_TXD_B, SEL_SCIF3_1),
1109 PINMUX_IPSR_MODSEL_DATA(IP8_2_0, I2C4_SDA_E, SEL_I2C04_4),
1110 PINMUX_IPSR_DATA(IP8_2_0, AVB_MDC),
1111 PINMUX_IPSR_MODSEL_DATA(IP8_2_0, SSI_SDATA6_B, SEL_SSI6_1),
1112 PINMUX_IPSR_MODSEL_DATA(IP8_5_3, HSCIF0_HRX, SEL_HSCIF0_0),
1113 PINMUX_IPSR_DATA(IP8_5_3, VI0_R4),
1114 PINMUX_IPSR_MODSEL_DATA(IP8_5_3, I2C1_SCL_C, SEL_I2C01_2),
1115 PINMUX_IPSR_MODSEL_DATA(IP8_5_3, AUDIO_CLKA_B, SEL_ADG_1),
1116 PINMUX_IPSR_DATA(IP8_5_3, AVB_MDIO),
1117 PINMUX_IPSR_MODSEL_DATA(IP8_5_3, SSI_SCK78_B, SEL_SSI7_1),
1118 PINMUX_IPSR_MODSEL_DATA(IP8_8_6, HSCIF0_HTX, SEL_HSCIF0_0),
1119 PINMUX_IPSR_DATA(IP8_8_6, VI0_R5),
1120 PINMUX_IPSR_MODSEL_DATA(IP8_8_6, I2C1_SDA_C, SEL_I2C01_2),
1121 PINMUX_IPSR_MODSEL_DATA(IP8_8_6, AUDIO_CLKB_B, SEL_ADG_1),
1122 PINMUX_IPSR_DATA(IP8_5_3, AVB_LINK),
1123 PINMUX_IPSR_MODSEL_DATA(IP8_8_6, SSI_WS78_B, SEL_SSI7_1),
1124 PINMUX_IPSR_DATA(IP8_11_9, HSCIF0_HCTS_N),
1125 PINMUX_IPSR_DATA(IP8_11_9, VI0_R6),
1126 PINMUX_IPSR_MODSEL_DATA(IP8_11_9, SCIF0_RXD_D, SEL_SCIF0_3),
1127 PINMUX_IPSR_MODSEL_DATA(IP8_11_9, I2C0_SCL_E, SEL_I2C00_4),
1128 PINMUX_IPSR_DATA(IP8_11_9, AVB_MAGIC),
1129 PINMUX_IPSR_MODSEL_DATA(IP8_11_9, SSI_SDATA7_B, SEL_SSI7_1),
1130 PINMUX_IPSR_DATA(IP8_14_12, HSCIF0_HRTS_N),
1131 PINMUX_IPSR_DATA(IP8_14_12, VI0_R7),
1132 PINMUX_IPSR_MODSEL_DATA(IP8_14_12, SCIF0_TXD_D, SEL_SCIF0_3),
1133 PINMUX_IPSR_MODSEL_DATA(IP8_14_12, I2C0_SDA_E, SEL_I2C00_4),
1134 PINMUX_IPSR_DATA(IP8_14_12, AVB_PHY_INT),
1135 PINMUX_IPSR_MODSEL_DATA(IP8_14_12, SSI_SDATA8_B, SEL_SSI8_1),
1136 PINMUX_IPSR_MODSEL_DATA(IP8_16_15, HSCIF0_HSCK, SEL_HSCIF0_0),
1137 PINMUX_IPSR_MODSEL_DATA(IP8_16_15, SCIF_CLK_B, SEL_SCIF0_1),
1138 PINMUX_IPSR_DATA(IP8_16_15, AVB_CRS),
1139 PINMUX_IPSR_MODSEL_DATA(IP8_16_15, AUDIO_CLKC_B, SEL_ADG_1),
1140 PINMUX_IPSR_MODSEL_DATA(IP8_19_17, I2C0_SCL, SEL_I2C00_0),
1141 PINMUX_IPSR_MODSEL_DATA(IP8_19_17, SCIF0_RXD_C, SEL_SCIF0_2),
1142 PINMUX_IPSR_DATA(IP8_19_17, PWM5),
1143 PINMUX_IPSR_MODSEL_DATA(IP8_19_17, TCLK1_B, SEL_TMU_1),
1144 PINMUX_IPSR_DATA(IP8_19_17, AVB_GTXREFCLK),
1145 PINMUX_IPSR_MODSEL_DATA(IP8_19_17, CAN1_RX_D, SEL_CAN1_3),
1146 PINMUX_IPSR_DATA(IP8_19_17, TPUTO0_B),
1147 PINMUX_IPSR_MODSEL_DATA(IP8_22_20, I2C0_SDA, SEL_I2C00_0),
1148 PINMUX_IPSR_MODSEL_DATA(IP8_22_20, SCIF0_TXD_C, SEL_SCIF0_2),
1149 PINMUX_IPSR_DATA(IP8_22_20, TPUTO0),
1150 PINMUX_IPSR_MODSEL_DATA(IP8_22_20, CAN_CLK, SEL_CAN_0),
1151 PINMUX_IPSR_DATA(IP8_22_20, DVC_MUTE),
1152 PINMUX_IPSR_MODSEL_DATA(IP8_22_20, CAN1_TX_D, SEL_CAN1_3),
1153 PINMUX_IPSR_MODSEL_DATA(IP8_25_23, I2C1_SCL, SEL_I2C01_0),
1154 PINMUX_IPSR_MODSEL_DATA(IP8_25_23, SCIF4_RXD, SEL_SCIF4_0),
1155 PINMUX_IPSR_DATA(IP8_25_23, PWM5_B),
1156 PINMUX_IPSR_DATA(IP8_25_23, DU1_DR0),
1157 PINMUX_IPSR_MODSEL_DATA(IP8_25_23, RIF1_SYNC_B, SEL_DR2_1),
1158 PINMUX_IPSR_MODSEL_DATA(IP8_25_23, TS_SDATA_D, SEL_TSIF0_3),
1159 PINMUX_IPSR_DATA(IP8_25_23, TPUTO1_B),
1160 PINMUX_IPSR_MODSEL_DATA(IP8_28_26, I2C1_SDA, SEL_I2C01_0),
1161 PINMUX_IPSR_MODSEL_DATA(IP8_28_26, SCIF4_TXD, SEL_SCIF4_0),
1162 PINMUX_IPSR_DATA(IP8_28_26, IRQ5),
1163 PINMUX_IPSR_DATA(IP8_28_26, DU1_DR1),
1164 PINMUX_IPSR_MODSEL_DATA(IP8_28_26, RIF1_CLK_B, SEL_DR2_1),
1165 PINMUX_IPSR_MODSEL_DATA(IP8_28_26, TS_SCK_D, SEL_TSIF0_3),
1166 PINMUX_IPSR_MODSEL_DATA(IP8_28_26, BPFCLK_C, SEL_DARC_2),
1167 PINMUX_IPSR_DATA(IP8_31_29, MSIOF0_RXD),
1168 PINMUX_IPSR_MODSEL_DATA(IP8_31_29, SCIF5_RXD, SEL_SCIF5_0),
1169 PINMUX_IPSR_MODSEL_DATA(IP8_31_29, I2C2_SCL_C, SEL_I2C02_2),
1170 PINMUX_IPSR_DATA(IP8_31_29, DU1_DR2),
1171 PINMUX_IPSR_MODSEL_DATA(IP8_31_29, RIF1_D0_B, SEL_DR2_1),
1172 PINMUX_IPSR_MODSEL_DATA(IP8_31_29, TS_SDEN_D, SEL_TSIF0_3),
1173 PINMUX_IPSR_MODSEL_DATA(IP8_31_29, FMCLK_C, SEL_DARC_2),
1174 PINMUX_IPSR_MODSEL_DATA(IP8_31_29, RDS_CLK, SEL_RDS_0),
1175
1176 /* IPSR9 */
1177 PINMUX_IPSR_DATA(IP9_2_0, MSIOF0_TXD),
1178 PINMUX_IPSR_MODSEL_DATA(IP9_2_0, SCIF5_TXD, SEL_SCIF5_0),
1179 PINMUX_IPSR_MODSEL_DATA(IP9_2_0, I2C2_SDA_C, SEL_I2C02_2),
1180 PINMUX_IPSR_DATA(IP9_2_0, DU1_DR3),
1181 PINMUX_IPSR_MODSEL_DATA(IP9_2_0, RIF1_D1_B, SEL_DR3_1),
1182 PINMUX_IPSR_MODSEL_DATA(IP9_2_0, TS_SPSYNC_D, SEL_TSIF0_3),
1183 PINMUX_IPSR_MODSEL_DATA(IP9_2_0, FMIN_C, SEL_DARC_2),
1184 PINMUX_IPSR_MODSEL_DATA(IP9_2_0, RDS_DATA, SEL_RDS_0),
1185 PINMUX_IPSR_DATA(IP9_5_3, MSIOF0_SCK),
1186 PINMUX_IPSR_DATA(IP9_5_3, IRQ0),
1187 PINMUX_IPSR_MODSEL_DATA(IP9_5_3, TS_SDATA, SEL_TSIF0_0),
1188 PINMUX_IPSR_DATA(IP9_5_3, DU1_DR4),
1189 PINMUX_IPSR_MODSEL_DATA(IP9_5_3, RIF1_SYNC, SEL_DR2_0),
1190 PINMUX_IPSR_DATA(IP9_5_3, TPUTO1_C),
1191 PINMUX_IPSR_DATA(IP9_8_6, MSIOF0_SYNC),
1192 PINMUX_IPSR_DATA(IP9_8_6, PWM1),
1193 PINMUX_IPSR_MODSEL_DATA(IP9_8_6, TS_SCK, SEL_TSIF0_0),
1194 PINMUX_IPSR_DATA(IP9_8_6, DU1_DR5),
1195 PINMUX_IPSR_MODSEL_DATA(IP9_8_6, RIF1_CLK, SEL_DR2_0),
1196 PINMUX_IPSR_MODSEL_DATA(IP9_8_6, BPFCLK_B, SEL_DARC_1),
1197 PINMUX_IPSR_DATA(IP9_11_9, MSIOF0_SS1),
1198 PINMUX_IPSR_MODSEL_DATA(IP9_11_9, SCIFA0_RXD, SEL_SCIFA0_0),
1199 PINMUX_IPSR_MODSEL_DATA(IP9_11_9, TS_SDEN, SEL_TSIF0_0),
1200 PINMUX_IPSR_DATA(IP9_11_9, DU1_DR6),
1201 PINMUX_IPSR_MODSEL_DATA(IP9_11_9, RIF1_D0, SEL_DR2_0),
1202 PINMUX_IPSR_MODSEL_DATA(IP9_11_9, FMCLK_B, SEL_DARC_1),
1203 PINMUX_IPSR_MODSEL_DATA(IP9_11_9, RDS_CLK_B, SEL_RDS_1),
1204 PINMUX_IPSR_DATA(IP9_14_12, MSIOF0_SS2),
1205 PINMUX_IPSR_MODSEL_DATA(IP9_14_12, SCIFA0_TXD, SEL_SCIFA0_0),
1206 PINMUX_IPSR_MODSEL_DATA(IP9_14_12, TS_SPSYNC, SEL_TSIF0_0),
1207 PINMUX_IPSR_DATA(IP9_14_12, DU1_DR7),
1208 PINMUX_IPSR_MODSEL_DATA(IP9_14_12, RIF1_D1, SEL_DR3_0),
1209 PINMUX_IPSR_MODSEL_DATA(IP9_14_12, FMIN_B, SEL_DARC_1),
1210 PINMUX_IPSR_MODSEL_DATA(IP9_14_12, RDS_DATA_B, SEL_RDS_1),
1211 PINMUX_IPSR_MODSEL_DATA(IP9_16_15, HSCIF1_HRX, SEL_HSCIF1_0),
1212 PINMUX_IPSR_MODSEL_DATA(IP9_16_15, I2C4_SCL, SEL_I2C04_0),
1213 PINMUX_IPSR_DATA(IP9_16_15, PWM6),
1214 PINMUX_IPSR_DATA(IP9_16_15, DU1_DG0),
1215 PINMUX_IPSR_MODSEL_DATA(IP9_18_17, HSCIF1_HTX, SEL_HSCIF1_0),
1216 PINMUX_IPSR_MODSEL_DATA(IP9_18_17, I2C4_SDA, SEL_I2C04_0),
1217 PINMUX_IPSR_DATA(IP9_18_17, TPUTO1),
1218 PINMUX_IPSR_DATA(IP9_18_17, DU1_DG1),
1219 PINMUX_IPSR_DATA(IP9_21_19, HSCIF1_HSCK),
1220 PINMUX_IPSR_DATA(IP9_21_19, PWM2),
1221 PINMUX_IPSR_MODSEL_DATA(IP9_21_19, IETX, SEL_IEB_0),
1222 PINMUX_IPSR_DATA(IP9_21_19, DU1_DG2),
1223 PINMUX_IPSR_MODSEL_DATA(IP9_21_19, REMOCON_B, SEL_RCN_1),
1224 PINMUX_IPSR_MODSEL_DATA(IP9_21_19, SPEEDIN_B, SEL_RSP_1),
1225 PINMUX_IPSR_MODSEL_DATA(IP9_21_19, VSP_B, SEL_SPDM_1),
1226 PINMUX_IPSR_MODSEL_DATA(IP9_24_22, HSCIF1_HCTS_N, SEL_HSCIF1_0),
1227 PINMUX_IPSR_MODSEL_DATA(IP9_24_22, SCIFA4_RXD, SEL_SCIFA4_0),
1228 PINMUX_IPSR_MODSEL_DATA(IP9_24_22, IECLK, SEL_IEB_0),
1229 PINMUX_IPSR_DATA(IP9_24_22, DU1_DG3),
1230 PINMUX_IPSR_MODSEL_DATA(IP9_24_22, SSI_SCK1_B, SEL_SSI1_1),
1231 PINMUX_IPSR_DATA(IP9_24_22, CAN_DEBUG_HW_TRIGGER),
1232 PINMUX_IPSR_DATA(IP9_24_22, CC50_STATE32),
1233 PINMUX_IPSR_MODSEL_DATA(IP9_27_25, HSCIF1_HRTS_N, SEL_HSCIF1_0),
1234 PINMUX_IPSR_MODSEL_DATA(IP9_27_25, SCIFA4_TXD, SEL_SCIFA4_0),
1235 PINMUX_IPSR_MODSEL_DATA(IP9_27_25, IERX, SEL_IEB_0),
1236 PINMUX_IPSR_DATA(IP9_27_25, DU1_DG4),
1237 PINMUX_IPSR_MODSEL_DATA(IP9_27_25, SSI_WS1_B, SEL_SSI1_1),
1238 PINMUX_IPSR_DATA(IP9_27_25, CAN_STEP0),
1239 PINMUX_IPSR_DATA(IP9_27_25, CC50_STATE33),
1240 PINMUX_IPSR_MODSEL_DATA(IP9_30_28, SCIF1_SCK, SEL_SCIF1_0),
1241 PINMUX_IPSR_DATA(IP9_30_28, PWM3),
1242 PINMUX_IPSR_MODSEL_DATA(IP9_30_28, TCLK2, SEL_TMU_0),
1243 PINMUX_IPSR_DATA(IP9_30_28, DU1_DG5),
1244 PINMUX_IPSR_MODSEL_DATA(IP9_30_28, SSI_SDATA1_B, SEL_SSI1_1),
1245 PINMUX_IPSR_DATA(IP9_30_28, CAN_TXCLK),
1246 PINMUX_IPSR_DATA(IP9_30_28, CC50_STATE34),
1247
1248 /* IPSR10 */
1249 PINMUX_IPSR_MODSEL_DATA(IP10_2_0, SCIF1_RXD, SEL_SCIF1_0),
1250 PINMUX_IPSR_MODSEL_DATA(IP10_2_0, IIC0_SCL, SEL_IIC00_0),
1251 PINMUX_IPSR_DATA(IP10_2_0, DU1_DG6),
1252 PINMUX_IPSR_MODSEL_DATA(IP10_2_0, SSI_SCK2_B, SEL_SSI2_1),
1253 PINMUX_IPSR_DATA(IP10_2_0, CAN_DEBUGOUT0),
1254 PINMUX_IPSR_DATA(IP10_2_0, CC50_STATE35),
1255 PINMUX_IPSR_MODSEL_DATA(IP10_5_3, SCIF1_TXD, SEL_SCIF1_0),
1256 PINMUX_IPSR_MODSEL_DATA(IP10_5_3, IIC0_SDA, SEL_IIC00_0),
1257 PINMUX_IPSR_DATA(IP10_5_3, DU1_DG7),
1258 PINMUX_IPSR_MODSEL_DATA(IP10_5_3, SSI_WS2_B, SEL_SSI2_1),
1259 PINMUX_IPSR_DATA(IP10_5_3, CAN_DEBUGOUT1),
1260 PINMUX_IPSR_DATA(IP10_5_3, CC50_STATE36),
1261 PINMUX_IPSR_MODSEL_DATA(IP10_8_6, SCIF2_RXD, SEL_SCIF2_0),
1262 PINMUX_IPSR_MODSEL_DATA(IP10_8_6, IIC1_SCL, SEL_IIC01_0),
1263 PINMUX_IPSR_DATA(IP10_8_6, DU1_DB0),
1264 PINMUX_IPSR_MODSEL_DATA(IP10_8_6, SSI_SDATA2_B, SEL_SSI2_1),
1265 PINMUX_IPSR_DATA(IP10_8_6, USB0_EXTLP),
1266 PINMUX_IPSR_DATA(IP10_8_6, CAN_DEBUGOUT2),
1267 PINMUX_IPSR_DATA(IP10_8_6, CC50_STATE37),
1268 PINMUX_IPSR_MODSEL_DATA(IP10_11_9, SCIF2_TXD, SEL_SCIF2_0),
1269 PINMUX_IPSR_MODSEL_DATA(IP10_11_9, IIC1_SDA, SEL_IIC01_0),
1270 PINMUX_IPSR_DATA(IP10_11_9, DU1_DB1),
1271 PINMUX_IPSR_MODSEL_DATA(IP10_11_9, SSI_SCK9_B, SEL_SSI9_1),
1272 PINMUX_IPSR_DATA(IP10_11_9, USB0_OVC1),
1273 PINMUX_IPSR_DATA(IP10_11_9, CAN_DEBUGOUT3),
1274 PINMUX_IPSR_DATA(IP10_11_9, CC50_STATE38),
1275 PINMUX_IPSR_MODSEL_DATA(IP10_14_12, SCIF2_SCK, SEL_SCIF2_0),
1276 PINMUX_IPSR_DATA(IP10_14_12, IRQ1),
1277 PINMUX_IPSR_DATA(IP10_14_12, DU1_DB2),
1278 PINMUX_IPSR_MODSEL_DATA(IP10_14_12, SSI_WS9_B, SEL_SSI9_1),
1279 PINMUX_IPSR_DATA(IP10_14_12, USB0_IDIN),
1280 PINMUX_IPSR_DATA(IP10_14_12, CAN_DEBUGOUT4),
1281 PINMUX_IPSR_DATA(IP10_14_12, CC50_STATE39),
1282 PINMUX_IPSR_MODSEL_DATA(IP10_17_15, SCIF3_SCK, SEL_SCIF3_0),
1283 PINMUX_IPSR_DATA(IP10_17_15, IRQ2),
1284 PINMUX_IPSR_MODSEL_DATA(IP10_17_15, BPFCLK_D, SEL_DARC_3),
1285 PINMUX_IPSR_DATA(IP10_17_15, DU1_DB3),
1286 PINMUX_IPSR_MODSEL_DATA(IP10_17_15, SSI_SDATA9_B, SEL_SSI9_1),
1287 PINMUX_IPSR_DATA(IP10_17_15, TANS2),
1288 PINMUX_IPSR_DATA(IP10_17_15, CAN_DEBUGOUT5),
1289 PINMUX_IPSR_DATA(IP10_17_15, CC50_OSCOUT),
1290 PINMUX_IPSR_MODSEL_DATA(IP10_20_18, SCIF3_RXD, SEL_SCIF3_0),
1291 PINMUX_IPSR_MODSEL_DATA(IP10_20_18, I2C1_SCL_E, SEL_I2C01_4),
1292 PINMUX_IPSR_MODSEL_DATA(IP10_20_18, FMCLK_D, SEL_DARC_3),
1293 PINMUX_IPSR_DATA(IP10_20_18, DU1_DB4),
1294 PINMUX_IPSR_MODSEL_DATA(IP10_20_18, AUDIO_CLKA_C, SEL_ADG_2),
1295 PINMUX_IPSR_MODSEL_DATA(IP10_20_18, SSI_SCK4_B, SEL_SSI4_1),
1296 PINMUX_IPSR_DATA(IP10_20_18, CAN_DEBUGOUT6),
1297 PINMUX_IPSR_MODSEL_DATA(IP10_20_18, RDS_CLK_C, SEL_RDS_2),
1298 PINMUX_IPSR_MODSEL_DATA(IP10_23_21, SCIF3_TXD, SEL_SCIF3_0),
1299 PINMUX_IPSR_MODSEL_DATA(IP10_23_21, I2C1_SDA_E, SEL_I2C01_4),
1300 PINMUX_IPSR_MODSEL_DATA(IP10_23_21, FMIN_D, SEL_DARC_3),
1301 PINMUX_IPSR_DATA(IP10_23_21, DU1_DB5),
1302 PINMUX_IPSR_MODSEL_DATA(IP10_23_21, AUDIO_CLKB_C, SEL_ADG_2),
1303 PINMUX_IPSR_MODSEL_DATA(IP10_23_21, SSI_WS4_B, SEL_SSI4_1),
1304 PINMUX_IPSR_DATA(IP10_23_21, CAN_DEBUGOUT7),
1305 PINMUX_IPSR_MODSEL_DATA(IP10_23_21, RDS_DATA_C, SEL_RDS_2),
1306 PINMUX_IPSR_MODSEL_DATA(IP10_26_24, I2C2_SCL, SEL_I2C02_0),
1307 PINMUX_IPSR_MODSEL_DATA(IP10_26_24, SCIFA5_RXD, SEL_SCIFA5_0),
1308 PINMUX_IPSR_DATA(IP10_26_24, DU1_DB6),
1309 PINMUX_IPSR_MODSEL_DATA(IP10_26_24, AUDIO_CLKC_C, SEL_ADG_2),
1310 PINMUX_IPSR_MODSEL_DATA(IP10_26_24, SSI_SDATA4_B, SEL_SSI4_1),
1311 PINMUX_IPSR_DATA(IP10_26_24, CAN_DEBUGOUT8),
1312 PINMUX_IPSR_MODSEL_DATA(IP10_29_27, I2C2_SDA, SEL_I2C02_0),
1313 PINMUX_IPSR_MODSEL_DATA(IP10_29_27, SCIFA5_TXD, SEL_SCIFA5_0),
1314 PINMUX_IPSR_DATA(IP10_29_27, DU1_DB7),
1315 PINMUX_IPSR_MODSEL_DATA(IP10_29_27, AUDIO_CLKOUT_C, SEL_ADG_2),
1316 PINMUX_IPSR_DATA(IP10_29_27, CAN_DEBUGOUT9),
1317 PINMUX_IPSR_MODSEL_DATA(IP10_31_30, SSI_SCK5, SEL_SSI5_0),
1318 PINMUX_IPSR_MODSEL_DATA(IP10_31_30, SCIFA3_SCK, SEL_SCIFA3_0),
1319 PINMUX_IPSR_DATA(IP10_31_30, DU1_DOTCLKIN),
1320 PINMUX_IPSR_DATA(IP10_31_30, CAN_DEBUGOUT10),
1321
1322 /* IPSR11 */
1323 PINMUX_IPSR_MODSEL_DATA(IP11_2_0, SSI_WS5, SEL_SSI5_0),
1324 PINMUX_IPSR_MODSEL_DATA(IP11_2_0, SCIFA3_RXD, SEL_SCIFA3_0),
1325 PINMUX_IPSR_MODSEL_DATA(IP11_2_0, I2C3_SCL_C, SEL_I2C03_2),
1326 PINMUX_IPSR_DATA(IP11_2_0, DU1_DOTCLKOUT0),
1327 PINMUX_IPSR_DATA(IP11_2_0, CAN_DEBUGOUT11),
1328 PINMUX_IPSR_MODSEL_DATA(IP11_5_3, SSI_SDATA5, SEL_SSI5_0),
1329 PINMUX_IPSR_MODSEL_DATA(IP11_5_3, SCIFA3_TXD, SEL_SCIFA3_0),
1330 PINMUX_IPSR_MODSEL_DATA(IP11_5_3, I2C3_SDA_C, SEL_I2C03_2),
1331 PINMUX_IPSR_DATA(IP11_5_3, DU1_DOTCLKOUT1),
1332 PINMUX_IPSR_DATA(IP11_5_3, CAN_DEBUGOUT12),
1333 PINMUX_IPSR_MODSEL_DATA(IP11_7_6, SSI_SCK6, SEL_SSI6_0),
1334 PINMUX_IPSR_MODSEL_DATA(IP11_7_6, SCIFA1_SCK_B, SEL_SCIFA1_1),
1335 PINMUX_IPSR_DATA(IP11_7_6, DU1_EXHSYNC_DU1_HSYNC),
1336 PINMUX_IPSR_DATA(IP11_7_6, CAN_DEBUGOUT13),
1337 PINMUX_IPSR_MODSEL_DATA(IP11_10_8, SSI_WS6, SEL_SSI6_0),
1338 PINMUX_IPSR_MODSEL_DATA(IP11_10_8, SCIFA1_RXD_B, SEL_SCIFA1_1),
1339 PINMUX_IPSR_MODSEL_DATA(IP11_10_8, I2C4_SCL_C, SEL_I2C04_2),
1340 PINMUX_IPSR_DATA(IP11_10_8, DU1_EXVSYNC_DU1_VSYNC),
1341 PINMUX_IPSR_DATA(IP11_10_8, CAN_DEBUGOUT14),
1342 PINMUX_IPSR_MODSEL_DATA(IP11_13_11, SSI_SDATA6, SEL_SSI6_0),
1343 PINMUX_IPSR_MODSEL_DATA(IP11_13_11, SCIFA1_TXD_B, SEL_SCIFA1_1),
1344 PINMUX_IPSR_MODSEL_DATA(IP11_13_11, I2C4_SDA_C, SEL_I2C04_2),
1345 PINMUX_IPSR_DATA(IP11_13_11, DU1_EXODDF_DU1_ODDF_DISP_CDE),
1346 PINMUX_IPSR_DATA(IP11_13_11, CAN_DEBUGOUT15),
1347 PINMUX_IPSR_MODSEL_DATA(IP11_15_14, SSI_SCK78, SEL_SSI7_0),
1348 PINMUX_IPSR_MODSEL_DATA(IP11_15_14, SCIFA2_SCK_B, SEL_SCIFA2_1),
1349 PINMUX_IPSR_MODSEL_DATA(IP11_15_14, IIC0_SDA_C, SEL_IIC00_2),
1350 PINMUX_IPSR_DATA(IP11_15_14, DU1_DISP),
1351 PINMUX_IPSR_MODSEL_DATA(IP11_17_16, SSI_WS78, SEL_SSI7_0),
1352 PINMUX_IPSR_MODSEL_DATA(IP11_17_16, SCIFA2_RXD_B, SEL_SCIFA2_1),
1353 PINMUX_IPSR_MODSEL_DATA(IP11_17_16, IIC0_SCL_C, SEL_IIC00_2),
1354 PINMUX_IPSR_DATA(IP11_17_16, DU1_CDE),
1355 PINMUX_IPSR_MODSEL_DATA(IP11_20_18, SSI_SDATA7, SEL_SSI7_0),
1356 PINMUX_IPSR_MODSEL_DATA(IP11_20_18, SCIFA2_TXD_B, SEL_SCIFA2_1),
1357 PINMUX_IPSR_DATA(IP11_20_18, IRQ8),
1358 PINMUX_IPSR_MODSEL_DATA(IP11_20_18, AUDIO_CLKA_D, SEL_ADG_3),
1359 PINMUX_IPSR_MODSEL_DATA(IP11_20_18, CAN_CLK_D, SEL_CAN_3),
1360 PINMUX_IPSR_DATA(IP11_20_18, PCMOE_N),
1361 PINMUX_IPSR_DATA(IP11_23_21, SSI_SCK0129),
1362 PINMUX_IPSR_MODSEL_DATA(IP11_23_21, MSIOF1_RXD_B, SEL_MSI1_1),
1363 PINMUX_IPSR_MODSEL_DATA(IP11_23_21, SCIF5_RXD_D, SEL_SCIF5_3),
1364 PINMUX_IPSR_MODSEL_DATA(IP11_23_21, ADIDATA_B, SEL_RAD_1),
1365 PINMUX_IPSR_MODSEL_DATA(IP11_23_21, AD_DI_B, SEL_ADI_1),
1366 PINMUX_IPSR_DATA(IP11_23_21, PCMWE_N),
1367 PINMUX_IPSR_DATA(IP11_26_24, SSI_WS0129),
1368 PINMUX_IPSR_MODSEL_DATA(IP11_26_24, MSIOF1_TXD_B, SEL_MSI1_1),
1369 PINMUX_IPSR_MODSEL_DATA(IP11_26_24, SCIF5_TXD_D, SEL_SCIF5_3),
1370 PINMUX_IPSR_MODSEL_DATA(IP11_26_24, ADICS_SAMP_B, SEL_RAD_1),
1371 PINMUX_IPSR_MODSEL_DATA(IP11_26_24, AD_DO_B, SEL_ADI_1),
1372 PINMUX_IPSR_DATA(IP11_29_27, SSI_SDATA0),
1373 PINMUX_IPSR_MODSEL_DATA(IP11_29_27, MSIOF1_SCK_B, SEL_MSI1_1),
1374 PINMUX_IPSR_DATA(IP11_29_27, PWM0_B),
1375 PINMUX_IPSR_MODSEL_DATA(IP11_29_27, ADICLK_B, SEL_RAD_1),
1376 PINMUX_IPSR_MODSEL_DATA(IP11_29_27, AD_CLK_B, SEL_ADI_1),
1377
1378 /* IPSR12 */
1379 PINMUX_IPSR_DATA(IP12_2_0, SSI_SCK34),
1380 PINMUX_IPSR_MODSEL_DATA(IP12_2_0, MSIOF1_SYNC_B, SEL_MSI1_1),
1381 PINMUX_IPSR_MODSEL_DATA(IP12_2_0, SCIFA1_SCK_C, SEL_SCIFA1_2),
1382 PINMUX_IPSR_MODSEL_DATA(IP12_2_0, ADICHS0_B, SEL_RAD_1),
1383 PINMUX_IPSR_MODSEL_DATA(IP12_2_0, AD_NCS_N_B, SEL_ADI_1),
1384 PINMUX_IPSR_MODSEL_DATA(IP12_2_0, DREQ1_N_B, SEL_LBS_1),
1385 PINMUX_IPSR_DATA(IP12_5_3, SSI_WS34),
1386 PINMUX_IPSR_MODSEL_DATA(IP12_5_3, MSIOF1_SS1_B, SEL_MSI1_1),
1387 PINMUX_IPSR_MODSEL_DATA(IP12_5_3, SCIFA1_RXD_C, SEL_SCIFA1_2),
1388 PINMUX_IPSR_MODSEL_DATA(IP12_5_3, ADICHS1_B, SEL_RAD_1),
1389 PINMUX_IPSR_MODSEL_DATA(IP12_5_3, CAN1_RX_C, SEL_CAN1_2),
1390 PINMUX_IPSR_MODSEL_DATA(IP12_5_3, DACK1_B, SEL_LBS_1),
1391 PINMUX_IPSR_DATA(IP12_8_6, SSI_SDATA3),
1392 PINMUX_IPSR_MODSEL_DATA(IP12_8_6, MSIOF1_SS2_B, SEL_MSI1_1),
1393 PINMUX_IPSR_MODSEL_DATA(IP12_8_6, SCIFA1_TXD_C, SEL_SCIFA1_2),
1394 PINMUX_IPSR_MODSEL_DATA(IP12_8_6, ADICHS2_B, SEL_RAD_1),
1395 PINMUX_IPSR_MODSEL_DATA(IP12_8_6, CAN1_TX_C, SEL_CAN1_2),
1396 PINMUX_IPSR_DATA(IP12_8_6, DREQ2_N),
1397 PINMUX_IPSR_MODSEL_DATA(IP12_10_9, SSI_SCK4, SEL_SSI4_0),
1398 PINMUX_IPSR_DATA(IP12_10_9, MLB_CLK),
1399 PINMUX_IPSR_MODSEL_DATA(IP12_10_9, IETX_B, SEL_IEB_1),
1400 PINMUX_IPSR_DATA(IP12_10_9, IRD_TX),
1401 PINMUX_IPSR_MODSEL_DATA(IP12_12_11, SSI_WS4, SEL_SSI4_0),
1402 PINMUX_IPSR_DATA(IP12_12_11, MLB_SIG),
1403 PINMUX_IPSR_MODSEL_DATA(IP12_12_11, IECLK_B, SEL_IEB_1),
1404 PINMUX_IPSR_DATA(IP12_12_11, IRD_RX),
1405 PINMUX_IPSR_MODSEL_DATA(IP12_14_13, SSI_SDATA4, SEL_SSI4_0),
1406 PINMUX_IPSR_DATA(IP12_14_13, MLB_DAT),
1407 PINMUX_IPSR_MODSEL_DATA(IP12_14_13, IERX_B, SEL_IEB_1),
1408 PINMUX_IPSR_DATA(IP12_14_13, IRD_SCK),
1409 PINMUX_IPSR_MODSEL_DATA(IP12_17_15, SSI_SDATA8, SEL_SSI8_0),
1410 PINMUX_IPSR_MODSEL_DATA(IP12_17_15, SCIF1_SCK_B, SEL_SCIF1_1),
1411 PINMUX_IPSR_DATA(IP12_17_15, PWM1_B),
1412 PINMUX_IPSR_DATA(IP12_17_15, IRQ9),
1413 PINMUX_IPSR_MODSEL_DATA(IP12_17_15, REMOCON, SEL_RCN_0),
1414 PINMUX_IPSR_DATA(IP12_17_15, DACK2),
1415 PINMUX_IPSR_MODSEL_DATA(IP12_17_15, ETH_MDIO_B, SEL_ETH_1),
1416 PINMUX_IPSR_MODSEL_DATA(IP12_20_18, SSI_SCK1, SEL_SSI1_0),
1417 PINMUX_IPSR_MODSEL_DATA(IP12_20_18, SCIF1_RXD_B, SEL_SCIF1_1),
1418 PINMUX_IPSR_MODSEL_DATA(IP12_20_18, IIC1_SCL_C, SEL_IIC01_2),
1419 PINMUX_IPSR_DATA(IP12_20_18, VI1_CLK),
1420 PINMUX_IPSR_MODSEL_DATA(IP12_20_18, CAN0_RX_D, SEL_CAN0_3),
1421 PINMUX_IPSR_MODSEL_DATA(IP12_20_18, AVB_AVTP_CAPTURE, SEL_AVB_0),
1422 PINMUX_IPSR_MODSEL_DATA(IP12_20_18, ETH_CRS_DV_B, SEL_ETH_1),
1423 PINMUX_IPSR_MODSEL_DATA(IP12_23_21, SSI_WS1, SEL_SSI1_0),
1424 PINMUX_IPSR_MODSEL_DATA(IP12_23_21, SCIF1_TXD_B, SEL_SCIF1_1),
1425 PINMUX_IPSR_MODSEL_DATA(IP12_23_21, IIC1_SDA_C, SEL_IIC01_2),
1426 PINMUX_IPSR_DATA(IP12_23_21, VI1_DATA0),
1427 PINMUX_IPSR_MODSEL_DATA(IP12_23_21, CAN0_TX_D, SEL_CAN0_3),
1428 PINMUX_IPSR_MODSEL_DATA(IP12_23_21, AVB_AVTP_MATCH, SEL_AVB_0),
1429 PINMUX_IPSR_MODSEL_DATA(IP12_23_21, ETH_RX_ER_B, SEL_ETH_1),
1430 PINMUX_IPSR_MODSEL_DATA(IP12_26_24, SSI_SDATA1, SEL_SSI1_0),
1431 PINMUX_IPSR_MODSEL_DATA(IP12_26_24, HSCIF1_HRX_B, SEL_HSCIF1_1),
1432 PINMUX_IPSR_DATA(IP12_26_24, VI1_DATA1),
1433 PINMUX_IPSR_MODSEL_DATA(IP12_26_24, SDATA, SEL_FSN_0),
1434 PINMUX_IPSR_DATA(IP12_26_24, ATAG0_N),
1435 PINMUX_IPSR_MODSEL_DATA(IP12_26_24, ETH_RXD0_B, SEL_ETH_1),
1436 PINMUX_IPSR_MODSEL_DATA(IP12_29_27, SSI_SCK2, SEL_SSI2_0),
1437 PINMUX_IPSR_MODSEL_DATA(IP12_29_27, HSCIF1_HTX_B, SEL_HSCIF1_1),
1438 PINMUX_IPSR_DATA(IP12_29_27, VI1_DATA2),
1439 PINMUX_IPSR_MODSEL_DATA(IP12_29_27, MDATA, SEL_FSN_0),
1440 PINMUX_IPSR_DATA(IP12_29_27, ATAWR0_N),
1441 PINMUX_IPSR_MODSEL_DATA(IP12_29_27, ETH_RXD1_B, SEL_ETH_1),
1442
1443 /* IPSR13 */
1444 PINMUX_IPSR_MODSEL_DATA(IP13_2_0, SSI_WS2, SEL_SSI2_0),
1445 PINMUX_IPSR_MODSEL_DATA(IP13_2_0, HSCIF1_HCTS_N_B, SEL_HSCIF1_1),
1446 PINMUX_IPSR_MODSEL_DATA(IP13_2_0, SCIFA0_RXD_D, SEL_SCIFA0_3),
1447 PINMUX_IPSR_DATA(IP13_2_0, VI1_DATA3),
1448 PINMUX_IPSR_MODSEL_DATA(IP13_2_0, SCKZ, SEL_FSN_0),
1449 PINMUX_IPSR_DATA(IP13_2_0, ATACS00_N),
1450 PINMUX_IPSR_MODSEL_DATA(IP13_2_0, ETH_LINK_B, SEL_ETH_1),
1451 PINMUX_IPSR_MODSEL_DATA(IP13_5_3, SSI_SDATA2, SEL_SSI2_0),
1452 PINMUX_IPSR_MODSEL_DATA(IP13_5_3, HSCIF1_HRTS_N_B, SEL_HSCIF1_1),
1453 PINMUX_IPSR_MODSEL_DATA(IP13_5_3, SCIFA0_TXD_D, SEL_SCIFA0_3),
1454 PINMUX_IPSR_DATA(IP13_5_3, VI1_DATA4),
1455 PINMUX_IPSR_MODSEL_DATA(IP13_5_3, STM_N, SEL_FSN_0),
1456 PINMUX_IPSR_DATA(IP13_5_3, ATACS10_N),
1457 PINMUX_IPSR_MODSEL_DATA(IP13_5_3, ETH_REFCLK_B, SEL_ETH_1),
1458 PINMUX_IPSR_MODSEL_DATA(IP13_8_6, SSI_SCK9, SEL_SSI9_0),
1459 PINMUX_IPSR_MODSEL_DATA(IP13_8_6, SCIF2_SCK_B, SEL_SCIF2_1),
1460 PINMUX_IPSR_DATA(IP13_8_6, PWM2_B),
1461 PINMUX_IPSR_DATA(IP13_8_6, VI1_DATA5),
1462 PINMUX_IPSR_MODSEL_DATA(IP13_8_6, MTS_N, SEL_FSN_0),
1463 PINMUX_IPSR_DATA(IP13_8_6, EX_WAIT1),
1464 PINMUX_IPSR_MODSEL_DATA(IP13_8_6, ETH_TXD1_B, SEL_ETH_1),
1465 PINMUX_IPSR_MODSEL_DATA(IP13_11_9, SSI_WS9, SEL_SSI9_0),
1466 PINMUX_IPSR_MODSEL_DATA(IP13_11_9, SCIF2_RXD_B, SEL_SCIF2_1),
1467 PINMUX_IPSR_MODSEL_DATA(IP13_11_9, I2C3_SCL_E, SEL_I2C03_4),
1468 PINMUX_IPSR_DATA(IP13_11_9, VI1_DATA6),
1469 PINMUX_IPSR_DATA(IP13_11_9, ATARD0_N),
1470 PINMUX_IPSR_MODSEL_DATA(IP13_11_9, ETH_TX_EN_B, SEL_ETH_1),
1471 PINMUX_IPSR_MODSEL_DATA(IP13_14_12, SSI_SDATA9, SEL_SSI9_0),
1472 PINMUX_IPSR_MODSEL_DATA(IP13_14_12, SCIF2_TXD_B, SEL_SCIF2_1),
1473 PINMUX_IPSR_MODSEL_DATA(IP13_14_12, I2C3_SDA_E, SEL_I2C03_4),
1474 PINMUX_IPSR_DATA(IP13_14_12, VI1_DATA7),
1475 PINMUX_IPSR_DATA(IP13_14_12, ATADIR0_N),
1476 PINMUX_IPSR_MODSEL_DATA(IP13_14_12, ETH_MAGIC_B, SEL_ETH_1),
1477 PINMUX_IPSR_MODSEL_DATA(IP13_17_15, AUDIO_CLKA, SEL_ADG_0),
1478 PINMUX_IPSR_MODSEL_DATA(IP13_17_15, I2C0_SCL_B, SEL_I2C00_1),
1479 PINMUX_IPSR_MODSEL_DATA(IP13_17_15, SCIFA4_RXD_D, SEL_SCIFA4_3),
1480 PINMUX_IPSR_DATA(IP13_17_15, VI1_CLKENB),
1481 PINMUX_IPSR_MODSEL_DATA(IP13_17_15, TS_SDATA_C, SEL_TSIF0_2),
1482 PINMUX_IPSR_MODSEL_DATA(IP13_17_15, RIF0_SYNC_B, SEL_DR0_1),
1483 PINMUX_IPSR_MODSEL_DATA(IP13_17_15, ETH_TXD0_B, SEL_ETH_1),
1484 PINMUX_IPSR_MODSEL_DATA(IP13_20_18, AUDIO_CLKB, SEL_ADG_0),
1485 PINMUX_IPSR_MODSEL_DATA(IP13_20_18, I2C0_SDA_B, SEL_I2C00_1),
1486 PINMUX_IPSR_MODSEL_DATA(IP13_20_18, SCIFA4_TXD_D, SEL_SCIFA4_3),
1487 PINMUX_IPSR_DATA(IP13_20_18, VI1_FIELD),
1488 PINMUX_IPSR_MODSEL_DATA(IP13_20_18, TS_SCK_C, SEL_TSIF0_2),
1489 PINMUX_IPSR_MODSEL_DATA(IP13_20_18, RIF0_CLK_B, SEL_DR0_1),
1490 PINMUX_IPSR_MODSEL_DATA(IP13_20_18, BPFCLK_E, SEL_DARC_4),
1491 PINMUX_IPSR_MODSEL_DATA(IP13_20_18, ETH_MDC_B, SEL_ETH_1),
1492 PINMUX_IPSR_MODSEL_DATA(IP13_23_21, AUDIO_CLKC, SEL_ADG_0),
1493 PINMUX_IPSR_MODSEL_DATA(IP13_23_21, I2C4_SCL_B, SEL_I2C04_1),
1494 PINMUX_IPSR_MODSEL_DATA(IP13_23_21, SCIFA5_RXD_D, SEL_SCIFA5_3),
1495 PINMUX_IPSR_DATA(IP13_23_21, VI1_HSYNC_N),
1496 PINMUX_IPSR_MODSEL_DATA(IP13_23_21, TS_SDEN_C, SEL_TSIF0_2),
1497 PINMUX_IPSR_MODSEL_DATA(IP13_23_21, RIF0_D0_B, SEL_DR0_1),
1498 PINMUX_IPSR_MODSEL_DATA(IP13_23_21, FMCLK_E, SEL_DARC_4),
1499 PINMUX_IPSR_MODSEL_DATA(IP13_23_21, RDS_CLK_D, SEL_RDS_3),
1500 PINMUX_IPSR_MODSEL_DATA(IP13_26_24, AUDIO_CLKOUT, SEL_ADG_0),
1501 PINMUX_IPSR_MODSEL_DATA(IP13_26_24, I2C4_SDA_B, SEL_I2C04_1),
1502 PINMUX_IPSR_MODSEL_DATA(IP13_26_24, SCIFA5_TXD_D, SEL_SCIFA5_3),
1503 PINMUX_IPSR_DATA(IP13_26_24, VI1_VSYNC_N),
1504 PINMUX_IPSR_MODSEL_DATA(IP13_26_24, TS_SPSYNC_C, SEL_TSIF0_2),
1505 PINMUX_IPSR_MODSEL_DATA(IP13_26_24, RIF0_D1_B, SEL_DR1_1),
1506 PINMUX_IPSR_MODSEL_DATA(IP13_26_24, FMIN_E, SEL_DARC_4),
1507 PINMUX_IPSR_MODSEL_DATA(IP13_26_24, RDS_DATA_D, SEL_RDS_3),
1508};
1509
1510static const struct sh_pfc_pin pinmux_pins[] = {
1511 PINMUX_GPIO_GP_ALL(),
1512};
1513
1514/* - ETH -------------------------------------------------------------------- */
1515static const unsigned int eth_link_pins[] = {
1516 /* LINK */
1517 RCAR_GP_PIN(3, 18),
1518};
1519static const unsigned int eth_link_mux[] = {
1520 ETH_LINK_MARK,
1521};
1522static const unsigned int eth_magic_pins[] = {
1523 /* MAGIC */
1524 RCAR_GP_PIN(3, 22),
1525};
1526static const unsigned int eth_magic_mux[] = {
1527 ETH_MAGIC_MARK,
1528};
1529static const unsigned int eth_mdio_pins[] = {
1530 /* MDC, MDIO */
1531 RCAR_GP_PIN(3, 24), RCAR_GP_PIN(3, 13),
1532};
1533static const unsigned int eth_mdio_mux[] = {
1534 ETH_MDC_MARK, ETH_MDIO_MARK,
1535};
1536static const unsigned int eth_rmii_pins[] = {
1537 /* RXD[0:1], RX_ER, CRS_DV, TXD[0:1], TX_EN, REF_CLK */
1538 RCAR_GP_PIN(3, 16), RCAR_GP_PIN(3, 17), RCAR_GP_PIN(3, 15),
1539 RCAR_GP_PIN(3, 14), RCAR_GP_PIN(3, 23), RCAR_GP_PIN(3, 20),
1540 RCAR_GP_PIN(3, 21), RCAR_GP_PIN(3, 19),
1541};
1542static const unsigned int eth_rmii_mux[] = {
1543 ETH_RXD0_MARK, ETH_RXD1_MARK, ETH_RX_ER_MARK, ETH_CRS_DV_MARK,
1544 ETH_TXD0_MARK, ETH_TXD1_MARK, ETH_TX_EN_MARK, ETH_REFCLK_MARK,
1545};
1546static const unsigned int eth_link_b_pins[] = {
1547 /* LINK */
1548 RCAR_GP_PIN(5, 15),
1549};
1550static const unsigned int eth_link_b_mux[] = {
1551 ETH_LINK_B_MARK,
1552};
1553static const unsigned int eth_magic_b_pins[] = {
1554 /* MAGIC */
1555 RCAR_GP_PIN(5, 19),
1556};
1557static const unsigned int eth_magic_b_mux[] = {
1558 ETH_MAGIC_B_MARK,
1559};
1560static const unsigned int eth_mdio_b_pins[] = {
1561 /* MDC, MDIO */
1562 RCAR_GP_PIN(5, 21), RCAR_GP_PIN(5, 10),
1563};
1564static const unsigned int eth_mdio_b_mux[] = {
1565 ETH_MDC_B_MARK, ETH_MDIO_B_MARK,
1566};
1567static const unsigned int eth_rmii_b_pins[] = {
1568 /* RXD[0:1], RX_ER, CRS_DV, TXD[0:1], TX_EN, REF_CLK */
1569 RCAR_GP_PIN(5, 13), RCAR_GP_PIN(5, 14), RCAR_GP_PIN(5, 12),
1570 RCAR_GP_PIN(5, 11), RCAR_GP_PIN(5, 20), RCAR_GP_PIN(5, 17),
1571 RCAR_GP_PIN(5, 18), RCAR_GP_PIN(5, 16),
1572};
1573static const unsigned int eth_rmii_b_mux[] = {
1574 ETH_RXD0_B_MARK, ETH_RXD1_B_MARK, ETH_RX_ER_B_MARK, ETH_CRS_DV_B_MARK,
1575 ETH_TXD0_B_MARK, ETH_TXD1_B_MARK, ETH_TX_EN_B_MARK, ETH_REFCLK_B_MARK,
1576};
1577/* - HSCIF0 ----------------------------------------------------------------- */
1578static const unsigned int hscif0_data_pins[] = {
1579 /* RX, TX */
1580 RCAR_GP_PIN(3, 25), RCAR_GP_PIN(3, 26),
1581};
1582static const unsigned int hscif0_data_mux[] = {
1583 HSCIF0_HRX_MARK, HSCIF0_HTX_MARK,
1584};
1585static const unsigned int hscif0_clk_pins[] = {
1586 /* SCK */
1587 RCAR_GP_PIN(3, 29),
1588};
1589static const unsigned int hscif0_clk_mux[] = {
1590 HSCIF0_HSCK_MARK,
1591};
1592static const unsigned int hscif0_ctrl_pins[] = {
1593 /* RTS, CTS */
1594 RCAR_GP_PIN(3, 28), RCAR_GP_PIN(3, 27),
1595};
1596static const unsigned int hscif0_ctrl_mux[] = {
1597 HSCIF0_HRTS_N_MARK, HSCIF0_HCTS_N_MARK,
1598};
1599static const unsigned int hscif0_data_b_pins[] = {
1600 /* RX, TX */
1601 RCAR_GP_PIN(0, 30), RCAR_GP_PIN(0, 31),
1602};
1603static const unsigned int hscif0_data_b_mux[] = {
1604 HSCIF0_HRX_B_MARK, HSCIF0_HTX_B_MARK,
1605};
1606static const unsigned int hscif0_clk_b_pins[] = {
1607 /* SCK */
1608 RCAR_GP_PIN(1, 0),
1609};
1610static const unsigned int hscif0_clk_b_mux[] = {
1611 HSCIF0_HSCK_B_MARK,
1612};
1613/* - HSCIF1 ----------------------------------------------------------------- */
1614static const unsigned int hscif1_data_pins[] = {
1615 /* RX, TX */
1616 RCAR_GP_PIN(4, 8), RCAR_GP_PIN(4, 9),
1617};
1618static const unsigned int hscif1_data_mux[] = {
1619 HSCIF1_HRX_MARK, HSCIF1_HTX_MARK,
1620};
1621static const unsigned int hscif1_clk_pins[] = {
1622 /* SCK */
1623 RCAR_GP_PIN(4, 10),
1624};
1625static const unsigned int hscif1_clk_mux[] = {
1626 HSCIF1_HSCK_MARK,
1627};
1628static const unsigned int hscif1_ctrl_pins[] = {
1629 /* RTS, CTS */
1630 RCAR_GP_PIN(4, 12), RCAR_GP_PIN(4, 11),
1631};
1632static const unsigned int hscif1_ctrl_mux[] = {
1633 HSCIF1_HRTS_N_MARK, HSCIF1_HCTS_N_MARK,
1634};
1635static const unsigned int hscif1_data_b_pins[] = {
1636 /* RX, TX */
1637 RCAR_GP_PIN(5, 13), RCAR_GP_PIN(5, 14),
1638};
1639static const unsigned int hscif1_data_b_mux[] = {
1640 HSCIF1_HRX_B_MARK, HSCIF1_HTX_B_MARK,
1641};
1642static const unsigned int hscif1_ctrl_b_pins[] = {
1643 /* RTS, CTS */
1644 RCAR_GP_PIN(5, 16), RCAR_GP_PIN(5, 15),
1645};
1646static const unsigned int hscif1_ctrl_b_mux[] = {
1647 HSCIF1_HRTS_N_B_MARK, HSCIF1_HCTS_N_B_MARK,
1648};
1649/* - HSCIF2 ----------------------------------------------------------------- */
1650static const unsigned int hscif2_data_pins[] = {
1651 /* RX, TX */
1652 RCAR_GP_PIN(0, 8), RCAR_GP_PIN(0, 9),
1653};
1654static const unsigned int hscif2_data_mux[] = {
1655 HSCIF2_HRX_MARK, HSCIF2_HTX_MARK,
1656};
1657static const unsigned int hscif2_clk_pins[] = {
1658 /* SCK */
1659 RCAR_GP_PIN(0, 10),
1660};
1661static const unsigned int hscif2_clk_mux[] = {
1662 HSCIF2_HSCK_MARK,
1663};
1664static const unsigned int hscif2_ctrl_pins[] = {
1665 /* RTS, CTS */
1666 RCAR_GP_PIN(0, 12), RCAR_GP_PIN(0, 11),
1667};
1668static const unsigned int hscif2_ctrl_mux[] = {
1669 HSCIF2_HRTS_N_MARK, HSCIF2_HCTS_N_MARK,
1670};
1671/* - I2C0 ------------------------------------------------------------------- */
1672static const unsigned int i2c0_pins[] = {
1673 /* SCL, SDA */
1674 RCAR_GP_PIN(3, 30), RCAR_GP_PIN(3, 31),
1675};
1676static const unsigned int i2c0_mux[] = {
1677 I2C0_SCL_MARK, I2C0_SDA_MARK,
1678};
1679static const unsigned int i2c0_b_pins[] = {
1680 /* SCL, SDA */
1681 RCAR_GP_PIN(5, 20), RCAR_GP_PIN(5, 21),
1682};
1683static const unsigned int i2c0_b_mux[] = {
1684 I2C0_SCL_B_MARK, I2C0_SDA_B_MARK,
1685};
1686static const unsigned int i2c0_c_pins[] = {
1687 /* SCL, SDA */
1688 RCAR_GP_PIN(3, 11), RCAR_GP_PIN(3, 12),
1689};
1690static const unsigned int i2c0_c_mux[] = {
1691 I2C0_SCL_C_MARK, I2C0_SDA_C_MARK,
1692};
1693static const unsigned int i2c0_d_pins[] = {
1694 /* SCL, SDA */
1695 RCAR_GP_PIN(0, 5), RCAR_GP_PIN(0, 6),
1696};
1697static const unsigned int i2c0_d_mux[] = {
1698 I2C0_SCL_D_MARK, I2C0_SDA_D_MARK,
1699};
1700static const unsigned int i2c0_e_pins[] = {
1701 /* SCL, SDA */
1702 RCAR_GP_PIN(3, 27), RCAR_GP_PIN(3, 28),
1703};
1704static const unsigned int i2c0_e_mux[] = {
1705 I2C0_SCL_E_MARK, I2C0_SDA_E_MARK,
1706};
1707/* - I2C1 ------------------------------------------------------------------- */
1708static const unsigned int i2c1_pins[] = {
1709 /* SCL, SDA */
1710 RCAR_GP_PIN(4, 0), RCAR_GP_PIN(4, 1),
1711};
1712static const unsigned int i2c1_mux[] = {
1713 I2C1_SCL_MARK, I2C1_SDA_MARK,
1714};
1715static const unsigned int i2c1_b_pins[] = {
1716 /* SCL, SDA */
1717 RCAR_GP_PIN(0, 8), RCAR_GP_PIN(0, 9),
1718};
1719static const unsigned int i2c1_b_mux[] = {
1720 I2C1_SCL_B_MARK, I2C1_SDA_B_MARK,
1721};
1722static const unsigned int i2c1_c_pins[] = {
1723 /* SCL, SDA */
1724 RCAR_GP_PIN(3, 25), RCAR_GP_PIN(3, 26),
1725};
1726static const unsigned int i2c1_c_mux[] = {
1727 I2C1_SCL_C_MARK, I2C1_SDA_C_MARK,
1728};
1729static const unsigned int i2c1_d_pins[] = {
1730 /* SCL, SDA */
1731 RCAR_GP_PIN(0, 11), RCAR_GP_PIN(0, 12),
1732};
1733static const unsigned int i2c1_d_mux[] = {
1734 I2C1_SCL_D_MARK, I2C1_SDA_D_MARK,
1735};
1736static const unsigned int i2c1_e_pins[] = {
1737 /* SCL, SDA */
1738 RCAR_GP_PIN(4, 20), RCAR_GP_PIN(4, 21),
1739};
1740static const unsigned int i2c1_e_mux[] = {
1741 I2C1_SCL_E_MARK, I2C1_SDA_E_MARK,
1742};
1743/* - I2C2 ------------------------------------------------------------------- */
1744static const unsigned int i2c2_pins[] = {
1745 /* SCL, SDA */
1746 RCAR_GP_PIN(4, 22), RCAR_GP_PIN(4, 23),
1747};
1748static const unsigned int i2c2_mux[] = {
1749 I2C2_SCL_MARK, I2C2_SDA_MARK,
1750};
1751static const unsigned int i2c2_b_pins[] = {
1752 /* SCL, SDA */
1753 RCAR_GP_PIN(6, 24), RCAR_GP_PIN(6, 25),
1754};
1755static const unsigned int i2c2_b_mux[] = {
1756 I2C2_SCL_B_MARK, I2C2_SDA_B_MARK,
1757};
1758static const unsigned int i2c2_c_pins[] = {
1759 /* SCL, SDA */
1760 RCAR_GP_PIN(4, 2), RCAR_GP_PIN(4, 3),
1761};
1762static const unsigned int i2c2_c_mux[] = {
1763 I2C2_SCL_C_MARK, I2C2_SDA_C_MARK,
1764};
1765static const unsigned int i2c2_d_pins[] = {
1766 /* SCL, SDA */
1767 RCAR_GP_PIN(2, 0), RCAR_GP_PIN(2, 1),
1768};
1769static const unsigned int i2c2_d_mux[] = {
1770 I2C2_SCL_D_MARK, I2C2_SDA_D_MARK,
1771};
1772static const unsigned int i2c2_e_pins[] = {
1773 /* SCL, SDA */
1774 RCAR_GP_PIN(1, 16), RCAR_GP_PIN(1, 17),
1775};
1776static const unsigned int i2c2_e_mux[] = {
1777 I2C2_SCL_E_MARK, I2C2_SDA_E_MARK,
1778};
1779/* - I2C3 ------------------------------------------------------------------- */
1780static const unsigned int i2c3_pins[] = {
1781 /* SCL, SDA */
1782 RCAR_GP_PIN(3, 9), RCAR_GP_PIN(3, 10),
1783};
1784static const unsigned int i2c3_mux[] = {
1785 I2C3_SCL_MARK, I2C3_SDA_MARK,
1786};
1787static const unsigned int i2c3_b_pins[] = {
1788 /* SCL, SDA */
1789 RCAR_GP_PIN(0, 3), RCAR_GP_PIN(0, 4),
1790};
1791static const unsigned int i2c3_b_mux[] = {
1792 I2C3_SCL_B_MARK, I2C3_SDA_B_MARK,
1793};
1794static const unsigned int i2c3_c_pins[] = {
1795 /* SCL, SDA */
1796 RCAR_GP_PIN(4, 25), RCAR_GP_PIN(4, 26),
1797};
1798static const unsigned int i2c3_c_mux[] = {
1799 I2C3_SCL_C_MARK, I2C3_SDA_C_MARK,
1800};
1801static const unsigned int i2c3_d_pins[] = {
1802 /* SCL, SDA */
1803 RCAR_GP_PIN(2, 8), RCAR_GP_PIN(2, 9),
1804};
1805static const unsigned int i2c3_d_mux[] = {
1806 I2C3_SCL_D_MARK, I2C3_SDA_D_MARK,
1807};
1808static const unsigned int i2c3_e_pins[] = {
1809 /* SCL, SDA */
1810 RCAR_GP_PIN(5, 18), RCAR_GP_PIN(5, 19),
1811};
1812static const unsigned int i2c3_e_mux[] = {
1813 I2C3_SCL_E_MARK, I2C3_SDA_E_MARK,
1814};
1815/* - I2C4 ------------------------------------------------------------------- */
1816static const unsigned int i2c4_pins[] = {
1817 /* SCL, SDA */
1818 RCAR_GP_PIN(4, 8), RCAR_GP_PIN(4, 9),
1819};
1820static const unsigned int i2c4_mux[] = {
1821 I2C4_SCL_MARK, I2C4_SDA_MARK,
1822};
1823static const unsigned int i2c4_b_pins[] = {
1824 /* SCL, SDA */
1825 RCAR_GP_PIN(5, 22), RCAR_GP_PIN(5, 23),
1826};
1827static const unsigned int i2c4_b_mux[] = {
1828 I2C4_SCL_B_MARK, I2C4_SDA_B_MARK,
1829};
1830static const unsigned int i2c4_c_pins[] = {
1831 /* SCL, SDA */
1832 RCAR_GP_PIN(4, 28), RCAR_GP_PIN(4, 29),
1833};
1834static const unsigned int i2c4_c_mux[] = {
1835 I2C4_SCL_C_MARK, I2C4_SDA_C_MARK,
1836};
1837static const unsigned int i2c4_d_pins[] = {
1838 /* SCL, SDA */
1839 RCAR_GP_PIN(2, 16), RCAR_GP_PIN(2, 17),
1840};
1841static const unsigned int i2c4_d_mux[] = {
1842 I2C4_SCL_D_MARK, I2C4_SDA_D_MARK,
1843};
1844static const unsigned int i2c4_e_pins[] = {
1845 /* SCL, SDA */
1846 RCAR_GP_PIN(3, 23), RCAR_GP_PIN(3, 24),
1847};
1848static const unsigned int i2c4_e_mux[] = {
1849 I2C4_SCL_E_MARK, I2C4_SDA_E_MARK,
1850};
1851/* - INTC ------------------------------------------------------------------- */
1852static const unsigned int intc_irq0_pins[] = {
1853 /* IRQ0 */
1854 RCAR_GP_PIN(4, 4),
1855};
1856static const unsigned int intc_irq0_mux[] = {
1857 IRQ0_MARK,
1858};
1859static const unsigned int intc_irq1_pins[] = {
1860 /* IRQ1 */
1861 RCAR_GP_PIN(4, 18),
1862};
1863static const unsigned int intc_irq1_mux[] = {
1864 IRQ1_MARK,
1865};
1866static const unsigned int intc_irq2_pins[] = {
1867 /* IRQ2 */
1868 RCAR_GP_PIN(4, 19),
1869};
1870static const unsigned int intc_irq2_mux[] = {
1871 IRQ2_MARK,
1872};
1873static const unsigned int intc_irq3_pins[] = {
1874 /* IRQ3 */
1875 RCAR_GP_PIN(0, 7),
1876};
1877static const unsigned int intc_irq3_mux[] = {
1878 IRQ3_MARK,
1879};
1880static const unsigned int intc_irq4_pins[] = {
1881 /* IRQ4 */
1882 RCAR_GP_PIN(0, 0),
1883};
1884static const unsigned int intc_irq4_mux[] = {
1885 IRQ4_MARK,
1886};
1887static const unsigned int intc_irq5_pins[] = {
1888 /* IRQ5 */
1889 RCAR_GP_PIN(4, 1),
1890};
1891static const unsigned int intc_irq5_mux[] = {
1892 IRQ5_MARK,
1893};
1894static const unsigned int intc_irq6_pins[] = {
1895 /* IRQ6 */
1896 RCAR_GP_PIN(0, 10),
1897};
1898static const unsigned int intc_irq6_mux[] = {
1899 IRQ6_MARK,
1900};
1901static const unsigned int intc_irq7_pins[] = {
1902 /* IRQ7 */
1903 RCAR_GP_PIN(6, 15),
1904};
1905static const unsigned int intc_irq7_mux[] = {
1906 IRQ7_MARK,
1907};
1908static const unsigned int intc_irq8_pins[] = {
1909 /* IRQ8 */
1910 RCAR_GP_PIN(5, 0),
1911};
1912static const unsigned int intc_irq8_mux[] = {
1913 IRQ8_MARK,
1914};
1915static const unsigned int intc_irq9_pins[] = {
1916 /* IRQ9 */
1917 RCAR_GP_PIN(5, 10),
1918};
1919static const unsigned int intc_irq9_mux[] = {
1920 IRQ9_MARK,
1921};
1922/* - MMCIF ------------------------------------------------------------------ */
1923static const unsigned int mmc_data1_pins[] = {
1924 /* D[0] */
1925 RCAR_GP_PIN(6, 18),
1926};
1927static const unsigned int mmc_data1_mux[] = {
1928 MMC_D0_MARK,
1929};
1930static const unsigned int mmc_data4_pins[] = {
1931 /* D[0:3] */
1932 RCAR_GP_PIN(6, 18), RCAR_GP_PIN(6, 19),
1933 RCAR_GP_PIN(6, 20), RCAR_GP_PIN(6, 21),
1934};
1935static const unsigned int mmc_data4_mux[] = {
1936 MMC_D0_MARK, MMC_D1_MARK, MMC_D2_MARK, MMC_D3_MARK,
1937};
1938static const unsigned int mmc_data8_pins[] = {
1939 /* D[0:7] */
1940 RCAR_GP_PIN(6, 18), RCAR_GP_PIN(6, 19),
1941 RCAR_GP_PIN(6, 20), RCAR_GP_PIN(6, 21),
1942 RCAR_GP_PIN(6, 22), RCAR_GP_PIN(6, 23),
1943 RCAR_GP_PIN(6, 24), RCAR_GP_PIN(6, 25),
1944};
1945static const unsigned int mmc_data8_mux[] = {
1946 MMC_D0_MARK, MMC_D1_MARK, MMC_D2_MARK, MMC_D3_MARK,
1947 MMC_D4_MARK, MMC_D5_MARK, MMC_D6_MARK, MMC_D7_MARK,
1948};
1949static const unsigned int mmc_ctrl_pins[] = {
1950 /* CLK, CMD */
1951 RCAR_GP_PIN(6, 16), RCAR_GP_PIN(6, 17),
1952};
1953static const unsigned int mmc_ctrl_mux[] = {
1954 MMC_CLK_MARK, MMC_CMD_MARK,
1955};
1956/* - MSIOF0 ----------------------------------------------------------------- */
1957static const unsigned int msiof0_clk_pins[] = {
1958 /* SCK */
1959 RCAR_GP_PIN(4, 4),
1960};
1961static const unsigned int msiof0_clk_mux[] = {
1962 MSIOF0_SCK_MARK,
1963};
1964static const unsigned int msiof0_sync_pins[] = {
1965 /* SYNC */
1966 RCAR_GP_PIN(4, 5),
1967};
1968static const unsigned int msiof0_sync_mux[] = {
1969 MSIOF0_SYNC_MARK,
1970};
1971static const unsigned int msiof0_ss1_pins[] = {
1972 /* SS1 */
1973 RCAR_GP_PIN(4, 6),
1974};
1975static const unsigned int msiof0_ss1_mux[] = {
1976 MSIOF0_SS1_MARK,
1977};
1978static const unsigned int msiof0_ss2_pins[] = {
1979 /* SS2 */
1980 RCAR_GP_PIN(4, 7),
1981};
1982static const unsigned int msiof0_ss2_mux[] = {
1983 MSIOF0_SS2_MARK,
1984};
1985static const unsigned int msiof0_rx_pins[] = {
1986 /* RXD */
1987 RCAR_GP_PIN(4, 2),
1988};
1989static const unsigned int msiof0_rx_mux[] = {
1990 MSIOF0_RXD_MARK,
1991};
1992static const unsigned int msiof0_tx_pins[] = {
1993 /* TXD */
1994 RCAR_GP_PIN(4, 3),
1995};
1996static const unsigned int msiof0_tx_mux[] = {
1997 MSIOF0_TXD_MARK,
1998};
1999/* - MSIOF1 ----------------------------------------------------------------- */
2000static const unsigned int msiof1_clk_pins[] = {
2001 /* SCK */
2002 RCAR_GP_PIN(0, 26),
2003};
2004static const unsigned int msiof1_clk_mux[] = {
2005 MSIOF1_SCK_MARK,
2006};
2007static const unsigned int msiof1_sync_pins[] = {
2008 /* SYNC */
2009 RCAR_GP_PIN(0, 27),
2010};
2011static const unsigned int msiof1_sync_mux[] = {
2012 MSIOF1_SYNC_MARK,
2013};
2014static const unsigned int msiof1_ss1_pins[] = {
2015 /* SS1 */
2016 RCAR_GP_PIN(0, 28),
2017};
2018static const unsigned int msiof1_ss1_mux[] = {
2019 MSIOF1_SS1_MARK,
2020};
2021static const unsigned int msiof1_ss2_pins[] = {
2022 /* SS2 */
2023 RCAR_GP_PIN(0, 29),
2024};
2025static const unsigned int msiof1_ss2_mux[] = {
2026 MSIOF1_SS2_MARK,
2027};
2028static const unsigned int msiof1_rx_pins[] = {
2029 /* RXD */
2030 RCAR_GP_PIN(0, 24),
2031};
2032static const unsigned int msiof1_rx_mux[] = {
2033 MSIOF1_RXD_MARK,
2034};
2035static const unsigned int msiof1_tx_pins[] = {
2036 /* TXD */
2037 RCAR_GP_PIN(0, 25),
2038};
2039static const unsigned int msiof1_tx_mux[] = {
2040 MSIOF1_TXD_MARK,
2041};
2042static const unsigned int msiof1_clk_b_pins[] = {
2043 /* SCK */
2044 RCAR_GP_PIN(5, 3),
2045};
2046static const unsigned int msiof1_clk_b_mux[] = {
2047 MSIOF1_SCK_B_MARK,
2048};
2049static const unsigned int msiof1_sync_b_pins[] = {
2050 /* SYNC */
2051 RCAR_GP_PIN(5, 4),
2052};
2053static const unsigned int msiof1_sync_b_mux[] = {
2054 MSIOF1_SYNC_B_MARK,
2055};
2056static const unsigned int msiof1_ss1_b_pins[] = {
2057 /* SS1 */
2058 RCAR_GP_PIN(5, 5),
2059};
2060static const unsigned int msiof1_ss1_b_mux[] = {
2061 MSIOF1_SS1_B_MARK,
2062};
2063static const unsigned int msiof1_ss2_b_pins[] = {
2064 /* SS2 */
2065 RCAR_GP_PIN(5, 6),
2066};
2067static const unsigned int msiof1_ss2_b_mux[] = {
2068 MSIOF1_SS2_B_MARK,
2069};
2070static const unsigned int msiof1_rx_b_pins[] = {
2071 /* RXD */
2072 RCAR_GP_PIN(5, 1),
2073};
2074static const unsigned int msiof1_rx_b_mux[] = {
2075 MSIOF1_RXD_B_MARK,
2076};
2077static const unsigned int msiof1_tx_b_pins[] = {
2078 /* TXD */
2079 RCAR_GP_PIN(5, 2),
2080};
2081static const unsigned int msiof1_tx_b_mux[] = {
2082 MSIOF1_TXD_B_MARK,
2083};
2084/* - MSIOF2 ----------------------------------------------------------------- */
2085static const unsigned int msiof2_clk_pins[] = {
2086 /* SCK */
2087 RCAR_GP_PIN(1, 0),
2088};
2089static const unsigned int msiof2_clk_mux[] = {
2090 MSIOF2_SCK_MARK,
2091};
2092static const unsigned int msiof2_sync_pins[] = {
2093 /* SYNC */
2094 RCAR_GP_PIN(1, 1),
2095};
2096static const unsigned int msiof2_sync_mux[] = {
2097 MSIOF2_SYNC_MARK,
2098};
2099static const unsigned int msiof2_ss1_pins[] = {
2100 /* SS1 */
2101 RCAR_GP_PIN(1, 2),
2102};
2103static const unsigned int msiof2_ss1_mux[] = {
2104 MSIOF2_SS1_MARK,
2105};
2106static const unsigned int msiof2_ss2_pins[] = {
2107 /* SS2 */
2108 RCAR_GP_PIN(1, 3),
2109};
2110static const unsigned int msiof2_ss2_mux[] = {
2111 MSIOF2_SS2_MARK,
2112};
2113static const unsigned int msiof2_rx_pins[] = {
2114 /* RXD */
2115 RCAR_GP_PIN(0, 30),
2116};
2117static const unsigned int msiof2_rx_mux[] = {
2118 MSIOF2_RXD_MARK,
2119};
2120static const unsigned int msiof2_tx_pins[] = {
2121 /* TXD */
2122 RCAR_GP_PIN(0, 31),
2123};
2124static const unsigned int msiof2_tx_mux[] = {
2125 MSIOF2_TXD_MARK,
2126};
2127static const unsigned int msiof2_clk_b_pins[] = {
2128 /* SCK */
2129 RCAR_GP_PIN(3, 15),
2130};
2131static const unsigned int msiof2_clk_b_mux[] = {
2132 MSIOF2_SCK_B_MARK,
2133};
2134static const unsigned int msiof2_sync_b_pins[] = {
2135 /* SYNC */
2136 RCAR_GP_PIN(3, 16),
2137};
2138static const unsigned int msiof2_sync_b_mux[] = {
2139 MSIOF2_SYNC_B_MARK,
2140};
2141static const unsigned int msiof2_ss1_b_pins[] = {
2142 /* SS1 */
2143 RCAR_GP_PIN(3, 17),
2144};
2145static const unsigned int msiof2_ss1_b_mux[] = {
2146 MSIOF2_SS1_B_MARK,
2147};
2148static const unsigned int msiof2_ss2_b_pins[] = {
2149 /* SS2 */
2150 RCAR_GP_PIN(3, 18),
2151};
2152static const unsigned int msiof2_ss2_b_mux[] = {
2153 MSIOF2_SS2_B_MARK,
2154};
2155static const unsigned int msiof2_rx_b_pins[] = {
2156 /* RXD */
2157 RCAR_GP_PIN(3, 13),
2158};
2159static const unsigned int msiof2_rx_b_mux[] = {
2160 MSIOF2_RXD_B_MARK,
2161};
2162static const unsigned int msiof2_tx_b_pins[] = {
2163 /* TXD */
2164 RCAR_GP_PIN(3, 14),
2165};
2166static const unsigned int msiof2_tx_b_mux[] = {
2167 MSIOF2_TXD_B_MARK,
2168};
2169/* - QSPI ------------------------------------------------------------------- */
2170static const unsigned int qspi_ctrl_pins[] = {
2171 /* SPCLK, SSL */
2172 RCAR_GP_PIN(1, 4), RCAR_GP_PIN(1, 9),
2173};
2174static const unsigned int qspi_ctrl_mux[] = {
2175 SPCLK_MARK, SSL_MARK,
2176};
2177static const unsigned int qspi_data2_pins[] = {
2178 /* MOSI_IO0, MISO_IO1 */
2179 RCAR_GP_PIN(1, 5), RCAR_GP_PIN(1, 6),
2180};
2181static const unsigned int qspi_data2_mux[] = {
2182 MOSI_IO0_MARK, MISO_IO1_MARK,
2183};
2184static const unsigned int qspi_data4_pins[] = {
2185 /* MOSI_IO0, MISO_IO1, IO2, IO3 */
2186 RCAR_GP_PIN(1, 5), RCAR_GP_PIN(1, 6), RCAR_GP_PIN(1, 7),
2187 RCAR_GP_PIN(1, 8),
2188};
2189static const unsigned int qspi_data4_mux[] = {
2190 MOSI_IO0_MARK, MISO_IO1_MARK, IO2_MARK, IO3_MARK,
2191};
2192/* - SCIF0 ------------------------------------------------------------------ */
2193static const unsigned int scif0_data_pins[] = {
2194 /* RX, TX */
2195 RCAR_GP_PIN(6, 24), RCAR_GP_PIN(6, 25),
2196};
2197static const unsigned int scif0_data_mux[] = {
2198 SCIF0_RXD_MARK, SCIF0_TXD_MARK,
2199};
2200static const unsigned int scif0_clk_pins[] = {
2201 /* SCK */
2202 RCAR_GP_PIN(1, 23),
2203};
2204static const unsigned int scif0_clk_mux[] = {
2205 SCIF_CLK_MARK,
2206};
2207static const unsigned int scif0_data_b_pins[] = {
2208 /* RX, TX */
2209 RCAR_GP_PIN(3, 11), RCAR_GP_PIN(3, 12),
2210};
2211static const unsigned int scif0_data_b_mux[] = {
2212 SCIF0_RXD_B_MARK, SCIF0_TXD_B_MARK,
2213};
2214static const unsigned int scif0_clk_b_pins[] = {
2215 /* SCK */
2216 RCAR_GP_PIN(3, 29),
2217};
2218static const unsigned int scif0_clk_b_mux[] = {
2219 SCIF_CLK_B_MARK,
2220};
2221static const unsigned int scif0_data_c_pins[] = {
2222 /* RX, TX */
2223 RCAR_GP_PIN(3, 30), RCAR_GP_PIN(3, 31),
2224};
2225static const unsigned int scif0_data_c_mux[] = {
2226 SCIF0_RXD_C_MARK, SCIF0_TXD_C_MARK,
2227};
2228static const unsigned int scif0_data_d_pins[] = {
2229 /* RX, TX */
2230 RCAR_GP_PIN(3, 27), RCAR_GP_PIN(3, 28),
2231};
2232static const unsigned int scif0_data_d_mux[] = {
2233 SCIF0_RXD_D_MARK, SCIF0_TXD_D_MARK,
2234};
2235/* - SCIF1 ------------------------------------------------------------------ */
2236static const unsigned int scif1_data_pins[] = {
2237 /* RX, TX */
2238 RCAR_GP_PIN(4, 14), RCAR_GP_PIN(4, 15),
2239};
2240static const unsigned int scif1_data_mux[] = {
2241 SCIF1_RXD_MARK, SCIF1_TXD_MARK,
2242};
2243static const unsigned int scif1_clk_pins[] = {
2244 /* SCK */
2245 RCAR_GP_PIN(4, 13),
2246};
2247static const unsigned int scif1_clk_mux[] = {
2248 SCIF1_SCK_MARK,
2249};
2250static const unsigned int scif1_data_b_pins[] = {
2251 /* RX, TX */
2252 RCAR_GP_PIN(5, 11), RCAR_GP_PIN(5, 12),
2253};
2254static const unsigned int scif1_data_b_mux[] = {
2255 SCIF1_RXD_B_MARK, SCIF1_TXD_B_MARK,
2256};
2257static const unsigned int scif1_clk_b_pins[] = {
2258 /* SCK */
2259 RCAR_GP_PIN(5, 10),
2260};
2261static const unsigned int scif1_clk_b_mux[] = {
2262 SCIF1_SCK_B_MARK,
2263};
2264static const unsigned int scif1_data_c_pins[] = {
2265 /* RX, TX */
2266 RCAR_GP_PIN(0, 11), RCAR_GP_PIN(0, 12),
2267};
2268static const unsigned int scif1_data_c_mux[] = {
2269 SCIF1_RXD_C_MARK, SCIF1_TXD_C_MARK,
2270};
2271static const unsigned int scif1_clk_c_pins[] = {
2272 /* SCK */
2273 RCAR_GP_PIN(0, 10),
2274};
2275static const unsigned int scif1_clk_c_mux[] = {
2276 SCIF1_SCK_C_MARK,
2277};
2278/* - SCIF2 ------------------------------------------------------------------ */
2279static const unsigned int scif2_data_pins[] = {
2280 /* RX, TX */
2281 RCAR_GP_PIN(4, 16), RCAR_GP_PIN(4, 17),
2282};
2283static const unsigned int scif2_data_mux[] = {
2284 SCIF2_RXD_MARK, SCIF2_TXD_MARK,
2285};
2286static const unsigned int scif2_clk_pins[] = {
2287 /* SCK */
2288 RCAR_GP_PIN(4, 18),
2289};
2290static const unsigned int scif2_clk_mux[] = {
2291 SCIF2_SCK_MARK,
2292};
2293static const unsigned int scif2_data_b_pins[] = {
2294 /* RX, TX */
2295 RCAR_GP_PIN(5, 18), RCAR_GP_PIN(5, 19),
2296};
2297static const unsigned int scif2_data_b_mux[] = {
2298 SCIF2_RXD_B_MARK, SCIF2_TXD_B_MARK,
2299};
2300static const unsigned int scif2_clk_b_pins[] = {
2301 /* SCK */
2302 RCAR_GP_PIN(5, 17),
2303};
2304static const unsigned int scif2_clk_b_mux[] = {
2305 SCIF2_SCK_B_MARK,
2306};
2307static const unsigned int scif2_data_c_pins[] = {
2308 /* RX, TX */
2309 RCAR_GP_PIN(3, 20), RCAR_GP_PIN(3, 21),
2310};
2311static const unsigned int scif2_data_c_mux[] = {
2312 SCIF2_RXD_C_MARK, SCIF2_TXD_C_MARK,
2313};
2314static const unsigned int scif2_clk_c_pins[] = {
2315 /* SCK */
2316 RCAR_GP_PIN(3, 19),
2317};
2318static const unsigned int scif2_clk_c_mux[] = {
2319 SCIF2_SCK_C_MARK,
2320};
2321/* - SCIF3 ------------------------------------------------------------------ */
2322static const unsigned int scif3_data_pins[] = {
2323 /* RX, TX */
2324 RCAR_GP_PIN(4, 20), RCAR_GP_PIN(4, 21),
2325};
2326static const unsigned int scif3_data_mux[] = {
2327 SCIF3_RXD_MARK, SCIF3_TXD_MARK,
2328};
2329static const unsigned int scif3_clk_pins[] = {
2330 /* SCK */
2331 RCAR_GP_PIN(4, 19),
2332};
2333static const unsigned int scif3_clk_mux[] = {
2334 SCIF3_SCK_MARK,
2335};
2336static const unsigned int scif3_data_b_pins[] = {
2337 /* RX, TX */
2338 RCAR_GP_PIN(3, 23), RCAR_GP_PIN(3, 24),
2339};
2340static const unsigned int scif3_data_b_mux[] = {
2341 SCIF3_RXD_B_MARK, SCIF3_TXD_B_MARK,
2342};
2343static const unsigned int scif3_clk_b_pins[] = {
2344 /* SCK */
2345 RCAR_GP_PIN(3, 22),
2346};
2347static const unsigned int scif3_clk_b_mux[] = {
2348 SCIF3_SCK_B_MARK,
2349};
2350/* - SCIF4 ------------------------------------------------------------------ */
2351static const unsigned int scif4_data_pins[] = {
2352 /* RX, TX */
2353 RCAR_GP_PIN(4, 0), RCAR_GP_PIN(4, 1),
2354};
2355static const unsigned int scif4_data_mux[] = {
2356 SCIF4_RXD_MARK, SCIF4_TXD_MARK,
2357};
2358static const unsigned int scif4_data_b_pins[] = {
2359 /* RX, TX */
2360 RCAR_GP_PIN(0, 5), RCAR_GP_PIN(0, 6),
2361};
2362static const unsigned int scif4_data_b_mux[] = {
2363 SCIF4_RXD_B_MARK, SCIF4_TXD_B_MARK,
2364};
2365static const unsigned int scif4_data_c_pins[] = {
2366 /* RX, TX */
2367 RCAR_GP_PIN(1, 14), RCAR_GP_PIN(1, 15),
2368};
2369static const unsigned int scif4_data_c_mux[] = {
2370 SCIF4_RXD_C_MARK, SCIF4_TXD_C_MARK,
2371};
2372static const unsigned int scif4_data_d_pins[] = {
2373 /* RX, TX */
2374 RCAR_GP_PIN(3, 17), RCAR_GP_PIN(3, 18),
2375};
2376static const unsigned int scif4_data_d_mux[] = {
2377 SCIF4_RXD_D_MARK, SCIF4_TXD_D_MARK,
2378};
2379static const unsigned int scif4_data_e_pins[] = {
2380 /* RX, TX */
2381 RCAR_GP_PIN(1, 1), RCAR_GP_PIN(1, 2),
2382};
2383static const unsigned int scif4_data_e_mux[] = {
2384 SCIF4_RXD_E_MARK, SCIF4_TXD_E_MARK,
2385};
2386/* - SCIF5 ------------------------------------------------------------------ */
2387static const unsigned int scif5_data_pins[] = {
2388 /* RX, TX */
2389 RCAR_GP_PIN(4, 2), RCAR_GP_PIN(4, 3),
2390};
2391static const unsigned int scif5_data_mux[] = {
2392 SCIF5_RXD_MARK, SCIF5_TXD_MARK,
2393};
2394static const unsigned int scif5_data_b_pins[] = {
2395 /* RX, TX */
2396 RCAR_GP_PIN(0, 3), RCAR_GP_PIN(0, 4),
2397};
2398static const unsigned int scif5_data_b_mux[] = {
2399 SCIF5_RXD_B_MARK, SCIF5_TXD_B_MARK,
2400};
2401static const unsigned int scif5_data_c_pins[] = {
2402 /* RX, TX */
2403 RCAR_GP_PIN(2, 0), RCAR_GP_PIN(2, 11),
2404};
2405static const unsigned int scif5_data_c_mux[] = {
2406 SCIF5_RXD_C_MARK, SCIF5_TXD_C_MARK,
2407};
2408static const unsigned int scif5_data_d_pins[] = {
2409 /* RX, TX */
2410 RCAR_GP_PIN(5, 1), RCAR_GP_PIN(5, 2),
2411};
2412static const unsigned int scif5_data_d_mux[] = {
2413 SCIF5_RXD_D_MARK, SCIF5_TXD_D_MARK,
2414};
2415/* - SCIFA0 ----------------------------------------------------------------- */
2416static const unsigned int scifa0_data_pins[] = {
2417 /* RXD, TXD */
2418 RCAR_GP_PIN(4, 6), RCAR_GP_PIN(4, 7),
2419};
2420static const unsigned int scifa0_data_mux[] = {
2421 SCIFA0_RXD_MARK, SCIFA0_TXD_MARK,
2422};
2423static const unsigned int scifa0_data_b_pins[] = {
2424 /* RXD, TXD */
2425 RCAR_GP_PIN(0, 24), RCAR_GP_PIN(0, 25),
2426};
2427static const unsigned int scifa0_data_b_mux[] = {
2428 SCIFA0_RXD_B_MARK, SCIFA0_TXD_B_MARK
2429};
2430static const unsigned int scifa0_data_c_pins[] = {
2431 /* RXD, TXD */
2432 RCAR_GP_PIN(2, 8), RCAR_GP_PIN(2, 9),
2433};
2434static const unsigned int scifa0_data_c_mux[] = {
2435 SCIFA0_RXD_C_MARK, SCIFA0_TXD_C_MARK
2436};
2437static const unsigned int scifa0_data_d_pins[] = {
2438 /* RXD, TXD */
2439 RCAR_GP_PIN(5, 15), RCAR_GP_PIN(5, 16),
2440};
2441static const unsigned int scifa0_data_d_mux[] = {
2442 SCIFA0_RXD_D_MARK, SCIFA0_TXD_D_MARK
2443};
2444/* - SCIFA1 ----------------------------------------------------------------- */
2445static const unsigned int scifa1_data_pins[] = {
2446 /* RXD, TXD */
2447 RCAR_GP_PIN(0, 14), RCAR_GP_PIN(0, 15),
2448};
2449static const unsigned int scifa1_data_mux[] = {
2450 SCIFA1_RXD_MARK, SCIFA1_TXD_MARK,
2451};
2452static const unsigned int scifa1_clk_pins[] = {
2453 /* SCK */
2454 RCAR_GP_PIN(0, 13),
2455};
2456static const unsigned int scifa1_clk_mux[] = {
2457 SCIFA1_SCK_MARK,
2458};
2459static const unsigned int scifa1_data_b_pins[] = {
2460 /* RXD, TXD */
2461 RCAR_GP_PIN(4, 28), RCAR_GP_PIN(4, 29),
2462};
2463static const unsigned int scifa1_data_b_mux[] = {
2464 SCIFA1_RXD_B_MARK, SCIFA1_TXD_B_MARK,
2465};
2466static const unsigned int scifa1_clk_b_pins[] = {
2467 /* SCK */
2468 RCAR_GP_PIN(4, 27),
2469};
2470static const unsigned int scifa1_clk_b_mux[] = {
2471 SCIFA1_SCK_B_MARK,
2472};
2473static const unsigned int scifa1_data_c_pins[] = {
2474 /* RXD, TXD */
2475 RCAR_GP_PIN(5, 5), RCAR_GP_PIN(5, 6),
2476};
2477static const unsigned int scifa1_data_c_mux[] = {
2478 SCIFA1_RXD_C_MARK, SCIFA1_TXD_C_MARK,
2479};
2480static const unsigned int scifa1_clk_c_pins[] = {
2481 /* SCK */
2482 RCAR_GP_PIN(5, 4),
2483};
2484static const unsigned int scifa1_clk_c_mux[] = {
2485 SCIFA1_SCK_C_MARK,
2486};
2487/* - SCIFA2 ----------------------------------------------------------------- */
2488static const unsigned int scifa2_data_pins[] = {
2489 /* RXD, TXD */
2490 RCAR_GP_PIN(1, 16), RCAR_GP_PIN(1, 17),
2491};
2492static const unsigned int scifa2_data_mux[] = {
2493 SCIFA2_RXD_MARK, SCIFA2_TXD_MARK,
2494};
2495static const unsigned int scifa2_clk_pins[] = {
2496 /* SCK */
2497 RCAR_GP_PIN(1, 15),
2498};
2499static const unsigned int scifa2_clk_mux[] = {
2500 SCIFA2_SCK_MARK,
2501};
2502static const unsigned int scifa2_data_b_pins[] = {
2503 /* RXD, TXD */
2504 RCAR_GP_PIN(4, 31), RCAR_GP_PIN(5, 0),
2505};
2506static const unsigned int scifa2_data_b_mux[] = {
2507 SCIFA2_RXD_B_MARK, SCIFA2_TXD_B_MARK,
2508};
2509static const unsigned int scifa2_clk_b_pins[] = {
2510 /* SCK */
2511 RCAR_GP_PIN(4, 30),
2512};
2513static const unsigned int scifa2_clk_b_mux[] = {
2514 SCIFA2_SCK_B_MARK,
2515};
2516/* - SCIFA3 ----------------------------------------------------------------- */
2517static const unsigned int scifa3_data_pins[] = {
2518 /* RXD, TXD */
2519 RCAR_GP_PIN(4, 25), RCAR_GP_PIN(4, 26),
2520};
2521static const unsigned int scifa3_data_mux[] = {
2522 SCIFA3_RXD_MARK, SCIFA3_TXD_MARK,
2523};
2524static const unsigned int scifa3_clk_pins[] = {
2525 /* SCK */
2526 RCAR_GP_PIN(4, 24),
2527};
2528static const unsigned int scifa3_clk_mux[] = {
2529 SCIFA3_SCK_MARK,
2530};
2531static const unsigned int scifa3_data_b_pins[] = {
2532 /* RXD, TXD */
2533 RCAR_GP_PIN(0, 1), RCAR_GP_PIN(0, 2),
2534};
2535static const unsigned int scifa3_data_b_mux[] = {
2536 SCIFA3_RXD_B_MARK, SCIFA3_TXD_B_MARK,
2537};
2538static const unsigned int scifa3_clk_b_pins[] = {
2539 /* SCK */
2540 RCAR_GP_PIN(0, 0),
2541};
2542static const unsigned int scifa3_clk_b_mux[] = {
2543 SCIFA3_SCK_B_MARK,
2544};
2545/* - SCIFA4 ----------------------------------------------------------------- */
2546static const unsigned int scifa4_data_pins[] = {
2547 /* RXD, TXD */
2548 RCAR_GP_PIN(4, 12), RCAR_GP_PIN(4, 12),
2549};
2550static const unsigned int scifa4_data_mux[] = {
2551 SCIFA4_RXD_MARK, SCIFA4_TXD_MARK,
2552};
2553static const unsigned int scifa4_data_b_pins[] = {
2554 /* RXD, TXD */
2555 RCAR_GP_PIN(0, 22), RCAR_GP_PIN(0, 23),
2556};
2557static const unsigned int scifa4_data_b_mux[] = {
2558 SCIFA4_RXD_B_MARK, SCIFA4_TXD_B_MARK,
2559};
2560static const unsigned int scifa4_data_c_pins[] = {
2561 /* RXD, TXD */
2562 RCAR_GP_PIN(2, 16), RCAR_GP_PIN(2, 17),
2563};
2564static const unsigned int scifa4_data_c_mux[] = {
2565 SCIFA4_RXD_C_MARK, SCIFA4_TXD_C_MARK,
2566};
2567static const unsigned int scifa4_data_d_pins[] = {
2568 /* RXD, TXD */
2569 RCAR_GP_PIN(5, 20), RCAR_GP_PIN(5, 21),
2570};
2571static const unsigned int scifa4_data_d_mux[] = {
2572 SCIFA4_RXD_D_MARK, SCIFA4_TXD_D_MARK,
2573};
2574/* - SCIFA5 ----------------------------------------------------------------- */
2575static const unsigned int scifa5_data_pins[] = {
2576 /* RXD, TXD */
2577 RCAR_GP_PIN(4, 22), RCAR_GP_PIN(4, 23),
2578};
2579static const unsigned int scifa5_data_mux[] = {
2580 SCIFA5_RXD_MARK, SCIFA5_TXD_MARK,
2581};
2582static const unsigned int scifa5_data_b_pins[] = {
2583 /* RXD, TXD */
2584 RCAR_GP_PIN(0, 28), RCAR_GP_PIN(0, 29),
2585};
2586static const unsigned int scifa5_data_b_mux[] = {
2587 SCIFA5_RXD_B_MARK, SCIFA5_TXD_B_MARK,
2588};
2589static const unsigned int scifa5_data_c_pins[] = {
2590 /* RXD, TXD */
2591 RCAR_GP_PIN(3, 9), RCAR_GP_PIN(3, 10),
2592};
2593static const unsigned int scifa5_data_c_mux[] = {
2594 SCIFA5_RXD_C_MARK, SCIFA5_TXD_C_MARK,
2595};
2596static const unsigned int scifa5_data_d_pins[] = {
2597 /* RXD, TXD */
2598 RCAR_GP_PIN(5, 22), RCAR_GP_PIN(5, 23),
2599};
2600static const unsigned int scifa5_data_d_mux[] = {
2601 SCIFA5_RXD_D_MARK, SCIFA5_TXD_D_MARK,
2602};
2603/* - SCIFB0 ----------------------------------------------------------------- */
2604static const unsigned int scifb0_data_pins[] = {
2605 /* RXD, TXD */
2606 RCAR_GP_PIN(0, 21), RCAR_GP_PIN(0, 20),
2607};
2608static const unsigned int scifb0_data_mux[] = {
2609 SCIFB0_RXD_MARK, SCIFB0_TXD_MARK,
2610};
2611static const unsigned int scifb0_clk_pins[] = {
2612 /* SCK */
2613 RCAR_GP_PIN(0, 19),
2614};
2615static const unsigned int scifb0_clk_mux[] = {
2616 SCIFB0_SCK_MARK,
2617};
2618static const unsigned int scifb0_ctrl_pins[] = {
2619 /* RTS, CTS */
2620 RCAR_GP_PIN(0, 23), RCAR_GP_PIN(0, 22),
2621};
2622static const unsigned int scifb0_ctrl_mux[] = {
2623 SCIFB0_RTS_N_MARK, SCIFB0_CTS_N_MARK,
2624};
2625/* - SCIFB1 ----------------------------------------------------------------- */
2626static const unsigned int scifb1_data_pins[] = {
2627 /* RXD, TXD */
2628 RCAR_GP_PIN(1, 24), RCAR_GP_PIN(0, 17),
2629};
2630static const unsigned int scifb1_data_mux[] = {
2631 SCIFB1_RXD_MARK, SCIFB1_TXD_MARK,
2632};
2633static const unsigned int scifb1_clk_pins[] = {
2634 /* SCK */
2635 RCAR_GP_PIN(0, 16),
2636};
2637static const unsigned int scifb1_clk_mux[] = {
2638 SCIFB1_SCK_MARK,
2639};
2640/* - SCIFB2 ----------------------------------------------------------------- */
2641static const unsigned int scifb2_data_pins[] = {
2642 /* RXD, TXD */
2643 RCAR_GP_PIN(1, 13), RCAR_GP_PIN(1, 14),
2644};
2645static const unsigned int scifb2_data_mux[] = {
2646 SCIFB2_RXD_MARK, SCIFB2_TXD_MARK,
2647};
2648static const unsigned int scifb2_clk_pins[] = {
2649 /* SCK */
2650 RCAR_GP_PIN(1, 15),
2651};
2652static const unsigned int scifb2_clk_mux[] = {
2653 SCIFB2_SCK_MARK,
2654};
2655static const unsigned int scifb2_ctrl_pins[] = {
2656 /* RTS, CTS */
2657 RCAR_GP_PIN(1, 17), RCAR_GP_PIN(1, 16),
2658};
2659static const unsigned int scifb2_ctrl_mux[] = {
2660 SCIFB2_RTS_N_MARK, SCIFB2_CTS_N_MARK,
2661};
2662/* - SDHI0 ------------------------------------------------------------------ */
2663static const unsigned int sdhi0_data1_pins[] = {
2664 /* D0 */
2665 RCAR_GP_PIN(6, 2),
2666};
2667static const unsigned int sdhi0_data1_mux[] = {
2668 SD0_DATA0_MARK,
2669};
2670static const unsigned int sdhi0_data4_pins[] = {
2671 /* D[0:3] */
2672 RCAR_GP_PIN(6, 2), RCAR_GP_PIN(6, 3),
2673 RCAR_GP_PIN(6, 4), RCAR_GP_PIN(6, 5),
2674};
2675static const unsigned int sdhi0_data4_mux[] = {
2676 SD0_DATA0_MARK, SD0_DATA1_MARK, SD0_DATA2_MARK, SD0_DATA3_MARK,
2677};
2678static const unsigned int sdhi0_ctrl_pins[] = {
2679 /* CLK, CMD */
2680 RCAR_GP_PIN(6, 0), RCAR_GP_PIN(6, 1),
2681};
2682static const unsigned int sdhi0_ctrl_mux[] = {
2683 SD0_CLK_MARK, SD0_CMD_MARK,
2684};
2685static const unsigned int sdhi0_cd_pins[] = {
2686 /* CD */
2687 RCAR_GP_PIN(6, 6),
2688};
2689static const unsigned int sdhi0_cd_mux[] = {
2690 SD0_CD_MARK,
2691};
2692static const unsigned int sdhi0_wp_pins[] = {
2693 /* WP */
2694 RCAR_GP_PIN(6, 7),
2695};
2696static const unsigned int sdhi0_wp_mux[] = {
2697 SD0_WP_MARK,
2698};
2699/* - SDHI1 ------------------------------------------------------------------ */
2700static const unsigned int sdhi1_data1_pins[] = {
2701 /* D0 */
2702 RCAR_GP_PIN(6, 10),
2703};
2704static const unsigned int sdhi1_data1_mux[] = {
2705 SD1_DATA0_MARK,
2706};
2707static const unsigned int sdhi1_data4_pins[] = {
2708 /* D[0:3] */
2709 RCAR_GP_PIN(6, 10), RCAR_GP_PIN(6, 11),
2710 RCAR_GP_PIN(6, 12), RCAR_GP_PIN(6, 13),
2711};
2712static const unsigned int sdhi1_data4_mux[] = {
2713 SD1_DATA0_MARK, SD1_DATA1_MARK, SD1_DATA2_MARK, SD1_DATA3_MARK,
2714};
2715static const unsigned int sdhi1_ctrl_pins[] = {
2716 /* CLK, CMD */
2717 RCAR_GP_PIN(6, 8), RCAR_GP_PIN(6, 9),
2718};
2719static const unsigned int sdhi1_ctrl_mux[] = {
2720 SD1_CLK_MARK, SD1_CMD_MARK,
2721};
2722static const unsigned int sdhi1_cd_pins[] = {
2723 /* CD */
2724 RCAR_GP_PIN(6, 14),
2725};
2726static const unsigned int sdhi1_cd_mux[] = {
2727 SD1_CD_MARK,
2728};
2729static const unsigned int sdhi1_wp_pins[] = {
2730 /* WP */
2731 RCAR_GP_PIN(6, 15),
2732};
2733static const unsigned int sdhi1_wp_mux[] = {
2734 SD1_WP_MARK,
2735};
2736/* - SDHI2 ------------------------------------------------------------------ */
2737static const unsigned int sdhi2_data1_pins[] = {
2738 /* D0 */
2739 RCAR_GP_PIN(6, 18),
2740};
2741static const unsigned int sdhi2_data1_mux[] = {
2742 SD2_DATA0_MARK,
2743};
2744static const unsigned int sdhi2_data4_pins[] = {
2745 /* D[0:3] */
2746 RCAR_GP_PIN(6, 18), RCAR_GP_PIN(6, 19),
2747 RCAR_GP_PIN(6, 20), RCAR_GP_PIN(6, 21),
2748};
2749static const unsigned int sdhi2_data4_mux[] = {
2750 SD2_DATA0_MARK, SD2_DATA1_MARK, SD2_DATA2_MARK, SD2_DATA3_MARK,
2751};
2752static const unsigned int sdhi2_ctrl_pins[] = {
2753 /* CLK, CMD */
2754 RCAR_GP_PIN(6, 16), RCAR_GP_PIN(6, 17),
2755};
2756static const unsigned int sdhi2_ctrl_mux[] = {
2757 SD2_CLK_MARK, SD2_CMD_MARK,
2758};
2759static const unsigned int sdhi2_cd_pins[] = {
2760 /* CD */
2761 RCAR_GP_PIN(6, 22),
2762};
2763static const unsigned int sdhi2_cd_mux[] = {
2764 SD2_CD_MARK,
2765};
2766static const unsigned int sdhi2_wp_pins[] = {
2767 /* WP */
2768 RCAR_GP_PIN(6, 23),
2769};
2770static const unsigned int sdhi2_wp_mux[] = {
2771 SD2_WP_MARK,
2772};
2773
2774static const struct sh_pfc_pin_group pinmux_groups[] = {
2775 SH_PFC_PIN_GROUP(eth_link),
2776 SH_PFC_PIN_GROUP(eth_magic),
2777 SH_PFC_PIN_GROUP(eth_mdio),
2778 SH_PFC_PIN_GROUP(eth_rmii),
2779 SH_PFC_PIN_GROUP(eth_link_b),
2780 SH_PFC_PIN_GROUP(eth_magic_b),
2781 SH_PFC_PIN_GROUP(eth_mdio_b),
2782 SH_PFC_PIN_GROUP(eth_rmii_b),
2783 SH_PFC_PIN_GROUP(hscif0_data),
2784 SH_PFC_PIN_GROUP(hscif0_clk),
2785 SH_PFC_PIN_GROUP(hscif0_ctrl),
2786 SH_PFC_PIN_GROUP(hscif0_data_b),
2787 SH_PFC_PIN_GROUP(hscif0_clk_b),
2788 SH_PFC_PIN_GROUP(hscif1_data),
2789 SH_PFC_PIN_GROUP(hscif1_clk),
2790 SH_PFC_PIN_GROUP(hscif1_ctrl),
2791 SH_PFC_PIN_GROUP(hscif1_data_b),
2792 SH_PFC_PIN_GROUP(hscif1_ctrl_b),
2793 SH_PFC_PIN_GROUP(hscif2_data),
2794 SH_PFC_PIN_GROUP(hscif2_clk),
2795 SH_PFC_PIN_GROUP(hscif2_ctrl),
2796 SH_PFC_PIN_GROUP(i2c0),
2797 SH_PFC_PIN_GROUP(i2c0_b),
2798 SH_PFC_PIN_GROUP(i2c0_c),
2799 SH_PFC_PIN_GROUP(i2c0_d),
2800 SH_PFC_PIN_GROUP(i2c0_e),
2801 SH_PFC_PIN_GROUP(i2c1),
2802 SH_PFC_PIN_GROUP(i2c1_b),
2803 SH_PFC_PIN_GROUP(i2c1_c),
2804 SH_PFC_PIN_GROUP(i2c1_d),
2805 SH_PFC_PIN_GROUP(i2c1_e),
2806 SH_PFC_PIN_GROUP(i2c2),
2807 SH_PFC_PIN_GROUP(i2c2_b),
2808 SH_PFC_PIN_GROUP(i2c2_c),
2809 SH_PFC_PIN_GROUP(i2c2_d),
2810 SH_PFC_PIN_GROUP(i2c2_e),
2811 SH_PFC_PIN_GROUP(i2c3),
2812 SH_PFC_PIN_GROUP(i2c3_b),
2813 SH_PFC_PIN_GROUP(i2c3_c),
2814 SH_PFC_PIN_GROUP(i2c3_d),
2815 SH_PFC_PIN_GROUP(i2c3_e),
2816 SH_PFC_PIN_GROUP(i2c4),
2817 SH_PFC_PIN_GROUP(i2c4_b),
2818 SH_PFC_PIN_GROUP(i2c4_c),
2819 SH_PFC_PIN_GROUP(i2c4_d),
2820 SH_PFC_PIN_GROUP(i2c4_e),
2821 SH_PFC_PIN_GROUP(intc_irq0),
2822 SH_PFC_PIN_GROUP(intc_irq1),
2823 SH_PFC_PIN_GROUP(intc_irq2),
2824 SH_PFC_PIN_GROUP(intc_irq3),
2825 SH_PFC_PIN_GROUP(intc_irq4),
2826 SH_PFC_PIN_GROUP(intc_irq5),
2827 SH_PFC_PIN_GROUP(intc_irq6),
2828 SH_PFC_PIN_GROUP(intc_irq7),
2829 SH_PFC_PIN_GROUP(intc_irq8),
2830 SH_PFC_PIN_GROUP(intc_irq9),
2831 SH_PFC_PIN_GROUP(mmc_data1),
2832 SH_PFC_PIN_GROUP(mmc_data4),
2833 SH_PFC_PIN_GROUP(mmc_data8),
2834 SH_PFC_PIN_GROUP(mmc_ctrl),
2835 SH_PFC_PIN_GROUP(msiof0_clk),
2836 SH_PFC_PIN_GROUP(msiof0_sync),
2837 SH_PFC_PIN_GROUP(msiof0_ss1),
2838 SH_PFC_PIN_GROUP(msiof0_ss2),
2839 SH_PFC_PIN_GROUP(msiof0_rx),
2840 SH_PFC_PIN_GROUP(msiof0_tx),
2841 SH_PFC_PIN_GROUP(msiof1_clk),
2842 SH_PFC_PIN_GROUP(msiof1_sync),
2843 SH_PFC_PIN_GROUP(msiof1_ss1),
2844 SH_PFC_PIN_GROUP(msiof1_ss2),
2845 SH_PFC_PIN_GROUP(msiof1_rx),
2846 SH_PFC_PIN_GROUP(msiof1_tx),
2847 SH_PFC_PIN_GROUP(msiof1_clk_b),
2848 SH_PFC_PIN_GROUP(msiof1_sync_b),
2849 SH_PFC_PIN_GROUP(msiof1_ss1_b),
2850 SH_PFC_PIN_GROUP(msiof1_ss2_b),
2851 SH_PFC_PIN_GROUP(msiof1_rx_b),
2852 SH_PFC_PIN_GROUP(msiof1_tx_b),
2853 SH_PFC_PIN_GROUP(msiof2_clk),
2854 SH_PFC_PIN_GROUP(msiof2_sync),
2855 SH_PFC_PIN_GROUP(msiof2_ss1),
2856 SH_PFC_PIN_GROUP(msiof2_ss2),
2857 SH_PFC_PIN_GROUP(msiof2_rx),
2858 SH_PFC_PIN_GROUP(msiof2_tx),
2859 SH_PFC_PIN_GROUP(msiof2_clk_b),
2860 SH_PFC_PIN_GROUP(msiof2_sync_b),
2861 SH_PFC_PIN_GROUP(msiof2_ss1_b),
2862 SH_PFC_PIN_GROUP(msiof2_ss2_b),
2863 SH_PFC_PIN_GROUP(msiof2_rx_b),
2864 SH_PFC_PIN_GROUP(msiof2_tx_b),
2865 SH_PFC_PIN_GROUP(qspi_ctrl),
2866 SH_PFC_PIN_GROUP(qspi_data2),
2867 SH_PFC_PIN_GROUP(qspi_data4),
2868 SH_PFC_PIN_GROUP(scif0_data),
2869 SH_PFC_PIN_GROUP(scif0_clk),
2870 SH_PFC_PIN_GROUP(scif0_data_b),
2871 SH_PFC_PIN_GROUP(scif0_clk_b),
2872 SH_PFC_PIN_GROUP(scif0_data_c),
2873 SH_PFC_PIN_GROUP(scif0_data_d),
2874 SH_PFC_PIN_GROUP(scif1_data),
2875 SH_PFC_PIN_GROUP(scif1_clk),
2876 SH_PFC_PIN_GROUP(scif1_data_b),
2877 SH_PFC_PIN_GROUP(scif1_clk_b),
2878 SH_PFC_PIN_GROUP(scif1_data_c),
2879 SH_PFC_PIN_GROUP(scif1_clk_c),
2880 SH_PFC_PIN_GROUP(scif2_data),
2881 SH_PFC_PIN_GROUP(scif2_clk),
2882 SH_PFC_PIN_GROUP(scif2_data_b),
2883 SH_PFC_PIN_GROUP(scif2_clk_b),
2884 SH_PFC_PIN_GROUP(scif2_data_c),
2885 SH_PFC_PIN_GROUP(scif2_clk_c),
2886 SH_PFC_PIN_GROUP(scif3_data),
2887 SH_PFC_PIN_GROUP(scif3_clk),
2888 SH_PFC_PIN_GROUP(scif3_data_b),
2889 SH_PFC_PIN_GROUP(scif3_clk_b),
2890 SH_PFC_PIN_GROUP(scif4_data),
2891 SH_PFC_PIN_GROUP(scif4_data_b),
2892 SH_PFC_PIN_GROUP(scif4_data_c),
2893 SH_PFC_PIN_GROUP(scif4_data_d),
2894 SH_PFC_PIN_GROUP(scif4_data_e),
2895 SH_PFC_PIN_GROUP(scif5_data),
2896 SH_PFC_PIN_GROUP(scif5_data_b),
2897 SH_PFC_PIN_GROUP(scif5_data_c),
2898 SH_PFC_PIN_GROUP(scif5_data_d),
2899 SH_PFC_PIN_GROUP(scifa0_data),
2900 SH_PFC_PIN_GROUP(scifa0_data_b),
2901 SH_PFC_PIN_GROUP(scifa0_data_c),
2902 SH_PFC_PIN_GROUP(scifa0_data_d),
2903 SH_PFC_PIN_GROUP(scifa1_data),
2904 SH_PFC_PIN_GROUP(scifa1_clk),
2905 SH_PFC_PIN_GROUP(scifa1_data_b),
2906 SH_PFC_PIN_GROUP(scifa1_clk_b),
2907 SH_PFC_PIN_GROUP(scifa1_data_c),
2908 SH_PFC_PIN_GROUP(scifa1_clk_c),
2909 SH_PFC_PIN_GROUP(scifa2_data),
2910 SH_PFC_PIN_GROUP(scifa2_clk),
2911 SH_PFC_PIN_GROUP(scifa2_data_b),
2912 SH_PFC_PIN_GROUP(scifa2_clk_b),
2913 SH_PFC_PIN_GROUP(scifa3_data),
2914 SH_PFC_PIN_GROUP(scifa3_clk),
2915 SH_PFC_PIN_GROUP(scifa3_data_b),
2916 SH_PFC_PIN_GROUP(scifa3_clk_b),
2917 SH_PFC_PIN_GROUP(scifa4_data),
2918 SH_PFC_PIN_GROUP(scifa4_data_b),
2919 SH_PFC_PIN_GROUP(scifa4_data_c),
2920 SH_PFC_PIN_GROUP(scifa4_data_d),
2921 SH_PFC_PIN_GROUP(scifa5_data),
2922 SH_PFC_PIN_GROUP(scifa5_data_b),
2923 SH_PFC_PIN_GROUP(scifa5_data_c),
2924 SH_PFC_PIN_GROUP(scifa5_data_d),
2925 SH_PFC_PIN_GROUP(scifb0_data),
2926 SH_PFC_PIN_GROUP(scifb0_clk),
2927 SH_PFC_PIN_GROUP(scifb0_ctrl),
2928 SH_PFC_PIN_GROUP(scifb1_data),
2929 SH_PFC_PIN_GROUP(scifb1_clk),
2930 SH_PFC_PIN_GROUP(scifb2_data),
2931 SH_PFC_PIN_GROUP(scifb2_clk),
2932 SH_PFC_PIN_GROUP(scifb2_ctrl),
2933 SH_PFC_PIN_GROUP(sdhi0_data1),
2934 SH_PFC_PIN_GROUP(sdhi0_data4),
2935 SH_PFC_PIN_GROUP(sdhi0_ctrl),
2936 SH_PFC_PIN_GROUP(sdhi0_cd),
2937 SH_PFC_PIN_GROUP(sdhi0_wp),
2938 SH_PFC_PIN_GROUP(sdhi1_data1),
2939 SH_PFC_PIN_GROUP(sdhi1_data4),
2940 SH_PFC_PIN_GROUP(sdhi1_ctrl),
2941 SH_PFC_PIN_GROUP(sdhi1_cd),
2942 SH_PFC_PIN_GROUP(sdhi1_wp),
2943 SH_PFC_PIN_GROUP(sdhi2_data1),
2944 SH_PFC_PIN_GROUP(sdhi2_data4),
2945 SH_PFC_PIN_GROUP(sdhi2_ctrl),
2946 SH_PFC_PIN_GROUP(sdhi2_cd),
2947 SH_PFC_PIN_GROUP(sdhi2_wp),
2948};
2949
2950static const char * const eth_groups[] = {
2951 "eth_link",
2952 "eth_magic",
2953 "eth_mdio",
2954 "eth_rmii",
2955 "eth_link_b",
2956 "eth_magic_b",
2957 "eth_mdio_b",
2958 "eth_rmii_b",
2959};
2960
2961static const char * const hscif0_groups[] = {
2962 "hscif0_data",
2963 "hscif0_clk",
2964 "hscif0_ctrl",
2965 "hscif0_data_b",
2966 "hscif0_clk_b",
2967};
2968
2969static const char * const hscif1_groups[] = {
2970 "hscif1_data",
2971 "hscif1_clk",
2972 "hscif1_ctrl",
2973 "hscif1_data_b",
2974 "hscif1_ctrl_b",
2975};
2976
2977static const char * const hscif2_groups[] = {
2978 "hscif2_data",
2979 "hscif2_clk",
2980 "hscif2_ctrl",
2981};
2982
2983static const char * const i2c0_groups[] = {
2984 "i2c0",
2985 "i2c0_b",
2986 "i2c0_c",
2987 "i2c0_d",
2988 "i2c0_e",
2989};
2990
2991static const char * const i2c1_groups[] = {
2992 "i2c1",
2993 "i2c1_b",
2994 "i2c1_c",
2995 "i2c1_d",
2996 "i2c1_e",
2997};
2998
2999static const char * const i2c2_groups[] = {
3000 "i2c2",
3001 "i2c2_b",
3002 "i2c2_c",
3003 "i2c2_d",
3004 "i2c2_e",
3005};
3006
3007static const char * const i2c3_groups[] = {
3008 "i2c3",
3009 "i2c3_b",
3010 "i2c3_c",
3011 "i2c3_d",
3012 "i2c3_e",
3013};
3014
3015static const char * const i2c4_groups[] = {
3016 "i2c4",
3017 "i2c4_b",
3018 "i2c4_c",
3019 "i2c4_d",
3020 "i2c4_e",
3021};
3022
3023static const char * const intc_groups[] = {
3024 "intc_irq0",
3025 "intc_irq1",
3026 "intc_irq2",
3027 "intc_irq3",
3028 "intc_irq4",
3029 "intc_irq5",
3030 "intc_irq6",
3031 "intc_irq7",
3032 "intc_irq8",
3033 "intc_irq9",
3034};
3035
3036static const char * const mmc_groups[] = {
3037 "mmc_data1",
3038 "mmc_data4",
3039 "mmc_data8",
3040 "mmc_ctrl",
3041};
3042
3043static const char * const msiof0_groups[] = {
3044 "msiof0_clk",
3045 "msiof0_sync",
3046 "msiof0_ss1",
3047 "msiof0_ss2",
3048 "msiof0_rx",
3049 "msiof0_tx",
3050};
3051
3052static const char * const msiof1_groups[] = {
3053 "msiof1_clk",
3054 "msiof1_sync",
3055 "msiof1_ss1",
3056 "msiof1_ss2",
3057 "msiof1_rx",
3058 "msiof1_tx",
3059 "msiof1_clk_b",
3060 "msiof1_sync_b",
3061 "msiof1_ss1_b",
3062 "msiof1_ss2_b",
3063 "msiof1_rx_b",
3064 "msiof1_tx_b",
3065};
3066
3067static const char * const msiof2_groups[] = {
3068 "msiof2_clk",
3069 "msiof2_sync",
3070 "msiof2_ss1",
3071 "msiof2_ss2",
3072 "msiof2_rx",
3073 "msiof2_tx",
3074 "msiof2_clk_b",
3075 "msiof2_sync_b",
3076 "msiof2_ss1_b",
3077 "msiof2_ss2_b",
3078 "msiof2_rx_b",
3079 "msiof2_tx_b",
3080};
3081
3082static const char * const qspi_groups[] = {
3083 "qspi_ctrl",
3084 "qspi_data2",
3085 "qspi_data4",
3086};
3087
3088static const char * const scif0_groups[] = {
3089 "scif0_data",
3090 "scif0_clk",
3091 "scif0_data_b",
3092 "scif0_clk_b",
3093 "scif0_data_c",
3094 "scif0_data_d",
3095};
3096
3097static const char * const scif1_groups[] = {
3098 "scif1_data",
3099 "scif1_clk",
3100 "scif1_data_b",
3101 "scif1_clk_b",
3102 "scif1_data_c",
3103 "scif1_clk_c",
3104};
3105
3106static const char * const scif2_groups[] = {
3107 "scif2_data",
3108 "scif2_clk",
3109 "scif2_data_b",
3110 "scif2_clk_b",
3111 "scif2_data_c",
3112 "scif2_clk_c",
3113};
3114
3115static const char * const scif3_groups[] = {
3116 "scif3_data",
3117 "scif3_clk",
3118 "scif3_data_b",
3119 "scif3_clk_b",
3120};
3121
3122static const char * const scif4_groups[] = {
3123 "scif4_data",
3124 "scif4_data_b",
3125 "scif4_data_c",
3126 "scif4_data_d",
3127 "scif4_data_e",
3128};
3129
3130static const char * const scif5_groups[] = {
3131 "scif5_data",
3132 "scif5_data_b",
3133 "scif5_data_c",
3134 "scif5_data_d",
3135};
3136
3137static const char * const scifa0_groups[] = {
3138 "scifa0_data",
3139 "scifa0_data_b",
3140 "scifa0_data_c",
3141 "scifa0_data_d",
3142};
3143
3144static const char * const scifa1_groups[] = {
3145 "scifa1_data",
3146 "scifa1_clk",
3147 "scifa1_data_b",
3148 "scifa1_clk_b",
3149 "scifa1_data_c",
3150 "scifa1_clk_c",
3151};
3152
3153static const char * const scifa2_groups[] = {
3154 "scifa2_data",
3155 "scifa2_clk",
3156 "scifa2_data_b",
3157 "scifa2_clk_b",
3158};
3159
3160static const char * const scifa3_groups[] = {
3161 "scifa3_data",
3162 "scifa3_clk",
3163 "scifa3_data_b",
3164 "scifa3_clk_b",
3165};
3166
3167static const char * const scifa4_groups[] = {
3168 "scifa4_data",
3169 "scifa4_data_b",
3170 "scifa4_data_c",
3171 "scifa4_data_d",
3172};
3173
3174static const char * const scifa5_groups[] = {
3175 "scifa5_data",
3176 "scifa5_data_b",
3177 "scifa5_data_c",
3178 "scifa5_data_d",
3179};
3180
3181static const char * const scifb0_groups[] = {
3182 "scifb0_data",
3183 "scifb0_clk",
3184 "scifb0_ctrl",
3185};
3186
3187static const char * const scifb1_groups[] = {
3188 "scifb1_data",
3189 "scifb1_clk",
3190};
3191
3192static const char * const scifb2_groups[] = {
3193 "scifb2_data",
3194 "scifb2_clk",
3195 "scifb2_ctrl",
3196};
3197
3198static const char * const sdhi0_groups[] = {
3199 "sdhi0_data1",
3200 "sdhi0_data4",
3201 "sdhi0_ctrl",
3202 "sdhi0_cd",
3203 "sdhi0_wp",
3204};
3205
3206static const char * const sdhi1_groups[] = {
3207 "sdhi1_data1",
3208 "sdhi1_data4",
3209 "sdhi1_ctrl",
3210 "sdhi1_cd",
3211 "sdhi1_wp",
3212};
3213
3214static const char * const sdhi2_groups[] = {
3215 "sdhi2_data1",
3216 "sdhi2_data4",
3217 "sdhi2_ctrl",
3218 "sdhi2_cd",
3219 "sdhi2_wp",
3220};
3221
3222static const struct sh_pfc_function pinmux_functions[] = {
3223 SH_PFC_FUNCTION(eth),
3224 SH_PFC_FUNCTION(hscif0),
3225 SH_PFC_FUNCTION(hscif1),
3226 SH_PFC_FUNCTION(hscif2),
3227 SH_PFC_FUNCTION(i2c0),
3228 SH_PFC_FUNCTION(i2c1),
3229 SH_PFC_FUNCTION(i2c2),
3230 SH_PFC_FUNCTION(i2c3),
3231 SH_PFC_FUNCTION(i2c4),
3232 SH_PFC_FUNCTION(intc),
3233 SH_PFC_FUNCTION(mmc),
3234 SH_PFC_FUNCTION(msiof0),
3235 SH_PFC_FUNCTION(msiof1),
3236 SH_PFC_FUNCTION(msiof2),
3237 SH_PFC_FUNCTION(qspi),
3238 SH_PFC_FUNCTION(scif0),
3239 SH_PFC_FUNCTION(scif1),
3240 SH_PFC_FUNCTION(scif2),
3241 SH_PFC_FUNCTION(scif3),
3242 SH_PFC_FUNCTION(scif4),
3243 SH_PFC_FUNCTION(scif5),
3244 SH_PFC_FUNCTION(scifa0),
3245 SH_PFC_FUNCTION(scifa1),
3246 SH_PFC_FUNCTION(scifa2),
3247 SH_PFC_FUNCTION(scifa3),
3248 SH_PFC_FUNCTION(scifa4),
3249 SH_PFC_FUNCTION(scifa5),
3250 SH_PFC_FUNCTION(scifb0),
3251 SH_PFC_FUNCTION(scifb1),
3252 SH_PFC_FUNCTION(scifb2),
3253 SH_PFC_FUNCTION(sdhi0),
3254 SH_PFC_FUNCTION(sdhi1),
3255 SH_PFC_FUNCTION(sdhi2),
3256};
3257
3258static const struct pinmux_cfg_reg pinmux_config_regs[] = {
3259 { PINMUX_CFG_REG("GPSR0", 0xE6060004, 32, 1) {
3260 GP_0_31_FN, FN_IP2_17_16,
3261 GP_0_30_FN, FN_IP2_15_14,
3262 GP_0_29_FN, FN_IP2_13_12,
3263 GP_0_28_FN, FN_IP2_11_10,
3264 GP_0_27_FN, FN_IP2_9_8,
3265 GP_0_26_FN, FN_IP2_7_6,
3266 GP_0_25_FN, FN_IP2_5_4,
3267 GP_0_24_FN, FN_IP2_3_2,
3268 GP_0_23_FN, FN_IP2_1_0,
3269 GP_0_22_FN, FN_IP1_31_30,
3270 GP_0_21_FN, FN_IP1_29_28,
3271 GP_0_20_FN, FN_IP1_27,
3272 GP_0_19_FN, FN_IP1_26,
3273 GP_0_18_FN, FN_A2,
3274 GP_0_17_FN, FN_IP1_24,
3275 GP_0_16_FN, FN_IP1_23_22,
3276 GP_0_15_FN, FN_IP1_21_20,
3277 GP_0_14_FN, FN_IP1_19_18,
3278 GP_0_13_FN, FN_IP1_17_15,
3279 GP_0_12_FN, FN_IP1_14_13,
3280 GP_0_11_FN, FN_IP1_12_11,
3281 GP_0_10_FN, FN_IP1_10_8,
3282 GP_0_9_FN, FN_IP1_7_6,
3283 GP_0_8_FN, FN_IP1_5_4,
3284 GP_0_7_FN, FN_IP1_3_2,
3285 GP_0_6_FN, FN_IP1_1_0,
3286 GP_0_5_FN, FN_IP0_31_30,
3287 GP_0_4_FN, FN_IP0_29_28,
3288 GP_0_3_FN, FN_IP0_27_26,
3289 GP_0_2_FN, FN_IP0_25,
3290 GP_0_1_FN, FN_IP0_24,
3291 GP_0_0_FN, FN_IP0_23_22, }
3292 },
3293 { PINMUX_CFG_REG("GPSR1", 0xE6060008, 32, 1) {
3294 0, 0,
3295 0, 0,
3296 0, 0,
3297 0, 0,
3298 0, 0,
3299 0, 0,
3300 GP_1_25_FN, FN_DACK0,
3301 GP_1_24_FN, FN_IP7_31,
3302 GP_1_23_FN, FN_IP4_1_0,
3303 GP_1_22_FN, FN_WE1_N,
3304 GP_1_21_FN, FN_WE0_N,
3305 GP_1_20_FN, FN_IP3_31,
3306 GP_1_19_FN, FN_IP3_30,
3307 GP_1_18_FN, FN_IP3_29_27,
3308 GP_1_17_FN, FN_IP3_26_24,
3309 GP_1_16_FN, FN_IP3_23_21,
3310 GP_1_15_FN, FN_IP3_20_18,
3311 GP_1_14_FN, FN_IP3_17_15,
3312 GP_1_13_FN, FN_IP3_14_13,
3313 GP_1_12_FN, FN_IP3_12,
3314 GP_1_11_FN, FN_IP3_11,
3315 GP_1_10_FN, FN_IP3_10,
3316 GP_1_9_FN, FN_IP3_9_8,
3317 GP_1_8_FN, FN_IP3_7_6,
3318 GP_1_7_FN, FN_IP3_5_4,
3319 GP_1_6_FN, FN_IP3_3_2,
3320 GP_1_5_FN, FN_IP3_1_0,
3321 GP_1_4_FN, FN_IP2_31_30,
3322 GP_1_3_FN, FN_IP2_29_27,
3323 GP_1_2_FN, FN_IP2_26_24,
3324 GP_1_1_FN, FN_IP2_23_21,
3325 GP_1_0_FN, FN_IP2_20_18, }
3326 },
3327 { PINMUX_CFG_REG("GPSR2", 0xE606000C, 32, 1) {
3328 GP_2_31_FN, FN_IP6_7_6,
3329 GP_2_30_FN, FN_IP6_5_4,
3330 GP_2_29_FN, FN_IP6_3_2,
3331 GP_2_28_FN, FN_IP6_1_0,
3332 GP_2_27_FN, FN_IP5_31_30,
3333 GP_2_26_FN, FN_IP5_29_28,
3334 GP_2_25_FN, FN_IP5_27_26,
3335 GP_2_24_FN, FN_IP5_25_24,
3336 GP_2_23_FN, FN_IP5_23_22,
3337 GP_2_22_FN, FN_IP5_21_20,
3338 GP_2_21_FN, FN_IP5_19_18,
3339 GP_2_20_FN, FN_IP5_17_16,
3340 GP_2_19_FN, FN_IP5_15_14,
3341 GP_2_18_FN, FN_IP5_13_12,
3342 GP_2_17_FN, FN_IP5_11_9,
3343 GP_2_16_FN, FN_IP5_8_6,
3344 GP_2_15_FN, FN_IP5_5_4,
3345 GP_2_14_FN, FN_IP5_3_2,
3346 GP_2_13_FN, FN_IP5_1_0,
3347 GP_2_12_FN, FN_IP4_31_30,
3348 GP_2_11_FN, FN_IP4_29_28,
3349 GP_2_10_FN, FN_IP4_27_26,
3350 GP_2_9_FN, FN_IP4_25_23,
3351 GP_2_8_FN, FN_IP4_22_20,
3352 GP_2_7_FN, FN_IP4_19_18,
3353 GP_2_6_FN, FN_IP4_17_16,
3354 GP_2_5_FN, FN_IP4_15_14,
3355 GP_2_4_FN, FN_IP4_13_12,
3356 GP_2_3_FN, FN_IP4_11_10,
3357 GP_2_2_FN, FN_IP4_9_8,
3358 GP_2_1_FN, FN_IP4_7_5,
3359 GP_2_0_FN, FN_IP4_4_2 }
3360 },
3361 { PINMUX_CFG_REG("GPSR3", 0xE6060010, 32, 1) {
3362 GP_3_31_FN, FN_IP8_22_20,
3363 GP_3_30_FN, FN_IP8_19_17,
3364 GP_3_29_FN, FN_IP8_16_15,
3365 GP_3_28_FN, FN_IP8_14_12,
3366 GP_3_27_FN, FN_IP8_11_9,
3367 GP_3_26_FN, FN_IP8_8_6,
3368 GP_3_25_FN, FN_IP8_5_3,
3369 GP_3_24_FN, FN_IP8_2_0,
3370 GP_3_23_FN, FN_IP7_29_27,
3371 GP_3_22_FN, FN_IP7_26_24,
3372 GP_3_21_FN, FN_IP7_23_21,
3373 GP_3_20_FN, FN_IP7_20_18,
3374 GP_3_19_FN, FN_IP7_17_15,
3375 GP_3_18_FN, FN_IP7_14_12,
3376 GP_3_17_FN, FN_IP7_11_9,
3377 GP_3_16_FN, FN_IP7_8_6,
3378 GP_3_15_FN, FN_IP7_5_3,
3379 GP_3_14_FN, FN_IP7_2_0,
3380 GP_3_13_FN, FN_IP6_31_29,
3381 GP_3_12_FN, FN_IP6_28_26,
3382 GP_3_11_FN, FN_IP6_25_23,
3383 GP_3_10_FN, FN_IP6_22_20,
3384 GP_3_9_FN, FN_IP6_19_17,
3385 GP_3_8_FN, FN_IP6_16,
3386 GP_3_7_FN, FN_IP6_15,
3387 GP_3_6_FN, FN_IP6_14,
3388 GP_3_5_FN, FN_IP6_13,
3389 GP_3_4_FN, FN_IP6_12,
3390 GP_3_3_FN, FN_IP6_11,
3391 GP_3_2_FN, FN_IP6_10,
3392 GP_3_1_FN, FN_IP6_9,
3393 GP_3_0_FN, FN_IP6_8 }
3394 },
3395 { PINMUX_CFG_REG("GPSR4", 0xE6060014, 32, 1) {
3396 GP_4_31_FN, FN_IP11_17_16,
3397 GP_4_30_FN, FN_IP11_15_14,
3398 GP_4_29_FN, FN_IP11_13_11,
3399 GP_4_28_FN, FN_IP11_10_8,
3400 GP_4_27_FN, FN_IP11_7_6,
3401 GP_4_26_FN, FN_IP11_5_3,
3402 GP_4_25_FN, FN_IP11_2_0,
3403 GP_4_24_FN, FN_IP10_31_30,
3404 GP_4_23_FN, FN_IP10_29_27,
3405 GP_4_22_FN, FN_IP10_26_24,
3406 GP_4_21_FN, FN_IP10_23_21,
3407 GP_4_20_FN, FN_IP10_20_18,
3408 GP_4_19_FN, FN_IP10_17_15,
3409 GP_4_18_FN, FN_IP10_14_12,
3410 GP_4_17_FN, FN_IP10_11_9,
3411 GP_4_16_FN, FN_IP10_8_6,
3412 GP_4_15_FN, FN_IP10_5_3,
3413 GP_4_14_FN, FN_IP10_2_0,
3414 GP_4_13_FN, FN_IP9_30_28,
3415 GP_4_12_FN, FN_IP9_27_25,
3416 GP_4_11_FN, FN_IP9_24_22,
3417 GP_4_10_FN, FN_IP9_21_19,
3418 GP_4_9_FN, FN_IP9_18_17,
3419 GP_4_8_FN, FN_IP9_16_15,
3420 GP_4_7_FN, FN_IP9_14_12,
3421 GP_4_6_FN, FN_IP9_11_9,
3422 GP_4_5_FN, FN_IP9_8_6,
3423 GP_4_4_FN, FN_IP9_5_3,
3424 GP_4_3_FN, FN_IP9_2_0,
3425 GP_4_2_FN, FN_IP8_31_29,
3426 GP_4_1_FN, FN_IP8_28_26,
3427 GP_4_0_FN, FN_IP8_25_23 }
3428 },
3429 { PINMUX_CFG_REG("GPSR5", 0xE6060018, 32, 1) {
3430 0, 0,
3431 0, 0,
3432 0, 0,
3433 0, 0,
3434 GP_5_27_FN, FN_USB1_OVC,
3435 GP_5_26_FN, FN_USB1_PWEN,
3436 GP_5_25_FN, FN_USB0_OVC,
3437 GP_5_24_FN, FN_USB0_PWEN,
3438 GP_5_23_FN, FN_IP13_26_24,
3439 GP_5_22_FN, FN_IP13_23_21,
3440 GP_5_21_FN, FN_IP13_20_18,
3441 GP_5_20_FN, FN_IP13_17_15,
3442 GP_5_19_FN, FN_IP13_14_12,
3443 GP_5_18_FN, FN_IP13_11_9,
3444 GP_5_17_FN, FN_IP13_8_6,
3445 GP_5_16_FN, FN_IP13_5_3,
3446 GP_5_15_FN, FN_IP13_2_0,
3447 GP_5_14_FN, FN_IP12_29_27,
3448 GP_5_13_FN, FN_IP12_26_24,
3449 GP_5_12_FN, FN_IP12_23_21,
3450 GP_5_11_FN, FN_IP12_20_18,
3451 GP_5_10_FN, FN_IP12_17_15,
3452 GP_5_9_FN, FN_IP12_14_13,
3453 GP_5_8_FN, FN_IP12_12_11,
3454 GP_5_7_FN, FN_IP12_10_9,
3455 GP_5_6_FN, FN_IP12_8_6,
3456 GP_5_5_FN, FN_IP12_5_3,
3457 GP_5_4_FN, FN_IP12_2_0,
3458 GP_5_3_FN, FN_IP11_29_27,
3459 GP_5_2_FN, FN_IP11_26_24,
3460 GP_5_1_FN, FN_IP11_23_21,
3461 GP_5_0_FN, FN_IP11_20_18 }
3462 },
3463 { PINMUX_CFG_REG("GPSR6", 0xE606001C, 32, 1) {
3464 0, 0,
3465 0, 0,
3466 0, 0,
3467 0, 0,
3468 0, 0,
3469 0, 0,
3470 GP_6_25_FN, FN_IP0_21_20,
3471 GP_6_24_FN, FN_IP0_19_18,
3472 GP_6_23_FN, FN_IP0_17,
3473 GP_6_22_FN, FN_IP0_16,
3474 GP_6_21_FN, FN_IP0_15,
3475 GP_6_20_FN, FN_IP0_14,
3476 GP_6_19_FN, FN_IP0_13,
3477 GP_6_18_FN, FN_IP0_12,
3478 GP_6_17_FN, FN_IP0_11,
3479 GP_6_16_FN, FN_IP0_10,
3480 GP_6_15_FN, FN_IP0_9_8,
3481 GP_6_14_FN, FN_IP0_0,
3482 GP_6_13_FN, FN_SD1_DATA3,
3483 GP_6_12_FN, FN_SD1_DATA2,
3484 GP_6_11_FN, FN_SD1_DATA1,
3485 GP_6_10_FN, FN_SD1_DATA0,
3486 GP_6_9_FN, FN_SD1_CMD,
3487 GP_6_8_FN, FN_SD1_CLK,
3488 GP_6_7_FN, FN_SD0_WP,
3489 GP_6_6_FN, FN_SD0_CD,
3490 GP_6_5_FN, FN_SD0_DATA3,
3491 GP_6_4_FN, FN_SD0_DATA2,
3492 GP_6_3_FN, FN_SD0_DATA1,
3493 GP_6_2_FN, FN_SD0_DATA0,
3494 GP_6_1_FN, FN_SD0_CMD,
3495 GP_6_0_FN, FN_SD0_CLK }
3496 },
3497 { PINMUX_CFG_REG_VAR("IPSR0", 0xE6060020, 32,
3498 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
3499 2, 1, 1, 1, 1, 1, 1, 1, 1) {
3500 /* IP0_31_30 [2] */
3501 FN_D5, FN_SCIF4_RXD_B, FN_I2C0_SCL_D, 0,
3502 /* IP0_29_28 [2] */
3503 FN_D4, FN_I2C3_SDA_B, FN_SCIF5_TXD_B, 0,
3504 /* IP0_27_26 [2] */
3505 FN_D3, FN_I2C3_SCL_B, FN_SCIF5_RXD_B, 0,
3506 /* IP0_25 [1] */
3507 FN_D2, FN_SCIFA3_TXD_B,
3508 /* IP0_24 [1] */
3509 FN_D1, FN_SCIFA3_RXD_B,
3510 /* IP0_23_22 [2] */
3511 FN_D0, FN_SCIFA3_SCK_B, FN_IRQ4, 0,
3512 /* IP0_21_20 [2] */
3513 FN_MMC_D7, FN_SCIF0_TXD, FN_I2C2_SDA_B, FN_CAN1_TX,
3514 /* IP0_19_18 [2] */
3515 FN_MMC_D6, FN_SCIF0_RXD, FN_I2C2_SCL_B, FN_CAN1_RX,
3516 /* IP0_17 [1] */
3517 FN_MMC_D5, FN_SD2_WP,
3518 /* IP0_16 [1] */
3519 FN_MMC_D4, FN_SD2_CD,
3520 /* IP0_15 [1] */
3521 FN_MMC_D3, FN_SD2_DATA3,
3522 /* IP0_14 [1] */
3523 FN_MMC_D2, FN_SD2_DATA2,
3524 /* IP0_13 [1] */
3525 FN_MMC_D1, FN_SD2_DATA1,
3526 /* IP0_12 [1] */
3527 FN_MMC_D0, FN_SD2_DATA0,
3528 /* IP0_11 [1] */
3529 FN_MMC_CMD, FN_SD2_CMD,
3530 /* IP0_10 [1] */
3531 FN_MMC_CLK, FN_SD2_CLK,
3532 /* IP0_9_8 [2] */
3533 FN_SD1_WP, FN_IRQ7, FN_CAN0_TX, 0,
3534 /* IP0_7 [1] */
3535 0, 0,
3536 /* IP0_6 [1] */
3537 0, 0,
3538 /* IP0_5 [1] */
3539 0, 0,
3540 /* IP0_4 [1] */
3541 0, 0,
3542 /* IP0_3 [1] */
3543 0, 0,
3544 /* IP0_2 [1] */
3545 0, 0,
3546 /* IP0_1 [1] */
3547 0, 0,
3548 /* IP0_0 [1] */
3549 FN_SD1_CD, FN_CAN0_RX, }
3550 },
3551 { PINMUX_CFG_REG_VAR("IPSR1", 0xE6060024, 32,
3552 2, 2, 1, 1, 1, 1, 2, 2, 2, 3, 2, 2, 3, 2, 2,
3553 2, 2) {
3554 /* IP1_31_30 [2] */
3555 FN_A6, FN_SCIFB0_CTS_N, FN_SCIFA4_RXD_B, FN_TPUTO2_C,
3556 /* IP1_29_28 [2] */
3557 FN_A5, FN_SCIFB0_RXD, FN_PWM4_B, FN_TPUTO3_C,
3558 /* IP1_27 [1] */
3559 FN_A4, FN_SCIFB0_TXD,
3560 /* IP1_26 [1] */
3561 FN_A3, FN_SCIFB0_SCK,
3562 /* IP1_25 [1] */
3563 0, 0,
3564 /* IP1_24 [1] */
3565 FN_A1, FN_SCIFB1_TXD,
3566 /* IP1_23_22 [2] */
3567 FN_A0, FN_SCIFB1_SCK, FN_PWM3_B, 0,
3568 /* IP1_21_20 [2] */
3569 FN_D15, FN_SCIFA1_TXD, FN_IIC0_SDA_B, 0,
3570 /* IP1_19_18 [2] */
3571 FN_D14, FN_SCIFA1_RXD, FN_IIC0_SCL_B, 0,
3572 /* IP1_17_15 [3] */
3573 FN_D13, FN_SCIFA1_SCK, FN_TANS1, FN_PWM2_C, FN_TCLK2_B,
3574 0, 0, 0,
3575 /* IP1_14_13 [2] */
3576 FN_D12, FN_HSCIF2_HRTS_N, FN_SCIF1_TXD_C, FN_I2C1_SDA_D,
3577 /* IP1_12_11 [2] */
3578 FN_D11, FN_HSCIF2_HCTS_N, FN_SCIF1_RXD_C, FN_I2C1_SCL_D,
3579 /* IP1_10_8 [3] */
3580 FN_D10, FN_HSCIF2_HSCK, FN_SCIF1_SCK_C, FN_IRQ6, FN_PWM5_C,
3581 0, 0, 0,
3582 /* IP1_7_6 [2] */
3583 FN_D9, FN_HSCIF2_HTX, FN_I2C1_SDA_B, 0,
3584 /* IP1_5_4 [2] */
3585 FN_D8, FN_HSCIF2_HRX, FN_I2C1_SCL_B, 0,
3586 /* IP1_3_2 [2] */
3587 FN_D7, FN_IRQ3, FN_TCLK1, FN_PWM6_B,
3588 /* IP1_1_0 [2] */
3589 FN_D6, FN_SCIF4_TXD_B, FN_I2C0_SDA_D, 0, }
3590 },
3591 { PINMUX_CFG_REG_VAR("IPSR2", 0xE6060028, 32,
3592 2, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2) {
3593 /* IP2_31_30 [2] */
3594 FN_A20, FN_SPCLK, FN_MOUT1, 0,
3595 /* IP2_29_27 [3] */
3596 FN_A19, FN_MSIOF2_SS2, FN_PWM4, FN_TPUTO2,
3597 FN_MOUT0, 0, 0, 0,
3598 /* IP2_26_24 [3] */
3599 FN_A18, FN_MSIOF2_SS1, FN_SCIF4_TXD_E, FN_CAN1_TX_B,
3600 FN_AVB_AVTP_MATCH_B, 0, 0, 0,
3601 /* IP2_23_21 [3] */
3602 FN_A17, FN_MSIOF2_SYNC, FN_SCIF4_RXD_E, FN_CAN1_RX_B,
3603 FN_AVB_AVTP_CAPTURE_B, 0, 0, 0,
3604 /* IP2_20_18 [3] */
3605 FN_A16, FN_MSIOF2_SCK, FN_HSCIF0_HSCK_B, FN_SPEEDIN,
3606 FN_VSP, FN_CAN_CLK_C, FN_TPUTO2_B, 0,
3607 /* IP2_17_16 [2] */
3608 FN_A15, FN_MSIOF2_TXD, FN_HSCIF0_HTX_B, FN_DACK1,
3609 /* IP2_15_14 [2] */
3610 FN_A14, FN_MSIOF2_RXD, FN_HSCIF0_HRX_B, FN_DREQ1_N,
3611 /* IP2_13_12 [2] */
3612 FN_A13, FN_MSIOF1_SS2, FN_SCIFA5_TXD_B, 0,
3613 /* IP2_11_10 [2] */
3614 FN_A12, FN_MSIOF1_SS1, FN_SCIFA5_RXD_B, 0,
3615 /* IP2_9_8 [2] */
3616 FN_A11, FN_MSIOF1_SYNC, FN_IIC1_SDA_B, 0,
3617 /* IP2_7_6 [2] */
3618 FN_A10, FN_MSIOF1_SCK, FN_IIC1_SCL_B, 0,
3619 /* IP2_5_4 [2] */
3620 FN_A9, FN_MSIOF1_TXD, FN_SCIFA0_TXD_B, 0,
3621 /* IP2_3_2 [2] */
3622 FN_A8, FN_MSIOF1_RXD, FN_SCIFA0_RXD_B, 0,
3623 /* IP2_1_0 [2] */
3624 FN_A7, FN_SCIFB0_RTS_N, FN_SCIFA4_TXD_B, 0, }
3625 },
3626 { PINMUX_CFG_REG_VAR("IPSR3", 0xE606002C, 32,
3627 1, 1, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, 2, 2, 2, 2) {
3628 /* IP3_31 [1] */
3629 FN_RD_WR_N, FN_ATAG1_N,
3630 /* IP3_30 [1] */
3631 FN_RD_N, FN_ATACS11_N,
3632 /* IP3_29_27 [3] */
3633 FN_BS_N, FN_DRACK0, FN_PWM1_C, FN_TPUTO0_C, FN_ATACS01_N,
3634 FN_MTS_N_B, 0, 0,
3635 /* IP3_26_24 [3] */
3636 FN_EX_CS5_N, FN_SCIFA2_TXD, FN_I2C2_SDA_E, FN_TS_SPSYNC_B,
3637 FN_RIF0_D1, FN_FMIN, FN_SCIFB2_RTS_N, FN_STM_N_B,
3638 /* IP3_23_21 [3] */
3639 FN_EX_CS4_N, FN_SCIFA2_RXD, FN_I2C2_SCL_E, FN_TS_SDEN_B,
3640 FN_RIF0_D0, FN_FMCLK, FN_SCIFB2_CTS_N, FN_SCKZ_B,
3641 /* IP3_20_18 [3] */
3642 FN_EX_CS3_N, FN_SCIFA2_SCK, FN_SCIF4_TXD_C, FN_TS_SCK_B,
3643 FN_RIF0_CLK, FN_BPFCLK, FN_SCIFB2_SCK, FN_MDATA_B,
3644 /* IP3_17_15 [3] */
3645 FN_EX_CS2_N, FN_PWM0, FN_SCIF4_RXD_C, FN_TS_SDATA_B,
3646 FN_RIF0_SYNC, FN_TPUTO3, FN_SCIFB2_TXD, FN_SDATA_B,
3647 /* IP3_14_13 [2] */
3648 FN_EX_CS1_N, FN_TPUTO3_B, FN_SCIFB2_RXD, FN_VI1_DATA11,
3649 /* IP3_12 [1] */
3650 FN_EX_CS0_N, FN_VI1_DATA10,
3651 /* IP3_11 [1] */
3652 FN_CS1_N_A26, FN_VI1_DATA9,
3653 /* IP3_10 [1] */
3654 FN_CS0_N, FN_VI1_DATA8,
3655 /* IP3_9_8 [2] */
3656 FN_A25, FN_SSL, FN_ATARD1_N, 0,
3657 /* IP3_7_6 [2] */
3658 FN_A24, FN_IO3, FN_EX_WAIT2, 0,
3659 /* IP3_5_4 [2] */
3660 FN_A23, FN_IO2, FN_MOUT6, FN_ATAWR1_N,
3661 /* IP3_3_2 [2] */
3662 FN_A22, FN_MISO_IO1, FN_MOUT5, FN_ATADIR1_N,
3663 /* IP3_1_0 [2] */
3664 FN_A21, FN_MOSI_IO0, FN_MOUT2, 0, }
3665 },
3666 { PINMUX_CFG_REG_VAR("IPSR4", 0xE6060030, 32,
3667 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 2) {
3668 /* IP4_31_30 [2] */
3669 FN_DU0_DG4, FN_LCDOUT12, FN_CC50_STATE12, 0,
3670 /* IP4_29_28 [2] */
3671 FN_DU0_DG3, FN_LCDOUT11, FN_CC50_STATE11, 0,
3672 /* IP4_27_26 [2] */
3673 FN_DU0_DG2, FN_LCDOUT10, FN_CC50_STATE10, 0,
3674 /* IP4_25_23 [3] */
3675 FN_DU0_DG1, FN_LCDOUT9, FN_SCIFA0_TXD_C, FN_I2C3_SDA_D,
3676 FN_CC50_STATE9, 0, 0, 0,
3677 /* IP4_22_20 [3] */
3678 FN_DU0_DG0, FN_LCDOUT8, FN_SCIFA0_RXD_C, FN_I2C3_SCL_D,
3679 FN_CC50_STATE8, 0, 0, 0,
3680 /* IP4_19_18 [2] */
3681 FN_DU0_DR7, FN_LCDOUT23, FN_CC50_STATE7, 0,
3682 /* IP4_17_16 [2] */
3683 FN_DU0_DR6, FN_LCDOUT22, FN_CC50_STATE6, 0,
3684 /* IP4_15_14 [2] */
3685 FN_DU0_DR5, FN_LCDOUT21, FN_CC50_STATE5, 0,
3686 /* IP4_13_12 [2] */
3687 FN_DU0_DR4, FN_LCDOUT20, FN_CC50_STATE4, 0,
3688 /* IP4_11_10 [2] */
3689 FN_DU0_DR3, FN_LCDOUT19, FN_CC50_STATE3, 0,
3690 /* IP4_9_8 [2] */
3691 FN_DU0_DR2, FN_LCDOUT18, FN_CC50_STATE2, 0,
3692 /* IP4_7_5 [3] */
3693 FN_DU0_DR1, FN_LCDOUT17, FN_SCIF5_TXD_C, FN_I2C2_SDA_D,
3694 FN_CC50_STATE1, 0, 0, 0,
3695 /* IP4_4_2 [3] */
3696 FN_DU0_DR0, FN_LCDOUT16, FN_SCIF5_RXD_C, FN_I2C2_SCL_D,
3697 FN_CC50_STATE0, 0, 0, 0,
3698 /* IP4_1_0 [2] */
3699 FN_EX_WAIT0, FN_CAN_CLK_B, FN_SCIF_CLK, FN_PWMFSW0, }
3700 },
3701 { PINMUX_CFG_REG_VAR("IPSR5", 0xE6060034, 32,
3702 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2) {
3703 /* IP5_31_30 [2] */
3704 FN_DU0_EXHSYNC_DU0_HSYNC, FN_QSTH_QHS, FN_CC50_STATE27, 0,
3705 /* IP5_29_28 [2] */
3706 FN_DU0_DOTCLKOUT1, FN_QSTVB_QVE, FN_CC50_STATE26, 0,
3707 /* IP5_27_26 [2] */
3708 FN_DU0_DOTCLKOUT0, FN_QCLK, FN_CC50_STATE25, 0,
3709 /* IP5_25_24 [2] */
3710 FN_DU0_DOTCLKIN, FN_QSTVA_QVS, FN_CC50_STATE24, 0,
3711 /* IP5_23_22 [2] */
3712 FN_DU0_DB7, FN_LCDOUT7, FN_CC50_STATE23, 0,
3713 /* IP5_21_20 [2] */
3714 FN_DU0_DB6, FN_LCDOUT6, FN_CC50_STATE22, 0,
3715 /* IP5_19_18 [2] */
3716 FN_DU0_DB5, FN_LCDOUT5, FN_CC50_STATE21, 0,
3717 /* IP5_17_16 [2] */
3718 FN_DU0_DB4, FN_LCDOUT4, FN_CC50_STATE20, 0,
3719 /* IP5_15_14 [2] */
3720 FN_DU0_DB3, FN_LCDOUT3, FN_CC50_STATE19, 0,
3721 /* IP5_13_12 [2] */
3722 FN_DU0_DB2, FN_LCDOUT2, FN_CC50_STATE18, 0,
3723 /* IP5_11_9 [3] */
3724 FN_DU0_DB1, FN_LCDOUT1, FN_SCIFA4_TXD_C, FN_I2C4_SDA_D,
3725 FN_CAN0_TX_C, FN_CC50_STATE17, 0, 0,
3726 /* IP5_8_6 [3] */
3727 FN_DU0_DB0, FN_LCDOUT0, FN_SCIFA4_RXD_C, FN_I2C4_SCL_D,
3728 FN_CAN0_RX_C, FN_CC50_STATE16, 0, 0,
3729 /* IP5_5_4 [2] */
3730 FN_DU0_DG7, FN_LCDOUT15, FN_CC50_STATE15, 0,
3731 /* IP5_3_2 [2] */
3732 FN_DU0_DG6, FN_LCDOUT14, FN_CC50_STATE14, 0,
3733 /* IP5_1_0 [2] */
3734 FN_DU0_DG5, FN_LCDOUT13, FN_CC50_STATE13, 0, }
3735 },
3736 { PINMUX_CFG_REG_VAR("IPSR6", 0xE6060038, 32,
3737 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
3738 2, 2) {
3739 /* IP6_31_29 [3] */
3740 FN_ETH_MDIO, FN_VI0_G0, FN_MSIOF2_RXD_B, FN_IIC0_SCL_D,
3741 FN_AVB_TX_CLK, FN_ADIDATA, FN_AD_DI, 0,
3742 /* IP6_28_26 [3] */
3743 FN_VI0_VSYNC_N, FN_SCIF0_TXD_B, FN_I2C0_SDA_C,
3744 FN_AUDIO_CLKOUT_B, FN_AVB_TX_EN, 0, 0, 0,
3745 /* IP6_25_23 [3] */
3746 FN_VI0_HSYNC_N, FN_SCIF0_RXD_B, FN_I2C0_SCL_C, FN_IERX_C,
3747 FN_AVB_COL, 0, 0, 0,
3748 /* IP6_22_20 [3] */
3749 FN_VI0_FIELD, FN_I2C3_SDA, FN_SCIFA5_TXD_C, FN_IECLK_C,
3750 FN_AVB_RX_ER, 0, 0, 0,
3751 /* IP6_19_17 [3] */
3752 FN_VI0_CLKENB, FN_I2C3_SCL, FN_SCIFA5_RXD_C, FN_IETX_C,
3753 FN_AVB_RXD7, 0, 0, 0,
3754 /* IP6_16 [1] */
3755 FN_VI0_DATA7_VI0_B7, FN_AVB_RXD6,
3756 /* IP6_15 [1] */
3757 FN_VI0_DATA6_VI0_B6, FN_AVB_RXD5,
3758 /* IP6_14 [1] */
3759 FN_VI0_DATA5_VI0_B5, FN_AVB_RXD4,
3760 /* IP6_13 [1] */
3761 FN_VI0_DATA4_VI0_B4, FN_AVB_RXD3,
3762 /* IP6_12 [1] */
3763 FN_VI0_DATA3_VI0_B3, FN_AVB_RXD2,
3764 /* IP6_11 [1] */
3765 FN_VI0_DATA2_VI0_B2, FN_AVB_RXD1,
3766 /* IP6_10 [1] */
3767 FN_VI0_DATA1_VI0_B1, FN_AVB_RXD0,
3768 /* IP6_9 [1] */
3769 FN_VI0_DATA0_VI0_B0, FN_AVB_RX_DV,
3770 /* IP6_8 [1] */
3771 FN_VI0_CLK, FN_AVB_RX_CLK,
3772 /* IP6_7_6 [2] */
3773 FN_DU0_CDE, FN_QPOLB, FN_CC50_STATE31, 0,
3774 /* IP6_5_4 [2] */
3775 FN_DU0_DISP, FN_QPOLA, FN_CC50_STATE30, 0,
3776 /* IP6_3_2 [2] */
3777 FN_DU0_EXODDF_DU0_ODDF_DISP_CDE, FN_QCPV_QDE, FN_CC50_STATE29,
3778 /* IP6_1_0 [2] */
3779 FN_DU0_EXVSYNC_DU0_VSYNC, FN_QSTB_QHE, FN_CC50_STATE28, 0, }
3780 },
3781 { PINMUX_CFG_REG_VAR("IPSR7", 0xE606003C, 32,
3782 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3) {
3783 /* IP7_31 [1] */
3784 FN_DREQ0_N, FN_SCIFB1_RXD,
3785 /* IP7_30 [1] */
3786 0, 0,
3787 /* IP7_29_27 [3] */
3788 FN_ETH_TXD0, FN_VI0_R2, FN_SCIF3_RXD_B, FN_I2C4_SCL_E,
3789 FN_AVB_GTX_CLK, FN_SSI_WS6_B, 0, 0,
3790 /* IP7_26_24 [3] */
3791 FN_ETH_MAGIC, FN_VI0_R1, FN_SCIF3_SCK_B, FN_AVB_TX_ER,
3792 FN_SSI_SCK6_B, 0, 0, 0,
3793 /* IP7_23_21 [3] */
3794 FN_ETH_TX_EN, FN_VI0_R0, FN_SCIF2_TXD_C, FN_IIC1_SDA_D,
3795 FN_AVB_TXD7, FN_SSI_SDATA5_B, 0, 0,
3796 /* IP7_20_18 [3] */
3797 FN_ETH_TXD1, FN_VI0_G7, FN_SCIF2_RXD_C, FN_IIC1_SCL_D,
3798 FN_AVB_TXD6, FN_SSI_WS5_B, 0, 0,
3799 /* IP7_17_15 [3] */
3800 FN_ETH_REFCLK, FN_VI0_G6, FN_SCIF2_SCK_C, FN_AVB_TXD5,
3801 FN_SSI_SCK5_B, 0, 0, 0,
3802 /* IP7_14_12 [3] */
3803 FN_ETH_LINK, FN_VI0_G5, FN_MSIOF2_SS2_B, FN_SCIF4_TXD_D,
3804 FN_AVB_TXD4, FN_ADICHS2, 0, 0,
3805 /* IP7_11_9 [3] */
3806 FN_ETH_RXD1, FN_VI0_G4, FN_MSIOF2_SS1_B, FN_SCIF4_RXD_D,
3807 FN_AVB_TXD3, FN_ADICHS1, 0, 0,
3808 /* IP7_8_6 [3] */
3809 FN_ETH_RXD0, FN_VI0_G3, FN_MSIOF2_SYNC_B, FN_CAN0_TX_B,
3810 FN_AVB_TXD2, FN_ADICHS0, FN_AD_NCS_N, 0,
3811 /* IP7_5_3 [3] */
3812 FN_ETH_RX_ER, FN_VI0_G2, FN_MSIOF2_SCK_B, FN_CAN0_RX_B,
3813 FN_AVB_TXD1, FN_ADICLK, FN_AD_CLK, 0,
3814 /* IP7_2_0 [3] */
3815 FN_ETH_CRS_DV, FN_VI0_G1, FN_MSIOF2_TXD_B, FN_IIC0_SDA_D,
3816 FN_AVB_TXD0, FN_ADICS_SAMP, FN_AD_DO, 0, }
3817 },
3818 { PINMUX_CFG_REG_VAR("IPSR8", 0xE6060040, 32,
3819 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3) {
3820 /* IP8_31_29 [3] */
3821 FN_MSIOF0_RXD, FN_SCIF5_RXD, FN_I2C2_SCL_C, FN_DU1_DR2,
3822 FN_RIF1_D0_B, FN_TS_SDEN_D, FN_FMCLK_C, FN_RDS_CLK,
3823 /* IP8_28_26 [3] */
3824 FN_I2C1_SDA, FN_SCIF4_TXD, FN_IRQ5, FN_DU1_DR1,
3825 FN_RIF1_CLK_B, FN_TS_SCK_D, FN_BPFCLK_C, 0,
3826 /* IP8_25_23 [3] */
3827 FN_I2C1_SCL, FN_SCIF4_RXD, FN_PWM5_B, FN_DU1_DR0,
3828 FN_RIF1_SYNC_B, FN_TS_SDATA_D, FN_TPUTO1_B, 0,
3829 /* IP8_22_20 [3] */
3830 FN_I2C0_SDA, FN_SCIF0_TXD_C, FN_TPUTO0, FN_CAN_CLK,
3831 FN_DVC_MUTE, FN_CAN1_TX_D, 0, 0,
3832 /* IP8_19_17 [3] */
3833 FN_I2C0_SCL, FN_SCIF0_RXD_C, FN_PWM5, FN_TCLK1_B,
3834 FN_AVB_GTXREFCLK, FN_CAN1_RX_D, FN_TPUTO0_B, 0,
3835 /* IP8_16_15 [2] */
3836 FN_HSCIF0_HSCK, FN_SCIF_CLK_B, FN_AVB_CRS, FN_AUDIO_CLKC_B,
3837 /* IP8_14_12 [3] */
3838 FN_HSCIF0_HRTS_N, FN_VI0_R7, FN_SCIF0_TXD_D, FN_I2C0_SDA_E,
3839 FN_AVB_PHY_INT, FN_SSI_SDATA8_B, 0, 0,
3840 /* IP8_11_9 [3] */
3841 FN_HSCIF0_HCTS_N, FN_VI0_R6, FN_SCIF0_RXD_D, FN_I2C0_SCL_E,
3842 FN_AVB_MAGIC, FN_SSI_SDATA7_B, 0, 0,
3843 /* IP8_8_6 [3] */
3844 FN_HSCIF0_HTX, FN_VI0_R5, FN_I2C1_SDA_C, FN_AUDIO_CLKB_B,
3845 FN_AVB_LINK, FN_SSI_WS78_B, 0, 0,
3846 /* IP8_5_3 [3] */
3847 FN_HSCIF0_HRX, FN_VI0_R4, FN_I2C1_SCL_C, FN_AUDIO_CLKA_B,
3848 FN_AVB_MDIO, FN_SSI_SCK78_B, 0, 0,
3849 /* IP8_2_0 [3] */
3850 FN_ETH_MDC, FN_VI0_R3, FN_SCIF3_TXD_B, FN_I2C4_SDA_E,
3851 FN_AVB_MDC, FN_SSI_SDATA6_B, 0, 0, }
3852 },
3853 { PINMUX_CFG_REG_VAR("IPSR9", 0xE6060044, 32,
3854 1, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3) {
3855 /* IP9_31 [1] */
3856 0, 0,
3857 /* IP9_30_28 [3] */
3858 FN_SCIF1_SCK, FN_PWM3, FN_TCLK2, FN_DU1_DG5,
3859 FN_SSI_SDATA1_B, FN_CAN_TXCLK, FN_CC50_STATE34, 0,
3860 /* IP9_27_25 [3] */
3861 FN_HSCIF1_HRTS_N, FN_SCIFA4_TXD, FN_IERX, FN_DU1_DG4,
3862 FN_SSI_WS1_B, FN_CAN_STEP0, FN_CC50_STATE33, 0,
3863 /* IP9_24_22 [3] */
3864 FN_HSCIF1_HCTS_N, FN_SCIFA4_RXD, FN_IECLK, FN_DU1_DG3,
3865 FN_SSI_SCK1_B, FN_CAN_DEBUG_HW_TRIGGER, FN_CC50_STATE32, 0,
3866 /* IP9_21_19 [3] */
3867 FN_HSCIF1_HSCK, FN_PWM2, FN_IETX, FN_DU1_DG2,
3868 FN_REMOCON_B, FN_SPEEDIN_B, FN_VSP_B, 0,
3869 /* IP9_18_17 [2] */
3870 FN_HSCIF1_HTX, FN_I2C4_SDA, FN_TPUTO1, FN_DU1_DG1,
3871 /* IP9_16_15 [2] */
3872 FN_HSCIF1_HRX, FN_I2C4_SCL, FN_PWM6, FN_DU1_DG0,
3873 /* IP9_14_12 [3] */
3874 FN_MSIOF0_SS2, FN_SCIFA0_TXD, FN_TS_SPSYNC, FN_DU1_DR7,
3875 FN_RIF1_D1, FN_FMIN_B, FN_RDS_DATA_B, 0,
3876 /* IP9_11_9 [3] */
3877 FN_MSIOF0_SS1, FN_SCIFA0_RXD, FN_TS_SDEN, FN_DU1_DR6,
3878 FN_RIF1_D0, FN_FMCLK_B, FN_RDS_CLK_B, 0,
3879 /* IP9_8_6 [3] */
3880 FN_MSIOF0_SYNC, FN_PWM1, FN_TS_SCK, FN_DU1_DR5,
3881 FN_RIF1_CLK, FN_BPFCLK_B, 0, 0,
3882 /* IP9_5_3 [3] */
3883 FN_MSIOF0_SCK, FN_IRQ0, FN_TS_SDATA, FN_DU1_DR4,
3884 FN_RIF1_SYNC, FN_TPUTO1_C, 0, 0,
3885 /* IP9_2_0 [3] */
3886 FN_MSIOF0_TXD, FN_SCIF5_TXD, FN_I2C2_SDA_C, FN_DU1_DR3,
3887 FN_RIF1_D1_B, FN_TS_SPSYNC_D, FN_FMIN_C, FN_RDS_DATA, }
3888 },
3889 { PINMUX_CFG_REG_VAR("IPSR10", 0xE6060048, 32,
3890 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3) {
3891 /* IP10_31_30 [2] */
3892 FN_SSI_SCK5, FN_SCIFA3_SCK, FN_DU1_DOTCLKIN, FN_CAN_DEBUGOUT10,
3893 /* IP10_29_27 [3] */
3894 FN_I2C2_SDA, FN_SCIFA5_TXD, FN_DU1_DB7, FN_AUDIO_CLKOUT_C,
3895 FN_CAN_DEBUGOUT9, 0, 0, 0,
3896 /* IP10_26_24 [3] */
3897 FN_I2C2_SCL, FN_SCIFA5_RXD, FN_DU1_DB6, FN_AUDIO_CLKC_C,
3898 FN_SSI_SDATA4_B, FN_CAN_DEBUGOUT8, 0, 0,
3899 /* IP10_23_21 [3] */
3900 FN_SCIF3_TXD, FN_I2C1_SDA_E, FN_FMIN_D, FN_DU1_DB5,
3901 FN_AUDIO_CLKB_C, FN_SSI_WS4_B, FN_CAN_DEBUGOUT7, FN_RDS_DATA_C,
3902 /* IP10_20_18 [3] */
3903 FN_SCIF3_RXD, FN_I2C1_SCL_E, FN_FMCLK_D, FN_DU1_DB4,
3904 FN_AUDIO_CLKA_C, FN_SSI_SCK4_B, FN_CAN_DEBUGOUT6, FN_RDS_CLK_C,
3905 /* IP10_17_15 [3] */
3906 FN_SCIF3_SCK, FN_IRQ2, FN_BPFCLK_D, FN_DU1_DB3,
3907 FN_SSI_SDATA9_B, FN_TANS2, FN_CAN_DEBUGOUT5, FN_CC50_OSCOUT,
3908 /* IP10_14_12 [3] */
3909 FN_SCIF2_SCK, FN_IRQ1, FN_DU1_DB2, FN_SSI_WS9_B,
3910 FN_USB0_IDIN, FN_CAN_DEBUGOUT4, FN_CC50_STATE39, 0,
3911 /* IP10_11_9 [3] */
3912 FN_SCIF2_TXD, FN_IIC1_SDA, FN_DU1_DB1, FN_SSI_SCK9_B,
3913 FN_USB0_OVC1, FN_CAN_DEBUGOUT3, FN_CC50_STATE38, 0,
3914 /* IP10_8_6 [3] */
3915 FN_SCIF2_RXD, FN_IIC1_SCL, FN_DU1_DB0, FN_SSI_SDATA2_B,
3916 FN_USB0_EXTLP, FN_CAN_DEBUGOUT2, FN_CC50_STATE37, 0,
3917 /* IP10_5_3 [3] */
3918 FN_SCIF1_TXD, FN_IIC0_SDA, FN_DU1_DG7, FN_SSI_WS2_B,
3919 FN_CAN_DEBUGOUT1, FN_CC50_STATE36, 0, 0,
3920 /* IP10_2_0 [3] */
3921 FN_SCIF1_RXD, FN_IIC0_SCL, FN_DU1_DG6, FN_SSI_SCK2_B,
3922 FN_CAN_DEBUGOUT0, FN_CC50_STATE35, 0, 0, }
3923 },
3924 { PINMUX_CFG_REG_VAR("IPSR11", 0xE606004C, 32,
3925 2, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3) {
3926 /* IP11_31_30 [2] */
3927 0, 0, 0, 0,
3928 /* IP11_29_27 [3] */
3929 FN_SSI_SDATA0, FN_MSIOF1_SCK_B, FN_PWM0_B, FN_ADICLK_B,
3930 FN_AD_CLK_B, 0, 0, 0,
3931 /* IP11_26_24 [3] */
3932 FN_SSI_WS0129, FN_MSIOF1_TXD_B, FN_SCIF5_TXD_D, FN_ADICS_SAMP_B,
3933 FN_AD_DO_B, 0, 0, 0,
3934 /* IP11_23_21 [3] */
3935 FN_SSI_SCK0129, FN_MSIOF1_RXD_B, FN_SCIF5_RXD_D, FN_ADIDATA_B,
3936 FN_AD_DI_B, FN_PCMWE_N, 0, 0,
3937 /* IP11_20_18 [3] */
3938 FN_SSI_SDATA7, FN_SCIFA2_TXD_B, FN_IRQ8, FN_AUDIO_CLKA_D,
3939 FN_CAN_CLK_D, FN_PCMOE_N, 0, 0,
3940 /* IP11_17_16 [2] */
3941 FN_SSI_WS78, FN_SCIFA2_RXD_B, FN_IIC0_SCL_C, FN_DU1_CDE,
3942 /* IP11_15_14 [2] */
3943 FN_SSI_SCK78, FN_SCIFA2_SCK_B, FN_IIC0_SDA_C, FN_DU1_DISP,
3944 /* IP11_13_11 [3] */
3945 FN_SSI_SDATA6, FN_SCIFA1_TXD_B, FN_I2C4_SDA_C,
3946 FN_DU1_EXODDF_DU1_ODDF_DISP_CDE, FN_CAN_DEBUGOUT15, 0, 0, 0,
3947 /* IP11_10_8 [3] */
3948 FN_SSI_WS6, FN_SCIFA1_RXD_B, FN_I2C4_SCL_C,
3949 FN_DU1_EXVSYNC_DU1_VSYNC, FN_CAN_DEBUGOUT14, 0, 0, 0,
3950 /* IP11_7_6 [2] */
3951 FN_SSI_SCK6, FN_SCIFA1_SCK_B, FN_DU1_EXHSYNC_DU1_HSYNC,
3952 FN_CAN_DEBUGOUT13,
3953 /* IP11_5_3 [3] */
3954 FN_SSI_SDATA5, FN_SCIFA3_TXD, FN_I2C3_SDA_C, FN_DU1_DOTCLKOUT1,
3955 FN_CAN_DEBUGOUT12, 0, 0, 0,
3956 /* IP11_2_0 [3] */
3957 FN_SSI_WS5, FN_SCIFA3_RXD, FN_I2C3_SCL_C, FN_DU1_DOTCLKOUT0,
3958 FN_CAN_DEBUGOUT11, 0, 0, 0, }
3959 },
3960 { PINMUX_CFG_REG_VAR("IPSR12", 0xE6060050, 32,
3961 2, 3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 3) {
3962 /* IP12_31_30 [2] */
3963 0, 0, 0, 0,
3964 /* IP12_29_27 [3] */
3965 FN_SSI_SCK2, FN_HSCIF1_HTX_B, FN_VI1_DATA2, FN_MDATA,
3966 FN_ATAWR0_N, FN_ETH_RXD1_B, 0, 0,
3967 /* IP12_26_24 [3] */
3968 FN_SSI_SDATA1, FN_HSCIF1_HRX_B, FN_VI1_DATA1, FN_SDATA,
3969 FN_ATAG0_N, FN_ETH_RXD0_B, 0, 0,
3970 /* IP12_23_21 [3] */
3971 FN_SSI_WS1, FN_SCIF1_TXD_B, FN_IIC1_SDA_C, FN_VI1_DATA0,
3972 FN_CAN0_TX_D, FN_AVB_AVTP_MATCH, FN_ETH_RX_ER_B, 0,
3973 /* IP12_20_18 [3] */
3974 FN_SSI_SCK1, FN_SCIF1_RXD_B, FN_IIC1_SCL_C, FN_VI1_CLK,
3975 FN_CAN0_RX_D, FN_AVB_AVTP_CAPTURE, FN_ETH_CRS_DV_B, 0,
3976 /* IP12_17_15 [3] */
3977 FN_SSI_SDATA8, FN_SCIF1_SCK_B, FN_PWM1_B, FN_IRQ9,
3978 FN_REMOCON, FN_DACK2, FN_ETH_MDIO_B, 0,
3979 /* IP12_14_13 [2] */
3980 FN_SSI_SDATA4, FN_MLB_DAT, FN_IERX_B, FN_IRD_SCK,
3981 /* IP12_12_11 [2] */
3982 FN_SSI_WS4, FN_MLB_SIG, FN_IECLK_B, FN_IRD_RX,
3983 /* IP12_10_9 [2] */
3984 FN_SSI_SCK4, FN_MLB_CLK, FN_IETX_B, FN_IRD_TX,
3985 /* IP12_8_6 [3] */
3986 FN_SSI_SDATA3, FN_MSIOF1_SS2_B, FN_SCIFA1_TXD_C, FN_ADICHS2_B,
3987 FN_CAN1_TX_C, FN_DREQ2_N, 0, 0,
3988 /* IP12_5_3 [3] */
3989 FN_SSI_WS34, FN_MSIOF1_SS1_B, FN_SCIFA1_RXD_C, FN_ADICHS1_B,
3990 FN_CAN1_RX_C, FN_DACK1_B, 0, 0,
3991 /* IP12_2_0 [3] */
3992 FN_SSI_SCK34, FN_MSIOF1_SYNC_B, FN_SCIFA1_SCK_C, FN_ADICHS0_B,
3993 FN_AD_NCS_N_B, FN_DREQ1_N_B, 0, 0, }
3994 },
3995 { PINMUX_CFG_REG_VAR("IPSR13", 0xE6060054, 32,
3996 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3) {
3997 /* IP13_31 [1] */
3998 0, 0,
3999 /* IP13_30 [1] */
4000 0, 0,
4001 /* IP13_29 [1] */
4002 0, 0,
4003 /* IP13_28 [1] */
4004 0, 0,
4005 /* IP13_27 [1] */
4006 0, 0,
4007 /* IP13_26_24 [3] */
4008 FN_AUDIO_CLKOUT, FN_I2C4_SDA_B, FN_SCIFA5_TXD_D, FN_VI1_VSYNC_N,
4009 FN_TS_SPSYNC_C, FN_RIF0_D1_B, FN_FMIN_E, FN_RDS_DATA_D,
4010 /* IP13_23_21 [3] */
4011 FN_AUDIO_CLKC, FN_I2C4_SCL_B, FN_SCIFA5_RXD_D, FN_VI1_HSYNC_N,
4012 FN_TS_SDEN_C, FN_RIF0_D0_B, FN_FMCLK_E, FN_RDS_CLK_D,
4013 /* IP13_20_18 [3] */
4014 FN_AUDIO_CLKB, FN_I2C0_SDA_B, FN_SCIFA4_TXD_D, FN_VI1_FIELD,
4015 FN_TS_SCK_C, FN_RIF0_CLK_B, FN_BPFCLK_E, FN_ETH_MDC_B,
4016 /* IP13_17_15 [3] */
4017 FN_AUDIO_CLKA, FN_I2C0_SCL_B, FN_SCIFA4_RXD_D, FN_VI1_CLKENB,
4018 FN_TS_SDATA_C, FN_RIF0_SYNC_B, FN_ETH_TXD0_B, 0,
4019 /* IP13_14_12 [3] */
4020 FN_SSI_SDATA9, FN_SCIF2_TXD_B, FN_I2C3_SDA_E, FN_VI1_DATA7,
4021 FN_ATADIR0_N, FN_ETH_MAGIC_B, 0, 0,
4022 /* IP13_11_9 [3] */
4023 FN_SSI_WS9, FN_SCIF2_RXD_B, FN_I2C3_SCL_E, FN_VI1_DATA6,
4024 FN_ATARD0_N, FN_ETH_TX_EN_B, 0, 0,
4025 /* IP13_8_6 [3] */
4026 FN_SSI_SCK9, FN_SCIF2_SCK_B, FN_PWM2_B, FN_VI1_DATA5,
4027 FN_MTS_N, FN_EX_WAIT1, FN_ETH_TXD1_B, 0,
4028 /* IP13_5_3 [2] */
4029 FN_SSI_SDATA2, FN_HSCIF1_HRTS_N_B, FN_SCIFA0_TXD_D,
4030 FN_VI1_DATA4, FN_STM_N, FN_ATACS10_N, FN_ETH_REFCLK_B, 0,
4031 /* IP13_2_0 [3] */
4032 FN_SSI_WS2, FN_HSCIF1_HCTS_N_B, FN_SCIFA0_RXD_D, FN_VI1_DATA3,
4033 FN_SCKZ, FN_ATACS00_N, FN_ETH_LINK_B, 0, }
4034 },
4035 { PINMUX_CFG_REG_VAR("MOD_SEL", 0xE6060090, 32,
4036 2, 1, 2, 3, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3,
4037 2, 1) {
4038 /* SEL_ADG [2] */
4039 FN_SEL_ADG_0, FN_SEL_ADG_1, FN_SEL_ADG_2, FN_SEL_ADG_3,
4040 /* SEL_ADI [1] */
4041 FN_SEL_ADI_0, FN_SEL_ADI_1,
4042 /* SEL_CAN [2] */
4043 FN_SEL_CAN_0, FN_SEL_CAN_1, FN_SEL_CAN_2, FN_SEL_CAN_3,
4044 /* SEL_DARC [3] */
4045 FN_SEL_DARC_0, FN_SEL_DARC_1, FN_SEL_DARC_2, FN_SEL_DARC_3,
4046 FN_SEL_DARC_4, 0, 0, 0,
4047 /* SEL_DR0 [1] */
4048 FN_SEL_DR0_0, FN_SEL_DR0_1,
4049 /* SEL_DR1 [1] */
4050 FN_SEL_DR1_0, FN_SEL_DR1_1,
4051 /* SEL_DR2 [1] */
4052 FN_SEL_DR2_0, FN_SEL_DR2_1,
4053 /* SEL_DR3 [1] */
4054 FN_SEL_DR3_0, FN_SEL_DR3_1,
4055 /* SEL_ETH [1] */
4056 FN_SEL_ETH_0, FN_SEL_ETH_1,
4057 /* SLE_FSN [1] */
4058 FN_SEL_FSN_0, FN_SEL_FSN_1,
4059 /* SEL_IC200 [3] */
4060 FN_SEL_I2C00_0, FN_SEL_I2C00_1, FN_SEL_I2C00_2, FN_SEL_I2C00_3,
4061 FN_SEL_I2C00_4, 0, 0, 0,
4062 /* SEL_I2C01 [3] */
4063 FN_SEL_I2C01_0, FN_SEL_I2C01_1, FN_SEL_I2C01_2, FN_SEL_I2C01_3,
4064 FN_SEL_I2C01_4, 0, 0, 0,
4065 /* SEL_I2C02 [3] */
4066 FN_SEL_I2C02_0, FN_SEL_I2C02_1, FN_SEL_I2C02_2, FN_SEL_I2C02_3,
4067 FN_SEL_I2C02_4, 0, 0, 0,
4068 /* SEL_I2C03 [3] */
4069 FN_SEL_I2C03_0, FN_SEL_I2C03_1, FN_SEL_I2C03_2, FN_SEL_I2C03_3,
4070 FN_SEL_I2C03_4, 0, 0, 0,
4071 /* SEL_I2C04 [3] */
4072 FN_SEL_I2C04_0, FN_SEL_I2C04_1, FN_SEL_I2C04_2, FN_SEL_I2C04_3,
4073 FN_SEL_I2C04_4, 0, 0, 0,
4074 /* SEL_IIC00 [2] */
4075 FN_SEL_IIC00_0, FN_SEL_IIC00_1, FN_SEL_IIC00_2, FN_SEL_IIC00_3,
4076 /* SEL_AVB [1] */
4077 FN_SEL_AVB_0, FN_SEL_AVB_1, }
4078 },
4079 { PINMUX_CFG_REG_VAR("MOD_SEL2", 0xE6060094, 32,
4080 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1,
4081 2, 2, 2, 1, 1, 2) {
4082 /* SEL_IEB [2] */
4083 FN_SEL_IEB_0, FN_SEL_IEB_1, FN_SEL_IEB_2, 0,
4084 /* SEL_IIC0 [2] */
4085 FN_SEL_IIC01_0, FN_SEL_IIC01_1, FN_SEL_IIC01_2, FN_SEL_IIC01_3,
4086 /* SEL_LBS [1] */
4087 FN_SEL_LBS_0, FN_SEL_LBS_1,
4088 /* SEL_MSI1 [1] */
4089 FN_SEL_MSI1_0, FN_SEL_MSI1_1,
4090 /* SEL_MSI2 [1] */
4091 FN_SEL_MSI2_0, FN_SEL_MSI2_1,
4092 /* SEL_RAD [1] */
4093 FN_SEL_RAD_0, FN_SEL_RAD_1,
4094 /* SEL_RCN [1] */
4095 FN_SEL_RCN_0, FN_SEL_RCN_1,
4096 /* SEL_RSP [1] */
4097 FN_SEL_RSP_0, FN_SEL_RSP_1,
4098 /* SEL_SCIFA0 [2] */
4099 FN_SEL_SCIFA0_0, FN_SEL_SCIFA0_1, FN_SEL_SCIFA0_2,
4100 FN_SEL_SCIFA0_3,
4101 /* SEL_SCIFA1 [2] */
4102 FN_SEL_SCIFA1_0, FN_SEL_SCIFA1_1, FN_SEL_SCIFA1_2, 0,
4103 /* SEL_SCIFA2 [1] */
4104 FN_SEL_SCIFA2_0, FN_SEL_SCIFA2_1,
4105 /* SEL_SCIFA3 [1] */
4106 FN_SEL_SCIFA3_0, FN_SEL_SCIFA3_1,
4107 /* SEL_SCIFA4 [2] */
4108 FN_SEL_SCIFA4_0, FN_SEL_SCIFA4_1, FN_SEL_SCIFA4_2,
4109 FN_SEL_SCIFA4_3,
4110 /* SEL_SCIFA5 [2] */
4111 FN_SEL_SCIFA5_0, FN_SEL_SCIFA5_1, FN_SEL_SCIFA5_2,
4112 FN_SEL_SCIFA5_3,
4113 /* SEL_SPDM [1] */
4114 FN_SEL_SPDM_0, FN_SEL_SPDM_1,
4115 /* SEL_TMU [1] */
4116 FN_SEL_TMU_0, FN_SEL_TMU_1,
4117 /* SEL_TSIF0 [2] */
4118 FN_SEL_TSIF0_0, FN_SEL_TSIF0_1, FN_SEL_TSIF0_2, FN_SEL_TSIF0_3,
4119 /* SEL_CAN0 [2] */
4120 FN_SEL_CAN0_0, FN_SEL_CAN0_1, FN_SEL_CAN0_2, FN_SEL_CAN0_3,
4121 /* SEL_CAN1 [2] */
4122 FN_SEL_CAN1_0, FN_SEL_CAN1_1, FN_SEL_CAN1_2, FN_SEL_CAN1_3,
4123 /* SEL_HSCIF0 [1] */
4124 FN_SEL_HSCIF0_0, FN_SEL_HSCIF0_1,
4125 /* SEL_HSCIF1 [1] */
4126 FN_SEL_HSCIF1_0, FN_SEL_HSCIF1_1,
4127 /* SEL_RDS [2] */
4128 FN_SEL_RDS_0, FN_SEL_RDS_1, FN_SEL_RDS_2, FN_SEL_RDS_3, }
4129 },
4130 { PINMUX_CFG_REG_VAR("MOD_SEL3", 0xE6060098, 32,
4131 2, 2, 2, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1,
4132 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) {
4133 /* SEL_SCIF0 [2] */
4134 FN_SEL_SCIF0_0, FN_SEL_SCIF0_1, FN_SEL_SCIF0_2, FN_SEL_SCIF0_3,
4135 /* SEL_SCIF1 [2] */
4136 FN_SEL_SCIF1_0, FN_SEL_SCIF1_1, FN_SEL_SCIF1_2, 0,
4137 /* SEL_SCIF2 [2] */
4138 FN_SEL_SCIF2_0, FN_SEL_SCIF2_1, FN_SEL_SCIF2_2, 0,
4139 /* SEL_SCIF3 [1] */
4140 FN_SEL_SCIF3_0, FN_SEL_SCIF3_1,
4141 /* SEL_SCIF4 [3] */
4142 FN_SEL_SCIF4_0, FN_SEL_SCIF4_1, FN_SEL_SCIF4_2, FN_SEL_SCIF4_3,
4143 FN_SEL_SCIF4_4, 0, 0, 0,
4144 /* SEL_SCIF5 [2] */
4145 FN_SEL_SCIF5_0, FN_SEL_SCIF5_1, FN_SEL_SCIF5_2, FN_SEL_SCIF5_3,
4146 /* SEL_SSI1 [1] */
4147 FN_SEL_SSI1_0, FN_SEL_SSI1_1,
4148 /* SEL_SSI2 [1] */
4149 FN_SEL_SSI2_0, FN_SEL_SSI2_1,
4150 /* SEL_SSI4 [1] */
4151 FN_SEL_SSI4_0, FN_SEL_SSI4_1,
4152 /* SEL_SSI5 [1] */
4153 FN_SEL_SSI5_0, FN_SEL_SSI5_1,
4154 /* SEL_SSI6 [1] */
4155 FN_SEL_SSI6_0, FN_SEL_SSI6_1,
4156 /* SEL_SSI7 [1] */
4157 FN_SEL_SSI7_0, FN_SEL_SSI7_1,
4158 /* SEL_SSI8 [1] */
4159 FN_SEL_SSI8_0, FN_SEL_SSI8_1,
4160 /* SEL_SSI9 [1] */
4161 FN_SEL_SSI9_0, FN_SEL_SSI9_1,
4162 /* RESERVED [1] */
4163 0, 0,
4164 /* RESERVED [1] */
4165 0, 0,
4166 /* RESERVED [1] */
4167 0, 0,
4168 /* RESERVED [1] */
4169 0, 0,
4170 /* RESERVED [1] */
4171 0, 0,
4172 /* RESERVED [1] */
4173 0, 0,
4174 /* RESERVED [1] */
4175 0, 0,
4176 /* RESERVED [1] */
4177 0, 0,
4178 /* RESERVED [1] */
4179 0, 0,
4180 /* RESERVED [1] */
4181 0, 0,
4182 /* RESERVED [1] */
4183 0, 0,
4184 /* RESERVED [1] */
4185 0, 0, }
4186 },
4187 { },
4188};
4189
4190const struct sh_pfc_soc_info r8a7794_pinmux_info = {
4191 .name = "r8a77940_pfc",
4192 .unlock_reg = 0xe6060000, /* PMMR */
4193
4194 .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END },
4195
4196 .pins = pinmux_pins,
4197 .nr_pins = ARRAY_SIZE(pinmux_pins),
4198 .groups = pinmux_groups,
4199 .nr_groups = ARRAY_SIZE(pinmux_groups),
4200 .functions = pinmux_functions,
4201 .nr_functions = ARRAY_SIZE(pinmux_functions),
4202
4203 .cfg_regs = pinmux_config_regs,
4204
4205 .gpio_data = pinmux_data,
4206 .gpio_data_size = ARRAY_SIZE(pinmux_data),
4207};
diff --git a/drivers/pinctrl/sh-pfc/pinctrl.c b/drivers/pinctrl/sh-pfc/pinctrl.c
index 072e7c62cab7..ff678966008b 100644
--- a/drivers/pinctrl/sh-pfc/pinctrl.c
+++ b/drivers/pinctrl/sh-pfc/pinctrl.c
@@ -625,8 +625,8 @@ int sh_pfc_register_pinctrl(struct sh_pfc *pfc)
625 pmx->pctl_desc.npins = pfc->info->nr_pins; 625 pmx->pctl_desc.npins = pfc->info->nr_pins;
626 626
627 pmx->pctl = pinctrl_register(&pmx->pctl_desc, pfc->dev, pmx); 627 pmx->pctl = pinctrl_register(&pmx->pctl_desc, pfc->dev, pmx);
628 if (pmx->pctl == NULL) 628 if (IS_ERR(pmx->pctl))
629 return -EINVAL; 629 return PTR_ERR(pmx->pctl);
630 630
631 return 0; 631 return 0;
632} 632}
diff --git a/drivers/pinctrl/sirf/Makefile b/drivers/pinctrl/sirf/Makefile
index 3ffc475ce40c..fd58e0bacb2a 100644
--- a/drivers/pinctrl/sirf/Makefile
+++ b/drivers/pinctrl/sirf/Makefile
@@ -3,3 +3,4 @@
3obj-y += pinctrl-sirf.o 3obj-y += pinctrl-sirf.o
4obj-y += pinctrl-prima2.o 4obj-y += pinctrl-prima2.o
5obj-y += pinctrl-atlas6.o 5obj-y += pinctrl-atlas6.o
6obj-y += pinctrl-atlas7.o
diff --git a/drivers/pinctrl/sirf/pinctrl-atlas7.c b/drivers/pinctrl/sirf/pinctrl-atlas7.c
new file mode 100644
index 000000000000..9384e0aa3996
--- /dev/null
+++ b/drivers/pinctrl/sirf/pinctrl-atlas7.c
@@ -0,0 +1,4637 @@
1/*
2 * pinctrl pads, groups, functions for CSR SiRFatlasVII
3 *
4 * Copyright (c) 2011 - 2014 Cambridge Silicon Radio Limited, a CSR plc group
5 * company.
6 *
7 * Licensed under GPLv2 or later.
8 */
9
10#include <linux/module.h>
11#include <linux/platform_device.h>
12#include <linux/io.h>
13#include <linux/bitops.h>
14#include <linux/irq.h>
15#include <linux/slab.h>
16#include <linux/clk.h>
17#include <linux/of.h>
18#include <linux/of_address.h>
19#include <linux/of_device.h>
20#include <linux/of_platform.h>
21#include <linux/of_irq.h>
22#include <linux/of_gpio.h>
23#include <linux/pinctrl/machine.h>
24#include <linux/pinctrl/pinconf.h>
25#include <linux/pinctrl/pinctrl.h>
26#include <linux/pinctrl/pinmux.h>
27#include <linux/pinctrl/consumer.h>
28#include <linux/pinctrl/pinconf-generic.h>
29#include <linux/gpio.h>
30
31/* Definition of Pad&Mux Properties */
32#define N 0
33
34/* The Bank contains input-disable regisgers */
35#define BANK_DS 0
36
37/* Clear Register offset */
38#define CLR_REG(r) ((r) + 0x04)
39
40/* Definition of multiple function select register */
41#define FUNC_CLEAR_MASK 0x7
42#define FUNC_GPIO 0
43#define FUNC_ANALOGUE 0x8
44#define ANA_CLEAR_MASK 0x1
45
46/* The Atlas7's Pad Type List */
47enum altas7_pad_type {
48 PAD_T_4WE_PD = 0, /* ZIO_PAD3V_4WE_PD */
49 PAD_T_4WE_PU, /* ZIO_PAD3V_4WE_PD */
50 PAD_T_16ST, /* ZIO_PAD3V_SDCLK_PD */
51 PAD_T_M31_0204_PD, /* PRDW0204SDGZ_M311311_PD */
52 PAD_T_M31_0204_PU, /* PRDW0204SDGZ_M311311_PU */
53 PAD_T_M31_0610_PD, /* PRUW0610SDGZ_M311311_PD */
54 PAD_T_M31_0610_PU, /* PRUW0610SDGZ_M311311_PU */
55 PAD_T_AD, /* PRDWUWHW08SCDG_HZ */
56};
57
58/* Raw value of Driver-Strength Bits */
59#define DS3 BIT(3)
60#define DS2 BIT(2)
61#define DS1 BIT(1)
62#define DS0 BIT(0)
63#define DSZ 0
64
65/* Drive-Strength Intermediate Values */
66#define DS_NULL -1
67#define DS_1BIT_IM_VAL DS0
68#define DS_1BIT_MASK 0x1
69#define DS_2BIT_IM_VAL (DS1 | DS0)
70#define DS_2BIT_MASK 0x3
71#define DS_4BIT_IM_VAL (DS3 | DS2 | DS1 | DS0)
72#define DS_4BIT_MASK 0xf
73
74/* The Drive-Strength of 4WE Pad DS1 0 CO */
75#define DS_4WE_3 (DS1 | DS0) /* 1 1 3 */
76#define DS_4WE_2 (DS1) /* 1 0 2 */
77#define DS_4WE_1 (DS0) /* 0 1 1 */
78#define DS_4WE_0 (DSZ) /* 0 0 0 */
79
80/* The Drive-Strength of 16st Pad DS3 2 1 0 CO */
81#define DS_16ST_15 (DS3 | DS2 | DS1 | DS0) /* 1 1 1 1 15 */
82#define DS_16ST_14 (DS3 | DS2 | DS0) /* 1 1 0 1 13 */
83#define DS_16ST_13 (DS3 | DS2 | DS1) /* 1 1 1 0 14 */
84#define DS_16ST_12 (DS2 | DS1 | DS0) /* 0 1 1 1 7 */
85#define DS_16ST_11 (DS2 | DS0) /* 0 1 0 1 5 */
86#define DS_16ST_10 (DS3 | DS1 | DS0) /* 1 0 1 1 11 */
87#define DS_16ST_9 (DS3 | DS0) /* 1 0 0 1 9 */
88#define DS_16ST_8 (DS1 | DS0) /* 0 0 1 1 3 */
89#define DS_16ST_7 (DS2 | DS1) /* 0 1 1 0 6 */
90#define DS_16ST_6 (DS3 | DS2) /* 1 1 0 0 12 */
91#define DS_16ST_5 (DS2) /* 0 1 0 0 4 */
92#define DS_16ST_4 (DS3 | DS1) /* 1 0 1 0 10 */
93#define DS_16ST_3 (DS1) /* 0 0 1 0 2 */
94#define DS_16ST_2 (DS0) /* 0 0 0 1 1 */
95#define DS_16ST_1 (DSZ) /* 0 0 0 0 0 */
96#define DS_16ST_0 (DS3) /* 1 0 0 0 8 */
97
98/* The Drive-Strength of M31 Pad DS0 CO */
99#define DS_M31_0 (DSZ) /* 0 0 */
100#define DS_M31_1 (DS0) /* 1 1 */
101
102/* Raw values of Pull Option Bits */
103#define PUN BIT(1)
104#define PD BIT(0)
105#define PE BIT(0)
106#define PZ 0
107
108/* Definition of Pull Types */
109#define PULL_UP 0
110#define HIGH_HYSTERESIS 1
111#define HIGH_Z 2
112#define PULL_DOWN 3
113#define PULL_DISABLE 4
114#define PULL_ENABLE 5
115#define PULL_UNKNOWN -1
116
117/* Pull Options for 4WE Pad PUN PD CO */
118#define P4WE_PULL_MASK 0x3
119#define P4WE_PULL_DOWN (PUN | PD) /* 1 1 3 */
120#define P4WE_HIGH_Z (PUN) /* 1 0 2 */
121#define P4WE_HIGH_HYSTERESIS (PD) /* 0 1 1 */
122#define P4WE_PULL_UP (PZ) /* 0 0 0 */
123
124/* Pull Options for 16ST Pad PUN PD CO */
125#define P16ST_PULL_MASK 0x3
126#define P16ST_PULL_DOWN (PUN | PD) /* 1 1 3 */
127#define P16ST_HIGH_Z (PUN) /* 1 0 2 */
128#define P16ST_PULL_UP (PZ) /* 0 0 0 */
129
130/* Pull Options for M31 Pad PE */
131#define PM31_PULL_MASK 0x1
132#define PM31_PULL_ENABLED (PE) /* 1 */
133#define PM31_PULL_DISABLED (PZ) /* 0 */
134
135/* Pull Options for A/D Pad PUN PD CO */
136#define PANGD_PULL_MASK 0x3
137#define PANGD_PULL_DOWN (PUN | PD) /* 1 1 3 */
138#define PANGD_HIGH_Z (PUN) /* 1 0 2 */
139#define PANGD_PULL_UP (PZ) /* 0 0 0 */
140
141/* Definition of Input Disable */
142#define DI_MASK 0x1
143#define DI_DISABLE 0x1
144#define DI_ENABLE 0x0
145
146/* Definition of Input Disable Value */
147#define DIV_MASK 0x1
148#define DIV_DISABLE 0x1
149#define DIV_ENABLE 0x0
150
151struct dt_params {
152 const char *property;
153 int value;
154};
155
156/**
157 * struct atlas7_pad_conf - Atlas7 Pad Configuration
158 * @id The ID of this Pad.
159 * @type: The type of this Pad.
160 * @mux_reg: The mux register offset.
161 * This register contains the mux.
162 * @pupd_reg: The pull-up/down register offset.
163 * @drvstr_reg: The drive-strength register offset.
164 * @ad_ctrl_reg: The Analogue/Digital Control register.
165 *
166 * @mux_bit: The start bit of mux register.
167 * @pupd_bit: The start bit of pull-up/down register.
168 * @drvstr_bit: The start bit of drive-strength register.
169 * @ad_ctrl_bit: The start bit of analogue/digital register.
170 */
171struct atlas7_pad_config {
172 const u32 id;
173 u32 type;
174 u32 mux_reg;
175 u32 pupd_reg;
176 u32 drvstr_reg;
177 u32 ad_ctrl_reg;
178 /* bits in register */
179 u8 mux_bit;
180 u8 pupd_bit;
181 u8 drvstr_bit;
182 u8 ad_ctrl_bit;
183};
184
185#define PADCONF(pad, t, mr, pr, dsr, adr, mb, pb, dsb, adb) \
186 { \
187 .id = pad, \
188 .type = t, \
189 .mux_reg = mr, \
190 .pupd_reg = pr, \
191 .drvstr_reg = dsr, \
192 .ad_ctrl_reg = adr, \
193 .mux_bit = mb, \
194 .pupd_bit = pb, \
195 .drvstr_bit = dsb, \
196 .ad_ctrl_bit = adb, \
197 }
198
199/**
200 * struct atlas7_pad_mux - Atlas7 mux
201 * @bank: The bank of this pad's registers on.
202 * @pin : The ID of this Pad.
203 * @func: The mux func on this Pad.
204 * @dinput_reg: The Input-Disable register offset.
205 * @dinput_bit: The start bit of Input-Disable register.
206 * @dinput_val_reg: The Input-Disable-value register offset.
207 * This register is used to set the value of this pad
208 * if this pad was disabled.
209 * @dinput_val_bit: The start bit of Input-Disable Value register.
210 */
211struct atlas7_pad_mux {
212 u32 bank;
213 u32 pin;
214 u32 func;
215 u32 dinput_reg;
216 u32 dinput_bit;
217 u32 dinput_val_reg;
218 u32 dinput_val_bit;
219};
220
221#define MUX(b, pad, f, dr, db, dvr, dvb) \
222 { \
223 .bank = b, \
224 .pin = pad, \
225 .func = f, \
226 .dinput_reg = dr, \
227 .dinput_bit = db, \
228 .dinput_val_reg = dvr, \
229 .dinput_val_bit = dvb, \
230 }
231
232struct atlas7_grp_mux {
233 unsigned int group;
234 unsigned int pad_mux_count;
235 const struct atlas7_pad_mux *pad_mux_list;
236};
237
238 /**
239 * struct sirfsoc_pin_group - describes a SiRFprimaII pin group
240 * @name: the name of this specific pin group
241 * @pins: an array of discrete physical pins used in this group, taken
242 * from the driver-local pin enumeration space
243 * @num_pins: the number of pins in this group array, i.e. the number of
244 * elements in .pins so we can iterate over that array
245 */
246struct atlas7_pin_group {
247 const char *name;
248 const unsigned int *pins;
249 const unsigned num_pins;
250};
251
252#define GROUP(n, p) \
253 { \
254 .name = n, \
255 .pins = p, \
256 .num_pins = ARRAY_SIZE(p), \
257 }
258
259struct atlas7_pmx_func {
260 const char *name;
261 const char * const *groups;
262 const unsigned num_groups;
263 const struct atlas7_grp_mux *grpmux;
264};
265
266#define FUNCTION(n, g, m) \
267 { \
268 .name = n, \
269 .groups = g, \
270 .num_groups = ARRAY_SIZE(g), \
271 .grpmux = m, \
272 }
273
274struct atlas7_pinctrl_data {
275 struct pinctrl_pin_desc *pads;
276 int pads_cnt;
277 struct atlas7_pin_group *grps;
278 int grps_cnt;
279 struct atlas7_pmx_func *funcs;
280 int funcs_cnt;
281 struct atlas7_pad_config *confs;
282 int confs_cnt;
283};
284
285/* Platform info of atlas7 pinctrl */
286#define ATLAS7_PINCTRL_REG_BANKS 2
287#define ATLAS7_PINCTRL_BANK_0_PINS 18
288
289/**
290 * Atlas7 GPIO Chip
291 */
292
293#define NGPIO_OF_BANK 32
294#define GPIO_TO_BANK(gpio) ((gpio) / NGPIO_OF_BANK)
295
296/* Registers of GPIO Controllers */
297#define ATLAS7_GPIO_BASE(g, b) ((g)->reg + 0x100 * (b))
298#define ATLAS7_GPIO_CTRL(b, i) ((b)->base + 4 * (i))
299#define ATLAS7_GPIO_INT_STATUS(b) ((b)->base + 0x8C)
300
301/* Definition bits of GPIO Control Registers */
302#define ATLAS7_GPIO_CTL_INTR_LOW_MASK BIT(0)
303#define ATLAS7_GPIO_CTL_INTR_HIGH_MASK BIT(1)
304#define ATLAS7_GPIO_CTL_INTR_TYPE_MASK BIT(2)
305#define ATLAS7_GPIO_CTL_INTR_EN_MASK BIT(3)
306#define ATLAS7_GPIO_CTL_INTR_STATUS_MASK BIT(4)
307#define ATLAS7_GPIO_CTL_OUT_EN_MASK BIT(5)
308#define ATLAS7_GPIO_CTL_DATAOUT_MASK BIT(6)
309#define ATLAS7_GPIO_CTL_DATAIN_MASK BIT(7)
310
311struct atlas7_gpio_bank {
312 struct pinctrl_dev *pctldev;
313 int id;
314 int irq;
315 void __iomem *base;
316 unsigned int gpio_offset;
317 unsigned int ngpio;
318 const unsigned int *gpio_pins;
319};
320
321struct atlas7_gpio_chip {
322 const char *name;
323 void __iomem *reg;
324 struct clk *clk;
325 int nbank;
326 spinlock_t lock;
327 struct gpio_chip chip;
328 struct atlas7_gpio_bank banks[0];
329};
330
331static inline struct atlas7_gpio_chip *to_atlas7_gpio(struct gpio_chip *gc)
332{
333 return container_of(gc, struct atlas7_gpio_chip, chip);
334}
335
336/**
337 * @dev: a pointer back to containing device
338 * @virtbase: the offset to the controller in virtual memory
339 */
340struct atlas7_pmx {
341 struct device *dev;
342 struct pinctrl_dev *pctl;
343 struct pinctrl_desc pctl_desc;
344 struct atlas7_pinctrl_data *pctl_data;
345 void __iomem *regs[ATLAS7_PINCTRL_REG_BANKS];
346};
347
348/*
349 * Pad list for the pinmux subsystem
350 * refer to A7DA IO Summary - CS-314158-DD-4E.xls
351 */
352
353/*Pads in IOC RTC & TOP */
354static const struct pinctrl_pin_desc atlas7_ioc_pads[] = {
355 /* RTC PADs */
356 PINCTRL_PIN(0, "rtc_gpio_0"),
357 PINCTRL_PIN(1, "rtc_gpio_1"),
358 PINCTRL_PIN(2, "rtc_gpio_2"),
359 PINCTRL_PIN(3, "rtc_gpio_3"),
360 PINCTRL_PIN(4, "low_bat_ind_b"),
361 PINCTRL_PIN(5, "on_key_b"),
362 PINCTRL_PIN(6, "ext_on"),
363 PINCTRL_PIN(7, "mem_on"),
364 PINCTRL_PIN(8, "core_on"),
365 PINCTRL_PIN(9, "io_on"),
366 PINCTRL_PIN(10, "can0_tx"),
367 PINCTRL_PIN(11, "can0_rx"),
368 PINCTRL_PIN(12, "spi0_clk"),
369 PINCTRL_PIN(13, "spi0_cs_b"),
370 PINCTRL_PIN(14, "spi0_io_0"),
371 PINCTRL_PIN(15, "spi0_io_1"),
372 PINCTRL_PIN(16, "spi0_io_2"),
373 PINCTRL_PIN(17, "spi0_io_3"),
374
375 /* TOP PADs */
376 PINCTRL_PIN(18, "spi1_en"),
377 PINCTRL_PIN(19, "spi1_clk"),
378 PINCTRL_PIN(20, "spi1_din"),
379 PINCTRL_PIN(21, "spi1_dout"),
380 PINCTRL_PIN(22, "trg_spi_clk"),
381 PINCTRL_PIN(23, "trg_spi_di"),
382 PINCTRL_PIN(24, "trg_spi_do"),
383 PINCTRL_PIN(25, "trg_spi_cs_b"),
384 PINCTRL_PIN(26, "trg_acq_d1"),
385 PINCTRL_PIN(27, "trg_irq_b"),
386 PINCTRL_PIN(28, "trg_acq_d0"),
387 PINCTRL_PIN(29, "trg_acq_clk"),
388 PINCTRL_PIN(30, "trg_shutdown_b_out"),
389 PINCTRL_PIN(31, "sdio2_clk"),
390 PINCTRL_PIN(32, "sdio2_cmd"),
391 PINCTRL_PIN(33, "sdio2_dat_0"),
392 PINCTRL_PIN(34, "sdio2_dat_1"),
393 PINCTRL_PIN(35, "sdio2_dat_2"),
394 PINCTRL_PIN(36, "sdio2_dat_3"),
395 PINCTRL_PIN(37, "df_ad_7"),
396 PINCTRL_PIN(38, "df_ad_6"),
397 PINCTRL_PIN(39, "df_ad_5"),
398 PINCTRL_PIN(40, "df_ad_4"),
399 PINCTRL_PIN(41, "df_ad_3"),
400 PINCTRL_PIN(42, "df_ad_2"),
401 PINCTRL_PIN(43, "df_ad_1"),
402 PINCTRL_PIN(44, "df_ad_0"),
403 PINCTRL_PIN(45, "df_dqs"),
404 PINCTRL_PIN(46, "df_cle"),
405 PINCTRL_PIN(47, "df_ale"),
406 PINCTRL_PIN(48, "df_we_b"),
407 PINCTRL_PIN(49, "df_re_b"),
408 PINCTRL_PIN(50, "df_ry_by"),
409 PINCTRL_PIN(51, "df_cs_b_1"),
410 PINCTRL_PIN(52, "df_cs_b_0"),
411 PINCTRL_PIN(53, "l_pclk"),
412 PINCTRL_PIN(54, "l_lck"),
413 PINCTRL_PIN(55, "l_fck"),
414 PINCTRL_PIN(56, "l_de"),
415 PINCTRL_PIN(57, "ldd_0"),
416 PINCTRL_PIN(58, "ldd_1"),
417 PINCTRL_PIN(59, "ldd_2"),
418 PINCTRL_PIN(60, "ldd_3"),
419 PINCTRL_PIN(61, "ldd_4"),
420 PINCTRL_PIN(62, "ldd_5"),
421 PINCTRL_PIN(63, "ldd_6"),
422 PINCTRL_PIN(64, "ldd_7"),
423 PINCTRL_PIN(65, "ldd_8"),
424 PINCTRL_PIN(66, "ldd_9"),
425 PINCTRL_PIN(67, "ldd_10"),
426 PINCTRL_PIN(68, "ldd_11"),
427 PINCTRL_PIN(69, "ldd_12"),
428 PINCTRL_PIN(70, "ldd_13"),
429 PINCTRL_PIN(71, "ldd_14"),
430 PINCTRL_PIN(72, "ldd_15"),
431 PINCTRL_PIN(73, "lcd_gpio_20"),
432 PINCTRL_PIN(74, "vip_0"),
433 PINCTRL_PIN(75, "vip_1"),
434 PINCTRL_PIN(76, "vip_2"),
435 PINCTRL_PIN(77, "vip_3"),
436 PINCTRL_PIN(78, "vip_4"),
437 PINCTRL_PIN(79, "vip_5"),
438 PINCTRL_PIN(80, "vip_6"),
439 PINCTRL_PIN(81, "vip_7"),
440 PINCTRL_PIN(82, "vip_pxclk"),
441 PINCTRL_PIN(83, "vip_hsync"),
442 PINCTRL_PIN(84, "vip_vsync"),
443 PINCTRL_PIN(85, "sdio3_clk"),
444 PINCTRL_PIN(86, "sdio3_cmd"),
445 PINCTRL_PIN(87, "sdio3_dat_0"),
446 PINCTRL_PIN(88, "sdio3_dat_1"),
447 PINCTRL_PIN(89, "sdio3_dat_2"),
448 PINCTRL_PIN(90, "sdio3_dat_3"),
449 PINCTRL_PIN(91, "sdio5_clk"),
450 PINCTRL_PIN(92, "sdio5_cmd"),
451 PINCTRL_PIN(93, "sdio5_dat_0"),
452 PINCTRL_PIN(94, "sdio5_dat_1"),
453 PINCTRL_PIN(95, "sdio5_dat_2"),
454 PINCTRL_PIN(96, "sdio5_dat_3"),
455 PINCTRL_PIN(97, "rgmii_txd_0"),
456 PINCTRL_PIN(98, "rgmii_txd_1"),
457 PINCTRL_PIN(99, "rgmii_txd_2"),
458 PINCTRL_PIN(100, "rgmii_txd_3"),
459 PINCTRL_PIN(101, "rgmii_txclk"),
460 PINCTRL_PIN(102, "rgmii_tx_ctl"),
461 PINCTRL_PIN(103, "rgmii_rxd_0"),
462 PINCTRL_PIN(104, "rgmii_rxd_1"),
463 PINCTRL_PIN(105, "rgmii_rxd_2"),
464 PINCTRL_PIN(106, "rgmii_rxd_3"),
465 PINCTRL_PIN(107, "rgmii_rx_clk"),
466 PINCTRL_PIN(108, "rgmii_rxc_ctl"),
467 PINCTRL_PIN(109, "rgmii_mdio"),
468 PINCTRL_PIN(110, "rgmii_mdc"),
469 PINCTRL_PIN(111, "rgmii_intr_n"),
470 PINCTRL_PIN(112, "i2s_mclk"),
471 PINCTRL_PIN(113, "i2s_bclk"),
472 PINCTRL_PIN(114, "i2s_ws"),
473 PINCTRL_PIN(115, "i2s_dout0"),
474 PINCTRL_PIN(116, "i2s_dout1"),
475 PINCTRL_PIN(117, "i2s_dout2"),
476 PINCTRL_PIN(118, "i2s_din"),
477 PINCTRL_PIN(119, "gpio_0"),
478 PINCTRL_PIN(120, "gpio_1"),
479 PINCTRL_PIN(121, "gpio_2"),
480 PINCTRL_PIN(122, "gpio_3"),
481 PINCTRL_PIN(123, "gpio_4"),
482 PINCTRL_PIN(124, "gpio_5"),
483 PINCTRL_PIN(125, "gpio_6"),
484 PINCTRL_PIN(126, "gpio_7"),
485 PINCTRL_PIN(127, "sda_0"),
486 PINCTRL_PIN(128, "scl_0"),
487 PINCTRL_PIN(129, "coex_pio_0"),
488 PINCTRL_PIN(130, "coex_pio_1"),
489 PINCTRL_PIN(131, "coex_pio_2"),
490 PINCTRL_PIN(132, "coex_pio_3"),
491 PINCTRL_PIN(133, "uart0_tx"),
492 PINCTRL_PIN(134, "uart0_rx"),
493 PINCTRL_PIN(135, "uart1_tx"),
494 PINCTRL_PIN(136, "uart1_rx"),
495 PINCTRL_PIN(137, "uart3_tx"),
496 PINCTRL_PIN(138, "uart3_rx"),
497 PINCTRL_PIN(139, "uart4_tx"),
498 PINCTRL_PIN(140, "uart4_rx"),
499 PINCTRL_PIN(141, "usp0_clk"),
500 PINCTRL_PIN(142, "usp0_tx"),
501 PINCTRL_PIN(143, "usp0_rx"),
502 PINCTRL_PIN(144, "usp0_fs"),
503 PINCTRL_PIN(145, "usp1_clk"),
504 PINCTRL_PIN(146, "usp1_tx"),
505 PINCTRL_PIN(147, "usp1_rx"),
506 PINCTRL_PIN(148, "usp1_fs"),
507 PINCTRL_PIN(149, "lvds_tx0d4p"),
508 PINCTRL_PIN(150, "lvds_tx0d4n"),
509 PINCTRL_PIN(151, "lvds_tx0d3p"),
510 PINCTRL_PIN(152, "lvds_tx0d3n"),
511 PINCTRL_PIN(153, "lvds_tx0d2p"),
512 PINCTRL_PIN(154, "lvds_tx0d2n"),
513 PINCTRL_PIN(155, "lvds_tx0d1p"),
514 PINCTRL_PIN(156, "lvds_tx0d1n"),
515 PINCTRL_PIN(157, "lvds_tx0d0p"),
516 PINCTRL_PIN(158, "lvds_tx0d0n"),
517};
518
519struct atlas7_pad_config atlas7_ioc_pad_confs[] = {
520 /* The Configuration of IOC_RTC Pads */
521 PADCONF(0, 3, 0x0, 0x100, 0x200, -1, 0, 0, 0, 0),
522 PADCONF(1, 3, 0x0, 0x100, 0x200, -1, 4, 2, 2, 0),
523 PADCONF(2, 3, 0x0, 0x100, 0x200, -1, 8, 4, 4, 0),
524 PADCONF(3, 5, 0x0, 0x100, 0x200, -1, 12, 6, 6, 0),
525 PADCONF(4, 4, 0x0, 0x100, 0x200, -1, 16, 8, 8, 0),
526 PADCONF(5, 4, 0x0, 0x100, 0x200, -1, 20, 10, 10, 0),
527 PADCONF(6, 3, 0x0, 0x100, 0x200, -1, 24, 12, 12, 0),
528 PADCONF(7, 3, 0x0, 0x100, 0x200, -1, 28, 14, 14, 0),
529 PADCONF(8, 3, 0x8, 0x100, 0x200, -1, 0, 16, 16, 0),
530 PADCONF(9, 3, 0x8, 0x100, 0x200, -1, 4, 18, 18, 0),
531 PADCONF(10, 4, 0x8, 0x100, 0x200, -1, 8, 20, 20, 0),
532 PADCONF(11, 4, 0x8, 0x100, 0x200, -1, 12, 22, 22, 0),
533 PADCONF(12, 5, 0x8, 0x100, 0x200, -1, 16, 24, 24, 0),
534 PADCONF(13, 6, 0x8, 0x100, 0x200, -1, 20, 26, 26, 0),
535 PADCONF(14, 5, 0x8, 0x100, 0x200, -1, 24, 28, 28, 0),
536 PADCONF(15, 5, 0x8, 0x100, 0x200, -1, 28, 30, 30, 0),
537 PADCONF(16, 5, 0x10, 0x108, 0x208, -1, 0, 0, 0, 0),
538 PADCONF(17, 5, 0x10, 0x108, 0x208, -1, 4, 2, 2, 0),
539 /* The Configuration of IOC_TOP Pads */
540 PADCONF(18, 5, 0x80, 0x180, 0x300, -1, 0, 0, 0, 0),
541 PADCONF(19, 5, 0x80, 0x180, 0x300, -1, 4, 2, 2, 0),
542 PADCONF(20, 5, 0x80, 0x180, 0x300, -1, 8, 4, 4, 0),
543 PADCONF(21, 5, 0x80, 0x180, 0x300, -1, 12, 6, 6, 0),
544 PADCONF(22, 5, 0x88, 0x188, 0x308, -1, 0, 0, 0, 0),
545 PADCONF(23, 5, 0x88, 0x188, 0x308, -1, 4, 2, 2, 0),
546 PADCONF(24, 5, 0x88, 0x188, 0x308, -1, 8, 4, 4, 0),
547 PADCONF(25, 6, 0x88, 0x188, 0x308, -1, 12, 6, 6, 0),
548 PADCONF(26, 5, 0x88, 0x188, 0x308, -1, 16, 8, 8, 0),
549 PADCONF(27, 6, 0x88, 0x188, 0x308, -1, 20, 10, 10, 0),
550 PADCONF(28, 5, 0x88, 0x188, 0x308, -1, 24, 12, 12, 0),
551 PADCONF(29, 5, 0x88, 0x188, 0x308, -1, 28, 14, 14, 0),
552 PADCONF(30, 5, 0x90, 0x188, 0x308, -1, 0, 16, 16, 0),
553 PADCONF(31, 2, 0x98, 0x190, 0x310, -1, 0, 0, 0, 0),
554 PADCONF(32, 1, 0x98, 0x190, 0x310, -1, 4, 2, 4, 0),
555 PADCONF(33, 1, 0x98, 0x190, 0x310, -1, 8, 4, 6, 0),
556 PADCONF(34, 1, 0x98, 0x190, 0x310, -1, 12, 6, 8, 0),
557 PADCONF(35, 1, 0x98, 0x190, 0x310, -1, 16, 8, 10, 0),
558 PADCONF(36, 1, 0x98, 0x190, 0x310, -1, 20, 10, 12, 0),
559 PADCONF(37, 1, 0xa0, 0x198, 0x318, -1, 0, 0, 0, 0),
560 PADCONF(38, 1, 0xa0, 0x198, 0x318, -1, 4, 2, 2, 0),
561 PADCONF(39, 1, 0xa0, 0x198, 0x318, -1, 8, 4, 4, 0),
562 PADCONF(40, 1, 0xa0, 0x198, 0x318, -1, 12, 6, 6, 0),
563 PADCONF(41, 1, 0xa0, 0x198, 0x318, -1, 16, 8, 8, 0),
564 PADCONF(42, 1, 0xa0, 0x198, 0x318, -1, 20, 10, 10, 0),
565 PADCONF(43, 1, 0xa0, 0x198, 0x318, -1, 24, 12, 12, 0),
566 PADCONF(44, 1, 0xa0, 0x198, 0x318, -1, 28, 14, 14, 0),
567 PADCONF(45, 0, 0xa8, 0x198, 0x318, -1, 0, 16, 16, 0),
568 PADCONF(46, 0, 0xa8, 0x198, 0x318, -1, 4, 18, 18, 0),
569 PADCONF(47, 1, 0xa8, 0x198, 0x318, -1, 8, 20, 20, 0),
570 PADCONF(48, 1, 0xa8, 0x198, 0x318, -1, 12, 22, 22, 0),
571 PADCONF(49, 1, 0xa8, 0x198, 0x318, -1, 16, 24, 24, 0),
572 PADCONF(50, 1, 0xa8, 0x198, 0x318, -1, 20, 26, 26, 0),
573 PADCONF(51, 1, 0xa8, 0x198, 0x318, -1, 24, 28, 28, 0),
574 PADCONF(52, 1, 0xa8, 0x198, 0x318, -1, 28, 30, 30, 0),
575 PADCONF(53, 0, 0xb0, 0x1a0, 0x320, -1, 0, 0, 0, 0),
576 PADCONF(54, 0, 0xb0, 0x1a0, 0x320, -1, 4, 2, 2, 0),
577 PADCONF(55, 0, 0xb0, 0x1a0, 0x320, -1, 8, 4, 4, 0),
578 PADCONF(56, 0, 0xb0, 0x1a0, 0x320, -1, 12, 6, 6, 0),
579 PADCONF(57, 0, 0xb0, 0x1a0, 0x320, -1, 16, 8, 8, 0),
580 PADCONF(58, 0, 0xb0, 0x1a0, 0x320, -1, 20, 10, 10, 0),
581 PADCONF(59, 0, 0xb0, 0x1a0, 0x320, -1, 24, 12, 12, 0),
582 PADCONF(60, 0, 0xb0, 0x1a0, 0x320, -1, 28, 14, 14, 0),
583 PADCONF(61, 0, 0xb8, 0x1a0, 0x320, -1, 0, 16, 16, 0),
584 PADCONF(62, 0, 0xb8, 0x1a0, 0x320, -1, 4, 18, 18, 0),
585 PADCONF(63, 0, 0xb8, 0x1a0, 0x320, -1, 8, 20, 20, 0),
586 PADCONF(64, 0, 0xb8, 0x1a0, 0x320, -1, 12, 22, 22, 0),
587 PADCONF(65, 0, 0xb8, 0x1a0, 0x320, -1, 16, 24, 24, 0),
588 PADCONF(66, 0, 0xb8, 0x1a0, 0x320, -1, 20, 26, 26, 0),
589 PADCONF(67, 0, 0xb8, 0x1a0, 0x320, -1, 24, 28, 28, 0),
590 PADCONF(68, 0, 0xb8, 0x1a0, 0x320, -1, 28, 30, 30, 0),
591 PADCONF(69, 0, 0xc0, 0x1a8, 0x328, -1, 0, 0, 0, 0),
592 PADCONF(70, 0, 0xc0, 0x1a8, 0x328, -1, 4, 2, 2, 0),
593 PADCONF(71, 0, 0xc0, 0x1a8, 0x328, -1, 8, 4, 4, 0),
594 PADCONF(72, 0, 0xc0, 0x1a8, 0x328, -1, 12, 6, 6, 0),
595 PADCONF(73, 0, 0xc0, 0x1a8, 0x328, -1, 16, 8, 8, 0),
596 PADCONF(74, 0, 0xc8, 0x1b0, 0x330, -1, 0, 0, 0, 0),
597 PADCONF(75, 0, 0xc8, 0x1b0, 0x330, -1, 4, 2, 2, 0),
598 PADCONF(76, 0, 0xc8, 0x1b0, 0x330, -1, 8, 4, 4, 0),
599 PADCONF(77, 0, 0xc8, 0x1b0, 0x330, -1, 12, 6, 6, 0),
600 PADCONF(78, 0, 0xc8, 0x1b0, 0x330, -1, 16, 8, 8, 0),
601 PADCONF(79, 0, 0xc8, 0x1b0, 0x330, -1, 20, 10, 10, 0),
602 PADCONF(80, 0, 0xc8, 0x1b0, 0x330, -1, 24, 12, 12, 0),
603 PADCONF(81, 0, 0xc8, 0x1b0, 0x330, -1, 28, 14, 14, 0),
604 PADCONF(82, 0, 0xd0, 0x1b0, 0x330, -1, 0, 16, 16, 0),
605 PADCONF(83, 0, 0xd0, 0x1b0, 0x330, -1, 4, 18, 18, 0),
606 PADCONF(84, 0, 0xd0, 0x1b0, 0x330, -1, 8, 20, 20, 0),
607 PADCONF(85, 2, 0xd8, 0x1b8, 0x338, -1, 0, 0, 0, 0),
608 PADCONF(86, 1, 0xd8, 0x1b8, 0x338, -1, 4, 4, 4, 0),
609 PADCONF(87, 1, 0xd8, 0x1b8, 0x338, -1, 8, 6, 6, 0),
610 PADCONF(88, 1, 0xd8, 0x1b8, 0x338, -1, 12, 8, 8, 0),
611 PADCONF(89, 1, 0xd8, 0x1b8, 0x338, -1, 16, 10, 10, 0),
612 PADCONF(90, 1, 0xd8, 0x1b8, 0x338, -1, 20, 12, 12, 0),
613 PADCONF(91, 2, 0xe0, 0x1c0, 0x340, -1, 0, 0, 0, 0),
614 PADCONF(92, 1, 0xe0, 0x1c0, 0x340, -1, 4, 4, 4, 0),
615 PADCONF(93, 1, 0xe0, 0x1c0, 0x340, -1, 8, 6, 6, 0),
616 PADCONF(94, 1, 0xe0, 0x1c0, 0x340, -1, 12, 8, 8, 0),
617 PADCONF(95, 1, 0xe0, 0x1c0, 0x340, -1, 16, 10, 10, 0),
618 PADCONF(96, 1, 0xe0, 0x1c0, 0x340, -1, 20, 12, 12, 0),
619 PADCONF(97, 0, 0xe8, 0x1c8, 0x348, -1, 0, 0, 0, 0),
620 PADCONF(98, 0, 0xe8, 0x1c8, 0x348, -1, 4, 2, 2, 0),
621 PADCONF(99, 0, 0xe8, 0x1c8, 0x348, -1, 8, 4, 4, 0),
622 PADCONF(100, 0, 0xe8, 0x1c8, 0x348, -1, 12, 6, 6, 0),
623 PADCONF(101, 2, 0xe8, 0x1c8, 0x348, -1, 16, 8, 8, 0),
624 PADCONF(102, 0, 0xe8, 0x1c8, 0x348, -1, 20, 12, 12, 0),
625 PADCONF(103, 0, 0xe8, 0x1c8, 0x348, -1, 24, 14, 14, 0),
626 PADCONF(104, 0, 0xe8, 0x1c8, 0x348, -1, 28, 16, 16, 0),
627 PADCONF(105, 0, 0xf0, 0x1c8, 0x348, -1, 0, 18, 18, 0),
628 PADCONF(106, 0, 0xf0, 0x1c8, 0x348, -1, 4, 20, 20, 0),
629 PADCONF(107, 0, 0xf0, 0x1c8, 0x348, -1, 8, 22, 22, 0),
630 PADCONF(108, 0, 0xf0, 0x1c8, 0x348, -1, 12, 24, 24, 0),
631 PADCONF(109, 1, 0xf0, 0x1c8, 0x348, -1, 16, 26, 26, 0),
632 PADCONF(110, 0, 0xf0, 0x1c8, 0x348, -1, 20, 28, 28, 0),
633 PADCONF(111, 1, 0xf0, 0x1c8, 0x348, -1, 24, 30, 30, 0),
634 PADCONF(112, 5, 0xf8, 0x200, 0x350, -1, 0, 0, 0, 0),
635 PADCONF(113, 5, 0xf8, 0x200, 0x350, -1, 4, 2, 2, 0),
636 PADCONF(114, 5, 0xf8, 0x200, 0x350, -1, 8, 4, 4, 0),
637 PADCONF(115, 5, 0xf8, 0x200, 0x350, -1, 12, 6, 6, 0),
638 PADCONF(116, 5, 0xf8, 0x200, 0x350, -1, 16, 8, 8, 0),
639 PADCONF(117, 5, 0xf8, 0x200, 0x350, -1, 20, 10, 10, 0),
640 PADCONF(118, 5, 0xf8, 0x200, 0x350, -1, 24, 12, 12, 0),
641 PADCONF(119, 5, 0x100, 0x250, 0x358, -1, 0, 0, 0, 0),
642 PADCONF(120, 5, 0x100, 0x250, 0x358, -1, 4, 2, 2, 0),
643 PADCONF(121, 5, 0x100, 0x250, 0x358, -1, 8, 4, 4, 0),
644 PADCONF(122, 5, 0x100, 0x250, 0x358, -1, 12, 6, 6, 0),
645 PADCONF(123, 6, 0x100, 0x250, 0x358, -1, 16, 8, 8, 0),
646 PADCONF(124, 6, 0x100, 0x250, 0x358, -1, 20, 10, 10, 0),
647 PADCONF(125, 6, 0x100, 0x250, 0x358, -1, 24, 12, 12, 0),
648 PADCONF(126, 6, 0x100, 0x250, 0x358, -1, 28, 14, 14, 0),
649 PADCONF(127, 6, 0x108, 0x250, 0x358, -1, 16, 24, 24, 0),
650 PADCONF(128, 6, 0x108, 0x250, 0x358, -1, 20, 26, 26, 0),
651 PADCONF(129, 0, 0x110, 0x258, 0x360, -1, 0, 0, 0, 0),
652 PADCONF(130, 0, 0x110, 0x258, 0x360, -1, 4, 2, 2, 0),
653 PADCONF(131, 0, 0x110, 0x258, 0x360, -1, 8, 4, 4, 0),
654 PADCONF(132, 0, 0x110, 0x258, 0x360, -1, 12, 6, 6, 0),
655 PADCONF(133, 6, 0x118, 0x260, 0x368, -1, 0, 0, 0, 0),
656 PADCONF(134, 6, 0x118, 0x260, 0x368, -1, 4, 2, 2, 0),
657 PADCONF(135, 6, 0x118, 0x260, 0x368, -1, 16, 8, 8, 0),
658 PADCONF(136, 6, 0x118, 0x260, 0x368, -1, 20, 10, 10, 0),
659 PADCONF(137, 6, 0x118, 0x260, 0x368, -1, 24, 12, 12, 0),
660 PADCONF(138, 6, 0x118, 0x260, 0x368, -1, 28, 14, 14, 0),
661 PADCONF(139, 6, 0x120, 0x260, 0x368, -1, 0, 16, 16, 0),
662 PADCONF(140, 6, 0x120, 0x260, 0x368, -1, 4, 18, 18, 0),
663 PADCONF(141, 5, 0x128, 0x268, 0x378, -1, 0, 0, 0, 0),
664 PADCONF(142, 5, 0x128, 0x268, 0x378, -1, 4, 2, 2, 0),
665 PADCONF(143, 5, 0x128, 0x268, 0x378, -1, 8, 4, 4, 0),
666 PADCONF(144, 5, 0x128, 0x268, 0x378, -1, 12, 6, 6, 0),
667 PADCONF(145, 5, 0x128, 0x268, 0x378, -1, 16, 8, 8, 0),
668 PADCONF(146, 5, 0x128, 0x268, 0x378, -1, 20, 10, 10, 0),
669 PADCONF(147, 5, 0x128, 0x268, 0x378, -1, 24, 12, 12, 0),
670 PADCONF(148, 5, 0x128, 0x268, 0x378, -1, 28, 14, 14, 0),
671 PADCONF(149, 7, 0x130, 0x270, -1, 0x480, 0, 0, 0, 0),
672 PADCONF(150, 7, 0x130, 0x270, -1, 0x480, 4, 2, 0, 1),
673 PADCONF(151, 7, 0x130, 0x270, -1, 0x480, 8, 4, 0, 2),
674 PADCONF(152, 7, 0x130, 0x270, -1, 0x480, 12, 6, 0, 3),
675 PADCONF(153, 7, 0x130, 0x270, -1, 0x480, 16, 8, 0, 4),
676 PADCONF(154, 7, 0x130, 0x270, -1, 0x480, 20, 10, 0, 5),
677 PADCONF(155, 7, 0x130, 0x270, -1, 0x480, 24, 12, 0, 6),
678 PADCONF(156, 7, 0x130, 0x270, -1, 0x480, 28, 14, 0, 7),
679 PADCONF(157, 7, 0x138, 0x278, -1, 0x480, 0, 0, 0, 8),
680 PADCONF(158, 7, 0x138, 0x278, -1, 0x480, 4, 2, 0, 9),
681};
682
683/* pin list of each pin group */
684static const unsigned int gnss_gpio_pins[] = { 119, 120, 121, 122, 123, 124,
685 125, 126, 127, 128, 22, 23, 24, 25, 26, 27, 28, 29, 30, };
686static const unsigned int lcd_vip_gpio_pins[] = { 74, 75, 76, 77, 78, 79, 80,
687 81, 82, 83, 84, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
688 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, };
689static const unsigned int sdio_i2s_gpio_pins[] = { 31, 32, 33, 34, 35, 36,
690 85, 86, 87, 88, 89, 90, 129, 130, 131, 132, 91, 92, 93, 94,
691 95, 96, 112, 113, 114, 115, 116, 117, 118, };
692static const unsigned int sp_rgmii_gpio_pins[] = { 97, 98, 99, 100, 101, 102,
693 103, 104, 105, 106, 107, 108, 109, 110, 111, 18, 19, 20, 21,
694 141, 142, 143, 144, 145, 146, 147, 148, };
695static const unsigned int lvds_gpio_pins[] = { 157, 158, 155, 156, 153, 154,
696 151, 152, 149, 150, };
697static const unsigned int uart_nand_gpio_pins[] = { 44, 43, 42, 41, 40, 39,
698 38, 37, 46, 47, 48, 49, 50, 52, 51, 45, 133, 134, 135, 136,
699 137, 138, 139, 140, };
700static const unsigned int rtc_gpio_pins[] = { 0, 1, 2, 3, 4, 10, 11, 12, 13,
701 14, 15, 16, 17, };
702static const unsigned int audio_ac97_pins[] = { 113, 118, 115, 114, };
703static const unsigned int audio_func_dbg_pins[] = { 141, 144, 44, 43, 42, 41,
704 40, 39, 38, 37, 74, 75, 76, 77, 78, 79, 81, 113, 114, 118,
705 115, 49, 50, 142, 143, 80, };
706static const unsigned int audio_i2s_pins[] = { 118, 115, 116, 117, 112, 113,
707 114, };
708static const unsigned int audio_i2s_2ch_pins[] = { 118, 115, 112, 113, 114, };
709static const unsigned int audio_i2s_extclk_pins[] = { 112, };
710static const unsigned int audio_uart0_pins[] = { 143, 142, 141, 144, };
711static const unsigned int audio_uart1_pins[] = { 147, 146, 145, 148, };
712static const unsigned int audio_uart2_pins0[] = { 20, 21, 19, 18, };
713static const unsigned int audio_uart2_pins1[] = { 109, 110, 101, 111, };
714static const unsigned int c_can_trnsvr_pins[] = { 1, };
715static const unsigned int c0_can_pins0[] = { 11, 10, };
716static const unsigned int c0_can_pins1[] = { 2, 3, };
717static const unsigned int c1_can_pins0[] = { 138, 137, };
718static const unsigned int c1_can_pins1[] = { 147, 146, };
719static const unsigned int c1_can_pins2[] = { 2, 3, };
720static const unsigned int ca_audio_lpc_pins[] = { 62, 63, 64, 65, 66, 67, 68,
721 69, 70, 71, };
722static const unsigned int ca_bt_lpc_pins[] = { 85, 86, 87, 88, 89, 90, };
723static const unsigned int ca_coex_pins[] = { 129, 130, 131, 132, };
724static const unsigned int ca_curator_lpc_pins[] = { 57, 58, 59, 60, };
725static const unsigned int ca_pcm_debug_pins[] = { 91, 93, 94, 92, };
726static const unsigned int ca_pio_pins[] = { 121, 122, 125, 126, 38, 37, 47,
727 49, 50, 54, 55, 56, };
728static const unsigned int ca_sdio_debug_pins[] = { 40, 39, 44, 43, 42, 41, };
729static const unsigned int ca_spi_pins[] = { 82, 79, 80, 81, };
730static const unsigned int ca_trb_pins[] = { 91, 93, 94, 95, 96, 78, 74, 75,
731 76, 77, };
732static const unsigned int ca_uart_debug_pins[] = { 136, 135, 134, 133, };
733static const unsigned int clkc_pins0[] = { 30, 47, };
734static const unsigned int clkc_pins1[] = { 78, 54, };
735static const unsigned int gn_gnss_i2c_pins[] = { 128, 127, };
736static const unsigned int gn_gnss_uart_nopause_pins[] = { 134, 133, };
737static const unsigned int gn_gnss_uart_pins[] = { 134, 133, 136, 135, };
738static const unsigned int gn_trg_spi_pins0[] = { 22, 25, 23, 24, };
739static const unsigned int gn_trg_spi_pins1[] = { 82, 79, 80, 81, };
740static const unsigned int cvbs_dbg_pins[] = { 54, 53, 82, 74, 75, 76, 77, 78,
741 79, 80, 81, 83, 84, 73, 55, 56, };
742static const unsigned int cvbs_dbg_test_pins0[] = { 57, };
743static const unsigned int cvbs_dbg_test_pins1[] = { 58, };
744static const unsigned int cvbs_dbg_test_pins2[] = { 59, };
745static const unsigned int cvbs_dbg_test_pins3[] = { 60, };
746static const unsigned int cvbs_dbg_test_pins4[] = { 61, };
747static const unsigned int cvbs_dbg_test_pins5[] = { 62, };
748static const unsigned int cvbs_dbg_test_pins6[] = { 63, };
749static const unsigned int cvbs_dbg_test_pins7[] = { 64, };
750static const unsigned int cvbs_dbg_test_pins8[] = { 65, };
751static const unsigned int cvbs_dbg_test_pins9[] = { 66, };
752static const unsigned int cvbs_dbg_test_pins10[] = { 67, };
753static const unsigned int cvbs_dbg_test_pins11[] = { 68, };
754static const unsigned int cvbs_dbg_test_pins12[] = { 69, };
755static const unsigned int cvbs_dbg_test_pins13[] = { 70, };
756static const unsigned int cvbs_dbg_test_pins14[] = { 71, };
757static const unsigned int cvbs_dbg_test_pins15[] = { 72, };
758static const unsigned int gn_gnss_power_pins[] = { 123, 124, 121, 122, 125,
759 120, };
760static const unsigned int gn_gnss_sw_status_pins[] = { 57, 58, 59, 60, 61,
761 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 53, 55, 56, 54, };
762static const unsigned int gn_gnss_eclk_pins[] = { 113, };
763static const unsigned int gn_gnss_irq1_pins0[] = { 112, };
764static const unsigned int gn_gnss_irq2_pins0[] = { 118, };
765static const unsigned int gn_gnss_tm_pins[] = { 115, };
766static const unsigned int gn_gnss_tsync_pins[] = { 114, };
767static const unsigned int gn_io_gnsssys_sw_cfg_pins[] = { 44, 43, 42, 41, 40,
768 39, 38, 37, 49, 50, 91, 92, 93, 94, 95, 96, };
769static const unsigned int gn_trg_pins0[] = { 29, 28, 26, 27, };
770static const unsigned int gn_trg_pins1[] = { 77, 76, 74, 75, };
771static const unsigned int gn_trg_shutdown_pins0[] = { 30, };
772static const unsigned int gn_trg_shutdown_pins1[] = { 83, };
773static const unsigned int gn_trg_shutdown_pins2[] = { 117, };
774static const unsigned int gn_trg_shutdown_pins3[] = { 123, };
775static const unsigned int i2c0_pins[] = { 128, 127, };
776static const unsigned int i2c1_pins[] = { 126, 125, };
777static const unsigned int jtag_pins0[] = { 125, 4, 2, 0, 1, 3, };
778static const unsigned int ks_kas_spi_pins0[] = { 141, 144, 143, 142, };
779static const unsigned int ld_ldd_pins[] = { 57, 58, 59, 60, 61, 62, 63, 64,
780 65, 66, 67, 68, 69, 70, 71, 72, 74, 75, 76, 77, 78, 79, 80,
781 81, 56, 53, };
782static const unsigned int ld_ldd_16bit_pins[] = { 57, 58, 59, 60, 61, 62, 63,
783 64, 65, 66, 67, 68, 69, 70, 71, 72, 56, 53, };
784static const unsigned int ld_ldd_fck_pins[] = { 55, };
785static const unsigned int ld_ldd_lck_pins[] = { 54, };
786static const unsigned int lr_lcdrom_pins[] = { 73, 54, 57, 58, 59, 60, 61,
787 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 56, 53, 55, };
788static const unsigned int lvds_analog_pins[] = { 149, 150, 151, 152, 153, 154,
789 155, 156, 157, 158, };
790static const unsigned int nd_df_pins[] = { 44, 43, 42, 41, 40, 39, 38, 37,
791 47, 46, 52, 51, 45, 49, 50, 48, 124, };
792static const unsigned int nd_df_nowp_pins[] = { 44, 43, 42, 41, 40, 39, 38,
793 37, 47, 46, 52, 51, 45, 49, 50, 48, };
794static const unsigned int ps_pins[] = { 120, 119, };
795static const unsigned int pwc_core_on_pins[] = { 8, };
796static const unsigned int pwc_ext_on_pins[] = { 6, };
797static const unsigned int pwc_gpio3_clk_pins[] = { 3, };
798static const unsigned int pwc_io_on_pins[] = { 9, };
799static const unsigned int pwc_lowbatt_b_pins0[] = { 4, };
800static const unsigned int pwc_mem_on_pins[] = { 7, };
801static const unsigned int pwc_on_key_b_pins0[] = { 5, };
802static const unsigned int pwc_wakeup_src0_pins[] = { 0, };
803static const unsigned int pwc_wakeup_src1_pins[] = { 1, };
804static const unsigned int pwc_wakeup_src2_pins[] = { 2, };
805static const unsigned int pwc_wakeup_src3_pins[] = { 3, };
806static const unsigned int pw_cko0_pins0[] = { 123, };
807static const unsigned int pw_cko0_pins1[] = { 101, };
808static const unsigned int pw_cko0_pins2[] = { 82, };
809static const unsigned int pw_cko1_pins0[] = { 124, };
810static const unsigned int pw_cko1_pins1[] = { 110, };
811static const unsigned int pw_i2s01_clk_pins0[] = { 125, };
812static const unsigned int pw_i2s01_clk_pins1[] = { 117, };
813static const unsigned int pw_pwm0_pins[] = { 119, };
814static const unsigned int pw_pwm1_pins[] = { 120, };
815static const unsigned int pw_pwm2_pins0[] = { 121, };
816static const unsigned int pw_pwm2_pins1[] = { 98, };
817static const unsigned int pw_pwm3_pins0[] = { 122, };
818static const unsigned int pw_pwm3_pins1[] = { 73, };
819static const unsigned int pw_pwm_cpu_vol_pins0[] = { 121, };
820static const unsigned int pw_pwm_cpu_vol_pins1[] = { 98, };
821static const unsigned int pw_backlight_pins0[] = { 122, };
822static const unsigned int pw_backlight_pins1[] = { 73, };
823static const unsigned int rg_eth_mac_pins[] = { 108, 103, 104, 105, 106, 107,
824 102, 97, 98, 99, 100, 101, };
825static const unsigned int rg_gmac_phy_intr_n_pins[] = { 111, };
826static const unsigned int rg_rgmii_mac_pins[] = { 109, 110, };
827static const unsigned int rg_rgmii_phy_ref_clk_pins0[] = { 111, };
828static const unsigned int rg_rgmii_phy_ref_clk_pins1[] = { 53, };
829static const unsigned int sd0_pins[] = { 46, 47, 44, 43, 42, 41, 40, 39, 38,
830 37, };
831static const unsigned int sd0_4bit_pins[] = { 46, 47, 44, 43, 42, 41, };
832static const unsigned int sd1_pins[] = { 48, 49, 44, 43, 42, 41, 40, 39, 38,
833 37, };
834static const unsigned int sd1_4bit_pins0[] = { 48, 49, 44, 43, 42, 41, };
835static const unsigned int sd1_4bit_pins1[] = { 48, 49, 40, 39, 38, 37, };
836static const unsigned int sd2_pins0[] = { 124, 31, 32, 33, 34, 35, 36, 123, };
837static const unsigned int sd2_no_cdb_pins0[] = { 31, 32, 33, 34, 35, 36, 123, };
838static const unsigned int sd3_pins[] = { 85, 86, 87, 88, 89, 90, };
839static const unsigned int sd5_pins[] = { 91, 92, 93, 94, 95, 96, };
840static const unsigned int sd6_pins0[] = { 79, 78, 74, 75, 76, 77, };
841static const unsigned int sd6_pins1[] = { 101, 99, 100, 110, 109, 111, };
842static const unsigned int sp0_ext_ldo_on_pins[] = { 4, };
843static const unsigned int sp0_qspi_pins[] = { 12, 13, 14, 15, 16, 17, };
844static const unsigned int sp1_spi_pins[] = { 19, 20, 21, 18, };
845static const unsigned int tpiu_trace_pins[] = { 53, 56, 57, 58, 59, 60, 61,
846 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, };
847static const unsigned int uart0_pins[] = { 121, 120, 134, 133, };
848static const unsigned int uart0_nopause_pins[] = { 134, 133, };
849static const unsigned int uart1_pins[] = { 136, 135, };
850static const unsigned int uart2_pins[] = { 11, 10, };
851static const unsigned int uart3_pins0[] = { 125, 126, 138, 137, };
852static const unsigned int uart3_pins1[] = { 111, 109, 84, 83, };
853static const unsigned int uart3_pins2[] = { 140, 139, 138, 137, };
854static const unsigned int uart3_pins3[] = { 139, 140, 84, 83, };
855static const unsigned int uart3_nopause_pins0[] = { 138, 137, };
856static const unsigned int uart3_nopause_pins1[] = { 84, 83, };
857static const unsigned int uart4_pins0[] = { 122, 123, 140, 139, };
858static const unsigned int uart4_pins1[] = { 100, 99, 140, 139, };
859static const unsigned int uart4_pins2[] = { 117, 116, 140, 139, };
860static const unsigned int uart4_nopause_pins[] = { 140, 139, };
861static const unsigned int usb0_drvvbus_pins[] = { 51, };
862static const unsigned int usb1_drvvbus_pins[] = { 134, };
863static const unsigned int visbus_dout_pins[] = { 57, 58, 59, 60, 61, 62, 63,
864 64, 65, 66, 67, 68, 69, 70, 71, 72, 53, 54, 55, 56, 85, 86,
865 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, };
866static const unsigned int vi_vip1_pins[] = { 74, 75, 76, 77, 78, 79, 80, 81,
867 82, 83, 84, 103, 104, 105, 106, 107, 102, 97, 98, };
868static const unsigned int vi_vip1_ext_pins[] = { 74, 75, 76, 77, 78, 79, 80,
869 81, 82, 83, 84, 108, 103, 104, 105, 106, 107, 102, 97, 98,
870 99, 100, };
871static const unsigned int vi_vip1_low8bit_pins[] = { 74, 75, 76, 77, 78, 79,
872 80, 81, };
873static const unsigned int vi_vip1_high8bit_pins[] = { 82, 83, 84, 108, 103,
874 104, 105, 106, };
875
876/* definition of pin group table */
877struct atlas7_pin_group altas7_pin_groups[] = {
878 GROUP("gnss_gpio_grp", gnss_gpio_pins),
879 GROUP("lcd_vip_gpio_grp", lcd_vip_gpio_pins),
880 GROUP("sdio_i2s_gpio_grp", sdio_i2s_gpio_pins),
881 GROUP("sp_rgmii_gpio_grp", sp_rgmii_gpio_pins),
882 GROUP("lvds_gpio_grp", lvds_gpio_pins),
883 GROUP("uart_nand_gpio_grp", uart_nand_gpio_pins),
884 GROUP("rtc_gpio_grp", rtc_gpio_pins),
885 GROUP("audio_ac97_grp", audio_ac97_pins),
886 GROUP("audio_func_dbg_grp", audio_func_dbg_pins),
887 GROUP("audio_i2s_grp", audio_i2s_pins),
888 GROUP("audio_i2s_2ch_grp", audio_i2s_2ch_pins),
889 GROUP("audio_i2s_extclk_grp", audio_i2s_extclk_pins),
890 GROUP("audio_uart0_grp", audio_uart0_pins),
891 GROUP("audio_uart1_grp", audio_uart1_pins),
892 GROUP("audio_uart2_grp0", audio_uart2_pins0),
893 GROUP("audio_uart2_grp1", audio_uart2_pins1),
894 GROUP("c_can_trnsvr_grp", c_can_trnsvr_pins),
895 GROUP("c0_can_grp0", c0_can_pins0),
896 GROUP("c0_can_grp1", c0_can_pins1),
897 GROUP("c1_can_grp0", c1_can_pins0),
898 GROUP("c1_can_grp1", c1_can_pins1),
899 GROUP("c1_can_grp2", c1_can_pins2),
900 GROUP("ca_audio_lpc_grp", ca_audio_lpc_pins),
901 GROUP("ca_bt_lpc_grp", ca_bt_lpc_pins),
902 GROUP("ca_coex_grp", ca_coex_pins),
903 GROUP("ca_curator_lpc_grp", ca_curator_lpc_pins),
904 GROUP("ca_pcm_debug_grp", ca_pcm_debug_pins),
905 GROUP("ca_pio_grp", ca_pio_pins),
906 GROUP("ca_sdio_debug_grp", ca_sdio_debug_pins),
907 GROUP("ca_spi_grp", ca_spi_pins),
908 GROUP("ca_trb_grp", ca_trb_pins),
909 GROUP("ca_uart_debug_grp", ca_uart_debug_pins),
910 GROUP("clkc_grp0", clkc_pins0),
911 GROUP("clkc_grp1", clkc_pins1),
912 GROUP("gn_gnss_i2c_grp", gn_gnss_i2c_pins),
913 GROUP("gn_gnss_uart_nopause_grp", gn_gnss_uart_nopause_pins),
914 GROUP("gn_gnss_uart_grp", gn_gnss_uart_pins),
915 GROUP("gn_trg_spi_grp0", gn_trg_spi_pins0),
916 GROUP("gn_trg_spi_grp1", gn_trg_spi_pins1),
917 GROUP("cvbs_dbg_grp", cvbs_dbg_pins),
918 GROUP("cvbs_dbg_test_grp0", cvbs_dbg_test_pins0),
919 GROUP("cvbs_dbg_test_grp1", cvbs_dbg_test_pins1),
920 GROUP("cvbs_dbg_test_grp2", cvbs_dbg_test_pins2),
921 GROUP("cvbs_dbg_test_grp3", cvbs_dbg_test_pins3),
922 GROUP("cvbs_dbg_test_grp4", cvbs_dbg_test_pins4),
923 GROUP("cvbs_dbg_test_grp5", cvbs_dbg_test_pins5),
924 GROUP("cvbs_dbg_test_grp6", cvbs_dbg_test_pins6),
925 GROUP("cvbs_dbg_test_grp7", cvbs_dbg_test_pins7),
926 GROUP("cvbs_dbg_test_grp8", cvbs_dbg_test_pins8),
927 GROUP("cvbs_dbg_test_grp9", cvbs_dbg_test_pins9),
928 GROUP("cvbs_dbg_test_grp10", cvbs_dbg_test_pins10),
929 GROUP("cvbs_dbg_test_grp11", cvbs_dbg_test_pins11),
930 GROUP("cvbs_dbg_test_grp12", cvbs_dbg_test_pins12),
931 GROUP("cvbs_dbg_test_grp13", cvbs_dbg_test_pins13),
932 GROUP("cvbs_dbg_test_grp14", cvbs_dbg_test_pins14),
933 GROUP("cvbs_dbg_test_grp15", cvbs_dbg_test_pins15),
934 GROUP("gn_gnss_power_grp", gn_gnss_power_pins),
935 GROUP("gn_gnss_sw_status_grp", gn_gnss_sw_status_pins),
936 GROUP("gn_gnss_eclk_grp", gn_gnss_eclk_pins),
937 GROUP("gn_gnss_irq1_grp0", gn_gnss_irq1_pins0),
938 GROUP("gn_gnss_irq2_grp0", gn_gnss_irq2_pins0),
939 GROUP("gn_gnss_tm_grp", gn_gnss_tm_pins),
940 GROUP("gn_gnss_tsync_grp", gn_gnss_tsync_pins),
941 GROUP("gn_io_gnsssys_sw_cfg_grp", gn_io_gnsssys_sw_cfg_pins),
942 GROUP("gn_trg_grp0", gn_trg_pins0),
943 GROUP("gn_trg_grp1", gn_trg_pins1),
944 GROUP("gn_trg_shutdown_grp0", gn_trg_shutdown_pins0),
945 GROUP("gn_trg_shutdown_grp1", gn_trg_shutdown_pins1),
946 GROUP("gn_trg_shutdown_grp2", gn_trg_shutdown_pins2),
947 GROUP("gn_trg_shutdown_grp3", gn_trg_shutdown_pins3),
948 GROUP("i2c0_grp", i2c0_pins),
949 GROUP("i2c1_grp", i2c1_pins),
950 GROUP("jtag_grp0", jtag_pins0),
951 GROUP("ks_kas_spi_grp0", ks_kas_spi_pins0),
952 GROUP("ld_ldd_grp", ld_ldd_pins),
953 GROUP("ld_ldd_16bit_grp", ld_ldd_16bit_pins),
954 GROUP("ld_ldd_fck_grp", ld_ldd_fck_pins),
955 GROUP("ld_ldd_lck_grp", ld_ldd_lck_pins),
956 GROUP("lr_lcdrom_grp", lr_lcdrom_pins),
957 GROUP("lvds_analog_grp", lvds_analog_pins),
958 GROUP("nd_df_grp", nd_df_pins),
959 GROUP("nd_df_nowp_grp", nd_df_nowp_pins),
960 GROUP("ps_grp", ps_pins),
961 GROUP("pwc_core_on_grp", pwc_core_on_pins),
962 GROUP("pwc_ext_on_grp", pwc_ext_on_pins),
963 GROUP("pwc_gpio3_clk_grp", pwc_gpio3_clk_pins),
964 GROUP("pwc_io_on_grp", pwc_io_on_pins),
965 GROUP("pwc_lowbatt_b_grp0", pwc_lowbatt_b_pins0),
966 GROUP("pwc_mem_on_grp", pwc_mem_on_pins),
967 GROUP("pwc_on_key_b_grp0", pwc_on_key_b_pins0),
968 GROUP("pwc_wakeup_src0_grp", pwc_wakeup_src0_pins),
969 GROUP("pwc_wakeup_src1_grp", pwc_wakeup_src1_pins),
970 GROUP("pwc_wakeup_src2_grp", pwc_wakeup_src2_pins),
971 GROUP("pwc_wakeup_src3_grp", pwc_wakeup_src3_pins),
972 GROUP("pw_cko0_grp0", pw_cko0_pins0),
973 GROUP("pw_cko0_grp1", pw_cko0_pins1),
974 GROUP("pw_cko0_grp2", pw_cko0_pins2),
975 GROUP("pw_cko1_grp0", pw_cko1_pins0),
976 GROUP("pw_cko1_grp1", pw_cko1_pins1),
977 GROUP("pw_i2s01_clk_grp0", pw_i2s01_clk_pins0),
978 GROUP("pw_i2s01_clk_grp1", pw_i2s01_clk_pins1),
979 GROUP("pw_pwm0_grp", pw_pwm0_pins),
980 GROUP("pw_pwm1_grp", pw_pwm1_pins),
981 GROUP("pw_pwm2_grp0", pw_pwm2_pins0),
982 GROUP("pw_pwm2_grp1", pw_pwm2_pins1),
983 GROUP("pw_pwm3_grp0", pw_pwm3_pins0),
984 GROUP("pw_pwm3_grp1", pw_pwm3_pins1),
985 GROUP("pw_pwm_cpu_vol_grp0", pw_pwm_cpu_vol_pins0),
986 GROUP("pw_pwm_cpu_vol_grp1", pw_pwm_cpu_vol_pins1),
987 GROUP("pw_backlight_grp0", pw_backlight_pins0),
988 GROUP("pw_backlight_grp1", pw_backlight_pins1),
989 GROUP("rg_eth_mac_grp", rg_eth_mac_pins),
990 GROUP("rg_gmac_phy_intr_n_grp", rg_gmac_phy_intr_n_pins),
991 GROUP("rg_rgmii_mac_grp", rg_rgmii_mac_pins),
992 GROUP("rg_rgmii_phy_ref_clk_grp0", rg_rgmii_phy_ref_clk_pins0),
993 GROUP("rg_rgmii_phy_ref_clk_grp1", rg_rgmii_phy_ref_clk_pins1),
994 GROUP("sd0_grp", sd0_pins),
995 GROUP("sd0_4bit_grp", sd0_4bit_pins),
996 GROUP("sd1_grp", sd1_pins),
997 GROUP("sd1_4bit_grp0", sd1_4bit_pins0),
998 GROUP("sd1_4bit_grp1", sd1_4bit_pins1),
999 GROUP("sd2_grp0", sd2_pins0),
1000 GROUP("sd2_no_cdb_grp0", sd2_no_cdb_pins0),
1001 GROUP("sd3_grp", sd3_pins),
1002 GROUP("sd5_grp", sd5_pins),
1003 GROUP("sd6_grp0", sd6_pins0),
1004 GROUP("sd6_grp1", sd6_pins1),
1005 GROUP("sp0_ext_ldo_on_grp", sp0_ext_ldo_on_pins),
1006 GROUP("sp0_qspi_grp", sp0_qspi_pins),
1007 GROUP("sp1_spi_grp", sp1_spi_pins),
1008 GROUP("tpiu_trace_grp", tpiu_trace_pins),
1009 GROUP("uart0_grp", uart0_pins),
1010 GROUP("uart0_nopause_grp", uart0_nopause_pins),
1011 GROUP("uart1_grp", uart1_pins),
1012 GROUP("uart2_grp", uart2_pins),
1013 GROUP("uart3_grp0", uart3_pins0),
1014 GROUP("uart3_grp1", uart3_pins1),
1015 GROUP("uart3_grp2", uart3_pins2),
1016 GROUP("uart3_grp3", uart3_pins3),
1017 GROUP("uart3_nopause_grp0", uart3_nopause_pins0),
1018 GROUP("uart3_nopause_grp1", uart3_nopause_pins1),
1019 GROUP("uart4_grp0", uart4_pins0),
1020 GROUP("uart4_grp1", uart4_pins1),
1021 GROUP("uart4_grp2", uart4_pins2),
1022 GROUP("uart4_nopause_grp", uart4_nopause_pins),
1023 GROUP("usb0_drvvbus_grp", usb0_drvvbus_pins),
1024 GROUP("usb1_drvvbus_grp", usb1_drvvbus_pins),
1025 GROUP("visbus_dout_grp", visbus_dout_pins),
1026 GROUP("vi_vip1_grp", vi_vip1_pins),
1027 GROUP("vi_vip1_ext_grp", vi_vip1_ext_pins),
1028 GROUP("vi_vip1_low8bit_grp", vi_vip1_low8bit_pins),
1029 GROUP("vi_vip1_high8bit_grp", vi_vip1_high8bit_pins),
1030};
1031
1032/* How many groups that a function can use */
1033static const char * const gnss_gpio_grp[] = { "gnss_gpio_grp", };
1034static const char * const lcd_vip_gpio_grp[] = { "lcd_vip_gpio_grp", };
1035static const char * const sdio_i2s_gpio_grp[] = { "sdio_i2s_gpio_grp", };
1036static const char * const sp_rgmii_gpio_grp[] = { "sp_rgmii_gpio_grp", };
1037static const char * const lvds_gpio_grp[] = { "lvds_gpio_grp", };
1038static const char * const uart_nand_gpio_grp[] = { "uart_nand_gpio_grp", };
1039static const char * const rtc_gpio_grp[] = { "rtc_gpio_grp", };
1040static const char * const audio_ac97_grp[] = { "audio_ac97_grp", };
1041static const char * const audio_func_dbg_grp[] = { "audio_func_dbg_grp", };
1042static const char * const audio_i2s_grp[] = { "audio_i2s_grp", };
1043static const char * const audio_i2s_2ch_grp[] = { "audio_i2s_2ch_grp", };
1044static const char * const audio_i2s_extclk_grp[] = { "audio_i2s_extclk_grp", };
1045static const char * const audio_uart0_grp[] = { "audio_uart0_grp", };
1046static const char * const audio_uart1_grp[] = { "audio_uart1_grp", };
1047static const char * const audio_uart2_grp0[] = { "audio_uart2_grp0", };
1048static const char * const audio_uart2_grp1[] = { "audio_uart2_grp1", };
1049static const char * const c_can_trnsvr_grp[] = { "c_can_trnsvr_grp", };
1050static const char * const c0_can_grp0[] = { "c0_can_grp0", };
1051static const char * const c0_can_grp1[] = { "c0_can_grp1", };
1052static const char * const c1_can_grp0[] = { "c1_can_grp0", };
1053static const char * const c1_can_grp1[] = { "c1_can_grp1", };
1054static const char * const c1_can_grp2[] = { "c1_can_grp2", };
1055static const char * const ca_audio_lpc_grp[] = { "ca_audio_lpc_grp", };
1056static const char * const ca_bt_lpc_grp[] = { "ca_bt_lpc_grp", };
1057static const char * const ca_coex_grp[] = { "ca_coex_grp", };
1058static const char * const ca_curator_lpc_grp[] = { "ca_curator_lpc_grp", };
1059static const char * const ca_pcm_debug_grp[] = { "ca_pcm_debug_grp", };
1060static const char * const ca_pio_grp[] = { "ca_pio_grp", };
1061static const char * const ca_sdio_debug_grp[] = { "ca_sdio_debug_grp", };
1062static const char * const ca_spi_grp[] = { "ca_spi_grp", };
1063static const char * const ca_trb_grp[] = { "ca_trb_grp", };
1064static const char * const ca_uart_debug_grp[] = { "ca_uart_debug_grp", };
1065static const char * const clkc_grp0[] = { "clkc_grp0", };
1066static const char * const clkc_grp1[] = { "clkc_grp1", };
1067static const char * const gn_gnss_i2c_grp[] = { "gn_gnss_i2c_grp", };
1068static const char * const gn_gnss_uart_nopause_grp[] = {
1069 "gn_gnss_uart_nopause_grp", };
1070static const char * const gn_gnss_uart_grp[] = { "gn_gnss_uart_grp", };
1071static const char * const gn_trg_spi_grp0[] = { "gn_trg_spi_grp0", };
1072static const char * const gn_trg_spi_grp1[] = { "gn_trg_spi_grp1", };
1073static const char * const cvbs_dbg_grp[] = { "cvbs_dbg_grp", };
1074static const char * const cvbs_dbg_test_grp0[] = { "cvbs_dbg_test_grp0", };
1075static const char * const cvbs_dbg_test_grp1[] = { "cvbs_dbg_test_grp1", };
1076static const char * const cvbs_dbg_test_grp2[] = { "cvbs_dbg_test_grp2", };
1077static const char * const cvbs_dbg_test_grp3[] = { "cvbs_dbg_test_grp3", };
1078static const char * const cvbs_dbg_test_grp4[] = { "cvbs_dbg_test_grp4", };
1079static const char * const cvbs_dbg_test_grp5[] = { "cvbs_dbg_test_grp5", };
1080static const char * const cvbs_dbg_test_grp6[] = { "cvbs_dbg_test_grp6", };
1081static const char * const cvbs_dbg_test_grp7[] = { "cvbs_dbg_test_grp7", };
1082static const char * const cvbs_dbg_test_grp8[] = { "cvbs_dbg_test_grp8", };
1083static const char * const cvbs_dbg_test_grp9[] = { "cvbs_dbg_test_grp9", };
1084static const char * const cvbs_dbg_test_grp10[] = { "cvbs_dbg_test_grp10", };
1085static const char * const cvbs_dbg_test_grp11[] = { "cvbs_dbg_test_grp11", };
1086static const char * const cvbs_dbg_test_grp12[] = { "cvbs_dbg_test_grp12", };
1087static const char * const cvbs_dbg_test_grp13[] = { "cvbs_dbg_test_grp13", };
1088static const char * const cvbs_dbg_test_grp14[] = { "cvbs_dbg_test_grp14", };
1089static const char * const cvbs_dbg_test_grp15[] = { "cvbs_dbg_test_grp15", };
1090static const char * const gn_gnss_power_grp[] = { "gn_gnss_power_grp", };
1091static const char * const gn_gnss_sw_status_grp[] = {
1092 "gn_gnss_sw_status_grp", };
1093static const char * const gn_gnss_eclk_grp[] = { "gn_gnss_eclk_grp", };
1094static const char * const gn_gnss_irq1_grp0[] = { "gn_gnss_irq1_grp0", };
1095static const char * const gn_gnss_irq2_grp0[] = { "gn_gnss_irq2_grp0", };
1096static const char * const gn_gnss_tm_grp[] = { "gn_gnss_tm_grp", };
1097static const char * const gn_gnss_tsync_grp[] = { "gn_gnss_tsync_grp", };
1098static const char * const gn_io_gnsssys_sw_cfg_grp[] = {
1099 "gn_io_gnsssys_sw_cfg_grp", };
1100static const char * const gn_trg_grp0[] = { "gn_trg_grp0", };
1101static const char * const gn_trg_grp1[] = { "gn_trg_grp1", };
1102static const char * const gn_trg_shutdown_grp0[] = { "gn_trg_shutdown_grp0", };
1103static const char * const gn_trg_shutdown_grp1[] = { "gn_trg_shutdown_grp1", };
1104static const char * const gn_trg_shutdown_grp2[] = { "gn_trg_shutdown_grp2", };
1105static const char * const gn_trg_shutdown_grp3[] = { "gn_trg_shutdown_grp3", };
1106static const char * const i2c0_grp[] = { "i2c0_grp", };
1107static const char * const i2c1_grp[] = { "i2c1_grp", };
1108static const char * const jtag_grp0[] = { "jtag_grp0", };
1109static const char * const ks_kas_spi_grp0[] = { "ks_kas_spi_grp0", };
1110static const char * const ld_ldd_grp[] = { "ld_ldd_grp", };
1111static const char * const ld_ldd_16bit_grp[] = { "ld_ldd_16bit_grp", };
1112static const char * const ld_ldd_fck_grp[] = { "ld_ldd_fck_grp", };
1113static const char * const ld_ldd_lck_grp[] = { "ld_ldd_lck_grp", };
1114static const char * const lr_lcdrom_grp[] = { "lr_lcdrom_grp", };
1115static const char * const lvds_analog_grp[] = { "lvds_analog_grp", };
1116static const char * const nd_df_grp[] = { "nd_df_grp", };
1117static const char * const nd_df_nowp_grp[] = { "nd_df_nowp_grp", };
1118static const char * const ps_grp[] = { "ps_grp", };
1119static const char * const pwc_core_on_grp[] = { "pwc_core_on_grp", };
1120static const char * const pwc_ext_on_grp[] = { "pwc_ext_on_grp", };
1121static const char * const pwc_gpio3_clk_grp[] = { "pwc_gpio3_clk_grp", };
1122static const char * const pwc_io_on_grp[] = { "pwc_io_on_grp", };
1123static const char * const pwc_lowbatt_b_grp0[] = { "pwc_lowbatt_b_grp0", };
1124static const char * const pwc_mem_on_grp[] = { "pwc_mem_on_grp", };
1125static const char * const pwc_on_key_b_grp0[] = { "pwc_on_key_b_grp0", };
1126static const char * const pwc_wakeup_src0_grp[] = { "pwc_wakeup_src0_grp", };
1127static const char * const pwc_wakeup_src1_grp[] = { "pwc_wakeup_src1_grp", };
1128static const char * const pwc_wakeup_src2_grp[] = { "pwc_wakeup_src2_grp", };
1129static const char * const pwc_wakeup_src3_grp[] = { "pwc_wakeup_src3_grp", };
1130static const char * const pw_cko0_grp0[] = { "pw_cko0_grp0", };
1131static const char * const pw_cko0_grp1[] = { "pw_cko0_grp1", };
1132static const char * const pw_cko0_grp2[] = { "pw_cko0_grp2", };
1133static const char * const pw_cko1_grp0[] = { "pw_cko1_grp0", };
1134static const char * const pw_cko1_grp1[] = { "pw_cko1_grp1", };
1135static const char * const pw_i2s01_clk_grp0[] = { "pw_i2s01_clk_grp0", };
1136static const char * const pw_i2s01_clk_grp1[] = { "pw_i2s01_clk_grp1", };
1137static const char * const pw_pwm0_grp[] = { "pw_pwm0_grp", };
1138static const char * const pw_pwm1_grp[] = { "pw_pwm1_grp", };
1139static const char * const pw_pwm2_grp0[] = { "pw_pwm2_grp0", };
1140static const char * const pw_pwm2_grp1[] = { "pw_pwm2_grp1", };
1141static const char * const pw_pwm3_grp0[] = { "pw_pwm3_grp0", };
1142static const char * const pw_pwm3_grp1[] = { "pw_pwm3_grp1", };
1143static const char * const pw_pwm_cpu_vol_grp0[] = { "pw_pwm_cpu_vol_grp0", };
1144static const char * const pw_pwm_cpu_vol_grp1[] = { "pw_pwm_cpu_vol_grp1", };
1145static const char * const pw_backlight_grp0[] = { "pw_backlight_grp0", };
1146static const char * const pw_backlight_grp1[] = { "pw_backlight_grp1", };
1147static const char * const rg_eth_mac_grp[] = { "rg_eth_mac_grp", };
1148static const char * const rg_gmac_phy_intr_n_grp[] = {
1149 "rg_gmac_phy_intr_n_grp", };
1150static const char * const rg_rgmii_mac_grp[] = { "rg_rgmii_mac_grp", };
1151static const char * const rg_rgmii_phy_ref_clk_grp0[] = {
1152 "rg_rgmii_phy_ref_clk_grp0", };
1153static const char * const rg_rgmii_phy_ref_clk_grp1[] = {
1154 "rg_rgmii_phy_ref_clk_grp1", };
1155static const char * const sd0_grp[] = { "sd0_grp", };
1156static const char * const sd0_4bit_grp[] = { "sd0_4bit_grp", };
1157static const char * const sd1_grp[] = { "sd1_grp", };
1158static const char * const sd1_4bit_grp0[] = { "sd1_4bit_grp0", };
1159static const char * const sd1_4bit_grp1[] = { "sd1_4bit_grp1", };
1160static const char * const sd2_grp0[] = { "sd2_grp0", };
1161static const char * const sd2_no_cdb_grp0[] = { "sd2_no_cdb_grp0", };
1162static const char * const sd3_grp[] = { "sd3_grp", };
1163static const char * const sd5_grp[] = { "sd5_grp", };
1164static const char * const sd6_grp0[] = { "sd6_grp0", };
1165static const char * const sd6_grp1[] = { "sd6_grp1", };
1166static const char * const sp0_ext_ldo_on_grp[] = { "sp0_ext_ldo_on_grp", };
1167static const char * const sp0_qspi_grp[] = { "sp0_qspi_grp", };
1168static const char * const sp1_spi_grp[] = { "sp1_spi_grp", };
1169static const char * const tpiu_trace_grp[] = { "tpiu_trace_grp", };
1170static const char * const uart0_grp[] = { "uart0_grp", };
1171static const char * const uart0_nopause_grp[] = { "uart0_nopause_grp", };
1172static const char * const uart1_grp[] = { "uart1_grp", };
1173static const char * const uart2_grp[] = { "uart2_grp", };
1174static const char * const uart3_grp0[] = { "uart3_grp0", };
1175static const char * const uart3_grp1[] = { "uart3_grp1", };
1176static const char * const uart3_grp2[] = { "uart3_grp2", };
1177static const char * const uart3_grp3[] = { "uart3_grp3", };
1178static const char * const uart3_nopause_grp0[] = { "uart3_nopause_grp0", };
1179static const char * const uart3_nopause_grp1[] = { "uart3_nopause_grp1", };
1180static const char * const uart4_grp0[] = { "uart4_grp0", };
1181static const char * const uart4_grp1[] = { "uart4_grp1", };
1182static const char * const uart4_grp2[] = { "uart4_grp2", };
1183static const char * const uart4_nopause_grp[] = { "uart4_nopause_grp", };
1184static const char * const usb0_drvvbus_grp[] = { "usb0_drvvbus_grp", };
1185static const char * const usb1_drvvbus_grp[] = { "usb1_drvvbus_grp", };
1186static const char * const visbus_dout_grp[] = { "visbus_dout_grp", };
1187static const char * const vi_vip1_grp[] = { "vi_vip1_grp", };
1188static const char * const vi_vip1_ext_grp[] = { "vi_vip1_ext_grp", };
1189static const char * const vi_vip1_low8bit_grp[] = { "vi_vip1_low8bit_grp", };
1190static const char * const vi_vip1_high8bit_grp[] = { "vi_vip1_high8bit_grp", };
1191
1192static struct atlas7_pad_mux gnss_gpio_grp_pad_mux[] = {
1193 MUX(1, 119, 0, N, N, N, N),
1194 MUX(1, 120, 0, N, N, N, N),
1195 MUX(1, 121, 0, N, N, N, N),
1196 MUX(1, 122, 0, N, N, N, N),
1197 MUX(1, 123, 0, N, N, N, N),
1198 MUX(1, 124, 0, N, N, N, N),
1199 MUX(1, 125, 0, N, N, N, N),
1200 MUX(1, 126, 0, N, N, N, N),
1201 MUX(1, 127, 0, N, N, N, N),
1202 MUX(1, 128, 0, N, N, N, N),
1203 MUX(1, 22, 0, N, N, N, N),
1204 MUX(1, 23, 0, N, N, N, N),
1205 MUX(1, 24, 0, N, N, N, N),
1206 MUX(1, 25, 0, N, N, N, N),
1207 MUX(1, 26, 0, N, N, N, N),
1208 MUX(1, 27, 0, N, N, N, N),
1209 MUX(1, 28, 0, N, N, N, N),
1210 MUX(1, 29, 0, N, N, N, N),
1211 MUX(1, 30, 0, N, N, N, N),
1212};
1213
1214static struct atlas7_grp_mux gnss_gpio_grp_mux = {
1215 .pad_mux_count = ARRAY_SIZE(gnss_gpio_grp_pad_mux),
1216 .pad_mux_list = gnss_gpio_grp_pad_mux,
1217};
1218
1219static struct atlas7_pad_mux lcd_vip_gpio_grp_pad_mux[] = {
1220 MUX(1, 74, 0, N, N, N, N),
1221 MUX(1, 75, 0, N, N, N, N),
1222 MUX(1, 76, 0, N, N, N, N),
1223 MUX(1, 77, 0, N, N, N, N),
1224 MUX(1, 78, 0, N, N, N, N),
1225 MUX(1, 79, 0, N, N, N, N),
1226 MUX(1, 80, 0, N, N, N, N),
1227 MUX(1, 81, 0, N, N, N, N),
1228 MUX(1, 82, 0, N, N, N, N),
1229 MUX(1, 83, 0, N, N, N, N),
1230 MUX(1, 84, 0, N, N, N, N),
1231 MUX(1, 53, 0, N, N, N, N),
1232 MUX(1, 54, 0, N, N, N, N),
1233 MUX(1, 55, 0, N, N, N, N),
1234 MUX(1, 56, 0, N, N, N, N),
1235 MUX(1, 57, 0, N, N, N, N),
1236 MUX(1, 58, 0, N, N, N, N),
1237 MUX(1, 59, 0, N, N, N, N),
1238 MUX(1, 60, 0, N, N, N, N),
1239 MUX(1, 61, 0, N, N, N, N),
1240 MUX(1, 62, 0, N, N, N, N),
1241 MUX(1, 63, 0, N, N, N, N),
1242 MUX(1, 64, 0, N, N, N, N),
1243 MUX(1, 65, 0, N, N, N, N),
1244 MUX(1, 66, 0, N, N, N, N),
1245 MUX(1, 67, 0, N, N, N, N),
1246 MUX(1, 68, 0, N, N, N, N),
1247 MUX(1, 69, 0, N, N, N, N),
1248 MUX(1, 70, 0, N, N, N, N),
1249 MUX(1, 71, 0, N, N, N, N),
1250 MUX(1, 72, 0, N, N, N, N),
1251 MUX(1, 73, 0, N, N, N, N),
1252};
1253
1254static struct atlas7_grp_mux lcd_vip_gpio_grp_mux = {
1255 .pad_mux_count = ARRAY_SIZE(lcd_vip_gpio_grp_pad_mux),
1256 .pad_mux_list = lcd_vip_gpio_grp_pad_mux,
1257};
1258
1259static struct atlas7_pad_mux sdio_i2s_gpio_grp_pad_mux[] = {
1260 MUX(1, 31, 0, N, N, N, N),
1261 MUX(1, 32, 0, N, N, N, N),
1262 MUX(1, 33, 0, N, N, N, N),
1263 MUX(1, 34, 0, N, N, N, N),
1264 MUX(1, 35, 0, N, N, N, N),
1265 MUX(1, 36, 0, N, N, N, N),
1266 MUX(1, 85, 0, N, N, N, N),
1267 MUX(1, 86, 0, N, N, N, N),
1268 MUX(1, 87, 0, N, N, N, N),
1269 MUX(1, 88, 0, N, N, N, N),
1270 MUX(1, 89, 0, N, N, N, N),
1271 MUX(1, 90, 0, N, N, N, N),
1272 MUX(1, 129, 0, N, N, N, N),
1273 MUX(1, 130, 0, N, N, N, N),
1274 MUX(1, 131, 0, N, N, N, N),
1275 MUX(1, 132, 0, N, N, N, N),
1276 MUX(1, 91, 0, N, N, N, N),
1277 MUX(1, 92, 0, N, N, N, N),
1278 MUX(1, 93, 0, N, N, N, N),
1279 MUX(1, 94, 0, N, N, N, N),
1280 MUX(1, 95, 0, N, N, N, N),
1281 MUX(1, 96, 0, N, N, N, N),
1282 MUX(1, 112, 0, N, N, N, N),
1283 MUX(1, 113, 0, N, N, N, N),
1284 MUX(1, 114, 0, N, N, N, N),
1285 MUX(1, 115, 0, N, N, N, N),
1286 MUX(1, 116, 0, N, N, N, N),
1287 MUX(1, 117, 0, N, N, N, N),
1288 MUX(1, 118, 0, N, N, N, N),
1289};
1290
1291static struct atlas7_grp_mux sdio_i2s_gpio_grp_mux = {
1292 .pad_mux_count = ARRAY_SIZE(sdio_i2s_gpio_grp_pad_mux),
1293 .pad_mux_list = sdio_i2s_gpio_grp_pad_mux,
1294};
1295
1296static struct atlas7_pad_mux sp_rgmii_gpio_grp_pad_mux[] = {
1297 MUX(1, 97, 0, N, N, N, N),
1298 MUX(1, 98, 0, N, N, N, N),
1299 MUX(1, 99, 0, N, N, N, N),
1300 MUX(1, 100, 0, N, N, N, N),
1301 MUX(1, 101, 0, N, N, N, N),
1302 MUX(1, 102, 0, N, N, N, N),
1303 MUX(1, 103, 0, N, N, N, N),
1304 MUX(1, 104, 0, N, N, N, N),
1305 MUX(1, 105, 0, N, N, N, N),
1306 MUX(1, 106, 0, N, N, N, N),
1307 MUX(1, 107, 0, N, N, N, N),
1308 MUX(1, 108, 0, N, N, N, N),
1309 MUX(1, 109, 0, N, N, N, N),
1310 MUX(1, 110, 0, N, N, N, N),
1311 MUX(1, 111, 0, N, N, N, N),
1312 MUX(1, 18, 0, N, N, N, N),
1313 MUX(1, 19, 0, N, N, N, N),
1314 MUX(1, 20, 0, N, N, N, N),
1315 MUX(1, 21, 0, N, N, N, N),
1316 MUX(1, 141, 0, N, N, N, N),
1317 MUX(1, 142, 0, N, N, N, N),
1318 MUX(1, 143, 0, N, N, N, N),
1319 MUX(1, 144, 0, N, N, N, N),
1320 MUX(1, 145, 0, N, N, N, N),
1321 MUX(1, 146, 0, N, N, N, N),
1322 MUX(1, 147, 0, N, N, N, N),
1323 MUX(1, 148, 0, N, N, N, N),
1324};
1325
1326static struct atlas7_grp_mux sp_rgmii_gpio_grp_mux = {
1327 .pad_mux_count = ARRAY_SIZE(sp_rgmii_gpio_grp_pad_mux),
1328 .pad_mux_list = sp_rgmii_gpio_grp_pad_mux,
1329};
1330
1331static struct atlas7_pad_mux lvds_gpio_grp_pad_mux[] = {
1332 MUX(1, 157, 0, N, N, N, N),
1333 MUX(1, 158, 0, N, N, N, N),
1334 MUX(1, 155, 0, N, N, N, N),
1335 MUX(1, 156, 0, N, N, N, N),
1336 MUX(1, 153, 0, N, N, N, N),
1337 MUX(1, 154, 0, N, N, N, N),
1338 MUX(1, 151, 0, N, N, N, N),
1339 MUX(1, 152, 0, N, N, N, N),
1340 MUX(1, 149, 0, N, N, N, N),
1341 MUX(1, 150, 0, N, N, N, N),
1342};
1343
1344static struct atlas7_grp_mux lvds_gpio_grp_mux = {
1345 .pad_mux_count = ARRAY_SIZE(lvds_gpio_grp_pad_mux),
1346 .pad_mux_list = lvds_gpio_grp_pad_mux,
1347};
1348
1349static struct atlas7_pad_mux uart_nand_gpio_grp_pad_mux[] = {
1350 MUX(1, 44, 0, N, N, N, N),
1351 MUX(1, 43, 0, N, N, N, N),
1352 MUX(1, 42, 0, N, N, N, N),
1353 MUX(1, 41, 0, N, N, N, N),
1354 MUX(1, 40, 0, N, N, N, N),
1355 MUX(1, 39, 0, N, N, N, N),
1356 MUX(1, 38, 0, N, N, N, N),
1357 MUX(1, 37, 0, N, N, N, N),
1358 MUX(1, 46, 0, N, N, N, N),
1359 MUX(1, 47, 0, N, N, N, N),
1360 MUX(1, 48, 0, N, N, N, N),
1361 MUX(1, 49, 0, N, N, N, N),
1362 MUX(1, 50, 0, N, N, N, N),
1363 MUX(1, 52, 0, N, N, N, N),
1364 MUX(1, 51, 0, N, N, N, N),
1365 MUX(1, 45, 0, N, N, N, N),
1366 MUX(1, 133, 0, N, N, N, N),
1367 MUX(1, 134, 0, N, N, N, N),
1368 MUX(1, 135, 0, N, N, N, N),
1369 MUX(1, 136, 0, N, N, N, N),
1370 MUX(1, 137, 0, N, N, N, N),
1371 MUX(1, 138, 0, N, N, N, N),
1372 MUX(1, 139, 0, N, N, N, N),
1373 MUX(1, 140, 0, N, N, N, N),
1374};
1375
1376static struct atlas7_grp_mux uart_nand_gpio_grp_mux = {
1377 .pad_mux_count = ARRAY_SIZE(uart_nand_gpio_grp_pad_mux),
1378 .pad_mux_list = uart_nand_gpio_grp_pad_mux,
1379};
1380
1381static struct atlas7_pad_mux rtc_gpio_grp_pad_mux[] = {
1382 MUX(0, 0, 0, N, N, N, N),
1383 MUX(0, 1, 0, N, N, N, N),
1384 MUX(0, 2, 0, N, N, N, N),
1385 MUX(0, 3, 0, N, N, N, N),
1386 MUX(0, 4, 0, N, N, N, N),
1387 MUX(0, 10, 0, N, N, N, N),
1388 MUX(0, 11, 0, N, N, N, N),
1389 MUX(0, 12, 0, N, N, N, N),
1390 MUX(0, 13, 0, N, N, N, N),
1391 MUX(0, 14, 0, N, N, N, N),
1392 MUX(0, 15, 0, N, N, N, N),
1393 MUX(0, 16, 0, N, N, N, N),
1394 MUX(0, 17, 0, N, N, N, N),
1395};
1396
1397static struct atlas7_grp_mux rtc_gpio_grp_mux = {
1398 .pad_mux_count = ARRAY_SIZE(rtc_gpio_grp_pad_mux),
1399 .pad_mux_list = rtc_gpio_grp_pad_mux,
1400};
1401
1402static struct atlas7_pad_mux audio_ac97_grp_pad_mux[] = {
1403 MUX(1, 113, 2, N, N, N, N),
1404 MUX(1, 118, 2, N, N, N, N),
1405 MUX(1, 115, 2, N, N, N, N),
1406 MUX(1, 114, 2, N, N, N, N),
1407};
1408
1409static struct atlas7_grp_mux audio_ac97_grp_mux = {
1410 .pad_mux_count = ARRAY_SIZE(audio_ac97_grp_pad_mux),
1411 .pad_mux_list = audio_ac97_grp_pad_mux,
1412};
1413
1414static struct atlas7_pad_mux audio_func_dbg_grp_pad_mux[] = {
1415 MUX(1, 141, 4, N, N, N, N),
1416 MUX(1, 144, 4, N, N, N, N),
1417 MUX(1, 44, 6, N, N, N, N),
1418 MUX(1, 43, 6, N, N, N, N),
1419 MUX(1, 42, 6, N, N, N, N),
1420 MUX(1, 41, 6, N, N, N, N),
1421 MUX(1, 40, 6, N, N, N, N),
1422 MUX(1, 39, 6, N, N, N, N),
1423 MUX(1, 38, 6, N, N, N, N),
1424 MUX(1, 37, 6, N, N, N, N),
1425 MUX(1, 74, 6, N, N, N, N),
1426 MUX(1, 75, 6, N, N, N, N),
1427 MUX(1, 76, 6, N, N, N, N),
1428 MUX(1, 77, 6, N, N, N, N),
1429 MUX(1, 78, 6, N, N, N, N),
1430 MUX(1, 79, 6, N, N, N, N),
1431 MUX(1, 81, 6, N, N, N, N),
1432 MUX(1, 113, 6, N, N, N, N),
1433 MUX(1, 114, 6, N, N, N, N),
1434 MUX(1, 118, 6, N, N, N, N),
1435 MUX(1, 115, 6, N, N, N, N),
1436 MUX(1, 49, 6, N, N, N, N),
1437 MUX(1, 50, 6, N, N, N, N),
1438 MUX(1, 142, 4, N, N, N, N),
1439 MUX(1, 143, 4, N, N, N, N),
1440 MUX(1, 80, 6, N, N, N, N),
1441};
1442
1443static struct atlas7_grp_mux audio_func_dbg_grp_mux = {
1444 .pad_mux_count = ARRAY_SIZE(audio_func_dbg_grp_pad_mux),
1445 .pad_mux_list = audio_func_dbg_grp_pad_mux,
1446};
1447
1448static struct atlas7_pad_mux audio_i2s_grp_pad_mux[] = {
1449 MUX(1, 118, 1, N, N, N, N),
1450 MUX(1, 115, 1, N, N, N, N),
1451 MUX(1, 116, 1, N, N, N, N),
1452 MUX(1, 117, 1, N, N, N, N),
1453 MUX(1, 112, 1, N, N, N, N),
1454 MUX(1, 113, 1, N, N, N, N),
1455 MUX(1, 114, 1, N, N, N, N),
1456};
1457
1458static struct atlas7_grp_mux audio_i2s_grp_mux = {
1459 .pad_mux_count = ARRAY_SIZE(audio_i2s_grp_pad_mux),
1460 .pad_mux_list = audio_i2s_grp_pad_mux,
1461};
1462
1463static struct atlas7_pad_mux audio_i2s_2ch_grp_pad_mux[] = {
1464 MUX(1, 118, 1, N, N, N, N),
1465 MUX(1, 115, 1, N, N, N, N),
1466 MUX(1, 112, 1, N, N, N, N),
1467 MUX(1, 113, 1, N, N, N, N),
1468 MUX(1, 114, 1, N, N, N, N),
1469};
1470
1471static struct atlas7_grp_mux audio_i2s_2ch_grp_mux = {
1472 .pad_mux_count = ARRAY_SIZE(audio_i2s_2ch_grp_pad_mux),
1473 .pad_mux_list = audio_i2s_2ch_grp_pad_mux,
1474};
1475
1476static struct atlas7_pad_mux audio_i2s_extclk_grp_pad_mux[] = {
1477 MUX(1, 112, 2, N, N, N, N),
1478};
1479
1480static struct atlas7_grp_mux audio_i2s_extclk_grp_mux = {
1481 .pad_mux_count = ARRAY_SIZE(audio_i2s_extclk_grp_pad_mux),
1482 .pad_mux_list = audio_i2s_extclk_grp_pad_mux,
1483};
1484
1485static struct atlas7_pad_mux audio_uart0_grp_pad_mux[] = {
1486 MUX(1, 143, 1, N, N, N, N),
1487 MUX(1, 142, 1, N, N, N, N),
1488 MUX(1, 141, 1, N, N, N, N),
1489 MUX(1, 144, 1, N, N, N, N),
1490};
1491
1492static struct atlas7_grp_mux audio_uart0_grp_mux = {
1493 .pad_mux_count = ARRAY_SIZE(audio_uart0_grp_pad_mux),
1494 .pad_mux_list = audio_uart0_grp_pad_mux,
1495};
1496
1497static struct atlas7_pad_mux audio_uart1_grp_pad_mux[] = {
1498 MUX(1, 147, 1, N, N, N, N),
1499 MUX(1, 146, 1, N, N, N, N),
1500 MUX(1, 145, 1, N, N, N, N),
1501 MUX(1, 148, 1, N, N, N, N),
1502};
1503
1504static struct atlas7_grp_mux audio_uart1_grp_mux = {
1505 .pad_mux_count = ARRAY_SIZE(audio_uart1_grp_pad_mux),
1506 .pad_mux_list = audio_uart1_grp_pad_mux,
1507};
1508
1509static struct atlas7_pad_mux audio_uart2_grp0_pad_mux[] = {
1510 MUX(1, 20, 2, 0xa00, 24, 0xa80, 24),
1511 MUX(1, 21, 2, 0xa00, 25, 0xa80, 25),
1512 MUX(1, 19, 2, 0xa00, 23, 0xa80, 23),
1513 MUX(1, 18, 2, 0xa00, 22, 0xa80, 22),
1514};
1515
1516static struct atlas7_grp_mux audio_uart2_grp0_mux = {
1517 .pad_mux_count = ARRAY_SIZE(audio_uart2_grp0_pad_mux),
1518 .pad_mux_list = audio_uart2_grp0_pad_mux,
1519};
1520
1521static struct atlas7_pad_mux audio_uart2_grp1_pad_mux[] = {
1522 MUX(1, 109, 2, 0xa00, 24, 0xa80, 24),
1523 MUX(1, 110, 2, 0xa00, 25, 0xa80, 25),
1524 MUX(1, 101, 2, 0xa00, 23, 0xa80, 23),
1525 MUX(1, 111, 2, 0xa00, 22, 0xa80, 22),
1526};
1527
1528static struct atlas7_grp_mux audio_uart2_grp1_mux = {
1529 .pad_mux_count = ARRAY_SIZE(audio_uart2_grp1_pad_mux),
1530 .pad_mux_list = audio_uart2_grp1_pad_mux,
1531};
1532
1533static struct atlas7_pad_mux c_can_trnsvr_grp_pad_mux[] = {
1534 MUX(0, 1, 2, N, N, N, N),
1535};
1536
1537static struct atlas7_grp_mux c_can_trnsvr_grp_mux = {
1538 .pad_mux_count = ARRAY_SIZE(c_can_trnsvr_grp_pad_mux),
1539 .pad_mux_list = c_can_trnsvr_grp_pad_mux,
1540};
1541
1542static struct atlas7_pad_mux c0_can_grp0_pad_mux[] = {
1543 MUX(0, 11, 1, 0xa08, 9, 0xa88, 9),
1544 MUX(0, 10, 1, N, N, N, N),
1545};
1546
1547static struct atlas7_grp_mux c0_can_grp0_mux = {
1548 .pad_mux_count = ARRAY_SIZE(c0_can_grp0_pad_mux),
1549 .pad_mux_list = c0_can_grp0_pad_mux,
1550};
1551
1552static struct atlas7_pad_mux c0_can_grp1_pad_mux[] = {
1553 MUX(0, 2, 5, 0xa08, 9, 0xa88, 9),
1554 MUX(0, 3, 5, N, N, N, N),
1555};
1556
1557static struct atlas7_grp_mux c0_can_grp1_mux = {
1558 .pad_mux_count = ARRAY_SIZE(c0_can_grp1_pad_mux),
1559 .pad_mux_list = c0_can_grp1_pad_mux,
1560};
1561
1562static struct atlas7_pad_mux c1_can_grp0_pad_mux[] = {
1563 MUX(1, 138, 2, 0xa00, 4, 0xa80, 4),
1564 MUX(1, 137, 2, N, N, N, N),
1565};
1566
1567static struct atlas7_grp_mux c1_can_grp0_mux = {
1568 .pad_mux_count = ARRAY_SIZE(c1_can_grp0_pad_mux),
1569 .pad_mux_list = c1_can_grp0_pad_mux,
1570};
1571
1572static struct atlas7_pad_mux c1_can_grp1_pad_mux[] = {
1573 MUX(1, 147, 2, 0xa00, 4, 0xa80, 4),
1574 MUX(1, 146, 2, N, N, N, N),
1575};
1576
1577static struct atlas7_grp_mux c1_can_grp1_mux = {
1578 .pad_mux_count = ARRAY_SIZE(c1_can_grp1_pad_mux),
1579 .pad_mux_list = c1_can_grp1_pad_mux,
1580};
1581
1582static struct atlas7_pad_mux c1_can_grp2_pad_mux[] = {
1583 MUX(0, 2, 2, 0xa00, 4, 0xa80, 4),
1584 MUX(0, 3, 2, N, N, N, N),
1585};
1586
1587static struct atlas7_grp_mux c1_can_grp2_mux = {
1588 .pad_mux_count = ARRAY_SIZE(c1_can_grp2_pad_mux),
1589 .pad_mux_list = c1_can_grp2_pad_mux,
1590};
1591
1592static struct atlas7_pad_mux ca_audio_lpc_grp_pad_mux[] = {
1593 MUX(1, 62, 4, N, N, N, N),
1594 MUX(1, 63, 4, N, N, N, N),
1595 MUX(1, 64, 4, N, N, N, N),
1596 MUX(1, 65, 4, N, N, N, N),
1597 MUX(1, 66, 4, N, N, N, N),
1598 MUX(1, 67, 4, N, N, N, N),
1599 MUX(1, 68, 4, N, N, N, N),
1600 MUX(1, 69, 4, N, N, N, N),
1601 MUX(1, 70, 4, N, N, N, N),
1602 MUX(1, 71, 4, N, N, N, N),
1603};
1604
1605static struct atlas7_grp_mux ca_audio_lpc_grp_mux = {
1606 .pad_mux_count = ARRAY_SIZE(ca_audio_lpc_grp_pad_mux),
1607 .pad_mux_list = ca_audio_lpc_grp_pad_mux,
1608};
1609
1610static struct atlas7_pad_mux ca_bt_lpc_grp_pad_mux[] = {
1611 MUX(1, 85, 5, N, N, N, N),
1612 MUX(1, 86, 5, N, N, N, N),
1613 MUX(1, 87, 5, N, N, N, N),
1614 MUX(1, 88, 5, N, N, N, N),
1615 MUX(1, 89, 5, N, N, N, N),
1616 MUX(1, 90, 5, N, N, N, N),
1617};
1618
1619static struct atlas7_grp_mux ca_bt_lpc_grp_mux = {
1620 .pad_mux_count = ARRAY_SIZE(ca_bt_lpc_grp_pad_mux),
1621 .pad_mux_list = ca_bt_lpc_grp_pad_mux,
1622};
1623
1624static struct atlas7_pad_mux ca_coex_grp_pad_mux[] = {
1625 MUX(1, 129, 1, N, N, N, N),
1626 MUX(1, 130, 1, N, N, N, N),
1627 MUX(1, 131, 1, N, N, N, N),
1628 MUX(1, 132, 1, N, N, N, N),
1629};
1630
1631static struct atlas7_grp_mux ca_coex_grp_mux = {
1632 .pad_mux_count = ARRAY_SIZE(ca_coex_grp_pad_mux),
1633 .pad_mux_list = ca_coex_grp_pad_mux,
1634};
1635
1636static struct atlas7_pad_mux ca_curator_lpc_grp_pad_mux[] = {
1637 MUX(1, 57, 4, N, N, N, N),
1638 MUX(1, 58, 4, N, N, N, N),
1639 MUX(1, 59, 4, N, N, N, N),
1640 MUX(1, 60, 4, N, N, N, N),
1641};
1642
1643static struct atlas7_grp_mux ca_curator_lpc_grp_mux = {
1644 .pad_mux_count = ARRAY_SIZE(ca_curator_lpc_grp_pad_mux),
1645 .pad_mux_list = ca_curator_lpc_grp_pad_mux,
1646};
1647
1648static struct atlas7_pad_mux ca_pcm_debug_grp_pad_mux[] = {
1649 MUX(1, 91, 5, N, N, N, N),
1650 MUX(1, 93, 5, N, N, N, N),
1651 MUX(1, 94, 5, N, N, N, N),
1652 MUX(1, 92, 5, N, N, N, N),
1653};
1654
1655static struct atlas7_grp_mux ca_pcm_debug_grp_mux = {
1656 .pad_mux_count = ARRAY_SIZE(ca_pcm_debug_grp_pad_mux),
1657 .pad_mux_list = ca_pcm_debug_grp_pad_mux,
1658};
1659
1660static struct atlas7_pad_mux ca_pio_grp_pad_mux[] = {
1661 MUX(1, 121, 2, N, N, N, N),
1662 MUX(1, 122, 2, N, N, N, N),
1663 MUX(1, 125, 6, N, N, N, N),
1664 MUX(1, 126, 6, N, N, N, N),
1665 MUX(1, 38, 5, N, N, N, N),
1666 MUX(1, 37, 5, N, N, N, N),
1667 MUX(1, 47, 5, N, N, N, N),
1668 MUX(1, 49, 5, N, N, N, N),
1669 MUX(1, 50, 5, N, N, N, N),
1670 MUX(1, 54, 4, N, N, N, N),
1671 MUX(1, 55, 4, N, N, N, N),
1672 MUX(1, 56, 4, N, N, N, N),
1673};
1674
1675static struct atlas7_grp_mux ca_pio_grp_mux = {
1676 .pad_mux_count = ARRAY_SIZE(ca_pio_grp_pad_mux),
1677 .pad_mux_list = ca_pio_grp_pad_mux,
1678};
1679
1680static struct atlas7_pad_mux ca_sdio_debug_grp_pad_mux[] = {
1681 MUX(1, 40, 5, N, N, N, N),
1682 MUX(1, 39, 5, N, N, N, N),
1683 MUX(1, 44, 5, N, N, N, N),
1684 MUX(1, 43, 5, N, N, N, N),
1685 MUX(1, 42, 5, N, N, N, N),
1686 MUX(1, 41, 5, N, N, N, N),
1687};
1688
1689static struct atlas7_grp_mux ca_sdio_debug_grp_mux = {
1690 .pad_mux_count = ARRAY_SIZE(ca_sdio_debug_grp_pad_mux),
1691 .pad_mux_list = ca_sdio_debug_grp_pad_mux,
1692};
1693
1694static struct atlas7_pad_mux ca_spi_grp_pad_mux[] = {
1695 MUX(1, 82, 5, N, N, N, N),
1696 MUX(1, 79, 5, 0xa08, 6, 0xa88, 6),
1697 MUX(1, 80, 5, N, N, N, N),
1698 MUX(1, 81, 5, N, N, N, N),
1699};
1700
1701static struct atlas7_grp_mux ca_spi_grp_mux = {
1702 .pad_mux_count = ARRAY_SIZE(ca_spi_grp_pad_mux),
1703 .pad_mux_list = ca_spi_grp_pad_mux,
1704};
1705
1706static struct atlas7_pad_mux ca_trb_grp_pad_mux[] = {
1707 MUX(1, 91, 4, N, N, N, N),
1708 MUX(1, 93, 4, N, N, N, N),
1709 MUX(1, 94, 4, N, N, N, N),
1710 MUX(1, 95, 4, N, N, N, N),
1711 MUX(1, 96, 4, N, N, N, N),
1712 MUX(1, 78, 5, N, N, N, N),
1713 MUX(1, 74, 5, N, N, N, N),
1714 MUX(1, 75, 5, N, N, N, N),
1715 MUX(1, 76, 5, N, N, N, N),
1716 MUX(1, 77, 5, N, N, N, N),
1717};
1718
1719static struct atlas7_grp_mux ca_trb_grp_mux = {
1720 .pad_mux_count = ARRAY_SIZE(ca_trb_grp_pad_mux),
1721 .pad_mux_list = ca_trb_grp_pad_mux,
1722};
1723
1724static struct atlas7_pad_mux ca_uart_debug_grp_pad_mux[] = {
1725 MUX(1, 136, 3, N, N, N, N),
1726 MUX(1, 135, 3, N, N, N, N),
1727 MUX(1, 134, 3, N, N, N, N),
1728 MUX(1, 133, 3, N, N, N, N),
1729};
1730
1731static struct atlas7_grp_mux ca_uart_debug_grp_mux = {
1732 .pad_mux_count = ARRAY_SIZE(ca_uart_debug_grp_pad_mux),
1733 .pad_mux_list = ca_uart_debug_grp_pad_mux,
1734};
1735
1736static struct atlas7_pad_mux clkc_grp0_pad_mux[] = {
1737 MUX(1, 30, 2, 0xa08, 14, 0xa88, 14),
1738 MUX(1, 47, 6, N, N, N, N),
1739};
1740
1741static struct atlas7_grp_mux clkc_grp0_mux = {
1742 .pad_mux_count = ARRAY_SIZE(clkc_grp0_pad_mux),
1743 .pad_mux_list = clkc_grp0_pad_mux,
1744};
1745
1746static struct atlas7_pad_mux clkc_grp1_pad_mux[] = {
1747 MUX(1, 78, 3, 0xa08, 14, 0xa88, 14),
1748 MUX(1, 54, 5, N, N, N, N),
1749};
1750
1751static struct atlas7_grp_mux clkc_grp1_mux = {
1752 .pad_mux_count = ARRAY_SIZE(clkc_grp1_pad_mux),
1753 .pad_mux_list = clkc_grp1_pad_mux,
1754};
1755
1756static struct atlas7_pad_mux gn_gnss_i2c_grp_pad_mux[] = {
1757 MUX(1, 128, 2, N, N, N, N),
1758 MUX(1, 127, 2, N, N, N, N),
1759};
1760
1761static struct atlas7_grp_mux gn_gnss_i2c_grp_mux = {
1762 .pad_mux_count = ARRAY_SIZE(gn_gnss_i2c_grp_pad_mux),
1763 .pad_mux_list = gn_gnss_i2c_grp_pad_mux,
1764};
1765
1766static struct atlas7_pad_mux gn_gnss_uart_nopause_grp_pad_mux[] = {
1767 MUX(1, 134, 4, N, N, N, N),
1768 MUX(1, 133, 4, N, N, N, N),
1769};
1770
1771static struct atlas7_grp_mux gn_gnss_uart_nopause_grp_mux = {
1772 .pad_mux_count = ARRAY_SIZE(gn_gnss_uart_nopause_grp_pad_mux),
1773 .pad_mux_list = gn_gnss_uart_nopause_grp_pad_mux,
1774};
1775
1776static struct atlas7_pad_mux gn_gnss_uart_grp_pad_mux[] = {
1777 MUX(1, 134, 4, N, N, N, N),
1778 MUX(1, 133, 4, N, N, N, N),
1779 MUX(1, 136, 4, N, N, N, N),
1780 MUX(1, 135, 4, N, N, N, N),
1781};
1782
1783static struct atlas7_grp_mux gn_gnss_uart_grp_mux = {
1784 .pad_mux_count = ARRAY_SIZE(gn_gnss_uart_grp_pad_mux),
1785 .pad_mux_list = gn_gnss_uart_grp_pad_mux,
1786};
1787
1788static struct atlas7_pad_mux gn_trg_spi_grp0_pad_mux[] = {
1789 MUX(1, 22, 1, N, N, N, N),
1790 MUX(1, 25, 1, N, N, N, N),
1791 MUX(1, 23, 1, 0xa00, 10, 0xa80, 10),
1792 MUX(1, 24, 1, N, N, N, N),
1793};
1794
1795static struct atlas7_grp_mux gn_trg_spi_grp0_mux = {
1796 .pad_mux_count = ARRAY_SIZE(gn_trg_spi_grp0_pad_mux),
1797 .pad_mux_list = gn_trg_spi_grp0_pad_mux,
1798};
1799
1800static struct atlas7_pad_mux gn_trg_spi_grp1_pad_mux[] = {
1801 MUX(1, 82, 3, N, N, N, N),
1802 MUX(1, 79, 3, N, N, N, N),
1803 MUX(1, 80, 3, 0xa00, 10, 0xa80, 10),
1804 MUX(1, 81, 3, N, N, N, N),
1805};
1806
1807static struct atlas7_grp_mux gn_trg_spi_grp1_mux = {
1808 .pad_mux_count = ARRAY_SIZE(gn_trg_spi_grp1_pad_mux),
1809 .pad_mux_list = gn_trg_spi_grp1_pad_mux,
1810};
1811
1812static struct atlas7_pad_mux cvbs_dbg_grp_pad_mux[] = {
1813 MUX(1, 54, 3, N, N, N, N),
1814 MUX(1, 53, 3, N, N, N, N),
1815 MUX(1, 82, 7, N, N, N, N),
1816 MUX(1, 74, 7, N, N, N, N),
1817 MUX(1, 75, 7, N, N, N, N),
1818 MUX(1, 76, 7, N, N, N, N),
1819 MUX(1, 77, 7, N, N, N, N),
1820 MUX(1, 78, 7, N, N, N, N),
1821 MUX(1, 79, 7, N, N, N, N),
1822 MUX(1, 80, 7, N, N, N, N),
1823 MUX(1, 81, 7, N, N, N, N),
1824 MUX(1, 83, 7, N, N, N, N),
1825 MUX(1, 84, 7, N, N, N, N),
1826 MUX(1, 73, 3, N, N, N, N),
1827 MUX(1, 55, 3, N, N, N, N),
1828 MUX(1, 56, 3, N, N, N, N),
1829};
1830
1831static struct atlas7_grp_mux cvbs_dbg_grp_mux = {
1832 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_grp_pad_mux),
1833 .pad_mux_list = cvbs_dbg_grp_pad_mux,
1834};
1835
1836static struct atlas7_pad_mux cvbs_dbg_test_grp0_pad_mux[] = {
1837 MUX(1, 57, 3, N, N, N, N),
1838};
1839
1840static struct atlas7_grp_mux cvbs_dbg_test_grp0_mux = {
1841 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp0_pad_mux),
1842 .pad_mux_list = cvbs_dbg_test_grp0_pad_mux,
1843};
1844
1845static struct atlas7_pad_mux cvbs_dbg_test_grp1_pad_mux[] = {
1846 MUX(1, 58, 3, N, N, N, N),
1847};
1848
1849static struct atlas7_grp_mux cvbs_dbg_test_grp1_mux = {
1850 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp1_pad_mux),
1851 .pad_mux_list = cvbs_dbg_test_grp1_pad_mux,
1852};
1853
1854static struct atlas7_pad_mux cvbs_dbg_test_grp2_pad_mux[] = {
1855 MUX(1, 59, 3, N, N, N, N),
1856};
1857
1858static struct atlas7_grp_mux cvbs_dbg_test_grp2_mux = {
1859 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp2_pad_mux),
1860 .pad_mux_list = cvbs_dbg_test_grp2_pad_mux,
1861};
1862
1863static struct atlas7_pad_mux cvbs_dbg_test_grp3_pad_mux[] = {
1864 MUX(1, 60, 3, N, N, N, N),
1865};
1866
1867static struct atlas7_grp_mux cvbs_dbg_test_grp3_mux = {
1868 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp3_pad_mux),
1869 .pad_mux_list = cvbs_dbg_test_grp3_pad_mux,
1870};
1871
1872static struct atlas7_pad_mux cvbs_dbg_test_grp4_pad_mux[] = {
1873 MUX(1, 61, 3, N, N, N, N),
1874};
1875
1876static struct atlas7_grp_mux cvbs_dbg_test_grp4_mux = {
1877 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp4_pad_mux),
1878 .pad_mux_list = cvbs_dbg_test_grp4_pad_mux,
1879};
1880
1881static struct atlas7_pad_mux cvbs_dbg_test_grp5_pad_mux[] = {
1882 MUX(1, 62, 3, N, N, N, N),
1883};
1884
1885static struct atlas7_grp_mux cvbs_dbg_test_grp5_mux = {
1886 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp5_pad_mux),
1887 .pad_mux_list = cvbs_dbg_test_grp5_pad_mux,
1888};
1889
1890static struct atlas7_pad_mux cvbs_dbg_test_grp6_pad_mux[] = {
1891 MUX(1, 63, 3, N, N, N, N),
1892};
1893
1894static struct atlas7_grp_mux cvbs_dbg_test_grp6_mux = {
1895 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp6_pad_mux),
1896 .pad_mux_list = cvbs_dbg_test_grp6_pad_mux,
1897};
1898
1899static struct atlas7_pad_mux cvbs_dbg_test_grp7_pad_mux[] = {
1900 MUX(1, 64, 3, N, N, N, N),
1901};
1902
1903static struct atlas7_grp_mux cvbs_dbg_test_grp7_mux = {
1904 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp7_pad_mux),
1905 .pad_mux_list = cvbs_dbg_test_grp7_pad_mux,
1906};
1907
1908static struct atlas7_pad_mux cvbs_dbg_test_grp8_pad_mux[] = {
1909 MUX(1, 65, 3, N, N, N, N),
1910};
1911
1912static struct atlas7_grp_mux cvbs_dbg_test_grp8_mux = {
1913 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp8_pad_mux),
1914 .pad_mux_list = cvbs_dbg_test_grp8_pad_mux,
1915};
1916
1917static struct atlas7_pad_mux cvbs_dbg_test_grp9_pad_mux[] = {
1918 MUX(1, 66, 3, N, N, N, N),
1919};
1920
1921static struct atlas7_grp_mux cvbs_dbg_test_grp9_mux = {
1922 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp9_pad_mux),
1923 .pad_mux_list = cvbs_dbg_test_grp9_pad_mux,
1924};
1925
1926static struct atlas7_pad_mux cvbs_dbg_test_grp10_pad_mux[] = {
1927 MUX(1, 67, 3, N, N, N, N),
1928};
1929
1930static struct atlas7_grp_mux cvbs_dbg_test_grp10_mux = {
1931 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp10_pad_mux),
1932 .pad_mux_list = cvbs_dbg_test_grp10_pad_mux,
1933};
1934
1935static struct atlas7_pad_mux cvbs_dbg_test_grp11_pad_mux[] = {
1936 MUX(1, 68, 3, N, N, N, N),
1937};
1938
1939static struct atlas7_grp_mux cvbs_dbg_test_grp11_mux = {
1940 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp11_pad_mux),
1941 .pad_mux_list = cvbs_dbg_test_grp11_pad_mux,
1942};
1943
1944static struct atlas7_pad_mux cvbs_dbg_test_grp12_pad_mux[] = {
1945 MUX(1, 69, 3, N, N, N, N),
1946};
1947
1948static struct atlas7_grp_mux cvbs_dbg_test_grp12_mux = {
1949 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp12_pad_mux),
1950 .pad_mux_list = cvbs_dbg_test_grp12_pad_mux,
1951};
1952
1953static struct atlas7_pad_mux cvbs_dbg_test_grp13_pad_mux[] = {
1954 MUX(1, 70, 3, N, N, N, N),
1955};
1956
1957static struct atlas7_grp_mux cvbs_dbg_test_grp13_mux = {
1958 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp13_pad_mux),
1959 .pad_mux_list = cvbs_dbg_test_grp13_pad_mux,
1960};
1961
1962static struct atlas7_pad_mux cvbs_dbg_test_grp14_pad_mux[] = {
1963 MUX(1, 71, 3, N, N, N, N),
1964};
1965
1966static struct atlas7_grp_mux cvbs_dbg_test_grp14_mux = {
1967 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp14_pad_mux),
1968 .pad_mux_list = cvbs_dbg_test_grp14_pad_mux,
1969};
1970
1971static struct atlas7_pad_mux cvbs_dbg_test_grp15_pad_mux[] = {
1972 MUX(1, 72, 3, N, N, N, N),
1973};
1974
1975static struct atlas7_grp_mux cvbs_dbg_test_grp15_mux = {
1976 .pad_mux_count = ARRAY_SIZE(cvbs_dbg_test_grp15_pad_mux),
1977 .pad_mux_list = cvbs_dbg_test_grp15_pad_mux,
1978};
1979
1980static struct atlas7_pad_mux gn_gnss_power_grp_pad_mux[] = {
1981 MUX(1, 123, 7, N, N, N, N),
1982 MUX(1, 124, 7, N, N, N, N),
1983 MUX(1, 121, 7, N, N, N, N),
1984 MUX(1, 122, 7, N, N, N, N),
1985 MUX(1, 125, 7, N, N, N, N),
1986 MUX(1, 120, 7, N, N, N, N),
1987};
1988
1989static struct atlas7_grp_mux gn_gnss_power_grp_mux = {
1990 .pad_mux_count = ARRAY_SIZE(gn_gnss_power_grp_pad_mux),
1991 .pad_mux_list = gn_gnss_power_grp_pad_mux,
1992};
1993
1994static struct atlas7_pad_mux gn_gnss_sw_status_grp_pad_mux[] = {
1995 MUX(1, 57, 7, N, N, N, N),
1996 MUX(1, 58, 7, N, N, N, N),
1997 MUX(1, 59, 7, N, N, N, N),
1998 MUX(1, 60, 7, N, N, N, N),
1999 MUX(1, 61, 7, N, N, N, N),
2000 MUX(1, 62, 7, N, N, N, N),
2001 MUX(1, 63, 7, N, N, N, N),
2002 MUX(1, 64, 7, N, N, N, N),
2003 MUX(1, 65, 7, N, N, N, N),
2004 MUX(1, 66, 7, N, N, N, N),
2005 MUX(1, 67, 7, N, N, N, N),
2006 MUX(1, 68, 7, N, N, N, N),
2007 MUX(1, 69, 7, N, N, N, N),
2008 MUX(1, 70, 7, N, N, N, N),
2009 MUX(1, 71, 7, N, N, N, N),
2010 MUX(1, 72, 7, N, N, N, N),
2011 MUX(1, 53, 7, N, N, N, N),
2012 MUX(1, 55, 7, N, N, N, N),
2013 MUX(1, 56, 7, 0xa08, 12, 0xa88, 12),
2014 MUX(1, 54, 7, N, N, N, N),
2015};
2016
2017static struct atlas7_grp_mux gn_gnss_sw_status_grp_mux = {
2018 .pad_mux_count = ARRAY_SIZE(gn_gnss_sw_status_grp_pad_mux),
2019 .pad_mux_list = gn_gnss_sw_status_grp_pad_mux,
2020};
2021
2022static struct atlas7_pad_mux gn_gnss_eclk_grp_pad_mux[] = {
2023 MUX(1, 113, 4, N, N, N, N),
2024};
2025
2026static struct atlas7_grp_mux gn_gnss_eclk_grp_mux = {
2027 .pad_mux_count = ARRAY_SIZE(gn_gnss_eclk_grp_pad_mux),
2028 .pad_mux_list = gn_gnss_eclk_grp_pad_mux,
2029};
2030
2031static struct atlas7_pad_mux gn_gnss_irq1_grp0_pad_mux[] = {
2032 MUX(1, 112, 4, 0xa08, 10, 0xa88, 10),
2033};
2034
2035static struct atlas7_grp_mux gn_gnss_irq1_grp0_mux = {
2036 .pad_mux_count = ARRAY_SIZE(gn_gnss_irq1_grp0_pad_mux),
2037 .pad_mux_list = gn_gnss_irq1_grp0_pad_mux,
2038};
2039
2040static struct atlas7_pad_mux gn_gnss_irq2_grp0_pad_mux[] = {
2041 MUX(1, 118, 4, 0xa08, 11, 0xa88, 11),
2042};
2043
2044static struct atlas7_grp_mux gn_gnss_irq2_grp0_mux = {
2045 .pad_mux_count = ARRAY_SIZE(gn_gnss_irq2_grp0_pad_mux),
2046 .pad_mux_list = gn_gnss_irq2_grp0_pad_mux,
2047};
2048
2049static struct atlas7_pad_mux gn_gnss_tm_grp_pad_mux[] = {
2050 MUX(1, 115, 4, N, N, N, N),
2051};
2052
2053static struct atlas7_grp_mux gn_gnss_tm_grp_mux = {
2054 .pad_mux_count = ARRAY_SIZE(gn_gnss_tm_grp_pad_mux),
2055 .pad_mux_list = gn_gnss_tm_grp_pad_mux,
2056};
2057
2058static struct atlas7_pad_mux gn_gnss_tsync_grp_pad_mux[] = {
2059 MUX(1, 114, 4, N, N, N, N),
2060};
2061
2062static struct atlas7_grp_mux gn_gnss_tsync_grp_mux = {
2063 .pad_mux_count = ARRAY_SIZE(gn_gnss_tsync_grp_pad_mux),
2064 .pad_mux_list = gn_gnss_tsync_grp_pad_mux,
2065};
2066
2067static struct atlas7_pad_mux gn_io_gnsssys_sw_cfg_grp_pad_mux[] = {
2068 MUX(1, 44, 7, N, N, N, N),
2069 MUX(1, 43, 7, N, N, N, N),
2070 MUX(1, 42, 7, N, N, N, N),
2071 MUX(1, 41, 7, N, N, N, N),
2072 MUX(1, 40, 7, N, N, N, N),
2073 MUX(1, 39, 7, N, N, N, N),
2074 MUX(1, 38, 7, N, N, N, N),
2075 MUX(1, 37, 7, N, N, N, N),
2076 MUX(1, 49, 7, N, N, N, N),
2077 MUX(1, 50, 7, N, N, N, N),
2078 MUX(1, 91, 7, N, N, N, N),
2079 MUX(1, 92, 7, N, N, N, N),
2080 MUX(1, 93, 7, N, N, N, N),
2081 MUX(1, 94, 7, N, N, N, N),
2082 MUX(1, 95, 7, N, N, N, N),
2083 MUX(1, 96, 7, N, N, N, N),
2084};
2085
2086static struct atlas7_grp_mux gn_io_gnsssys_sw_cfg_grp_mux = {
2087 .pad_mux_count = ARRAY_SIZE(gn_io_gnsssys_sw_cfg_grp_pad_mux),
2088 .pad_mux_list = gn_io_gnsssys_sw_cfg_grp_pad_mux,
2089};
2090
2091static struct atlas7_pad_mux gn_trg_grp0_pad_mux[] = {
2092 MUX(1, 29, 1, 0xa00, 6, 0xa80, 6),
2093 MUX(1, 28, 1, 0xa00, 7, 0xa80, 7),
2094 MUX(1, 26, 1, 0xa00, 8, 0xa80, 8),
2095 MUX(1, 27, 1, 0xa00, 9, 0xa80, 9),
2096};
2097
2098static struct atlas7_grp_mux gn_trg_grp0_mux = {
2099 .pad_mux_count = ARRAY_SIZE(gn_trg_grp0_pad_mux),
2100 .pad_mux_list = gn_trg_grp0_pad_mux,
2101};
2102
2103static struct atlas7_pad_mux gn_trg_grp1_pad_mux[] = {
2104 MUX(1, 77, 3, 0xa00, 6, 0xa80, 6),
2105 MUX(1, 76, 3, 0xa00, 7, 0xa80, 7),
2106 MUX(1, 74, 3, 0xa00, 8, 0xa80, 8),
2107 MUX(1, 75, 3, 0xa00, 9, 0xa80, 9),
2108};
2109
2110static struct atlas7_grp_mux gn_trg_grp1_mux = {
2111 .pad_mux_count = ARRAY_SIZE(gn_trg_grp1_pad_mux),
2112 .pad_mux_list = gn_trg_grp1_pad_mux,
2113};
2114
2115static struct atlas7_pad_mux gn_trg_shutdown_grp0_pad_mux[] = {
2116 MUX(1, 30, 1, N, N, N, N),
2117};
2118
2119static struct atlas7_grp_mux gn_trg_shutdown_grp0_mux = {
2120 .pad_mux_count = ARRAY_SIZE(gn_trg_shutdown_grp0_pad_mux),
2121 .pad_mux_list = gn_trg_shutdown_grp0_pad_mux,
2122};
2123
2124static struct atlas7_pad_mux gn_trg_shutdown_grp1_pad_mux[] = {
2125 MUX(1, 83, 3, N, N, N, N),
2126};
2127
2128static struct atlas7_grp_mux gn_trg_shutdown_grp1_mux = {
2129 .pad_mux_count = ARRAY_SIZE(gn_trg_shutdown_grp1_pad_mux),
2130 .pad_mux_list = gn_trg_shutdown_grp1_pad_mux,
2131};
2132
2133static struct atlas7_pad_mux gn_trg_shutdown_grp2_pad_mux[] = {
2134 MUX(1, 117, 4, N, N, N, N),
2135};
2136
2137static struct atlas7_grp_mux gn_trg_shutdown_grp2_mux = {
2138 .pad_mux_count = ARRAY_SIZE(gn_trg_shutdown_grp2_pad_mux),
2139 .pad_mux_list = gn_trg_shutdown_grp2_pad_mux,
2140};
2141
2142static struct atlas7_pad_mux gn_trg_shutdown_grp3_pad_mux[] = {
2143 MUX(1, 123, 5, N, N, N, N),
2144};
2145
2146static struct atlas7_grp_mux gn_trg_shutdown_grp3_mux = {
2147 .pad_mux_count = ARRAY_SIZE(gn_trg_shutdown_grp3_pad_mux),
2148 .pad_mux_list = gn_trg_shutdown_grp3_pad_mux,
2149};
2150
2151static struct atlas7_pad_mux i2c0_grp_pad_mux[] = {
2152 MUX(1, 128, 1, N, N, N, N),
2153 MUX(1, 127, 1, N, N, N, N),
2154};
2155
2156static struct atlas7_grp_mux i2c0_grp_mux = {
2157 .pad_mux_count = ARRAY_SIZE(i2c0_grp_pad_mux),
2158 .pad_mux_list = i2c0_grp_pad_mux,
2159};
2160
2161static struct atlas7_pad_mux i2c1_grp_pad_mux[] = {
2162 MUX(1, 126, 4, N, N, N, N),
2163 MUX(1, 125, 4, N, N, N, N),
2164};
2165
2166static struct atlas7_grp_mux i2c1_grp_mux = {
2167 .pad_mux_count = ARRAY_SIZE(i2c1_grp_pad_mux),
2168 .pad_mux_list = i2c1_grp_pad_mux,
2169};
2170
2171static struct atlas7_pad_mux jtag_grp0_pad_mux[] = {
2172 MUX(1, 125, 5, 0xa08, 2, 0xa88, 2),
2173 MUX(0, 4, 3, 0xa08, 3, 0xa88, 3),
2174 MUX(0, 2, 3, N, N, N, N),
2175 MUX(0, 0, 3, N, N, N, N),
2176 MUX(0, 1, 3, N, N, N, N),
2177 MUX(0, 3, 3, N, N, N, N),
2178};
2179
2180static struct atlas7_grp_mux jtag_grp0_mux = {
2181 .pad_mux_count = ARRAY_SIZE(jtag_grp0_pad_mux),
2182 .pad_mux_list = jtag_grp0_pad_mux,
2183};
2184
2185static struct atlas7_pad_mux ks_kas_spi_grp0_pad_mux[] = {
2186 MUX(1, 141, 2, N, N, N, N),
2187 MUX(1, 144, 2, 0xa08, 8, 0xa88, 8),
2188 MUX(1, 143, 2, N, N, N, N),
2189 MUX(1, 142, 2, N, N, N, N),
2190};
2191
2192static struct atlas7_grp_mux ks_kas_spi_grp0_mux = {
2193 .pad_mux_count = ARRAY_SIZE(ks_kas_spi_grp0_pad_mux),
2194 .pad_mux_list = ks_kas_spi_grp0_pad_mux,
2195};
2196
2197static struct atlas7_pad_mux ld_ldd_grp_pad_mux[] = {
2198 MUX(1, 57, 1, N, N, N, N),
2199 MUX(1, 58, 1, N, N, N, N),
2200 MUX(1, 59, 1, N, N, N, N),
2201 MUX(1, 60, 1, N, N, N, N),
2202 MUX(1, 61, 1, N, N, N, N),
2203 MUX(1, 62, 1, N, N, N, N),
2204 MUX(1, 63, 1, N, N, N, N),
2205 MUX(1, 64, 1, N, N, N, N),
2206 MUX(1, 65, 1, N, N, N, N),
2207 MUX(1, 66, 1, N, N, N, N),
2208 MUX(1, 67, 1, N, N, N, N),
2209 MUX(1, 68, 1, N, N, N, N),
2210 MUX(1, 69, 1, N, N, N, N),
2211 MUX(1, 70, 1, N, N, N, N),
2212 MUX(1, 71, 1, N, N, N, N),
2213 MUX(1, 72, 1, N, N, N, N),
2214 MUX(1, 74, 2, N, N, N, N),
2215 MUX(1, 75, 2, N, N, N, N),
2216 MUX(1, 76, 2, N, N, N, N),
2217 MUX(1, 77, 2, N, N, N, N),
2218 MUX(1, 78, 2, N, N, N, N),
2219 MUX(1, 79, 2, N, N, N, N),
2220 MUX(1, 80, 2, N, N, N, N),
2221 MUX(1, 81, 2, N, N, N, N),
2222 MUX(1, 56, 1, N, N, N, N),
2223 MUX(1, 53, 1, N, N, N, N),
2224};
2225
2226static struct atlas7_grp_mux ld_ldd_grp_mux = {
2227 .pad_mux_count = ARRAY_SIZE(ld_ldd_grp_pad_mux),
2228 .pad_mux_list = ld_ldd_grp_pad_mux,
2229};
2230
2231static struct atlas7_pad_mux ld_ldd_16bit_grp_pad_mux[] = {
2232 MUX(1, 57, 1, N, N, N, N),
2233 MUX(1, 58, 1, N, N, N, N),
2234 MUX(1, 59, 1, N, N, N, N),
2235 MUX(1, 60, 1, N, N, N, N),
2236 MUX(1, 61, 1, N, N, N, N),
2237 MUX(1, 62, 1, N, N, N, N),
2238 MUX(1, 63, 1, N, N, N, N),
2239 MUX(1, 64, 1, N, N, N, N),
2240 MUX(1, 65, 1, N, N, N, N),
2241 MUX(1, 66, 1, N, N, N, N),
2242 MUX(1, 67, 1, N, N, N, N),
2243 MUX(1, 68, 1, N, N, N, N),
2244 MUX(1, 69, 1, N, N, N, N),
2245 MUX(1, 70, 1, N, N, N, N),
2246 MUX(1, 71, 1, N, N, N, N),
2247 MUX(1, 72, 1, N, N, N, N),
2248 MUX(1, 56, 1, N, N, N, N),
2249 MUX(1, 53, 1, N, N, N, N),
2250};
2251
2252static struct atlas7_grp_mux ld_ldd_16bit_grp_mux = {
2253 .pad_mux_count = ARRAY_SIZE(ld_ldd_16bit_grp_pad_mux),
2254 .pad_mux_list = ld_ldd_16bit_grp_pad_mux,
2255};
2256
2257static struct atlas7_pad_mux ld_ldd_fck_grp_pad_mux[] = {
2258 MUX(1, 55, 1, N, N, N, N),
2259};
2260
2261static struct atlas7_grp_mux ld_ldd_fck_grp_mux = {
2262 .pad_mux_count = ARRAY_SIZE(ld_ldd_fck_grp_pad_mux),
2263 .pad_mux_list = ld_ldd_fck_grp_pad_mux,
2264};
2265
2266static struct atlas7_pad_mux ld_ldd_lck_grp_pad_mux[] = {
2267 MUX(1, 54, 1, N, N, N, N),
2268};
2269
2270static struct atlas7_grp_mux ld_ldd_lck_grp_mux = {
2271 .pad_mux_count = ARRAY_SIZE(ld_ldd_lck_grp_pad_mux),
2272 .pad_mux_list = ld_ldd_lck_grp_pad_mux,
2273};
2274
2275static struct atlas7_pad_mux lr_lcdrom_grp_pad_mux[] = {
2276 MUX(1, 73, 2, N, N, N, N),
2277 MUX(1, 54, 2, N, N, N, N),
2278 MUX(1, 57, 2, N, N, N, N),
2279 MUX(1, 58, 2, N, N, N, N),
2280 MUX(1, 59, 2, N, N, N, N),
2281 MUX(1, 60, 2, N, N, N, N),
2282 MUX(1, 61, 2, N, N, N, N),
2283 MUX(1, 62, 2, N, N, N, N),
2284 MUX(1, 63, 2, N, N, N, N),
2285 MUX(1, 64, 2, N, N, N, N),
2286 MUX(1, 65, 2, N, N, N, N),
2287 MUX(1, 66, 2, N, N, N, N),
2288 MUX(1, 67, 2, N, N, N, N),
2289 MUX(1, 68, 2, N, N, N, N),
2290 MUX(1, 69, 2, N, N, N, N),
2291 MUX(1, 70, 2, N, N, N, N),
2292 MUX(1, 71, 2, N, N, N, N),
2293 MUX(1, 72, 2, N, N, N, N),
2294 MUX(1, 56, 2, N, N, N, N),
2295 MUX(1, 53, 2, N, N, N, N),
2296 MUX(1, 55, 2, N, N, N, N),
2297};
2298
2299static struct atlas7_grp_mux lr_lcdrom_grp_mux = {
2300 .pad_mux_count = ARRAY_SIZE(lr_lcdrom_grp_pad_mux),
2301 .pad_mux_list = lr_lcdrom_grp_pad_mux,
2302};
2303
2304static struct atlas7_pad_mux lvds_analog_grp_pad_mux[] = {
2305 MUX(1, 149, 8, N, N, N, N),
2306 MUX(1, 150, 8, N, N, N, N),
2307 MUX(1, 151, 8, N, N, N, N),
2308 MUX(1, 152, 8, N, N, N, N),
2309 MUX(1, 153, 8, N, N, N, N),
2310 MUX(1, 154, 8, N, N, N, N),
2311 MUX(1, 155, 8, N, N, N, N),
2312 MUX(1, 156, 8, N, N, N, N),
2313 MUX(1, 157, 8, N, N, N, N),
2314 MUX(1, 158, 8, N, N, N, N),
2315};
2316
2317static struct atlas7_grp_mux lvds_analog_grp_mux = {
2318 .pad_mux_count = ARRAY_SIZE(lvds_analog_grp_pad_mux),
2319 .pad_mux_list = lvds_analog_grp_pad_mux,
2320};
2321
2322static struct atlas7_pad_mux nd_df_grp_pad_mux[] = {
2323 MUX(1, 44, 1, N, N, N, N),
2324 MUX(1, 43, 1, N, N, N, N),
2325 MUX(1, 42, 1, N, N, N, N),
2326 MUX(1, 41, 1, N, N, N, N),
2327 MUX(1, 40, 1, N, N, N, N),
2328 MUX(1, 39, 1, N, N, N, N),
2329 MUX(1, 38, 1, N, N, N, N),
2330 MUX(1, 37, 1, N, N, N, N),
2331 MUX(1, 47, 1, N, N, N, N),
2332 MUX(1, 46, 1, N, N, N, N),
2333 MUX(1, 52, 1, N, N, N, N),
2334 MUX(1, 51, 1, N, N, N, N),
2335 MUX(1, 45, 1, N, N, N, N),
2336 MUX(1, 49, 1, N, N, N, N),
2337 MUX(1, 50, 1, N, N, N, N),
2338 MUX(1, 48, 1, N, N, N, N),
2339 MUX(1, 124, 4, N, N, N, N),
2340};
2341
2342static struct atlas7_grp_mux nd_df_grp_mux = {
2343 .pad_mux_count = ARRAY_SIZE(nd_df_grp_pad_mux),
2344 .pad_mux_list = nd_df_grp_pad_mux,
2345};
2346
2347static struct atlas7_pad_mux nd_df_nowp_grp_pad_mux[] = {
2348 MUX(1, 44, 1, N, N, N, N),
2349 MUX(1, 43, 1, N, N, N, N),
2350 MUX(1, 42, 1, N, N, N, N),
2351 MUX(1, 41, 1, N, N, N, N),
2352 MUX(1, 40, 1, N, N, N, N),
2353 MUX(1, 39, 1, N, N, N, N),
2354 MUX(1, 38, 1, N, N, N, N),
2355 MUX(1, 37, 1, N, N, N, N),
2356 MUX(1, 47, 1, N, N, N, N),
2357 MUX(1, 46, 1, N, N, N, N),
2358 MUX(1, 52, 1, N, N, N, N),
2359 MUX(1, 51, 1, N, N, N, N),
2360 MUX(1, 45, 1, N, N, N, N),
2361 MUX(1, 49, 1, N, N, N, N),
2362 MUX(1, 50, 1, N, N, N, N),
2363 MUX(1, 48, 1, N, N, N, N),
2364};
2365
2366static struct atlas7_grp_mux nd_df_nowp_grp_mux = {
2367 .pad_mux_count = ARRAY_SIZE(nd_df_nowp_grp_pad_mux),
2368 .pad_mux_list = nd_df_nowp_grp_pad_mux,
2369};
2370
2371static struct atlas7_pad_mux ps_grp_pad_mux[] = {
2372 MUX(1, 120, 2, N, N, N, N),
2373 MUX(1, 119, 2, N, N, N, N),
2374};
2375
2376static struct atlas7_grp_mux ps_grp_mux = {
2377 .pad_mux_count = ARRAY_SIZE(ps_grp_pad_mux),
2378 .pad_mux_list = ps_grp_pad_mux,
2379};
2380
2381static struct atlas7_pad_mux pwc_core_on_grp_pad_mux[] = {
2382 MUX(0, 8, 1, N, N, N, N),
2383};
2384
2385static struct atlas7_grp_mux pwc_core_on_grp_mux = {
2386 .pad_mux_count = ARRAY_SIZE(pwc_core_on_grp_pad_mux),
2387 .pad_mux_list = pwc_core_on_grp_pad_mux,
2388};
2389
2390static struct atlas7_pad_mux pwc_ext_on_grp_pad_mux[] = {
2391 MUX(0, 6, 1, N, N, N, N),
2392};
2393
2394static struct atlas7_grp_mux pwc_ext_on_grp_mux = {
2395 .pad_mux_count = ARRAY_SIZE(pwc_ext_on_grp_pad_mux),
2396 .pad_mux_list = pwc_ext_on_grp_pad_mux,
2397};
2398
2399static struct atlas7_pad_mux pwc_gpio3_clk_grp_pad_mux[] = {
2400 MUX(0, 3, 4, N, N, N, N),
2401};
2402
2403static struct atlas7_grp_mux pwc_gpio3_clk_grp_mux = {
2404 .pad_mux_count = ARRAY_SIZE(pwc_gpio3_clk_grp_pad_mux),
2405 .pad_mux_list = pwc_gpio3_clk_grp_pad_mux,
2406};
2407
2408static struct atlas7_pad_mux pwc_io_on_grp_pad_mux[] = {
2409 MUX(0, 9, 1, N, N, N, N),
2410};
2411
2412static struct atlas7_grp_mux pwc_io_on_grp_mux = {
2413 .pad_mux_count = ARRAY_SIZE(pwc_io_on_grp_pad_mux),
2414 .pad_mux_list = pwc_io_on_grp_pad_mux,
2415};
2416
2417static struct atlas7_pad_mux pwc_lowbatt_b_grp0_pad_mux[] = {
2418 MUX(0, 4, 1, 0xa08, 4, 0xa88, 4),
2419};
2420
2421static struct atlas7_grp_mux pwc_lowbatt_b_grp0_mux = {
2422 .pad_mux_count = ARRAY_SIZE(pwc_lowbatt_b_grp0_pad_mux),
2423 .pad_mux_list = pwc_lowbatt_b_grp0_pad_mux,
2424};
2425
2426static struct atlas7_pad_mux pwc_mem_on_grp_pad_mux[] = {
2427 MUX(0, 7, 1, N, N, N, N),
2428};
2429
2430static struct atlas7_grp_mux pwc_mem_on_grp_mux = {
2431 .pad_mux_count = ARRAY_SIZE(pwc_mem_on_grp_pad_mux),
2432 .pad_mux_list = pwc_mem_on_grp_pad_mux,
2433};
2434
2435static struct atlas7_pad_mux pwc_on_key_b_grp0_pad_mux[] = {
2436 MUX(0, 5, 1, 0xa08, 5, 0xa88, 5),
2437};
2438
2439static struct atlas7_grp_mux pwc_on_key_b_grp0_mux = {
2440 .pad_mux_count = ARRAY_SIZE(pwc_on_key_b_grp0_pad_mux),
2441 .pad_mux_list = pwc_on_key_b_grp0_pad_mux,
2442};
2443
2444static struct atlas7_pad_mux pwc_wakeup_src0_grp_pad_mux[] = {
2445 MUX(0, 0, 1, N, N, N, N),
2446};
2447
2448static struct atlas7_grp_mux pwc_wakeup_src0_grp_mux = {
2449 .pad_mux_count = ARRAY_SIZE(pwc_wakeup_src0_grp_pad_mux),
2450 .pad_mux_list = pwc_wakeup_src0_grp_pad_mux,
2451};
2452
2453static struct atlas7_pad_mux pwc_wakeup_src1_grp_pad_mux[] = {
2454 MUX(0, 1, 1, N, N, N, N),
2455};
2456
2457static struct atlas7_grp_mux pwc_wakeup_src1_grp_mux = {
2458 .pad_mux_count = ARRAY_SIZE(pwc_wakeup_src1_grp_pad_mux),
2459 .pad_mux_list = pwc_wakeup_src1_grp_pad_mux,
2460};
2461
2462static struct atlas7_pad_mux pwc_wakeup_src2_grp_pad_mux[] = {
2463 MUX(0, 2, 1, N, N, N, N),
2464};
2465
2466static struct atlas7_grp_mux pwc_wakeup_src2_grp_mux = {
2467 .pad_mux_count = ARRAY_SIZE(pwc_wakeup_src2_grp_pad_mux),
2468 .pad_mux_list = pwc_wakeup_src2_grp_pad_mux,
2469};
2470
2471static struct atlas7_pad_mux pwc_wakeup_src3_grp_pad_mux[] = {
2472 MUX(0, 3, 1, N, N, N, N),
2473};
2474
2475static struct atlas7_grp_mux pwc_wakeup_src3_grp_mux = {
2476 .pad_mux_count = ARRAY_SIZE(pwc_wakeup_src3_grp_pad_mux),
2477 .pad_mux_list = pwc_wakeup_src3_grp_pad_mux,
2478};
2479
2480static struct atlas7_pad_mux pw_cko0_grp0_pad_mux[] = {
2481 MUX(1, 123, 3, N, N, N, N),
2482};
2483
2484static struct atlas7_grp_mux pw_cko0_grp0_mux = {
2485 .pad_mux_count = ARRAY_SIZE(pw_cko0_grp0_pad_mux),
2486 .pad_mux_list = pw_cko0_grp0_pad_mux,
2487};
2488
2489static struct atlas7_pad_mux pw_cko0_grp1_pad_mux[] = {
2490 MUX(1, 101, 4, N, N, N, N),
2491};
2492
2493static struct atlas7_grp_mux pw_cko0_grp1_mux = {
2494 .pad_mux_count = ARRAY_SIZE(pw_cko0_grp1_pad_mux),
2495 .pad_mux_list = pw_cko0_grp1_pad_mux,
2496};
2497
2498static struct atlas7_pad_mux pw_cko0_grp2_pad_mux[] = {
2499 MUX(1, 82, 2, N, N, N, N),
2500};
2501
2502static struct atlas7_grp_mux pw_cko0_grp2_mux = {
2503 .pad_mux_count = ARRAY_SIZE(pw_cko0_grp2_pad_mux),
2504 .pad_mux_list = pw_cko0_grp2_pad_mux,
2505};
2506
2507static struct atlas7_pad_mux pw_cko1_grp0_pad_mux[] = {
2508 MUX(1, 124, 3, N, N, N, N),
2509};
2510
2511static struct atlas7_grp_mux pw_cko1_grp0_mux = {
2512 .pad_mux_count = ARRAY_SIZE(pw_cko1_grp0_pad_mux),
2513 .pad_mux_list = pw_cko1_grp0_pad_mux,
2514};
2515
2516static struct atlas7_pad_mux pw_cko1_grp1_pad_mux[] = {
2517 MUX(1, 110, 4, N, N, N, N),
2518};
2519
2520static struct atlas7_grp_mux pw_cko1_grp1_mux = {
2521 .pad_mux_count = ARRAY_SIZE(pw_cko1_grp1_pad_mux),
2522 .pad_mux_list = pw_cko1_grp1_pad_mux,
2523};
2524
2525static struct atlas7_pad_mux pw_i2s01_clk_grp0_pad_mux[] = {
2526 MUX(1, 125, 3, N, N, N, N),
2527};
2528
2529static struct atlas7_grp_mux pw_i2s01_clk_grp0_mux = {
2530 .pad_mux_count = ARRAY_SIZE(pw_i2s01_clk_grp0_pad_mux),
2531 .pad_mux_list = pw_i2s01_clk_grp0_pad_mux,
2532};
2533
2534static struct atlas7_pad_mux pw_i2s01_clk_grp1_pad_mux[] = {
2535 MUX(1, 117, 3, N, N, N, N),
2536};
2537
2538static struct atlas7_grp_mux pw_i2s01_clk_grp1_mux = {
2539 .pad_mux_count = ARRAY_SIZE(pw_i2s01_clk_grp1_pad_mux),
2540 .pad_mux_list = pw_i2s01_clk_grp1_pad_mux,
2541};
2542
2543static struct atlas7_pad_mux pw_pwm0_grp_pad_mux[] = {
2544 MUX(1, 119, 3, N, N, N, N),
2545};
2546
2547static struct atlas7_grp_mux pw_pwm0_grp_mux = {
2548 .pad_mux_count = ARRAY_SIZE(pw_pwm0_grp_pad_mux),
2549 .pad_mux_list = pw_pwm0_grp_pad_mux,
2550};
2551
2552static struct atlas7_pad_mux pw_pwm1_grp_pad_mux[] = {
2553 MUX(1, 120, 3, N, N, N, N),
2554};
2555
2556static struct atlas7_grp_mux pw_pwm1_grp_mux = {
2557 .pad_mux_count = ARRAY_SIZE(pw_pwm1_grp_pad_mux),
2558 .pad_mux_list = pw_pwm1_grp_pad_mux,
2559};
2560
2561static struct atlas7_pad_mux pw_pwm2_grp0_pad_mux[] = {
2562 MUX(1, 121, 3, N, N, N, N),
2563};
2564
2565static struct atlas7_grp_mux pw_pwm2_grp0_mux = {
2566 .pad_mux_count = ARRAY_SIZE(pw_pwm2_grp0_pad_mux),
2567 .pad_mux_list = pw_pwm2_grp0_pad_mux,
2568};
2569
2570static struct atlas7_pad_mux pw_pwm2_grp1_pad_mux[] = {
2571 MUX(1, 98, 3, N, N, N, N),
2572};
2573
2574static struct atlas7_grp_mux pw_pwm2_grp1_mux = {
2575 .pad_mux_count = ARRAY_SIZE(pw_pwm2_grp1_pad_mux),
2576 .pad_mux_list = pw_pwm2_grp1_pad_mux,
2577};
2578
2579static struct atlas7_pad_mux pw_pwm3_grp0_pad_mux[] = {
2580 MUX(1, 122, 3, N, N, N, N),
2581};
2582
2583static struct atlas7_grp_mux pw_pwm3_grp0_mux = {
2584 .pad_mux_count = ARRAY_SIZE(pw_pwm3_grp0_pad_mux),
2585 .pad_mux_list = pw_pwm3_grp0_pad_mux,
2586};
2587
2588static struct atlas7_pad_mux pw_pwm3_grp1_pad_mux[] = {
2589 MUX(1, 73, 4, N, N, N, N),
2590};
2591
2592static struct atlas7_grp_mux pw_pwm3_grp1_mux = {
2593 .pad_mux_count = ARRAY_SIZE(pw_pwm3_grp1_pad_mux),
2594 .pad_mux_list = pw_pwm3_grp1_pad_mux,
2595};
2596
2597static struct atlas7_pad_mux pw_pwm_cpu_vol_grp0_pad_mux[] = {
2598 MUX(1, 121, 3, N, N, N, N),
2599};
2600
2601static struct atlas7_grp_mux pw_pwm_cpu_vol_grp0_mux = {
2602 .pad_mux_count = ARRAY_SIZE(pw_pwm_cpu_vol_grp0_pad_mux),
2603 .pad_mux_list = pw_pwm_cpu_vol_grp0_pad_mux,
2604};
2605
2606static struct atlas7_pad_mux pw_pwm_cpu_vol_grp1_pad_mux[] = {
2607 MUX(1, 98, 3, N, N, N, N),
2608};
2609
2610static struct atlas7_grp_mux pw_pwm_cpu_vol_grp1_mux = {
2611 .pad_mux_count = ARRAY_SIZE(pw_pwm_cpu_vol_grp1_pad_mux),
2612 .pad_mux_list = pw_pwm_cpu_vol_grp1_pad_mux,
2613};
2614
2615static struct atlas7_pad_mux pw_backlight_grp0_pad_mux[] = {
2616 MUX(1, 122, 3, N, N, N, N),
2617};
2618
2619static struct atlas7_grp_mux pw_backlight_grp0_mux = {
2620 .pad_mux_count = ARRAY_SIZE(pw_backlight_grp0_pad_mux),
2621 .pad_mux_list = pw_backlight_grp0_pad_mux,
2622};
2623
2624static struct atlas7_pad_mux pw_backlight_grp1_pad_mux[] = {
2625 MUX(1, 73, 4, N, N, N, N),
2626};
2627
2628static struct atlas7_grp_mux pw_backlight_grp1_mux = {
2629 .pad_mux_count = ARRAY_SIZE(pw_backlight_grp1_pad_mux),
2630 .pad_mux_list = pw_backlight_grp1_pad_mux,
2631};
2632
2633static struct atlas7_pad_mux rg_eth_mac_grp_pad_mux[] = {
2634 MUX(1, 108, 1, N, N, N, N),
2635 MUX(1, 103, 1, N, N, N, N),
2636 MUX(1, 104, 1, N, N, N, N),
2637 MUX(1, 105, 1, N, N, N, N),
2638 MUX(1, 106, 1, N, N, N, N),
2639 MUX(1, 107, 1, N, N, N, N),
2640 MUX(1, 102, 1, N, N, N, N),
2641 MUX(1, 97, 1, N, N, N, N),
2642 MUX(1, 98, 1, N, N, N, N),
2643 MUX(1, 99, 1, N, N, N, N),
2644 MUX(1, 100, 1, N, N, N, N),
2645 MUX(1, 101, 1, N, N, N, N),
2646};
2647
2648static struct atlas7_grp_mux rg_eth_mac_grp_mux = {
2649 .pad_mux_count = ARRAY_SIZE(rg_eth_mac_grp_pad_mux),
2650 .pad_mux_list = rg_eth_mac_grp_pad_mux,
2651};
2652
2653static struct atlas7_pad_mux rg_gmac_phy_intr_n_grp_pad_mux[] = {
2654 MUX(1, 111, 1, 0xa08, 13, 0xa88, 13),
2655};
2656
2657static struct atlas7_grp_mux rg_gmac_phy_intr_n_grp_mux = {
2658 .pad_mux_count = ARRAY_SIZE(rg_gmac_phy_intr_n_grp_pad_mux),
2659 .pad_mux_list = rg_gmac_phy_intr_n_grp_pad_mux,
2660};
2661
2662static struct atlas7_pad_mux rg_rgmii_mac_grp_pad_mux[] = {
2663 MUX(1, 109, 1, N, N, N, N),
2664 MUX(1, 110, 1, N, N, N, N),
2665};
2666
2667static struct atlas7_grp_mux rg_rgmii_mac_grp_mux = {
2668 .pad_mux_count = ARRAY_SIZE(rg_rgmii_mac_grp_pad_mux),
2669 .pad_mux_list = rg_rgmii_mac_grp_pad_mux,
2670};
2671
2672static struct atlas7_pad_mux rg_rgmii_phy_ref_clk_grp0_pad_mux[] = {
2673 MUX(1, 111, 5, N, N, N, N),
2674};
2675
2676static struct atlas7_grp_mux rg_rgmii_phy_ref_clk_grp0_mux = {
2677 .pad_mux_count = ARRAY_SIZE(rg_rgmii_phy_ref_clk_grp0_pad_mux),
2678 .pad_mux_list = rg_rgmii_phy_ref_clk_grp0_pad_mux,
2679};
2680
2681static struct atlas7_pad_mux rg_rgmii_phy_ref_clk_grp1_pad_mux[] = {
2682 MUX(1, 53, 4, N, N, N, N),
2683};
2684
2685static struct atlas7_grp_mux rg_rgmii_phy_ref_clk_grp1_mux = {
2686 .pad_mux_count = ARRAY_SIZE(rg_rgmii_phy_ref_clk_grp1_pad_mux),
2687 .pad_mux_list = rg_rgmii_phy_ref_clk_grp1_pad_mux,
2688};
2689
2690static struct atlas7_pad_mux sd0_grp_pad_mux[] = {
2691 MUX(1, 46, 2, N, N, N, N),
2692 MUX(1, 47, 2, N, N, N, N),
2693 MUX(1, 44, 2, N, N, N, N),
2694 MUX(1, 43, 2, N, N, N, N),
2695 MUX(1, 42, 2, N, N, N, N),
2696 MUX(1, 41, 2, N, N, N, N),
2697 MUX(1, 40, 2, N, N, N, N),
2698 MUX(1, 39, 2, N, N, N, N),
2699 MUX(1, 38, 2, N, N, N, N),
2700 MUX(1, 37, 2, N, N, N, N),
2701};
2702
2703static struct atlas7_grp_mux sd0_grp_mux = {
2704 .pad_mux_count = ARRAY_SIZE(sd0_grp_pad_mux),
2705 .pad_mux_list = sd0_grp_pad_mux,
2706};
2707
2708static struct atlas7_pad_mux sd0_4bit_grp_pad_mux[] = {
2709 MUX(1, 46, 2, N, N, N, N),
2710 MUX(1, 47, 2, N, N, N, N),
2711 MUX(1, 44, 2, N, N, N, N),
2712 MUX(1, 43, 2, N, N, N, N),
2713 MUX(1, 42, 2, N, N, N, N),
2714 MUX(1, 41, 2, N, N, N, N),
2715};
2716
2717static struct atlas7_grp_mux sd0_4bit_grp_mux = {
2718 .pad_mux_count = ARRAY_SIZE(sd0_4bit_grp_pad_mux),
2719 .pad_mux_list = sd0_4bit_grp_pad_mux,
2720};
2721
2722static struct atlas7_pad_mux sd1_grp_pad_mux[] = {
2723 MUX(1, 48, 3, N, N, N, N),
2724 MUX(1, 49, 3, N, N, N, N),
2725 MUX(1, 44, 3, 0xa00, 0, 0xa80, 0),
2726 MUX(1, 43, 3, 0xa00, 1, 0xa80, 1),
2727 MUX(1, 42, 3, 0xa00, 2, 0xa80, 2),
2728 MUX(1, 41, 3, 0xa00, 3, 0xa80, 3),
2729 MUX(1, 40, 3, N, N, N, N),
2730 MUX(1, 39, 3, N, N, N, N),
2731 MUX(1, 38, 3, N, N, N, N),
2732 MUX(1, 37, 3, N, N, N, N),
2733};
2734
2735static struct atlas7_grp_mux sd1_grp_mux = {
2736 .pad_mux_count = ARRAY_SIZE(sd1_grp_pad_mux),
2737 .pad_mux_list = sd1_grp_pad_mux,
2738};
2739
2740static struct atlas7_pad_mux sd1_4bit_grp0_pad_mux[] = {
2741 MUX(1, 48, 3, N, N, N, N),
2742 MUX(1, 49, 3, N, N, N, N),
2743 MUX(1, 44, 3, 0xa00, 0, 0xa80, 0),
2744 MUX(1, 43, 3, 0xa00, 1, 0xa80, 1),
2745 MUX(1, 42, 3, 0xa00, 2, 0xa80, 2),
2746 MUX(1, 41, 3, 0xa00, 3, 0xa80, 3),
2747};
2748
2749static struct atlas7_grp_mux sd1_4bit_grp0_mux = {
2750 .pad_mux_count = ARRAY_SIZE(sd1_4bit_grp0_pad_mux),
2751 .pad_mux_list = sd1_4bit_grp0_pad_mux,
2752};
2753
2754static struct atlas7_pad_mux sd1_4bit_grp1_pad_mux[] = {
2755 MUX(1, 48, 3, N, N, N, N),
2756 MUX(1, 49, 3, N, N, N, N),
2757 MUX(1, 40, 4, 0xa00, 0, 0xa80, 0),
2758 MUX(1, 39, 4, 0xa00, 1, 0xa80, 1),
2759 MUX(1, 38, 4, 0xa00, 2, 0xa80, 2),
2760 MUX(1, 37, 4, 0xa00, 3, 0xa80, 3),
2761};
2762
2763static struct atlas7_grp_mux sd1_4bit_grp1_mux = {
2764 .pad_mux_count = ARRAY_SIZE(sd1_4bit_grp1_pad_mux),
2765 .pad_mux_list = sd1_4bit_grp1_pad_mux,
2766};
2767
2768static struct atlas7_pad_mux sd2_grp0_pad_mux[] = {
2769 MUX(1, 124, 2, 0xa08, 7, 0xa88, 7),
2770 MUX(1, 31, 1, N, N, N, N),
2771 MUX(1, 32, 1, N, N, N, N),
2772 MUX(1, 33, 1, N, N, N, N),
2773 MUX(1, 34, 1, N, N, N, N),
2774 MUX(1, 35, 1, N, N, N, N),
2775 MUX(1, 36, 1, N, N, N, N),
2776 MUX(1, 123, 2, N, N, N, N),
2777};
2778
2779static struct atlas7_grp_mux sd2_grp0_mux = {
2780 .pad_mux_count = ARRAY_SIZE(sd2_grp0_pad_mux),
2781 .pad_mux_list = sd2_grp0_pad_mux,
2782};
2783
2784static struct atlas7_pad_mux sd2_no_cdb_grp0_pad_mux[] = {
2785 MUX(1, 31, 1, N, N, N, N),
2786 MUX(1, 32, 1, N, N, N, N),
2787 MUX(1, 33, 1, N, N, N, N),
2788 MUX(1, 34, 1, N, N, N, N),
2789 MUX(1, 35, 1, N, N, N, N),
2790 MUX(1, 36, 1, N, N, N, N),
2791 MUX(1, 123, 2, N, N, N, N),
2792};
2793
2794static struct atlas7_grp_mux sd2_no_cdb_grp0_mux = {
2795 .pad_mux_count = ARRAY_SIZE(sd2_no_cdb_grp0_pad_mux),
2796 .pad_mux_list = sd2_no_cdb_grp0_pad_mux,
2797};
2798
2799static struct atlas7_pad_mux sd3_grp_pad_mux[] = {
2800 MUX(1, 85, 1, N, N, N, N),
2801 MUX(1, 86, 1, N, N, N, N),
2802 MUX(1, 87, 1, N, N, N, N),
2803 MUX(1, 88, 1, N, N, N, N),
2804 MUX(1, 89, 1, N, N, N, N),
2805 MUX(1, 90, 1, N, N, N, N),
2806};
2807
2808static struct atlas7_grp_mux sd3_grp_mux = {
2809 .pad_mux_count = ARRAY_SIZE(sd3_grp_pad_mux),
2810 .pad_mux_list = sd3_grp_pad_mux,
2811};
2812
2813static struct atlas7_pad_mux sd5_grp_pad_mux[] = {
2814 MUX(1, 91, 1, N, N, N, N),
2815 MUX(1, 92, 1, N, N, N, N),
2816 MUX(1, 93, 1, N, N, N, N),
2817 MUX(1, 94, 1, N, N, N, N),
2818 MUX(1, 95, 1, N, N, N, N),
2819 MUX(1, 96, 1, N, N, N, N),
2820};
2821
2822static struct atlas7_grp_mux sd5_grp_mux = {
2823 .pad_mux_count = ARRAY_SIZE(sd5_grp_pad_mux),
2824 .pad_mux_list = sd5_grp_pad_mux,
2825};
2826
2827static struct atlas7_pad_mux sd6_grp0_pad_mux[] = {
2828 MUX(1, 79, 4, 0xa00, 27, 0xa80, 27),
2829 MUX(1, 78, 4, 0xa00, 26, 0xa80, 26),
2830 MUX(1, 74, 4, 0xa00, 28, 0xa80, 28),
2831 MUX(1, 75, 4, 0xa00, 29, 0xa80, 29),
2832 MUX(1, 76, 4, 0xa00, 30, 0xa80, 30),
2833 MUX(1, 77, 4, 0xa00, 31, 0xa80, 31),
2834};
2835
2836static struct atlas7_grp_mux sd6_grp0_mux = {
2837 .pad_mux_count = ARRAY_SIZE(sd6_grp0_pad_mux),
2838 .pad_mux_list = sd6_grp0_pad_mux,
2839};
2840
2841static struct atlas7_pad_mux sd6_grp1_pad_mux[] = {
2842 MUX(1, 101, 3, 0xa00, 27, 0xa80, 27),
2843 MUX(1, 99, 3, 0xa00, 26, 0xa80, 26),
2844 MUX(1, 100, 3, 0xa00, 28, 0xa80, 28),
2845 MUX(1, 110, 3, 0xa00, 29, 0xa80, 29),
2846 MUX(1, 109, 3, 0xa00, 30, 0xa80, 30),
2847 MUX(1, 111, 3, 0xa00, 31, 0xa80, 31),
2848};
2849
2850static struct atlas7_grp_mux sd6_grp1_mux = {
2851 .pad_mux_count = ARRAY_SIZE(sd6_grp1_pad_mux),
2852 .pad_mux_list = sd6_grp1_pad_mux,
2853};
2854
2855static struct atlas7_pad_mux sp0_ext_ldo_on_grp_pad_mux[] = {
2856 MUX(0, 4, 2, N, N, N, N),
2857};
2858
2859static struct atlas7_grp_mux sp0_ext_ldo_on_grp_mux = {
2860 .pad_mux_count = ARRAY_SIZE(sp0_ext_ldo_on_grp_pad_mux),
2861 .pad_mux_list = sp0_ext_ldo_on_grp_pad_mux,
2862};
2863
2864static struct atlas7_pad_mux sp0_qspi_grp_pad_mux[] = {
2865 MUX(0, 12, 1, N, N, N, N),
2866 MUX(0, 13, 1, N, N, N, N),
2867 MUX(0, 14, 1, N, N, N, N),
2868 MUX(0, 15, 1, N, N, N, N),
2869 MUX(0, 16, 1, N, N, N, N),
2870 MUX(0, 17, 1, N, N, N, N),
2871};
2872
2873static struct atlas7_grp_mux sp0_qspi_grp_mux = {
2874 .pad_mux_count = ARRAY_SIZE(sp0_qspi_grp_pad_mux),
2875 .pad_mux_list = sp0_qspi_grp_pad_mux,
2876};
2877
2878static struct atlas7_pad_mux sp1_spi_grp_pad_mux[] = {
2879 MUX(1, 19, 1, N, N, N, N),
2880 MUX(1, 20, 1, N, N, N, N),
2881 MUX(1, 21, 1, N, N, N, N),
2882 MUX(1, 18, 1, N, N, N, N),
2883};
2884
2885static struct atlas7_grp_mux sp1_spi_grp_mux = {
2886 .pad_mux_count = ARRAY_SIZE(sp1_spi_grp_pad_mux),
2887 .pad_mux_list = sp1_spi_grp_pad_mux,
2888};
2889
2890static struct atlas7_pad_mux tpiu_trace_grp_pad_mux[] = {
2891 MUX(1, 53, 5, N, N, N, N),
2892 MUX(1, 56, 5, N, N, N, N),
2893 MUX(1, 57, 5, N, N, N, N),
2894 MUX(1, 58, 5, N, N, N, N),
2895 MUX(1, 59, 5, N, N, N, N),
2896 MUX(1, 60, 5, N, N, N, N),
2897 MUX(1, 61, 5, N, N, N, N),
2898 MUX(1, 62, 5, N, N, N, N),
2899 MUX(1, 63, 5, N, N, N, N),
2900 MUX(1, 64, 5, N, N, N, N),
2901 MUX(1, 65, 5, N, N, N, N),
2902 MUX(1, 66, 5, N, N, N, N),
2903 MUX(1, 67, 5, N, N, N, N),
2904 MUX(1, 68, 5, N, N, N, N),
2905 MUX(1, 69, 5, N, N, N, N),
2906 MUX(1, 70, 5, N, N, N, N),
2907 MUX(1, 71, 5, N, N, N, N),
2908 MUX(1, 72, 5, N, N, N, N),
2909};
2910
2911static struct atlas7_grp_mux tpiu_trace_grp_mux = {
2912 .pad_mux_count = ARRAY_SIZE(tpiu_trace_grp_pad_mux),
2913 .pad_mux_list = tpiu_trace_grp_pad_mux,
2914};
2915
2916static struct atlas7_pad_mux uart0_grp_pad_mux[] = {
2917 MUX(1, 121, 4, N, N, N, N),
2918 MUX(1, 120, 4, N, N, N, N),
2919 MUX(1, 134, 1, N, N, N, N),
2920 MUX(1, 133, 1, N, N, N, N),
2921};
2922
2923static struct atlas7_grp_mux uart0_grp_mux = {
2924 .pad_mux_count = ARRAY_SIZE(uart0_grp_pad_mux),
2925 .pad_mux_list = uart0_grp_pad_mux,
2926};
2927
2928static struct atlas7_pad_mux uart0_nopause_grp_pad_mux[] = {
2929 MUX(1, 134, 1, N, N, N, N),
2930 MUX(1, 133, 1, N, N, N, N),
2931};
2932
2933static struct atlas7_grp_mux uart0_nopause_grp_mux = {
2934 .pad_mux_count = ARRAY_SIZE(uart0_nopause_grp_pad_mux),
2935 .pad_mux_list = uart0_nopause_grp_pad_mux,
2936};
2937
2938static struct atlas7_pad_mux uart1_grp_pad_mux[] = {
2939 MUX(1, 136, 1, N, N, N, N),
2940 MUX(1, 135, 1, N, N, N, N),
2941};
2942
2943static struct atlas7_grp_mux uart1_grp_mux = {
2944 .pad_mux_count = ARRAY_SIZE(uart1_grp_pad_mux),
2945 .pad_mux_list = uart1_grp_pad_mux,
2946};
2947
2948static struct atlas7_pad_mux uart2_grp_pad_mux[] = {
2949 MUX(0, 11, 2, N, N, N, N),
2950 MUX(0, 10, 2, N, N, N, N),
2951};
2952
2953static struct atlas7_grp_mux uart2_grp_mux = {
2954 .pad_mux_count = ARRAY_SIZE(uart2_grp_pad_mux),
2955 .pad_mux_list = uart2_grp_pad_mux,
2956};
2957
2958static struct atlas7_pad_mux uart3_grp0_pad_mux[] = {
2959 MUX(1, 125, 2, 0xa08, 0, 0xa88, 0),
2960 MUX(1, 126, 2, N, N, N, N),
2961 MUX(1, 138, 1, 0xa00, 5, 0xa80, 5),
2962 MUX(1, 137, 1, N, N, N, N),
2963};
2964
2965static struct atlas7_grp_mux uart3_grp0_mux = {
2966 .pad_mux_count = ARRAY_SIZE(uart3_grp0_pad_mux),
2967 .pad_mux_list = uart3_grp0_pad_mux,
2968};
2969
2970static struct atlas7_pad_mux uart3_grp1_pad_mux[] = {
2971 MUX(1, 111, 4, 0xa08, 0, 0xa88, 0),
2972 MUX(1, 109, 4, N, N, N, N),
2973 MUX(1, 84, 2, 0xa00, 5, 0xa80, 5),
2974 MUX(1, 83, 2, N, N, N, N),
2975};
2976
2977static struct atlas7_grp_mux uart3_grp1_mux = {
2978 .pad_mux_count = ARRAY_SIZE(uart3_grp1_pad_mux),
2979 .pad_mux_list = uart3_grp1_pad_mux,
2980};
2981
2982static struct atlas7_pad_mux uart3_grp2_pad_mux[] = {
2983 MUX(1, 140, 2, 0xa08, 0, 0xa88, 0),
2984 MUX(1, 139, 2, N, N, N, N),
2985 MUX(1, 138, 1, 0xa00, 5, 0xa80, 5),
2986 MUX(1, 137, 1, N, N, N, N),
2987};
2988
2989static struct atlas7_grp_mux uart3_grp2_mux = {
2990 .pad_mux_count = ARRAY_SIZE(uart3_grp2_pad_mux),
2991 .pad_mux_list = uart3_grp2_pad_mux,
2992};
2993
2994static struct atlas7_pad_mux uart3_grp3_pad_mux[] = {
2995 MUX(1, 139, 2, N, N, N, N),
2996 MUX(1, 140, 2, 0xa08, 0, 0xa88, 0),
2997 MUX(1, 84, 2, 0xa00, 5, 0xa80, 5),
2998 MUX(1, 83, 2, N, N, N, N),
2999};
3000
3001static struct atlas7_grp_mux uart3_grp3_mux = {
3002 .pad_mux_count = ARRAY_SIZE(uart3_grp3_pad_mux),
3003 .pad_mux_list = uart3_grp3_pad_mux,
3004};
3005
3006static struct atlas7_pad_mux uart3_nopause_grp0_pad_mux[] = {
3007 MUX(1, 138, 1, 0xa00, 5, 0xa80, 5),
3008 MUX(1, 137, 1, N, N, N, N),
3009};
3010
3011static struct atlas7_grp_mux uart3_nopause_grp0_mux = {
3012 .pad_mux_count = ARRAY_SIZE(uart3_nopause_grp0_pad_mux),
3013 .pad_mux_list = uart3_nopause_grp0_pad_mux,
3014};
3015
3016static struct atlas7_pad_mux uart3_nopause_grp1_pad_mux[] = {
3017 MUX(1, 84, 2, 0xa00, 5, 0xa80, 5),
3018 MUX(1, 83, 2, N, N, N, N),
3019};
3020
3021static struct atlas7_grp_mux uart3_nopause_grp1_mux = {
3022 .pad_mux_count = ARRAY_SIZE(uart3_nopause_grp1_pad_mux),
3023 .pad_mux_list = uart3_nopause_grp1_pad_mux,
3024};
3025
3026static struct atlas7_pad_mux uart4_grp0_pad_mux[] = {
3027 MUX(1, 122, 4, 0xa08, 1, 0xa88, 1),
3028 MUX(1, 123, 4, N, N, N, N),
3029 MUX(1, 140, 1, N, N, N, N),
3030 MUX(1, 139, 1, N, N, N, N),
3031};
3032
3033static struct atlas7_grp_mux uart4_grp0_mux = {
3034 .pad_mux_count = ARRAY_SIZE(uart4_grp0_pad_mux),
3035 .pad_mux_list = uart4_grp0_pad_mux,
3036};
3037
3038static struct atlas7_pad_mux uart4_grp1_pad_mux[] = {
3039 MUX(1, 100, 4, 0xa08, 1, 0xa88, 1),
3040 MUX(1, 99, 4, N, N, N, N),
3041 MUX(1, 140, 1, N, N, N, N),
3042 MUX(1, 139, 1, N, N, N, N),
3043};
3044
3045static struct atlas7_grp_mux uart4_grp1_mux = {
3046 .pad_mux_count = ARRAY_SIZE(uart4_grp1_pad_mux),
3047 .pad_mux_list = uart4_grp1_pad_mux,
3048};
3049
3050static struct atlas7_pad_mux uart4_grp2_pad_mux[] = {
3051 MUX(1, 117, 2, 0xa08, 1, 0xa88, 1),
3052 MUX(1, 116, 2, N, N, N, N),
3053 MUX(1, 140, 1, N, N, N, N),
3054 MUX(1, 139, 1, N, N, N, N),
3055};
3056
3057static struct atlas7_grp_mux uart4_grp2_mux = {
3058 .pad_mux_count = ARRAY_SIZE(uart4_grp2_pad_mux),
3059 .pad_mux_list = uart4_grp2_pad_mux,
3060};
3061
3062static struct atlas7_pad_mux uart4_nopause_grp_pad_mux[] = {
3063 MUX(1, 140, 1, N, N, N, N),
3064 MUX(1, 139, 1, N, N, N, N),
3065};
3066
3067static struct atlas7_grp_mux uart4_nopause_grp_mux = {
3068 .pad_mux_count = ARRAY_SIZE(uart4_nopause_grp_pad_mux),
3069 .pad_mux_list = uart4_nopause_grp_pad_mux,
3070};
3071
3072static struct atlas7_pad_mux usb0_drvvbus_grp_pad_mux[] = {
3073 MUX(1, 51, 2, N, N, N, N),
3074};
3075
3076static struct atlas7_grp_mux usb0_drvvbus_grp_mux = {
3077 .pad_mux_count = ARRAY_SIZE(usb0_drvvbus_grp_pad_mux),
3078 .pad_mux_list = usb0_drvvbus_grp_pad_mux,
3079};
3080
3081static struct atlas7_pad_mux usb1_drvvbus_grp_pad_mux[] = {
3082 MUX(1, 134, 2, N, N, N, N),
3083};
3084
3085static struct atlas7_grp_mux usb1_drvvbus_grp_mux = {
3086 .pad_mux_count = ARRAY_SIZE(usb1_drvvbus_grp_pad_mux),
3087 .pad_mux_list = usb1_drvvbus_grp_pad_mux,
3088};
3089
3090static struct atlas7_pad_mux visbus_dout_grp_pad_mux[] = {
3091 MUX(1, 57, 6, N, N, N, N),
3092 MUX(1, 58, 6, N, N, N, N),
3093 MUX(1, 59, 6, N, N, N, N),
3094 MUX(1, 60, 6, N, N, N, N),
3095 MUX(1, 61, 6, N, N, N, N),
3096 MUX(1, 62, 6, N, N, N, N),
3097 MUX(1, 63, 6, N, N, N, N),
3098 MUX(1, 64, 6, N, N, N, N),
3099 MUX(1, 65, 6, N, N, N, N),
3100 MUX(1, 66, 6, N, N, N, N),
3101 MUX(1, 67, 6, N, N, N, N),
3102 MUX(1, 68, 6, N, N, N, N),
3103 MUX(1, 69, 6, N, N, N, N),
3104 MUX(1, 70, 6, N, N, N, N),
3105 MUX(1, 71, 6, N, N, N, N),
3106 MUX(1, 72, 6, N, N, N, N),
3107 MUX(1, 53, 6, N, N, N, N),
3108 MUX(1, 54, 6, N, N, N, N),
3109 MUX(1, 55, 6, N, N, N, N),
3110 MUX(1, 56, 6, N, N, N, N),
3111 MUX(1, 85, 6, N, N, N, N),
3112 MUX(1, 86, 6, N, N, N, N),
3113 MUX(1, 87, 6, N, N, N, N),
3114 MUX(1, 88, 6, N, N, N, N),
3115 MUX(1, 89, 6, N, N, N, N),
3116 MUX(1, 90, 6, N, N, N, N),
3117 MUX(1, 91, 6, N, N, N, N),
3118 MUX(1, 92, 6, N, N, N, N),
3119 MUX(1, 93, 6, N, N, N, N),
3120 MUX(1, 94, 6, N, N, N, N),
3121 MUX(1, 95, 6, N, N, N, N),
3122 MUX(1, 96, 6, N, N, N, N),
3123};
3124
3125static struct atlas7_grp_mux visbus_dout_grp_mux = {
3126 .pad_mux_count = ARRAY_SIZE(visbus_dout_grp_pad_mux),
3127 .pad_mux_list = visbus_dout_grp_pad_mux,
3128};
3129
3130static struct atlas7_pad_mux vi_vip1_grp_pad_mux[] = {
3131 MUX(1, 74, 1, N, N, N, N),
3132 MUX(1, 75, 1, N, N, N, N),
3133 MUX(1, 76, 1, N, N, N, N),
3134 MUX(1, 77, 1, N, N, N, N),
3135 MUX(1, 78, 1, N, N, N, N),
3136 MUX(1, 79, 1, N, N, N, N),
3137 MUX(1, 80, 1, N, N, N, N),
3138 MUX(1, 81, 1, N, N, N, N),
3139 MUX(1, 82, 1, N, N, N, N),
3140 MUX(1, 83, 1, N, N, N, N),
3141 MUX(1, 84, 1, N, N, N, N),
3142 MUX(1, 103, 2, N, N, N, N),
3143 MUX(1, 104, 2, N, N, N, N),
3144 MUX(1, 105, 2, N, N, N, N),
3145 MUX(1, 106, 2, N, N, N, N),
3146 MUX(1, 107, 2, N, N, N, N),
3147 MUX(1, 102, 2, N, N, N, N),
3148 MUX(1, 97, 2, N, N, N, N),
3149 MUX(1, 98, 2, N, N, N, N),
3150};
3151
3152static struct atlas7_grp_mux vi_vip1_grp_mux = {
3153 .pad_mux_count = ARRAY_SIZE(vi_vip1_grp_pad_mux),
3154 .pad_mux_list = vi_vip1_grp_pad_mux,
3155};
3156
3157static struct atlas7_pad_mux vi_vip1_ext_grp_pad_mux[] = {
3158 MUX(1, 74, 1, N, N, N, N),
3159 MUX(1, 75, 1, N, N, N, N),
3160 MUX(1, 76, 1, N, N, N, N),
3161 MUX(1, 77, 1, N, N, N, N),
3162 MUX(1, 78, 1, N, N, N, N),
3163 MUX(1, 79, 1, N, N, N, N),
3164 MUX(1, 80, 1, N, N, N, N),
3165 MUX(1, 81, 1, N, N, N, N),
3166 MUX(1, 82, 1, N, N, N, N),
3167 MUX(1, 83, 1, N, N, N, N),
3168 MUX(1, 84, 1, N, N, N, N),
3169 MUX(1, 108, 2, N, N, N, N),
3170 MUX(1, 103, 2, N, N, N, N),
3171 MUX(1, 104, 2, N, N, N, N),
3172 MUX(1, 105, 2, N, N, N, N),
3173 MUX(1, 106, 2, N, N, N, N),
3174 MUX(1, 107, 2, N, N, N, N),
3175 MUX(1, 102, 2, N, N, N, N),
3176 MUX(1, 97, 2, N, N, N, N),
3177 MUX(1, 98, 2, N, N, N, N),
3178 MUX(1, 99, 2, N, N, N, N),
3179 MUX(1, 100, 2, N, N, N, N),
3180};
3181
3182static struct atlas7_grp_mux vi_vip1_ext_grp_mux = {
3183 .pad_mux_count = ARRAY_SIZE(vi_vip1_ext_grp_pad_mux),
3184 .pad_mux_list = vi_vip1_ext_grp_pad_mux,
3185};
3186
3187static struct atlas7_pad_mux vi_vip1_low8bit_grp_pad_mux[] = {
3188 MUX(1, 74, 1, N, N, N, N),
3189 MUX(1, 75, 1, N, N, N, N),
3190 MUX(1, 76, 1, N, N, N, N),
3191 MUX(1, 77, 1, N, N, N, N),
3192 MUX(1, 78, 1, N, N, N, N),
3193 MUX(1, 79, 1, N, N, N, N),
3194 MUX(1, 80, 1, N, N, N, N),
3195 MUX(1, 81, 1, N, N, N, N),
3196};
3197
3198static struct atlas7_grp_mux vi_vip1_low8bit_grp_mux = {
3199 .pad_mux_count = ARRAY_SIZE(vi_vip1_low8bit_grp_pad_mux),
3200 .pad_mux_list = vi_vip1_low8bit_grp_pad_mux,
3201};
3202
3203static struct atlas7_pad_mux vi_vip1_high8bit_grp_pad_mux[] = {
3204 MUX(1, 82, 1, N, N, N, N),
3205 MUX(1, 83, 1, N, N, N, N),
3206 MUX(1, 84, 1, N, N, N, N),
3207 MUX(1, 108, 2, N, N, N, N),
3208 MUX(1, 103, 2, N, N, N, N),
3209 MUX(1, 104, 2, N, N, N, N),
3210 MUX(1, 105, 2, N, N, N, N),
3211 MUX(1, 106, 2, N, N, N, N),
3212};
3213
3214static struct atlas7_grp_mux vi_vip1_high8bit_grp_mux = {
3215 .pad_mux_count = ARRAY_SIZE(vi_vip1_high8bit_grp_pad_mux),
3216 .pad_mux_list = vi_vip1_high8bit_grp_pad_mux,
3217};
3218
3219static struct atlas7_pmx_func atlas7_pmx_functions[] = {
3220 FUNCTION("gnss_gpio", gnss_gpio_grp, &gnss_gpio_grp_mux),
3221 FUNCTION("lcd_vip_gpio", lcd_vip_gpio_grp, &lcd_vip_gpio_grp_mux),
3222 FUNCTION("sdio_i2s_gpio", sdio_i2s_gpio_grp, &sdio_i2s_gpio_grp_mux),
3223 FUNCTION("sp_rgmii_gpio", sp_rgmii_gpio_grp, &sp_rgmii_gpio_grp_mux),
3224 FUNCTION("lvds_gpio", lvds_gpio_grp, &lvds_gpio_grp_mux),
3225 FUNCTION("uart_nand_gpio",
3226 uart_nand_gpio_grp,
3227 &uart_nand_gpio_grp_mux),
3228 FUNCTION("rtc_gpio", rtc_gpio_grp, &rtc_gpio_grp_mux),
3229 FUNCTION("audio_ac97", audio_ac97_grp, &audio_ac97_grp_mux),
3230 FUNCTION("audio_func_dbg",
3231 audio_func_dbg_grp,
3232 &audio_func_dbg_grp_mux),
3233 FUNCTION("audio_i2s", audio_i2s_grp, &audio_i2s_grp_mux),
3234 FUNCTION("audio_i2s_2ch", audio_i2s_2ch_grp, &audio_i2s_2ch_grp_mux),
3235 FUNCTION("audio_i2s_extclk",
3236 audio_i2s_extclk_grp,
3237 &audio_i2s_extclk_grp_mux),
3238 FUNCTION("audio_uart0", audio_uart0_grp, &audio_uart0_grp_mux),
3239 FUNCTION("audio_uart1", audio_uart1_grp, &audio_uart1_grp_mux),
3240 FUNCTION("audio_uart2_m0", audio_uart2_grp0, &audio_uart2_grp0_mux),
3241 FUNCTION("audio_uart2_m1", audio_uart2_grp1, &audio_uart2_grp1_mux),
3242 FUNCTION("c_can_trnsvr", c_can_trnsvr_grp, &c_can_trnsvr_grp_mux),
3243 FUNCTION("c0_can_m0", c0_can_grp0, &c0_can_grp0_mux),
3244 FUNCTION("c0_can_m1", c0_can_grp1, &c0_can_grp1_mux),
3245 FUNCTION("c1_can_m0", c1_can_grp0, &c1_can_grp0_mux),
3246 FUNCTION("c1_can_m1", c1_can_grp1, &c1_can_grp1_mux),
3247 FUNCTION("c1_can_m2", c1_can_grp2, &c1_can_grp2_mux),
3248 FUNCTION("ca_audio_lpc", ca_audio_lpc_grp, &ca_audio_lpc_grp_mux),
3249 FUNCTION("ca_bt_lpc", ca_bt_lpc_grp, &ca_bt_lpc_grp_mux),
3250 FUNCTION("ca_coex", ca_coex_grp, &ca_coex_grp_mux),
3251 FUNCTION("ca_curator_lpc",
3252 ca_curator_lpc_grp,
3253 &ca_curator_lpc_grp_mux),
3254 FUNCTION("ca_pcm_debug", ca_pcm_debug_grp, &ca_pcm_debug_grp_mux),
3255 FUNCTION("ca_pio", ca_pio_grp, &ca_pio_grp_mux),
3256 FUNCTION("ca_sdio_debug", ca_sdio_debug_grp, &ca_sdio_debug_grp_mux),
3257 FUNCTION("ca_spi", ca_spi_grp, &ca_spi_grp_mux),
3258 FUNCTION("ca_trb", ca_trb_grp, &ca_trb_grp_mux),
3259 FUNCTION("ca_uart_debug", ca_uart_debug_grp, &ca_uart_debug_grp_mux),
3260 FUNCTION("clkc_m0", clkc_grp0, &clkc_grp0_mux),
3261 FUNCTION("clkc_m1", clkc_grp1, &clkc_grp1_mux),
3262 FUNCTION("gn_gnss_i2c", gn_gnss_i2c_grp, &gn_gnss_i2c_grp_mux),
3263 FUNCTION("gn_gnss_uart_nopause",
3264 gn_gnss_uart_nopause_grp,
3265 &gn_gnss_uart_nopause_grp_mux),
3266 FUNCTION("gn_gnss_uart", gn_gnss_uart_grp, &gn_gnss_uart_grp_mux),
3267 FUNCTION("gn_trg_spi_m0", gn_trg_spi_grp0, &gn_trg_spi_grp0_mux),
3268 FUNCTION("gn_trg_spi_m1", gn_trg_spi_grp1, &gn_trg_spi_grp1_mux),
3269 FUNCTION("cvbs_dbg", cvbs_dbg_grp, &cvbs_dbg_grp_mux),
3270 FUNCTION("cvbs_dbg_test_m0",
3271 cvbs_dbg_test_grp0,
3272 &cvbs_dbg_test_grp0_mux),
3273 FUNCTION("cvbs_dbg_test_m1",
3274 cvbs_dbg_test_grp1,
3275 &cvbs_dbg_test_grp1_mux),
3276 FUNCTION("cvbs_dbg_test_m2",
3277 cvbs_dbg_test_grp2,
3278 &cvbs_dbg_test_grp2_mux),
3279 FUNCTION("cvbs_dbg_test_m3",
3280 cvbs_dbg_test_grp3,
3281 &cvbs_dbg_test_grp3_mux),
3282 FUNCTION("cvbs_dbg_test_m4",
3283 cvbs_dbg_test_grp4,
3284 &cvbs_dbg_test_grp4_mux),
3285 FUNCTION("cvbs_dbg_test_m5",
3286 cvbs_dbg_test_grp5,
3287 &cvbs_dbg_test_grp5_mux),
3288 FUNCTION("cvbs_dbg_test_m6",
3289 cvbs_dbg_test_grp6,
3290 &cvbs_dbg_test_grp6_mux),
3291 FUNCTION("cvbs_dbg_test_m7",
3292 cvbs_dbg_test_grp7,
3293 &cvbs_dbg_test_grp7_mux),
3294 FUNCTION("cvbs_dbg_test_m8",
3295 cvbs_dbg_test_grp8,
3296 &cvbs_dbg_test_grp8_mux),
3297 FUNCTION("cvbs_dbg_test_m9",
3298 cvbs_dbg_test_grp9,
3299 &cvbs_dbg_test_grp9_mux),
3300 FUNCTION("cvbs_dbg_test_m10",
3301 cvbs_dbg_test_grp10,
3302 &cvbs_dbg_test_grp10_mux),
3303 FUNCTION("cvbs_dbg_test_m11",
3304 cvbs_dbg_test_grp11,
3305 &cvbs_dbg_test_grp11_mux),
3306 FUNCTION("cvbs_dbg_test_m12",
3307 cvbs_dbg_test_grp12,
3308 &cvbs_dbg_test_grp12_mux),
3309 FUNCTION("cvbs_dbg_test_m13",
3310 cvbs_dbg_test_grp13,
3311 &cvbs_dbg_test_grp13_mux),
3312 FUNCTION("cvbs_dbg_test_m14",
3313 cvbs_dbg_test_grp14,
3314 &cvbs_dbg_test_grp14_mux),
3315 FUNCTION("cvbs_dbg_test_m15",
3316 cvbs_dbg_test_grp15,
3317 &cvbs_dbg_test_grp15_mux),
3318 FUNCTION("gn_gnss_power", gn_gnss_power_grp, &gn_gnss_power_grp_mux),
3319 FUNCTION("gn_gnss_sw_status",
3320 gn_gnss_sw_status_grp,
3321 &gn_gnss_sw_status_grp_mux),
3322 FUNCTION("gn_gnss_eclk", gn_gnss_eclk_grp, &gn_gnss_eclk_grp_mux),
3323 FUNCTION("gn_gnss_irq1_m0",
3324 gn_gnss_irq1_grp0,
3325 &gn_gnss_irq1_grp0_mux),
3326 FUNCTION("gn_gnss_irq2_m0",
3327 gn_gnss_irq2_grp0,
3328 &gn_gnss_irq2_grp0_mux),
3329 FUNCTION("gn_gnss_tm", gn_gnss_tm_grp, &gn_gnss_tm_grp_mux),
3330 FUNCTION("gn_gnss_tsync", gn_gnss_tsync_grp, &gn_gnss_tsync_grp_mux),
3331 FUNCTION("gn_io_gnsssys_sw_cfg",
3332 gn_io_gnsssys_sw_cfg_grp,
3333 &gn_io_gnsssys_sw_cfg_grp_mux),
3334 FUNCTION("gn_trg_m0", gn_trg_grp0, &gn_trg_grp0_mux),
3335 FUNCTION("gn_trg_m1", gn_trg_grp1, &gn_trg_grp1_mux),
3336 FUNCTION("gn_trg_shutdown_m0",
3337 gn_trg_shutdown_grp0,
3338 &gn_trg_shutdown_grp0_mux),
3339 FUNCTION("gn_trg_shutdown_m1",
3340 gn_trg_shutdown_grp1,
3341 &gn_trg_shutdown_grp1_mux),
3342 FUNCTION("gn_trg_shutdown_m2",
3343 gn_trg_shutdown_grp2,
3344 &gn_trg_shutdown_grp2_mux),
3345 FUNCTION("gn_trg_shutdown_m3",
3346 gn_trg_shutdown_grp3,
3347 &gn_trg_shutdown_grp3_mux),
3348 FUNCTION("i2c0", i2c0_grp, &i2c0_grp_mux),
3349 FUNCTION("i2c1", i2c1_grp, &i2c1_grp_mux),
3350 FUNCTION("jtag_m0", jtag_grp0, &jtag_grp0_mux),
3351 FUNCTION("ks_kas_spi_m0", ks_kas_spi_grp0, &ks_kas_spi_grp0_mux),
3352 FUNCTION("ld_ldd", ld_ldd_grp, &ld_ldd_grp_mux),
3353 FUNCTION("ld_ldd_16bit", ld_ldd_16bit_grp, &ld_ldd_16bit_grp_mux),
3354 FUNCTION("ld_ldd_fck", ld_ldd_fck_grp, &ld_ldd_fck_grp_mux),
3355 FUNCTION("ld_ldd_lck", ld_ldd_lck_grp, &ld_ldd_lck_grp_mux),
3356 FUNCTION("lr_lcdrom", lr_lcdrom_grp, &lr_lcdrom_grp_mux),
3357 FUNCTION("lvds_analog", lvds_analog_grp, &lvds_analog_grp_mux),
3358 FUNCTION("nd_df", nd_df_grp, &nd_df_grp_mux),
3359 FUNCTION("nd_df_nowp", nd_df_nowp_grp, &nd_df_nowp_grp_mux),
3360 FUNCTION("ps", ps_grp, &ps_grp_mux),
3361 FUNCTION("pwc_core_on", pwc_core_on_grp, &pwc_core_on_grp_mux),
3362 FUNCTION("pwc_ext_on", pwc_ext_on_grp, &pwc_ext_on_grp_mux),
3363 FUNCTION("pwc_gpio3_clk", pwc_gpio3_clk_grp, &pwc_gpio3_clk_grp_mux),
3364 FUNCTION("pwc_io_on", pwc_io_on_grp, &pwc_io_on_grp_mux),
3365 FUNCTION("pwc_lowbatt_b_m0",
3366 pwc_lowbatt_b_grp0,
3367 &pwc_lowbatt_b_grp0_mux),
3368 FUNCTION("pwc_mem_on", pwc_mem_on_grp, &pwc_mem_on_grp_mux),
3369 FUNCTION("pwc_on_key_b_m0",
3370 pwc_on_key_b_grp0,
3371 &pwc_on_key_b_grp0_mux),
3372 FUNCTION("pwc_wakeup_src0",
3373 pwc_wakeup_src0_grp,
3374 &pwc_wakeup_src0_grp_mux),
3375 FUNCTION("pwc_wakeup_src1",
3376 pwc_wakeup_src1_grp,
3377 &pwc_wakeup_src1_grp_mux),
3378 FUNCTION("pwc_wakeup_src2",
3379 pwc_wakeup_src2_grp,
3380 &pwc_wakeup_src2_grp_mux),
3381 FUNCTION("pwc_wakeup_src3",
3382 pwc_wakeup_src3_grp,
3383 &pwc_wakeup_src3_grp_mux),
3384 FUNCTION("pw_cko0_m0", pw_cko0_grp0, &pw_cko0_grp0_mux),
3385 FUNCTION("pw_cko0_m1", pw_cko0_grp1, &pw_cko0_grp1_mux),
3386 FUNCTION("pw_cko0_m2", pw_cko0_grp2, &pw_cko0_grp2_mux),
3387 FUNCTION("pw_cko1_m0", pw_cko1_grp0, &pw_cko1_grp0_mux),
3388 FUNCTION("pw_cko1_m1", pw_cko1_grp1, &pw_cko1_grp1_mux),
3389 FUNCTION("pw_i2s01_clk_m0",
3390 pw_i2s01_clk_grp0,
3391 &pw_i2s01_clk_grp0_mux),
3392 FUNCTION("pw_i2s01_clk_m1",
3393 pw_i2s01_clk_grp1,
3394 &pw_i2s01_clk_grp1_mux),
3395 FUNCTION("pw_pwm0", pw_pwm0_grp, &pw_pwm0_grp_mux),
3396 FUNCTION("pw_pwm1", pw_pwm1_grp, &pw_pwm1_grp_mux),
3397 FUNCTION("pw_pwm2_m0", pw_pwm2_grp0, &pw_pwm2_grp0_mux),
3398 FUNCTION("pw_pwm2_m1", pw_pwm2_grp1, &pw_pwm2_grp1_mux),
3399 FUNCTION("pw_pwm3_m0", pw_pwm3_grp0, &pw_pwm3_grp0_mux),
3400 FUNCTION("pw_pwm3_m1", pw_pwm3_grp1, &pw_pwm3_grp1_mux),
3401 FUNCTION("pw_pwm_cpu_vol_m0",
3402 pw_pwm_cpu_vol_grp0,
3403 &pw_pwm_cpu_vol_grp0_mux),
3404 FUNCTION("pw_pwm_cpu_vol_m1",
3405 pw_pwm_cpu_vol_grp1,
3406 &pw_pwm_cpu_vol_grp1_mux),
3407 FUNCTION("pw_backlight_m0",
3408 pw_backlight_grp0,
3409 &pw_backlight_grp0_mux),
3410 FUNCTION("pw_backlight_m1",
3411 pw_backlight_grp1,
3412 &pw_backlight_grp1_mux),
3413 FUNCTION("rg_eth_mac", rg_eth_mac_grp, &rg_eth_mac_grp_mux),
3414 FUNCTION("rg_gmac_phy_intr_n",
3415 rg_gmac_phy_intr_n_grp,
3416 &rg_gmac_phy_intr_n_grp_mux),
3417 FUNCTION("rg_rgmii_mac", rg_rgmii_mac_grp, &rg_rgmii_mac_grp_mux),
3418 FUNCTION("rg_rgmii_phy_ref_clk_m0",
3419 rg_rgmii_phy_ref_clk_grp0,
3420 &rg_rgmii_phy_ref_clk_grp0_mux),
3421 FUNCTION("rg_rgmii_phy_ref_clk_m1",
3422 rg_rgmii_phy_ref_clk_grp1,
3423 &rg_rgmii_phy_ref_clk_grp1_mux),
3424 FUNCTION("sd0", sd0_grp, &sd0_grp_mux),
3425 FUNCTION("sd0_4bit", sd0_4bit_grp, &sd0_4bit_grp_mux),
3426 FUNCTION("sd1", sd1_grp, &sd1_grp_mux),
3427 FUNCTION("sd1_4bit_m0", sd1_4bit_grp0, &sd1_4bit_grp0_mux),
3428 FUNCTION("sd1_4bit_m1", sd1_4bit_grp1, &sd1_4bit_grp1_mux),
3429 FUNCTION("sd2_m0", sd2_grp0, &sd2_grp0_mux),
3430 FUNCTION("sd2_no_cdb_m0", sd2_no_cdb_grp0, &sd2_no_cdb_grp0_mux),
3431 FUNCTION("sd3", sd3_grp, &sd3_grp_mux),
3432 FUNCTION("sd5", sd5_grp, &sd5_grp_mux),
3433 FUNCTION("sd6_m0", sd6_grp0, &sd6_grp0_mux),
3434 FUNCTION("sd6_m1", sd6_grp1, &sd6_grp1_mux),
3435 FUNCTION("sp0_ext_ldo_on",
3436 sp0_ext_ldo_on_grp,
3437 &sp0_ext_ldo_on_grp_mux),
3438 FUNCTION("sp0_qspi", sp0_qspi_grp, &sp0_qspi_grp_mux),
3439 FUNCTION("sp1_spi", sp1_spi_grp, &sp1_spi_grp_mux),
3440 FUNCTION("tpiu_trace", tpiu_trace_grp, &tpiu_trace_grp_mux),
3441 FUNCTION("uart0", uart0_grp, &uart0_grp_mux),
3442 FUNCTION("uart0_nopause", uart0_nopause_grp, &uart0_nopause_grp_mux),
3443 FUNCTION("uart1", uart1_grp, &uart1_grp_mux),
3444 FUNCTION("uart2", uart2_grp, &uart2_grp_mux),
3445 FUNCTION("uart3_m0", uart3_grp0, &uart3_grp0_mux),
3446 FUNCTION("uart3_m1", uart3_grp1, &uart3_grp1_mux),
3447 FUNCTION("uart3_m2", uart3_grp2, &uart3_grp2_mux),
3448 FUNCTION("uart3_m3", uart3_grp3, &uart3_grp3_mux),
3449 FUNCTION("uart3_nopause_m0",
3450 uart3_nopause_grp0,
3451 &uart3_nopause_grp0_mux),
3452 FUNCTION("uart3_nopause_m1",
3453 uart3_nopause_grp1,
3454 &uart3_nopause_grp1_mux),
3455 FUNCTION("uart4_m0", uart4_grp0, &uart4_grp0_mux),
3456 FUNCTION("uart4_m1", uart4_grp1, &uart4_grp1_mux),
3457 FUNCTION("uart4_m2", uart4_grp2, &uart4_grp2_mux),
3458 FUNCTION("uart4_nopause", uart4_nopause_grp, &uart4_nopause_grp_mux),
3459 FUNCTION("usb0_drvvbus", usb0_drvvbus_grp, &usb0_drvvbus_grp_mux),
3460 FUNCTION("usb1_drvvbus", usb1_drvvbus_grp, &usb1_drvvbus_grp_mux),
3461 FUNCTION("visbus_dout", visbus_dout_grp, &visbus_dout_grp_mux),
3462 FUNCTION("vi_vip1", vi_vip1_grp, &vi_vip1_grp_mux),
3463 FUNCTION("vi_vip1_ext", vi_vip1_ext_grp, &vi_vip1_ext_grp_mux),
3464 FUNCTION("vi_vip1_low8bit",
3465 vi_vip1_low8bit_grp,
3466 &vi_vip1_low8bit_grp_mux),
3467 FUNCTION("vi_vip1_high8bit",
3468 vi_vip1_high8bit_grp,
3469 &vi_vip1_high8bit_grp_mux),
3470};
3471
3472struct atlas7_pinctrl_data atlas7_ioc_data = {
3473 .pads = (struct pinctrl_pin_desc *)atlas7_ioc_pads,
3474 .pads_cnt = ARRAY_SIZE(atlas7_ioc_pads),
3475 .grps = (struct atlas7_pin_group *)altas7_pin_groups,
3476 .grps_cnt = ARRAY_SIZE(altas7_pin_groups),
3477 .funcs = (struct atlas7_pmx_func *)atlas7_pmx_functions,
3478 .funcs_cnt = ARRAY_SIZE(atlas7_pmx_functions),
3479 .confs = (struct atlas7_pad_config *)atlas7_ioc_pad_confs,
3480 .confs_cnt = ARRAY_SIZE(atlas7_ioc_pad_confs),
3481};
3482
3483static inline u32 atlas7_pin_to_bank(u32 pin)
3484{
3485 return (pin >= ATLAS7_PINCTRL_BANK_0_PINS) ? 1 : 0;
3486}
3487
3488static int atlas7_pmx_get_funcs_count(struct pinctrl_dev *pctldev)
3489{
3490 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
3491
3492 return pmx->pctl_data->funcs_cnt;
3493}
3494
3495static const char *atlas7_pmx_get_func_name(struct pinctrl_dev *pctldev,
3496 u32 selector)
3497{
3498 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
3499
3500 return pmx->pctl_data->funcs[selector].name;
3501}
3502
3503static int atlas7_pmx_get_func_groups(struct pinctrl_dev *pctldev,
3504 u32 selector, const char * const **groups,
3505 u32 * const num_groups)
3506{
3507 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
3508
3509 *groups = pmx->pctl_data->funcs[selector].groups;
3510 *num_groups = pmx->pctl_data->funcs[selector].num_groups;
3511
3512 return 0;
3513}
3514
3515static void __atlas7_pmx_pin_input_disable_set(struct atlas7_pmx *pmx,
3516 const struct atlas7_pad_mux *mux)
3517{
3518 /* Set Input Disable to avoid input glitches
3519 *
3520 * All Input-Disable Control registers are located on IOCRTC.
3521 * So the regs bank is always 0.
3522 *
3523 */
3524 if (mux->dinput_reg && mux->dinput_val_reg) {
3525 writel(DI_MASK << mux->dinput_bit,
3526 pmx->regs[BANK_DS] + CLR_REG(mux->dinput_reg));
3527 writel(DI_DISABLE << mux->dinput_bit,
3528 pmx->regs[BANK_DS] + mux->dinput_reg);
3529
3530
3531 writel(DIV_MASK << mux->dinput_val_bit,
3532 pmx->regs[BANK_DS] + CLR_REG(mux->dinput_val_reg));
3533 writel(DIV_DISABLE << mux->dinput_val_bit,
3534 pmx->regs[BANK_DS] + mux->dinput_val_reg);
3535 }
3536}
3537
3538static void __atlas7_pmx_pin_input_disable_clr(struct atlas7_pmx *pmx,
3539 const struct atlas7_pad_mux *mux)
3540{
3541 /* Clear Input Disable to avoid input glitches */
3542 if (mux->dinput_reg && mux->dinput_val_reg) {
3543 writel(DI_MASK << mux->dinput_bit,
3544 pmx->regs[BANK_DS] + CLR_REG(mux->dinput_reg));
3545 writel(DI_ENABLE << mux->dinput_bit,
3546 pmx->regs[BANK_DS] + mux->dinput_reg);
3547
3548 writel(DIV_MASK << mux->dinput_val_bit,
3549 pmx->regs[BANK_DS] + CLR_REG(mux->dinput_val_reg));
3550 writel(DIV_ENABLE << mux->dinput_val_bit,
3551 pmx->regs[BANK_DS] + mux->dinput_val_reg);
3552 }
3553}
3554
3555static int __atlas7_pmx_pin_ad_sel(struct atlas7_pmx *pmx,
3556 struct atlas7_pad_config *conf,
3557 u32 bank, u32 ad_sel)
3558{
3559 unsigned long regv;
3560
3561 /* Write to clear register to clear A/D selector */
3562 writel(ANA_CLEAR_MASK << conf->ad_ctrl_bit,
3563 pmx->regs[bank] + CLR_REG(conf->ad_ctrl_reg));
3564
3565 /* Set target pad A/D selector */
3566 regv = readl(pmx->regs[bank] + conf->ad_ctrl_reg);
3567 regv &= ~(ANA_CLEAR_MASK << conf->ad_ctrl_bit);
3568 writel(regv | (ad_sel << conf->ad_ctrl_bit),
3569 pmx->regs[bank] + conf->ad_ctrl_reg);
3570
3571 regv = readl(pmx->regs[bank] + conf->ad_ctrl_reg);
3572 pr_debug("bank:%d reg:0x%04x val:0x%08lx\n",
3573 bank, conf->ad_ctrl_reg, regv);
3574 return 0;
3575}
3576
3577static int __atlas7_pmx_pin_analog_enable(struct atlas7_pmx *pmx,
3578 struct atlas7_pad_config *conf, u32 bank)
3579{
3580 /* Only PAD_T_AD pins can change between Analogue&Digital */
3581 if (conf->type != PAD_T_AD)
3582 return -EINVAL;
3583
3584 return __atlas7_pmx_pin_ad_sel(pmx, conf, bank, 0);
3585}
3586
3587static int __atlas7_pmx_pin_digital_enable(struct atlas7_pmx *pmx,
3588 struct atlas7_pad_config *conf, u32 bank)
3589{
3590 /* Other type pads are always digital */
3591 if (conf->type != PAD_T_AD)
3592 return 0;
3593
3594 return __atlas7_pmx_pin_ad_sel(pmx, conf, bank, 1);
3595}
3596
3597static int __atlas7_pmx_pin_enable(struct atlas7_pmx *pmx,
3598 u32 pin, u32 func)
3599{
3600 struct atlas7_pad_config *conf;
3601 u32 bank;
3602 int ret;
3603 unsigned long regv;
3604
3605 pr_debug("PMX DUMP ### pin#%d func:%d #### START >>>\n",
3606 pin, func);
3607
3608 /* Get this Pad's descriptor from PINCTRL */
3609 conf = &pmx->pctl_data->confs[pin];
3610 bank = atlas7_pin_to_bank(pin);
3611
3612 /* Just enable the analog function of this pad */
3613 if (FUNC_ANALOGUE == func) {
3614 ret = __atlas7_pmx_pin_analog_enable(pmx, conf, bank);
3615 if (ret)
3616 dev_err(pmx->dev,
3617 "Convert pad#%d to analog failed, ret=%d\n",
3618 pin, ret);
3619 return ret;
3620 }
3621
3622 /* Set Pads from analog to digital */
3623 ret = __atlas7_pmx_pin_digital_enable(pmx, conf, bank);
3624 if (ret) {
3625 dev_err(pmx->dev,
3626 "Convert pad#%d to digital failed, ret=%d\n",
3627 pin, ret);
3628 return ret;
3629 }
3630
3631 /* Write to clear register to clear current function */
3632 writel(FUNC_CLEAR_MASK << conf->mux_bit,
3633 pmx->regs[bank] + CLR_REG(conf->mux_reg));
3634
3635 /* Set target pad mux function */
3636 regv = readl(pmx->regs[bank] + conf->mux_reg);
3637 regv &= ~(FUNC_CLEAR_MASK << conf->mux_bit);
3638 writel(regv | (func << conf->mux_bit),
3639 pmx->regs[bank] + conf->mux_reg);
3640
3641 regv = readl(pmx->regs[bank] + conf->mux_reg);
3642 pr_debug("bank:%d reg:0x%04x val:0x%08lx\n",
3643 bank, conf->mux_reg, regv);
3644
3645 return 0;
3646}
3647
3648static int atlas7_pmx_set_mux(struct pinctrl_dev *pctldev,
3649 u32 func_selector, u32 group_selector)
3650{
3651 int idx, ret;
3652 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
3653 struct atlas7_pmx_func *pmx_func;
3654 struct atlas7_pin_group *pin_grp;
3655 const struct atlas7_grp_mux *grp_mux;
3656 const struct atlas7_pad_mux *mux;
3657
3658 pmx_func = &pmx->pctl_data->funcs[func_selector];
3659 pin_grp = &pmx->pctl_data->grps[group_selector];
3660
3661 pr_debug("PMX DUMP ### Function:[%s] Group:[%s] #### START >>>\n",
3662 pmx_func->name, pin_grp->name);
3663
3664 grp_mux = pmx_func->grpmux;
3665
3666 for (idx = 0; idx < grp_mux->pad_mux_count; idx++) {
3667 mux = &grp_mux->pad_mux_list[idx];
3668 __atlas7_pmx_pin_input_disable_set(pmx, mux);
3669 ret = __atlas7_pmx_pin_enable(pmx, mux->pin, mux->func);
3670 if (ret) {
3671 dev_err(pmx->dev,
3672 "FUNC:%s GRP:%s PIN#%d.%d failed, ret=%d\n",
3673 pmx_func->name, pin_grp->name,
3674 mux->pin, mux->func, ret);
3675 BUG_ON(1);
3676 }
3677 __atlas7_pmx_pin_input_disable_clr(pmx, mux);
3678 }
3679 pr_debug("PMX DUMP ### Function:[%s] Group:[%s] #### END <<<\n",
3680 pmx_func->name, pin_grp->name);
3681
3682 return 0;
3683}
3684
3685struct atlas7_ds_info {
3686 u32 ma;
3687 u32 ds_16st;
3688 u32 ds_4we;
3689 u32 ds_0204m31;
3690 u32 ds_0610m31;
3691};
3692
3693const struct atlas7_ds_info atlas7_ds_map[] = {
3694 { 2, DS_16ST_0, DS_4WE_0, DS_M31_0, DS_NULL},
3695 { 4, DS_16ST_1, DS_NULL, DS_M31_1, DS_NULL},
3696 { 6, DS_16ST_2, DS_NULL, DS_NULL, DS_M31_0},
3697 { 8, DS_16ST_3, DS_4WE_1, DS_NULL, DS_NULL},
3698 { 10, DS_16ST_4, DS_NULL, DS_NULL, DS_M31_1},
3699 { 12, DS_16ST_5, DS_NULL, DS_NULL, DS_NULL},
3700 { 14, DS_16ST_6, DS_NULL, DS_NULL, DS_NULL},
3701 { 16, DS_16ST_7, DS_4WE_2, DS_NULL, DS_NULL},
3702 { 18, DS_16ST_8, DS_NULL, DS_NULL, DS_NULL},
3703 { 20, DS_16ST_9, DS_NULL, DS_NULL, DS_NULL},
3704 { 22, DS_16ST_10, DS_NULL, DS_NULL, DS_NULL},
3705 { 24, DS_16ST_11, DS_NULL, DS_NULL, DS_NULL},
3706 { 26, DS_16ST_12, DS_NULL, DS_NULL, DS_NULL},
3707 { 28, DS_16ST_13, DS_4WE_3, DS_NULL, DS_NULL},
3708 { 30, DS_16ST_14, DS_NULL, DS_NULL, DS_NULL},
3709 { 32, DS_16ST_15, DS_NULL, DS_NULL, DS_NULL},
3710};
3711
3712static u32 convert_current_to_drive_strength(u32 type, u32 ma)
3713{
3714 int idx;
3715
3716 for (idx = 0; idx < ARRAY_SIZE(atlas7_ds_map); idx++) {
3717 if (atlas7_ds_map[idx].ma != ma)
3718 continue;
3719
3720 if (type == PAD_T_4WE_PD || type == PAD_T_4WE_PU)
3721 return atlas7_ds_map[idx].ds_4we;
3722 else if (type == PAD_T_16ST)
3723 return atlas7_ds_map[idx].ds_16st;
3724 else if (type == PAD_T_M31_0204_PD || type == PAD_T_M31_0204_PU)
3725 return atlas7_ds_map[idx].ds_0204m31;
3726 else if (type == PAD_T_M31_0610_PD || type == PAD_T_M31_0610_PU)
3727 return atlas7_ds_map[idx].ds_0610m31;
3728 }
3729
3730 return DS_NULL;
3731}
3732
3733static int altas7_pinctrl_set_pull_sel(struct pinctrl_dev *pctldev,
3734 u32 pin, u32 sel)
3735{
3736 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
3737 struct atlas7_pad_config *conf = &pmx->pctl_data->confs[pin];
3738 u32 type = conf->type;
3739 u32 shift = conf->pupd_bit;
3740 u32 bank = atlas7_pin_to_bank(pin);
3741 void __iomem *pull_sel_reg, *pull_clr_reg;
3742
3743 pull_sel_reg = pmx->regs[bank] + conf->pupd_reg;
3744 pull_clr_reg = CLR_REG(pull_sel_reg);
3745
3746 if (type == PAD_T_4WE_PD || type == PAD_T_4WE_PU) {
3747 writel(P4WE_PULL_MASK << shift, pull_clr_reg);
3748
3749 if (sel == PULL_UP)
3750 writel(P4WE_PULL_UP << shift, pull_sel_reg);
3751 else if (sel == HIGH_HYSTERESIS)
3752 writel(P4WE_HIGH_HYSTERESIS << shift, pull_sel_reg);
3753 else if (sel == HIGH_Z)
3754 writel(P4WE_HIGH_Z << shift, pull_sel_reg);
3755 else if (sel == PULL_DOWN)
3756 writel(P4WE_PULL_DOWN << shift, pull_sel_reg);
3757 else {
3758 pr_err("Unknown Pull select type for 4WEPAD#%d\n",
3759 pin);
3760 return -ENOTSUPP;
3761 }
3762 } else if (type == PAD_T_16ST) {
3763 writel(P16ST_PULL_MASK << shift, pull_clr_reg);
3764
3765 if (sel == PULL_UP)
3766 writel(P16ST_PULL_UP << shift, pull_sel_reg);
3767 else if (sel == HIGH_Z)
3768 writel(P16ST_HIGH_Z << shift, pull_sel_reg);
3769 else if (sel == PULL_DOWN)
3770 writel(P16ST_PULL_DOWN << shift, pull_sel_reg);
3771 else {
3772 pr_err("Unknown Pull select type for 16STPAD#%d\n",
3773 pin);
3774 return -ENOTSUPP;
3775 }
3776 } else if (type == PAD_T_M31_0204_PD ||
3777 type == PAD_T_M31_0204_PU ||
3778 type == PAD_T_M31_0610_PD ||
3779 type == PAD_T_M31_0610_PU) {
3780 writel(PM31_PULL_MASK << shift, pull_clr_reg);
3781
3782 if (sel == PULL_UP)
3783 writel(PM31_PULL_ENABLED << shift, pull_sel_reg);
3784 else if (sel == PULL_DOWN)
3785 writel(PM31_PULL_DISABLED << shift, pull_sel_reg);
3786 else {
3787 pr_err("Unknown Pull select type for M31PAD#%d\n",
3788 pin);
3789 return -ENOTSUPP;
3790 }
3791 } else if (type == PAD_T_AD) {
3792 writel(PANGD_PULL_MASK << shift, pull_clr_reg);
3793
3794 if (sel == PULL_UP)
3795 writel(PANGD_PULL_UP << shift, pull_sel_reg);
3796 else if (sel == HIGH_Z)
3797 writel(PANGD_HIGH_Z << shift, pull_sel_reg);
3798 else if (sel == PULL_DOWN)
3799 writel(PANGD_PULL_DOWN << shift, pull_sel_reg);
3800 else {
3801 pr_err("Unknown Pull select type for A/D PAD#%d\n",
3802 pin);
3803 return -ENOTSUPP;
3804 }
3805 } else {
3806 pr_err("Unknown Pad type[%d] for pull select PAD#%d\n",
3807 type, pin);
3808 return -ENOTSUPP;
3809 }
3810
3811 pr_debug("PIN_CFG ### SET PIN#%d PULL SELECTOR:%d == OK ####\n",
3812 pin, sel);
3813 return 0;
3814}
3815
3816static int __altas7_pinctrl_set_drive_strength_sel(struct pinctrl_dev *pctldev,
3817 u32 pin, u32 sel)
3818{
3819 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
3820 struct atlas7_pad_config *conf = &pmx->pctl_data->confs[pin];
3821 u32 type = conf->type;
3822 u32 shift = conf->drvstr_bit;
3823 u32 bank = atlas7_pin_to_bank(pin);
3824 void __iomem *ds_sel_reg, *ds_clr_reg;
3825
3826 ds_sel_reg = pmx->regs[bank] + conf->drvstr_reg;
3827 ds_clr_reg = CLR_REG(ds_sel_reg);
3828 if (type == PAD_T_4WE_PD || type == PAD_T_4WE_PU) {
3829 if (sel & (~DS_2BIT_MASK))
3830 goto unsupport;
3831
3832 writel(DS_2BIT_IM_VAL << shift, ds_clr_reg);
3833 writel(sel << shift, ds_sel_reg);
3834
3835 return 0;
3836 } else if (type == PAD_T_16ST) {
3837 if (sel & (~DS_4BIT_MASK))
3838 goto unsupport;
3839
3840 writel(DS_4BIT_IM_VAL << shift, ds_clr_reg);
3841 writel(sel << shift, ds_sel_reg);
3842
3843 return 0;
3844 } else if (type == PAD_T_M31_0204_PD || type == PAD_T_M31_0204_PU ||
3845 type == PAD_T_M31_0610_PD || type == PAD_T_M31_0610_PU) {
3846 if (sel & (~DS_1BIT_MASK))
3847 goto unsupport;
3848
3849 writel(DS_1BIT_IM_VAL << shift, ds_clr_reg);
3850 writel(sel << shift, ds_sel_reg);
3851
3852 return 0;
3853 }
3854
3855unsupport:
3856 pr_err("Pad#%d type[%d] doesn't support ds code[%d]!\n",
3857 pin, type, sel);
3858 return -ENOTSUPP;
3859}
3860
3861static int altas7_pinctrl_set_drive_strength_sel(struct pinctrl_dev *pctldev,
3862 u32 pin, u32 ma)
3863{
3864 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
3865 struct atlas7_pad_config *conf = &pmx->pctl_data->confs[pin];
3866 u32 type = conf->type;
3867 u32 sel;
3868 int ret;
3869
3870 sel = convert_current_to_drive_strength(conf->type, ma);
3871 if (DS_NULL == sel) {
3872 pr_err("Pad#%d type[%d] doesn't support ds current[%d]!\n",
3873 pin, type, ma);
3874 return -ENOTSUPP;
3875 }
3876
3877 ret = __altas7_pinctrl_set_drive_strength_sel(pctldev,
3878 pin, sel);
3879 pr_debug("PIN_CFG ### SET PIN#%d DS:%d MA:%d == %s ####\n",
3880 pin, sel, ma, ret?"FAILED":"OK");
3881 return ret;
3882}
3883
3884static int atlas7_pmx_gpio_request_enable(struct pinctrl_dev *pctldev,
3885 struct pinctrl_gpio_range *range, u32 pin)
3886{
3887 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
3888 u32 idx;
3889
3890 dev_dbg(pmx->dev,
3891 "atlas7_pmx_gpio_request_enable: pin=%d\n", pin);
3892 for (idx = 0; idx < range->npins; idx++) {
3893 if (pin == range->pins[idx])
3894 break;
3895 }
3896
3897 if (idx >= range->npins) {
3898 dev_err(pmx->dev,
3899 "The pin#%d could not be requested as GPIO!!\n",
3900 pin);
3901 return -EPERM;
3902 }
3903
3904 __atlas7_pmx_pin_enable(pmx, pin, FUNC_GPIO);
3905
3906 return 0;
3907}
3908
3909static struct pinmux_ops atlas7_pinmux_ops = {
3910 .get_functions_count = atlas7_pmx_get_funcs_count,
3911 .get_function_name = atlas7_pmx_get_func_name,
3912 .get_function_groups = atlas7_pmx_get_func_groups,
3913 .set_mux = atlas7_pmx_set_mux,
3914 .gpio_request_enable = atlas7_pmx_gpio_request_enable,
3915};
3916
3917static int atlas7_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
3918{
3919 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
3920
3921 return pmx->pctl_data->grps_cnt;
3922}
3923
3924static const char *atlas7_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
3925 u32 group)
3926{
3927 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
3928
3929 return pmx->pctl_data->grps[group].name;
3930}
3931
3932static int atlas7_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
3933 u32 group, const u32 **pins, u32 *num_pins)
3934{
3935 struct atlas7_pmx *pmx = pinctrl_dev_get_drvdata(pctldev);
3936
3937 *num_pins = pmx->pctl_data->grps[group].num_pins;
3938 *pins = pmx->pctl_data->grps[group].pins;
3939
3940 return 0;
3941}
3942
3943static int atlas7_pinctrl_dt_node_to_map(struct pinctrl_dev *pctldev,
3944 struct device_node *np_config,
3945 struct pinctrl_map **map,
3946 u32 *num_maps)
3947{
3948 return pinconf_generic_dt_node_to_map(pctldev, np_config, map,
3949 num_maps, PIN_MAP_TYPE_INVALID);
3950}
3951
3952static void atlas7_pinctrl_dt_free_map(struct pinctrl_dev *pctldev,
3953 struct pinctrl_map *map, u32 num_maps)
3954{
3955 kfree(map);
3956}
3957
3958static const struct pinctrl_ops atlas7_pinctrl_ops = {
3959 .get_groups_count = atlas7_pinctrl_get_groups_count,
3960 .get_group_name = atlas7_pinctrl_get_group_name,
3961 .get_group_pins = atlas7_pinctrl_get_group_pins,
3962 .dt_node_to_map = atlas7_pinctrl_dt_node_to_map,
3963 .dt_free_map = atlas7_pinctrl_dt_free_map,
3964};
3965
3966static int atlas7_pin_config_set(struct pinctrl_dev *pctldev,
3967 unsigned pin, unsigned long *configs,
3968 unsigned num_configs)
3969{
3970 u16 param, arg;
3971 int idx, err;
3972
3973 for (idx = 0; idx < num_configs; idx++) {
3974 param = pinconf_to_config_param(configs[idx]);
3975 arg = pinconf_to_config_argument(configs[idx]);
3976
3977 pr_debug("PMX CFG###### ATLAS7 PIN#%d [%s] CONFIG PARAM:%d ARG:%d >>>>>\n",
3978 pin, atlas7_ioc_pads[pin].name, param, arg);
3979 switch (param) {
3980 case PIN_CONFIG_BIAS_PULL_UP:
3981 err = altas7_pinctrl_set_pull_sel(pctldev,
3982 pin, PULL_UP);
3983 if (err)
3984 return err;
3985 break;
3986
3987 case PIN_CONFIG_BIAS_PULL_DOWN:
3988 err = altas7_pinctrl_set_pull_sel(pctldev,
3989 pin, PULL_DOWN);
3990 if (err)
3991 return err;
3992 break;
3993
3994 case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
3995 err = altas7_pinctrl_set_pull_sel(pctldev,
3996 pin, HIGH_HYSTERESIS);
3997 if (err)
3998 return err;
3999 break;
4000 case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
4001 err = altas7_pinctrl_set_pull_sel(pctldev,
4002 pin, HIGH_Z);
4003 if (err)
4004 return err;
4005 break;
4006
4007 case PIN_CONFIG_DRIVE_STRENGTH:
4008 err = altas7_pinctrl_set_drive_strength_sel(pctldev,
4009 pin, arg);
4010 if (err)
4011 return err;
4012 break;
4013 default:
4014 return -ENOTSUPP;
4015 }
4016 pr_debug("PMX CFG###### ATLAS7 PIN#%d [%s] CONFIG PARAM:%d ARG:%d <<<<\n",
4017 pin, atlas7_ioc_pads[pin].name, param, arg);
4018 }
4019
4020 return 0;
4021}
4022
4023static int atlas7_pin_config_group_set(struct pinctrl_dev *pctldev,
4024 unsigned group, unsigned long *configs,
4025 unsigned num_configs)
4026{
4027 const unsigned *pins;
4028 unsigned npins;
4029 int i, ret;
4030
4031 ret = atlas7_pinctrl_get_group_pins(pctldev, group, &pins, &npins);
4032 if (ret)
4033 return ret;
4034 for (i = 0; i < npins; i++) {
4035 if (atlas7_pin_config_set(pctldev, pins[i],
4036 configs, num_configs))
4037 return -ENOTSUPP;
4038 }
4039 return 0;
4040}
4041
4042static const struct pinconf_ops atlas7_pinconf_ops = {
4043 .pin_config_set = atlas7_pin_config_set,
4044 .pin_config_group_set = atlas7_pin_config_group_set,
4045 .is_generic = true,
4046};
4047
4048static int atlas7_pinmux_probe(struct platform_device *pdev)
4049{
4050 int ret, idx;
4051 struct atlas7_pmx *pmx;
4052 struct device_node *np = pdev->dev.of_node;
4053 u32 banks = ATLAS7_PINCTRL_REG_BANKS;
4054
4055 /* Create state holders etc for this driver */
4056 pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL);
4057 if (!pmx)
4058 return -ENOMEM;
4059
4060 pmx->dev = &pdev->dev;
4061
4062 pmx->pctl_data = &atlas7_ioc_data;
4063 pmx->pctl_desc.name = "pinctrl-atlas7";
4064 pmx->pctl_desc.pins = pmx->pctl_data->pads;
4065 pmx->pctl_desc.npins = pmx->pctl_data->pads_cnt;
4066 pmx->pctl_desc.pctlops = &atlas7_pinctrl_ops;
4067 pmx->pctl_desc.pmxops = &atlas7_pinmux_ops;
4068 pmx->pctl_desc.confops = &atlas7_pinconf_ops;
4069
4070 for (idx = 0; idx < banks; idx++) {
4071 pmx->regs[idx] = of_iomap(np, idx);
4072 if (!pmx->regs[idx]) {
4073 dev_err(&pdev->dev,
4074 "can't map ioc bank#%d registers\n", idx);
4075 ret = -ENOMEM;
4076 goto unmap_io;
4077 }
4078 }
4079
4080 /* Now register the pin controller and all pins it handles */
4081 pmx->pctl = pinctrl_register(&pmx->pctl_desc, &pdev->dev, pmx);
4082 if (IS_ERR(pmx->pctl)) {
4083 dev_err(&pdev->dev, "could not register atlas7 pinmux driver\n");
4084 ret = PTR_ERR(pmx->pctl);
4085 goto unmap_io;
4086 }
4087
4088 platform_set_drvdata(pdev, pmx);
4089
4090 dev_info(&pdev->dev, "initialized atlas7 pinmux driver\n");
4091
4092 return 0;
4093
4094unmap_io:
4095 for (idx = 0; idx < banks; idx++) {
4096 if (!pmx->regs[idx])
4097 break;
4098 iounmap(pmx->regs[idx]);
4099 }
4100
4101 return ret;
4102}
4103
4104static const struct of_device_id atlas7_pinmux_ids[] = {
4105 { .compatible = "sirf,atlas7-ioc",},
4106};
4107
4108static struct platform_driver atlas7_pinmux_driver = {
4109 .driver = {
4110 .name = "atlas7-ioc",
4111 .of_match_table = atlas7_pinmux_ids,
4112 },
4113 .probe = atlas7_pinmux_probe,
4114};
4115
4116static int __init atlas7_pinmux_init(void)
4117{
4118 return platform_driver_register(&atlas7_pinmux_driver);
4119}
4120arch_initcall(atlas7_pinmux_init);
4121
4122
4123/**
4124 * The Following is GPIO Code
4125 */
4126static inline struct
4127atlas7_gpio_bank *atlas7_gpio_to_bank(struct atlas7_gpio_chip *a7gc, u32 gpio)
4128{
4129 return &a7gc->banks[GPIO_TO_BANK(gpio)];
4130}
4131
4132static int __atlas7_gpio_to_pin(struct atlas7_gpio_chip *a7gc, u32 gpio)
4133{
4134 struct atlas7_gpio_bank *bank;
4135 u32 ofs;
4136
4137 bank = atlas7_gpio_to_bank(a7gc, gpio);
4138 ofs = gpio - bank->gpio_offset;
4139 if (ofs >= bank->ngpio)
4140 return -ENODEV;
4141
4142 return bank->gpio_pins[ofs];
4143}
4144
4145static void atlas7_gpio_irq_ack(struct irq_data *d)
4146{
4147 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
4148 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(gc);
4149 struct atlas7_gpio_bank *bank;
4150 void __iomem *ctrl_reg;
4151 u32 val, pin_in_bank;
4152 unsigned long flags;
4153
4154 bank = atlas7_gpio_to_bank(a7gc, d->hwirq);
4155 pin_in_bank = d->hwirq - bank->gpio_offset;
4156 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin_in_bank);
4157
4158 spin_lock_irqsave(&a7gc->lock, flags);
4159
4160 val = readl(ctrl_reg);
4161 /* clear interrupt status */
4162 writel(val, ctrl_reg);
4163
4164 spin_unlock_irqrestore(&a7gc->lock, flags);
4165}
4166
4167static void __atlas7_gpio_irq_mask(struct atlas7_gpio_chip *a7gc, int idx)
4168{
4169 struct atlas7_gpio_bank *bank;
4170 void __iomem *ctrl_reg;
4171 u32 val, pin_in_bank;
4172
4173 bank = atlas7_gpio_to_bank(a7gc, idx);
4174 pin_in_bank = idx - bank->gpio_offset;
4175 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin_in_bank);
4176
4177 val = readl(ctrl_reg);
4178 val &= ~(ATLAS7_GPIO_CTL_INTR_EN_MASK |
4179 ATLAS7_GPIO_CTL_INTR_STATUS_MASK);
4180 writel(val, ctrl_reg);
4181}
4182
4183static void atlas7_gpio_irq_mask(struct irq_data *d)
4184{
4185 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
4186 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(gc);
4187 unsigned long flags;
4188
4189 spin_lock_irqsave(&a7gc->lock, flags);
4190
4191 __atlas7_gpio_irq_mask(a7gc, d->hwirq);
4192
4193 spin_unlock_irqrestore(&a7gc->lock, flags);
4194}
4195
4196static void atlas7_gpio_irq_unmask(struct irq_data *d)
4197{
4198 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
4199 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(gc);
4200 struct atlas7_gpio_bank *bank;
4201 void __iomem *ctrl_reg;
4202 u32 val, pin_in_bank;
4203 unsigned long flags;
4204
4205 bank = atlas7_gpio_to_bank(a7gc, d->hwirq);
4206 pin_in_bank = d->hwirq - bank->gpio_offset;
4207 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin_in_bank);
4208
4209 spin_lock_irqsave(&a7gc->lock, flags);
4210
4211 val = readl(ctrl_reg);
4212 val &= ~ATLAS7_GPIO_CTL_INTR_STATUS_MASK;
4213 val |= ATLAS7_GPIO_CTL_INTR_EN_MASK;
4214 writel(val, ctrl_reg);
4215
4216 spin_unlock_irqrestore(&a7gc->lock, flags);
4217}
4218
4219static int atlas7_gpio_irq_type(struct irq_data *d,
4220 unsigned int type)
4221{
4222 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
4223 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(gc);
4224 struct atlas7_gpio_bank *bank;
4225 void __iomem *ctrl_reg;
4226 u32 val, pin_in_bank;
4227 unsigned long flags;
4228
4229 bank = atlas7_gpio_to_bank(a7gc, d->hwirq);
4230 pin_in_bank = d->hwirq - bank->gpio_offset;
4231 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin_in_bank);
4232
4233 spin_lock_irqsave(&a7gc->lock, flags);
4234
4235 val = readl(ctrl_reg);
4236 val &= ~(ATLAS7_GPIO_CTL_INTR_STATUS_MASK |
4237 ATLAS7_GPIO_CTL_INTR_EN_MASK);
4238
4239 switch (type) {
4240 case IRQ_TYPE_NONE:
4241 break;
4242
4243 case IRQ_TYPE_EDGE_RISING:
4244 val |= ATLAS7_GPIO_CTL_INTR_HIGH_MASK |
4245 ATLAS7_GPIO_CTL_INTR_TYPE_MASK;
4246 val &= ~ATLAS7_GPIO_CTL_INTR_LOW_MASK;
4247 break;
4248
4249 case IRQ_TYPE_EDGE_FALLING:
4250 val &= ~ATLAS7_GPIO_CTL_INTR_HIGH_MASK;
4251 val |= ATLAS7_GPIO_CTL_INTR_LOW_MASK |
4252 ATLAS7_GPIO_CTL_INTR_TYPE_MASK;
4253 break;
4254
4255 case IRQ_TYPE_EDGE_BOTH:
4256 val |= ATLAS7_GPIO_CTL_INTR_HIGH_MASK |
4257 ATLAS7_GPIO_CTL_INTR_LOW_MASK |
4258 ATLAS7_GPIO_CTL_INTR_TYPE_MASK;
4259 break;
4260
4261 case IRQ_TYPE_LEVEL_LOW:
4262 val &= ~(ATLAS7_GPIO_CTL_INTR_HIGH_MASK |
4263 ATLAS7_GPIO_CTL_INTR_TYPE_MASK);
4264 val |= ATLAS7_GPIO_CTL_INTR_LOW_MASK;
4265 break;
4266
4267 case IRQ_TYPE_LEVEL_HIGH:
4268 val |= ATLAS7_GPIO_CTL_INTR_HIGH_MASK;
4269 val &= ~(ATLAS7_GPIO_CTL_INTR_LOW_MASK |
4270 ATLAS7_GPIO_CTL_INTR_TYPE_MASK);
4271 break;
4272 }
4273
4274 writel(val, ctrl_reg);
4275
4276 spin_unlock_irqrestore(&a7gc->lock, flags);
4277
4278 return 0;
4279}
4280
4281static struct irq_chip atlas7_gpio_irq_chip = {
4282 .name = "atlas7-gpio-irq",
4283 .irq_ack = atlas7_gpio_irq_ack,
4284 .irq_mask = atlas7_gpio_irq_mask,
4285 .irq_unmask = atlas7_gpio_irq_unmask,
4286 .irq_set_type = atlas7_gpio_irq_type,
4287};
4288
4289static void atlas7_gpio_handle_irq(unsigned int irq, struct irq_desc *desc)
4290{
4291 struct gpio_chip *gc = irq_desc_get_handler_data(desc);
4292 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(gc);
4293 struct atlas7_gpio_bank *bank = NULL;
4294 u32 status, ctrl;
4295 int pin_in_bank = 0, idx;
4296 struct irq_chip *chip = irq_get_chip(irq);
4297
4298 for (idx = 0; idx < a7gc->nbank; idx++) {
4299 bank = &a7gc->banks[idx];
4300 if (bank->irq == irq)
4301 break;
4302 }
4303 BUG_ON(idx == a7gc->nbank);
4304
4305 chained_irq_enter(chip, desc);
4306
4307 status = readl(ATLAS7_GPIO_INT_STATUS(bank));
4308 if (!status) {
4309 pr_warn("%s: gpio [%s] status %#x no interrupt is flaged\n",
4310 __func__, gc->label, status);
4311 handle_bad_irq(irq, desc);
4312 return;
4313 }
4314
4315 while (status) {
4316 ctrl = readl(ATLAS7_GPIO_CTRL(bank, pin_in_bank));
4317
4318 /*
4319 * Here we must check whether the corresponding GPIO's
4320 * interrupt has been enabled, otherwise just skip it
4321 */
4322 if ((status & 0x1) && (ctrl & ATLAS7_GPIO_CTL_INTR_EN_MASK)) {
4323 pr_debug("%s: chip[%s] gpio:%d happens\n",
4324 __func__, gc->label,
4325 bank->gpio_offset + pin_in_bank);
4326 generic_handle_irq(
4327 irq_find_mapping(gc->irqdomain,
4328 bank->gpio_offset + pin_in_bank));
4329 }
4330
4331 if (++pin_in_bank >= bank->ngpio)
4332 break;
4333
4334 status = status >> 1;
4335 }
4336
4337 chained_irq_exit(chip, desc);
4338}
4339
4340static void __atlas7_gpio_set_input(struct atlas7_gpio_chip *a7gc,
4341 unsigned int gpio)
4342{
4343 struct atlas7_gpio_bank *bank;
4344 void __iomem *ctrl_reg;
4345 u32 val, pin_in_bank;
4346
4347 bank = atlas7_gpio_to_bank(a7gc, gpio);
4348 pin_in_bank = gpio - bank->gpio_offset;
4349 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin_in_bank);
4350
4351 val = readl(ctrl_reg);
4352 val &= ~ATLAS7_GPIO_CTL_OUT_EN_MASK;
4353 writel(val, ctrl_reg);
4354}
4355
4356static int atlas7_gpio_request(struct gpio_chip *chip,
4357 unsigned int gpio)
4358{
4359 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(chip);
4360 int ret;
4361 unsigned long flags;
4362
4363 ret = __atlas7_gpio_to_pin(a7gc, gpio);
4364 if (ret < 0)
4365 return ret;
4366
4367 if (pinctrl_request_gpio(chip->base + gpio))
4368 return -ENODEV;
4369
4370 spin_lock_irqsave(&a7gc->lock, flags);
4371
4372 /*
4373 * default status:
4374 * set direction as input and mask irq
4375 */
4376 __atlas7_gpio_set_input(a7gc, gpio);
4377 __atlas7_gpio_irq_mask(a7gc, gpio);
4378
4379 spin_unlock_irqrestore(&a7gc->lock, flags);
4380
4381 return 0;
4382}
4383
4384static void atlas7_gpio_free(struct gpio_chip *chip,
4385 unsigned int gpio)
4386{
4387 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(chip);
4388 unsigned long flags;
4389
4390 spin_lock_irqsave(&a7gc->lock, flags);
4391
4392 __atlas7_gpio_irq_mask(a7gc, gpio);
4393 __atlas7_gpio_set_input(a7gc, gpio);
4394
4395 spin_unlock_irqrestore(&a7gc->lock, flags);
4396
4397 pinctrl_free_gpio(chip->base + gpio);
4398}
4399
4400static int atlas7_gpio_direction_input(struct gpio_chip *chip,
4401 unsigned int gpio)
4402{
4403 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(chip);
4404 unsigned long flags;
4405
4406 spin_lock_irqsave(&a7gc->lock, flags);
4407
4408 __atlas7_gpio_set_input(a7gc, gpio);
4409
4410 spin_unlock_irqrestore(&a7gc->lock, flags);
4411
4412 return 0;
4413}
4414
4415static void __atlas7_gpio_set_output(struct atlas7_gpio_chip *a7gc,
4416 unsigned int gpio, int value)
4417{
4418 struct atlas7_gpio_bank *bank;
4419 void __iomem *ctrl_reg;
4420 u32 out_ctrl, pin_in_bank;
4421
4422 bank = atlas7_gpio_to_bank(a7gc, gpio);
4423 pin_in_bank = gpio - bank->gpio_offset;
4424 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin_in_bank);
4425
4426 out_ctrl = readl(ctrl_reg);
4427 if (value)
4428 out_ctrl |= ATLAS7_GPIO_CTL_DATAOUT_MASK;
4429 else
4430 out_ctrl &= ~ATLAS7_GPIO_CTL_DATAOUT_MASK;
4431
4432 out_ctrl &= ~ATLAS7_GPIO_CTL_INTR_EN_MASK;
4433 out_ctrl |= ATLAS7_GPIO_CTL_OUT_EN_MASK;
4434 writel(out_ctrl, ctrl_reg);
4435}
4436
4437static int atlas7_gpio_direction_output(struct gpio_chip *chip,
4438 unsigned int gpio, int value)
4439{
4440 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(chip);
4441 unsigned long flags;
4442
4443 spin_lock_irqsave(&a7gc->lock, flags);
4444
4445 __atlas7_gpio_set_output(a7gc, gpio, value);
4446
4447 spin_unlock_irqrestore(&a7gc->lock, flags);
4448
4449 return 0;
4450}
4451
4452static int atlas7_gpio_get_value(struct gpio_chip *chip,
4453 unsigned int gpio)
4454{
4455 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(chip);
4456 struct atlas7_gpio_bank *bank;
4457 u32 val, pin_in_bank;
4458 unsigned long flags;
4459
4460 bank = atlas7_gpio_to_bank(a7gc, gpio);
4461 pin_in_bank = gpio - bank->gpio_offset;
4462
4463 spin_lock_irqsave(&a7gc->lock, flags);
4464
4465 val = readl(ATLAS7_GPIO_CTRL(bank, pin_in_bank));
4466
4467 spin_unlock_irqrestore(&a7gc->lock, flags);
4468
4469 return !!(val & ATLAS7_GPIO_CTL_DATAIN_MASK);
4470}
4471
4472static void atlas7_gpio_set_value(struct gpio_chip *chip,
4473 unsigned int gpio, int value)
4474{
4475 struct atlas7_gpio_chip *a7gc = to_atlas7_gpio(chip);
4476 struct atlas7_gpio_bank *bank;
4477 void __iomem *ctrl_reg;
4478 u32 ctrl, pin_in_bank;
4479 unsigned long flags;
4480
4481 bank = atlas7_gpio_to_bank(a7gc, gpio);
4482 pin_in_bank = gpio - bank->gpio_offset;
4483 ctrl_reg = ATLAS7_GPIO_CTRL(bank, pin_in_bank);
4484
4485 spin_lock_irqsave(&a7gc->lock, flags);
4486
4487 ctrl = readl(ctrl_reg);
4488 if (value)
4489 ctrl |= ATLAS7_GPIO_CTL_DATAOUT_MASK;
4490 else
4491 ctrl &= ~ATLAS7_GPIO_CTL_DATAOUT_MASK;
4492 writel(ctrl, ctrl_reg);
4493
4494 spin_unlock_irqrestore(&a7gc->lock, flags);
4495}
4496
4497static const struct of_device_id atlas7_gpio_ids[] = {
4498 { .compatible = "sirf,atlas7-gpio", },
4499};
4500
4501static int atlas7_gpio_probe(struct platform_device *pdev)
4502{
4503 struct device_node *np = pdev->dev.of_node;
4504 struct atlas7_gpio_chip *a7gc;
4505 struct gpio_chip *chip;
4506 u32 nbank;
4507 int ret, idx;
4508
4509 ret = of_property_read_u32(np, "gpio-banks", &nbank);
4510 if (ret) {
4511 dev_err(&pdev->dev,
4512 "Could not find GPIO bank info,ret=%d!\n",
4513 ret);
4514 return ret;
4515 }
4516
4517 /* retrieve gpio descriptor data */
4518 a7gc = devm_kzalloc(&pdev->dev, sizeof(*a7gc) +
4519 sizeof(struct atlas7_gpio_bank) * nbank, GFP_KERNEL);
4520 if (!a7gc)
4521 return -ENOMEM;
4522
4523 /* Get Gpio clk */
4524 a7gc->clk = of_clk_get(np, 0);
4525 if (!IS_ERR(a7gc->clk)) {
4526 ret = clk_prepare_enable(a7gc->clk);
4527 if (ret) {
4528 dev_err(&pdev->dev,
4529 "Could not enable clock!\n");
4530 return ret;
4531 }
4532 }
4533
4534 /* Get Gpio Registers */
4535 a7gc->reg = of_iomap(np, 0);
4536 if (!a7gc->reg) {
4537 dev_err(&pdev->dev, "Could not map GPIO Registers!\n");
4538 return -ENOMEM;
4539 }
4540
4541 a7gc->nbank = nbank;
4542 spin_lock_init(&a7gc->lock);
4543
4544 /* Setup GPIO Chip */
4545 chip = &a7gc->chip;
4546 chip->request = atlas7_gpio_request;
4547 chip->free = atlas7_gpio_free;
4548 chip->direction_input = atlas7_gpio_direction_input;
4549 chip->get = atlas7_gpio_get_value;
4550 chip->direction_output = atlas7_gpio_direction_output;
4551 chip->set = atlas7_gpio_set_value;
4552 chip->base = -1;
4553 /* Each chip can support 32 pins at one bank */
4554 chip->ngpio = NGPIO_OF_BANK * nbank;
4555 chip->label = kstrdup(np->name, GFP_KERNEL);
4556 chip->of_node = np;
4557 chip->of_gpio_n_cells = 2;
4558 chip->dev = &pdev->dev;
4559
4560 /* Add gpio chip to system */
4561 ret = gpiochip_add(chip);
4562 if (ret) {
4563 dev_err(&pdev->dev,
4564 "%s: error in probe function with status %d\n",
4565 np->name, ret);
4566 goto failed;
4567 }
4568
4569 /* Add gpio chip to irq subsystem */
4570 ret = gpiochip_irqchip_add(chip, &atlas7_gpio_irq_chip,
4571 0, handle_level_irq, IRQ_TYPE_NONE);
4572 if (ret) {
4573 dev_err(&pdev->dev,
4574 "could not connect irqchip to gpiochip\n");
4575 goto failed;
4576 }
4577
4578 for (idx = 0; idx < nbank; idx++) {
4579 struct gpio_pin_range *pin_range;
4580 struct atlas7_gpio_bank *bank;
4581
4582 bank = &a7gc->banks[idx];
4583 /* Set ctrl registers' base of this bank */
4584 bank->base = ATLAS7_GPIO_BASE(a7gc, idx);
4585
4586 /* Get interrupt number from DTS */
4587 ret = of_irq_get(np, idx);
4588 if (ret == -EPROBE_DEFER) {
4589 dev_err(&pdev->dev,
4590 "Unable to find IRQ number. ret=%d\n", ret);
4591 goto failed;
4592 }
4593 bank->irq = ret;
4594
4595 gpiochip_set_chained_irqchip(chip, &atlas7_gpio_irq_chip,
4596 bank->irq, atlas7_gpio_handle_irq);
4597
4598 /* Records gpio_pin_range to a7gc */
4599 list_for_each_entry(pin_range, &chip->pin_ranges, node) {
4600 struct pinctrl_gpio_range *range;
4601
4602 range = &pin_range->range;
4603 if (range->id == NGPIO_OF_BANK * idx) {
4604 bank->gpio_offset = range->id;
4605 bank->ngpio = range->npins;
4606 bank->gpio_pins = range->pins;
4607 bank->pctldev = pin_range->pctldev;
4608 break;
4609 }
4610 }
4611
4612 BUG_ON(!bank->pctldev);
4613 }
4614
4615 dev_info(&pdev->dev, "add to system.\n");
4616 return 0;
4617failed:
4618 return ret;
4619}
4620
4621static struct platform_driver atlas7_gpio_driver = {
4622 .driver = {
4623 .name = "atlas7-gpio",
4624 .owner = THIS_MODULE,
4625 .of_match_table = atlas7_gpio_ids,
4626 },
4627 .probe = atlas7_gpio_probe,
4628};
4629
4630static int __init atlas7_gpio_init(void)
4631{
4632 return platform_driver_register(&atlas7_gpio_driver);
4633}
4634subsys_initcall(atlas7_gpio_init);
4635
4636MODULE_DESCRIPTION("SIRFSOC Atlas7 pin control driver");
4637MODULE_LICENSE("GPL");
diff --git a/drivers/pinctrl/sirf/pinctrl-sirf.c b/drivers/pinctrl/sirf/pinctrl-sirf.c
index e2efbbae4061..8ba26e45499a 100644
--- a/drivers/pinctrl/sirf/pinctrl-sirf.c
+++ b/drivers/pinctrl/sirf/pinctrl-sirf.c
@@ -310,9 +310,9 @@ static int sirfsoc_pinmux_probe(struct platform_device *pdev)
310 310
311 /* Now register the pin controller and all pins it handles */ 311 /* Now register the pin controller and all pins it handles */
312 spmx->pmx = pinctrl_register(&sirfsoc_pinmux_desc, &pdev->dev, spmx); 312 spmx->pmx = pinctrl_register(&sirfsoc_pinmux_desc, &pdev->dev, spmx);
313 if (!spmx->pmx) { 313 if (IS_ERR(spmx->pmx)) {
314 dev_err(&pdev->dev, "could not register SIRFSOC pinmux driver\n"); 314 dev_err(&pdev->dev, "could not register SIRFSOC pinmux driver\n");
315 ret = -EINVAL; 315 ret = PTR_ERR(spmx->pmx);
316 goto out_no_pmx; 316 goto out_no_pmx;
317 } 317 }
318 318
diff --git a/drivers/pinctrl/spear/pinctrl-spear.c b/drivers/pinctrl/spear/pinctrl-spear.c
index abdb05ac43dc..f87a5eaf75da 100644
--- a/drivers/pinctrl/spear/pinctrl-spear.c
+++ b/drivers/pinctrl/spear/pinctrl-spear.c
@@ -396,9 +396,9 @@ int spear_pinctrl_probe(struct platform_device *pdev,
396 spear_pinctrl_desc.npins = machdata->npins; 396 spear_pinctrl_desc.npins = machdata->npins;
397 397
398 pmx->pctl = pinctrl_register(&spear_pinctrl_desc, &pdev->dev, pmx); 398 pmx->pctl = pinctrl_register(&spear_pinctrl_desc, &pdev->dev, pmx);
399 if (!pmx->pctl) { 399 if (IS_ERR(pmx->pctl)) {
400 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n"); 400 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
401 return -ENODEV; 401 return PTR_ERR(pmx->pctl);
402 } 402 }
403 403
404 return 0; 404 return 0;
diff --git a/drivers/pinctrl/sunxi/Kconfig b/drivers/pinctrl/sunxi/Kconfig
index 2eb893e0ea1e..ae27872ff3a6 100644
--- a/drivers/pinctrl/sunxi/Kconfig
+++ b/drivers/pinctrl/sunxi/Kconfig
@@ -38,6 +38,10 @@ config PINCTRL_SUN8I_A23
38 def_bool MACH_SUN8I 38 def_bool MACH_SUN8I
39 select PINCTRL_SUNXI_COMMON 39 select PINCTRL_SUNXI_COMMON
40 40
41config PINCTRL_SUN8I_A33
42 def_bool MACH_SUN8I
43 select PINCTRL_SUNXI_COMMON
44
41config PINCTRL_SUN8I_A23_R 45config PINCTRL_SUN8I_A23_R
42 def_bool MACH_SUN8I 46 def_bool MACH_SUN8I
43 depends on RESET_CONTROLLER 47 depends on RESET_CONTROLLER
diff --git a/drivers/pinctrl/sunxi/Makefile b/drivers/pinctrl/sunxi/Makefile
index b796d579dce6..227a1213947c 100644
--- a/drivers/pinctrl/sunxi/Makefile
+++ b/drivers/pinctrl/sunxi/Makefile
@@ -11,4 +11,5 @@ obj-$(CONFIG_PINCTRL_SUN6I_A31_R) += pinctrl-sun6i-a31-r.o
11obj-$(CONFIG_PINCTRL_SUN7I_A20) += pinctrl-sun7i-a20.o 11obj-$(CONFIG_PINCTRL_SUN7I_A20) += pinctrl-sun7i-a20.o
12obj-$(CONFIG_PINCTRL_SUN8I_A23) += pinctrl-sun8i-a23.o 12obj-$(CONFIG_PINCTRL_SUN8I_A23) += pinctrl-sun8i-a23.o
13obj-$(CONFIG_PINCTRL_SUN8I_A23_R) += pinctrl-sun8i-a23-r.o 13obj-$(CONFIG_PINCTRL_SUN8I_A23_R) += pinctrl-sun8i-a23-r.o
14obj-$(CONFIG_PINCTRL_SUN8I_A33) += pinctrl-sun8i-a33.o
14obj-$(CONFIG_PINCTRL_SUN9I_A80) += pinctrl-sun9i-a80.o 15obj-$(CONFIG_PINCTRL_SUN9I_A80) += pinctrl-sun9i-a80.o
diff --git a/drivers/pinctrl/sunxi/pinctrl-sun6i-a31s.c b/drivers/pinctrl/sunxi/pinctrl-sun6i-a31s.c
index d3725dcd6979..e570d5c93ecc 100644
--- a/drivers/pinctrl/sunxi/pinctrl-sun6i-a31s.c
+++ b/drivers/pinctrl/sunxi/pinctrl-sun6i-a31s.c
@@ -804,7 +804,6 @@ static struct platform_driver sun6i_a31s_pinctrl_driver = {
804 .probe = sun6i_a31s_pinctrl_probe, 804 .probe = sun6i_a31s_pinctrl_probe,
805 .driver = { 805 .driver = {
806 .name = "sun6i-a31s-pinctrl", 806 .name = "sun6i-a31s-pinctrl",
807 .owner = THIS_MODULE,
808 .of_match_table = sun6i_a31s_pinctrl_match, 807 .of_match_table = sun6i_a31s_pinctrl_match,
809 }, 808 },
810}; 809};
diff --git a/drivers/pinctrl/sunxi/pinctrl-sun8i-a33.c b/drivers/pinctrl/sunxi/pinctrl-sun8i-a33.c
new file mode 100644
index 000000000000..00265f0435a7
--- /dev/null
+++ b/drivers/pinctrl/sunxi/pinctrl-sun8i-a33.c
@@ -0,0 +1,513 @@
1/*
2 * Allwinner a33 SoCs pinctrl driver.
3 *
4 * Copyright (C) 2015 Vishnu Patekar <vishnupatekar0510@gmail.com>
5 *
6 * Based on pinctrl-sun8i-a23.c, which is:
7 * Copyright (C) 2014 Chen-Yu Tsai <wens@csie.org>
8 * Copyright (C) 2014 Maxime Ripard <maxime.ripard@free-electrons.com>
9 *
10 * This file is licensed under the terms of the GNU General Public
11 * License version 2. This program is licensed "as is" without any
12 * warranty of any kind, whether express or implied.
13 */
14
15#include <linux/module.h>
16#include <linux/platform_device.h>
17#include <linux/of.h>
18#include <linux/of_device.h>
19#include <linux/pinctrl/pinctrl.h>
20
21#include "pinctrl-sunxi.h"
22
23static const struct sunxi_desc_pin sun8i_a33_pins[] = {
24 /* Hole */
25 SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0),
26 SUNXI_FUNCTION(0x0, "gpio_in"),
27 SUNXI_FUNCTION(0x1, "gpio_out"),
28 SUNXI_FUNCTION(0x2, "uart2"), /* TX */
29 SUNXI_FUNCTION(0x3, "uart0"), /* TX */
30 SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 0)), /* PB_EINT0 */
31 SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1),
32 SUNXI_FUNCTION(0x0, "gpio_in"),
33 SUNXI_FUNCTION(0x1, "gpio_out"),
34 SUNXI_FUNCTION(0x2, "uart2"), /* RX */
35 SUNXI_FUNCTION(0x3, "uart0"), /* RX */
36 SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 1)), /* PB_EINT1 */
37 SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 2),
38 SUNXI_FUNCTION(0x0, "gpio_in"),
39 SUNXI_FUNCTION(0x1, "gpio_out"),
40 SUNXI_FUNCTION(0x2, "uart2"), /* RTS */
41 SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 2)), /* PB_EINT2 */
42 SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 3),
43 SUNXI_FUNCTION(0x0, "gpio_in"),
44 SUNXI_FUNCTION(0x1, "gpio_out"),
45 SUNXI_FUNCTION(0x2, "uart2"), /* CTS */
46 SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 3)), /* PB_EINT3 */
47 SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 4),
48 SUNXI_FUNCTION(0x0, "gpio_in"),
49 SUNXI_FUNCTION(0x1, "gpio_out"),
50 SUNXI_FUNCTION(0x2, "i2s0"), /* SYNC */
51 SUNXI_FUNCTION(0x3, "aif2"), /* SYNC */
52 SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 4)), /* PB_EINT4 */
53 SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 5),
54 SUNXI_FUNCTION(0x0, "gpio_in"),
55 SUNXI_FUNCTION(0x1, "gpio_out"),
56 SUNXI_FUNCTION(0x2, "i2s0"), /* BCLK */
57 SUNXI_FUNCTION(0x3, "aif2"), /* BCLK */
58 SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 5)), /* PB_EINT5 */
59 SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 6),
60 SUNXI_FUNCTION(0x0, "gpio_in"),
61 SUNXI_FUNCTION(0x1, "gpio_out"),
62 SUNXI_FUNCTION(0x2, "i2s0"), /* DOUT */
63 SUNXI_FUNCTION(0x3, "aif2"), /* DOUT */
64 SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 6)), /* PB_EINT6 */
65 SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 7),
66 SUNXI_FUNCTION(0x0, "gpio_in"),
67 SUNXI_FUNCTION(0x1, "gpio_out"),
68 SUNXI_FUNCTION(0x2, "i2s0"), /* DIN */
69 SUNXI_FUNCTION(0x3, "aif2"), /* DIN */
70 SUNXI_FUNCTION_IRQ_BANK(0x4, 0, 7)), /* PB_EINT7 */
71 /* Hole */
72 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),
73 SUNXI_FUNCTION(0x0, "gpio_in"),
74 SUNXI_FUNCTION(0x1, "gpio_out"),
75 SUNXI_FUNCTION(0x2, "nand0"), /* WE */
76 SUNXI_FUNCTION(0x3, "spi0")), /* MOSI */
77 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1),
78 SUNXI_FUNCTION(0x0, "gpio_in"),
79 SUNXI_FUNCTION(0x1, "gpio_out"),
80 SUNXI_FUNCTION(0x2, "nand0"), /* ALE */
81 SUNXI_FUNCTION(0x3, "spi0")), /* MISO */
82 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2),
83 SUNXI_FUNCTION(0x0, "gpio_in"),
84 SUNXI_FUNCTION(0x1, "gpio_out"),
85 SUNXI_FUNCTION(0x2, "nand0"), /* CLE */
86 SUNXI_FUNCTION(0x3, "spi0")), /* CLK */
87 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3),
88 SUNXI_FUNCTION(0x0, "gpio_in"),
89 SUNXI_FUNCTION(0x1, "gpio_out"),
90 SUNXI_FUNCTION(0x2, "nand0"), /* CE1 */
91 SUNXI_FUNCTION(0x3, "spi0")), /* CS */
92 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4),
93 SUNXI_FUNCTION(0x0, "gpio_in"),
94 SUNXI_FUNCTION(0x1, "gpio_out"),
95 SUNXI_FUNCTION(0x2, "nand0")), /* CE0 */
96 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5),
97 SUNXI_FUNCTION(0x0, "gpio_in"),
98 SUNXI_FUNCTION(0x1, "gpio_out"),
99 SUNXI_FUNCTION(0x2, "nand0"), /* RE */
100 SUNXI_FUNCTION(0x3, "mmc2")), /* CLK */
101 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6),
102 SUNXI_FUNCTION(0x0, "gpio_in"),
103 SUNXI_FUNCTION(0x1, "gpio_out"),
104 SUNXI_FUNCTION(0x2, "nand0"), /* RB0 */
105 SUNXI_FUNCTION(0x3, "mmc2")), /* CMD */
106 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7),
107 SUNXI_FUNCTION(0x0, "gpio_in"),
108 SUNXI_FUNCTION(0x1, "gpio_out"),
109 SUNXI_FUNCTION(0x2, "nand0")), /* RB1 */
110 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 8),
111 SUNXI_FUNCTION(0x0, "gpio_in"),
112 SUNXI_FUNCTION(0x1, "gpio_out"),
113 SUNXI_FUNCTION(0x2, "nand0"), /* DQ0 */
114 SUNXI_FUNCTION(0x3, "mmc2")), /* D0 */
115 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 9),
116 SUNXI_FUNCTION(0x0, "gpio_in"),
117 SUNXI_FUNCTION(0x1, "gpio_out"),
118 SUNXI_FUNCTION(0x2, "nand0"), /* DQ1 */
119 SUNXI_FUNCTION(0x3, "mmc2")), /* D1 */
120 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 10),
121 SUNXI_FUNCTION(0x0, "gpio_in"),
122 SUNXI_FUNCTION(0x1, "gpio_out"),
123 SUNXI_FUNCTION(0x2, "nand0"), /* DQ2 */
124 SUNXI_FUNCTION(0x3, "mmc2")), /* D2 */
125 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 11),
126 SUNXI_FUNCTION(0x0, "gpio_in"),
127 SUNXI_FUNCTION(0x1, "gpio_out"),
128 SUNXI_FUNCTION(0x2, "nand0"), /* DQ3 */
129 SUNXI_FUNCTION(0x3, "mmc2")), /* D3 */
130 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 12),
131 SUNXI_FUNCTION(0x0, "gpio_in"),
132 SUNXI_FUNCTION(0x1, "gpio_out"),
133 SUNXI_FUNCTION(0x2, "nand0"), /* DQ4 */
134 SUNXI_FUNCTION(0x3, "mmc2")), /* D4 */
135 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 13),
136 SUNXI_FUNCTION(0x0, "gpio_in"),
137 SUNXI_FUNCTION(0x1, "gpio_out"),
138 SUNXI_FUNCTION(0x2, "nand0"), /* DQ5 */
139 SUNXI_FUNCTION(0x3, "mmc2")), /* D5 */
140 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14),
141 SUNXI_FUNCTION(0x0, "gpio_in"),
142 SUNXI_FUNCTION(0x1, "gpio_out"),
143 SUNXI_FUNCTION(0x2, "nand"), /* DQ6 */
144 SUNXI_FUNCTION(0x3, "mmc2")), /* D6 */
145 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15),
146 SUNXI_FUNCTION(0x0, "gpio_in"),
147 SUNXI_FUNCTION(0x1, "gpio_out"),
148 SUNXI_FUNCTION(0x2, "nand"), /* DQ7 */
149 SUNXI_FUNCTION(0x3, "mmc2")), /* D7 */
150 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16),
151 SUNXI_FUNCTION(0x0, "gpio_in"),
152 SUNXI_FUNCTION(0x1, "gpio_out"),
153 SUNXI_FUNCTION(0x2, "nand"), /* DQS */
154 SUNXI_FUNCTION(0x3, "mmc2")), /* RST */
155 /* Hole */
156 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),
157 SUNXI_FUNCTION(0x0, "gpio_in"),
158 SUNXI_FUNCTION(0x1, "gpio_out"),
159 SUNXI_FUNCTION(0x2, "lcd0"), /* D2 */
160 SUNXI_FUNCTION(0x3, "mmc1")), /* CLK */
161 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3),
162 SUNXI_FUNCTION(0x0, "gpio_in"),
163 SUNXI_FUNCTION(0x1, "gpio_out"),
164 SUNXI_FUNCTION(0x2, "lcd0"), /* D3 */
165 SUNXI_FUNCTION(0x3, "mmc1")), /* CMD */
166 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4),
167 SUNXI_FUNCTION(0x0, "gpio_in"),
168 SUNXI_FUNCTION(0x1, "gpio_out"),
169 SUNXI_FUNCTION(0x2, "lcd0"), /* D4 */
170 SUNXI_FUNCTION(0x3, "mmc1")), /* D0 */
171 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5),
172 SUNXI_FUNCTION(0x0, "gpio_in"),
173 SUNXI_FUNCTION(0x1, "gpio_out"),
174 SUNXI_FUNCTION(0x2, "lcd0"), /* D5 */
175 SUNXI_FUNCTION(0x3, "mmc1")), /* D1 */
176 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6),
177 SUNXI_FUNCTION(0x0, "gpio_in"),
178 SUNXI_FUNCTION(0x1, "gpio_out"),
179 SUNXI_FUNCTION(0x2, "lcd0"), /* D6 */
180 SUNXI_FUNCTION(0x3, "mmc1")), /* D2 */
181 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7),
182 SUNXI_FUNCTION(0x0, "gpio_in"),
183 SUNXI_FUNCTION(0x1, "gpio_out"),
184 SUNXI_FUNCTION(0x2, "lcd0"), /* D7 */
185 SUNXI_FUNCTION(0x3, "mmc1")), /* D3 */
186 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10),
187 SUNXI_FUNCTION(0x0, "gpio_in"),
188 SUNXI_FUNCTION(0x1, "gpio_out"),
189 SUNXI_FUNCTION(0x2, "lcd0"), /* D10 */
190 SUNXI_FUNCTION(0x3, "uart1")), /* TX */
191 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11),
192 SUNXI_FUNCTION(0x0, "gpio_in"),
193 SUNXI_FUNCTION(0x1, "gpio_out"),
194 SUNXI_FUNCTION(0x2, "lcd0"), /* D11 */
195 SUNXI_FUNCTION(0x3, "uart1")), /* RX */
196 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12),
197 SUNXI_FUNCTION(0x0, "gpio_in"),
198 SUNXI_FUNCTION(0x1, "gpio_out"),
199 SUNXI_FUNCTION(0x2, "lcd0"), /* D12 */
200 SUNXI_FUNCTION(0x3, "uart1")), /* RTS */
201 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13),
202 SUNXI_FUNCTION(0x0, "gpio_in"),
203 SUNXI_FUNCTION(0x1, "gpio_out"),
204 SUNXI_FUNCTION(0x2, "lcd0"), /* D13 */
205 SUNXI_FUNCTION(0x3, "uart1")), /* CTS */
206 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14),
207 SUNXI_FUNCTION(0x0, "gpio_in"),
208 SUNXI_FUNCTION(0x1, "gpio_out"),
209 SUNXI_FUNCTION(0x2, "lcd0")), /* D14 */
210 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),
211 SUNXI_FUNCTION(0x0, "gpio_in"),
212 SUNXI_FUNCTION(0x1, "gpio_out"),
213 SUNXI_FUNCTION(0x2, "lcd0")), /* D15 */
214 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18),
215 SUNXI_FUNCTION(0x0, "gpio_in"),
216 SUNXI_FUNCTION(0x1, "gpio_out"),
217 SUNXI_FUNCTION(0x2, "lcd0"), /* D18 */
218 SUNXI_FUNCTION(0x3, "lvds0")), /* VP0 */
219 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19),
220 SUNXI_FUNCTION(0x0, "gpio_in"),
221 SUNXI_FUNCTION(0x1, "gpio_out"),
222 SUNXI_FUNCTION(0x2, "lcd0"), /* D19 */
223 SUNXI_FUNCTION(0x3, "lvds0")), /* VN0 */
224 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20),
225 SUNXI_FUNCTION(0x0, "gpio_in"),
226 SUNXI_FUNCTION(0x1, "gpio_out"),
227 SUNXI_FUNCTION(0x2, "lcd0"), /* D20 */
228 SUNXI_FUNCTION(0x3, "lvds0")), /* VP1 */
229 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 21),
230 SUNXI_FUNCTION(0x0, "gpio_in"),
231 SUNXI_FUNCTION(0x1, "gpio_out"),
232 SUNXI_FUNCTION(0x2, "lcd0"), /* D21 */
233 SUNXI_FUNCTION(0x3, "lvds0")), /* VN1 */
234 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 22),
235 SUNXI_FUNCTION(0x0, "gpio_in"),
236 SUNXI_FUNCTION(0x1, "gpio_out"),
237 SUNXI_FUNCTION(0x2, "lcd0"), /* D22 */
238 SUNXI_FUNCTION(0x3, "lvds0")), /* VP2 */
239 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 23),
240 SUNXI_FUNCTION(0x0, "gpio_in"),
241 SUNXI_FUNCTION(0x1, "gpio_out"),
242 SUNXI_FUNCTION(0x2, "lcd0"), /* D23 */
243 SUNXI_FUNCTION(0x3, "lvds0")), /* VN2 */
244 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 24),
245 SUNXI_FUNCTION(0x0, "gpio_in"),
246 SUNXI_FUNCTION(0x1, "gpio_out"),
247 SUNXI_FUNCTION(0x2, "lcd0"), /* CLK */
248 SUNXI_FUNCTION(0x3, "lvds0")), /* VPC */
249 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 25),
250 SUNXI_FUNCTION(0x0, "gpio_in"),
251 SUNXI_FUNCTION(0x1, "gpio_out"),
252 SUNXI_FUNCTION(0x2, "lcd0"), /* DE */
253 SUNXI_FUNCTION(0x3, "lvds0")), /* VNC */
254 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 26),
255 SUNXI_FUNCTION(0x0, "gpio_in"),
256 SUNXI_FUNCTION(0x1, "gpio_out"),
257 SUNXI_FUNCTION(0x2, "lcd0"), /* HSYNC */
258 SUNXI_FUNCTION(0x3, "lvds0")), /* VP3 */
259 SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 27),
260 SUNXI_FUNCTION(0x0, "gpio_in"),
261 SUNXI_FUNCTION(0x1, "gpio_out"),
262 SUNXI_FUNCTION(0x2, "lcd0"), /* VSYNC */
263 SUNXI_FUNCTION(0x3, "lvds0")), /* VN3 */
264 /* Hole */
265 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0),
266 SUNXI_FUNCTION(0x0, "gpio_in"),
267 SUNXI_FUNCTION(0x1, "gpio_out"),
268 SUNXI_FUNCTION(0x2, "csi")), /* PCLK */
269 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1),
270 SUNXI_FUNCTION(0x0, "gpio_in"),
271 SUNXI_FUNCTION(0x1, "gpio_out"),
272 SUNXI_FUNCTION(0x2, "csi")), /* MCLK */
273 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2),
274 SUNXI_FUNCTION(0x0, "gpio_in"),
275 SUNXI_FUNCTION(0x1, "gpio_out"),
276 SUNXI_FUNCTION(0x2, "csi")), /* HSYNC */
277 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3),
278 SUNXI_FUNCTION(0x0, "gpio_in"),
279 SUNXI_FUNCTION(0x1, "gpio_out"),
280 SUNXI_FUNCTION(0x2, "csi")), /* VSYNC */
281 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4),
282 SUNXI_FUNCTION(0x0, "gpio_in"),
283 SUNXI_FUNCTION(0x1, "gpio_out"),
284 SUNXI_FUNCTION(0x2, "csi")), /* D0 */
285 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5),
286 SUNXI_FUNCTION(0x0, "gpio_in"),
287 SUNXI_FUNCTION(0x1, "gpio_out"),
288 SUNXI_FUNCTION(0x2, "csi")), /* D1 */
289 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6),
290 SUNXI_FUNCTION(0x0, "gpio_in"),
291 SUNXI_FUNCTION(0x1, "gpio_out"),
292 SUNXI_FUNCTION(0x2, "csi")), /* D2 */
293 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7),
294 SUNXI_FUNCTION(0x0, "gpio_in"),
295 SUNXI_FUNCTION(0x1, "gpio_out"),
296 SUNXI_FUNCTION(0x2, "csi")), /* D3 */
297 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8),
298 SUNXI_FUNCTION(0x0, "gpio_in"),
299 SUNXI_FUNCTION(0x1, "gpio_out"),
300 SUNXI_FUNCTION(0x2, "csi")), /* D4 */
301 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9),
302 SUNXI_FUNCTION(0x0, "gpio_in"),
303 SUNXI_FUNCTION(0x1, "gpio_out"),
304 SUNXI_FUNCTION(0x2, "csi")), /* D5 */
305 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 10),
306 SUNXI_FUNCTION(0x0, "gpio_in"),
307 SUNXI_FUNCTION(0x1, "gpio_out"),
308 SUNXI_FUNCTION(0x2, "csi")), /* D6 */
309 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 11),
310 SUNXI_FUNCTION(0x0, "gpio_in"),
311 SUNXI_FUNCTION(0x1, "gpio_out"),
312 SUNXI_FUNCTION(0x2, "csi")), /* D7 */
313 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 12),
314 SUNXI_FUNCTION(0x0, "gpio_in"),
315 SUNXI_FUNCTION(0x1, "gpio_out"),
316 SUNXI_FUNCTION(0x2, "csi"), /* SCK */
317 SUNXI_FUNCTION(0x3, "i2c2")), /* SCK */
318 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 13),
319 SUNXI_FUNCTION(0x0, "gpio_in"),
320 SUNXI_FUNCTION(0x1, "gpio_out"),
321 SUNXI_FUNCTION(0x2, "csi"), /* SDA */
322 SUNXI_FUNCTION(0x3, "i2c2")), /* SDA */
323 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 14),
324 SUNXI_FUNCTION(0x0, "gpio_in"),
325 SUNXI_FUNCTION(0x1, "gpio_out")),
326 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 15),
327 SUNXI_FUNCTION(0x0, "gpio_in"),
328 SUNXI_FUNCTION(0x1, "gpio_out")),
329 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 16),
330 SUNXI_FUNCTION(0x0, "gpio_in"),
331 SUNXI_FUNCTION(0x1, "gpio_out")),
332 SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 17),
333 SUNXI_FUNCTION(0x0, "gpio_in"),
334 SUNXI_FUNCTION(0x1, "gpio_out")),
335 /* Hole */
336 SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0),
337 SUNXI_FUNCTION(0x0, "gpio_in"),
338 SUNXI_FUNCTION(0x1, "gpio_out"),
339 SUNXI_FUNCTION(0x2, "mmc0"), /* D1 */
340 SUNXI_FUNCTION(0x3, "jtag")), /* MS1 */
341 SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1),
342 SUNXI_FUNCTION(0x0, "gpio_in"),
343 SUNXI_FUNCTION(0x1, "gpio_out"),
344 SUNXI_FUNCTION(0x2, "mmc0"), /* D0 */
345 SUNXI_FUNCTION(0x3, "jtag")), /* DI1 */
346 SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2),
347 SUNXI_FUNCTION(0x0, "gpio_in"),
348 SUNXI_FUNCTION(0x1, "gpio_out"),
349 SUNXI_FUNCTION(0x2, "mmc0"), /* CLK */
350 SUNXI_FUNCTION(0x3, "uart0")), /* TX */
351 SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3),
352 SUNXI_FUNCTION(0x0, "gpio_in"),
353 SUNXI_FUNCTION(0x1, "gpio_out"),
354 SUNXI_FUNCTION(0x2, "mmc0"), /* CMD */
355 SUNXI_FUNCTION(0x3, "jtag")), /* DO1 */
356 SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4),
357 SUNXI_FUNCTION(0x0, "gpio_in"),
358 SUNXI_FUNCTION(0x1, "gpio_out"),
359 SUNXI_FUNCTION(0x2, "mmc0"), /* D3 */
360 SUNXI_FUNCTION(0x3, "uart0")), /* RX */
361 SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5),
362 SUNXI_FUNCTION(0x0, "gpio_in"),
363 SUNXI_FUNCTION(0x1, "gpio_out"),
364 SUNXI_FUNCTION(0x2, "mmc0"), /* D2 */
365 SUNXI_FUNCTION(0x3, "jtag")), /* CK1 */
366 /* Hole */
367 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 0),
368 SUNXI_FUNCTION(0x0, "gpio_in"),
369 SUNXI_FUNCTION(0x1, "gpio_out"),
370 SUNXI_FUNCTION(0x2, "mmc1"), /* CLK */
371 SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 0)), /* PG_EINT0 */
372 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 1),
373 SUNXI_FUNCTION(0x0, "gpio_in"),
374 SUNXI_FUNCTION(0x1, "gpio_out"),
375 SUNXI_FUNCTION(0x2, "mmc1"), /* CMD */
376 SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 1)), /* PG_EINT1 */
377 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 2),
378 SUNXI_FUNCTION(0x0, "gpio_in"),
379 SUNXI_FUNCTION(0x1, "gpio_out"),
380 SUNXI_FUNCTION(0x2, "mmc1"), /* D0 */
381 SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 2)), /* PG_EINT2 */
382 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 3),
383 SUNXI_FUNCTION(0x0, "gpio_in"),
384 SUNXI_FUNCTION(0x1, "gpio_out"),
385 SUNXI_FUNCTION(0x2, "mmc1"), /* D1 */
386 SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 3)), /* PG_EINT3 */
387 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 4),
388 SUNXI_FUNCTION(0x0, "gpio_in"),
389 SUNXI_FUNCTION(0x1, "gpio_out"),
390 SUNXI_FUNCTION(0x2, "mmc1"), /* D2 */
391 SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 4)), /* PG_EINT4 */
392 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 5),
393 SUNXI_FUNCTION(0x0, "gpio_in"),
394 SUNXI_FUNCTION(0x1, "gpio_out"),
395 SUNXI_FUNCTION(0x2, "mmc1"), /* D3 */
396 SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 5)), /* PG_EINT5 */
397 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 6),
398 SUNXI_FUNCTION(0x0, "gpio_in"),
399 SUNXI_FUNCTION(0x1, "gpio_out"),
400 SUNXI_FUNCTION(0x2, "uart1"), /* TX */
401 SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 6)), /* PG_EINT6 */
402 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 7),
403 SUNXI_FUNCTION(0x0, "gpio_in"),
404 SUNXI_FUNCTION(0x1, "gpio_out"),
405 SUNXI_FUNCTION(0x2, "uart1"), /* RX */
406 SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 7)), /* PG_EINT7 */
407 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 8),
408 SUNXI_FUNCTION(0x0, "gpio_in"),
409 SUNXI_FUNCTION(0x1, "gpio_out"),
410 SUNXI_FUNCTION(0x2, "uart2"), /* RTS */
411 SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 8)), /* PG_EINT8 */
412 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 9),
413 SUNXI_FUNCTION(0x0, "gpio_in"),
414 SUNXI_FUNCTION(0x1, "gpio_out"),
415 SUNXI_FUNCTION(0x2, "uart2"), /* CTS */
416 SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 9)), /* PG_EINT9 */
417 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 10),
418 SUNXI_FUNCTION(0x0, "gpio_in"),
419 SUNXI_FUNCTION(0x1, "gpio_out"),
420 SUNXI_FUNCTION(0x2, "i2s1"), /* SYNC */
421 SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 10)), /* PG_EINT10 */
422 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11),
423 SUNXI_FUNCTION(0x0, "gpio_in"),
424 SUNXI_FUNCTION(0x1, "gpio_out"),
425 SUNXI_FUNCTION(0x2, "i2s1"), /* CLK */
426 SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 11)), /* PG_EINT11 */
427 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12),
428 SUNXI_FUNCTION(0x0, "gpio_in"),
429 SUNXI_FUNCTION(0x1, "gpio_out"),
430 SUNXI_FUNCTION(0x2, "i2s1"), /* DOUT */
431 SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 12)), /* PG_EINT12 */
432 SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 13),
433 SUNXI_FUNCTION(0x0, "gpio_in"),
434 SUNXI_FUNCTION(0x1, "gpio_out"),
435 SUNXI_FUNCTION(0x2, "i2s1"), /* DIN */
436 SUNXI_FUNCTION_IRQ_BANK(0x4, 1, 13)), /* PG_EINT13 */
437 /* Hole */
438 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 0),
439 SUNXI_FUNCTION(0x0, "gpio_in"),
440 SUNXI_FUNCTION(0x1, "gpio_out"),
441 SUNXI_FUNCTION(0x2, "pwm0")),
442 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 1),
443 SUNXI_FUNCTION(0x0, "gpio_in"),
444 SUNXI_FUNCTION(0x1, "gpio_out"),
445 SUNXI_FUNCTION(0x2, "pwm1")),
446 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 2),
447 SUNXI_FUNCTION(0x0, "gpio_in"),
448 SUNXI_FUNCTION(0x1, "gpio_out"),
449 SUNXI_FUNCTION(0x2, "i2c0")), /* SCK */
450 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 3),
451 SUNXI_FUNCTION(0x0, "gpio_in"),
452 SUNXI_FUNCTION(0x1, "gpio_out"),
453 SUNXI_FUNCTION(0x2, "i2c0")), /* SDA */
454 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 4),
455 SUNXI_FUNCTION(0x0, "gpio_in"),
456 SUNXI_FUNCTION(0x1, "gpio_out"),
457 SUNXI_FUNCTION(0x2, "i2c1")), /* SCK */
458 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 5),
459 SUNXI_FUNCTION(0x0, "gpio_in"),
460 SUNXI_FUNCTION(0x1, "gpio_out"),
461 SUNXI_FUNCTION(0x2, "i2c1")), /* SDA */
462 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 6),
463 SUNXI_FUNCTION(0x0, "gpio_in"),
464 SUNXI_FUNCTION(0x1, "gpio_out"),
465 SUNXI_FUNCTION(0x2, "spi0"), /* CS */
466 SUNXI_FUNCTION(0x3, "uart3")), /* TX */
467 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 7),
468 SUNXI_FUNCTION(0x0, "gpio_in"),
469 SUNXI_FUNCTION(0x1, "gpio_out"),
470 SUNXI_FUNCTION(0x2, "spi0"), /* CLK */
471 SUNXI_FUNCTION(0x3, "uart3")), /* RX */
472 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 8),
473 SUNXI_FUNCTION(0x0, "gpio_in"),
474 SUNXI_FUNCTION(0x1, "gpio_out"),
475 SUNXI_FUNCTION(0x2, "spi0"), /* DOUT */
476 SUNXI_FUNCTION(0x3, "uart3")), /* RTS */
477 SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 9),
478 SUNXI_FUNCTION(0x0, "gpio_in"),
479 SUNXI_FUNCTION(0x1, "gpio_out"),
480 SUNXI_FUNCTION(0x2, "spi0"), /* DIN */
481 SUNXI_FUNCTION(0x3, "uart3")), /* CTS */
482};
483
484static const struct sunxi_pinctrl_desc sun8i_a33_pinctrl_data = {
485 .pins = sun8i_a33_pins,
486 .npins = ARRAY_SIZE(sun8i_a33_pins),
487 .irq_banks = 2,
488};
489
490static int sun8i_a33_pinctrl_probe(struct platform_device *pdev)
491{
492 return sunxi_pinctrl_init(pdev,
493 &sun8i_a33_pinctrl_data);
494}
495
496static const struct of_device_id sun8i_a33_pinctrl_match[] = {
497 { .compatible = "allwinner,sun8i-a33-pinctrl", },
498 {}
499};
500MODULE_DEVICE_TABLE(of, sun8i_a33_pinctrl_match);
501
502static struct platform_driver sun8i_a33_pinctrl_driver = {
503 .probe = sun8i_a33_pinctrl_probe,
504 .driver = {
505 .name = "sun8i-a33-pinctrl",
506 .of_match_table = sun8i_a33_pinctrl_match,
507 },
508};
509module_platform_driver(sun8i_a33_pinctrl_driver);
510
511MODULE_AUTHOR("Vishnu Patekar <vishnupatekar0510@gmail.com>");
512MODULE_DESCRIPTION("Allwinner a33 pinctrl driver");
513MODULE_LICENSE("GPL");
diff --git a/drivers/pinctrl/sunxi/pinctrl-sunxi.c b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
index f8e171b76693..d7857c72e627 100644
--- a/drivers/pinctrl/sunxi/pinctrl-sunxi.c
+++ b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
@@ -911,9 +911,9 @@ int sunxi_pinctrl_init(struct platform_device *pdev,
911 911
912 pctl->pctl_dev = pinctrl_register(pctrl_desc, 912 pctl->pctl_dev = pinctrl_register(pctrl_desc,
913 &pdev->dev, pctl); 913 &pdev->dev, pctl);
914 if (!pctl->pctl_dev) { 914 if (IS_ERR(pctl->pctl_dev)) {
915 dev_err(&pdev->dev, "couldn't register pinctrl driver\n"); 915 dev_err(&pdev->dev, "couldn't register pinctrl driver\n");
916 return -EINVAL; 916 return PTR_ERR(pctl->pctl_dev);
917 } 917 }
918 918
919 pctl->chip = devm_kzalloc(&pdev->dev, sizeof(*pctl->chip), GFP_KERNEL); 919 pctl->chip = devm_kzalloc(&pdev->dev, sizeof(*pctl->chip), GFP_KERNEL);
diff --git a/drivers/pinctrl/vt8500/pinctrl-wmt.c b/drivers/pinctrl/vt8500/pinctrl-wmt.c
index d055d63309e4..c15316b003c5 100644
--- a/drivers/pinctrl/vt8500/pinctrl-wmt.c
+++ b/drivers/pinctrl/vt8500/pinctrl-wmt.c
@@ -594,9 +594,9 @@ int wmt_pinctrl_probe(struct platform_device *pdev,
594 data->dev = &pdev->dev; 594 data->dev = &pdev->dev;
595 595
596 data->pctl_dev = pinctrl_register(&wmt_desc, &pdev->dev, data); 596 data->pctl_dev = pinctrl_register(&wmt_desc, &pdev->dev, data);
597 if (!data->pctl_dev) { 597 if (IS_ERR(data->pctl_dev)) {
598 dev_err(&pdev->dev, "Failed to register pinctrl\n"); 598 dev_err(&pdev->dev, "Failed to register pinctrl\n");
599 return -EINVAL; 599 return PTR_ERR(data->pctl_dev);
600 } 600 }
601 601
602 err = gpiochip_add(&data->gpio_chip); 602 err = gpiochip_add(&data->gpio_chip);
diff --git a/include/dt-bindings/pinctrl/mt6397-pinfunc.h b/include/dt-bindings/pinctrl/mt6397-pinfunc.h
new file mode 100644
index 000000000000..85739b308c2f
--- /dev/null
+++ b/include/dt-bindings/pinctrl/mt6397-pinfunc.h
@@ -0,0 +1,256 @@
1#ifndef __DTS_MT6397_PINFUNC_H
2#define __DTS_MT6397_PINFUNC_H
3
4#include <dt-bindings/pinctrl/mt65xx.h>
5
6#define MT6397_PIN_0_INT__FUNC_GPIO0 (MTK_PIN_NO(0) | 0)
7#define MT6397_PIN_0_INT__FUNC_INT (MTK_PIN_NO(0) | 1)
8
9#define MT6397_PIN_1_SRCVOLTEN__FUNC_GPIO1 (MTK_PIN_NO(1) | 0)
10#define MT6397_PIN_1_SRCVOLTEN__FUNC_SRCVOLTEN (MTK_PIN_NO(1) | 1)
11#define MT6397_PIN_1_SRCVOLTEN__FUNC_TEST_CK1 (MTK_PIN_NO(1) | 6)
12
13#define MT6397_PIN_2_SRCLKEN_PERI__FUNC_GPIO2 (MTK_PIN_NO(2) | 0)
14#define MT6397_PIN_2_SRCLKEN_PERI__FUNC_SRCLKEN_PERI (MTK_PIN_NO(2) | 1)
15#define MT6397_PIN_2_SRCLKEN_PERI__FUNC_TEST_CK2 (MTK_PIN_NO(2) | 6)
16
17#define MT6397_PIN_3_RTC_32K1V8__FUNC_GPIO3 (MTK_PIN_NO(3) | 0)
18#define MT6397_PIN_3_RTC_32K1V8__FUNC_RTC_32K1V8 (MTK_PIN_NO(3) | 1)
19#define MT6397_PIN_3_RTC_32K1V8__FUNC_TEST_CK3 (MTK_PIN_NO(3) | 6)
20
21#define MT6397_PIN_4_WRAP_EVENT__FUNC_GPIO4 (MTK_PIN_NO(4) | 0)
22#define MT6397_PIN_4_WRAP_EVENT__FUNC_WRAP_EVENT (MTK_PIN_NO(4) | 1)
23
24#define MT6397_PIN_5_SPI_CLK__FUNC_GPIO5 (MTK_PIN_NO(5) | 0)
25#define MT6397_PIN_5_SPI_CLK__FUNC_SPI_CLK (MTK_PIN_NO(5) | 1)
26
27#define MT6397_PIN_6_SPI_CSN__FUNC_GPIO6 (MTK_PIN_NO(6) | 0)
28#define MT6397_PIN_6_SPI_CSN__FUNC_SPI_CSN (MTK_PIN_NO(6) | 1)
29
30#define MT6397_PIN_7_SPI_MOSI__FUNC_GPIO7 (MTK_PIN_NO(7) | 0)
31#define MT6397_PIN_7_SPI_MOSI__FUNC_SPI_MOSI (MTK_PIN_NO(7) | 1)
32
33#define MT6397_PIN_8_SPI_MISO__FUNC_GPIO8 (MTK_PIN_NO(8) | 0)
34#define MT6397_PIN_8_SPI_MISO__FUNC_SPI_MISO (MTK_PIN_NO(8) | 1)
35
36#define MT6397_PIN_9_AUD_CLK_MOSI__FUNC_GPIO9 (MTK_PIN_NO(9) | 0)
37#define MT6397_PIN_9_AUD_CLK_MOSI__FUNC_AUD_CLK (MTK_PIN_NO(9) | 1)
38#define MT6397_PIN_9_AUD_CLK_MOSI__FUNC_TEST_IN0 (MTK_PIN_NO(9) | 6)
39#define MT6397_PIN_9_AUD_CLK_MOSI__FUNC_TEST_OUT0 (MTK_PIN_NO(9) | 7)
40
41#define MT6397_PIN_10_AUD_DAT_MISO__FUNC_GPIO10 (MTK_PIN_NO(10) | 0)
42#define MT6397_PIN_10_AUD_DAT_MISO__FUNC_AUD_MISO (MTK_PIN_NO(10) | 1)
43#define MT6397_PIN_10_AUD_DAT_MISO__FUNC_TEST_IN1 (MTK_PIN_NO(10) | 6)
44#define MT6397_PIN_10_AUD_DAT_MISO__FUNC_TEST_OUT1 (MTK_PIN_NO(10) | 7)
45
46#define MT6397_PIN_11_AUD_DAT_MOSI__FUNC_GPIO11 (MTK_PIN_NO(11) | 0)
47#define MT6397_PIN_11_AUD_DAT_MOSI__FUNC_AUD_MOSI (MTK_PIN_NO(11) | 1)
48#define MT6397_PIN_11_AUD_DAT_MOSI__FUNC_TEST_IN2 (MTK_PIN_NO(11) | 6)
49#define MT6397_PIN_11_AUD_DAT_MOSI__FUNC_TEST_OUT2 (MTK_PIN_NO(11) | 7)
50
51#define MT6397_PIN_12_COL0__FUNC_GPIO12 (MTK_PIN_NO(12) | 0)
52#define MT6397_PIN_12_COL0__FUNC_COL0_USBDL (MTK_PIN_NO(12) | 1)
53#define MT6397_PIN_12_COL0__FUNC_EINT10_1X (MTK_PIN_NO(12) | 2)
54#define MT6397_PIN_12_COL0__FUNC_PWM1_3X (MTK_PIN_NO(12) | 3)
55#define MT6397_PIN_12_COL0__FUNC_TEST_IN3 (MTK_PIN_NO(12) | 6)
56#define MT6397_PIN_12_COL0__FUNC_TEST_OUT3 (MTK_PIN_NO(12) | 7)
57
58#define MT6397_PIN_13_COL1__FUNC_GPIO13 (MTK_PIN_NO(13) | 0)
59#define MT6397_PIN_13_COL1__FUNC_COL1 (MTK_PIN_NO(13) | 1)
60#define MT6397_PIN_13_COL1__FUNC_EINT11_1X (MTK_PIN_NO(13) | 2)
61#define MT6397_PIN_13_COL1__FUNC_SCL0_2X (MTK_PIN_NO(13) | 3)
62#define MT6397_PIN_13_COL1__FUNC_TEST_IN4 (MTK_PIN_NO(13) | 6)
63#define MT6397_PIN_13_COL1__FUNC_TEST_OUT4 (MTK_PIN_NO(13) | 7)
64
65#define MT6397_PIN_14_COL2__FUNC_GPIO14 (MTK_PIN_NO(14) | 0)
66#define MT6397_PIN_14_COL2__FUNC_COL2 (MTK_PIN_NO(14) | 1)
67#define MT6397_PIN_14_COL2__FUNC_EINT12_1X (MTK_PIN_NO(14) | 2)
68#define MT6397_PIN_14_COL2__FUNC_SDA0_2X (MTK_PIN_NO(14) | 3)
69#define MT6397_PIN_14_COL2__FUNC_TEST_IN5 (MTK_PIN_NO(14) | 6)
70#define MT6397_PIN_14_COL2__FUNC_TEST_OUT5 (MTK_PIN_NO(14) | 7)
71
72#define MT6397_PIN_15_COL3__FUNC_GPIO15 (MTK_PIN_NO(15) | 0)
73#define MT6397_PIN_15_COL3__FUNC_COL3 (MTK_PIN_NO(15) | 1)
74#define MT6397_PIN_15_COL3__FUNC_EINT13_1X (MTK_PIN_NO(15) | 2)
75#define MT6397_PIN_15_COL3__FUNC_SCL1_2X (MTK_PIN_NO(15) | 3)
76#define MT6397_PIN_15_COL3__FUNC_TEST_IN6 (MTK_PIN_NO(15) | 6)
77#define MT6397_PIN_15_COL3__FUNC_TEST_OUT6 (MTK_PIN_NO(15) | 7)
78
79#define MT6397_PIN_16_COL4__FUNC_GPIO16 (MTK_PIN_NO(16) | 0)
80#define MT6397_PIN_16_COL4__FUNC_COL4 (MTK_PIN_NO(16) | 1)
81#define MT6397_PIN_16_COL4__FUNC_EINT14_1X (MTK_PIN_NO(16) | 2)
82#define MT6397_PIN_16_COL4__FUNC_SDA1_2X (MTK_PIN_NO(16) | 3)
83#define MT6397_PIN_16_COL4__FUNC_TEST_IN7 (MTK_PIN_NO(16) | 6)
84#define MT6397_PIN_16_COL4__FUNC_TEST_OUT7 (MTK_PIN_NO(16) | 7)
85
86#define MT6397_PIN_17_COL5__FUNC_GPIO17 (MTK_PIN_NO(17) | 0)
87#define MT6397_PIN_17_COL5__FUNC_COL5 (MTK_PIN_NO(17) | 1)
88#define MT6397_PIN_17_COL5__FUNC_EINT15_1X (MTK_PIN_NO(17) | 2)
89#define MT6397_PIN_17_COL5__FUNC_SCL2_2X (MTK_PIN_NO(17) | 3)
90#define MT6397_PIN_17_COL5__FUNC_TEST_IN8 (MTK_PIN_NO(17) | 6)
91#define MT6397_PIN_17_COL5__FUNC_TEST_OUT8 (MTK_PIN_NO(17) | 7)
92
93#define MT6397_PIN_18_COL6__FUNC_GPIO18 (MTK_PIN_NO(18) | 0)
94#define MT6397_PIN_18_COL6__FUNC_COL6 (MTK_PIN_NO(18) | 1)
95#define MT6397_PIN_18_COL6__FUNC_EINT16_1X (MTK_PIN_NO(18) | 2)
96#define MT6397_PIN_18_COL6__FUNC_SDA2_2X (MTK_PIN_NO(18) | 3)
97#define MT6397_PIN_18_COL6__FUNC_GPIO32K_0 (MTK_PIN_NO(18) | 4)
98#define MT6397_PIN_18_COL6__FUNC_GPIO26M_0 (MTK_PIN_NO(18) | 5)
99#define MT6397_PIN_18_COL6__FUNC_TEST_IN9 (MTK_PIN_NO(18) | 6)
100#define MT6397_PIN_18_COL6__FUNC_TEST_OUT9 (MTK_PIN_NO(18) | 7)
101
102#define MT6397_PIN_19_COL7__FUNC_GPIO19 (MTK_PIN_NO(19) | 0)
103#define MT6397_PIN_19_COL7__FUNC_COL7 (MTK_PIN_NO(19) | 1)
104#define MT6397_PIN_19_COL7__FUNC_EINT17_1X (MTK_PIN_NO(19) | 2)
105#define MT6397_PIN_19_COL7__FUNC_PWM2_3X (MTK_PIN_NO(19) | 3)
106#define MT6397_PIN_19_COL7__FUNC_GPIO32K_1 (MTK_PIN_NO(19) | 4)
107#define MT6397_PIN_19_COL7__FUNC_GPIO26M_1 (MTK_PIN_NO(19) | 5)
108#define MT6397_PIN_19_COL7__FUNC_TEST_IN10 (MTK_PIN_NO(19) | 6)
109#define MT6397_PIN_19_COL7__FUNC_TEST_OUT10 (MTK_PIN_NO(19) | 7)
110
111#define MT6397_PIN_20_ROW0__FUNC_GPIO20 (MTK_PIN_NO(20) | 0)
112#define MT6397_PIN_20_ROW0__FUNC_ROW0 (MTK_PIN_NO(20) | 1)
113#define MT6397_PIN_20_ROW0__FUNC_EINT18_1X (MTK_PIN_NO(20) | 2)
114#define MT6397_PIN_20_ROW0__FUNC_SCL0_3X (MTK_PIN_NO(20) | 3)
115#define MT6397_PIN_20_ROW0__FUNC_TEST_IN11 (MTK_PIN_NO(20) | 6)
116#define MT6397_PIN_20_ROW0__FUNC_TEST_OUT11 (MTK_PIN_NO(20) | 7)
117
118#define MT6397_PIN_21_ROW1__FUNC_GPIO21 (MTK_PIN_NO(21) | 0)
119#define MT6397_PIN_21_ROW1__FUNC_ROW1 (MTK_PIN_NO(21) | 1)
120#define MT6397_PIN_21_ROW1__FUNC_EINT19_1X (MTK_PIN_NO(21) | 2)
121#define MT6397_PIN_21_ROW1__FUNC_SDA0_3X (MTK_PIN_NO(21) | 3)
122#define MT6397_PIN_21_ROW1__FUNC_AUD_TSTCK (MTK_PIN_NO(21) | 4)
123#define MT6397_PIN_21_ROW1__FUNC_TEST_IN12 (MTK_PIN_NO(21) | 6)
124#define MT6397_PIN_21_ROW1__FUNC_TEST_OUT12 (MTK_PIN_NO(21) | 7)
125
126#define MT6397_PIN_22_ROW2__FUNC_GPIO22 (MTK_PIN_NO(22) | 0)
127#define MT6397_PIN_22_ROW2__FUNC_ROW2 (MTK_PIN_NO(22) | 1)
128#define MT6397_PIN_22_ROW2__FUNC_EINT20_1X (MTK_PIN_NO(22) | 2)
129#define MT6397_PIN_22_ROW2__FUNC_SCL1_3X (MTK_PIN_NO(22) | 3)
130#define MT6397_PIN_22_ROW2__FUNC_TEST_IN13 (MTK_PIN_NO(22) | 6)
131#define MT6397_PIN_22_ROW2__FUNC_TEST_OUT13 (MTK_PIN_NO(22) | 7)
132
133#define MT6397_PIN_23_ROW3__FUNC_GPIO23 (MTK_PIN_NO(23) | 0)
134#define MT6397_PIN_23_ROW3__FUNC_ROW3 (MTK_PIN_NO(23) | 1)
135#define MT6397_PIN_23_ROW3__FUNC_EINT21_1X (MTK_PIN_NO(23) | 2)
136#define MT6397_PIN_23_ROW3__FUNC_SDA1_3X (MTK_PIN_NO(23) | 3)
137#define MT6397_PIN_23_ROW3__FUNC_TEST_IN14 (MTK_PIN_NO(23) | 6)
138#define MT6397_PIN_23_ROW3__FUNC_TEST_OUT14 (MTK_PIN_NO(23) | 7)
139
140#define MT6397_PIN_24_ROW4__FUNC_GPIO24 (MTK_PIN_NO(24) | 0)
141#define MT6397_PIN_24_ROW4__FUNC_ROW4 (MTK_PIN_NO(24) | 1)
142#define MT6397_PIN_24_ROW4__FUNC_EINT22_1X (MTK_PIN_NO(24) | 2)
143#define MT6397_PIN_24_ROW4__FUNC_SCL2_3X (MTK_PIN_NO(24) | 3)
144#define MT6397_PIN_24_ROW4__FUNC_TEST_IN15 (MTK_PIN_NO(24) | 6)
145#define MT6397_PIN_24_ROW4__FUNC_TEST_OUT15 (MTK_PIN_NO(24) | 7)
146
147#define MT6397_PIN_25_ROW5__FUNC_GPIO25 (MTK_PIN_NO(25) | 0)
148#define MT6397_PIN_25_ROW5__FUNC_ROW5 (MTK_PIN_NO(25) | 1)
149#define MT6397_PIN_25_ROW5__FUNC_EINT23_1X (MTK_PIN_NO(25) | 2)
150#define MT6397_PIN_25_ROW5__FUNC_SDA2_3X (MTK_PIN_NO(25) | 3)
151#define MT6397_PIN_25_ROW5__FUNC_TEST_IN16 (MTK_PIN_NO(25) | 6)
152#define MT6397_PIN_25_ROW5__FUNC_TEST_OUT16 (MTK_PIN_NO(25) | 7)
153
154#define MT6397_PIN_26_ROW6__FUNC_GPIO26 (MTK_PIN_NO(26) | 0)
155#define MT6397_PIN_26_ROW6__FUNC_ROW6 (MTK_PIN_NO(26) | 1)
156#define MT6397_PIN_26_ROW6__FUNC_EINT24_1X (MTK_PIN_NO(26) | 2)
157#define MT6397_PIN_26_ROW6__FUNC_PWM3_3X (MTK_PIN_NO(26) | 3)
158#define MT6397_PIN_26_ROW6__FUNC_GPIO32K_2 (MTK_PIN_NO(26) | 4)
159#define MT6397_PIN_26_ROW6__FUNC_GPIO26M_2 (MTK_PIN_NO(26) | 5)
160#define MT6397_PIN_26_ROW6__FUNC_TEST_IN17 (MTK_PIN_NO(26) | 6)
161#define MT6397_PIN_26_ROW6__FUNC_TEST_OUT17 (MTK_PIN_NO(26) | 7)
162
163#define MT6397_PIN_27_ROW7__FUNC_GPIO27 (MTK_PIN_NO(27) | 0)
164#define MT6397_PIN_27_ROW7__FUNC_ROW7 (MTK_PIN_NO(27) | 1)
165#define MT6397_PIN_27_ROW7__FUNC_EINT3_1X (MTK_PIN_NO(27) | 2)
166#define MT6397_PIN_27_ROW7__FUNC_CBUS (MTK_PIN_NO(27) | 3)
167#define MT6397_PIN_27_ROW7__FUNC_GPIO32K_3 (MTK_PIN_NO(27) | 4)
168#define MT6397_PIN_27_ROW7__FUNC_GPIO26M_3 (MTK_PIN_NO(27) | 5)
169#define MT6397_PIN_27_ROW7__FUNC_TEST_IN18 (MTK_PIN_NO(27) | 6)
170#define MT6397_PIN_27_ROW7__FUNC_TEST_OUT18 (MTK_PIN_NO(27) | 7)
171
172#define MT6397_PIN_28_PWM1__FUNC_GPIO28 (MTK_PIN_NO(28) | 0)
173#define MT6397_PIN_28_PWM1__FUNC_PWM1 (MTK_PIN_NO(28) | 1)
174#define MT6397_PIN_28_PWM1__FUNC_EINT4_1X (MTK_PIN_NO(28) | 2)
175#define MT6397_PIN_28_PWM1__FUNC_GPIO32K_4 (MTK_PIN_NO(28) | 4)
176#define MT6397_PIN_28_PWM1__FUNC_GPIO26M_4 (MTK_PIN_NO(28) | 5)
177#define MT6397_PIN_28_PWM1__FUNC_TEST_IN19 (MTK_PIN_NO(28) | 6)
178#define MT6397_PIN_28_PWM1__FUNC_TEST_OUT19 (MTK_PIN_NO(28) | 7)
179
180#define MT6397_PIN_29_PWM2__FUNC_GPIO29 (MTK_PIN_NO(29) | 0)
181#define MT6397_PIN_29_PWM2__FUNC_PWM2 (MTK_PIN_NO(29) | 1)
182#define MT6397_PIN_29_PWM2__FUNC_EINT5_1X (MTK_PIN_NO(29) | 2)
183#define MT6397_PIN_29_PWM2__FUNC_GPIO32K_5 (MTK_PIN_NO(29) | 4)
184#define MT6397_PIN_29_PWM2__FUNC_GPIO26M_5 (MTK_PIN_NO(29) | 5)
185#define MT6397_PIN_29_PWM2__FUNC_TEST_IN20 (MTK_PIN_NO(29) | 6)
186#define MT6397_PIN_29_PWM2__FUNC_TEST_OUT20 (MTK_PIN_NO(29) | 7)
187
188#define MT6397_PIN_30_PWM3__FUNC_GPIO30 (MTK_PIN_NO(30) | 0)
189#define MT6397_PIN_30_PWM3__FUNC_PWM3 (MTK_PIN_NO(30) | 1)
190#define MT6397_PIN_30_PWM3__FUNC_EINT6_1X (MTK_PIN_NO(30) | 2)
191#define MT6397_PIN_30_PWM3__FUNC_COL0 (MTK_PIN_NO(30) | 3)
192#define MT6397_PIN_30_PWM3__FUNC_GPIO32K_6 (MTK_PIN_NO(30) | 4)
193#define MT6397_PIN_30_PWM3__FUNC_GPIO26M_6 (MTK_PIN_NO(30) | 5)
194#define MT6397_PIN_30_PWM3__FUNC_TEST_IN21 (MTK_PIN_NO(30) | 6)
195#define MT6397_PIN_30_PWM3__FUNC_TEST_OUT21 (MTK_PIN_NO(30) | 7)
196
197#define MT6397_PIN_31_SCL0__FUNC_GPIO31 (MTK_PIN_NO(31) | 0)
198#define MT6397_PIN_31_SCL0__FUNC_SCL0 (MTK_PIN_NO(31) | 1)
199#define MT6397_PIN_31_SCL0__FUNC_EINT7_1X (MTK_PIN_NO(31) | 2)
200#define MT6397_PIN_31_SCL0__FUNC_PWM1_2X (MTK_PIN_NO(31) | 3)
201#define MT6397_PIN_31_SCL0__FUNC_TEST_IN22 (MTK_PIN_NO(31) | 6)
202#define MT6397_PIN_31_SCL0__FUNC_TEST_OUT22 (MTK_PIN_NO(31) | 7)
203
204#define MT6397_PIN_32_SDA0__FUNC_GPIO32 (MTK_PIN_NO(32) | 0)
205#define MT6397_PIN_32_SDA0__FUNC_SDA0 (MTK_PIN_NO(32) | 1)
206#define MT6397_PIN_32_SDA0__FUNC_EINT8_1X (MTK_PIN_NO(32) | 2)
207#define MT6397_PIN_32_SDA0__FUNC_TEST_IN23 (MTK_PIN_NO(32) | 6)
208#define MT6397_PIN_32_SDA0__FUNC_TEST_OUT23 (MTK_PIN_NO(32) | 7)
209
210#define MT6397_PIN_33_SCL1__FUNC_GPIO33 (MTK_PIN_NO(33) | 0)
211#define MT6397_PIN_33_SCL1__FUNC_SCL1 (MTK_PIN_NO(33) | 1)
212#define MT6397_PIN_33_SCL1__FUNC_EINT9_1X (MTK_PIN_NO(33) | 2)
213#define MT6397_PIN_33_SCL1__FUNC_PWM2_2X (MTK_PIN_NO(33) | 3)
214#define MT6397_PIN_33_SCL1__FUNC_TEST_IN24 (MTK_PIN_NO(33) | 6)
215#define MT6397_PIN_33_SCL1__FUNC_TEST_OUT24 (MTK_PIN_NO(33) | 7)
216
217#define MT6397_PIN_34_SDA1__FUNC_GPIO34 (MTK_PIN_NO(34) | 0)
218#define MT6397_PIN_34_SDA1__FUNC_SDA1 (MTK_PIN_NO(34) | 1)
219#define MT6397_PIN_34_SDA1__FUNC_EINT0_1X (MTK_PIN_NO(34) | 2)
220#define MT6397_PIN_34_SDA1__FUNC_TEST_IN25 (MTK_PIN_NO(34) | 6)
221#define MT6397_PIN_34_SDA1__FUNC_TEST_OUT25 (MTK_PIN_NO(34) | 7)
222
223#define MT6397_PIN_35_SCL2__FUNC_GPIO35 (MTK_PIN_NO(35) | 0)
224#define MT6397_PIN_35_SCL2__FUNC_SCL2 (MTK_PIN_NO(35) | 1)
225#define MT6397_PIN_35_SCL2__FUNC_EINT1_1X (MTK_PIN_NO(35) | 2)
226#define MT6397_PIN_35_SCL2__FUNC_PWM3_2X (MTK_PIN_NO(35) | 3)
227#define MT6397_PIN_35_SCL2__FUNC_TEST_IN26 (MTK_PIN_NO(35) | 6)
228#define MT6397_PIN_35_SCL2__FUNC_TEST_OUT26 (MTK_PIN_NO(35) | 7)
229
230#define MT6397_PIN_36_SDA2__FUNC_GPIO36 (MTK_PIN_NO(36) | 0)
231#define MT6397_PIN_36_SDA2__FUNC_SDA2 (MTK_PIN_NO(36) | 1)
232#define MT6397_PIN_36_SDA2__FUNC_EINT2_1X (MTK_PIN_NO(36) | 2)
233#define MT6397_PIN_36_SDA2__FUNC_TEST_IN27 (MTK_PIN_NO(36) | 6)
234#define MT6397_PIN_36_SDA2__FUNC_TEST_OUT27 (MTK_PIN_NO(36) | 7)
235
236#define MT6397_PIN_37_HDMISD__FUNC_GPIO37 (MTK_PIN_NO(37) | 0)
237#define MT6397_PIN_37_HDMISD__FUNC_HDMISD (MTK_PIN_NO(37) | 1)
238#define MT6397_PIN_37_HDMISD__FUNC_TEST_IN28 (MTK_PIN_NO(37) | 6)
239#define MT6397_PIN_37_HDMISD__FUNC_TEST_OUT28 (MTK_PIN_NO(37) | 7)
240
241#define MT6397_PIN_38_HDMISCK__FUNC_GPIO38 (MTK_PIN_NO(38) | 0)
242#define MT6397_PIN_38_HDMISCK__FUNC_HDMISCK (MTK_PIN_NO(38) | 1)
243#define MT6397_PIN_38_HDMISCK__FUNC_TEST_IN29 (MTK_PIN_NO(38) | 6)
244#define MT6397_PIN_38_HDMISCK__FUNC_TEST_OUT29 (MTK_PIN_NO(38) | 7)
245
246#define MT6397_PIN_39_HTPLG__FUNC_GPIO39 (MTK_PIN_NO(39) | 0)
247#define MT6397_PIN_39_HTPLG__FUNC_HTPLG (MTK_PIN_NO(39) | 1)
248#define MT6397_PIN_39_HTPLG__FUNC_TEST_IN30 (MTK_PIN_NO(39) | 6)
249#define MT6397_PIN_39_HTPLG__FUNC_TEST_OUT30 (MTK_PIN_NO(39) | 7)
250
251#define MT6397_PIN_40_CEC__FUNC_GPIO40 (MTK_PIN_NO(40) | 0)
252#define MT6397_PIN_40_CEC__FUNC_CEC (MTK_PIN_NO(40) | 1)
253#define MT6397_PIN_40_CEC__FUNC_TEST_IN31 (MTK_PIN_NO(40) | 6)
254#define MT6397_PIN_40_CEC__FUNC_TEST_OUT31 (MTK_PIN_NO(40) | 7)
255
256#endif /* __DTS_MT6397_PINFUNC_H */
diff --git a/include/linux/pinctrl/consumer.h b/include/linux/pinctrl/consumer.h
index 18eccefea06e..d7e5d608faa7 100644
--- a/include/linux/pinctrl/consumer.h
+++ b/include/linux/pinctrl/consumer.h
@@ -142,7 +142,7 @@ static inline struct pinctrl * __must_check pinctrl_get_select(
142 s = pinctrl_lookup_state(p, name); 142 s = pinctrl_lookup_state(p, name);
143 if (IS_ERR(s)) { 143 if (IS_ERR(s)) {
144 pinctrl_put(p); 144 pinctrl_put(p);
145 return ERR_PTR(PTR_ERR(s)); 145 return ERR_CAST(s);
146 } 146 }
147 147
148 ret = pinctrl_select_state(p, s); 148 ret = pinctrl_select_state(p, s);
diff --git a/include/linux/pinctrl/pinctrl.h b/include/linux/pinctrl/pinctrl.h
index 66e4697516de..9ba59fcba549 100644
--- a/include/linux/pinctrl/pinctrl.h
+++ b/include/linux/pinctrl/pinctrl.h
@@ -127,7 +127,7 @@ struct pinctrl_ops {
127 */ 127 */
128struct pinctrl_desc { 128struct pinctrl_desc {
129 const char *name; 129 const char *name;
130 struct pinctrl_pin_desc const *pins; 130 const struct pinctrl_pin_desc *pins;
131 unsigned int npins; 131 unsigned int npins;
132 const struct pinctrl_ops *pctlops; 132 const struct pinctrl_ops *pctlops;
133 const struct pinmux_ops *pmxops; 133 const struct pinmux_ops *pmxops;
diff --git a/include/linux/pinctrl/pinmux.h b/include/linux/pinctrl/pinmux.h
index 511bda9ed4bf..ace60d775b20 100644
--- a/include/linux/pinctrl/pinmux.h
+++ b/include/linux/pinctrl/pinmux.h
@@ -56,6 +56,9 @@ struct pinctrl_dev;
56 * depending on whether the GPIO is configured as input or output, 56 * depending on whether the GPIO is configured as input or output,
57 * a direction selector function may be implemented as a backing 57 * a direction selector function may be implemented as a backing
58 * to the GPIO controllers that need pin muxing. 58 * to the GPIO controllers that need pin muxing.
59 * @strict: do not allow simultaneous use of the same pin for GPIO and another
60 * function. Check both gpio_owner and mux_owner strictly before approving
61 * the pin request.
59 */ 62 */
60struct pinmux_ops { 63struct pinmux_ops {
61 int (*request) (struct pinctrl_dev *pctldev, unsigned offset); 64 int (*request) (struct pinctrl_dev *pctldev, unsigned offset);
@@ -66,7 +69,7 @@ struct pinmux_ops {
66 int (*get_function_groups) (struct pinctrl_dev *pctldev, 69 int (*get_function_groups) (struct pinctrl_dev *pctldev,
67 unsigned selector, 70 unsigned selector,
68 const char * const **groups, 71 const char * const **groups,
69 unsigned * const num_groups); 72 unsigned *num_groups);
70 int (*set_mux) (struct pinctrl_dev *pctldev, unsigned func_selector, 73 int (*set_mux) (struct pinctrl_dev *pctldev, unsigned func_selector,
71 unsigned group_selector); 74 unsigned group_selector);
72 int (*gpio_request_enable) (struct pinctrl_dev *pctldev, 75 int (*gpio_request_enable) (struct pinctrl_dev *pctldev,
@@ -79,6 +82,7 @@ struct pinmux_ops {
79 struct pinctrl_gpio_range *range, 82 struct pinctrl_gpio_range *range,
80 unsigned offset, 83 unsigned offset,
81 bool input); 84 bool input);
85 bool strict;
82}; 86};
83 87
84#endif /* CONFIG_PINMUX */ 88#endif /* CONFIG_PINMUX */