void ad7606_ring_cleanup(struct iio_dev *indio_dev) { if (indio_dev->trig) { iio_put_trigger(indio_dev->trig); iio_trigger_dettach_poll_func(indio_dev->trig, indio_dev->pollfunc); } iio_dealloc_pollfunc(indio_dev->pollfunc); iio_sw_rb_free(indio_dev->ring); }
void max1363_ring_cleanup(struct iio_dev *indio_dev) { /* ensure that the trigger has been detached */ if (indio_dev->trig) { iio_put_trigger(indio_dev->trig); iio_trigger_dettach_poll_func(indio_dev->trig, indio_dev->pollfunc); } kfree(indio_dev->pollfunc); iio_sw_rb_free(indio_dev->ring); }
static int __devexit iio_bfin_tmr_trigger_remove(struct platform_device *pdev) { struct bfin_tmr_state *st = platform_get_drvdata(pdev); disable_gptimers(st->t->bit); free_irq(st->irq, st); iio_trigger_unregister(st->trig); iio_put_trigger(st->trig); kfree(st); return 0; }
static int iio_sysfs_trigger_probe(int id) { struct iio_sysfs_trig *t; int ret; bool foundit = false; mutex_lock(&iio_syfs_trig_list_mut); list_for_each_entry(t, &iio_sysfs_trig_list, l) if (id == t->id) { foundit = true; break; } if (foundit) { ret = -EINVAL; goto out1; } t = kmalloc(sizeof(*t), GFP_KERNEL); if (t == NULL) { ret = -ENOMEM; goto out1; } t->id = id; t->trig = iio_allocate_trigger("sysfstrig%d", id); if (!t->trig) { ret = -ENOMEM; goto free_t; } t->trig->dev.groups = iio_sysfs_trigger_attr_groups; t->trig->owner = THIS_MODULE; t->trig->dev.parent = &iio_sysfs_trig_dev; ret = iio_trigger_register(t->trig); if (ret) goto out2; list_add(&t->l, &iio_sysfs_trig_list); __module_get(THIS_MODULE); mutex_unlock(&iio_syfs_trig_list_mut); return 0; out2: iio_put_trigger(t->trig); free_t: kfree(t); out1: mutex_unlock(&iio_syfs_trig_list_mut); return ret; }
static int __devinit iio_bfin_tmr_trigger_probe(struct platform_device *pdev) { struct bfin_tmr_state *st; int ret; st = kzalloc(sizeof(*st), GFP_KERNEL); if (st == NULL) { ret = -ENOMEM; goto out; } st->irq = platform_get_irq(pdev, 0); if (!st->irq) { dev_err(&pdev->dev, "No IRQs specified"); ret = -ENODEV; goto out1; } ret = iio_bfin_tmr_get_number(st->irq); if (ret < 0) goto out1; st->timer_num = ret; st->t = &iio_bfin_timer_code[st->timer_num]; st->trig = iio_allocate_trigger("bfintmr%d", st->timer_num); if (!st->trig) { ret = -ENOMEM; goto out1; } st->trig->private_data = st; st->trig->ops = &iio_bfin_tmr_trigger_ops; st->trig->dev.groups = iio_bfin_tmr_trigger_attr_groups; ret = iio_trigger_register(st->trig); if (ret) goto out2; ret = request_irq(st->irq, iio_bfin_tmr_trigger_isr, 0, st->trig->name, st); if (ret) { dev_err(&pdev->dev, "request IRQ-%d failed", st->irq); goto out4; } set_gptimer_config(st->t->id, OUT_DIS | PWM_OUT | PERIOD_CNT | IRQ_ENA); dev_info(&pdev->dev, "iio trigger Blackfin TMR%d, IRQ-%d", st->timer_num, st->irq); platform_set_drvdata(pdev, st); return 0; out4: iio_trigger_unregister(st->trig); out2: iio_put_trigger(st->trig); out1: kfree(st); out: return ret; }