Lines Matching defs:trig

48 	struct iio_trigger *trig = dev_get_drvdata(dev);
49 return sprintf(buf, "%s\n", trig->name);
127 struct iio_trigger *trig = NULL, *iter;
132 trig = iter;
137 return trig;
140 void iio_trigger_poll(struct iio_trigger *trig, s64 time)
143 if (!trig->use_count)
145 if (trig->subirqs[i].enabled) {
146 trig->use_count++;
147 generic_handle_irq(trig->subirq_base + i);
159 void iio_trigger_poll_chained(struct iio_trigger *trig, s64 time)
162 if (!trig->use_count)
164 if (trig->subirqs[i].enabled) {
165 trig->use_count++;
166 handle_nested_irq(trig->subirq_base + i);
171 void iio_trigger_notify_done(struct iio_trigger *trig)
173 trig->use_count--;
174 if (trig->use_count == 0 && trig->ops && trig->ops->try_reenable)
175 if (trig->ops->try_reenable(trig))
177 iio_trigger_poll(trig, 0);
182 static int iio_trigger_get_irq(struct iio_trigger *trig)
185 mutex_lock(&trig->pool_lock);
186 ret = bitmap_find_free_region(trig->pool,
189 mutex_unlock(&trig->pool_lock);
191 ret += trig->subirq_base;
196 static void iio_trigger_put_irq(struct iio_trigger *trig, int irq)
198 mutex_lock(&trig->pool_lock);
199 clear_bit(irq - trig->subirq_base, trig->pool);
200 mutex_unlock(&trig->pool_lock);
210 static int iio_trigger_attach_poll_func(struct iio_trigger *trig,
215 = bitmap_empty(trig->pool, CONFIG_IIO_CONSUMERS_PER_TRIGGER);
219 pf->irq = iio_trigger_get_irq(trig);
228 if (trig->ops && trig->ops->set_trigger_state && notinuse) {
229 ret = trig->ops->set_trigger_state(trig, true);
237 static int iio_trigger_dettach_poll_func(struct iio_trigger *trig,
242 = (bitmap_weight(trig->pool,
245 if (trig->ops && trig->ops->set_trigger_state && no_other_users) {
246 ret = trig->ops->set_trigger_state(trig, false);
250 iio_trigger_put_irq(trig, pf->irq);
315 if (indio_dev->trig)
316 return sprintf(buf, "%s\n", indio_dev->trig->name);
333 struct iio_trigger *oldtrig = indio_dev->trig;
334 struct iio_trigger *trig;
344 trig = iio_trigger_find_by_name(buf, len);
345 if (oldtrig == trig)
348 if (trig && indio_dev->info->validate_trigger) {
349 ret = indio_dev->info->validate_trigger(indio_dev, trig);
354 if (trig && trig->ops && trig->ops->validate_device) {
355 ret = trig->ops->validate_device(trig, indio_dev);
360 indio_dev->trig = trig;
362 if (oldtrig && indio_dev->trig != oldtrig)
364 if (indio_dev->trig)
365 iio_get_trigger(indio_dev->trig);
386 struct iio_trigger *trig = to_iio_trigger(device);
389 if (trig->subirq_base) {
391 irq_modify_status(trig->subirq_base + i,
394 irq_set_chip(trig->subirq_base + i,
396 irq_set_handler(trig->subirq_base + i,
400 irq_free_descs(trig->subirq_base,
403 kfree(trig->name);
404 kfree(trig);
414 struct iio_trigger *trig
417 trig->subirqs[d->irq - trig->subirq_base].enabled = false;
423 struct iio_trigger *trig
426 trig->subirqs[d->irq - trig->subirq_base].enabled = true;
432 struct iio_trigger *trig;
433 trig = kzalloc(sizeof *trig, GFP_KERNEL);
434 if (trig) {
436 trig->dev.type = &iio_trig_type;
437 trig->dev.bus = &iio_bus_type;
438 device_initialize(&trig->dev);
439 dev_set_drvdata(&trig->dev, (void *)trig);
441 mutex_init(&trig->pool_lock);
442 trig->subirq_base
446 if (trig->subirq_base < 0) {
447 kfree(trig);
451 trig->name = kvasprintf(GFP_KERNEL, fmt, vargs);
453 if (trig->name == NULL) {
454 irq_free_descs(trig->subirq_base,
456 kfree(trig);
459 trig->subirq_chip.name = trig->name;
460 trig->subirq_chip.irq_mask = &iio_trig_subirqmask;
461 trig->subirq_chip.irq_unmask = &iio_trig_subirqunmask;
463 irq_set_chip(trig->subirq_base + i,
464 &trig->subirq_chip);
465 irq_set_handler(trig->subirq_base + i,
467 irq_modify_status(trig->subirq_base + i,
471 get_device(&trig->dev);
473 return trig;
477 void iio_free_trigger(struct iio_trigger *trig)
479 if (trig)
480 put_device(&trig->dev);
493 if (indio_dev->trig)
494 iio_put_trigger(indio_dev->trig);
499 return iio_trigger_attach_poll_func(indio_dev->trig,
506 return iio_trigger_dettach_poll_func(indio_dev->trig,