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