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