int max1363_register_ring_funcs_and_init(struct iio_dev *indio_dev) { struct max1363_state *st = indio_dev->dev_data; int ret = 0; indio_dev->ring = iio_sw_rb_allocate(indio_dev); if (!indio_dev->ring) { ret = -ENOMEM; goto error_ret; } /* Effectively select the ring buffer implementation */ iio_ring_sw_register_funcs(&indio_dev->ring->access); ret = iio_alloc_pollfunc(indio_dev, NULL, &max1363_poll_func_th); if (ret) goto error_deallocate_sw_rb; /* Ring buffer functions - here trigger setup related */ indio_dev->ring->scan_el_attrs = st->chip_info->scan_attrs; indio_dev->ring->postenable = &iio_triggered_ring_postenable; indio_dev->ring->preenable = &max1363_ring_preenable; indio_dev->ring->predisable = &iio_triggered_ring_predisable; INIT_WORK(&st->poll_work, &max1363_poll_bh_to_ring); /* Flag that polled ring buffering is possible */ indio_dev->modes |= INDIO_RING_TRIGGERED; return 0; error_deallocate_sw_rb: iio_sw_rb_free(indio_dev->ring); error_ret: return ret; }
int max1363_register_ring_funcs_and_init(struct iio_dev *indio_dev) { struct max1363_state *st = indio_dev->dev_data; int ret = 0; indio_dev->ring = iio_sw_rb_allocate(indio_dev); if (!indio_dev->ring) { ret = -ENOMEM; goto error_ret; } /* Effectively select the ring buffer implementation */ iio_ring_sw_register_funcs(&st->indio_dev->ring->access); indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); if (indio_dev->pollfunc == NULL) { ret = -ENOMEM; goto error_deallocate_sw_rb; } /* Configure the polling function called on trigger interrupts */ indio_dev->pollfunc->poll_func_main = &max1363_poll_func_th; indio_dev->pollfunc->private_data = indio_dev; /* Ring buffer functions - here trigger setup related */ indio_dev->ring->postenable = &max1363_ring_postenable; indio_dev->ring->preenable = &max1363_ring_preenable; indio_dev->ring->predisable = &max1363_ring_predisable; INIT_WORK(&st->poll_work, &max1363_poll_bh_to_ring); /* Flag that polled ring buffering is possible */ indio_dev->modes |= INDIO_RING_TRIGGERED; return 0; error_deallocate_sw_rb: iio_sw_rb_free(indio_dev->ring); error_ret: return ret; }
int adis16209_configure_ring(struct iio_dev *indio_dev) { int ret = 0; struct adis16209_state *st = indio_dev->dev_data; struct iio_ring_buffer *ring; INIT_WORK(&st->work_trigger_to_ring, adis16209_trigger_bh_to_ring); /* Set default scan mode */ iio_scan_mask_set(indio_dev, iio_scan_el_supply.number); iio_scan_mask_set(indio_dev, iio_scan_el_rot.number); iio_scan_mask_set(indio_dev, iio_scan_el_accel_x.number); iio_scan_mask_set(indio_dev, iio_scan_el_accel_y.number); iio_scan_mask_set(indio_dev, iio_scan_el_temp.number); iio_scan_mask_set(indio_dev, iio_scan_el_aux_adc.number); iio_scan_mask_set(indio_dev, iio_scan_el_incli_x.number); iio_scan_mask_set(indio_dev, iio_scan_el_incli_y.number); indio_dev->scan_timestamp = true; indio_dev->scan_el_attrs = &adis16209_scan_el_group; ring = iio_sw_rb_allocate(indio_dev); if (!ring) { ret = -ENOMEM; return ret; } indio_dev->ring = ring; /* Effectively select the ring buffer implementation */ iio_ring_sw_register_funcs(&ring->access); ring->preenable = &adis16209_data_rdy_ring_preenable; ring->postenable = &adis16209_data_rdy_ring_postenable; ring->predisable = &adis16209_data_rdy_ring_predisable; ring->owner = THIS_MODULE; indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); if (indio_dev->pollfunc == NULL) { ret = -ENOMEM; goto error_iio_sw_rb_free;; } indio_dev->pollfunc->poll_func_main = &adis16209_poll_func_th; indio_dev->pollfunc->private_data = indio_dev; indio_dev->modes |= INDIO_RING_TRIGGERED; return 0; error_iio_sw_rb_free: iio_sw_rb_free(indio_dev->ring); return ret; }
int adis16209_configure_ring(struct iio_dev *indio_dev) { int ret = 0; struct adis16209_state *st = indio_dev->dev_data; struct iio_ring_buffer *ring; INIT_WORK(&st->work_trigger_to_ring, adis16209_trigger_bh_to_ring); ring = iio_sw_rb_allocate(indio_dev); if (!ring) { ret = -ENOMEM; return ret; } indio_dev->ring = ring; /* Effectively select the ring buffer implementation */ iio_ring_sw_register_funcs(&ring->access); ring->bpe = 2; ring->scan_el_attrs = &adis16209_scan_el_group; ring->scan_timestamp = true; ring->preenable = &iio_sw_ring_preenable; ring->postenable = &iio_triggered_ring_postenable; ring->predisable = &iio_triggered_ring_predisable; ring->owner = THIS_MODULE; /* Set default scan mode */ iio_scan_mask_set(ring, iio_scan_el_in_supply.number); iio_scan_mask_set(ring, iio_scan_el_rot.number); iio_scan_mask_set(ring, iio_scan_el_accel_x.number); iio_scan_mask_set(ring, iio_scan_el_accel_y.number); iio_scan_mask_set(ring, iio_scan_el_temp.number); iio_scan_mask_set(ring, iio_scan_el_in0.number); iio_scan_mask_set(ring, iio_scan_el_incli_x.number); iio_scan_mask_set(ring, iio_scan_el_incli_y.number); ret = iio_alloc_pollfunc(indio_dev, NULL, &adis16209_poll_func_th); if (ret) goto error_iio_sw_rb_free; indio_dev->modes |= INDIO_RING_TRIGGERED; return 0; error_iio_sw_rb_free: iio_sw_rb_free(indio_dev->ring); return ret; }