Merge tag 'samsung-dt-5.5-2' of https://git.kernel.org/pub/scm/linux/kernel/git/krzk...
[platform/kernel/linux-rpi.git] / drivers / pinctrl / pxa / pinctrl-pxa25x.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/of_device.h>
11 #include <linux/pinctrl/pinctrl.h>
12
13 #include "pinctrl-pxa2xx.h"
14
15 static 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
213 static 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
248 static const struct of_device_id pxa25x_pinctrl_match[] = {
249         { .compatible = "marvell,pxa25x-pinctrl", },
250         {}
251 };
252 MODULE_DEVICE_TABLE(of, pxa25x_pinctrl_match);
253
254 static 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 };
261 module_platform_driver(pxa25x_pinctrl_driver);
262
263 MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>");
264 MODULE_DESCRIPTION("Marvell PXA25x pinctrl driver");
265 MODULE_LICENSE("GPL v2");