392
390
#define ADIS16260_GYRO_CHANNEL_SET(axis, mod) \
393
391
struct iio_chan_spec adis16260_channels_##axis[] = { \
394
IIO_CHAN(IIO_GYRO, 1, 0, 0, NULL, 0, mod, \
392
IIO_CHAN(IIO_ANGL_VEL, 1, 0, 0, NULL, 0, mod, \
395
393
(1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | \
396
394
(1 << IIO_CHAN_INFO_CALIBSCALE_SEPARATE) | \
397
395
(1 << IIO_CHAN_INFO_SCALE_SEPARATE), \
406
404
(1 << IIO_CHAN_INFO_SCALE_SEPARATE), \
407
405
temp, ADIS16260_SCAN_TEMP, \
408
406
IIO_ST('u', 12, 16, 0), 0), \
409
IIO_CHAN(IIO_IN, 0, 1, 0, "supply", 0, 0, \
407
IIO_CHAN(IIO_VOLTAGE, 0, 1, 0, "supply", 0, 0, \
410
408
(1 << IIO_CHAN_INFO_SCALE_SEPARATE), \
411
409
in_supply, ADIS16260_SCAN_SUPPLY, \
412
410
IIO_ST('u', 12, 16, 0), 0), \
413
IIO_CHAN(IIO_IN, 0, 1, 0, NULL, 1, 0, \
411
IIO_CHAN(IIO_VOLTAGE, 0, 1, 0, NULL, 1, 0, \
414
412
(1 << IIO_CHAN_INFO_SCALE_SEPARATE), \
415
413
in_aux, ADIS16260_SCAN_AUX_ADC, \
416
414
IIO_ST('u', 12, 16, 0), 0), \
575
577
static int __devinit adis16260_probe(struct spi_device *spi)
577
int ret, regdone = 0;
578
580
struct adis16260_platform_data *pd = spi->dev.platform_data;
579
struct adis16260_state *st = kzalloc(sizeof *st, GFP_KERNEL);
581
struct adis16260_state *st;
582
struct iio_dev *indio_dev;
584
/* setup the industrialio driver allocated elements */
585
indio_dev = iio_allocate_device(sizeof(*st));
586
if (indio_dev == NULL) {
590
st = iio_priv(indio_dev);
585
592
st->negate = pd->negate;
586
593
/* this is only used for removal purposes */
587
594
spi_set_drvdata(spi, st);
589
/* Allocate the comms buffers */
590
st->rx = kzalloc(sizeof(*st->rx)*ADIS16260_MAX_RX, GFP_KERNEL);
591
if (st->rx == NULL) {
595
st->tx = kzalloc(sizeof(*st->tx)*ADIS16260_MAX_TX, GFP_KERNEL);
596
if (st->tx == NULL) {
601
597
mutex_init(&st->buf_lock);
602
/* setup the industrialio driver allocated elements */
603
st->indio_dev = iio_allocate_device(0);
604
if (st->indio_dev == NULL) {
609
st->indio_dev->name = spi_get_device_id(st->us)->name;
610
st->indio_dev->dev.parent = &spi->dev;
611
st->indio_dev->info = &adis16260_info;
612
st->indio_dev->num_channels
599
indio_dev->name = spi_get_device_id(st->us)->name;
600
indio_dev->dev.parent = &spi->dev;
601
indio_dev->info = &adis16260_info;
602
indio_dev->num_channels
613
603
= ARRAY_SIZE(adis16260_channels_x);
614
604
if (pd && pd->direction)
615
605
switch (pd->direction) {
617
st->indio_dev->channels = adis16260_channels_x;
607
indio_dev->channels = adis16260_channels_x;
620
st->indio_dev->channels = adis16260_channels_y;
610
indio_dev->channels = adis16260_channels_y;
623
st->indio_dev->channels = adis16260_channels_z;
613
indio_dev->channels = adis16260_channels_z;
629
st->indio_dev->channels = adis16260_channels_x;
631
st->indio_dev->dev_data = (void *)(st);
632
st->indio_dev->modes = INDIO_DIRECT_MODE;
634
ret = adis16260_configure_ring(st->indio_dev);
619
indio_dev->channels = adis16260_channels_x;
620
indio_dev->num_channels = ARRAY_SIZE(adis16260_channels_x);
621
indio_dev->modes = INDIO_DIRECT_MODE;
623
ret = adis16260_configure_ring(indio_dev);
636
625
goto error_free_dev;
638
ret = iio_device_register(st->indio_dev);
640
goto error_unreg_ring_funcs;
642
ret = iio_ring_buffer_register_ex(st->indio_dev->ring, 0,
643
st->indio_dev->channels,
644
ARRAY_SIZE(adis16260_channels_x));
627
ret = iio_buffer_register(indio_dev,
629
ARRAY_SIZE(adis16260_channels_x));
646
631
printk(KERN_ERR "failed to initialize the ring\n");
647
632
goto error_unreg_ring_funcs;
634
if (indio_dev->buffer) {
635
/* Set default scan mode */
636
iio_scan_mask_set(indio_dev->buffer, ADIS16260_SCAN_SUPPLY);
637
iio_scan_mask_set(indio_dev->buffer, ADIS16260_SCAN_GYRO);
638
iio_scan_mask_set(indio_dev->buffer, ADIS16260_SCAN_AUX_ADC);
639
iio_scan_mask_set(indio_dev->buffer, ADIS16260_SCAN_TEMP);
640
iio_scan_mask_set(indio_dev->buffer, ADIS16260_SCAN_ANGL);
651
ret = adis16260_probe_trigger(st->indio_dev);
643
ret = adis16260_probe_trigger(indio_dev);
653
645
goto error_uninitialize_ring;
656
648
/* Get the device into a sane initial state */
657
ret = adis16260_initial_setup(st->indio_dev);
659
goto error_remove_trigger;
649
ret = adis16260_initial_setup(indio_dev);
651
goto error_remove_trigger;
652
ret = iio_device_register(indio_dev);
654
goto error_remove_trigger;
662
658
error_remove_trigger:
663
adis16260_remove_trigger(st->indio_dev);
659
adis16260_remove_trigger(indio_dev);
664
660
error_uninitialize_ring:
665
iio_ring_buffer_unregister(st->indio_dev->ring);
661
iio_buffer_unregister(indio_dev);
666
662
error_unreg_ring_funcs:
667
adis16260_unconfigure_ring(st->indio_dev);
663
adis16260_unconfigure_ring(indio_dev);
670
iio_device_unregister(st->indio_dev);
672
iio_free_device(st->indio_dev);
665
iio_free_device(indio_dev);