1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Marvell PXA25x family pin control
4 *
5 * Copyright (C) 2016 Robert Jarzmik
6 */
7#include <linux/module.h>
8#include <linux/platform_device.h>
9#include <linux/of.h>
10#include <linux/of_device.h>
11#include <linux/pinctrl/pinctrl.h>
12
13#include "pinctrl-pxa2xx.h"
14
15static const struct pxa_desc_pin pxa25x_pins[] = {
16	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(0)),
17	PXA_GPIO_PIN(PXA_PINCTRL_PIN(1),
18		     PXA_FUNCTION(0, 1, "GP_RST")),
19	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(2)),
20	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(3)),
21	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(4)),
22	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(5)),
23	PXA_GPIO_PIN(PXA_PINCTRL_PIN(6),
24		     PXA_FUNCTION(1, 1, "MMCCLK")),
25	PXA_GPIO_PIN(PXA_PINCTRL_PIN(7),
26		     PXA_FUNCTION(1, 1, "48_MHz")),
27	PXA_GPIO_PIN(PXA_PINCTRL_PIN(8),
28		     PXA_FUNCTION(1, 1, "MMCCS0")),
29	PXA_GPIO_PIN(PXA_PINCTRL_PIN(9),
30		     PXA_FUNCTION(1, 1, "MMCCS1")),
31	PXA_GPIO_PIN(PXA_PINCTRL_PIN(10),
32		     PXA_FUNCTION(1, 1, "RTCCLK")),
33	PXA_GPIO_PIN(PXA_PINCTRL_PIN(11),
34		     PXA_FUNCTION(1, 1, "3_6_MHz")),
35	PXA_GPIO_PIN(PXA_PINCTRL_PIN(12),
36		     PXA_FUNCTION(1, 1, "32_kHz")),
37	PXA_GPIO_PIN(PXA_PINCTRL_PIN(13),
38		     PXA_FUNCTION(1, 2, "MBGNT")),
39	PXA_GPIO_PIN(PXA_PINCTRL_PIN(14),
40		     PXA_FUNCTION(0, 1, "MBREQ")),
41	PXA_GPIO_PIN(PXA_PINCTRL_PIN(15),
42		     PXA_FUNCTION(1, 2, "nCS_1")),
43	PXA_GPIO_PIN(PXA_PINCTRL_PIN(16),
44		     PXA_FUNCTION(1, 2, "PWM0")),
45	PXA_GPIO_PIN(PXA_PINCTRL_PIN(17),
46		     PXA_FUNCTION(1, 2, "PWM1")),
47	PXA_GPIO_PIN(PXA_PINCTRL_PIN(18),
48		     PXA_FUNCTION(0, 1, "RDY")),
49	PXA_GPIO_PIN(PXA_PINCTRL_PIN(19),
50		     PXA_FUNCTION(0, 1, "DREQ[1]")),
51	PXA_GPIO_PIN(PXA_PINCTRL_PIN(20),
52		     PXA_FUNCTION(0, 1, "DREQ[0]")),
53	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(21)),
54	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(22)),
55	PXA_GPIO_PIN(PXA_PINCTRL_PIN(23),
56		     PXA_FUNCTION(1, 2, "SCLK")),
57	PXA_GPIO_PIN(PXA_PINCTRL_PIN(24),
58		     PXA_FUNCTION(1, 2, "SFRM")),
59	PXA_GPIO_PIN(PXA_PINCTRL_PIN(25),
60		     PXA_FUNCTION(1, 2, "TXD")),
61	PXA_GPIO_PIN(PXA_PINCTRL_PIN(26),
62		     PXA_FUNCTION(0, 1, "RXD")),
63	PXA_GPIO_PIN(PXA_PINCTRL_PIN(27),
64		     PXA_FUNCTION(0, 1, "EXTCLK")),
65	PXA_GPIO_PIN(PXA_PINCTRL_PIN(28),
66		     PXA_FUNCTION(0, 1, "BITCLK"),
67		     PXA_FUNCTION(0, 2, "BITCLK"),
68		     PXA_FUNCTION(1, 1, "BITCLK")),
69	PXA_GPIO_PIN(PXA_PINCTRL_PIN(29),
70		     PXA_FUNCTION(0, 1, "SDATA_IN0"),
71		     PXA_FUNCTION(0, 2, "SDATA_IN")),
72	PXA_GPIO_PIN(PXA_PINCTRL_PIN(30),
73		     PXA_FUNCTION(1, 1, "SDATA_OUT"),
74		     PXA_FUNCTION(1, 2, "SDATA_OUT")),
75	PXA_GPIO_PIN(PXA_PINCTRL_PIN(31),
76		     PXA_FUNCTION(1, 1, "SYNC"),
77		     PXA_FUNCTION(1, 2, "SYNC")),
78	PXA_GPIO_PIN(PXA_PINCTRL_PIN(32),
79		     PXA_FUNCTION(0, 1, "SDATA_IN1"),
80		     PXA_FUNCTION(1, 1, "SYSCLK")),
81	PXA_GPIO_PIN(PXA_PINCTRL_PIN(33),
82		     PXA_FUNCTION(1, 2, "nCS[5]")),
83	PXA_GPIO_PIN(PXA_PINCTRL_PIN(34),
84		     PXA_FUNCTION(0, 1, "FFRXD"),
85		     PXA_FUNCTION(1, 2, "MMCCS0")),
86	PXA_GPIO_PIN(PXA_PINCTRL_PIN(35),
87		     PXA_FUNCTION(0, 1, "CTS")),
88	PXA_GPIO_PIN(PXA_PINCTRL_PIN(36),
89		     PXA_FUNCTION(0, 1, "DCD")),
90	PXA_GPIO_PIN(PXA_PINCTRL_PIN(37),
91		     PXA_FUNCTION(0, 1, "DSR")),
92	PXA_GPIO_PIN(PXA_PINCTRL_PIN(38),
93		     PXA_FUNCTION(0, 1, "RI")),
94	PXA_GPIO_PIN(PXA_PINCTRL_PIN(39),
95		     PXA_FUNCTION(1, 1, "MMCC1"),
96		     PXA_FUNCTION(1, 2, "FFTXD")),
97	PXA_GPIO_PIN(PXA_PINCTRL_PIN(40),
98		     PXA_FUNCTION(1, 2, "DTR")),
99	PXA_GPIO_PIN(PXA_PINCTRL_PIN(41),
100		     PXA_FUNCTION(1, 2, "RTS")),
101	PXA_GPIO_PIN(PXA_PINCTRL_PIN(42),
102		     PXA_FUNCTION(0, 1, "BTRXD"),
103		     PXA_FUNCTION(0, 3, "HWRXD")),
104	PXA_GPIO_PIN(PXA_PINCTRL_PIN(43),
105		     PXA_FUNCTION(1, 2, "BTTXD"),
106		     PXA_FUNCTION(1, 3, "HWTXD")),
107	PXA_GPIO_PIN(PXA_PINCTRL_PIN(44),
108		     PXA_FUNCTION(0, 1, "BTCTS"),
109		     PXA_FUNCTION(0, 3, "HWCTS")),
110	PXA_GPIO_PIN(PXA_PINCTRL_PIN(45),
111		     PXA_FUNCTION(1, 2, "BTRTS"),
112		     PXA_FUNCTION(1, 3, "HWRTS")),
113	PXA_GPIO_PIN(PXA_PINCTRL_PIN(46),
114		     PXA_FUNCTION(0, 1, "ICP_RXD"),
115		     PXA_FUNCTION(0, 2, "RXD")),
116	PXA_GPIO_PIN(PXA_PINCTRL_PIN(47),
117		     PXA_FUNCTION(1, 1, "TXD"),
118		     PXA_FUNCTION(1, 2, "ICP_TXD")),
119	PXA_GPIO_PIN(PXA_PINCTRL_PIN(48),
120		     PXA_FUNCTION(1, 1, "HWTXD"),
121		     PXA_FUNCTION(1, 2, "nPOE")),
122	PXA_GPIO_PIN(PXA_PINCTRL_PIN(49),
123		     PXA_FUNCTION(0, 1, "HWRXD"),
124		     PXA_FUNCTION(1, 2, "nPWE")),
125	PXA_GPIO_PIN(PXA_PINCTRL_PIN(50),
126		     PXA_FUNCTION(0, 1, "HWCTS"),
127		     PXA_FUNCTION(1, 2, "nPIOR")),
128	PXA_GPIO_PIN(PXA_PINCTRL_PIN(51),
129		     PXA_FUNCTION(1, 1, "HWRTS"),
130		     PXA_FUNCTION(1, 2, "nPIOW")),
131	PXA_GPIO_PIN(PXA_PINCTRL_PIN(52),
132		     PXA_FUNCTION(1, 2, "nPCE[1]")),
133	PXA_GPIO_PIN(PXA_PINCTRL_PIN(53),
134		     PXA_FUNCTION(1, 1, "MMCCLK"),
135		     PXA_FUNCTION(1, 2, "nPCE[2]")),
136	PXA_GPIO_PIN(PXA_PINCTRL_PIN(54),
137		     PXA_FUNCTION(1, 1, "MMCCLK"),
138		     PXA_FUNCTION(1, 2, "nPSKTSEL")),
139	PXA_GPIO_PIN(PXA_PINCTRL_PIN(55),
140		     PXA_FUNCTION(1, 2, "nPREG")),
141	PXA_GPIO_PIN(PXA_PINCTRL_PIN(56),
142		     PXA_FUNCTION(0, 1, "nPWAIT")),
143	PXA_GPIO_PIN(PXA_PINCTRL_PIN(57),
144		     PXA_FUNCTION(0, 1, "nIOIS16")),
145	PXA_GPIO_PIN(PXA_PINCTRL_PIN(58),
146		     PXA_FUNCTION(1, 2, "LDD<0>")),
147	PXA_GPIO_PIN(PXA_PINCTRL_PIN(59),
148		     PXA_FUNCTION(1, 2, "LDD<1>")),
149	PXA_GPIO_PIN(PXA_PINCTRL_PIN(60),
150		     PXA_FUNCTION(1, 2, "LDD<2>")),
151	PXA_GPIO_PIN(PXA_PINCTRL_PIN(61),
152		     PXA_FUNCTION(1, 2, "LDD<3>")),
153	PXA_GPIO_PIN(PXA_PINCTRL_PIN(62),
154		     PXA_FUNCTION(1, 2, "LDD<4>")),
155	PXA_GPIO_PIN(PXA_PINCTRL_PIN(63),
156		     PXA_FUNCTION(1, 2, "LDD<5>")),
157	PXA_GPIO_PIN(PXA_PINCTRL_PIN(64),
158		     PXA_FUNCTION(1, 2, "LDD<6>")),
159	PXA_GPIO_PIN(PXA_PINCTRL_PIN(65),
160		     PXA_FUNCTION(1, 2, "LDD<7>")),
161	PXA_GPIO_PIN(PXA_PINCTRL_PIN(66),
162		     PXA_FUNCTION(0, 1, "MBREQ"),
163		     PXA_FUNCTION(1, 2, "LDD<8>")),
164	PXA_GPIO_PIN(PXA_PINCTRL_PIN(67),
165		     PXA_FUNCTION(1, 1, "MMCCS0"),
166		     PXA_FUNCTION(1, 2, "LDD<9>")),
167	PXA_GPIO_PIN(PXA_PINCTRL_PIN(68),
168		     PXA_FUNCTION(1, 1, "MMCCS1"),
169		     PXA_FUNCTION(1, 2, "LDD<10>")),
170	PXA_GPIO_PIN(PXA_PINCTRL_PIN(69),
171		     PXA_FUNCTION(1, 1, "MMCCLK"),
172		     PXA_FUNCTION(1, 2, "LDD<11>")),
173	PXA_GPIO_PIN(PXA_PINCTRL_PIN(70),
174		     PXA_FUNCTION(1, 1, "RTCCLK"),
175		     PXA_FUNCTION(1, 2, "LDD<12>")),
176	PXA_GPIO_PIN(PXA_PINCTRL_PIN(71),
177		     PXA_FUNCTION(1, 1, "3_6_MHz"),
178		     PXA_FUNCTION(1, 2, "LDD<13>")),
179	PXA_GPIO_PIN(PXA_PINCTRL_PIN(72),
180		     PXA_FUNCTION(1, 1, "32_kHz"),
181		     PXA_FUNCTION(1, 2, "LDD<14>")),
182	PXA_GPIO_PIN(PXA_PINCTRL_PIN(73),
183		     PXA_FUNCTION(1, 1, "MBGNT"),
184		     PXA_FUNCTION(1, 2, "LDD<15>")),
185	PXA_GPIO_PIN(PXA_PINCTRL_PIN(74),
186		     PXA_FUNCTION(1, 2, "LCD_FCLK")),
187	PXA_GPIO_PIN(PXA_PINCTRL_PIN(75),
188		     PXA_FUNCTION(1, 2, "LCD_LCLK")),
189	PXA_GPIO_PIN(PXA_PINCTRL_PIN(76),
190		     PXA_FUNCTION(1, 2, "LCD_PCLK")),
191	PXA_GPIO_PIN(PXA_PINCTRL_PIN(77),
192		     PXA_FUNCTION(1, 2, "LCD_ACBIAS")),
193	PXA_GPIO_PIN(PXA_PINCTRL_PIN(78),
194		     PXA_FUNCTION(1, 2, "nCS<2>")),
195	PXA_GPIO_PIN(PXA_PINCTRL_PIN(79),
196		     PXA_FUNCTION(1, 2, "nCS<3>")),
197	PXA_GPIO_PIN(PXA_PINCTRL_PIN(80),
198		     PXA_FUNCTION(1, 2, "nCS<4>")),
199	PXA_GPIO_PIN(PXA_PINCTRL_PIN(81),
200		     PXA_FUNCTION(0, 1, "NSSPSCLK"),
201		     PXA_FUNCTION(1, 1, "NSSPSCLK")),
202	PXA_GPIO_PIN(PXA_PINCTRL_PIN(82),
203		     PXA_FUNCTION(0, 1, "NSSPSFRM"),
204		     PXA_FUNCTION(1, 1, "NSSPSFRM")),
205	PXA_GPIO_PIN(PXA_PINCTRL_PIN(83),
206		     PXA_FUNCTION(0, 2, "NSSPRXD"),
207		     PXA_FUNCTION(1, 1, "NSSPTXD")),
208	PXA_GPIO_PIN(PXA_PINCTRL_PIN(84),
209		     PXA_FUNCTION(0, 2, "NSSPRXD"),
210		     PXA_FUNCTION(1, 1, "NSSPTXD")),
211};
212
213static int pxa25x_pinctrl_probe(struct platform_device *pdev)
214{
215	int ret, i;
216	void __iomem *base_af[8];
217	void __iomem *base_dir[4];
218	void __iomem *base_sleep[4];
219
220	base_af[0] = devm_platform_ioremap_resource(pdev, 0);
221	if (IS_ERR(base_af[0]))
222		return PTR_ERR(base_af[0]);
223
224	base_dir[0] = devm_platform_ioremap_resource(pdev, 1);
225	if (IS_ERR(base_dir[0]))
226		return PTR_ERR(base_dir[0]);
227
228	base_dir[3] = devm_platform_ioremap_resource(pdev, 2);
229	if (IS_ERR(base_dir[3]))
230		return PTR_ERR(base_dir[3]);
231
232	base_sleep[0] = devm_platform_ioremap_resource(pdev, 3);
233	if (IS_ERR(base_sleep[0]))
234		return PTR_ERR(base_sleep[0]);
235
236	for (i = 0; i < ARRAY_SIZE(base_af); i++)
237		base_af[i] = base_af[0] + sizeof(base_af[0]) * i;
238	for (i = 0; i < 3; i++)
239		base_dir[i] = base_dir[0] + sizeof(base_dir[0]) * i;
240	for (i = 0; i < ARRAY_SIZE(base_sleep); i++)
241		base_sleep[i] = base_sleep[0] + sizeof(base_af[0]) * i;
242
243	ret = pxa2xx_pinctrl_init(pdev, pxa25x_pins, ARRAY_SIZE(pxa25x_pins),
244				  base_af, base_dir, base_sleep);
245	return ret;
246}
247
248static const struct of_device_id pxa25x_pinctrl_match[] = {
249	{ .compatible = "marvell,pxa25x-pinctrl", },
250	{}
251};
252MODULE_DEVICE_TABLE(of, pxa25x_pinctrl_match);
253
254static struct platform_driver pxa25x_pinctrl_driver = {
255	.probe	= pxa25x_pinctrl_probe,
256	.driver	= {
257		.name		= "pxa25x-pinctrl",
258		.of_match_table	= pxa25x_pinctrl_match,
259	},
260};
261module_platform_driver(pxa25x_pinctrl_driver);
262
263MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>");
264MODULE_DESCRIPTION("Marvell PXA25x pinctrl driver");
265MODULE_LICENSE("GPL v2");
266