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