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