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 int 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 return 0; 323 } 324 EXPORT_SYMBOL_GPL(pwmchip_remove); 325 326 static void devm_pwmchip_remove(void *data) 327 { 328 struct pwm_chip *chip = data; 329 330 pwmchip_remove(chip); 331 } 332 333 int devm_pwmchip_add(struct device *dev, struct pwm_chip *chip) 334 { 335 int ret; 336 337 ret = pwmchip_add(chip); 338 if (ret) 339 return ret; 340 341 return devm_add_action_or_reset(dev, devm_pwmchip_remove, chip); 342 } 343 EXPORT_SYMBOL_GPL(devm_pwmchip_add); 344 345 /** 346 * pwm_request() - request a PWM device 347 * @pwm: global PWM device index 348 * @label: PWM device label 349 * 350 * This function is deprecated, use pwm_get() instead. 351 * 352 * Returns: A pointer to a PWM device or an ERR_PTR()-encoded error code on 353 * failure. 354 */ 355 struct pwm_device *pwm_request(int pwm, const char *label) 356 { 357 struct pwm_device *dev; 358 int err; 359 360 if (pwm < 0 || pwm >= MAX_PWMS) 361 return ERR_PTR(-EINVAL); 362 363 mutex_lock(&pwm_lock); 364 365 dev = pwm_to_device(pwm); 366 if (!dev) { 367 dev = ERR_PTR(-EPROBE_DEFER); 368 goto out; 369 } 370 371 err = pwm_device_request(dev, label); 372 if (err < 0) 373 dev = ERR_PTR(err); 374 375 out: 376 mutex_unlock(&pwm_lock); 377 378 return dev; 379 } 380 EXPORT_SYMBOL_GPL(pwm_request); 381 382 /** 383 * pwm_request_from_chip() - request a PWM device relative to a PWM chip 384 * @chip: PWM chip 385 * @index: per-chip index of the PWM to request 386 * @label: a literal description string of this PWM 387 * 388 * Returns: A pointer to the PWM device at the given index of the given PWM 389 * chip. A negative error code is returned if the index is not valid for the 390 * specified PWM chip or if the PWM device cannot be requested. 391 */ 392 struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip, 393 unsigned int index, 394 const char *label) 395 { 396 struct pwm_device *pwm; 397 int err; 398 399 if (!chip || index >= chip->npwm) 400 return ERR_PTR(-EINVAL); 401 402 mutex_lock(&pwm_lock); 403 pwm = &chip->pwms[index]; 404 405 err = pwm_device_request(pwm, label); 406 if (err < 0) 407 pwm = ERR_PTR(err); 408 409 mutex_unlock(&pwm_lock); 410 return pwm; 411 } 412 EXPORT_SYMBOL_GPL(pwm_request_from_chip); 413 414 /** 415 * pwm_free() - free a PWM device 416 * @pwm: PWM device 417 * 418 * This function is deprecated, use pwm_put() instead. 419 */ 420 void pwm_free(struct pwm_device *pwm) 421 { 422 pwm_put(pwm); 423 } 424 EXPORT_SYMBOL_GPL(pwm_free); 425 426 static void pwm_apply_state_debug(struct pwm_device *pwm, 427 const struct pwm_state *state) 428 { 429 struct pwm_state *last = &pwm->last; 430 struct pwm_chip *chip = pwm->chip; 431 struct pwm_state s1, s2; 432 int err; 433 434 if (!IS_ENABLED(CONFIG_PWM_DEBUG)) 435 return; 436 437 /* No reasonable diagnosis possible without .get_state() */ 438 if (!chip->ops->get_state) 439 return; 440 441 /* 442 * *state was just applied. Read out the hardware state and do some 443 * checks. 444 */ 445 446 chip->ops->get_state(chip, pwm, &s1); 447 trace_pwm_get(pwm, &s1); 448 449 /* 450 * The lowlevel driver either ignored .polarity (which is a bug) or as 451 * best effort inverted .polarity and fixed .duty_cycle respectively. 452 * Undo this inversion and fixup for further tests. 453 */ 454 if (s1.enabled && s1.polarity != state->polarity) { 455 s2.polarity = state->polarity; 456 s2.duty_cycle = s1.period - s1.duty_cycle; 457 s2.period = s1.period; 458 s2.enabled = s1.enabled; 459 } else { 460 s2 = s1; 461 } 462 463 if (s2.polarity != state->polarity && 464 state->duty_cycle < state->period) 465 dev_warn(chip->dev, ".apply ignored .polarity\n"); 466 467 if (state->enabled && 468 last->polarity == state->polarity && 469 last->period > s2.period && 470 last->period <= state->period) 471 dev_warn(chip->dev, 472 ".apply didn't pick the best available period (requested: %llu, applied: %llu, possible: %llu)\n", 473 state->period, s2.period, last->period); 474 475 if (state->enabled && state->period < s2.period) 476 dev_warn(chip->dev, 477 ".apply is supposed to round down period (requested: %llu, applied: %llu)\n", 478 state->period, s2.period); 479 480 if (state->enabled && 481 last->polarity == state->polarity && 482 last->period == s2.period && 483 last->duty_cycle > s2.duty_cycle && 484 last->duty_cycle <= state->duty_cycle) 485 dev_warn(chip->dev, 486 ".apply didn't pick the best available duty cycle (requested: %llu/%llu, applied: %llu/%llu, possible: %llu/%llu)\n", 487 state->duty_cycle, state->period, 488 s2.duty_cycle, s2.period, 489 last->duty_cycle, last->period); 490 491 if (state->enabled && state->duty_cycle < s2.duty_cycle) 492 dev_warn(chip->dev, 493 ".apply is supposed to round down duty_cycle (requested: %llu/%llu, applied: %llu/%llu)\n", 494 state->duty_cycle, state->period, 495 s2.duty_cycle, s2.period); 496 497 if (!state->enabled && s2.enabled && s2.duty_cycle > 0) 498 dev_warn(chip->dev, 499 "requested disabled, but yielded enabled with duty > 0\n"); 500 501 /* reapply the state that the driver reported being configured. */ 502 err = chip->ops->apply(chip, pwm, &s1); 503 if (err) { 504 *last = s1; 505 dev_err(chip->dev, "failed to reapply current setting\n"); 506 return; 507 } 508 509 trace_pwm_apply(pwm, &s1); 510 511 chip->ops->get_state(chip, pwm, last); 512 trace_pwm_get(pwm, last); 513 514 /* reapplication of the current state should give an exact match */ 515 if (s1.enabled != last->enabled || 516 s1.polarity != last->polarity || 517 (s1.enabled && s1.period != last->period) || 518 (s1.enabled && s1.duty_cycle != last->duty_cycle)) { 519 dev_err(chip->dev, 520 ".apply is not idempotent (ena=%d pol=%d %llu/%llu) -> (ena=%d pol=%d %llu/%llu)\n", 521 s1.enabled, s1.polarity, s1.duty_cycle, s1.period, 522 last->enabled, last->polarity, last->duty_cycle, 523 last->period); 524 } 525 } 526 527 /** 528 * pwm_apply_state() - atomically apply a new state to a PWM device 529 * @pwm: PWM device 530 * @state: new state to apply 531 */ 532 int pwm_apply_state(struct pwm_device *pwm, const struct pwm_state *state) 533 { 534 struct pwm_chip *chip; 535 int err; 536 537 if (!pwm || !state || !state->period || 538 state->duty_cycle > state->period) 539 return -EINVAL; 540 541 chip = pwm->chip; 542 543 if (state->period == pwm->state.period && 544 state->duty_cycle == pwm->state.duty_cycle && 545 state->polarity == pwm->state.polarity && 546 state->enabled == pwm->state.enabled && 547 state->usage_power == pwm->state.usage_power) 548 return 0; 549 550 if (chip->ops->apply) { 551 err = chip->ops->apply(chip, pwm, state); 552 if (err) 553 return err; 554 555 trace_pwm_apply(pwm, state); 556 557 pwm->state = *state; 558 559 /* 560 * only do this after pwm->state was applied as some 561 * implementations of .get_state depend on this 562 */ 563 pwm_apply_state_debug(pwm, state); 564 } else { 565 /* 566 * FIXME: restore the initial state in case of error. 567 */ 568 if (state->polarity != pwm->state.polarity) { 569 if (!chip->ops->set_polarity) 570 return -EINVAL; 571 572 /* 573 * Changing the polarity of a running PWM is 574 * only allowed when the PWM driver implements 575 * ->apply(). 576 */ 577 if (pwm->state.enabled) { 578 chip->ops->disable(chip, pwm); 579 pwm->state.enabled = false; 580 } 581 582 err = chip->ops->set_polarity(chip, pwm, 583 state->polarity); 584 if (err) 585 return err; 586 587 pwm->state.polarity = state->polarity; 588 } 589 590 if (state->period != pwm->state.period || 591 state->duty_cycle != pwm->state.duty_cycle) { 592 err = chip->ops->config(pwm->chip, pwm, 593 state->duty_cycle, 594 state->period); 595 if (err) 596 return err; 597 598 pwm->state.duty_cycle = state->duty_cycle; 599 pwm->state.period = state->period; 600 } 601 602 if (state->enabled != pwm->state.enabled) { 603 if (state->enabled) { 604 err = chip->ops->enable(chip, pwm); 605 if (err) 606 return err; 607 } else { 608 chip->ops->disable(chip, pwm); 609 } 610 611 pwm->state.enabled = state->enabled; 612 } 613 } 614 615 return 0; 616 } 617 EXPORT_SYMBOL_GPL(pwm_apply_state); 618 619 /** 620 * pwm_capture() - capture and report a PWM signal 621 * @pwm: PWM device 622 * @result: structure to fill with capture result 623 * @timeout: time to wait, in milliseconds, before giving up on capture 624 * 625 * Returns: 0 on success or a negative error code on failure. 626 */ 627 int pwm_capture(struct pwm_device *pwm, struct pwm_capture *result, 628 unsigned long timeout) 629 { 630 int err; 631 632 if (!pwm || !pwm->chip->ops) 633 return -EINVAL; 634 635 if (!pwm->chip->ops->capture) 636 return -ENOSYS; 637 638 mutex_lock(&pwm_lock); 639 err = pwm->chip->ops->capture(pwm->chip, pwm, result, timeout); 640 mutex_unlock(&pwm_lock); 641 642 return err; 643 } 644 EXPORT_SYMBOL_GPL(pwm_capture); 645 646 /** 647 * pwm_adjust_config() - adjust the current PWM config to the PWM arguments 648 * @pwm: PWM device 649 * 650 * This function will adjust the PWM config to the PWM arguments provided 651 * by the DT or PWM lookup table. This is particularly useful to adapt 652 * the bootloader config to the Linux one. 653 */ 654 int pwm_adjust_config(struct pwm_device *pwm) 655 { 656 struct pwm_state state; 657 struct pwm_args pargs; 658 659 pwm_get_args(pwm, &pargs); 660 pwm_get_state(pwm, &state); 661 662 /* 663 * If the current period is zero it means that either the PWM driver 664 * does not support initial state retrieval or the PWM has not yet 665 * been configured. 666 * 667 * In either case, we setup the new period and polarity, and assign a 668 * duty cycle of 0. 669 */ 670 if (!state.period) { 671 state.duty_cycle = 0; 672 state.period = pargs.period; 673 state.polarity = pargs.polarity; 674 675 return pwm_apply_state(pwm, &state); 676 } 677 678 /* 679 * Adjust the PWM duty cycle/period based on the period value provided 680 * in PWM args. 681 */ 682 if (pargs.period != state.period) { 683 u64 dutycycle = (u64)state.duty_cycle * pargs.period; 684 685 do_div(dutycycle, state.period); 686 state.duty_cycle = dutycycle; 687 state.period = pargs.period; 688 } 689 690 /* 691 * If the polarity changed, we should also change the duty cycle. 692 */ 693 if (pargs.polarity != state.polarity) { 694 state.polarity = pargs.polarity; 695 state.duty_cycle = state.period - state.duty_cycle; 696 } 697 698 return pwm_apply_state(pwm, &state); 699 } 700 EXPORT_SYMBOL_GPL(pwm_adjust_config); 701 702 static struct pwm_chip *fwnode_to_pwmchip(struct fwnode_handle *fwnode) 703 { 704 struct pwm_chip *chip; 705 706 mutex_lock(&pwm_lock); 707 708 list_for_each_entry(chip, &pwm_chips, list) 709 if (chip->dev && dev_fwnode(chip->dev) == fwnode) { 710 mutex_unlock(&pwm_lock); 711 return chip; 712 } 713 714 mutex_unlock(&pwm_lock); 715 716 return ERR_PTR(-EPROBE_DEFER); 717 } 718 719 static struct device_link *pwm_device_link_add(struct device *dev, 720 struct pwm_device *pwm) 721 { 722 struct device_link *dl; 723 724 if (!dev) { 725 /* 726 * No device for the PWM consumer has been provided. It may 727 * impact the PM sequence ordering: the PWM supplier may get 728 * suspended before the consumer. 729 */ 730 dev_warn(pwm->chip->dev, 731 "No consumer device specified to create a link to\n"); 732 return NULL; 733 } 734 735 dl = device_link_add(dev, pwm->chip->dev, DL_FLAG_AUTOREMOVE_CONSUMER); 736 if (!dl) { 737 dev_err(dev, "failed to create device link to %s\n", 738 dev_name(pwm->chip->dev)); 739 return ERR_PTR(-EINVAL); 740 } 741 742 return dl; 743 } 744 745 /** 746 * of_pwm_get() - request a PWM via the PWM framework 747 * @dev: device for PWM consumer 748 * @np: device node to get the PWM from 749 * @con_id: consumer name 750 * 751 * Returns the PWM device parsed from the phandle and index specified in the 752 * "pwms" property of a device tree node or a negative error-code on failure. 753 * Values parsed from the device tree are stored in the returned PWM device 754 * object. 755 * 756 * If con_id is NULL, the first PWM device listed in the "pwms" property will 757 * be requested. Otherwise the "pwm-names" property is used to do a reverse 758 * lookup of the PWM index. This also means that the "pwm-names" property 759 * becomes mandatory for devices that look up the PWM device via the con_id 760 * parameter. 761 * 762 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 763 * error code on failure. 764 */ 765 struct pwm_device *of_pwm_get(struct device *dev, struct device_node *np, 766 const char *con_id) 767 { 768 struct pwm_device *pwm = NULL; 769 struct of_phandle_args args; 770 struct device_link *dl; 771 struct pwm_chip *pc; 772 int index = 0; 773 int err; 774 775 if (con_id) { 776 index = of_property_match_string(np, "pwm-names", con_id); 777 if (index < 0) 778 return ERR_PTR(index); 779 } 780 781 err = of_parse_phandle_with_args(np, "pwms", "#pwm-cells", index, 782 &args); 783 if (err) { 784 pr_err("%s(): can't parse \"pwms\" property\n", __func__); 785 return ERR_PTR(err); 786 } 787 788 pc = fwnode_to_pwmchip(of_fwnode_handle(args.np)); 789 if (IS_ERR(pc)) { 790 if (PTR_ERR(pc) != -EPROBE_DEFER) 791 pr_err("%s(): PWM chip not found\n", __func__); 792 793 pwm = ERR_CAST(pc); 794 goto put; 795 } 796 797 pwm = pc->of_xlate(pc, &args); 798 if (IS_ERR(pwm)) 799 goto put; 800 801 dl = pwm_device_link_add(dev, pwm); 802 if (IS_ERR(dl)) { 803 /* of_xlate ended up calling pwm_request_from_chip() */ 804 pwm_free(pwm); 805 pwm = ERR_CAST(dl); 806 goto put; 807 } 808 809 /* 810 * If a consumer name was not given, try to look it up from the 811 * "pwm-names" property if it exists. Otherwise use the name of 812 * the user device node. 813 */ 814 if (!con_id) { 815 err = of_property_read_string_index(np, "pwm-names", index, 816 &con_id); 817 if (err < 0) 818 con_id = np->name; 819 } 820 821 pwm->label = con_id; 822 823 put: 824 of_node_put(args.np); 825 826 return pwm; 827 } 828 EXPORT_SYMBOL_GPL(of_pwm_get); 829 830 /** 831 * acpi_pwm_get() - request a PWM via parsing "pwms" property in ACPI 832 * @fwnode: firmware node to get the "pwms" property from 833 * 834 * Returns the PWM device parsed from the fwnode and index specified in the 835 * "pwms" property or a negative error-code on failure. 836 * Values parsed from the device tree are stored in the returned PWM device 837 * object. 838 * 839 * This is analogous to of_pwm_get() except con_id is not yet supported. 840 * ACPI entries must look like 841 * Package () {"pwms", Package () 842 * { <PWM device reference>, <PWM index>, <PWM period> [, <PWM flags>]}} 843 * 844 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 845 * error code on failure. 846 */ 847 static struct pwm_device *acpi_pwm_get(const struct fwnode_handle *fwnode) 848 { 849 struct pwm_device *pwm; 850 struct fwnode_reference_args args; 851 struct pwm_chip *chip; 852 int ret; 853 854 memset(&args, 0, sizeof(args)); 855 856 ret = __acpi_node_get_property_reference(fwnode, "pwms", 0, 3, &args); 857 if (ret < 0) 858 return ERR_PTR(ret); 859 860 if (args.nargs < 2) 861 return ERR_PTR(-EPROTO); 862 863 chip = fwnode_to_pwmchip(args.fwnode); 864 if (IS_ERR(chip)) 865 return ERR_CAST(chip); 866 867 pwm = pwm_request_from_chip(chip, args.args[0], NULL); 868 if (IS_ERR(pwm)) 869 return pwm; 870 871 pwm->args.period = args.args[1]; 872 pwm->args.polarity = PWM_POLARITY_NORMAL; 873 874 if (args.nargs > 2 && args.args[2] & PWM_POLARITY_INVERTED) 875 pwm->args.polarity = PWM_POLARITY_INVERSED; 876 877 return pwm; 878 } 879 880 /** 881 * pwm_add_table() - register PWM device consumers 882 * @table: array of consumers to register 883 * @num: number of consumers in table 884 */ 885 void pwm_add_table(struct pwm_lookup *table, size_t num) 886 { 887 mutex_lock(&pwm_lookup_lock); 888 889 while (num--) { 890 list_add_tail(&table->list, &pwm_lookup_list); 891 table++; 892 } 893 894 mutex_unlock(&pwm_lookup_lock); 895 } 896 897 /** 898 * pwm_remove_table() - unregister PWM device consumers 899 * @table: array of consumers to unregister 900 * @num: number of consumers in table 901 */ 902 void pwm_remove_table(struct pwm_lookup *table, size_t num) 903 { 904 mutex_lock(&pwm_lookup_lock); 905 906 while (num--) { 907 list_del(&table->list); 908 table++; 909 } 910 911 mutex_unlock(&pwm_lookup_lock); 912 } 913 914 /** 915 * pwm_get() - look up and request a PWM device 916 * @dev: device for PWM consumer 917 * @con_id: consumer name 918 * 919 * Lookup is first attempted using DT. If the device was not instantiated from 920 * a device tree, a PWM chip and a relative index is looked up via a table 921 * supplied by board setup code (see pwm_add_table()). 922 * 923 * Once a PWM chip has been found the specified PWM device will be requested 924 * and is ready to be used. 925 * 926 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 927 * error code on failure. 928 */ 929 struct pwm_device *pwm_get(struct device *dev, const char *con_id) 930 { 931 const struct fwnode_handle *fwnode = dev ? dev_fwnode(dev) : NULL; 932 const char *dev_id = dev ? dev_name(dev) : NULL; 933 struct pwm_device *pwm; 934 struct pwm_chip *chip; 935 struct device_link *dl; 936 unsigned int best = 0; 937 struct pwm_lookup *p, *chosen = NULL; 938 unsigned int match; 939 int err; 940 941 /* look up via DT first */ 942 if (is_of_node(fwnode)) 943 return of_pwm_get(dev, to_of_node(fwnode), con_id); 944 945 /* then lookup via ACPI */ 946 if (is_acpi_node(fwnode)) { 947 pwm = acpi_pwm_get(fwnode); 948 if (!IS_ERR(pwm) || PTR_ERR(pwm) != -ENOENT) 949 return pwm; 950 } 951 952 /* 953 * We look up the provider in the static table typically provided by 954 * board setup code. We first try to lookup the consumer device by 955 * name. If the consumer device was passed in as NULL or if no match 956 * was found, we try to find the consumer by directly looking it up 957 * by name. 958 * 959 * If a match is found, the provider PWM chip is looked up by name 960 * and a PWM device is requested using the PWM device per-chip index. 961 * 962 * The lookup algorithm was shamelessly taken from the clock 963 * framework: 964 * 965 * We do slightly fuzzy matching here: 966 * An entry with a NULL ID is assumed to be a wildcard. 967 * If an entry has a device ID, it must match 968 * If an entry has a connection ID, it must match 969 * Then we take the most specific entry - with the following order 970 * of precedence: dev+con > dev only > con only. 971 */ 972 mutex_lock(&pwm_lookup_lock); 973 974 list_for_each_entry(p, &pwm_lookup_list, list) { 975 match = 0; 976 977 if (p->dev_id) { 978 if (!dev_id || strcmp(p->dev_id, dev_id)) 979 continue; 980 981 match += 2; 982 } 983 984 if (p->con_id) { 985 if (!con_id || strcmp(p->con_id, con_id)) 986 continue; 987 988 match += 1; 989 } 990 991 if (match > best) { 992 chosen = p; 993 994 if (match != 3) 995 best = match; 996 else 997 break; 998 } 999 } 1000 1001 mutex_unlock(&pwm_lookup_lock); 1002 1003 if (!chosen) 1004 return ERR_PTR(-ENODEV); 1005 1006 chip = pwmchip_find_by_name(chosen->provider); 1007 1008 /* 1009 * If the lookup entry specifies a module, load the module and retry 1010 * the PWM chip lookup. This can be used to work around driver load 1011 * ordering issues if driver's can't be made to properly support the 1012 * deferred probe mechanism. 1013 */ 1014 if (!chip && chosen->module) { 1015 err = request_module(chosen->module); 1016 if (err == 0) 1017 chip = pwmchip_find_by_name(chosen->provider); 1018 } 1019 1020 if (!chip) 1021 return ERR_PTR(-EPROBE_DEFER); 1022 1023 pwm = pwm_request_from_chip(chip, chosen->index, con_id ?: dev_id); 1024 if (IS_ERR(pwm)) 1025 return pwm; 1026 1027 dl = pwm_device_link_add(dev, pwm); 1028 if (IS_ERR(dl)) { 1029 pwm_free(pwm); 1030 return ERR_CAST(dl); 1031 } 1032 1033 pwm->args.period = chosen->period; 1034 pwm->args.polarity = chosen->polarity; 1035 1036 return pwm; 1037 } 1038 EXPORT_SYMBOL_GPL(pwm_get); 1039 1040 /** 1041 * pwm_put() - release a PWM device 1042 * @pwm: PWM device 1043 */ 1044 void pwm_put(struct pwm_device *pwm) 1045 { 1046 if (!pwm) 1047 return; 1048 1049 mutex_lock(&pwm_lock); 1050 1051 if (!test_and_clear_bit(PWMF_REQUESTED, &pwm->flags)) { 1052 pr_warn("PWM device already freed\n"); 1053 goto out; 1054 } 1055 1056 if (pwm->chip->ops->free) 1057 pwm->chip->ops->free(pwm->chip, pwm); 1058 1059 pwm_set_chip_data(pwm, NULL); 1060 pwm->label = NULL; 1061 1062 module_put(pwm->chip->ops->owner); 1063 out: 1064 mutex_unlock(&pwm_lock); 1065 } 1066 EXPORT_SYMBOL_GPL(pwm_put); 1067 1068 static void devm_pwm_release(void *pwm) 1069 { 1070 pwm_put(pwm); 1071 } 1072 1073 /** 1074 * devm_pwm_get() - resource managed pwm_get() 1075 * @dev: device for PWM consumer 1076 * @con_id: consumer name 1077 * 1078 * This function performs like pwm_get() but the acquired PWM device will 1079 * automatically be released on driver detach. 1080 * 1081 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 1082 * error code on failure. 1083 */ 1084 struct pwm_device *devm_pwm_get(struct device *dev, const char *con_id) 1085 { 1086 struct pwm_device *pwm; 1087 int ret; 1088 1089 pwm = pwm_get(dev, con_id); 1090 if (IS_ERR(pwm)) 1091 return pwm; 1092 1093 ret = devm_add_action_or_reset(dev, devm_pwm_release, pwm); 1094 if (ret) 1095 return ERR_PTR(ret); 1096 1097 return pwm; 1098 } 1099 EXPORT_SYMBOL_GPL(devm_pwm_get); 1100 1101 /** 1102 * devm_of_pwm_get() - resource managed of_pwm_get() 1103 * @dev: device for PWM consumer 1104 * @np: device node to get the PWM from 1105 * @con_id: consumer name 1106 * 1107 * This function performs like of_pwm_get() but the acquired PWM device will 1108 * automatically be released on driver detach. 1109 * 1110 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 1111 * error code on failure. 1112 */ 1113 struct pwm_device *devm_of_pwm_get(struct device *dev, struct device_node *np, 1114 const char *con_id) 1115 { 1116 struct pwm_device *pwm; 1117 int ret; 1118 1119 pwm = of_pwm_get(dev, np, con_id); 1120 if (IS_ERR(pwm)) 1121 return pwm; 1122 1123 ret = devm_add_action_or_reset(dev, devm_pwm_release, pwm); 1124 if (ret) 1125 return ERR_PTR(ret); 1126 1127 return pwm; 1128 } 1129 EXPORT_SYMBOL_GPL(devm_of_pwm_get); 1130 1131 /** 1132 * devm_fwnode_pwm_get() - request a resource managed PWM from firmware node 1133 * @dev: device for PWM consumer 1134 * @fwnode: firmware node to get the PWM from 1135 * @con_id: consumer name 1136 * 1137 * Returns the PWM device parsed from the firmware node. See of_pwm_get() and 1138 * acpi_pwm_get() for a detailed description. 1139 * 1140 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded 1141 * error code on failure. 1142 */ 1143 struct pwm_device *devm_fwnode_pwm_get(struct device *dev, 1144 struct fwnode_handle *fwnode, 1145 const char *con_id) 1146 { 1147 struct pwm_device *pwm = ERR_PTR(-ENODEV); 1148 int ret; 1149 1150 if (is_of_node(fwnode)) 1151 pwm = of_pwm_get(dev, to_of_node(fwnode), con_id); 1152 else if (is_acpi_node(fwnode)) 1153 pwm = acpi_pwm_get(fwnode); 1154 if (IS_ERR(pwm)) 1155 return pwm; 1156 1157 ret = devm_add_action_or_reset(dev, devm_pwm_release, pwm); 1158 if (ret) 1159 return ERR_PTR(ret); 1160 1161 return pwm; 1162 } 1163 EXPORT_SYMBOL_GPL(devm_fwnode_pwm_get); 1164 1165 #ifdef CONFIG_DEBUG_FS 1166 static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s) 1167 { 1168 unsigned int i; 1169 1170 for (i = 0; i < chip->npwm; i++) { 1171 struct pwm_device *pwm = &chip->pwms[i]; 1172 struct pwm_state state; 1173 1174 pwm_get_state(pwm, &state); 1175 1176 seq_printf(s, " pwm-%-3d (%-20.20s):", i, pwm->label); 1177 1178 if (test_bit(PWMF_REQUESTED, &pwm->flags)) 1179 seq_puts(s, " requested"); 1180 1181 if (state.enabled) 1182 seq_puts(s, " enabled"); 1183 1184 seq_printf(s, " period: %llu ns", state.period); 1185 seq_printf(s, " duty: %llu ns", state.duty_cycle); 1186 seq_printf(s, " polarity: %s", 1187 state.polarity ? "inverse" : "normal"); 1188 1189 if (state.usage_power) 1190 seq_puts(s, " usage_power"); 1191 1192 seq_puts(s, "\n"); 1193 } 1194 } 1195 1196 static void *pwm_seq_start(struct seq_file *s, loff_t *pos) 1197 { 1198 mutex_lock(&pwm_lock); 1199 s->private = ""; 1200 1201 return seq_list_start(&pwm_chips, *pos); 1202 } 1203 1204 static void *pwm_seq_next(struct seq_file *s, void *v, loff_t *pos) 1205 { 1206 s->private = "\n"; 1207 1208 return seq_list_next(v, &pwm_chips, pos); 1209 } 1210 1211 static void pwm_seq_stop(struct seq_file *s, void *v) 1212 { 1213 mutex_unlock(&pwm_lock); 1214 } 1215 1216 static int pwm_seq_show(struct seq_file *s, void *v) 1217 { 1218 struct pwm_chip *chip = list_entry(v, struct pwm_chip, list); 1219 1220 seq_printf(s, "%s%s/%s, %d PWM device%s\n", (char *)s->private, 1221 chip->dev->bus ? chip->dev->bus->name : "no-bus", 1222 dev_name(chip->dev), chip->npwm, 1223 (chip->npwm != 1) ? "s" : ""); 1224 1225 pwm_dbg_show(chip, s); 1226 1227 return 0; 1228 } 1229 1230 static const struct seq_operations pwm_debugfs_sops = { 1231 .start = pwm_seq_start, 1232 .next = pwm_seq_next, 1233 .stop = pwm_seq_stop, 1234 .show = pwm_seq_show, 1235 }; 1236 1237 DEFINE_SEQ_ATTRIBUTE(pwm_debugfs); 1238 1239 static int __init pwm_debugfs_init(void) 1240 { 1241 debugfs_create_file("pwm", S_IFREG | 0444, NULL, NULL, 1242 &pwm_debugfs_fops); 1243 1244 return 0; 1245 } 1246 subsys_initcall(pwm_debugfs_init); 1247 #endif /* CONFIG_DEBUG_FS */ 1248