1 /* 2 * Generic pwmlib implementation 3 * 4 * Copyright (C) 2011 Sascha Hauer <s.hauer@pengutronix.de> 5 * Copyright (C) 2011-2012 Avionic Design GmbH 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2, or (at your option) 10 * any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; see the file COPYING. If not, write to 19 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 20 */ 21 22 #include <linux/module.h> 23 #include <linux/pwm.h> 24 #include <linux/radix-tree.h> 25 #include <linux/list.h> 26 #include <linux/mutex.h> 27 #include <linux/err.h> 28 #include <linux/slab.h> 29 #include <linux/device.h> 30 #include <linux/debugfs.h> 31 #include <linux/seq_file.h> 32 33 #include <dt-bindings/pwm/pwm.h> 34 35 #define MAX_PWMS 1024 36 37 static DEFINE_MUTEX(pwm_lookup_lock); 38 static LIST_HEAD(pwm_lookup_list); 39 static DEFINE_MUTEX(pwm_lock); 40 static LIST_HEAD(pwm_chips); 41 static DECLARE_BITMAP(allocated_pwms, MAX_PWMS); 42 static RADIX_TREE(pwm_tree, GFP_KERNEL); 43 44 static struct pwm_device *pwm_to_device(unsigned int pwm) 45 { 46 return radix_tree_lookup(&pwm_tree, pwm); 47 } 48 49 static int alloc_pwms(int pwm, unsigned int count) 50 { 51 unsigned int from = 0; 52 unsigned int start; 53 54 if (pwm >= MAX_PWMS) 55 return -EINVAL; 56 57 if (pwm >= 0) 58 from = pwm; 59 60 start = bitmap_find_next_zero_area(allocated_pwms, MAX_PWMS, from, 61 count, 0); 62 63 if (pwm >= 0 && start != pwm) 64 return -EEXIST; 65 66 if (start + count > MAX_PWMS) 67 return -ENOSPC; 68 69 return start; 70 } 71 72 static void free_pwms(struct pwm_chip *chip) 73 { 74 unsigned int i; 75 76 for (i = 0; i < chip->npwm; i++) { 77 struct pwm_device *pwm = &chip->pwms[i]; 78 radix_tree_delete(&pwm_tree, pwm->pwm); 79 } 80 81 bitmap_clear(allocated_pwms, chip->base, chip->npwm); 82 83 kfree(chip->pwms); 84 chip->pwms = NULL; 85 } 86 87 static struct pwm_chip *pwmchip_find_by_name(const char *name) 88 { 89 struct pwm_chip *chip; 90 91 if (!name) 92 return NULL; 93 94 mutex_lock(&pwm_lock); 95 96 list_for_each_entry(chip, &pwm_chips, list) { 97 const char *chip_name = dev_name(chip->dev); 98 99 if (chip_name && strcmp(chip_name, name) == 0) { 100 mutex_unlock(&pwm_lock); 101 return chip; 102 } 103 } 104 105 mutex_unlock(&pwm_lock); 106 107 return NULL; 108 } 109 110 static int pwm_device_request(struct pwm_device *pwm, const char *label) 111 { 112 int err; 113 114 if (test_bit(PWMF_REQUESTED, &pwm->flags)) 115 return -EBUSY; 116 117 if (!try_module_get(pwm->chip->ops->owner)) 118 return -ENODEV; 119 120 if (pwm->chip->ops->request) { 121 err = pwm->chip->ops->request(pwm->chip, pwm); 122 if (err) { 123 module_put(pwm->chip->ops->owner); 124 return err; 125 } 126 } 127 128 set_bit(PWMF_REQUESTED, &pwm->flags); 129 pwm->label = label; 130 131 return 0; 132 } 133 134 struct pwm_device * 135 of_pwm_xlate_with_flags(struct pwm_chip *pc, const struct of_phandle_args *args) 136 { 137 struct pwm_device *pwm; 138 139 if (pc->of_pwm_n_cells < 3) 140 return ERR_PTR(-EINVAL); 141 142 if (args->args[0] >= pc->npwm) 143 return ERR_PTR(-EINVAL); 144 145 pwm = pwm_request_from_chip(pc, args->args[0], NULL); 146 if (IS_ERR(pwm)) 147 return pwm; 148 149 pwm_set_period(pwm, args->args[1]); 150 151 if (args->args[2] & PWM_POLARITY_INVERTED) 152 pwm_set_polarity(pwm, PWM_POLARITY_INVERSED); 153 else 154 pwm_set_polarity(pwm, PWM_POLARITY_NORMAL); 155 156 return pwm; 157 } 158 EXPORT_SYMBOL_GPL(of_pwm_xlate_with_flags); 159 160 static struct pwm_device * 161 of_pwm_simple_xlate(struct pwm_chip *pc, const struct of_phandle_args *args) 162 { 163 struct pwm_device *pwm; 164 165 if (pc->of_pwm_n_cells < 2) 166 return ERR_PTR(-EINVAL); 167 168 if (args->args[0] >= pc->npwm) 169 return ERR_PTR(-EINVAL); 170 171 pwm = pwm_request_from_chip(pc, args->args[0], NULL); 172 if (IS_ERR(pwm)) 173 return pwm; 174 175 pwm_set_period(pwm, args->args[1]); 176 177 return pwm; 178 } 179 180 static void of_pwmchip_add(struct pwm_chip *chip) 181 { 182 if (!chip->dev || !chip->dev->of_node) 183 return; 184 185 if (!chip->of_xlate) { 186 chip->of_xlate = of_pwm_simple_xlate; 187 chip->of_pwm_n_cells = 2; 188 } 189 190 of_node_get(chip->dev->of_node); 191 } 192 193 static void of_pwmchip_remove(struct pwm_chip *chip) 194 { 195 if (chip->dev) 196 of_node_put(chip->dev->of_node); 197 } 198 199 /** 200 * pwm_set_chip_data() - set private chip data for a PWM 201 * @pwm: PWM device 202 * @data: pointer to chip-specific data 203 * 204 * Returns: 0 on success or a negative error code on failure. 205 */ 206 int pwm_set_chip_data(struct pwm_device *pwm, void *data) 207 { 208 if (!pwm) 209 return -EINVAL; 210 211 pwm->chip_data = data; 212 213 return 0; 214 } 215 EXPORT_SYMBOL_GPL(pwm_set_chip_data); 216 217 /** 218 * pwm_get_chip_data() - get private chip data for a PWM 219 * @pwm: PWM device 220 * 221 * Returns: A pointer to the chip-private data for the PWM device. 222 */ 223 void *pwm_get_chip_data(struct pwm_device *pwm) 224 { 225 return pwm ? pwm->chip_data : NULL; 226 } 227 EXPORT_SYMBOL_GPL(pwm_get_chip_data); 228 229 /** 230 * pwmchip_add_with_polarity() - register a new PWM chip 231 * @chip: the PWM chip to add 232 * @polarity: initial polarity of PWM channels 233 * 234 * Register a new PWM chip. If chip->base < 0 then a dynamically assigned base 235 * will be used. The initial polarity for all channels is specified by the 236 * @polarity parameter. 237 * 238 * Returns: 0 on success or a negative error code on failure. 239 */ 240 int pwmchip_add_with_polarity(struct pwm_chip *chip, 241 enum pwm_polarity polarity) 242 { 243 struct pwm_device *pwm; 244 unsigned int i; 245 int ret; 246 247 if (!chip || !chip->dev || !chip->ops || !chip->ops->config || 248 !chip->ops->enable || !chip->ops->disable || !chip->npwm) 249 return -EINVAL; 250 251 mutex_lock(&pwm_lock); 252 253 ret = alloc_pwms(chip->base, chip->npwm); 254 if (ret < 0) 255 goto out; 256 257 chip->pwms = kzalloc(chip->npwm * sizeof(*pwm), GFP_KERNEL); 258 if (!chip->pwms) { 259 ret = -ENOMEM; 260 goto out; 261 } 262 263 chip->base = ret; 264 265 for (i = 0; i < chip->npwm; i++) { 266 pwm = &chip->pwms[i]; 267 268 pwm->chip = chip; 269 pwm->pwm = chip->base + i; 270 pwm->hwpwm = i; 271 pwm->polarity = polarity; 272 mutex_init(&pwm->lock); 273 274 radix_tree_insert(&pwm_tree, pwm->pwm, pwm); 275 } 276 277 bitmap_set(allocated_pwms, chip->base, chip->npwm); 278 279 INIT_LIST_HEAD(&chip->list); 280 list_add(&chip->list, &pwm_chips); 281 282 ret = 0; 283 284 if (IS_ENABLED(CONFIG_OF)) 285 of_pwmchip_add(chip); 286 287 pwmchip_sysfs_export(chip); 288 289 out: 290 mutex_unlock(&pwm_lock); 291 return ret; 292 } 293 EXPORT_SYMBOL_GPL(pwmchip_add_with_polarity); 294 295 /** 296 * pwmchip_add() - register a new PWM chip 297 * @chip: the PWM chip to add 298 * 299 * Register a new PWM chip. If chip->base < 0 then a dynamically assigned base 300 * will be used. The initial polarity for all channels is normal. 301 * 302 * Returns: 0 on success or a negative error code on failure. 303 */ 304 int pwmchip_add(struct pwm_chip *chip) 305 { 306 return pwmchip_add_with_polarity(chip, PWM_POLARITY_NORMAL); 307 } 308 EXPORT_SYMBOL_GPL(pwmchip_add); 309 310 /** 311 * pwmchip_remove() - remove a PWM chip 312 * @chip: the PWM chip to remove 313 * 314 * Removes a PWM chip. This function may return busy if the PWM chip provides 315 * a PWM device that is still requested. 316 * 317 * Returns: 0 on success or a negative error code on failure. 318 */ 319 int pwmchip_remove(struct pwm_chip *chip) 320 { 321 unsigned int i; 322 int ret = 0; 323 324 mutex_lock(&pwm_lock); 325 326 for (i = 0; i < chip->npwm; i++) { 327 struct pwm_device *pwm = &chip->pwms[i]; 328 329 if (test_bit(PWMF_REQUESTED, &pwm->flags)) { 330 ret = -EBUSY; 331 goto out; 332 } 333 } 334 335 list_del_init(&chip->list); 336 337 if (IS_ENABLED(CONFIG_OF)) 338 of_pwmchip_remove(chip); 339 340 free_pwms(chip); 341 342 pwmchip_sysfs_unexport(chip); 343 344 out: 345 mutex_unlock(&pwm_lock); 346 return ret; 347 } 348 EXPORT_SYMBOL_GPL(pwmchip_remove); 349 350 /** 351 * pwm_request() - request a PWM device 352 * @pwm: global PWM device index 353 * @label: PWM device label 354 * 355 * This function is deprecated, use pwm_get() instead. 356 * 357 * Returns: A pointer to a PWM device or an ERR_PTR()-encoded error code on 358 * failure. 359 */ 360 struct pwm_device *pwm_request(int pwm, const char *label) 361 { 362 struct pwm_device *dev; 363 int err; 364 365 if (pwm < 0 || pwm >= MAX_PWMS) 366 return ERR_PTR(-EINVAL); 367 368 mutex_lock(&pwm_lock); 369 370 dev = pwm_to_device(pwm); 371 if (!dev) { 372 dev = ERR_PTR(-EPROBE_DEFER); 373 goto out; 374 } 375 376 err = pwm_device_request(dev, label); 377 if (err < 0) 378 dev = ERR_PTR(err); 379 380 out: 381 mutex_unlock(&pwm_lock); 382 383 return dev; 384 } 385 EXPORT_SYMBOL_GPL(pwm_request); 386 387 /** 388 * pwm_request_from_chip() - request a PWM device relative to a PWM chip 389 * @chip: PWM chip 390 * @index: per-chip index of the PWM to request 391 * @label: a literal description string of this PWM 392 * 393 * Returns: A pointer to the PWM device at the given index of the given PWM 394 * chip. A negative error code is returned if the index is not valid for the 395 * specified PWM chip or if the PWM device cannot be requested. 396 */ 397 struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip, 398 unsigned int index, 399 const char *label) 400 { 401 struct pwm_device *pwm; 402 int err; 403 404 if (!chip || index >= chip->npwm) 405 return ERR_PTR(-EINVAL); 406 407 mutex_lock(&pwm_lock); 408 pwm = &chip->pwms[index]; 409 410 err = pwm_device_request(pwm, label); 411 if (err < 0) 412 pwm = ERR_PTR(err); 413 414 mutex_unlock(&pwm_lock); 415 return pwm; 416 } 417 EXPORT_SYMBOL_GPL(pwm_request_from_chip); 418 419 /** 420 * pwm_free() - free a PWM device 421 * @pwm: PWM device 422 * 423 * This function is deprecated, use pwm_put() instead. 424 */ 425 void pwm_free(struct pwm_device *pwm) 426 { 427 pwm_put(pwm); 428 } 429 EXPORT_SYMBOL_GPL(pwm_free); 430 431 /** 432 * pwm_config() - change a PWM device configuration 433 * @pwm: PWM device 434 * @duty_ns: "on" time (in nanoseconds) 435 * @period_ns: duration (in nanoseconds) of one cycle 436 * 437 * Returns: 0 on success or a negative error code on failure. 438 */ 439 int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) 440 { 441 int err; 442 443 if (!pwm || duty_ns < 0 || period_ns <= 0 || duty_ns > period_ns) 444 return -EINVAL; 445 446 err = pwm->chip->ops->config(pwm->chip, pwm, duty_ns, period_ns); 447 if (err) 448 return err; 449 450 pwm->duty_cycle = duty_ns; 451 pwm->period = period_ns; 452 453 return 0; 454 } 455 EXPORT_SYMBOL_GPL(pwm_config); 456 457 /** 458 * pwm_set_polarity() - configure the polarity of a PWM signal 459 * @pwm: PWM device 460 * @polarity: new polarity of the PWM signal 461 * 462 * Note that the polarity cannot be configured while the PWM device is 463 * enabled. 464 * 465 * Returns: 0 on success or a negative error code on failure. 466 */ 467 int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity) 468 { 469 int err; 470 471 if (!pwm || !pwm->chip->ops) 472 return -EINVAL; 473 474 if (!pwm->chip->ops->set_polarity) 475 return -ENOSYS; 476 477 mutex_lock(&pwm->lock); 478 479 if (pwm_is_enabled(pwm)) { 480 err = -EBUSY; 481 goto unlock; 482 } 483 484 err = pwm->chip->ops->set_polarity(pwm->chip, pwm, polarity); 485 if (err) 486 goto unlock; 487 488 pwm->polarity = polarity; 489 490 unlock: 491 mutex_unlock(&pwm->lock); 492 return err; 493 } 494 EXPORT_SYMBOL_GPL(pwm_set_polarity); 495 496 /** 497 * pwm_enable() - start a PWM output toggling 498 * @pwm: PWM device 499 * 500 * Returns: 0 on success or a negative error code on failure. 501 */ 502 int pwm_enable(struct pwm_device *pwm) 503 { 504 int err = 0; 505 506 if (!pwm) 507 return -EINVAL; 508 509 mutex_lock(&pwm->lock); 510 511 if (!test_and_set_bit(PWMF_ENABLED, &pwm->flags)) { 512 err = pwm->chip->ops->enable(pwm->chip, pwm); 513 if (err) 514 clear_bit(PWMF_ENABLED, &pwm->flags); 515 } 516 517 mutex_unlock(&pwm->lock); 518 519 return err; 520 } 521 EXPORT_SYMBOL_GPL(pwm_enable); 522 523 /** 524 * pwm_disable() - stop a PWM output toggling 525 * @pwm: PWM device 526 */ 527 void pwm_disable(struct pwm_device *pwm) 528 { 529 if (pwm && test_and_clear_bit(PWMF_ENABLED, &pwm->flags)) 530 pwm->chip->ops->disable(pwm->chip, pwm); 531 } 532 EXPORT_SYMBOL_GPL(pwm_disable); 533 534 static struct pwm_chip *of_node_to_pwmchip(struct device_node *np) 535 { 536 struct pwm_chip *chip; 537 538 mutex_lock(&pwm_lock); 539 540 list_for_each_entry(chip, &pwm_chips, list) 541 if (chip->dev && chip->dev->of_node == np) { 542 mutex_unlock(&pwm_lock); 543 return chip; 544 } 545 546 mutex_unlock(&pwm_lock); 547 548 return ERR_PTR(-EPROBE_DEFER); 549 } 550 551 /** 552 * of_pwm_get() - request a PWM via the PWM framework 553 * @np: device node to get the PWM from 554 * @con_id: consumer name 555 * 556 * Returns the PWM device parsed from the phandle and index specified in the 557 * "pwms" property of a device tree node or a negative error-code on failure. 558 * Values parsed from the device tree are stored in the returned PWM device 559 * object. 560 * 561 * If con_id is NULL, the first PWM device listed in the "pwms" property will 562 * be requested. Otherwise the "pwm-names" property is used to do a reverse 563 * lookup of the PWM index. This also means that the "pwm-names" property 564 * becomes mandatory for devices that look up the PWM device via the con_id 565 * parameter. 566 * 567 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 568 * error code on failure. 569 */ 570 struct pwm_device *of_pwm_get(struct device_node *np, const char *con_id) 571 { 572 struct pwm_device *pwm = NULL; 573 struct of_phandle_args args; 574 struct pwm_chip *pc; 575 int index = 0; 576 int err; 577 578 if (con_id) { 579 index = of_property_match_string(np, "pwm-names", con_id); 580 if (index < 0) 581 return ERR_PTR(index); 582 } 583 584 err = of_parse_phandle_with_args(np, "pwms", "#pwm-cells", index, 585 &args); 586 if (err) { 587 pr_debug("%s(): can't parse \"pwms\" property\n", __func__); 588 return ERR_PTR(err); 589 } 590 591 pc = of_node_to_pwmchip(args.np); 592 if (IS_ERR(pc)) { 593 pr_debug("%s(): PWM chip not found\n", __func__); 594 pwm = ERR_CAST(pc); 595 goto put; 596 } 597 598 if (args.args_count != pc->of_pwm_n_cells) { 599 pr_debug("%s: wrong #pwm-cells for %s\n", np->full_name, 600 args.np->full_name); 601 pwm = ERR_PTR(-EINVAL); 602 goto put; 603 } 604 605 pwm = pc->of_xlate(pc, &args); 606 if (IS_ERR(pwm)) 607 goto put; 608 609 /* 610 * If a consumer name was not given, try to look it up from the 611 * "pwm-names" property if it exists. Otherwise use the name of 612 * the user device node. 613 */ 614 if (!con_id) { 615 err = of_property_read_string_index(np, "pwm-names", index, 616 &con_id); 617 if (err < 0) 618 con_id = np->name; 619 } 620 621 pwm->label = con_id; 622 623 put: 624 of_node_put(args.np); 625 626 return pwm; 627 } 628 EXPORT_SYMBOL_GPL(of_pwm_get); 629 630 /** 631 * pwm_add_table() - register PWM device consumers 632 * @table: array of consumers to register 633 * @num: number of consumers in table 634 */ 635 void pwm_add_table(struct pwm_lookup *table, size_t num) 636 { 637 mutex_lock(&pwm_lookup_lock); 638 639 while (num--) { 640 list_add_tail(&table->list, &pwm_lookup_list); 641 table++; 642 } 643 644 mutex_unlock(&pwm_lookup_lock); 645 } 646 647 /** 648 * pwm_remove_table() - unregister PWM device consumers 649 * @table: array of consumers to unregister 650 * @num: number of consumers in table 651 */ 652 void pwm_remove_table(struct pwm_lookup *table, size_t num) 653 { 654 mutex_lock(&pwm_lookup_lock); 655 656 while (num--) { 657 list_del(&table->list); 658 table++; 659 } 660 661 mutex_unlock(&pwm_lookup_lock); 662 } 663 664 /** 665 * pwm_get() - look up and request a PWM device 666 * @dev: device for PWM consumer 667 * @con_id: consumer name 668 * 669 * Lookup is first attempted using DT. If the device was not instantiated from 670 * a device tree, a PWM chip and a relative index is looked up via a table 671 * supplied by board setup code (see pwm_add_table()). 672 * 673 * Once a PWM chip has been found the specified PWM device will be requested 674 * and is ready to be used. 675 * 676 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 677 * error code on failure. 678 */ 679 struct pwm_device *pwm_get(struct device *dev, const char *con_id) 680 { 681 struct pwm_device *pwm = ERR_PTR(-EPROBE_DEFER); 682 const char *dev_id = dev ? dev_name(dev) : NULL; 683 struct pwm_chip *chip = NULL; 684 unsigned int best = 0; 685 struct pwm_lookup *p, *chosen = NULL; 686 unsigned int match; 687 688 /* look up via DT first */ 689 if (IS_ENABLED(CONFIG_OF) && dev && dev->of_node) 690 return of_pwm_get(dev->of_node, con_id); 691 692 /* 693 * We look up the provider in the static table typically provided by 694 * board setup code. We first try to lookup the consumer device by 695 * name. If the consumer device was passed in as NULL or if no match 696 * was found, we try to find the consumer by directly looking it up 697 * by name. 698 * 699 * If a match is found, the provider PWM chip is looked up by name 700 * and a PWM device is requested using the PWM device per-chip index. 701 * 702 * The lookup algorithm was shamelessly taken from the clock 703 * framework: 704 * 705 * We do slightly fuzzy matching here: 706 * An entry with a NULL ID is assumed to be a wildcard. 707 * If an entry has a device ID, it must match 708 * If an entry has a connection ID, it must match 709 * Then we take the most specific entry - with the following order 710 * of precedence: dev+con > dev only > con only. 711 */ 712 mutex_lock(&pwm_lookup_lock); 713 714 list_for_each_entry(p, &pwm_lookup_list, list) { 715 match = 0; 716 717 if (p->dev_id) { 718 if (!dev_id || strcmp(p->dev_id, dev_id)) 719 continue; 720 721 match += 2; 722 } 723 724 if (p->con_id) { 725 if (!con_id || strcmp(p->con_id, con_id)) 726 continue; 727 728 match += 1; 729 } 730 731 if (match > best) { 732 chosen = p; 733 734 if (match != 3) 735 best = match; 736 else 737 break; 738 } 739 } 740 741 if (!chosen) { 742 pwm = ERR_PTR(-ENODEV); 743 goto out; 744 } 745 746 chip = pwmchip_find_by_name(chosen->provider); 747 if (!chip) 748 goto out; 749 750 pwm = pwm_request_from_chip(chip, chosen->index, con_id ?: dev_id); 751 if (IS_ERR(pwm)) 752 goto out; 753 754 pwm_set_period(pwm, chosen->period); 755 pwm_set_polarity(pwm, chosen->polarity); 756 757 out: 758 mutex_unlock(&pwm_lookup_lock); 759 return pwm; 760 } 761 EXPORT_SYMBOL_GPL(pwm_get); 762 763 /** 764 * pwm_put() - release a PWM device 765 * @pwm: PWM device 766 */ 767 void pwm_put(struct pwm_device *pwm) 768 { 769 if (!pwm) 770 return; 771 772 mutex_lock(&pwm_lock); 773 774 if (!test_and_clear_bit(PWMF_REQUESTED, &pwm->flags)) { 775 pr_warn("PWM device already freed\n"); 776 goto out; 777 } 778 779 if (pwm->chip->ops->free) 780 pwm->chip->ops->free(pwm->chip, pwm); 781 782 pwm->label = NULL; 783 784 module_put(pwm->chip->ops->owner); 785 out: 786 mutex_unlock(&pwm_lock); 787 } 788 EXPORT_SYMBOL_GPL(pwm_put); 789 790 static void devm_pwm_release(struct device *dev, void *res) 791 { 792 pwm_put(*(struct pwm_device **)res); 793 } 794 795 /** 796 * devm_pwm_get() - resource managed pwm_get() 797 * @dev: device for PWM consumer 798 * @con_id: consumer name 799 * 800 * This function performs like pwm_get() but the acquired PWM device will 801 * automatically be released on driver detach. 802 * 803 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 804 * error code on failure. 805 */ 806 struct pwm_device *devm_pwm_get(struct device *dev, const char *con_id) 807 { 808 struct pwm_device **ptr, *pwm; 809 810 ptr = devres_alloc(devm_pwm_release, sizeof(*ptr), GFP_KERNEL); 811 if (!ptr) 812 return ERR_PTR(-ENOMEM); 813 814 pwm = pwm_get(dev, con_id); 815 if (!IS_ERR(pwm)) { 816 *ptr = pwm; 817 devres_add(dev, ptr); 818 } else { 819 devres_free(ptr); 820 } 821 822 return pwm; 823 } 824 EXPORT_SYMBOL_GPL(devm_pwm_get); 825 826 /** 827 * devm_of_pwm_get() - resource managed of_pwm_get() 828 * @dev: device for PWM consumer 829 * @np: device node to get the PWM from 830 * @con_id: consumer name 831 * 832 * This function performs like of_pwm_get() but the acquired PWM device will 833 * automatically be released on driver detach. 834 * 835 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 836 * error code on failure. 837 */ 838 struct pwm_device *devm_of_pwm_get(struct device *dev, struct device_node *np, 839 const char *con_id) 840 { 841 struct pwm_device **ptr, *pwm; 842 843 ptr = devres_alloc(devm_pwm_release, sizeof(*ptr), GFP_KERNEL); 844 if (!ptr) 845 return ERR_PTR(-ENOMEM); 846 847 pwm = of_pwm_get(np, con_id); 848 if (!IS_ERR(pwm)) { 849 *ptr = pwm; 850 devres_add(dev, ptr); 851 } else { 852 devres_free(ptr); 853 } 854 855 return pwm; 856 } 857 EXPORT_SYMBOL_GPL(devm_of_pwm_get); 858 859 static int devm_pwm_match(struct device *dev, void *res, void *data) 860 { 861 struct pwm_device **p = res; 862 863 if (WARN_ON(!p || !*p)) 864 return 0; 865 866 return *p == data; 867 } 868 869 /** 870 * devm_pwm_put() - resource managed pwm_put() 871 * @dev: device for PWM consumer 872 * @pwm: PWM device 873 * 874 * Release a PWM previously allocated using devm_pwm_get(). Calling this 875 * function is usually not needed because devm-allocated resources are 876 * automatically released on driver detach. 877 */ 878 void devm_pwm_put(struct device *dev, struct pwm_device *pwm) 879 { 880 WARN_ON(devres_release(dev, devm_pwm_release, devm_pwm_match, pwm)); 881 } 882 EXPORT_SYMBOL_GPL(devm_pwm_put); 883 884 /** 885 * pwm_can_sleep() - report whether PWM access will sleep 886 * @pwm: PWM device 887 * 888 * Returns: True if accessing the PWM can sleep, false otherwise. 889 */ 890 bool pwm_can_sleep(struct pwm_device *pwm) 891 { 892 return pwm->chip->can_sleep; 893 } 894 EXPORT_SYMBOL_GPL(pwm_can_sleep); 895 896 #ifdef CONFIG_DEBUG_FS 897 static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s) 898 { 899 unsigned int i; 900 901 for (i = 0; i < chip->npwm; i++) { 902 struct pwm_device *pwm = &chip->pwms[i]; 903 904 seq_printf(s, " pwm-%-3d (%-20.20s):", i, pwm->label); 905 906 if (test_bit(PWMF_REQUESTED, &pwm->flags)) 907 seq_puts(s, " requested"); 908 909 if (pwm_is_enabled(pwm)) 910 seq_puts(s, " enabled"); 911 912 seq_puts(s, "\n"); 913 } 914 } 915 916 static void *pwm_seq_start(struct seq_file *s, loff_t *pos) 917 { 918 mutex_lock(&pwm_lock); 919 s->private = ""; 920 921 return seq_list_start(&pwm_chips, *pos); 922 } 923 924 static void *pwm_seq_next(struct seq_file *s, void *v, loff_t *pos) 925 { 926 s->private = "\n"; 927 928 return seq_list_next(v, &pwm_chips, pos); 929 } 930 931 static void pwm_seq_stop(struct seq_file *s, void *v) 932 { 933 mutex_unlock(&pwm_lock); 934 } 935 936 static int pwm_seq_show(struct seq_file *s, void *v) 937 { 938 struct pwm_chip *chip = list_entry(v, struct pwm_chip, list); 939 940 seq_printf(s, "%s%s/%s, %d PWM device%s\n", (char *)s->private, 941 chip->dev->bus ? chip->dev->bus->name : "no-bus", 942 dev_name(chip->dev), chip->npwm, 943 (chip->npwm != 1) ? "s" : ""); 944 945 if (chip->ops->dbg_show) 946 chip->ops->dbg_show(chip, s); 947 else 948 pwm_dbg_show(chip, s); 949 950 return 0; 951 } 952 953 static const struct seq_operations pwm_seq_ops = { 954 .start = pwm_seq_start, 955 .next = pwm_seq_next, 956 .stop = pwm_seq_stop, 957 .show = pwm_seq_show, 958 }; 959 960 static int pwm_seq_open(struct inode *inode, struct file *file) 961 { 962 return seq_open(file, &pwm_seq_ops); 963 } 964 965 static const struct file_operations pwm_debugfs_ops = { 966 .owner = THIS_MODULE, 967 .open = pwm_seq_open, 968 .read = seq_read, 969 .llseek = seq_lseek, 970 .release = seq_release, 971 }; 972 973 static int __init pwm_debugfs_init(void) 974 { 975 debugfs_create_file("pwm", S_IFREG | S_IRUGO, NULL, NULL, 976 &pwm_debugfs_ops); 977 978 return 0; 979 } 980 subsys_initcall(pwm_debugfs_init); 981 #endif /* CONFIG_DEBUG_FS */ 982