1 /* 2 * Core driver for the pin muxing portions of the pin control subsystem 3 * 4 * Copyright (C) 2011-2012 ST-Ericsson SA 5 * Written on behalf of Linaro for ST-Ericsson 6 * Based on bits of regulator core, gpio core and clk core 7 * 8 * Author: Linus Walleij <linus.walleij@linaro.org> 9 * 10 * Copyright (C) 2012 NVIDIA CORPORATION. All rights reserved. 11 * 12 * License terms: GNU General Public License (GPL) version 2 13 */ 14 #define pr_fmt(fmt) "pinmux core: " fmt 15 16 #include <linux/kernel.h> 17 #include <linux/module.h> 18 #include <linux/init.h> 19 #include <linux/device.h> 20 #include <linux/slab.h> 21 #include <linux/radix-tree.h> 22 #include <linux/err.h> 23 #include <linux/list.h> 24 #include <linux/string.h> 25 #include <linux/sysfs.h> 26 #include <linux/debugfs.h> 27 #include <linux/seq_file.h> 28 #include <linux/pinctrl/machine.h> 29 #include <linux/pinctrl/pinmux.h> 30 #include "core.h" 31 #include "pinmux.h" 32 33 int pinmux_check_ops(struct pinctrl_dev *pctldev) 34 { 35 const struct pinmux_ops *ops = pctldev->desc->pmxops; 36 unsigned nfuncs; 37 unsigned selector = 0; 38 39 /* Check that we implement required operations */ 40 if (!ops || 41 !ops->get_functions_count || 42 !ops->get_function_name || 43 !ops->get_function_groups || 44 !ops->set_mux) { 45 dev_err(pctldev->dev, "pinmux ops lacks necessary functions\n"); 46 return -EINVAL; 47 } 48 /* Check that all functions registered have names */ 49 nfuncs = ops->get_functions_count(pctldev); 50 while (selector < nfuncs) { 51 const char *fname = ops->get_function_name(pctldev, 52 selector); 53 if (!fname) { 54 dev_err(pctldev->dev, "pinmux ops has no name for function%u\n", 55 selector); 56 return -EINVAL; 57 } 58 selector++; 59 } 60 61 return 0; 62 } 63 64 int pinmux_validate_map(struct pinctrl_map const *map, int i) 65 { 66 if (!map->data.mux.function) { 67 pr_err("failed to register map %s (%d): no function given\n", 68 map->name, i); 69 return -EINVAL; 70 } 71 72 return 0; 73 } 74 75 /** 76 * pin_request() - request a single pin to be muxed in, typically for GPIO 77 * @pin: the pin number in the global pin space 78 * @owner: a representation of the owner of this pin; typically the device 79 * name that controls its mux function, or the requested GPIO name 80 * @gpio_range: the range matching the GPIO pin if this is a request for a 81 * single GPIO pin 82 */ 83 static int pin_request(struct pinctrl_dev *pctldev, 84 int pin, const char *owner, 85 struct pinctrl_gpio_range *gpio_range) 86 { 87 struct pin_desc *desc; 88 const struct pinmux_ops *ops = pctldev->desc->pmxops; 89 int status = -EINVAL; 90 91 desc = pin_desc_get(pctldev, pin); 92 if (desc == NULL) { 93 dev_err(pctldev->dev, 94 "pin %d is not registered so it cannot be requested\n", 95 pin); 96 goto out; 97 } 98 99 dev_dbg(pctldev->dev, "request pin %d (%s) for %s\n", 100 pin, desc->name, owner); 101 102 if ((!gpio_range || ops->strict) && 103 desc->mux_usecount && strcmp(desc->mux_owner, owner)) { 104 dev_err(pctldev->dev, 105 "pin %s already requested by %s; cannot claim for %s\n", 106 desc->name, desc->mux_owner, owner); 107 goto out; 108 } 109 110 if ((gpio_range || ops->strict) && desc->gpio_owner) { 111 dev_err(pctldev->dev, 112 "pin %s already requested by %s; cannot claim for %s\n", 113 desc->name, desc->gpio_owner, owner); 114 goto out; 115 } 116 117 if (gpio_range) { 118 desc->gpio_owner = owner; 119 } else { 120 desc->mux_usecount++; 121 if (desc->mux_usecount > 1) 122 return 0; 123 124 desc->mux_owner = owner; 125 } 126 127 /* Let each pin increase references to this module */ 128 if (!try_module_get(pctldev->owner)) { 129 dev_err(pctldev->dev, 130 "could not increase module refcount for pin %d\n", 131 pin); 132 status = -EINVAL; 133 goto out_free_pin; 134 } 135 136 /* 137 * If there is no kind of request function for the pin we just assume 138 * we got it by default and proceed. 139 */ 140 if (gpio_range && ops->gpio_request_enable) 141 /* This requests and enables a single GPIO pin */ 142 status = ops->gpio_request_enable(pctldev, gpio_range, pin); 143 else if (ops->request) 144 status = ops->request(pctldev, pin); 145 else 146 status = 0; 147 148 if (status) { 149 dev_err(pctldev->dev, "request() failed for pin %d\n", pin); 150 module_put(pctldev->owner); 151 } 152 153 out_free_pin: 154 if (status) { 155 if (gpio_range) { 156 desc->gpio_owner = NULL; 157 } else { 158 desc->mux_usecount--; 159 if (!desc->mux_usecount) 160 desc->mux_owner = NULL; 161 } 162 } 163 out: 164 if (status) 165 dev_err(pctldev->dev, "pin-%d (%s) status %d\n", 166 pin, owner, status); 167 168 return status; 169 } 170 171 /** 172 * pin_free() - release a single muxed in pin so something else can be muxed 173 * @pctldev: pin controller device handling this pin 174 * @pin: the pin to free 175 * @gpio_range: the range matching the GPIO pin if this is a request for a 176 * single GPIO pin 177 * 178 * This function returns a pointer to the previous owner. This is used 179 * for callers that dynamically allocate an owner name so it can be freed 180 * once the pin is free. This is done for GPIO request functions. 181 */ 182 static const char *pin_free(struct pinctrl_dev *pctldev, int pin, 183 struct pinctrl_gpio_range *gpio_range) 184 { 185 const struct pinmux_ops *ops = pctldev->desc->pmxops; 186 struct pin_desc *desc; 187 const char *owner; 188 189 desc = pin_desc_get(pctldev, pin); 190 if (desc == NULL) { 191 dev_err(pctldev->dev, 192 "pin is not registered so it cannot be freed\n"); 193 return NULL; 194 } 195 196 if (!gpio_range) { 197 /* 198 * A pin should not be freed more times than allocated. 199 */ 200 if (WARN_ON(!desc->mux_usecount)) 201 return NULL; 202 desc->mux_usecount--; 203 if (desc->mux_usecount) 204 return NULL; 205 } 206 207 /* 208 * If there is no kind of request function for the pin we just assume 209 * we got it by default and proceed. 210 */ 211 if (gpio_range && ops->gpio_disable_free) 212 ops->gpio_disable_free(pctldev, gpio_range, pin); 213 else if (ops->free) 214 ops->free(pctldev, pin); 215 216 if (gpio_range) { 217 owner = desc->gpio_owner; 218 desc->gpio_owner = NULL; 219 } else { 220 owner = desc->mux_owner; 221 desc->mux_owner = NULL; 222 desc->mux_setting = NULL; 223 } 224 225 module_put(pctldev->owner); 226 227 return owner; 228 } 229 230 /** 231 * pinmux_request_gpio() - request pinmuxing for a GPIO pin 232 * @pctldev: pin controller device affected 233 * @pin: the pin to mux in for GPIO 234 * @range: the applicable GPIO range 235 */ 236 int pinmux_request_gpio(struct pinctrl_dev *pctldev, 237 struct pinctrl_gpio_range *range, 238 unsigned pin, unsigned gpio) 239 { 240 const char *owner; 241 int ret; 242 243 /* Conjure some name stating what chip and pin this is taken by */ 244 owner = kasprintf(GFP_KERNEL, "%s:%d", range->name, gpio); 245 if (!owner) 246 return -ENOMEM; 247 248 ret = pin_request(pctldev, pin, owner, range); 249 if (ret < 0) 250 kfree(owner); 251 252 return ret; 253 } 254 255 /** 256 * pinmux_free_gpio() - release a pin from GPIO muxing 257 * @pctldev: the pin controller device for the pin 258 * @pin: the affected currently GPIO-muxed in pin 259 * @range: applicable GPIO range 260 */ 261 void pinmux_free_gpio(struct pinctrl_dev *pctldev, unsigned pin, 262 struct pinctrl_gpio_range *range) 263 { 264 const char *owner; 265 266 owner = pin_free(pctldev, pin, range); 267 kfree(owner); 268 } 269 270 /** 271 * pinmux_gpio_direction() - set the direction of a single muxed-in GPIO pin 272 * @pctldev: the pin controller handling this pin 273 * @range: applicable GPIO range 274 * @pin: the affected GPIO pin in this controller 275 * @input: true if we set the pin as input, false for output 276 */ 277 int pinmux_gpio_direction(struct pinctrl_dev *pctldev, 278 struct pinctrl_gpio_range *range, 279 unsigned pin, bool input) 280 { 281 const struct pinmux_ops *ops; 282 int ret; 283 284 ops = pctldev->desc->pmxops; 285 286 if (ops->gpio_set_direction) 287 ret = ops->gpio_set_direction(pctldev, range, pin, input); 288 else 289 ret = 0; 290 291 return ret; 292 } 293 294 static int pinmux_func_name_to_selector(struct pinctrl_dev *pctldev, 295 const char *function) 296 { 297 const struct pinmux_ops *ops = pctldev->desc->pmxops; 298 unsigned nfuncs = ops->get_functions_count(pctldev); 299 unsigned selector = 0; 300 301 /* See if this pctldev has this function */ 302 while (selector < nfuncs) { 303 const char *fname = ops->get_function_name(pctldev, selector); 304 305 if (!strcmp(function, fname)) 306 return selector; 307 308 selector++; 309 } 310 311 dev_err(pctldev->dev, "function '%s' not supported\n", function); 312 return -EINVAL; 313 } 314 315 int pinmux_map_to_setting(struct pinctrl_map const *map, 316 struct pinctrl_setting *setting) 317 { 318 struct pinctrl_dev *pctldev = setting->pctldev; 319 const struct pinmux_ops *pmxops = pctldev->desc->pmxops; 320 char const * const *groups; 321 unsigned num_groups; 322 int ret; 323 const char *group; 324 325 if (!pmxops) { 326 dev_err(pctldev->dev, "does not support mux function\n"); 327 return -EINVAL; 328 } 329 330 ret = pinmux_func_name_to_selector(pctldev, map->data.mux.function); 331 if (ret < 0) { 332 dev_err(pctldev->dev, "invalid function %s in map table\n", 333 map->data.mux.function); 334 return ret; 335 } 336 setting->data.mux.func = ret; 337 338 ret = pmxops->get_function_groups(pctldev, setting->data.mux.func, 339 &groups, &num_groups); 340 if (ret < 0) { 341 dev_err(pctldev->dev, "can't query groups for function %s\n", 342 map->data.mux.function); 343 return ret; 344 } 345 if (!num_groups) { 346 dev_err(pctldev->dev, 347 "function %s can't be selected on any group\n", 348 map->data.mux.function); 349 return -EINVAL; 350 } 351 if (map->data.mux.group) { 352 group = map->data.mux.group; 353 ret = match_string(groups, num_groups, group); 354 if (ret < 0) { 355 dev_err(pctldev->dev, 356 "invalid group \"%s\" for function \"%s\"\n", 357 group, map->data.mux.function); 358 return ret; 359 } 360 } else { 361 group = groups[0]; 362 } 363 364 ret = pinctrl_get_group_selector(pctldev, group); 365 if (ret < 0) { 366 dev_err(pctldev->dev, "invalid group %s in map table\n", 367 map->data.mux.group); 368 return ret; 369 } 370 setting->data.mux.group = ret; 371 372 return 0; 373 } 374 375 void pinmux_free_setting(struct pinctrl_setting const *setting) 376 { 377 /* This function is currently unused */ 378 } 379 380 int pinmux_enable_setting(struct pinctrl_setting const *setting) 381 { 382 struct pinctrl_dev *pctldev = setting->pctldev; 383 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; 384 const struct pinmux_ops *ops = pctldev->desc->pmxops; 385 int ret = 0; 386 const unsigned *pins = NULL; 387 unsigned num_pins = 0; 388 int i; 389 struct pin_desc *desc; 390 391 if (pctlops->get_group_pins) 392 ret = pctlops->get_group_pins(pctldev, setting->data.mux.group, 393 &pins, &num_pins); 394 395 if (ret) { 396 const char *gname; 397 398 /* errors only affect debug data, so just warn */ 399 gname = pctlops->get_group_name(pctldev, 400 setting->data.mux.group); 401 dev_warn(pctldev->dev, 402 "could not get pins for group %s\n", 403 gname); 404 num_pins = 0; 405 } 406 407 /* Try to allocate all pins in this group, one by one */ 408 for (i = 0; i < num_pins; i++) { 409 ret = pin_request(pctldev, pins[i], setting->dev_name, NULL); 410 if (ret) { 411 const char *gname; 412 const char *pname; 413 414 desc = pin_desc_get(pctldev, pins[i]); 415 pname = desc ? desc->name : "non-existing"; 416 gname = pctlops->get_group_name(pctldev, 417 setting->data.mux.group); 418 dev_err(pctldev->dev, 419 "could not request pin %d (%s) from group %s " 420 " on device %s\n", 421 pins[i], pname, gname, 422 pinctrl_dev_get_name(pctldev)); 423 goto err_pin_request; 424 } 425 } 426 427 /* Now that we have acquired the pins, encode the mux setting */ 428 for (i = 0; i < num_pins; i++) { 429 desc = pin_desc_get(pctldev, pins[i]); 430 if (desc == NULL) { 431 dev_warn(pctldev->dev, 432 "could not get pin desc for pin %d\n", 433 pins[i]); 434 continue; 435 } 436 desc->mux_setting = &(setting->data.mux); 437 } 438 439 ret = ops->set_mux(pctldev, setting->data.mux.func, 440 setting->data.mux.group); 441 442 if (ret) 443 goto err_set_mux; 444 445 return 0; 446 447 err_set_mux: 448 for (i = 0; i < num_pins; i++) { 449 desc = pin_desc_get(pctldev, pins[i]); 450 if (desc) 451 desc->mux_setting = NULL; 452 } 453 err_pin_request: 454 /* On error release all taken pins */ 455 while (--i >= 0) 456 pin_free(pctldev, pins[i], NULL); 457 458 return ret; 459 } 460 461 void pinmux_disable_setting(struct pinctrl_setting const *setting) 462 { 463 struct pinctrl_dev *pctldev = setting->pctldev; 464 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; 465 int ret = 0; 466 const unsigned *pins = NULL; 467 unsigned num_pins = 0; 468 int i; 469 struct pin_desc *desc; 470 471 if (pctlops->get_group_pins) 472 ret = pctlops->get_group_pins(pctldev, setting->data.mux.group, 473 &pins, &num_pins); 474 if (ret) { 475 const char *gname; 476 477 /* errors only affect debug data, so just warn */ 478 gname = pctlops->get_group_name(pctldev, 479 setting->data.mux.group); 480 dev_warn(pctldev->dev, 481 "could not get pins for group %s\n", 482 gname); 483 num_pins = 0; 484 } 485 486 /* Flag the descs that no setting is active */ 487 for (i = 0; i < num_pins; i++) { 488 desc = pin_desc_get(pctldev, pins[i]); 489 if (desc == NULL) { 490 dev_warn(pctldev->dev, 491 "could not get pin desc for pin %d\n", 492 pins[i]); 493 continue; 494 } 495 if (desc->mux_setting == &(setting->data.mux)) { 496 desc->mux_setting = NULL; 497 /* And release the pin */ 498 pin_free(pctldev, pins[i], NULL); 499 } else { 500 const char *gname; 501 502 gname = pctlops->get_group_name(pctldev, 503 setting->data.mux.group); 504 dev_warn(pctldev->dev, 505 "not freeing pin %d (%s) as part of " 506 "deactivating group %s - it is already " 507 "used for some other setting", 508 pins[i], desc->name, gname); 509 } 510 } 511 } 512 513 #ifdef CONFIG_DEBUG_FS 514 515 /* Called from pincontrol core */ 516 static int pinmux_functions_show(struct seq_file *s, void *what) 517 { 518 struct pinctrl_dev *pctldev = s->private; 519 const struct pinmux_ops *pmxops = pctldev->desc->pmxops; 520 unsigned nfuncs; 521 unsigned func_selector = 0; 522 523 if (!pmxops) 524 return 0; 525 526 mutex_lock(&pctldev->mutex); 527 nfuncs = pmxops->get_functions_count(pctldev); 528 while (func_selector < nfuncs) { 529 const char *func = pmxops->get_function_name(pctldev, 530 func_selector); 531 const char * const *groups; 532 unsigned num_groups; 533 int ret; 534 int i; 535 536 ret = pmxops->get_function_groups(pctldev, func_selector, 537 &groups, &num_groups); 538 if (ret) { 539 seq_printf(s, "function %s: COULD NOT GET GROUPS\n", 540 func); 541 func_selector++; 542 continue; 543 } 544 545 seq_printf(s, "function: %s, groups = [ ", func); 546 for (i = 0; i < num_groups; i++) 547 seq_printf(s, "%s ", groups[i]); 548 seq_puts(s, "]\n"); 549 550 func_selector++; 551 } 552 553 mutex_unlock(&pctldev->mutex); 554 555 return 0; 556 } 557 558 static int pinmux_pins_show(struct seq_file *s, void *what) 559 { 560 struct pinctrl_dev *pctldev = s->private; 561 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; 562 const struct pinmux_ops *pmxops = pctldev->desc->pmxops; 563 unsigned i, pin; 564 565 if (!pmxops) 566 return 0; 567 568 seq_puts(s, "Pinmux settings per pin\n"); 569 if (pmxops->strict) 570 seq_puts(s, 571 "Format: pin (name): mux_owner|gpio_owner (strict) hog?\n"); 572 else 573 seq_puts(s, 574 "Format: pin (name): mux_owner gpio_owner hog?\n"); 575 576 mutex_lock(&pctldev->mutex); 577 578 /* The pin number can be retrived from the pin controller descriptor */ 579 for (i = 0; i < pctldev->desc->npins; i++) { 580 struct pin_desc *desc; 581 bool is_hog = false; 582 583 pin = pctldev->desc->pins[i].number; 584 desc = pin_desc_get(pctldev, pin); 585 /* Skip if we cannot search the pin */ 586 if (desc == NULL) 587 continue; 588 589 if (desc->mux_owner && 590 !strcmp(desc->mux_owner, pinctrl_dev_get_name(pctldev))) 591 is_hog = true; 592 593 if (pmxops->strict) { 594 if (desc->mux_owner) 595 seq_printf(s, "pin %d (%s): device %s%s", 596 pin, desc->name, desc->mux_owner, 597 is_hog ? " (HOG)" : ""); 598 else if (desc->gpio_owner) 599 seq_printf(s, "pin %d (%s): GPIO %s", 600 pin, desc->name, desc->gpio_owner); 601 else 602 seq_printf(s, "pin %d (%s): UNCLAIMED", 603 pin, desc->name); 604 } else { 605 /* For non-strict controllers */ 606 seq_printf(s, "pin %d (%s): %s %s%s", pin, desc->name, 607 desc->mux_owner ? desc->mux_owner 608 : "(MUX UNCLAIMED)", 609 desc->gpio_owner ? desc->gpio_owner 610 : "(GPIO UNCLAIMED)", 611 is_hog ? " (HOG)" : ""); 612 } 613 614 /* If mux: print function+group claiming the pin */ 615 if (desc->mux_setting) 616 seq_printf(s, " function %s group %s\n", 617 pmxops->get_function_name(pctldev, 618 desc->mux_setting->func), 619 pctlops->get_group_name(pctldev, 620 desc->mux_setting->group)); 621 else 622 seq_printf(s, "\n"); 623 } 624 625 mutex_unlock(&pctldev->mutex); 626 627 return 0; 628 } 629 630 void pinmux_show_map(struct seq_file *s, struct pinctrl_map const *map) 631 { 632 seq_printf(s, "group %s\nfunction %s\n", 633 map->data.mux.group ? map->data.mux.group : "(default)", 634 map->data.mux.function); 635 } 636 637 void pinmux_show_setting(struct seq_file *s, 638 struct pinctrl_setting const *setting) 639 { 640 struct pinctrl_dev *pctldev = setting->pctldev; 641 const struct pinmux_ops *pmxops = pctldev->desc->pmxops; 642 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops; 643 644 seq_printf(s, "group: %s (%u) function: %s (%u)\n", 645 pctlops->get_group_name(pctldev, setting->data.mux.group), 646 setting->data.mux.group, 647 pmxops->get_function_name(pctldev, setting->data.mux.func), 648 setting->data.mux.func); 649 } 650 651 static int pinmux_functions_open(struct inode *inode, struct file *file) 652 { 653 return single_open(file, pinmux_functions_show, inode->i_private); 654 } 655 656 static int pinmux_pins_open(struct inode *inode, struct file *file) 657 { 658 return single_open(file, pinmux_pins_show, inode->i_private); 659 } 660 661 static const struct file_operations pinmux_functions_ops = { 662 .open = pinmux_functions_open, 663 .read = seq_read, 664 .llseek = seq_lseek, 665 .release = single_release, 666 }; 667 668 static const struct file_operations pinmux_pins_ops = { 669 .open = pinmux_pins_open, 670 .read = seq_read, 671 .llseek = seq_lseek, 672 .release = single_release, 673 }; 674 675 void pinmux_init_device_debugfs(struct dentry *devroot, 676 struct pinctrl_dev *pctldev) 677 { 678 debugfs_create_file("pinmux-functions", S_IFREG | S_IRUGO, 679 devroot, pctldev, &pinmux_functions_ops); 680 debugfs_create_file("pinmux-pins", S_IFREG | S_IRUGO, 681 devroot, pctldev, &pinmux_pins_ops); 682 } 683 684 #endif /* CONFIG_DEBUG_FS */ 685 686 #ifdef CONFIG_GENERIC_PINMUX_FUNCTIONS 687 688 /** 689 * pinmux_generic_get_function_count() - returns number of functions 690 * @pctldev: pin controller device 691 */ 692 int pinmux_generic_get_function_count(struct pinctrl_dev *pctldev) 693 { 694 return pctldev->num_functions; 695 } 696 EXPORT_SYMBOL_GPL(pinmux_generic_get_function_count); 697 698 /** 699 * pinmux_generic_get_function_name() - returns the function name 700 * @pctldev: pin controller device 701 * @selector: function number 702 */ 703 const char * 704 pinmux_generic_get_function_name(struct pinctrl_dev *pctldev, 705 unsigned int selector) 706 { 707 struct function_desc *function; 708 709 function = radix_tree_lookup(&pctldev->pin_function_tree, 710 selector); 711 if (!function) 712 return NULL; 713 714 return function->name; 715 } 716 EXPORT_SYMBOL_GPL(pinmux_generic_get_function_name); 717 718 /** 719 * pinmux_generic_get_function_groups() - gets the function groups 720 * @pctldev: pin controller device 721 * @selector: function number 722 * @groups: array of pin groups 723 * @num_groups: number of pin groups 724 */ 725 int pinmux_generic_get_function_groups(struct pinctrl_dev *pctldev, 726 unsigned int selector, 727 const char * const **groups, 728 unsigned * const num_groups) 729 { 730 struct function_desc *function; 731 732 function = radix_tree_lookup(&pctldev->pin_function_tree, 733 selector); 734 if (!function) { 735 dev_err(pctldev->dev, "%s could not find function%i\n", 736 __func__, selector); 737 return -EINVAL; 738 } 739 *groups = function->group_names; 740 *num_groups = function->num_group_names; 741 742 return 0; 743 } 744 EXPORT_SYMBOL_GPL(pinmux_generic_get_function_groups); 745 746 /** 747 * pinmux_generic_get_function() - returns a function based on the number 748 * @pctldev: pin controller device 749 * @group_selector: function number 750 */ 751 struct function_desc *pinmux_generic_get_function(struct pinctrl_dev *pctldev, 752 unsigned int selector) 753 { 754 struct function_desc *function; 755 756 function = radix_tree_lookup(&pctldev->pin_function_tree, 757 selector); 758 if (!function) 759 return NULL; 760 761 return function; 762 } 763 EXPORT_SYMBOL_GPL(pinmux_generic_get_function); 764 765 /** 766 * pinmux_generic_add_function() - adds a function group 767 * @pctldev: pin controller device 768 * @name: name of the function 769 * @groups: array of pin groups 770 * @num_groups: number of pin groups 771 * @data: pin controller driver specific data 772 */ 773 int pinmux_generic_add_function(struct pinctrl_dev *pctldev, 774 const char *name, 775 const char **groups, 776 const unsigned int num_groups, 777 void *data) 778 { 779 struct function_desc *function; 780 781 function = devm_kzalloc(pctldev->dev, sizeof(*function), GFP_KERNEL); 782 if (!function) 783 return -ENOMEM; 784 785 function->name = name; 786 function->group_names = groups; 787 function->num_group_names = num_groups; 788 function->data = data; 789 790 radix_tree_insert(&pctldev->pin_function_tree, pctldev->num_functions, 791 function); 792 793 pctldev->num_functions++; 794 795 return 0; 796 } 797 EXPORT_SYMBOL_GPL(pinmux_generic_add_function); 798 799 /** 800 * pinmux_generic_remove_function() - removes a numbered function 801 * @pctldev: pin controller device 802 * @selector: function number 803 * 804 * Note that the caller must take care of locking. 805 */ 806 int pinmux_generic_remove_function(struct pinctrl_dev *pctldev, 807 unsigned int selector) 808 { 809 struct function_desc *function; 810 811 function = radix_tree_lookup(&pctldev->pin_function_tree, 812 selector); 813 if (!function) 814 return -ENOENT; 815 816 radix_tree_delete(&pctldev->pin_function_tree, selector); 817 devm_kfree(pctldev->dev, function); 818 819 pctldev->num_functions--; 820 821 return 0; 822 } 823 EXPORT_SYMBOL_GPL(pinmux_generic_remove_function); 824 825 /** 826 * pinmux_generic_free_functions() - removes all functions 827 * @pctldev: pin controller device 828 * 829 * Note that the caller must take care of locking. 830 */ 831 void pinmux_generic_free_functions(struct pinctrl_dev *pctldev) 832 { 833 struct radix_tree_iter iter; 834 struct function_desc *function; 835 unsigned long *indices; 836 void **slot; 837 int i = 0; 838 839 indices = devm_kzalloc(pctldev->dev, sizeof(*indices) * 840 pctldev->num_functions, GFP_KERNEL); 841 if (!indices) 842 return; 843 844 radix_tree_for_each_slot(slot, &pctldev->pin_function_tree, &iter, 0) 845 indices[i++] = iter.index; 846 847 for (i = 0; i < pctldev->num_functions; i++) { 848 function = radix_tree_lookup(&pctldev->pin_function_tree, 849 indices[i]); 850 radix_tree_delete(&pctldev->pin_function_tree, indices[i]); 851 devm_kfree(pctldev->dev, function); 852 } 853 854 pctldev->num_functions = 0; 855 } 856 857 #endif /* CONFIG_GENERIC_PINMUX_FUNCTIONS */ 858