Lines Matching refs:chip

72 static void free_pwms(struct pwm_chip *chip)  in free_pwms()  argument
76 for (i = 0; i < chip->npwm; i++) { in free_pwms()
77 struct pwm_device *pwm = &chip->pwms[i]; in free_pwms()
81 bitmap_clear(allocated_pwms, chip->base, chip->npwm); in free_pwms()
83 kfree(chip->pwms); in free_pwms()
84 chip->pwms = NULL; in free_pwms()
89 struct pwm_chip *chip; in pwmchip_find_by_name() local
96 list_for_each_entry(chip, &pwm_chips, list) { in pwmchip_find_by_name()
97 const char *chip_name = dev_name(chip->dev); in pwmchip_find_by_name()
101 return chip; in pwmchip_find_by_name()
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()
180 static void of_pwmchip_add(struct pwm_chip *chip) in of_pwmchip_add() argument
182 if (!chip->dev || !chip->dev->of_node) in of_pwmchip_add()
185 if (!chip->of_xlate) { in of_pwmchip_add()
186 chip->of_xlate = of_pwm_simple_xlate; in of_pwmchip_add()
187 chip->of_pwm_n_cells = 2; in of_pwmchip_add()
190 of_node_get(chip->dev->of_node); in of_pwmchip_add()
193 static void of_pwmchip_remove(struct pwm_chip *chip) in of_pwmchip_remove() argument
195 if (chip->dev) in of_pwmchip_remove()
196 of_node_put(chip->dev->of_node); in of_pwmchip_remove()
232 int pwmchip_add(struct pwm_chip *chip) in pwmchip_add() argument
238 if (!chip || !chip->dev || !chip->ops || !chip->ops->config || in pwmchip_add()
239 !chip->ops->enable || !chip->ops->disable || !chip->npwm) in pwmchip_add()
244 ret = alloc_pwms(chip->base, chip->npwm); in pwmchip_add()
248 chip->pwms = kzalloc(chip->npwm * sizeof(*pwm), GFP_KERNEL); in pwmchip_add()
249 if (!chip->pwms) { in pwmchip_add()
254 chip->base = ret; in pwmchip_add()
256 for (i = 0; i < chip->npwm; i++) { 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()
266 bitmap_set(allocated_pwms, chip->base, chip->npwm); in pwmchip_add()
268 INIT_LIST_HEAD(&chip->list); in pwmchip_add()
269 list_add(&chip->list, &pwm_chips); in pwmchip_add()
274 of_pwmchip_add(chip); in pwmchip_add()
276 pwmchip_sysfs_export(chip); in pwmchip_add()
291 int pwmchip_remove(struct pwm_chip *chip) in pwmchip_remove() argument
298 for (i = 0; i < chip->npwm; i++) { in pwmchip_remove()
299 struct pwm_device *pwm = &chip->pwms[i]; in pwmchip_remove()
307 list_del_init(&chip->list); in pwmchip_remove()
310 of_pwmchip_remove(chip); in pwmchip_remove()
312 free_pwms(chip); in pwmchip_remove()
314 pwmchip_sysfs_unexport(chip); in pwmchip_remove()
366 struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip, in pwm_request_from_chip() argument
373 if (!chip || index >= chip->npwm) in pwm_request_from_chip()
377 pwm = &chip->pwms[index]; in pwm_request_from_chip()
413 err = pwm->chip->ops->config(pwm->chip, pwm, duty_ns, period_ns); in pwm_config()
435 if (!pwm || !pwm->chip->ops) in pwm_set_polarity()
438 if (!pwm->chip->ops->set_polarity) in pwm_set_polarity()
444 err = pwm->chip->ops->set_polarity(pwm->chip, pwm, polarity); in pwm_set_polarity()
461 return pwm->chip->ops->enable(pwm->chip, pwm); in pwm_enable()
474 pwm->chip->ops->disable(pwm->chip, pwm); in pwm_disable()
480 struct pwm_chip *chip; in of_node_to_pwmchip() local
484 list_for_each_entry(chip, &pwm_chips, list) in of_node_to_pwmchip()
485 if (chip->dev && chip->dev->of_node == np) { in of_node_to_pwmchip()
487 return chip; in of_node_to_pwmchip()
604 struct pwm_chip *chip = NULL; in pwm_get() local
665 chip = pwmchip_find_by_name(chosen->provider); in pwm_get()
666 if (!chip) in pwm_get()
669 pwm = pwm_request_from_chip(chip, chosen->index, con_id ?: dev_id); in pwm_get()
698 if (pwm->chip->ops->free) in pwm_put()
699 pwm->chip->ops->free(pwm->chip, pwm); in pwm_put()
703 module_put(pwm->chip->ops->owner); in pwm_put()
805 return pwm->chip->can_sleep; in pwm_can_sleep()
810 static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s) in pwm_dbg_show() argument
814 for (i = 0; i < chip->npwm; i++) { in pwm_dbg_show()
815 struct pwm_device *pwm = &chip->pwms[i]; in pwm_dbg_show()
851 struct pwm_chip *chip = list_entry(v, struct pwm_chip, list); in pwm_seq_show() local
854 chip->dev->bus ? chip->dev->bus->name : "no-bus", in pwm_seq_show()
855 dev_name(chip->dev), chip->npwm, in pwm_seq_show()
856 (chip->npwm != 1) ? "s" : ""); in pwm_seq_show()
858 if (chip->ops->dbg_show) in pwm_seq_show()
859 chip->ops->dbg_show(chip, s); in pwm_seq_show()
861 pwm_dbg_show(chip, s); in pwm_seq_show()