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 19 #include <linux/of.h> 20 #include <linux/of_device.h> 21 #include <linux/of_address.h> 22 23 #include <linux/pinctrl/pinctrl.h> 24 #include <linux/pinctrl/pinmux.h> 25 26 #include "core.h" 27 28 #define DRIVER_NAME "pinctrl-single" 29 #define PCS_MUX_PINS_NAME "pinctrl-single,pins" 30 #define PCS_MUX_BITS_NAME "pinctrl-single,bits" 31 #define PCS_REG_NAME_LEN ((sizeof(unsigned long) * 2) + 1) 32 #define PCS_OFF_DISABLED ~0U 33 34 /** 35 * struct pcs_pingroup - pingroups for a function 36 * @np: pingroup device node pointer 37 * @name: pingroup name 38 * @gpins: array of the pins in the group 39 * @ngpins: number of pins in the group 40 * @node: list node 41 */ 42 struct pcs_pingroup { 43 struct device_node *np; 44 const char *name; 45 int *gpins; 46 int ngpins; 47 struct list_head node; 48 }; 49 50 /** 51 * struct pcs_func_vals - mux function register offset and value pair 52 * @reg: register virtual address 53 * @val: register value 54 */ 55 struct pcs_func_vals { 56 void __iomem *reg; 57 unsigned val; 58 unsigned mask; 59 }; 60 61 /** 62 * struct pcs_function - pinctrl function 63 * @name: pinctrl function name 64 * @vals: register and vals array 65 * @nvals: number of entries in vals array 66 * @pgnames: array of pingroup names the function uses 67 * @npgnames: number of pingroup names the function uses 68 * @node: list node 69 */ 70 struct pcs_function { 71 const char *name; 72 struct pcs_func_vals *vals; 73 unsigned nvals; 74 const char **pgnames; 75 int npgnames; 76 struct list_head node; 77 }; 78 79 /** 80 * struct pcs_data - wrapper for data needed by pinctrl framework 81 * @pa: pindesc array 82 * @cur: index to current element 83 * 84 * REVISIT: We should be able to drop this eventually by adding 85 * support for registering pins individually in the pinctrl 86 * framework for those drivers that don't need a static array. 87 */ 88 struct pcs_data { 89 struct pinctrl_pin_desc *pa; 90 int cur; 91 }; 92 93 /** 94 * struct pcs_name - register name for a pin 95 * @name: name of the pinctrl register 96 * 97 * REVISIT: We may want to make names optional in the pinctrl 98 * framework as some drivers may not care about pin names to 99 * avoid kernel bloat. The pin names can be deciphered by user 100 * space tools using debugfs based on the register address and 101 * SoC packaging information. 102 */ 103 struct pcs_name { 104 char name[PCS_REG_NAME_LEN]; 105 }; 106 107 /** 108 * struct pcs_device - pinctrl device instance 109 * @res: resources 110 * @base: virtual address of the controller 111 * @size: size of the ioremapped area 112 * @dev: device entry 113 * @pctl: pin controller device 114 * @mutex: mutex protecting the lists 115 * @width: bits per mux register 116 * @fmask: function register mask 117 * @fshift: function register shift 118 * @foff: value to turn mux off 119 * @fmax: max number of functions in fmask 120 * @names: array of register names for pins 121 * @pins: physical pins on the SoC 122 * @pgtree: pingroup index radix tree 123 * @ftree: function index radix tree 124 * @pingroups: list of pingroups 125 * @functions: list of functions 126 * @ngroups: number of pingroups 127 * @nfuncs: number of functions 128 * @desc: pin controller descriptor 129 * @read: register read function to use 130 * @write: register write function to use 131 */ 132 struct pcs_device { 133 struct resource *res; 134 void __iomem *base; 135 unsigned size; 136 struct device *dev; 137 struct pinctrl_dev *pctl; 138 struct mutex mutex; 139 unsigned width; 140 unsigned fmask; 141 unsigned fshift; 142 unsigned foff; 143 unsigned fmax; 144 bool bits_per_mux; 145 struct pcs_name *names; 146 struct pcs_data pins; 147 struct radix_tree_root pgtree; 148 struct radix_tree_root ftree; 149 struct list_head pingroups; 150 struct list_head functions; 151 unsigned ngroups; 152 unsigned nfuncs; 153 struct pinctrl_desc desc; 154 unsigned (*read)(void __iomem *reg); 155 void (*write)(unsigned val, void __iomem *reg); 156 }; 157 158 /* 159 * REVISIT: Reads and writes could eventually use regmap or something 160 * generic. But at least on omaps, some mux registers are performance 161 * critical as they may need to be remuxed every time before and after 162 * idle. Adding tests for register access width for every read and 163 * write like regmap is doing is not desired, and caching the registers 164 * does not help in this case. 165 */ 166 167 static unsigned __maybe_unused pcs_readb(void __iomem *reg) 168 { 169 return readb(reg); 170 } 171 172 static unsigned __maybe_unused pcs_readw(void __iomem *reg) 173 { 174 return readw(reg); 175 } 176 177 static unsigned __maybe_unused pcs_readl(void __iomem *reg) 178 { 179 return readl(reg); 180 } 181 182 static void __maybe_unused pcs_writeb(unsigned val, void __iomem *reg) 183 { 184 writeb(val, reg); 185 } 186 187 static void __maybe_unused pcs_writew(unsigned val, void __iomem *reg) 188 { 189 writew(val, reg); 190 } 191 192 static void __maybe_unused pcs_writel(unsigned val, void __iomem *reg) 193 { 194 writel(val, reg); 195 } 196 197 static int pcs_get_groups_count(struct pinctrl_dev *pctldev) 198 { 199 struct pcs_device *pcs; 200 201 pcs = pinctrl_dev_get_drvdata(pctldev); 202 203 return pcs->ngroups; 204 } 205 206 static const char *pcs_get_group_name(struct pinctrl_dev *pctldev, 207 unsigned gselector) 208 { 209 struct pcs_device *pcs; 210 struct pcs_pingroup *group; 211 212 pcs = pinctrl_dev_get_drvdata(pctldev); 213 group = radix_tree_lookup(&pcs->pgtree, gselector); 214 if (!group) { 215 dev_err(pcs->dev, "%s could not find pingroup%i\n", 216 __func__, gselector); 217 return NULL; 218 } 219 220 return group->name; 221 } 222 223 static int pcs_get_group_pins(struct pinctrl_dev *pctldev, 224 unsigned gselector, 225 const unsigned **pins, 226 unsigned *npins) 227 { 228 struct pcs_device *pcs; 229 struct pcs_pingroup *group; 230 231 pcs = pinctrl_dev_get_drvdata(pctldev); 232 group = radix_tree_lookup(&pcs->pgtree, gselector); 233 if (!group) { 234 dev_err(pcs->dev, "%s could not find pingroup%i\n", 235 __func__, gselector); 236 return -EINVAL; 237 } 238 239 *pins = group->gpins; 240 *npins = group->ngpins; 241 242 return 0; 243 } 244 245 static void pcs_pin_dbg_show(struct pinctrl_dev *pctldev, 246 struct seq_file *s, 247 unsigned pin) 248 { 249 struct pcs_device *pcs; 250 unsigned val, mux_bytes; 251 252 pcs = pinctrl_dev_get_drvdata(pctldev); 253 254 mux_bytes = pcs->width / BITS_PER_BYTE; 255 val = pcs->read(pcs->base + pin * mux_bytes); 256 257 seq_printf(s, "%08x %s " , val, DRIVER_NAME); 258 } 259 260 static void pcs_dt_free_map(struct pinctrl_dev *pctldev, 261 struct pinctrl_map *map, unsigned num_maps) 262 { 263 struct pcs_device *pcs; 264 265 pcs = pinctrl_dev_get_drvdata(pctldev); 266 devm_kfree(pcs->dev, map); 267 } 268 269 static int pcs_dt_node_to_map(struct pinctrl_dev *pctldev, 270 struct device_node *np_config, 271 struct pinctrl_map **map, unsigned *num_maps); 272 273 static struct pinctrl_ops pcs_pinctrl_ops = { 274 .get_groups_count = pcs_get_groups_count, 275 .get_group_name = pcs_get_group_name, 276 .get_group_pins = pcs_get_group_pins, 277 .pin_dbg_show = pcs_pin_dbg_show, 278 .dt_node_to_map = pcs_dt_node_to_map, 279 .dt_free_map = pcs_dt_free_map, 280 }; 281 282 static int pcs_get_functions_count(struct pinctrl_dev *pctldev) 283 { 284 struct pcs_device *pcs; 285 286 pcs = pinctrl_dev_get_drvdata(pctldev); 287 288 return pcs->nfuncs; 289 } 290 291 static const char *pcs_get_function_name(struct pinctrl_dev *pctldev, 292 unsigned fselector) 293 { 294 struct pcs_device *pcs; 295 struct pcs_function *func; 296 297 pcs = pinctrl_dev_get_drvdata(pctldev); 298 func = radix_tree_lookup(&pcs->ftree, fselector); 299 if (!func) { 300 dev_err(pcs->dev, "%s could not find function%i\n", 301 __func__, fselector); 302 return NULL; 303 } 304 305 return func->name; 306 } 307 308 static int pcs_get_function_groups(struct pinctrl_dev *pctldev, 309 unsigned fselector, 310 const char * const **groups, 311 unsigned * const ngroups) 312 { 313 struct pcs_device *pcs; 314 struct pcs_function *func; 315 316 pcs = pinctrl_dev_get_drvdata(pctldev); 317 func = radix_tree_lookup(&pcs->ftree, fselector); 318 if (!func) { 319 dev_err(pcs->dev, "%s could not find function%i\n", 320 __func__, fselector); 321 return -EINVAL; 322 } 323 *groups = func->pgnames; 324 *ngroups = func->npgnames; 325 326 return 0; 327 } 328 329 static int pcs_enable(struct pinctrl_dev *pctldev, unsigned fselector, 330 unsigned group) 331 { 332 struct pcs_device *pcs; 333 struct pcs_function *func; 334 int i; 335 336 pcs = pinctrl_dev_get_drvdata(pctldev); 337 func = radix_tree_lookup(&pcs->ftree, fselector); 338 if (!func) 339 return -EINVAL; 340 341 dev_dbg(pcs->dev, "enabling %s function%i\n", 342 func->name, fselector); 343 344 for (i = 0; i < func->nvals; i++) { 345 struct pcs_func_vals *vals; 346 unsigned val, mask; 347 348 vals = &func->vals[i]; 349 val = pcs->read(vals->reg); 350 if (!vals->mask) 351 mask = pcs->fmask; 352 else 353 mask = pcs->fmask & vals->mask; 354 355 val &= ~mask; 356 val |= (vals->val & mask); 357 pcs->write(val, vals->reg); 358 } 359 360 return 0; 361 } 362 363 static void pcs_disable(struct pinctrl_dev *pctldev, unsigned fselector, 364 unsigned group) 365 { 366 struct pcs_device *pcs; 367 struct pcs_function *func; 368 int i; 369 370 pcs = pinctrl_dev_get_drvdata(pctldev); 371 func = radix_tree_lookup(&pcs->ftree, fselector); 372 if (!func) { 373 dev_err(pcs->dev, "%s could not find function%i\n", 374 __func__, fselector); 375 return; 376 } 377 378 /* 379 * Ignore disable if function-off is not specified. Some hardware 380 * does not have clearly defined disable function. For pin specific 381 * off modes, you can use alternate named states as described in 382 * pinctrl-bindings.txt. 383 */ 384 if (pcs->foff == PCS_OFF_DISABLED) { 385 dev_dbg(pcs->dev, "ignoring disable for %s function%i\n", 386 func->name, fselector); 387 return; 388 } 389 390 dev_dbg(pcs->dev, "disabling function%i %s\n", 391 fselector, func->name); 392 393 for (i = 0; i < func->nvals; i++) { 394 struct pcs_func_vals *vals; 395 unsigned val; 396 397 vals = &func->vals[i]; 398 val = pcs->read(vals->reg); 399 val &= ~pcs->fmask; 400 val |= pcs->foff << pcs->fshift; 401 pcs->write(val, vals->reg); 402 } 403 } 404 405 static int pcs_request_gpio(struct pinctrl_dev *pctldev, 406 struct pinctrl_gpio_range *range, unsigned offset) 407 { 408 return -ENOTSUPP; 409 } 410 411 static struct pinmux_ops pcs_pinmux_ops = { 412 .get_functions_count = pcs_get_functions_count, 413 .get_function_name = pcs_get_function_name, 414 .get_function_groups = pcs_get_function_groups, 415 .enable = pcs_enable, 416 .disable = pcs_disable, 417 .gpio_request_enable = pcs_request_gpio, 418 }; 419 420 static int pcs_pinconf_get(struct pinctrl_dev *pctldev, 421 unsigned pin, unsigned long *config) 422 { 423 return -ENOTSUPP; 424 } 425 426 static int pcs_pinconf_set(struct pinctrl_dev *pctldev, 427 unsigned pin, unsigned long config) 428 { 429 return -ENOTSUPP; 430 } 431 432 static int pcs_pinconf_group_get(struct pinctrl_dev *pctldev, 433 unsigned group, unsigned long *config) 434 { 435 return -ENOTSUPP; 436 } 437 438 static int pcs_pinconf_group_set(struct pinctrl_dev *pctldev, 439 unsigned group, unsigned long config) 440 { 441 return -ENOTSUPP; 442 } 443 444 static void pcs_pinconf_dbg_show(struct pinctrl_dev *pctldev, 445 struct seq_file *s, unsigned offset) 446 { 447 } 448 449 static void pcs_pinconf_group_dbg_show(struct pinctrl_dev *pctldev, 450 struct seq_file *s, unsigned selector) 451 { 452 } 453 454 static struct pinconf_ops pcs_pinconf_ops = { 455 .pin_config_get = pcs_pinconf_get, 456 .pin_config_set = pcs_pinconf_set, 457 .pin_config_group_get = pcs_pinconf_group_get, 458 .pin_config_group_set = pcs_pinconf_group_set, 459 .pin_config_dbg_show = pcs_pinconf_dbg_show, 460 .pin_config_group_dbg_show = pcs_pinconf_group_dbg_show, 461 }; 462 463 /** 464 * pcs_add_pin() - add a pin to the static per controller pin array 465 * @pcs: pcs driver instance 466 * @offset: register offset from base 467 */ 468 static int pcs_add_pin(struct pcs_device *pcs, unsigned offset) 469 { 470 struct pinctrl_pin_desc *pin; 471 struct pcs_name *pn; 472 int i; 473 474 i = pcs->pins.cur; 475 if (i >= pcs->desc.npins) { 476 dev_err(pcs->dev, "too many pins, max %i\n", 477 pcs->desc.npins); 478 return -ENOMEM; 479 } 480 481 pin = &pcs->pins.pa[i]; 482 pn = &pcs->names[i]; 483 sprintf(pn->name, "%lx", 484 (unsigned long)pcs->res->start + offset); 485 pin->name = pn->name; 486 pin->number = i; 487 pcs->pins.cur++; 488 489 return i; 490 } 491 492 /** 493 * pcs_allocate_pin_table() - adds all the pins for the pinctrl driver 494 * @pcs: pcs driver instance 495 * 496 * In case of errors, resources are freed in pcs_free_resources. 497 * 498 * If your hardware needs holes in the address space, then just set 499 * up multiple driver instances. 500 */ 501 static int pcs_allocate_pin_table(struct pcs_device *pcs) 502 { 503 int mux_bytes, nr_pins, i; 504 505 mux_bytes = pcs->width / BITS_PER_BYTE; 506 nr_pins = pcs->size / mux_bytes; 507 508 dev_dbg(pcs->dev, "allocating %i pins\n", nr_pins); 509 pcs->pins.pa = devm_kzalloc(pcs->dev, 510 sizeof(*pcs->pins.pa) * nr_pins, 511 GFP_KERNEL); 512 if (!pcs->pins.pa) 513 return -ENOMEM; 514 515 pcs->names = devm_kzalloc(pcs->dev, 516 sizeof(struct pcs_name) * nr_pins, 517 GFP_KERNEL); 518 if (!pcs->names) 519 return -ENOMEM; 520 521 pcs->desc.pins = pcs->pins.pa; 522 pcs->desc.npins = nr_pins; 523 524 for (i = 0; i < pcs->desc.npins; i++) { 525 unsigned offset; 526 int res; 527 528 offset = i * mux_bytes; 529 res = pcs_add_pin(pcs, offset); 530 if (res < 0) { 531 dev_err(pcs->dev, "error adding pins: %i\n", res); 532 return res; 533 } 534 } 535 536 return 0; 537 } 538 539 /** 540 * pcs_add_function() - adds a new function to the function list 541 * @pcs: pcs driver instance 542 * @np: device node of the mux entry 543 * @name: name of the function 544 * @vals: array of mux register value pairs used by the function 545 * @nvals: number of mux register value pairs 546 * @pgnames: array of pingroup names for the function 547 * @npgnames: number of pingroup names 548 */ 549 static struct pcs_function *pcs_add_function(struct pcs_device *pcs, 550 struct device_node *np, 551 const char *name, 552 struct pcs_func_vals *vals, 553 unsigned nvals, 554 const char **pgnames, 555 unsigned npgnames) 556 { 557 struct pcs_function *function; 558 559 function = devm_kzalloc(pcs->dev, sizeof(*function), GFP_KERNEL); 560 if (!function) 561 return NULL; 562 563 function->name = name; 564 function->vals = vals; 565 function->nvals = nvals; 566 function->pgnames = pgnames; 567 function->npgnames = npgnames; 568 569 mutex_lock(&pcs->mutex); 570 list_add_tail(&function->node, &pcs->functions); 571 radix_tree_insert(&pcs->ftree, pcs->nfuncs, function); 572 pcs->nfuncs++; 573 mutex_unlock(&pcs->mutex); 574 575 return function; 576 } 577 578 static void pcs_remove_function(struct pcs_device *pcs, 579 struct pcs_function *function) 580 { 581 int i; 582 583 mutex_lock(&pcs->mutex); 584 for (i = 0; i < pcs->nfuncs; i++) { 585 struct pcs_function *found; 586 587 found = radix_tree_lookup(&pcs->ftree, i); 588 if (found == function) 589 radix_tree_delete(&pcs->ftree, i); 590 } 591 list_del(&function->node); 592 mutex_unlock(&pcs->mutex); 593 } 594 595 /** 596 * pcs_add_pingroup() - add a pingroup to the pingroup list 597 * @pcs: pcs driver instance 598 * @np: device node of the mux entry 599 * @name: name of the pingroup 600 * @gpins: array of the pins that belong to the group 601 * @ngpins: number of pins in the group 602 */ 603 static int pcs_add_pingroup(struct pcs_device *pcs, 604 struct device_node *np, 605 const char *name, 606 int *gpins, 607 int ngpins) 608 { 609 struct pcs_pingroup *pingroup; 610 611 pingroup = devm_kzalloc(pcs->dev, sizeof(*pingroup), GFP_KERNEL); 612 if (!pingroup) 613 return -ENOMEM; 614 615 pingroup->name = name; 616 pingroup->np = np; 617 pingroup->gpins = gpins; 618 pingroup->ngpins = ngpins; 619 620 mutex_lock(&pcs->mutex); 621 list_add_tail(&pingroup->node, &pcs->pingroups); 622 radix_tree_insert(&pcs->pgtree, pcs->ngroups, pingroup); 623 pcs->ngroups++; 624 mutex_unlock(&pcs->mutex); 625 626 return 0; 627 } 628 629 /** 630 * pcs_get_pin_by_offset() - get a pin index based on the register offset 631 * @pcs: pcs driver instance 632 * @offset: register offset from the base 633 * 634 * Note that this is OK as long as the pins are in a static array. 635 */ 636 static int pcs_get_pin_by_offset(struct pcs_device *pcs, unsigned offset) 637 { 638 unsigned index; 639 640 if (offset >= pcs->size) { 641 dev_err(pcs->dev, "mux offset out of range: 0x%x (0x%x)\n", 642 offset, pcs->size); 643 return -EINVAL; 644 } 645 646 index = offset / (pcs->width / BITS_PER_BYTE); 647 648 return index; 649 } 650 651 /** 652 * smux_parse_one_pinctrl_entry() - parses a device tree mux entry 653 * @pcs: pinctrl driver instance 654 * @np: device node of the mux entry 655 * @map: map entry 656 * @pgnames: pingroup names 657 * 658 * Note that this binding currently supports only sets of one register + value. 659 * 660 * Also note that this driver tries to avoid understanding pin and function 661 * names because of the extra bloat they would cause especially in the case of 662 * a large number of pins. This driver just sets what is specified for the board 663 * in the .dts file. Further user space debugging tools can be developed to 664 * decipher the pin and function names using debugfs. 665 * 666 * If you are concerned about the boot time, set up the static pins in 667 * the bootloader, and only set up selected pins as device tree entries. 668 */ 669 static int pcs_parse_one_pinctrl_entry(struct pcs_device *pcs, 670 struct device_node *np, 671 struct pinctrl_map **map, 672 const char **pgnames) 673 { 674 struct pcs_func_vals *vals; 675 const __be32 *mux; 676 int size, params, rows, *pins, index = 0, found = 0, res = -ENOMEM; 677 struct pcs_function *function; 678 679 if (pcs->bits_per_mux) { 680 params = 3; 681 mux = of_get_property(np, PCS_MUX_BITS_NAME, &size); 682 } else { 683 params = 2; 684 mux = of_get_property(np, PCS_MUX_PINS_NAME, &size); 685 } 686 687 if (!mux) { 688 dev_err(pcs->dev, "no valid property for %s\n", np->name); 689 return -EINVAL; 690 } 691 692 if (size < (sizeof(*mux) * params)) { 693 dev_err(pcs->dev, "bad data for %s\n", np->name); 694 return -EINVAL; 695 } 696 697 size /= sizeof(*mux); /* Number of elements in array */ 698 rows = size / params; 699 700 vals = devm_kzalloc(pcs->dev, sizeof(*vals) * rows, GFP_KERNEL); 701 if (!vals) 702 return -ENOMEM; 703 704 pins = devm_kzalloc(pcs->dev, sizeof(*pins) * rows, GFP_KERNEL); 705 if (!pins) 706 goto free_vals; 707 708 while (index < size) { 709 unsigned offset, val; 710 int pin; 711 712 offset = be32_to_cpup(mux + index++); 713 val = be32_to_cpup(mux + index++); 714 vals[found].reg = pcs->base + offset; 715 vals[found].val = val; 716 if (params == 3) { 717 val = be32_to_cpup(mux + index++); 718 vals[found].mask = val; 719 } 720 721 pin = pcs_get_pin_by_offset(pcs, offset); 722 if (pin < 0) { 723 dev_err(pcs->dev, 724 "could not add functions for %s %ux\n", 725 np->name, offset); 726 break; 727 } 728 pins[found++] = pin; 729 } 730 731 pgnames[0] = np->name; 732 function = pcs_add_function(pcs, np, np->name, vals, found, pgnames, 1); 733 if (!function) 734 goto free_pins; 735 736 res = pcs_add_pingroup(pcs, np, np->name, pins, found); 737 if (res < 0) 738 goto free_function; 739 740 (*map)->type = PIN_MAP_TYPE_MUX_GROUP; 741 (*map)->data.mux.group = np->name; 742 (*map)->data.mux.function = np->name; 743 744 return 0; 745 746 free_function: 747 pcs_remove_function(pcs, function); 748 749 free_pins: 750 devm_kfree(pcs->dev, pins); 751 752 free_vals: 753 devm_kfree(pcs->dev, vals); 754 755 return res; 756 } 757 /** 758 * pcs_dt_node_to_map() - allocates and parses pinctrl maps 759 * @pctldev: pinctrl instance 760 * @np_config: device tree pinmux entry 761 * @map: array of map entries 762 * @num_maps: number of maps 763 */ 764 static int pcs_dt_node_to_map(struct pinctrl_dev *pctldev, 765 struct device_node *np_config, 766 struct pinctrl_map **map, unsigned *num_maps) 767 { 768 struct pcs_device *pcs; 769 const char **pgnames; 770 int ret; 771 772 pcs = pinctrl_dev_get_drvdata(pctldev); 773 774 *map = devm_kzalloc(pcs->dev, sizeof(**map), GFP_KERNEL); 775 if (!*map) 776 return -ENOMEM; 777 778 *num_maps = 0; 779 780 pgnames = devm_kzalloc(pcs->dev, sizeof(*pgnames), GFP_KERNEL); 781 if (!pgnames) { 782 ret = -ENOMEM; 783 goto free_map; 784 } 785 786 ret = pcs_parse_one_pinctrl_entry(pcs, np_config, map, pgnames); 787 if (ret < 0) { 788 dev_err(pcs->dev, "no pins entries for %s\n", 789 np_config->name); 790 goto free_pgnames; 791 } 792 *num_maps = 1; 793 794 return 0; 795 796 free_pgnames: 797 devm_kfree(pcs->dev, pgnames); 798 free_map: 799 devm_kfree(pcs->dev, *map); 800 801 return ret; 802 } 803 804 /** 805 * pcs_free_funcs() - free memory used by functions 806 * @pcs: pcs driver instance 807 */ 808 static void pcs_free_funcs(struct pcs_device *pcs) 809 { 810 struct list_head *pos, *tmp; 811 int i; 812 813 mutex_lock(&pcs->mutex); 814 for (i = 0; i < pcs->nfuncs; i++) { 815 struct pcs_function *func; 816 817 func = radix_tree_lookup(&pcs->ftree, i); 818 if (!func) 819 continue; 820 radix_tree_delete(&pcs->ftree, i); 821 } 822 list_for_each_safe(pos, tmp, &pcs->functions) { 823 struct pcs_function *function; 824 825 function = list_entry(pos, struct pcs_function, node); 826 list_del(&function->node); 827 } 828 mutex_unlock(&pcs->mutex); 829 } 830 831 /** 832 * pcs_free_pingroups() - free memory used by pingroups 833 * @pcs: pcs driver instance 834 */ 835 static void pcs_free_pingroups(struct pcs_device *pcs) 836 { 837 struct list_head *pos, *tmp; 838 int i; 839 840 mutex_lock(&pcs->mutex); 841 for (i = 0; i < pcs->ngroups; i++) { 842 struct pcs_pingroup *pingroup; 843 844 pingroup = radix_tree_lookup(&pcs->pgtree, i); 845 if (!pingroup) 846 continue; 847 radix_tree_delete(&pcs->pgtree, i); 848 } 849 list_for_each_safe(pos, tmp, &pcs->pingroups) { 850 struct pcs_pingroup *pingroup; 851 852 pingroup = list_entry(pos, struct pcs_pingroup, node); 853 list_del(&pingroup->node); 854 } 855 mutex_unlock(&pcs->mutex); 856 } 857 858 /** 859 * pcs_free_resources() - free memory used by this driver 860 * @pcs: pcs driver instance 861 */ 862 static void pcs_free_resources(struct pcs_device *pcs) 863 { 864 if (pcs->pctl) 865 pinctrl_unregister(pcs->pctl); 866 867 pcs_free_funcs(pcs); 868 pcs_free_pingroups(pcs); 869 } 870 871 #define PCS_GET_PROP_U32(name, reg, err) \ 872 do { \ 873 ret = of_property_read_u32(np, name, reg); \ 874 if (ret) { \ 875 dev_err(pcs->dev, err); \ 876 return ret; \ 877 } \ 878 } while (0); 879 880 static struct of_device_id pcs_of_match[]; 881 882 static int pcs_probe(struct platform_device *pdev) 883 { 884 struct device_node *np = pdev->dev.of_node; 885 const struct of_device_id *match; 886 struct resource *res; 887 struct pcs_device *pcs; 888 int ret; 889 890 match = of_match_device(pcs_of_match, &pdev->dev); 891 if (!match) 892 return -EINVAL; 893 894 pcs = devm_kzalloc(&pdev->dev, sizeof(*pcs), GFP_KERNEL); 895 if (!pcs) { 896 dev_err(&pdev->dev, "could not allocate\n"); 897 return -ENOMEM; 898 } 899 pcs->dev = &pdev->dev; 900 mutex_init(&pcs->mutex); 901 INIT_LIST_HEAD(&pcs->pingroups); 902 INIT_LIST_HEAD(&pcs->functions); 903 904 PCS_GET_PROP_U32("pinctrl-single,register-width", &pcs->width, 905 "register width not specified\n"); 906 907 PCS_GET_PROP_U32("pinctrl-single,function-mask", &pcs->fmask, 908 "function register mask not specified\n"); 909 pcs->fshift = ffs(pcs->fmask) - 1; 910 pcs->fmax = pcs->fmask >> pcs->fshift; 911 912 ret = of_property_read_u32(np, "pinctrl-single,function-off", 913 &pcs->foff); 914 if (ret) 915 pcs->foff = PCS_OFF_DISABLED; 916 917 pcs->bits_per_mux = of_property_read_bool(np, 918 "pinctrl-single,bit-per-mux"); 919 920 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 921 if (!res) { 922 dev_err(pcs->dev, "could not get resource\n"); 923 return -ENODEV; 924 } 925 926 pcs->res = devm_request_mem_region(pcs->dev, res->start, 927 resource_size(res), DRIVER_NAME); 928 if (!pcs->res) { 929 dev_err(pcs->dev, "could not get mem_region\n"); 930 return -EBUSY; 931 } 932 933 pcs->size = resource_size(pcs->res); 934 pcs->base = devm_ioremap(pcs->dev, pcs->res->start, pcs->size); 935 if (!pcs->base) { 936 dev_err(pcs->dev, "could not ioremap\n"); 937 return -ENODEV; 938 } 939 940 INIT_RADIX_TREE(&pcs->pgtree, GFP_KERNEL); 941 INIT_RADIX_TREE(&pcs->ftree, GFP_KERNEL); 942 platform_set_drvdata(pdev, pcs); 943 944 switch (pcs->width) { 945 case 8: 946 pcs->read = pcs_readb; 947 pcs->write = pcs_writeb; 948 break; 949 case 16: 950 pcs->read = pcs_readw; 951 pcs->write = pcs_writew; 952 break; 953 case 32: 954 pcs->read = pcs_readl; 955 pcs->write = pcs_writel; 956 break; 957 default: 958 break; 959 } 960 961 pcs->desc.name = DRIVER_NAME; 962 pcs->desc.pctlops = &pcs_pinctrl_ops; 963 pcs->desc.pmxops = &pcs_pinmux_ops; 964 pcs->desc.confops = &pcs_pinconf_ops; 965 pcs->desc.owner = THIS_MODULE; 966 967 ret = pcs_allocate_pin_table(pcs); 968 if (ret < 0) 969 goto free; 970 971 pcs->pctl = pinctrl_register(&pcs->desc, pcs->dev, pcs); 972 if (!pcs->pctl) { 973 dev_err(pcs->dev, "could not register single pinctrl driver\n"); 974 ret = -EINVAL; 975 goto free; 976 } 977 978 dev_info(pcs->dev, "%i pins at pa %p size %u\n", 979 pcs->desc.npins, pcs->base, pcs->size); 980 981 return 0; 982 983 free: 984 pcs_free_resources(pcs); 985 986 return ret; 987 } 988 989 static int pcs_remove(struct platform_device *pdev) 990 { 991 struct pcs_device *pcs = platform_get_drvdata(pdev); 992 993 if (!pcs) 994 return 0; 995 996 pcs_free_resources(pcs); 997 998 return 0; 999 } 1000 1001 static struct of_device_id pcs_of_match[] = { 1002 { .compatible = DRIVER_NAME, }, 1003 { }, 1004 }; 1005 MODULE_DEVICE_TABLE(of, pcs_of_match); 1006 1007 static struct platform_driver pcs_driver = { 1008 .probe = pcs_probe, 1009 .remove = pcs_remove, 1010 .driver = { 1011 .owner = THIS_MODULE, 1012 .name = DRIVER_NAME, 1013 .of_match_table = pcs_of_match, 1014 }, 1015 }; 1016 1017 module_platform_driver(pcs_driver); 1018 1019 MODULE_AUTHOR("Tony Lindgren <tony@atomide.com>"); 1020 MODULE_DESCRIPTION("One-register-per-pin type device tree based pinctrl driver"); 1021 MODULE_LICENSE("GPL v2"); 1022