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