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