1 // SPDX-License-Identifier: (GPL-2.0 OR MIT)
3 * Microsemi SoCs pinctrl driver
5 * Author: <alexandre.belloni@free-electrons.com>
6 * License: Dual MIT/GPL
7 * Copyright (c) 2017 Microsemi Corporation
10 #include <linux/gpio/driver.h>
11 #include <linux/interrupt.h>
13 #include <linux/mfd/ocelot.h>
15 #include <linux/platform_device.h>
16 #include <linux/regmap.h>
17 #include <linux/reset.h>
18 #include <linux/slab.h>
20 #include <linux/pinctrl/consumer.h>
21 #include <linux/pinctrl/pinconf-generic.h>
22 #include <linux/pinctrl/pinconf.h>
23 #include <linux/pinctrl/pinctrl.h>
24 #include <linux/pinctrl/pinmux.h>
30 #define ocelot_clrsetbits(addr, clear, set) \
31 writel((readl(addr) & ~(clear)) | (set), (addr))
36 PINCONF_DRIVE_STRENGTH
,
39 /* GPIO standard registers */
40 #define OCELOT_GPIO_OUT_SET 0x0
41 #define OCELOT_GPIO_OUT_CLR 0x4
42 #define OCELOT_GPIO_OUT 0x8
43 #define OCELOT_GPIO_IN 0xc
44 #define OCELOT_GPIO_OE 0x10
45 #define OCELOT_GPIO_INTR 0x14
46 #define OCELOT_GPIO_INTR_ENA 0x18
47 #define OCELOT_GPIO_INTR_IDENT 0x1c
48 #define OCELOT_GPIO_ALT0 0x20
49 #define OCELOT_GPIO_ALT1 0x24
50 #define OCELOT_GPIO_SD_MAP 0x28
52 #define OCELOT_FUNC_PER_PIN 4
172 FUNC_TWI_SLC_GATE_AD
,
184 FUNC_USB_OVER_DETECT
,
194 static const char *const ocelot_function_names
[] = {
195 [FUNC_CAN0_a
] = "can0_a",
196 [FUNC_CAN0_b
] = "can0_b",
197 [FUNC_CAN1
] = "can1",
198 [FUNC_CLKMON
] = "clkmon",
199 [FUNC_NONE
] = "none",
202 [FUNC_FC0_a
] = "fc0_a",
203 [FUNC_FC0_b
] = "fc0_b",
204 [FUNC_FC0_c
] = "fc0_c",
205 [FUNC_FC1_a
] = "fc1_a",
206 [FUNC_FC1_b
] = "fc1_b",
207 [FUNC_FC1_c
] = "fc1_c",
208 [FUNC_FC2_a
] = "fc2_a",
209 [FUNC_FC2_b
] = "fc2_b",
210 [FUNC_FC3_a
] = "fc3_a",
211 [FUNC_FC3_b
] = "fc3_b",
212 [FUNC_FC3_c
] = "fc3_c",
213 [FUNC_FC4_a
] = "fc4_a",
214 [FUNC_FC4_b
] = "fc4_b",
215 [FUNC_FC4_c
] = "fc4_c",
216 [FUNC_FC_SHRD
] = "fc_shrd",
217 [FUNC_FC_SHRD0
] = "fc_shrd0",
218 [FUNC_FC_SHRD1
] = "fc_shrd1",
219 [FUNC_FC_SHRD2
] = "fc_shrd2",
220 [FUNC_FC_SHRD3
] = "fc_shrd3",
221 [FUNC_FC_SHRD4
] = "fc_shrd4",
222 [FUNC_FC_SHRD5
] = "fc_shrd5",
223 [FUNC_FC_SHRD6
] = "fc_shrd6",
224 [FUNC_FC_SHRD7
] = "fc_shrd7",
225 [FUNC_FC_SHRD8
] = "fc_shrd8",
226 [FUNC_FC_SHRD9
] = "fc_shrd9",
227 [FUNC_FC_SHRD10
] = "fc_shrd10",
228 [FUNC_FC_SHRD11
] = "fc_shrd11",
229 [FUNC_FC_SHRD12
] = "fc_shrd12",
230 [FUNC_FC_SHRD13
] = "fc_shrd13",
231 [FUNC_FC_SHRD14
] = "fc_shrd14",
232 [FUNC_FC_SHRD15
] = "fc_shrd15",
233 [FUNC_FC_SHRD16
] = "fc_shrd16",
234 [FUNC_FC_SHRD17
] = "fc_shrd17",
235 [FUNC_FC_SHRD18
] = "fc_shrd18",
236 [FUNC_FC_SHRD19
] = "fc_shrd19",
237 [FUNC_FC_SHRD20
] = "fc_shrd20",
238 [FUNC_FUSA
] = "fusa",
239 [FUNC_GPIO
] = "gpio",
240 [FUNC_IB_TRG_a
] = "ib_trig_a",
241 [FUNC_IB_TRG_b
] = "ib_trig_b",
242 [FUNC_IB_TRG_c
] = "ib_trig_c",
243 [FUNC_IRQ0
] = "irq0",
244 [FUNC_IRQ_IN_a
] = "irq_in_a",
245 [FUNC_IRQ_IN_b
] = "irq_in_b",
246 [FUNC_IRQ_IN_c
] = "irq_in_c",
247 [FUNC_IRQ0_IN
] = "irq0_in",
248 [FUNC_IRQ_OUT_a
] = "irq_out_a",
249 [FUNC_IRQ_OUT_b
] = "irq_out_b",
250 [FUNC_IRQ_OUT_c
] = "irq_out_c",
251 [FUNC_IRQ0_OUT
] = "irq0_out",
252 [FUNC_IRQ1
] = "irq1",
253 [FUNC_IRQ1_IN
] = "irq1_in",
254 [FUNC_IRQ1_OUT
] = "irq1_out",
255 [FUNC_IRQ3
] = "irq3",
256 [FUNC_IRQ4
] = "irq4",
257 [FUNC_EXT_IRQ
] = "ext_irq",
258 [FUNC_MIIM
] = "miim",
259 [FUNC_MIIM_a
] = "miim_a",
260 [FUNC_MIIM_b
] = "miim_b",
261 [FUNC_MIIM_c
] = "miim_c",
262 [FUNC_MIIM_Sa
] = "miim_slave_a",
263 [FUNC_MIIM_Sb
] = "miim_slave_b",
264 [FUNC_MIIM_IRQ
] = "miim_irq",
265 [FUNC_PHY_LED
] = "phy_led",
266 [FUNC_PCI_WAKE
] = "pci_wake",
267 [FUNC_PCIE_PERST
] = "pcie_perst",
269 [FUNC_OB_TRG
] = "ob_trig",
270 [FUNC_OB_TRG_a
] = "ob_trig_a",
271 [FUNC_OB_TRG_b
] = "ob_trig_b",
272 [FUNC_PTP0
] = "ptp0",
273 [FUNC_PTP1
] = "ptp1",
274 [FUNC_PTP2
] = "ptp2",
275 [FUNC_PTP3
] = "ptp3",
276 [FUNC_PTPSYNC_0
] = "ptpsync_0",
277 [FUNC_PTPSYNC_1
] = "ptpsync_1",
278 [FUNC_PTPSYNC_2
] = "ptpsync_2",
279 [FUNC_PTPSYNC_3
] = "ptpsync_3",
280 [FUNC_PTPSYNC_4
] = "ptpsync_4",
281 [FUNC_PTPSYNC_5
] = "ptpsync_5",
282 [FUNC_PTPSYNC_6
] = "ptpsync_6",
283 [FUNC_PTPSYNC_7
] = "ptpsync_7",
285 [FUNC_PWM_a
] = "pwm_a",
286 [FUNC_PWM_b
] = "pwm_b",
287 [FUNC_QSPI1
] = "qspi1",
288 [FUNC_QSPI2
] = "qspi2",
289 [FUNC_R
] = "reserved",
290 [FUNC_RECO_a
] = "reco_a",
291 [FUNC_RECO_b
] = "reco_b",
292 [FUNC_RECO_CLK
] = "reco_clk",
295 [FUNC_SFP_SD
] = "sfp_sd",
299 [FUNC_SGPIO_a
] = "sgpio_a",
300 [FUNC_SGPIO_b
] = "sgpio_b",
303 [FUNC_SYNCE
] = "synce",
304 [FUNC_TACHO
] = "tacho",
305 [FUNC_TACHO_a
] = "tacho_a",
306 [FUNC_TACHO_b
] = "tacho_b",
308 [FUNC_TWI2
] = "twi2",
309 [FUNC_TWI3
] = "twi3",
310 [FUNC_TWI_SCL_M
] = "twi_scl_m",
311 [FUNC_TWI_SLC_GATE
] = "twi_slc_gate",
312 [FUNC_TWI_SLC_GATE_AD
] = "twi_slc_gate_ad",
313 [FUNC_USB_H_a
] = "usb_host_a",
314 [FUNC_USB_H_b
] = "usb_host_b",
315 [FUNC_USB_H_c
] = "usb_host_c",
316 [FUNC_USB_S_a
] = "usb_slave_a",
317 [FUNC_USB_S_b
] = "usb_slave_b",
318 [FUNC_USB_S_c
] = "usb_slave_c",
319 [FUNC_USB_POWER
] = "usb_power",
320 [FUNC_USB2PHY_RST
] = "usb2phy_rst",
321 [FUNC_USB_OVER_DETECT
] = "usb_over_detect",
322 [FUNC_USB_ULPI
] = "usb_ulpi",
323 [FUNC_UART
] = "uart",
324 [FUNC_UART2
] = "uart2",
325 [FUNC_UART3
] = "uart3",
326 [FUNC_PLL_STAT
] = "pll_stat",
327 [FUNC_EMMC
] = "emmc",
328 [FUNC_EMMC_SD
] = "emmc_sd",
329 [FUNC_REF_CLK
] = "ref_clk",
330 [FUNC_RCVRD_CLK
] = "rcvrd_clk",
333 struct ocelot_pmx_func
{
335 unsigned int ngroups
;
338 struct ocelot_pin_caps
{
340 unsigned char functions
[OCELOT_FUNC_PER_PIN
];
341 unsigned char a_functions
[OCELOT_FUNC_PER_PIN
]; /* Additional functions */
344 struct ocelot_pincfg_data
{
351 struct ocelot_pinctrl
{
353 struct pinctrl_dev
*pctl
;
354 struct gpio_chip gpio_chip
;
356 struct regmap
*pincfg
;
357 struct pinctrl_desc
*desc
;
358 const struct ocelot_pincfg_data
*pincfg_data
;
359 struct ocelot_pmx_func func
[FUNC_MAX
];
361 struct workqueue_struct
*wq
;
364 struct ocelot_match_data
{
365 struct pinctrl_desc desc
;
366 struct ocelot_pincfg_data pincfg_data
;
369 struct ocelot_irq_work
{
370 struct work_struct irq_work
;
371 struct irq_desc
*irq_desc
;
374 #define LUTON_P(p, f0, f1) \
375 static struct ocelot_pin_caps luton_pin_##p = { \
378 FUNC_GPIO, FUNC_##f0, FUNC_##f1, FUNC_NONE, \
382 LUTON_P(0, SG0
, NONE
);
383 LUTON_P(1, SG0
, NONE
);
384 LUTON_P(2, SG0
, NONE
);
385 LUTON_P(3, SG0
, NONE
);
386 LUTON_P(4, TACHO
, NONE
);
387 LUTON_P(5, TWI
, PHY_LED
);
388 LUTON_P(6, TWI
, PHY_LED
);
389 LUTON_P(7, NONE
, PHY_LED
);
390 LUTON_P(8, EXT_IRQ
, PHY_LED
);
391 LUTON_P(9, EXT_IRQ
, PHY_LED
);
392 LUTON_P(10, SFP
, PHY_LED
);
393 LUTON_P(11, SFP
, PHY_LED
);
394 LUTON_P(12, SFP
, PHY_LED
);
395 LUTON_P(13, SFP
, PHY_LED
);
396 LUTON_P(14, SI
, PHY_LED
);
397 LUTON_P(15, SI
, PHY_LED
);
398 LUTON_P(16, SI
, PHY_LED
);
399 LUTON_P(17, SFP
, PHY_LED
);
400 LUTON_P(18, SFP
, PHY_LED
);
401 LUTON_P(19, SFP
, PHY_LED
);
402 LUTON_P(20, SFP
, PHY_LED
);
403 LUTON_P(21, SFP
, PHY_LED
);
404 LUTON_P(22, SFP
, PHY_LED
);
405 LUTON_P(23, SFP
, PHY_LED
);
406 LUTON_P(24, SFP
, PHY_LED
);
407 LUTON_P(25, SFP
, PHY_LED
);
408 LUTON_P(26, SFP
, PHY_LED
);
409 LUTON_P(27, SFP
, PHY_LED
);
410 LUTON_P(28, SFP
, PHY_LED
);
411 LUTON_P(29, PWM
, NONE
);
412 LUTON_P(30, UART
, NONE
);
413 LUTON_P(31, UART
, NONE
);
415 #define LUTON_PIN(n) { \
418 .drv_data = &luton_pin_##n \
421 static const struct pinctrl_pin_desc luton_pins
[] = {
456 #define SERVAL_P(p, f0, f1, f2) \
457 static struct ocelot_pin_caps serval_pin_##p = { \
460 FUNC_GPIO, FUNC_##f0, FUNC_##f1, FUNC_##f2, \
464 SERVAL_P(0, SG0
, NONE
, NONE
);
465 SERVAL_P(1, SG0
, NONE
, NONE
);
466 SERVAL_P(2, SG0
, NONE
, NONE
);
467 SERVAL_P(3, SG0
, NONE
, NONE
);
468 SERVAL_P(4, TACHO
, NONE
, NONE
);
469 SERVAL_P(5, PWM
, NONE
, NONE
);
470 SERVAL_P(6, TWI
, NONE
, NONE
);
471 SERVAL_P(7, TWI
, NONE
, NONE
);
472 SERVAL_P(8, SI
, NONE
, NONE
);
473 SERVAL_P(9, SI
, MD
, NONE
);
474 SERVAL_P(10, SI
, MD
, NONE
);
475 SERVAL_P(11, SFP
, MD
, TWI_SCL_M
);
476 SERVAL_P(12, SFP
, MD
, TWI_SCL_M
);
477 SERVAL_P(13, SFP
, UART2
, TWI_SCL_M
);
478 SERVAL_P(14, SFP
, UART2
, TWI_SCL_M
);
479 SERVAL_P(15, SFP
, PTP0
, TWI_SCL_M
);
480 SERVAL_P(16, SFP
, PTP0
, TWI_SCL_M
);
481 SERVAL_P(17, SFP
, PCI_WAKE
, TWI_SCL_M
);
482 SERVAL_P(18, SFP
, NONE
, TWI_SCL_M
);
483 SERVAL_P(19, SFP
, NONE
, TWI_SCL_M
);
484 SERVAL_P(20, SFP
, NONE
, TWI_SCL_M
);
485 SERVAL_P(21, SFP
, NONE
, TWI_SCL_M
);
486 SERVAL_P(22, NONE
, NONE
, NONE
);
487 SERVAL_P(23, NONE
, NONE
, NONE
);
488 SERVAL_P(24, NONE
, NONE
, NONE
);
489 SERVAL_P(25, NONE
, NONE
, NONE
);
490 SERVAL_P(26, UART
, NONE
, NONE
);
491 SERVAL_P(27, UART
, NONE
, NONE
);
492 SERVAL_P(28, IRQ0
, NONE
, NONE
);
493 SERVAL_P(29, IRQ1
, NONE
, NONE
);
494 SERVAL_P(30, PTP0
, NONE
, NONE
);
495 SERVAL_P(31, PTP0
, NONE
, NONE
);
497 #define SERVAL_PIN(n) { \
500 .drv_data = &serval_pin_##n \
503 static const struct pinctrl_pin_desc serval_pins
[] = {
538 #define OCELOT_P(p, f0, f1, f2) \
539 static struct ocelot_pin_caps ocelot_pin_##p = { \
542 FUNC_GPIO, FUNC_##f0, FUNC_##f1, FUNC_##f2, \
546 OCELOT_P(0, SG0
, NONE
, NONE
);
547 OCELOT_P(1, SG0
, NONE
, NONE
);
548 OCELOT_P(2, SG0
, NONE
, NONE
);
549 OCELOT_P(3, SG0
, NONE
, NONE
);
550 OCELOT_P(4, IRQ0_IN
, IRQ0_OUT
, TWI_SCL_M
);
551 OCELOT_P(5, IRQ1_IN
, IRQ1_OUT
, PCI_WAKE
);
552 OCELOT_P(6, UART
, TWI_SCL_M
, NONE
);
553 OCELOT_P(7, UART
, TWI_SCL_M
, NONE
);
554 OCELOT_P(8, SI
, TWI_SCL_M
, IRQ0_OUT
);
555 OCELOT_P(9, SI
, TWI_SCL_M
, IRQ1_OUT
);
556 OCELOT_P(10, PTP2
, TWI_SCL_M
, SFP
);
557 OCELOT_P(11, PTP3
, TWI_SCL_M
, SFP
);
558 OCELOT_P(12, UART2
, TWI_SCL_M
, SFP
);
559 OCELOT_P(13, UART2
, TWI_SCL_M
, SFP
);
560 OCELOT_P(14, MIIM
, TWI_SCL_M
, SFP
);
561 OCELOT_P(15, MIIM
, TWI_SCL_M
, SFP
);
562 OCELOT_P(16, TWI
, NONE
, SI
);
563 OCELOT_P(17, TWI
, TWI_SCL_M
, SI
);
564 OCELOT_P(18, PTP0
, TWI_SCL_M
, NONE
);
565 OCELOT_P(19, PTP1
, TWI_SCL_M
, NONE
);
566 OCELOT_P(20, RECO_CLK
, TACHO
, TWI_SCL_M
);
567 OCELOT_P(21, RECO_CLK
, PWM
, TWI_SCL_M
);
569 #define OCELOT_PIN(n) { \
572 .drv_data = &ocelot_pin_##n \
575 static const struct pinctrl_pin_desc ocelot_pins
[] = {
600 #define JAGUAR2_P(p, f0, f1) \
601 static struct ocelot_pin_caps jaguar2_pin_##p = { \
604 FUNC_GPIO, FUNC_##f0, FUNC_##f1, FUNC_NONE \
608 JAGUAR2_P(0, SG0
, NONE
);
609 JAGUAR2_P(1, SG0
, NONE
);
610 JAGUAR2_P(2, SG0
, NONE
);
611 JAGUAR2_P(3, SG0
, NONE
);
612 JAGUAR2_P(4, SG1
, NONE
);
613 JAGUAR2_P(5, SG1
, NONE
);
614 JAGUAR2_P(6, IRQ0_IN
, IRQ0_OUT
);
615 JAGUAR2_P(7, IRQ1_IN
, IRQ1_OUT
);
616 JAGUAR2_P(8, PTP0
, NONE
);
617 JAGUAR2_P(9, PTP1
, NONE
);
618 JAGUAR2_P(10, UART
, NONE
);
619 JAGUAR2_P(11, UART
, NONE
);
620 JAGUAR2_P(12, SG1
, NONE
);
621 JAGUAR2_P(13, SG1
, NONE
);
622 JAGUAR2_P(14, TWI
, TWI_SCL_M
);
623 JAGUAR2_P(15, TWI
, NONE
);
624 JAGUAR2_P(16, SI
, TWI_SCL_M
);
625 JAGUAR2_P(17, SI
, TWI_SCL_M
);
626 JAGUAR2_P(18, SI
, TWI_SCL_M
);
627 JAGUAR2_P(19, PCI_WAKE
, NONE
);
628 JAGUAR2_P(20, IRQ0_OUT
, TWI_SCL_M
);
629 JAGUAR2_P(21, IRQ1_OUT
, TWI_SCL_M
);
630 JAGUAR2_P(22, TACHO
, NONE
);
631 JAGUAR2_P(23, PWM
, NONE
);
632 JAGUAR2_P(24, UART2
, NONE
);
633 JAGUAR2_P(25, UART2
, SI
);
634 JAGUAR2_P(26, PTP2
, SI
);
635 JAGUAR2_P(27, PTP3
, SI
);
636 JAGUAR2_P(28, TWI2
, SI
);
637 JAGUAR2_P(29, TWI2
, SI
);
638 JAGUAR2_P(30, SG2
, SI
);
639 JAGUAR2_P(31, SG2
, SI
);
640 JAGUAR2_P(32, SG2
, SI
);
641 JAGUAR2_P(33, SG2
, SI
);
642 JAGUAR2_P(34, NONE
, TWI_SCL_M
);
643 JAGUAR2_P(35, NONE
, TWI_SCL_M
);
644 JAGUAR2_P(36, NONE
, TWI_SCL_M
);
645 JAGUAR2_P(37, NONE
, TWI_SCL_M
);
646 JAGUAR2_P(38, NONE
, TWI_SCL_M
);
647 JAGUAR2_P(39, NONE
, TWI_SCL_M
);
648 JAGUAR2_P(40, NONE
, TWI_SCL_M
);
649 JAGUAR2_P(41, NONE
, TWI_SCL_M
);
650 JAGUAR2_P(42, NONE
, TWI_SCL_M
);
651 JAGUAR2_P(43, NONE
, TWI_SCL_M
);
652 JAGUAR2_P(44, NONE
, SFP
);
653 JAGUAR2_P(45, NONE
, SFP
);
654 JAGUAR2_P(46, NONE
, SFP
);
655 JAGUAR2_P(47, NONE
, SFP
);
656 JAGUAR2_P(48, SFP
, NONE
);
657 JAGUAR2_P(49, SFP
, SI
);
658 JAGUAR2_P(50, SFP
, SI
);
659 JAGUAR2_P(51, SFP
, SI
);
660 JAGUAR2_P(52, SFP
, NONE
);
661 JAGUAR2_P(53, SFP
, NONE
);
662 JAGUAR2_P(54, SFP
, NONE
);
663 JAGUAR2_P(55, SFP
, NONE
);
664 JAGUAR2_P(56, MIIM
, SFP
);
665 JAGUAR2_P(57, MIIM
, SFP
);
666 JAGUAR2_P(58, MIIM
, SFP
);
667 JAGUAR2_P(59, MIIM
, SFP
);
668 JAGUAR2_P(60, NONE
, NONE
);
669 JAGUAR2_P(61, NONE
, NONE
);
670 JAGUAR2_P(62, NONE
, NONE
);
671 JAGUAR2_P(63, NONE
, NONE
);
673 #define JAGUAR2_PIN(n) { \
676 .drv_data = &jaguar2_pin_##n \
679 static const struct pinctrl_pin_desc jaguar2_pins
[] = {
746 #define SERVALT_P(p, f0, f1, f2) \
747 static struct ocelot_pin_caps servalt_pin_##p = { \
750 FUNC_GPIO, FUNC_##f0, FUNC_##f1, FUNC_##f2 \
754 SERVALT_P(0, SG0
, NONE
, NONE
);
755 SERVALT_P(1, SG0
, NONE
, NONE
);
756 SERVALT_P(2, SG0
, NONE
, NONE
);
757 SERVALT_P(3, SG0
, NONE
, NONE
);
758 SERVALT_P(4, IRQ0_IN
, IRQ0_OUT
, TWI_SCL_M
);
759 SERVALT_P(5, IRQ1_IN
, IRQ1_OUT
, TWI_SCL_M
);
760 SERVALT_P(6, UART
, NONE
, NONE
);
761 SERVALT_P(7, UART
, NONE
, NONE
);
762 SERVALT_P(8, SI
, SFP
, TWI_SCL_M
);
763 SERVALT_P(9, PCI_WAKE
, SFP
, SI
);
764 SERVALT_P(10, PTP0
, SFP
, TWI_SCL_M
);
765 SERVALT_P(11, PTP1
, SFP
, TWI_SCL_M
);
766 SERVALT_P(12, REF_CLK
, SFP
, TWI_SCL_M
);
767 SERVALT_P(13, REF_CLK
, SFP
, TWI_SCL_M
);
768 SERVALT_P(14, REF_CLK
, IRQ0_OUT
, SI
);
769 SERVALT_P(15, REF_CLK
, IRQ1_OUT
, SI
);
770 SERVALT_P(16, TACHO
, SFP
, SI
);
771 SERVALT_P(17, PWM
, NONE
, TWI_SCL_M
);
772 SERVALT_P(18, PTP2
, SFP
, SI
);
773 SERVALT_P(19, PTP3
, SFP
, SI
);
774 SERVALT_P(20, UART2
, SFP
, SI
);
775 SERVALT_P(21, UART2
, NONE
, NONE
);
776 SERVALT_P(22, MIIM
, SFP
, TWI2
);
777 SERVALT_P(23, MIIM
, SFP
, TWI2
);
778 SERVALT_P(24, TWI
, NONE
, NONE
);
779 SERVALT_P(25, TWI
, SFP
, TWI_SCL_M
);
780 SERVALT_P(26, TWI_SCL_M
, SFP
, SI
);
781 SERVALT_P(27, TWI_SCL_M
, SFP
, SI
);
782 SERVALT_P(28, TWI_SCL_M
, SFP
, SI
);
783 SERVALT_P(29, TWI_SCL_M
, NONE
, NONE
);
784 SERVALT_P(30, TWI_SCL_M
, NONE
, NONE
);
785 SERVALT_P(31, TWI_SCL_M
, NONE
, NONE
);
786 SERVALT_P(32, TWI_SCL_M
, NONE
, NONE
);
787 SERVALT_P(33, RCVRD_CLK
, NONE
, NONE
);
788 SERVALT_P(34, RCVRD_CLK
, NONE
, NONE
);
789 SERVALT_P(35, RCVRD_CLK
, NONE
, NONE
);
790 SERVALT_P(36, RCVRD_CLK
, NONE
, NONE
);
792 #define SERVALT_PIN(n) { \
795 .drv_data = &servalt_pin_##n \
798 static const struct pinctrl_pin_desc servalt_pins
[] = {
838 #define SPARX5_P(p, f0, f1, f2) \
839 static struct ocelot_pin_caps sparx5_pin_##p = { \
842 FUNC_GPIO, FUNC_##f0, FUNC_##f1, FUNC_##f2 \
846 SPARX5_P(0, SG0
, PLL_STAT
, NONE
);
847 SPARX5_P(1, SG0
, NONE
, NONE
);
848 SPARX5_P(2, SG0
, NONE
, NONE
);
849 SPARX5_P(3, SG0
, NONE
, NONE
);
850 SPARX5_P(4, SG1
, NONE
, NONE
);
851 SPARX5_P(5, SG1
, NONE
, NONE
);
852 SPARX5_P(6, IRQ0_IN
, IRQ0_OUT
, SFP
);
853 SPARX5_P(7, IRQ1_IN
, IRQ1_OUT
, SFP
);
854 SPARX5_P(8, PTP0
, NONE
, SFP
);
855 SPARX5_P(9, PTP1
, SFP
, TWI_SCL_M
);
856 SPARX5_P(10, UART
, NONE
, NONE
);
857 SPARX5_P(11, UART
, NONE
, NONE
);
858 SPARX5_P(12, SG1
, NONE
, NONE
);
859 SPARX5_P(13, SG1
, NONE
, NONE
);
860 SPARX5_P(14, TWI
, TWI_SCL_M
, NONE
);
861 SPARX5_P(15, TWI
, NONE
, NONE
);
862 SPARX5_P(16, SI
, TWI_SCL_M
, SFP
);
863 SPARX5_P(17, SI
, TWI_SCL_M
, SFP
);
864 SPARX5_P(18, SI
, TWI_SCL_M
, SFP
);
865 SPARX5_P(19, PCI_WAKE
, TWI_SCL_M
, SFP
);
866 SPARX5_P(20, IRQ0_OUT
, TWI_SCL_M
, SFP
);
867 SPARX5_P(21, IRQ1_OUT
, TACHO
, SFP
);
868 SPARX5_P(22, TACHO
, IRQ0_OUT
, TWI_SCL_M
);
869 SPARX5_P(23, PWM
, UART3
, TWI_SCL_M
);
870 SPARX5_P(24, PTP2
, UART3
, TWI_SCL_M
);
871 SPARX5_P(25, PTP3
, SI
, TWI_SCL_M
);
872 SPARX5_P(26, UART2
, SI
, TWI_SCL_M
);
873 SPARX5_P(27, UART2
, SI
, TWI_SCL_M
);
874 SPARX5_P(28, TWI2
, SI
, SFP
);
875 SPARX5_P(29, TWI2
, SI
, SFP
);
876 SPARX5_P(30, SG2
, SI
, PWM
);
877 SPARX5_P(31, SG2
, SI
, TWI_SCL_M
);
878 SPARX5_P(32, SG2
, SI
, TWI_SCL_M
);
879 SPARX5_P(33, SG2
, SI
, SFP
);
880 SPARX5_P(34, NONE
, TWI_SCL_M
, EMMC
);
881 SPARX5_P(35, SFP
, TWI_SCL_M
, EMMC
);
882 SPARX5_P(36, SFP
, TWI_SCL_M
, EMMC
);
883 SPARX5_P(37, SFP
, NONE
, EMMC
);
884 SPARX5_P(38, NONE
, TWI_SCL_M
, EMMC
);
885 SPARX5_P(39, SI2
, TWI_SCL_M
, EMMC
);
886 SPARX5_P(40, SI2
, TWI_SCL_M
, EMMC
);
887 SPARX5_P(41, SI2
, TWI_SCL_M
, EMMC
);
888 SPARX5_P(42, SI2
, TWI_SCL_M
, EMMC
);
889 SPARX5_P(43, SI2
, TWI_SCL_M
, EMMC
);
890 SPARX5_P(44, SI
, SFP
, EMMC
);
891 SPARX5_P(45, SI
, SFP
, EMMC
);
892 SPARX5_P(46, NONE
, SFP
, EMMC
);
893 SPARX5_P(47, NONE
, SFP
, EMMC
);
894 SPARX5_P(48, TWI3
, SI
, SFP
);
895 SPARX5_P(49, TWI3
, NONE
, SFP
);
896 SPARX5_P(50, SFP
, NONE
, TWI_SCL_M
);
897 SPARX5_P(51, SFP
, SI
, TWI_SCL_M
);
898 SPARX5_P(52, SFP
, MIIM
, TWI_SCL_M
);
899 SPARX5_P(53, SFP
, MIIM
, TWI_SCL_M
);
900 SPARX5_P(54, SFP
, PTP2
, TWI_SCL_M
);
901 SPARX5_P(55, SFP
, PTP3
, PCI_WAKE
);
902 SPARX5_P(56, MIIM
, SFP
, TWI_SCL_M
);
903 SPARX5_P(57, MIIM
, SFP
, TWI_SCL_M
);
904 SPARX5_P(58, MIIM
, SFP
, TWI_SCL_M
);
905 SPARX5_P(59, MIIM
, SFP
, NONE
);
906 SPARX5_P(60, RECO_CLK
, NONE
, NONE
);
907 SPARX5_P(61, RECO_CLK
, NONE
, NONE
);
908 SPARX5_P(62, RECO_CLK
, PLL_STAT
, NONE
);
909 SPARX5_P(63, RECO_CLK
, NONE
, NONE
);
911 #define SPARX5_PIN(n) { \
914 .drv_data = &sparx5_pin_##n \
917 static const struct pinctrl_pin_desc sparx5_pins
[] = {
984 #define LAN966X_P(p, f0, f1, f2, f3, f4, f5, f6, f7) \
985 static struct ocelot_pin_caps lan966x_pin_##p = { \
988 FUNC_##f0, FUNC_##f1, FUNC_##f2, \
992 FUNC_##f4, FUNC_##f5, FUNC_##f6, \
997 /* Pinmuxing table taken from data sheet */
998 /* Pin FUNC0 FUNC1 FUNC2 FUNC3 FUNC4 FUNC5 FUNC6 FUNC7 */
999 LAN966X_P(0, GPIO
, NONE
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1000 LAN966X_P(1, GPIO
, NONE
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1001 LAN966X_P(2, GPIO
, NONE
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1002 LAN966X_P(3, GPIO
, NONE
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1003 LAN966X_P(4, GPIO
, NONE
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1004 LAN966X_P(5, GPIO
, NONE
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1005 LAN966X_P(6, GPIO
, NONE
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1006 LAN966X_P(7, GPIO
, NONE
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1007 LAN966X_P(8, GPIO
, FC0_a
, USB_H_b
, NONE
, USB_S_b
, NONE
, NONE
, R
);
1008 LAN966X_P(9, GPIO
, FC0_a
, USB_H_b
, NONE
, NONE
, NONE
, NONE
, R
);
1009 LAN966X_P(10, GPIO
, FC0_a
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1010 LAN966X_P(11, GPIO
, FC1_a
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1011 LAN966X_P(12, GPIO
, FC1_a
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1012 LAN966X_P(13, GPIO
, FC1_a
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1013 LAN966X_P(14, GPIO
, FC2_a
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1014 LAN966X_P(15, GPIO
, FC2_a
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1015 LAN966X_P(16, GPIO
, FC2_a
, IB_TRG_a
, NONE
, OB_TRG_a
, IRQ_IN_c
, IRQ_OUT_c
, R
);
1016 LAN966X_P(17, GPIO
, FC3_a
, IB_TRG_a
, NONE
, OB_TRG_a
, IRQ_IN_c
, IRQ_OUT_c
, R
);
1017 LAN966X_P(18, GPIO
, FC3_a
, IB_TRG_a
, NONE
, OB_TRG_a
, IRQ_IN_c
, IRQ_OUT_c
, R
);
1018 LAN966X_P(19, GPIO
, FC3_a
, IB_TRG_a
, NONE
, OB_TRG_a
, IRQ_IN_c
, IRQ_OUT_c
, R
);
1019 LAN966X_P(20, GPIO
, FC4_a
, IB_TRG_a
, NONE
, OB_TRG_a
, IRQ_IN_c
, NONE
, R
);
1020 LAN966X_P(21, GPIO
, FC4_a
, NONE
, NONE
, OB_TRG_a
, NONE
, NONE
, R
);
1021 LAN966X_P(22, GPIO
, FC4_a
, NONE
, NONE
, OB_TRG_a
, NONE
, NONE
, R
);
1022 LAN966X_P(23, GPIO
, NONE
, NONE
, NONE
, OB_TRG_a
, NONE
, NONE
, R
);
1023 LAN966X_P(24, GPIO
, FC0_b
, IB_TRG_a
, USB_H_c
, OB_TRG_a
, IRQ_IN_c
, TACHO_a
, R
);
1024 LAN966X_P(25, GPIO
, FC0_b
, IB_TRG_a
, USB_H_c
, OB_TRG_a
, IRQ_OUT_c
, SFP_SD
, R
);
1025 LAN966X_P(26, GPIO
, FC0_b
, IB_TRG_a
, USB_S_c
, OB_TRG_a
, CAN0_a
, SFP_SD
, R
);
1026 LAN966X_P(27, GPIO
, NONE
, NONE
, NONE
, OB_TRG_a
, CAN0_a
, PWM_a
, R
);
1027 LAN966X_P(28, GPIO
, MIIM_a
, NONE
, NONE
, OB_TRG_a
, IRQ_OUT_c
, SFP_SD
, R
);
1028 LAN966X_P(29, GPIO
, MIIM_a
, NONE
, NONE
, OB_TRG_a
, NONE
, NONE
, R
);
1029 LAN966X_P(30, GPIO
, FC3_c
, CAN1
, CLKMON
, OB_TRG
, RECO_b
, NONE
, R
);
1030 LAN966X_P(31, GPIO
, FC3_c
, CAN1
, CLKMON
, OB_TRG
, RECO_b
, NONE
, R
);
1031 LAN966X_P(32, GPIO
, FC3_c
, NONE
, SGPIO_a
, NONE
, MIIM_Sa
, NONE
, R
);
1032 LAN966X_P(33, GPIO
, FC1_b
, NONE
, SGPIO_a
, NONE
, MIIM_Sa
, MIIM_b
, R
);
1033 LAN966X_P(34, GPIO
, FC1_b
, NONE
, SGPIO_a
, NONE
, MIIM_Sa
, MIIM_b
, R
);
1034 LAN966X_P(35, GPIO
, FC1_b
, PTPSYNC_0
, SGPIO_a
, CAN0_b
, NONE
, NONE
, R
);
1035 LAN966X_P(36, GPIO
, NONE
, PTPSYNC_1
, NONE
, CAN0_b
, NONE
, NONE
, R
);
1036 LAN966X_P(37, GPIO
, FC_SHRD0
, PTPSYNC_2
, TWI_SLC_GATE_AD
, NONE
, NONE
, NONE
, R
);
1037 LAN966X_P(38, GPIO
, NONE
, PTPSYNC_3
, NONE
, NONE
, NONE
, NONE
, R
);
1038 LAN966X_P(39, GPIO
, NONE
, PTPSYNC_4
, NONE
, NONE
, NONE
, NONE
, R
);
1039 LAN966X_P(40, GPIO
, FC_SHRD1
, PTPSYNC_5
, NONE
, NONE
, NONE
, NONE
, R
);
1040 LAN966X_P(41, GPIO
, FC_SHRD2
, PTPSYNC_6
, TWI_SLC_GATE_AD
, NONE
, NONE
, NONE
, R
);
1041 LAN966X_P(42, GPIO
, FC_SHRD3
, PTPSYNC_7
, TWI_SLC_GATE_AD
, NONE
, NONE
, NONE
, R
);
1042 LAN966X_P(43, GPIO
, FC2_b
, OB_TRG_b
, IB_TRG_b
, IRQ_OUT_a
, RECO_a
, IRQ_IN_a
, R
);
1043 LAN966X_P(44, GPIO
, FC2_b
, OB_TRG_b
, IB_TRG_b
, IRQ_OUT_a
, RECO_a
, IRQ_IN_a
, R
);
1044 LAN966X_P(45, GPIO
, FC2_b
, OB_TRG_b
, IB_TRG_b
, IRQ_OUT_a
, NONE
, IRQ_IN_a
, R
);
1045 LAN966X_P(46, GPIO
, FC1_c
, OB_TRG_b
, IB_TRG_b
, IRQ_OUT_a
, FC_SHRD4
, IRQ_IN_a
, R
);
1046 LAN966X_P(47, GPIO
, FC1_c
, OB_TRG_b
, IB_TRG_b
, IRQ_OUT_a
, FC_SHRD5
, IRQ_IN_a
, R
);
1047 LAN966X_P(48, GPIO
, FC1_c
, OB_TRG_b
, IB_TRG_b
, IRQ_OUT_a
, FC_SHRD6
, IRQ_IN_a
, R
);
1048 LAN966X_P(49, GPIO
, FC_SHRD7
, OB_TRG_b
, IB_TRG_b
, IRQ_OUT_a
, TWI_SLC_GATE
, IRQ_IN_a
, R
);
1049 LAN966X_P(50, GPIO
, FC_SHRD16
, OB_TRG_b
, IB_TRG_b
, IRQ_OUT_a
, TWI_SLC_GATE
, NONE
, R
);
1050 LAN966X_P(51, GPIO
, FC3_b
, OB_TRG_b
, IB_TRG_c
, IRQ_OUT_b
, PWM_b
, IRQ_IN_b
, R
);
1051 LAN966X_P(52, GPIO
, FC3_b
, OB_TRG_b
, IB_TRG_c
, IRQ_OUT_b
, TACHO_b
, IRQ_IN_b
, R
);
1052 LAN966X_P(53, GPIO
, FC3_b
, OB_TRG_b
, IB_TRG_c
, IRQ_OUT_b
, NONE
, IRQ_IN_b
, R
);
1053 LAN966X_P(54, GPIO
, FC_SHRD8
, OB_TRG_b
, IB_TRG_c
, IRQ_OUT_b
, TWI_SLC_GATE
, IRQ_IN_b
, R
);
1054 LAN966X_P(55, GPIO
, FC_SHRD9
, OB_TRG_b
, IB_TRG_c
, IRQ_OUT_b
, TWI_SLC_GATE
, IRQ_IN_b
, R
);
1055 LAN966X_P(56, GPIO
, FC4_b
, OB_TRG_b
, IB_TRG_c
, IRQ_OUT_b
, FC_SHRD10
, IRQ_IN_b
, R
);
1056 LAN966X_P(57, GPIO
, FC4_b
, TWI_SLC_GATE
, IB_TRG_c
, IRQ_OUT_b
, FC_SHRD11
, IRQ_IN_b
, R
);
1057 LAN966X_P(58, GPIO
, FC4_b
, TWI_SLC_GATE
, IB_TRG_c
, IRQ_OUT_b
, FC_SHRD12
, IRQ_IN_b
, R
);
1058 LAN966X_P(59, GPIO
, QSPI1
, MIIM_c
, NONE
, NONE
, MIIM_Sb
, NONE
, R
);
1059 LAN966X_P(60, GPIO
, QSPI1
, MIIM_c
, NONE
, NONE
, MIIM_Sb
, NONE
, R
);
1060 LAN966X_P(61, GPIO
, QSPI1
, NONE
, SGPIO_b
, FC0_c
, MIIM_Sb
, NONE
, R
);
1061 LAN966X_P(62, GPIO
, QSPI1
, FC_SHRD13
, SGPIO_b
, FC0_c
, TWI_SLC_GATE
, SFP_SD
, R
);
1062 LAN966X_P(63, GPIO
, QSPI1
, FC_SHRD14
, SGPIO_b
, FC0_c
, TWI_SLC_GATE
, SFP_SD
, R
);
1063 LAN966X_P(64, GPIO
, QSPI1
, FC4_c
, SGPIO_b
, FC_SHRD15
, TWI_SLC_GATE
, SFP_SD
, R
);
1064 LAN966X_P(65, GPIO
, USB_H_a
, FC4_c
, NONE
, IRQ_OUT_c
, TWI_SLC_GATE_AD
, NONE
, R
);
1065 LAN966X_P(66, GPIO
, USB_H_a
, FC4_c
, USB_S_a
, IRQ_OUT_c
, IRQ_IN_c
, NONE
, R
);
1066 LAN966X_P(67, GPIO
, EMMC_SD
, NONE
, QSPI2
, NONE
, NONE
, NONE
, R
);
1067 LAN966X_P(68, GPIO
, EMMC_SD
, NONE
, QSPI2
, NONE
, NONE
, NONE
, R
);
1068 LAN966X_P(69, GPIO
, EMMC_SD
, NONE
, QSPI2
, NONE
, NONE
, NONE
, R
);
1069 LAN966X_P(70, GPIO
, EMMC_SD
, NONE
, QSPI2
, NONE
, NONE
, NONE
, R
);
1070 LAN966X_P(71, GPIO
, EMMC_SD
, NONE
, QSPI2
, NONE
, NONE
, NONE
, R
);
1071 LAN966X_P(72, GPIO
, EMMC_SD
, NONE
, QSPI2
, NONE
, NONE
, NONE
, R
);
1072 LAN966X_P(73, GPIO
, EMMC
, NONE
, NONE
, SD
, NONE
, NONE
, R
);
1073 LAN966X_P(74, GPIO
, EMMC
, NONE
, FC_SHRD17
, SD
, TWI_SLC_GATE
, NONE
, R
);
1074 LAN966X_P(75, GPIO
, EMMC
, NONE
, FC_SHRD18
, SD
, TWI_SLC_GATE
, NONE
, R
);
1075 LAN966X_P(76, GPIO
, EMMC
, NONE
, FC_SHRD19
, SD
, TWI_SLC_GATE
, NONE
, R
);
1076 LAN966X_P(77, GPIO
, EMMC_SD
, NONE
, FC_SHRD20
, NONE
, TWI_SLC_GATE
, NONE
, R
);
1078 #define LAN966X_PIN(n) { \
1080 .name = "GPIO_"#n, \
1081 .drv_data = &lan966x_pin_##n \
1084 static const struct pinctrl_pin_desc lan966x_pins
[] = {
1165 #define LAN969X_P(p, f0, f1, f2, f3, f4, f5, f6, f7) \
1166 static struct ocelot_pin_caps lan969x_pin_##p = { \
1169 FUNC_##f0, FUNC_##f1, FUNC_##f2, \
1173 FUNC_##f4, FUNC_##f5, FUNC_##f6, \
1178 /* Pinmuxing table taken from data sheet */
1179 /* Pin FUNC0 FUNC1 FUNC2 FUNC3 FUNC4 FUNC5 FUNC6 FUNC7 */
1180 LAN969X_P(0, GPIO
, IRQ0
, FC_SHRD
, PCIE_PERST
, NONE
, NONE
, NONE
, R
);
1181 LAN969X_P(1, GPIO
, IRQ1
, FC_SHRD
, USB_POWER
, NONE
, NONE
, NONE
, R
);
1182 LAN969X_P(2, GPIO
, FC
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1183 LAN969X_P(3, GPIO
, FC
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1184 LAN969X_P(4, GPIO
, FC
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1185 LAN969X_P(5, GPIO
, SGPIO_a
, NONE
, CLKMON
, NONE
, NONE
, NONE
, R
);
1186 LAN969X_P(6, GPIO
, SGPIO_a
, NONE
, CLKMON
, NONE
, NONE
, NONE
, R
);
1187 LAN969X_P(7, GPIO
, SGPIO_a
, NONE
, CLKMON
, NONE
, NONE
, NONE
, R
);
1188 LAN969X_P(8, GPIO
, SGPIO_a
, NONE
, CLKMON
, NONE
, NONE
, NONE
, R
);
1189 LAN969X_P(9, GPIO
, MIIM
, MIIM_Sa
, CLKMON
, NONE
, NONE
, NONE
, R
);
1190 LAN969X_P(10, GPIO
, MIIM
, MIIM_Sa
, CLKMON
, NONE
, NONE
, NONE
, R
);
1191 LAN969X_P(11, GPIO
, MIIM_IRQ
, MIIM_Sa
, CLKMON
, NONE
, NONE
, NONE
, R
);
1192 LAN969X_P(12, GPIO
, IRQ3
, FC_SHRD
, USB2PHY_RST
, NONE
, NONE
, NONE
, R
);
1193 LAN969X_P(13, GPIO
, IRQ4
, FC_SHRD
, USB_OVER_DETECT
, NONE
, NONE
, NONE
, R
);
1194 LAN969X_P(14, GPIO
, EMMC_SD
, QSPI1
, FC
, NONE
, NONE
, NONE
, R
);
1195 LAN969X_P(15, GPIO
, EMMC_SD
, QSPI1
, FC
, NONE
, NONE
, NONE
, R
);
1196 LAN969X_P(16, GPIO
, EMMC_SD
, QSPI1
, FC
, NONE
, NONE
, NONE
, R
);
1197 LAN969X_P(17, GPIO
, EMMC_SD
, QSPI1
, PTPSYNC_0
, USB_POWER
, NONE
, NONE
, R
);
1198 LAN969X_P(18, GPIO
, EMMC_SD
, QSPI1
, PTPSYNC_1
, USB2PHY_RST
, NONE
, NONE
, R
);
1199 LAN969X_P(19, GPIO
, EMMC_SD
, QSPI1
, PTPSYNC_2
, USB_OVER_DETECT
, NONE
, NONE
, R
);
1200 LAN969X_P(20, GPIO
, EMMC_SD
, NONE
, FC_SHRD
, NONE
, NONE
, NONE
, R
);
1201 LAN969X_P(21, GPIO
, EMMC_SD
, NONE
, FC_SHRD
, NONE
, NONE
, NONE
, R
);
1202 LAN969X_P(22, GPIO
, EMMC_SD
, NONE
, FC_SHRD
, NONE
, NONE
, NONE
, R
);
1203 LAN969X_P(23, GPIO
, EMMC_SD
, NONE
, FC_SHRD
, NONE
, NONE
, NONE
, R
);
1204 LAN969X_P(24, GPIO
, EMMC_SD
, NONE
, NONE
, NONE
, NONE
, NONE
, R
);
1205 LAN969X_P(25, GPIO
, FAN
, FUSA
, CAN0_a
, QSPI1
, NONE
, NONE
, R
);
1206 LAN969X_P(26, GPIO
, FAN
, FUSA
, CAN0_a
, QSPI1
, NONE
, NONE
, R
);
1207 LAN969X_P(27, GPIO
, SYNCE
, FC
, MIIM
, QSPI1
, NONE
, NONE
, R
);
1208 LAN969X_P(28, GPIO
, SYNCE
, FC
, MIIM
, QSPI1
, NONE
, NONE
, R
);
1209 LAN969X_P(29, GPIO
, SYNCE
, FC
, MIIM_IRQ
, QSPI1
, NONE
, NONE
, R
);
1210 LAN969X_P(30, GPIO
, PTPSYNC_0
, USB_ULPI
, FC_SHRD
, QSPI1
, NONE
, NONE
, R
);
1211 LAN969X_P(31, GPIO
, PTPSYNC_1
, USB_ULPI
, FC_SHRD
, NONE
, NONE
, NONE
, R
);
1212 LAN969X_P(32, GPIO
, PTPSYNC_2
, USB_ULPI
, FC_SHRD
, NONE
, NONE
, NONE
, R
);
1213 LAN969X_P(33, GPIO
, SD
, USB_ULPI
, FC_SHRD
, NONE
, NONE
, NONE
, R
);
1214 LAN969X_P(34, GPIO
, SD
, USB_ULPI
, CAN1
, FC_SHRD
, NONE
, NONE
, R
);
1215 LAN969X_P(35, GPIO
, SD
, USB_ULPI
, CAN1
, FC_SHRD
, NONE
, NONE
, R
);
1216 LAN969X_P(36, GPIO
, SD
, USB_ULPI
, PCIE_PERST
, FC_SHRD
, NONE
, NONE
, R
);
1217 LAN969X_P(37, GPIO
, SD
, USB_ULPI
, CAN0_b
, NONE
, NONE
, NONE
, R
);
1218 LAN969X_P(38, GPIO
, SD
, USB_ULPI
, CAN0_b
, NONE
, NONE
, NONE
, R
);
1219 LAN969X_P(39, GPIO
, SD
, USB_ULPI
, MIIM
, NONE
, NONE
, NONE
, R
);
1220 LAN969X_P(40, GPIO
, SD
, USB_ULPI
, MIIM
, NONE
, NONE
, NONE
, R
);
1221 LAN969X_P(41, GPIO
, SD
, USB_ULPI
, MIIM_IRQ
, NONE
, NONE
, NONE
, R
);
1222 LAN969X_P(42, GPIO
, PTPSYNC_3
, CAN1
, NONE
, NONE
, NONE
, NONE
, R
);
1223 LAN969X_P(43, GPIO
, PTPSYNC_4
, CAN1
, NONE
, NONE
, NONE
, NONE
, R
);
1224 LAN969X_P(44, GPIO
, PTPSYNC_5
, SFP_SD
, NONE
, NONE
, NONE
, NONE
, R
);
1225 LAN969X_P(45, GPIO
, PTPSYNC_6
, SFP_SD
, NONE
, NONE
, NONE
, NONE
, R
);
1226 LAN969X_P(46, GPIO
, PTPSYNC_7
, SFP_SD
, NONE
, NONE
, NONE
, NONE
, R
);
1227 LAN969X_P(47, GPIO
, NONE
, SFP_SD
, NONE
, NONE
, NONE
, NONE
, R
);
1228 LAN969X_P(48, GPIO
, NONE
, SFP_SD
, NONE
, NONE
, NONE
, NONE
, R
);
1229 LAN969X_P(49, GPIO
, NONE
, SFP_SD
, NONE
, NONE
, NONE
, NONE
, R
);
1230 LAN969X_P(50, GPIO
, NONE
, SFP_SD
, NONE
, NONE
, NONE
, NONE
, R
);
1231 LAN969X_P(51, GPIO
, NONE
, SFP_SD
, NONE
, NONE
, NONE
, NONE
, R
);
1232 LAN969X_P(52, GPIO
, FAN
, SFP_SD
, NONE
, NONE
, NONE
, NONE
, R
);
1233 LAN969X_P(53, GPIO
, FAN
, SFP_SD
, NONE
, NONE
, NONE
, NONE
, R
);
1234 LAN969X_P(54, GPIO
, SYNCE
, FC
, NONE
, NONE
, NONE
, NONE
, R
);
1235 LAN969X_P(55, GPIO
, SYNCE
, FC
, NONE
, NONE
, NONE
, NONE
, R
);
1236 LAN969X_P(56, GPIO
, SYNCE
, FC
, NONE
, NONE
, NONE
, NONE
, R
);
1237 LAN969X_P(57, GPIO
, SFP_SD
, FC_SHRD
, TWI
, PTPSYNC_3
, NONE
, NONE
, R
);
1238 LAN969X_P(58, GPIO
, SFP_SD
, FC_SHRD
, TWI
, PTPSYNC_4
, NONE
, NONE
, R
);
1239 LAN969X_P(59, GPIO
, SFP_SD
, FC_SHRD
, TWI
, PTPSYNC_5
, NONE
, NONE
, R
);
1240 LAN969X_P(60, GPIO
, SFP_SD
, FC_SHRD
, TWI
, PTPSYNC_6
, NONE
, NONE
, R
);
1241 LAN969X_P(61, GPIO
, MIIM
, FC_SHRD
, TWI
, NONE
, NONE
, NONE
, R
);
1242 LAN969X_P(62, GPIO
, MIIM
, FC_SHRD
, TWI
, NONE
, NONE
, NONE
, R
);
1243 LAN969X_P(63, GPIO
, MIIM_IRQ
, FC_SHRD
, TWI
, NONE
, NONE
, NONE
, R
);
1244 LAN969X_P(64, GPIO
, FC
, FC_SHRD
, TWI
, NONE
, NONE
, NONE
, R
);
1245 LAN969X_P(65, GPIO
, FC
, FC_SHRD
, TWI
, NONE
, NONE
, NONE
, R
);
1246 LAN969X_P(66, GPIO
, FC
, FC_SHRD
, TWI
, NONE
, NONE
, NONE
, R
);
1248 #define LAN969X_PIN(n) { \
1250 .name = "GPIO_"#n, \
1251 .drv_data = &lan969x_pin_##n \
1254 static const struct pinctrl_pin_desc lan969x_pins
[] = {
1324 static int ocelot_get_functions_count(struct pinctrl_dev
*pctldev
)
1326 return ARRAY_SIZE(ocelot_function_names
);
1329 static const char *ocelot_get_function_name(struct pinctrl_dev
*pctldev
,
1330 unsigned int function
)
1332 return ocelot_function_names
[function
];
1335 static int ocelot_get_function_groups(struct pinctrl_dev
*pctldev
,
1336 unsigned int function
,
1337 const char *const **groups
,
1338 unsigned *const num_groups
)
1340 struct ocelot_pinctrl
*info
= pinctrl_dev_get_drvdata(pctldev
);
1342 *groups
= info
->func
[function
].groups
;
1343 *num_groups
= info
->func
[function
].ngroups
;
1348 static int ocelot_pin_function_idx(struct ocelot_pinctrl
*info
,
1349 unsigned int pin
, unsigned int function
)
1351 struct ocelot_pin_caps
*p
= info
->desc
->pins
[pin
].drv_data
;
1354 for (i
= 0; i
< OCELOT_FUNC_PER_PIN
; i
++) {
1355 if (function
== p
->functions
[i
])
1358 if (function
== p
->a_functions
[i
])
1359 return i
+ OCELOT_FUNC_PER_PIN
;
1365 #define REG_ALT(msb, info, p) (OCELOT_GPIO_ALT0 * (info)->stride + 4 * ((msb) + ((info)->stride * ((p) / 32))))
1367 static int ocelot_pinmux_set_mux(struct pinctrl_dev
*pctldev
,
1368 unsigned int selector
, unsigned int group
)
1370 struct ocelot_pinctrl
*info
= pinctrl_dev_get_drvdata(pctldev
);
1371 struct ocelot_pin_caps
*pin
= info
->desc
->pins
[group
].drv_data
;
1372 unsigned int p
= pin
->pin
% 32;
1375 f
= ocelot_pin_function_idx(info
, group
, selector
);
1380 * f is encoded on two bits.
1381 * bit 0 of f goes in BIT(pin) of ALT[0], bit 1 of f goes in BIT(pin) of
1383 * This is racy because both registers can't be updated at the same time
1384 * but it doesn't matter much for now.
1385 * Note: ALT0/ALT1 are organized specially for 64 gpio targets
1387 regmap_update_bits(info
->map
, REG_ALT(0, info
, pin
->pin
),
1389 regmap_update_bits(info
->map
, REG_ALT(1, info
, pin
->pin
),
1390 BIT(p
), (f
>> 1) << p
);
1395 static int lan966x_pinmux_set_mux(struct pinctrl_dev
*pctldev
,
1396 unsigned int selector
, unsigned int group
)
1398 struct ocelot_pinctrl
*info
= pinctrl_dev_get_drvdata(pctldev
);
1399 struct ocelot_pin_caps
*pin
= info
->desc
->pins
[group
].drv_data
;
1400 unsigned int p
= pin
->pin
% 32;
1403 f
= ocelot_pin_function_idx(info
, group
, selector
);
1408 * f is encoded on three bits.
1409 * bit 0 of f goes in BIT(pin) of ALT[0], bit 1 of f goes in BIT(pin) of
1410 * ALT[1], bit 2 of f goes in BIT(pin) of ALT[2]
1411 * This is racy because three registers can't be updated at the same time
1412 * but it doesn't matter much for now.
1413 * Note: ALT0/ALT1/ALT2 are organized specially for 78 gpio targets
1415 regmap_update_bits(info
->map
, REG_ALT(0, info
, pin
->pin
),
1417 regmap_update_bits(info
->map
, REG_ALT(1, info
, pin
->pin
),
1418 BIT(p
), (f
>> 1) << p
);
1419 regmap_update_bits(info
->map
, REG_ALT(2, info
, pin
->pin
),
1420 BIT(p
), (f
>> 2) << p
);
1425 #define REG(r, info, p) ((r) * (info)->stride + (4 * ((p) / 32)))
1427 static int ocelot_gpio_set_direction(struct pinctrl_dev
*pctldev
,
1428 struct pinctrl_gpio_range
*range
,
1429 unsigned int pin
, bool input
)
1431 struct ocelot_pinctrl
*info
= pinctrl_dev_get_drvdata(pctldev
);
1432 unsigned int p
= pin
% 32;
1434 regmap_update_bits(info
->map
, REG(OCELOT_GPIO_OE
, info
, pin
), BIT(p
),
1435 input
? 0 : BIT(p
));
1440 static int ocelot_gpio_request_enable(struct pinctrl_dev
*pctldev
,
1441 struct pinctrl_gpio_range
*range
,
1442 unsigned int offset
)
1444 struct ocelot_pinctrl
*info
= pinctrl_dev_get_drvdata(pctldev
);
1445 unsigned int p
= offset
% 32;
1447 regmap_update_bits(info
->map
, REG_ALT(0, info
, offset
),
1449 regmap_update_bits(info
->map
, REG_ALT(1, info
, offset
),
1455 static int lan966x_gpio_request_enable(struct pinctrl_dev
*pctldev
,
1456 struct pinctrl_gpio_range
*range
,
1457 unsigned int offset
)
1459 struct ocelot_pinctrl
*info
= pinctrl_dev_get_drvdata(pctldev
);
1460 unsigned int p
= offset
% 32;
1462 regmap_update_bits(info
->map
, REG_ALT(0, info
, offset
),
1464 regmap_update_bits(info
->map
, REG_ALT(1, info
, offset
),
1466 regmap_update_bits(info
->map
, REG_ALT(2, info
, offset
),
1472 static const struct pinmux_ops ocelot_pmx_ops
= {
1473 .get_functions_count
= ocelot_get_functions_count
,
1474 .get_function_name
= ocelot_get_function_name
,
1475 .get_function_groups
= ocelot_get_function_groups
,
1476 .set_mux
= ocelot_pinmux_set_mux
,
1477 .gpio_set_direction
= ocelot_gpio_set_direction
,
1478 .gpio_request_enable
= ocelot_gpio_request_enable
,
1481 static const struct pinmux_ops lan966x_pmx_ops
= {
1482 .get_functions_count
= ocelot_get_functions_count
,
1483 .get_function_name
= ocelot_get_function_name
,
1484 .get_function_groups
= ocelot_get_function_groups
,
1485 .set_mux
= lan966x_pinmux_set_mux
,
1486 .gpio_set_direction
= ocelot_gpio_set_direction
,
1487 .gpio_request_enable
= lan966x_gpio_request_enable
,
1490 static int ocelot_pctl_get_groups_count(struct pinctrl_dev
*pctldev
)
1492 struct ocelot_pinctrl
*info
= pinctrl_dev_get_drvdata(pctldev
);
1494 return info
->desc
->npins
;
1497 static const char *ocelot_pctl_get_group_name(struct pinctrl_dev
*pctldev
,
1500 struct ocelot_pinctrl
*info
= pinctrl_dev_get_drvdata(pctldev
);
1502 return info
->desc
->pins
[group
].name
;
1505 static int ocelot_pctl_get_group_pins(struct pinctrl_dev
*pctldev
,
1507 const unsigned int **pins
,
1508 unsigned int *num_pins
)
1510 struct ocelot_pinctrl
*info
= pinctrl_dev_get_drvdata(pctldev
);
1512 *pins
= &info
->desc
->pins
[group
].number
;
1518 static int ocelot_hw_get_value(struct ocelot_pinctrl
*info
,
1523 int ret
= -EOPNOTSUPP
;
1526 const struct ocelot_pincfg_data
*opd
= info
->pincfg_data
;
1529 ret
= regmap_read(info
->pincfg
,
1530 pin
* regmap_get_reg_stride(info
->pincfg
),
1538 *val
= regcfg
& (opd
->pd_bit
| opd
->pu_bit
);
1541 case PINCONF_SCHMITT
:
1542 *val
= regcfg
& opd
->schmitt_bit
;
1545 case PINCONF_DRIVE_STRENGTH
:
1546 *val
= regcfg
& opd
->drive_bits
;
1557 static int ocelot_pincfg_clrsetbits(struct ocelot_pinctrl
*info
, u32 regaddr
,
1558 u32 clrbits
, u32 setbits
)
1563 ret
= regmap_read(info
->pincfg
,
1564 regaddr
* regmap_get_reg_stride(info
->pincfg
),
1572 ret
= regmap_write(info
->pincfg
,
1573 regaddr
* regmap_get_reg_stride(info
->pincfg
),
1579 static int ocelot_hw_set_value(struct ocelot_pinctrl
*info
,
1584 int ret
= -EOPNOTSUPP
;
1587 const struct ocelot_pincfg_data
*opd
= info
->pincfg_data
;
1591 ret
= ocelot_pincfg_clrsetbits(info
, pin
,
1592 opd
->pd_bit
| opd
->pu_bit
,
1596 case PINCONF_SCHMITT
:
1597 ret
= ocelot_pincfg_clrsetbits(info
, pin
,
1602 case PINCONF_DRIVE_STRENGTH
:
1604 ret
= ocelot_pincfg_clrsetbits(info
, pin
,
1619 static int ocelot_pinconf_get(struct pinctrl_dev
*pctldev
,
1620 unsigned int pin
, unsigned long *config
)
1622 struct ocelot_pinctrl
*info
= pinctrl_dev_get_drvdata(pctldev
);
1623 u32 param
= pinconf_to_config_param(*config
);
1627 case PIN_CONFIG_BIAS_DISABLE
:
1628 case PIN_CONFIG_BIAS_PULL_UP
:
1629 case PIN_CONFIG_BIAS_PULL_DOWN
:
1630 err
= ocelot_hw_get_value(info
, pin
, PINCONF_BIAS
, &val
);
1633 if (param
== PIN_CONFIG_BIAS_DISABLE
)
1635 else if (param
== PIN_CONFIG_BIAS_PULL_DOWN
)
1636 val
= !!(val
& info
->pincfg_data
->pd_bit
);
1637 else /* PIN_CONFIG_BIAS_PULL_UP */
1638 val
= !!(val
& info
->pincfg_data
->pu_bit
);
1641 case PIN_CONFIG_INPUT_SCHMITT_ENABLE
:
1642 if (!info
->pincfg_data
->schmitt_bit
)
1645 err
= ocelot_hw_get_value(info
, pin
, PINCONF_SCHMITT
, &val
);
1649 val
= !!(val
& info
->pincfg_data
->schmitt_bit
);
1652 case PIN_CONFIG_DRIVE_STRENGTH
:
1653 err
= ocelot_hw_get_value(info
, pin
, PINCONF_DRIVE_STRENGTH
,
1659 case PIN_CONFIG_OUTPUT
:
1660 err
= regmap_read(info
->map
, REG(OCELOT_GPIO_OUT
, info
, pin
),
1664 val
= !!(val
& BIT(pin
% 32));
1667 case PIN_CONFIG_INPUT_ENABLE
:
1668 case PIN_CONFIG_OUTPUT_ENABLE
:
1669 err
= regmap_read(info
->map
, REG(OCELOT_GPIO_OE
, info
, pin
),
1673 val
= val
& BIT(pin
% 32);
1674 if (param
== PIN_CONFIG_OUTPUT_ENABLE
)
1684 *config
= pinconf_to_config_packed(param
, val
);
1689 static int ocelot_pinconf_set(struct pinctrl_dev
*pctldev
, unsigned int pin
,
1690 unsigned long *configs
, unsigned int num_configs
)
1692 struct ocelot_pinctrl
*info
= pinctrl_dev_get_drvdata(pctldev
);
1693 const struct ocelot_pincfg_data
*opd
= info
->pincfg_data
;
1697 for (cfg
= 0; cfg
< num_configs
; cfg
++) {
1698 param
= pinconf_to_config_param(configs
[cfg
]);
1699 arg
= pinconf_to_config_argument(configs
[cfg
]);
1702 case PIN_CONFIG_BIAS_DISABLE
:
1703 case PIN_CONFIG_BIAS_PULL_UP
:
1704 case PIN_CONFIG_BIAS_PULL_DOWN
:
1705 arg
= (param
== PIN_CONFIG_BIAS_DISABLE
) ? 0 :
1706 (param
== PIN_CONFIG_BIAS_PULL_UP
) ?
1707 opd
->pu_bit
: opd
->pd_bit
;
1709 err
= ocelot_hw_set_value(info
, pin
, PINCONF_BIAS
, arg
);
1715 case PIN_CONFIG_INPUT_SCHMITT_ENABLE
:
1716 if (!opd
->schmitt_bit
)
1719 arg
= arg
? opd
->schmitt_bit
: 0;
1720 err
= ocelot_hw_set_value(info
, pin
, PINCONF_SCHMITT
,
1727 case PIN_CONFIG_DRIVE_STRENGTH
:
1728 err
= ocelot_hw_set_value(info
, pin
,
1729 PINCONF_DRIVE_STRENGTH
,
1736 case PIN_CONFIG_OUTPUT_ENABLE
:
1737 case PIN_CONFIG_INPUT_ENABLE
:
1738 case PIN_CONFIG_OUTPUT
:
1741 regmap_write(info
->map
,
1742 REG(OCELOT_GPIO_OUT_SET
, info
,
1746 regmap_write(info
->map
,
1747 REG(OCELOT_GPIO_OUT_CLR
, info
,
1750 regmap_update_bits(info
->map
,
1751 REG(OCELOT_GPIO_OE
, info
, pin
),
1753 param
== PIN_CONFIG_INPUT_ENABLE
?
1765 static const struct pinconf_ops ocelot_confops
= {
1767 .pin_config_get
= ocelot_pinconf_get
,
1768 .pin_config_set
= ocelot_pinconf_set
,
1769 .pin_config_config_dbg_show
= pinconf_generic_dump_config
,
1772 static const struct pinctrl_ops ocelot_pctl_ops
= {
1773 .get_groups_count
= ocelot_pctl_get_groups_count
,
1774 .get_group_name
= ocelot_pctl_get_group_name
,
1775 .get_group_pins
= ocelot_pctl_get_group_pins
,
1776 .dt_node_to_map
= pinconf_generic_dt_node_to_map_pin
,
1777 .dt_free_map
= pinconf_generic_dt_free_map
,
1780 static struct ocelot_match_data luton_desc
= {
1782 .name
= "luton-pinctrl",
1784 .npins
= ARRAY_SIZE(luton_pins
),
1785 .pctlops
= &ocelot_pctl_ops
,
1786 .pmxops
= &ocelot_pmx_ops
,
1787 .owner
= THIS_MODULE
,
1791 static struct ocelot_match_data serval_desc
= {
1793 .name
= "serval-pinctrl",
1794 .pins
= serval_pins
,
1795 .npins
= ARRAY_SIZE(serval_pins
),
1796 .pctlops
= &ocelot_pctl_ops
,
1797 .pmxops
= &ocelot_pmx_ops
,
1798 .owner
= THIS_MODULE
,
1802 static struct ocelot_match_data ocelot_desc
= {
1804 .name
= "ocelot-pinctrl",
1805 .pins
= ocelot_pins
,
1806 .npins
= ARRAY_SIZE(ocelot_pins
),
1807 .pctlops
= &ocelot_pctl_ops
,
1808 .pmxops
= &ocelot_pmx_ops
,
1809 .owner
= THIS_MODULE
,
1813 static struct ocelot_match_data jaguar2_desc
= {
1815 .name
= "jaguar2-pinctrl",
1816 .pins
= jaguar2_pins
,
1817 .npins
= ARRAY_SIZE(jaguar2_pins
),
1818 .pctlops
= &ocelot_pctl_ops
,
1819 .pmxops
= &ocelot_pmx_ops
,
1820 .owner
= THIS_MODULE
,
1824 static struct ocelot_match_data servalt_desc
= {
1826 .name
= "servalt-pinctrl",
1827 .pins
= servalt_pins
,
1828 .npins
= ARRAY_SIZE(servalt_pins
),
1829 .pctlops
= &ocelot_pctl_ops
,
1830 .pmxops
= &ocelot_pmx_ops
,
1831 .owner
= THIS_MODULE
,
1835 static struct ocelot_match_data sparx5_desc
= {
1837 .name
= "sparx5-pinctrl",
1838 .pins
= sparx5_pins
,
1839 .npins
= ARRAY_SIZE(sparx5_pins
),
1840 .pctlops
= &ocelot_pctl_ops
,
1841 .pmxops
= &ocelot_pmx_ops
,
1842 .confops
= &ocelot_confops
,
1843 .owner
= THIS_MODULE
,
1848 .drive_bits
= GENMASK(1, 0),
1849 .schmitt_bit
= BIT(2),
1853 static struct ocelot_match_data lan966x_desc
= {
1855 .name
= "lan966x-pinctrl",
1856 .pins
= lan966x_pins
,
1857 .npins
= ARRAY_SIZE(lan966x_pins
),
1858 .pctlops
= &ocelot_pctl_ops
,
1859 .pmxops
= &lan966x_pmx_ops
,
1860 .confops
= &ocelot_confops
,
1861 .owner
= THIS_MODULE
,
1866 .drive_bits
= GENMASK(1, 0),
1870 static struct ocelot_match_data lan969x_desc
= {
1872 .name
= "lan969x-pinctrl",
1873 .pins
= lan969x_pins
,
1874 .npins
= ARRAY_SIZE(lan969x_pins
),
1875 .pctlops
= &ocelot_pctl_ops
,
1876 .pmxops
= &lan966x_pmx_ops
,
1877 .confops
= &ocelot_confops
,
1878 .owner
= THIS_MODULE
,
1883 .drive_bits
= GENMASK(1, 0),
1887 static int ocelot_create_group_func_map(struct device
*dev
,
1888 struct ocelot_pinctrl
*info
)
1891 u8
*pins
= kcalloc(info
->desc
->npins
, sizeof(u8
), GFP_KERNEL
);
1896 for (f
= 0; f
< FUNC_MAX
; f
++) {
1897 for (npins
= 0, i
= 0; i
< info
->desc
->npins
; i
++) {
1898 if (ocelot_pin_function_idx(info
, i
, f
) >= 0)
1905 info
->func
[f
].ngroups
= npins
;
1906 info
->func
[f
].groups
= devm_kcalloc(dev
, npins
, sizeof(char *),
1908 if (!info
->func
[f
].groups
) {
1913 for (i
= 0; i
< npins
; i
++)
1914 info
->func
[f
].groups
[i
] =
1915 info
->desc
->pins
[pins
[i
]].name
;
1923 static int ocelot_pinctrl_register(struct platform_device
*pdev
,
1924 struct ocelot_pinctrl
*info
)
1928 ret
= ocelot_create_group_func_map(&pdev
->dev
, info
);
1930 dev_err(&pdev
->dev
, "Unable to create group func map.\n");
1934 info
->pctl
= devm_pinctrl_register(&pdev
->dev
, info
->desc
, info
);
1935 if (IS_ERR(info
->pctl
)) {
1936 dev_err(&pdev
->dev
, "Failed to register pinctrl\n");
1937 return PTR_ERR(info
->pctl
);
1943 static int ocelot_gpio_get(struct gpio_chip
*chip
, unsigned int offset
)
1945 struct ocelot_pinctrl
*info
= gpiochip_get_data(chip
);
1948 regmap_read(info
->map
, REG(OCELOT_GPIO_IN
, info
, offset
), &val
);
1950 return !!(val
& BIT(offset
% 32));
1953 static void ocelot_gpio_set(struct gpio_chip
*chip
, unsigned int offset
,
1956 struct ocelot_pinctrl
*info
= gpiochip_get_data(chip
);
1959 regmap_write(info
->map
, REG(OCELOT_GPIO_OUT_SET
, info
, offset
),
1962 regmap_write(info
->map
, REG(OCELOT_GPIO_OUT_CLR
, info
, offset
),
1966 static int ocelot_gpio_get_direction(struct gpio_chip
*chip
,
1967 unsigned int offset
)
1969 struct ocelot_pinctrl
*info
= gpiochip_get_data(chip
);
1972 regmap_read(info
->map
, REG(OCELOT_GPIO_OE
, info
, offset
), &val
);
1974 if (val
& BIT(offset
% 32))
1975 return GPIO_LINE_DIRECTION_OUT
;
1977 return GPIO_LINE_DIRECTION_IN
;
1980 static int ocelot_gpio_direction_output(struct gpio_chip
*chip
,
1981 unsigned int offset
, int value
)
1983 struct ocelot_pinctrl
*info
= gpiochip_get_data(chip
);
1984 unsigned int pin
= BIT(offset
% 32);
1987 regmap_write(info
->map
, REG(OCELOT_GPIO_OUT_SET
, info
, offset
),
1990 regmap_write(info
->map
, REG(OCELOT_GPIO_OUT_CLR
, info
, offset
),
1993 return pinctrl_gpio_direction_output(chip
, offset
);
1996 static const struct gpio_chip ocelot_gpiolib_chip
= {
1997 .request
= gpiochip_generic_request
,
1998 .free
= gpiochip_generic_free
,
1999 .set
= ocelot_gpio_set
,
2000 .get
= ocelot_gpio_get
,
2001 .get_direction
= ocelot_gpio_get_direction
,
2002 .direction_input
= pinctrl_gpio_direction_input
,
2003 .direction_output
= ocelot_gpio_direction_output
,
2004 .owner
= THIS_MODULE
,
2007 static void ocelot_irq_mask(struct irq_data
*data
)
2009 struct gpio_chip
*chip
= irq_data_get_irq_chip_data(data
);
2010 struct ocelot_pinctrl
*info
= gpiochip_get_data(chip
);
2011 unsigned int gpio
= irqd_to_hwirq(data
);
2013 regmap_update_bits(info
->map
, REG(OCELOT_GPIO_INTR_ENA
, info
, gpio
),
2015 gpiochip_disable_irq(chip
, gpio
);
2018 static void ocelot_irq_work(struct work_struct
*work
)
2020 struct ocelot_irq_work
*w
= container_of(work
, struct ocelot_irq_work
, irq_work
);
2021 struct irq_chip
*parent_chip
= irq_desc_get_chip(w
->irq_desc
);
2022 struct gpio_chip
*chip
= irq_desc_get_chip_data(w
->irq_desc
);
2023 struct irq_data
*data
= irq_desc_get_irq_data(w
->irq_desc
);
2024 unsigned int gpio
= irqd_to_hwirq(data
);
2026 local_irq_disable();
2027 chained_irq_enter(parent_chip
, w
->irq_desc
);
2028 generic_handle_domain_irq(chip
->irq
.domain
, gpio
);
2029 chained_irq_exit(parent_chip
, w
->irq_desc
);
2035 static void ocelot_irq_unmask_level(struct irq_data
*data
)
2037 struct gpio_chip
*chip
= irq_data_get_irq_chip_data(data
);
2038 struct ocelot_pinctrl
*info
= gpiochip_get_data(chip
);
2039 struct irq_desc
*desc
= irq_data_to_desc(data
);
2040 unsigned int gpio
= irqd_to_hwirq(data
);
2041 unsigned int bit
= BIT(gpio
% 32);
2042 bool ack
= false, active
= false;
2046 trigger_level
= irqd_get_trigger_type(data
);
2048 /* Check if the interrupt line is still active. */
2049 regmap_read(info
->map
, REG(OCELOT_GPIO_IN
, info
, gpio
), &val
);
2050 if ((!(val
& bit
) && trigger_level
== IRQ_TYPE_LEVEL_LOW
) ||
2051 (val
& bit
&& trigger_level
== IRQ_TYPE_LEVEL_HIGH
))
2055 * Check if the interrupt controller has seen any changes in the
2058 regmap_read(info
->map
, REG(OCELOT_GPIO_INTR
, info
, gpio
), &val
);
2062 /* Try to clear any rising edges */
2064 regmap_write_bits(info
->map
, REG(OCELOT_GPIO_INTR
, info
, gpio
),
2067 /* Enable the interrupt now */
2068 gpiochip_enable_irq(chip
, gpio
);
2069 regmap_update_bits(info
->map
, REG(OCELOT_GPIO_INTR_ENA
, info
, gpio
),
2073 * In case the interrupt line is still active then it means that
2074 * there happen another interrupt while the line was active.
2075 * So we missed that one, so we need to kick the interrupt again
2078 regmap_read(info
->map
, REG(OCELOT_GPIO_IN
, info
, gpio
), &val
);
2079 if ((!(val
& bit
) && trigger_level
== IRQ_TYPE_LEVEL_LOW
) ||
2080 (val
& bit
&& trigger_level
== IRQ_TYPE_LEVEL_HIGH
))
2084 struct ocelot_irq_work
*work
;
2086 work
= kmalloc(sizeof(*work
), GFP_ATOMIC
);
2090 work
->irq_desc
= desc
;
2091 INIT_WORK(&work
->irq_work
, ocelot_irq_work
);
2092 queue_work(info
->wq
, &work
->irq_work
);
2096 static void ocelot_irq_unmask(struct irq_data
*data
)
2098 struct gpio_chip
*chip
= irq_data_get_irq_chip_data(data
);
2099 struct ocelot_pinctrl
*info
= gpiochip_get_data(chip
);
2100 unsigned int gpio
= irqd_to_hwirq(data
);
2102 gpiochip_enable_irq(chip
, gpio
);
2103 regmap_update_bits(info
->map
, REG(OCELOT_GPIO_INTR_ENA
, info
, gpio
),
2104 BIT(gpio
% 32), BIT(gpio
% 32));
2107 static void ocelot_irq_ack(struct irq_data
*data
)
2109 struct gpio_chip
*chip
= irq_data_get_irq_chip_data(data
);
2110 struct ocelot_pinctrl
*info
= gpiochip_get_data(chip
);
2111 unsigned int gpio
= irqd_to_hwirq(data
);
2113 regmap_write_bits(info
->map
, REG(OCELOT_GPIO_INTR
, info
, gpio
),
2114 BIT(gpio
% 32), BIT(gpio
% 32));
2117 static int ocelot_irq_set_type(struct irq_data
*data
, unsigned int type
);
2119 static struct irq_chip ocelot_level_irqchip
= {
2121 .irq_mask
= ocelot_irq_mask
,
2122 .irq_ack
= ocelot_irq_ack
,
2123 .irq_unmask
= ocelot_irq_unmask_level
,
2124 .flags
= IRQCHIP_IMMUTABLE
,
2125 .irq_set_type
= ocelot_irq_set_type
,
2126 GPIOCHIP_IRQ_RESOURCE_HELPERS
2129 static struct irq_chip ocelot_irqchip
= {
2131 .irq_mask
= ocelot_irq_mask
,
2132 .irq_ack
= ocelot_irq_ack
,
2133 .irq_unmask
= ocelot_irq_unmask
,
2134 .irq_set_type
= ocelot_irq_set_type
,
2135 .flags
= IRQCHIP_IMMUTABLE
,
2136 GPIOCHIP_IRQ_RESOURCE_HELPERS
2139 static int ocelot_irq_set_type(struct irq_data
*data
, unsigned int type
)
2141 if (type
& (IRQ_TYPE_LEVEL_HIGH
| IRQ_TYPE_LEVEL_LOW
))
2142 irq_set_chip_handler_name_locked(data
, &ocelot_level_irqchip
,
2143 handle_level_irq
, NULL
);
2144 if (type
& IRQ_TYPE_EDGE_BOTH
)
2145 irq_set_chip_handler_name_locked(data
, &ocelot_irqchip
,
2146 handle_edge_irq
, NULL
);
2151 static void ocelot_irq_handler(struct irq_desc
*desc
)
2153 struct irq_chip
*parent_chip
= irq_desc_get_chip(desc
);
2154 struct gpio_chip
*chip
= irq_desc_get_handler_data(desc
);
2155 struct ocelot_pinctrl
*info
= gpiochip_get_data(chip
);
2156 unsigned int id_reg
= OCELOT_GPIO_INTR_IDENT
* info
->stride
;
2157 unsigned int reg
= 0, irq
, i
;
2160 chained_irq_enter(parent_chip
, desc
);
2162 for (i
= 0; i
< info
->stride
; i
++) {
2163 regmap_read(info
->map
, id_reg
+ 4 * i
, ®
);
2169 for_each_set_bit(irq
, &irqs
,
2170 min(32U, info
->desc
->npins
- 32 * i
))
2171 generic_handle_domain_irq(chip
->irq
.domain
, irq
+ 32 * i
);
2174 chained_irq_exit(parent_chip
, desc
);
2177 static int ocelot_gpiochip_register(struct platform_device
*pdev
,
2178 struct ocelot_pinctrl
*info
)
2180 struct gpio_chip
*gc
;
2181 struct gpio_irq_chip
*girq
;
2184 info
->gpio_chip
= ocelot_gpiolib_chip
;
2186 gc
= &info
->gpio_chip
;
2187 gc
->ngpio
= info
->desc
->npins
;
2188 gc
->parent
= &pdev
->dev
;
2190 gc
->label
= "ocelot-gpio";
2192 irq
= platform_get_irq_optional(pdev
, 0);
2195 gpio_irq_chip_set_chip(girq
, &ocelot_irqchip
);
2196 girq
->parent_handler
= ocelot_irq_handler
;
2197 girq
->num_parents
= 1;
2198 girq
->parents
= devm_kcalloc(&pdev
->dev
, 1,
2199 sizeof(*girq
->parents
),
2203 girq
->parents
[0] = irq
;
2204 girq
->default_type
= IRQ_TYPE_NONE
;
2205 girq
->handler
= handle_edge_irq
;
2208 return devm_gpiochip_add_data(&pdev
->dev
, gc
, info
);
2211 static const struct of_device_id ocelot_pinctrl_of_match
[] = {
2212 { .compatible
= "mscc,luton-pinctrl", .data
= &luton_desc
},
2213 { .compatible
= "mscc,serval-pinctrl", .data
= &serval_desc
},
2214 { .compatible
= "mscc,ocelot-pinctrl", .data
= &ocelot_desc
},
2215 { .compatible
= "mscc,jaguar2-pinctrl", .data
= &jaguar2_desc
},
2216 { .compatible
= "mscc,servalt-pinctrl", .data
= &servalt_desc
},
2217 { .compatible
= "microchip,sparx5-pinctrl", .data
= &sparx5_desc
},
2218 { .compatible
= "microchip,lan966x-pinctrl", .data
= &lan966x_desc
},
2219 { .compatible
= "microchip,lan9691-pinctrl", .data
= &lan969x_desc
},
2222 MODULE_DEVICE_TABLE(of
, ocelot_pinctrl_of_match
);
2224 static struct regmap
*ocelot_pinctrl_create_pincfg(struct platform_device
*pdev
,
2225 const struct ocelot_pinctrl
*info
)
2229 const struct regmap_config regmap_config
= {
2233 .max_register
= info
->desc
->npins
* 4,
2237 base
= devm_platform_ioremap_resource(pdev
, 1);
2239 dev_dbg(&pdev
->dev
, "Failed to ioremap config registers (no extended pinconf)\n");
2243 return devm_regmap_init_mmio(&pdev
->dev
, base
, ®map_config
);
2246 static void ocelot_destroy_workqueue(void *data
)
2248 destroy_workqueue(data
);
2251 static int ocelot_pinctrl_probe(struct platform_device
*pdev
)
2253 const struct ocelot_match_data
*data
;
2254 struct device
*dev
= &pdev
->dev
;
2255 struct ocelot_pinctrl
*info
;
2256 struct reset_control
*reset
;
2257 struct regmap
*pincfg
;
2259 struct regmap_config regmap_config
= {
2265 info
= devm_kzalloc(dev
, sizeof(*info
), GFP_KERNEL
);
2269 data
= device_get_match_data(dev
);
2273 info
->desc
= devm_kmemdup(dev
, &data
->desc
, sizeof(*info
->desc
),
2278 info
->wq
= alloc_ordered_workqueue("ocelot_ordered", 0);
2282 ret
= devm_add_action_or_reset(dev
, ocelot_destroy_workqueue
,
2287 info
->pincfg_data
= &data
->pincfg_data
;
2289 reset
= devm_reset_control_get_optional_shared(dev
, "switch");
2291 return dev_err_probe(dev
, PTR_ERR(reset
),
2292 "Failed to get reset\n");
2293 reset_control_reset(reset
);
2295 info
->stride
= 1 + (info
->desc
->npins
- 1) / 32;
2297 regmap_config
.max_register
= OCELOT_GPIO_SD_MAP
* info
->stride
+ 15 * 4;
2299 info
->map
= ocelot_regmap_from_resource(pdev
, 0, ®map_config
);
2300 if (IS_ERR(info
->map
))
2301 return dev_err_probe(dev
, PTR_ERR(info
->map
),
2302 "Failed to create regmap\n");
2303 dev_set_drvdata(dev
, info
);
2306 /* Pinconf registers */
2307 if (info
->desc
->confops
) {
2308 pincfg
= ocelot_pinctrl_create_pincfg(pdev
, info
);
2310 dev_dbg(dev
, "Failed to create pincfg regmap\n");
2312 info
->pincfg
= pincfg
;
2315 ret
= ocelot_pinctrl_register(pdev
, info
);
2319 ret
= ocelot_gpiochip_register(pdev
, info
);
2323 dev_info(dev
, "driver registered\n");
2328 static struct platform_driver ocelot_pinctrl_driver
= {
2330 .name
= "pinctrl-ocelot",
2331 .of_match_table
= of_match_ptr(ocelot_pinctrl_of_match
),
2332 .suppress_bind_attrs
= true,
2334 .probe
= ocelot_pinctrl_probe
,
2336 module_platform_driver(ocelot_pinctrl_driver
);
2338 MODULE_DESCRIPTION("Ocelot Chip Pinctrl Driver");
2339 MODULE_LICENSE("Dual MIT/GPL");