1 /* 2 * Generic device tree based pinctrl driver for one register per pin 3 * type pinmux controllers 4 * 5 * Copyright (C) 2012 Texas Instruments, Inc. 6 * 7 * This file is licensed under the terms of the GNU General Public 8 * License version 2. This program is licensed "as is" without any 9 * warranty of any kind, whether express or implied. 10 */ 11 12 #include <linux/init.h> 13 #include <linux/module.h> 14 #include <linux/io.h> 15 #include <linux/platform_device.h> 16 #include <linux/slab.h> 17 #include <linux/err.h> 18 #include <linux/list.h> 19 #include <linux/interrupt.h> 20 #include <linux/irqchip/chained_irq.h> 21 #include <linux/of.h> 22 #include <linux/of_irq.h> 23 #include <linux/seq_file.h> 24 25 #include <linux/pinctrl/pinconf-generic.h> 26 #include <linux/pinctrl/pinconf.h> 27 #include <linux/pinctrl/pinctrl.h> 28 #include <linux/pinctrl/pinmux.h> 29 30 #include <linux/platform_data/pinctrl-single.h> 31 32 #include "core.h" 33 #include "devicetree.h" 34 #include "pinconf.h" 35 #include "pinmux.h" 36 37 #define DRIVER_NAME "pinctrl-single" 38 #define PCS_OFF_DISABLED ~0U 39 40 /** 41 * struct pcs_func_vals - mux function register offset and value pair 42 * @reg: register virtual address 43 * @val: register value 44 * @mask: mask 45 */ 46 struct pcs_func_vals { 47 void __iomem *reg; 48 unsigned val; 49 unsigned mask; 50 }; 51 52 /** 53 * struct pcs_conf_vals - pinconf parameter, pinconf register offset 54 * and value, enable, disable, mask 55 * @param: config parameter 56 * @val: user input bits in the pinconf register 57 * @enable: enable bits in the pinconf register 58 * @disable: disable bits in the pinconf register 59 * @mask: mask bits in the register value 60 */ 61 struct pcs_conf_vals { 62 enum pin_config_param param; 63 unsigned val; 64 unsigned enable; 65 unsigned disable; 66 unsigned mask; 67 }; 68 69 /** 70 * struct pcs_conf_type - pinconf property name, pinconf param pair 71 * @name: property name in DTS file 72 * @param: config parameter 73 */ 74 struct pcs_conf_type { 75 const char *name; 76 enum pin_config_param param; 77 }; 78 79 /** 80 * struct pcs_function - pinctrl function 81 * @name: pinctrl function name 82 * @vals: register and vals array 83 * @nvals: number of entries in vals array 84 * @conf: array of pin configurations 85 * @nconfs: number of pin configurations available 86 * @node: list node 87 */ 88 struct pcs_function { 89 const char *name; 90 struct pcs_func_vals *vals; 91 unsigned nvals; 92 struct pcs_conf_vals *conf; 93 int nconfs; 94 struct list_head node; 95 }; 96 97 /** 98 * struct pcs_gpiofunc_range - pin ranges with same mux value of gpio function 99 * @offset: offset base of pins 100 * @npins: number pins with the same mux value of gpio function 101 * @gpiofunc: mux value of gpio function 102 * @node: list node 103 */ 104 struct pcs_gpiofunc_range { 105 unsigned offset; 106 unsigned npins; 107 unsigned gpiofunc; 108 struct list_head node; 109 }; 110 111 /** 112 * struct pcs_data - wrapper for data needed by pinctrl framework 113 * @pa: pindesc array 114 * @cur: index to current element 115 * 116 * REVISIT: We should be able to drop this eventually by adding 117 * support for registering pins individually in the pinctrl 118 * framework for those drivers that don't need a static array. 119 */ 120 struct pcs_data { 121 struct pinctrl_pin_desc *pa; 122 int cur; 123 }; 124 125 /** 126 * struct pcs_soc_data - SoC specific settings 127 * @flags: initial SoC specific PCS_FEAT_xxx values 128 * @irq: optional interrupt for the controller 129 * @irq_enable_mask: optional SoC specific interrupt enable mask 130 * @irq_status_mask: optional SoC specific interrupt status mask 131 * @rearm: optional SoC specific wake-up rearm function 132 */ 133 struct pcs_soc_data { 134 unsigned flags; 135 int irq; 136 unsigned irq_enable_mask; 137 unsigned irq_status_mask; 138 void (*rearm)(void); 139 }; 140 141 /** 142 * struct pcs_device - pinctrl device instance 143 * @res: resources 144 * @base: virtual address of the controller 145 * @saved_vals: saved values for the controller 146 * @size: size of the ioremapped area 147 * @dev: device entry 148 * @np: device tree node 149 * @pctl: pin controller device 150 * @flags: mask of PCS_FEAT_xxx values 151 * @missing_nr_pinctrl_cells: for legacy binding, may go away 152 * @socdata: soc specific data 153 * @lock: spinlock for register access 154 * @mutex: mutex protecting the lists 155 * @width: bits per mux register 156 * @fmask: function register mask 157 * @fshift: function register shift 158 * @foff: value to turn mux off 159 * @fmax: max number of functions in fmask 160 * @bits_per_mux: number of bits per mux 161 * @bits_per_pin: number of bits per pin 162 * @pins: physical pins on the SoC 163 * @gpiofuncs: list of gpio functions 164 * @irqs: list of interrupt registers 165 * @chip: chip container for this instance 166 * @domain: IRQ domain for this instance 167 * @desc: pin controller descriptor 168 * @read: register read function to use 169 * @write: register write function to use 170 */ 171 struct pcs_device { 172 struct resource *res; 173 void __iomem *base; 174 void *saved_vals; 175 unsigned size; 176 struct device *dev; 177 struct device_node *np; 178 struct pinctrl_dev *pctl; 179 unsigned flags; 180 #define PCS_CONTEXT_LOSS_OFF (1 << 3) 181 #define PCS_QUIRK_SHARED_IRQ (1 << 2) 182 #define PCS_FEAT_IRQ (1 << 1) 183 #define PCS_FEAT_PINCONF (1 << 0) 184 struct property *missing_nr_pinctrl_cells; 185 struct pcs_soc_data socdata; 186 raw_spinlock_t lock; 187 struct mutex mutex; 188 unsigned width; 189 unsigned fmask; 190 unsigned fshift; 191 unsigned foff; 192 unsigned fmax; 193 bool bits_per_mux; 194 unsigned bits_per_pin; 195 struct pcs_data pins; 196 struct list_head gpiofuncs; 197 struct list_head irqs; 198 struct irq_chip chip; 199 struct irq_domain *domain; 200 struct pinctrl_desc desc; 201 unsigned (*read)(void __iomem *reg); 202 void (*write)(unsigned val, void __iomem *reg); 203 }; 204 205 #define PCS_QUIRK_HAS_SHARED_IRQ (pcs->flags & PCS_QUIRK_SHARED_IRQ) 206 #define PCS_HAS_IRQ (pcs->flags & PCS_FEAT_IRQ) 207 #define PCS_HAS_PINCONF (pcs->flags & PCS_FEAT_PINCONF) 208 209 static int pcs_pinconf_get(struct pinctrl_dev *pctldev, unsigned pin, 210 unsigned long *config); 211 static int pcs_pinconf_set(struct pinctrl_dev *pctldev, unsigned pin, 212 unsigned long *configs, unsigned num_configs); 213 214 static enum pin_config_param pcs_bias[] = { 215 PIN_CONFIG_BIAS_PULL_DOWN, 216 PIN_CONFIG_BIAS_PULL_UP, 217 }; 218 219 /* 220 * This lock class tells lockdep that irqchip core that this single 221 * pinctrl can be in a different category than its parents, so it won't 222 * report false recursion. 223 */ 224 static struct lock_class_key pcs_lock_class; 225 226 /* Class for the IRQ request mutex */ 227 static struct lock_class_key pcs_request_class; 228 229 /* 230 * REVISIT: Reads and writes could eventually use regmap or something 231 * generic. But at least on omaps, some mux registers are performance 232 * critical as they may need to be remuxed every time before and after 233 * idle. Adding tests for register access width for every read and 234 * write like regmap is doing is not desired, and caching the registers 235 * does not help in this case. 236 */ 237 238 static unsigned int pcs_readb(void __iomem *reg) 239 { 240 return readb(reg); 241 } 242 243 static unsigned int pcs_readw(void __iomem *reg) 244 { 245 return readw(reg); 246 } 247 248 static unsigned int pcs_readl(void __iomem *reg) 249 { 250 return readl(reg); 251 } 252 253 static void pcs_writeb(unsigned int val, void __iomem *reg) 254 { 255 writeb(val, reg); 256 } 257 258 static void pcs_writew(unsigned int val, void __iomem *reg) 259 { 260 writew(val, reg); 261 } 262 263 static void pcs_writel(unsigned int val, void __iomem *reg) 264 { 265 writel(val, reg); 266 } 267 268 static unsigned int pcs_pin_reg_offset_get(struct pcs_device *pcs, 269 unsigned int pin) 270 { 271 unsigned int mux_bytes = pcs->width / BITS_PER_BYTE; 272 273 if (pcs->bits_per_mux) { 274 unsigned int pin_offset_bytes; 275 276 pin_offset_bytes = (pcs->bits_per_pin * pin) / BITS_PER_BYTE; 277 return (pin_offset_bytes / mux_bytes) * mux_bytes; 278 } 279 280 return pin * mux_bytes; 281 } 282 283 static unsigned int pcs_pin_shift_reg_get(struct pcs_device *pcs, 284 unsigned int pin) 285 { 286 return (pin % (pcs->width / pcs->bits_per_pin)) * pcs->bits_per_pin; 287 } 288 289 static void pcs_pin_dbg_show(struct pinctrl_dev *pctldev, 290 struct seq_file *s, 291 unsigned pin) 292 { 293 struct pcs_device *pcs; 294 unsigned int val; 295 unsigned long offset; 296 size_t pa; 297 298 pcs = pinctrl_dev_get_drvdata(pctldev); 299 300 offset = pcs_pin_reg_offset_get(pcs, pin); 301 val = pcs->read(pcs->base + offset); 302 303 if (pcs->bits_per_mux) 304 val &= pcs->fmask << pcs_pin_shift_reg_get(pcs, pin); 305 306 pa = pcs->res->start + offset; 307 308 seq_printf(s, "%zx %08x %s ", pa, val, DRIVER_NAME); 309 } 310 311 static void pcs_dt_free_map(struct pinctrl_dev *pctldev, 312 struct pinctrl_map *map, unsigned num_maps) 313 { 314 struct pcs_device *pcs; 315 316 pcs = pinctrl_dev_get_drvdata(pctldev); 317 devm_kfree(pcs->dev, map); 318 } 319 320 static int pcs_dt_node_to_map(struct pinctrl_dev *pctldev, 321 struct device_node *np_config, 322 struct pinctrl_map **map, unsigned *num_maps); 323 324 static const struct pinctrl_ops pcs_pinctrl_ops = { 325 .get_groups_count = pinctrl_generic_get_group_count, 326 .get_group_name = pinctrl_generic_get_group_name, 327 .get_group_pins = pinctrl_generic_get_group_pins, 328 .pin_dbg_show = pcs_pin_dbg_show, 329 .dt_node_to_map = pcs_dt_node_to_map, 330 .dt_free_map = pcs_dt_free_map, 331 }; 332 333 static int pcs_get_function(struct pinctrl_dev *pctldev, unsigned pin, 334 struct pcs_function **func) 335 { 336 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev); 337 struct pin_desc *pdesc = pin_desc_get(pctldev, pin); 338 const struct pinctrl_setting_mux *setting; 339 struct function_desc *function; 340 unsigned fselector; 341 342 /* If pin is not described in DTS & enabled, mux_setting is NULL. */ 343 setting = pdesc->mux_setting; 344 if (!setting) 345 return -ENOTSUPP; 346 fselector = setting->func; 347 function = pinmux_generic_get_function(pctldev, fselector); 348 *func = function->data; 349 if (!(*func)) { 350 dev_err(pcs->dev, "%s could not find function%i\n", 351 __func__, fselector); 352 return -ENOTSUPP; 353 } 354 return 0; 355 } 356 357 static int pcs_set_mux(struct pinctrl_dev *pctldev, unsigned fselector, 358 unsigned group) 359 { 360 struct pcs_device *pcs; 361 struct function_desc *function; 362 struct pcs_function *func; 363 int i; 364 365 pcs = pinctrl_dev_get_drvdata(pctldev); 366 /* If function mask is null, needn't enable it. */ 367 if (!pcs->fmask) 368 return 0; 369 function = pinmux_generic_get_function(pctldev, fselector); 370 if (!function) 371 return -EINVAL; 372 func = function->data; 373 if (!func) 374 return -EINVAL; 375 376 dev_dbg(pcs->dev, "enabling %s function%i\n", 377 func->name, fselector); 378 379 for (i = 0; i < func->nvals; i++) { 380 struct pcs_func_vals *vals; 381 unsigned long flags; 382 unsigned val, mask; 383 384 vals = &func->vals[i]; 385 raw_spin_lock_irqsave(&pcs->lock, flags); 386 val = pcs->read(vals->reg); 387 388 if (pcs->bits_per_mux) 389 mask = vals->mask; 390 else 391 mask = pcs->fmask; 392 393 val &= ~mask; 394 val |= (vals->val & mask); 395 pcs->write(val, vals->reg); 396 raw_spin_unlock_irqrestore(&pcs->lock, flags); 397 } 398 399 return 0; 400 } 401 402 static int pcs_request_gpio(struct pinctrl_dev *pctldev, 403 struct pinctrl_gpio_range *range, unsigned pin) 404 { 405 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev); 406 struct pcs_gpiofunc_range *frange = NULL; 407 struct list_head *pos, *tmp; 408 unsigned data; 409 410 /* If function mask is null, return directly. */ 411 if (!pcs->fmask) 412 return -ENOTSUPP; 413 414 list_for_each_safe(pos, tmp, &pcs->gpiofuncs) { 415 u32 offset; 416 417 frange = list_entry(pos, struct pcs_gpiofunc_range, node); 418 if (pin >= frange->offset + frange->npins 419 || pin < frange->offset) 420 continue; 421 422 offset = pcs_pin_reg_offset_get(pcs, pin); 423 424 if (pcs->bits_per_mux) { 425 int pin_shift = pcs_pin_shift_reg_get(pcs, pin); 426 427 data = pcs->read(pcs->base + offset); 428 data &= ~(pcs->fmask << pin_shift); 429 data |= frange->gpiofunc << pin_shift; 430 pcs->write(data, pcs->base + offset); 431 } else { 432 data = pcs->read(pcs->base + offset); 433 data &= ~pcs->fmask; 434 data |= frange->gpiofunc; 435 pcs->write(data, pcs->base + offset); 436 } 437 break; 438 } 439 return 0; 440 } 441 442 static const struct pinmux_ops pcs_pinmux_ops = { 443 .get_functions_count = pinmux_generic_get_function_count, 444 .get_function_name = pinmux_generic_get_function_name, 445 .get_function_groups = pinmux_generic_get_function_groups, 446 .set_mux = pcs_set_mux, 447 .gpio_request_enable = pcs_request_gpio, 448 }; 449 450 /* Clear BIAS value */ 451 static void pcs_pinconf_clear_bias(struct pinctrl_dev *pctldev, unsigned pin) 452 { 453 unsigned long config; 454 int i; 455 for (i = 0; i < ARRAY_SIZE(pcs_bias); i++) { 456 config = pinconf_to_config_packed(pcs_bias[i], 0); 457 pcs_pinconf_set(pctldev, pin, &config, 1); 458 } 459 } 460 461 /* 462 * Check whether PIN_CONFIG_BIAS_DISABLE is valid. 463 * It's depend on that PULL_DOWN & PULL_UP configs are all invalid. 464 */ 465 static bool pcs_pinconf_bias_disable(struct pinctrl_dev *pctldev, unsigned pin) 466 { 467 unsigned long config; 468 int i; 469 470 for (i = 0; i < ARRAY_SIZE(pcs_bias); i++) { 471 config = pinconf_to_config_packed(pcs_bias[i], 0); 472 if (!pcs_pinconf_get(pctldev, pin, &config)) 473 goto out; 474 } 475 return true; 476 out: 477 return false; 478 } 479 480 static int pcs_pinconf_get(struct pinctrl_dev *pctldev, 481 unsigned pin, unsigned long *config) 482 { 483 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev); 484 struct pcs_function *func; 485 enum pin_config_param param; 486 unsigned offset = 0, data = 0, i, j, ret; 487 488 ret = pcs_get_function(pctldev, pin, &func); 489 if (ret) 490 return ret; 491 492 for (i = 0; i < func->nconfs; i++) { 493 param = pinconf_to_config_param(*config); 494 if (param == PIN_CONFIG_BIAS_DISABLE) { 495 if (pcs_pinconf_bias_disable(pctldev, pin)) { 496 *config = 0; 497 return 0; 498 } else { 499 return -ENOTSUPP; 500 } 501 } else if (param != func->conf[i].param) { 502 continue; 503 } 504 505 offset = pin * (pcs->width / BITS_PER_BYTE); 506 data = pcs->read(pcs->base + offset) & func->conf[i].mask; 507 switch (func->conf[i].param) { 508 /* 4 parameters */ 509 case PIN_CONFIG_BIAS_PULL_DOWN: 510 case PIN_CONFIG_BIAS_PULL_UP: 511 case PIN_CONFIG_INPUT_SCHMITT_ENABLE: 512 if ((data != func->conf[i].enable) || 513 (data == func->conf[i].disable)) 514 return -ENOTSUPP; 515 *config = 0; 516 break; 517 /* 2 parameters */ 518 case PIN_CONFIG_INPUT_SCHMITT: 519 for (j = 0; j < func->nconfs; j++) { 520 switch (func->conf[j].param) { 521 case PIN_CONFIG_INPUT_SCHMITT_ENABLE: 522 if (data != func->conf[j].enable) 523 return -ENOTSUPP; 524 break; 525 default: 526 break; 527 } 528 } 529 *config = data; 530 break; 531 case PIN_CONFIG_DRIVE_STRENGTH: 532 case PIN_CONFIG_SLEW_RATE: 533 case PIN_CONFIG_MODE_LOW_POWER: 534 case PIN_CONFIG_INPUT_ENABLE: 535 default: 536 *config = data; 537 break; 538 } 539 return 0; 540 } 541 return -ENOTSUPP; 542 } 543 544 static int pcs_pinconf_set(struct pinctrl_dev *pctldev, 545 unsigned pin, unsigned long *configs, 546 unsigned num_configs) 547 { 548 struct pcs_device *pcs = pinctrl_dev_get_drvdata(pctldev); 549 struct pcs_function *func; 550 unsigned offset = 0, shift = 0, i, data, ret; 551 u32 arg; 552 int j; 553 554 ret = pcs_get_function(pctldev, pin, &func); 555 if (ret) 556 return ret; 557 558 for (j = 0; j < num_configs; j++) { 559 for (i = 0; i < func->nconfs; i++) { 560 if (pinconf_to_config_param(configs[j]) 561 != func->conf[i].param) 562 continue; 563 564 offset = pin * (pcs->width / BITS_PER_BYTE); 565 data = pcs->read(pcs->base + offset); 566 arg = pinconf_to_config_argument(configs[j]); 567 switch (func->conf[i].param) { 568 /* 2 parameters */ 569 case PIN_CONFIG_INPUT_SCHMITT: 570 case PIN_CONFIG_DRIVE_STRENGTH: 571 case PIN_CONFIG_SLEW_RATE: 572 case PIN_CONFIG_MODE_LOW_POWER: 573 case PIN_CONFIG_INPUT_ENABLE: 574 shift = ffs(func->conf[i].mask) - 1; 575 data &= ~func->conf[i].mask; 576 data |= (arg << shift) & func->conf[i].mask; 577 break; 578 /* 4 parameters */ 579 case PIN_CONFIG_BIAS_DISABLE: 580 pcs_pinconf_clear_bias(pctldev, pin); 581 break; 582 case PIN_CONFIG_BIAS_PULL_DOWN: 583 case PIN_CONFIG_BIAS_PULL_UP: 584 if (arg) 585 pcs_pinconf_clear_bias(pctldev, pin); 586 fallthrough; 587 case PIN_CONFIG_INPUT_SCHMITT_ENABLE: 588 data &= ~func->conf[i].mask; 589 if (arg) 590 data |= func->conf[i].enable; 591 else 592 data |= func->conf[i].disable; 593 break; 594 default: 595 return -ENOTSUPP; 596 } 597 pcs->write(data, pcs->base + offset); 598 599 break; 600 } 601 if (i >= func->nconfs) 602 return -ENOTSUPP; 603 } /* for each config */ 604 605 return 0; 606 } 607 608 static int pcs_pinconf_group_get(struct pinctrl_dev *pctldev, 609 unsigned group, unsigned long *config) 610 { 611 const unsigned *pins; 612 unsigned npins, old = 0; 613 int i, ret; 614 615 ret = pinctrl_generic_get_group_pins(pctldev, group, &pins, &npins); 616 if (ret) 617 return ret; 618 for (i = 0; i < npins; i++) { 619 if (pcs_pinconf_get(pctldev, pins[i], config)) 620 return -ENOTSUPP; 621 /* configs do not match between two pins */ 622 if (i && (old != *config)) 623 return -ENOTSUPP; 624 old = *config; 625 } 626 return 0; 627 } 628 629 static int pcs_pinconf_group_set(struct pinctrl_dev *pctldev, 630 unsigned group, unsigned long *configs, 631 unsigned num_configs) 632 { 633 const unsigned *pins; 634 unsigned npins; 635 int i, ret; 636 637 ret = pinctrl_generic_get_group_pins(pctldev, group, &pins, &npins); 638 if (ret) 639 return ret; 640 for (i = 0; i < npins; i++) { 641 if (pcs_pinconf_set(pctldev, pins[i], configs, num_configs)) 642 return -ENOTSUPP; 643 } 644 return 0; 645 } 646 647 static void pcs_pinconf_dbg_show(struct pinctrl_dev *pctldev, 648 struct seq_file *s, unsigned pin) 649 { 650 } 651 652 static void pcs_pinconf_group_dbg_show(struct pinctrl_dev *pctldev, 653 struct seq_file *s, unsigned selector) 654 { 655 } 656 657 static void pcs_pinconf_config_dbg_show(struct pinctrl_dev *pctldev, 658 struct seq_file *s, 659 unsigned long config) 660 { 661 pinconf_generic_dump_config(pctldev, s, config); 662 } 663 664 static const struct pinconf_ops pcs_pinconf_ops = { 665 .pin_config_get = pcs_pinconf_get, 666 .pin_config_set = pcs_pinconf_set, 667 .pin_config_group_get = pcs_pinconf_group_get, 668 .pin_config_group_set = pcs_pinconf_group_set, 669 .pin_config_dbg_show = pcs_pinconf_dbg_show, 670 .pin_config_group_dbg_show = pcs_pinconf_group_dbg_show, 671 .pin_config_config_dbg_show = pcs_pinconf_config_dbg_show, 672 .is_generic = true, 673 }; 674 675 /** 676 * pcs_add_pin() - add a pin to the static per controller pin array 677 * @pcs: pcs driver instance 678 * @offset: register offset from base 679 */ 680 static int pcs_add_pin(struct pcs_device *pcs, unsigned int offset) 681 { 682 struct pcs_soc_data *pcs_soc = &pcs->socdata; 683 struct pinctrl_pin_desc *pin; 684 int i; 685 686 i = pcs->pins.cur; 687 if (i >= pcs->desc.npins) { 688 dev_err(pcs->dev, "too many pins, max %i\n", 689 pcs->desc.npins); 690 return -ENOMEM; 691 } 692 693 if (pcs_soc->irq_enable_mask) { 694 unsigned val; 695 696 val = pcs->read(pcs->base + offset); 697 if (val & pcs_soc->irq_enable_mask) { 698 dev_dbg(pcs->dev, "irq enabled at boot for pin at %lx (%x), clearing\n", 699 (unsigned long)pcs->res->start + offset, val); 700 val &= ~pcs_soc->irq_enable_mask; 701 pcs->write(val, pcs->base + offset); 702 } 703 } 704 705 pin = &pcs->pins.pa[i]; 706 pin->number = i; 707 pcs->pins.cur++; 708 709 return i; 710 } 711 712 /** 713 * pcs_allocate_pin_table() - adds all the pins for the pinctrl driver 714 * @pcs: pcs driver instance 715 * 716 * In case of errors, resources are freed in pcs_free_resources. 717 * 718 * If your hardware needs holes in the address space, then just set 719 * up multiple driver instances. 720 */ 721 static int pcs_allocate_pin_table(struct pcs_device *pcs) 722 { 723 int mux_bytes, nr_pins, i; 724 725 mux_bytes = pcs->width / BITS_PER_BYTE; 726 727 if (pcs->bits_per_mux && pcs->fmask) { 728 pcs->bits_per_pin = fls(pcs->fmask); 729 nr_pins = (pcs->size * BITS_PER_BYTE) / pcs->bits_per_pin; 730 } else { 731 nr_pins = pcs->size / mux_bytes; 732 } 733 734 dev_dbg(pcs->dev, "allocating %i pins\n", nr_pins); 735 pcs->pins.pa = devm_kcalloc(pcs->dev, 736 nr_pins, sizeof(*pcs->pins.pa), 737 GFP_KERNEL); 738 if (!pcs->pins.pa) 739 return -ENOMEM; 740 741 pcs->desc.pins = pcs->pins.pa; 742 pcs->desc.npins = nr_pins; 743 744 for (i = 0; i < pcs->desc.npins; i++) { 745 unsigned offset; 746 int res; 747 748 offset = pcs_pin_reg_offset_get(pcs, i); 749 res = pcs_add_pin(pcs, offset); 750 if (res < 0) { 751 dev_err(pcs->dev, "error adding pins: %i\n", res); 752 return res; 753 } 754 } 755 756 return 0; 757 } 758 759 /** 760 * pcs_add_function() - adds a new function to the function list 761 * @pcs: pcs driver instance 762 * @fcn: new function allocated 763 * @name: name of the function 764 * @vals: array of mux register value pairs used by the function 765 * @nvals: number of mux register value pairs 766 * @pgnames: array of pingroup names for the function 767 * @npgnames: number of pingroup names 768 * 769 * Caller must take care of locking. 770 */ 771 static int pcs_add_function(struct pcs_device *pcs, 772 struct pcs_function **fcn, 773 const char *name, 774 struct pcs_func_vals *vals, 775 unsigned int nvals, 776 const char **pgnames, 777 unsigned int npgnames) 778 { 779 struct pcs_function *function; 780 int selector; 781 782 function = devm_kzalloc(pcs->dev, sizeof(*function), GFP_KERNEL); 783 if (!function) 784 return -ENOMEM; 785 786 function->vals = vals; 787 function->nvals = nvals; 788 function->name = name; 789 790 selector = pinmux_generic_add_function(pcs->pctl, name, 791 pgnames, npgnames, 792 function); 793 if (selector < 0) { 794 devm_kfree(pcs->dev, function); 795 *fcn = NULL; 796 } else { 797 *fcn = function; 798 } 799 800 return selector; 801 } 802 803 /** 804 * pcs_get_pin_by_offset() - get a pin index based on the register offset 805 * @pcs: pcs driver instance 806 * @offset: register offset from the base 807 * 808 * Note that this is OK as long as the pins are in a static array. 809 */ 810 static int pcs_get_pin_by_offset(struct pcs_device *pcs, unsigned offset) 811 { 812 unsigned index; 813 814 if (offset >= pcs->size) { 815 dev_err(pcs->dev, "mux offset out of range: 0x%x (0x%x)\n", 816 offset, pcs->size); 817 return -EINVAL; 818 } 819 820 if (pcs->bits_per_mux) 821 index = (offset * BITS_PER_BYTE) / pcs->bits_per_pin; 822 else 823 index = offset / (pcs->width / BITS_PER_BYTE); 824 825 return index; 826 } 827 828 /* 829 * check whether data matches enable bits or disable bits 830 * Return value: 1 for matching enable bits, 0 for matching disable bits, 831 * and negative value for matching failure. 832 */ 833 static int pcs_config_match(unsigned data, unsigned enable, unsigned disable) 834 { 835 int ret = -EINVAL; 836 837 if (data == enable) 838 ret = 1; 839 else if (data == disable) 840 ret = 0; 841 return ret; 842 } 843 844 static void add_config(struct pcs_conf_vals **conf, enum pin_config_param param, 845 unsigned value, unsigned enable, unsigned disable, 846 unsigned mask) 847 { 848 (*conf)->param = param; 849 (*conf)->val = value; 850 (*conf)->enable = enable; 851 (*conf)->disable = disable; 852 (*conf)->mask = mask; 853 (*conf)++; 854 } 855 856 static void add_setting(unsigned long **setting, enum pin_config_param param, 857 unsigned arg) 858 { 859 **setting = pinconf_to_config_packed(param, arg); 860 (*setting)++; 861 } 862 863 /* add pinconf setting with 2 parameters */ 864 static void pcs_add_conf2(struct pcs_device *pcs, struct device_node *np, 865 const char *name, enum pin_config_param param, 866 struct pcs_conf_vals **conf, unsigned long **settings) 867 { 868 unsigned value[2], shift; 869 int ret; 870 871 ret = of_property_read_u32_array(np, name, value, 2); 872 if (ret) 873 return; 874 /* set value & mask */ 875 value[0] &= value[1]; 876 shift = ffs(value[1]) - 1; 877 /* skip enable & disable */ 878 add_config(conf, param, value[0], 0, 0, value[1]); 879 add_setting(settings, param, value[0] >> shift); 880 } 881 882 /* add pinconf setting with 4 parameters */ 883 static void pcs_add_conf4(struct pcs_device *pcs, struct device_node *np, 884 const char *name, enum pin_config_param param, 885 struct pcs_conf_vals **conf, unsigned long **settings) 886 { 887 unsigned value[4]; 888 int ret; 889 890 /* value to set, enable, disable, mask */ 891 ret = of_property_read_u32_array(np, name, value, 4); 892 if (ret) 893 return; 894 if (!value[3]) { 895 dev_err(pcs->dev, "mask field of the property can't be 0\n"); 896 return; 897 } 898 value[0] &= value[3]; 899 value[1] &= value[3]; 900 value[2] &= value[3]; 901 ret = pcs_config_match(value[0], value[1], value[2]); 902 if (ret < 0) 903 dev_dbg(pcs->dev, "failed to match enable or disable bits\n"); 904 add_config(conf, param, value[0], value[1], value[2], value[3]); 905 add_setting(settings, param, ret); 906 } 907 908 static int pcs_parse_pinconf(struct pcs_device *pcs, struct device_node *np, 909 struct pcs_function *func, 910 struct pinctrl_map **map) 911 912 { 913 struct pinctrl_map *m = *map; 914 int i = 0, nconfs = 0; 915 unsigned long *settings = NULL, *s = NULL; 916 struct pcs_conf_vals *conf = NULL; 917 static const struct pcs_conf_type prop2[] = { 918 { "pinctrl-single,drive-strength", PIN_CONFIG_DRIVE_STRENGTH, }, 919 { "pinctrl-single,slew-rate", PIN_CONFIG_SLEW_RATE, }, 920 { "pinctrl-single,input-enable", PIN_CONFIG_INPUT_ENABLE, }, 921 { "pinctrl-single,input-schmitt", PIN_CONFIG_INPUT_SCHMITT, }, 922 { "pinctrl-single,low-power-mode", PIN_CONFIG_MODE_LOW_POWER, }, 923 }; 924 static const struct pcs_conf_type prop4[] = { 925 { "pinctrl-single,bias-pullup", PIN_CONFIG_BIAS_PULL_UP, }, 926 { "pinctrl-single,bias-pulldown", PIN_CONFIG_BIAS_PULL_DOWN, }, 927 { "pinctrl-single,input-schmitt-enable", 928 PIN_CONFIG_INPUT_SCHMITT_ENABLE, }, 929 }; 930 931 /* If pinconf isn't supported, don't parse properties in below. */ 932 if (!PCS_HAS_PINCONF) 933 return -ENOTSUPP; 934 935 /* cacluate how much properties are supported in current node */ 936 for (i = 0; i < ARRAY_SIZE(prop2); i++) { 937 if (of_property_present(np, prop2[i].name)) 938 nconfs++; 939 } 940 for (i = 0; i < ARRAY_SIZE(prop4); i++) { 941 if (of_property_present(np, prop4[i].name)) 942 nconfs++; 943 } 944 if (!nconfs) 945 return -ENOTSUPP; 946 947 func->conf = devm_kcalloc(pcs->dev, 948 nconfs, sizeof(struct pcs_conf_vals), 949 GFP_KERNEL); 950 if (!func->conf) 951 return -ENOMEM; 952 func->nconfs = nconfs; 953 conf = &(func->conf[0]); 954 m++; 955 settings = devm_kcalloc(pcs->dev, nconfs, sizeof(unsigned long), 956 GFP_KERNEL); 957 if (!settings) 958 return -ENOMEM; 959 s = &settings[0]; 960 961 for (i = 0; i < ARRAY_SIZE(prop2); i++) 962 pcs_add_conf2(pcs, np, prop2[i].name, prop2[i].param, 963 &conf, &s); 964 for (i = 0; i < ARRAY_SIZE(prop4); i++) 965 pcs_add_conf4(pcs, np, prop4[i].name, prop4[i].param, 966 &conf, &s); 967 m->type = PIN_MAP_TYPE_CONFIGS_GROUP; 968 m->data.configs.group_or_pin = np->name; 969 m->data.configs.configs = settings; 970 m->data.configs.num_configs = nconfs; 971 return 0; 972 } 973 974 /** 975 * pcs_parse_one_pinctrl_entry() - parses a device tree mux entry 976 * @pcs: pinctrl driver instance 977 * @np: device node of the mux entry 978 * @map: map entry 979 * @num_maps: number of map 980 * @pgnames: pingroup names 981 * 982 * Note that this binding currently supports only sets of one register + value. 983 * 984 * Also note that this driver tries to avoid understanding pin and function 985 * names because of the extra bloat they would cause especially in the case of 986 * a large number of pins. This driver just sets what is specified for the board 987 * in the .dts file. Further user space debugging tools can be developed to 988 * decipher the pin and function names using debugfs. 989 * 990 * If you are concerned about the boot time, set up the static pins in 991 * the bootloader, and only set up selected pins as device tree entries. 992 */ 993 static int pcs_parse_one_pinctrl_entry(struct pcs_device *pcs, 994 struct device_node *np, 995 struct pinctrl_map **map, 996 unsigned *num_maps, 997 const char **pgnames) 998 { 999 const char *name = "pinctrl-single,pins"; 1000 struct pcs_func_vals *vals; 1001 int rows, *pins, found = 0, res = -ENOMEM, i, fsel, gsel; 1002 struct pcs_function *function = NULL; 1003 1004 rows = pinctrl_count_index_with_args(np, name); 1005 if (rows <= 0) { 1006 dev_err(pcs->dev, "Invalid number of rows: %d\n", rows); 1007 return -EINVAL; 1008 } 1009 1010 vals = devm_kcalloc(pcs->dev, rows, sizeof(*vals), GFP_KERNEL); 1011 if (!vals) 1012 return -ENOMEM; 1013 1014 pins = devm_kcalloc(pcs->dev, rows, sizeof(*pins), GFP_KERNEL); 1015 if (!pins) 1016 goto free_vals; 1017 1018 for (i = 0; i < rows; i++) { 1019 struct of_phandle_args pinctrl_spec; 1020 unsigned int offset; 1021 int pin; 1022 1023 res = pinctrl_parse_index_with_args(np, name, i, &pinctrl_spec); 1024 if (res) 1025 return res; 1026 1027 if (pinctrl_spec.args_count < 2 || pinctrl_spec.args_count > 3) { 1028 dev_err(pcs->dev, "invalid args_count for spec: %i\n", 1029 pinctrl_spec.args_count); 1030 break; 1031 } 1032 1033 offset = pinctrl_spec.args[0]; 1034 vals[found].reg = pcs->base + offset; 1035 1036 switch (pinctrl_spec.args_count) { 1037 case 2: 1038 vals[found].val = pinctrl_spec.args[1]; 1039 break; 1040 case 3: 1041 vals[found].val = (pinctrl_spec.args[1] | pinctrl_spec.args[2]); 1042 break; 1043 } 1044 1045 dev_dbg(pcs->dev, "%pOFn index: 0x%x value: 0x%x\n", 1046 pinctrl_spec.np, offset, vals[found].val); 1047 1048 pin = pcs_get_pin_by_offset(pcs, offset); 1049 if (pin < 0) { 1050 dev_err(pcs->dev, 1051 "could not add functions for %pOFn %ux\n", 1052 np, offset); 1053 break; 1054 } 1055 pins[found++] = pin; 1056 } 1057 1058 pgnames[0] = np->name; 1059 mutex_lock(&pcs->mutex); 1060 fsel = pcs_add_function(pcs, &function, np->name, vals, found, 1061 pgnames, 1); 1062 if (fsel < 0) { 1063 res = fsel; 1064 goto free_pins; 1065 } 1066 1067 gsel = pinctrl_generic_add_group(pcs->pctl, np->name, pins, found, pcs); 1068 if (gsel < 0) { 1069 res = gsel; 1070 goto free_function; 1071 } 1072 1073 (*map)->type = PIN_MAP_TYPE_MUX_GROUP; 1074 (*map)->data.mux.group = np->name; 1075 (*map)->data.mux.function = np->name; 1076 1077 if (PCS_HAS_PINCONF && function) { 1078 res = pcs_parse_pinconf(pcs, np, function, map); 1079 if (res == 0) 1080 *num_maps = 2; 1081 else if (res == -ENOTSUPP) 1082 *num_maps = 1; 1083 else 1084 goto free_pingroups; 1085 } else { 1086 *num_maps = 1; 1087 } 1088 mutex_unlock(&pcs->mutex); 1089 1090 return 0; 1091 1092 free_pingroups: 1093 pinctrl_generic_remove_group(pcs->pctl, gsel); 1094 *num_maps = 1; 1095 free_function: 1096 pinmux_generic_remove_function(pcs->pctl, fsel); 1097 free_pins: 1098 mutex_unlock(&pcs->mutex); 1099 devm_kfree(pcs->dev, pins); 1100 1101 free_vals: 1102 devm_kfree(pcs->dev, vals); 1103 1104 return res; 1105 } 1106 1107 static int pcs_parse_bits_in_pinctrl_entry(struct pcs_device *pcs, 1108 struct device_node *np, 1109 struct pinctrl_map **map, 1110 unsigned *num_maps, 1111 const char **pgnames) 1112 { 1113 const char *name = "pinctrl-single,bits"; 1114 struct pcs_func_vals *vals; 1115 int rows, *pins, found = 0, res = -ENOMEM, i, fsel; 1116 int npins_in_row; 1117 struct pcs_function *function = NULL; 1118 1119 rows = pinctrl_count_index_with_args(np, name); 1120 if (rows <= 0) { 1121 dev_err(pcs->dev, "Invalid number of rows: %d\n", rows); 1122 return -EINVAL; 1123 } 1124 1125 if (PCS_HAS_PINCONF) { 1126 dev_err(pcs->dev, "pinconf not supported\n"); 1127 return -ENOTSUPP; 1128 } 1129 1130 npins_in_row = pcs->width / pcs->bits_per_pin; 1131 1132 vals = devm_kzalloc(pcs->dev, 1133 array3_size(rows, npins_in_row, sizeof(*vals)), 1134 GFP_KERNEL); 1135 if (!vals) 1136 return -ENOMEM; 1137 1138 pins = devm_kzalloc(pcs->dev, 1139 array3_size(rows, npins_in_row, sizeof(*pins)), 1140 GFP_KERNEL); 1141 if (!pins) 1142 goto free_vals; 1143 1144 for (i = 0; i < rows; i++) { 1145 struct of_phandle_args pinctrl_spec; 1146 unsigned offset, val; 1147 unsigned mask, bit_pos, val_pos, mask_pos, submask; 1148 unsigned pin_num_from_lsb; 1149 int pin; 1150 1151 res = pinctrl_parse_index_with_args(np, name, i, &pinctrl_spec); 1152 if (res) 1153 return res; 1154 1155 if (pinctrl_spec.args_count < 3) { 1156 dev_err(pcs->dev, "invalid args_count for spec: %i\n", 1157 pinctrl_spec.args_count); 1158 break; 1159 } 1160 1161 /* Index plus two value cells */ 1162 offset = pinctrl_spec.args[0]; 1163 val = pinctrl_spec.args[1]; 1164 mask = pinctrl_spec.args[2]; 1165 1166 dev_dbg(pcs->dev, "%pOFn index: 0x%x value: 0x%x mask: 0x%x\n", 1167 pinctrl_spec.np, offset, val, mask); 1168 1169 /* Parse pins in each row from LSB */ 1170 while (mask) { 1171 bit_pos = __ffs(mask); 1172 pin_num_from_lsb = bit_pos / pcs->bits_per_pin; 1173 mask_pos = ((pcs->fmask) << bit_pos); 1174 val_pos = val & mask_pos; 1175 submask = mask & mask_pos; 1176 1177 if ((mask & mask_pos) == 0) { 1178 dev_err(pcs->dev, 1179 "Invalid mask for %pOFn at 0x%x\n", 1180 np, offset); 1181 break; 1182 } 1183 1184 mask &= ~mask_pos; 1185 1186 if (submask != mask_pos) { 1187 dev_warn(pcs->dev, 1188 "Invalid submask 0x%x for %pOFn at 0x%x\n", 1189 submask, np, offset); 1190 continue; 1191 } 1192 1193 vals[found].mask = submask; 1194 vals[found].reg = pcs->base + offset; 1195 vals[found].val = val_pos; 1196 1197 pin = pcs_get_pin_by_offset(pcs, offset); 1198 if (pin < 0) { 1199 dev_err(pcs->dev, 1200 "could not add functions for %pOFn %ux\n", 1201 np, offset); 1202 break; 1203 } 1204 pins[found++] = pin + pin_num_from_lsb; 1205 } 1206 } 1207 1208 pgnames[0] = np->name; 1209 mutex_lock(&pcs->mutex); 1210 fsel = pcs_add_function(pcs, &function, np->name, vals, found, 1211 pgnames, 1); 1212 if (fsel < 0) { 1213 res = fsel; 1214 goto free_pins; 1215 } 1216 1217 res = pinctrl_generic_add_group(pcs->pctl, np->name, pins, found, pcs); 1218 if (res < 0) 1219 goto free_function; 1220 1221 (*map)->type = PIN_MAP_TYPE_MUX_GROUP; 1222 (*map)->data.mux.group = np->name; 1223 (*map)->data.mux.function = np->name; 1224 1225 *num_maps = 1; 1226 mutex_unlock(&pcs->mutex); 1227 1228 return 0; 1229 1230 free_function: 1231 pinmux_generic_remove_function(pcs->pctl, fsel); 1232 free_pins: 1233 mutex_unlock(&pcs->mutex); 1234 devm_kfree(pcs->dev, pins); 1235 1236 free_vals: 1237 devm_kfree(pcs->dev, vals); 1238 1239 return res; 1240 } 1241 /** 1242 * pcs_dt_node_to_map() - allocates and parses pinctrl maps 1243 * @pctldev: pinctrl instance 1244 * @np_config: device tree pinmux entry 1245 * @map: array of map entries 1246 * @num_maps: number of maps 1247 */ 1248 static int pcs_dt_node_to_map(struct pinctrl_dev *pctldev, 1249 struct device_node *np_config, 1250 struct pinctrl_map **map, unsigned *num_maps) 1251 { 1252 struct pcs_device *pcs; 1253 const char **pgnames; 1254 int ret; 1255 1256 pcs = pinctrl_dev_get_drvdata(pctldev); 1257 1258 /* create 2 maps. One is for pinmux, and the other is for pinconf. */ 1259 *map = devm_kcalloc(pcs->dev, 2, sizeof(**map), GFP_KERNEL); 1260 if (!*map) 1261 return -ENOMEM; 1262 1263 *num_maps = 0; 1264 1265 pgnames = devm_kzalloc(pcs->dev, sizeof(*pgnames), GFP_KERNEL); 1266 if (!pgnames) { 1267 ret = -ENOMEM; 1268 goto free_map; 1269 } 1270 1271 if (pcs->bits_per_mux) { 1272 ret = pcs_parse_bits_in_pinctrl_entry(pcs, np_config, map, 1273 num_maps, pgnames); 1274 if (ret < 0) { 1275 dev_err(pcs->dev, "no pins entries for %pOFn\n", 1276 np_config); 1277 goto free_pgnames; 1278 } 1279 } else { 1280 ret = pcs_parse_one_pinctrl_entry(pcs, np_config, map, 1281 num_maps, pgnames); 1282 if (ret < 0) { 1283 dev_err(pcs->dev, "no pins entries for %pOFn\n", 1284 np_config); 1285 goto free_pgnames; 1286 } 1287 } 1288 1289 return 0; 1290 1291 free_pgnames: 1292 devm_kfree(pcs->dev, pgnames); 1293 free_map: 1294 devm_kfree(pcs->dev, *map); 1295 1296 return ret; 1297 } 1298 1299 /** 1300 * pcs_irq_free() - free interrupt 1301 * @pcs: pcs driver instance 1302 */ 1303 static void pcs_irq_free(struct pcs_device *pcs) 1304 { 1305 struct pcs_soc_data *pcs_soc = &pcs->socdata; 1306 1307 if (pcs_soc->irq < 0) 1308 return; 1309 1310 if (pcs->domain) 1311 irq_domain_remove(pcs->domain); 1312 1313 if (PCS_QUIRK_HAS_SHARED_IRQ) 1314 free_irq(pcs_soc->irq, pcs_soc); 1315 else 1316 irq_set_chained_handler(pcs_soc->irq, NULL); 1317 } 1318 1319 /** 1320 * pcs_free_resources() - free memory used by this driver 1321 * @pcs: pcs driver instance 1322 */ 1323 static void pcs_free_resources(struct pcs_device *pcs) 1324 { 1325 pcs_irq_free(pcs); 1326 pinctrl_unregister(pcs->pctl); 1327 1328 #if IS_BUILTIN(CONFIG_PINCTRL_SINGLE) 1329 if (pcs->missing_nr_pinctrl_cells) 1330 of_remove_property(pcs->np, pcs->missing_nr_pinctrl_cells); 1331 #endif 1332 } 1333 1334 static int pcs_add_gpio_func(struct device_node *node, struct pcs_device *pcs) 1335 { 1336 const char *propname = "pinctrl-single,gpio-range"; 1337 const char *cellname = "#pinctrl-single,gpio-range-cells"; 1338 struct of_phandle_args gpiospec; 1339 struct pcs_gpiofunc_range *range; 1340 int ret, i; 1341 1342 for (i = 0; ; i++) { 1343 ret = of_parse_phandle_with_args(node, propname, cellname, 1344 i, &gpiospec); 1345 /* Do not treat it as error. Only treat it as end condition. */ 1346 if (ret) { 1347 ret = 0; 1348 break; 1349 } 1350 range = devm_kzalloc(pcs->dev, sizeof(*range), GFP_KERNEL); 1351 if (!range) { 1352 ret = -ENOMEM; 1353 break; 1354 } 1355 range->offset = gpiospec.args[0]; 1356 range->npins = gpiospec.args[1]; 1357 range->gpiofunc = gpiospec.args[2]; 1358 mutex_lock(&pcs->mutex); 1359 list_add_tail(&range->node, &pcs->gpiofuncs); 1360 mutex_unlock(&pcs->mutex); 1361 } 1362 return ret; 1363 } 1364 1365 /** 1366 * struct pcs_interrupt 1367 * @reg: virtual address of interrupt register 1368 * @hwirq: hardware irq number 1369 * @irq: virtual irq number 1370 * @node: list node 1371 */ 1372 struct pcs_interrupt { 1373 void __iomem *reg; 1374 irq_hw_number_t hwirq; 1375 unsigned int irq; 1376 struct list_head node; 1377 }; 1378 1379 /** 1380 * pcs_irq_set() - enables or disables an interrupt 1381 * @pcs_soc: SoC specific settings 1382 * @irq: interrupt 1383 * @enable: enable or disable the interrupt 1384 * 1385 * Note that this currently assumes one interrupt per pinctrl 1386 * register that is typically used for wake-up events. 1387 */ 1388 static inline void pcs_irq_set(struct pcs_soc_data *pcs_soc, 1389 int irq, const bool enable) 1390 { 1391 struct pcs_device *pcs; 1392 struct list_head *pos; 1393 unsigned mask; 1394 1395 pcs = container_of(pcs_soc, struct pcs_device, socdata); 1396 list_for_each(pos, &pcs->irqs) { 1397 struct pcs_interrupt *pcswi; 1398 unsigned soc_mask; 1399 1400 pcswi = list_entry(pos, struct pcs_interrupt, node); 1401 if (irq != pcswi->irq) 1402 continue; 1403 1404 soc_mask = pcs_soc->irq_enable_mask; 1405 raw_spin_lock(&pcs->lock); 1406 mask = pcs->read(pcswi->reg); 1407 if (enable) 1408 mask |= soc_mask; 1409 else 1410 mask &= ~soc_mask; 1411 pcs->write(mask, pcswi->reg); 1412 1413 /* flush posted write */ 1414 mask = pcs->read(pcswi->reg); 1415 raw_spin_unlock(&pcs->lock); 1416 } 1417 1418 if (pcs_soc->rearm) 1419 pcs_soc->rearm(); 1420 } 1421 1422 /** 1423 * pcs_irq_mask() - mask pinctrl interrupt 1424 * @d: interrupt data 1425 */ 1426 static void pcs_irq_mask(struct irq_data *d) 1427 { 1428 struct pcs_soc_data *pcs_soc = irq_data_get_irq_chip_data(d); 1429 1430 pcs_irq_set(pcs_soc, d->irq, false); 1431 } 1432 1433 /** 1434 * pcs_irq_unmask() - unmask pinctrl interrupt 1435 * @d: interrupt data 1436 */ 1437 static void pcs_irq_unmask(struct irq_data *d) 1438 { 1439 struct pcs_soc_data *pcs_soc = irq_data_get_irq_chip_data(d); 1440 1441 pcs_irq_set(pcs_soc, d->irq, true); 1442 } 1443 1444 /** 1445 * pcs_irq_set_wake() - toggle the suspend and resume wake up 1446 * @d: interrupt data 1447 * @state: wake-up state 1448 * 1449 * Note that this should be called only for suspend and resume. 1450 * For runtime PM, the wake-up events should be enabled by default. 1451 */ 1452 static int pcs_irq_set_wake(struct irq_data *d, unsigned int state) 1453 { 1454 if (state) 1455 pcs_irq_unmask(d); 1456 else 1457 pcs_irq_mask(d); 1458 1459 return 0; 1460 } 1461 1462 /** 1463 * pcs_irq_handle() - common interrupt handler 1464 * @pcs_soc: SoC specific settings 1465 * 1466 * Note that this currently assumes we have one interrupt bit per 1467 * mux register. This interrupt is typically used for wake-up events. 1468 * For more complex interrupts different handlers can be specified. 1469 */ 1470 static int pcs_irq_handle(struct pcs_soc_data *pcs_soc) 1471 { 1472 struct pcs_device *pcs; 1473 struct list_head *pos; 1474 int count = 0; 1475 1476 pcs = container_of(pcs_soc, struct pcs_device, socdata); 1477 list_for_each(pos, &pcs->irqs) { 1478 struct pcs_interrupt *pcswi; 1479 unsigned mask; 1480 1481 pcswi = list_entry(pos, struct pcs_interrupt, node); 1482 raw_spin_lock(&pcs->lock); 1483 mask = pcs->read(pcswi->reg); 1484 raw_spin_unlock(&pcs->lock); 1485 if (mask & pcs_soc->irq_status_mask) { 1486 generic_handle_domain_irq(pcs->domain, 1487 pcswi->hwirq); 1488 count++; 1489 } 1490 } 1491 1492 return count; 1493 } 1494 1495 /** 1496 * pcs_irq_handler() - handler for the shared interrupt case 1497 * @irq: interrupt 1498 * @d: data 1499 * 1500 * Use this for cases where multiple instances of 1501 * pinctrl-single share a single interrupt like on omaps. 1502 */ 1503 static irqreturn_t pcs_irq_handler(int irq, void *d) 1504 { 1505 struct pcs_soc_data *pcs_soc = d; 1506 1507 return pcs_irq_handle(pcs_soc) ? IRQ_HANDLED : IRQ_NONE; 1508 } 1509 1510 /** 1511 * pcs_irq_chain_handler() - handler for the dedicated chained interrupt case 1512 * @desc: interrupt descriptor 1513 * 1514 * Use this if you have a separate interrupt for each 1515 * pinctrl-single instance. 1516 */ 1517 static void pcs_irq_chain_handler(struct irq_desc *desc) 1518 { 1519 struct pcs_soc_data *pcs_soc = irq_desc_get_handler_data(desc); 1520 struct irq_chip *chip; 1521 1522 chip = irq_desc_get_chip(desc); 1523 chained_irq_enter(chip, desc); 1524 pcs_irq_handle(pcs_soc); 1525 /* REVISIT: export and add handle_bad_irq(irq, desc)? */ 1526 chained_irq_exit(chip, desc); 1527 } 1528 1529 static int pcs_irqdomain_map(struct irq_domain *d, unsigned int irq, 1530 irq_hw_number_t hwirq) 1531 { 1532 struct pcs_soc_data *pcs_soc = d->host_data; 1533 struct pcs_device *pcs; 1534 struct pcs_interrupt *pcswi; 1535 1536 pcs = container_of(pcs_soc, struct pcs_device, socdata); 1537 pcswi = devm_kzalloc(pcs->dev, sizeof(*pcswi), GFP_KERNEL); 1538 if (!pcswi) 1539 return -ENOMEM; 1540 1541 pcswi->reg = pcs->base + hwirq; 1542 pcswi->hwirq = hwirq; 1543 pcswi->irq = irq; 1544 1545 mutex_lock(&pcs->mutex); 1546 list_add_tail(&pcswi->node, &pcs->irqs); 1547 mutex_unlock(&pcs->mutex); 1548 1549 irq_set_chip_data(irq, pcs_soc); 1550 irq_set_chip_and_handler(irq, &pcs->chip, 1551 handle_level_irq); 1552 irq_set_lockdep_class(irq, &pcs_lock_class, &pcs_request_class); 1553 irq_set_noprobe(irq); 1554 1555 return 0; 1556 } 1557 1558 static const struct irq_domain_ops pcs_irqdomain_ops = { 1559 .map = pcs_irqdomain_map, 1560 .xlate = irq_domain_xlate_onecell, 1561 }; 1562 1563 /** 1564 * pcs_irq_init_chained_handler() - set up a chained interrupt handler 1565 * @pcs: pcs driver instance 1566 * @np: device node pointer 1567 */ 1568 static int pcs_irq_init_chained_handler(struct pcs_device *pcs, 1569 struct device_node *np) 1570 { 1571 struct pcs_soc_data *pcs_soc = &pcs->socdata; 1572 const char *name = "pinctrl"; 1573 int num_irqs; 1574 1575 if (!pcs_soc->irq_enable_mask || 1576 !pcs_soc->irq_status_mask) { 1577 pcs_soc->irq = -1; 1578 return -EINVAL; 1579 } 1580 1581 INIT_LIST_HEAD(&pcs->irqs); 1582 pcs->chip.name = name; 1583 pcs->chip.irq_ack = pcs_irq_mask; 1584 pcs->chip.irq_mask = pcs_irq_mask; 1585 pcs->chip.irq_unmask = pcs_irq_unmask; 1586 pcs->chip.irq_set_wake = pcs_irq_set_wake; 1587 1588 if (PCS_QUIRK_HAS_SHARED_IRQ) { 1589 int res; 1590 1591 res = request_irq(pcs_soc->irq, pcs_irq_handler, 1592 IRQF_SHARED | IRQF_NO_SUSPEND | 1593 IRQF_NO_THREAD, 1594 name, pcs_soc); 1595 if (res) { 1596 pcs_soc->irq = -1; 1597 return res; 1598 } 1599 } else { 1600 irq_set_chained_handler_and_data(pcs_soc->irq, 1601 pcs_irq_chain_handler, 1602 pcs_soc); 1603 } 1604 1605 /* 1606 * We can use the register offset as the hardirq 1607 * number as irq_domain_add_simple maps them lazily. 1608 * This way we can easily support more than one 1609 * interrupt per function if needed. 1610 */ 1611 num_irqs = pcs->size; 1612 1613 pcs->domain = irq_domain_add_simple(np, num_irqs, 0, 1614 &pcs_irqdomain_ops, 1615 pcs_soc); 1616 if (!pcs->domain) { 1617 irq_set_chained_handler(pcs_soc->irq, NULL); 1618 return -EINVAL; 1619 } 1620 1621 return 0; 1622 } 1623 1624 static int pcs_save_context(struct pcs_device *pcs) 1625 { 1626 int i, mux_bytes; 1627 u64 *regsl; 1628 u32 *regsw; 1629 u16 *regshw; 1630 1631 mux_bytes = pcs->width / BITS_PER_BYTE; 1632 1633 if (!pcs->saved_vals) { 1634 pcs->saved_vals = devm_kzalloc(pcs->dev, pcs->size, GFP_ATOMIC); 1635 if (!pcs->saved_vals) 1636 return -ENOMEM; 1637 } 1638 1639 switch (pcs->width) { 1640 case 64: 1641 regsl = pcs->saved_vals; 1642 for (i = 0; i < pcs->size; i += mux_bytes) 1643 *regsl++ = pcs->read(pcs->base + i); 1644 break; 1645 case 32: 1646 regsw = pcs->saved_vals; 1647 for (i = 0; i < pcs->size; i += mux_bytes) 1648 *regsw++ = pcs->read(pcs->base + i); 1649 break; 1650 case 16: 1651 regshw = pcs->saved_vals; 1652 for (i = 0; i < pcs->size; i += mux_bytes) 1653 *regshw++ = pcs->read(pcs->base + i); 1654 break; 1655 } 1656 1657 return 0; 1658 } 1659 1660 static void pcs_restore_context(struct pcs_device *pcs) 1661 { 1662 int i, mux_bytes; 1663 u64 *regsl; 1664 u32 *regsw; 1665 u16 *regshw; 1666 1667 mux_bytes = pcs->width / BITS_PER_BYTE; 1668 1669 switch (pcs->width) { 1670 case 64: 1671 regsl = pcs->saved_vals; 1672 for (i = 0; i < pcs->size; i += mux_bytes) 1673 pcs->write(*regsl++, pcs->base + i); 1674 break; 1675 case 32: 1676 regsw = pcs->saved_vals; 1677 for (i = 0; i < pcs->size; i += mux_bytes) 1678 pcs->write(*regsw++, pcs->base + i); 1679 break; 1680 case 16: 1681 regshw = pcs->saved_vals; 1682 for (i = 0; i < pcs->size; i += mux_bytes) 1683 pcs->write(*regshw++, pcs->base + i); 1684 break; 1685 } 1686 } 1687 1688 static int pinctrl_single_suspend_noirq(struct device *dev) 1689 { 1690 struct pcs_device *pcs = dev_get_drvdata(dev); 1691 1692 if (pcs->flags & PCS_CONTEXT_LOSS_OFF) { 1693 int ret; 1694 1695 ret = pcs_save_context(pcs); 1696 if (ret < 0) 1697 return ret; 1698 } 1699 1700 return pinctrl_force_sleep(pcs->pctl); 1701 } 1702 1703 static int pinctrl_single_resume_noirq(struct device *dev) 1704 { 1705 struct pcs_device *pcs = dev_get_drvdata(dev); 1706 1707 if (pcs->flags & PCS_CONTEXT_LOSS_OFF) 1708 pcs_restore_context(pcs); 1709 1710 return pinctrl_force_default(pcs->pctl); 1711 } 1712 1713 static DEFINE_NOIRQ_DEV_PM_OPS(pinctrl_single_pm_ops, 1714 pinctrl_single_suspend_noirq, 1715 pinctrl_single_resume_noirq); 1716 1717 /** 1718 * pcs_quirk_missing_pinctrl_cells - handle legacy binding 1719 * @pcs: pinctrl driver instance 1720 * @np: device tree node 1721 * @cells: number of cells 1722 * 1723 * Handle legacy binding with no #pinctrl-cells. This should be 1724 * always two pinctrl-single,bit-per-mux and one for others. 1725 * At some point we may want to consider removing this. 1726 */ 1727 static int pcs_quirk_missing_pinctrl_cells(struct pcs_device *pcs, 1728 struct device_node *np, 1729 int cells) 1730 { 1731 struct property *p; 1732 const char *name = "#pinctrl-cells"; 1733 int error; 1734 u32 val; 1735 1736 error = of_property_read_u32(np, name, &val); 1737 if (!error) 1738 return 0; 1739 1740 dev_warn(pcs->dev, "please update dts to use %s = <%i>\n", 1741 name, cells); 1742 1743 p = devm_kzalloc(pcs->dev, sizeof(*p), GFP_KERNEL); 1744 if (!p) 1745 return -ENOMEM; 1746 1747 p->length = sizeof(__be32); 1748 p->value = devm_kzalloc(pcs->dev, sizeof(__be32), GFP_KERNEL); 1749 if (!p->value) 1750 return -ENOMEM; 1751 *(__be32 *)p->value = cpu_to_be32(cells); 1752 1753 p->name = devm_kstrdup(pcs->dev, name, GFP_KERNEL); 1754 if (!p->name) 1755 return -ENOMEM; 1756 1757 pcs->missing_nr_pinctrl_cells = p; 1758 1759 #if IS_BUILTIN(CONFIG_PINCTRL_SINGLE) 1760 error = of_add_property(np, pcs->missing_nr_pinctrl_cells); 1761 #endif 1762 1763 return error; 1764 } 1765 1766 static int pcs_probe(struct platform_device *pdev) 1767 { 1768 struct device_node *np = pdev->dev.of_node; 1769 struct pcs_pdata *pdata; 1770 struct resource *res; 1771 struct pcs_device *pcs; 1772 const struct pcs_soc_data *soc; 1773 int ret; 1774 1775 soc = of_device_get_match_data(&pdev->dev); 1776 if (WARN_ON(!soc)) 1777 return -EINVAL; 1778 1779 pcs = devm_kzalloc(&pdev->dev, sizeof(*pcs), GFP_KERNEL); 1780 if (!pcs) 1781 return -ENOMEM; 1782 1783 pcs->dev = &pdev->dev; 1784 pcs->np = np; 1785 raw_spin_lock_init(&pcs->lock); 1786 mutex_init(&pcs->mutex); 1787 INIT_LIST_HEAD(&pcs->gpiofuncs); 1788 pcs->flags = soc->flags; 1789 memcpy(&pcs->socdata, soc, sizeof(*soc)); 1790 1791 ret = of_property_read_u32(np, "pinctrl-single,register-width", 1792 &pcs->width); 1793 if (ret) { 1794 dev_err(pcs->dev, "register width not specified\n"); 1795 1796 return ret; 1797 } 1798 1799 ret = of_property_read_u32(np, "pinctrl-single,function-mask", 1800 &pcs->fmask); 1801 if (!ret) { 1802 pcs->fshift = __ffs(pcs->fmask); 1803 pcs->fmax = pcs->fmask >> pcs->fshift; 1804 } else { 1805 /* If mask property doesn't exist, function mux is invalid. */ 1806 pcs->fmask = 0; 1807 pcs->fshift = 0; 1808 pcs->fmax = 0; 1809 } 1810 1811 ret = of_property_read_u32(np, "pinctrl-single,function-off", 1812 &pcs->foff); 1813 if (ret) 1814 pcs->foff = PCS_OFF_DISABLED; 1815 1816 pcs->bits_per_mux = of_property_read_bool(np, 1817 "pinctrl-single,bit-per-mux"); 1818 ret = pcs_quirk_missing_pinctrl_cells(pcs, np, 1819 pcs->bits_per_mux ? 2 : 1); 1820 if (ret) { 1821 dev_err(&pdev->dev, "unable to patch #pinctrl-cells\n"); 1822 1823 return ret; 1824 } 1825 1826 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1827 if (!res) { 1828 dev_err(pcs->dev, "could not get resource\n"); 1829 return -ENODEV; 1830 } 1831 1832 pcs->res = devm_request_mem_region(pcs->dev, res->start, 1833 resource_size(res), DRIVER_NAME); 1834 if (!pcs->res) { 1835 dev_err(pcs->dev, "could not get mem_region\n"); 1836 return -EBUSY; 1837 } 1838 1839 pcs->size = resource_size(pcs->res); 1840 pcs->base = devm_ioremap(pcs->dev, pcs->res->start, pcs->size); 1841 if (!pcs->base) { 1842 dev_err(pcs->dev, "could not ioremap\n"); 1843 return -ENODEV; 1844 } 1845 1846 platform_set_drvdata(pdev, pcs); 1847 1848 switch (pcs->width) { 1849 case 8: 1850 pcs->read = pcs_readb; 1851 pcs->write = pcs_writeb; 1852 break; 1853 case 16: 1854 pcs->read = pcs_readw; 1855 pcs->write = pcs_writew; 1856 break; 1857 case 32: 1858 pcs->read = pcs_readl; 1859 pcs->write = pcs_writel; 1860 break; 1861 default: 1862 break; 1863 } 1864 1865 pcs->desc.name = DRIVER_NAME; 1866 pcs->desc.pctlops = &pcs_pinctrl_ops; 1867 pcs->desc.pmxops = &pcs_pinmux_ops; 1868 if (PCS_HAS_PINCONF) 1869 pcs->desc.confops = &pcs_pinconf_ops; 1870 pcs->desc.owner = THIS_MODULE; 1871 1872 ret = pcs_allocate_pin_table(pcs); 1873 if (ret < 0) 1874 goto free; 1875 1876 ret = pinctrl_register_and_init(&pcs->desc, pcs->dev, pcs, &pcs->pctl); 1877 if (ret) { 1878 dev_err(pcs->dev, "could not register single pinctrl driver\n"); 1879 goto free; 1880 } 1881 1882 ret = pcs_add_gpio_func(np, pcs); 1883 if (ret < 0) 1884 goto free; 1885 1886 pcs->socdata.irq = irq_of_parse_and_map(np, 0); 1887 if (pcs->socdata.irq) 1888 pcs->flags |= PCS_FEAT_IRQ; 1889 1890 /* We still need auxdata for some omaps for PRM interrupts */ 1891 pdata = dev_get_platdata(&pdev->dev); 1892 if (pdata) { 1893 if (pdata->rearm) 1894 pcs->socdata.rearm = pdata->rearm; 1895 if (pdata->irq) { 1896 pcs->socdata.irq = pdata->irq; 1897 pcs->flags |= PCS_FEAT_IRQ; 1898 } 1899 } 1900 1901 if (PCS_HAS_IRQ) { 1902 ret = pcs_irq_init_chained_handler(pcs, np); 1903 if (ret < 0) 1904 dev_warn(pcs->dev, "initialized with no interrupts\n"); 1905 } 1906 1907 dev_info(pcs->dev, "%i pins, size %u\n", pcs->desc.npins, pcs->size); 1908 1909 return pinctrl_enable(pcs->pctl); 1910 1911 free: 1912 pcs_free_resources(pcs); 1913 1914 return ret; 1915 } 1916 1917 static void pcs_remove(struct platform_device *pdev) 1918 { 1919 struct pcs_device *pcs = platform_get_drvdata(pdev); 1920 1921 pcs_free_resources(pcs); 1922 } 1923 1924 static const struct pcs_soc_data pinctrl_single_omap_wkup = { 1925 .flags = PCS_QUIRK_SHARED_IRQ, 1926 .irq_enable_mask = (1 << 14), /* OMAP_WAKEUP_EN */ 1927 .irq_status_mask = (1 << 15), /* OMAP_WAKEUP_EVENT */ 1928 }; 1929 1930 static const struct pcs_soc_data pinctrl_single_dra7 = { 1931 .irq_enable_mask = (1 << 24), /* WAKEUPENABLE */ 1932 .irq_status_mask = (1 << 25), /* WAKEUPEVENT */ 1933 }; 1934 1935 static const struct pcs_soc_data pinctrl_single_am437x = { 1936 .flags = PCS_QUIRK_SHARED_IRQ | PCS_CONTEXT_LOSS_OFF, 1937 .irq_enable_mask = (1 << 29), /* OMAP_WAKEUP_EN */ 1938 .irq_status_mask = (1 << 30), /* OMAP_WAKEUP_EVENT */ 1939 }; 1940 1941 static const struct pcs_soc_data pinctrl_single_am654 = { 1942 .flags = PCS_QUIRK_SHARED_IRQ | PCS_CONTEXT_LOSS_OFF, 1943 .irq_enable_mask = (1 << 29), /* WKUP_EN */ 1944 .irq_status_mask = (1 << 30), /* WKUP_EVT */ 1945 }; 1946 1947 static const struct pcs_soc_data pinctrl_single_j7200 = { 1948 .flags = PCS_CONTEXT_LOSS_OFF, 1949 }; 1950 1951 static const struct pcs_soc_data pinctrl_single = { 1952 }; 1953 1954 static const struct pcs_soc_data pinconf_single = { 1955 .flags = PCS_FEAT_PINCONF, 1956 }; 1957 1958 static const struct of_device_id pcs_of_match[] = { 1959 { .compatible = "ti,am437-padconf", .data = &pinctrl_single_am437x }, 1960 { .compatible = "ti,am654-padconf", .data = &pinctrl_single_am654 }, 1961 { .compatible = "ti,dra7-padconf", .data = &pinctrl_single_dra7 }, 1962 { .compatible = "ti,omap3-padconf", .data = &pinctrl_single_omap_wkup }, 1963 { .compatible = "ti,omap4-padconf", .data = &pinctrl_single_omap_wkup }, 1964 { .compatible = "ti,omap5-padconf", .data = &pinctrl_single_omap_wkup }, 1965 { .compatible = "ti,j7200-padconf", .data = &pinctrl_single_j7200 }, 1966 { .compatible = "pinctrl-single", .data = &pinctrl_single }, 1967 { .compatible = "pinconf-single", .data = &pinconf_single }, 1968 { }, 1969 }; 1970 MODULE_DEVICE_TABLE(of, pcs_of_match); 1971 1972 static struct platform_driver pcs_driver = { 1973 .probe = pcs_probe, 1974 .remove_new = pcs_remove, 1975 .driver = { 1976 .name = DRIVER_NAME, 1977 .of_match_table = pcs_of_match, 1978 .pm = pm_sleep_ptr(&pinctrl_single_pm_ops), 1979 }, 1980 }; 1981 1982 module_platform_driver(pcs_driver); 1983 1984 MODULE_AUTHOR("Tony Lindgren <[email protected]>"); 1985 MODULE_DESCRIPTION("One-register-per-pin type device tree based pinctrl driver"); 1986 MODULE_LICENSE("GPL v2"); 1987