All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] staging:iio:gyro driver cleanups.
@ 2011-02-05 17:52 Jonathan Cameron
  2011-02-05 17:52 ` [PATCH 1/5] staging:iio:gyro:adis16060 cleanup and dead code removal Jonathan Cameron
                   ` (4 more replies)
  0 siblings, 5 replies; 9+ messages in thread
From: Jonathan Cameron @ 2011-02-05 17:52 UTC (permalink / raw)
  To: linux-iio; +Cc: mensch0815, device-drivers-devel, Jonathan Cameron

The first 3 of these are cleanups that have been on linux-iio for
quite some time. Ideally they would have an ack from someone at
Analog.

The last 2 are new.  They add support for the adis16251 into
the adis16260 driver and then remove the existing adis16251 driver.
I think I have dealt with all the difference between these parts
that are relevant to the driver.  This will cause a few minor
changes in the userspace interface.  There are other cleanups
needed in adis16260 but those can occur after this merge has
gone in.  If anyone has a chance to check I haven't missed any
incompatabilities that would be great.

Note I have none of these parts so any testing would be much
appreciated!  Unless I've messed up badly the parts already
supported by adis16260 should see no changes at all as a result
of the additional support.

Thanks,

Jonathan

Jonathan Cameron (5):
  staging:iio:gyro:adis16060 cleanup and dead code removal
  staging:iio:gyro:adis16080 unused stub removal and cleanup
  staging:iio:gyro:adis16130 stub removal and cleanup
  staging:iio:gyro: add adis16251 support to adis16260 driver.
  staging:iio:gyro remove adis16251 driver as now supported by
    adis16260 driver.

 drivers/staging/iio/gyro/Kconfig          |   14 +-
 drivers/staging/iio/gyro/adis16060.h      |   70 ---
 drivers/staging/iio/gyro/adis16060_core.c |   59 +--
 drivers/staging/iio/gyro/adis16080.h      |   84 +---
 drivers/staging/iio/gyro/adis16080_core.c |   54 +--
 drivers/staging/iio/gyro/adis16130.h      |   72 +---
 drivers/staging/iio/gyro/adis16130_core.c |   61 +--
 drivers/staging/iio/gyro/adis16251.h      |  185 -------
 drivers/staging/iio/gyro/adis16251_core.c |  777 -----------------------------
 drivers/staging/iio/gyro/adis16260_core.c |   49 ++-
 10 files changed, 78 insertions(+), 1347 deletions(-)
 delete mode 100644 drivers/staging/iio/gyro/adis16251.h
 delete mode 100644 drivers/staging/iio/gyro/adis16251_core.c

-- 
1.7.3.4


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/5] staging:iio:gyro:adis16060 cleanup and dead code removal
  2011-02-05 17:52 [PATCH 0/5] staging:iio:gyro driver cleanups Jonathan Cameron
@ 2011-02-05 17:52 ` Jonathan Cameron
  2011-02-05 17:52 ` [PATCH 2/5] staging:iio:gyro:adis16080 unused stub removal and cleanup Jonathan Cameron
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: Jonathan Cameron @ 2011-02-05 17:52 UTC (permalink / raw)
  To: linux-iio; +Cc: mensch0815, device-drivers-devel, Jonathan Cameron

Removed stubs related to buffering and triggering. Put them back
when they are actually needed.
Fixed line length issues.
Made a number of functions static as no longer in header.

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/staging/iio/gyro/adis16060.h      |   70 -----------------------------
 drivers/staging/iio/gyro/adis16060_core.c |   59 +++++-------------------
 2 files changed, 13 insertions(+), 116 deletions(-)

diff --git a/drivers/staging/iio/gyro/adis16060.h b/drivers/staging/iio/gyro/adis16060.h
index 5c00e53..e85121b 100644
--- a/drivers/staging/iio/gyro/adis16060.h
+++ b/drivers/staging/iio/gyro/adis16060.h
@@ -14,11 +14,7 @@
 /**
  * struct adis16060_state - device instance specific data
  * @us_w:			actual spi_device to write data
- * @work_trigger_to_ring: bh for triggered event handling
- * @inter:		used to check if new interrupt has been triggered
- * @last_timestamp:	passing timestamp from th to bh of interrupt handler
  * @indio_dev:		industrial I/O device structure
- * @trig:		data ready trigger registered with iio
  * @tx:			transmit buffer
  * @rx:			recieve buffer
  * @buf_lock:		mutex to protect tx and rx
@@ -26,76 +22,10 @@
 struct adis16060_state {
 	struct spi_device		*us_w;
 	struct spi_device		*us_r;
-	struct work_struct		work_trigger_to_ring;
-	s64				last_timestamp;
 	struct iio_dev			*indio_dev;
-	struct iio_trigger		*trig;
 	u8				*tx;
 	u8				*rx;
 	struct mutex			buf_lock;
 };
 
-#if defined(CONFIG_IIO_RING_BUFFER) && defined(THIS_HAS_RING_BUFFER_SUPPORT)
-/* At the moment triggers are only used for ring buffer
- * filling. This may change!
- */
-
-enum adis16060_scan {
-	ADIS16060_SCAN_GYRO,
-	ADIS16060_SCAN_TEMP,
-	ADIS16060_SCAN_ADC_1,
-	ADIS16060_SCAN_ADC_2,
-};
-
-void adis16060_remove_trigger(struct iio_dev *indio_dev);
-int adis16060_probe_trigger(struct iio_dev *indio_dev);
-
-ssize_t adis16060_read_data_from_ring(struct device *dev,
-				      struct device_attribute *attr,
-				      char *buf);
-
-
-int adis16060_configure_ring(struct iio_dev *indio_dev);
-void adis16060_unconfigure_ring(struct iio_dev *indio_dev);
-
-int adis16060_initialize_ring(struct iio_ring_buffer *ring);
-void adis16060_uninitialize_ring(struct iio_ring_buffer *ring);
-#else /* CONFIG_IIO_RING_BUFFER */
-
-static inline void adis16060_remove_trigger(struct iio_dev *indio_dev)
-{
-}
-
-static inline int adis16060_probe_trigger(struct iio_dev *indio_dev)
-{
-	return 0;
-}
-
-static inline ssize_t
-adis16060_read_data_from_ring(struct device *dev,
-			      struct device_attribute *attr,
-			      char *buf)
-{
-	return 0;
-}
-
-static int adis16060_configure_ring(struct iio_dev *indio_dev)
-{
-	return 0;
-}
-
-static inline void adis16060_unconfigure_ring(struct iio_dev *indio_dev)
-{
-}
-
-static inline int adis16060_initialize_ring(struct iio_ring_buffer *ring)
-{
-	return 0;
-}
-
-static inline void adis16060_uninitialize_ring(struct iio_ring_buffer *ring)
-{
-}
-
-#endif /* CONFIG_IIO_RING_BUFFER */
 #endif /* SPI_ADIS16060_H_ */
diff --git a/drivers/staging/iio/gyro/adis16060_core.c b/drivers/staging/iio/gyro/adis16060_core.c
index fc48aca..11f51f2 100644
--- a/drivers/staging/iio/gyro/adis16060_core.c
+++ b/drivers/staging/iio/gyro/adis16060_core.c
@@ -25,11 +25,9 @@
 
 #include "adis16060.h"
 
-#define DRIVER_NAME		"adis16060"
+static struct adis16060_state *adis16060_st;
 
