1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Generic pwmlib implementation
5 * Copyright (C) 2011 Sascha Hauer <s.hauer@pengutronix.de>
6 * Copyright (C) 2011-2012 Avionic Design GmbH
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>
21 #include <dt-bindings/pwm/pwm.h>
23 #define CREATE_TRACE_POINTS
24 #include <trace/events/pwm.h>
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
);
35 static struct pwm_device
*pwm_to_device(unsigned int pwm
)
37 return radix_tree_lookup(&pwm_tree
, pwm
);
40 static int alloc_pwms(int pwm
, unsigned int count
)
42 unsigned int from
= 0;
51 start
= bitmap_find_next_zero_area(allocated_pwms
, MAX_PWMS
, from
,
54 if (pwm
>= 0 && start
!= pwm
)
57 if (start
+ count
> MAX_PWMS
)
63 static void free_pwms(struct pwm_chip
*chip
)
67 for (i
= 0; i
< chip
->npwm
; i
++) {
68 struct pwm_device
*pwm
= &chip
->pwms
[i
];
70 radix_tree_delete(&pwm_tree
, pwm
->pwm
);
73 bitmap_clear(allocated_pwms
, chip
->base
, chip
->npwm
);
79 static struct pwm_chip
*pwmchip_find_by_name(const char *name
)
81 struct pwm_chip
*chip
;
86 mutex_lock(&pwm_lock
);
88 list_for_each_entry(chip
, &pwm_chips
, list
) {
89 const char *chip_name
= dev_name(chip
->dev
);
91 if (chip_name
&& strcmp(chip_name
, name
) == 0) {
92 mutex_unlock(&pwm_lock
);
97 mutex_unlock(&pwm_lock
);
102 static int pwm_device_request(struct pwm_device
*pwm
, const char *label
)
106 if (test_bit(PWMF_REQUESTED
, &pwm
->flags
))
109 if (!try_module_get(pwm
->chip
->ops
->owner
))
112 if (pwm
->chip
->ops
->request
) {
113 err
= pwm
->chip
->ops
->request(pwm
->chip
, pwm
);
115 module_put(pwm
->chip
->ops
->owner
);
120 if (pwm
->chip
->ops
->get_state
) {
121 pwm
->chip
->ops
->get_state(pwm
->chip
, pwm
, &pwm
->state
);
122 trace_pwm_get(pwm
, &pwm
->state
);
124 if (IS_ENABLED(CONFIG_PWM_DEBUG
))
125 pwm
->last
= pwm
->state
;
128 set_bit(PWMF_REQUESTED
, &pwm
->flags
);
135 of_pwm_xlate_with_flags(struct pwm_chip
*pc
, const struct of_phandle_args
*args
)
137 struct pwm_device
*pwm
;
139 /* check, whether the driver supports a third cell for flags */
140 if (pc
->of_pwm_n_cells
< 3)
141 return ERR_PTR(-EINVAL
);
143 /* flags in the third cell are optional */
144 if (args
->args_count
< 2)
145 return ERR_PTR(-EINVAL
);
147 if (args
->args
[0] >= pc
->npwm
)
148 return ERR_PTR(-EINVAL
);
150 pwm
= pwm_request_from_chip(pc
, args
->args
[0], NULL
);
154 pwm
->args
.period
= args
->args
[1];
155 pwm
->args
.polarity
= PWM_POLARITY_NORMAL
;
157 if (args
->args_count
> 2 && args
->args
[2] & PWM_POLARITY_INVERTED
)
158 pwm
->args
.polarity
= PWM_POLARITY_INVERSED
;
162 EXPORT_SYMBOL_GPL(of_pwm_xlate_with_flags
);
164 static struct pwm_device
*
165 of_pwm_simple_xlate(struct pwm_chip
*pc
, const struct of_phandle_args
*args
)
167 struct pwm_device
*pwm
;
169 /* sanity check driver support */
170 if (pc
->of_pwm_n_cells
< 2)
171 return ERR_PTR(-EINVAL
);
173 /* all cells are required */
174 if (args
->args_count
!= pc
->of_pwm_n_cells
)
175 return ERR_PTR(-EINVAL
);
177 if (args
->args
[0] >= pc
->npwm
)
178 return ERR_PTR(-EINVAL
);
180 pwm
= pwm_request_from_chip(pc
, args
->args
[0], NULL
);
184 pwm
->args
.period
= args
->args
[1];
189 static void of_pwmchip_add(struct pwm_chip
*chip
)
191 if (!chip
->dev
|| !chip
->dev
->of_node
)
194 if (!chip
->of_xlate
) {
195 chip
->of_xlate
= of_pwm_simple_xlate
;
196 chip
->of_pwm_n_cells
= 2;
199 of_node_get(chip
->dev
->of_node
);
202 static void of_pwmchip_remove(struct pwm_chip
*chip
)
205 of_node_put(chip
->dev
->of_node
);
209 * pwm_set_chip_data() - set private chip data for a PWM
211 * @data: pointer to chip-specific data
213 * Returns: 0 on success or a negative error code on failure.
215 int pwm_set_chip_data(struct pwm_device
*pwm
, void *data
)
220 pwm
->chip_data
= data
;
224 EXPORT_SYMBOL_GPL(pwm_set_chip_data
);
227 * pwm_get_chip_data() - get private chip data for a PWM
230 * Returns: A pointer to the chip-private data for the PWM device.
232 void *pwm_get_chip_data(struct pwm_device
*pwm
)
234 return pwm
? pwm
->chip_data
: NULL
;
236 EXPORT_SYMBOL_GPL(pwm_get_chip_data
);
238 static bool pwm_ops_check(const struct pwm_chip
*chip
)
241 const struct pwm_ops
*ops
= chip
->ops
;
243 /* driver supports legacy, non-atomic operation */
244 if (ops
->config
&& ops
->enable
&& ops
->disable
) {
245 if (IS_ENABLED(CONFIG_PWM_DEBUG
))
247 "Driver needs updating to atomic API\n");
255 if (IS_ENABLED(CONFIG_PWM_DEBUG
) && !ops
->get_state
)
257 "Please implement the .get_state() callback\n");
263 * pwmchip_add_with_polarity() - register a new PWM chip
264 * @chip: the PWM chip to add
265 * @polarity: initial polarity of PWM channels
267 * Register a new PWM chip. If chip->base < 0 then a dynamically assigned base
268 * will be used. The initial polarity for all channels is specified by the
269 * @polarity parameter.
271 * Returns: 0 on success or a negative error code on failure.
273 int pwmchip_add_with_polarity(struct pwm_chip
*chip
,
274 enum pwm_polarity polarity
)
276 struct pwm_device
*pwm
;
280 if (!chip
|| !chip
->dev
|| !chip
->ops
|| !chip
->npwm
)
283 if (!pwm_ops_check(chip
))
286 mutex_lock(&pwm_lock
);
288 ret
= alloc_pwms(chip
->base
, chip
->npwm
);
292 chip
->pwms
= kcalloc(chip
->npwm
, sizeof(*pwm
), GFP_KERNEL
);
300 for (i
= 0; i
< chip
->npwm
; i
++) {
301 pwm
= &chip
->pwms
[i
];
304 pwm
->pwm
= chip
->base
+ i
;
306 pwm
->state
.polarity
= polarity
;
308 radix_tree_insert(&pwm_tree
, pwm
->pwm
, pwm
);
311 bitmap_set(allocated_pwms
, chip
->base
, chip
->npwm
);
313 INIT_LIST_HEAD(&chip
->list
);
314 list_add(&chip
->list
, &pwm_chips
);
318 if (IS_ENABLED(CONFIG_OF
))
319 of_pwmchip_add(chip
);
322 mutex_unlock(&pwm_lock
);
325 pwmchip_sysfs_export(chip
);
329 EXPORT_SYMBOL_GPL(pwmchip_add_with_polarity
);
332 * pwmchip_add() - register a new PWM chip
333 * @chip: the PWM chip to add
335 * Register a new PWM chip. If chip->base < 0 then a dynamically assigned base
336 * will be used. The initial polarity for all channels is normal.
338 * Returns: 0 on success or a negative error code on failure.
340 int pwmchip_add(struct pwm_chip
*chip
)
342 return pwmchip_add_with_polarity(chip
, PWM_POLARITY_NORMAL
);
344 EXPORT_SYMBOL_GPL(pwmchip_add
);
347 * pwmchip_remove() - remove a PWM chip
348 * @chip: the PWM chip to remove
350 * Removes a PWM chip. This function may return busy if the PWM chip provides
351 * a PWM device that is still requested.
353 * Returns: 0 on success or a negative error code on failure.
355 int pwmchip_remove(struct pwm_chip
*chip
)
360 pwmchip_sysfs_unexport(chip
);
362 mutex_lock(&pwm_lock
);
364 for (i
= 0; i
< chip
->npwm
; i
++) {
365 struct pwm_device
*pwm
= &chip
->pwms
[i
];
367 if (test_bit(PWMF_REQUESTED
, &pwm
->flags
)) {
373 list_del_init(&chip
->list
);
375 if (IS_ENABLED(CONFIG_OF
))
376 of_pwmchip_remove(chip
);
381 mutex_unlock(&pwm_lock
);
384 EXPORT_SYMBOL_GPL(pwmchip_remove
);
387 * pwm_request() - request a PWM device
388 * @pwm: global PWM device index
389 * @label: PWM device label
391 * This function is deprecated, use pwm_get() instead.
393 * Returns: A pointer to a PWM device or an ERR_PTR()-encoded error code on
396 struct pwm_device
*pwm_request(int pwm
, const char *label
)
398 struct pwm_device
*dev
;
401 if (pwm
< 0 || pwm
>= MAX_PWMS
)
402 return ERR_PTR(-EINVAL
);
404 mutex_lock(&pwm_lock
);
406 dev
= pwm_to_device(pwm
);
408 dev
= ERR_PTR(-EPROBE_DEFER
);
412 err
= pwm_device_request(dev
, label
);
417 mutex_unlock(&pwm_lock
);
421 EXPORT_SYMBOL_GPL(pwm_request
);
424 * pwm_request_from_chip() - request a PWM device relative to a PWM chip
426 * @index: per-chip index of the PWM to request
427 * @label: a literal description string of this PWM
429 * Returns: A pointer to the PWM device at the given index of the given PWM
430 * chip. A negative error code is returned if the index is not valid for the
431 * specified PWM chip or if the PWM device cannot be requested.
433 struct pwm_device
*pwm_request_from_chip(struct pwm_chip
*chip
,
437 struct pwm_device
*pwm
;
440 if (!chip
|| index
>= chip
->npwm
)
441 return ERR_PTR(-EINVAL
);
443 mutex_lock(&pwm_lock
);
444 pwm
= &chip
->pwms
[index
];
446 err
= pwm_device_request(pwm
, label
);
450 mutex_unlock(&pwm_lock
);
453 EXPORT_SYMBOL_GPL(pwm_request_from_chip
);
456 * pwm_free() - free a PWM device
459 * This function is deprecated, use pwm_put() instead.
461 void pwm_free(struct pwm_device
*pwm
)
465 EXPORT_SYMBOL_GPL(pwm_free
);
467 static void pwm_apply_state_debug(struct pwm_device
*pwm
,
468 const struct pwm_state
*state
)
470 struct pwm_state
*last
= &pwm
->last
;
471 struct pwm_chip
*chip
= pwm
->chip
;
472 struct pwm_state s1
, s2
;
475 if (!IS_ENABLED(CONFIG_PWM_DEBUG
))
478 /* No reasonable diagnosis possible without .get_state() */
479 if (!chip
->ops
->get_state
)
483 * *state was just applied. Read out the hardware state and do some
487 chip
->ops
->get_state(chip
, pwm
, &s1
);
488 trace_pwm_get(pwm
, &s1
);
491 * The lowlevel driver either ignored .polarity (which is a bug) or as
492 * best effort inverted .polarity and fixed .duty_cycle respectively.
493 * Undo this inversion and fixup for further tests.
495 if (s1
.enabled
&& s1
.polarity
!= state
->polarity
) {
496 s2
.polarity
= state
->polarity
;
497 s2
.duty_cycle
= s1
.period
- s1
.duty_cycle
;
498 s2
.period
= s1
.period
;
499 s2
.enabled
= s1
.enabled
;
504 if (s2
.polarity
!= state
->polarity
&&
505 state
->duty_cycle
< state
->period
)
506 dev_warn(chip
->dev
, ".apply ignored .polarity\n");
508 if (state
->enabled
&&
509 last
->polarity
== state
->polarity
&&
510 last
->period
> s2
.period
&&
511 last
->period
<= state
->period
)
513 ".apply didn't pick the best available period (requested: %u, applied: %u, possible: %u)\n",
514 state
->period
, s2
.period
, last
->period
);
516 if (state
->enabled
&& state
->period
< s2
.period
)
518 ".apply is supposed to round down period (requested: %u, applied: %u)\n",
519 state
->period
, s2
.period
);
521 if (state
->enabled
&&
522 last
->polarity
== state
->polarity
&&
523 last
->period
== s2
.period
&&
524 last
->duty_cycle
> s2
.duty_cycle
&&
525 last
->duty_cycle
<= state
->duty_cycle
)
527 ".apply didn't pick the best available duty cycle (requested: %u/%u, applied: %u/%u, possible: %u/%u)\n",
528 state
->duty_cycle
, state
->period
,
529 s2
.duty_cycle
, s2
.period
,
530 last
->duty_cycle
, last
->period
);
532 if (state
->enabled
&& state
->duty_cycle
< s2
.duty_cycle
)
534 ".apply is supposed to round down duty_cycle (requested: %u/%u, applied: %u/%u)\n",
535 state
->duty_cycle
, state
->period
,
536 s2
.duty_cycle
, s2
.period
);
538 if (!state
->enabled
&& s2
.enabled
&& s2
.duty_cycle
> 0)
540 "requested disabled, but yielded enabled with duty > 0");
542 /* reapply the state that the driver reported being configured. */
543 err
= chip
->ops
->apply(chip
, pwm
, &s1
);
546 dev_err(chip
->dev
, "failed to reapply current setting\n");
550 trace_pwm_apply(pwm
, &s1
);
552 chip
->ops
->get_state(chip
, pwm
, last
);
553 trace_pwm_get(pwm
, last
);
555 /* reapplication of the current state should give an exact match */
556 if (s1
.enabled
!= last
->enabled
||
557 s1
.polarity
!= last
->polarity
||
558 (s1
.enabled
&& s1
.period
!= last
->period
) ||
559 (s1
.enabled
&& s1
.duty_cycle
!= last
->duty_cycle
)) {
561 ".apply is not idempotent (ena=%d pol=%d %u/%u) -> (ena=%d pol=%d %u/%u)\n",
562 s1
.enabled
, s1
.polarity
, s1
.duty_cycle
, s1
.period
,
563 last
->enabled
, last
->polarity
, last
->duty_cycle
,
569 * pwm_apply_state() - atomically apply a new state to a PWM device
571 * @state: new state to apply
573 int pwm_apply_state(struct pwm_device
*pwm
, const struct pwm_state
*state
)
575 struct pwm_chip
*chip
;
578 if (!pwm
|| !state
|| !state
->period
||
579 state
->duty_cycle
> state
->period
)
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
)
590 if (chip
->ops
->apply
) {
591 err
= chip
->ops
->apply(chip
, pwm
, state
);
595 trace_pwm_apply(pwm
, state
);
600 * only do this after pwm->state was applied as some
601 * implementations of .get_state depend on this
603 pwm_apply_state_debug(pwm
, state
);
606 * FIXME: restore the initial state in case of error.
608 if (state
->polarity
!= pwm
->state
.polarity
) {
609 if (!chip
->ops
->set_polarity
)
613 * Changing the polarity of a running PWM is
614 * only allowed when the PWM driver implements
617 if (pwm
->state
.enabled
) {
618 chip
->ops
->disable(chip
, pwm
);
619 pwm
->state
.enabled
= false;
622 err
= chip
->ops
->set_polarity(chip
, pwm
,
627 pwm
->state
.polarity
= state
->polarity
;
630 if (state
->period
!= pwm
->state
.period
||
631 state
->duty_cycle
!= pwm
->state
.duty_cycle
) {
632 err
= chip
->ops
->config(pwm
->chip
, pwm
,
638 pwm
->state
.duty_cycle
= state
->duty_cycle
;
639 pwm
->state
.period
= state
->period
;
642 if (state
->enabled
!= pwm
->state
.enabled
) {
643 if (state
->enabled
) {
644 err
= chip
->ops
->enable(chip
, pwm
);
648 chip
->ops
->disable(chip
, pwm
);
651 pwm
->state
.enabled
= state
->enabled
;
657 EXPORT_SYMBOL_GPL(pwm_apply_state
);
660 * pwm_capture() - capture and report a PWM signal
662 * @result: structure to fill with capture result
663 * @timeout: time to wait, in milliseconds, before giving up on capture
665 * Returns: 0 on success or a negative error code on failure.
667 int pwm_capture(struct pwm_device
*pwm
, struct pwm_capture
*result
,
668 unsigned long timeout
)
672 if (!pwm
|| !pwm
->chip
->ops
)
675 if (!pwm
->chip
->ops
->capture
)
678 mutex_lock(&pwm_lock
);
679 err
= pwm
->chip
->ops
->capture(pwm
->chip
, pwm
, result
, timeout
);
680 mutex_unlock(&pwm_lock
);
684 EXPORT_SYMBOL_GPL(pwm_capture
);
687 * pwm_adjust_config() - adjust the current PWM config to the PWM arguments
690 * This function will adjust the PWM config to the PWM arguments provided
691 * by the DT or PWM lookup table. This is particularly useful to adapt
692 * the bootloader config to the Linux one.
694 int pwm_adjust_config(struct pwm_device
*pwm
)
696 struct pwm_state state
;
697 struct pwm_args pargs
;
699 pwm_get_args(pwm
, &pargs
);
700 pwm_get_state(pwm
, &state
);
703 * If the current period is zero it means that either the PWM driver
704 * does not support initial state retrieval or the PWM has not yet
707 * In either case, we setup the new period and polarity, and assign a
711 state
.duty_cycle
= 0;
712 state
.period
= pargs
.period
;
713 state
.polarity
= pargs
.polarity
;
715 return pwm_apply_state(pwm
, &state
);
719 * Adjust the PWM duty cycle/period based on the period value provided
722 if (pargs
.period
!= state
.period
) {
723 u64 dutycycle
= (u64
)state
.duty_cycle
* pargs
.period
;
725 do_div(dutycycle
, state
.period
);
726 state
.duty_cycle
= dutycycle
;
727 state
.period
= pargs
.period
;
731 * If the polarity changed, we should also change the duty cycle.
733 if (pargs
.polarity
!= state
.polarity
) {
734 state
.polarity
= pargs
.polarity
;
735 state
.duty_cycle
= state
.period
- state
.duty_cycle
;
738 return pwm_apply_state(pwm
, &state
);
740 EXPORT_SYMBOL_GPL(pwm_adjust_config
);
742 static struct pwm_chip
*of_node_to_pwmchip(struct device_node
*np
)
744 struct pwm_chip
*chip
;
746 mutex_lock(&pwm_lock
);
748 list_for_each_entry(chip
, &pwm_chips
, list
)
749 if (chip
->dev
&& chip
->dev
->of_node
== np
) {
750 mutex_unlock(&pwm_lock
);
754 mutex_unlock(&pwm_lock
);
756 return ERR_PTR(-EPROBE_DEFER
);
759 static struct device_link
*pwm_device_link_add(struct device
*dev
,
760 struct pwm_device
*pwm
)
762 struct device_link
*dl
;
766 * No device for the PWM consumer has been provided. It may
767 * impact the PM sequence ordering: the PWM supplier may get
768 * suspended before the consumer.
770 dev_warn(pwm
->chip
->dev
,
771 "No consumer device specified to create a link to\n");
775 dl
= device_link_add(dev
, pwm
->chip
->dev
, DL_FLAG_AUTOREMOVE_CONSUMER
);
777 dev_err(dev
, "failed to create device link to %s\n",
778 dev_name(pwm
->chip
->dev
));
779 return ERR_PTR(-EINVAL
);
786 * of_pwm_get() - request a PWM via the PWM framework
787 * @dev: device for PWM consumer
788 * @np: device node to get the PWM from
789 * @con_id: consumer name
791 * Returns the PWM device parsed from the phandle and index specified in the
792 * "pwms" property of a device tree node or a negative error-code on failure.
793 * Values parsed from the device tree are stored in the returned PWM device
796 * If con_id is NULL, the first PWM device listed in the "pwms" property will
797 * be requested. Otherwise the "pwm-names" property is used to do a reverse
798 * lookup of the PWM index. This also means that the "pwm-names" property
799 * becomes mandatory for devices that look up the PWM device via the con_id
802 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
803 * error code on failure.
805 struct pwm_device
*of_pwm_get(struct device
*dev
, struct device_node
*np
,
808 struct pwm_device
*pwm
= NULL
;
809 struct of_phandle_args args
;
810 struct device_link
*dl
;
816 index
= of_property_match_string(np
, "pwm-names", con_id
);
818 return ERR_PTR(index
);
821 err
= of_parse_phandle_with_args(np
, "pwms", "#pwm-cells", index
,
824 pr_err("%s(): can't parse \"pwms\" property\n", __func__
);
828 pc
= of_node_to_pwmchip(args
.np
);
830 if (PTR_ERR(pc
) != -EPROBE_DEFER
)
831 pr_err("%s(): PWM chip not found\n", __func__
);
837 pwm
= pc
->of_xlate(pc
, &args
);
841 dl
= pwm_device_link_add(dev
, pwm
);
843 /* of_xlate ended up calling pwm_request_from_chip() */
850 * If a consumer name was not given, try to look it up from the
851 * "pwm-names" property if it exists. Otherwise use the name of
852 * the user device node.
855 err
= of_property_read_string_index(np
, "pwm-names", index
,
864 of_node_put(args
.np
);
868 EXPORT_SYMBOL_GPL(of_pwm_get
);
870 #if IS_ENABLED(CONFIG_ACPI)
871 static struct pwm_chip
*device_to_pwmchip(struct device
*dev
)
873 struct pwm_chip
*chip
;
875 mutex_lock(&pwm_lock
);
877 list_for_each_entry(chip
, &pwm_chips
, list
) {
878 struct acpi_device
*adev
= ACPI_COMPANION(chip
->dev
);
880 if ((chip
->dev
== dev
) || (adev
&& &adev
->dev
== dev
)) {
881 mutex_unlock(&pwm_lock
);
886 mutex_unlock(&pwm_lock
);
888 return ERR_PTR(-EPROBE_DEFER
);
893 * acpi_pwm_get() - request a PWM via parsing "pwms" property in ACPI
894 * @fwnode: firmware node to get the "pwm" property from
896 * Returns the PWM device parsed from the fwnode and index specified in the
897 * "pwms" property or a negative error-code on failure.
898 * Values parsed from the device tree are stored in the returned PWM device
901 * This is analogous to of_pwm_get() except con_id is not yet supported.
902 * ACPI entries must look like
903 * Package () {"pwms", Package ()
904 * { <PWM device reference>, <PWM index>, <PWM period> [, <PWM flags>]}}
906 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
907 * error code on failure.
909 static struct pwm_device
*acpi_pwm_get(struct fwnode_handle
*fwnode
)
911 struct pwm_device
*pwm
= ERR_PTR(-ENODEV
);
912 #if IS_ENABLED(CONFIG_ACPI)
913 struct fwnode_reference_args args
;
914 struct acpi_device
*acpi
;
915 struct pwm_chip
*chip
;
918 memset(&args
, 0, sizeof(args
));
920 ret
= __acpi_node_get_property_reference(fwnode
, "pwms", 0, 3, &args
);
924 acpi
= to_acpi_device_node(args
.fwnode
);
926 return ERR_PTR(-EINVAL
);
929 return ERR_PTR(-EPROTO
);
931 chip
= device_to_pwmchip(&acpi
->dev
);
933 return ERR_CAST(chip
);
935 pwm
= pwm_request_from_chip(chip
, args
.args
[0], NULL
);
939 pwm
->args
.period
= args
.args
[1];
940 pwm
->args
.polarity
= PWM_POLARITY_NORMAL
;
942 if (args
.nargs
> 2 && args
.args
[2] & PWM_POLARITY_INVERTED
)
943 pwm
->args
.polarity
= PWM_POLARITY_INVERSED
;
950 * pwm_add_table() - register PWM device consumers
951 * @table: array of consumers to register
952 * @num: number of consumers in table
954 void pwm_add_table(struct pwm_lookup
*table
, size_t num
)
956 mutex_lock(&pwm_lookup_lock
);
959 list_add_tail(&table
->list
, &pwm_lookup_list
);
963 mutex_unlock(&pwm_lookup_lock
);
967 * pwm_remove_table() - unregister PWM device consumers
968 * @table: array of consumers to unregister
969 * @num: number of consumers in table
971 void pwm_remove_table(struct pwm_lookup
*table
, size_t num
)
973 mutex_lock(&pwm_lookup_lock
);
976 list_del(&table
->list
);
980 mutex_unlock(&pwm_lookup_lock
);
984 * pwm_get() - look up and request a PWM device
985 * @dev: device for PWM consumer
986 * @con_id: consumer name
988 * Lookup is first attempted using DT. If the device was not instantiated from
989 * a device tree, a PWM chip and a relative index is looked up via a table
990 * supplied by board setup code (see pwm_add_table()).
992 * Once a PWM chip has been found the specified PWM device will be requested
993 * and is ready to be used.
995 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
996 * error code on failure.
998 struct pwm_device
*pwm_get(struct device
*dev
, const char *con_id
)
1000 const char *dev_id
= dev
? dev_name(dev
) : NULL
;
1001 struct pwm_device
*pwm
;
1002 struct pwm_chip
*chip
;
1003 struct device_link
*dl
;
1004 unsigned int best
= 0;
1005 struct pwm_lookup
*p
, *chosen
= NULL
;
1009 /* look up via DT first */
1010 if (IS_ENABLED(CONFIG_OF
) && dev
&& dev
->of_node
)
1011 return of_pwm_get(dev
, dev
->of_node
, con_id
);
1013 /* then lookup via ACPI */
1014 if (dev
&& is_acpi_node(dev
->fwnode
)) {
1015 pwm
= acpi_pwm_get(dev
->fwnode
);
1016 if (!IS_ERR(pwm
) || PTR_ERR(pwm
) != -ENOENT
)
1021 * We look up the provider in the static table typically provided by
1022 * board setup code. We first try to lookup the consumer device by
1023 * name. If the consumer device was passed in as NULL or if no match
1024 * was found, we try to find the consumer by directly looking it up
1027 * If a match is found, the provider PWM chip is looked up by name
1028 * and a PWM device is requested using the PWM device per-chip index.
1030 * The lookup algorithm was shamelessly taken from the clock
1033 * We do slightly fuzzy matching here:
1034 * An entry with a NULL ID is assumed to be a wildcard.
1035 * If an entry has a device ID, it must match
1036 * If an entry has a connection ID, it must match
1037 * Then we take the most specific entry - with the following order
1038 * of precedence: dev+con > dev only > con only.
1040 mutex_lock(&pwm_lookup_lock
);
1042 list_for_each_entry(p
, &pwm_lookup_list
, list
) {
1046 if (!dev_id
|| strcmp(p
->dev_id
, dev_id
))
1053 if (!con_id
|| strcmp(p
->con_id
, con_id
))
1069 mutex_unlock(&pwm_lookup_lock
);
1072 return ERR_PTR(-ENODEV
);
1074 chip
= pwmchip_find_by_name(chosen
->provider
);
1077 * If the lookup entry specifies a module, load the module and retry
1078 * the PWM chip lookup. This can be used to work around driver load
1079 * ordering issues if driver's can't be made to properly support the
1080 * deferred probe mechanism.
1082 if (!chip
&& chosen
->module
) {
1083 err
= request_module(chosen
->module
);
1085 chip
= pwmchip_find_by_name(chosen
->provider
);
1089 return ERR_PTR(-EPROBE_DEFER
);
1091 pwm
= pwm_request_from_chip(chip
, chosen
->index
, con_id
?: dev_id
);
1095 dl
= pwm_device_link_add(dev
, pwm
);
1098 return ERR_CAST(dl
);
1101 pwm
->args
.period
= chosen
->period
;
1102 pwm
->args
.polarity
= chosen
->polarity
;
1106 EXPORT_SYMBOL_GPL(pwm_get
);
1109 * pwm_put() - release a PWM device
1112 void pwm_put(struct pwm_device
*pwm
)
1117 mutex_lock(&pwm_lock
);
1119 if (!test_and_clear_bit(PWMF_REQUESTED
, &pwm
->flags
)) {
1120 pr_warn("PWM device already freed\n");
1124 if (pwm
->chip
->ops
->free
)
1125 pwm
->chip
->ops
->free(pwm
->chip
, pwm
);
1127 pwm_set_chip_data(pwm
, NULL
);
1130 module_put(pwm
->chip
->ops
->owner
);
1132 mutex_unlock(&pwm_lock
);
1134 EXPORT_SYMBOL_GPL(pwm_put
);
1136 static void devm_pwm_release(struct device
*dev
, void *res
)
1138 pwm_put(*(struct pwm_device
**)res
);
1142 * devm_pwm_get() - resource managed pwm_get()
1143 * @dev: device for PWM consumer
1144 * @con_id: consumer name
1146 * This function performs like pwm_get() but the acquired PWM device will
1147 * automatically be released on driver detach.
1149 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
1150 * error code on failure.
1152 struct pwm_device
*devm_pwm_get(struct device
*dev
, const char *con_id
)
1154 struct pwm_device
**ptr
, *pwm
;
1156 ptr
= devres_alloc(devm_pwm_release
, sizeof(*ptr
), GFP_KERNEL
);
1158 return ERR_PTR(-ENOMEM
);
1160 pwm
= pwm_get(dev
, con_id
);
1163 devres_add(dev
, ptr
);
1170 EXPORT_SYMBOL_GPL(devm_pwm_get
);
1173 * devm_of_pwm_get() - resource managed of_pwm_get()
1174 * @dev: device for PWM consumer
1175 * @np: device node to get the PWM from
1176 * @con_id: consumer name
1178 * This function performs like of_pwm_get() but the acquired PWM device will
1179 * automatically be released on driver detach.
1181 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
1182 * error code on failure.
1184 struct pwm_device
*devm_of_pwm_get(struct device
*dev
, struct device_node
*np
,
1187 struct pwm_device
**ptr
, *pwm
;
1189 ptr
= devres_alloc(devm_pwm_release
, sizeof(*ptr
), GFP_KERNEL
);
1191 return ERR_PTR(-ENOMEM
);
1193 pwm
= of_pwm_get(dev
, np
, con_id
);
1196 devres_add(dev
, ptr
);
1203 EXPORT_SYMBOL_GPL(devm_of_pwm_get
);
1206 * devm_fwnode_pwm_get() - request a resource managed PWM from firmware node
1207 * @dev: device for PWM consumer
1208 * @fwnode: firmware node to get the PWM from
1209 * @con_id: consumer name
1211 * Returns the PWM device parsed from the firmware node. See of_pwm_get() and
1212 * acpi_pwm_get() for a detailed description.
1214 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
1215 * error code on failure.
1217 struct pwm_device
*devm_fwnode_pwm_get(struct device
*dev
,
1218 struct fwnode_handle
*fwnode
,
1221 struct pwm_device
**ptr
, *pwm
= ERR_PTR(-ENODEV
);
1223 ptr
= devres_alloc(devm_pwm_release
, sizeof(*ptr
), GFP_KERNEL
);
1225 return ERR_PTR(-ENOMEM
);
1227 if (is_of_node(fwnode
))
1228 pwm
= of_pwm_get(dev
, to_of_node(fwnode
), con_id
);
1229 else if (is_acpi_node(fwnode
))
1230 pwm
= acpi_pwm_get(fwnode
);
1234 devres_add(dev
, ptr
);
1241 EXPORT_SYMBOL_GPL(devm_fwnode_pwm_get
);
1243 static int devm_pwm_match(struct device
*dev
, void *res
, void *data
)
1245 struct pwm_device
**p
= res
;
1247 if (WARN_ON(!p
|| !*p
))
1254 * devm_pwm_put() - resource managed pwm_put()
1255 * @dev: device for PWM consumer
1258 * Release a PWM previously allocated using devm_pwm_get(). Calling this
1259 * function is usually not needed because devm-allocated resources are
1260 * automatically released on driver detach.
1262 void devm_pwm_put(struct device
*dev
, struct pwm_device
*pwm
)
1264 WARN_ON(devres_release(dev
, devm_pwm_release
, devm_pwm_match
, pwm
));
1266 EXPORT_SYMBOL_GPL(devm_pwm_put
);
1268 #ifdef CONFIG_DEBUG_FS
1269 static void pwm_dbg_show(struct pwm_chip
*chip
, struct seq_file
*s
)
1273 for (i
= 0; i
< chip
->npwm
; i
++) {
1274 struct pwm_device
*pwm
= &chip
->pwms
[i
];
1275 struct pwm_state state
;
1277 pwm_get_state(pwm
, &state
);
1279 seq_printf(s
, " pwm-%-3d (%-20.20s):", i
, pwm
->label
);
1281 if (test_bit(PWMF_REQUESTED
, &pwm
->flags
))
1282 seq_puts(s
, " requested");
1285 seq_puts(s
, " enabled");
1287 seq_printf(s
, " period: %u ns", state
.period
);
1288 seq_printf(s
, " duty: %u ns", state
.duty_cycle
);
1289 seq_printf(s
, " polarity: %s",
1290 state
.polarity
? "inverse" : "normal");
1296 static void *pwm_seq_start(struct seq_file
*s
, loff_t
*pos
)
1298 mutex_lock(&pwm_lock
);
1301 return seq_list_start(&pwm_chips
, *pos
);
1304 static void *pwm_seq_next(struct seq_file
*s
, void *v
, loff_t
*pos
)
1308 return seq_list_next(v
, &pwm_chips
, pos
);
1311 static void pwm_seq_stop(struct seq_file
*s
, void *v
)
1313 mutex_unlock(&pwm_lock
);
1316 static int pwm_seq_show(struct seq_file
*s
, void *v
)
1318 struct pwm_chip
*chip
= list_entry(v
, struct pwm_chip
, list
);
1320 seq_printf(s
, "%s%s/%s, %d PWM device%s\n", (char *)s
->private,
1321 chip
->dev
->bus
? chip
->dev
->bus
->name
: "no-bus",
1322 dev_name(chip
->dev
), chip
->npwm
,
1323 (chip
->npwm
!= 1) ? "s" : "");
1325 pwm_dbg_show(chip
, s
);
1330 static const struct seq_operations pwm_seq_ops
= {
1331 .start
= pwm_seq_start
,
1332 .next
= pwm_seq_next
,
1333 .stop
= pwm_seq_stop
,
1334 .show
= pwm_seq_show
,
1337 static int pwm_seq_open(struct inode
*inode
, struct file
*file
)
1339 return seq_open(file
, &pwm_seq_ops
);
1342 static const struct file_operations pwm_debugfs_ops
= {
1343 .owner
= THIS_MODULE
,
1344 .open
= pwm_seq_open
,
1346 .llseek
= seq_lseek
,
1347 .release
= seq_release
,
1350 static int __init
pwm_debugfs_init(void)
1352 debugfs_create_file("pwm", S_IFREG
| S_IRUGO
, NULL
, NULL
,
1357 subsys_initcall(pwm_debugfs_init
);
1358 #endif /* CONFIG_DEBUG_FS */