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