-struct adis16060_state *adis16060_st;
-
-int adis16060_spi_write(struct device *dev,
+static int adis16060_spi_write(struct device *dev,
 		u8 val)
 {
 	int ret;
@@ -47,7 +45,7 @@ int adis16060_spi_write(struct device *dev,
 	return ret;
 }
 
-int adis16060_spi_read(struct device *dev,
+static int adis16060_spi_read(struct device *dev,
 		u16 *val)
 {
 	int ret;
@@ -58,12 +56,15 @@ int adis16060_spi_read(struct device *dev,
 
 	ret = spi_read(st->us_r, st->rx, 3);
 
-	/* The internal successive approximation ADC begins the conversion process
-	 * on the falling edge of MSEL1 and starts to place data MSB first on the
-	 * DOUT line at the 6th falling edge of SCLK
+	/* The internal successive approximation ADC begins the
+	 * conversion process on the falling edge of MSEL1 and
+	 * starts to place data MSB first on the DOUT line at
+	 * the 6th falling edge of SCLK
 	 */
 	if (ret == 0)
-		*val = ((st->rx[0] & 0x3) << 12) | (st->rx[1] << 4) | ((st->rx[2] >> 4) & 0xF);
+		*val = ((st->rx[0] & 0x3) << 12) |
+			(st->rx[1] << 4) |
+			((st->rx[2] >> 4) & 0xF);
 	mutex_unlock(&st->buf_lock);
 
 	return ret;
@@ -74,7 +75,7 @@ static ssize_t adis16060_read(struct device *dev,
 		char *buf)
 {
 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
-	u16 val;
+	u16 val = 0;
 	ssize_t ret;
 
 	/* Take the iio_dev status lock */
@@ -174,45 +175,14 @@ static int __devinit adis16060_r_probe(struct spi_device *spi)
 	st->indio_dev->driver_module = THIS_MODULE;
 	st->indio_dev->modes = INDIO_DIRECT_MODE;
 
-	ret = adis16060_configure_ring(st->indio_dev);
-	if (ret)
-		goto error_free_dev;
-
 	ret = iio_device_register(st->indio_dev);
 	if (ret)
-		goto error_unreg_ring_funcs;
+		goto error_free_dev;
 	regdone = 1;
 
-	ret = adis16060_initialize_ring(st->indio_dev->ring);
-	if (ret) {
-		printk(KERN_ERR "failed to initialize the ring\n");
-		goto error_unreg_ring_funcs;
-	}
-
-	if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0) {
-		ret = iio_register_interrupt_line(spi->irq,
-				st->indio_dev,
-				0,
-				IRQF_TRIGGER_RISING,
-				"adis16060");
-		if (ret)
-			goto error_uninitialize_ring;
-
-		ret = adis16060_probe_trigger(st->indio_dev);
-		if (ret)
-			goto error_unregister_line;
-	}
-
 	adis16060_st = st;
 	return 0;
 
-error_unregister_line:
-	if (st->indio_dev->modes & INDIO_RING_TRIGGERED)
-		iio_unregister_interrupt_line(st->indio_dev, 0);
-error_uninitialize_ring:
-	adis16060_uninitialize_ring(st->indio_dev->ring);
-error_unreg_ring_funcs:
-	adis16060_unconfigure_ring(st->indio_dev);
 error_free_dev:
 	if (regdone)
 		iio_device_unregister(st->indio_dev);
@@ -236,12 +206,9 @@ static int adis16060_r_remove(struct spi_device *spi)
 
 	flush_scheduled_work();
 
-	adis16060_remove_trigger(indio_dev);
 	if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0)
 		iio_unregister_interrupt_line(indio_dev, 0);
 
-	adis16060_uninitialize_ring(indio_dev->ring);
-	adis16060_unconfigure_ring(indio_dev);
 	iio_device_unregister(indio_dev);
 	kfree(st->tx);
 	kfree(st->rx);
@@ -315,5 +282,5 @@ static __exit void adis16060_exit(void)
 module_exit(adis16060_exit);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
-MODULE_DESCRIPTION("Analog Devices ADIS16060 Yaw Rate Gyroscope with SPI driver");
+MODULE_DESCRIPTION("Analog Devices ADIS16060 Yaw Rate Gyroscope Driver");
 MODULE_LICENSE("GPL v2");
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/5] staging:iio:gyro:adis16080 unused stub removal and cleanup
  2011-02-05 17:52 [PATCH 0/5] staging:iio:gyro driver cleanups Jonathan Cameron
  2011-02-05 17:52 ` [PATCH 1/5] staging:iio:gyro:adis16060 cleanup and dead code removal Jonathan Cameron
@ 2011-02-05 17:52 ` Jonathan Cameron
  2011-02-05 17:52 ` [PATCH 3/5] staging:iio:gyro:adis16130 " Jonathan Cameron
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: Jonathan Cameron @ 2011-02-05 17:52 UTC (permalink / raw)
  To: linux-iio; +Cc: mensch0815, device-drivers-devel, Jonathan Cameron

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/staging/iio/gyro/adis16080.h      |   84 +++-------------------------
 drivers/staging/iio/gyro/adis16080_core.c |   54 ++-----------------
 2 files changed, 14 insertions(+), 124 deletions(-)

diff --git a/drivers/staging/iio/gyro/adis16080.h b/drivers/staging/iio/gyro/adis16080.h
index 3fcbe67..f4e3851 100644
--- a/drivers/staging/iio/gyro/adis16080.h
+++ b/drivers/staging/iio/gyro/adis16080.h
@@ -1,14 +1,19 @@
 #ifndef SPI_ADIS16080_H_
 #define SPI_ADIS16080_H_
 
-#define ADIS16080_DIN_CODE   4 /* Output data format setting. 0: Twos complement. 1: Offset binary. */
+/* Output data format setting. 0: Twos complement. 1: Offset binary. */
+#define ADIS16080_DIN_CODE   4
 #define ADIS16080_DIN_GYRO   (0 << 10) /* Gyroscope output */
 #define ADIS16080_DIN_TEMP   (1 << 10) /* Temperature output */
 #define ADIS16080_DIN_AIN1   (2 << 10)
 #define ADIS16080_DIN_AIN2   (3 << 10)
-#define ADIS16080_DIN_WRITE  (1 << 15) /* 1: Write contents on DIN to control register.
-					* 0: No changes to control register.
-					*/
+
+/*
+ * 1: Write contents on DIN to control register.
+ * 0: No changes to control register.
+ */
+
+#define ADIS16080_DIN_WRITE  (1 << 15)
 
 #define ADIS16080_MAX_TX     2
 #define ADIS16080_MAX_RX     2
@@ -16,87 +21,16 @@
 /**
  * struct adis16080_state - device instance specific data
  * @us:			actual spi_device to write data
- * @work_trigger_to_ring: bh for triggered event handling
- * @inter:		used to check if new interrupt has been triggered
- * @last_timestamp:	passing timestamp from th to bh of interrupt handler
  * @indio_dev:		industrial I/O device structure
- * @trig:		data ready trigger registered with iio
  * @tx:			transmit buffer
  * @rx:			recieve buffer
  * @buf_lock:		mutex to protect tx and rx
  **/
 struct adis16080_state {
 	struct spi_device		*us;
-	struct work_struct		work_trigger_to_ring;
-	s64				last_timestamp;
 	struct iio_dev			*indio_dev;
-	struct iio_trigger		*trig;
 	u8				*tx;
 	u8				*rx;
 	struct mutex			buf_lock;
 };
-
-#if defined(CONFIG_IIO_RING_BUFFER) && defined(THIS_HAS_RING_BUFFER_SUPPORT)
-/* At the moment triggers are only used for ring buffer
- * filling. This may change!
- */
-
-enum adis16080_scan {
-	ADIS16080_SCAN_GYRO,
-	ADIS16080_SCAN_TEMP,
-	ADIS16080_SCAN_ADC_1,
-	ADIS16080_SCAN_ADC_2,
-};
-
-void adis16080_remove_trigger(struct iio_dev *indio_dev);
-int adis16080_probe_trigger(struct iio_dev *indio_dev);
-
-ssize_t adis16080_read_data_from_ring(struct device *dev,
-				      struct device_attribute *attr,
-				      char *buf);
-
-
-int adis16080_configure_ring(struct iio_dev *indio_dev);
-void adis16080_unconfigure_ring(struct iio_dev *indio_dev);
-
-int adis16080_initialize_ring(struct iio_ring_buffer *ring);
-void adis16080_uninitialize_ring(struct iio_ring_buffer *ring);
-#else /* CONFIG_IIO_RING_BUFFER */
-
-static inline void adis16080_remove_trigger(struct iio_dev *indio_dev)
-{
-}
-
-static inline int adis16080_probe_trigger(struct iio_dev *indio_dev)
-{
-	return 0;
-}
-
-static inline ssize_t
-adis16080_read_data_from_ring(struct device *dev,
-			      struct device_attribute *attr,
-			      char *buf)
-{
-	return 0;
-}
-
-static int adis16080_configure_ring(struct iio_dev *indio_dev)
-{
-	return 0;
-}
-
-static inline void adis16080_unconfigure_ring(struct iio_dev *indio_dev)
-{
-}
-
-static inline int adis16080_initialize_ring(struct iio_ring_buffer *ring)
-{
-	return 0;
-}
-
-static inline void adis16080_uninitialize_ring(struct iio_ring_buffer *ring)
-{
-}
-
-#endif /* CONFIG_IIO_RING_BUFFER */
 #endif /* SPI_ADIS16080_H_ */
diff --git a/drivers/staging/iio/gyro/adis16080_core.c b/drivers/staging/iio/gyro/adis16080_core.c
index 0efb768..252080b 100644
--- a/drivers/staging/iio/gyro/adis16080_core.c
+++ b/drivers/staging/iio/gyro/adis16080_core.c
@@ -25,11 +25,7 @@
 
 #include "adis16080.h"
 
-#define DRIVER_NAME		"adis16080"
-
-struct adis16080_state *adis16080_st;
-
-int adis16080_spi_write(struct device *dev,
+static int adis16080_spi_write(struct device *dev,
 		u16 val)
 {
 	int ret;
@@ -46,7 +42,7 @@ int adis16080_spi_write(struct device *dev,
 	return ret;
 }
 
-int adis16080_spi_read(struct device *dev,
+static int adis16080_spi_read(struct device *dev,
 		u16 *val)
 {
 	int ret;
@@ -69,7 +65,7 @@ static ssize_t adis16080_read(struct device *dev,
 		char *buf)
 {
 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
-	u16 val;
+	u16 val = 0;
 	ssize_t ret;
 
 	/* Take the iio_dev status lock */
@@ -169,45 +165,13 @@ static int __devinit adis16080_probe(struct spi_device *spi)
 	st->indio_dev->driver_module = THIS_MODULE;
 	st->indio_dev->modes = INDIO_DIRECT_MODE;
 
-	ret = adis16080_configure_ring(st->indio_dev);
-	if (ret)
-		goto error_free_dev;
-
 	ret = iio_device_register(st->indio_dev);
 	if (ret)
-		goto error_unreg_ring_funcs;
+		goto error_free_dev;
 	regdone = 1;
 
-	ret = adis16080_initialize_ring(st->indio_dev->ring);
-	if (ret) {
-		printk(KERN_ERR "failed to initialize the ring\n");
-		goto error_unreg_ring_funcs;
-	}
-
-	if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0) {
-		ret = iio_register_interrupt_line(spi->irq,
-				st->indio_dev,
-				0,
-				IRQF_TRIGGER_RISING,
-				"adis16080");
-		if (ret)
-			goto error_uninitialize_ring;
-
-		ret = adis16080_probe_trigger(st->indio_dev);
-		if (ret)
-			goto error_unregister_line;
-	}
-
-	adis16080_st = st;
 	return 0;
 
-error_unregister_line:
-	if (st->indio_dev->modes & INDIO_RING_TRIGGERED)
-		iio_unregister_interrupt_line(st->indio_dev, 0);
-error_uninitialize_ring:
-	adis16080_uninitialize_ring(st->indio_dev->ring);
-error_unreg_ring_funcs:
-	adis16080_unconfigure_ring(st->indio_dev);
 error_free_dev:
 	if (regdone)
 		iio_device_unregister(st->indio_dev);
@@ -229,14 +193,6 @@ static int adis16080_remove(struct spi_device *spi)
 	struct adis16080_state *st = spi_get_drvdata(spi);
 	struct iio_dev *indio_dev = st->indio_dev;
 
-	flush_scheduled_work();
-
-	adis16080_remove_trigger(indio_dev);
-	if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0)
-		iio_unregister_interrupt_line(indio_dev, 0);
-
-	adis16080_uninitialize_ring(indio_dev->ring);
-	adis16080_unconfigure_ring(indio_dev);
 	iio_device_unregister(indio_dev);
 	kfree(st->tx);
 	kfree(st->rx);
@@ -267,5 +223,5 @@ static __exit void adis16080_exit(void)
 module_exit(adis16080_exit);
 
 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
-MODULE_DESCRIPTION("Analog Devices ADIS16080/100 Yaw Rate Gyroscope with SPI driver");
+MODULE_DESCRIPTION("Analog Devices ADIS16080/100 Yaw Rate Gyroscope Driver");
 MODULE_LICENSE("GPL v2");
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/5] staging:iio:gyro:adis16130 stub removal and cleanup
  2011-02-05 17:52 [PATCH 0/5] staging:iio:gyro driver cleanups Jonathan Cameron
  2011-02-05 17:52 ` [PATCH 1/5] staging:iio:gyro:adis16060 cleanup and dead code removal Jonathan Cameron
  2011-02-05 17:52 ` [PATCH 2/5] staging:iio:gyro:adis16080 unused stub removal and cleanup Jonathan Cameron
@ 2011-02-05 17:52 ` Jonathan Cameron
  2011-02-05 17:52 ` [PATCH 4/5] staging:iio:gyro: add adis16251 support to adis16260 driver Jonathan Cameron
  2011-02-05 17:52 ` [PATCH 5/5] staging:iio:gyro remove adis16251 driver as now supported by " Jonathan Cameron
  4 siblings, 0 replies; 9+ messages in thread
From: Jonathan Cameron @ 2011-02-05 17:52 UTC (permalink / raw)
  To: linux-iio; +Cc: mensch0815, device-drivers-devel, Jonathan Cameron

Get rid of unused stubs for trigger and buffer support.
Fix line length issues.

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/staging/iio/gyro/adis16130.h      |   72 +---------------------------
 drivers/staging/iio/gyro/adis16130_core.c |   61 +++---------------------
 2 files changed, 10 insertions(+), 123 deletions(-)

diff --git a/drivers/staging/iio/gyro/adis16130.h b/drivers/staging/iio/gyro/adis16130.h
index ab80ef6..9efc4c7 100644
--- a/drivers/staging/iio/gyro/adis16130.h
+++ b/drivers/staging/iio/gyro/adis16130.h
@@ -4,7 +4,9 @@
 #define ADIS16130_CON         0x0
 #define ADIS16130_CON_RD      (1 << 6)
 #define ADIS16130_IOP         0x1
-#define ADIS16130_IOP_ALL_RDY (1 << 3) /* 1 = data-ready signal low when unread data on all channels; */
+
+/* 1 = data-ready signal low when unread data on all channels; */
+#define ADIS16130_IOP_ALL_RDY (1 << 3)
 #define ADIS16130_IOP_SYNC    (1 << 0) /* 1 = synchronization enabled */
 #define ADIS16130_RATEDATA    0x8 /* Gyroscope output, rate of rotation */
 #define ADIS16130_TEMPDATA    0xA /* Temperature output */
@@ -23,86 +25,18 @@
 /**
  * struct adis16130_state - device instance specific data
  * @us:			actual spi_device to write data
- * @work_trigger_to_ring: bh for triggered event handling
- * @inter:		used to check if new interrupt has been triggered
- * @last_timestamp:	passing timestamp from th to bh of interrupt handler
  * @indio_dev:		industrial I/O device structure
- * @trig:		data ready trigger registered with iio
  * @tx:			transmit buffer
  * @rx:			recieve buffer
  * @buf_lock:		mutex to protect tx and rx
  **/
 struct adis16130_state {
 	struct spi_device		*us;
-	struct work_struct		work_trigger_to_ring;
-	s64				last_timestamp;
 	struct iio_dev			*indio_dev;
-	struct iio_trigger		*trig;
 	u8				*tx;
 	u8				*rx;
 	u32                             mode; /* 1: 24bits mode 0:16bits mode */
 	struct mutex			buf_lock;
 };
 
-#if defined(CONFIG_IIO_RING_BUFFER) && defined(THIS_HAS_RING_BUFFER_SUPPORT)
-/* At the moment triggers are only used for ring buffer
- * filling. This may change!
- */
-
-enum adis16130_scan {
-	ADIS16130_SCAN_GYRO,
-	ADIS16130_SCAN_TEMP,
-};
-
-void adis16130_remove_trigger(struct iio_dev *indio_dev);
-int adis16130_probe_trigger(struct iio_dev *indio_dev);
-
-ssize_t adis16130_read_data_from_ring(struct device *dev,
-				      struct device_attribute *attr,
-				      char *buf);
-
-
-int adis16130_configure_ring(struct iio_dev *indio_dev);
-void adis16130_unconfigure_ring(struct iio_dev *indio_dev);
-
-int adis16130_initialize_ring(struct iio_ring_buffer *ring);
-void adis16130_uninitialize_ring(struct iio_ring_buffer *ring);
-#else /* CONFIG_IIO_RING_BUFFER */
-
-static inline void adis16130_remove_trigger(struct iio_dev *indio_dev)
-{
-}
-
-static inline int adis16130_probe_trigger(struct iio_dev *indio_dev)
-{
-	return 0;
-}
-
-static inline ssize_t
-adis16130_read_data_from_ring(struct device *dev,
-			      struct device_attribute *attr,
-			      char *buf)
-{
-	return 0;
-}
-
-static int adis16130_configure_ring(struct iio_dev *indio_dev)
-{
-	return 0;
-}
-
-static inline void adis16130_unconfigure_ring(struct iio_dev *indio_dev)
-{
-}
-
-static inline int adis16130_initialize_ring(struct iio_ring_buffer *ring)
-{
-	return 0;
-}
-
-static inline void adis16130_uninitialize_ring(struct iio_ring_buffer *ring)
-{
-}
-
-#endif /* CONFIG_IIO_RING_BUFFER */
 #endif /* SPI_ADIS16130_H_ */
diff --git a/drivers/staging/iio/gyro/adis16130_core.c b/drivers/staging/iio/gyro/adis16130_core.c
index 49ffc7b..04d81d4 100644
--- a/drivers/staging/iio/gyro/adis16130_core.c
+++ b/drivers/staging/iio/gyro/adis16130_core.c
@@ -25,11 +25,7 @@
 
 #include "adis16130.h"
 
-#define DRIVER_NAME		"adis16130"
-
-struct adis16130_state *adis16130_st;
-
-int adis16130_spi_write(struct device *dev, u8 reg_addr,
+static int adis16130_spi_write(struct device *dev, u8 reg_addr,
 		u8 val)
 {
 	int ret;
@@ -46,7 +42,7 @@ int adis16130_spi_write(struct device *dev, u8 reg_addr,
 	return ret;
 }
 
-int adis16130_spi_read(struct device *dev, u8 reg_addr,
+static int adis16130_spi_read(struct device *dev, u8 reg_addr,
 		u32 *val)
 {
 	int ret;
@@ -148,7 +144,8 @@ static IIO_DEV_ATTR_GYRO(adis16130_gyro_read,
 #define IIO_DEV_ATTR_BITS_MODE(_mode, _show, _store, _addr)	\
 	IIO_DEVICE_ATTR(bits_mode, _mode, _show, _store, _addr)
 
-static IIO_DEV_ATTR_BITS_MODE(S_IWUSR | S_IRUGO, adis16130_bitsmode_read, adis16130_bitsmode_write,
+static IIO_DEV_ATTR_BITS_MODE(S_IWUSR | S_IRUGO, adis16130_bitsmode_read,
+			adis16130_bitsmode_write,
 			ADIS16130_MODE);
 
 static struct attribute *adis16130_event_attributes[] = {
@@ -173,7 +170,7 @@ static const struct attribute_group adis16130_attribute_group = {
 
 static int __devinit adis16130_probe(struct spi_device *spi)
 {
-	int ret, regdone = 0;
+	int ret;
 	struct adis16130_state *st = kzalloc(sizeof *st, GFP_KERNEL);
 	if (!st) {
 		ret =  -ENOMEM;
@@ -211,50 +208,14 @@ static int __devinit adis16130_probe(struct spi_device *spi)
 	st->indio_dev->modes = INDIO_DIRECT_MODE;
 	st->mode = 1;
 
-	ret = adis16130_configure_ring(st->indio_dev);
-	if (ret)
-		goto error_free_dev;
-
 	ret = iio_device_register(st->indio_dev);
 	if (ret)
-		goto error_unreg_ring_funcs;
-	regdone = 1;
-
-	ret = adis16130_initialize_ring(st->indio_dev->ring);
-	if (ret) {
-		printk(KERN_ERR "failed to initialize the ring\n");
-		goto error_unreg_ring_funcs;
-	}
-
-	if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0) {
-		ret = iio_register_interrupt_line(spi->irq,
-				st->indio_dev,
-				0,
-				IRQF_TRIGGER_RISING,
-				"adis16130");
-		if (ret)
-			goto error_uninitialize_ring;
-
-		ret = adis16130_probe_trigger(st->indio_dev);
-		if (ret)
-			goto error_unregister_line;
-	}
+		goto error_free_dev;
 
-	adis16130_st = st;
 	return 0;
 
-error_unregister_line:
-	if (st->indio_dev->modes & INDIO_RING_TRIGGERED)
-		iio_unregister_interrupt_line(st->indio_dev, 0);
-error_uninitialize_ring:
-	adis16130_uninitialize_ring(st->indio_dev->ring);
-error_unreg_ring_funcs:
-	adis16130_unconfigure_ring(st->indio_dev);
 error_free_dev:
-	if (regdone)
-		iio_device_unregister(st->indio_dev);
-	else
-		iio_free_device(st->indio_dev);
+	iio_free_device(st->indio_dev);
 error_free_tx:
 	kfree(st->tx);
 error_free_rx:
@@ -271,14 +232,6 @@ static int adis16130_remove(struct spi_device *spi)
 	struct adis16130_state *st = spi_get_drvdata(spi);
 	struct iio_dev *indio_dev = st->indio_dev;
 
-	flush_scheduled_work();
-
-	adis16130_remove_trigger(indio_dev);
-	if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0)
-		iio_unregister_interrupt_line(indio_dev, 0);
-
-	adis16130_uninitialize_ring(indio_dev->ring);
-	adis16130_unconfigure_ring(indio_dev);
 	iio_device_unregister(indio_dev);
 	kfree(st->tx);
 	kfree(st->rx);
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 4/5] staging:iio:gyro: add adis16251 support to adis16260 driver.
  2011-02-05 17:52 [PATCH 0/5] staging:iio:gyro driver cleanups Jonathan Cameron
                   ` (2 preceding siblings ...)
  2011-02-05 17:52 ` [PATCH 3/5] staging:iio:gyro:adis16130 " Jonathan Cameron
@ 2011-02-05 17:52 ` Jonathan Cameron
  2011-02-11 14:11   ` Jonathan Cameron
  2011-02-05 17:52 ` [PATCH 5/5] staging:iio:gyro remove adis16251 driver as now supported by " Jonathan Cameron
  4 siblings, 1 reply; 9+ messages in thread
From: Jonathan Cameron @ 2011-02-05 17:52 UTC (permalink / raw)
  To: linux-iio; +Cc: mensch0815, device-drivers-devel, Jonathan Cameron

These parts are very similar and the adis16260 driver supports
a lot of additional functionality.

Precursor to removal of adis16251 driver.

Note that some supported devices were missing from Kconfig help text
and are also added in this patch.

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/staging/iio/gyro/Kconfig          |    4 +-
 drivers/staging/iio/gyro/adis16260_core.c |   49 +++++++++++++++++++++++------
 2 files changed, 41 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/iio/gyro/Kconfig b/drivers/staging/iio/gyro/Kconfig
index 236f15f..5bba4b0 100644
--- a/drivers/staging/iio/gyro/Kconfig
+++ b/drivers/staging/iio/gyro/Kconfig
@@ -25,13 +25,13 @@ config ADIS16130
 	  Angular Rate Sensor driver.
 
 config ADIS16260
-	tristate "Analog Devices ADIS16260 ADIS16265 Digital Gyroscope Sensor SPI driver"
+	tristate "Analog Devices ADIS16260 Digital Gyroscope Sensor SPI driver"
 	depends on SPI
 	select IIO_TRIGGER if IIO_RING_BUFFER
 	select IIO_SW_RING if IIO_RING_BUFFER
 	help
 	  Say yes here to build support for Analog Devices ADIS16260 ADIS16265
-	  programmable digital gyroscope sensor.
+	  ADIS16250 ADIS16255 and ADIS16251 programmable digital gyroscope sensors.
 
 	  This driver can also be built as a module.  If so, the module
 	  will be called adis16260.
diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
index 045e27d..69a29ec 100644
--- a/drivers/staging/iio/gyro/adis16260_core.c
+++ b/drivers/staging/iio/gyro/adis16260_core.c
@@ -238,10 +238,24 @@ error_ret:
 	return ret ? ret : len;
 }
 
+static ssize_t adis16260_read_frequency_available(struct device *dev,
+						  struct device_attribute *attr,
+						  char *buf)
+{
+	struct iio_dev *indio_dev = dev_get_drvdata(dev);
+	struct adis16260_state *st = iio_dev_get_devdata(indio_dev);
+	if (spi_get_device_id(st->us)->driver_data)
+		return sprintf(buf, "%s\n", "0.129 ~ 256");
+	else
+		return sprintf(buf, "%s\n", "256 2048");
+}
+
 static ssize_t adis16260_read_frequency(struct device *dev,
 		struct device_attribute *attr,
 		char *buf)
 {
+	struct iio_dev *indio_dev = dev_get_drvdata(dev);
+	struct adis16260_state *st = iio_dev_get_devdata(indio_dev);
 	int ret, len = 0;
 	u16 t;
 	int sps;
@@ -250,7 +264,11 @@ static ssize_t adis16260_read_frequency(struct device *dev,
 			&t);
 	if (ret)
 		return ret;
-	sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
+
+	if (spi_get_device_id(st->us)->driver_data) /* If an adis16251 */
+		sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 8 : 256;
+	else
+		sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
 	sps /= (t & ADIS16260_SMPL_PRD_DIV_MASK) + 1;
 	len = sprintf(buf, "%d SPS\n", sps);
 	return len;
@@ -272,16 +290,21 @@ static ssize_t adis16260_write_frequency(struct device *dev,
 		return ret;
 
 	mutex_lock(&indio_dev->mlock);
-
-	t = (2048 / val);
-	if (t > 0)
-		t--;
-	t &= ADIS16260_SMPL_PRD_DIV_MASK;
+	if (spi_get_device_id(st->us)) {
+		t = (256 / val);
+		if (t > 0)
+			t--;
+		t &= ADIS16260_SMPL_PRD_DIV_MASK;
+	} else {
+		t = (2048 / val);
+		if (t > 0)
+			t--;
+		t &= ADIS16260_SMPL_PRD_DIV_MASK;
+	}
 	if ((t & ADIS16260_SMPL_PRD_DIV_MASK) >= 0x0A)
 		st->us->max_speed_hz = ADIS16260_SPI_SLOW;
 	else
 		st->us->max_speed_hz = ADIS16260_SPI_FAST;
-
 	ret = adis16260_spi_write_reg_8(dev,
 			ADIS16260_SMPL_PRD,
 			t);
@@ -302,7 +325,10 @@ static ssize_t adis16260_read_gyro_scale(struct device *dev,
 	if (st->negate)
 		ret = sprintf(buf, "-");
 	/* Take the iio_dev status lock */
-	ret += sprintf(buf + ret, "%s\n", "0.00127862821");
+	if (spi_get_device_id(st->us)->driver_data)
+		ret += sprintf(buf + ret, "%s\n", "0.00031974432");
+	else
+		ret += sprintf(buf + ret, "%s\n", "0.00127862821");
 
 	return ret;
 }
@@ -475,7 +501,9 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
 
 static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, adis16260_write_reset, 0);
 
-static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("256 2048");
+
+static IIO_DEVICE_ATTR(sampling_frequency_available,
+		       S_IRUGO, adis16260_read_frequency_available, NULL, 0);
 
 static IIO_CONST_ATTR_NAME("adis16260");
 
@@ -525,7 +553,7 @@ static ADIS16260_GYRO_ATTR_SET(_Z);
 		&iio_dev_attr_in1_raw.dev_attr.attr,			\
 		&iio_const_attr_in1_scale.dev_attr.attr,		\
 		&iio_dev_attr_sampling_frequency.dev_attr.attr,		\
-		&iio_const_attr_sampling_frequency_available.dev_attr.attr, \
+		&iio_dev_attr_sampling_frequency_available.dev_attr.attr, \
 		&iio_dev_attr_reset.dev_attr.attr,			\
 		&iio_const_attr_name.dev_attr.attr,			\
 		NULL							\
@@ -693,6 +721,7 @@ static const struct spi_device_id adis16260_id[] = {
 	{"adis16265", 0},
 	{"adis16250", 0},
 	{"adis16255", 0},
+	{"adis16251", 1},
 	{}
 };
 
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 5/5] staging:iio:gyro remove adis16251 driver as now supported by adis16260 driver.
  2011-02-05 17:52 [PATCH 0/5] staging:iio:gyro driver cleanups Jonathan Cameron
                   ` (3 preceding siblings ...)
  2011-02-05 17:52 ` [PATCH 4/5] staging:iio:gyro: add adis16251 support to adis16260 driver Jonathan Cameron
@ 2011-02-05 17:52 ` Jonathan Cameron
  4 siblings, 0 replies; 9+ messages in thread
From: Jonathan Cameron @ 2011-02-05 17:52 UTC (permalink / raw)
  To: linux-iio; +Cc: mensch0815, device-drivers-devel, Jonathan Cameron

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/staging/iio/gyro/Kconfig          |   10 -
 drivers/staging/iio/gyro/adis16251.h      |  185 -------
 drivers/staging/iio/gyro/adis16251_core.c |  777 -----------------------------
 3 files changed, 0 insertions(+), 972 deletions(-)

diff --git a/drivers/staging/iio/gyro/Kconfig b/drivers/staging/iio/gyro/Kconfig
index 5bba4b0..8b78fa0 100644
--- a/drivers/staging/iio/gyro/Kconfig
+++ b/drivers/staging/iio/gyro/Kconfig
@@ -35,13 +35,3 @@ config ADIS16260
 
 	  This driver can also be built as a module.  If so, the module
 	  will be called adis16260.
-
-config ADIS16251
-	tristate "Analog Devices ADIS16251 Digital Gyroscope Sensor SPI driver"
-	depends on SPI
-	help
-	  Say yes here to build support for Analog Devices adis16261 programmable
-	  digital gyroscope sensor.
-
-	  This driver can also be built as a module.  If so, the module
-	  will be called adis16251.
diff --git a/drivers/staging/iio/gyro/adis16251.h b/drivers/staging/iio/gyro/adis16251.h
deleted file mode 100644
index d23852c..0000000
--- a/drivers/staging/iio/gyro/adis16251.h
+++ /dev/null
@@ -1,185 +0,0 @@
-#ifndef SPI_ADIS16251_H_
-#define SPI_ADIS16251_H_
-
-#define ADIS16251_STARTUP_DELAY	220 /* ms */
-
-#define ADIS16251_READ_REG(a)    a
-#define ADIS16251_WRITE_REG(a) ((a) | 0x80)
-
-#define ADIS16251_ENDURANCE  0x00 /* Flash memory write count */
-#define ADIS16251_SUPPLY_OUT 0x02 /* Power supply measurement */
-#define ADIS16251_GYRO_OUT   0x04 /* X-axis gyroscope output */
-#define ADIS16251_AUX_ADC    0x0A /* analog input channel measurement */
-#define ADIS16251_TEMP_OUT   0x0C /* internal temperature measurement */
-#define ADIS16251_ANGL_OUT   0x0E /* angle displacement */
-#define ADIS16251_GYRO_OFF   0x14 /* Calibration, offset/bias adjustment */
-#define ADIS16251_GYRO_SCALE 0x16 /* Calibration, scale adjustment */
-#define ADIS16251_ALM_MAG1   0x20 /* Alarm 1 magnitude/polarity setting */
-#define ADIS16251_ALM_MAG2   0x22 /* Alarm 2 magnitude/polarity setting */
-#define ADIS16251_ALM_SMPL1  0x24 /* Alarm 1 dynamic rate of change setting */
-#define ADIS16251_ALM_SMPL2  0x26 /* Alarm 2 dynamic rate of change setting */
-#define ADIS16251_ALM_CTRL   0x28 /* Alarm control */
-#define ADIS16251_AUX_DAC    0x30 /* Auxiliary DAC data */
-#define ADIS16251_GPIO_CTRL  0x32 /* Control, digital I/O line */
-#define ADIS16251_MSC_CTRL   0x34 /* Control, data ready, self-test settings */
-#define ADIS16251_SMPL_PRD   0x36 /* Control, internal sample rate */
-#define ADIS16251_SENS_AVG   0x38 /* Control, dynamic range, filtering */
-#define ADIS16251_SLP_CNT    0x3A /* Control, sleep mode initiation */
-#define ADIS16251_DIAG_STAT  0x3C /* Diagnostic, error flags */
-#define ADIS16251_GLOB_CMD   0x3E /* Control, global commands */
-
-#define ADIS16251_ERROR_ACTIVE			(1<<14)
-#define ADIS16251_NEW_DATA			(1<<14)
-
-/* MSC_CTRL */
-#define ADIS16251_MSC_CTRL_INT_SELF_TEST	(1<<10) /* Internal self-test enable */
-#define ADIS16251_MSC_CTRL_NEG_SELF_TEST	(1<<9)
-#define ADIS16251_MSC_CTRL_POS_SELF_TEST	(1<<8)
-#define ADIS16251_MSC_CTRL_DATA_RDY_EN		(1<<2)
-#define ADIS16251_MSC_CTRL_DATA_RDY_POL_HIGH	(1<<1)
-#define ADIS16251_MSC_CTRL_DATA_RDY_DIO2	(1<<0)
-
-/* SMPL_PRD */
-#define ADIS16251_SMPL_PRD_TIME_BASE	(1<<7) /* Time base (tB): 0 = 1.953 ms, 1 = 60.54 ms */
-#define ADIS16251_SMPL_PRD_DIV_MASK	0x7F
-
-/* SLP_CNT */
-#define ADIS16251_SLP_CNT_POWER_OFF     0x80
-
-/* DIAG_STAT */
-#define ADIS16251_DIAG_STAT_ALARM2	(1<<9)
-#define ADIS16251_DIAG_STAT_ALARM1	(1<<8)
-#define ADIS16251_DIAG_STAT_SELF_TEST	(1<<5)
-#define ADIS16251_DIAG_STAT_OVERFLOW	(1<<4)
-#define ADIS16251_DIAG_STAT_SPI_FAIL	(1<<3)
-#define ADIS16251_DIAG_STAT_FLASH_UPT	(1<<2)
-#define ADIS16251_DIAG_STAT_POWER_HIGH	(1<<1)
-#define ADIS16251_DIAG_STAT_POWER_LOW	(1<<0)
-
-#define ADIS16251_DIAG_STAT_ERR_MASK (ADIS16251_DIAG_STAT_ALARM2 | \
-				      ADIS16251_DIAG_STAT_ALARM1 | \
-				      ADIS16251_DIAG_STAT_SELF_TEST | \
-				      ADIS16251_DIAG_STAT_OVERFLOW | \
-				      ADIS16251_DIAG_STAT_SPI_FAIL | \
-				      ADIS16251_DIAG_STAT_FLASH_UPT | \
-				      ADIS16251_DIAG_STAT_POWER_HIGH | \
-				      ADIS16251_DIAG_STAT_POWER_LOW)
-
-/* GLOB_CMD */
-#define ADIS16251_GLOB_CMD_SW_RESET	(1<<7)
-#define ADIS16251_GLOB_CMD_FLASH_UPD	(1<<3)
-#define ADIS16251_GLOB_CMD_DAC_LATCH	(1<<2)
-#define ADIS16251_GLOB_CMD_FAC_CALIB	(1<<1)
-#define ADIS16251_GLOB_CMD_AUTO_NULL	(1<<0)
-
-#define ADIS16251_MAX_TX 24
-#define ADIS16251_MAX_RX 24
-
-#define ADIS16251_SPI_SLOW	(u32)(300 * 1000)
-#define ADIS16251_SPI_BURST	(u32)(1000 * 1000)
-#define ADIS16251_SPI_FAST	(u32)(2000 * 1000)
-
-/**
- * struct adis16251_state - device instance specific data
- * @us:			actual spi_device
- * @work_trigger_to_ring: bh for triggered event handling
- * @inter:		used to check if new interrupt has been triggered
- * @last_timestamp:	passing timestamp from th to bh of interrupt handler
- * @indio_dev:		industrial I/O device structure
- * @trig:		data ready trigger registered with iio
- * @tx:			transmit buffer
- * @rx:			recieve buffer
- * @buf_lock:		mutex to protect tx and rx
- **/
-struct adis16251_state {
-	struct spi_device		*us;
-	struct work_struct		work_trigger_to_ring;
-	s64				last_timestamp;
-	struct iio_dev			*indio_dev;
-	struct iio_trigger		*trig;
-	u8				*tx;
-	u8				*rx;
-	struct mutex			buf_lock;
-};
-
-int adis16251_spi_write_reg_8(struct device *dev,
-			      u8 reg_address,
-			      u8 val);
-
-int adis16251_spi_read_burst(struct device *dev, u8 *rx);
-
-int adis16251_spi_read_sequence(struct device *dev,
-				      u8 *tx, u8 *rx, int num);
-
-int adis16251_set_irq(struct device *dev, bool enable);
-
-int adis16251_reset(struct device *dev);
-
-int adis16251_stop_device(struct device *dev);
-
-int adis16251_check_status(struct device *dev);
-
-#if defined(CONFIG_IIO_RING_BUFFER) && defined(THIS_HAS_RING_BUFFER_SUPPORT)
-/* At the moment triggers are only used for ring buffer
- * filling. This may change!
- */
-
-enum adis16251_scan {
-	ADIS16251_SCAN_SUPPLY,
-	ADIS16251_SCAN_GYRO,
-	ADIS16251_SCAN_TEMP,
-	ADIS16251_SCAN_ADC_0,
-};
-
-void adis16251_remove_trigger(struct iio_dev *indio_dev);
-int adis16251_probe_trigger(struct iio_dev *indio_dev);
-
-ssize_t adis16251_read_data_from_ring(struct device *dev,
-				      struct device_attribute *attr,
-				      char *buf);
-
-
-int adis16251_configure_ring(struct iio_dev *indio_dev);
-void adis16251_unconfigure_ring(struct iio_dev *indio_dev);
-
-int adis16251_initialize_ring(struct iio_ring_buffer *ring);
-void adis16251_uninitialize_ring(struct iio_ring_buffer *ring);
-#else /* CONFIG_IIO_RING_BUFFER */
-
-static inline void adis16251_remove_trigger(struct iio_dev *indio_dev)
-{
-}
-
-static inline int adis16251_probe_trigger(struct iio_dev *indio_dev)
-{
-	return 0;
-}
-
-static inline ssize_t
-adis16251_read_data_from_ring(struct device *dev,
-			      struct device_attribute *attr,
-			      char *buf)
-{
-	return 0;
-}
-
-static int adis16251_configure_ring(struct iio_dev *indio_dev)
-{
-	return 0;
-}
-
-static inline void adis16251_unconfigure_ring(struct iio_dev *indio_dev)
-{
-}
-
-static inline int adis16251_initialize_ring(struct iio_ring_buffer *ring)
-{
-	return 0;
-}
-
-static inline void adis16251_uninitialize_ring(struct iio_ring_buffer *ring)
-{
-}
-
-#endif /* CONFIG_IIO_RING_BUFFER */
-#endif /* SPI_ADIS16251_H_ */
diff --git a/drivers/staging/iio/gyro/adis16251_core.c b/drivers/staging/iio/gyro/adis16251_core.c
deleted file mode 100644
index a0d400f..0000000
--- a/drivers/staging/iio/gyro/adis16251_core.c
+++ /dev/null
@@ -1,777 +0,0 @@
-/*
- * ADIS16251 Programmable Digital Gyroscope Sensor Driver
- *
- * Copyright 2010 Analog Devices Inc.
- *
- * Licensed under the GPL-2 or later.
- */
-
-#include <linux/interrupt.h>
-#include <linux/irq.h>
-#include <linux/gpio.h>
-#include <linux/delay.h>
-#include <linux/mutex.h>
-#include <linux/device.h>
-#include <linux/kernel.h>
-#include <linux/spi/spi.h>
-#include <linux/slab.h>
-#include <linux/sysfs.h>
-#include <linux/list.h>
-
-#include "../iio.h"
-#include "../sysfs.h"
-#include "gyro.h"
-#include "../adc/adc.h"
-
-#include "adis16251.h"
-
-#define DRIVER_NAME		"adis16251"
-
-/* At the moment the spi framework doesn't allow global setting of cs_change.
- * It's in the likely to be added comment at the top of spi.h.
- * This means that use cannot be made of spi_write etc.
- */
-
-/**
- * adis16251_spi_write_reg_8() - write single byte to a register
- * @dev: device associated with child of actual device (iio_dev or iio_trig)
- * @reg_address: the address of the register to be written
- * @val: the value to write
- **/
-int adis16251_spi_write_reg_8(struct device *dev,
-		u8 reg_address,
-		u8 val)
-{
-	int ret;
-	struct iio_dev *indio_dev = dev_get_drvdata(dev);
-	struct adis16251_state *st = iio_dev_get_devdata(indio_dev);
-
-	mutex_lock(&st->buf_lock);
-	st->tx[0] = ADIS16251_WRITE_REG(reg_address);
-	st->tx[1] = val;
-
-	ret = spi_write(st->us, st->tx, 2);
-	mutex_unlock(&st->buf_lock);
-
-	return ret;
-}
-
-/**
- * adis16251_spi_write_reg_16() - write 2 bytes to a pair of registers
- * @dev: device associated with child of actual device (iio_dev or iio_trig)
- * @reg_address: the address of the lower of the two registers. Second register
- *               is assumed to have address one greater.
- * @val: value to be written
- **/
-static int adis16251_spi_write_reg_16(struct device *dev,
-		u8 lower_reg_address,
-		u16 value)
-{
-	int ret;
-	struct spi_message msg;
-	struct iio_dev *indio_dev = dev_get_drvdata(dev);
-	struct adis16251_state *st = iio_dev_get_devdata(indio_dev);
-	struct spi_transfer xfers[] = {
-		{
-			.tx_buf = st->tx,
-			.bits_per_word = 8,
-			.len = 2,
-			.cs_change = 1,
-		}, {
-			.tx_buf = st->tx + 2,
-			.bits_per_word = 8,
-			.len = 2,
-			.cs_change = 1,
-		},
-	};
-
-	mutex_lock(&st->buf_lock);
-	st->tx[0] = ADIS16251_WRITE_REG(lower_reg_address);
-	st->tx[1] = value & 0xFF;
-	st->tx[2] = ADIS16251_WRITE_REG(lower_reg_address + 1);
-	st->tx[3] = (value >> 8) & 0xFF;
-
-	spi_message_init(&msg);
-	spi_message_add_tail(&xfers[0], &msg);
-	spi_message_add_tail(&xfers[1], &msg);
-	ret = spi_sync(st->us, &msg);
-	mutex_unlock(&st->buf_lock);
-
-	return ret;
-}
-
-/**
- * adis16251_spi_read_reg_16() - read 2 bytes from a 16-bit register
- * @dev: device associated with child of actual device (iio_dev or iio_trig)
- * @reg_address: the address of the lower of the two registers. Second register
- *               is assumed to have address one greater.
- * @val: somewhere to pass back the value read
- **/
-static int adis16251_spi_read_reg_16(struct device *dev,
-		u8 lower_reg_address,
-		u16 *val)
-{
-	struct spi_message msg;
-	struct iio_dev *indio_dev = dev_get_drvdata(dev);
-	struct adis16251_state *st = iio_dev_get_devdata(indio_dev);
-	int ret;
-	struct spi_transfer xfers[] = {
-		{
-			.tx_buf = st->tx,
-			.bits_per_word = 8,
-			.len = 2,
-			.cs_change = 1,
-		}, {
-			.rx_buf = st->rx,
-			.bits_per_word = 8,
-			.len = 2,
-			.cs_change = 1,
-		},
-	};
-
-	mutex_lock(&st->buf_lock);
-	st->tx[0] = ADIS16251_READ_REG(lower_reg_address);
-	st->tx[1] = 0;
-	st->tx[2] = 0;
-	st->tx[3] = 0;
-
-	spi_message_init(&msg);
-	spi_message_add_tail(&xfers[0], &msg);
-	spi_message_add_tail(&xfers[1], &msg);
-	ret = spi_sync(st->us, &msg);
-	if (ret) {
-		dev_err(&st->us->dev, "problem when reading 16 bit register 0x%02X",
-				lower_reg_address);
-		goto error_ret;
-	}
-	*val = (st->rx[0] << 8) | st->rx[1];
-
-error_ret:
-	mutex_unlock(&st->buf_lock);
-	return ret;
-}
-
-/**
- * adis16251_spi_read_burst() - read all data registers
- * @dev: device associated with child of actual device (iio_dev or iio_trig)
- * @rx: somewhere to pass back the value read (min size is 24 bytes)
- **/
-int adis16251_spi_read_burst(struct device *dev, u8 *rx)
-{
-	struct spi_message msg;
-	struct iio_dev *indio_dev = dev_get_drvdata(dev);
-	struct adis16251_state *st = iio_dev_get_devdata(indio_dev);
-	u32 old_speed_hz = st->us->max_speed_hz;
-	int ret;
-
-	struct spi_transfer xfers[] = {
-		{
-			.tx_buf = st->tx,
-			.bits_per_word = 8,
-			.len = 2,
-			.cs_change = 0,
-		}, {
-			.rx_buf = rx,
-			.bits_per_word = 8,
-			.len = 24,
-			.cs_change = 1,
-		},
-	};
-
-	mutex_lock(&st->buf_lock);
-	st->tx[0] = ADIS16251_READ_REG(ADIS16251_GLOB_CMD);
-	st->tx[1] = 0;
-
-	spi_message_init(&msg);
-	spi_message_add_tail(&xfers[0], &msg);
-	spi_message_add_tail(&xfers[1], &msg);
-
-	st->us->max_speed_hz = min(ADIS16251_SPI_BURST, old_speed_hz);
-	spi_setup(st->us);
-
-	ret = spi_sync(st->us, &msg);
-	if (ret)
-		dev_err(&st->us->dev, "problem when burst reading");
-
-	st->us->max_speed_hz = old_speed_hz;
-	spi_setup(st->us);
-	mutex_unlock(&st->buf_lock);
-	return ret;
-}
-
-/**
- * adis16251_spi_read_sequence() - read a sequence of 16-bit registers
- * @dev: device associated with child of actual device (iio_dev or iio_trig)
- * @tx: register addresses in bytes 0,2,4,6... (min size is 2*num bytes)
- * @rx: somewhere to pass back the value read (min size is 2*num bytes)
- **/
-int adis16251_spi_read_sequence(struct device *dev,
-		u8 *tx, u8 *rx, int num)
-{
-	struct spi_message msg;
-	struct spi_transfer *xfers;
-	struct iio_dev *indio_dev = dev_get_drvdata(dev);
-	struct adis16251_state *st = iio_dev_get_devdata(indio_dev);
-	int ret, i;
-
-	xfers = kzalloc(num + 1, GFP_KERNEL);
-	if (xfers == NULL) {
-		dev_err(&st->us->dev, "memory alloc failed");
-		ret = -ENOMEM;
-		goto error_ret;
-	}
-
-	/* tx: |add1|addr2|addr3|...|addrN |zero|
-	 * rx: |zero|res1 |res2 |...|resN-1|resN| */
-	spi_message_init(&msg);
-	for (i = 0; i < num + 1; i++) {
-		if (i > 0)
-			xfers[i].rx_buf = st->rx + 2*(i - 1);
-		if (i < num)
-			xfers[i].tx_buf = st->tx + 2*i;
-		xfers[i].bits_per_word = 8;
-		xfers[i].len = 2;
-		xfers[i].cs_change = 1;
-		spi_message_add_tail(&xfers[i], &msg);
-	}
-
-	mutex_lock(&st->buf_lock);
-
-	ret = spi_sync(st->us, &msg);
-	if (ret)
-		dev_err(&st->us->dev, "problem when reading sequence");
-
-	mutex_unlock(&st->buf_lock);
-	kfree(xfers);
-
-error_ret:
-	return ret;
-}
-
-static ssize_t adis16251_spi_read_signed(struct device *dev,
-		struct device_attribute *attr,
-		char *buf,
-		unsigned bits)
-{
-	int ret;
-	s16 val = 0;
-	unsigned shift = 16 - bits;
-	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
-
-	ret = adis16251_spi_read_reg_16(dev, this_attr->address, (u16 *)&val);
-	if (ret)
-		return ret;
-
-	if (val & ADIS16251_ERROR_ACTIVE)
-		adis16251_check_status(dev);
-	val = ((s16)(val << shift) >> shift);
-	return sprintf(buf, "%d\n", val);
-}
-
-static ssize_t adis16251_read_12bit_unsigned(struct device *dev,
-		struct device_attribute *attr,
-		char *buf)
-{
-	int ret;
-	u16 val = 0;
-	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
-
-	ret = adis16251_spi_read_reg_16(dev, this_attr->address, &val);
-	if (ret)
-		return ret;
-
-	if (val & ADIS16251_ERROR_ACTIVE)
-		adis16251_check_status(dev);
-
-	return sprintf(buf, "%u\n", val & 0x0FFF);
-}
-
-static ssize_t adis16251_read_14bit_signed(struct device *dev,
-		struct device_attribute *attr,
-		char *buf)
-{
-	struct iio_dev *indio_dev = dev_get_drvdata(dev);
-	ssize_t ret;
-
-	/* Take the iio_dev status lock */
-	mutex_lock(&indio_dev->mlock);
-	ret =  adis16251_spi_read_signed(dev, attr, buf, 14);
-	mutex_unlock(&indio_dev->mlock);
-
-	return ret;
-}
-
-static ssize_t adis16251_read_12bit_signed(struct device *dev,
-		struct device_attribute *attr,
-		char *buf)
-{
-	struct iio_dev *indio_dev = dev_get_drvdata(dev);
-	ssize_t ret;
-
-	/* Take the iio_dev status lock */
-	mutex_lock(&indio_dev->mlock);
-	ret =  adis16251_spi_read_signed(dev, attr, buf, 12);
-	mutex_unlock(&indio_dev->mlock);
-
-	return ret;
-}
-
-static ssize_t adis16251_write_16bit(struct device *dev,
-		struct device_attribute *attr,
-		const char *buf,
-		size_t len)
-{
-	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
-	int ret;
-	long val;
-
-	ret = strict_strtol(buf, 10, &val);
-	if (ret)
-		goto error_ret;
-	ret = adis16251_spi_write_reg_16(dev, this_attr->address, val);
-
-error_ret:
-	return ret ? ret : len;
-}
-
-static ssize_t adis16251_read_frequency(struct device *dev,
-		struct device_attribute *attr,
-		char *buf)
-{
-	int ret, len = 0;
-	u16 t;
-	int sps;
-	ret = adis16251_spi_read_reg_16(dev,
-			ADIS16251_SMPL_PRD,
-			&t);
-	if (ret)
-		return ret;
-	sps =  (t & ADIS16251_SMPL_PRD_TIME_BASE) ? 8 : 256;
-	sps /= (t & ADIS16251_SMPL_PRD_DIV_MASK) + 1;
-	len = sprintf(buf, "%d SPS\n", sps);
-	return len;
-}
-
-static ssize_t adis16251_write_frequency(struct device *dev,
-		struct device_attribute *attr,
-		const char *buf,
-		size_t len)
-{
-	struct iio_dev *indio_dev = dev_get_drvdata(dev);
-	struct adis16251_state *st = iio_dev_get_devdata(indio_dev);
-	long val;
-	int ret;
-	u8 t;
-
-	ret = strict_strtol(buf, 10, &val);
-	if (ret)
-		return ret;
-
-	mutex_lock(&indio_dev->mlock);
-
-	t = (256 / val);
-	if (t > 0)
-		t--;
-	t &= ADIS16251_SMPL_PRD_DIV_MASK;
-	if ((t & ADIS16251_SMPL_PRD_DIV_MASK) >= 0x0A)
-		st->us->max_speed_hz = ADIS16251_SPI_SLOW;
-	else
-		st->us->max_speed_hz = ADIS16251_SPI_FAST;
-
-	ret = adis16251_spi_write_reg_8(dev,
-			ADIS16251_SMPL_PRD,
-			t);
-
-	mutex_unlock(&indio_dev->mlock);
-
-	return ret ? ret : len;
-}
-
-static ssize_t adis16251_write_reset(struct device *dev,
-		struct device_attribute *attr,
-		const char *buf, size_t len)
-{
-	if (len < 1)
-		return -1;
-	switch (buf[0]) {
-	case '1':
-	case 'y':
-	case 'Y':
-		return adis16251_reset(dev);
-	}
-	return -1;
-}
-
-
-
-int adis16251_set_irq(struct device *dev, bool enable)
-{
-	int ret;
-	u16 msc;
-	ret = adis16251_spi_read_reg_16(dev, ADIS16251_MSC_CTRL, &msc);
-	if (ret)
-		goto error_ret;
-
-	msc |= ADIS16251_MSC_CTRL_DATA_RDY_POL_HIGH;
-	if (enable)
-		msc |= ADIS16251_MSC_CTRL_DATA_RDY_EN;
-	else
-		msc &= ~ADIS16251_MSC_CTRL_DATA_RDY_EN;
-
-	ret = adis16251_spi_write_reg_16(dev, ADIS16251_MSC_CTRL, msc);
-	if (ret)
-		goto error_ret;
-
-error_ret:
-	return ret;
-}
-
-int adis16251_reset(struct device *dev)
-{
-	int ret;
-	ret = adis16251_spi_write_reg_8(dev,
-			ADIS16251_GLOB_CMD,
-			ADIS16251_GLOB_CMD_SW_RESET);
-	if (ret)
-		dev_err(dev, "problem resetting device");
-
-	return ret;
-}
-
-/* Power down the device */
-int adis16251_stop_device(struct device *dev)
-{
-	int ret;
-	u16 val = ADIS16251_SLP_CNT_POWER_OFF;
-
-	ret = adis16251_spi_write_reg_16(dev, ADIS16251_SLP_CNT, val);
-	if (ret)
-		dev_err(dev, "problem with turning device off: SLP_CNT");
-
-	return ret;
-}
-
-static int adis16251_self_test(struct device *dev)
-{
-	int ret;
-
-	ret = adis16251_spi_write_reg_16(dev,
-			ADIS16251_MSC_CTRL,
-			ADIS16251_MSC_CTRL_INT_SELF_TEST);
-	if (ret) {
-		dev_err(dev, "problem starting self test");
-		goto err_ret;
-	}
-
-	adis16251_check_status(dev);
-
-err_ret:
-	return ret;
-}
-
-int adis16251_check_status(struct device *dev)
-{
-	u16 status;
-	int ret;
-
-	ret = adis16251_spi_read_reg_16(dev, ADIS16251_DIAG_STAT, &status);
-
-	if (ret < 0) {
-		dev_err(dev, "Reading status failed\n");
-		goto error_ret;
-	}
-
-	if (!(status & ADIS16251_DIAG_STAT_ERR_MASK)) {
-		ret = 0;
-		goto error_ret;
-	}
-
-	ret = -EFAULT;
-
-	if (status & ADIS16251_DIAG_STAT_ALARM2)
-		dev_err(dev, "Alarm 2 active\n");
-	if (status & ADIS16251_DIAG_STAT_ALARM1)
-		dev_err(dev, "Alarm 1 active\n");
-	if (status & ADIS16251_DIAG_STAT_SELF_TEST)
-		dev_err(dev, "Self test error\n");
-	if (status & ADIS16251_DIAG_STAT_OVERFLOW)
-		dev_err(dev, "Sensor overrange\n");
-	if (status & ADIS16251_DIAG_STAT_SPI_FAIL)
-		dev_err(dev, "SPI failure\n");
-	if (status & ADIS16251_DIAG_STAT_FLASH_UPT)
-		dev_err(dev, "Flash update failed\n");
-	if (status & ADIS16251_DIAG_STAT_POWER_HIGH)
-		dev_err(dev, "Power supply above 5.25V\n");
-	if (status & ADIS16251_DIAG_STAT_POWER_LOW)
-		dev_err(dev, "Power supply below 4.75V\n");
-
-error_ret:
-	return ret;
-}
-
-static int adis16251_initial_setup(struct adis16251_state *st)
-{
-	int ret;
-	u16 smp_prd;
-	struct device *dev = &st->indio_dev->dev;
-
-	/* use low spi speed for init */
-	st->us->max_speed_hz = ADIS16251_SPI_SLOW;
-	st->us->mode = SPI_MODE_3;
-	spi_setup(st->us);
-
-	/* Disable IRQ */
-	ret = adis16251_set_irq(dev, false);
-	if (ret) {
-		dev_err(dev, "disable irq failed");
-		goto err_ret;
-	}
-
-	/* Do self test */
-
-	/* Read status register to check the result */
-	ret = adis16251_check_status(dev);
-	if (ret) {
-		adis16251_reset(dev);
-		dev_err(dev, "device not playing ball -> reset");
-		msleep(ADIS16251_STARTUP_DELAY);
-		ret = adis16251_check_status(dev);
-		if (ret) {
-			dev_err(dev, "giving up");
-			goto err_ret;
-		}
-	}
-
-	printk(KERN_INFO DRIVER_NAME ": at CS%d (irq %d)\n",
-			st->us->chip_select, st->us->irq);
-
-	/* use high spi speed if possible */
-	ret = adis16251_spi_read_reg_16(dev, ADIS16251_SMPL_PRD, &smp_prd);
-	if (!ret && (smp_prd & ADIS16251_SMPL_PRD_DIV_MASK) < 0x0A) {
-		st->us->max_speed_hz = ADIS16251_SPI_SLOW;
-		spi_setup(st->us);
-	}
-
-err_ret:
-	return ret;
-}
-
-static IIO_DEV_ATTR_IN_NAMED_RAW(0, supply, adis16251_read_12bit_signed,
-		ADIS16251_SUPPLY_OUT);
-static IIO_CONST_ATTR(in0_supply_scale, "0.0018315");
-
-static IIO_DEV_ATTR_GYRO(adis16251_read_14bit_signed,
-		ADIS16251_GYRO_OUT);
-static IIO_DEV_ATTR_GYRO_SCALE(S_IWUSR | S_IRUGO,
-		adis16251_read_12bit_signed,
-		adis16251_write_16bit,
-		ADIS16251_GYRO_SCALE);
-static IIO_DEV_ATTR_GYRO_OFFSET(S_IWUSR | S_IRUGO,
-		adis16251_read_12bit_signed,
-		adis16251_write_16bit,
-		ADIS16251_GYRO_OFF);
-
-static IIO_DEV_ATTR_TEMP_RAW(adis16251_read_12bit_signed);
-static IIO_CONST_ATTR(temp_offset, "25 K");
-static IIO_CONST_ATTR(temp_scale, "0.1453 K");
-
-static IIO_DEV_ATTR_IN_NAMED_RAW(1, aux, adis16251_read_12bit_unsigned,
-		ADIS16251_AUX_ADC);
-static IIO_CONST_ATTR(in1_aux_scale, "0.0006105");
-
-static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
-		adis16251_read_frequency,
-		adis16251_write_frequency);
-static IIO_DEV_ATTR_ANGL(adis16251_read_14bit_signed,
-		ADIS16251_ANGL_OUT);
-
-static IIO_DEV_ATTR_RESET(adis16251_write_reset);
-
-static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("0.129 ~ 256");
-
-static IIO_CONST_ATTR(name, "adis16251");
-
-static struct attribute *adis16251_event_attributes[] = {
-	NULL
-};
-
-static struct attribute_group adis16251_event_attribute_group = {
-	.attrs = adis16251_event_attributes,
-};
-
-static struct attribute *adis16251_attributes[] = {
-	&iio_dev_attr_in0_supply_raw.dev_attr.attr,
-	&iio_const_attr_in0_supply_scale.dev_attr.attr,
-	&iio_dev_attr_gyro_raw.dev_attr.attr,
-	&iio_dev_attr_gyro_scale.dev_attr.attr,
-	&iio_dev_attr_gyro_offset.dev_attr.attr,
-	&iio_dev_attr_angl_raw.dev_attr.attr,
-	&iio_dev_attr_temp_raw.dev_attr.attr,
-	&iio_const_attr_temp_offset.dev_attr.attr,
-	&iio_const_attr_temp_scale.dev_attr.attr,
-	&iio_dev_attr_in1_aux_raw.dev_attr.attr,
-	&iio_const_attr_in1_aux_scale.dev_attr.attr,
-	&iio_dev_attr_sampling_frequency.dev_attr.attr,
-	&iio_const_attr_sampling_frequency_available.dev_attr.attr,
-	&iio_dev_attr_reset.dev_attr.attr,
-	&iio_const_attr_name.dev_attr.attr,
-	NULL
-};
-
-static const struct attribute_group adis16251_attribute_group = {
-	.attrs = adis16251_attributes,
-};
-
-static int __devinit adis16251_probe(struct spi_device *spi)
-{
-	int ret, regdone = 0;
-	struct adis16251_state *st = kzalloc(sizeof *st, GFP_KERNEL);
-	if (!st) {
-		ret =  -ENOMEM;
-		goto error_ret;
-	}
-	/* this is only used for removal purposes */
-	spi_set_drvdata(spi, st);
-
-	/* Allocate the comms buffers */
-	st->rx = kzalloc(sizeof(*st->rx)*ADIS16251_MAX_RX, GFP_KERNEL);
-	if (st->rx == NULL) {
-		ret = -ENOMEM;
-		goto error_free_st;
-	}
-	st->tx = kzalloc(sizeof(*st->tx)*ADIS16251_MAX_TX, GFP_KERNEL);
-	if (st->tx == NULL) {
-		ret = -ENOMEM;
-		goto error_free_rx;
-	}
-	st->us = spi;
-	mutex_init(&st->buf_lock);
-	/* setup the industrialio driver allocated elements */
-	st->indio_dev = iio_allocate_device();
-	if (st->indio_dev == NULL) {
-		ret = -ENOMEM;
-		goto error_free_tx;
-	}
-
-	st->indio_dev->dev.parent = &spi->dev;
-	st->indio_dev->num_interrupt_lines = 1;
-	st->indio_dev->event_attrs = &adis16251_event_attribute_group;
-	st->indio_dev->attrs = &adis16251_attribute_group;
-	st->indio_dev->dev_data = (void *)(st);
-	st->indio_dev->driver_module = THIS_MODULE;
-	st->indio_dev->modes = INDIO_DIRECT_MODE;
-
-	ret = adis16251_configure_ring(st->indio_dev);
-	if (ret)
-		goto error_free_dev;
-
-	ret = iio_device_register(st->indio_dev);
-	if (ret)
-		goto error_unreg_ring_funcs;
-	regdone = 1;
-
-	ret = adis16251_initialize_ring(st->indio_dev->ring);
-	if (ret) {
-		printk(KERN_ERR "failed to initialize the ring\n");
-		goto error_unreg_ring_funcs;
-	}
-
-	if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0) {
-		ret = iio_register_interrupt_line(spi->irq,
-				st->indio_dev,
-				0,
-				IRQF_TRIGGER_RISING,
-				"adis16251");
-		if (ret)
-			goto error_uninitialize_ring;
-
-		ret = adis16251_probe_trigger(st->indio_dev);
-		if (ret)
-			goto error_unregister_line;
-	}
-
-	/* Get the device into a sane initial state */
-	ret = adis16251_initial_setup(st);
-	if (ret)
-		goto error_remove_trigger;
-	return 0;
-
-error_remove_trigger:
-	if (st->indio_dev->modes & INDIO_RING_TRIGGERED)
-		adis16251_remove_trigger(st->indio_dev);
-error_unregister_line:
-	if (st->indio_dev->modes & INDIO_RING_TRIGGERED)
-		iio_unregister_interrupt_line(st->indio_dev, 0);
-error_uninitialize_ring:
-	adis16251_uninitialize_ring(st->indio_dev->ring);
-error_unreg_ring_funcs:
-	adis16251_unconfigure_ring(st->indio_dev);
-error_free_dev:
-	if (regdone)
-		iio_device_unregister(st->indio_dev);
-	else
-		iio_free_device(st->indio_dev);
-error_free_tx:
-	kfree(st->tx);
-error_free_rx:
-	kfree(st->rx);
-error_free_st:
-	kfree(st);
-error_ret:
-	return ret;
-}
-
-/* fixme, confirm ordering in this function */
-static int adis16251_remove(struct spi_device *spi)
-{
-	int ret;
-	struct adis16251_state *st = spi_get_drvdata(spi);
-	struct iio_dev *indio_dev = st->indio_dev;
-
-	ret = adis16251_stop_device(&(indio_dev->dev));
-	if (ret)
-		goto err_ret;
-
-	flush_scheduled_work();
-
-	adis16251_remove_trigger(indio_dev);
-	if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0)
-		iio_unregister_interrupt_line(indio_dev, 0);
-
-	adis16251_uninitialize_ring(indio_dev->ring);
-	adis16251_unconfigure_ring(indio_dev);
-	iio_device_unregister(indio_dev);
-	kfree(st->tx);
-	kfree(st->rx);
-	kfree(st);
-
-	return 0;
-
-err_ret:
-	return ret;
-}
-
-static struct spi_driver adis16251_driver = {
-	.driver = {
-		.name = "adis16251",
-		.owner = THIS_MODULE,
-	},
-	.probe = adis16251_probe,
-	.remove = __devexit_p(adis16251_remove),
-};
-
-static __init int adis16251_init(void)
-{
-	return spi_register_driver(&adis16251_driver);
-}
-module_init(adis16251_init);
-
-static __exit void adis16251_exit(void)
-{
-	spi_unregister_driver(&adis16251_driver);
-}
-module_exit(adis16251_exit);
-
-MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
-MODULE_DESCRIPTION("Analog Devices ADIS16251 Digital Gyroscope Sensor SPI driver");
-MODULE_LICENSE("GPL v2");
-- 
1.7.3.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 4/5] staging:iio:gyro: add adis16251 support to adis16260 driver.
  2011-02-05 17:52 ` [PATCH 4/5] staging:iio:gyro: add adis16251 support to adis16260 driver Jonathan Cameron
@ 2011-02-11 14:11   ` Jonathan Cameron
  2011-02-25 16:17     ` Jonathan Cameron
  0 siblings, 1 reply; 9+ messages in thread
From: Jonathan Cameron @ 2011-02-11 14:11 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, mensch0815, device-drivers-devel, Cai, Cliff

On 02/05/11 17:52, Jonathan Cameron wrote:
> These parts are very similar and the adis16260 driver supports
> a lot of additional functionality.
> 
> Precursor to removal of adis16251 driver.
> 
> Note that some supported devices were missing from Kconfig help text
> and are also added in this patch.

I'll hold the this one and the next back for another week. The other 3
are going to Greg shortly as they are just code tidying.

Any feedback on this patch welcomed.

Jonathan
> 
> Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
> ---
>  drivers/staging/iio/gyro/Kconfig          |    4 +-
>  drivers/staging/iio/gyro/adis16260_core.c |   49 +++++++++++++++++++++++------
>  2 files changed, 41 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/staging/iio/gyro/Kconfig b/drivers/staging/iio/gyro/Kconfig
> index 236f15f..5bba4b0 100644
> --- a/drivers/staging/iio/gyro/Kconfig
> +++ b/drivers/staging/iio/gyro/Kconfig
> @@ -25,13 +25,13 @@ config ADIS16130
>  	  Angular Rate Sensor driver.
>  
>  config ADIS16260
> -	tristate "Analog Devices ADIS16260 ADIS16265 Digital Gyroscope Sensor SPI driver"
> +	tristate "Analog Devices ADIS16260 Digital Gyroscope Sensor SPI driver"
>  	depends on SPI
>  	select IIO_TRIGGER if IIO_RING_BUFFER
>  	select IIO_SW_RING if IIO_RING_BUFFER
>  	help
>  	  Say yes here to build support for Analog Devices ADIS16260 ADIS16265
> -	  programmable digital gyroscope sensor.
> +	  ADIS16250 ADIS16255 and ADIS16251 programmable digital gyroscope sensors.
>  
>  	  This driver can also be built as a module.  If so, the module
>  	  will be called adis16260.
> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
> index 045e27d..69a29ec 100644
> --- a/drivers/staging/iio/gyro/adis16260_core.c
> +++ b/drivers/staging/iio/gyro/adis16260_core.c
> @@ -238,10 +238,24 @@ error_ret:
>  	return ret ? ret : len;
>  }
>  
> +static ssize_t adis16260_read_frequency_available(struct device *dev,
> +						  struct device_attribute *attr,
> +						  char *buf)
> +{
> +	struct iio_dev *indio_dev = dev_get_drvdata(dev);
> +	struct adis16260_state *st = iio_dev_get_devdata(indio_dev);
> +	if (spi_get_device_id(st->us)->driver_data)
> +		return sprintf(buf, "%s\n", "0.129 ~ 256");
> +	else
> +		return sprintf(buf, "%s\n", "256 2048");
> +}
> +
>  static ssize_t adis16260_read_frequency(struct device *dev,
>  		struct device_attribute *attr,
>  		char *buf)
>  {
> +	struct iio_dev *indio_dev = dev_get_drvdata(dev);
> +	struct adis16260_state *st = iio_dev_get_devdata(indio_dev);
>  	int ret, len = 0;
>  	u16 t;
>  	int sps;
> @@ -250,7 +264,11 @@ static ssize_t adis16260_read_frequency(struct device *dev,
>  			&t);
>  	if (ret)
>  		return ret;
> -	sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
> +
> +	if (spi_get_device_id(st->us)->driver_data) /* If an adis16251 */
> +		sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 8 : 256;
> +	else
> +		sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
>  	sps /= (t & ADIS16260_SMPL_PRD_DIV_MASK) + 1;
>  	len = sprintf(buf, "%d SPS\n", sps);
>  	return len;
> @@ -272,16 +290,21 @@ static ssize_t adis16260_write_frequency(struct device *dev,
>  		return ret;
>  
>  	mutex_lock(&indio_dev->mlock);
> -
> -	t = (2048 / val);
> -	if (t > 0)
> -		t--;
> -	t &= ADIS16260_SMPL_PRD_DIV_MASK;
> +	if (spi_get_device_id(st->us)) {
> +		t = (256 / val);
> +		if (t > 0)
> +			t--;
> +		t &= ADIS16260_SMPL_PRD_DIV_MASK;
> +	} else {
> +		t = (2048 / val);
> +		if (t > 0)
> +			t--;
> +		t &= ADIS16260_SMPL_PRD_DIV_MASK;
> +	}
>  	if ((t & ADIS16260_SMPL_PRD_DIV_MASK) >= 0x0A)
>  		st->us->max_speed_hz = ADIS16260_SPI_SLOW;
>  	else
>  		st->us->max_speed_hz = ADIS16260_SPI_FAST;
> -
>  	ret = adis16260_spi_write_reg_8(dev,
>  			ADIS16260_SMPL_PRD,
>  			t);
> @@ -302,7 +325,10 @@ static ssize_t adis16260_read_gyro_scale(struct device *dev,
>  	if (st->negate)
>  		ret = sprintf(buf, "-");
>  	/* Take the iio_dev status lock */
> -	ret += sprintf(buf + ret, "%s\n", "0.00127862821");
> +	if (spi_get_device_id(st->us)->driver_data)
> +		ret += sprintf(buf + ret, "%s\n", "0.00031974432");
> +	else
> +		ret += sprintf(buf + ret, "%s\n", "0.00127862821");
>  
>  	return ret;
>  }
> @@ -475,7 +501,9 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
>  
>  static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, adis16260_write_reset, 0);
>  
> -static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("256 2048");
> +
> +static IIO_DEVICE_ATTR(sampling_frequency_available,
> +		       S_IRUGO, adis16260_read_frequency_available, NULL, 0);
>  
>  static IIO_CONST_ATTR_NAME("adis16260");
>  
> @@ -525,7 +553,7 @@ static ADIS16260_GYRO_ATTR_SET(_Z);
>  		&iio_dev_attr_in1_raw.dev_attr.attr,			\
>  		&iio_const_attr_in1_scale.dev_attr.attr,		\
>  		&iio_dev_attr_sampling_frequency.dev_attr.attr,		\
> -		&iio_const_attr_sampling_frequency_available.dev_attr.attr, \
> +		&iio_dev_attr_sampling_frequency_available.dev_attr.attr, \
>  		&iio_dev_attr_reset.dev_attr.attr,			\
>  		&iio_const_attr_name.dev_attr.attr,			\
>  		NULL							\
> @@ -693,6 +721,7 @@ static const struct spi_device_id adis16260_id[] = {
>  	{"adis16265", 0},
>  	{"adis16250", 0},
>  	{"adis16255", 0},
> +	{"adis16251", 1},
>  	{}
>  };
>  

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 4/5] staging:iio:gyro: add adis16251 support to adis16260 driver.
  2011-02-11 14:11   ` Jonathan Cameron
@ 2011-02-25 16:17     ` Jonathan Cameron
  2011-02-25 20:31       ` Hennerich, Michael
  0 siblings, 1 reply; 9+ messages in thread
From: Jonathan Cameron @ 2011-02-25 16:17 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, mensch0815, device-drivers-devel, Cai, Cliff

On 02/11/11 14:11, Jonathan Cameron wrote:
> On 02/05/11 17:52, Jonathan Cameron wrote:
>> These parts are very similar and the adis16260 driver supports
>> a lot of additional functionality.
>>
>> Precursor to removal of adis16251 driver.
>>
>> Note that some supported devices were missing from Kconfig help text
>> and are also added in this patch.
> 
> I'll hold the this one and the next back for another week. The other 3
> are going to Greg shortly as they are just code tidying.
> 
> Any feedback on this patch welcomed.
Just a friendly note to ask if anyone Analog related will have
a chance to look at this one.  If not, then do people mind if I send
this and the next one on to Greg anyway?  I'm almost entirely certain
they won't cause any problems and would like to finish the gyro driver
cleanup before moving onto another set.

Thanks,

Jonathan
> 
> Jonathan
>>
>> Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
>> ---
>>  drivers/staging/iio/gyro/Kconfig          |    4 +-
>>  drivers/staging/iio/gyro/adis16260_core.c |   49 +++++++++++++++++++++++------
>>  2 files changed, 41 insertions(+), 12 deletions(-)
>>
>> diff --git a/drivers/staging/iio/gyro/Kconfig b/drivers/staging/iio/gyro/Kconfig
>> index 236f15f..5bba4b0 100644
>> --- a/drivers/staging/iio/gyro/Kconfig
>> +++ b/drivers/staging/iio/gyro/Kconfig
>> @@ -25,13 +25,13 @@ config ADIS16130
>>  	  Angular Rate Sensor driver.
>>  
>>  config ADIS16260
>> -	tristate "Analog Devices ADIS16260 ADIS16265 Digital Gyroscope Sensor SPI driver"
>> +	tristate "Analog Devices ADIS16260 Digital Gyroscope Sensor SPI driver"
>>  	depends on SPI
>>  	select IIO_TRIGGER if IIO_RING_BUFFER
>>  	select IIO_SW_RING if IIO_RING_BUFFER
>>  	help
>>  	  Say yes here to build support for Analog Devices ADIS16260 ADIS16265
>> -	  programmable digital gyroscope sensor.
>> +	  ADIS16250 ADIS16255 and ADIS16251 programmable digital gyroscope sensors.
>>  
>>  	  This driver can also be built as a module.  If so, the module
>>  	  will be called adis16260.
>> diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c
>> index 045e27d..69a29ec 100644
>> --- a/drivers/staging/iio/gyro/adis16260_core.c
>> +++ b/drivers/staging/iio/gyro/adis16260_core.c
>> @@ -238,10 +238,24 @@ error_ret:
>>  	return ret ? ret : len;
>>  }
>>  
>> +static ssize_t adis16260_read_frequency_available(struct device *dev,
>> +						  struct device_attribute *attr,
>> +						  char *buf)
>> +{
>> +	struct iio_dev *indio_dev = dev_get_drvdata(dev);
>> +	struct adis16260_state *st = iio_dev_get_devdata(indio_dev);
>> +	if (spi_get_device_id(st->us)->driver_data)
>> +		return sprintf(buf, "%s\n", "0.129 ~ 256");
>> +	else
>> +		return sprintf(buf, "%s\n", "256 2048");
>> +}
>> +
>>  static ssize_t adis16260_read_frequency(struct device *dev,
>>  		struct device_attribute *attr,
>>  		char *buf)
>>  {
>> +	struct iio_dev *indio_dev = dev_get_drvdata(dev);
>> +	struct adis16260_state *st = iio_dev_get_devdata(indio_dev);
>>  	int ret, len = 0;
>>  	u16 t;
>>  	int sps;
>> @@ -250,7 +264,11 @@ static ssize_t adis16260_read_frequency(struct device *dev,
>>  			&t);
>>  	if (ret)
>>  		return ret;
>> -	sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
>> +
>> +	if (spi_get_device_id(st->us)->driver_data) /* If an adis16251 */
>> +		sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 8 : 256;
>> +	else
>> +		sps =  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
>>  	sps /= (t & ADIS16260_SMPL_PRD_DIV_MASK) + 1;
>>  	len = sprintf(buf, "%d SPS\n", sps);
>>  	return len;
>> @@ -272,16 +290,21 @@ static ssize_t adis16260_write_frequency(struct device *dev,
>>  		return ret;
>>  
>>  	mutex_lock(&indio_dev->mlock);
>> -
>> -	t = (2048 / val);
>> -	if (t > 0)
>> -		t--;
>> -	t &= ADIS16260_SMPL_PRD_DIV_MASK;
>> +	if (spi_get_device_id(st->us)) {
>> +		t = (256 / val);
>> +		if (t > 0)
>> +			t--;
>> +		t &= ADIS16260_SMPL_PRD_DIV_MASK;
>> +	} else {
>> +		t = (2048 / val);
>> +		if (t > 0)
>> +			t--;
>> +		t &= ADIS16260_SMPL_PRD_DIV_MASK;
>> +	}
>>  	if ((t & ADIS16260_SMPL_PRD_DIV_MASK) >= 0x0A)
>>  		st->us->max_speed_hz = ADIS16260_SPI_SLOW;
>>  	else
>>  		st->us->max_speed_hz = ADIS16260_SPI_FAST;
>> -
>>  	ret = adis16260_spi_write_reg_8(dev,
>>  			ADIS16260_SMPL_PRD,
>>  			t);
>> @@ -302,7 +325,10 @@ static ssize_t adis16260_read_gyro_scale(struct device *dev,
>>  	if (st->negate)
>>  		ret = sprintf(buf, "-");
>>  	/* Take the iio_dev status lock */
>> -	ret += sprintf(buf + ret, "%s\n", "0.00127862821");
>> +	if (spi_get_device_id(st->us)->driver_data)
>> +		ret += sprintf(buf + ret, "%s\n", "0.00031974432");
>> +	else
>> +		ret += sprintf(buf + ret, "%s\n", "0.00127862821");
>>  
>>  	return ret;
>>  }
>> @@ -475,7 +501,9 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO,
>>  
>>  static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, adis16260_write_reset, 0);
>>  
>> -static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("256 2048");
>> +
>> +static IIO_DEVICE_ATTR(sampling_frequency_available,
>> +		       S_IRUGO, adis16260_read_frequency_available, NULL, 0);
>>  
>>  static IIO_CONST_ATTR_NAME("adis16260");
>>  
>> @@ -525,7 +553,7 @@ static ADIS16260_GYRO_ATTR_SET(_Z);
>>  		&iio_dev_attr_in1_raw.dev_attr.attr,			\
>>  		&iio_const_attr_in1_scale.dev_attr.attr,		\
>>  		&iio_dev_attr_sampling_frequency.dev_attr.attr,		\
>> -		&iio_const_attr_sampling_frequency_available.dev_attr.attr, \
>> +		&iio_dev_attr_sampling_frequency_available.dev_attr.attr, \
>>  		&iio_dev_attr_reset.dev_attr.attr,			\
>>  		&iio_const_attr_name.dev_attr.attr,			\
>>  		NULL							\
>> @@ -693,6 +721,7 @@ static const struct spi_device_id adis16260_id[] = {
>>  	{"adis16265", 0},
>>  	{"adis16250", 0},
>>  	{"adis16255", 0},
>> +	{"adis16251", 1},
>>  	{}
>>  };
>>  
> 
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: [PATCH 4/5] staging:iio:gyro: add adis16251 support to adis16260 driver.
  2011-02-25 16:17     ` Jonathan Cameron
@ 2011-02-25 20:31       ` Hennerich, Michael
  0 siblings, 0 replies; 9+ messages in thread
From: Hennerich, Michael @ 2011-02-25 20:31 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, mensch0815, device-drivers-devel, Cai, Cliff

Jonathan Cameron wrote on 2011-02-25:
> On 02/11/11 14:11, Jonathan Cameron wrote:
>> On 02/05/11 17:52, Jonathan Cameron wrote:
>>> These parts are very similar and the adis16260 driver supports a
>>> lot of additional functionality.
>>>
>>> Precursor to removal of adis16251 driver.
>>>
>>> Note that some supported devices were missing from Kconfig help
>>> text and are also added in this patch.
>>
>> I'll hold the this one and the next back for another week. The other 3
>> are going to Greg shortly as they are just code tidying.
>>
>> Any feedback on this patch welcomed.
> Just a friendly note to ask if anyone Analog related will have a
> chance to look at this one.  If not, then do people mind if I send
> this and the next one on to Greg anyway?  I'm almost entirely certain
> they won't cause any problems and would like to finish the gyro driver
> cleanup before moving onto another set.
>
> Thanks,
>
> Jonathan
>>
>> Jonathan
>>>
>>> Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>

Looks good to me.
Acked-by: Michael Hennerich <michael.hennerich@analog.com>

>>> ---
>>>  drivers/staging/iio/gyro/Kconfig          |    4 +-
>>>  drivers/staging/iio/gyro/adis16260_core.c |   49
>>>  +++++++++++++++++++++++------ 2 files changed, 41 insertions(+), 12
>>>  deletions(-)
>>> diff --git a/drivers/staging/iio/gyro/Kconfig
>>> b/drivers/staging/iio/gyro/Kconfig
>>> index 236f15f..5bba4b0 100644
>>> --- a/drivers/staging/iio/gyro/Kconfig
>>> +++ b/drivers/staging/iio/gyro/Kconfig
>>> @@ -25,13 +25,13 @@ config ADIS16130
>>>       Angular Rate Sensor driver.
>>>
>>>  config ADIS16260
>>> -   tristate "Analog Devices ADIS16260 ADIS16265 Digital Gyroscope
>>> Sensor SPI driver" +        tristate "Analog Devices ADIS16260 Digital
>>> Gyroscope Sensor SPI
> driver"
>>>     depends on SPI
>>>     select IIO_TRIGGER if IIO_RING_BUFFER
>>>     select IIO_SW_RING if IIO_RING_BUFFER
>>>     help
>>>       Say yes here to build support for Analog Devices ADIS16260
> ADIS16265
>>> -     programmable digital gyroscope sensor. +        ADIS16250 ADIS162=
55 and
>>> ADIS16251 programmable digital gyroscope sensors.
>>>
>>>       This driver can also be built as a module.  If so, the module
>>>       will be called adis16260.
>>> diff --git a/drivers/staging/iio/gyro/adis16260_core.c
>>> b/drivers/staging/iio/gyro/adis16260_core.c
>>> index 045e27d..69a29ec 100644
>>> --- a/drivers/staging/iio/gyro/adis16260_core.c
>>> +++ b/drivers/staging/iio/gyro/adis16260_core.c
>>> @@ -238,10 +238,24 @@ error_ret:
>>>     return ret ? ret : len;
>>>  }
>>> +static ssize_t adis16260_read_frequency_available(struct device *dev,
>>> +                                             struct device_attribute *=
attr, +                                                char *buf) +{
>>> +   struct iio_dev *indio_dev =3D dev_get_drvdata(dev); +     struct
>>> adis16260_state *st =3D iio_dev_get_devdata(indio_dev); +     if
>>> (spi_get_device_id(st->us)->driver_data) +          return sprintf(buf,
>>> "%s\n", "0.129 ~ 256"); +   else +          return sprintf(buf, "%s\n",=
 "256
>>> 2048"); } +
>>>  static ssize_t adis16260_read_frequency(struct device *dev,
>>>             struct device_attribute *attr,
>>>             char *buf)
>>>  {
>>> +   struct iio_dev *indio_dev =3D dev_get_drvdata(dev);
>>> +   struct adis16260_state *st =3D iio_dev_get_devdata(indio_dev);
>>>     int ret, len =3D 0;
>>>     u16 t;
>>>     int sps;
>>> @@ -250,7 +264,11 @@ static ssize_t adis16260_read_frequency(struct
> device *dev,
>>>                     &t);
>>>     if (ret)
>>>             return ret;
>>> -   sps =3D  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
>>> +
>>> +   if (spi_get_device_id(st->us)->driver_data) /* If an adis16251 */
>>> +           sps =3D  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 8 : 256;
>>> +   else
>>> +           sps =3D  (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048;
>>>     sps /=3D (t & ADIS16260_SMPL_PRD_DIV_MASK) + 1;
>>>     len =3D sprintf(buf, "%d SPS\n", sps);
>>>     return len;
>>> @@ -272,16 +290,21 @@ static ssize_t
> adis16260_write_frequency(struct device *dev,
>>>             return ret;
>>>
>>>     mutex_lock(&indio_dev->mlock);
>>> -
>>> -   t =3D (2048 / val);
>>> -   if (t > 0)
>>> -           t--;
>>> -   t &=3D ADIS16260_SMPL_PRD_DIV_MASK;
>>> +   if (spi_get_device_id(st->us)) {
>>> +           t =3D (256 / val);
>>> +           if (t > 0)
>>> +                   t--;
>>> +           t &=3D ADIS16260_SMPL_PRD_DIV_MASK;
>>> +   } else {
>>> +           t =3D (2048 / val);
>>> +           if (t > 0)
>>> +                   t--;
>>> +           t &=3D ADIS16260_SMPL_PRD_DIV_MASK;
>>> +   }
>>>     if ((t & ADIS16260_SMPL_PRD_DIV_MASK) >=3D 0x0A)
>>>             st->us->max_speed_hz =3D ADIS16260_SPI_SLOW;      else
>>>             st->us->max_speed_hz =3D ADIS16260_SPI_FAST; -    ret =3D
>>>  adis16260_spi_write_reg_8(dev,                     ADIS16260_SMPL_PRD,=
                     t);
>>> @@ -302,7 +325,10 @@ static ssize_t
>>> adis16260_read_gyro_scale(struct
> device *dev,
>>>     if (st->negate)
>>>             ret =3D sprintf(buf, "-");
>>>     /* Take the iio_dev status lock */
>>> -   ret +=3D sprintf(buf + ret, "%s\n", "0.00127862821");
>>> +   if (spi_get_device_id(st->us)->driver_data)
>>> +           ret +=3D sprintf(buf + ret, "%s\n", "0.00031974432");
>>> +   else
>>> +           ret +=3D sprintf(buf + ret, "%s\n", "0.00127862821");
>>>
>>>     return ret;
>>>  }
>>> @@ -475,7 +501,9 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR |
>>> S_IRUGO,
>>>
>>>  static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL,
>>> adis16260_write_reset, 0);
>>>
>>> -static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("256 2048"); + +static
>>> IIO_DEVICE_ATTR(sampling_frequency_available, +                    S_IR=
UGO,
>>> adis16260_read_frequency_available, NULL, 0);
>>>
>>>  static IIO_CONST_ATTR_NAME("adis16260");
>>> @@ -525,7 +553,7 @@ static ADIS16260_GYRO_ATTR_SET(_Z);
>>>             &iio_dev_attr_in1_raw.dev_attr.attr,                    \
>>>             &iio_const_attr_in1_scale.dev_attr.attr,                \
>>>             &iio_dev_attr_sampling_frequency.dev_attr.attr,         \
>>> -           &iio_const_attr_sampling_frequency_available.dev_attr.attr,=
 \
>>> +           &iio_dev_attr_sampling_frequency_available.dev_attr.attr, \
>>>             &iio_dev_attr_reset.dev_attr.attr,                      \
>>>             &iio_const_attr_name.dev_attr.attr,                     \
>>>             NULL                                                    \
>>> @@ -693,6 +721,7 @@ static const struct spi_device_id
>>> adis16260_id[]
> =3D {
>>>     {"adis16265", 0},       {"adis16250", 0},       {"adis16255", 0},
>>>  +  {"adis16251", 1},       {} };
>>
>>
>

Greetings,
Michael

--
Analog Devices GmbH      Wilhelm-Wagenfeld-Str. 6      80807 Muenchen
Sitz der Gesellschaft: Muenchen; Registergericht: Muenchen HRB 40368; Gesch=
aeftsfuehrer:Dr.Carsten Suckrow, Thomas Wessel, William A. Martin, Margaret=
 Seif

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2011-02-25 20:31 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-05 17:52 [PATCH 0/5] staging:iio:gyro driver cleanups Jonathan Cameron
2011-02-05 17:52 ` [PATCH 1/5] staging:iio:gyro:adis16060 cleanup and dead code removal Jonathan Cameron
2011-02-05 17:52 ` [PATCH 2/5] staging:iio:gyro:adis16080 unused stub removal and cleanup Jonathan Cameron
2011-02-05 17:52 ` [PATCH 3/5] staging:iio:gyro:adis16130 " Jonathan Cameron
2011-02-05 17:52 ` [PATCH 4/5] staging:iio:gyro: add adis16251 support to adis16260 driver Jonathan Cameron
2011-02-11 14:11   ` Jonathan Cameron
2011-02-25 16:17     ` Jonathan Cameron
2011-02-25 20:31       ` Hennerich, Michael
2011-02-05 17:52 ` [PATCH 5/5] staging:iio:gyro remove adis16251 driver as now supported by " Jonathan Cameron

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.