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