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()
204 int pwm_set_chip_data(struct pwm_device *pwm, void *data) in pwm_set_chip_data() argument
206 if (!pwm) in pwm_set_chip_data()
209 pwm->chip_data = data; in pwm_set_chip_data()
219 void *pwm_get_chip_data(struct pwm_device *pwm) in pwm_get_chip_data() argument
221 return pwm ? pwm->chip_data : NULL; in pwm_get_chip_data()
234 struct pwm_device *pwm; in pwmchip_add() local
248 chip->pwms = kzalloc(chip->npwm * sizeof(*pwm), GFP_KERNEL); in pwmchip_add()
257 pwm = &chip->pwms[i]; in pwmchip_add()
259 pwm->chip = chip; in pwmchip_add()
260 pwm->pwm = chip->base + i; in pwmchip_add()
261 pwm->hwpwm = i; in pwmchip_add()
263 radix_tree_insert(&pwm_tree, pwm->pwm, pwm); in pwmchip_add()
299 struct pwm_device *pwm = &chip->pwms[i]; in pwmchip_remove() local
301 if (test_bit(PWMF_REQUESTED, &pwm->flags)) { in pwmchip_remove()
329 struct pwm_device *pwm_request(int pwm, const char *label) in pwm_request() argument
334 if (pwm < 0 || pwm >= MAX_PWMS) in pwm_request()
339 dev = pwm_to_device(pwm); in pwm_request()
370 struct pwm_device *pwm; in pwm_request_from_chip() local
377 pwm = &chip->pwms[index]; in pwm_request_from_chip()
379 err = pwm_device_request(pwm, label); in pwm_request_from_chip()
381 pwm = ERR_PTR(err); in pwm_request_from_chip()
384 return pwm; in pwm_request_from_chip()
394 void pwm_free(struct pwm_device *pwm) in pwm_free() argument
396 pwm_put(pwm); in pwm_free()
406 int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) in pwm_config() argument
410 if (!pwm || duty_ns < 0 || period_ns <= 0 || duty_ns > period_ns) in pwm_config()
413 err = pwm->chip->ops->config(pwm->chip, pwm, duty_ns, period_ns); in pwm_config()
417 pwm->duty_cycle = duty_ns; in pwm_config()
418 pwm->period = period_ns; in pwm_config()
431 int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity) in pwm_set_polarity() argument
435 if (!pwm || !pwm->chip->ops) in pwm_set_polarity()
438 if (!pwm->chip->ops->set_polarity) in pwm_set_polarity()
441 if (test_bit(PWMF_ENABLED, &pwm->flags)) in pwm_set_polarity()
444 err = pwm->chip->ops->set_polarity(pwm->chip, pwm, polarity); in pwm_set_polarity()
448 pwm->polarity = polarity; in pwm_set_polarity()
458 int pwm_enable(struct pwm_device *pwm) in pwm_enable() argument
460 if (pwm && !test_and_set_bit(PWMF_ENABLED, &pwm->flags)) in pwm_enable()
461 return pwm->chip->ops->enable(pwm->chip, pwm); in pwm_enable()
463 return pwm ? 0 : -EINVAL; in pwm_enable()
471 void pwm_disable(struct pwm_device *pwm) in pwm_disable() argument
473 if (pwm && test_and_clear_bit(PWMF_ENABLED, &pwm->flags)) in pwm_disable()
474 pwm->chip->ops->disable(pwm->chip, pwm); in pwm_disable()
513 struct pwm_device *pwm = NULL; in of_pwm_get() local
535 pwm = ERR_CAST(pc); in of_pwm_get()
542 pwm = ERR_PTR(-EINVAL); in of_pwm_get()
546 pwm = pc->of_xlate(pc, &args); in of_pwm_get()
547 if (IS_ERR(pwm)) in of_pwm_get()
562 pwm->label = con_id; in of_pwm_get()
567 return pwm; in of_pwm_get()
602 struct pwm_device *pwm = ERR_PTR(-EPROBE_DEFER); in pwm_get() local
669 pwm = pwm_request_from_chip(chip, chosen->index, con_id ?: dev_id); in pwm_get()
670 if (IS_ERR(pwm)) in pwm_get()
673 pwm_set_period(pwm, chosen->period); in pwm_get()
674 pwm_set_polarity(pwm, chosen->polarity); in pwm_get()
678 return pwm; in pwm_get()
686 void pwm_put(struct pwm_device *pwm) in pwm_put() argument
688 if (!pwm) in pwm_put()
693 if (!test_and_clear_bit(PWMF_REQUESTED, &pwm->flags)) { in pwm_put()
698 if (pwm->chip->ops->free) in pwm_put()
699 pwm->chip->ops->free(pwm->chip, pwm); in pwm_put()
701 pwm->label = NULL; in pwm_put()
703 module_put(pwm->chip->ops->owner); in pwm_put()
724 struct pwm_device **ptr, *pwm; in devm_pwm_get() local
730 pwm = pwm_get(dev, con_id); in devm_pwm_get()
731 if (!IS_ERR(pwm)) { in devm_pwm_get()
732 *ptr = pwm; in devm_pwm_get()
738 return pwm; in devm_pwm_get()
754 struct pwm_device **ptr, *pwm; in devm_of_pwm_get() local
760 pwm = of_pwm_get(np, con_id); in devm_of_pwm_get()
761 if (!IS_ERR(pwm)) { in devm_of_pwm_get()
762 *ptr = pwm; in devm_of_pwm_get()
768 return pwm; in devm_of_pwm_get()
791 void devm_pwm_put(struct device *dev, struct pwm_device *pwm) in devm_pwm_put() argument
793 WARN_ON(devres_release(dev, devm_pwm_release, devm_pwm_match, pwm)); in devm_pwm_put()
803 bool pwm_can_sleep(struct pwm_device *pwm) in pwm_can_sleep() argument
805 return pwm->chip->can_sleep; in pwm_can_sleep()
815 struct pwm_device *pwm = &chip->pwms[i]; in pwm_dbg_show() local
817 seq_printf(s, " pwm-%-3d (%-20.20s):", i, pwm->label); in pwm_dbg_show()
819 if (test_bit(PWMF_REQUESTED, &pwm->flags)) in pwm_dbg_show()
822 if (test_bit(PWMF_ENABLED, &pwm->flags)) in pwm_dbg_show()