Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pinctrl: nuvoton: Add ma35d1 pinctrl and GPIO driver

Add common pinctrl and GPIO driver for Nuvoton MA35 series SoC, and
add support for ma35d1 pinctrl.

Signed-off-by: Jacky Huang <ychuang3@nuvoton.com>
Link: https://lore.kernel.org/r/20240521012447.42211-4-ychuang570808@gmail.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

authored by

Jacky Huang and committed by
Linus Walleij
f805e356 63f1f9da

+3059
+19
drivers/pinctrl/nuvoton/Kconfig
··· 45 45 Say Y or M here to enable pin controller and GPIO support for 46 46 the Nuvoton NPCM8XX SoC. This is strongly recommended when 47 47 building a kernel that will run on this chip. 48 + 49 + config PINCTRL_MA35 50 + bool 51 + depends on (ARCH_MA35 || COMPILE_TEST) && OF 52 + select GENERIC_PINCTRL_GROUPS 53 + select GENERIC_PINMUX_FUNCTIONS 54 + select GENERIC_PINCONF 55 + select GPIOLIB 56 + select GPIO_GENERIC 57 + select GPIOLIB_IRQCHIP 58 + select MFD_SYSCON 59 + 60 + config PINCTRL_MA35D1 61 + bool "Pinctrl and GPIO driver for Nuvoton MA35D1" 62 + depends on (ARCH_MA35 || COMPILE_TEST) && OF 63 + select PINCTRL_MA35 64 + help 65 + Say Y here to enable pin controller and GPIO support 66 + for Nuvoton MA35D1 SoC.
+2
drivers/pinctrl/nuvoton/Makefile
··· 4 4 obj-$(CONFIG_PINCTRL_WPCM450) += pinctrl-wpcm450.o 5 5 obj-$(CONFIG_PINCTRL_NPCM7XX) += pinctrl-npcm7xx.o 6 6 obj-$(CONFIG_PINCTRL_NPCM8XX) += pinctrl-npcm8xx.o 7 + obj-$(CONFIG_PINCTRL_MA35) += pinctrl-ma35.o 8 + obj-$(CONFIG_PINCTRL_MA35D1) += pinctrl-ma35d1.o
+1187
drivers/pinctrl/nuvoton/pinctrl-ma35.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * Copyright (C) 2024 Nuvoton Technology Corp. 4 + * 5 + * Author: Shan-Chun Hung <schung@nuvoton.com> 6 + * * Jacky Huang <ychuang3@nuvoton.com> 7 + */ 8 + 9 + #include <linux/bitfield.h> 10 + #include <linux/bitops.h> 11 + #include <linux/cleanup.h> 12 + #include <linux/clk.h> 13 + #include <linux/gpio/driver.h> 14 + #include <linux/mfd/syscon.h> 15 + #include <linux/of.h> 16 + #include <linux/platform_device.h> 17 + #include <linux/property.h> 18 + #include <linux/regmap.h> 19 + 20 + #include <linux/pinctrl/pinconf.h> 21 + #include <linux/pinctrl/pinctrl.h> 22 + #include "../core.h" 23 + #include "../pinconf.h" 24 + #include "pinctrl-ma35.h" 25 + 26 + #define MA35_MFP_REG_BASE 0x80 27 + #define MA35_MFP_REG_SZ_PER_BANK 8 28 + #define MA35_MFP_BITS_PER_PORT 4 29 + 30 + #define MA35_GPIO_BANK_MAX 14 31 + #define MA35_GPIO_PORT_MAX 16 32 + 33 + /* GPIO control registers */ 34 + #define MA35_GP_REG_MODE 0x00 35 + #define MA35_GP_REG_DINOFF 0x04 36 + #define MA35_GP_REG_DOUT 0x08 37 + #define MA35_GP_REG_DATMSK 0x0c 38 + #define MA35_GP_REG_PIN 0x10 39 + #define MA35_GP_REG_DBEN 0x14 40 + #define MA35_GP_REG_INTTYPE 0x18 41 + #define MA35_GP_REG_INTEN 0x1c 42 + #define MA35_GP_REG_INTSRC 0x20 43 + #define MA35_GP_REG_SMTEN 0x24 44 + #define MA35_GP_REG_SLEWCTL 0x28 45 + #define MA35_GP_REG_SPW 0x2c 46 + #define MA35_GP_REG_PUSEL 0x30 47 + #define MA35_GP_REG_DSL 0x38 48 + #define MA35_GP_REG_DSH 0x3c 49 + 50 + /* GPIO mode control */ 51 + #define MA35_GP_MODE_INPUT 0x0 52 + #define MA35_GP_MODE_OUTPUT 0x1 53 + #define MA35_GP_MODE_OPEN_DRAIN 0x2 54 + #define MA35_GP_MODE_QUASI 0x3 55 + #define MA35_GP_MODE_MASK(n) GENMASK(n * 2 + 1, n * 2) 56 + 57 + #define MA35_GP_SLEWCTL_MASK(n) GENMASK(n * 2 + 1, n * 2) 58 + 59 + /* GPIO pull-up and pull-down selection control */ 60 + #define MA35_GP_PUSEL_DISABLE 0x0 61 + #define MA35_GP_PUSEL_PULL_UP 0x1 62 + #define MA35_GP_PUSEL_PULL_DOWN 0x2 63 + #define MA35_GP_PUSEL_MASK(n) GENMASK(n * 2 + 1, n * 2) 64 + 65 + /* 66 + * The MA35_GP_REG_INTEN bits 0 ~ 15 control low-level or falling edge trigger, 67 + * while bits 16 ~ 31 control high-level or rising edge trigger. 68 + */ 69 + #define MA35_GP_INTEN_L(n) BIT(n) 70 + #define MA35_GP_INTEN_H(n) BIT(n + 16) 71 + #define MA35_GP_INTEN_BOTH(n) (MA35_GP_INTEN_H(n) | MA35_GP_INTEN_L(n)) 72 + 73 + /* 74 + * The MA35_GP_REG_DSL register controls ports 0 to 7, while the MA35_GP_REG_DSH 75 + * register controls ports 8 to 15. Each port occupies a width of 4 bits, with 3 76 + * bits being effective. 77 + */ 78 + #define MA35_GP_DS_REG(n) (n < 8 ? MA35_GP_REG_DSL : MA35_GP_REG_DSH) 79 + #define MA35_GP_DS_MASK(n) GENMASK((n % 8) * 4 + 3, (n % 8) * 4) 80 + 81 + #define MVOLT_1800 0 82 + #define MVOLT_3300 1 83 + 84 + /* Non-constant mask variant of FIELD_GET() and FIELD_PREP() */ 85 + #define field_get(_mask, _reg) (((_reg) & (_mask)) >> (ffs(_mask) - 1)) 86 + #define field_prep(_mask, _val) (((_val) << (ffs(_mask) - 1)) & (_mask)) 87 + 88 + static const char * const gpio_group_name[] = { 89 + "gpioa", "gpiob", "gpioc", "gpiod", "gpioe", "gpiof", "gpiog", 90 + "gpioh", "gpioi", "gpioj", "gpiok", "gpiol", "gpiom", "gpion", 91 + }; 92 + 93 + static const u32 ds_1800mv_tbl[] = { 94 + 2900, 4400, 5800, 7300, 8600, 10100, 11500, 13000, 95 + }; 96 + 97 + static const u32 ds_3300mv_tbl[] = { 98 + 17100, 25600, 34100, 42800, 48000, 56000, 77000, 82000, 99 + }; 100 + 101 + struct ma35_pin_func { 102 + const char *name; 103 + const char **groups; 104 + u32 ngroups; 105 + }; 106 + 107 + struct ma35_pin_setting { 108 + u32 offset; 109 + u32 shift; 110 + u32 muxval; 111 + unsigned long *configs; 112 + unsigned int nconfigs; 113 + }; 114 + 115 + struct ma35_pin_group { 116 + const char *name; 117 + unsigned int npins; 118 + unsigned int *pins; 119 + struct ma35_pin_setting *settings; 120 + }; 121 + 122 + struct ma35_pin_bank { 123 + void __iomem *reg_base; 124 + struct clk *clk; 125 + int irq; 126 + u8 bank_num; 127 + u8 nr_pins; 128 + bool valid; 129 + const char *name; 130 + struct fwnode_handle *fwnode; 131 + struct gpio_chip chip; 132 + u32 irqtype; 133 + u32 irqinten; 134 + struct regmap *regmap; 135 + struct device *dev; 136 + }; 137 + 138 + struct ma35_pin_ctrl { 139 + struct ma35_pin_bank *pin_banks; 140 + u32 nr_banks; 141 + u32 nr_pins; 142 + }; 143 + 144 + struct ma35_pinctrl { 145 + struct device *dev; 146 + struct ma35_pin_ctrl *ctrl; 147 + struct pinctrl_dev *pctl; 148 + const struct ma35_pinctrl_soc_info *info; 149 + struct regmap *regmap; 150 + struct ma35_pin_group *groups; 151 + unsigned int ngroups; 152 + struct ma35_pin_func *functions; 153 + unsigned int nfunctions; 154 + }; 155 + 156 + static DEFINE_RAW_SPINLOCK(ma35_lock); 157 + 158 + static int ma35_get_groups_count(struct pinctrl_dev *pctldev) 159 + { 160 + struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 161 + 162 + return npctl->ngroups; 163 + } 164 + 165 + static const char *ma35_get_group_name(struct pinctrl_dev *pctldev, unsigned int selector) 166 + { 167 + struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 168 + 169 + return npctl->groups[selector].name; 170 + } 171 + 172 + static int ma35_get_group_pins(struct pinctrl_dev *pctldev, unsigned int selector, 173 + const unsigned int **pins, unsigned int *npins) 174 + { 175 + struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 176 + 177 + if (selector >= npctl->ngroups) 178 + return -EINVAL; 179 + 180 + *pins = npctl->groups[selector].pins; 181 + *npins = npctl->groups[selector].npins; 182 + 183 + return 0; 184 + } 185 + 186 + static struct ma35_pin_group *ma35_pinctrl_find_group_by_name( 187 + const struct ma35_pinctrl *npctl, const char *name) 188 + { 189 + int i; 190 + 191 + for (i = 0; i < npctl->ngroups; i++) { 192 + if (!strcmp(npctl->groups[i].name, name)) 193 + return &npctl->groups[i]; 194 + } 195 + return NULL; 196 + } 197 + 198 + static int ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev *pctldev, 199 + struct device_node *np, 200 + struct pinctrl_map **map, 201 + unsigned int *num_maps) 202 + { 203 + struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 204 + struct ma35_pin_group *grp; 205 + struct pinctrl_map *new_map; 206 + struct device_node *parent; 207 + int map_num = 1; 208 + int i; 209 + 210 + /* 211 + * first find the group of this node and check if we need create 212 + * config maps for pins 213 + */ 214 + grp = ma35_pinctrl_find_group_by_name(npctl, np->name); 215 + if (!grp) { 216 + dev_err(npctl->dev, "unable to find group for node %s\n", np->name); 217 + return -EINVAL; 218 + } 219 + 220 + map_num += grp->npins; 221 + new_map = devm_kcalloc(pctldev->dev, map_num, sizeof(*new_map), GFP_KERNEL); 222 + if (!new_map) 223 + return -ENOMEM; 224 + 225 + *map = new_map; 226 + *num_maps = map_num; 227 + /* create mux map */ 228 + parent = of_get_parent(np); 229 + if (!parent) 230 + return -EINVAL; 231 + 232 + new_map[0].type = PIN_MAP_TYPE_MUX_GROUP; 233 + new_map[0].data.mux.function = parent->name; 234 + new_map[0].data.mux.group = np->name; 235 + of_node_put(parent); 236 + 237 + new_map++; 238 + for (i = 0; i < grp->npins; i++) { 239 + new_map[i].type = PIN_MAP_TYPE_CONFIGS_PIN; 240 + new_map[i].data.configs.group_or_pin = pin_get_name(pctldev, grp->pins[i]); 241 + new_map[i].data.configs.configs = grp->settings[i].configs; 242 + new_map[i].data.configs.num_configs = grp->settings[i].nconfigs; 243 + } 244 + dev_dbg(pctldev->dev, "maps: function %s group %s num %d\n", 245 + (*map)->data.mux.function, (*map)->data.mux.group, map_num); 246 + 247 + return 0; 248 + } 249 + 250 + static const struct pinctrl_ops ma35_pctrl_ops = { 251 + .get_groups_count = ma35_get_groups_count, 252 + .get_group_name = ma35_get_group_name, 253 + .get_group_pins = ma35_get_group_pins, 254 + .dt_node_to_map = ma35_pinctrl_dt_node_to_map_func, 255 + .dt_free_map = pinconf_generic_dt_free_map, 256 + }; 257 + 258 + static int ma35_pinmux_get_func_count(struct pinctrl_dev *pctldev) 259 + { 260 + struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 261 + 262 + return npctl->nfunctions; 263 + } 264 + 265 + static const char *ma35_pinmux_get_func_name(struct pinctrl_dev *pctldev, 266 + unsigned int selector) 267 + { 268 + struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 269 + 270 + return npctl->functions[selector].name; 271 + } 272 + 273 + static int ma35_pinmux_get_func_groups(struct pinctrl_dev *pctldev, 274 + unsigned int function, 275 + const char *const **groups, 276 + unsigned int *const num_groups) 277 + { 278 + struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 279 + 280 + *groups = npctl->functions[function].groups; 281 + *num_groups = npctl->functions[function].ngroups; 282 + 283 + return 0; 284 + } 285 + 286 + static int ma35_pinmux_set_mux(struct pinctrl_dev *pctldev, unsigned int selector, 287 + unsigned int group) 288 + { 289 + struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 290 + struct ma35_pin_group *grp = &npctl->groups[group]; 291 + struct ma35_pin_setting *setting = grp->settings; 292 + u32 i, regval; 293 + 294 + dev_dbg(npctl->dev, "enable function %s group %s\n", 295 + npctl->functions[selector].name, npctl->groups[group].name); 296 + 297 + for (i = 0; i < grp->npins; i++) { 298 + regmap_read(npctl->regmap, setting->offset, &regval); 299 + regval &= ~GENMASK(setting->shift + MA35_MFP_BITS_PER_PORT - 1, 300 + setting->shift); 301 + regval |= setting->muxval << setting->shift; 302 + regmap_write(npctl->regmap, setting->offset, regval); 303 + setting++; 304 + } 305 + return 0; 306 + } 307 + 308 + static const struct pinmux_ops ma35_pmx_ops = { 309 + .get_functions_count = ma35_pinmux_get_func_count, 310 + .get_function_name = ma35_pinmux_get_func_name, 311 + .get_function_groups = ma35_pinmux_get_func_groups, 312 + .set_mux = ma35_pinmux_set_mux, 313 + .strict = true, 314 + }; 315 + 316 + static void ma35_gpio_set_mode(void __iomem *reg_mode, unsigned int gpio, u32 mode) 317 + { 318 + u32 regval = readl(reg_mode); 319 + 320 + regval &= ~MA35_GP_MODE_MASK(gpio); 321 + regval |= field_prep(MA35_GP_MODE_MASK(gpio), mode); 322 + 323 + writel(regval, reg_mode); 324 + } 325 + 326 + static u32 ma35_gpio_get_mode(void __iomem *reg_mode, unsigned int gpio) 327 + { 328 + u32 regval = readl(reg_mode); 329 + 330 + return field_get(MA35_GP_MODE_MASK(gpio), regval); 331 + } 332 + 333 + static int ma35_gpio_core_direction_in(struct gpio_chip *gc, unsigned int gpio) 334 + { 335 + struct ma35_pin_bank *bank = gpiochip_get_data(gc); 336 + void __iomem *reg_mode = bank->reg_base + MA35_GP_REG_MODE; 337 + 338 + guard(raw_spinlock_irqsave)(&ma35_lock); 339 + 340 + ma35_gpio_set_mode(reg_mode, gpio, MA35_GP_MODE_INPUT); 341 + 342 + return 0; 343 + } 344 + 345 + static int ma35_gpio_core_direction_out(struct gpio_chip *gc, unsigned int gpio, int val) 346 + { 347 + struct ma35_pin_bank *bank = gpiochip_get_data(gc); 348 + void __iomem *reg_dout = bank->reg_base + MA35_GP_REG_DOUT; 349 + void __iomem *reg_mode = bank->reg_base + MA35_GP_REG_MODE; 350 + unsigned int regval; 351 + 352 + guard(raw_spinlock_irqsave)(&ma35_lock); 353 + 354 + regval = readl(reg_dout); 355 + if (val) 356 + regval |= BIT(gpio); 357 + else 358 + regval &= ~BIT(gpio); 359 + writel(regval, reg_dout); 360 + 361 + ma35_gpio_set_mode(reg_mode, gpio, MA35_GP_MODE_OUTPUT); 362 + 363 + return 0; 364 + } 365 + 366 + static int ma35_gpio_core_get(struct gpio_chip *gc, unsigned int gpio) 367 + { 368 + struct ma35_pin_bank *bank = gpiochip_get_data(gc); 369 + void __iomem *reg_pin = bank->reg_base + MA35_GP_REG_PIN; 370 + 371 + return !!(readl(reg_pin) & BIT(gpio)); 372 + } 373 + 374 + static void ma35_gpio_core_set(struct gpio_chip *gc, unsigned int gpio, int val) 375 + { 376 + struct ma35_pin_bank *bank = gpiochip_get_data(gc); 377 + void __iomem *reg_dout = bank->reg_base + MA35_GP_REG_DOUT; 378 + u32 regval; 379 + 380 + if (val) 381 + regval = readl(reg_dout) | BIT(gpio); 382 + else 383 + regval = readl(reg_dout) & ~BIT(gpio); 384 + 385 + writel(regval, reg_dout); 386 + } 387 + 388 + static int ma35_gpio_core_to_request(struct gpio_chip *gc, unsigned int gpio) 389 + { 390 + struct ma35_pin_bank *bank = gpiochip_get_data(gc); 391 + u32 reg_offs, bit_offs, regval; 392 + 393 + if (gpio < 8) { 394 + /* The MFP low register controls port 0 ~ 7 */ 395 + reg_offs = bank->bank_num * MA35_MFP_REG_SZ_PER_BANK; 396 + bit_offs = gpio * MA35_MFP_BITS_PER_PORT; 397 + } else { 398 + /* The MFP high register controls port 8 ~ 15 */ 399 + reg_offs = bank->bank_num * MA35_MFP_REG_SZ_PER_BANK + 4; 400 + bit_offs = (gpio - 8) * MA35_MFP_BITS_PER_PORT; 401 + } 402 + 403 + regmap_read(bank->regmap, MA35_MFP_REG_BASE + reg_offs, &regval); 404 + regval &= ~GENMASK(bit_offs + MA35_MFP_BITS_PER_PORT - 1, bit_offs); 405 + regmap_write(bank->regmap, MA35_MFP_REG_BASE + reg_offs, regval); 406 + 407 + return 0; 408 + } 409 + 410 + static void ma35_irq_gpio_ack(struct irq_data *d) 411 + { 412 + struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d)); 413 + void __iomem *reg_intsrc = bank->reg_base + MA35_GP_REG_INTSRC; 414 + irq_hw_number_t hwirq = irqd_to_hwirq(d); 415 + 416 + writel(BIT(hwirq), reg_intsrc); 417 + } 418 + 419 + static void ma35_irq_gpio_mask(struct irq_data *d) 420 + { 421 + struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d)); 422 + void __iomem *reg_ien = bank->reg_base + MA35_GP_REG_INTEN; 423 + irq_hw_number_t hwirq = irqd_to_hwirq(d); 424 + u32 regval; 425 + 426 + regval = readl(reg_ien); 427 + 428 + regval &= ~MA35_GP_INTEN_BOTH(hwirq); 429 + 430 + writel(regval, reg_ien); 431 + } 432 + 433 + static void ma35_irq_gpio_unmask(struct irq_data *d) 434 + { 435 + struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d)); 436 + void __iomem *reg_itype = bank->reg_base + MA35_GP_REG_INTTYPE; 437 + void __iomem *reg_ien = bank->reg_base + MA35_GP_REG_INTEN; 438 + irq_hw_number_t hwirq = irqd_to_hwirq(d); 439 + u32 bval, regval; 440 + 441 + bval = bank->irqtype & BIT(hwirq); 442 + regval = readl(reg_itype); 443 + regval &= ~BIT(hwirq); 444 + writel(regval | bval, reg_itype); 445 + 446 + bval = bank->irqinten & MA35_GP_INTEN_BOTH(hwirq); 447 + regval = readl(reg_ien); 448 + regval &= ~MA35_GP_INTEN_BOTH(hwirq); 449 + writel(regval | bval, reg_ien); 450 + } 451 + 452 + static int ma35_irq_irqtype(struct irq_data *d, unsigned int type) 453 + { 454 + struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d)); 455 + irq_hw_number_t hwirq = irqd_to_hwirq(d); 456 + 457 + switch (type) { 458 + case IRQ_TYPE_EDGE_BOTH: 459 + irq_set_handler_locked(d, handle_edge_irq); 460 + bank->irqtype &= ~BIT(hwirq); 461 + bank->irqinten |= MA35_GP_INTEN_BOTH(hwirq); 462 + break; 463 + case IRQ_TYPE_EDGE_RISING: 464 + case IRQ_TYPE_LEVEL_HIGH: 465 + irq_set_handler_locked(d, handle_edge_irq); 466 + bank->irqtype &= ~BIT(hwirq); 467 + bank->irqinten |= MA35_GP_INTEN_H(hwirq); 468 + bank->irqinten &= ~MA35_GP_INTEN_L(hwirq); 469 + break; 470 + case IRQ_TYPE_EDGE_FALLING: 471 + case IRQ_TYPE_LEVEL_LOW: 472 + irq_set_handler_locked(d, handle_edge_irq); 473 + bank->irqtype &= ~BIT(hwirq); 474 + bank->irqinten |= MA35_GP_INTEN_L(hwirq); 475 + bank->irqinten &= ~MA35_GP_INTEN_H(hwirq); 476 + break; 477 + default: 478 + return -EINVAL; 479 + } 480 + 481 + writel(bank->irqtype, bank->reg_base + MA35_GP_REG_INTTYPE); 482 + writel(bank->irqinten, bank->reg_base + MA35_GP_REG_INTEN); 483 + 484 + return 0; 485 + } 486 + 487 + static struct irq_chip ma35_gpio_irqchip = { 488 + .name = "MA35-GPIO-IRQ", 489 + .irq_disable = ma35_irq_gpio_mask, 490 + .irq_enable = ma35_irq_gpio_unmask, 491 + .irq_ack = ma35_irq_gpio_ack, 492 + .irq_mask = ma35_irq_gpio_mask, 493 + .irq_unmask = ma35_irq_gpio_unmask, 494 + .irq_set_type = ma35_irq_irqtype, 495 + .flags = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_IMMUTABLE, 496 + GPIOCHIP_IRQ_RESOURCE_HELPERS, 497 + }; 498 + 499 + static void ma35_irq_demux_intgroup(struct irq_desc *desc) 500 + { 501 + struct ma35_pin_bank *bank = gpiochip_get_data(irq_desc_get_handler_data(desc)); 502 + struct irq_domain *irqdomain = bank->chip.irq.domain; 503 + struct irq_chip *irqchip = irq_desc_get_chip(desc); 504 + unsigned long isr; 505 + int offset; 506 + 507 + chained_irq_enter(irqchip, desc); 508 + 509 + isr = readl(bank->reg_base + MA35_GP_REG_INTSRC); 510 + 511 + for_each_set_bit(offset, &isr, bank->nr_pins) 512 + generic_handle_irq(irq_find_mapping(irqdomain, offset)); 513 + 514 + chained_irq_exit(irqchip, desc); 515 + } 516 + 517 + static int ma35_gpiolib_register(struct platform_device *pdev, struct ma35_pinctrl *npctl) 518 + { 519 + struct ma35_pin_ctrl *ctrl = npctl->ctrl; 520 + struct ma35_pin_bank *bank = ctrl->pin_banks; 521 + int ret; 522 + int i; 523 + 524 + for (i = 0; i < ctrl->nr_banks; i++, bank++) { 525 + if (!bank->valid) { 526 + dev_warn(&pdev->dev, "%pfw: bank is not valid\n", bank->fwnode); 527 + continue; 528 + } 529 + bank->irqtype = 0; 530 + bank->irqinten = 0; 531 + bank->chip.label = bank->name; 532 + bank->chip.of_gpio_n_cells = 2; 533 + bank->chip.parent = &pdev->dev; 534 + bank->chip.request = ma35_gpio_core_to_request; 535 + bank->chip.direction_input = ma35_gpio_core_direction_in; 536 + bank->chip.direction_output = ma35_gpio_core_direction_out; 537 + bank->chip.get = ma35_gpio_core_get; 538 + bank->chip.set = ma35_gpio_core_set; 539 + bank->chip.base = -1; 540 + bank->chip.ngpio = bank->nr_pins; 541 + bank->chip.can_sleep = false; 542 + 543 + if (bank->irq > 0) { 544 + struct gpio_irq_chip *girq; 545 + 546 + girq = &bank->chip.irq; 547 + gpio_irq_chip_set_chip(girq, &ma35_gpio_irqchip); 548 + girq->parent_handler = ma35_irq_demux_intgroup; 549 + girq->num_parents = 1; 550 + 551 + girq->parents = devm_kcalloc(&pdev->dev, girq->num_parents, 552 + sizeof(*girq->parents), GFP_KERNEL); 553 + if (!girq->parents) 554 + return -ENOMEM; 555 + 556 + girq->parents[0] = bank->irq; 557 + girq->default_type = IRQ_TYPE_NONE; 558 + girq->handler = handle_bad_irq; 559 + } 560 + 561 + ret = devm_gpiochip_add_data(&pdev->dev, &bank->chip, bank); 562 + if (ret) { 563 + dev_err(&pdev->dev, "failed to register gpio_chip %s, error code: %d\n", 564 + bank->chip.label, ret); 565 + return ret; 566 + } 567 + } 568 + return 0; 569 + } 570 + 571 + static int ma35_get_bank_data(struct ma35_pin_bank *bank) 572 + { 573 + bank->reg_base = fwnode_iomap(bank->fwnode, 0); 574 + if (IS_ERR(bank->reg_base)) 575 + return PTR_ERR(bank->reg_base); 576 + 577 + bank->irq = fwnode_irq_get(bank->fwnode, 0); 578 + 579 + bank->nr_pins = MA35_GPIO_PORT_MAX; 580 + 581 + bank->clk = of_clk_get(to_of_node(bank->fwnode), 0); 582 + if (IS_ERR(bank->clk)) 583 + return PTR_ERR(bank->clk); 584 + 585 + return clk_prepare_enable(bank->clk); 586 + } 587 + 588 + static int ma35_pinctrl_get_soc_data(struct ma35_pinctrl *pctl, struct platform_device *pdev) 589 + { 590 + struct fwnode_handle *child; 591 + struct ma35_pin_ctrl *ctrl; 592 + struct ma35_pin_bank *bank; 593 + int i, id = 0; 594 + 595 + ctrl = pctl->ctrl; 596 + ctrl->nr_banks = MA35_GPIO_BANK_MAX; 597 + 598 + ctrl->pin_banks = devm_kcalloc(&pdev->dev, ctrl->nr_banks, 599 + sizeof(*ctrl->pin_banks), GFP_KERNEL); 600 + if (!ctrl->pin_banks) 601 + return -ENOMEM; 602 + 603 + for (i = 0; i < ctrl->nr_banks; i++) { 604 + ctrl->pin_banks[i].bank_num = i; 605 + ctrl->pin_banks[i].name = gpio_group_name[i]; 606 + } 607 + 608 + for_each_gpiochip_node(&pdev->dev, child) { 609 + bank = &ctrl->pin_banks[id]; 610 + bank->fwnode = child; 611 + bank->regmap = pctl->regmap; 612 + bank->dev = &pdev->dev; 613 + if (!ma35_get_bank_data(bank)) 614 + bank->valid = true; 615 + id++; 616 + } 617 + return 0; 618 + } 619 + 620 + static void ma35_gpio_cla_port(unsigned int gpio_num, unsigned int *group, 621 + unsigned int *num) 622 + { 623 + *group = gpio_num / MA35_GPIO_PORT_MAX; 624 + *num = gpio_num % MA35_GPIO_PORT_MAX; 625 + } 626 + 627 + static int ma35_pinconf_set_pull(struct ma35_pinctrl *npctl, unsigned int pin, 628 + int pull_up) 629 + { 630 + unsigned int port, group_num; 631 + void __iomem *base; 632 + u32 regval, pull_sel = MA35_GP_PUSEL_DISABLE; 633 + 634 + ma35_gpio_cla_port(pin, &group_num, &port); 635 + base = npctl->ctrl->pin_banks[group_num].reg_base; 636 + 637 + regval = readl(base + MA35_GP_REG_PUSEL); 638 + regval &= ~MA35_GP_PUSEL_MASK(port); 639 + 640 + switch (pull_up) { 641 + case PIN_CONFIG_BIAS_PULL_UP: 642 + pull_sel = MA35_GP_PUSEL_PULL_UP; 643 + break; 644 + 645 + case PIN_CONFIG_BIAS_PULL_DOWN: 646 + pull_sel = MA35_GP_PUSEL_PULL_DOWN; 647 + break; 648 + 649 + case PIN_CONFIG_BIAS_DISABLE: 650 + pull_sel = MA35_GP_PUSEL_DISABLE; 651 + break; 652 + } 653 + 654 + regval |= field_prep(MA35_GP_PUSEL_MASK(port), pull_sel); 655 + writel(regval, base + MA35_GP_REG_PUSEL); 656 + 657 + return 0; 658 + } 659 + 660 + static int ma35_pinconf_get_output(struct ma35_pinctrl *npctl, unsigned int pin) 661 + { 662 + unsigned int port, group_num; 663 + void __iomem *base; 664 + u32 mode; 665 + 666 + ma35_gpio_cla_port(pin, &group_num, &port); 667 + base = npctl->ctrl->pin_banks[group_num].reg_base; 668 + 669 + mode = ma35_gpio_get_mode(base + MA35_GP_REG_MODE, port); 670 + if (mode == MA35_GP_MODE_OUTPUT) 671 + return 1; 672 + 673 + return 0; 674 + } 675 + 676 + static int ma35_pinconf_get_pull(struct ma35_pinctrl *npctl, unsigned int pin) 677 + { 678 + unsigned int port, group_num; 679 + void __iomem *base; 680 + u32 regval, pull_sel; 681 + 682 + ma35_gpio_cla_port(pin, &group_num, &port); 683 + base = npctl->ctrl->pin_banks[group_num].reg_base; 684 + 685 + regval = readl(base + MA35_GP_REG_PUSEL); 686 + 687 + pull_sel = field_get(MA35_GP_PUSEL_MASK(port), regval); 688 + 689 + switch (pull_sel) { 690 + case MA35_GP_PUSEL_PULL_UP: 691 + return PIN_CONFIG_BIAS_PULL_UP; 692 + 693 + case MA35_GP_PUSEL_PULL_DOWN: 694 + return PIN_CONFIG_BIAS_PULL_DOWN; 695 + 696 + case MA35_GP_PUSEL_DISABLE: 697 + return PIN_CONFIG_BIAS_DISABLE; 698 + } 699 + 700 + return PIN_CONFIG_BIAS_DISABLE; 701 + } 702 + 703 + static int ma35_pinconf_set_output(struct ma35_pinctrl *npctl, unsigned int pin, bool out) 704 + { 705 + unsigned int port, group_num; 706 + void __iomem *base; 707 + 708 + ma35_gpio_cla_port(pin, &group_num, &port); 709 + base = npctl->ctrl->pin_banks[group_num].reg_base; 710 + 711 + ma35_gpio_set_mode(base + MA35_GP_REG_MODE, port, MA35_GP_MODE_OUTPUT); 712 + 713 + return 0; 714 + } 715 + 716 + static int ma35_pinconf_get_power_source(struct ma35_pinctrl *npctl, unsigned int pin) 717 + { 718 + unsigned int port, group_num; 719 + void __iomem *base; 720 + u32 regval; 721 + 722 + ma35_gpio_cla_port(pin, &group_num, &port); 723 + base = npctl->ctrl->pin_banks[group_num].reg_base; 724 + 725 + regval = readl(base + MA35_GP_REG_SPW); 726 + 727 + if (regval & BIT(port)) 728 + return MVOLT_3300; 729 + else 730 + return MVOLT_1800; 731 + } 732 + 733 + static int ma35_pinconf_set_power_source(struct ma35_pinctrl *npctl, 734 + unsigned int pin, int arg) 735 + { 736 + unsigned int port, group_num; 737 + void __iomem *base; 738 + u32 regval; 739 + 740 + if ((arg != MVOLT_1800) && (arg != MVOLT_3300)) 741 + return -EINVAL; 742 + 743 + ma35_gpio_cla_port(pin, &group_num, &port); 744 + base = npctl->ctrl->pin_banks[group_num].reg_base; 745 + 746 + regval = readl(base + MA35_GP_REG_SPW); 747 + 748 + if (arg == MVOLT_1800) 749 + regval &= ~BIT(port); 750 + else 751 + regval |= BIT(port); 752 + 753 + writel(regval, base + MA35_GP_REG_SPW); 754 + 755 + return 0; 756 + } 757 + 758 + static int ma35_pinconf_get_drive_strength(struct ma35_pinctrl *npctl, unsigned int pin, 759 + u32 *strength) 760 + { 761 + unsigned int port, group_num; 762 + void __iomem *base; 763 + u32 regval, ds_val; 764 + 765 + ma35_gpio_cla_port(pin, &group_num, &port); 766 + base = npctl->ctrl->pin_banks[group_num].reg_base; 767 + 768 + regval = readl(base + MA35_GP_DS_REG(port)); 769 + ds_val = field_get(MA35_GP_DS_MASK(port), regval); 770 + 771 + if (ma35_pinconf_get_power_source(npctl, pin) == MVOLT_1800) 772 + *strength = ds_1800mv_tbl[ds_val]; 773 + else 774 + *strength = ds_3300mv_tbl[ds_val]; 775 + 776 + return 0; 777 + } 778 + 779 + static int ma35_pinconf_set_drive_strength(struct ma35_pinctrl *npctl, unsigned int pin, 780 + int strength) 781 + { 782 + unsigned int port, group_num; 783 + void __iomem *base; 784 + int i, ds_val = -1; 785 + u32 regval; 786 + 787 + if (ma35_pinconf_get_power_source(npctl, pin) == MVOLT_1800) { 788 + for (i = 0; i < ARRAY_SIZE(ds_1800mv_tbl); i++) { 789 + if (ds_1800mv_tbl[i] == strength) { 790 + ds_val = i; 791 + break; 792 + } 793 + } 794 + } else { 795 + for (i = 0; i < ARRAY_SIZE(ds_3300mv_tbl); i++) { 796 + if (ds_3300mv_tbl[i] == strength) { 797 + ds_val = i; 798 + break; 799 + } 800 + } 801 + } 802 + if (ds_val == -1) 803 + return -EINVAL; 804 + 805 + ma35_gpio_cla_port(pin, &group_num, &port); 806 + base = npctl->ctrl->pin_banks[group_num].reg_base; 807 + 808 + regval = readl(base + MA35_GP_DS_REG(port)); 809 + regval &= ~MA35_GP_DS_MASK(port); 810 + regval |= field_prep(MA35_GP_DS_MASK(port), ds_val); 811 + 812 + writel(regval, base + MA35_GP_DS_REG(port)); 813 + 814 + return 0; 815 + } 816 + 817 + static int ma35_pinconf_get_schmitt_enable(struct ma35_pinctrl *npctl, unsigned int pin) 818 + { 819 + unsigned int port, group_num; 820 + void __iomem *base; 821 + u32 regval; 822 + 823 + ma35_gpio_cla_port(pin, &group_num, &port); 824 + base = npctl->ctrl->pin_banks[group_num].reg_base; 825 + 826 + regval = readl(base + MA35_GP_REG_SMTEN); 827 + 828 + return !!(regval & BIT(port)); 829 + } 830 + 831 + static int ma35_pinconf_set_schmitt(struct ma35_pinctrl *npctl, unsigned int pin, int enable) 832 + { 833 + unsigned int port, group_num; 834 + void __iomem *base; 835 + u32 regval; 836 + 837 + ma35_gpio_cla_port(pin, &group_num, &port); 838 + base = npctl->ctrl->pin_banks[group_num].reg_base; 839 + 840 + regval = readl(base + MA35_GP_REG_SMTEN); 841 + 842 + if (enable) 843 + regval |= BIT(port); 844 + else 845 + regval &= ~BIT(port); 846 + 847 + writel(regval, base + MA35_GP_REG_SMTEN); 848 + 849 + return 0; 850 + } 851 + 852 + static int ma35_pinconf_get_slew_rate(struct ma35_pinctrl *npctl, unsigned int pin) 853 + { 854 + unsigned int port, group_num; 855 + void __iomem *base; 856 + u32 regval; 857 + 858 + ma35_gpio_cla_port(pin, &group_num, &port); 859 + base = npctl->ctrl->pin_banks[group_num].reg_base; 860 + 861 + regval = readl(base + MA35_GP_REG_SLEWCTL); 862 + 863 + return field_get(MA35_GP_SLEWCTL_MASK(port), regval); 864 + } 865 + 866 + static int ma35_pinconf_set_slew_rate(struct ma35_pinctrl *npctl, unsigned int pin, int rate) 867 + { 868 + unsigned int port, group_num; 869 + void __iomem *base; 870 + u32 regval; 871 + 872 + ma35_gpio_cla_port(pin, &group_num, &port); 873 + base = npctl->ctrl->pin_banks[group_num].reg_base; 874 + 875 + regval = readl(base + MA35_GP_REG_SLEWCTL); 876 + regval &= ~MA35_GP_SLEWCTL_MASK(port); 877 + regval |= field_prep(MA35_GP_SLEWCTL_MASK(port), rate); 878 + 879 + writel(regval, base + MA35_GP_REG_SLEWCTL); 880 + 881 + return 0; 882 + } 883 + 884 + static int ma35_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin, unsigned long *config) 885 + { 886 + struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 887 + enum pin_config_param param = pinconf_to_config_param(*config); 888 + u32 arg; 889 + int ret; 890 + 891 + switch (param) { 892 + case PIN_CONFIG_BIAS_DISABLE: 893 + case PIN_CONFIG_BIAS_PULL_DOWN: 894 + case PIN_CONFIG_BIAS_PULL_UP: 895 + if (ma35_pinconf_get_pull(npctl, pin) != param) 896 + return -EINVAL; 897 + arg = 1; 898 + break; 899 + 900 + case PIN_CONFIG_DRIVE_STRENGTH: 901 + ret = ma35_pinconf_get_drive_strength(npctl, pin, &arg); 902 + if (ret) 903 + return ret; 904 + break; 905 + 906 + case PIN_CONFIG_INPUT_SCHMITT_ENABLE: 907 + arg = ma35_pinconf_get_schmitt_enable(npctl, pin); 908 + break; 909 + 910 + case PIN_CONFIG_SLEW_RATE: 911 + arg = ma35_pinconf_get_slew_rate(npctl, pin); 912 + break; 913 + 914 + case PIN_CONFIG_OUTPUT_ENABLE: 915 + arg = ma35_pinconf_get_output(npctl, pin); 916 + break; 917 + 918 + case PIN_CONFIG_POWER_SOURCE: 919 + arg = ma35_pinconf_get_power_source(npctl, pin); 920 + break; 921 + 922 + default: 923 + return -EINVAL; 924 + } 925 + *config = pinconf_to_config_packed(param, arg); 926 + 927 + return 0; 928 + } 929 + 930 + static int ma35_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin, 931 + unsigned long *configs, unsigned int num_configs) 932 + { 933 + struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 934 + enum pin_config_param param; 935 + unsigned int arg = 0; 936 + int i, ret = 0; 937 + 938 + for (i = 0; i < num_configs; i++) { 939 + param = pinconf_to_config_param(configs[i]); 940 + arg = pinconf_to_config_argument(configs[i]); 941 + 942 + switch (param) { 943 + case PIN_CONFIG_BIAS_DISABLE: 944 + case PIN_CONFIG_BIAS_PULL_UP: 945 + case PIN_CONFIG_BIAS_PULL_DOWN: 946 + ret = ma35_pinconf_set_pull(npctl, pin, param); 947 + break; 948 + 949 + case PIN_CONFIG_DRIVE_STRENGTH: 950 + ret = ma35_pinconf_set_drive_strength(npctl, pin, arg); 951 + break; 952 + 953 + case PIN_CONFIG_INPUT_SCHMITT_ENABLE: 954 + ret = ma35_pinconf_set_schmitt(npctl, pin, 1); 955 + break; 956 + 957 + case PIN_CONFIG_INPUT_SCHMITT: 958 + ret = ma35_pinconf_set_schmitt(npctl, pin, arg); 959 + break; 960 + 961 + case PIN_CONFIG_SLEW_RATE: 962 + ret = ma35_pinconf_set_slew_rate(npctl, pin, arg); 963 + break; 964 + 965 + case PIN_CONFIG_OUTPUT_ENABLE: 966 + ret = ma35_pinconf_set_output(npctl, pin, arg); 967 + break; 968 + 969 + case PIN_CONFIG_POWER_SOURCE: 970 + ret = ma35_pinconf_set_power_source(npctl, pin, arg); 971 + break; 972 + 973 + default: 974 + return -EINVAL; 975 + } 976 + 977 + if (ret) 978 + break; 979 + } 980 + return ret; 981 + } 982 + 983 + static const struct pinconf_ops ma35_pinconf_ops = { 984 + .pin_config_get = ma35_pinconf_get, 985 + .pin_config_set = ma35_pinconf_set, 986 + .is_generic = true, 987 + }; 988 + 989 + static int ma35_pinctrl_parse_groups(struct device_node *np, struct ma35_pin_group *grp, 990 + struct ma35_pinctrl *npctl, u32 index) 991 + { 992 + struct ma35_pin_setting *pin; 993 + unsigned long *configs; 994 + unsigned int nconfigs; 995 + int i, j, count, ret; 996 + u32 *elems; 997 + 998 + grp->name = np->name; 999 + 1000 + ret = pinconf_generic_parse_dt_config(np, NULL, &configs, &nconfigs); 1001 + if (ret) 1002 + return ret; 1003 + 1004 + count = of_property_count_elems_of_size(np, "nuvoton,pins", sizeof(u32)); 1005 + if (!count || count % 3) 1006 + return -EINVAL; 1007 + 1008 + elems = devm_kmalloc_array(npctl->dev, count, sizeof(u32), GFP_KERNEL); 1009 + if (!elems) 1010 + return -ENOMEM; 1011 + 1012 + ret = of_property_read_u32_array(np, "nuvoton,pins", elems, count); 1013 + if (ret) 1014 + return -EINVAL; 1015 + 1016 + grp->npins = count / 3; 1017 + 1018 + grp->pins = devm_kcalloc(npctl->dev, grp->npins, sizeof(*grp->pins), GFP_KERNEL); 1019 + if (!grp->pins) 1020 + return -ENOMEM; 1021 + 1022 + grp->settings = devm_kcalloc(npctl->dev, grp->npins, sizeof(*grp->settings), GFP_KERNEL); 1023 + if (!grp->settings) 1024 + return -ENOMEM; 1025 + 1026 + pin = grp->settings; 1027 + 1028 + for (i = 0, j = 0; i < count; i += 3, j++) { 1029 + pin->offset = elems[i] * MA35_MFP_REG_SZ_PER_BANK + MA35_MFP_REG_BASE; 1030 + pin->shift = (elems[i + 1] * MA35_MFP_BITS_PER_PORT) % 32; 1031 + pin->muxval = elems[i + 2]; 1032 + pin->configs = configs; 1033 + pin->nconfigs = nconfigs; 1034 + grp->pins[j] = npctl->info->get_pin_num(pin->offset, pin->shift); 1035 + pin++; 1036 + } 1037 + return 0; 1038 + } 1039 + 1040 + static int ma35_pinctrl_parse_functions(struct device_node *np, struct ma35_pinctrl *npctl, 1041 + u32 index) 1042 + { 1043 + struct device_node *child; 1044 + struct ma35_pin_func *func; 1045 + struct ma35_pin_group *grp; 1046 + static u32 grp_index; 1047 + u32 ret, i = 0; 1048 + 1049 + dev_dbg(npctl->dev, "parse function(%d): %s\n", index, np->name); 1050 + 1051 + func = &npctl->functions[index]; 1052 + func->name = np->name; 1053 + func->ngroups = of_get_child_count(np); 1054 + 1055 + if (func->ngroups <= 0) 1056 + return 0; 1057 + 1058 + func->groups = devm_kcalloc(npctl->dev, func->ngroups, sizeof(char *), GFP_KERNEL); 1059 + if (!func->groups) 1060 + return -ENOMEM; 1061 + 1062 + for_each_child_of_node(np, child) { 1063 + func->groups[i] = child->name; 1064 + grp = &npctl->groups[grp_index++]; 1065 + ret = ma35_pinctrl_parse_groups(child, grp, npctl, i++); 1066 + if (ret) { 1067 + of_node_put(child); 1068 + return ret; 1069 + } 1070 + } 1071 + return 0; 1072 + } 1073 + 1074 + static int ma35_pinctrl_probe_dt(struct platform_device *pdev, struct ma35_pinctrl *npctl) 1075 + { 1076 + struct fwnode_handle *child; 1077 + u32 idx = 0; 1078 + int ret; 1079 + 1080 + device_for_each_child_node(&pdev->dev, child) { 1081 + if (fwnode_property_present(child, "gpio-controller")) 1082 + continue; 1083 + npctl->nfunctions++; 1084 + npctl->ngroups += of_get_child_count(to_of_node(child)); 1085 + } 1086 + 1087 + if (!npctl->nfunctions) 1088 + return -EINVAL; 1089 + 1090 + npctl->functions = devm_kcalloc(&pdev->dev, npctl->nfunctions, 1091 + sizeof(*npctl->functions), GFP_KERNEL); 1092 + if (!npctl->functions) 1093 + return -ENOMEM; 1094 + 1095 + npctl->groups = devm_kcalloc(&pdev->dev, npctl->ngroups, 1096 + sizeof(*npctl->groups), GFP_KERNEL); 1097 + if (!npctl->groups) 1098 + return -ENOMEM; 1099 + 1100 + device_for_each_child_node(&pdev->dev, child) { 1101 + if (fwnode_property_present(child, "gpio-controller")) 1102 + continue; 1103 + 1104 + ret = ma35_pinctrl_parse_functions(to_of_node(child), npctl, idx++); 1105 + if (ret) { 1106 + fwnode_handle_put(child); 1107 + dev_err(&pdev->dev, "failed to parse function\n"); 1108 + return ret; 1109 + } 1110 + } 1111 + return 0; 1112 + } 1113 + 1114 + int ma35_pinctrl_probe(struct platform_device *pdev, const struct ma35_pinctrl_soc_info *info) 1115 + { 1116 + struct pinctrl_desc *ma35_pinctrl_desc; 1117 + struct device *dev = &pdev->dev; 1118 + struct ma35_pinctrl *npctl; 1119 + int ret; 1120 + 1121 + if (!info || !info->pins || !info->npins) { 1122 + dev_err(&pdev->dev, "wrong pinctrl info\n"); 1123 + return -EINVAL; 1124 + } 1125 + 1126 + npctl = devm_kzalloc(&pdev->dev, sizeof(*npctl), GFP_KERNEL); 1127 + if (!npctl) 1128 + return -ENOMEM; 1129 + 1130 + ma35_pinctrl_desc = devm_kzalloc(&pdev->dev, sizeof(*ma35_pinctrl_desc), GFP_KERNEL); 1131 + if (!ma35_pinctrl_desc) 1132 + return -ENOMEM; 1133 + 1134 + npctl->ctrl = devm_kzalloc(&pdev->dev, sizeof(*npctl->ctrl), GFP_KERNEL); 1135 + if (!npctl->ctrl) 1136 + return -ENOMEM; 1137 + 1138 + ma35_pinctrl_desc->name = dev_name(&pdev->dev); 1139 + ma35_pinctrl_desc->pins = info->pins; 1140 + ma35_pinctrl_desc->npins = info->npins; 1141 + ma35_pinctrl_desc->pctlops = &ma35_pctrl_ops; 1142 + ma35_pinctrl_desc->pmxops = &ma35_pmx_ops; 1143 + ma35_pinctrl_desc->confops = &ma35_pinconf_ops; 1144 + ma35_pinctrl_desc->owner = THIS_MODULE; 1145 + 1146 + npctl->info = info; 1147 + npctl->dev = &pdev->dev; 1148 + 1149 + npctl->regmap = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "nuvoton,sys"); 1150 + if (IS_ERR(npctl->regmap)) 1151 + return dev_err_probe(&pdev->dev, PTR_ERR(npctl->regmap), 1152 + "No syscfg phandle specified\n"); 1153 + 1154 + ret = ma35_pinctrl_get_soc_data(npctl, pdev); 1155 + if (ret) 1156 + return dev_err_probe(&pdev->dev, ret, "fail to get soc data\n"); 1157 + 1158 + platform_set_drvdata(pdev, npctl); 1159 + 1160 + ret = ma35_pinctrl_probe_dt(pdev, npctl); 1161 + if (ret) 1162 + return dev_err_probe(&pdev->dev, ret, "fail to probe MA35 pinctrl dt\n"); 1163 + 1164 + ret = devm_pinctrl_register_and_init(dev, ma35_pinctrl_desc, npctl, &npctl->pctl); 1165 + if (ret) 1166 + return dev_err_probe(&pdev->dev, ret, "fail to register MA35 pinctrl\n"); 1167 + 1168 + ret = pinctrl_enable(npctl->pctl); 1169 + if (ret) 1170 + return dev_err_probe(&pdev->dev, ret, "fail to enable MA35 pinctrl\n"); 1171 + 1172 + return ma35_gpiolib_register(pdev, npctl); 1173 + } 1174 + 1175 + int ma35_pinctrl_suspend(struct device *dev) 1176 + { 1177 + struct ma35_pinctrl *npctl = dev_get_drvdata(dev); 1178 + 1179 + return pinctrl_force_sleep(npctl->pctl); 1180 + } 1181 + 1182 + int ma35_pinctrl_resume(struct device *dev) 1183 + { 1184 + struct ma35_pinctrl *npctl = dev_get_drvdata(dev); 1185 + 1186 + return pinctrl_force_default(npctl->pctl); 1187 + }
+52
drivers/pinctrl/nuvoton/pinctrl-ma35.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + /* 3 + * Copyright (C) 2024 Nuvoton Technology Corp. 4 + * 5 + * Author: Shan-Chun Hung <schung@nuvoton.com> 6 + * * Jacky Huang <ychuang3@nuvoton.com> 7 + */ 8 + #ifndef __PINCTRL_MA35_H 9 + #define __PINCTRL_MA35_H 10 + 11 + #include <linux/pinctrl/pinconf-generic.h> 12 + #include <linux/pinctrl/pinmux.h> 13 + #include <linux/platform_device.h> 14 + 15 + struct ma35_mux_desc { 16 + const char *name; 17 + u32 muxval; 18 + }; 19 + 20 + struct ma35_pin_data { 21 + u32 offset; 22 + u32 shift; 23 + struct ma35_mux_desc *muxes; 24 + }; 25 + 26 + struct ma35_pinctrl_soc_info { 27 + const struct pinctrl_pin_desc *pins; 28 + unsigned int npins; 29 + int (*get_pin_num)(int offset, int shift); 30 + }; 31 + 32 + #define MA35_PIN(num, n, o, s, ...) { \ 33 + .number = num, \ 34 + .name = #n, \ 35 + .drv_data = &(struct ma35_pin_data) { \ 36 + .offset = o, \ 37 + .shift = s, \ 38 + .muxes = (struct ma35_mux_desc[]) { \ 39 + __VA_ARGS__, { } }, \ 40 + }, \ 41 + } 42 + 43 + #define MA35_MUX(_val, _name) { \ 44 + .name = _name, \ 45 + .muxval = _val, \ 46 + } 47 + 48 + int ma35_pinctrl_probe(struct platform_device *pdev, const struct ma35_pinctrl_soc_info *info); 49 + int ma35_pinctrl_suspend(struct device *dev); 50 + int ma35_pinctrl_resume(struct device *dev); 51 + 52 + #endif /* __PINCTRL_MA35_H */
+1799
drivers/pinctrl/nuvoton/pinctrl-ma35d1.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * Copyright (C) 2024 Nuvoton Technology Corp. 4 + * 5 + * Author: Shan-Chun Hung <schung@nuvoton.com> 6 + * * Jacky Huang <ychuang3@nuvoton.com> 7 + */ 8 + #include <linux/init.h> 9 + #include <linux/io.h> 10 + #include <linux/mod_devicetable.h> 11 + #include <linux/module.h> 12 + #include <linux/of.h> 13 + #include <linux/platform_device.h> 14 + #include <linux/pm.h> 15 + 16 + #include <linux/pinctrl/pinctrl.h> 17 + 18 + #include "pinctrl-ma35.h" 19 + 20 + static const struct pinctrl_pin_desc ma35d1_pins[] = { 21 + MA35_PIN(0, PA0, 0x80, 0x0, 22 + MA35_MUX(0x0, "GPA0"), 23 + MA35_MUX(0x2, "UART1_nCTS"), 24 + MA35_MUX(0x3, "UART16_RXD"), 25 + MA35_MUX(0x6, "NAND_DATA0"), 26 + MA35_MUX(0x7, "EBI_AD0"), 27 + MA35_MUX(0x9, "EBI_ADR0")), 28 + MA35_PIN(1, PA1, 0x80, 0x4, 29 + MA35_MUX(0x0, "GPA1"), 30 + MA35_MUX(0x2, "UART1_nRTS"), 31 + MA35_MUX(0x3, "UART16_TXD"), 32 + MA35_MUX(0x6, "NAND_DATA1"), 33 + MA35_MUX(0x7, "EBI_AD1"), 34 + MA35_MUX(0x9, "EBI_ADR1")), 35 + MA35_PIN(2, PA2, 0x80, 0x8, 36 + MA35_MUX(0x0, "GPA2"), 37 + MA35_MUX(0x2, "UART1_RXD"), 38 + MA35_MUX(0x6, "NAND_DATA2"), 39 + MA35_MUX(0x7, "EBI_AD2"), 40 + MA35_MUX(0x9, "EBI_ADR2")), 41 + MA35_PIN(3, PA3, 0x80, 0xc, 42 + MA35_MUX(0x0, "GPA3"), 43 + MA35_MUX(0x2, "UART1_TXD"), 44 + MA35_MUX(0x6, "NAND_DATA3"), 45 + MA35_MUX(0x7, "EBI_AD3"), 46 + MA35_MUX(0x9, "EBI_ADR3")), 47 + MA35_PIN(4, PA4, 0x80, 0x10, 48 + MA35_MUX(0x0, "GPA4"), 49 + MA35_MUX(0x2, "UART3_nCTS"), 50 + MA35_MUX(0x3, "UART2_RXD"), 51 + MA35_MUX(0x6, "NAND_DATA4"), 52 + MA35_MUX(0x7, "EBI_AD4"), 53 + MA35_MUX(0x9, "EBI_ADR4")), 54 + MA35_PIN(5, PA5, 0x80, 0x14, 55 + MA35_MUX(0x0, "GPA5"), 56 + MA35_MUX(0x2, "UART3_nRTS"), 57 + MA35_MUX(0x3, "UART2_TXD"), 58 + MA35_MUX(0x6, "NAND_DATA5"), 59 + MA35_MUX(0x7, "EBI_AD5"), 60 + MA35_MUX(0x9, "EBI_ADR5")), 61 + MA35_PIN(6, PA6, 0x80, 0x18, 62 + MA35_MUX(0x0, "GPA6"), 63 + MA35_MUX(0x2, "UART3_RXD"), 64 + MA35_MUX(0x6, "NAND_DATA6"), 65 + MA35_MUX(0x7, "EBI_AD6"), 66 + MA35_MUX(0x9, "EBI_ADR6")), 67 + MA35_PIN(7, PA7, 0x80, 0x1c, 68 + MA35_MUX(0x0, "GPA7"), 69 + MA35_MUX(0x2, "UART3_TXD"), 70 + MA35_MUX(0x6, "NAND_DATA7"), 71 + MA35_MUX(0x7, "EBI_AD7"), 72 + MA35_MUX(0x9, "EBI_ADR7")), 73 + MA35_PIN(8, PA8, 0x84, 0x0, 74 + MA35_MUX(0x0, "GPA8"), 75 + MA35_MUX(0x2, "UART5_nCTS"), 76 + MA35_MUX(0x3, "UART4_RXD"), 77 + MA35_MUX(0x6, "NAND_RDY0"), 78 + MA35_MUX(0x7, "EBI_AD8"), 79 + MA35_MUX(0x9, "EBI_ADR8")), 80 + MA35_PIN(9, PA9, 0x84, 0x4, 81 + MA35_MUX(0x0, "GPA9"), 82 + MA35_MUX(0x2, "UART5_nRTS"), 83 + MA35_MUX(0x3, "UART4_TXD"), 84 + MA35_MUX(0x6, "NAND_nRE"), 85 + MA35_MUX(0x7, "EBI_AD9"), 86 + MA35_MUX(0x9, "EBI_ADR9")), 87 + MA35_PIN(10, PA10, 0x84, 0x8, 88 + MA35_MUX(0x0, "GPA10"), 89 + MA35_MUX(0x2, "UART5_RXD"), 90 + MA35_MUX(0x6, "NAND_nWE"), 91 + MA35_MUX(0x7, "EBI_AD10"), 92 + MA35_MUX(0x9, "EBI_ADR10")), 93 + MA35_PIN(11, PA11, 0x84, 0xc, 94 + MA35_MUX(0x0, "GPA11"), 95 + MA35_MUX(0x2, "UART5_TXD"), 96 + MA35_MUX(0x6, "NAND_CLE"), 97 + MA35_MUX(0x7, "EBI_AD11"), 98 + MA35_MUX(0x9, "EBI_ADR11")), 99 + MA35_PIN(12, PA12, 0x84, 0x10, 100 + MA35_MUX(0x0, "GPA12"), 101 + MA35_MUX(0x2, "UART7_nCTS"), 102 + MA35_MUX(0x3, "UART8_RXD"), 103 + MA35_MUX(0x6, "NAND_ALE"), 104 + MA35_MUX(0x7, "EBI_AD12"), 105 + MA35_MUX(0x9, "EBI_ADR12")), 106 + MA35_PIN(13, PA13, 0x84, 0x14, 107 + MA35_MUX(0x0, "GPA13"), 108 + MA35_MUX(0x2, "UART7_nRTS"), 109 + MA35_MUX(0x3, "UART8_TXD"), 110 + MA35_MUX(0x6, "NAND_nCS0"), 111 + MA35_MUX(0x7, "EBI_AD13"), 112 + MA35_MUX(0x9, "EBI_ADR13")), 113 + MA35_PIN(14, PA14, 0x84, 0x18, 114 + MA35_MUX(0x0, "GPA14"), 115 + MA35_MUX(0x2, "UART7_RXD"), 116 + MA35_MUX(0x3, "CAN3_RXD"), 117 + MA35_MUX(0x6, "NAND_nWP"), 118 + MA35_MUX(0x7, "EBI_AD14"), 119 + MA35_MUX(0x9, "EBI_ADR14")), 120 + MA35_PIN(15, PA15, 0x84, 0x1c, 121 + MA35_MUX(0x0, "GPA15"), 122 + MA35_MUX(0x1, "EPWM0_CH2"), 123 + MA35_MUX(0x2, "UART9_nCTS"), 124 + MA35_MUX(0x3, "UART6_RXD"), 125 + MA35_MUX(0x4, "I2C4_SDA"), 126 + MA35_MUX(0x5, "CAN2_RXD"), 127 + MA35_MUX(0x7, "EBI_ALE"), 128 + MA35_MUX(0x9, "QEI0_A"), 129 + MA35_MUX(0xb, "TM1"), 130 + MA35_MUX(0xe, "RGMII0_PPS"), 131 + MA35_MUX(0xf, "RMII0_PPS")), 132 + MA35_PIN(16, PB0, 0x88, 0x0, 133 + MA35_MUX(0x0, "GPB0"), 134 + MA35_MUX(0x8, "EADC0_CH0")), 135 + MA35_PIN(17, PB1, 0x88, 0x4, 136 + MA35_MUX(0x0, "GPB1"), 137 + MA35_MUX(0x8, "EADC0_CH1")), 138 + MA35_PIN(18, PB2, 0x88, 0x8, 139 + MA35_MUX(0x0, "GPB2"), 140 + MA35_MUX(0x8, "EADC0_CH2")), 141 + MA35_PIN(19, PB3, 0x88, 0xc, 142 + MA35_MUX(0x0, "GPB3"), 143 + MA35_MUX(0x8, "EADC0_CH3")), 144 + MA35_PIN(20, PB4, 0x88, 0x10, 145 + MA35_MUX(0x0, "GPB4"), 146 + MA35_MUX(0x8, "EADC0_CH4")), 147 + MA35_PIN(21, PB5, 0x88, 0x14, 148 + MA35_MUX(0x0, "GPB5"), 149 + MA35_MUX(0x8, "EADC0_CH5")), 150 + MA35_PIN(22, PB6, 0x88, 0x18, 151 + MA35_MUX(0x0, "GPB6"), 152 + MA35_MUX(0x8, "EADC0_CH6")), 153 + MA35_PIN(23, PB7, 0x88, 0x1c, 154 + MA35_MUX(0x0, "GPB7"), 155 + MA35_MUX(0x8, "EADC0_CH7")), 156 + MA35_PIN(24, PB8, 0x8c, 0x0, 157 + MA35_MUX(0x0, "GPB8"), 158 + MA35_MUX(0x1, "EPWM2_BRAKE0"), 159 + MA35_MUX(0x2, "UART2_nCTS"), 160 + MA35_MUX(0x3, "UART1_RXD"), 161 + MA35_MUX(0x4, "I2C2_SDA"), 162 + MA35_MUX(0x5, "SPI0_SS1"), 163 + MA35_MUX(0x6, "SPI0_I2SMCLK"), 164 + MA35_MUX(0x8, "ADC0_CH0"), 165 + MA35_MUX(0x9, "EBI_nCS0"), 166 + MA35_MUX(0xb, "TM4"), 167 + MA35_MUX(0xe, "QEI2_INDEX"), 168 + MA35_MUX(0xf, "KPI_ROW6")), 169 + MA35_PIN(25, PB9, 0x8c, 0x4, 170 + MA35_MUX(0x0, "GPB9"), 171 + MA35_MUX(0x1, "EPWM2_CH4"), 172 + MA35_MUX(0x2, "UART2_nRTS"), 173 + MA35_MUX(0x3, "UART1_TXD"), 174 + MA35_MUX(0x4, "I2C2_SCL"), 175 + MA35_MUX(0x5, "SPI0_CLK"), 176 + MA35_MUX(0x6, "I2S0_MCLK"), 177 + MA35_MUX(0x7, "CCAP1_HSYNC"), 178 + MA35_MUX(0x8, "ADC0_CH1"), 179 + MA35_MUX(0x9, "EBI_ALE"), 180 + MA35_MUX(0xa, "EBI_AD13"), 181 + MA35_MUX(0xb, "TM0_EXT"), 182 + MA35_MUX(0xc, "I2S1_MCLK"), 183 + MA35_MUX(0xd, "SC0_nCD"), 184 + MA35_MUX(0xe, "QEI2_A"), 185 + MA35_MUX(0xf, "KPI_ROW7")), 186 + MA35_PIN(26, PB10, 0x8c, 0x8, 187 + MA35_MUX(0x0, "GPB10"), 188 + MA35_MUX(0x1, "EPWM2_CH5"), 189 + MA35_MUX(0x2, "UART2_RXD"), 190 + MA35_MUX(0x3, "CAN0_RXD"), 191 + MA35_MUX(0x5, "SPI0_MOSI"), 192 + MA35_MUX(0x6, "EBI_MCLK"), 193 + MA35_MUX(0x7, "CCAP1_VSYNC"), 194 + MA35_MUX(0x8, "ADC0_CH2"), 195 + MA35_MUX(0x9, "EBI_ADR15"), 196 + MA35_MUX(0xa, "EBI_AD14"), 197 + MA35_MUX(0xb, "TM5"), 198 + MA35_MUX(0xc, "I2C1_SDA"), 199 + MA35_MUX(0xd, "INT1"), 200 + MA35_MUX(0xe, "QEI2_B")), 201 + MA35_PIN(27, PB11, 0x8c, 0xc, 202 + MA35_MUX(0x0, "GPB11"), 203 + MA35_MUX(0x1, "EPWM2_BRAKE1"), 204 + MA35_MUX(0x2, "UART2_TXD"), 205 + MA35_MUX(0x3, "CAN0_TXD"), 206 + MA35_MUX(0x5, "SPI0_MISO"), 207 + MA35_MUX(0x6, "I2S1_MCLK"), 208 + MA35_MUX(0x7, "CCAP1_SFIELD"), 209 + MA35_MUX(0x8, "ADC0_CH3"), 210 + MA35_MUX(0x9, "EBI_nCS2"), 211 + MA35_MUX(0xa, "EBI_ALE"), 212 + MA35_MUX(0xb, "TM5_EXT"), 213 + MA35_MUX(0xc, "I2C1_SCL"), 214 + MA35_MUX(0xd, "INT2"), 215 + MA35_MUX(0xe, "QEI2_INDEX")), 216 + MA35_PIN(28, PB12, 0x8c, 0x10, 217 + MA35_MUX(0x0, "GPB12"), 218 + MA35_MUX(0x1, "EPWM2_CH0"), 219 + MA35_MUX(0x2, "UART4_nCTS"), 220 + MA35_MUX(0x3, "UART3_RXD"), 221 + MA35_MUX(0x4, "I2C3_SDA"), 222 + MA35_MUX(0x5, "CAN2_RXD"), 223 + MA35_MUX(0x6, "I2S1_LRCK"), 224 + MA35_MUX(0x8, "ADC0_CH4"), 225 + MA35_MUX(0x9, "EBI_ADR16"), 226 + MA35_MUX(0xe, "ECAP2_IC0")), 227 + MA35_PIN(29, PB13, 0x8c, 0x14, 228 + MA35_MUX(0x0, "GPB13"), 229 + MA35_MUX(0x1, "EPWM2_CH1"), 230 + MA35_MUX(0x2, "UART4_nRTS"), 231 + MA35_MUX(0x3, "UART3_TXD"), 232 + MA35_MUX(0x4, "I2C3_SCL"), 233 + MA35_MUX(0x5, "CAN2_TXD"), 234 + MA35_MUX(0x6, "I2S1_BCLK"), 235 + MA35_MUX(0x8, "ADC0_CH5"), 236 + MA35_MUX(0x9, "EBI_ADR17"), 237 + MA35_MUX(0xe, "ECAP2_IC1")), 238 + MA35_PIN(30, PB14, 0x8c, 0x18, 239 + MA35_MUX(0x0, "GPB14"), 240 + MA35_MUX(0x1, "EPWM2_CH2"), 241 + MA35_MUX(0x2, "UART4_RXD"), 242 + MA35_MUX(0x3, "CAN1_RXD"), 243 + MA35_MUX(0x5, "I2C4_SDA"), 244 + MA35_MUX(0x6, "I2S1_DI"), 245 + MA35_MUX(0x8, "ADC0_CH6"), 246 + MA35_MUX(0x9, "EBI_ADR18"), 247 + MA35_MUX(0xe, "ECAP2_IC2")), 248 + MA35_PIN(31, PB15, 0x8c, 0x1c, 249 + MA35_MUX(0x0, "GPB15"), 250 + MA35_MUX(0x1, "EPWM2_CH3"), 251 + MA35_MUX(0x2, "UART4_TXD"), 252 + MA35_MUX(0x3, "CAN1_TXD"), 253 + MA35_MUX(0x5, "I2C4_SCL"), 254 + MA35_MUX(0x6, "I2S1_DO"), 255 + MA35_MUX(0x8, "ADC0_CH7"), 256 + MA35_MUX(0x9, "EBI_ADR19")), 257 + MA35_PIN(32, PC0, 0x90, 0x0, 258 + MA35_MUX(0x0, "GPC0"), 259 + MA35_MUX(0x4, "I2C4_SDA"), 260 + MA35_MUX(0x6, "SD0_CMD/eMMC0_CMD")), 261 + MA35_PIN(33, PC1, 0x90, 0x4, 262 + MA35_MUX(0x0, "GPC1"), 263 + MA35_MUX(0x4, "I2C4_SCL"), 264 + MA35_MUX(0x6, "SD0_CLK/eMMC0_CLK")), 265 + MA35_PIN(34, PC2, 0x90, 0x8, 266 + MA35_MUX(0x0, "GPC2"), 267 + MA35_MUX(0x3, "CAN0_RXD"), 268 + MA35_MUX(0x6, "SD0_DAT0/eMMC0_DAT0")), 269 + MA35_PIN(35, PC3, 0x90, 0xc, 270 + MA35_MUX(0x0, "GPC3"), 271 + MA35_MUX(0x3, "CAN0_TXD"), 272 + MA35_MUX(0x6, "SD0_DAT1/eMMC0_DAT1")), 273 + MA35_PIN(36, PC4, 0x90, 0x10, 274 + MA35_MUX(0x0, "GPC4"), 275 + MA35_MUX(0x4, "I2C5_SDA"), 276 + MA35_MUX(0x6, "SD0_DAT2/eMMC0_DAT2")), 277 + MA35_PIN(37, PC5, 0x90, 0x14, 278 + MA35_MUX(0x0, "GPC5"), 279 + MA35_MUX(0x4, "I2C5_SCL"), 280 + MA35_MUX(0x6, "SD0_DAT3/eMMC0_DAT3")), 281 + MA35_PIN(38, PC6, 0x90, 0x18, 282 + MA35_MUX(0x0, "GPC6"), 283 + MA35_MUX(0x3, "CAN1_RXD"), 284 + MA35_MUX(0x6, "SD0_nCD")), 285 + MA35_PIN(39, PC7, 0x90, 0x1c, 286 + MA35_MUX(0x0, "GPC7"), 287 + MA35_MUX(0x3, "CAN1_TXD"), 288 + MA35_MUX(0x6, "SD0_WP")), 289 + MA35_PIN(40, PC12, 0x94, 0x10, 290 + MA35_MUX(0x0, "GPC12"), 291 + MA35_MUX(0x2, "UART12_nCTS"), 292 + MA35_MUX(0x3, "UART11_RXD"), 293 + MA35_MUX(0x6, "LCM_DATA16")), 294 + MA35_PIN(41, PC13, 0x94, 0x14, 295 + MA35_MUX(0x0, "GPC13"), 296 + MA35_MUX(0x2, "UART12_nRTS"), 297 + MA35_MUX(0x3, "UART11_TXD"), 298 + MA35_MUX(0x6, "LCM_DATA17")), 299 + MA35_PIN(42, PC14, 0x94, 0x18, 300 + MA35_MUX(0x0, "GPC14"), 301 + MA35_MUX(0x2, "UART12_RXD"), 302 + MA35_MUX(0x6, "LCM_DATA18")), 303 + MA35_PIN(43, PC15, 0x94, 0x1c, 304 + MA35_MUX(0x0, "GPC15"), 305 + MA35_MUX(0x2, "UART12_TXD"), 306 + MA35_MUX(0x6, "LCM_DATA19"), 307 + MA35_MUX(0x7, "LCM_MPU_TE"), 308 + MA35_MUX(0x8, "LCM_MPU_VSYNC")), 309 + MA35_PIN(44, PD0, 0x98, 0x0, 310 + MA35_MUX(0x0, "GPD0"), 311 + MA35_MUX(0x2, "UART3_nCTS"), 312 + MA35_MUX(0x3, "UART4_RXD"), 313 + MA35_MUX(0x5, "QSPI0_SS0")), 314 + MA35_PIN(45, PD1, 0x98, 0x4, 315 + MA35_MUX(0x0, "GPD1"), 316 + MA35_MUX(0x2, "UART3_nRTS"), 317 + MA35_MUX(0x3, "UART4_TXD"), 318 + MA35_MUX(0x5, "QSPI0_CLK")), 319 + MA35_PIN(46, PD2, 0x98, 0x8, 320 + MA35_MUX(0x0, "GPD2"), 321 + MA35_MUX(0x2, "UART3_RXD"), 322 + MA35_MUX(0x5, "QSPI0_MOSI0")), 323 + MA35_PIN(47, PD3, 0x98, 0xc, 324 + MA35_MUX(0x0, "GPD3"), 325 + MA35_MUX(0x2, "UART3_TXD"), 326 + MA35_MUX(0x5, "QSPI0_MISO0")), 327 + MA35_PIN(48, PD4, 0x98, 0x10, 328 + MA35_MUX(0x0, "GPD4"), 329 + MA35_MUX(0x2, "UART1_nCTS"), 330 + MA35_MUX(0x3, "UART2_RXD"), 331 + MA35_MUX(0x4, "I2C2_SDA"), 332 + MA35_MUX(0x5, "QSPI0_MOSI1")), 333 + MA35_PIN(49, PD5, 0x98, 0x14, 334 + MA35_MUX(0x0, "GPD5"), 335 + MA35_MUX(0x2, "UART1_nRTS"), 336 + MA35_MUX(0x3, "UART2_TXD"), 337 + MA35_MUX(0x4, "I2C2_SCL"), 338 + MA35_MUX(0x5, "QSPI0_MISO1")), 339 + MA35_PIN(50, PD6, 0x98, 0x18, 340 + MA35_MUX(0x0, "GPD6"), 341 + MA35_MUX(0x1, "EPWM0_SYNC_IN"), 342 + MA35_MUX(0x2, "UART1_RXD"), 343 + MA35_MUX(0x5, "QSPI1_MOSI1"), 344 + MA35_MUX(0x6, "I2C0_SDA"), 345 + MA35_MUX(0x7, "I2S0_MCLK"), 346 + MA35_MUX(0x8, "EPWM0_CH0"), 347 + MA35_MUX(0x9, "EBI_AD5"), 348 + MA35_MUX(0xa, "SPI3_SS1"), 349 + MA35_MUX(0xb, "TRACE_CLK")), 350 + MA35_PIN(51, PD7, 0x98, 0x1c, 351 + MA35_MUX(0x0, "GPD7"), 352 + MA35_MUX(0x1, "EPWM0_SYNC_OUT"), 353 + MA35_MUX(0x2, "UART1_TXD"), 354 + MA35_MUX(0x5, "QSPI1_MISO1"), 355 + MA35_MUX(0x6, "I2C0_SCL"), 356 + MA35_MUX(0x7, "I2S1_MCLK"), 357 + MA35_MUX(0x8, "EPWM0_CH1"), 358 + MA35_MUX(0x9, "EBI_AD6"), 359 + MA35_MUX(0xa, "SC1_nCD"), 360 + MA35_MUX(0xb, "EADC0_ST")), 361 + MA35_PIN(52, PD8, 0x9c, 0x0, 362 + MA35_MUX(0x0, "GPD8"), 363 + MA35_MUX(0x1, "EPWM0_BRAKE0"), 364 + MA35_MUX(0x2, "UART16_nCTS"), 365 + MA35_MUX(0x3, "UART15_RXD"), 366 + MA35_MUX(0x5, "QSPI1_SS0"), 367 + MA35_MUX(0x7, "I2S1_LRCK"), 368 + MA35_MUX(0x8, "EPWM0_CH2"), 369 + MA35_MUX(0x9, "EBI_AD7"), 370 + MA35_MUX(0xa, "SC1_CLK"), 371 + MA35_MUX(0xb, "TM0")), 372 + MA35_PIN(53, PD9, 0x9c, 0x4, 373 + MA35_MUX(0x0, "GPD9"), 374 + MA35_MUX(0x1, "EPWM0_BRAKE1"), 375 + MA35_MUX(0x2, "UART16_nRTS"), 376 + MA35_MUX(0x3, "UART15_TXD"), 377 + MA35_MUX(0x5, "QSPI1_CLK"), 378 + MA35_MUX(0x7, "I2S1_BCLK"), 379 + MA35_MUX(0x8, "EPWM0_CH3"), 380 + MA35_MUX(0x9, "EBI_AD8"), 381 + MA35_MUX(0xa, "SC1_DAT"), 382 + MA35_MUX(0xb, "TM0_EXT")), 383 + MA35_PIN(54, PD10, 0x9c, 0x8, 384 + MA35_MUX(0x0, "GPD10"), 385 + MA35_MUX(0x1, "EPWM1_BRAKE0"), 386 + MA35_MUX(0x2, "UART16_RXD"), 387 + MA35_MUX(0x5, "QSPI1_MOSI0"), 388 + MA35_MUX(0x7, "I2S1_DI"), 389 + MA35_MUX(0x8, "EPWM0_CH4"), 390 + MA35_MUX(0x9, "EBI_AD9"), 391 + MA35_MUX(0xa, "SC1_RST"), 392 + MA35_MUX(0xb, "TM2")), 393 + MA35_PIN(55, PD11, 0x9c, 0xc, 394 + MA35_MUX(0x0, "GPD11"), 395 + MA35_MUX(0x1, "EPWM1_BRAKE1"), 396 + MA35_MUX(0x2, "UART16_TXD"), 397 + MA35_MUX(0x5, "QSPI1_MISO0"), 398 + MA35_MUX(0x7, "I2S1_DO"), 399 + MA35_MUX(0x8, "EPWM0_CH5"), 400 + MA35_MUX(0x9, "EBI_AD10"), 401 + MA35_MUX(0xa, "SC1_PWR"), 402 + MA35_MUX(0xb, "TM2_EXT")), 403 + MA35_PIN(56, PD12, 0x9c, 0x10, 404 + MA35_MUX(0x0, "GPD12"), 405 + MA35_MUX(0x1, "EPWM0_BRAKE0"), 406 + MA35_MUX(0x2, "UART11_TXD"), 407 + MA35_MUX(0x3, "UART10_RXD"), 408 + MA35_MUX(0x4, "I2C4_SDA"), 409 + MA35_MUX(0x6, "TRACE_DATA0"), 410 + MA35_MUX(0x7, "EBI_nCS1"), 411 + MA35_MUX(0x8, "EBI_AD4"), 412 + MA35_MUX(0x9, "QEI0_INDEX"), 413 + MA35_MUX(0xb, "TM5"), 414 + MA35_MUX(0xc, "I2S1_LRCK"), 415 + MA35_MUX(0xd, "INT1")), 416 + MA35_PIN(57, PD13, 0x9c, 0x14, 417 + MA35_MUX(0x0, "GPD13"), 418 + MA35_MUX(0x1, "EPWM0_BRAKE1"), 419 + MA35_MUX(0x2, "UART11_RXD"), 420 + MA35_MUX(0x3, "UART10_TXD"), 421 + MA35_MUX(0x4, "I2C4_SCL"), 422 + MA35_MUX(0x6, "TRACE_DATA1"), 423 + MA35_MUX(0x7, "EBI_nCS2"), 424 + MA35_MUX(0x8, "EBI_AD5"), 425 + MA35_MUX(0x9, "ECAP0_IC0"), 426 + MA35_MUX(0xb, "TM5_EXT"), 427 + MA35_MUX(0xc, "I2S1_BCLK")), 428 + MA35_PIN(58, PD14, 0x9c, 0x18, 429 + MA35_MUX(0x0, "GPD14"), 430 + MA35_MUX(0x1, "EPWM0_SYNC_IN"), 431 + MA35_MUX(0x2, "UART11_nCTS"), 432 + MA35_MUX(0x3, "CAN3_RXD"), 433 + MA35_MUX(0x6, "TRACE_DATA2"), 434 + MA35_MUX(0x7, "EBI_MCLK"), 435 + MA35_MUX(0x8, "EBI_AD6"), 436 + MA35_MUX(0x9, "ECAP0_IC1"), 437 + MA35_MUX(0xb, "TM6"), 438 + MA35_MUX(0xc, "I2S1_DI"), 439 + MA35_MUX(0xd, "INT3")), 440 + MA35_PIN(59, PD15, 0x9c, 0x1c, 441 + MA35_MUX(0x0, "GPD15"), 442 + MA35_MUX(0x1, "EPWM0_SYNC_OUT"), 443 + MA35_MUX(0x2, "UART11_nRTS"), 444 + MA35_MUX(0x3, "CAN3_TXD"), 445 + MA35_MUX(0x6, "TRACE_DATA3"), 446 + MA35_MUX(0x7, "EBI_ALE"), 447 + MA35_MUX(0x8, "EBI_AD7"), 448 + MA35_MUX(0x9, "ECAP0_IC2"), 449 + MA35_MUX(0xb, "TM6_EXT"), 450 + MA35_MUX(0xc, "I2S1_DO")), 451 + MA35_PIN(60, PE0, 0xa0, 0x0, 452 + MA35_MUX(0x0, "GPE0"), 453 + MA35_MUX(0x2, "UART9_nCTS"), 454 + MA35_MUX(0x3, "UART8_RXD"), 455 + MA35_MUX(0x7, "CCAP1_DATA0"), 456 + MA35_MUX(0x8, "RGMII0_MDC"), 457 + MA35_MUX(0x9, "RMII0_MDC")), 458 + MA35_PIN(61, PE1, 0xa0, 0x4, 459 + MA35_MUX(0x0, "GPE1"), 460 + MA35_MUX(0x2, "UART9_nRTS"), 461 + MA35_MUX(0x3, "UART8_TXD"), 462 + MA35_MUX(0x7, "CCAP1_DATA1"), 463 + MA35_MUX(0x8, "RGMII0_MDIO"), 464 + MA35_MUX(0x9, "RMII0_MDIO")), 465 + MA35_PIN(62, PE2, 0xa0, 0x8, 466 + MA35_MUX(0x0, "GPE2"), 467 + MA35_MUX(0x2, "UART9_RXD"), 468 + MA35_MUX(0x7, "CCAP1_DATA2"), 469 + MA35_MUX(0x8, "RGMII0_TXCTL"), 470 + MA35_MUX(0x9, "RMII0_TXEN")), 471 + MA35_PIN(63, PE3, 0xa0, 0xc, 472 + MA35_MUX(0x0, "GPE3"), 473 + MA35_MUX(0x2, "UART9_TXD"), 474 + MA35_MUX(0x7, "CCAP1_DATA3"), 475 + MA35_MUX(0x8, "RGMII0_TXD0"), 476 + MA35_MUX(0x9, "RMII0_TXD0")), 477 + MA35_PIN(64, PE4, 0xa0, 0x10, 478 + MA35_MUX(0x0, "GPE4"), 479 + MA35_MUX(0x2, "UART4_nCTS"), 480 + MA35_MUX(0x3, "UART3_RXD"), 481 + MA35_MUX(0x7, "CCAP1_DATA4"), 482 + MA35_MUX(0x8, "RGMII0_TXD1"), 483 + MA35_MUX(0x9, "RMII0_TXD1")), 484 + MA35_PIN(65, PE5, 0xa0, 0x14, 485 + MA35_MUX(0x0, "GPE5"), 486 + MA35_MUX(0x2, "UART4_nRTS"), 487 + MA35_MUX(0x3, "UART3_TXD"), 488 + MA35_MUX(0x7, "CCAP1_DATA5"), 489 + MA35_MUX(0x8, "RGMII0_RXCLK"), 490 + MA35_MUX(0x9, "RMII0_REFCLK")), 491 + MA35_PIN(66, PE6, 0xa0, 0x18, 492 + MA35_MUX(0x0, "GPE6"), 493 + MA35_MUX(0x2, "UART4_RXD"), 494 + MA35_MUX(0x7, "CCAP1_DATA6"), 495 + MA35_MUX(0x8, "RGMII0_RXCTL"), 496 + MA35_MUX(0x9, "RMII0_CRSDV")), 497 + MA35_PIN(67, PE7, 0xa0, 0x1c, 498 + MA35_MUX(0x0, "GPE7"), 499 + MA35_MUX(0x2, "UART4_TXD"), 500 + MA35_MUX(0x7, "CCAP1_DATA7"), 501 + MA35_MUX(0x8, "RGMII0_RXD0"), 502 + MA35_MUX(0x9, "RMII0_RXD0")), 503 + MA35_PIN(68, PE8, 0xa4, 0x0, 504 + MA35_MUX(0x0, "GPE8"), 505 + MA35_MUX(0x2, "UART13_nCTS"), 506 + MA35_MUX(0x3, "UART12_RXD"), 507 + MA35_MUX(0x7, "CCAP1_SCLK"), 508 + MA35_MUX(0x8, "RGMII0_RXD1"), 509 + MA35_MUX(0x9, "RMII0_RXD1")), 510 + MA35_PIN(69, PE9, 0xa4, 0x4, 511 + MA35_MUX(0x0, "GPE9"), 512 + MA35_MUX(0x2, "UART13_nRTS"), 513 + MA35_MUX(0x3, "UART12_TXD"), 514 + MA35_MUX(0x7, "CCAP1_PIXCLK"), 515 + MA35_MUX(0x8, "RGMII0_RXD2"), 516 + MA35_MUX(0x9, "RMII0_RXERR")), 517 + MA35_PIN(70, PE10, 0xa4, 0x8, 518 + MA35_MUX(0x0, "GPE10"), 519 + MA35_MUX(0x2, "UART15_nCTS"), 520 + MA35_MUX(0x3, "UART14_RXD"), 521 + MA35_MUX(0x5, "SPI1_SS0"), 522 + MA35_MUX(0x7, "CCAP1_HSYNC"), 523 + MA35_MUX(0x8, "RGMII0_RXD3")), 524 + MA35_PIN(71, PE11, 0xa4, 0xc, 525 + MA35_MUX(0x0, "GPE11"), 526 + MA35_MUX(0x2, "UART15_nRTS"), 527 + MA35_MUX(0x3, "UART14_TXD"), 528 + MA35_MUX(0x5, "SPI1_CLK"), 529 + MA35_MUX(0x7, "CCAP1_VSYNC"), 530 + MA35_MUX(0x8, "RGMII0_TXCLK")), 531 + MA35_PIN(72, PE12, 0xa4, 0x10, 532 + MA35_MUX(0x0, "GPE12"), 533 + MA35_MUX(0x2, "UART15_RXD"), 534 + MA35_MUX(0x5, "SPI1_MOSI"), 535 + MA35_MUX(0x7, "CCAP1_DATA8"), 536 + MA35_MUX(0x8, "RGMII0_TXD2")), 537 + MA35_PIN(73, PE13, 0xa4, 0x14, 538 + MA35_MUX(0x0, "GPE13"), 539 + MA35_MUX(0x2, "UART15_TXD"), 540 + MA35_MUX(0x5, "SPI1_MISO"), 541 + MA35_MUX(0x7, "CCAP1_DATA9"), 542 + MA35_MUX(0x8, "RGMII0_TXD3")), 543 + MA35_PIN(74, PE14, 0xa4, 0x18, 544 + MA35_MUX(0x0, "GPE14"), 545 + MA35_MUX(0x1, "UART0_TXD")), 546 + MA35_PIN(75, PE15, 0xa4, 0x1c, 547 + MA35_MUX(0x0, "GPE15"), 548 + MA35_MUX(0x1, "UART0_RXD")), 549 + MA35_PIN(76, PF0, 0xa8, 0x0, 550 + MA35_MUX(0x0, "GPF0"), 551 + MA35_MUX(0x2, "UART2_nCTS"), 552 + MA35_MUX(0x3, "UART1_RXD"), 553 + MA35_MUX(0x6, "RGMII0_RXD3"), 554 + MA35_MUX(0x8, "RGMII1_MDC"), 555 + MA35_MUX(0x9, "RMII1_MDC"), 556 + MA35_MUX(0xe, "KPI_COL0")), 557 + MA35_PIN(77, PF1, 0xa8, 0x4, 558 + MA35_MUX(0x0, "GPF1"), 559 + MA35_MUX(0x2, "UART2_nRTS"), 560 + MA35_MUX(0x3, "UART1_TXD"), 561 + MA35_MUX(0x6, "RGMII0_TXCLK"), 562 + MA35_MUX(0x8, "RGMII1_MDIO"), 563 + MA35_MUX(0x9, "RMII1_MDIO"), 564 + MA35_MUX(0xe, "KPI_COL1")), 565 + MA35_PIN(78, PF2, 0xa8, 0x8, 566 + MA35_MUX(0x0, "GPF2"), 567 + MA35_MUX(0x2, "UART2_RXD"), 568 + MA35_MUX(0x6, "RGMII0_TXD2"), 569 + MA35_MUX(0x8, "RGMII1_TXCTL"), 570 + MA35_MUX(0x9, "RMII1_TXEN"), 571 + MA35_MUX(0xe, "KPI_COL2")), 572 + MA35_PIN(79, PF3, 0xa8, 0xc, 573 + MA35_MUX(0x0, "GPF3"), 574 + MA35_MUX(0x2, "UART2_TXD"), 575 + MA35_MUX(0x6, "RGMII0_TXD3"), 576 + MA35_MUX(0x8, "RGMII1_TXD0"), 577 + MA35_MUX(0x9, "RMII1_TXD0"), 578 + MA35_MUX(0xe, "KPI_COL3")), 579 + MA35_PIN(80, PF4, 0xa8, 0x10, 580 + MA35_MUX(0x0, "GPF4"), 581 + MA35_MUX(0x2, "UART11_nCTS"), 582 + MA35_MUX(0x3, "UART10_RXD"), 583 + MA35_MUX(0x4, "I2S0_LRCK"), 584 + MA35_MUX(0x5, "SPI1_SS0"), 585 + MA35_MUX(0x8, "RGMII1_TXD1"), 586 + MA35_MUX(0x9, "RMII1_TXD1"), 587 + MA35_MUX(0xd, "CAN2_RXD"), 588 + MA35_MUX(0xe, "KPI_ROW0")), 589 + MA35_PIN(81, PF5, 0xa8, 0x14, 590 + MA35_MUX(0x0, "GPF5"), 591 + MA35_MUX(0x2, "UART11_nRTS"), 592 + MA35_MUX(0x3, "UART10_TXD"), 593 + MA35_MUX(0x4, "I2S0_BCLK"), 594 + MA35_MUX(0x5, "SPI1_CLK"), 595 + MA35_MUX(0x8, "RGMII1_RXCLK"), 596 + MA35_MUX(0x9, "RMII1_REFCLK"), 597 + MA35_MUX(0xd, "CAN2_TXD"), 598 + MA35_MUX(0xe, "KPI_ROW1")), 599 + MA35_PIN(82, PF6, 0xa8, 0x18, 600 + MA35_MUX(0x0, "GPF6"), 601 + MA35_MUX(0x2, "UART11_RXD"), 602 + MA35_MUX(0x4, "I2S0_DI"), 603 + MA35_MUX(0x5, "SPI1_MOSI"), 604 + MA35_MUX(0x8, "RGMII1_RXCTL"), 605 + MA35_MUX(0x9, "RMII1_CRSDV"), 606 + MA35_MUX(0xa, "I2C4_SDA"), 607 + MA35_MUX(0xd, "SC0_CLK"), 608 + MA35_MUX(0xe, "KPI_ROW2")), 609 + MA35_PIN(83, PF7, 0xa8, 0x1c, 610 + MA35_MUX(0x0, "GPF7"), 611 + MA35_MUX(0x2, "UART11_TXD"), 612 + MA35_MUX(0x4, "I2S0_DO"), 613 + MA35_MUX(0x5, "SPI1_MISO"), 614 + MA35_MUX(0x8, "RGMII1_RXD0"), 615 + MA35_MUX(0x9, "RMII1_RXD0"), 616 + MA35_MUX(0xa, "I2C4_SCL"), 617 + MA35_MUX(0xd, "SC0_DAT"), 618 + MA35_MUX(0xe, "KPI_ROW3")), 619 + MA35_PIN(84, PF8, 0xac, 0x0, 620 + MA35_MUX(0x0, "GPF8"), 621 + MA35_MUX(0x2, "UART13_RXD"), 622 + MA35_MUX(0x4, "I2C5_SDA"), 623 + MA35_MUX(0x5, "SPI0_SS0"), 624 + MA35_MUX(0x8, "RGMII1_RXD1"), 625 + MA35_MUX(0x9, "RMII1_RXD1"), 626 + MA35_MUX(0xd, "SC0_RST"), 627 + MA35_MUX(0xe, "KPI_COL4")), 628 + MA35_PIN(85, PF9, 0xac, 0x4, 629 + MA35_MUX(0x0, "GPF9"), 630 + MA35_MUX(0x2, "UART13_TXD"), 631 + MA35_MUX(0x4, "I2C5_SCL"), 632 + MA35_MUX(0x5, "SPI0_SS1"), 633 + MA35_MUX(0x8, "RGMII1_RXD2"), 634 + MA35_MUX(0x9, "RMII1_RXERR"), 635 + MA35_MUX(0xd, "SC0_PWR"), 636 + MA35_MUX(0xe, "KPI_COL5")), 637 + MA35_PIN(86, PF10, 0xac, 0x8, 638 + MA35_MUX(0x0, "GPF10"), 639 + MA35_MUX(0x2, "UART13_nCTS"), 640 + MA35_MUX(0x5, "I2S0_LRCK"), 641 + MA35_MUX(0x6, "SPI1_SS0"), 642 + MA35_MUX(0x8, "RGMII1_RXD3"), 643 + MA35_MUX(0x9, "SC0_CLK"), 644 + MA35_MUX(0xe, "KPI_COL6")), 645 + MA35_PIN(87, PF11, 0xac, 0xc, 646 + MA35_MUX(0x0, "GPF11"), 647 + MA35_MUX(0x2, "UART13_nRTS"), 648 + MA35_MUX(0x5, "I2S0_BCLK"), 649 + MA35_MUX(0x6, "SPI1_CLK"), 650 + MA35_MUX(0x8, "RGMII1_TXCLK"), 651 + MA35_MUX(0x9, "SC0_DAT"), 652 + MA35_MUX(0xe, "KPI_COL7")), 653 + MA35_PIN(88, PF12, 0xac, 0x10, 654 + MA35_MUX(0x0, "GPF12"), 655 + MA35_MUX(0x5, "I2S0_DI"), 656 + MA35_MUX(0x6, "SPI1_MOSI"), 657 + MA35_MUX(0x8, "RGMII1_TXD2"), 658 + MA35_MUX(0x9, "SC0_RST"), 659 + MA35_MUX(0xe, "KPI_ROW4")), 660 + MA35_PIN(89, PF13, 0xac, 0x14, 661 + MA35_MUX(0x0, "GPF13"), 662 + MA35_MUX(0x5, "I2S0_DO"), 663 + MA35_MUX(0x6, "SPI1_MISO"), 664 + MA35_MUX(0x8, "RGMII1_TXD3"), 665 + MA35_MUX(0x9, "SC0_PWR"), 666 + MA35_MUX(0xe, "KPI_ROW5")), 667 + MA35_PIN(90, PF14, 0xac, 0x18, 668 + MA35_MUX(0x0, "GPF14"), 669 + MA35_MUX(0x1, "EPWM2_BRAKE0"), 670 + MA35_MUX(0x2, "EADC0_ST"), 671 + MA35_MUX(0x3, "RGMII1_PPS"), 672 + MA35_MUX(0x4, "RMII1_PPS"), 673 + MA35_MUX(0x5, "SPI0_I2SMCLK"), 674 + MA35_MUX(0x6, "SPI1_I2SMCLK"), 675 + MA35_MUX(0x7, "CCAP1_SFIELD"), 676 + MA35_MUX(0x8, "RGMII0_PPS"), 677 + MA35_MUX(0x9, "RMII0_PPS"), 678 + MA35_MUX(0xb, "TM0"), 679 + MA35_MUX(0xc, "INT0"), 680 + MA35_MUX(0xd, "SPI1_SS1"), 681 + MA35_MUX(0xe, "QEI2_INDEX"), 682 + MA35_MUX(0xf, "I2S0_MCLK")), 683 + MA35_PIN(91, PF15, 0xac, 0x1c, 684 + MA35_MUX(0x0, "GPF15"), 685 + MA35_MUX(0x1, "HSUSB0_VBUSVLD")), 686 + MA35_PIN(92, PG0, 0xb0, 0x0, 687 + MA35_MUX(0x0, "GPG0"), 688 + MA35_MUX(0x1, "EPWM0_CH0"), 689 + MA35_MUX(0x2, "UART7_TXD"), 690 + MA35_MUX(0x3, "CAN3_TXD"), 691 + MA35_MUX(0x5, "SPI0_SS0"), 692 + MA35_MUX(0x6, "EADC0_ST"), 693 + MA35_MUX(0x7, "EBI_AD15"), 694 + MA35_MUX(0x9, "I2S1_MCLK"), 695 + MA35_MUX(0xa, "QEI0_INDEX"), 696 + MA35_MUX(0xb, "TM1"), 697 + MA35_MUX(0xc, "CLKO"), 698 + MA35_MUX(0xd, "INT0"), 699 + MA35_MUX(0xf, "EBI_ADR15")), 700 + MA35_PIN(93, PG1, 0xb0, 0x4, 701 + MA35_MUX(0x0, "GPG1"), 702 + MA35_MUX(0x1, "EPWM0_CH3"), 703 + MA35_MUX(0x2, "UART9_nRTS"), 704 + MA35_MUX(0x3, "UART6_TXD"), 705 + MA35_MUX(0x4, "I2C4_SCL"), 706 + MA35_MUX(0x5, "CAN2_TXD"), 707 + MA35_MUX(0x7, "EBI_nCS0"), 708 + MA35_MUX(0x9, "QEI0_B"), 709 + MA35_MUX(0xb, "TM1_EXT"), 710 + MA35_MUX(0xe, "RGMII1_PPS"), 711 + MA35_MUX(0xf, "RMII1_PPS")), 712 + MA35_PIN(94, PG2, 0xb0, 0x8, 713 + MA35_MUX(0x0, "GPG2"), 714 + MA35_MUX(0x1, "EPWM0_CH4"), 715 + MA35_MUX(0x2, "UART9_RXD"), 716 + MA35_MUX(0x3, "CAN0_RXD"), 717 + MA35_MUX(0x5, "SPI0_SS1"), 718 + MA35_MUX(0x7, "EBI_ADR16"), 719 + MA35_MUX(0x8, "EBI_nCS2"), 720 + MA35_MUX(0xa, "QEI0_A"), 721 + MA35_MUX(0xb, "TM3"), 722 + MA35_MUX(0xd, "INT1")), 723 + MA35_PIN(95, PG3, 0xb0, 0xc, 724 + MA35_MUX(0x0, "GPG3"), 725 + MA35_MUX(0x1, "EPWM0_CH5"), 726 + MA35_MUX(0x2, "UART9_TXD"), 727 + MA35_MUX(0x3, "CAN0_TXD"), 728 + MA35_MUX(0x5, "SPI0_I2SMCLK"), 729 + MA35_MUX(0x7, "EBI_ADR17"), 730 + MA35_MUX(0x8, "EBI_nCS1"), 731 + MA35_MUX(0x9, "EBI_MCLK"), 732 + MA35_MUX(0xa, "QEI0_B"), 733 + MA35_MUX(0xb, "TM3_EXT"), 734 + MA35_MUX(0xc, "I2S1_MCLK")), 735 + MA35_PIN(96, PG4, 0xb0, 0x10, 736 + MA35_MUX(0x0, "GPG4"), 737 + MA35_MUX(0x1, "EPWM1_CH0"), 738 + MA35_MUX(0x2, "UART5_nCTS"), 739 + MA35_MUX(0x3, "UART6_RXD"), 740 + MA35_MUX(0x5, "SPI3_SS0"), 741 + MA35_MUX(0x6, "QEI1_INDEX"), 742 + MA35_MUX(0x7, "EBI_ADR18"), 743 + MA35_MUX(0x8, "EBI_nCS0"), 744 + MA35_MUX(0x9, "I2S1_DO"), 745 + MA35_MUX(0xa, "SC1_CLK"), 746 + MA35_MUX(0xb, "TM4"), 747 + MA35_MUX(0xd, "INT2"), 748 + MA35_MUX(0xe, "ECAP1_IC2")), 749 + MA35_PIN(97, PG5, 0xb0, 0x14, 750 + MA35_MUX(0x0, "GPG5"), 751 + MA35_MUX(0x1, "EPWM1_CH1"), 752 + MA35_MUX(0x2, "UART5_nRTS"), 753 + MA35_MUX(0x3, "UART6_TXD"), 754 + MA35_MUX(0x5, "SPI3_CLK"), 755 + MA35_MUX(0x6, "ECAP0_IC0"), 756 + MA35_MUX(0x7, "EBI_ADR19"), 757 + MA35_MUX(0x8, "EBI_ALE"), 758 + MA35_MUX(0x9, "I2S1_DI"), 759 + MA35_MUX(0xa, "SC1_DAT"), 760 + MA35_MUX(0xb, "TM4_EXT")), 761 + MA35_PIN(98, PG6, 0xb0, 0x18, 762 + MA35_MUX(0x0, "GPG6"), 763 + MA35_MUX(0x1, "EPWM1_CH2"), 764 + MA35_MUX(0x2, "UART5_RXD"), 765 + MA35_MUX(0x3, "CAN1_RXD"), 766 + MA35_MUX(0x5, "SPI3_MOSI"), 767 + MA35_MUX(0x6, "ECAP0_IC1"), 768 + MA35_MUX(0x7, "EBI_nRD"), 769 + MA35_MUX(0x9, "I2S1_BCLK"), 770 + MA35_MUX(0xa, "SC1_RST"), 771 + MA35_MUX(0xb, "TM7"), 772 + MA35_MUX(0xd, "INT3")), 773 + MA35_PIN(99, PG7, 0xb0, 0x1c, 774 + MA35_MUX(0x0, "GPG7"), 775 + MA35_MUX(0x1, "EPWM1_CH3"), 776 + MA35_MUX(0x2, "UART5_TXD"), 777 + MA35_MUX(0x3, "CAN1_TXD"), 778 + MA35_MUX(0x5, "SPI3_MISO"), 779 + MA35_MUX(0x6, "ECAP0_IC2"), 780 + MA35_MUX(0x7, "EBI_nWR"), 781 + MA35_MUX(0x9, "I2S1_LRCK"), 782 + MA35_MUX(0xa, "SC1_PWR"), 783 + MA35_MUX(0xb, "TM7_EXT")), 784 + MA35_PIN(100, PG8, 0xb4, 0x0, 785 + MA35_MUX(0x0, "GPG8"), 786 + MA35_MUX(0x1, "EPWM1_CH4"), 787 + MA35_MUX(0x2, "UART12_RXD"), 788 + MA35_MUX(0x3, "CAN3_RXD"), 789 + MA35_MUX(0x5, "SPI2_SS0"), 790 + MA35_MUX(0x6, "LCM_VSYNC"), 791 + MA35_MUX(0x7, "I2C3_SDA"), 792 + MA35_MUX(0xc, "EBI_AD7"), 793 + MA35_MUX(0xd, "EBI_nCS0")), 794 + MA35_PIN(101, PG9, 0xb4, 0x4, 795 + MA35_MUX(0x0, "GPG9"), 796 + MA35_MUX(0x1, "EPWM1_CH5"), 797 + MA35_MUX(0x2, "UART12_TXD"), 798 + MA35_MUX(0x3, "CAN3_TXD"), 799 + MA35_MUX(0x5, "SPI2_CLK"), 800 + MA35_MUX(0x6, "LCM_HSYNC"), 801 + MA35_MUX(0x7, "I2C3_SCL"), 802 + MA35_MUX(0xc, "EBI_AD8"), 803 + MA35_MUX(0xd, "EBI_nCS1")), 804 + MA35_PIN(102, PG10, 0xb4, 0x8, 805 + MA35_MUX(0x0, "GPG10"), 806 + MA35_MUX(0x2, "UART12_nRTS"), 807 + MA35_MUX(0x3, "UART13_TXD"), 808 + MA35_MUX(0x5, "SPI2_MOSI"), 809 + MA35_MUX(0x6, "LCM_CLK"), 810 + MA35_MUX(0xc, "EBI_AD9"), 811 + MA35_MUX(0xd, "EBI_nWRH")), 812 + MA35_PIN(103, PG11, 0xb4, 0xc, 813 + MA35_MUX(0x0, "GPG11"), 814 + MA35_MUX(0x3, "JTAG_TDO"), 815 + MA35_MUX(0x5, "I2S0_MCLK"), 816 + MA35_MUX(0x6, "NAND_RDY1"), 817 + MA35_MUX(0x7, "EBI_nWRH"), 818 + MA35_MUX(0x8, "EBI_nCS1"), 819 + MA35_MUX(0xa, "EBI_AD0")), 820 + MA35_PIN(104, PG12, 0xb4, 0x10, 821 + MA35_MUX(0x0, "GPG12"), 822 + MA35_MUX(0x3, "JTAG_TCK/SW_CLK"), 823 + MA35_MUX(0x5, "I2S0_LRCK"), 824 + MA35_MUX(0x7, "EBI_nWRL"), 825 + MA35_MUX(0xa, "EBI_AD1")), 826 + MA35_PIN(105, PG13, 0xb4, 0x14, 827 + MA35_MUX(0x0, "GPG13"), 828 + MA35_MUX(0x3, "JTAG_TMS/SW_DIO"), 829 + MA35_MUX(0x5, "I2S0_BCLK"), 830 + MA35_MUX(0x7, "EBI_MCLK"), 831 + MA35_MUX(0xa, "EBI_AD2")), 832 + MA35_PIN(106, PG14, 0xb4, 0x18, 833 + MA35_MUX(0x0, "GPG14"), 834 + MA35_MUX(0x3, "JTAG_TDI"), 835 + MA35_MUX(0x5, "I2S0_DI"), 836 + MA35_MUX(0x6, "NAND_nCS1"), 837 + MA35_MUX(0x7, "EBI_ALE"), 838 + MA35_MUX(0xa, "EBI_AD3")), 839 + MA35_PIN(107, PG15, 0xb4, 0x1c, 840 + MA35_MUX(0x0, "GPG15"), 841 + MA35_MUX(0x3, "JTAG_nTRST"), 842 + MA35_MUX(0x5, "I2S0_DO"), 843 + MA35_MUX(0x7, "EBI_nCS0"), 844 + MA35_MUX(0xa, "EBI_AD4")), 845 + MA35_PIN(108, PH0, 0xb8, 0x0, 846 + MA35_MUX(0x0, "GPH0"), 847 + MA35_MUX(0x2, "UART8_nCTS"), 848 + MA35_MUX(0x3, "UART7_RXD"), 849 + MA35_MUX(0x6, "LCM_DATA8")), 850 + MA35_PIN(109, PH1, 0xb8, 0x4, 851 + MA35_MUX(0x0, "GPH1"), 852 + MA35_MUX(0x2, "UART8_nRTS"), 853 + MA35_MUX(0x3, "UART7_TXD"), 854 + MA35_MUX(0x6, "LCM_DATA9")), 855 + MA35_PIN(110, PH2, 0xb8, 0x8, 856 + MA35_MUX(0x0, "GPH2"), 857 + MA35_MUX(0x2, "UART8_RXD"), 858 + MA35_MUX(0x6, "LCM_DATA10")), 859 + MA35_PIN(111, PH3, 0xb8, 0xc, 860 + MA35_MUX(0x0, "GPH3"), 861 + MA35_MUX(0x2, "UART8_TXD"), 862 + MA35_MUX(0x6, "LCM_DATA11")), 863 + MA35_PIN(112, PH4, 0xb8, 0x10, 864 + MA35_MUX(0x0, "GPH4"), 865 + MA35_MUX(0x2, "UART10_nCTS"), 866 + MA35_MUX(0x3, "UART9_RXD"), 867 + MA35_MUX(0x6, "LCM_DATA12")), 868 + MA35_PIN(113, PH5, 0xb8, 0x14, 869 + MA35_MUX(0x0, "GPH5"), 870 + MA35_MUX(0x2, "UART10_nRTS"), 871 + MA35_MUX(0x3, "UART9_TXD"), 872 + MA35_MUX(0x6, "LCM_DATA13")), 873 + MA35_PIN(114, PH6, 0xb8, 0x18, 874 + MA35_MUX(0x0, "GPH6"), 875 + MA35_MUX(0x2, "UART10_RXD"), 876 + MA35_MUX(0x6, "LCM_DATA14")), 877 + MA35_PIN(115, PH7, 0xb8, 0x1c, 878 + MA35_MUX(0x0, "GPH7"), 879 + MA35_MUX(0x2, "UART10_TXD"), 880 + MA35_MUX(0x6, "LCM_DATA15")), 881 + MA35_PIN(116, PH8, 0xbc, 0x0, 882 + MA35_MUX(0x0, "GPH8"), 883 + MA35_MUX(0x6, "TAMPER0")), 884 + MA35_PIN(117, PH9, 0xbc, 0x4, 885 + MA35_MUX(0x0, "GPH9"), 886 + MA35_MUX(0x4, "CLK_32KOUT"), 887 + MA35_MUX(0x6, "TAMPER1")), 888 + MA35_PIN(118, PH12, 0xbc, 0x10, 889 + MA35_MUX(0x0, "GPH12"), 890 + MA35_MUX(0x2, "UART14_nCTS"), 891 + MA35_MUX(0x3, "UART13_RXD"), 892 + MA35_MUX(0x6, "LCM_DATA20")), 893 + MA35_PIN(119, PH13, 0xbc, 0x14, 894 + MA35_MUX(0x0, "GPH13"), 895 + MA35_MUX(0x2, "UART14_nRTS"), 896 + MA35_MUX(0x3, "UART13_TXD"), 897 + MA35_MUX(0x6, "LCM_DATA21")), 898 + MA35_PIN(120, PH14, 0xbc, 0x18, 899 + MA35_MUX(0x0, "GPH14"), 900 + MA35_MUX(0x2, "UART14_RXD"), 901 + MA35_MUX(0x6, "LCM_DATA22")), 902 + MA35_PIN(121, PH15, 0xbc, 0x1c, 903 + MA35_MUX(0x0, "GPH15"), 904 + MA35_MUX(0x2, "UART14_TXD"), 905 + MA35_MUX(0x6, "LCM_DATA23")), 906 + MA35_PIN(122, PI0, 0xc0, 0x0, 907 + MA35_MUX(0x0, "GPI0"), 908 + MA35_MUX(0x1, "EPWM0_CH0"), 909 + MA35_MUX(0x2, "UART12_nCTS"), 910 + MA35_MUX(0x3, "UART11_RXD"), 911 + MA35_MUX(0x4, "I2C2_SDA"), 912 + MA35_MUX(0x5, "SPI3_SS0"), 913 + MA35_MUX(0x7, "SC0_nCD"), 914 + MA35_MUX(0x8, "EBI_ADR0"), 915 + MA35_MUX(0xb, "TM0"), 916 + MA35_MUX(0xc, "ECAP1_IC0")), 917 + MA35_PIN(123, PI1, 0xc0, 0x4, 918 + MA35_MUX(0x0, "GPI1"), 919 + MA35_MUX(0x1, "EPWM0_CH1"), 920 + MA35_MUX(0x2, "UART12_nRTS"), 921 + MA35_MUX(0x3, "UART11_TXD"), 922 + MA35_MUX(0x4, "I2C2_SCL"), 923 + MA35_MUX(0x5, "SPI3_CLK"), 924 + MA35_MUX(0x7, "SC0_CLK"), 925 + MA35_MUX(0x8, "EBI_ADR1"), 926 + MA35_MUX(0xb, "TM0_EXT"), 927 + MA35_MUX(0xc, "ECAP1_IC1")), 928 + MA35_PIN(124, PI2, 0xc0, 0x8, 929 + MA35_MUX(0x0, "GPI2"), 930 + MA35_MUX(0x1, "EPWM0_CH2"), 931 + MA35_MUX(0x2, "UART12_RXD"), 932 + MA35_MUX(0x3, "CAN0_RXD"), 933 + MA35_MUX(0x5, "SPI3_MOSI"), 934 + MA35_MUX(0x7, "SC0_DAT"), 935 + MA35_MUX(0x8, "EBI_ADR2"), 936 + MA35_MUX(0xb, "TM1"), 937 + MA35_MUX(0xc, "ECAP1_IC2")), 938 + MA35_PIN(125, PI3, 0xc0, 0xc, 939 + MA35_MUX(0x0, "GPI3"), 940 + MA35_MUX(0x1, "EPWM0_CH3"), 941 + MA35_MUX(0x2, "UART12_TXD"), 942 + MA35_MUX(0x3, "CAN0_TXD"), 943 + MA35_MUX(0x5, "SPI3_MISO"), 944 + MA35_MUX(0x7, "SC0_RST"), 945 + MA35_MUX(0x8, "EBI_ADR3"), 946 + MA35_MUX(0xb, "TM1_EXT")), 947 + MA35_PIN(126, PI4, 0xc0, 0x10, 948 + MA35_MUX(0x0, "GPI4"), 949 + MA35_MUX(0x1, "EPWM0_CH4"), 950 + MA35_MUX(0x2, "UART14_nCTS"), 951 + MA35_MUX(0x3, "UART13_RXD"), 952 + MA35_MUX(0x4, "I2C3_SDA"), 953 + MA35_MUX(0x5, "SPI2_SS1"), 954 + MA35_MUX(0x6, "I2S1_LRCK"), 955 + MA35_MUX(0x8, "EBI_ADR4"), 956 + MA35_MUX(0xd, "INT0")), 957 + MA35_PIN(127, PI5, 0xc0, 0x14, 958 + MA35_MUX(0x0, "GPI5"), 959 + MA35_MUX(0x1, "EPWM0_CH5"), 960 + MA35_MUX(0x2, "UART14_nRTS"), 961 + MA35_MUX(0x3, "UART13_TXD"), 962 + MA35_MUX(0x4, "I2C3_SCL"), 963 + MA35_MUX(0x6, "I2S1_BCLK"), 964 + MA35_MUX(0x8, "EBI_ADR5"), 965 + MA35_MUX(0xd, "INT1")), 966 + MA35_PIN(128, PI6, 0xc0, 0x18, 967 + MA35_MUX(0x0, "GPI6"), 968 + MA35_MUX(0x1, "EPWM0_BRAKE0"), 969 + MA35_MUX(0x2, "UART14_RXD"), 970 + MA35_MUX(0x3, "CAN1_RXD"), 971 + MA35_MUX(0x6, "I2S1_DI"), 972 + MA35_MUX(0x8, "EBI_ADR6"), 973 + MA35_MUX(0xc, "QEI1_INDEX"), 974 + MA35_MUX(0xd, "INT2")), 975 + MA35_PIN(129, PI7, 0xc0, 0x1c, 976 + MA35_MUX(0x0, "GPI7"), 977 + MA35_MUX(0x1, "EPWM0_BRAKE1"), 978 + MA35_MUX(0x2, "UART14_TXD"), 979 + MA35_MUX(0x3, "CAN1_TXD"), 980 + MA35_MUX(0x6, "I2S1_DO"), 981 + MA35_MUX(0x8, "EBI_ADR7"), 982 + MA35_MUX(0xc, "ECAP0_IC0"), 983 + MA35_MUX(0xd, "INT3")), 984 + MA35_PIN(130, PI8, 0xc4, 0x0, 985 + MA35_MUX(0x0, "GPI8"), 986 + MA35_MUX(0x2, "UART4_nCTS"), 987 + MA35_MUX(0x3, "UART3_RXD"), 988 + MA35_MUX(0x6, "LCM_DATA0"), 989 + MA35_MUX(0xc, "EBI_AD11")), 990 + MA35_PIN(131, PI9, 0xc4, 0x4, 991 + MA35_MUX(0x0, "GPI9"), 992 + MA35_MUX(0x2, "UART4_nRTS"), 993 + MA35_MUX(0x3, "UART3_TXD"), 994 + MA35_MUX(0x6, "LCM_DATA1"), 995 + MA35_MUX(0xc, "EBI_AD12")), 996 + MA35_PIN(132, PI10, 0xc4, 0x8, 997 + MA35_MUX(0x0, "GPI10"), 998 + MA35_MUX(0x2, "UART4_RXD"), 999 + MA35_MUX(0x6, "LCM_DATA2"), 1000 + MA35_MUX(0xc, "EBI_AD13")), 1001 + MA35_PIN(133, PI11, 0xC4, 0xc, 1002 + MA35_MUX(0x0, "GPI11"), 1003 + MA35_MUX(0x2, "UART4_TXD"), 1004 + MA35_MUX(0x6, "LCM_DATA3"), 1005 + MA35_MUX(0xc, "EBI_AD14")), 1006 + MA35_PIN(134, PI12, 0xc4, 0x10, 1007 + MA35_MUX(0x0, "GPI12"), 1008 + MA35_MUX(0x2, "UART6_nCTS"), 1009 + MA35_MUX(0x3, "UART5_RXD"), 1010 + MA35_MUX(0x6, "LCM_DATA4")), 1011 + MA35_PIN(135, PI13, 0xc4, 0x14, 1012 + MA35_MUX(0x0, "GPI13"), 1013 + MA35_MUX(0x2, "UART6_nRTS"), 1014 + MA35_MUX(0x3, "UART5_TXD"), 1015 + MA35_MUX(0x6, "LCM_DATA5")), 1016 + MA35_PIN(136, PI14, 0xc4, 0x18, 1017 + MA35_MUX(0x0, "GPI14"), 1018 + MA35_MUX(0x2, "UART6_RXD"), 1019 + MA35_MUX(0x6, "LCM_DATA6")), 1020 + MA35_PIN(137, PI15, 0xc4, 0x1c, 1021 + MA35_MUX(0x0, "GPI15"), 1022 + MA35_MUX(0x2, "UART6_TXD"), 1023 + MA35_MUX(0x6, "LCM_DATA7")), 1024 + MA35_PIN(138, PJ0, 0xc8, 0x0, 1025 + MA35_MUX(0x0, "GPJ0"), 1026 + MA35_MUX(0x1, "EPWM1_BRAKE0"), 1027 + MA35_MUX(0x2, "UART8_nCTS"), 1028 + MA35_MUX(0x3, "UART7_RXD"), 1029 + MA35_MUX(0x4, "I2C2_SDA"), 1030 + MA35_MUX(0x5, "SPI2_SS0"), 1031 + MA35_MUX(0x6, "eMMC1_DAT4"), 1032 + MA35_MUX(0x7, "I2S0_LRCK"), 1033 + MA35_MUX(0x8, "SC0_CLK"), 1034 + MA35_MUX(0x9, "EBI_AD11"), 1035 + MA35_MUX(0xa, "EBI_ADR16"), 1036 + MA35_MUX(0xb, "EBI_nCS0"), 1037 + MA35_MUX(0xc, "EBI_AD7")), 1038 + MA35_PIN(139, PJ1, 0xc8, 0x4, 1039 + MA35_MUX(0x0, "GPJ1"), 1040 + MA35_MUX(0x1, "EPWM1_BRAKE1"), 1041 + MA35_MUX(0x2, "UART8_nRTS"), 1042 + MA35_MUX(0x3, "UART7_TXD"), 1043 + MA35_MUX(0x4, "I2C2_SCL"), 1044 + MA35_MUX(0x5, "SPI2_CLK"), 1045 + MA35_MUX(0x6, "eMMC1_DAT5"), 1046 + MA35_MUX(0x7, "I2S0_BCLK"), 1047 + MA35_MUX(0x8, "SC0_DAT"), 1048 + MA35_MUX(0x9, "EBI_AD12"), 1049 + MA35_MUX(0xa, "EBI_ADR17"), 1050 + MA35_MUX(0xb, "EBI_nCS1"), 1051 + MA35_MUX(0xc, "EBI_AD8")), 1052 + MA35_PIN(140, PJ2, 0xc8, 0x8, 1053 + MA35_MUX(0x0, "GPJ2"), 1054 + MA35_MUX(0x1, "EPWM1_CH4"), 1055 + MA35_MUX(0x2, "UART8_RXD"), 1056 + MA35_MUX(0x3, "CAN1_RXD"), 1057 + MA35_MUX(0x5, "SPI2_MOSI"), 1058 + MA35_MUX(0x6, "eMMC1_DAT6"), 1059 + MA35_MUX(0x7, "I2S0_DI"), 1060 + MA35_MUX(0x8, "SC0_RST"), 1061 + MA35_MUX(0x9, "EBI_AD13"), 1062 + MA35_MUX(0xa, "EBI_ADR18"), 1063 + MA35_MUX(0xb, "EBI_nWRH"), 1064 + MA35_MUX(0xc, "EBI_AD9")), 1065 + MA35_PIN(141, PJ3, 0xc8, 0xc, 1066 + MA35_MUX(0x0, "GPJ3"), 1067 + MA35_MUX(0x1, "EPWM1_CH5"), 1068 + MA35_MUX(0x2, "UART8_TXD"), 1069 + MA35_MUX(0x3, "CAN1_TXD"), 1070 + MA35_MUX(0x5, "SPI2_MISO"), 1071 + MA35_MUX(0x6, "eMMC1_DAT7"), 1072 + MA35_MUX(0x7, "I2S0_DO"), 1073 + MA35_MUX(0x8, "SC0_PWR"), 1074 + MA35_MUX(0x9, "EBI_AD14"), 1075 + MA35_MUX(0xa, "EBI_ADR19"), 1076 + MA35_MUX(0xb, "EBI_nWRL"), 1077 + MA35_MUX(0xc, "EBI_AD10")), 1078 + MA35_PIN(142, PJ4, 0xc8, 0x10, 1079 + MA35_MUX(0x0, "GPJ4"), 1080 + MA35_MUX(0x4, "I2C3_SDA"), 1081 + MA35_MUX(0x6, "SD1_WP")), 1082 + MA35_PIN(143, PJ5, 0xc8, 0x14, 1083 + MA35_MUX(0x0, "GPJ5"), 1084 + MA35_MUX(0x4, "I2C3_SCL"), 1085 + MA35_MUX(0x6, "SD1_nCD")), 1086 + MA35_PIN(144, PJ6, 0xc8, 0x18, 1087 + MA35_MUX(0x0, "GPJ6"), 1088 + MA35_MUX(0x3, "CAN3_RXD"), 1089 + MA35_MUX(0x6, "SD1_CMD/eMMC1_CMD")), 1090 + MA35_PIN(145, PJ7, 0xc8, 0x1c, 1091 + MA35_MUX(0x0, "GPJ7"), 1092 + MA35_MUX(0x3, "CAN3_TXD"), 1093 + MA35_MUX(0x6, "SD1_CLK/eMMC1_CLK")), 1094 + MA35_PIN(146, PJ8, 0xcc, 0x0, 1095 + MA35_MUX(0x0, "GPJ8"), 1096 + MA35_MUX(0x4, "I2C4_SDA"), 1097 + MA35_MUX(0x6, "SD1_DAT0/eMMC1_DAT0")), 1098 + MA35_PIN(147, PJ9, 0xcc, 0x4, 1099 + MA35_MUX(0x0, "GPJ9"), 1100 + MA35_MUX(0x4, "I2C4_SCL"), 1101 + MA35_MUX(0x6, "SD1_DAT1/eMMC1_DAT1")), 1102 + MA35_PIN(148, PJ10, 0xcc, 0x8, 1103 + MA35_MUX(0x0, "GPJ10"), 1104 + MA35_MUX(0x3, "CAN0_RXD"), 1105 + MA35_MUX(0x6, "SD1_DAT2/eMMC1_DAT2")), 1106 + MA35_PIN(149, PJ11, 0xcc, 0xc, 1107 + MA35_MUX(0x0, "GPJ11"), 1108 + MA35_MUX(0x3, "CAN0_TXD"), 1109 + MA35_MUX(0x6, "SD1_DAT3/eMMC1_DAT3")), 1110 + MA35_PIN(150, PJ12, 0xcc, 0x10, 1111 + MA35_MUX(0x0, "GPJ12"), 1112 + MA35_MUX(0x1, "EPWM1_CH2"), 1113 + MA35_MUX(0x2, "UART2_nCTS"), 1114 + MA35_MUX(0x3, "UART1_RXD"), 1115 + MA35_MUX(0x4, "I2C5_SDA"), 1116 + MA35_MUX(0x5, "SPI3_SS0"), 1117 + MA35_MUX(0x7, "SC1_CLK"), 1118 + MA35_MUX(0x8, "EBI_ADR12"), 1119 + MA35_MUX(0xb, "TM2"), 1120 + MA35_MUX(0xc, "QEI0_INDEX")), 1121 + MA35_PIN(151, PJ13, 0xcc, 0x14, 1122 + MA35_MUX(0x0, "GPJ13"), 1123 + MA35_MUX(0x1, "EPWM1_CH3"), 1124 + MA35_MUX(0x2, "UART2_nRTS"), 1125 + MA35_MUX(0x3, "UART1_TXD"), 1126 + MA35_MUX(0x4, "I2C5_SCL"), 1127 + MA35_MUX(0x5, "SPI3_MOSI"), 1128 + MA35_MUX(0x7, "SC1_DAT"), 1129 + MA35_MUX(0x8, "EBI_ADR13"), 1130 + MA35_MUX(0xb, "TM2_EXT")), 1131 + MA35_PIN(152, PJ14, 0xcc, 0x18, 1132 + MA35_MUX(0x0, "GPJ14"), 1133 + MA35_MUX(0x1, "EPWM1_CH4"), 1134 + MA35_MUX(0x2, "UART2_RXD"), 1135 + MA35_MUX(0x3, "CAN3_RXD"), 1136 + MA35_MUX(0x5, "SPI3_MISO"), 1137 + MA35_MUX(0x7, "SC1_RST"), 1138 + MA35_MUX(0x8, "EBI_ADR14"), 1139 + MA35_MUX(0xb, "TM3")), 1140 + MA35_PIN(153, PJ15, 0xcc, 0x1c, 1141 + MA35_MUX(0x0, "GPJ15"), 1142 + MA35_MUX(0x1, "EPWM1_CH5"), 1143 + MA35_MUX(0x2, "UART2_TXD"), 1144 + MA35_MUX(0x3, "CAN3_TXD"), 1145 + MA35_MUX(0x5, "SPI3_CLK"), 1146 + MA35_MUX(0x6, "EADC0_ST"), 1147 + MA35_MUX(0x7, "SC1_PWR"), 1148 + MA35_MUX(0x8, "EBI_ADR15"), 1149 + MA35_MUX(0xb, "TM3_EXT"), 1150 + MA35_MUX(0xd, "INT1")), 1151 + MA35_PIN(154, PK0, 0xd0, 0x0, 1152 + MA35_MUX(0x0, "GPK0"), 1153 + MA35_MUX(0x1, "EPWM0_SYNC_IN"), 1154 + MA35_MUX(0x2, "UART16_nCTS"), 1155 + MA35_MUX(0x3, "UART15_RXD"), 1156 + MA35_MUX(0x4, "I2C4_SDA"), 1157 + MA35_MUX(0x6, "I2S1_MCLK"), 1158 + MA35_MUX(0x8, "EBI_ADR8"), 1159 + MA35_MUX(0xb, "TM7"), 1160 + MA35_MUX(0xc, "ECAP0_IC1")), 1161 + MA35_PIN(155, PK1, 0xd0, 0x4, 1162 + MA35_MUX(0x0, "GPK1"), 1163 + MA35_MUX(0x1, "EPWM0_SYNC_OUT"), 1164 + MA35_MUX(0x2, "UART16_nRTS"), 1165 + MA35_MUX(0x3, "UART15_TXD"), 1166 + MA35_MUX(0x4, "I2C4_SCL"), 1167 + MA35_MUX(0x6, "EADC0_ST"), 1168 + MA35_MUX(0x8, "EBI_ADR9"), 1169 + MA35_MUX(0xb, "TM7_EXT"), 1170 + MA35_MUX(0xc, "ECAP0_IC2")), 1171 + MA35_PIN(156, PK2, 0xd0, 0x8, 1172 + MA35_MUX(0x0, "GPK2"), 1173 + MA35_MUX(0x1, "EPWM1_CH0"), 1174 + MA35_MUX(0x2, "UART16_RXD"), 1175 + MA35_MUX(0x3, "CAN2_RXD"), 1176 + MA35_MUX(0x5, "SPI3_I2SMCLK"), 1177 + MA35_MUX(0x7, "SC0_PWR"), 1178 + MA35_MUX(0x8, "EBI_ADR10"), 1179 + MA35_MUX(0xc, "QEI0_A")), 1180 + MA35_PIN(157, PK3, 0xd0, 0xc, 1181 + MA35_MUX(0x0, "GPK3"), 1182 + MA35_MUX(0x1, "EPWM1_CH1"), 1183 + MA35_MUX(0x2, "UART16_TXD"), 1184 + MA35_MUX(0x3, "CAN2_TXD"), 1185 + MA35_MUX(0x5, "SPI3_SS1"), 1186 + MA35_MUX(0x7, "SC1_nCD"), 1187 + MA35_MUX(0x8, "EBI_ADR11"), 1188 + MA35_MUX(0xc, "QEI0_B")), 1189 + MA35_PIN(158, PK4, 0xd0, 0x10, 1190 + MA35_MUX(0x0, "GPK4"), 1191 + MA35_MUX(0x2, "UART12_nCTS"), 1192 + MA35_MUX(0x3, "UART13_RXD"), 1193 + MA35_MUX(0x5, "SPI2_MISO"), 1194 + MA35_MUX(0x6, "LCM_DEN"), 1195 + MA35_MUX(0xc, "EBI_AD10"), 1196 + MA35_MUX(0xd, "EBI_nWRL")), 1197 + MA35_PIN(159, PK5, 0xd0, 0x14, 1198 + MA35_MUX(0x0, "GPK5"), 1199 + MA35_MUX(0x1, "EPWM1_CH1"), 1200 + MA35_MUX(0x2, "UART12_nRTS"), 1201 + MA35_MUX(0x3, "UART13_TXD"), 1202 + MA35_MUX(0x4, "I2C4_SCL"), 1203 + MA35_MUX(0x5, "SPI2_CLK"), 1204 + MA35_MUX(0x7, "I2S1_DI"), 1205 + MA35_MUX(0x8, "SC0_DAT"), 1206 + MA35_MUX(0x9, "EADC0_ST"), 1207 + MA35_MUX(0xb, "TM8_EXT"), 1208 + MA35_MUX(0xd, "INT1")), 1209 + MA35_PIN(160, PK6, 0xd0, 0x18, 1210 + MA35_MUX(0x0, "GPK6"), 1211 + MA35_MUX(0x1, "EPWM1_CH2"), 1212 + MA35_MUX(0x2, "UART12_RXD"), 1213 + MA35_MUX(0x3, "CAN0_RXD"), 1214 + MA35_MUX(0x5, "SPI2_MOSI"), 1215 + MA35_MUX(0x7, "I2S1_BCLK"), 1216 + MA35_MUX(0x8, "SC0_RST"), 1217 + MA35_MUX(0xb, "TM6"), 1218 + MA35_MUX(0xd, "INT2")), 1219 + MA35_PIN(161, PK7, 0xd0, 0x1c, 1220 + MA35_MUX(0x0, "GPK7"), 1221 + MA35_MUX(0x1, "EPWM1_CH3"), 1222 + MA35_MUX(0x2, "UART12_TXD"), 1223 + MA35_MUX(0x3, "CAN0_TXD"), 1224 + MA35_MUX(0x5, "SPI2_MISO"), 1225 + MA35_MUX(0x7, "I2S1_LRCK"), 1226 + MA35_MUX(0x8, "SC0_PWR"), 1227 + MA35_MUX(0x9, "CLKO"), 1228 + MA35_MUX(0xb, "TM6_EXT"), 1229 + MA35_MUX(0xd, "INT3")), 1230 + MA35_PIN(162, PK8, 0xd4, 0x0, 1231 + MA35_MUX(0x0, "GPK8"), 1232 + MA35_MUX(0x1, "EPWM1_CH0"), 1233 + MA35_MUX(0x4, "I2C3_SDA"), 1234 + MA35_MUX(0x5, "SPI3_CLK"), 1235 + MA35_MUX(0x7, "EADC0_ST"), 1236 + MA35_MUX(0x8, "EBI_AD15"), 1237 + MA35_MUX(0x9, "EBI_MCLK"), 1238 + MA35_MUX(0xa, "EBI_ADR15"), 1239 + MA35_MUX(0xb, "TM8"), 1240 + MA35_MUX(0xc, "QEI1_INDEX")), 1241 + MA35_PIN(163, PK9, 0xd4, 0x4, 1242 + MA35_MUX(0x0, "GPK9"), 1243 + MA35_MUX(0x4, "I2C3_SCL"), 1244 + MA35_MUX(0x6, "CCAP0_SCLK"), 1245 + MA35_MUX(0x8, "EBI_AD0"), 1246 + MA35_MUX(0xa, "EBI_ADR0")), 1247 + MA35_PIN(164, PK10, 0xd4, 0x8, 1248 + MA35_MUX(0x0, "GPK10"), 1249 + MA35_MUX(0x3, "CAN1_RXD"), 1250 + MA35_MUX(0x6, "CCAP0_PIXCLK"), 1251 + MA35_MUX(0x8, "EBI_AD1"), 1252 + MA35_MUX(0xa, "EBI_ADR1")), 1253 + MA35_PIN(165, PK11, 0xd4, 0xc, 1254 + MA35_MUX(0x0, "GPK11"), 1255 + MA35_MUX(0x3, "CAN1_TXD"), 1256 + MA35_MUX(0x6, "CCAP0_HSYNC"), 1257 + MA35_MUX(0x8, "EBI_AD2"), 1258 + MA35_MUX(0xa, "EBI_ADR2")), 1259 + MA35_PIN(166, PK12, 0xd4, 0x10, 1260 + MA35_MUX(0x0, "GPK12"), 1261 + MA35_MUX(0x1, "EPWM2_CH0"), 1262 + MA35_MUX(0x2, "UART1_nCTS"), 1263 + MA35_MUX(0x3, "UART13_RXD"), 1264 + MA35_MUX(0x4, "I2C4_SDA"), 1265 + MA35_MUX(0x5, "I2S0_LRCK"), 1266 + MA35_MUX(0x6, "SPI1_SS0"), 1267 + MA35_MUX(0x8, "SC0_CLK"), 1268 + MA35_MUX(0xb, "TM10"), 1269 + MA35_MUX(0xd, "INT2")), 1270 + MA35_PIN(167, PK13, 0xd4, 0x14, 1271 + MA35_MUX(0x0, "GPK13"), 1272 + MA35_MUX(0x1, "EPWM2_CH1"), 1273 + MA35_MUX(0x2, "UART1_nRTS"), 1274 + MA35_MUX(0x3, "UART13_TXD"), 1275 + MA35_MUX(0x4, "I2C4_SCL"), 1276 + MA35_MUX(0x5, "I2S0_BCLK"), 1277 + MA35_MUX(0x6, "SPI1_CLK"), 1278 + MA35_MUX(0x8, "SC0_DAT"), 1279 + MA35_MUX(0xb, "TM10_EXT")), 1280 + MA35_PIN(168, PK14, 0xd4, 0x18, 1281 + MA35_MUX(0x0, "GPK14"), 1282 + MA35_MUX(0x1, "EPWM2_CH2"), 1283 + MA35_MUX(0x2, "UART1_RXD"), 1284 + MA35_MUX(0x3, "CAN3_RXD"), 1285 + MA35_MUX(0x5, "I2S0_DI"), 1286 + MA35_MUX(0x6, "SPI1_MOSI"), 1287 + MA35_MUX(0x8, "SC0_RST"), 1288 + MA35_MUX(0xa, "I2C5_SDA"), 1289 + MA35_MUX(0xb, "TM11"), 1290 + MA35_MUX(0xd, "INT3")), 1291 + MA35_PIN(169, PK15, 0xd4, 0x1c, 1292 + MA35_MUX(0x0, "GPK15"), 1293 + MA35_MUX(0x1, "EPWM2_CH3"), 1294 + MA35_MUX(0x2, "UART1_TXD"), 1295 + MA35_MUX(0x3, "CAN3_TXD"), 1296 + MA35_MUX(0x5, "I2S0_DO"), 1297 + MA35_MUX(0x6, "SPI1_MISO"), 1298 + MA35_MUX(0x8, "SC0_PWR"), 1299 + MA35_MUX(0xa, "I2C5_SCL"), 1300 + MA35_MUX(0xb, "TM11_EXT")), 1301 + MA35_PIN(170, PL0, 0xd8, 0x0, 1302 + MA35_MUX(0x0, "GPL0"), 1303 + MA35_MUX(0x1, "EPWM1_CH0"), 1304 + MA35_MUX(0x2, "UART11_nCTS"), 1305 + MA35_MUX(0x3, "UART10_RXD"), 1306 + MA35_MUX(0x4, "I2C3_SDA"), 1307 + MA35_MUX(0x5, "SPI2_MOSI"), 1308 + MA35_MUX(0x6, "QSPI1_MOSI1"), 1309 + MA35_MUX(0x7, "I2S0_LRCK"), 1310 + MA35_MUX(0x8, "EBI_AD11"), 1311 + MA35_MUX(0x9, "SC1_CLK"), 1312 + MA35_MUX(0xb, "TM5"), 1313 + MA35_MUX(0xc, "QEI1_A")), 1314 + MA35_PIN(171, PL1, 0xd8, 0x4, 1315 + MA35_MUX(0x0, "GPL1"), 1316 + MA35_MUX(0x1, "EPWM1_CH1"), 1317 + MA35_MUX(0x2, "UART11_nRTS"), 1318 + MA35_MUX(0x3, "UART10_TXD"), 1319 + MA35_MUX(0x4, "I2C3_SCL"), 1320 + MA35_MUX(0x5, "SPI2_MISO"), 1321 + MA35_MUX(0x6, "QSPI1_MISO1"), 1322 + MA35_MUX(0x7, "I2S0_BCLK"), 1323 + MA35_MUX(0x8, "EBI_AD12"), 1324 + MA35_MUX(0x9, "SC1_DAT"), 1325 + MA35_MUX(0xb, "TM5_EXT"), 1326 + MA35_MUX(0xc, "QEI1_B")), 1327 + MA35_PIN(172, PL2, 0xd8, 0x8, 1328 + MA35_MUX(0x0, "GPL2"), 1329 + MA35_MUX(0x1, "EPWM1_CH2"), 1330 + MA35_MUX(0x2, "UART11_RXD"), 1331 + MA35_MUX(0x3, "CAN3_RXD"), 1332 + MA35_MUX(0x5, "SPI2_SS0"), 1333 + MA35_MUX(0x6, "QSPI1_SS1"), 1334 + MA35_MUX(0x7, "I2S0_DI"), 1335 + MA35_MUX(0x8, "EBI_AD13"), 1336 + MA35_MUX(0x9, "SC1_RST"), 1337 + MA35_MUX(0xb, "TM7"), 1338 + MA35_MUX(0xc, "QEI1_INDEX")), 1339 + MA35_PIN(173, PL3, 0xd8, 0xc, 1340 + MA35_MUX(0x0, "GPL3"), 1341 + MA35_MUX(0x1, "EPWM1_CH3"), 1342 + MA35_MUX(0x2, "UART11_TXD"), 1343 + MA35_MUX(0x3, "CAN3_TXD"), 1344 + MA35_MUX(0x5, "SPI2_CLK"), 1345 + MA35_MUX(0x6, "QSPI1_CLK"), 1346 + MA35_MUX(0x7, "I2S0_DO"), 1347 + MA35_MUX(0x8, "EBI_AD14"), 1348 + MA35_MUX(0x9, "SC1_PWR"), 1349 + MA35_MUX(0xb, "TM7_EXT"), 1350 + MA35_MUX(0xc, "ECAP0_IC0")), 1351 + MA35_PIN(174, PL4, 0xd8, 0x10, 1352 + MA35_MUX(0x0, "GPL4"), 1353 + MA35_MUX(0x1, "EPWM1_CH4"), 1354 + MA35_MUX(0x2, "UART2_nCTS"), 1355 + MA35_MUX(0x3, "UART1_RXD"), 1356 + MA35_MUX(0x4, "I2C4_SDA"), 1357 + MA35_MUX(0x5, "SPI3_MOSI"), 1358 + MA35_MUX(0x6, "QSPI1_MOSI0"), 1359 + MA35_MUX(0x7, "I2S0_MCLK"), 1360 + MA35_MUX(0x8, "EBI_nRD"), 1361 + MA35_MUX(0x9, "SC1_nCD"), 1362 + MA35_MUX(0xb, "TM9"), 1363 + MA35_MUX(0xc, "ECAP0_IC1")), 1364 + MA35_PIN(175, PL5, 0xd8, 0x14, 1365 + MA35_MUX(0x0, "GPL5"), 1366 + MA35_MUX(0x1, "EPWM1_CH5"), 1367 + MA35_MUX(0x2, "UART2_nRTS"), 1368 + MA35_MUX(0x3, "UART1_TXD"), 1369 + MA35_MUX(0x4, "I2C4_SCL"), 1370 + MA35_MUX(0x5, "SPI3_MISO"), 1371 + MA35_MUX(0x6, "QSPI1_MISO0"), 1372 + MA35_MUX(0x7, "I2S1_MCLK"), 1373 + MA35_MUX(0x8, "EBI_nWR"), 1374 + MA35_MUX(0x9, "SC0_nCD"), 1375 + MA35_MUX(0xb, "TM9_EXT"), 1376 + MA35_MUX(0xc, "ECAP0_IC2")), 1377 + MA35_PIN(176, PL6, 0xd8, 0x18, 1378 + MA35_MUX(0x0, "GPL6"), 1379 + MA35_MUX(0x1, "EPWM0_CH0"), 1380 + MA35_MUX(0x2, "UART2_RXD"), 1381 + MA35_MUX(0x3, "CAN0_RXD"), 1382 + MA35_MUX(0x6, "QSPI1_MOSI1"), 1383 + MA35_MUX(0x7, "TRACE_CLK"), 1384 + MA35_MUX(0x8, "EBI_AD5"), 1385 + MA35_MUX(0xb, "TM3"), 1386 + MA35_MUX(0xc, "ECAP1_IC0"), 1387 + MA35_MUX(0xd, "INT0")), 1388 + MA35_PIN(177, PL7, 0xd8, 0x1c, 1389 + MA35_MUX(0x0, "GPL7"), 1390 + MA35_MUX(0x1, "EPWM0_CH1"), 1391 + MA35_MUX(0x2, "UART2_TXD"), 1392 + MA35_MUX(0x3, "CAN0_TXD"), 1393 + MA35_MUX(0x6, "QSPI1_MISO1"), 1394 + MA35_MUX(0x8, "EBI_AD6"), 1395 + MA35_MUX(0xb, "TM3_EXT"), 1396 + MA35_MUX(0xc, "ECAP1_IC1"), 1397 + MA35_MUX(0xd, "INT1")), 1398 + MA35_PIN(178, PL8, 0xdc, 0x0, 1399 + MA35_MUX(0x0, "GPL8"), 1400 + MA35_MUX(0x1, "EPWM0_CH2"), 1401 + MA35_MUX(0x2, "UART14_nCTS"), 1402 + MA35_MUX(0x3, "UART13_RXD"), 1403 + MA35_MUX(0x4, "I2C5_SDA"), 1404 + MA35_MUX(0x5, "SPI3_SS0"), 1405 + MA35_MUX(0x6, "EPWM0_CH4"), 1406 + MA35_MUX(0x7, "I2S1_LRCK"), 1407 + MA35_MUX(0x8, "EBI_AD7"), 1408 + MA35_MUX(0x9, "SC0_CLK"), 1409 + MA35_MUX(0xb, "TM4"), 1410 + MA35_MUX(0xc, "ECAP1_IC2"), 1411 + MA35_MUX(0xd, "INT2")), 1412 + MA35_PIN(179, PL9, 0xdc, 0x4, 1413 + MA35_MUX(0x0, "GPL9"), 1414 + MA35_MUX(0x1, "EPWM0_CH3"), 1415 + MA35_MUX(0x2, "UART14_nRTS"), 1416 + MA35_MUX(0x3, "UART13_TXD"), 1417 + MA35_MUX(0x4, "I2C5_SCL"), 1418 + MA35_MUX(0x5, "SPI3_CLK"), 1419 + MA35_MUX(0x6, "EPWM1_CH4"), 1420 + MA35_MUX(0x7, "I2S1_BCLK"), 1421 + MA35_MUX(0x8, "EBI_AD8"), 1422 + MA35_MUX(0x9, "SC0_DAT"), 1423 + MA35_MUX(0xb, "TM4_EXT"), 1424 + MA35_MUX(0xc, "QEI0_A"), 1425 + MA35_MUX(0xd, "INT3")), 1426 + MA35_PIN(180, PL10, 0xdc, 0x8, 1427 + MA35_MUX(0x0, "GPL10"), 1428 + MA35_MUX(0x1, "EPWM0_CH4"), 1429 + MA35_MUX(0x2, "UART14_RXD"), 1430 + MA35_MUX(0x3, "CAN3_RXD"), 1431 + MA35_MUX(0x5, "SPI3_MOSI"), 1432 + MA35_MUX(0x6, "EPWM0_CH5"), 1433 + MA35_MUX(0x7, "I2S1_DI"), 1434 + MA35_MUX(0x8, "EBI_AD9"), 1435 + MA35_MUX(0x9, "SC0_RST"), 1436 + MA35_MUX(0xb, "EBI_nWRH"), 1437 + MA35_MUX(0xc, "QEI0_B")), 1438 + MA35_PIN(181, PL11, 0xdc, 0xc, 1439 + MA35_MUX(0x0, "GPL11"), 1440 + MA35_MUX(0x1, "EPWM0_CH5"), 1441 + MA35_MUX(0x2, "UART14_TXD"), 1442 + MA35_MUX(0x3, "CAN3_TXD"), 1443 + MA35_MUX(0x5, "SPI3_MISO"), 1444 + MA35_MUX(0x6, "EPWM1_CH5"), 1445 + MA35_MUX(0x7, "I2S1_DO"), 1446 + MA35_MUX(0x8, "EBI_AD10"), 1447 + MA35_MUX(0x9, "SC0_PWR"), 1448 + MA35_MUX(0xb, "EBI_nWRL"), 1449 + MA35_MUX(0xc, "QEI0_INDEX")), 1450 + MA35_PIN(182, PL12, 0xdc, 0x10, 1451 + MA35_MUX(0x0, "GPL12"), 1452 + MA35_MUX(0x1, "EPWM0_SYNC_IN"), 1453 + MA35_MUX(0x2, "UART7_nCTS"), 1454 + MA35_MUX(0x3, "ECAP1_IC0"), 1455 + MA35_MUX(0x4, "UART14_RXD"), 1456 + MA35_MUX(0x5, "SPI0_SS0"), 1457 + MA35_MUX(0x6, "I2S1_LRCK"), 1458 + MA35_MUX(0x7, "SC1_CLK"), 1459 + MA35_MUX(0x8, "EBI_AD0"), 1460 + MA35_MUX(0x9, "HSUSBH_PWREN"), 1461 + MA35_MUX(0xa, "I2C2_SDA"), 1462 + MA35_MUX(0xb, "TM0"), 1463 + MA35_MUX(0xc, "EPWM0_CH2"), 1464 + MA35_MUX(0xd, "EBI_AD11"), 1465 + MA35_MUX(0xe, "RGMII0_PPS"), 1466 + MA35_MUX(0xf, "RMII0_PPS")), 1467 + MA35_PIN(183, PL13, 0xdc, 0x14, 1468 + MA35_MUX(0x0, "GPL13"), 1469 + MA35_MUX(0x1, "EPWM0_SYNC_OUT"), 1470 + MA35_MUX(0x2, "UART7_nRTS"), 1471 + MA35_MUX(0x3, "ECAP1_IC1"), 1472 + MA35_MUX(0x4, "UART14_TXD"), 1473 + MA35_MUX(0x5, "SPI0_CLK"), 1474 + MA35_MUX(0x6, "I2S1_BCLK"), 1475 + MA35_MUX(0x7, "SC1_DAT"), 1476 + MA35_MUX(0x8, "EBI_AD1"), 1477 + MA35_MUX(0x9, "HSUSBH_OVC"), 1478 + MA35_MUX(0xa, "I2C2_SCL"), 1479 + MA35_MUX(0xb, "TM0_EXT"), 1480 + MA35_MUX(0xc, "EPWM0_CH3"), 1481 + MA35_MUX(0xd, "EBI_AD12"), 1482 + MA35_MUX(0xe, "RGMII1_PPS"), 1483 + MA35_MUX(0xf, "RMII1_PPS")), 1484 + MA35_PIN(184, PL14, 0xdc, 0x18, 1485 + MA35_MUX(0x0, "GPL14"), 1486 + MA35_MUX(0x1, "EPWM0_CH2"), 1487 + MA35_MUX(0x2, "UART7_RXD"), 1488 + MA35_MUX(0x4, "CAN1_RXD"), 1489 + MA35_MUX(0x5, "SPI0_MOSI"), 1490 + MA35_MUX(0x6, "I2S1_DI"), 1491 + MA35_MUX(0x7, "SC1_RST"), 1492 + MA35_MUX(0x8, "EBI_AD2"), 1493 + MA35_MUX(0xb, "TM2"), 1494 + MA35_MUX(0xc, "INT0"), 1495 + MA35_MUX(0xd, "EBI_AD13")), 1496 + MA35_PIN(185, PL15, 0xdc, 0x1c, 1497 + MA35_MUX(0x0, "GPL15"), 1498 + MA35_MUX(0x1, "EPWM0_CH1"), 1499 + MA35_MUX(0x2, "UART7_TXD"), 1500 + MA35_MUX(0x3, "TRACE_CLK"), 1501 + MA35_MUX(0x4, "CAN1_TXD"), 1502 + MA35_MUX(0x5, "SPI0_MISO"), 1503 + MA35_MUX(0x6, "I2S1_DO"), 1504 + MA35_MUX(0x7, "SC1_PWR"), 1505 + MA35_MUX(0x8, "EBI_AD3"), 1506 + MA35_MUX(0xb, "TM2_EXT"), 1507 + MA35_MUX(0xc, "INT2"), 1508 + MA35_MUX(0xd, "EBI_AD14")), 1509 + MA35_PIN(186, PM0, 0xe0, 0x0, 1510 + MA35_MUX(0x0, "GPM0"), 1511 + MA35_MUX(0x4, "I2C4_SDA"), 1512 + MA35_MUX(0x6, "CCAP0_VSYNC"), 1513 + MA35_MUX(0x8, "EBI_AD3"), 1514 + MA35_MUX(0xa, "EBI_ADR3")), 1515 + MA35_PIN(187, PM1, 0xe0, 0x4, 1516 + MA35_MUX(0x0, "GPM1"), 1517 + MA35_MUX(0x4, "I2C4_SCL"), 1518 + MA35_MUX(0x5, "SPI3_I2SMCLK"), 1519 + MA35_MUX(0x6, "CCAP0_SFIELD"), 1520 + MA35_MUX(0x8, "EBI_AD4"), 1521 + MA35_MUX(0xa, "EBI_ADR4")), 1522 + MA35_PIN(188, PM2, 0xe0, 0x8, 1523 + MA35_MUX(0x0, "GPM2"), 1524 + MA35_MUX(0x3, "CAN3_RXD"), 1525 + MA35_MUX(0x6, "CCAP0_DATA0"), 1526 + MA35_MUX(0x8, "EBI_AD5"), 1527 + MA35_MUX(0xa, "EBI_ADR5")), 1528 + MA35_PIN(189, PM3, 0xe0, 0xc, 1529 + MA35_MUX(0x0, "GPM3"), 1530 + MA35_MUX(0x3, "CAN3_TXD"), 1531 + MA35_MUX(0x6, "CCAP0_DATA1"), 1532 + MA35_MUX(0x8, "EBI_AD6"), 1533 + MA35_MUX(0xa, "EBI_ADR6")), 1534 + MA35_PIN(190, PM4, 0xe0, 0x10, 1535 + MA35_MUX(0x0, "GPM4"), 1536 + MA35_MUX(0x4, "I2C5_SDA"), 1537 + MA35_MUX(0x6, "CCAP0_DATA2"), 1538 + MA35_MUX(0x8, "EBI_AD7"), 1539 + MA35_MUX(0xa, "EBI_ADR7")), 1540 + MA35_PIN(191, PM5, 0xe0, 0x14, 1541 + MA35_MUX(0x0, "GPM5"), 1542 + MA35_MUX(0x4, "I2C5_SCL"), 1543 + MA35_MUX(0x6, "CCAP0_DATA3"), 1544 + MA35_MUX(0x8, "EBI_AD8"), 1545 + MA35_MUX(0xa, "EBI_ADR8")), 1546 + MA35_PIN(192, PM6, 0xe0, 0x18, 1547 + MA35_MUX(0x0, "GPM6"), 1548 + MA35_MUX(0x3, "CAN0_RXD"), 1549 + MA35_MUX(0x6, "CCAP0_DATA4"), 1550 + MA35_MUX(0x8, "EBI_AD9"), 1551 + MA35_MUX(0xa, "EBI_ADR9")), 1552 + MA35_PIN(193, PM7, 0xe0, 0x1c, 1553 + MA35_MUX(0x0, "GPM7"), 1554 + MA35_MUX(0x3, "CAN0_TXD"), 1555 + MA35_MUX(0x6, "CCAP0_DATA5"), 1556 + MA35_MUX(0x8, "EBI_AD10"), 1557 + MA35_MUX(0xa, "EBI_ADR10")), 1558 + MA35_PIN(194, PM8, 0xe4, 0x0, 1559 + MA35_MUX(0x0, "GPM8"), 1560 + MA35_MUX(0x4, "I2C0_SDA"), 1561 + MA35_MUX(0x6, "CCAP0_DATA6"), 1562 + MA35_MUX(0x8, "EBI_AD11"), 1563 + MA35_MUX(0xa, "EBI_ADR11")), 1564 + MA35_PIN(195, PM9, 0xe4, 0x4, 1565 + MA35_MUX(0x0, "GPM9"), 1566 + MA35_MUX(0x4, "I2C0_SCL"), 1567 + MA35_MUX(0x6, "CCAP0_DATA7"), 1568 + MA35_MUX(0x8, "EBI_AD12"), 1569 + MA35_MUX(0xa, "EBI_ADR12")), 1570 + MA35_PIN(196, PM10, 0xe4, 0x8, 1571 + MA35_MUX(0x0, "GPM10"), 1572 + MA35_MUX(0x1, "EPWM1_CH2"), 1573 + MA35_MUX(0x3, "CAN2_RXD"), 1574 + MA35_MUX(0x5, "SPI3_SS0"), 1575 + MA35_MUX(0x6, "CCAP0_DATA8"), 1576 + MA35_MUX(0x7, "SPI2_I2SMCLK"), 1577 + MA35_MUX(0x8, "EBI_AD13"), 1578 + MA35_MUX(0xa, "EBI_ADR13")), 1579 + MA35_PIN(197, PM11, 0xe4, 0xc, 1580 + MA35_MUX(0x0, "GPM11"), 1581 + MA35_MUX(0x1, "EPWM1_CH3"), 1582 + MA35_MUX(0x3, "CAN2_TXD"), 1583 + MA35_MUX(0x5, "SPI3_SS1"), 1584 + MA35_MUX(0x6, "CCAP0_DATA9"), 1585 + MA35_MUX(0x7, "SPI2_SS1"), 1586 + MA35_MUX(0x8, "EBI_AD14"), 1587 + MA35_MUX(0xa, "EBI_ADR14")), 1588 + MA35_PIN(198, PM12, 0xe4, 0x10, 1589 + MA35_MUX(0x0, "GPM12"), 1590 + MA35_MUX(0x1, "EPWM1_CH4"), 1591 + MA35_MUX(0x2, "UART10_nCTS"), 1592 + MA35_MUX(0x3, "TRACE_DATA0"), 1593 + MA35_MUX(0x4, "UART11_RXD"), 1594 + MA35_MUX(0x5, "I2C2_SDA"), 1595 + MA35_MUX(0x7, "SC1_nCD"), 1596 + MA35_MUX(0x8, "EBI_AD8"), 1597 + MA35_MUX(0x9, "I2S1_MCLK"), 1598 + MA35_MUX(0xb, "TM8")), 1599 + MA35_PIN(199, PM13, 0xe4, 0x14, 1600 + MA35_MUX(0x0, "GPM13"), 1601 + MA35_MUX(0x1, "EPWM1_CH5"), 1602 + MA35_MUX(0x2, "UART10_nRTS"), 1603 + MA35_MUX(0x3, "TRACE_DATA1"), 1604 + MA35_MUX(0x4, "UART11_TXD"), 1605 + MA35_MUX(0x5, "I2C2_SCL"), 1606 + MA35_MUX(0x8, "EBI_AD9"), 1607 + MA35_MUX(0x9, "ECAP1_IC0"), 1608 + MA35_MUX(0xb, "TM8_EXT")), 1609 + MA35_PIN(200, PM14, 0xe4, 0x18, 1610 + MA35_MUX(0x0, "GPM14"), 1611 + MA35_MUX(0x1, "EPWM1_BRAKE0"), 1612 + MA35_MUX(0x2, "UART10_RXD"), 1613 + MA35_MUX(0x3, "TRACE_DATA2"), 1614 + MA35_MUX(0x4, "CAN2_RXD"), 1615 + MA35_MUX(0x6, "I2C3_SDA"), 1616 + MA35_MUX(0x8, "EBI_AD10"), 1617 + MA35_MUX(0x9, "ECAP1_IC1"), 1618 + MA35_MUX(0xb, "TM10"), 1619 + MA35_MUX(0xd, "INT1")), 1620 + MA35_PIN(201, PM15, 0xe4, 0x1c, 1621 + MA35_MUX(0x0, "GPM15"), 1622 + MA35_MUX(0x1, "EPWM1_BRAKE1"), 1623 + MA35_MUX(0x2, "UART10_TXD"), 1624 + MA35_MUX(0x3, "TRACE_DATA3"), 1625 + MA35_MUX(0x4, "CAN2_TXD"), 1626 + MA35_MUX(0x6, "I2C3_SCL"), 1627 + MA35_MUX(0x8, "EBI_AD11"), 1628 + MA35_MUX(0x9, "ECAP1_IC2"), 1629 + MA35_MUX(0xb, "TM10_EXT"), 1630 + MA35_MUX(0xd, "INT2")), 1631 + MA35_PIN(202, PN0, 0xe8, 0x0, 1632 + MA35_MUX(0x0, "GPN0"), 1633 + MA35_MUX(0x4, "I2C2_SDA"), 1634 + MA35_MUX(0x6, "CCAP1_DATA0")), 1635 + MA35_PIN(203, PN1, 0xe8, 0x4, 1636 + MA35_MUX(0x0, "GPN1"), 1637 + MA35_MUX(0x4, "I2C2_SCL"), 1638 + MA35_MUX(0x6, "CCAP1_DATA1")), 1639 + MA35_PIN(204, PN2, 0xe8, 0x8, 1640 + MA35_MUX(0x0, "GPN2"), 1641 + MA35_MUX(0x3, "CAN0_RXD"), 1642 + MA35_MUX(0x6, "CCAP1_DATA2")), 1643 + MA35_PIN(205, PN3, 0xe8, 0xc, 1644 + MA35_MUX(0x0, "GPN3"), 1645 + MA35_MUX(0x3, "CAN0_TXD"), 1646 + MA35_MUX(0x6, "CCAP1_DATA3")), 1647 + MA35_PIN(206, PN4, 0xe8, 0x10, 1648 + MA35_MUX(0x0, "GPN4"), 1649 + MA35_MUX(0x4, "I2C1_SDA"), 1650 + MA35_MUX(0x6, "CCAP1_DATA4")), 1651 + MA35_PIN(207, PN5, 0xe8, 0x14, 1652 + MA35_MUX(0x0, "GPN5"), 1653 + MA35_MUX(0x4, "I2C1_SCL"), 1654 + MA35_MUX(0x6, "CCAP1_DATA5")), 1655 + MA35_PIN(208, PN6, 0xe8, 0x18, 1656 + MA35_MUX(0x0, "GPN6"), 1657 + MA35_MUX(0x3, "CAN1_RXD"), 1658 + MA35_MUX(0x6, "CCAP1_DATA6")), 1659 + MA35_PIN(209, PN7, 0xe8, 0x1c, 1660 + MA35_MUX(0x0, "GPN7"), 1661 + MA35_MUX(0x3, "CAN1_TXD"), 1662 + MA35_MUX(0x6, "CCAP1_DATA7")), 1663 + MA35_PIN(210, PN10, 0xec, 0x8, 1664 + MA35_MUX(0x0, "GPN10"), 1665 + MA35_MUX(0x3, "CAN2_RXD"), 1666 + MA35_MUX(0x6, "CCAP1_SCLK")), 1667 + MA35_PIN(211, PN11, 0xec, 0xc, 1668 + MA35_MUX(0x0, "GPN11"), 1669 + MA35_MUX(0x3, "CAN2_TXD"), 1670 + MA35_MUX(0x6, "CCAP1_PIXCLK")), 1671 + MA35_PIN(212, PN12, 0xec, 0x10, 1672 + MA35_MUX(0x0, "GPN12"), 1673 + MA35_MUX(0x2, "UART6_nCTS"), 1674 + MA35_MUX(0x3, "UART12_RXD"), 1675 + MA35_MUX(0x4, "I2C5_SDA"), 1676 + MA35_MUX(0x6, "CCAP1_HSYNC")), 1677 + MA35_PIN(213, PN13, 0xec, 0x14, 1678 + MA35_MUX(0x0, "GPN13"), 1679 + MA35_MUX(0x2, "UART6_nRTS"), 1680 + MA35_MUX(0x3, "UART12_TXD"), 1681 + MA35_MUX(0x4, "I2C5_SCL"), 1682 + MA35_MUX(0x6, "CCAP1_VSYNC")), 1683 + MA35_PIN(214, PN14, 0xec, 0x18, 1684 + MA35_MUX(0x0, "GPN14"), 1685 + MA35_MUX(0x2, "UART6_RXD"), 1686 + MA35_MUX(0x3, "CAN3_RXD"), 1687 + MA35_MUX(0x5, "SPI1_SS1"), 1688 + MA35_MUX(0x6, "CCAP1_SFIELD"), 1689 + MA35_MUX(0x7, "SPI1_I2SMCLK")), 1690 + MA35_PIN(215, PN15, 0xec, 0x1c, 1691 + MA35_MUX(0x0, "GPN15"), 1692 + MA35_MUX(0x1, "EPWM2_CH4"), 1693 + MA35_MUX(0x2, "UART6_TXD"), 1694 + MA35_MUX(0x3, "CAN3_TXD"), 1695 + MA35_MUX(0x5, "I2S0_MCLK"), 1696 + MA35_MUX(0x6, "SPI1_SS1"), 1697 + MA35_MUX(0x7, "SPI1_I2SMCLK"), 1698 + MA35_MUX(0x8, "SC0_nCD"), 1699 + MA35_MUX(0x9, "EADC0_ST"), 1700 + MA35_MUX(0xa, "CLKO"), 1701 + MA35_MUX(0xb, "TM6")), 1702 + MA35_PIN(216, PN8, 0xec, 0x0, 1703 + MA35_MUX(0x0, "GPN8"), 1704 + MA35_MUX(0x1, "EPWM2_CH4"), 1705 + MA35_MUX(0x4, "I2C0_SDA"), 1706 + MA35_MUX(0x5, "SPI2_I2SMCLK"), 1707 + MA35_MUX(0x6, "CCAP1_DATA8")), 1708 + MA35_PIN(217, PN9, 0xec, 0x4, 1709 + MA35_MUX(0x0, "GPN9"), 1710 + MA35_MUX(0x1, "EPWM2_CH5"), 1711 + MA35_MUX(0x4, "I2C0_SCL"), 1712 + MA35_MUX(0x5, "SPI1_I2SMCLK"), 1713 + MA35_MUX(0x6, "CCAP1_DATA9")), 1714 + MA35_PIN(218, PN10, 0xec, 0x8, 1715 + MA35_MUX(0x0, "GPN10"), 1716 + MA35_MUX(0x3, "CAN2_RXD"), 1717 + MA35_MUX(0x4, "USBHL2_DM"), 1718 + MA35_MUX(0x6, "CCAP1_SCLK")), 1719 + MA35_PIN(219, PN11, 0xec, 0xc, 1720 + MA35_MUX(0x0, "GPN11"), 1721 + MA35_MUX(0x3, "CAN2_TXD"), 1722 + MA35_MUX(0x4, "USBHL2_DP"), 1723 + MA35_MUX(0x6, "CCAP1_PIXCLK")), 1724 + MA35_PIN(220, PN12, 0xec, 0x10, 1725 + MA35_MUX(0x0, "GPN12"), 1726 + MA35_MUX(0x2, "UART6_nCTS"), 1727 + MA35_MUX(0x3, "UART12_RXD"), 1728 + MA35_MUX(0x4, "I2C5_SDA"), 1729 + MA35_MUX(0x6, "CCAP1_HSYNC")), 1730 + MA35_PIN(221, PN13, 0xec, 0x14, 1731 + MA35_MUX(0x0, "GPN13"), 1732 + MA35_MUX(0x2, "UART6_nRTS"), 1733 + MA35_MUX(0x3, "UART12_TXD"), 1734 + MA35_MUX(0x4, "I2C5_SCL"), 1735 + MA35_MUX(0x6, "CCAP1_VSYNC")), 1736 + MA35_PIN(222, PN14, 0xec, 0x18, 1737 + MA35_MUX(0x0, "GPN14"), 1738 + MA35_MUX(0x2, "UART6_RXD"), 1739 + MA35_MUX(0x3, "CAN3_RXD"), 1740 + MA35_MUX(0x4, "USBHL3_DM"), 1741 + MA35_MUX(0x5, "SPI1_SS1"), 1742 + MA35_MUX(0x6, "CCAP1_SFIELD"), 1743 + MA35_MUX(0x7, "SPI1_I2SMCLK")), 1744 + MA35_PIN(223, PN15, 0xec, 0x1c, 1745 + MA35_MUX(0x0, "GPN15"), 1746 + MA35_MUX(0x1, "EPWM2_CH4"), 1747 + MA35_MUX(0x2, "UART6_TXD"), 1748 + MA35_MUX(0x3, "CAN3_TXD"), 1749 + MA35_MUX(0x4, "USBHL3_DP"), 1750 + MA35_MUX(0x5, "I2S0_MCLK"), 1751 + MA35_MUX(0x6, "SPI1_SS1"), 1752 + MA35_MUX(0x7, "SPI1_I2SMCLK"), 1753 + MA35_MUX(0x8, "SC0_nCD"), 1754 + MA35_MUX(0x9, "EADC0_ST"), 1755 + MA35_MUX(0xa, "CLKO"), 1756 + MA35_MUX(0xb, "TM6")), 1757 + }; 1758 + 1759 + static int ma35d1_get_pin_num(int offset, int shift) 1760 + { 1761 + return (offset - 0x80) * 2 + shift / 4; 1762 + } 1763 + 1764 + static struct ma35_pinctrl_soc_info ma35d1_pinctrl_info = { 1765 + .pins = ma35d1_pins, 1766 + .npins = ARRAY_SIZE(ma35d1_pins), 1767 + .get_pin_num = ma35d1_get_pin_num, 1768 + }; 1769 + 1770 + static DEFINE_NOIRQ_DEV_PM_OPS(ma35_pinctrl_pm_ops, ma35_pinctrl_suspend, ma35_pinctrl_resume); 1771 + 1772 + static int ma35d1_pinctrl_probe(struct platform_device *pdev) 1773 + { 1774 + return ma35_pinctrl_probe(pdev, &ma35d1_pinctrl_info); 1775 + } 1776 + 1777 + static const struct of_device_id ma35d1_pinctrl_of_match[] = { 1778 + { .compatible = "nuvoton,ma35d1-pinctrl" }, 1779 + { }, 1780 + }; 1781 + 1782 + static struct platform_driver ma35d1_pinctrl_driver = { 1783 + .probe = ma35d1_pinctrl_probe, 1784 + .driver = { 1785 + .name = "ma35d1-pinctrl", 1786 + .pm = pm_sleep_ptr(&ma35_pinctrl_pm_ops), 1787 + .of_match_table = ma35d1_pinctrl_of_match, 1788 + }, 1789 + }; 1790 + 1791 + static int __init ma35d1_pinctrl_init(void) 1792 + { 1793 + return platform_driver_register(&ma35d1_pinctrl_driver); 1794 + } 1795 + arch_initcall(ma35d1_pinctrl_init); 1796 + 1797 + MODULE_AUTHOR("schung@nuvoton.com"); 1798 + MODULE_DESCRIPTION("Nuvoton MA35D1 pinctrl driver"); 1799 + MODULE_LICENSE("GPL");