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_setting { 102 u32 offset; 103 u32 shift; 104 u32 muxval; 105 unsigned long *configs; 106 unsigned int nconfigs; 107 }; 108 109 struct ma35_pin_bank { 110 void __iomem *reg_base; 111 struct clk *clk; 112 int irq; 113 u8 bank_num; 114 u8 nr_pins; 115 bool valid; 116 const char *name; 117 struct fwnode_handle *fwnode; 118 struct gpio_chip chip; 119 u32 irqtype; 120 u32 irqinten; 121 struct regmap *regmap; 122 struct device *dev; 123 }; 124 125 struct ma35_pin_ctrl { 126 struct ma35_pin_bank *pin_banks; 127 u32 nr_banks; 128 u32 nr_pins; 129 }; 130 131 struct ma35_pinctrl { 132 struct device *dev; 133 struct ma35_pin_ctrl *ctrl; 134 struct pinctrl_dev *pctl; 135 const struct ma35_pinctrl_soc_info *info; 136 struct regmap *regmap; 137 struct group_desc *groups; 138 unsigned int ngroups; 139 struct pinfunction *functions; 140 unsigned int nfunctions; 141 }; 142 143 static DEFINE_RAW_SPINLOCK(ma35_lock); 144 145 static int ma35_get_groups_count(struct pinctrl_dev *pctldev) 146 { 147 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 148 149 return npctl->ngroups; 150 } 151 152 static const char *ma35_get_group_name(struct pinctrl_dev *pctldev, unsigned int selector) 153 { 154 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 155 156 return npctl->groups[selector].grp.name; 157 } 158 159 static int ma35_get_group_pins(struct pinctrl_dev *pctldev, unsigned int selector, 160 const unsigned int **pins, unsigned int *npins) 161 { 162 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 163 164 if (selector >= npctl->ngroups) 165 return -EINVAL; 166 167 *pins = npctl->groups[selector].grp.pins; 168 *npins = npctl->groups[selector].grp.npins; 169 170 return 0; 171 } 172 173 static struct group_desc * 174 ma35_pinctrl_find_group_by_name(const struct ma35_pinctrl *npctl, const char *name) 175 { 176 int i; 177 178 for (i = 0; i < npctl->ngroups; i++) { 179 if (!strcmp(npctl->groups[i].grp.name, name)) 180 return &npctl->groups[i]; 181 } 182 return NULL; 183 } 184 185 static int ma35_pinctrl_dt_node_to_map_func(struct pinctrl_dev *pctldev, 186 struct device_node *np, 187 struct pinctrl_map **map, 188 unsigned int *num_maps) 189 { 190 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 191 struct ma35_pin_setting *setting; 192 struct pinctrl_map *new_map; 193 struct device_node *parent; 194 struct group_desc *grp; 195 int map_num = 1; 196 int i; 197 198 /* 199 * first find the group of this node and check if we need create 200 * config maps for pins 201 */ 202 grp = ma35_pinctrl_find_group_by_name(npctl, np->name); 203 if (!grp) { 204 dev_err(npctl->dev, "unable to find group for node %s\n", np->name); 205 return -EINVAL; 206 } 207 208 map_num += grp->grp.npins; 209 new_map = kcalloc(map_num, sizeof(*new_map), GFP_KERNEL); 210 if (!new_map) 211 return -ENOMEM; 212 213 *map = new_map; 214 *num_maps = map_num; 215 /* create mux map */ 216 parent = of_get_parent(np); 217 if (!parent) 218 return -EINVAL; 219 220 setting = grp->data; 221 222 new_map[0].type = PIN_MAP_TYPE_MUX_GROUP; 223 new_map[0].data.mux.function = parent->name; 224 new_map[0].data.mux.group = np->name; 225 of_node_put(parent); 226 227 new_map++; 228 for (i = 0; i < grp->grp.npins; i++) { 229 new_map[i].type = PIN_MAP_TYPE_CONFIGS_PIN; 230 new_map[i].data.configs.group_or_pin = pin_get_name(pctldev, grp->grp.pins[i]); 231 new_map[i].data.configs.configs = setting[i].configs; 232 new_map[i].data.configs.num_configs = setting[i].nconfigs; 233 } 234 dev_dbg(pctldev->dev, "maps: function %s group %s num %d\n", 235 (*map)->data.mux.function, (*map)->data.mux.group, map_num); 236 237 return 0; 238 } 239 240 static const struct pinctrl_ops ma35_pctrl_ops = { 241 .get_groups_count = ma35_get_groups_count, 242 .get_group_name = ma35_get_group_name, 243 .get_group_pins = ma35_get_group_pins, 244 .dt_node_to_map = ma35_pinctrl_dt_node_to_map_func, 245 .dt_free_map = pinconf_generic_dt_free_map, 246 }; 247 248 static int ma35_pinmux_get_func_count(struct pinctrl_dev *pctldev) 249 { 250 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 251 252 return npctl->nfunctions; 253 } 254 255 static const char *ma35_pinmux_get_func_name(struct pinctrl_dev *pctldev, 256 unsigned int selector) 257 { 258 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 259 260 return npctl->functions[selector].name; 261 } 262 263 static int ma35_pinmux_get_func_groups(struct pinctrl_dev *pctldev, 264 unsigned int function, 265 const char *const **groups, 266 unsigned int *const num_groups) 267 { 268 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 269 270 *groups = npctl->functions[function].groups; 271 *num_groups = npctl->functions[function].ngroups; 272 273 return 0; 274 } 275 276 static int ma35_pinmux_set_mux(struct pinctrl_dev *pctldev, unsigned int selector, 277 unsigned int group) 278 { 279 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 280 struct group_desc *grp = &npctl->groups[group]; 281 struct ma35_pin_setting *setting = grp->data; 282 u32 i, regval; 283 284 dev_dbg(npctl->dev, "enable function %s group %s\n", 285 npctl->functions[selector].name, grp->grp.name); 286 287 for (i = 0; i < grp->grp.npins; i++) { 288 regmap_read(npctl->regmap, setting->offset, ®val); 289 regval &= ~GENMASK(setting->shift + MA35_MFP_BITS_PER_PORT - 1, 290 setting->shift); 291 regval |= setting->muxval << setting->shift; 292 regmap_write(npctl->regmap, setting->offset, regval); 293 setting++; 294 } 295 return 0; 296 } 297 298 static const struct pinmux_ops ma35_pmx_ops = { 299 .get_functions_count = ma35_pinmux_get_func_count, 300 .get_function_name = ma35_pinmux_get_func_name, 301 .get_function_groups = ma35_pinmux_get_func_groups, 302 .set_mux = ma35_pinmux_set_mux, 303 .strict = true, 304 }; 305 306 static void ma35_gpio_set_mode(void __iomem *reg_mode, unsigned int gpio, u32 mode) 307 { 308 u32 regval = readl(reg_mode); 309 310 regval &= ~MA35_GP_MODE_MASK(gpio); 311 regval |= field_prep(MA35_GP_MODE_MASK(gpio), mode); 312 313 writel(regval, reg_mode); 314 } 315 316 static u32 ma35_gpio_get_mode(void __iomem *reg_mode, unsigned int gpio) 317 { 318 u32 regval = readl(reg_mode); 319 320 return field_get(MA35_GP_MODE_MASK(gpio), regval); 321 } 322 323 static int ma35_gpio_core_direction_in(struct gpio_chip *gc, unsigned int gpio) 324 { 325 struct ma35_pin_bank *bank = gpiochip_get_data(gc); 326 void __iomem *reg_mode = bank->reg_base + MA35_GP_REG_MODE; 327 328 guard(raw_spinlock_irqsave)(&ma35_lock); 329 330 ma35_gpio_set_mode(reg_mode, gpio, MA35_GP_MODE_INPUT); 331 332 return 0; 333 } 334 335 static int ma35_gpio_core_direction_out(struct gpio_chip *gc, unsigned int gpio, int val) 336 { 337 struct ma35_pin_bank *bank = gpiochip_get_data(gc); 338 void __iomem *reg_dout = bank->reg_base + MA35_GP_REG_DOUT; 339 void __iomem *reg_mode = bank->reg_base + MA35_GP_REG_MODE; 340 unsigned int regval; 341 342 guard(raw_spinlock_irqsave)(&ma35_lock); 343 344 regval = readl(reg_dout); 345 if (val) 346 regval |= BIT(gpio); 347 else 348 regval &= ~BIT(gpio); 349 writel(regval, reg_dout); 350 351 ma35_gpio_set_mode(reg_mode, gpio, MA35_GP_MODE_OUTPUT); 352 353 return 0; 354 } 355 356 static int ma35_gpio_core_get(struct gpio_chip *gc, unsigned int gpio) 357 { 358 struct ma35_pin_bank *bank = gpiochip_get_data(gc); 359 void __iomem *reg_pin = bank->reg_base + MA35_GP_REG_PIN; 360 361 return !!(readl(reg_pin) & BIT(gpio)); 362 } 363 364 static int ma35_gpio_core_set(struct gpio_chip *gc, unsigned int gpio, int val) 365 { 366 struct ma35_pin_bank *bank = gpiochip_get_data(gc); 367 void __iomem *reg_dout = bank->reg_base + MA35_GP_REG_DOUT; 368 u32 regval; 369 370 if (val) 371 regval = readl(reg_dout) | BIT(gpio); 372 else 373 regval = readl(reg_dout) & ~BIT(gpio); 374 375 writel(regval, reg_dout); 376 377 return 0; 378 } 379 380 static int ma35_gpio_core_to_request(struct gpio_chip *gc, unsigned int gpio) 381 { 382 struct ma35_pin_bank *bank = gpiochip_get_data(gc); 383 u32 reg_offs, bit_offs, regval; 384 385 if (gpio < 8) { 386 /* The MFP low register controls port 0 ~ 7 */ 387 reg_offs = bank->bank_num * MA35_MFP_REG_SZ_PER_BANK; 388 bit_offs = gpio * MA35_MFP_BITS_PER_PORT; 389 } else { 390 /* The MFP high register controls port 8 ~ 15 */ 391 reg_offs = bank->bank_num * MA35_MFP_REG_SZ_PER_BANK + 4; 392 bit_offs = (gpio - 8) * MA35_MFP_BITS_PER_PORT; 393 } 394 395 regmap_read(bank->regmap, MA35_MFP_REG_BASE + reg_offs, ®val); 396 regval &= ~GENMASK(bit_offs + MA35_MFP_BITS_PER_PORT - 1, bit_offs); 397 regmap_write(bank->regmap, MA35_MFP_REG_BASE + reg_offs, regval); 398 399 return 0; 400 } 401 402 static void ma35_irq_gpio_ack(struct irq_data *d) 403 { 404 struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d)); 405 void __iomem *reg_intsrc = bank->reg_base + MA35_GP_REG_INTSRC; 406 irq_hw_number_t hwirq = irqd_to_hwirq(d); 407 408 writel(BIT(hwirq), reg_intsrc); 409 } 410 411 static void ma35_irq_gpio_mask(struct irq_data *d) 412 { 413 struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d)); 414 void __iomem *reg_ien = bank->reg_base + MA35_GP_REG_INTEN; 415 irq_hw_number_t hwirq = irqd_to_hwirq(d); 416 u32 regval; 417 418 regval = readl(reg_ien); 419 420 regval &= ~MA35_GP_INTEN_BOTH(hwirq); 421 422 writel(regval, reg_ien); 423 } 424 425 static void ma35_irq_gpio_unmask(struct irq_data *d) 426 { 427 struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d)); 428 void __iomem *reg_itype = bank->reg_base + MA35_GP_REG_INTTYPE; 429 void __iomem *reg_ien = bank->reg_base + MA35_GP_REG_INTEN; 430 irq_hw_number_t hwirq = irqd_to_hwirq(d); 431 u32 bval, regval; 432 433 bval = bank->irqtype & BIT(hwirq); 434 regval = readl(reg_itype); 435 regval &= ~BIT(hwirq); 436 writel(regval | bval, reg_itype); 437 438 bval = bank->irqinten & MA35_GP_INTEN_BOTH(hwirq); 439 regval = readl(reg_ien); 440 regval &= ~MA35_GP_INTEN_BOTH(hwirq); 441 writel(regval | bval, reg_ien); 442 } 443 444 static int ma35_irq_irqtype(struct irq_data *d, unsigned int type) 445 { 446 struct ma35_pin_bank *bank = gpiochip_get_data(irq_data_get_irq_chip_data(d)); 447 irq_hw_number_t hwirq = irqd_to_hwirq(d); 448 449 switch (type) { 450 case IRQ_TYPE_EDGE_BOTH: 451 irq_set_handler_locked(d, handle_edge_irq); 452 bank->irqtype &= ~BIT(hwirq); 453 bank->irqinten |= MA35_GP_INTEN_BOTH(hwirq); 454 break; 455 case IRQ_TYPE_EDGE_RISING: 456 case IRQ_TYPE_LEVEL_HIGH: 457 irq_set_handler_locked(d, handle_edge_irq); 458 bank->irqtype &= ~BIT(hwirq); 459 bank->irqinten |= MA35_GP_INTEN_H(hwirq); 460 bank->irqinten &= ~MA35_GP_INTEN_L(hwirq); 461 break; 462 case IRQ_TYPE_EDGE_FALLING: 463 case IRQ_TYPE_LEVEL_LOW: 464 irq_set_handler_locked(d, handle_edge_irq); 465 bank->irqtype &= ~BIT(hwirq); 466 bank->irqinten |= MA35_GP_INTEN_L(hwirq); 467 bank->irqinten &= ~MA35_GP_INTEN_H(hwirq); 468 break; 469 default: 470 return -EINVAL; 471 } 472 473 writel(bank->irqtype, bank->reg_base + MA35_GP_REG_INTTYPE); 474 writel(bank->irqinten, bank->reg_base + MA35_GP_REG_INTEN); 475 476 return 0; 477 } 478 479 static struct irq_chip ma35_gpio_irqchip = { 480 .name = "MA35-GPIO-IRQ", 481 .irq_disable = ma35_irq_gpio_mask, 482 .irq_enable = ma35_irq_gpio_unmask, 483 .irq_ack = ma35_irq_gpio_ack, 484 .irq_mask = ma35_irq_gpio_mask, 485 .irq_unmask = ma35_irq_gpio_unmask, 486 .irq_set_type = ma35_irq_irqtype, 487 .flags = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_IMMUTABLE, 488 GPIOCHIP_IRQ_RESOURCE_HELPERS, 489 }; 490 491 static void ma35_irq_demux_intgroup(struct irq_desc *desc) 492 { 493 struct ma35_pin_bank *bank = gpiochip_get_data(irq_desc_get_handler_data(desc)); 494 struct irq_domain *irqdomain = bank->chip.irq.domain; 495 struct irq_chip *irqchip = irq_desc_get_chip(desc); 496 unsigned long isr; 497 int offset; 498 499 chained_irq_enter(irqchip, desc); 500 501 isr = readl(bank->reg_base + MA35_GP_REG_INTSRC); 502 503 for_each_set_bit(offset, &isr, bank->nr_pins) 504 generic_handle_irq(irq_find_mapping(irqdomain, offset)); 505 506 chained_irq_exit(irqchip, desc); 507 } 508 509 static int ma35_gpiolib_register(struct platform_device *pdev, struct ma35_pinctrl *npctl) 510 { 511 struct ma35_pin_ctrl *ctrl = npctl->ctrl; 512 struct ma35_pin_bank *bank = ctrl->pin_banks; 513 int ret; 514 int i; 515 516 for (i = 0; i < ctrl->nr_banks; i++, bank++) { 517 if (!bank->valid) { 518 dev_warn(&pdev->dev, "%pfw: bank is not valid\n", bank->fwnode); 519 continue; 520 } 521 bank->irqtype = 0; 522 bank->irqinten = 0; 523 bank->chip.label = bank->name; 524 bank->chip.parent = &pdev->dev; 525 bank->chip.request = ma35_gpio_core_to_request; 526 bank->chip.direction_input = ma35_gpio_core_direction_in; 527 bank->chip.direction_output = ma35_gpio_core_direction_out; 528 bank->chip.get = ma35_gpio_core_get; 529 bank->chip.set = ma35_gpio_core_set; 530 bank->chip.base = -1; 531 bank->chip.ngpio = bank->nr_pins; 532 bank->chip.can_sleep = false; 533 534 if (bank->irq > 0) { 535 struct gpio_irq_chip *girq; 536 537 girq = &bank->chip.irq; 538 gpio_irq_chip_set_chip(girq, &ma35_gpio_irqchip); 539 girq->parent_handler = ma35_irq_demux_intgroup; 540 girq->num_parents = 1; 541 542 girq->parents = devm_kcalloc(&pdev->dev, girq->num_parents, 543 sizeof(*girq->parents), GFP_KERNEL); 544 if (!girq->parents) 545 return -ENOMEM; 546 547 girq->parents[0] = bank->irq; 548 girq->default_type = IRQ_TYPE_NONE; 549 girq->handler = handle_bad_irq; 550 } 551 552 ret = devm_gpiochip_add_data(&pdev->dev, &bank->chip, bank); 553 if (ret) { 554 dev_err(&pdev->dev, "failed to register gpio_chip %s, error code: %d\n", 555 bank->chip.label, ret); 556 return ret; 557 } 558 } 559 return 0; 560 } 561 562 static int ma35_get_bank_data(struct ma35_pin_bank *bank) 563 { 564 bank->reg_base = fwnode_iomap(bank->fwnode, 0); 565 if (!bank->reg_base) 566 return -ENOMEM; 567 568 bank->irq = fwnode_irq_get(bank->fwnode, 0); 569 570 bank->nr_pins = MA35_GPIO_PORT_MAX; 571 572 bank->clk = of_clk_get(to_of_node(bank->fwnode), 0); 573 if (IS_ERR(bank->clk)) 574 return PTR_ERR(bank->clk); 575 576 return clk_prepare_enable(bank->clk); 577 } 578 579 static int ma35_pinctrl_get_soc_data(struct ma35_pinctrl *pctl, struct platform_device *pdev) 580 { 581 struct fwnode_handle *child; 582 struct ma35_pin_ctrl *ctrl; 583 struct ma35_pin_bank *bank; 584 int i, id = 0; 585 586 ctrl = pctl->ctrl; 587 ctrl->nr_banks = MA35_GPIO_BANK_MAX; 588 589 ctrl->pin_banks = devm_kcalloc(&pdev->dev, ctrl->nr_banks, 590 sizeof(*ctrl->pin_banks), GFP_KERNEL); 591 if (!ctrl->pin_banks) 592 return -ENOMEM; 593 594 for (i = 0; i < ctrl->nr_banks; i++) { 595 ctrl->pin_banks[i].bank_num = i; 596 ctrl->pin_banks[i].name = gpio_group_name[i]; 597 } 598 599 for_each_gpiochip_node(&pdev->dev, child) { 600 bank = &ctrl->pin_banks[id]; 601 bank->fwnode = child; 602 bank->regmap = pctl->regmap; 603 bank->dev = &pdev->dev; 604 if (!ma35_get_bank_data(bank)) 605 bank->valid = true; 606 id++; 607 } 608 return 0; 609 } 610 611 static void ma35_gpio_cla_port(unsigned int gpio_num, unsigned int *group, 612 unsigned int *num) 613 { 614 *group = gpio_num / MA35_GPIO_PORT_MAX; 615 *num = gpio_num % MA35_GPIO_PORT_MAX; 616 } 617 618 static int ma35_pinconf_set_pull(struct ma35_pinctrl *npctl, unsigned int pin, 619 int pull_up) 620 { 621 unsigned int port, group_num; 622 void __iomem *base; 623 u32 regval, pull_sel = MA35_GP_PUSEL_DISABLE; 624 625 ma35_gpio_cla_port(pin, &group_num, &port); 626 base = npctl->ctrl->pin_banks[group_num].reg_base; 627 628 regval = readl(base + MA35_GP_REG_PUSEL); 629 regval &= ~MA35_GP_PUSEL_MASK(port); 630 631 switch (pull_up) { 632 case PIN_CONFIG_BIAS_PULL_UP: 633 pull_sel = MA35_GP_PUSEL_PULL_UP; 634 break; 635 636 case PIN_CONFIG_BIAS_PULL_DOWN: 637 pull_sel = MA35_GP_PUSEL_PULL_DOWN; 638 break; 639 640 case PIN_CONFIG_BIAS_DISABLE: 641 pull_sel = MA35_GP_PUSEL_DISABLE; 642 break; 643 } 644 645 regval |= field_prep(MA35_GP_PUSEL_MASK(port), pull_sel); 646 writel(regval, base + MA35_GP_REG_PUSEL); 647 648 return 0; 649 } 650 651 static int ma35_pinconf_get_output(struct ma35_pinctrl *npctl, unsigned int pin) 652 { 653 unsigned int port, group_num; 654 void __iomem *base; 655 u32 mode; 656 657 ma35_gpio_cla_port(pin, &group_num, &port); 658 base = npctl->ctrl->pin_banks[group_num].reg_base; 659 660 mode = ma35_gpio_get_mode(base + MA35_GP_REG_MODE, port); 661 if (mode == MA35_GP_MODE_OUTPUT) 662 return 1; 663 664 return 0; 665 } 666 667 static int ma35_pinconf_get_pull(struct ma35_pinctrl *npctl, unsigned int pin) 668 { 669 unsigned int port, group_num; 670 void __iomem *base; 671 u32 regval, pull_sel; 672 673 ma35_gpio_cla_port(pin, &group_num, &port); 674 base = npctl->ctrl->pin_banks[group_num].reg_base; 675 676 regval = readl(base + MA35_GP_REG_PUSEL); 677 678 pull_sel = field_get(MA35_GP_PUSEL_MASK(port), regval); 679 680 switch (pull_sel) { 681 case MA35_GP_PUSEL_PULL_UP: 682 return PIN_CONFIG_BIAS_PULL_UP; 683 684 case MA35_GP_PUSEL_PULL_DOWN: 685 return PIN_CONFIG_BIAS_PULL_DOWN; 686 687 case MA35_GP_PUSEL_DISABLE: 688 return PIN_CONFIG_BIAS_DISABLE; 689 } 690 691 return PIN_CONFIG_BIAS_DISABLE; 692 } 693 694 static int ma35_pinconf_set_output(struct ma35_pinctrl *npctl, unsigned int pin, bool out) 695 { 696 unsigned int port, group_num; 697 void __iomem *base; 698 699 ma35_gpio_cla_port(pin, &group_num, &port); 700 base = npctl->ctrl->pin_banks[group_num].reg_base; 701 702 ma35_gpio_set_mode(base + MA35_GP_REG_MODE, port, MA35_GP_MODE_OUTPUT); 703 704 return 0; 705 } 706 707 static int ma35_pinconf_get_power_source(struct ma35_pinctrl *npctl, unsigned int pin) 708 { 709 unsigned int port, group_num; 710 void __iomem *base; 711 u32 regval; 712 713 ma35_gpio_cla_port(pin, &group_num, &port); 714 base = npctl->ctrl->pin_banks[group_num].reg_base; 715 716 regval = readl(base + MA35_GP_REG_SPW); 717 718 if (regval & BIT(port)) 719 return MVOLT_3300; 720 else 721 return MVOLT_1800; 722 } 723 724 static int ma35_pinconf_set_power_source(struct ma35_pinctrl *npctl, 725 unsigned int pin, int arg) 726 { 727 unsigned int port, group_num; 728 void __iomem *base; 729 u32 regval; 730 731 if ((arg != MVOLT_1800) && (arg != MVOLT_3300)) 732 return -EINVAL; 733 734 ma35_gpio_cla_port(pin, &group_num, &port); 735 base = npctl->ctrl->pin_banks[group_num].reg_base; 736 737 regval = readl(base + MA35_GP_REG_SPW); 738 739 if (arg == MVOLT_1800) 740 regval &= ~BIT(port); 741 else 742 regval |= BIT(port); 743 744 writel(regval, base + MA35_GP_REG_SPW); 745 746 return 0; 747 } 748 749 static int ma35_pinconf_get_drive_strength(struct ma35_pinctrl *npctl, unsigned int pin, 750 u32 *strength) 751 { 752 unsigned int port, group_num; 753 void __iomem *base; 754 u32 regval, ds_val; 755 756 ma35_gpio_cla_port(pin, &group_num, &port); 757 base = npctl->ctrl->pin_banks[group_num].reg_base; 758 759 regval = readl(base + MA35_GP_DS_REG(port)); 760 ds_val = field_get(MA35_GP_DS_MASK(port), regval); 761 762 if (ma35_pinconf_get_power_source(npctl, pin) == MVOLT_1800) 763 *strength = ds_1800mv_tbl[ds_val]; 764 else 765 *strength = ds_3300mv_tbl[ds_val]; 766 767 return 0; 768 } 769 770 static int ma35_pinconf_set_drive_strength(struct ma35_pinctrl *npctl, unsigned int pin, 771 int strength) 772 { 773 unsigned int port, group_num; 774 void __iomem *base; 775 int i, ds_val = -1; 776 u32 regval; 777 778 if (ma35_pinconf_get_power_source(npctl, pin) == MVOLT_1800) { 779 for (i = 0; i < ARRAY_SIZE(ds_1800mv_tbl); i++) { 780 if (ds_1800mv_tbl[i] == strength) { 781 ds_val = i; 782 break; 783 } 784 } 785 } else { 786 for (i = 0; i < ARRAY_SIZE(ds_3300mv_tbl); i++) { 787 if (ds_3300mv_tbl[i] == strength) { 788 ds_val = i; 789 break; 790 } 791 } 792 } 793 if (ds_val == -1) 794 return -EINVAL; 795 796 ma35_gpio_cla_port(pin, &group_num, &port); 797 base = npctl->ctrl->pin_banks[group_num].reg_base; 798 799 regval = readl(base + MA35_GP_DS_REG(port)); 800 regval &= ~MA35_GP_DS_MASK(port); 801 regval |= field_prep(MA35_GP_DS_MASK(port), ds_val); 802 803 writel(regval, base + MA35_GP_DS_REG(port)); 804 805 return 0; 806 } 807 808 static int ma35_pinconf_get_schmitt_enable(struct ma35_pinctrl *npctl, unsigned int pin) 809 { 810 unsigned int port, group_num; 811 void __iomem *base; 812 u32 regval; 813 814 ma35_gpio_cla_port(pin, &group_num, &port); 815 base = npctl->ctrl->pin_banks[group_num].reg_base; 816 817 regval = readl(base + MA35_GP_REG_SMTEN); 818 819 return !!(regval & BIT(port)); 820 } 821 822 static int ma35_pinconf_set_schmitt(struct ma35_pinctrl *npctl, unsigned int pin, int enable) 823 { 824 unsigned int port, group_num; 825 void __iomem *base; 826 u32 regval; 827 828 ma35_gpio_cla_port(pin, &group_num, &port); 829 base = npctl->ctrl->pin_banks[group_num].reg_base; 830 831 regval = readl(base + MA35_GP_REG_SMTEN); 832 833 if (enable) 834 regval |= BIT(port); 835 else 836 regval &= ~BIT(port); 837 838 writel(regval, base + MA35_GP_REG_SMTEN); 839 840 return 0; 841 } 842 843 static int ma35_pinconf_get_slew_rate(struct ma35_pinctrl *npctl, unsigned int pin) 844 { 845 unsigned int port, group_num; 846 void __iomem *base; 847 u32 regval; 848 849 ma35_gpio_cla_port(pin, &group_num, &port); 850 base = npctl->ctrl->pin_banks[group_num].reg_base; 851 852 regval = readl(base + MA35_GP_REG_SLEWCTL); 853 854 return field_get(MA35_GP_SLEWCTL_MASK(port), regval); 855 } 856 857 static int ma35_pinconf_set_slew_rate(struct ma35_pinctrl *npctl, unsigned int pin, int rate) 858 { 859 unsigned int port, group_num; 860 void __iomem *base; 861 u32 regval; 862 863 ma35_gpio_cla_port(pin, &group_num, &port); 864 base = npctl->ctrl->pin_banks[group_num].reg_base; 865 866 regval = readl(base + MA35_GP_REG_SLEWCTL); 867 regval &= ~MA35_GP_SLEWCTL_MASK(port); 868 regval |= field_prep(MA35_GP_SLEWCTL_MASK(port), rate); 869 870 writel(regval, base + MA35_GP_REG_SLEWCTL); 871 872 return 0; 873 } 874 875 static int ma35_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin, unsigned long *config) 876 { 877 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 878 enum pin_config_param param = pinconf_to_config_param(*config); 879 u32 arg; 880 int ret; 881 882 switch (param) { 883 case PIN_CONFIG_BIAS_DISABLE: 884 case PIN_CONFIG_BIAS_PULL_DOWN: 885 case PIN_CONFIG_BIAS_PULL_UP: 886 if (ma35_pinconf_get_pull(npctl, pin) != param) 887 return -EINVAL; 888 arg = 1; 889 break; 890 891 case PIN_CONFIG_DRIVE_STRENGTH: 892 ret = ma35_pinconf_get_drive_strength(npctl, pin, &arg); 893 if (ret) 894 return ret; 895 break; 896 897 case PIN_CONFIG_INPUT_SCHMITT_ENABLE: 898 arg = ma35_pinconf_get_schmitt_enable(npctl, pin); 899 break; 900 901 case PIN_CONFIG_SLEW_RATE: 902 arg = ma35_pinconf_get_slew_rate(npctl, pin); 903 break; 904 905 case PIN_CONFIG_OUTPUT_ENABLE: 906 arg = ma35_pinconf_get_output(npctl, pin); 907 break; 908 909 case PIN_CONFIG_POWER_SOURCE: 910 arg = ma35_pinconf_get_power_source(npctl, pin); 911 break; 912 913 default: 914 return -EINVAL; 915 } 916 *config = pinconf_to_config_packed(param, arg); 917 918 return 0; 919 } 920 921 static int ma35_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin, 922 unsigned long *configs, unsigned int num_configs) 923 { 924 struct ma35_pinctrl *npctl = pinctrl_dev_get_drvdata(pctldev); 925 enum pin_config_param param; 926 unsigned int arg = 0; 927 int i, ret = 0; 928 929 for (i = 0; i < num_configs; i++) { 930 param = pinconf_to_config_param(configs[i]); 931 arg = pinconf_to_config_argument(configs[i]); 932 933 switch (param) { 934 case PIN_CONFIG_BIAS_DISABLE: 935 case PIN_CONFIG_BIAS_PULL_UP: 936 case PIN_CONFIG_BIAS_PULL_DOWN: 937 ret = ma35_pinconf_set_pull(npctl, pin, param); 938 break; 939 940 case PIN_CONFIG_DRIVE_STRENGTH: 941 ret = ma35_pinconf_set_drive_strength(npctl, pin, arg); 942 break; 943 944 case PIN_CONFIG_INPUT_SCHMITT_ENABLE: 945 ret = ma35_pinconf_set_schmitt(npctl, pin, 1); 946 break; 947 948 case PIN_CONFIG_INPUT_SCHMITT: 949 ret = ma35_pinconf_set_schmitt(npctl, pin, arg); 950 break; 951 952 case PIN_CONFIG_SLEW_RATE: 953 ret = ma35_pinconf_set_slew_rate(npctl, pin, arg); 954 break; 955 956 case PIN_CONFIG_OUTPUT_ENABLE: 957 ret = ma35_pinconf_set_output(npctl, pin, arg); 958 break; 959 960 case PIN_CONFIG_POWER_SOURCE: 961 ret = ma35_pinconf_set_power_source(npctl, pin, arg); 962 break; 963 964 default: 965 return -EINVAL; 966 } 967 968 if (ret) 969 break; 970 } 971 return ret; 972 } 973 974 static const struct pinconf_ops ma35_pinconf_ops = { 975 .pin_config_get = ma35_pinconf_get, 976 .pin_config_set = ma35_pinconf_set, 977 .is_generic = true, 978 }; 979 980 static int ma35_pinctrl_parse_groups(struct fwnode_handle *fwnode, struct group_desc *grp, 981 struct ma35_pinctrl *npctl, u32 index) 982 { 983 struct device_node *np = to_of_node(fwnode); 984 struct ma35_pin_setting *pin; 985 unsigned long *configs; 986 unsigned int nconfigs; 987 unsigned int *pins; 988 int i, j, count, ret; 989 u32 *elems; 990 991 ret = pinconf_generic_parse_dt_config(np, NULL, &configs, &nconfigs); 992 if (ret) 993 return ret; 994 995 count = fwnode_property_count_u32(fwnode, "nuvoton,pins"); 996 if (!count || count % 3) 997 return -EINVAL; 998 999 elems = devm_kmalloc_array(npctl->dev, count, sizeof(u32), GFP_KERNEL); 1000 if (!elems) 1001 return -ENOMEM; 1002 1003 grp->grp.name = np->name; 1004 1005 ret = fwnode_property_read_u32_array(fwnode, "nuvoton,pins", elems, count); 1006 if (ret) 1007 return -EINVAL; 1008 grp->grp.npins = count / 3; 1009 1010 pins = devm_kcalloc(npctl->dev, grp->grp.npins, sizeof(*pins), GFP_KERNEL); 1011 if (!pins) 1012 return -ENOMEM; 1013 grp->grp.pins = pins; 1014 1015 pin = devm_kcalloc(npctl->dev, grp->grp.npins, sizeof(*pin), GFP_KERNEL); 1016 if (!pin) 1017 return -ENOMEM; 1018 grp->data = pin; 1019 1020 for (i = 0, j = 0; i < count; i += 3, j++) { 1021 pin->offset = elems[i] * MA35_MFP_REG_SZ_PER_BANK + MA35_MFP_REG_BASE; 1022 pin->shift = (elems[i + 1] * MA35_MFP_BITS_PER_PORT) % 32; 1023 pin->muxval = elems[i + 2]; 1024 pin->configs = configs; 1025 pin->nconfigs = nconfigs; 1026 pins[j] = npctl->info->get_pin_num(pin->offset, pin->shift); 1027 pin++; 1028 } 1029 return 0; 1030 } 1031 1032 static int ma35_pinctrl_parse_functions(struct fwnode_handle *fwnode, struct ma35_pinctrl *npctl, 1033 u32 index) 1034 { 1035 struct device_node *np = to_of_node(fwnode); 1036 struct fwnode_handle *child; 1037 struct pinfunction *func; 1038 struct group_desc *grp; 1039 static u32 grp_index; 1040 const char **groups; 1041 u32 ret, i = 0; 1042 1043 dev_dbg(npctl->dev, "parse function(%d): %s\n", index, np->name); 1044 1045 func = &npctl->functions[index]; 1046 func->name = np->name; 1047 func->ngroups = of_get_child_count(np); 1048 1049 if (func->ngroups <= 0) 1050 return 0; 1051 1052 groups = devm_kcalloc(npctl->dev, func->ngroups, sizeof(*groups), GFP_KERNEL); 1053 if (!groups) 1054 return -ENOMEM; 1055 1056 fwnode_for_each_child_node(fwnode, child) { 1057 struct device_node *node = to_of_node(child); 1058 1059 groups[i] = node->name; 1060 grp = &npctl->groups[grp_index++]; 1061 ret = ma35_pinctrl_parse_groups(child, grp, npctl, i++); 1062 if (ret) { 1063 fwnode_handle_put(child); 1064 return ret; 1065 } 1066 } 1067 1068 func->groups = groups; 1069 return 0; 1070 } 1071 1072 static int ma35_pinctrl_probe_dt(struct platform_device *pdev, struct ma35_pinctrl *npctl) 1073 { 1074 struct device *dev = &pdev->dev; 1075 struct fwnode_handle *child; 1076 u32 idx = 0; 1077 int ret; 1078 1079 device_for_each_child_node(dev, child) { 1080 if (fwnode_property_present(child, "gpio-controller")) 1081 continue; 1082 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(dev, child) { 1101 if (fwnode_property_present(child, "gpio-controller")) 1102 continue; 1103 1104 ret = ma35_pinctrl_parse_functions(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(dev_of_node(dev), "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 } 1188