Lines Matching refs:pwm
44 static struct pwm_device *pwm_to_device(unsigned int pwm) in pwm_to_device() argument
46 return radix_tree_lookup(&pwm_tree, pwm); in pwm_to_device()
49 static int alloc_pwms(int pwm, unsigned int count) in alloc_pwms() argument
54 if (pwm >= MAX_PWMS) in alloc_pwms()
57 if (pwm >= 0) in alloc_pwms()
58 from = pwm; in alloc_pwms()
63 if (pwm >= 0 && start != pwm) in alloc_pwms()
77 struct pwm_device *pwm = &chip->pwms[i]; in free_pwms() local
78 radix_tree_delete(&pwm_tree, pwm->pwm); in free_pwms()
110 static int pwm_device_request(struct pwm_device *pwm, const char *label) in pwm_device_request() argument
114 if (test_bit(PWMF_REQUESTED, &pwm->flags)) in pwm_device_request()
117 if (!try_module_get(pwm->chip->ops->owner)) in pwm_device_request()
120 if (pwm->chip->ops->request) { in pwm_device_request()
121 err = pwm->chip->ops->request(pwm->chip, pwm); in pwm_device_request()
123 module_put(pwm->chip->ops->owner); in pwm_device_request()
128 set_bit(PWMF_REQUESTED, &pwm->flags); in pwm_device_request()
129 pwm->label = label; in pwm_device_request()
137 struct pwm_device *pwm; in of_pwm_xlate_with_flags() local
145 pwm = pwm_request_from_chip(pc, args->args[0], NULL); in of_pwm_xlate_with_flags()
146 if (IS_ERR(pwm)) in of_pwm_xlate_with_flags()
147 return pwm; in of_pwm_xlate_with_flags()
149 pwm_set_period(pwm, args->args[1]); in of_pwm_xlate_with_flags()
152 pwm_set_polarity(pwm, PWM_POLARITY_INVERSED); in of_pwm_xlate_with_flags()
154 pwm_set_polarity(pwm, PWM_POLARITY_NORMAL); in of_pwm_xlate_with_flags()
156 return pwm; in of_pwm_xlate_with_flags()
163 struct pwm_device *pwm; in of_pwm_simple_xlate() local
171 pwm = pwm_request_from_chip(pc, args->args[0], NULL); in of_pwm_simple_xlate()
172 if (IS_ERR(pwm)) in of_pwm_simple_xlate()
173 return pwm; in of_pwm_simple_xlate()
175 pwm_set_period(pwm, args->args[1]); in of_pwm_simple_xlate()
177 return pwm; in of_pwm_simple_xlate()
206 int pwm_set_chip_data(struct pwm_device *pwm, void *data) in pwm_set_chip_data() argument
208 if (!pwm) in pwm_set_chip_data()
211 pwm->chip_data = data; in pwm_set_chip_data()
223 void *pwm_get_chip_data(struct pwm_device *pwm) in pwm_get_chip_data() argument
225 return pwm ? pwm->chip_data : NULL; in pwm_get_chip_data()
243 struct pwm_device *pwm; in pwmchip_add_with_polarity() local
257 chip->pwms = kzalloc(chip->npwm * sizeof(*pwm), GFP_KERNEL); in pwmchip_add_with_polarity()
266 pwm = &chip->pwms[i]; in pwmchip_add_with_polarity()
268 pwm->chip = chip; in pwmchip_add_with_polarity()
269 pwm->pwm = chip->base + i; in pwmchip_add_with_polarity()
270 pwm->hwpwm = i; in pwmchip_add_with_polarity()
271 pwm->polarity = polarity; in pwmchip_add_with_polarity()
272 mutex_init(&pwm->lock); in pwmchip_add_with_polarity()
274 radix_tree_insert(&pwm_tree, pwm->pwm, pwm); in pwmchip_add_with_polarity()
327 struct pwm_device *pwm = &chip->pwms[i]; in pwmchip_remove() local
329 if (test_bit(PWMF_REQUESTED, &pwm->flags)) { in pwmchip_remove()
360 struct pwm_device *pwm_request(int pwm, const char *label) in pwm_request() argument
365 if (pwm < 0 || pwm >= MAX_PWMS) in pwm_request()
370 dev = pwm_to_device(pwm); in pwm_request()
401 struct pwm_device *pwm; in pwm_request_from_chip() local
408 pwm = &chip->pwms[index]; in pwm_request_from_chip()
410 err = pwm_device_request(pwm, label); in pwm_request_from_chip()
412 pwm = ERR_PTR(err); in pwm_request_from_chip()
415 return pwm; in pwm_request_from_chip()
425 void pwm_free(struct pwm_device *pwm) in pwm_free() argument
427 pwm_put(pwm); in pwm_free()
439 int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) in pwm_config() argument
443 if (!pwm || duty_ns < 0 || period_ns <= 0 || duty_ns > period_ns) in pwm_config()
446 err = pwm->chip->ops->config(pwm->chip, pwm, duty_ns, period_ns); in pwm_config()
450 pwm->duty_cycle = duty_ns; in pwm_config()
451 pwm->period = period_ns; in pwm_config()
467 int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity) in pwm_set_polarity() argument
471 if (!pwm || !pwm->chip->ops) in pwm_set_polarity()
474 if (!pwm->chip->ops->set_polarity) in pwm_set_polarity()
477 mutex_lock(&pwm->lock); in pwm_set_polarity()
479 if (pwm_is_enabled(pwm)) { in pwm_set_polarity()
484 err = pwm->chip->ops->set_polarity(pwm->chip, pwm, polarity); in pwm_set_polarity()
488 pwm->polarity = polarity; in pwm_set_polarity()
491 mutex_unlock(&pwm->lock); in pwm_set_polarity()
502 int pwm_enable(struct pwm_device *pwm) in pwm_enable() argument
506 if (!pwm) in pwm_enable()
509 mutex_lock(&pwm->lock); in pwm_enable()
511 if (!test_and_set_bit(PWMF_ENABLED, &pwm->flags)) { in pwm_enable()
512 err = pwm->chip->ops->enable(pwm->chip, pwm); in pwm_enable()
514 clear_bit(PWMF_ENABLED, &pwm->flags); in pwm_enable()
517 mutex_unlock(&pwm->lock); in pwm_enable()
527 void pwm_disable(struct pwm_device *pwm) in pwm_disable() argument
529 if (pwm && test_and_clear_bit(PWMF_ENABLED, &pwm->flags)) in pwm_disable()
530 pwm->chip->ops->disable(pwm->chip, pwm); in pwm_disable()
572 struct pwm_device *pwm = NULL; in of_pwm_get() local
594 pwm = ERR_CAST(pc); in of_pwm_get()
601 pwm = ERR_PTR(-EINVAL); in of_pwm_get()
605 pwm = pc->of_xlate(pc, &args); in of_pwm_get()
606 if (IS_ERR(pwm)) in of_pwm_get()
621 pwm->label = con_id; in of_pwm_get()
626 return pwm; in of_pwm_get()
681 struct pwm_device *pwm = ERR_PTR(-EPROBE_DEFER); in pwm_get() local
742 pwm = ERR_PTR(-ENODEV); in pwm_get()
750 pwm = pwm_request_from_chip(chip, chosen->index, con_id ?: dev_id); in pwm_get()
751 if (IS_ERR(pwm)) in pwm_get()
754 pwm_set_period(pwm, chosen->period); in pwm_get()
755 pwm_set_polarity(pwm, chosen->polarity); in pwm_get()
759 return pwm; in pwm_get()
767 void pwm_put(struct pwm_device *pwm) in pwm_put() argument
769 if (!pwm) in pwm_put()
774 if (!test_and_clear_bit(PWMF_REQUESTED, &pwm->flags)) { in pwm_put()
779 if (pwm->chip->ops->free) in pwm_put()
780 pwm->chip->ops->free(pwm->chip, pwm); in pwm_put()
782 pwm->label = NULL; in pwm_put()
784 module_put(pwm->chip->ops->owner); in pwm_put()
808 struct pwm_device **ptr, *pwm; in devm_pwm_get() local
814 pwm = pwm_get(dev, con_id); in devm_pwm_get()
815 if (!IS_ERR(pwm)) { in devm_pwm_get()
816 *ptr = pwm; in devm_pwm_get()
822 return pwm; in devm_pwm_get()
841 struct pwm_device **ptr, *pwm; in devm_of_pwm_get() local
847 pwm = of_pwm_get(np, con_id); in devm_of_pwm_get()
848 if (!IS_ERR(pwm)) { in devm_of_pwm_get()
849 *ptr = pwm; in devm_of_pwm_get()
855 return pwm; in devm_of_pwm_get()
878 void devm_pwm_put(struct device *dev, struct pwm_device *pwm) in devm_pwm_put() argument
880 WARN_ON(devres_release(dev, devm_pwm_release, devm_pwm_match, pwm)); in devm_pwm_put()
890 bool pwm_can_sleep(struct pwm_device *pwm) in pwm_can_sleep() argument
892 return pwm->chip->can_sleep; in pwm_can_sleep()
902 struct pwm_device *pwm = &chip->pwms[i]; in pwm_dbg_show() local
904 seq_printf(s, " pwm-%-3d (%-20.20s):", i, pwm->label); in pwm_dbg_show()
906 if (test_bit(PWMF_REQUESTED, &pwm->flags)) in pwm_dbg_show()
909 if (pwm_is_enabled(pwm)) in pwm_dbg_show()