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 int pwm_set_chip_data(struct pwm_device *pwm, void *data) 205 { 206 if (!pwm) 207 return -EINVAL; 208 209 pwm->chip_data = data; 210 211 return 0; 212 } 213 EXPORT_SYMBOL_GPL(pwm_set_chip_data); 214 215 /** 216 * pwm_get_chip_data() - get private chip data for a PWM 217 * @pwm: PWM device 218 */ 219 void *pwm_get_chip_data(struct pwm_device *pwm) 220 { 221 return pwm ? pwm->chip_data : NULL; 222 } 223 EXPORT_SYMBOL_GPL(pwm_get_chip_data); 224 225 /** 226 * pwmchip_add_with_polarity() - register a new PWM chip 227 * @chip: the PWM chip to add 228 * @polarity: initial polarity of PWM channels 229 * 230 * Register a new PWM chip. If chip->base < 0 then a dynamically assigned base 231 * will be used. The initial polarity for all channels is specified by the 232 * @polarity parameter. 233 */ 234 int pwmchip_add_with_polarity(struct pwm_chip *chip, 235 enum pwm_polarity polarity) 236 { 237 struct pwm_device *pwm; 238 unsigned int i; 239 int ret; 240 241 if (!chip || !chip->dev || !chip->ops || !chip->ops->config || 242 !chip->ops->enable || !chip->ops->disable || !chip->npwm) 243 return -EINVAL; 244 245 mutex_lock(&pwm_lock); 246 247 ret = alloc_pwms(chip->base, chip->npwm); 248 if (ret < 0) 249 goto out; 250 251 chip->pwms = kzalloc(chip->npwm * sizeof(*pwm), GFP_KERNEL); 252 if (!chip->pwms) { 253 ret = -ENOMEM; 254 goto out; 255 } 256 257 chip->base = ret; 258 259 for (i = 0; i < chip->npwm; i++) { 260 pwm = &chip->pwms[i]; 261 262 pwm->chip = chip; 263 pwm->pwm = chip->base + i; 264 pwm->hwpwm = i; 265 pwm->polarity = polarity; 266 267 radix_tree_insert(&pwm_tree, pwm->pwm, pwm); 268 } 269 270 bitmap_set(allocated_pwms, chip->base, chip->npwm); 271 272 INIT_LIST_HEAD(&chip->list); 273 list_add(&chip->list, &pwm_chips); 274 275 ret = 0; 276 277 if (IS_ENABLED(CONFIG_OF)) 278 of_pwmchip_add(chip); 279 280 pwmchip_sysfs_export(chip); 281 282 out: 283 mutex_unlock(&pwm_lock); 284 return ret; 285 } 286 EXPORT_SYMBOL_GPL(pwmchip_add_with_polarity); 287 288 /** 289 * pwmchip_add() - register a new PWM chip 290 * @chip: the PWM chip to add 291 * 292 * Register a new PWM chip. If chip->base < 0 then a dynamically assigned base 293 * will be used. The initial polarity for all channels is normal. 294 */ 295 int pwmchip_add(struct pwm_chip *chip) 296 { 297 return pwmchip_add_with_polarity(chip, PWM_POLARITY_NORMAL); 298 } 299 EXPORT_SYMBOL_GPL(pwmchip_add); 300 301 /** 302 * pwmchip_remove() - remove a PWM chip 303 * @chip: the PWM chip to remove 304 * 305 * Removes a PWM chip. This function may return busy if the PWM chip provides 306 * a PWM device that is still requested. 307 */ 308 int pwmchip_remove(struct pwm_chip *chip) 309 { 310 unsigned int i; 311 int ret = 0; 312 313 mutex_lock(&pwm_lock); 314 315 for (i = 0; i < chip->npwm; i++) { 316 struct pwm_device *pwm = &chip->pwms[i]; 317 318 if (test_bit(PWMF_REQUESTED, &pwm->flags)) { 319 ret = -EBUSY; 320 goto out; 321 } 322 } 323 324 list_del_init(&chip->list); 325 326 if (IS_ENABLED(CONFIG_OF)) 327 of_pwmchip_remove(chip); 328 329 free_pwms(chip); 330 331 pwmchip_sysfs_unexport(chip); 332 333 out: 334 mutex_unlock(&pwm_lock); 335 return ret; 336 } 337 EXPORT_SYMBOL_GPL(pwmchip_remove); 338 339 /** 340 * pwm_request() - request a PWM device 341 * @pwm_id: global PWM device index 342 * @label: PWM device label 343 * 344 * This function is deprecated, use pwm_get() instead. 345 */ 346 struct pwm_device *pwm_request(int pwm, const char *label) 347 { 348 struct pwm_device *dev; 349 int err; 350 351 if (pwm < 0 || pwm >= MAX_PWMS) 352 return ERR_PTR(-EINVAL); 353 354 mutex_lock(&pwm_lock); 355 356 dev = pwm_to_device(pwm); 357 if (!dev) { 358 dev = ERR_PTR(-EPROBE_DEFER); 359 goto out; 360 } 361 362 err = pwm_device_request(dev, label); 363 if (err < 0) 364 dev = ERR_PTR(err); 365 366 out: 367 mutex_unlock(&pwm_lock); 368 369 return dev; 370 } 371 EXPORT_SYMBOL_GPL(pwm_request); 372 373 /** 374 * pwm_request_from_chip() - request a PWM device relative to a PWM chip 375 * @chip: PWM chip 376 * @index: per-chip index of the PWM to request 377 * @label: a literal description string of this PWM 378 * 379 * Returns the PWM at the given index of the given PWM chip. A negative error 380 * code is returned if the index is not valid for the specified PWM chip or 381 * if the PWM device cannot be requested. 382 */ 383 struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip, 384 unsigned int index, 385 const char *label) 386 { 387 struct pwm_device *pwm; 388 int err; 389 390 if (!chip || index >= chip->npwm) 391 return ERR_PTR(-EINVAL); 392 393 mutex_lock(&pwm_lock); 394 pwm = &chip->pwms[index]; 395 396 err = pwm_device_request(pwm, label); 397 if (err < 0) 398 pwm = ERR_PTR(err); 399 400 mutex_unlock(&pwm_lock); 401 return pwm; 402 } 403 EXPORT_SYMBOL_GPL(pwm_request_from_chip); 404 405 /** 406 * pwm_free() - free a PWM device 407 * @pwm: PWM device 408 * 409 * This function is deprecated, use pwm_put() instead. 410 */ 411 void pwm_free(struct pwm_device *pwm) 412 { 413 pwm_put(pwm); 414 } 415 EXPORT_SYMBOL_GPL(pwm_free); 416 417 /** 418 * pwm_config() - change a PWM device configuration 419 * @pwm: PWM device 420 * @duty_ns: "on" time (in nanoseconds) 421 * @period_ns: duration (in nanoseconds) of one cycle 422 */ 423 int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) 424 { 425 int err; 426 427 if (!pwm || duty_ns < 0 || period_ns <= 0 || duty_ns > period_ns) 428 return -EINVAL; 429 430 err = pwm->chip->ops->config(pwm->chip, pwm, duty_ns, period_ns); 431 if (err) 432 return err; 433 434 pwm->duty_cycle = duty_ns; 435 pwm->period = period_ns; 436 437 return 0; 438 } 439 EXPORT_SYMBOL_GPL(pwm_config); 440 441 /** 442 * pwm_set_polarity() - configure the polarity of a PWM signal 443 * @pwm: PWM device 444 * @polarity: new polarity of the PWM signal 445 * 446 * Note that the polarity cannot be configured while the PWM device is enabled 447 */ 448 int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity) 449 { 450 int err; 451 452 if (!pwm || !pwm->chip->ops) 453 return -EINVAL; 454 455 if (!pwm->chip->ops->set_polarity) 456 return -ENOSYS; 457 458 if (test_bit(PWMF_ENABLED, &pwm->flags)) 459 return -EBUSY; 460 461 err = pwm->chip->ops->set_polarity(pwm->chip, pwm, polarity); 462 if (err) 463 return err; 464 465 pwm->polarity = polarity; 466 467 return 0; 468 } 469 EXPORT_SYMBOL_GPL(pwm_set_polarity); 470 471 /** 472 * pwm_enable() - start a PWM output toggling 473 * @pwm: PWM device 474 */ 475 int pwm_enable(struct pwm_device *pwm) 476 { 477 if (pwm && !test_and_set_bit(PWMF_ENABLED, &pwm->flags)) 478 return pwm->chip->ops->enable(pwm->chip, pwm); 479 480 return pwm ? 0 : -EINVAL; 481 } 482 EXPORT_SYMBOL_GPL(pwm_enable); 483 484 /** 485 * pwm_disable() - stop a PWM output toggling 486 * @pwm: PWM device 487 */ 488 void pwm_disable(struct pwm_device *pwm) 489 { 490 if (pwm && test_and_clear_bit(PWMF_ENABLED, &pwm->flags)) 491 pwm->chip->ops->disable(pwm->chip, pwm); 492 } 493 EXPORT_SYMBOL_GPL(pwm_disable); 494 495 static struct pwm_chip *of_node_to_pwmchip(struct device_node *np) 496 { 497 struct pwm_chip *chip; 498 499 mutex_lock(&pwm_lock); 500 501 list_for_each_entry(chip, &pwm_chips, list) 502 if (chip->dev && chip->dev->of_node == np) { 503 mutex_unlock(&pwm_lock); 504 return chip; 505 } 506 507 mutex_unlock(&pwm_lock); 508 509 return ERR_PTR(-EPROBE_DEFER); 510 } 511 512 /** 513 * of_pwm_get() - request a PWM via the PWM framework 514 * @np: device node to get the PWM from 515 * @con_id: consumer name 516 * 517 * Returns the PWM device parsed from the phandle and index specified in the 518 * "pwms" property of a device tree node or a negative error-code on failure. 519 * Values parsed from the device tree are stored in the returned PWM device 520 * object. 521 * 522 * If con_id is NULL, the first PWM device listed in the "pwms" property will 523 * be requested. Otherwise the "pwm-names" property is used to do a reverse 524 * lookup of the PWM index. This also means that the "pwm-names" property 525 * becomes mandatory for devices that look up the PWM device via the con_id 526 * parameter. 527 */ 528 struct pwm_device *of_pwm_get(struct device_node *np, const char *con_id) 529 { 530 struct pwm_device *pwm = NULL; 531 struct of_phandle_args args; 532 struct pwm_chip *pc; 533 int index = 0; 534 int err; 535 536 if (con_id) { 537 index = of_property_match_string(np, "pwm-names", con_id); 538 if (index < 0) 539 return ERR_PTR(index); 540 } 541 542 err = of_parse_phandle_with_args(np, "pwms", "#pwm-cells", index, 543 &args); 544 if (err) { 545 pr_debug("%s(): can't parse \"pwms\" property\n", __func__); 546 return ERR_PTR(err); 547 } 548 549 pc = of_node_to_pwmchip(args.np); 550 if (IS_ERR(pc)) { 551 pr_debug("%s(): PWM chip not found\n", __func__); 552 pwm = ERR_CAST(pc); 553 goto put; 554 } 555 556 if (args.args_count != pc->of_pwm_n_cells) { 557 pr_debug("%s: wrong #pwm-cells for %s\n", np->full_name, 558 args.np->full_name); 559 pwm = ERR_PTR(-EINVAL); 560 goto put; 561 } 562 563 pwm = pc->of_xlate(pc, &args); 564 if (IS_ERR(pwm)) 565 goto put; 566 567 /* 568 * If a consumer name was not given, try to look it up from the 569 * "pwm-names" property if it exists. Otherwise use the name of 570 * the user device node. 571 */ 572 if (!con_id) { 573 err = of_property_read_string_index(np, "pwm-names", index, 574 &con_id); 575 if (err < 0) 576 con_id = np->name; 577 } 578 579 pwm->label = con_id; 580 581 put: 582 of_node_put(args.np); 583 584 return pwm; 585 } 586 EXPORT_SYMBOL_GPL(of_pwm_get); 587 588 /** 589 * pwm_add_table() - register PWM device consumers 590 * @table: array of consumers to register 591 * @num: number of consumers in table 592 */ 593 void pwm_add_table(struct pwm_lookup *table, size_t num) 594 { 595 mutex_lock(&pwm_lookup_lock); 596 597 while (num--) { 598 list_add_tail(&table->list, &pwm_lookup_list); 599 table++; 600 } 601 602 mutex_unlock(&pwm_lookup_lock); 603 } 604 605 /** 606 * pwm_remove_table() - unregister PWM device consumers 607 * @table: array of consumers to unregister 608 * @num: number of consumers in table 609 */ 610 void pwm_remove_table(struct pwm_lookup *table, size_t num) 611 { 612 mutex_lock(&pwm_lookup_lock); 613 614 while (num--) { 615 list_del(&table->list); 616 table++; 617 } 618 619 mutex_unlock(&pwm_lookup_lock); 620 } 621 622 /** 623 * pwm_get() - look up and request a PWM device 624 * @dev: device for PWM consumer 625 * @con_id: consumer name 626 * 627 * Lookup is first attempted using DT. If the device was not instantiated from 628 * a device tree, a PWM chip and a relative index is looked up via a table 629 * supplied by board setup code (see pwm_add_table()). 630 * 631 * Once a PWM chip has been found the specified PWM device will be requested 632 * and is ready to be used. 633 */ 634 struct pwm_device *pwm_get(struct device *dev, const char *con_id) 635 { 636 struct pwm_device *pwm = ERR_PTR(-EPROBE_DEFER); 637 const char *dev_id = dev ? dev_name(dev) : NULL; 638 struct pwm_chip *chip = NULL; 639 unsigned int best = 0; 640 struct pwm_lookup *p, *chosen = NULL; 641 unsigned int match; 642 643 /* look up via DT first */ 644 if (IS_ENABLED(CONFIG_OF) && dev && dev->of_node) 645 return of_pwm_get(dev->of_node, con_id); 646 647 /* 648 * We look up the provider in the static table typically provided by 649 * board setup code. We first try to lookup the consumer device by 650 * name. If the consumer device was passed in as NULL or if no match 651 * was found, we try to find the consumer by directly looking it up 652 * by name. 653 * 654 * If a match is found, the provider PWM chip is looked up by name 655 * and a PWM device is requested using the PWM device per-chip index. 656 * 657 * The lookup algorithm was shamelessly taken from the clock 658 * framework: 659 * 660 * We do slightly fuzzy matching here: 661 * An entry with a NULL ID is assumed to be a wildcard. 662 * If an entry has a device ID, it must match 663 * If an entry has a connection ID, it must match 664 * Then we take the most specific entry - with the following order 665 * of precedence: dev+con > dev only > con only. 666 */ 667 mutex_lock(&pwm_lookup_lock); 668 669 list_for_each_entry(p, &pwm_lookup_list, list) { 670 match = 0; 671 672 if (p->dev_id) { 673 if (!dev_id || strcmp(p->dev_id, dev_id)) 674 continue; 675 676 match += 2; 677 } 678 679 if (p->con_id) { 680 if (!con_id || strcmp(p->con_id, con_id)) 681 continue; 682 683 match += 1; 684 } 685 686 if (match > best) { 687 chosen = p; 688 689 if (match != 3) 690 best = match; 691 else 692 break; 693 } 694 } 695 696 if (!chosen) 697 goto out; 698 699 chip = pwmchip_find_by_name(chosen->provider); 700 if (!chip) 701 goto out; 702 703 pwm = pwm_request_from_chip(chip, chosen->index, con_id ?: dev_id); 704 if (IS_ERR(pwm)) 705 goto out; 706 707 pwm_set_period(pwm, chosen->period); 708 pwm_set_polarity(pwm, chosen->polarity); 709 710 out: 711 mutex_unlock(&pwm_lookup_lock); 712 return pwm; 713 } 714 EXPORT_SYMBOL_GPL(pwm_get); 715 716 /** 717 * pwm_put() - release a PWM device 718 * @pwm: PWM device 719 */ 720 void pwm_put(struct pwm_device *pwm) 721 { 722 if (!pwm) 723 return; 724 725 mutex_lock(&pwm_lock); 726 727 if (!test_and_clear_bit(PWMF_REQUESTED, &pwm->flags)) { 728 pr_warn("PWM device already freed\n"); 729 goto out; 730 } 731 732 if (pwm->chip->ops->free) 733 pwm->chip->ops->free(pwm->chip, pwm); 734 735 pwm->label = NULL; 736 737 module_put(pwm->chip->ops->owner); 738 out: 739 mutex_unlock(&pwm_lock); 740 } 741 EXPORT_SYMBOL_GPL(pwm_put); 742 743 static void devm_pwm_release(struct device *dev, void *res) 744 { 745 pwm_put(*(struct pwm_device **)res); 746 } 747 748 /** 749 * devm_pwm_get() - resource managed pwm_get() 750 * @dev: device for PWM consumer 751 * @con_id: consumer name 752 * 753 * This function performs like pwm_get() but the acquired PWM device will 754 * automatically be released on driver detach. 755 */ 756 struct pwm_device *devm_pwm_get(struct device *dev, const char *con_id) 757 { 758 struct pwm_device **ptr, *pwm; 759 760 ptr = devres_alloc(devm_pwm_release, sizeof(*ptr), GFP_KERNEL); 761 if (!ptr) 762 return ERR_PTR(-ENOMEM); 763 764 pwm = pwm_get(dev, con_id); 765 if (!IS_ERR(pwm)) { 766 *ptr = pwm; 767 devres_add(dev, ptr); 768 } else { 769 devres_free(ptr); 770 } 771 772 return pwm; 773 } 774 EXPORT_SYMBOL_GPL(devm_pwm_get); 775 776 /** 777 * devm_of_pwm_get() - resource managed of_pwm_get() 778 * @dev: device for PWM consumer 779 * @np: device node to get the PWM from 780 * @con_id: consumer name 781 * 782 * This function performs like of_pwm_get() but the acquired PWM device will 783 * automatically be released on driver detach. 784 */ 785 struct pwm_device *devm_of_pwm_get(struct device *dev, struct device_node *np, 786 const char *con_id) 787 { 788 struct pwm_device **ptr, *pwm; 789 790 ptr = devres_alloc(devm_pwm_release, sizeof(*ptr), GFP_KERNEL); 791 if (!ptr) 792 return ERR_PTR(-ENOMEM); 793 794 pwm = of_pwm_get(np, con_id); 795 if (!IS_ERR(pwm)) { 796 *ptr = pwm; 797 devres_add(dev, ptr); 798 } else { 799 devres_free(ptr); 800 } 801 802 return pwm; 803 } 804 EXPORT_SYMBOL_GPL(devm_of_pwm_get); 805 806 static int devm_pwm_match(struct device *dev, void *res, void *data) 807 { 808 struct pwm_device **p = res; 809 810 if (WARN_ON(!p || !*p)) 811 return 0; 812 813 return *p == data; 814 } 815 816 /** 817 * devm_pwm_put() - resource managed pwm_put() 818 * @dev: device for PWM consumer 819 * @pwm: PWM device 820 * 821 * Release a PWM previously allocated using devm_pwm_get(). Calling this 822 * function is usually not needed because devm-allocated resources are 823 * automatically released on driver detach. 824 */ 825 void devm_pwm_put(struct device *dev, struct pwm_device *pwm) 826 { 827 WARN_ON(devres_release(dev, devm_pwm_release, devm_pwm_match, pwm)); 828 } 829 EXPORT_SYMBOL_GPL(devm_pwm_put); 830 831 /** 832 * pwm_can_sleep() - report whether PWM access will sleep 833 * @pwm: PWM device 834 * 835 * It returns true if accessing the PWM can sleep, false otherwise. 836 */ 837 bool pwm_can_sleep(struct pwm_device *pwm) 838 { 839 return pwm->chip->can_sleep; 840 } 841 EXPORT_SYMBOL_GPL(pwm_can_sleep); 842 843 #ifdef CONFIG_DEBUG_FS 844 static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s) 845 { 846 unsigned int i; 847 848 for (i = 0; i < chip->npwm; i++) { 849 struct pwm_device *pwm = &chip->pwms[i]; 850 851 seq_printf(s, " pwm-%-3d (%-20.20s):", i, pwm->label); 852 853 if (test_bit(PWMF_REQUESTED, &pwm->flags)) 854 seq_puts(s, " requested"); 855 856 if (test_bit(PWMF_ENABLED, &pwm->flags)) 857 seq_puts(s, " enabled"); 858 859 seq_puts(s, "\n"); 860 } 861 } 862 863 static void *pwm_seq_start(struct seq_file *s, loff_t *pos) 864 { 865 mutex_lock(&pwm_lock); 866 s->private = ""; 867 868 return seq_list_start(&pwm_chips, *pos); 869 } 870 871 static void *pwm_seq_next(struct seq_file *s, void *v, loff_t *pos) 872 { 873 s->private = "\n"; 874 875 return seq_list_next(v, &pwm_chips, pos); 876 } 877 878 static void pwm_seq_stop(struct seq_file *s, void *v) 879 { 880 mutex_unlock(&pwm_lock); 881 } 882 883 static int pwm_seq_show(struct seq_file *s, void *v) 884 { 885 struct pwm_chip *chip = list_entry(v, struct pwm_chip, list); 886 887 seq_printf(s, "%s%s/%s, %d PWM device%s\n", (char *)s->private, 888 chip->dev->bus ? chip->dev->bus->name : "no-bus", 889 dev_name(chip->dev), chip->npwm, 890 (chip->npwm != 1) ? "s" : ""); 891 892 if (chip->ops->dbg_show) 893 chip->ops->dbg_show(chip, s); 894 else 895 pwm_dbg_show(chip, s); 896 897 return 0; 898 } 899 900 static const struct seq_operations pwm_seq_ops = { 901 .start = pwm_seq_start, 902 .next = pwm_seq_next, 903 .stop = pwm_seq_stop, 904 .show = pwm_seq_show, 905 }; 906 907 static int pwm_seq_open(struct inode *inode, struct file *file) 908 { 909 return seq_open(file, &pwm_seq_ops); 910 } 911 912 static const struct file_operations pwm_debugfs_ops = { 913 .owner = THIS_MODULE, 914 .open = pwm_seq_open, 915 .read = seq_read, 916 .llseek = seq_lseek, 917 .release = seq_release, 918 }; 919 920 static int __init pwm_debugfs_init(void) 921 { 922 debugfs_create_file("pwm", S_IFREG | S_IRUGO, NULL, NULL, 923 &pwm_debugfs_ops); 924 925 return 0; 926 } 927 928 subsys_initcall(pwm_debugfs_init); 929 #endif /* CONFIG_DEBUG_FS */ 930