Merge branches 'imx/pata' and 'imx/sata' into next/driver
[pandora-kernel.git] / drivers / staging / iio / gyro / adis16260_core.c
1 /*
2  * ADIS16260/ADIS16265 Programmable Digital Gyroscope Sensor Driver
3  *
4  * Copyright 2010 Analog Devices Inc.
5  *
6  * Licensed under the GPL-2 or later.
7  */
8
9 #include <linux/interrupt.h>
10 #include <linux/irq.h>
11 #include <linux/gpio.h>
12 #include <linux/delay.h>
13 #include <linux/mutex.h>
14 #include <linux/device.h>
15 #include <linux/kernel.h>
16 #include <linux/spi/spi.h>
17 #include <linux/slab.h>
18 #include <linux/sysfs.h>
19 #include <linux/list.h>
20
21 #include "../iio.h"
22 #include "../sysfs.h"
23 #include "../ring_generic.h"
24 #include "../adc/adc.h"
25 #include "gyro.h"
26
27 #include "adis16260.h"
28
29 #define DRIVER_NAME             "adis16260"
30
31 static int adis16260_check_status(struct iio_dev *indio_dev);
32
33 /**
34  * adis16260_spi_write_reg_8() - write single byte to a register
35  * @indio_dev: iio_dev for the device
36  * @reg_address: the address of the register to be written
37  * @val: the value to write
38  **/
39 static int adis16260_spi_write_reg_8(struct iio_dev *indio_dev,
40                 u8 reg_address,
41                 u8 val)
42 {
43         int ret;
44         struct adis16260_state *st = iio_priv(indio_dev);
45
46         mutex_lock(&st->buf_lock);
47         st->tx[0] = ADIS16260_WRITE_REG(reg_address);
48         st->tx[1] = val;
49
50         ret = spi_write(st->us, st->tx, 2);
51         mutex_unlock(&st->buf_lock);
52
53         return ret;
54 }
55
56 /**
57  * adis16260_spi_write_reg_16() - write 2 bytes to a pair of registers
58  * @indio_dev: iio_dev for the device
59  * @reg_address: the address of the lower of the two registers. Second register
60  *               is assumed to have address one greater.
61  * @val: value to be written
62  **/
63 static int adis16260_spi_write_reg_16(struct iio_dev *indio_dev,
64                 u8 lower_reg_address,
65                 u16 value)
66 {
67         int ret;
68         struct spi_message msg;
69         struct adis16260_state *st = iio_priv(indio_dev);
70         struct spi_transfer xfers[] = {
71                 {
72                         .tx_buf = st->tx,
73                         .bits_per_word = 8,
74                         .len = 2,
75                         .cs_change = 1,
76                         .delay_usecs = 20,
77                 }, {
78                         .tx_buf = st->tx + 2,
79                         .bits_per_word = 8,
80                         .len = 2,
81                         .delay_usecs = 20,
82                 },
83         };
84
85         mutex_lock(&st->buf_lock);
86         st->tx[0] = ADIS16260_WRITE_REG(lower_reg_address);
87         st->tx[1] = value & 0xFF;
88         st->tx[2] = ADIS16260_WRITE_REG(lower_reg_address + 1);
89         st->tx[3] = (value >> 8) & 0xFF;
90
91         spi_message_init(&msg);
92         spi_message_add_tail(&xfers[0], &msg);
93         spi_message_add_tail(&xfers[1], &msg);
94         ret = spi_sync(st->us, &msg);
95         mutex_unlock(&st->buf_lock);
96
97         return ret;
98 }
99
100 /**
101  * adis16260_spi_read_reg_16() - read 2 bytes from a 16-bit register
102  * @indio_dev: iio_dev for the device
103  * @reg_address: the address of the lower of the two registers. Second register
104  *               is assumed to have address one greater.
105  * @val: somewhere to pass back the value read
106  **/
107 static int adis16260_spi_read_reg_16(struct iio_dev *indio_dev,
108                 u8 lower_reg_address,
109                 u16 *val)
110 {
111         struct spi_message msg;
112         struct adis16260_state *st = iio_priv(indio_dev);
113         int ret;
114         struct spi_transfer xfers[] = {
115                 {
116                         .tx_buf = st->tx,
117                         .bits_per_word = 8,
118                         .len = 2,
119                         .cs_change = 1,
120                         .delay_usecs = 30,
121                 }, {
122                         .rx_buf = st->rx,
123                         .bits_per_word = 8,
124                         .len = 2,
125                         .delay_usecs = 30,
126                 },
127         };
128
129         mutex_lock(&st->buf_lock);
130         st->tx[0] = ADIS16260_READ_REG(lower_reg_address);
131         st->tx[1] = 0;
132
133         spi_message_init(&msg);
134         spi_message_add_tail(&xfers[0], &msg);
135         spi_message_add_tail(&xfers[1], &msg);
136         ret = spi_sync(st->us, &msg);
137         if (ret) {
138                 dev_err(&st->us->dev,
139                         "problem when reading 16 bit register 0x%02X",
140                         lower_reg_address);
141                 goto error_ret;
142         }
143         *val = (st->rx[0] << 8) | st->rx[1];
144
145 error_ret:
146         mutex_unlock(&st->buf_lock);
147         return ret;
148 }
149
150 static ssize_t adis16260_read_frequency_available(struct device *dev,
151                                                   struct device_attribute *attr,
152                                                   char *buf)
153 {
154         struct iio_dev *indio_dev = dev_get_drvdata(dev);
155         struct adis16260_state *st = iio_priv(indio_dev);
156         if (spi_get_device_id(st->us)->driver_data)
157                 return sprintf(buf, "%s\n", "0.129 ~ 256");
158         else
159                 return sprintf(buf, "%s\n", "256 2048");
160 }
161
162 static ssize_t adis16260_read_frequency(struct device *dev,
163                 struct device_attribute *attr,
164                 char *buf)
165 {
166         struct iio_dev *indio_dev = dev_get_drvdata(dev);
167         struct adis16260_state *st = iio_priv(indio_dev);
168         int ret, len = 0;
169         u16 t;
170         int sps;
171         ret = adis16260_spi_read_reg_16(indio_dev,
172                         ADIS16260_SMPL_PRD,
173                         &t);
174         if (ret)
175                 return ret;
176
177         if (spi_get_device_id(st->us)->driver_data) /* If an adis16251 */
178                 sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 8 : 256;
179         else
180                 sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
181         sps /= (t & ADIS16260_SMPL_PRD_DIV_MASK) + 1;
182         len = sprintf(buf, "%d SPS\n", sps);
183         return len;
184 }
185
186 static ssize_t adis16260_write_frequency(struct device *dev,
187                 struct device_attribute *attr,
188                 const char *buf,
189                 size_t len)
190 {
191         struct iio_dev *indio_dev = dev_get_drvdata(dev);
192         struct adis16260_state *st = iio_priv(indio_dev);
193         long val;
194         int ret;
195         u8 t;
196
197         ret = strict_strtol(buf, 10, &val);
198         if (ret)
199                 return ret;
200
201         mutex_lock(&indio_dev->mlock);
202         if (spi_get_device_id(st->us)) {
203                 t = (256 / val);
204                 if (t > 0)
205                         t--;
206                 t &= ADIS16260_SMPL_PRD_DIV_MASK;
207         } else {
208                 t = (2048 / val);
209                 if (t > 0)
210                         t--;
211                 t &= ADIS16260_SMPL_PRD_DIV_MASK;
212         }
213         if ((t & ADIS16260_SMPL_PRD_DIV_MASK) >= 0x0A)
214                 st->us->max_speed_hz = ADIS16260_SPI_SLOW;
215         else
216                 st->us->max_speed_hz = ADIS16260_SPI_FAST;
217         ret = adis16260_spi_write_reg_8(indio_dev,
218                         ADIS16260_SMPL_PRD,
219                         t);
220
221         mutex_unlock(&indio_dev->mlock);
222
223         return ret ? ret : len;
224 }
225
226 static int adis16260_reset(struct iio_dev *indio_dev)
227 {
228         int ret;
229         ret = adis16260_spi_write_reg_8(indio_dev,
230                         ADIS16260_GLOB_CMD,
231                         ADIS16260_GLOB_CMD_SW_RESET);
232         if (ret)
233                 dev_err(&indio_dev->dev, "problem resetting device");
234
235         return ret;
236 }
237
238 static ssize_t adis16260_write_reset(struct device *dev,
239                 struct device_attribute *attr,
240                 const char *buf, size_t len)
241 {
242         struct iio_dev *indio_dev = dev_get_drvdata(dev);
243         if (len < 1)
244                 return -EINVAL;
245         switch (buf[0]) {
246         case '1':
247         case 'y':
248         case 'Y':
249                 return adis16260_reset(indio_dev);
250         }
251         return -EINVAL;
252 }
253
254 int adis16260_set_irq(struct iio_dev *indio_dev, bool enable)
255 {
256         int ret;
257         u16 msc;
258         ret = adis16260_spi_read_reg_16(indio_dev, ADIS16260_MSC_CTRL, &msc);
259         if (ret)
260                 goto error_ret;
261
262         msc |= ADIS16260_MSC_CTRL_DATA_RDY_POL_HIGH;
263         if (enable)
264                 msc |= ADIS16260_MSC_CTRL_DATA_RDY_EN;
265         else
266                 msc &= ~ADIS16260_MSC_CTRL_DATA_RDY_EN;
267
268         ret = adis16260_spi_write_reg_16(indio_dev, ADIS16260_MSC_CTRL, msc);
269         if (ret)
270                 goto error_ret;
271
272 error_ret:
273         return ret;
274 }
275
276 /* Power down the device */
277 static int adis16260_stop_device(struct iio_dev *indio_dev)
278 {
279         int ret;
280         u16 val = ADIS16260_SLP_CNT_POWER_OFF;
281
282         ret = adis16260_spi_write_reg_16(indio_dev, ADIS16260_SLP_CNT, val);
283         if (ret)
284                 dev_err(&indio_dev->dev, "problem with turning device off: SLP_CNT");
285
286         return ret;
287 }
288
289 static int adis16260_self_test(struct iio_dev *indio_dev)
290 {
291         int ret;
292         ret = adis16260_spi_write_reg_16(indio_dev,
293                         ADIS16260_MSC_CTRL,
294                         ADIS16260_MSC_CTRL_MEM_TEST);
295         if (ret) {
296                 dev_err(&indio_dev->dev, "problem starting self test");
297                 goto err_ret;
298         }
299
300         adis16260_check_status(indio_dev);
301
302 err_ret:
303         return ret;
304 }
305
306 static int adis16260_check_status(struct iio_dev *indio_dev)
307 {
308         u16 status;
309         int ret;
310         struct device *dev = &indio_dev->dev;
311
312         ret = adis16260_spi_read_reg_16(indio_dev,
313                                         ADIS16260_DIAG_STAT,
314                                         &status);
315
316         if (ret < 0) {
317                 dev_err(dev, "Reading status failed\n");
318                 goto error_ret;
319         }
320         ret = status & 0x7F;
321         if (status & ADIS16260_DIAG_STAT_FLASH_CHK)
322                 dev_err(dev, "Flash checksum error\n");
323         if (status & ADIS16260_DIAG_STAT_SELF_TEST)
324                 dev_err(dev, "Self test error\n");
325         if (status & ADIS16260_DIAG_STAT_OVERFLOW)
326                 dev_err(dev, "Sensor overrange\n");
327         if (status & ADIS16260_DIAG_STAT_SPI_FAIL)
328                 dev_err(dev, "SPI failure\n");
329         if (status & ADIS16260_DIAG_STAT_FLASH_UPT)
330                 dev_err(dev, "Flash update failed\n");
331         if (status & ADIS16260_DIAG_STAT_POWER_HIGH)
332                 dev_err(dev, "Power supply above 5.25V\n");
333         if (status & ADIS16260_DIAG_STAT_POWER_LOW)
334                 dev_err(dev, "Power supply below 4.75V\n");
335
336 error_ret:
337         return ret;
338 }
339
340 static int adis16260_initial_setup(struct iio_dev *indio_dev)
341 {
342         int ret;
343         struct device *dev = &indio_dev->dev;
344
345         /* Disable IRQ */
346         ret = adis16260_set_irq(indio_dev, false);
347         if (ret) {
348                 dev_err(dev, "disable irq failed");
349                 goto err_ret;
350         }
351
352         /* Do self test */
353         ret = adis16260_self_test(indio_dev);
354         if (ret) {
355                 dev_err(dev, "self test failure");
356                 goto err_ret;
357         }
358
359         /* Read status register to check the result */
360         ret = adis16260_check_status(indio_dev);
361         if (ret) {
362                 adis16260_reset(indio_dev);
363                 dev_err(dev, "device not playing ball -> reset");
364                 msleep(ADIS16260_STARTUP_DELAY);
365                 ret = adis16260_check_status(indio_dev);
366                 if (ret) {
367                         dev_err(dev, "giving up");
368                         goto err_ret;
369                 }
370         }
371
372 err_ret:
373         return ret;
374 }
375
376 static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
377                 adis16260_read_frequency,
378                 adis16260_write_frequency);
379
380 static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, adis16260_write_reset, 0);
381
382 static IIO_DEVICE_ATTR(sampling_frequency_available,
383                        S_IRUGO, adis16260_read_frequency_available, NULL, 0);
384
385 enum adis16260_channel {
386         gyro,
387         temp,
388         in_supply,
389         in_aux,
390         angle,
391 };
392 #define ADIS16260_GYRO_CHANNEL_SET(axis, mod)                           \
393         struct iio_chan_spec adis16260_channels_##axis[] = {            \
394                 IIO_CHAN(IIO_GYRO, 1, 0, 0, NULL, 0, mod,               \
395                          (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) |      \
396                          (1 << IIO_CHAN_INFO_CALIBSCALE_SEPARATE) |     \
397                          (1 << IIO_CHAN_INFO_SCALE_SEPARATE),           \
398                          gyro, ADIS16260_SCAN_GYRO,                     \
399                          IIO_ST('s', 14, 16, 0), 0),                    \
400                 IIO_CHAN(IIO_ANGL, 1, 0, 0, NULL, 0, mod,               \
401                          0,                                             \
402                          angle, ADIS16260_SCAN_ANGL,                    \
403                          IIO_ST('u', 14, 16, 0), 0),                    \
404                 IIO_CHAN(IIO_TEMP, 0, 1, 0, NULL, 0, 0,                 \
405                          (1 << IIO_CHAN_INFO_OFFSET_SEPARATE) |         \
406                          (1 << IIO_CHAN_INFO_SCALE_SEPARATE),           \
407                          temp, ADIS16260_SCAN_TEMP,                     \
408                          IIO_ST('u', 12, 16, 0), 0),                    \
409                 IIO_CHAN(IIO_IN, 0, 1, 0, "supply", 0, 0,               \
410                          (1 << IIO_CHAN_INFO_SCALE_SEPARATE),           \
411                          in_supply, ADIS16260_SCAN_SUPPLY,              \
412                          IIO_ST('u', 12, 16, 0), 0),                    \
413                 IIO_CHAN(IIO_IN, 0, 1, 0, NULL, 1, 0,                   \
414                          (1 << IIO_CHAN_INFO_SCALE_SEPARATE),           \
415                          in_aux, ADIS16260_SCAN_AUX_ADC,                \
416                          IIO_ST('u', 12, 16, 0), 0),                    \
417                 IIO_CHAN_SOFT_TIMESTAMP(5)                              \
418         }
419
420 static const ADIS16260_GYRO_CHANNEL_SET(x, IIO_MOD_X);
421 static const ADIS16260_GYRO_CHANNEL_SET(y, IIO_MOD_Y);
422 static const ADIS16260_GYRO_CHANNEL_SET(z, IIO_MOD_Z);
423
424 static const u8 adis16260_addresses[5][3] = {
425         [gyro] = { ADIS16260_GYRO_OUT,
426                    ADIS16260_GYRO_OFF,
427                    ADIS16260_GYRO_SCALE },
428         [angle] = { ADIS16260_ANGL_OUT },
429         [in_supply] = { ADIS16260_SUPPLY_OUT },
430         [in_aux] = { ADIS16260_AUX_ADC },
431         [temp] = { ADIS16260_TEMP_OUT },
432 };
433 static int adis16260_read_raw(struct iio_dev *indio_dev,
434                               struct iio_chan_spec const *chan,
435                               int *val, int *val2,
436                               long mask)
437 {
438         struct adis16260_state *st = iio_priv(indio_dev);
439         int ret;
440         int bits;
441         u8 addr;
442         s16 val16;
443
444         switch (mask) {
445         case 0:
446                 mutex_lock(&indio_dev->mlock);
447                 addr = adis16260_addresses[chan->address][0];
448                 ret = adis16260_spi_read_reg_16(indio_dev, addr, &val16);
449                 if (ret) {
450                         mutex_unlock(&indio_dev->mlock);
451                         return ret;
452                 }
453
454                 if (val16 & ADIS16260_ERROR_ACTIVE) {
455                         ret = adis16260_check_status(indio_dev);
456                         if (ret) {
457                                 mutex_unlock(&indio_dev->mlock);
458                                 return ret;
459                         }
460                 }
461                 val16 = val16 & ((1 << chan->scan_type.realbits) - 1);
462                 if (chan->scan_type.sign == 's')
463                         val16 = (s16)(val16 <<
464                                       (16 - chan->scan_type.realbits)) >>
465                                 (16 - chan->scan_type.realbits);
466                 *val = val16;
467                 mutex_unlock(&indio_dev->mlock);
468                 return IIO_VAL_INT;
469         case (1 << IIO_CHAN_INFO_SCALE_SEPARATE):
470         case (1 << IIO_CHAN_INFO_SCALE_SHARED):
471                 switch (chan->type) {
472                 case IIO_GYRO:
473                         *val = 0;
474                         if (spi_get_device_id(st->us)->driver_data)
475                                 *val2 = 320;
476                         else
477                                 *val2 = 1278;
478                         return IIO_VAL_INT_PLUS_MICRO;
479                 case IIO_IN:
480                         *val = 0;
481                         if (chan->channel == 0)
482                                 *val2 = 18315;
483                         else
484                                 *val2 = 610500;
485                         return IIO_VAL_INT_PLUS_MICRO;
486                 case IIO_TEMP:
487                         *val = 0;
488                         *val2 = 145300;
489                         return IIO_VAL_INT_PLUS_MICRO;
490                 default:
491                         return -EINVAL;
492                 }
493                 break;
494         case (1 << IIO_CHAN_INFO_OFFSET_SEPARATE):
495                 *val = 25;
496                 return IIO_VAL_INT;
497         case (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE):
498                 switch (chan->type) {
499                 case IIO_GYRO:
500                         bits = 12;
501                         break;
502                 default:
503                         return -EINVAL;
504                 };
505                 mutex_lock(&indio_dev->mlock);
506                 addr = adis16260_addresses[chan->address][1];
507                 ret = adis16260_spi_read_reg_16(indio_dev, addr, &val16);
508                 if (ret) {
509                         mutex_unlock(&indio_dev->mlock);
510                         return ret;
511                 }
512                 val16 &= (1 << bits) - 1;
513                 val16 = (s16)(val16 << (16 - bits)) >> (16 - bits);
514                 *val = val16;
515                 mutex_unlock(&indio_dev->mlock);
516                 return IIO_VAL_INT;
517         case (1 << IIO_CHAN_INFO_CALIBSCALE_SEPARATE):
518                 switch (chan->type) {
519                 case IIO_GYRO:
520                         bits = 12;
521                         break;
522                 default:
523                         return -EINVAL;
524                 };
525                 mutex_lock(&indio_dev->mlock);
526                 addr = adis16260_addresses[chan->address][2];
527                 ret = adis16260_spi_read_reg_16(indio_dev, addr, &val16);
528                 if (ret) {
529                         mutex_unlock(&indio_dev->mlock);
530                         return ret;
531                 }
532                 *val = (1 << bits) - 1;
533                 mutex_unlock(&indio_dev->mlock);
534                 return IIO_VAL_INT;
535         }
536         return -EINVAL;
537 }
538
539 static int adis16260_write_raw(struct iio_dev *indio_dev,
540                                struct iio_chan_spec const *chan,
541                                int val,
542                                int val2,
543                                long mask)
544 {
545         int bits = 12;
546         s16 val16;
547         u8 addr;
548         switch (mask) {
549         case (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE):
550                 val16 = val & ((1 << bits) - 1);
551                 addr = adis16260_addresses[chan->address][1];
552                 return adis16260_spi_write_reg_16(indio_dev, addr, val16);
553         case (1 << IIO_CHAN_INFO_CALIBSCALE_SEPARATE):
554                 val16 = val & ((1 << bits) - 1);
555                 addr = adis16260_addresses[chan->address][2];
556                 return adis16260_spi_write_reg_16(indio_dev, addr, val16);
557         }
558         return -EINVAL;
559 }
560
561 static struct attribute *adis16260_attributes[] = {
562         &iio_dev_attr_sampling_frequency.dev_attr.attr,
563         &iio_dev_attr_sampling_frequency_available.dev_attr.attr,
564         &iio_dev_attr_reset.dev_attr.attr,
565         NULL
566 };
567
568 static const struct attribute_group adis16260_attribute_group = {
569         .attrs = adis16260_attributes,
570 };
571
572 static const struct iio_info adis16260_info = {
573         .attrs = &adis16260_attribute_group,
574         .read_raw = &adis16260_read_raw,
575         .write_raw = &adis16260_write_raw,
576         .driver_module = THIS_MODULE,
577 };
578
579 static int __devinit adis16260_probe(struct spi_device *spi)
580 {
581         int ret, regdone = 0;
582         struct adis16260_platform_data *pd = spi->dev.platform_data;
583         struct adis16260_state *st;
584         struct iio_dev *indio_dev;
585
586         /* setup the industrialio driver allocated elements */
587         indio_dev = iio_allocate_device(sizeof(*st));
588         if (indio_dev == NULL) {
589                 ret = -ENOMEM;
590                 goto error_ret;
591         }
592         st = iio_priv(indio_dev);
593         if (pd)
594                 st->negate = pd->negate;
595         /* this is only used for removal purposes */
596         spi_set_drvdata(spi, st);
597
598         st->us = spi;
599         mutex_init(&st->buf_lock);
600
601         indio_dev->name = spi_get_device_id(st->us)->name;
602         indio_dev->dev.parent = &spi->dev;
603         indio_dev->info = &adis16260_info;
604         indio_dev->num_channels
605                 = ARRAY_SIZE(adis16260_channels_x);
606         if (pd && pd->direction)
607                 switch (pd->direction) {
608                 case 'x':
609                         indio_dev->channels = adis16260_channels_x;
610                         break;
611                 case 'y':
612                         indio_dev->channels = adis16260_channels_y;
613                         break;
614                 case 'z':
615                         indio_dev->channels = adis16260_channels_z;
616                         break;
617                 default:
618                         return -EINVAL;
619                 }
620         else
621                 indio_dev->channels = adis16260_channels_x;
622         indio_dev->num_channels = ARRAY_SIZE(adis16260_channels_x);
623         indio_dev->modes = INDIO_DIRECT_MODE;
624
625         ret = adis16260_configure_ring(indio_dev);
626         if (ret)
627                 goto error_free_dev;
628
629         ret = iio_device_register(indio_dev);
630         if (ret)
631                 goto error_unreg_ring_funcs;
632         regdone = 1;
633         ret = iio_ring_buffer_register_ex(indio_dev->ring, 0,
634                                           indio_dev->channels,
635                                           ARRAY_SIZE(adis16260_channels_x));
636         if (ret) {
637                 printk(KERN_ERR "failed to initialize the ring\n");
638                 goto error_unreg_ring_funcs;
639         }
640
641         if (spi->irq) {
642                 ret = adis16260_probe_trigger(indio_dev);
643                 if (ret)
644                         goto error_uninitialize_ring;
645         }
646
647         /* Get the device into a sane initial state */
648         ret = adis16260_initial_setup(indio_dev);
649         if (ret)
650                 goto error_remove_trigger;
651         return 0;
652
653 error_remove_trigger:
654         adis16260_remove_trigger(indio_dev);
655 error_uninitialize_ring:
656         iio_ring_buffer_unregister(indio_dev->ring);
657 error_unreg_ring_funcs:
658         adis16260_unconfigure_ring(indio_dev);
659 error_free_dev:
660         if (regdone)
661                 iio_device_unregister(indio_dev);
662         else
663                 iio_free_device(indio_dev);
664 error_ret:
665         return ret;
666 }
667
668 static int adis16260_remove(struct spi_device *spi)
669 {
670         int ret;
671         struct iio_dev *indio_dev = spi_get_drvdata(spi);
672
673         ret = adis16260_stop_device(indio_dev);
674         if (ret)
675                 goto err_ret;
676
677         flush_scheduled_work();
678
679         adis16260_remove_trigger(indio_dev);
680         iio_ring_buffer_unregister(indio_dev->ring);
681         iio_device_unregister(indio_dev);
682         adis16260_unconfigure_ring(indio_dev);
683
684 err_ret:
685         return ret;
686 }
687
688 /*
689  * These parts do not need to be differentiated until someone adds
690  * support for the on chip filtering.
691  */
692 static const struct spi_device_id adis16260_id[] = {
693         {"adis16260", 0},
694         {"adis16265", 0},
695         {"adis16250", 0},
696         {"adis16255", 0},
697         {"adis16251", 1},
698         {}
699 };
700
701 static struct spi_driver adis16260_driver = {
702         .driver = {
703                 .name = "adis16260",
704                 .owner = THIS_MODULE,
705         },
706         .probe = adis16260_probe,
707         .remove = __devexit_p(adis16260_remove),
708         .id_table = adis16260_id,
709 };
710
711 static __init int adis16260_init(void)
712 {
713         return spi_register_driver(&adis16260_driver);
714 }
715 module_init(adis16260_init);
716
717 static __exit void adis16260_exit(void)
718 {
719         spi_unregister_driver(&adis16260_driver);
720 }
721 module_exit(adis16260_exit);
722
723 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
724 MODULE_DESCRIPTION("Analog Devices ADIS16260/5 Digital Gyroscope Sensor");
725 MODULE_LICENSE("GPL v2");