3
0
mirror of https://github.com/Qortal/Brooklyn.git synced 2025-02-07 06:44:18 +00:00
Brooklyn/drivers/pinctrl/pinctrl-pic32.c

2304 lines
81 KiB
C
Raw Normal View History

// SPDX-License-Identifier: GPL-2.0-only
/*
* PIC32 pinctrl driver
*
* Joshua Henderson, <joshua.henderson@microchip.com>
* Copyright (C) 2015 Microchip Technology Inc. All rights reserved.
*/
#include <linux/clk.h>
#include <linux/gpio/driver.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/irq.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/pinctrl/pinconf.h>
#include <linux/pinctrl/pinconf-generic.h>
#include <linux/pinctrl/pinctrl.h>
#include <linux/pinctrl/pinmux.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <asm/mach-pic32/pic32.h>
#include "pinctrl-utils.h"
#include "pinctrl-pic32.h"
#define PINS_PER_BANK 16
#define PIC32_CNCON_EDGE 11
#define PIC32_CNCON_ON 15
#define PIN_CONFIG_MICROCHIP_DIGITAL (PIN_CONFIG_END + 1)
#define PIN_CONFIG_MICROCHIP_ANALOG (PIN_CONFIG_END + 2)
static const struct pinconf_generic_params pic32_mpp_bindings[] = {
{"microchip,digital", PIN_CONFIG_MICROCHIP_DIGITAL, 0},
{"microchip,analog", PIN_CONFIG_MICROCHIP_ANALOG, 0},
};
#define GPIO_BANK_START(bank) ((bank) * PINS_PER_BANK)
struct pic32_function {
const char *name;
const char * const *groups;
unsigned int ngroups;
};
struct pic32_pin_group {
const char *name;
unsigned int pin;
struct pic32_desc_function *functions;
};
struct pic32_desc_function {
const char *name;
u32 muxreg;
u32 muxval;
};
struct pic32_gpio_bank {
void __iomem *reg_base;
struct gpio_chip gpio_chip;
struct irq_chip irq_chip;
struct clk *clk;
};
struct pic32_pinctrl {
void __iomem *reg_base;
struct device *dev;
struct pinctrl_dev *pctldev;
const struct pinctrl_pin_desc *pins;
unsigned int npins;
const struct pic32_function *functions;
unsigned int nfunctions;
const struct pic32_pin_group *groups;
unsigned int ngroups;
struct pic32_gpio_bank *gpio_banks;
unsigned int nbanks;
struct clk *clk;
};
static const struct pinctrl_pin_desc pic32_pins[] = {
PINCTRL_PIN(0, "A0"),
PINCTRL_PIN(1, "A1"),
PINCTRL_PIN(2, "A2"),
PINCTRL_PIN(3, "A3"),
PINCTRL_PIN(4, "A4"),
PINCTRL_PIN(5, "A5"),
PINCTRL_PIN(6, "A6"),
PINCTRL_PIN(7, "A7"),
PINCTRL_PIN(8, "A8"),
PINCTRL_PIN(9, "A9"),
PINCTRL_PIN(10, "A10"),
PINCTRL_PIN(11, "A11"),
PINCTRL_PIN(12, "A12"),
PINCTRL_PIN(13, "A13"),
PINCTRL_PIN(14, "A14"),
PINCTRL_PIN(15, "A15"),
PINCTRL_PIN(16, "B0"),
PINCTRL_PIN(17, "B1"),
PINCTRL_PIN(18, "B2"),
PINCTRL_PIN(19, "B3"),
PINCTRL_PIN(20, "B4"),
PINCTRL_PIN(21, "B5"),
PINCTRL_PIN(22, "B6"),
PINCTRL_PIN(23, "B7"),
PINCTRL_PIN(24, "B8"),
PINCTRL_PIN(25, "B9"),
PINCTRL_PIN(26, "B10"),
PINCTRL_PIN(27, "B11"),
PINCTRL_PIN(28, "B12"),
PINCTRL_PIN(29, "B13"),
PINCTRL_PIN(30, "B14"),
PINCTRL_PIN(31, "B15"),
PINCTRL_PIN(33, "C1"),
PINCTRL_PIN(34, "C2"),
PINCTRL_PIN(35, "C3"),
PINCTRL_PIN(36, "C4"),
PINCTRL_PIN(44, "C12"),
PINCTRL_PIN(45, "C13"),
PINCTRL_PIN(46, "C14"),
PINCTRL_PIN(47, "C15"),
PINCTRL_PIN(48, "D0"),
PINCTRL_PIN(49, "D1"),
PINCTRL_PIN(50, "D2"),
PINCTRL_PIN(51, "D3"),
PINCTRL_PIN(52, "D4"),
PINCTRL_PIN(53, "D5"),
PINCTRL_PIN(54, "D6"),
PINCTRL_PIN(55, "D7"),
PINCTRL_PIN(57, "D9"),
PINCTRL_PIN(58, "D10"),
PINCTRL_PIN(59, "D11"),
PINCTRL_PIN(60, "D12"),
PINCTRL_PIN(61, "D13"),
PINCTRL_PIN(62, "D14"),
PINCTRL_PIN(63, "D15"),
PINCTRL_PIN(64, "E0"),
PINCTRL_PIN(65, "E1"),
PINCTRL_PIN(66, "E2"),
PINCTRL_PIN(67, "E3"),
PINCTRL_PIN(68, "E4"),
PINCTRL_PIN(69, "E5"),
PINCTRL_PIN(70, "E6"),
PINCTRL_PIN(71, "E7"),
PINCTRL_PIN(72, "E8"),
PINCTRL_PIN(73, "E9"),
PINCTRL_PIN(80, "F0"),
PINCTRL_PIN(81, "F1"),
PINCTRL_PIN(82, "F2"),
PINCTRL_PIN(83, "F3"),
PINCTRL_PIN(84, "F4"),
PINCTRL_PIN(85, "F5"),
PINCTRL_PIN(88, "F8"),
PINCTRL_PIN(92, "F12"),
PINCTRL_PIN(93, "F13"),
PINCTRL_PIN(96, "G0"),
PINCTRL_PIN(97, "G1"),
PINCTRL_PIN(102, "G6"),
PINCTRL_PIN(103, "G7"),
PINCTRL_PIN(104, "G8"),
PINCTRL_PIN(105, "G9"),
PINCTRL_PIN(108, "G12"),
PINCTRL_PIN(109, "G13"),
PINCTRL_PIN(110, "G14"),
PINCTRL_PIN(111, "G15"),
PINCTRL_PIN(112, "H0"),
PINCTRL_PIN(113, "H1"),
PINCTRL_PIN(114, "H2"),
PINCTRL_PIN(115, "H3"),
PINCTRL_PIN(116, "H4"),
PINCTRL_PIN(117, "H5"),
PINCTRL_PIN(118, "H6"),
PINCTRL_PIN(119, "H7"),
PINCTRL_PIN(120, "H8"),
PINCTRL_PIN(121, "H9"),
PINCTRL_PIN(122, "H10"),
PINCTRL_PIN(123, "H11"),
PINCTRL_PIN(124, "H12"),
PINCTRL_PIN(125, "H13"),
PINCTRL_PIN(126, "H14"),
PINCTRL_PIN(127, "H15"),
PINCTRL_PIN(128, "J0"),
PINCTRL_PIN(129, "J1"),
PINCTRL_PIN(130, "J2"),
PINCTRL_PIN(131, "J3"),
PINCTRL_PIN(132, "J4"),
PINCTRL_PIN(133, "J5"),
PINCTRL_PIN(134, "J6"),
PINCTRL_PIN(135, "J7"),
PINCTRL_PIN(136, "J8"),
PINCTRL_PIN(137, "J9"),
PINCTRL_PIN(138, "J10"),
PINCTRL_PIN(139, "J11"),
PINCTRL_PIN(140, "J12"),
PINCTRL_PIN(141, "J13"),
PINCTRL_PIN(142, "J14"),
PINCTRL_PIN(143, "J15"),
PINCTRL_PIN(144, "K0"),
PINCTRL_PIN(145, "K1"),
PINCTRL_PIN(146, "K2"),
PINCTRL_PIN(147, "K3"),
PINCTRL_PIN(148, "K4"),
PINCTRL_PIN(149, "K5"),
PINCTRL_PIN(150, "K6"),
PINCTRL_PIN(151, "K7"),
};
static const char * const pic32_input0_group[] = {
"D2", "G8", "F4", "F1", "B9", "B10", "C14", "B5",
"C1", "D14", "G1", "A14", "D6",
};
static const char * const pic32_input1_group[] = {
"D3", "G7", "F5", "D11", "F0", "B1", "E5", "C13",
"B3", "C4", "G0", "A15", "D7",
};
static const char * const pic32_input2_group[] = {
"D9", "G6", "B8", "B15", "D4", "B0", "E3", "B7",
"F12", "D12", "F8", "C3", "E9",
};
static const char * const pic32_input3_group[] = {
"G9", "B14", "D0", "B6", "D5", "B2", "F3", "F13",
"F2", "C2", "E8",
};
static const char * const pic32_output0_group[] = {
"D2", "G8", "F4", "D10", "F1", "B9", "B10", "C14",
"B5", "C1", "D14", "G1", "A14", "D6",
};
static const char * const pic32_output0_1_group[] = {
"D2", "G8", "F4", "D10", "F1", "B9", "B10", "C14",
"B5", "C1", "D14", "G1", "A14", "D6",
"D3", "G7", "F5", "D11", "F0", "B1", "E5", "C13",
"B3", "C4", "D15", "G0", "A15", "D7",
};
static const char *const pic32_output1_group[] = {
"D3", "G7", "F5", "D11", "F0", "B1", "E5", "C13",
"B3", "C4", "D15", "G0", "A15", "D7",
};
static const char *const pic32_output1_3_group[] = {
"D3", "G7", "F5", "D11", "F0", "B1", "E5", "C13",
"B3", "C4", "D15", "G0", "A15", "D7",
"G9", "B14", "D0", "B6", "D5", "B2", "F3", "F13",
"C2", "E8", "F2",
};
static const char * const pic32_output2_group[] = {
"D9", "G6", "B8", "B15", "D4", "B0", "E3", "B7",
"F12", "D12", "F8", "C3", "E9",
};
static const char * const pic32_output2_3_group[] = {
"D9", "G6", "B8", "B15", "D4", "B0", "E3", "B7",
"F12", "D12", "F8", "C3", "E9",
"G9", "B14", "D0", "B6", "D5", "B2", "F3", "F13",
"C2", "E8", "F2",
};
static const char * const pic32_output3_group[] = {
"G9", "B14", "D0", "B6", "D5", "B2", "F3", "F13",
"C2", "E8", "F2",
};
#define FUNCTION(_name, _gr) \
{ \
.name = #_name, \
.groups = pic32_##_gr##_group, \
.ngroups = ARRAY_SIZE(pic32_##_gr##_group), \
}
static const struct pic32_function pic32_functions[] = {
FUNCTION(INT3, input0),
FUNCTION(T2CK, input0),
FUNCTION(T6CK, input0),
FUNCTION(IC3, input0),
FUNCTION(IC7, input0),
FUNCTION(U1RX, input0),
FUNCTION(U2CTS, input0),
FUNCTION(U5RX, input0),
FUNCTION(U6CTS, input0),
FUNCTION(SDI1, input0),
FUNCTION(SDI3, input0),
FUNCTION(SDI5, input0),
FUNCTION(SS6IN, input0),
FUNCTION(REFCLKI1, input0),
FUNCTION(INT4, input1),
FUNCTION(T5CK, input1),
FUNCTION(T7CK, input1),
FUNCTION(IC4, input1),
FUNCTION(IC8, input1),
FUNCTION(U3RX, input1),
FUNCTION(U4CTS, input1),
FUNCTION(SDI2, input1),
FUNCTION(SDI4, input1),
FUNCTION(C1RX, input1),
FUNCTION(REFCLKI4, input1),
FUNCTION(INT2, input2),
FUNCTION(T3CK, input2),
FUNCTION(T8CK, input2),
FUNCTION(IC2, input2),
FUNCTION(IC5, input2),
FUNCTION(IC9, input2),
FUNCTION(U1CTS, input2),
FUNCTION(U2RX, input2),
FUNCTION(U5CTS, input2),
FUNCTION(SS1IN, input2),
FUNCTION(SS3IN, input2),
FUNCTION(SS4IN, input2),
FUNCTION(SS5IN, input2),
FUNCTION(C2RX, input2),
FUNCTION(INT1, input3),
FUNCTION(T4CK, input3),
FUNCTION(T9CK, input3),
FUNCTION(IC1, input3),
FUNCTION(IC6, input3),
FUNCTION(U3CTS, input3),
FUNCTION(U4RX, input3),
FUNCTION(U6RX, input3),
FUNCTION(SS2IN, input3),
FUNCTION(SDI6, input3),
FUNCTION(OCFA, input3),
FUNCTION(REFCLKI3, input3),
FUNCTION(U3TX, output0),
FUNCTION(U4RTS, output0),
FUNCTION(SDO1, output0_1),
FUNCTION(SDO2, output0_1),
FUNCTION(SDO3, output0_1),
FUNCTION(SDO5, output0_1),
FUNCTION(SS6OUT, output0),
FUNCTION(OC3, output0),
FUNCTION(OC6, output0),
FUNCTION(REFCLKO4, output0),
FUNCTION(C2OUT, output0),
FUNCTION(C1TX, output0),
FUNCTION(U1TX, output1),
FUNCTION(U2RTS, output1),
FUNCTION(U5TX, output1),
FUNCTION(U6RTS, output1),
FUNCTION(SDO4, output1_3),
FUNCTION(OC4, output1),
FUNCTION(OC7, output1),
FUNCTION(REFCLKO1, output1),
FUNCTION(U3RTS, output2),
FUNCTION(U4TX, output2),
FUNCTION(U6TX, output2_3),
FUNCTION(SS1OUT, output2),
FUNCTION(SS3OUT, output2),
FUNCTION(SS4OUT, output2),
FUNCTION(SS5OUT, output2),
FUNCTION(SDO6, output2_3),
FUNCTION(OC5, output2),
FUNCTION(OC8, output2),
FUNCTION(C1OUT, output2),
FUNCTION(REFCLKO3, output2),
FUNCTION(U1RTS, output3),
FUNCTION(U2TX, output3),
FUNCTION(U5RTS, output3),
FUNCTION(SS2OUT, output3),
FUNCTION(OC2, output3),
FUNCTION(OC1, output3),
FUNCTION(OC9, output3),
FUNCTION(C2TX, output3),
};
#define PIC32_PINCTRL_GROUP(_pin, _name, ...) \
{ \
.name = #_name, \
.pin = _pin, \
.functions = (struct pic32_desc_function[]){ \
__VA_ARGS__, { } }, \
}
#define PIC32_PINCTRL_FUNCTION(_name, _muxreg, _muxval) \
{ \
.name = #_name, \
.muxreg = _muxreg, \
.muxval = _muxval, \
}
static const struct pic32_pin_group pic32_groups[] = {
PIC32_PINCTRL_GROUP(14, A14,
PIC32_PINCTRL_FUNCTION(INT3, INT3R, 13),
PIC32_PINCTRL_FUNCTION(T2CK, T2CKR, 13),
PIC32_PINCTRL_FUNCTION(T6CK, T6CKR, 13),
PIC32_PINCTRL_FUNCTION(IC3, IC3R, 13),
PIC32_PINCTRL_FUNCTION(IC7, IC7R, 13),
PIC32_PINCTRL_FUNCTION(U1RX, U1RXR, 13),
PIC32_PINCTRL_FUNCTION(U2CTS, U2CTSR, 13),
PIC32_PINCTRL_FUNCTION(U5RX, U5RXR, 13),
PIC32_PINCTRL_FUNCTION(U6CTS, U6CTSR, 13),
PIC32_PINCTRL_FUNCTION(SDI1, SDI1R, 13),
PIC32_PINCTRL_FUNCTION(SDI3, SDI3R, 13),
PIC32_PINCTRL_FUNCTION(SDI5, SDI5R, 13),
PIC32_PINCTRL_FUNCTION(SS6IN, SS6INR, 13),
PIC32_PINCTRL_FUNCTION(REFCLKI1, REFCLKI1R, 13),
PIC32_PINCTRL_FUNCTION(U3TX, RPA14R, 1),
PIC32_PINCTRL_FUNCTION(U4RTS, RPA14R, 2),
PIC32_PINCTRL_FUNCTION(SDO1, RPA14R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPA14R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPA14R, 7),
PIC32_PINCTRL_FUNCTION(SDO5, RPA14R, 9),
PIC32_PINCTRL_FUNCTION(SS6OUT, RPA14R, 10),
PIC32_PINCTRL_FUNCTION(OC3, RPA14R, 11),
PIC32_PINCTRL_FUNCTION(OC6, RPA14R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO4, RPA14R, 13),
PIC32_PINCTRL_FUNCTION(C2OUT, RPA14R, 14),
PIC32_PINCTRL_FUNCTION(C1TX, RPA14R, 15)),
PIC32_PINCTRL_GROUP(15, A15,
PIC32_PINCTRL_FUNCTION(INT4, INT4R, 13),
PIC32_PINCTRL_FUNCTION(T5CK, T5CKR, 13),
PIC32_PINCTRL_FUNCTION(T7CK, T7CKR, 13),
PIC32_PINCTRL_FUNCTION(IC4, IC4R, 13),
PIC32_PINCTRL_FUNCTION(IC8, IC8R, 13),
PIC32_PINCTRL_FUNCTION(U3RX, U3RXR, 13),
PIC32_PINCTRL_FUNCTION(U4CTS, U4CTSR, 13),
PIC32_PINCTRL_FUNCTION(SDI2, SDI2R, 13),
PIC32_PINCTRL_FUNCTION(SDI4, SDI4R, 13),
PIC32_PINCTRL_FUNCTION(C1RX, C1RXR, 13),
PIC32_PINCTRL_FUNCTION(REFCLKI4, REFCLKI4R, 13),
PIC32_PINCTRL_FUNCTION(U1TX, RPA15R, 1),
PIC32_PINCTRL_FUNCTION(U2RTS, RPA15R, 2),
PIC32_PINCTRL_FUNCTION(U5TX, RPA15R, 3),
PIC32_PINCTRL_FUNCTION(U6RTS, RPA15R, 4),
PIC32_PINCTRL_FUNCTION(SDO1, RPA15R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPA15R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPA15R, 7),
PIC32_PINCTRL_FUNCTION(SDO4, RPA15R, 8),
PIC32_PINCTRL_FUNCTION(SDO5, RPA15R, 9),
PIC32_PINCTRL_FUNCTION(OC4, RPA15R, 11),
PIC32_PINCTRL_FUNCTION(OC7, RPA15R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO1, RPA15R, 15)),
PIC32_PINCTRL_GROUP(16, B0,
PIC32_PINCTRL_FUNCTION(INT2, INT2R, 5),
PIC32_PINCTRL_FUNCTION(T3CK, T3CKR, 5),
PIC32_PINCTRL_FUNCTION(T8CK, T8CKR, 5),
PIC32_PINCTRL_FUNCTION(IC2, IC2R, 5),
PIC32_PINCTRL_FUNCTION(IC5, IC5R, 5),
PIC32_PINCTRL_FUNCTION(IC9, IC9R, 5),
PIC32_PINCTRL_FUNCTION(U1CTS, U1CTSR, 5),
PIC32_PINCTRL_FUNCTION(U2RX, U2RXR, 5),
PIC32_PINCTRL_FUNCTION(U5CTS, U5CTSR, 5),
PIC32_PINCTRL_FUNCTION(SS1IN, SS1INR, 5),
PIC32_PINCTRL_FUNCTION(SS3IN, SS3INR, 5),
PIC32_PINCTRL_FUNCTION(SS4IN, SS4INR, 5),
PIC32_PINCTRL_FUNCTION(SS5IN, SS5INR, 5),
PIC32_PINCTRL_FUNCTION(C2RX, C2RXR, 5),
PIC32_PINCTRL_FUNCTION(U3RTS, RPB0R, 1),
PIC32_PINCTRL_FUNCTION(U4TX, RPB0R, 2),
PIC32_PINCTRL_FUNCTION(U6TX, RPB0R, 4),
PIC32_PINCTRL_FUNCTION(SS1OUT, RPB0R, 5),
PIC32_PINCTRL_FUNCTION(SS3OUT, RPB0R, 7),
PIC32_PINCTRL_FUNCTION(SS4OUT, RPB0R, 8),
PIC32_PINCTRL_FUNCTION(SS5OUT, RPB0R, 9),
PIC32_PINCTRL_FUNCTION(SDO6, RPB0R, 10),
PIC32_PINCTRL_FUNCTION(OC5, RPB0R, 11),
PIC32_PINCTRL_FUNCTION(OC8, RPB0R, 12),
PIC32_PINCTRL_FUNCTION(C1OUT, RPB0R, 14),
PIC32_PINCTRL_FUNCTION(REFCLKO3, RPB0R, 15)),
PIC32_PINCTRL_GROUP(17, B1,
PIC32_PINCTRL_FUNCTION(INT4, INT4R, 5),
PIC32_PINCTRL_FUNCTION(T5CK, T5CKR, 5),
PIC32_PINCTRL_FUNCTION(T7CK, T7CKR, 5),
PIC32_PINCTRL_FUNCTION(IC4, IC4R, 5),
PIC32_PINCTRL_FUNCTION(IC8, IC8R, 5),
PIC32_PINCTRL_FUNCTION(U3RX, U3RXR, 5),
PIC32_PINCTRL_FUNCTION(U4CTS, U4CTSR, 5),
PIC32_PINCTRL_FUNCTION(SDI2, SDI2R, 5),
PIC32_PINCTRL_FUNCTION(SDI4, SDI4R, 5),
PIC32_PINCTRL_FUNCTION(C1RX, C1RXR, 5),
PIC32_PINCTRL_FUNCTION(REFCLKI4, REFCLKI4R, 5),
PIC32_PINCTRL_FUNCTION(U1TX, RPB1R, 1),
PIC32_PINCTRL_FUNCTION(U2RTS, RPB1R, 2),
PIC32_PINCTRL_FUNCTION(U5TX, RPB1R, 3),
PIC32_PINCTRL_FUNCTION(U6RTS, RPB1R, 4),
PIC32_PINCTRL_FUNCTION(SDO1, RPB1R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPB1R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPB1R, 7),
PIC32_PINCTRL_FUNCTION(SDO4, RPB1R, 8),
PIC32_PINCTRL_FUNCTION(SDO5, RPB1R, 9),
PIC32_PINCTRL_FUNCTION(OC4, RPB1R, 11),
PIC32_PINCTRL_FUNCTION(OC7, RPB1R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO1, RPB1R, 15)),
PIC32_PINCTRL_GROUP(18, B2,
PIC32_PINCTRL_FUNCTION(INT1, INT1R, 7),
PIC32_PINCTRL_FUNCTION(T4CK, T4CKR, 7),
PIC32_PINCTRL_FUNCTION(T9CK, T9CKR, 7),
PIC32_PINCTRL_FUNCTION(IC1, IC1R, 7),
PIC32_PINCTRL_FUNCTION(IC6, IC6R, 7),
PIC32_PINCTRL_FUNCTION(U3CTS, U3CTSR, 7),
PIC32_PINCTRL_FUNCTION(U4RX, U4RXR, 7),
PIC32_PINCTRL_FUNCTION(U6RX, U6RXR, 7),
PIC32_PINCTRL_FUNCTION(SS2IN, SS2INR, 7),
PIC32_PINCTRL_FUNCTION(SDI6, SDI6R, 7),
PIC32_PINCTRL_FUNCTION(OCFA, OCFAR, 7),
PIC32_PINCTRL_FUNCTION(REFCLKI3, REFCLKI3R, 7),
PIC32_PINCTRL_FUNCTION(U1RTS, RPB2R, 1),
PIC32_PINCTRL_FUNCTION(U2TX, RPB2R, 2),
PIC32_PINCTRL_FUNCTION(U5RTS, RPB2R, 3),
PIC32_PINCTRL_FUNCTION(U6TX, RPB2R, 4),
PIC32_PINCTRL_FUNCTION(SS2OUT, RPB2R, 6),
PIC32_PINCTRL_FUNCTION(SDO4, RPB2R, 8),
PIC32_PINCTRL_FUNCTION(SDO6, RPB2R, 10),
PIC32_PINCTRL_FUNCTION(OC2, RPB2R, 11),
PIC32_PINCTRL_FUNCTION(OC1, RPB2R, 12),
PIC32_PINCTRL_FUNCTION(OC9, RPB2R, 13),
PIC32_PINCTRL_FUNCTION(C2TX, RPB2R, 15)),
PIC32_PINCTRL_GROUP(19, B3,
PIC32_PINCTRL_FUNCTION(INT4, INT4R, 8),
PIC32_PINCTRL_FUNCTION(T5CK, T5CKR, 8),
PIC32_PINCTRL_FUNCTION(T7CK, T7CKR, 8),
PIC32_PINCTRL_FUNCTION(IC4, IC4R, 8),
PIC32_PINCTRL_FUNCTION(IC8, IC8R, 8),
PIC32_PINCTRL_FUNCTION(U3RX, U3RXR, 8),
PIC32_PINCTRL_FUNCTION(U4CTS, U4CTSR, 8),
PIC32_PINCTRL_FUNCTION(SDI2, SDI2R, 8),
PIC32_PINCTRL_FUNCTION(SDI4, SDI4R, 8),
PIC32_PINCTRL_FUNCTION(C1RX, C1RXR, 8),
PIC32_PINCTRL_FUNCTION(REFCLKI4, REFCLKI4R, 8),
PIC32_PINCTRL_FUNCTION(U1TX, RPB3R, 1),
PIC32_PINCTRL_FUNCTION(U2RTS, RPB3R, 2),
PIC32_PINCTRL_FUNCTION(U5TX, RPB3R, 3),
PIC32_PINCTRL_FUNCTION(U6RTS, RPB3R, 4),
PIC32_PINCTRL_FUNCTION(SDO1, RPB3R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPB3R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPB3R, 7),
PIC32_PINCTRL_FUNCTION(SDO4, RPB3R, 8),
PIC32_PINCTRL_FUNCTION(SDO5, RPB3R, 9),
PIC32_PINCTRL_FUNCTION(OC4, RPB3R, 11),
PIC32_PINCTRL_FUNCTION(OC7, RPB3R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO1, RPB3R, 15)),
PIC32_PINCTRL_GROUP(21, B5,
PIC32_PINCTRL_FUNCTION(INT3, INT3R, 8),
PIC32_PINCTRL_FUNCTION(T2CK, T2CKR, 8),
PIC32_PINCTRL_FUNCTION(T6CK, T6CKR, 8),
PIC32_PINCTRL_FUNCTION(IC3, IC3R, 8),
PIC32_PINCTRL_FUNCTION(IC7, IC7R, 8),
PIC32_PINCTRL_FUNCTION(U1RX, U1RXR, 8),
PIC32_PINCTRL_FUNCTION(U2CTS, U2CTSR, 8),
PIC32_PINCTRL_FUNCTION(U5RX, U5RXR, 8),
PIC32_PINCTRL_FUNCTION(U6CTS, U6CTSR, 8),
PIC32_PINCTRL_FUNCTION(SDI1, SDI1R, 8),
PIC32_PINCTRL_FUNCTION(SDI3, SDI3R, 8),
PIC32_PINCTRL_FUNCTION(SDI5, SDI5R, 8),
PIC32_PINCTRL_FUNCTION(SS6IN, SS6INR, 8),
PIC32_PINCTRL_FUNCTION(REFCLKI1, REFCLKI1R, 8),
PIC32_PINCTRL_FUNCTION(U3TX, RPB5R, 1),
PIC32_PINCTRL_FUNCTION(U4RTS, RPB5R, 2),
PIC32_PINCTRL_FUNCTION(SDO1, RPB5R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPB5R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPB5R, 7),
PIC32_PINCTRL_FUNCTION(SDO5, RPB5R, 9),
PIC32_PINCTRL_FUNCTION(SS6OUT, RPB5R, 10),
PIC32_PINCTRL_FUNCTION(OC3, RPB5R, 11),
PIC32_PINCTRL_FUNCTION(OC6, RPB5R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO4, RPB5R, 13),
PIC32_PINCTRL_FUNCTION(C2OUT, RPB5R, 14),
PIC32_PINCTRL_FUNCTION(C1TX, RPB5R, 15)),
PIC32_PINCTRL_GROUP(22, B6,
PIC32_PINCTRL_FUNCTION(INT1, INT1R, 4),
PIC32_PINCTRL_FUNCTION(T4CK, T4CKR, 4),
PIC32_PINCTRL_FUNCTION(T9CK, T9CKR, 4),
PIC32_PINCTRL_FUNCTION(IC1, IC1R, 4),
PIC32_PINCTRL_FUNCTION(IC6, IC6R, 4),
PIC32_PINCTRL_FUNCTION(U3CTS, U3CTSR, 4),
PIC32_PINCTRL_FUNCTION(U4RX, U4RXR, 4),
PIC32_PINCTRL_FUNCTION(U6RX, U6RXR, 4),
PIC32_PINCTRL_FUNCTION(SS2IN, SS2INR, 4),
PIC32_PINCTRL_FUNCTION(SDI6, SDI6R, 4),
PIC32_PINCTRL_FUNCTION(OCFA, OCFAR, 4),
PIC32_PINCTRL_FUNCTION(REFCLKI3, REFCLKI3R, 4),
PIC32_PINCTRL_FUNCTION(U1RTS, RPB6R, 1),
PIC32_PINCTRL_FUNCTION(U2TX, RPB6R, 2),
PIC32_PINCTRL_FUNCTION(U5RTS, RPB6R, 3),
PIC32_PINCTRL_FUNCTION(U6TX, RPB6R, 4),
PIC32_PINCTRL_FUNCTION(SS2OUT, RPB6R, 6),
PIC32_PINCTRL_FUNCTION(SDO4, RPB6R, 8),
PIC32_PINCTRL_FUNCTION(SDO6, RPB6R, 10),
PIC32_PINCTRL_FUNCTION(OC2, RPB6R, 11),
PIC32_PINCTRL_FUNCTION(OC1, RPB6R, 12),
PIC32_PINCTRL_FUNCTION(OC9, RPB6R, 13),
PIC32_PINCTRL_FUNCTION(C2TX, RPB6R, 15)),
PIC32_PINCTRL_GROUP(23, B7,
PIC32_PINCTRL_FUNCTION(INT2, INT2R, 7),
PIC32_PINCTRL_FUNCTION(T3CK, T3CKR, 7),
PIC32_PINCTRL_FUNCTION(T8CK, T8CKR, 7),
PIC32_PINCTRL_FUNCTION(IC2, IC2R, 7),
PIC32_PINCTRL_FUNCTION(IC5, IC5R, 7),
PIC32_PINCTRL_FUNCTION(IC9, IC9R, 7),
PIC32_PINCTRL_FUNCTION(U1CTS, U1CTSR, 7),
PIC32_PINCTRL_FUNCTION(U2RX, U2RXR, 7),
PIC32_PINCTRL_FUNCTION(U5CTS, U5CTSR, 7),
PIC32_PINCTRL_FUNCTION(SS1IN, SS1INR, 7),
PIC32_PINCTRL_FUNCTION(SS3IN, SS3INR, 7),
PIC32_PINCTRL_FUNCTION(SS4IN, SS4INR, 7),
PIC32_PINCTRL_FUNCTION(SS5IN, SS5INR, 7),
PIC32_PINCTRL_FUNCTION(C2RX, C2RXR, 7),
PIC32_PINCTRL_FUNCTION(U3RTS, RPB7R, 1),
PIC32_PINCTRL_FUNCTION(U4TX, RPB7R, 2),
PIC32_PINCTRL_FUNCTION(U6TX, RPB7R, 4),
PIC32_PINCTRL_FUNCTION(SS1OUT, RPB7R, 5),
PIC32_PINCTRL_FUNCTION(SS3OUT, RPB7R, 7),
PIC32_PINCTRL_FUNCTION(SS4OUT, RPB7R, 8),
PIC32_PINCTRL_FUNCTION(SS5OUT, RPB7R, 9),
PIC32_PINCTRL_FUNCTION(SDO6, RPB7R, 10),
PIC32_PINCTRL_FUNCTION(OC5, RPB7R, 11),
PIC32_PINCTRL_FUNCTION(OC8, RPB7R, 12),
PIC32_PINCTRL_FUNCTION(C1OUT, RPB7R, 14),
PIC32_PINCTRL_FUNCTION(REFCLKO3, RPB7R, 15)),
PIC32_PINCTRL_GROUP(24, B8,
PIC32_PINCTRL_FUNCTION(INT2, INT2R, 2),
PIC32_PINCTRL_FUNCTION(T3CK, T3CKR, 2),
PIC32_PINCTRL_FUNCTION(T8CK, T8CKR, 2),
PIC32_PINCTRL_FUNCTION(IC2, IC2R, 2),
PIC32_PINCTRL_FUNCTION(IC5, IC5R, 2),
PIC32_PINCTRL_FUNCTION(IC9, IC9R, 2),
PIC32_PINCTRL_FUNCTION(U1CTS, U1CTSR, 2),
PIC32_PINCTRL_FUNCTION(U2RX, U2RXR, 2),
PIC32_PINCTRL_FUNCTION(U5CTS, U5CTSR, 2),
PIC32_PINCTRL_FUNCTION(SS1IN, SS1INR, 2),
PIC32_PINCTRL_FUNCTION(SS3IN, SS3INR, 2),
PIC32_PINCTRL_FUNCTION(SS4IN, SS4INR, 2),
PIC32_PINCTRL_FUNCTION(SS5IN, SS5INR, 2),
PIC32_PINCTRL_FUNCTION(C2RX, C2RXR, 2),
PIC32_PINCTRL_FUNCTION(U3RTS, RPB8R, 1),
PIC32_PINCTRL_FUNCTION(U4TX, RPB8R, 2),
PIC32_PINCTRL_FUNCTION(U6TX, RPB8R, 4),
PIC32_PINCTRL_FUNCTION(SS1OUT, RPB8R, 5),
PIC32_PINCTRL_FUNCTION(SS3OUT, RPB8R, 7),
PIC32_PINCTRL_FUNCTION(SS4OUT, RPB8R, 8),
PIC32_PINCTRL_FUNCTION(SS5OUT, RPB8R, 9),
PIC32_PINCTRL_FUNCTION(SDO6, RPB8R, 10),
PIC32_PINCTRL_FUNCTION(OC5, RPB8R, 11),
PIC32_PINCTRL_FUNCTION(OC8, RPB8R, 12),
PIC32_PINCTRL_FUNCTION(C1OUT, RPB8R, 14),
PIC32_PINCTRL_FUNCTION(REFCLKO3, RPB8R, 15)),
PIC32_PINCTRL_GROUP(25, B9,
PIC32_PINCTRL_FUNCTION(INT3, INT3R, 5),
PIC32_PINCTRL_FUNCTION(T2CK, T2CKR, 5),
PIC32_PINCTRL_FUNCTION(T6CK, T6CKR, 5),
PIC32_PINCTRL_FUNCTION(IC3, IC3R, 5),
PIC32_PINCTRL_FUNCTION(IC7, IC7R, 5),
PIC32_PINCTRL_FUNCTION(U1RX, U1RXR, 5),
PIC32_PINCTRL_FUNCTION(U2CTS, U2CTSR, 5),
PIC32_PINCTRL_FUNCTION(U5RX, U5RXR, 5),
PIC32_PINCTRL_FUNCTION(U6CTS, U6CTSR, 5),
PIC32_PINCTRL_FUNCTION(SDI1, SDI1R, 5),
PIC32_PINCTRL_FUNCTION(SDI3, SDI3R, 5),
PIC32_PINCTRL_FUNCTION(SDI5, SDI5R, 5),
PIC32_PINCTRL_FUNCTION(SS6IN, SS6INR, 5),
PIC32_PINCTRL_FUNCTION(REFCLKI1, REFCLKI1R, 5),
PIC32_PINCTRL_FUNCTION(U3TX, RPB9R, 1),
PIC32_PINCTRL_FUNCTION(U4RTS, RPB9R, 2),
PIC32_PINCTRL_FUNCTION(SDO1, RPB9R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPB9R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPB9R, 7),
PIC32_PINCTRL_FUNCTION(SDO5, RPB9R, 9),
PIC32_PINCTRL_FUNCTION(SS6OUT, RPB9R, 10),
PIC32_PINCTRL_FUNCTION(OC3, RPB9R, 11),
PIC32_PINCTRL_FUNCTION(OC6, RPB9R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO4, RPB9R, 13),
PIC32_PINCTRL_FUNCTION(C2OUT, RPB9R, 14),
PIC32_PINCTRL_FUNCTION(C1TX, RPB9R, 15)),
PIC32_PINCTRL_GROUP(26, B10,
PIC32_PINCTRL_FUNCTION(INT3, INT3R, 6),
PIC32_PINCTRL_FUNCTION(T2CK, T2CKR, 6),
PIC32_PINCTRL_FUNCTION(T6CK, T6CKR, 6),
PIC32_PINCTRL_FUNCTION(IC3, IC3R, 6),
PIC32_PINCTRL_FUNCTION(IC7, IC7R, 6),
PIC32_PINCTRL_FUNCTION(U1RX, U1RXR, 6),
PIC32_PINCTRL_FUNCTION(U2CTS, U2CTSR, 6),
PIC32_PINCTRL_FUNCTION(U5RX, U5RXR, 6),
PIC32_PINCTRL_FUNCTION(U6CTS, U6CTSR, 6),
PIC32_PINCTRL_FUNCTION(SDI1, SDI1R, 6),
PIC32_PINCTRL_FUNCTION(SDI3, SDI3R, 6),
PIC32_PINCTRL_FUNCTION(SDI5, SDI5R, 6),
PIC32_PINCTRL_FUNCTION(SS6IN, SS6INR, 6),
PIC32_PINCTRL_FUNCTION(REFCLKI1, REFCLKI1R, 6),
PIC32_PINCTRL_FUNCTION(U3TX, RPB10R, 1),
PIC32_PINCTRL_FUNCTION(U4RTS, RPB10R, 2),
PIC32_PINCTRL_FUNCTION(SDO1, RPB10R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPB10R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPB10R, 7),
PIC32_PINCTRL_FUNCTION(SDO5, RPB10R, 9),
PIC32_PINCTRL_FUNCTION(SS6OUT, RPB10R, 10),
PIC32_PINCTRL_FUNCTION(OC3, RPB10R, 11),
PIC32_PINCTRL_FUNCTION(OC6, RPB10R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO4, RPB10R, 13),
PIC32_PINCTRL_FUNCTION(C2OUT, RPB10R, 14),
PIC32_PINCTRL_FUNCTION(C1TX, RPB10R, 15)),
PIC32_PINCTRL_GROUP(30, B14,
PIC32_PINCTRL_FUNCTION(INT1, INT1R, 2),
PIC32_PINCTRL_FUNCTION(T4CK, T4CKR, 2),
PIC32_PINCTRL_FUNCTION(T9CK, T9CKR, 2),
PIC32_PINCTRL_FUNCTION(IC1, IC1R, 2),
PIC32_PINCTRL_FUNCTION(IC6, IC6R, 2),
PIC32_PINCTRL_FUNCTION(U3CTS, U3CTSR, 2),
PIC32_PINCTRL_FUNCTION(U4RX, U4RXR, 2),
PIC32_PINCTRL_FUNCTION(U6RX, U6RXR, 2),
PIC32_PINCTRL_FUNCTION(SS2IN, SS2INR, 2),
PIC32_PINCTRL_FUNCTION(SDI6, SDI6R, 2),
PIC32_PINCTRL_FUNCTION(OCFA, OCFAR, 2),
PIC32_PINCTRL_FUNCTION(REFCLKI3, REFCLKI3R, 2),
PIC32_PINCTRL_FUNCTION(U1RTS, RPB14R, 1),
PIC32_PINCTRL_FUNCTION(U2TX, RPB14R, 2),
PIC32_PINCTRL_FUNCTION(U5RTS, RPB14R, 3),
PIC32_PINCTRL_FUNCTION(U6TX, RPB14R, 4),
PIC32_PINCTRL_FUNCTION(SS2OUT, RPB14R, 6),
PIC32_PINCTRL_FUNCTION(SDO4, RPB14R, 8),
PIC32_PINCTRL_FUNCTION(SDO6, RPB14R, 10),
PIC32_PINCTRL_FUNCTION(OC2, RPB14R, 11),
PIC32_PINCTRL_FUNCTION(OC1, RPB14R, 12),
PIC32_PINCTRL_FUNCTION(OC9, RPB14R, 13),
PIC32_PINCTRL_FUNCTION(C2TX, RPB14R, 15)),
PIC32_PINCTRL_GROUP(31, B15,
PIC32_PINCTRL_FUNCTION(INT2, INT2R, 3),
PIC32_PINCTRL_FUNCTION(T3CK, T3CKR, 3),
PIC32_PINCTRL_FUNCTION(T8CK, T8CKR, 3),
PIC32_PINCTRL_FUNCTION(IC2, IC2R, 3),
PIC32_PINCTRL_FUNCTION(IC5, IC5R, 3),
PIC32_PINCTRL_FUNCTION(IC9, IC9R, 3),
PIC32_PINCTRL_FUNCTION(U1CTS, U1CTSR, 3),
PIC32_PINCTRL_FUNCTION(U2RX, U2RXR, 3),
PIC32_PINCTRL_FUNCTION(U5CTS, U5CTSR, 3),
PIC32_PINCTRL_FUNCTION(SS1IN, SS1INR, 3),
PIC32_PINCTRL_FUNCTION(SS3IN, SS3INR, 3),
PIC32_PINCTRL_FUNCTION(SS4IN, SS4INR, 3),
PIC32_PINCTRL_FUNCTION(SS5IN, SS5INR, 3),
PIC32_PINCTRL_FUNCTION(C2RX, C2RXR, 3),
PIC32_PINCTRL_FUNCTION(U3RTS, RPB15R, 1),
PIC32_PINCTRL_FUNCTION(U4TX, RPB15R, 2),
PIC32_PINCTRL_FUNCTION(U6TX, RPB15R, 4),
PIC32_PINCTRL_FUNCTION(SS1OUT, RPB15R, 5),
PIC32_PINCTRL_FUNCTION(SS3OUT, RPB15R, 7),
PIC32_PINCTRL_FUNCTION(SS4OUT, RPB15R, 8),
PIC32_PINCTRL_FUNCTION(SS5OUT, RPB15R, 9),
PIC32_PINCTRL_FUNCTION(SDO6, RPB15R, 10),
PIC32_PINCTRL_FUNCTION(OC5, RPB15R, 11),
PIC32_PINCTRL_FUNCTION(OC8, RPB15R, 12),
PIC32_PINCTRL_FUNCTION(C1OUT, RPB15R, 14),
PIC32_PINCTRL_FUNCTION(REFCLKO3, RPB15R, 15)),
PIC32_PINCTRL_GROUP(33, C1,
PIC32_PINCTRL_FUNCTION(INT3, INT3R, 10),
PIC32_PINCTRL_FUNCTION(T2CK, T2CKR, 10),
PIC32_PINCTRL_FUNCTION(T6CK, T6CKR, 10),
PIC32_PINCTRL_FUNCTION(IC3, IC3R, 10),
PIC32_PINCTRL_FUNCTION(IC7, IC7R, 10),
PIC32_PINCTRL_FUNCTION(U1RX, U1RXR, 10),
PIC32_PINCTRL_FUNCTION(U2CTS, U2CTSR, 10),
PIC32_PINCTRL_FUNCTION(U5RX, U5RXR, 10),
PIC32_PINCTRL_FUNCTION(U6CTS, U6CTSR, 10),
PIC32_PINCTRL_FUNCTION(SDI1, SDI1R, 10),
PIC32_PINCTRL_FUNCTION(SDI3, SDI3R, 10),
PIC32_PINCTRL_FUNCTION(SDI5, SDI5R, 10),
PIC32_PINCTRL_FUNCTION(SS6IN, SS6INR, 10),
PIC32_PINCTRL_FUNCTION(REFCLKI1, REFCLKI1R, 10),
PIC32_PINCTRL_FUNCTION(U3TX, RPC1R, 1),
PIC32_PINCTRL_FUNCTION(U4RTS, RPC1R, 2),
PIC32_PINCTRL_FUNCTION(SDO1, RPC1R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPC1R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPC1R, 7),
PIC32_PINCTRL_FUNCTION(SDO5, RPC1R, 9),
PIC32_PINCTRL_FUNCTION(SS6OUT, RPC1R, 10),
PIC32_PINCTRL_FUNCTION(OC3, RPC1R, 11),
PIC32_PINCTRL_FUNCTION(OC6, RPC1R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO4, RPC1R, 13),
PIC32_PINCTRL_FUNCTION(C2OUT, RPC1R, 14),
PIC32_PINCTRL_FUNCTION(C1TX, RPC1R, 15)),
PIC32_PINCTRL_GROUP(34, C2,
PIC32_PINCTRL_FUNCTION(INT1, INT1R, 12),
PIC32_PINCTRL_FUNCTION(T4CK, T4CKR, 12),
PIC32_PINCTRL_FUNCTION(T9CK, T9CKR, 12),
PIC32_PINCTRL_FUNCTION(IC1, IC1R, 12),
PIC32_PINCTRL_FUNCTION(IC6, IC6R, 12),
PIC32_PINCTRL_FUNCTION(U3CTS, U3CTSR, 12),
PIC32_PINCTRL_FUNCTION(U4RX, U4RXR, 12),
PIC32_PINCTRL_FUNCTION(U6RX, U6RXR, 12),
PIC32_PINCTRL_FUNCTION(SS2IN, SS2INR, 12),
PIC32_PINCTRL_FUNCTION(SDI6, SDI6R, 12),
PIC32_PINCTRL_FUNCTION(OCFA, OCFAR, 12),
PIC32_PINCTRL_FUNCTION(REFCLKI3, REFCLKI3R, 12),
PIC32_PINCTRL_FUNCTION(U1RTS, RPC2R, 1),
PIC32_PINCTRL_FUNCTION(U2TX, RPC2R, 2),
PIC32_PINCTRL_FUNCTION(U5RTS, RPC2R, 3),
PIC32_PINCTRL_FUNCTION(U6TX, RPC2R, 4),
PIC32_PINCTRL_FUNCTION(SS2OUT, RPC2R, 6),
PIC32_PINCTRL_FUNCTION(SDO4, RPC2R, 8),
PIC32_PINCTRL_FUNCTION(SDO6, RPC2R, 10),
PIC32_PINCTRL_FUNCTION(OC2, RPC2R, 11),
PIC32_PINCTRL_FUNCTION(OC1, RPC2R, 12),
PIC32_PINCTRL_FUNCTION(OC9, RPC2R, 13),
PIC32_PINCTRL_FUNCTION(C2TX, RPC2R, 15)),
PIC32_PINCTRL_GROUP(35, C3,
PIC32_PINCTRL_FUNCTION(INT2, INT2R, 12),
PIC32_PINCTRL_FUNCTION(T3CK, T3CKR, 12),
PIC32_PINCTRL_FUNCTION(T8CK, T8CKR, 12),
PIC32_PINCTRL_FUNCTION(IC2, IC2R, 12),
PIC32_PINCTRL_FUNCTION(IC5, IC5R, 12),
PIC32_PINCTRL_FUNCTION(IC9, IC9R, 12),
PIC32_PINCTRL_FUNCTION(U1CTS, U1CTSR, 12),
PIC32_PINCTRL_FUNCTION(U2RX, U2RXR, 12),
PIC32_PINCTRL_FUNCTION(U5CTS, U5CTSR, 12),
PIC32_PINCTRL_FUNCTION(SS1IN, SS1INR, 12),
PIC32_PINCTRL_FUNCTION(SS3IN, SS3INR, 12),
PIC32_PINCTRL_FUNCTION(SS4IN, SS4INR, 12),
PIC32_PINCTRL_FUNCTION(SS5IN, SS5INR, 12),
PIC32_PINCTRL_FUNCTION(C2RX, C2RXR, 12),
PIC32_PINCTRL_FUNCTION(U3RTS, RPC3R, 1),
PIC32_PINCTRL_FUNCTION(U4TX, RPC3R, 2),
PIC32_PINCTRL_FUNCTION(U6TX, RPC3R, 4),
PIC32_PINCTRL_FUNCTION(SS1OUT, RPC3R, 5),
PIC32_PINCTRL_FUNCTION(SS3OUT, RPC3R, 7),
PIC32_PINCTRL_FUNCTION(SS4OUT, RPC3R, 8),
PIC32_PINCTRL_FUNCTION(SS5OUT, RPC3R, 9),
PIC32_PINCTRL_FUNCTION(SDO6, RPC3R, 10),
PIC32_PINCTRL_FUNCTION(OC5, RPC3R, 11),
PIC32_PINCTRL_FUNCTION(OC8, RPC3R, 12),
PIC32_PINCTRL_FUNCTION(C1OUT, RPC3R, 14),
PIC32_PINCTRL_FUNCTION(REFCLKO3, RPC3R, 15)),
PIC32_PINCTRL_GROUP(36, C4,
PIC32_PINCTRL_FUNCTION(INT4, INT4R, 10),
PIC32_PINCTRL_FUNCTION(T5CK, T5CKR, 10),
PIC32_PINCTRL_FUNCTION(T7CK, T7CKR, 10),
PIC32_PINCTRL_FUNCTION(IC4, IC4R, 10),
PIC32_PINCTRL_FUNCTION(IC8, IC8R, 10),
PIC32_PINCTRL_FUNCTION(U3RX, U3RXR, 10),
PIC32_PINCTRL_FUNCTION(U4CTS, U4CTSR, 10),
PIC32_PINCTRL_FUNCTION(SDI2, SDI2R, 10),
PIC32_PINCTRL_FUNCTION(SDI4, SDI4R, 10),
PIC32_PINCTRL_FUNCTION(C1RX, C1RXR, 10),
PIC32_PINCTRL_FUNCTION(REFCLKI4, REFCLKI4R, 10),
PIC32_PINCTRL_FUNCTION(U1TX, RPC4R, 1),
PIC32_PINCTRL_FUNCTION(U2RTS, RPC4R, 2),
PIC32_PINCTRL_FUNCTION(U5TX, RPC4R, 3),
PIC32_PINCTRL_FUNCTION(U6RTS, RPC4R, 4),
PIC32_PINCTRL_FUNCTION(SDO1, RPC4R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPC4R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPC4R, 7),
PIC32_PINCTRL_FUNCTION(SDO4, RPC4R, 8),
PIC32_PINCTRL_FUNCTION(SDO5, RPC4R, 9),
PIC32_PINCTRL_FUNCTION(OC4, RPC4R, 11),
PIC32_PINCTRL_FUNCTION(OC7, RPC4R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO1, RPC4R, 15)),
PIC32_PINCTRL_GROUP(45, C13,
PIC32_PINCTRL_FUNCTION(INT4, INT4R, 7),
PIC32_PINCTRL_FUNCTION(T5CK, T5CKR, 7),
PIC32_PINCTRL_FUNCTION(T7CK, T7CKR, 7),
PIC32_PINCTRL_FUNCTION(IC4, IC4R, 7),
PIC32_PINCTRL_FUNCTION(IC8, IC8R, 7),
PIC32_PINCTRL_FUNCTION(U3RX, U3RXR, 7),
PIC32_PINCTRL_FUNCTION(U4CTS, U4CTSR, 7),
PIC32_PINCTRL_FUNCTION(SDI2, SDI2R, 7),
PIC32_PINCTRL_FUNCTION(SDI4, SDI4R, 7),
PIC32_PINCTRL_FUNCTION(C1RX, C1RXR, 7),
PIC32_PINCTRL_FUNCTION(REFCLKI4, REFCLKI4R, 7),
PIC32_PINCTRL_FUNCTION(U1TX, RPC13R, 1),
PIC32_PINCTRL_FUNCTION(U2RTS, RPC13R, 2),
PIC32_PINCTRL_FUNCTION(U5TX, RPC13R, 3),
PIC32_PINCTRL_FUNCTION(U6RTS, RPC13R, 4),
PIC32_PINCTRL_FUNCTION(SDO1, RPC13R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPC13R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPC13R, 7),
PIC32_PINCTRL_FUNCTION(SDO4, RPC13R, 8),
PIC32_PINCTRL_FUNCTION(SDO5, RPC13R, 9),
PIC32_PINCTRL_FUNCTION(OC4, RPC13R, 11),
PIC32_PINCTRL_FUNCTION(OC7, RPC13R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO1, RPC13R, 15)),
PIC32_PINCTRL_GROUP(46, C14,
PIC32_PINCTRL_FUNCTION(INT3, INT3R, 7),
PIC32_PINCTRL_FUNCTION(T2CK, T2CKR, 7),
PIC32_PINCTRL_FUNCTION(T6CK, T6CKR, 7),
PIC32_PINCTRL_FUNCTION(IC3, IC3R, 7),
PIC32_PINCTRL_FUNCTION(IC7, IC7R, 7),
PIC32_PINCTRL_FUNCTION(U1RX, U1RXR, 7),
PIC32_PINCTRL_FUNCTION(U2CTS, U2CTSR, 7),
PIC32_PINCTRL_FUNCTION(U5RX, U5RXR, 7),
PIC32_PINCTRL_FUNCTION(U6CTS, U6CTSR, 7),
PIC32_PINCTRL_FUNCTION(SDI1, SDI1R, 7),
PIC32_PINCTRL_FUNCTION(SDI3, SDI3R, 7),
PIC32_PINCTRL_FUNCTION(SDI5, SDI5R, 7),
PIC32_PINCTRL_FUNCTION(SS6IN, SS6INR, 7),
PIC32_PINCTRL_FUNCTION(REFCLKI1, REFCLKI1R, 7),
PIC32_PINCTRL_FUNCTION(U3TX, RPC14R, 1),
PIC32_PINCTRL_FUNCTION(U4RTS, RPC14R, 2),
PIC32_PINCTRL_FUNCTION(SDO1, RPC14R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPC14R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPC14R, 7),
PIC32_PINCTRL_FUNCTION(SDO5, RPC14R, 9),
PIC32_PINCTRL_FUNCTION(SS6OUT, RPC14R, 10),
PIC32_PINCTRL_FUNCTION(OC3, RPC14R, 11),
PIC32_PINCTRL_FUNCTION(OC6, RPC14R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO4, RPC14R, 13),
PIC32_PINCTRL_FUNCTION(C2OUT, RPC14R, 14),
PIC32_PINCTRL_FUNCTION(C1TX, RPC14R, 15)),
PIC32_PINCTRL_GROUP(48, D0,
PIC32_PINCTRL_FUNCTION(INT1, INT1R, 3),
PIC32_PINCTRL_FUNCTION(T4CK, T4CKR, 3),
PIC32_PINCTRL_FUNCTION(T9CK, T9CKR, 3),
PIC32_PINCTRL_FUNCTION(IC1, IC1R, 3),
PIC32_PINCTRL_FUNCTION(IC6, IC6R, 3),
PIC32_PINCTRL_FUNCTION(U3CTS, U3CTSR, 3),
PIC32_PINCTRL_FUNCTION(U4RX, U4RXR, 3),
PIC32_PINCTRL_FUNCTION(U6RX, U6RXR, 3),
PIC32_PINCTRL_FUNCTION(SS2IN, SS2INR, 3),
PIC32_PINCTRL_FUNCTION(SDI6, SDI6R, 3),
PIC32_PINCTRL_FUNCTION(OCFA, OCFAR, 3),
PIC32_PINCTRL_FUNCTION(REFCLKI3, REFCLKI3R, 3),
PIC32_PINCTRL_FUNCTION(U1RTS, RPD0R, 1),
PIC32_PINCTRL_FUNCTION(U2TX, RPD0R, 2),
PIC32_PINCTRL_FUNCTION(U5RTS, RPD0R, 3),
PIC32_PINCTRL_FUNCTION(U6TX, RPD0R, 4),
PIC32_PINCTRL_FUNCTION(SS2OUT, RPD0R, 6),
PIC32_PINCTRL_FUNCTION(SDO4, RPD0R, 8),
PIC32_PINCTRL_FUNCTION(SDO6, RPD0R, 10),
PIC32_PINCTRL_FUNCTION(OC2, RPD0R, 11),
PIC32_PINCTRL_FUNCTION(OC1, RPD0R, 12),
PIC32_PINCTRL_FUNCTION(OC9, RPD0R, 13),
PIC32_PINCTRL_FUNCTION(C2TX, RPD0R, 15)),
PIC32_PINCTRL_GROUP(50, D2,
PIC32_PINCTRL_FUNCTION(INT3, INT3R, 0),
PIC32_PINCTRL_FUNCTION(T2CK, T2CKR, 0),
PIC32_PINCTRL_FUNCTION(T6CK, T6CKR, 0),
PIC32_PINCTRL_FUNCTION(IC3, IC3R, 0),
PIC32_PINCTRL_FUNCTION(IC7, IC7R, 0),
PIC32_PINCTRL_FUNCTION(U1RX, U1RXR, 0),
PIC32_PINCTRL_FUNCTION(U2CTS, U2CTSR, 0),
PIC32_PINCTRL_FUNCTION(U5RX, U5RXR, 0),
PIC32_PINCTRL_FUNCTION(U6CTS, U6CTSR, 0),
PIC32_PINCTRL_FUNCTION(SDI1, SDI1R, 0),
PIC32_PINCTRL_FUNCTION(SDI3, SDI3R, 0),
PIC32_PINCTRL_FUNCTION(SDI5, SDI5R, 0),
PIC32_PINCTRL_FUNCTION(SS6IN, SS6INR, 0),
PIC32_PINCTRL_FUNCTION(REFCLKI1, REFCLKI1R, 0),
PIC32_PINCTRL_FUNCTION(U3TX, RPD2R, 1),
PIC32_PINCTRL_FUNCTION(U4RTS, RPD2R, 2),
PIC32_PINCTRL_FUNCTION(SDO1, RPD2R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPD2R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPD2R, 7),
PIC32_PINCTRL_FUNCTION(SDO5, RPD2R, 9),
PIC32_PINCTRL_FUNCTION(SS6OUT, RPD2R, 10),
PIC32_PINCTRL_FUNCTION(OC3, RPD2R, 11),
PIC32_PINCTRL_FUNCTION(OC6, RPD2R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO4, RPD2R, 13),
PIC32_PINCTRL_FUNCTION(C2OUT, RPD2R, 14),
PIC32_PINCTRL_FUNCTION(C1TX, RPD2R, 15)),
PIC32_PINCTRL_GROUP(51, D3,
PIC32_PINCTRL_FUNCTION(INT4, INT4R, 0),
PIC32_PINCTRL_FUNCTION(T5CK, T5CKR, 0),
PIC32_PINCTRL_FUNCTION(T7CK, T7CKR, 0),
PIC32_PINCTRL_FUNCTION(IC4, IC4R, 0),
PIC32_PINCTRL_FUNCTION(IC8, IC8R, 0),
PIC32_PINCTRL_FUNCTION(U3RX, U3RXR, 0),
PIC32_PINCTRL_FUNCTION(U4CTS, U4CTSR, 0),
PIC32_PINCTRL_FUNCTION(SDI2, SDI2R, 0),
PIC32_PINCTRL_FUNCTION(SDI4, SDI4R, 0),
PIC32_PINCTRL_FUNCTION(C1RX, C1RXR, 0),
PIC32_PINCTRL_FUNCTION(REFCLKI4, REFCLKI4R, 0),
PIC32_PINCTRL_FUNCTION(U1TX, RPD3R, 1),
PIC32_PINCTRL_FUNCTION(U2RTS, RPD3R, 2),
PIC32_PINCTRL_FUNCTION(U5TX, RPD3R, 3),
PIC32_PINCTRL_FUNCTION(U6RTS, RPD3R, 4),
PIC32_PINCTRL_FUNCTION(SDO1, RPD3R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPD3R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPD3R, 7),
PIC32_PINCTRL_FUNCTION(SDO4, RPD3R, 8),
PIC32_PINCTRL_FUNCTION(SDO5, RPD3R, 9),
PIC32_PINCTRL_FUNCTION(OC4, RPD3R, 11),
PIC32_PINCTRL_FUNCTION(OC7, RPD3R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO1, RPD3R, 15)),
PIC32_PINCTRL_GROUP(52, D4,
PIC32_PINCTRL_FUNCTION(INT2, INT2R, 4),
PIC32_PINCTRL_FUNCTION(T3CK, T3CKR, 4),
PIC32_PINCTRL_FUNCTION(T8CK, T8CKR, 4),
PIC32_PINCTRL_FUNCTION(IC2, IC2R, 4),
PIC32_PINCTRL_FUNCTION(IC5, IC5R, 4),
PIC32_PINCTRL_FUNCTION(IC9, IC9R, 4),
PIC32_PINCTRL_FUNCTION(U1CTS, U1CTSR, 4),
PIC32_PINCTRL_FUNCTION(U2RX, U2RXR, 4),
PIC32_PINCTRL_FUNCTION(U5CTS, U5CTSR, 4),
PIC32_PINCTRL_FUNCTION(SS1IN, SS1INR, 4),
PIC32_PINCTRL_FUNCTION(SS3IN, SS3INR, 4),
PIC32_PINCTRL_FUNCTION(SS4IN, SS4INR, 4),
PIC32_PINCTRL_FUNCTION(SS5IN, SS5INR, 4),
PIC32_PINCTRL_FUNCTION(C2RX, C2RXR, 4),
PIC32_PINCTRL_FUNCTION(U3RTS, RPD4R, 1),
PIC32_PINCTRL_FUNCTION(U4TX, RPD4R, 2),
PIC32_PINCTRL_FUNCTION(U6TX, RPD4R, 4),
PIC32_PINCTRL_FUNCTION(SS1OUT, RPD4R, 5),
PIC32_PINCTRL_FUNCTION(SS3OUT, RPD4R, 7),
PIC32_PINCTRL_FUNCTION(SS4OUT, RPD4R, 8),
PIC32_PINCTRL_FUNCTION(SS5OUT, RPD4R, 9),
PIC32_PINCTRL_FUNCTION(SDO6, RPD4R, 10),
PIC32_PINCTRL_FUNCTION(OC5, RPD4R, 11),
PIC32_PINCTRL_FUNCTION(OC8, RPD4R, 12),
PIC32_PINCTRL_FUNCTION(C1OUT, RPD4R, 14),
PIC32_PINCTRL_FUNCTION(REFCLKO3, RPD4R, 15)),
PIC32_PINCTRL_GROUP(53, D5,
PIC32_PINCTRL_FUNCTION(INT1, INT1R, 6),
PIC32_PINCTRL_FUNCTION(T4CK, T4CKR, 6),
PIC32_PINCTRL_FUNCTION(T9CK, T9CKR, 6),
PIC32_PINCTRL_FUNCTION(IC1, IC1R, 6),
PIC32_PINCTRL_FUNCTION(IC6, IC6R, 6),
PIC32_PINCTRL_FUNCTION(U3CTS, U3CTSR, 6),
PIC32_PINCTRL_FUNCTION(U4RX, U4RXR, 6),
PIC32_PINCTRL_FUNCTION(U6RX, U6RXR, 6),
PIC32_PINCTRL_FUNCTION(SS2IN, SS2INR, 6),
PIC32_PINCTRL_FUNCTION(SDI6, SDI6R, 6),
PIC32_PINCTRL_FUNCTION(OCFA, OCFAR, 6),
PIC32_PINCTRL_FUNCTION(REFCLKI3, REFCLKI3R, 6),
PIC32_PINCTRL_FUNCTION(U1RTS, RPD5R, 1),
PIC32_PINCTRL_FUNCTION(U2TX, RPD5R, 2),
PIC32_PINCTRL_FUNCTION(U5RTS, RPD5R, 3),
PIC32_PINCTRL_FUNCTION(U6TX, RPD5R, 4),
PIC32_PINCTRL_FUNCTION(SS2OUT, RPD5R, 6),
PIC32_PINCTRL_FUNCTION(SDO4, RPD5R, 8),
PIC32_PINCTRL_FUNCTION(SDO6, RPD5R, 10),
PIC32_PINCTRL_FUNCTION(OC2, RPD5R, 11),
PIC32_PINCTRL_FUNCTION(OC1, RPD5R, 12),
PIC32_PINCTRL_FUNCTION(OC9, RPD5R, 13),
PIC32_PINCTRL_FUNCTION(C2TX, RPD5R, 15)),
PIC32_PINCTRL_GROUP(54, D6,
PIC32_PINCTRL_FUNCTION(INT3, INT3R, 14),
PIC32_PINCTRL_FUNCTION(T2CK, T2CKR, 14),
PIC32_PINCTRL_FUNCTION(T6CK, T6CKR, 14),
PIC32_PINCTRL_FUNCTION(IC3, IC3R, 14),
PIC32_PINCTRL_FUNCTION(IC7, IC7R, 14),
PIC32_PINCTRL_FUNCTION(U1RX, U1RXR, 14),
PIC32_PINCTRL_FUNCTION(U2CTS, U2CTSR, 14),
PIC32_PINCTRL_FUNCTION(U5RX, U5RXR, 14),
PIC32_PINCTRL_FUNCTION(U6CTS, U6CTSR, 14),
PIC32_PINCTRL_FUNCTION(SDI1, SDI1R, 14),
PIC32_PINCTRL_FUNCTION(SDI3, SDI3R, 14),
PIC32_PINCTRL_FUNCTION(SDI5, SDI5R, 14),
PIC32_PINCTRL_FUNCTION(SS6IN, SS6INR, 14),
PIC32_PINCTRL_FUNCTION(REFCLKI1, REFCLKI1R, 14),
PIC32_PINCTRL_FUNCTION(U3TX, RPD6R, 1),
PIC32_PINCTRL_FUNCTION(U4RTS, RPD6R, 2),
PIC32_PINCTRL_FUNCTION(SDO1, RPD6R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPD6R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPD6R, 7),
PIC32_PINCTRL_FUNCTION(SDO5, RPD6R, 9),
PIC32_PINCTRL_FUNCTION(SS6OUT, RPD6R, 10),
PIC32_PINCTRL_FUNCTION(OC3, RPD6R, 11),
PIC32_PINCTRL_FUNCTION(OC6, RPD6R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO4, RPD6R, 13),
PIC32_PINCTRL_FUNCTION(C2OUT, RPD6R, 14),
PIC32_PINCTRL_FUNCTION(C1TX, RPD6R, 15)),
PIC32_PINCTRL_GROUP(55, D7,
PIC32_PINCTRL_FUNCTION(INT4, INT4R, 14),
PIC32_PINCTRL_FUNCTION(T5CK, T5CKR, 14),
PIC32_PINCTRL_FUNCTION(T7CK, T7CKR, 14),
PIC32_PINCTRL_FUNCTION(IC4, IC4R, 14),
PIC32_PINCTRL_FUNCTION(IC8, IC8R, 14),
PIC32_PINCTRL_FUNCTION(U3RX, U3RXR, 14),
PIC32_PINCTRL_FUNCTION(U4CTS, U4CTSR, 14),
PIC32_PINCTRL_FUNCTION(SDI2, SDI2R, 14),
PIC32_PINCTRL_FUNCTION(SDI4, SDI4R, 14),
PIC32_PINCTRL_FUNCTION(C1RX, C1RXR, 14),
PIC32_PINCTRL_FUNCTION(REFCLKI4, REFCLKI4R, 14),
PIC32_PINCTRL_FUNCTION(U1TX, RPD7R, 1),
PIC32_PINCTRL_FUNCTION(U2RTS, RPD7R, 2),
PIC32_PINCTRL_FUNCTION(U5TX, RPD7R, 3),
PIC32_PINCTRL_FUNCTION(U6RTS, RPD7R, 4),
PIC32_PINCTRL_FUNCTION(SDO1, RPD7R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPD7R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPD7R, 7),
PIC32_PINCTRL_FUNCTION(SDO4, RPD7R, 8),
PIC32_PINCTRL_FUNCTION(SDO5, RPD7R, 9),
PIC32_PINCTRL_FUNCTION(OC4, RPD7R, 11),
PIC32_PINCTRL_FUNCTION(OC7, RPD7R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO1, RPD7R, 15)),
PIC32_PINCTRL_GROUP(57, D9,
PIC32_PINCTRL_FUNCTION(INT2, INT2R, 0),
PIC32_PINCTRL_FUNCTION(T3CK, T3CKR, 0),
PIC32_PINCTRL_FUNCTION(T8CK, T8CKR, 0),
PIC32_PINCTRL_FUNCTION(IC2, IC2R, 0),
PIC32_PINCTRL_FUNCTION(IC5, IC5R, 0),
PIC32_PINCTRL_FUNCTION(IC9, IC9R, 0),
PIC32_PINCTRL_FUNCTION(U1CTS, U1CTSR, 0),
PIC32_PINCTRL_FUNCTION(U2RX, U2RXR, 0),
PIC32_PINCTRL_FUNCTION(U5CTS, U5CTSR, 0),
PIC32_PINCTRL_FUNCTION(SS1IN, SS1INR, 0),
PIC32_PINCTRL_FUNCTION(SS3IN, SS3INR, 0),
PIC32_PINCTRL_FUNCTION(SS4IN, SS4INR, 0),
PIC32_PINCTRL_FUNCTION(SS5IN, SS5INR, 0),
PIC32_PINCTRL_FUNCTION(C2RX, C2RXR, 0),
PIC32_PINCTRL_FUNCTION(U3RTS, RPD9R, 1),
PIC32_PINCTRL_FUNCTION(U4TX, RPD9R, 2),
PIC32_PINCTRL_FUNCTION(U6TX, RPD9R, 4),
PIC32_PINCTRL_FUNCTION(SS1OUT, RPD9R, 5),
PIC32_PINCTRL_FUNCTION(SS3OUT, RPD9R, 7),
PIC32_PINCTRL_FUNCTION(SS4OUT, RPD9R, 8),
PIC32_PINCTRL_FUNCTION(SS5OUT, RPD9R, 9),
PIC32_PINCTRL_FUNCTION(SDO6, RPD9R, 10),
PIC32_PINCTRL_FUNCTION(OC5, RPD9R, 11),
PIC32_PINCTRL_FUNCTION(OC8, RPD9R, 12),
PIC32_PINCTRL_FUNCTION(C1OUT, RPD9R, 14),
PIC32_PINCTRL_FUNCTION(REFCLKO3, RPD9R, 15)),
PIC32_PINCTRL_GROUP(58, D10,
PIC32_PINCTRL_FUNCTION(U3TX, RPD10R, 1),
PIC32_PINCTRL_FUNCTION(U4RTS, RPD10R, 2),
PIC32_PINCTRL_FUNCTION(SDO1, RPD10R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPD10R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPD10R, 7),
PIC32_PINCTRL_FUNCTION(SDO5, RPD10R, 9),
PIC32_PINCTRL_FUNCTION(SS6OUT, RPD10R, 10),
PIC32_PINCTRL_FUNCTION(OC3, RPD10R, 11),
PIC32_PINCTRL_FUNCTION(OC6, RPD10R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO4, RPD10R, 13),
PIC32_PINCTRL_FUNCTION(C2OUT, RPD10R, 14),
PIC32_PINCTRL_FUNCTION(C1TX, RPD10R, 15)),
PIC32_PINCTRL_GROUP(59, D11,
PIC32_PINCTRL_FUNCTION(INT4, INT4R, 3),
PIC32_PINCTRL_FUNCTION(T5CK, T5CKR, 3),
PIC32_PINCTRL_FUNCTION(T7CK, T7CKR, 3),
PIC32_PINCTRL_FUNCTION(IC4, IC4R, 3),
PIC32_PINCTRL_FUNCTION(IC8, IC8R, 3),
PIC32_PINCTRL_FUNCTION(U3RX, U3RXR, 3),
PIC32_PINCTRL_FUNCTION(U4CTS, U4CTSR, 3),
PIC32_PINCTRL_FUNCTION(SDI2, SDI2R, 3),
PIC32_PINCTRL_FUNCTION(SDI4, SDI4R, 3),
PIC32_PINCTRL_FUNCTION(C1RX, C1RXR, 3),
PIC32_PINCTRL_FUNCTION(REFCLKI4, REFCLKI4R, 3),
PIC32_PINCTRL_FUNCTION(U1TX, RPD11R, 1),
PIC32_PINCTRL_FUNCTION(U2RTS, RPD11R, 2),
PIC32_PINCTRL_FUNCTION(U5TX, RPD11R, 3),
PIC32_PINCTRL_FUNCTION(U6RTS, RPD11R, 4),
PIC32_PINCTRL_FUNCTION(SDO1, RPD11R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPD11R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPD11R, 7),
PIC32_PINCTRL_FUNCTION(SDO4, RPD11R, 8),
PIC32_PINCTRL_FUNCTION(SDO5, RPD11R, 9),
PIC32_PINCTRL_FUNCTION(OC4, RPD11R, 11),
PIC32_PINCTRL_FUNCTION(OC7, RPD11R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO1, RPD11R, 15)),
PIC32_PINCTRL_GROUP(60, D12,
PIC32_PINCTRL_FUNCTION(INT2, INT2R, 10),
PIC32_PINCTRL_FUNCTION(T3CK, T3CKR, 10),
PIC32_PINCTRL_FUNCTION(T8CK, T8CKR, 10),
PIC32_PINCTRL_FUNCTION(IC2, IC2R, 10),
PIC32_PINCTRL_FUNCTION(IC5, IC5R, 10),
PIC32_PINCTRL_FUNCTION(IC9, IC9R, 10),
PIC32_PINCTRL_FUNCTION(U1CTS, U1CTSR, 10),
PIC32_PINCTRL_FUNCTION(U2RX, U2RXR, 10),
PIC32_PINCTRL_FUNCTION(U5CTS, U5CTSR, 10),
PIC32_PINCTRL_FUNCTION(SS1IN, SS1INR, 10),
PIC32_PINCTRL_FUNCTION(SS3IN, SS3INR, 10),
PIC32_PINCTRL_FUNCTION(SS4IN, SS4INR, 10),
PIC32_PINCTRL_FUNCTION(SS5IN, SS5INR, 10),
PIC32_PINCTRL_FUNCTION(C2RX, C2RXR, 10),
PIC32_PINCTRL_FUNCTION(U3RTS, RPD12R, 1),
PIC32_PINCTRL_FUNCTION(U4TX, RPD12R, 2),
PIC32_PINCTRL_FUNCTION(U6TX, RPD12R, 4),
PIC32_PINCTRL_FUNCTION(SS1OUT, RPD12R, 5),
PIC32_PINCTRL_FUNCTION(SS3OUT, RPD12R, 7),
PIC32_PINCTRL_FUNCTION(SS4OUT, RPD12R, 8),
PIC32_PINCTRL_FUNCTION(SS5OUT, RPD12R, 9),
PIC32_PINCTRL_FUNCTION(SDO6, RPD12R, 10),
PIC32_PINCTRL_FUNCTION(OC5, RPD12R, 11),
PIC32_PINCTRL_FUNCTION(OC8, RPD12R, 12),
PIC32_PINCTRL_FUNCTION(C1OUT, RPD12R, 14),
PIC32_PINCTRL_FUNCTION(REFCLKO3, RPD12R, 15)),
PIC32_PINCTRL_GROUP(62, D14,
PIC32_PINCTRL_FUNCTION(INT3, INT3R, 11),
PIC32_PINCTRL_FUNCTION(T2CK, T2CKR, 11),
PIC32_PINCTRL_FUNCTION(T6CK, T6CKR, 11),
PIC32_PINCTRL_FUNCTION(IC3, IC3R, 11),
PIC32_PINCTRL_FUNCTION(IC7, IC7R, 11),
PIC32_PINCTRL_FUNCTION(U1RX, U1RXR, 11),
PIC32_PINCTRL_FUNCTION(U2CTS, U2CTSR, 11),
PIC32_PINCTRL_FUNCTION(U5RX, U5RXR, 11),
PIC32_PINCTRL_FUNCTION(U6CTS, U6CTSR, 11),
PIC32_PINCTRL_FUNCTION(SDI1, SDI1R, 11),
PIC32_PINCTRL_FUNCTION(SDI3, SDI3R, 11),
PIC32_PINCTRL_FUNCTION(SDI5, SDI5R, 11),
PIC32_PINCTRL_FUNCTION(SS6IN, SS6INR, 11),
PIC32_PINCTRL_FUNCTION(REFCLKI1, REFCLKI1R, 11),
PIC32_PINCTRL_FUNCTION(U3TX, RPD14R, 1),
PIC32_PINCTRL_FUNCTION(U4RTS, RPD14R, 2),
PIC32_PINCTRL_FUNCTION(SDO1, RPD14R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPD14R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPD14R, 7),
PIC32_PINCTRL_FUNCTION(SDO5, RPD14R, 9),
PIC32_PINCTRL_FUNCTION(SS6OUT, RPD14R, 10),
PIC32_PINCTRL_FUNCTION(OC3, RPD14R, 11),
PIC32_PINCTRL_FUNCTION(OC6, RPD14R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO4, RPD14R, 13),
PIC32_PINCTRL_FUNCTION(C2OUT, RPD14R, 14),
PIC32_PINCTRL_FUNCTION(C1TX, RPD14R, 15)),
PIC32_PINCTRL_GROUP(63, D15,
PIC32_PINCTRL_FUNCTION(U1TX, RPD15R, 1),
PIC32_PINCTRL_FUNCTION(U2RTS, RPD15R, 2),
PIC32_PINCTRL_FUNCTION(U5TX, RPD15R, 3),
PIC32_PINCTRL_FUNCTION(U6RTS, RPD15R, 4),
PIC32_PINCTRL_FUNCTION(SDO1, RPD15R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPD15R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPD15R, 7),
PIC32_PINCTRL_FUNCTION(SDO4, RPD15R, 8),
PIC32_PINCTRL_FUNCTION(SDO5, RPD15R, 9),
PIC32_PINCTRL_FUNCTION(OC4, RPD15R, 11),
PIC32_PINCTRL_FUNCTION(OC7, RPD15R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO1, RPD15R, 15)),
PIC32_PINCTRL_GROUP(67, E3,
PIC32_PINCTRL_FUNCTION(INT2, INT2R, 6),
PIC32_PINCTRL_FUNCTION(T3CK, T3CKR, 6),
PIC32_PINCTRL_FUNCTION(T8CK, T8CKR, 6),
PIC32_PINCTRL_FUNCTION(IC2, IC2R, 6),
PIC32_PINCTRL_FUNCTION(IC5, IC5R, 6),
PIC32_PINCTRL_FUNCTION(IC9, IC9R, 6),
PIC32_PINCTRL_FUNCTION(U1CTS, U1CTSR, 6),
PIC32_PINCTRL_FUNCTION(U2RX, U2RXR, 6),
PIC32_PINCTRL_FUNCTION(U5CTS, U5CTSR, 6),
PIC32_PINCTRL_FUNCTION(SS1IN, SS1INR, 6),
PIC32_PINCTRL_FUNCTION(SS3IN, SS3INR, 6),
PIC32_PINCTRL_FUNCTION(SS4IN, SS4INR, 6),
PIC32_PINCTRL_FUNCTION(SS5IN, SS5INR, 6),
PIC32_PINCTRL_FUNCTION(C2RX, C2RXR, 6),
PIC32_PINCTRL_FUNCTION(U3RTS, RPE3R, 1),
PIC32_PINCTRL_FUNCTION(U4TX, RPE3R, 2),
PIC32_PINCTRL_FUNCTION(U6TX, RPE3R, 4),
PIC32_PINCTRL_FUNCTION(SS1OUT, RPE3R, 5),
PIC32_PINCTRL_FUNCTION(SS3OUT, RPE3R, 7),
PIC32_PINCTRL_FUNCTION(SS4OUT, RPE3R, 8),
PIC32_PINCTRL_FUNCTION(SS5OUT, RPE3R, 9),
PIC32_PINCTRL_FUNCTION(SDO6, RPE3R, 10),
PIC32_PINCTRL_FUNCTION(OC5, RPE3R, 11),
PIC32_PINCTRL_FUNCTION(OC8, RPE3R, 12),
PIC32_PINCTRL_FUNCTION(C1OUT, RPE3R, 14),
PIC32_PINCTRL_FUNCTION(REFCLKO3, RPE3R, 15)),
PIC32_PINCTRL_GROUP(69, E5,
PIC32_PINCTRL_FUNCTION(INT4, INT4R, 6),
PIC32_PINCTRL_FUNCTION(T5CK, T5CKR, 6),
PIC32_PINCTRL_FUNCTION(T7CK, T7CKR, 6),
PIC32_PINCTRL_FUNCTION(IC4, IC4R, 6),
PIC32_PINCTRL_FUNCTION(IC8, IC8R, 6),
PIC32_PINCTRL_FUNCTION(U3RX, U3RXR, 6),
PIC32_PINCTRL_FUNCTION(U4CTS, U4CTSR, 6),
PIC32_PINCTRL_FUNCTION(SDI2, SDI2R, 6),
PIC32_PINCTRL_FUNCTION(SDI4, SDI4R, 6),
PIC32_PINCTRL_FUNCTION(C1RX, C1RXR, 6),
PIC32_PINCTRL_FUNCTION(REFCLKI4, REFCLKI4R, 6),
PIC32_PINCTRL_FUNCTION(U1TX, RPE5R, 1),
PIC32_PINCTRL_FUNCTION(U2RTS, RPE5R, 2),
PIC32_PINCTRL_FUNCTION(U5TX, RPE5R, 3),
PIC32_PINCTRL_FUNCTION(U6RTS, RPE5R, 4),
PIC32_PINCTRL_FUNCTION(SDO1, RPE5R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPE5R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPE5R, 7),
PIC32_PINCTRL_FUNCTION(SDO4, RPE5R, 8),
PIC32_PINCTRL_FUNCTION(SDO5, RPE5R, 9),
PIC32_PINCTRL_FUNCTION(OC4, RPE5R, 11),
PIC32_PINCTRL_FUNCTION(OC7, RPE5R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO1, RPE5R, 15)),
PIC32_PINCTRL_GROUP(72, E8,
PIC32_PINCTRL_FUNCTION(INT1, INT1R, 13),
PIC32_PINCTRL_FUNCTION(T4CK, T4CKR, 13),
PIC32_PINCTRL_FUNCTION(T9CK, T9CKR, 13),
PIC32_PINCTRL_FUNCTION(IC1, IC1R, 13),
PIC32_PINCTRL_FUNCTION(IC6, IC6R, 13),
PIC32_PINCTRL_FUNCTION(U3CTS, U3CTSR, 13),
PIC32_PINCTRL_FUNCTION(U4RX, U4RXR, 13),
PIC32_PINCTRL_FUNCTION(U6RX, U6RXR, 13),
PIC32_PINCTRL_FUNCTION(SS2IN, SS2INR, 13),
PIC32_PINCTRL_FUNCTION(SDI6, SDI6R, 13),
PIC32_PINCTRL_FUNCTION(OCFA, OCFAR, 13),
PIC32_PINCTRL_FUNCTION(REFCLKI3, REFCLKI3R, 13),
PIC32_PINCTRL_FUNCTION(U1RTS, RPE8R, 1),
PIC32_PINCTRL_FUNCTION(U2TX, RPE8R, 2),
PIC32_PINCTRL_FUNCTION(U5RTS, RPE8R, 3),
PIC32_PINCTRL_FUNCTION(U6TX, RPE8R, 4),
PIC32_PINCTRL_FUNCTION(SS2OUT, RPE8R, 6),
PIC32_PINCTRL_FUNCTION(SDO4, RPE8R, 8),
PIC32_PINCTRL_FUNCTION(SDO6, RPE8R, 10),
PIC32_PINCTRL_FUNCTION(OC2, RPE8R, 11),
PIC32_PINCTRL_FUNCTION(OC1, RPE8R, 12),
PIC32_PINCTRL_FUNCTION(OC9, RPE8R, 13),
PIC32_PINCTRL_FUNCTION(C2TX, RPE8R, 15)),
PIC32_PINCTRL_GROUP(73, E9,
PIC32_PINCTRL_FUNCTION(INT2, INT2R, 13),
PIC32_PINCTRL_FUNCTION(T3CK, T3CKR, 13),
PIC32_PINCTRL_FUNCTION(T8CK, T8CKR, 13),
PIC32_PINCTRL_FUNCTION(IC2, IC2R, 13),
PIC32_PINCTRL_FUNCTION(IC5, IC5R, 13),
PIC32_PINCTRL_FUNCTION(IC9, IC9R, 13),
PIC32_PINCTRL_FUNCTION(U1CTS, U1CTSR, 13),
PIC32_PINCTRL_FUNCTION(U2RX, U2RXR, 13),
PIC32_PINCTRL_FUNCTION(U5CTS, U5CTSR, 13),
PIC32_PINCTRL_FUNCTION(SS1IN, SS1INR, 13),
PIC32_PINCTRL_FUNCTION(SS3IN, SS3INR, 13),
PIC32_PINCTRL_FUNCTION(SS4IN, SS4INR, 13),
PIC32_PINCTRL_FUNCTION(SS5IN, SS5INR, 13),
PIC32_PINCTRL_FUNCTION(C2RX, C2RXR, 13),
PIC32_PINCTRL_FUNCTION(U3RTS, RPE9R, 1),
PIC32_PINCTRL_FUNCTION(U4TX, RPE9R, 2),
PIC32_PINCTRL_FUNCTION(U6TX, RPE9R, 4),
PIC32_PINCTRL_FUNCTION(SS1OUT, RPE9R, 5),
PIC32_PINCTRL_FUNCTION(SS3OUT, RPE9R, 7),
PIC32_PINCTRL_FUNCTION(SS4OUT, RPE9R, 8),
PIC32_PINCTRL_FUNCTION(SS5OUT, RPE9R, 9),
PIC32_PINCTRL_FUNCTION(SDO6, RPE9R, 10),
PIC32_PINCTRL_FUNCTION(OC5, RPE9R, 11),
PIC32_PINCTRL_FUNCTION(OC8, RPE9R, 12),
PIC32_PINCTRL_FUNCTION(C1OUT, RPE9R, 14),
PIC32_PINCTRL_FUNCTION(REFCLKO3, RPE9R, 15)),
PIC32_PINCTRL_GROUP(80, F0,
PIC32_PINCTRL_FUNCTION(INT4, INT4R, 4),
PIC32_PINCTRL_FUNCTION(T5CK, T5CKR, 4),
PIC32_PINCTRL_FUNCTION(T7CK, T7CKR, 4),
PIC32_PINCTRL_FUNCTION(IC4, IC4R, 4),
PIC32_PINCTRL_FUNCTION(IC8, IC8R, 4),
PIC32_PINCTRL_FUNCTION(U3RX, U3RXR, 4),
PIC32_PINCTRL_FUNCTION(U4CTS, U4CTSR, 4),
PIC32_PINCTRL_FUNCTION(SDI2, SDI2R, 4),
PIC32_PINCTRL_FUNCTION(SDI4, SDI4R, 4),
PIC32_PINCTRL_FUNCTION(C1RX, C1RXR, 4),
PIC32_PINCTRL_FUNCTION(REFCLKI4, REFCLKI4R, 4),
PIC32_PINCTRL_FUNCTION(U1TX, RPF0R, 1),
PIC32_PINCTRL_FUNCTION(U2RTS, RPF0R, 2),
PIC32_PINCTRL_FUNCTION(U5TX, RPF0R, 3),
PIC32_PINCTRL_FUNCTION(U6RTS, RPF0R, 4),
PIC32_PINCTRL_FUNCTION(SDO1, RPF0R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPF0R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPF0R, 7),
PIC32_PINCTRL_FUNCTION(SDO4, RPF0R, 8),
PIC32_PINCTRL_FUNCTION(SDO5, RPF0R, 9),
PIC32_PINCTRL_FUNCTION(OC4, RPF0R, 11),
PIC32_PINCTRL_FUNCTION(OC7, RPF0R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO1, RPF0R, 15)),
PIC32_PINCTRL_GROUP(81, F1,
PIC32_PINCTRL_FUNCTION(INT3, INT3R, 4),
PIC32_PINCTRL_FUNCTION(T2CK, T2CKR, 4),
PIC32_PINCTRL_FUNCTION(T6CK, T6CKR, 4),
PIC32_PINCTRL_FUNCTION(IC3, IC3R, 4),
PIC32_PINCTRL_FUNCTION(IC7, IC7R, 4),
PIC32_PINCTRL_FUNCTION(U1RX, U1RXR, 4),
PIC32_PINCTRL_FUNCTION(U2CTS, U2CTSR, 4),
PIC32_PINCTRL_FUNCTION(U5RX, U5RXR, 4),
PIC32_PINCTRL_FUNCTION(U6CTS, U6CTSR, 4),
PIC32_PINCTRL_FUNCTION(SDI1, SDI1R, 4),
PIC32_PINCTRL_FUNCTION(SDI3, SDI3R, 4),
PIC32_PINCTRL_FUNCTION(SDI5, SDI5R, 4),
PIC32_PINCTRL_FUNCTION(SS6IN, SS6INR, 4),
PIC32_PINCTRL_FUNCTION(REFCLKI1, REFCLKI1R, 4),
PIC32_PINCTRL_FUNCTION(U3TX, RPF1R, 1),
PIC32_PINCTRL_FUNCTION(U4RTS, RPF1R, 2),
PIC32_PINCTRL_FUNCTION(SDO1, RPF1R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPF1R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPF1R, 7),
PIC32_PINCTRL_FUNCTION(SDO5, RPF1R, 9),
PIC32_PINCTRL_FUNCTION(SS6OUT, RPF1R, 10),
PIC32_PINCTRL_FUNCTION(OC3, RPF1R, 11),
PIC32_PINCTRL_FUNCTION(OC6, RPF1R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO4, RPF1R, 13),
PIC32_PINCTRL_FUNCTION(C2OUT, RPF1R, 14),
PIC32_PINCTRL_FUNCTION(C1TX, RPF1R, 15)),
PIC32_PINCTRL_GROUP(82, F2,
PIC32_PINCTRL_FUNCTION(INT1, INT1R, 11),
PIC32_PINCTRL_FUNCTION(T4CK, T4CKR, 11),
PIC32_PINCTRL_FUNCTION(T9CK, T9CKR, 11),
PIC32_PINCTRL_FUNCTION(IC1, IC1R, 11),
PIC32_PINCTRL_FUNCTION(IC6, IC6R, 11),
PIC32_PINCTRL_FUNCTION(U3CTS, U3CTSR, 11),
PIC32_PINCTRL_FUNCTION(U4RX, U4RXR, 11),
PIC32_PINCTRL_FUNCTION(U6RX, U6RXR, 11),
PIC32_PINCTRL_FUNCTION(SS2IN, SS2INR, 11),
PIC32_PINCTRL_FUNCTION(SDI6, SDI6R, 11),
PIC32_PINCTRL_FUNCTION(OCFA, OCFAR, 11),
PIC32_PINCTRL_FUNCTION(REFCLKI3, REFCLKI3R, 11),
PIC32_PINCTRL_FUNCTION(U1RTS, RPF2R, 1),
PIC32_PINCTRL_FUNCTION(U2TX, RPF2R, 2),
PIC32_PINCTRL_FUNCTION(U5RTS, RPF2R, 3),
PIC32_PINCTRL_FUNCTION(U6TX, RPF2R, 4),
PIC32_PINCTRL_FUNCTION(SS2OUT, RPF2R, 6),
PIC32_PINCTRL_FUNCTION(SDO4, RPF2R, 8),
PIC32_PINCTRL_FUNCTION(SDO6, RPF2R, 10),
PIC32_PINCTRL_FUNCTION(OC2, RPF2R, 11),
PIC32_PINCTRL_FUNCTION(OC1, RPF2R, 12),
PIC32_PINCTRL_FUNCTION(OC9, RPF2R, 13),
PIC32_PINCTRL_FUNCTION(C2TX, RPF2R, 15)),
PIC32_PINCTRL_GROUP(83, F3,
PIC32_PINCTRL_FUNCTION(INT1, INT1R, 8),
PIC32_PINCTRL_FUNCTION(T4CK, T4CKR, 8),
PIC32_PINCTRL_FUNCTION(T9CK, T9CKR, 8),
PIC32_PINCTRL_FUNCTION(IC1, IC1R, 8),
PIC32_PINCTRL_FUNCTION(IC6, IC6R, 8),
PIC32_PINCTRL_FUNCTION(U3CTS, U3CTSR, 8),
PIC32_PINCTRL_FUNCTION(U4RX, U4RXR, 8),
PIC32_PINCTRL_FUNCTION(U6RX, U6RXR, 8),
PIC32_PINCTRL_FUNCTION(SS2IN, SS2INR, 8),
PIC32_PINCTRL_FUNCTION(SDI6, SDI6R, 8),
PIC32_PINCTRL_FUNCTION(OCFA, OCFAR, 8),
PIC32_PINCTRL_FUNCTION(REFCLKI3, REFCLKI3R, 8),
PIC32_PINCTRL_FUNCTION(U1RTS, RPF3R, 1),
PIC32_PINCTRL_FUNCTION(U2TX, RPF3R, 2),
PIC32_PINCTRL_FUNCTION(U5RTS, RPF3R, 3),
PIC32_PINCTRL_FUNCTION(U6TX, RPF3R, 4),
PIC32_PINCTRL_FUNCTION(SS2OUT, RPF3R, 6),
PIC32_PINCTRL_FUNCTION(SDO4, RPF3R, 8),
PIC32_PINCTRL_FUNCTION(SDO6, RPF3R, 10),
PIC32_PINCTRL_FUNCTION(OC2, RPF3R, 11),
PIC32_PINCTRL_FUNCTION(OC1, RPF3R, 12),
PIC32_PINCTRL_FUNCTION(OC9, RPF3R, 13),
PIC32_PINCTRL_FUNCTION(C2TX, RPF3R, 15)),
PIC32_PINCTRL_GROUP(84, F4,
PIC32_PINCTRL_FUNCTION(INT3, INT3R, 2),
PIC32_PINCTRL_FUNCTION(T2CK, T2CKR, 2),
PIC32_PINCTRL_FUNCTION(T6CK, T6CKR, 2),
PIC32_PINCTRL_FUNCTION(IC3, IC3R, 2),
PIC32_PINCTRL_FUNCTION(IC7, IC7R, 2),
PIC32_PINCTRL_FUNCTION(U1RX, U1RXR, 2),
PIC32_PINCTRL_FUNCTION(U2CTS, U2CTSR, 2),
PIC32_PINCTRL_FUNCTION(U5RX, U5RXR, 2),
PIC32_PINCTRL_FUNCTION(U6CTS, U6CTSR, 2),
PIC32_PINCTRL_FUNCTION(SDI1, SDI1R, 2),
PIC32_PINCTRL_FUNCTION(SDI3, SDI3R, 2),
PIC32_PINCTRL_FUNCTION(SDI5, SDI5R, 2),
PIC32_PINCTRL_FUNCTION(SS6IN, SS6INR, 2),
PIC32_PINCTRL_FUNCTION(REFCLKI1, REFCLKI1R, 2),
PIC32_PINCTRL_FUNCTION(U3TX, RPF4R, 1),
PIC32_PINCTRL_FUNCTION(U4RTS, RPF4R, 2),
PIC32_PINCTRL_FUNCTION(SDO1, RPF4R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPF4R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPF4R, 7),
PIC32_PINCTRL_FUNCTION(SDO5, RPF4R, 9),
PIC32_PINCTRL_FUNCTION(SS6OUT, RPF4R, 10),
PIC32_PINCTRL_FUNCTION(OC3, RPF4R, 11),
PIC32_PINCTRL_FUNCTION(OC6, RPF4R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO4, RPF4R, 13),
PIC32_PINCTRL_FUNCTION(C2OUT, RPF4R, 14),
PIC32_PINCTRL_FUNCTION(C1TX, RPF4R, 15)),
PIC32_PINCTRL_GROUP(85, F5,
PIC32_PINCTRL_FUNCTION(INT4, INT4R, 2),
PIC32_PINCTRL_FUNCTION(T5CK, T5CKR, 2),
PIC32_PINCTRL_FUNCTION(T7CK, T7CKR, 2),
PIC32_PINCTRL_FUNCTION(IC4, IC4R, 2),
PIC32_PINCTRL_FUNCTION(IC8, IC8R, 2),
PIC32_PINCTRL_FUNCTION(U3RX, U3RXR, 2),
PIC32_PINCTRL_FUNCTION(U4CTS, U4CTSR, 2),
PIC32_PINCTRL_FUNCTION(SDI2, SDI2R, 2),
PIC32_PINCTRL_FUNCTION(SDI4, SDI4R, 2),
PIC32_PINCTRL_FUNCTION(C1RX, C1RXR, 2),
PIC32_PINCTRL_FUNCTION(REFCLKI4, REFCLKI4R, 2),
PIC32_PINCTRL_FUNCTION(U1TX, RPF5R, 1),
PIC32_PINCTRL_FUNCTION(U2RTS, RPF5R, 2),
PIC32_PINCTRL_FUNCTION(U5TX, RPF5R, 3),
PIC32_PINCTRL_FUNCTION(U6RTS, RPF5R, 4),
PIC32_PINCTRL_FUNCTION(SDO1, RPF5R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPF5R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPF5R, 7),
PIC32_PINCTRL_FUNCTION(SDO4, RPF5R, 8),
PIC32_PINCTRL_FUNCTION(SDO5, RPF5R, 9),
PIC32_PINCTRL_FUNCTION(OC4, RPF5R, 11),
PIC32_PINCTRL_FUNCTION(OC7, RPF5R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO1, RPF5R, 15)),
PIC32_PINCTRL_GROUP(88, F8,
PIC32_PINCTRL_FUNCTION(INT2, INT2R, 11),
PIC32_PINCTRL_FUNCTION(T3CK, T3CKR, 11),
PIC32_PINCTRL_FUNCTION(T8CK, T8CKR, 11),
PIC32_PINCTRL_FUNCTION(IC2, IC2R, 11),
PIC32_PINCTRL_FUNCTION(IC5, IC5R, 11),
PIC32_PINCTRL_FUNCTION(IC9, IC9R, 11),
PIC32_PINCTRL_FUNCTION(U1CTS, U1CTSR, 11),
PIC32_PINCTRL_FUNCTION(U2RX, U2RXR, 11),
PIC32_PINCTRL_FUNCTION(U5CTS, U5CTSR, 11),
PIC32_PINCTRL_FUNCTION(SS1IN, SS1INR, 11),
PIC32_PINCTRL_FUNCTION(SS3IN, SS3INR, 11),
PIC32_PINCTRL_FUNCTION(SS4IN, SS4INR, 11),
PIC32_PINCTRL_FUNCTION(SS5IN, SS5INR, 11),
PIC32_PINCTRL_FUNCTION(C2RX, C2RXR, 11),
PIC32_PINCTRL_FUNCTION(U3RTS, RPF8R, 1),
PIC32_PINCTRL_FUNCTION(U4TX, RPF8R, 2),
PIC32_PINCTRL_FUNCTION(U6TX, RPF8R, 4),
PIC32_PINCTRL_FUNCTION(SS1OUT, RPF8R, 5),
PIC32_PINCTRL_FUNCTION(SS3OUT, RPF8R, 7),
PIC32_PINCTRL_FUNCTION(SS4OUT, RPF8R, 8),
PIC32_PINCTRL_FUNCTION(SS5OUT, RPF8R, 9),
PIC32_PINCTRL_FUNCTION(SDO6, RPF8R, 10),
PIC32_PINCTRL_FUNCTION(OC5, RPF8R, 11),
PIC32_PINCTRL_FUNCTION(OC8, RPF8R, 12),
PIC32_PINCTRL_FUNCTION(C1OUT, RPF8R, 14),
PIC32_PINCTRL_FUNCTION(REFCLKO3, RPF8R, 15)),
PIC32_PINCTRL_GROUP(92, F12,
PIC32_PINCTRL_FUNCTION(INT2, INT2R, 9),
PIC32_PINCTRL_FUNCTION(T3CK, T3CKR, 9),
PIC32_PINCTRL_FUNCTION(T8CK, T8CKR, 9),
PIC32_PINCTRL_FUNCTION(IC2, IC2R, 9),
PIC32_PINCTRL_FUNCTION(IC5, IC5R, 9),
PIC32_PINCTRL_FUNCTION(IC9, IC9R, 9),
PIC32_PINCTRL_FUNCTION(U1CTS, U1CTSR, 9),
PIC32_PINCTRL_FUNCTION(U2RX, U2RXR, 9),
PIC32_PINCTRL_FUNCTION(U5CTS, U5CTSR, 9),
PIC32_PINCTRL_FUNCTION(SS1IN, SS1INR, 9),
PIC32_PINCTRL_FUNCTION(SS3IN, SS3INR, 9),
PIC32_PINCTRL_FUNCTION(SS4IN, SS4INR, 9),
PIC32_PINCTRL_FUNCTION(SS5IN, SS5INR, 9),
PIC32_PINCTRL_FUNCTION(C2RX, C2RXR, 9),
PIC32_PINCTRL_FUNCTION(U3RTS, RPF12R, 1),
PIC32_PINCTRL_FUNCTION(U4TX, RPF12R, 2),
PIC32_PINCTRL_FUNCTION(U6TX, RPF12R, 4),
PIC32_PINCTRL_FUNCTION(SS1OUT, RPF12R, 5),
PIC32_PINCTRL_FUNCTION(SS3OUT, RPF12R, 7),
PIC32_PINCTRL_FUNCTION(SS4OUT, RPF12R, 8),
PIC32_PINCTRL_FUNCTION(SS5OUT, RPF12R, 9),
PIC32_PINCTRL_FUNCTION(SDO6, RPF12R, 10),
PIC32_PINCTRL_FUNCTION(OC5, RPF12R, 11),
PIC32_PINCTRL_FUNCTION(OC8, RPF12R, 12),
PIC32_PINCTRL_FUNCTION(C1OUT, RPF12R, 14),
PIC32_PINCTRL_FUNCTION(REFCLKO3, RPF12R, 15)),
PIC32_PINCTRL_GROUP(93, F13,
PIC32_PINCTRL_FUNCTION(INT1, INT1R, 9),
PIC32_PINCTRL_FUNCTION(T4CK, T4CKR, 9),
PIC32_PINCTRL_FUNCTION(T9CK, T9CKR, 9),
PIC32_PINCTRL_FUNCTION(IC1, IC1R, 9),
PIC32_PINCTRL_FUNCTION(IC6, IC6R, 9),
PIC32_PINCTRL_FUNCTION(U3CTS, U3CTSR, 9),
PIC32_PINCTRL_FUNCTION(U4RX, U4RXR, 9),
PIC32_PINCTRL_FUNCTION(U6RX, U6RXR, 9),
PIC32_PINCTRL_FUNCTION(SS2IN, SS2INR, 9),
PIC32_PINCTRL_FUNCTION(SDI6, SDI6R, 9),
PIC32_PINCTRL_FUNCTION(OCFA, OCFAR, 9),
PIC32_PINCTRL_FUNCTION(REFCLKI3, REFCLKI3R, 9),
PIC32_PINCTRL_FUNCTION(U1RTS, RPF13R, 1),
PIC32_PINCTRL_FUNCTION(U2TX, RPF13R, 2),
PIC32_PINCTRL_FUNCTION(U5RTS, RPF13R, 3),
PIC32_PINCTRL_FUNCTION(U6TX, RPF13R, 4),
PIC32_PINCTRL_FUNCTION(SS2OUT, RPF13R, 6),
PIC32_PINCTRL_FUNCTION(SDO4, RPF13R, 8),
PIC32_PINCTRL_FUNCTION(SDO6, RPF13R, 10),
PIC32_PINCTRL_FUNCTION(OC2, RPF13R, 11),
PIC32_PINCTRL_FUNCTION(OC1, RPF13R, 12),
PIC32_PINCTRL_FUNCTION(OC9, RPF13R, 13),
PIC32_PINCTRL_FUNCTION(C2TX, RPF13R, 15)),
PIC32_PINCTRL_GROUP(96, G0,
PIC32_PINCTRL_FUNCTION(INT4, INT4R, 12),
PIC32_PINCTRL_FUNCTION(T5CK, T5CKR, 12),
PIC32_PINCTRL_FUNCTION(T7CK, T7CKR, 12),
PIC32_PINCTRL_FUNCTION(IC4, IC4R, 12),
PIC32_PINCTRL_FUNCTION(IC8, IC8R, 12),
PIC32_PINCTRL_FUNCTION(U3RX, U3RXR, 12),
PIC32_PINCTRL_FUNCTION(U4CTS, U4CTSR, 12),
PIC32_PINCTRL_FUNCTION(SDI2, SDI2R, 12),
PIC32_PINCTRL_FUNCTION(SDI4, SDI4R, 12),
PIC32_PINCTRL_FUNCTION(C1RX, C1RXR, 12),
PIC32_PINCTRL_FUNCTION(REFCLKI4, REFCLKI4R, 12),
PIC32_PINCTRL_FUNCTION(U1TX, RPG0R, 1),
PIC32_PINCTRL_FUNCTION(U2RTS, RPG0R, 2),
PIC32_PINCTRL_FUNCTION(U5TX, RPG0R, 3),
PIC32_PINCTRL_FUNCTION(U6RTS, RPG0R, 4),
PIC32_PINCTRL_FUNCTION(SDO1, RPG0R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPG0R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPG0R, 7),
PIC32_PINCTRL_FUNCTION(SDO4, RPG0R, 8),
PIC32_PINCTRL_FUNCTION(SDO5, RPG0R, 9),
PIC32_PINCTRL_FUNCTION(OC4, RPG0R, 11),
PIC32_PINCTRL_FUNCTION(OC7, RPG0R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO1, RPG0R, 15)),
PIC32_PINCTRL_GROUP(97, G1,
PIC32_PINCTRL_FUNCTION(INT3, INT3R, 12),
PIC32_PINCTRL_FUNCTION(T2CK, T2CKR, 12),
PIC32_PINCTRL_FUNCTION(T6CK, T6CKR, 12),
PIC32_PINCTRL_FUNCTION(IC3, IC3R, 12),
PIC32_PINCTRL_FUNCTION(IC7, IC7R, 12),
PIC32_PINCTRL_FUNCTION(U1RX, U1RXR, 12),
PIC32_PINCTRL_FUNCTION(U2CTS, U2CTSR, 12),
PIC32_PINCTRL_FUNCTION(U5RX, U5RXR, 12),
PIC32_PINCTRL_FUNCTION(U6CTS, U6CTSR, 12),
PIC32_PINCTRL_FUNCTION(SDI1, SDI1R, 12),
PIC32_PINCTRL_FUNCTION(SDI3, SDI3R, 12),
PIC32_PINCTRL_FUNCTION(SDI5, SDI5R, 12),
PIC32_PINCTRL_FUNCTION(SS6IN, SS6INR, 12),
PIC32_PINCTRL_FUNCTION(REFCLKI1, REFCLKI1R, 12),
PIC32_PINCTRL_FUNCTION(U3TX, RPG1R, 1),
PIC32_PINCTRL_FUNCTION(U4RTS, RPG1R, 2),
PIC32_PINCTRL_FUNCTION(SDO1, RPG1R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPG1R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPG1R, 7),
PIC32_PINCTRL_FUNCTION(SDO5, RPG1R, 9),
PIC32_PINCTRL_FUNCTION(SS6OUT, RPG1R, 10),
PIC32_PINCTRL_FUNCTION(OC3, RPG1R, 11),
PIC32_PINCTRL_FUNCTION(OC6, RPG1R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO4, RPG1R, 13),
PIC32_PINCTRL_FUNCTION(C2OUT, RPG1R, 14),
PIC32_PINCTRL_FUNCTION(C1TX, RPG1R, 15)),
PIC32_PINCTRL_GROUP(102, G6,
PIC32_PINCTRL_FUNCTION(INT2, INT2R, 1),
PIC32_PINCTRL_FUNCTION(T3CK, T3CKR, 1),
PIC32_PINCTRL_FUNCTION(T8CK, T8CKR, 1),
PIC32_PINCTRL_FUNCTION(IC2, IC2R, 1),
PIC32_PINCTRL_FUNCTION(IC5, IC5R, 1),
PIC32_PINCTRL_FUNCTION(IC9, IC9R, 1),
PIC32_PINCTRL_FUNCTION(U1CTS, U1CTSR, 1),
PIC32_PINCTRL_FUNCTION(U2RX, U2RXR, 1),
PIC32_PINCTRL_FUNCTION(U5CTS, U5CTSR, 1),
PIC32_PINCTRL_FUNCTION(SS1IN, SS1INR, 1),
PIC32_PINCTRL_FUNCTION(SS3IN, SS3INR, 1),
PIC32_PINCTRL_FUNCTION(SS4IN, SS4INR, 1),
PIC32_PINCTRL_FUNCTION(SS5IN, SS5INR, 1),
PIC32_PINCTRL_FUNCTION(C2RX, C2RXR, 1),
PIC32_PINCTRL_FUNCTION(U3RTS, RPG6R, 1),
PIC32_PINCTRL_FUNCTION(U4TX, RPG6R, 2),
PIC32_PINCTRL_FUNCTION(U6TX, RPG6R, 4),
PIC32_PINCTRL_FUNCTION(SS1OUT, RPG6R, 5),
PIC32_PINCTRL_FUNCTION(SS3OUT, RPG6R, 7),
PIC32_PINCTRL_FUNCTION(SS4OUT, RPG6R, 8),
PIC32_PINCTRL_FUNCTION(SS5OUT, RPG6R, 9),
PIC32_PINCTRL_FUNCTION(SDO6, RPG6R, 10),
PIC32_PINCTRL_FUNCTION(OC5, RPG6R, 11),
PIC32_PINCTRL_FUNCTION(OC8, RPG6R, 12),
PIC32_PINCTRL_FUNCTION(C1OUT, RPG6R, 14),
PIC32_PINCTRL_FUNCTION(REFCLKO3, RPG6R, 15)),
PIC32_PINCTRL_GROUP(103, G7,
PIC32_PINCTRL_FUNCTION(INT4, INT4R, 1),
PIC32_PINCTRL_FUNCTION(T5CK, T5CKR, 1),
PIC32_PINCTRL_FUNCTION(T7CK, T7CKR, 1),
PIC32_PINCTRL_FUNCTION(IC4, IC4R, 1),
PIC32_PINCTRL_FUNCTION(IC8, IC8R, 1),
PIC32_PINCTRL_FUNCTION(U3RX, U3RXR, 1),
PIC32_PINCTRL_FUNCTION(U4CTS, U4CTSR, 1),
PIC32_PINCTRL_FUNCTION(SDI2, SDI2R, 1),
PIC32_PINCTRL_FUNCTION(SDI4, SDI4R, 1),
PIC32_PINCTRL_FUNCTION(C1RX, C1RXR, 1),
PIC32_PINCTRL_FUNCTION(REFCLKI4, REFCLKI4R, 1),
PIC32_PINCTRL_FUNCTION(U1TX, RPG7R, 1),
PIC32_PINCTRL_FUNCTION(U2RTS, RPG7R, 2),
PIC32_PINCTRL_FUNCTION(U5TX, RPG7R, 3),
PIC32_PINCTRL_FUNCTION(U6RTS, RPG7R, 4),
PIC32_PINCTRL_FUNCTION(SDO1, RPG7R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPG7R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPG7R, 7),
PIC32_PINCTRL_FUNCTION(SDO4, RPG7R, 8),
PIC32_PINCTRL_FUNCTION(SDO5, RPG7R, 9),
PIC32_PINCTRL_FUNCTION(OC4, RPG7R, 11),
PIC32_PINCTRL_FUNCTION(OC7, RPG7R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO1, RPG7R, 15)),
PIC32_PINCTRL_GROUP(104, G8,
PIC32_PINCTRL_FUNCTION(INT3, INT3R, 1),
PIC32_PINCTRL_FUNCTION(T2CK, T2CKR, 1),
PIC32_PINCTRL_FUNCTION(T6CK, T6CKR, 1),
PIC32_PINCTRL_FUNCTION(IC3, IC3R, 1),
PIC32_PINCTRL_FUNCTION(IC7, IC7R, 1),
PIC32_PINCTRL_FUNCTION(U1RX, U1RXR, 1),
PIC32_PINCTRL_FUNCTION(U2CTS, U2CTSR, 1),
PIC32_PINCTRL_FUNCTION(U5RX, U5RXR, 1),
PIC32_PINCTRL_FUNCTION(U6CTS, U6CTSR, 1),
PIC32_PINCTRL_FUNCTION(SDI1, SDI1R, 1),
PIC32_PINCTRL_FUNCTION(SDI3, SDI3R, 1),
PIC32_PINCTRL_FUNCTION(SDI5, SDI5R, 1),
PIC32_PINCTRL_FUNCTION(SS6IN, SS6INR, 1),
PIC32_PINCTRL_FUNCTION(REFCLKI1, REFCLKI1R, 1),
PIC32_PINCTRL_FUNCTION(U3TX, RPG8R, 1),
PIC32_PINCTRL_FUNCTION(U4RTS, RPG8R, 2),
PIC32_PINCTRL_FUNCTION(SDO1, RPG8R, 5),
PIC32_PINCTRL_FUNCTION(SDO2, RPG8R, 6),
PIC32_PINCTRL_FUNCTION(SDO3, RPG8R, 7),
PIC32_PINCTRL_FUNCTION(SDO5, RPG8R, 9),
PIC32_PINCTRL_FUNCTION(SS6OUT, RPG8R, 10),
PIC32_PINCTRL_FUNCTION(OC3, RPG8R, 11),
PIC32_PINCTRL_FUNCTION(OC6, RPG8R, 12),
PIC32_PINCTRL_FUNCTION(REFCLKO4, RPG8R, 13),
PIC32_PINCTRL_FUNCTION(C2OUT, RPG8R, 14),
PIC32_PINCTRL_FUNCTION(C1TX, RPG8R, 15)),
PIC32_PINCTRL_GROUP(105, G9,
PIC32_PINCTRL_FUNCTION(INT1, INT1R, 1),
PIC32_PINCTRL_FUNCTION(T4CK, T4CKR, 1),
PIC32_PINCTRL_FUNCTION(T9CK, T9CKR, 1),
PIC32_PINCTRL_FUNCTION(IC1, IC1R, 1),
PIC32_PINCTRL_FUNCTION(IC6, IC6R, 1),
PIC32_PINCTRL_FUNCTION(U3CTS, U3CTSR, 1),
PIC32_PINCTRL_FUNCTION(U4RX, U4RXR, 1),
PIC32_PINCTRL_FUNCTION(U6RX, U6RXR, 1),
PIC32_PINCTRL_FUNCTION(SS2IN, SS2INR, 1),
PIC32_PINCTRL_FUNCTION(SDI6, SDI6R, 1),
PIC32_PINCTRL_FUNCTION(OCFA, OCFAR, 1),
PIC32_PINCTRL_FUNCTION(REFCLKI3, REFCLKI3R, 1),
PIC32_PINCTRL_FUNCTION(U1RTS, RPG9R, 1),
PIC32_PINCTRL_FUNCTION(U2TX, RPG9R, 2),
PIC32_PINCTRL_FUNCTION(U5RTS, RPG9R, 3),
PIC32_PINCTRL_FUNCTION(U6TX, RPG9R, 4),
PIC32_PINCTRL_FUNCTION(SS2OUT, RPG9R, 6),
PIC32_PINCTRL_FUNCTION(SDO4, RPG9R, 8),
PIC32_PINCTRL_FUNCTION(SDO6, RPG9R, 10),
PIC32_PINCTRL_FUNCTION(OC2, RPG9R, 11),
PIC32_PINCTRL_FUNCTION(OC1, RPG9R, 12),
PIC32_PINCTRL_FUNCTION(OC9, RPG9R, 13),
PIC32_PINCTRL_FUNCTION(C2TX, RPG9R, 15)),
};
static inline struct pic32_gpio_bank *irqd_to_bank(struct irq_data *d)
{
return gpiochip_get_data(irq_data_get_irq_chip_data(d));
}
static inline struct pic32_gpio_bank *pctl_to_bank(struct pic32_pinctrl *pctl,
unsigned pin)
{
return &pctl->gpio_banks[pin / PINS_PER_BANK];
}
static int pic32_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
{
struct pic32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
return pctl->ngroups;
}
static const char *pic32_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
unsigned group)
{
struct pic32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
return pctl->groups[group].name;
}
static int pic32_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
unsigned group,
const unsigned **pins,
unsigned *num_pins)
{
struct pic32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
*pins = &pctl->groups[group].pin;
*num_pins = 1;
return 0;
}
static const struct pinctrl_ops pic32_pinctrl_ops = {
.get_groups_count = pic32_pinctrl_get_groups_count,
.get_group_name = pic32_pinctrl_get_group_name,
.get_group_pins = pic32_pinctrl_get_group_pins,
.dt_node_to_map = pinconf_generic_dt_node_to_map_pin,
.dt_free_map = pinctrl_utils_free_map,
};
static int pic32_pinmux_get_functions_count(struct pinctrl_dev *pctldev)
{
struct pic32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
return pctl->nfunctions;
}
static const char *
pic32_pinmux_get_function_name(struct pinctrl_dev *pctldev, unsigned func)
{
struct pic32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
return pctl->functions[func].name;
}
static int pic32_pinmux_get_function_groups(struct pinctrl_dev *pctldev,
unsigned func,
const char * const **groups,
unsigned * const num_groups)
{
struct pic32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
*groups = pctl->functions[func].groups;
*num_groups = pctl->functions[func].ngroups;
return 0;
}
static int pic32_pinmux_enable(struct pinctrl_dev *pctldev,
unsigned func, unsigned group)
{
struct pic32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
const struct pic32_pin_group *pg = &pctl->groups[group];
const struct pic32_function *pf = &pctl->functions[func];
const char *fname = pf->name;
struct pic32_desc_function *functions = pg->functions;
while (functions->name) {
if (!strcmp(functions->name, fname)) {
dev_dbg(pctl->dev,
"setting function %s reg 0x%x = %d\n",
fname, functions->muxreg, functions->muxval);
writel(functions->muxval, pctl->reg_base + functions->muxreg);
return 0;
}
functions++;
}
dev_err(pctl->dev, "cannot mux pin %u to function %u\n", group, func);
return -EINVAL;
}
static int pic32_gpio_request_enable(struct pinctrl_dev *pctldev,
struct pinctrl_gpio_range *range,
unsigned offset)
{
struct pic32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
struct pic32_gpio_bank *bank = gpiochip_get_data(range->gc);
u32 mask = BIT(offset - bank->gpio_chip.base);
dev_dbg(pctl->dev, "requesting gpio %d in bank %d with mask 0x%x\n",
offset, bank->gpio_chip.base, mask);
writel(mask, bank->reg_base + PIC32_CLR(ANSEL_REG));
return 0;
}
static int pic32_gpio_direction_input(struct gpio_chip *chip,
unsigned offset)
{
struct pic32_gpio_bank *bank = gpiochip_get_data(chip);
u32 mask = BIT(offset);
writel(mask, bank->reg_base + PIC32_SET(TRIS_REG));
return 0;
}
static int pic32_gpio_get(struct gpio_chip *chip, unsigned offset)
{
struct pic32_gpio_bank *bank = gpiochip_get_data(chip);
return !!(readl(bank->reg_base + PORT_REG) & BIT(offset));
}
static void pic32_gpio_set(struct gpio_chip *chip, unsigned offset,
int value)
{
struct pic32_gpio_bank *bank = gpiochip_get_data(chip);
u32 mask = BIT(offset);
if (value)
writel(mask, bank->reg_base + PIC32_SET(PORT_REG));
else
writel(mask, bank->reg_base + PIC32_CLR(PORT_REG));
}
static int pic32_gpio_direction_output(struct gpio_chip *chip,
unsigned offset, int value)
{
struct pic32_gpio_bank *bank = gpiochip_get_data(chip);
u32 mask = BIT(offset);
pic32_gpio_set(chip, offset, value);
writel(mask, bank->reg_base + PIC32_CLR(TRIS_REG));
return 0;
}
static int pic32_gpio_set_direction(struct pinctrl_dev *pctldev,
struct pinctrl_gpio_range *range,
unsigned offset, bool input)
{
struct gpio_chip *chip = range->gc;
if (input)
pic32_gpio_direction_input(chip, offset);
else
pic32_gpio_direction_output(chip, offset, 0);
return 0;
}
static const struct pinmux_ops pic32_pinmux_ops = {
.get_functions_count = pic32_pinmux_get_functions_count,
.get_function_name = pic32_pinmux_get_function_name,
.get_function_groups = pic32_pinmux_get_function_groups,
.set_mux = pic32_pinmux_enable,
.gpio_request_enable = pic32_gpio_request_enable,
.gpio_set_direction = pic32_gpio_set_direction,
};
static int pic32_pinconf_get(struct pinctrl_dev *pctldev, unsigned pin,
unsigned long *config)
{
struct pic32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
struct pic32_gpio_bank *bank = pctl_to_bank(pctl, pin);
unsigned param = pinconf_to_config_param(*config);
u32 mask = BIT(pin - bank->gpio_chip.base);
u32 arg;
switch (param) {
case PIN_CONFIG_BIAS_PULL_UP:
arg = !!(readl(bank->reg_base + CNPU_REG) & mask);
break;
case PIN_CONFIG_BIAS_PULL_DOWN:
arg = !!(readl(bank->reg_base + CNPD_REG) & mask);
break;
case PIN_CONFIG_MICROCHIP_DIGITAL:
arg = !(readl(bank->reg_base + ANSEL_REG) & mask);
break;
case PIN_CONFIG_MICROCHIP_ANALOG:
arg = !!(readl(bank->reg_base + ANSEL_REG) & mask);
break;
case PIN_CONFIG_DRIVE_OPEN_DRAIN:
arg = !!(readl(bank->reg_base + ODCU_REG) & mask);
break;
case PIN_CONFIG_INPUT_ENABLE:
arg = !!(readl(bank->reg_base + TRIS_REG) & mask);
break;
case PIN_CONFIG_OUTPUT:
arg = !(readl(bank->reg_base + TRIS_REG) & mask);
break;
default:
dev_err(pctl->dev, "Property %u not supported\n", param);
return -ENOTSUPP;
}
*config = pinconf_to_config_packed(param, arg);
return 0;
}
static int pic32_pinconf_set(struct pinctrl_dev *pctldev, unsigned pin,
unsigned long *configs, unsigned num_configs)
{
struct pic32_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
struct pic32_gpio_bank *bank = pctl_to_bank(pctl, pin);
unsigned param;
u32 arg;
unsigned int i;
u32 offset = pin - bank->gpio_chip.base;
u32 mask = BIT(offset);
dev_dbg(pctl->dev, "setting pin %d bank %d mask 0x%x\n",
pin, bank->gpio_chip.base, mask);
for (i = 0; i < num_configs; i++) {
param = pinconf_to_config_param(configs[i]);
arg = pinconf_to_config_argument(configs[i]);
switch (param) {
case PIN_CONFIG_BIAS_PULL_UP:
dev_dbg(pctl->dev, " pullup\n");
writel(mask, bank->reg_base +PIC32_SET(CNPU_REG));
break;
case PIN_CONFIG_BIAS_PULL_DOWN:
dev_dbg(pctl->dev, " pulldown\n");
writel(mask, bank->reg_base + PIC32_SET(CNPD_REG));
break;
case PIN_CONFIG_MICROCHIP_DIGITAL:
dev_dbg(pctl->dev, " digital\n");
writel(mask, bank->reg_base + PIC32_CLR(ANSEL_REG));
break;
case PIN_CONFIG_MICROCHIP_ANALOG:
dev_dbg(pctl->dev, " analog\n");
writel(mask, bank->reg_base + PIC32_SET(ANSEL_REG));
break;
case PIN_CONFIG_DRIVE_OPEN_DRAIN:
dev_dbg(pctl->dev, " opendrain\n");
writel(mask, bank->reg_base + PIC32_SET(ODCU_REG));
break;
case PIN_CONFIG_INPUT_ENABLE:
pic32_gpio_direction_input(&bank->gpio_chip, offset);
break;
case PIN_CONFIG_OUTPUT:
pic32_gpio_direction_output(&bank->gpio_chip,
offset, arg);
break;
default:
dev_err(pctl->dev, "Property %u not supported\n",
param);
return -ENOTSUPP;
}
}
return 0;
}
static const struct pinconf_ops pic32_pinconf_ops = {
.pin_config_get = pic32_pinconf_get,
.pin_config_set = pic32_pinconf_set,
.is_generic = true,
};
static struct pinctrl_desc pic32_pinctrl_desc = {
.name = "pic32-pinctrl",
.pctlops = &pic32_pinctrl_ops,
.pmxops = &pic32_pinmux_ops,
.confops = &pic32_pinconf_ops,
.owner = THIS_MODULE,
};
static int pic32_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
{
struct pic32_gpio_bank *bank = gpiochip_get_data(chip);
if (readl(bank->reg_base + TRIS_REG) & BIT(offset))
return GPIO_LINE_DIRECTION_IN;
return GPIO_LINE_DIRECTION_OUT;
}
static void pic32_gpio_irq_ack(struct irq_data *data)
{
struct pic32_gpio_bank *bank = irqd_to_bank(data);
writel(0, bank->reg_base + CNF_REG);
}
static void pic32_gpio_irq_mask(struct irq_data *data)
{
struct pic32_gpio_bank *bank = irqd_to_bank(data);
writel(BIT(PIC32_CNCON_ON), bank->reg_base + PIC32_CLR(CNCON_REG));
}
static void pic32_gpio_irq_unmask(struct irq_data *data)
{
struct pic32_gpio_bank *bank = irqd_to_bank(data);
writel(BIT(PIC32_CNCON_ON), bank->reg_base + PIC32_SET(CNCON_REG));
}
static unsigned int pic32_gpio_irq_startup(struct irq_data *data)
{
struct gpio_chip *chip = irq_data_get_irq_chip_data(data);
pic32_gpio_direction_input(chip, data->hwirq);
pic32_gpio_irq_unmask(data);
return 0;
}
static int pic32_gpio_irq_set_type(struct irq_data *data, unsigned int type)
{
struct pic32_gpio_bank *bank = irqd_to_bank(data);
u32 mask = BIT(data->hwirq);
switch (type & IRQ_TYPE_SENSE_MASK) {
case IRQ_TYPE_EDGE_RISING:
/* enable RISE */
writel(mask, bank->reg_base + PIC32_SET(CNEN_REG));
/* disable FALL */
writel(mask, bank->reg_base + PIC32_CLR(CNNE_REG));
/* enable EDGE */
writel(BIT(PIC32_CNCON_EDGE), bank->reg_base + PIC32_SET(CNCON_REG));
break;
case IRQ_TYPE_EDGE_FALLING:
/* disable RISE */
writel(mask, bank->reg_base + PIC32_CLR(CNEN_REG));
/* enable FALL */
writel(mask, bank->reg_base + PIC32_SET(CNNE_REG));
/* enable EDGE */
writel(BIT(PIC32_CNCON_EDGE), bank->reg_base + PIC32_SET(CNCON_REG));
break;
case IRQ_TYPE_EDGE_BOTH:
/* enable RISE */
writel(mask, bank->reg_base + PIC32_SET(CNEN_REG));
/* enable FALL */
writel(mask, bank->reg_base + PIC32_SET(CNNE_REG));
/* enable EDGE */
writel(BIT(PIC32_CNCON_EDGE), bank->reg_base + PIC32_SET(CNCON_REG));
break;
default:
return -EINVAL;
}
irq_set_handler_locked(data, handle_edge_irq);
return 0;
}
static u32 pic32_gpio_get_pending(struct gpio_chip *gc, unsigned long status)
{
struct pic32_gpio_bank *bank = gpiochip_get_data(gc);
u32 pending = 0;
u32 cnen_rise, cnne_fall;
u32 pin;
cnen_rise = readl(bank->reg_base + CNEN_REG);
cnne_fall = readl(bank->reg_base + CNNE_REG);
for_each_set_bit(pin, &status, BITS_PER_LONG) {
u32 mask = BIT(pin);
if ((mask & cnen_rise) || (mask && cnne_fall))
pending |= mask;
}
return pending;
}
static void pic32_gpio_irq_handler(struct irq_desc *desc)
{
struct gpio_chip *gc = irq_desc_get_handler_data(desc);
struct pic32_gpio_bank *bank = gpiochip_get_data(gc);
struct irq_chip *chip = irq_desc_get_chip(desc);
unsigned long pending;
unsigned int pin;
u32 stat;
chained_irq_enter(chip, desc);
stat = readl(bank->reg_base + CNF_REG);
pending = pic32_gpio_get_pending(gc, stat);
for_each_set_bit(pin, &pending, BITS_PER_LONG)
generic_handle_domain_irq(gc->irq.domain, pin);
chained_irq_exit(chip, desc);
}
#define GPIO_BANK(_bank, _npins) \
{ \
.gpio_chip = { \
.label = "GPIO" #_bank, \
.request = gpiochip_generic_request, \
.free = gpiochip_generic_free, \
.get_direction = pic32_gpio_get_direction, \
.direction_input = pic32_gpio_direction_input, \
.direction_output = pic32_gpio_direction_output, \
.get = pic32_gpio_get, \
.set = pic32_gpio_set, \
.ngpio = _npins, \
.base = GPIO_BANK_START(_bank), \
.owner = THIS_MODULE, \
.can_sleep = 0, \
}, \
.irq_chip = { \
.name = "GPIO" #_bank, \
.irq_startup = pic32_gpio_irq_startup, \
.irq_ack = pic32_gpio_irq_ack, \
.irq_mask = pic32_gpio_irq_mask, \
.irq_unmask = pic32_gpio_irq_unmask, \
.irq_set_type = pic32_gpio_irq_set_type, \
}, \
}
static struct pic32_gpio_bank pic32_gpio_banks[] = {
GPIO_BANK(0, PINS_PER_BANK),
GPIO_BANK(1, PINS_PER_BANK),
GPIO_BANK(2, PINS_PER_BANK),
GPIO_BANK(3, PINS_PER_BANK),
GPIO_BANK(4, PINS_PER_BANK),
GPIO_BANK(5, PINS_PER_BANK),
GPIO_BANK(6, PINS_PER_BANK),
GPIO_BANK(7, PINS_PER_BANK),
GPIO_BANK(8, PINS_PER_BANK),
GPIO_BANK(9, PINS_PER_BANK),
};
static int pic32_pinctrl_probe(struct platform_device *pdev)
{
struct pic32_pinctrl *pctl;
struct resource *res;
int ret;
pctl = devm_kzalloc(&pdev->dev, sizeof(*pctl), GFP_KERNEL);
if (!pctl)
return -ENOMEM;
pctl->dev = &pdev->dev;
dev_set_drvdata(&pdev->dev, pctl);
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
pctl->reg_base = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(pctl->reg_base))
return PTR_ERR(pctl->reg_base);
pctl->clk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(pctl->clk)) {
ret = PTR_ERR(pctl->clk);
dev_err(&pdev->dev, "clk get failed\n");
return ret;
}
ret = clk_prepare_enable(pctl->clk);
if (ret) {
dev_err(&pdev->dev, "clk enable failed\n");
return ret;
}
pctl->pins = pic32_pins;
pctl->npins = ARRAY_SIZE(pic32_pins);
pctl->functions = pic32_functions;
pctl->nfunctions = ARRAY_SIZE(pic32_functions);
pctl->groups = pic32_groups;
pctl->ngroups = ARRAY_SIZE(pic32_groups);
pctl->gpio_banks = pic32_gpio_banks;
pctl->nbanks = ARRAY_SIZE(pic32_gpio_banks);
pic32_pinctrl_desc.pins = pctl->pins;
pic32_pinctrl_desc.npins = pctl->npins;
pic32_pinctrl_desc.custom_params = pic32_mpp_bindings;
pic32_pinctrl_desc.num_custom_params = ARRAY_SIZE(pic32_mpp_bindings);
pctl->pctldev = devm_pinctrl_register(&pdev->dev, &pic32_pinctrl_desc,
pctl);
if (IS_ERR(pctl->pctldev)) {
dev_err(&pdev->dev, "Failed to register pinctrl device\n");
return PTR_ERR(pctl->pctldev);
}
return 0;
}
static int pic32_gpio_probe(struct platform_device *pdev)
{
struct device_node *np = pdev->dev.of_node;
struct pic32_gpio_bank *bank;
u32 id;
int irq, ret;
struct gpio_irq_chip *girq;
if (of_property_read_u32(np, "microchip,gpio-bank", &id)) {
dev_err(&pdev->dev, "microchip,gpio-bank property not found\n");
return -EINVAL;
}
if (id >= ARRAY_SIZE(pic32_gpio_banks)) {
dev_err(&pdev->dev, "invalid microchip,gpio-bank property\n");
return -EINVAL;
}
bank = &pic32_gpio_banks[id];
bank->reg_base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(bank->reg_base))
return PTR_ERR(bank->reg_base);
irq = platform_get_irq(pdev, 0);
if (irq < 0)
return irq;
bank->clk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(bank->clk)) {
ret = PTR_ERR(bank->clk);
dev_err(&pdev->dev, "clk get failed\n");
return ret;
}
ret = clk_prepare_enable(bank->clk);
if (ret) {
dev_err(&pdev->dev, "clk enable failed\n");
return ret;
}
bank->gpio_chip.parent = &pdev->dev;
There is a moose on the mool buff Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey! Ring the door. Take your seat moosey!
2022-03-15 16:13:23 +00:00
bank->gpio_chip.of_node = np;
girq = &bank->gpio_chip.irq;
girq->chip = &bank->irq_chip;
girq->parent_handler = pic32_gpio_irq_handler;
girq->num_parents = 1;
girq->parents = devm_kcalloc(&pdev->dev, 1, sizeof(*girq->parents),
GFP_KERNEL);
if (!girq->parents)
return -ENOMEM;
girq->default_type = IRQ_TYPE_NONE;
girq->handler = handle_level_irq;
girq->parents[0] = irq;
ret = gpiochip_add_data(&bank->gpio_chip, bank);
if (ret < 0) {
dev_err(&pdev->dev, "Failed to add GPIO chip %u: %d\n",
id, ret);
return ret;
}
return 0;
}
static const struct of_device_id pic32_pinctrl_of_match[] = {
{ .compatible = "microchip,pic32mzda-pinctrl", },
{ },
};
static struct platform_driver pic32_pinctrl_driver = {
.driver = {
.name = "pic32-pinctrl",
.of_match_table = pic32_pinctrl_of_match,
.suppress_bind_attrs = true,
},
.probe = pic32_pinctrl_probe,
};
static const struct of_device_id pic32_gpio_of_match[] = {
{ .compatible = "microchip,pic32mzda-gpio", },
{ },
};
static struct platform_driver pic32_gpio_driver = {
.driver = {
.name = "pic32-gpio",
.of_match_table = pic32_gpio_of_match,
.suppress_bind_attrs = true,
},
.probe = pic32_gpio_probe,
};
static int __init pic32_gpio_register(void)
{
return platform_driver_register(&pic32_gpio_driver);
}
arch_initcall(pic32_gpio_register);
static int __init pic32_pinctrl_register(void)
{
return platform_driver_register(&pic32_pinctrl_driver);
}
arch_initcall(pic32_pinctrl_register);