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