Skip to content

Commit

Permalink
staging:iio:adis16260: Use adis library
Browse files Browse the repository at this point in the history
Use the new adis library for the adis16260 driver. This allows us to completely
scrap the adis16260 buffer and trigger code and about half of the core driver
code.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
  • Loading branch information
Lars-Peter Clausen authored and Jonathan Cameron committed Nov 19, 2012
1 parent 5cb7cb1 commit 9d5e9fd
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 685 deletions.
1 change: 0 additions & 1 deletion drivers/staging/iio/gyro/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ adis16130-y := adis16130_core.o
obj-$(CONFIG_ADIS16130) += adis16130.o

adis16260-y := adis16260_core.o
adis16260-$(CONFIG_IIO_BUFFER) += adis16260_ring.o adis16260_trigger.o
obj-$(CONFIG_ADIS16260) += adis16260.o

adis16251-y := adis16251_core.o
Expand Down
84 changes: 13 additions & 71 deletions drivers/staging/iio/gyro/adis16260.h
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
#ifndef SPI_ADIS16260_H_
#define SPI_ADIS16260_H_

#include "adis16260_platform_data.h"
#include "../imu/adis.h"

#define ADIS16260_STARTUP_DELAY 220 /* ms */

#define ADIS16260_READ_REG(a) a
#define ADIS16260_WRITE_REG(a) ((a) | 0x80)

#define ADIS16260_FLASH_CNT 0x00 /* Flash memory write count */
#define ADIS16260_SUPPLY_OUT 0x02 /* Power supply measurement */
#define ADIS16260_GYRO_OUT 0x04 /* X-axis gyroscope output */
Expand Down Expand Up @@ -34,8 +33,6 @@
* convert to decimal = 16,265/16,260 */
#define ADIS16260_SERIAL_NUM 0x58 /* Serial number */

#define ADIS16260_OUTPUTS 5

#define ADIS16260_ERROR_ACTIVE (1<<14)
#define ADIS16260_NEW_DATA (1<<15)

Expand All @@ -60,13 +57,13 @@
/* DIAG_STAT */
#define ADIS16260_DIAG_STAT_ALARM2 (1<<9)
#define ADIS16260_DIAG_STAT_ALARM1 (1<<8)
#define ADIS16260_DIAG_STAT_FLASH_CHK (1<<6)
#define ADIS16260_DIAG_STAT_SELF_TEST (1<<5)
#define ADIS16260_DIAG_STAT_OVERFLOW (1<<4)
#define ADIS16260_DIAG_STAT_SPI_FAIL (1<<3)
#define ADIS16260_DIAG_STAT_FLASH_UPT (1<<2)
#define ADIS16260_DIAG_STAT_POWER_HIGH (1<<1)
#define ADIS16260_DIAG_STAT_POWER_LOW (1<<0)
#define ADIS16260_DIAG_STAT_FLASH_CHK_BIT 6
#define ADIS16260_DIAG_STAT_SELF_TEST_BIT 5
#define ADIS16260_DIAG_STAT_OVERFLOW_BIT 4
#define ADIS16260_DIAG_STAT_SPI_FAIL_BIT 3
#define ADIS16260_DIAG_STAT_FLASH_UPT_BIT 2
#define ADIS16260_DIAG_STAT_POWER_HIGH_BIT 1
#define ADIS16260_DIAG_STAT_POWER_LOW_BIT 0

/* GLOB_CMD */
#define ADIS16260_GLOB_CMD_SW_RESET (1<<7)
Expand All @@ -75,82 +72,27 @@
#define ADIS16260_GLOB_CMD_FAC_CALIB (1<<1)
#define ADIS16260_GLOB_CMD_AUTO_NULL (1<<0)

#define ADIS16260_MAX_TX 24
#define ADIS16260_MAX_RX 24

#define ADIS16260_SPI_SLOW (u32)(300 * 1000)
#define ADIS16260_SPI_BURST (u32)(1000 * 1000)
#define ADIS16260_SPI_FAST (u32)(2000 * 1000)

/**
* struct adis16260_state - device instance specific data
* @us: actual spi_device
* @trig: data ready trigger registered with iio
* @buf_lock: mutex to protect tx and rx
* @negate: negate the scale parameter
* @tx: transmit buffer
* @rx: receive buffer
**/
struct adis16260_state {
struct spi_device *us;
struct iio_trigger *trig;
struct mutex buf_lock;
unsigned negate:1;
u8 tx[ADIS16260_MAX_TX] ____cacheline_aligned;
u8 rx[ADIS16260_MAX_RX];
unsigned negate:1;
struct adis adis;
};

int adis16260_set_irq(struct iio_dev *indio_dev, bool enable);

/* At the moment triggers are only used for ring buffer
* filling. This may change!
*/

#define ADIS16260_SCAN_SUPPLY 0
#define ADIS16260_SCAN_GYRO 1
#define ADIS16260_SCAN_GYRO 0
#define ADIS16260_SCAN_SUPPLY 1
#define ADIS16260_SCAN_AUX_ADC 2
#define ADIS16260_SCAN_TEMP 3
#define ADIS16260_SCAN_ANGL 4

#ifdef CONFIG_IIO_BUFFER
void adis16260_remove_trigger(struct iio_dev *indio_dev);
int adis16260_probe_trigger(struct iio_dev *indio_dev);

ssize_t adis16260_read_data_from_ring(struct device *dev,
struct device_attribute *attr,
char *buf);


int adis16260_configure_ring(struct iio_dev *indio_dev);
void adis16260_unconfigure_ring(struct iio_dev *indio_dev);

#else /* CONFIG_IIO_BUFFER */

static inline void adis16260_remove_trigger(struct iio_dev *indio_dev)
{
}

static inline int adis16260_probe_trigger(struct iio_dev *indio_dev)
{
return 0;
}

static inline ssize_t
adis16260_read_data_from_ring(struct device *dev,
struct device_attribute *attr,
char *buf)
{
return 0;
}

static int adis16260_configure_ring(struct iio_dev *indio_dev)
{
return 0;
}

static inline void adis16260_unconfigure_ring(struct iio_dev *indio_dev)
{
}

#endif /* CONFIG_IIO_BUFFER */
#endif /* SPI_ADIS16260_H_ */
Loading

0 comments on commit 9d5e9fd

Please sign in to comment.