File Index
Files and directories
Sign in
FILE

pinctrl-pxa25x.c

File preview with syntax highlighting.

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