1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Generic pwmlib implementation 4 * 5 * Copyright (C) 2011 Sascha Hauer <s.hauer@pengutronix.de> 6 * Copyright (C) 2011-2012 Avionic Design GmbH 7 */ 8 9 #include <linux/acpi.h> 10 #include <linux/module.h> 11 #include <linux/pwm.h> 12 #include <linux/radix-tree.h> 13 #include <linux/list.h> 14 #include <linux/mutex.h> 15 #include <linux/err.h> 16 #include <linux/slab.h> 17 #include <linux/device.h> 18 #include <linux/debugfs.h> 19 #include <linux/seq_file.h> 20 21 #include <dt-bindings/pwm/pwm.h> 22 23 #define CREATE_TRACE_POINTS 24 #include <trace/events/pwm.h> 25 26 #define MAX_PWMS 1024 27 28 static DEFINE_MUTEX(pwm_lookup_lock); 29 static LIST_HEAD(pwm_lookup_list); 30 static DEFINE_MUTEX(pwm_lock); 31 static LIST_HEAD(pwm_chips); 32 static DECLARE_BITMAP(allocated_pwms, MAX_PWMS); 33 static RADIX_TREE(pwm_tree, GFP_KERNEL); 34 35 static struct pwm_device *pwm_to_device(unsigned int pwm) 36 { 37 return radix_tree_lookup(&pwm_tree, pwm); 38 } 39 40 static int alloc_pwms(unsigned int count) 41 { 42 unsigned int start; 43 44 start = bitmap_find_next_zero_area(allocated_pwms, MAX_PWMS, 0, 45 count, 0); 46 47 if (start + count > MAX_PWMS) 48 return -ENOSPC; 49 50 return start; 51 } 52 53 static void free_pwms(struct pwm_chip *chip) 54 { 55 unsigned int i; 56 57 for (i = 0; i < chip->npwm; i++) { 58 struct pwm_device *pwm = &chip->pwms[i]; 59 60 radix_tree_delete(&pwm_tree, pwm->pwm); 61 } 62 63 bitmap_clear(allocated_pwms, chip->base, chip->npwm); 64 65 kfree(chip->pwms); 66 chip->pwms = NULL; 67 } 68 69 static struct pwm_chip *pwmchip_find_by_name(const char *name) 70 { 71 struct pwm_chip *chip; 72 73 if (!name) 74 return NULL; 75 76 mutex_lock(&pwm_lock); 77 78 list_for_each_entry(chip, &pwm_chips, list) { 79 const char *chip_name = dev_name(chip->dev); 80 81 if (chip_name && strcmp(chip_name, name) == 0) { 82 mutex_unlock(&pwm_lock); 83 return chip; 84 } 85 } 86 87 mutex_unlock(&pwm_lock); 88 89 return NULL; 90 } 91 92 static int pwm_device_request(struct pwm_device *pwm, const char *label) 93 { 94 int err; 95 96 if (test_bit(PWMF_REQUESTED, &pwm->flags)) 97 return -EBUSY; 98 99 if (!try_module_get(pwm->chip->ops->owner)) 100 return -ENODEV; 101 102 if (pwm->chip->ops->request) { 103 err = pwm->chip->ops->request(pwm->chip, pwm); 104 if (err) { 105 module_put(pwm->chip->ops->owner); 106 return err; 107 } 108 } 109 110 if (pwm->chip->ops->get_state) { 111 pwm->chip->ops->get_state(pwm->chip, pwm, &pwm->state); 112 trace_pwm_get(pwm, &pwm->state); 113 114 if (IS_ENABLED(CONFIG_PWM_DEBUG)) 115 pwm->last = pwm->state; 116 } 117 118 set_bit(PWMF_REQUESTED, &pwm->flags); 119 pwm->label = label; 120 121 return 0; 122 } 123 124 struct pwm_device * 125 of_pwm_xlate_with_flags(struct pwm_chip *pc, const struct of_phandle_args *args) 126 { 127 struct pwm_device *pwm; 128 129 if (pc->of_pwm_n_cells < 2) 130 return ERR_PTR(-EINVAL); 131 132 /* flags in the third cell are optional */ 133 if (args->args_count < 2) 134 return ERR_PTR(-EINVAL); 135 136 if (args->args[0] >= pc->npwm) 137 return ERR_PTR(-EINVAL); 138 139 pwm = pwm_request_from_chip(pc, args->args[0], NULL); 140 if (IS_ERR(pwm)) 141 return pwm; 142 143 pwm->args.period = args->args[1]; 144 pwm->args.polarity = PWM_POLARITY_NORMAL; 145 146 if (pc->of_pwm_n_cells >= 3) { 147 if (args->args_count > 2 && args->args[2] & PWM_POLARITY_INVERTED) 148 pwm->args.polarity = PWM_POLARITY_INVERSED; 149 } 150 151 return pwm; 152 } 153 EXPORT_SYMBOL_GPL(of_pwm_xlate_with_flags); 154 155 static void of_pwmchip_add(struct pwm_chip *chip) 156 { 157 if (!chip->dev || !chip->dev->of_node) 158 return; 159 160 if (!chip->of_xlate) { 161 u32 pwm_cells; 162 163 if (of_property_read_u32(chip->dev->of_node, "#pwm-cells", 164 &pwm_cells)) 165 pwm_cells = 2; 166 167 chip->of_xlate = of_pwm_xlate_with_flags; 168 chip->of_pwm_n_cells = pwm_cells; 169 } 170 171 of_node_get(chip->dev->of_node); 172 } 173 174 static void of_pwmchip_remove(struct pwm_chip *chip) 175 { 176 if (chip->dev) 177 of_node_put(chip->dev->of_node); 178 } 179 180 /** 181 * pwm_set_chip_data() - set private chip data for a PWM 182 * @pwm: PWM device 183 * @data: pointer to chip-specific data 184 * 185 * Returns: 0 on success or a negative error code on failure. 186 */ 187 int pwm_set_chip_data(struct pwm_device *pwm, void *data) 188 { 189 if (!pwm) 190 return -EINVAL; 191 192 pwm->chip_data = data; 193 194 return 0; 195 } 196 EXPORT_SYMBOL_GPL(pwm_set_chip_data); 197 198 /** 199 * pwm_get_chip_data() - get private chip data for a PWM 200 * @pwm: PWM device 201 * 202 * Returns: A pointer to the chip-private data for the PWM device. 203 */ 204 void *pwm_get_chip_data(struct pwm_device *pwm) 205 { 206 return pwm ? pwm->chip_data : NULL; 207 } 208 EXPORT_SYMBOL_GPL(pwm_get_chip_data); 209 210 static bool pwm_ops_check(const struct pwm_chip *chip) 211 { 212 213 const struct pwm_ops *ops = chip->ops; 214 215 /* driver supports legacy, non-atomic operation */ 216 if (ops->config && ops->enable && ops->disable) { 217 if (IS_ENABLED(CONFIG_PWM_DEBUG)) 218 dev_warn(chip->dev, 219 "Driver needs updating to atomic API\n"); 220 221 return true; 222 } 223 224 if (!ops->apply) 225 return false; 226 227 if (IS_ENABLED(CONFIG_PWM_DEBUG) && !ops->get_state) 228 dev_warn(chip->dev, 229 "Please implement the .get_state() callback\n"); 230 231 return true; 232 } 233 234 /** 235 * pwmchip_add() - register a new PWM chip 236 * @chip: the PWM chip to add 237 * 238 * Register a new PWM chip. 239 * 240 * Returns: 0 on success or a negative error code on failure. 241 */ 242 int pwmchip_add(struct pwm_chip *chip) 243 { 244 struct pwm_device *pwm; 245 unsigned int i; 246 int ret; 247 248 if (!chip || !chip->dev || !chip->ops || !chip->npwm) 249 return -EINVAL; 250 251 if (!pwm_ops_check(chip)) 252 return -EINVAL; 253 254 mutex_lock(&pwm_lock); 255 256 ret = alloc_pwms(chip->npwm); 257 if (ret < 0) 258 goto out; 259 260 chip->base = ret; 261 262 chip->pwms = kcalloc(chip->npwm, sizeof(*pwm), GFP_KERNEL); 263 if (!chip->pwms) { 264 ret = -ENOMEM; 265 goto out; 266 } 267 268 for (i = 0; i < chip->npwm; i++) { 269 pwm = &chip->pwms[i]; 270 271 pwm->chip = chip; 272 pwm->pwm = chip->base + i; 273 pwm->hwpwm = i; 274 275 radix_tree_insert(&pwm_tree, pwm->pwm, pwm); 276 } 277 278 bitmap_set(allocated_pwms, chip->base, chip->npwm); 279 280 INIT_LIST_HEAD(&chip->list); 281 list_add(&chip->list, &pwm_chips); 282 283 ret = 0; 284 285 if (IS_ENABLED(CONFIG_OF)) 286 of_pwmchip_add(chip); 287 288 out: 289 mutex_unlock(&pwm_lock); 290 291 if (!ret) 292 pwmchip_sysfs_export(chip); 293 294 return ret; 295 } 296 EXPORT_SYMBOL_GPL(pwmchip_add); 297 298 /** 299 * pwmchip_remove() - remove a PWM chip 300 * @chip: the PWM chip to remove 301 * 302 * Removes a PWM chip. This function may return busy if the PWM chip provides 303 * a PWM device that is still requested. 304 * 305 * Returns: 0 on success or a negative error code on failure. 306 */ 307 void pwmchip_remove(struct pwm_chip *chip) 308 { 309 pwmchip_sysfs_unexport(chip); 310 311 mutex_lock(&pwm_lock); 312 313 list_del_init(&chip->list); 314 315 if (IS_ENABLED(CONFIG_OF)) 316 of_pwmchip_remove(chip); 317 318 free_pwms(chip); 319 320 mutex_unlock(&pwm_lock); 321 } 322 EXPORT_SYMBOL_GPL(pwmchip_remove); 323 324 static void devm_pwmchip_remove(void *data) 325 { 326 struct pwm_chip *chip = data; 327 328 pwmchip_remove(chip); 329 } 330 331 int devm_pwmchip_add(struct device *dev, struct pwm_chip *chip) 332 { 333 int ret; 334 335 ret = pwmchip_add(chip); 336 if (ret) 337 return ret; 338 339 return devm_add_action_or_reset(dev, devm_pwmchip_remove, chip); 340 } 341 EXPORT_SYMBOL_GPL(devm_pwmchip_add); 342 343 /** 344 * pwm_request() - request a PWM device 345 * @pwm: global PWM device index 346 * @label: PWM device label 347 * 348 * This function is deprecated, use pwm_get() instead. 349 * 350 * Returns: A pointer to a PWM device or an ERR_PTR()-encoded error code on 351 * failure. 352 */ 353 struct pwm_device *pwm_request(int pwm, const char *label) 354 { 355 struct pwm_device *dev; 356 int err; 357 358 if (pwm < 0 || pwm >= MAX_PWMS) 359 return ERR_PTR(-EINVAL); 360 361 mutex_lock(&pwm_lock); 362 363 dev = pwm_to_device(pwm); 364 if (!dev) { 365 dev = ERR_PTR(-EPROBE_DEFER); 366 goto out; 367 } 368 369 err = pwm_device_request(dev, label); 370 if (err < 0) 371 dev = ERR_PTR(err); 372 373 out: 374 mutex_unlock(&pwm_lock); 375 376 return dev; 377 } 378 EXPORT_SYMBOL_GPL(pwm_request); 379 380 /** 381 * pwm_request_from_chip() - request a PWM device relative to a PWM chip 382 * @chip: PWM chip 383 * @index: per-chip index of the PWM to request 384 * @label: a literal description string of this PWM 385 * 386 * Returns: A pointer to the PWM device at the given index of the given PWM 387 * chip. A negative error code is returned if the index is not valid for the 388 * specified PWM chip or if the PWM device cannot be requested. 389 */ 390 struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip, 391 unsigned int index, 392 const char *label) 393 { 394 struct pwm_device *pwm; 395 int err; 396 397 if (!chip || index >= chip->npwm) 398 return ERR_PTR(-EINVAL); 399 400 mutex_lock(&pwm_lock); 401 pwm = &chip->pwms[index]; 402 403 err = pwm_device_request(pwm, label); 404 if (err < 0) 405 pwm = ERR_PTR(err); 406 407 mutex_unlock(&pwm_lock); 408 return pwm; 409 } 410 EXPORT_SYMBOL_GPL(pwm_request_from_chip); 411 412 /** 413 * pwm_free() - free a PWM device 414 * @pwm: PWM device 415 * 416 * This function is deprecated, use pwm_put() instead. 417 */ 418 void pwm_free(struct pwm_device *pwm) 419 { 420 pwm_put(pwm); 421 } 422 EXPORT_SYMBOL_GPL(pwm_free); 423 424 static void pwm_apply_state_debug(struct pwm_device *pwm, 425 const struct pwm_state *state) 426 { 427 struct pwm_state *last = &pwm->last; 428 struct pwm_chip *chip = pwm->chip; 429 struct pwm_state s1, s2; 430 int err; 431 432 if (!IS_ENABLED(CONFIG_PWM_DEBUG)) 433 return; 434 435 /* No reasonable diagnosis possible without .get_state() */ 436 if (!chip->ops->get_state) 437 return; 438 439 /* 440 * *state was just applied. Read out the hardware state and do some 441 * checks. 442 */ 443 444 chip->ops->get_state(chip, pwm, &s1); 445 trace_pwm_get(pwm, &s1); 446 447 /* 448 * The lowlevel driver either ignored .polarity (which is a bug) or as 449 * best effort inverted .polarity and fixed .duty_cycle respectively. 450 * Undo this inversion and fixup for further tests. 451 */ 452 if (s1.enabled && s1.polarity != state->polarity) { 453 s2.polarity = state->polarity; 454 s2.duty_cycle = s1.period - s1.duty_cycle; 455 s2.period = s1.period; 456 s2.enabled = s1.enabled; 457 } else { 458 s2 = s1; 459 } 460 461 if (s2.polarity != state->polarity && 462 state->duty_cycle < state->period) 463 dev_warn(chip->dev, ".apply ignored .polarity\n"); 464 465 if (state->enabled && 466 last->polarity == state->polarity && 467 last->period > s2.period && 468 last->period <= state->period) 469 dev_warn(chip->dev, 470 ".apply didn't pick the best available period (requested: %llu, applied: %llu, possible: %llu)\n", 471 state->period, s2.period, last->period); 472 473 if (state->enabled && state->period < s2.period) 474 dev_warn(chip->dev, 475 ".apply is supposed to round down period (requested: %llu, applied: %llu)\n", 476 state->period, s2.period); 477 478 if (state->enabled && 479 last->polarity == state->polarity && 480 last->period == s2.period && 481 last->duty_cycle > s2.duty_cycle && 482 last->duty_cycle <= state->duty_cycle) 483 dev_warn(chip->dev, 484 ".apply didn't pick the best available duty cycle (requested: %llu/%llu, applied: %llu/%llu, possible: %llu/%llu)\n", 485 state->duty_cycle, state->period, 486 s2.duty_cycle, s2.period, 487 last->duty_cycle, last->period); 488 489 if (state->enabled && state->duty_cycle < s2.duty_cycle) 490 dev_warn(chip->dev, 491 ".apply is supposed to round down duty_cycle (requested: %llu/%llu, applied: %llu/%llu)\n", 492 state->duty_cycle, state->period, 493 s2.duty_cycle, s2.period); 494 495 if (!state->enabled && s2.enabled && s2.duty_cycle > 0) 496 dev_warn(chip->dev, 497 "requested disabled, but yielded enabled with duty > 0\n"); 498 499 /* reapply the state that the driver reported being configured. */ 500 err = chip->ops->apply(chip, pwm, &s1); 501 if (err) { 502 *last = s1; 503 dev_err(chip->dev, "failed to reapply current setting\n"); 504 return; 505 } 506 507 trace_pwm_apply(pwm, &s1); 508 509 chip->ops->get_state(chip, pwm, last); 510 trace_pwm_get(pwm, last); 511 512 /* reapplication of the current state should give an exact match */ 513 if (s1.enabled != last->enabled || 514 s1.polarity != last->polarity || 515 (s1.enabled && s1.period != last->period) || 516 (s1.enabled && s1.duty_cycle != last->duty_cycle)) { 517 dev_err(chip->dev, 518 ".apply is not idempotent (ena=%d pol=%d %llu/%llu) -> (ena=%d pol=%d %llu/%llu)\n", 519 s1.enabled, s1.polarity, s1.duty_cycle, s1.period, 520 last->enabled, last->polarity, last->duty_cycle, 521 last->period); 522 } 523 } 524 525 /** 526 * pwm_apply_state() - atomically apply a new state to a PWM device 527 * @pwm: PWM device 528 * @state: new state to apply 529 */ 530 int pwm_apply_state(struct pwm_device *pwm, const struct pwm_state *state) 531 { 532 struct pwm_chip *chip; 533 int err; 534 535 /* 536 * Some lowlevel driver's implementations of .apply() make use of 537 * mutexes, also with some drivers only returning when the new 538 * configuration is active calling pwm_apply_state() from atomic context 539 * is a bad idea. So make it explicit that calling this function might 540 * sleep. 541 */ 542 might_sleep(); 543 544 if (!pwm || !state || !state->period || 545 state->duty_cycle > state->period) 546 return -EINVAL; 547 548 chip = pwm->chip; 549 550 if (state->period == pwm->state.period && 551 state->duty_cycle == pwm->state.duty_cycle && 552 state->polarity == pwm->state.polarity && 553 state->enabled == pwm->state.enabled && 554 state->usage_power == pwm->state.usage_power) 555 return 0; 556 557 if (chip->ops->apply) { 558 err = chip->ops->apply(chip, pwm, state); 559 if (err) 560 return err; 561 562 trace_pwm_apply(pwm, state); 563 564 pwm->state = *state; 565 566 /* 567 * only do this after pwm->state was applied as some 568 * implementations of .get_state depend on this 569 */ 570 pwm_apply_state_debug(pwm, state); 571 } else { 572 /* 573 * FIXME: restore the initial state in case of error. 574 */ 575 if (state->polarity != pwm->state.polarity) { 576 if (!chip->ops->set_polarity) 577 return -EINVAL; 578 579 /* 580 * Changing the polarity of a running PWM is 581 * only allowed when the PWM driver implements 582 * ->apply(). 583 */ 584 if (pwm->state.enabled) { 585 chip->ops->disable(chip, pwm); 586 pwm->state.enabled = false; 587 } 588 589 err = chip->ops->set_polarity(chip, pwm, 590 state->polarity); 591 if (err) 592 return err; 593 594 pwm->state.polarity = state->polarity; 595 } 596 597 if (state->period != pwm->state.period || 598 state->duty_cycle != pwm->state.duty_cycle) { 599 err = chip->ops->config(pwm->chip, pwm, 600 state->duty_cycle, 601 state->period); 602 if (err) 603 return err; 604 605 pwm->state.duty_cycle = state->duty_cycle; 606 pwm->state.period = state->period; 607 } 608 609 if (state->enabled != pwm->state.enabled) { 610 if (state->enabled) { 611 err = chip->ops->enable(chip, pwm); 612 if (err) 613 return err; 614 } else { 615 chip->ops->disable(chip, pwm); 616 } 617 618 pwm->state.enabled = state->enabled; 619 } 620 } 621 622 return 0; 623 } 624 EXPORT_SYMBOL_GPL(pwm_apply_state); 625 626 /** 627 * pwm_capture() - capture and report a PWM signal 628 * @pwm: PWM device 629 * @result: structure to fill with capture result 630 * @timeout: time to wait, in milliseconds, before giving up on capture 631 * 632 * Returns: 0 on success or a negative error code on failure. 633 */ 634 int pwm_capture(struct pwm_device *pwm, struct pwm_capture *result, 635 unsigned long timeout) 636 { 637 int err; 638 639 if (!pwm || !pwm->chip->ops) 640 return -EINVAL; 641 642 if (!pwm->chip->ops->capture) 643 return -ENOSYS; 644 645 mutex_lock(&pwm_lock); 646 err = pwm->chip->ops->capture(pwm->chip, pwm, result, timeout); 647 mutex_unlock(&pwm_lock); 648 649 return err; 650 } 651 EXPORT_SYMBOL_GPL(pwm_capture); 652 653 /** 654 * pwm_adjust_config() - adjust the current PWM config to the PWM arguments 655 * @pwm: PWM device 656 * 657 * This function will adjust the PWM config to the PWM arguments provided 658 * by the DT or PWM lookup table. This is particularly useful to adapt 659 * the bootloader config to the Linux one. 660 */ 661 int pwm_adjust_config(struct pwm_device *pwm) 662 { 663 struct pwm_state state; 664 struct pwm_args pargs; 665 666 pwm_get_args(pwm, &pargs); 667 pwm_get_state(pwm, &state); 668 669 /* 670 * If the current period is zero it means that either the PWM driver 671 * does not support initial state retrieval or the PWM has not yet 672 * been configured. 673 * 674 * In either case, we setup the new period and polarity, and assign a 675 * duty cycle of 0. 676 */ 677 if (!state.period) { 678 state.duty_cycle = 0; 679 state.period = pargs.period; 680 state.polarity = pargs.polarity; 681 682 return pwm_apply_state(pwm, &state); 683 } 684 685 /* 686 * Adjust the PWM duty cycle/period based on the period value provided 687 * in PWM args. 688 */ 689 if (pargs.period != state.period) { 690 u64 dutycycle = (u64)state.duty_cycle * pargs.period; 691 692 do_div(dutycycle, state.period); 693 state.duty_cycle = dutycycle; 694 state.period = pargs.period; 695 } 696 697 /* 698 * If the polarity changed, we should also change the duty cycle. 699 */ 700 if (pargs.polarity != state.polarity) { 701 state.polarity = pargs.polarity; 702 state.duty_cycle = state.period - state.duty_cycle; 703 } 704 705 return pwm_apply_state(pwm, &state); 706 } 707 EXPORT_SYMBOL_GPL(pwm_adjust_config); 708 709 static struct pwm_chip *fwnode_to_pwmchip(struct fwnode_handle *fwnode) 710 { 711 struct pwm_chip *chip; 712 713 mutex_lock(&pwm_lock); 714 715 list_for_each_entry(chip, &pwm_chips, list) 716 if (chip->dev && dev_fwnode(chip->dev) == fwnode) { 717 mutex_unlock(&pwm_lock); 718 return chip; 719 } 720 721 mutex_unlock(&pwm_lock); 722 723 return ERR_PTR(-EPROBE_DEFER); 724 } 725 726 static struct device_link *pwm_device_link_add(struct device *dev, 727 struct pwm_device *pwm) 728 { 729 struct device_link *dl; 730 731 if (!dev) { 732 /* 733 * No device for the PWM consumer has been provided. It may 734 * impact the PM sequence ordering: the PWM supplier may get 735 * suspended before the consumer. 736 */ 737 dev_warn(pwm->chip->dev, 738 "No consumer device specified to create a link to\n"); 739 return NULL; 740 } 741 742 dl = device_link_add(dev, pwm->chip->dev, DL_FLAG_AUTOREMOVE_CONSUMER); 743 if (!dl) { 744 dev_err(dev, "failed to create device link to %s\n", 745 dev_name(pwm->chip->dev)); 746 return ERR_PTR(-EINVAL); 747 } 748 749 return dl; 750 } 751 752 /** 753 * of_pwm_get() - request a PWM via the PWM framework 754 * @dev: device for PWM consumer 755 * @np: device node to get the PWM from 756 * @con_id: consumer name 757 * 758 * Returns the PWM device parsed from the phandle and index specified in the 759 * "pwms" property of a device tree node or a negative error-code on failure. 760 * Values parsed from the device tree are stored in the returned PWM device 761 * object. 762 * 763 * If con_id is NULL, the first PWM device listed in the "pwms" property will 764 * be requested. Otherwise the "pwm-names" property is used to do a reverse 765 * lookup of the PWM index. This also means that the "pwm-names" property 766 * becomes mandatory for devices that look up the PWM device via the con_id 767 * parameter. 768 * 769 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 770 * error code on failure. 771 */ 772 struct pwm_device *of_pwm_get(struct device *dev, struct device_node *np, 773 const char *con_id) 774 { 775 struct pwm_device *pwm = NULL; 776 struct of_phandle_args args; 777 struct device_link *dl; 778 struct pwm_chip *pc; 779 int index = 0; 780 int err; 781 782 if (con_id) { 783 index = of_property_match_string(np, "pwm-names", con_id); 784 if (index < 0) 785 return ERR_PTR(index); 786 } 787 788 err = of_parse_phandle_with_args(np, "pwms", "#pwm-cells", index, 789 &args); 790 if (err) { 791 pr_err("%s(): can't parse \"pwms\" property\n", __func__); 792 return ERR_PTR(err); 793 } 794 795 pc = fwnode_to_pwmchip(of_fwnode_handle(args.np)); 796 if (IS_ERR(pc)) { 797 if (PTR_ERR(pc) != -EPROBE_DEFER) 798 pr_err("%s(): PWM chip not found\n", __func__); 799 800 pwm = ERR_CAST(pc); 801 goto put; 802 } 803 804 pwm = pc->of_xlate(pc, &args); 805 if (IS_ERR(pwm)) 806 goto put; 807 808 dl = pwm_device_link_add(dev, pwm); 809 if (IS_ERR(dl)) { 810 /* of_xlate ended up calling pwm_request_from_chip() */ 811 pwm_free(pwm); 812 pwm = ERR_CAST(dl); 813 goto put; 814 } 815 816 /* 817 * If a consumer name was not given, try to look it up from the 818 * "pwm-names" property if it exists. Otherwise use the name of 819 * the user device node. 820 */ 821 if (!con_id) { 822 err = of_property_read_string_index(np, "pwm-names", index, 823 &con_id); 824 if (err < 0) 825 con_id = np->name; 826 } 827 828 pwm->label = con_id; 829 830 put: 831 of_node_put(args.np); 832 833 return pwm; 834 } 835 EXPORT_SYMBOL_GPL(of_pwm_get); 836 837 /** 838 * acpi_pwm_get() - request a PWM via parsing "pwms" property in ACPI 839 * @fwnode: firmware node to get the "pwms" property from 840 * 841 * Returns the PWM device parsed from the fwnode and index specified in the 842 * "pwms" property or a negative error-code on failure. 843 * Values parsed from the device tree are stored in the returned PWM device 844 * object. 845 * 846 * This is analogous to of_pwm_get() except con_id is not yet supported. 847 * ACPI entries must look like 848 * Package () {"pwms", Package () 849 * { <PWM device reference>, <PWM index>, <PWM period> [, <PWM flags>]}} 850 * 851 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 852 * error code on failure. 853 */ 854 static struct pwm_device *acpi_pwm_get(const struct fwnode_handle *fwnode) 855 { 856 struct pwm_device *pwm; 857 struct fwnode_reference_args args; 858 struct pwm_chip *chip; 859 int ret; 860 861 memset(&args, 0, sizeof(args)); 862 863 ret = __acpi_node_get_property_reference(fwnode, "pwms", 0, 3, &args); 864 if (ret < 0) 865 return ERR_PTR(ret); 866 867 if (args.nargs < 2) 868 return ERR_PTR(-EPROTO); 869 870 chip = fwnode_to_pwmchip(args.fwnode); 871 if (IS_ERR(chip)) 872 return ERR_CAST(chip); 873 874 pwm = pwm_request_from_chip(chip, args.args[0], NULL); 875 if (IS_ERR(pwm)) 876 return pwm; 877 878 pwm->args.period = args.args[1]; 879 pwm->args.polarity = PWM_POLARITY_NORMAL; 880 881 if (args.nargs > 2 && args.args[2] & PWM_POLARITY_INVERTED) 882 pwm->args.polarity = PWM_POLARITY_INVERSED; 883 884 return pwm; 885 } 886 887 /** 888 * pwm_add_table() - register PWM device consumers 889 * @table: array of consumers to register 890 * @num: number of consumers in table 891 */ 892 void pwm_add_table(struct pwm_lookup *table, size_t num) 893 { 894 mutex_lock(&pwm_lookup_lock); 895 896 while (num--) { 897 list_add_tail(&table->list, &pwm_lookup_list); 898 table++; 899 } 900 901 mutex_unlock(&pwm_lookup_lock); 902 } 903 904 /** 905 * pwm_remove_table() - unregister PWM device consumers 906 * @table: array of consumers to unregister 907 * @num: number of consumers in table 908 */ 909 void pwm_remove_table(struct pwm_lookup *table, size_t num) 910 { 911 mutex_lock(&pwm_lookup_lock); 912 913 while (num--) { 914 list_del(&table->list); 915 table++; 916 } 917 918 mutex_unlock(&pwm_lookup_lock); 919 } 920 921 /** 922 * pwm_get() - look up and request a PWM device 923 * @dev: device for PWM consumer 924 * @con_id: consumer name 925 * 926 * Lookup is first attempted using DT. If the device was not instantiated from 927 * a device tree, a PWM chip and a relative index is looked up via a table 928 * supplied by board setup code (see pwm_add_table()). 929 * 930 * Once a PWM chip has been found the specified PWM device will be requested 931 * and is ready to be used. 932 * 933 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 934 * error code on failure. 935 */ 936 struct pwm_device *pwm_get(struct device *dev, const char *con_id) 937 { 938 const struct fwnode_handle *fwnode = dev ? dev_fwnode(dev) : NULL; 939 const char *dev_id = dev ? dev_name(dev) : NULL; 940 struct pwm_device *pwm; 941 struct pwm_chip *chip; 942 struct device_link *dl; 943 unsigned int best = 0; 944 struct pwm_lookup *p, *chosen = NULL; 945 unsigned int match; 946 int err; 947 948 /* look up via DT first */ 949 if (is_of_node(fwnode)) 950 return of_pwm_get(dev, to_of_node(fwnode), con_id); 951 952 /* then lookup via ACPI */ 953 if (is_acpi_node(fwnode)) { 954 pwm = acpi_pwm_get(fwnode); 955 if (!IS_ERR(pwm) || PTR_ERR(pwm) != -ENOENT) 956 return pwm; 957 } 958 959 /* 960 * We look up the provider in the static table typically provided by 961 * board setup code. We first try to lookup the consumer device by 962 * name. If the consumer device was passed in as NULL or if no match 963 * was found, we try to find the consumer by directly looking it up 964 * by name. 965 * 966 * If a match is found, the provider PWM chip is looked up by name 967 * and a PWM device is requested using the PWM device per-chip index. 968 * 969 * The lookup algorithm was shamelessly taken from the clock 970 * framework: 971 * 972 * We do slightly fuzzy matching here: 973 * An entry with a NULL ID is assumed to be a wildcard. 974 * If an entry has a device ID, it must match 975 * If an entry has a connection ID, it must match 976 * Then we take the most specific entry - with the following order 977 * of precedence: dev+con > dev only > con only. 978 */ 979 mutex_lock(&pwm_lookup_lock); 980 981 list_for_each_entry(p, &pwm_lookup_list, list) { 982 match = 0; 983 984 if (p->dev_id) { 985 if (!dev_id || strcmp(p->dev_id, dev_id)) 986 continue; 987 988 match += 2; 989 } 990 991 if (p->con_id) { 992 if (!con_id || strcmp(p->con_id, con_id)) 993 continue; 994 995 match += 1; 996 } 997 998 if (match > best) { 999 chosen = p; 1000 1001 if (match != 3) 1002 best = match; 1003 else 1004 break; 1005 } 1006 } 1007 1008 mutex_unlock(&pwm_lookup_lock); 1009 1010 if (!chosen) 1011 return ERR_PTR(-ENODEV); 1012 1013 chip = pwmchip_find_by_name(chosen->provider); 1014 1015 /* 1016 * If the lookup entry specifies a module, load the module and retry 1017 * the PWM chip lookup. This can be used to work around driver load 1018 * ordering issues if driver's can't be made to properly support the 1019 * deferred probe mechanism. 1020 */ 1021 if (!chip && chosen->module) { 1022 err = request_module(chosen->module); 1023 if (err == 0) 1024 chip = pwmchip_find_by_name(chosen->provider); 1025 } 1026 1027 if (!chip) 1028 return ERR_PTR(-EPROBE_DEFER); 1029 1030 pwm = pwm_request_from_chip(chip, chosen->index, con_id ?: dev_id); 1031 if (IS_ERR(pwm)) 1032 return pwm; 1033 1034 dl = pwm_device_link_add(dev, pwm); 1035 if (IS_ERR(dl)) { 1036 pwm_free(pwm); 1037 return ERR_CAST(dl); 1038 } 1039 1040 pwm->args.period = chosen->period; 1041 pwm->args.polarity = chosen->polarity; 1042 1043 return pwm; 1044 } 1045 EXPORT_SYMBOL_GPL(pwm_get); 1046 1047 /** 1048 * pwm_put() - release a PWM device 1049 * @pwm: PWM device 1050 */ 1051 void pwm_put(struct pwm_device *pwm) 1052 { 1053 if (!pwm) 1054 return; 1055 1056 mutex_lock(&pwm_lock); 1057 1058 if (!test_and_clear_bit(PWMF_REQUESTED, &pwm->flags)) { 1059 pr_warn("PWM device already freed\n"); 1060 goto out; 1061 } 1062 1063 if (pwm->chip->ops->free) 1064 pwm->chip->ops->free(pwm->chip, pwm); 1065 1066 pwm_set_chip_data(pwm, NULL); 1067 pwm->label = NULL; 1068 1069 module_put(pwm->chip->ops->owner); 1070 out: 1071 mutex_unlock(&pwm_lock); 1072 } 1073 EXPORT_SYMBOL_GPL(pwm_put); 1074 1075 static void devm_pwm_release(void *pwm) 1076 { 1077 pwm_put(pwm); 1078 } 1079 1080 /** 1081 * devm_pwm_get() - resource managed pwm_get() 1082 * @dev: device for PWM consumer 1083 * @con_id: consumer name 1084 * 1085 * This function performs like pwm_get() but the acquired PWM device will 1086 * automatically be released on driver detach. 1087 * 1088 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 1089 * error code on failure. 1090 */ 1091 struct pwm_device *devm_pwm_get(struct device *dev, const char *con_id) 1092 { 1093 struct pwm_device *pwm; 1094 int ret; 1095 1096 pwm = pwm_get(dev, con_id); 1097 if (IS_ERR(pwm)) 1098 return pwm; 1099 1100 ret = devm_add_action_or_reset(dev, devm_pwm_release, pwm); 1101 if (ret) 1102 return ERR_PTR(ret); 1103 1104 return pwm; 1105 } 1106 EXPORT_SYMBOL_GPL(devm_pwm_get); 1107 1108 /** 1109 * devm_of_pwm_get() - resource managed of_pwm_get() 1110 * @dev: device for PWM consumer 1111 * @np: device node to get the PWM from 1112 * @con_id: consumer name 1113 * 1114 * This function performs like of_pwm_get() but the acquired PWM device will 1115 * automatically be released on driver detach. 1116 * 1117 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 1118 * error code on failure. 1119 */ 1120 struct pwm_device *devm_of_pwm_get(struct device *dev, struct device_node *np, 1121 const char *con_id) 1122 { 1123 struct pwm_device *pwm; 1124 int ret; 1125 1126 pwm = of_pwm_get(dev, np, con_id); 1127 if (IS_ERR(pwm)) 1128 return pwm; 1129 1130 ret = devm_add_action_or_reset(dev, devm_pwm_release, pwm); 1131 if (ret) 1132 return ERR_PTR(ret); 1133 1134 return pwm; 1135 } 1136 EXPORT_SYMBOL_GPL(devm_of_pwm_get); 1137 1138 /** 1139 * devm_fwnode_pwm_get() - request a resource managed PWM from firmware node 1140 * @dev: device for PWM consumer 1141 * @fwnode: firmware node to get the PWM from 1142 * @con_id: consumer name 1143 * 1144 * Returns the PWM device parsed from the firmware node. See of_pwm_get() and 1145 * acpi_pwm_get() for a detailed description. 1146 * 1147 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 1148 * error code on failure. 1149 */ 1150 struct pwm_device *devm_fwnode_pwm_get(struct device *dev, 1151 struct fwnode_handle *fwnode, 1152 const char *con_id) 1153 { 1154 struct pwm_device *pwm = ERR_PTR(-ENODEV); 1155 int ret; 1156 1157 if (is_of_node(fwnode)) 1158 pwm = of_pwm_get(dev, to_of_node(fwnode), con_id); 1159 else if (is_acpi_node(fwnode)) 1160 pwm = acpi_pwm_get(fwnode); 1161 if (IS_ERR(pwm)) 1162 return pwm; 1163 1164 ret = devm_add_action_or_reset(dev, devm_pwm_release, pwm); 1165 if (ret) 1166 return ERR_PTR(ret); 1167 1168 return pwm; 1169 } 1170 EXPORT_SYMBOL_GPL(devm_fwnode_pwm_get); 1171 1172 #ifdef CONFIG_DEBUG_FS 1173 static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s) 1174 { 1175 unsigned int i; 1176 1177 for (i = 0; i < chip->npwm; i++) { 1178 struct pwm_device *pwm = &chip->pwms[i]; 1179 struct pwm_state state; 1180 1181 pwm_get_state(pwm, &state); 1182 1183 seq_printf(s, " pwm-%-3d (%-20.20s):", i, pwm->label); 1184 1185 if (test_bit(PWMF_REQUESTED, &pwm->flags)) 1186 seq_puts(s, " requested"); 1187 1188 if (state.enabled) 1189 seq_puts(s, " enabled"); 1190 1191 seq_printf(s, " period: %llu ns", state.period); 1192 seq_printf(s, " duty: %llu ns", state.duty_cycle); 1193 seq_printf(s, " polarity: %s", 1194 state.polarity ? "inverse" : "normal"); 1195 1196 if (state.usage_power) 1197 seq_puts(s, " usage_power"); 1198 1199 seq_puts(s, "\n"); 1200 } 1201 } 1202 1203 static void *pwm_seq_start(struct seq_file *s, loff_t *pos) 1204 { 1205 mutex_lock(&pwm_lock); 1206 s->private = ""; 1207 1208 return seq_list_start(&pwm_chips, *pos); 1209 } 1210 1211 static void *pwm_seq_next(struct seq_file *s, void *v, loff_t *pos) 1212 { 1213 s->private = "\n"; 1214 1215 return seq_list_next(v, &pwm_chips, pos); 1216 } 1217 1218 static void pwm_seq_stop(struct seq_file *s, void *v) 1219 { 1220 mutex_unlock(&pwm_lock); 1221 } 1222 1223 static int pwm_seq_show(struct seq_file *s, void *v) 1224 { 1225 struct pwm_chip *chip = list_entry(v, struct pwm_chip, list); 1226 1227 seq_printf(s, "%s%s/%s, %d PWM device%s\n", (char *)s->private, 1228 chip->dev->bus ? chip->dev->bus->name : "no-bus", 1229 dev_name(chip->dev), chip->npwm, 1230 (chip->npwm != 1) ? "s" : ""); 1231 1232 pwm_dbg_show(chip, s); 1233 1234 return 0; 1235 } 1236 1237 static const struct seq_operations pwm_debugfs_sops = { 1238 .start = pwm_seq_start, 1239 .next = pwm_seq_next, 1240 .stop = pwm_seq_stop, 1241 .show = pwm_seq_show, 1242 }; 1243 1244 DEFINE_SEQ_ATTRIBUTE(pwm_debugfs); 1245 1246 static int __init pwm_debugfs_init(void) 1247 { 1248 debugfs_create_file("pwm", S_IFREG | 0444, NULL, NULL, 1249 &pwm_debugfs_fops); 1250 1251 return 0; 1252 } 1253 subsys_initcall(pwm_debugfs_init); 1254 #endif /* CONFIG_DEBUG_FS */ 1255