Lines Matching refs:trig

55 	struct iio_trigger *trig = to_iio_trigger(dev);  in iio_trigger_read_name()  local
56 return sprintf(buf, "%s\n", trig->name); in iio_trigger_read_name()
111 struct iio_trigger *trig = NULL, *iter; in iio_trigger_find_by_name() local
116 trig = iter; in iio_trigger_find_by_name()
121 return trig; in iio_trigger_find_by_name()
124 void iio_trigger_poll(struct iio_trigger *trig) in iio_trigger_poll() argument
128 if (!atomic_read(&trig->use_count)) { in iio_trigger_poll()
129 atomic_set(&trig->use_count, CONFIG_IIO_CONSUMERS_PER_TRIGGER); in iio_trigger_poll()
132 if (trig->subirqs[i].enabled) in iio_trigger_poll()
133 generic_handle_irq(trig->subirq_base + i); in iio_trigger_poll()
135 iio_trigger_notify_done(trig); in iio_trigger_poll()
148 void iio_trigger_poll_chained(struct iio_trigger *trig) in iio_trigger_poll_chained() argument
152 if (!atomic_read(&trig->use_count)) { in iio_trigger_poll_chained()
153 atomic_set(&trig->use_count, CONFIG_IIO_CONSUMERS_PER_TRIGGER); in iio_trigger_poll_chained()
156 if (trig->subirqs[i].enabled) in iio_trigger_poll_chained()
157 handle_nested_irq(trig->subirq_base + i); in iio_trigger_poll_chained()
159 iio_trigger_notify_done(trig); in iio_trigger_poll_chained()
165 void iio_trigger_notify_done(struct iio_trigger *trig) in iio_trigger_notify_done() argument
167 if (atomic_dec_and_test(&trig->use_count) && trig->ops && in iio_trigger_notify_done()
168 trig->ops->try_reenable) in iio_trigger_notify_done()
169 if (trig->ops->try_reenable(trig)) in iio_trigger_notify_done()
171 iio_trigger_poll(trig); in iio_trigger_notify_done()
176 static int iio_trigger_get_irq(struct iio_trigger *trig) in iio_trigger_get_irq() argument
179 mutex_lock(&trig->pool_lock); in iio_trigger_get_irq()
180 ret = bitmap_find_free_region(trig->pool, in iio_trigger_get_irq()
183 mutex_unlock(&trig->pool_lock); in iio_trigger_get_irq()
185 ret += trig->subirq_base; in iio_trigger_get_irq()
190 static void iio_trigger_put_irq(struct iio_trigger *trig, int irq) in iio_trigger_put_irq() argument
192 mutex_lock(&trig->pool_lock); in iio_trigger_put_irq()
193 clear_bit(irq - trig->subirq_base, trig->pool); in iio_trigger_put_irq()
194 mutex_unlock(&trig->pool_lock); in iio_trigger_put_irq()
204 static int iio_trigger_attach_poll_func(struct iio_trigger *trig, in iio_trigger_attach_poll_func() argument
209 = bitmap_empty(trig->pool, CONFIG_IIO_CONSUMERS_PER_TRIGGER); in iio_trigger_attach_poll_func()
213 pf->irq = iio_trigger_get_irq(trig); in iio_trigger_attach_poll_func()
222 if (trig->ops && trig->ops->set_trigger_state && notinuse) { in iio_trigger_attach_poll_func()
223 ret = trig->ops->set_trigger_state(trig, true); in iio_trigger_attach_poll_func()
231 static int iio_trigger_detach_poll_func(struct iio_trigger *trig, in iio_trigger_detach_poll_func() argument
236 = (bitmap_weight(trig->pool, in iio_trigger_detach_poll_func()
239 if (trig->ops && trig->ops->set_trigger_state && no_other_users) { in iio_trigger_detach_poll_func()
240 ret = trig->ops->set_trigger_state(trig, false); in iio_trigger_detach_poll_func()
244 iio_trigger_put_irq(trig, pf->irq); in iio_trigger_detach_poll_func()
315 if (indio_dev->trig) in iio_trigger_read_current()
316 return sprintf(buf, "%s\n", indio_dev->trig->name); in iio_trigger_read_current()
340 struct iio_trigger *oldtrig = indio_dev->trig; in iio_trigger_write_current()
341 struct iio_trigger *trig; in iio_trigger_write_current() local
351 trig = iio_trigger_find_by_name(buf, len); in iio_trigger_write_current()
352 if (oldtrig == trig) in iio_trigger_write_current()
355 if (trig && indio_dev->info->validate_trigger) { in iio_trigger_write_current()
356 ret = indio_dev->info->validate_trigger(indio_dev, trig); in iio_trigger_write_current()
361 if (trig && trig->ops && trig->ops->validate_device) { in iio_trigger_write_current()
362 ret = trig->ops->validate_device(trig, indio_dev); in iio_trigger_write_current()
367 indio_dev->trig = trig; in iio_trigger_write_current()
375 if (indio_dev->trig) { in iio_trigger_write_current()
376 iio_trigger_get(indio_dev->trig); in iio_trigger_write_current()
378 iio_trigger_attach_poll_func(indio_dev->trig, in iio_trigger_write_current()
401 struct iio_trigger *trig = to_iio_trigger(device); in iio_trig_release() local
404 if (trig->subirq_base) { in iio_trig_release()
406 irq_modify_status(trig->subirq_base + i, in iio_trig_release()
409 irq_set_chip(trig->subirq_base + i, in iio_trig_release()
411 irq_set_handler(trig->subirq_base + i, in iio_trig_release()
415 irq_free_descs(trig->subirq_base, in iio_trig_release()
418 kfree(trig->name); in iio_trig_release()
419 kfree(trig); in iio_trig_release()
430 struct iio_trigger *trig in iio_trig_subirqmask() local
433 trig->subirqs[d->irq - trig->subirq_base].enabled = false; in iio_trig_subirqmask()
439 struct iio_trigger *trig in iio_trig_subirqunmask() local
442 trig->subirqs[d->irq - trig->subirq_base].enabled = true; in iio_trig_subirqunmask()
447 struct iio_trigger *trig; in viio_trigger_alloc() local
448 trig = kzalloc(sizeof *trig, GFP_KERNEL); in viio_trigger_alloc()
449 if (trig) { in viio_trigger_alloc()
451 trig->dev.type = &iio_trig_type; in viio_trigger_alloc()
452 trig->dev.bus = &iio_bus_type; in viio_trigger_alloc()
453 device_initialize(&trig->dev); in viio_trigger_alloc()
455 mutex_init(&trig->pool_lock); in viio_trigger_alloc()
456 trig->subirq_base in viio_trigger_alloc()
460 if (trig->subirq_base < 0) { in viio_trigger_alloc()
461 kfree(trig); in viio_trigger_alloc()
465 trig->name = kvasprintf(GFP_KERNEL, fmt, vargs); in viio_trigger_alloc()
466 if (trig->name == NULL) { in viio_trigger_alloc()
467 irq_free_descs(trig->subirq_base, in viio_trigger_alloc()
469 kfree(trig); in viio_trigger_alloc()
472 trig->subirq_chip.name = trig->name; in viio_trigger_alloc()
473 trig->subirq_chip.irq_mask = &iio_trig_subirqmask; in viio_trigger_alloc()
474 trig->subirq_chip.irq_unmask = &iio_trig_subirqunmask; in viio_trigger_alloc()
476 irq_set_chip(trig->subirq_base + i, in viio_trigger_alloc()
477 &trig->subirq_chip); in viio_trigger_alloc()
478 irq_set_handler(trig->subirq_base + i, in viio_trigger_alloc()
480 irq_modify_status(trig->subirq_base + i, in viio_trigger_alloc()
484 get_device(&trig->dev); in viio_trigger_alloc()
487 return trig; in viio_trigger_alloc()
492 struct iio_trigger *trig; in iio_trigger_alloc() local
496 trig = viio_trigger_alloc(fmt, vargs); in iio_trigger_alloc()
499 return trig; in iio_trigger_alloc()
503 void iio_trigger_free(struct iio_trigger *trig) in iio_trigger_free() argument
505 if (trig) in iio_trigger_free()
506 put_device(&trig->dev); in iio_trigger_free()
547 struct iio_trigger **ptr, *trig; in devm_iio_trigger_alloc() local
557 trig = viio_trigger_alloc(fmt, vargs); in devm_iio_trigger_alloc()
559 if (trig) { in devm_iio_trigger_alloc()
560 *ptr = trig; in devm_iio_trigger_alloc()
566 return trig; in devm_iio_trigger_alloc()
596 if (indio_dev->trig) in iio_device_unregister_trigger_consumer()
597 iio_trigger_put(indio_dev->trig); in iio_device_unregister_trigger_consumer()
602 return iio_trigger_attach_poll_func(indio_dev->trig, in iio_triggered_buffer_postenable()
609 return iio_trigger_detach_poll_func(indio_dev->trig, in iio_triggered_buffer_predisable()