Skip to content

Commit

Permalink
staging:iio:adis16240: Use adis library
Browse files Browse the repository at this point in the history
Use the new adis library for the adis16240 driver. This allows us to completely
scrap the adis16240 buffer and trigger code and more than 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 edcf600 commit 5cb7cb1
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 691 deletions.
5 changes: 3 additions & 2 deletions drivers/staging/iio/accel/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,16 @@ config ADIS16209
config ADIS16220
tristate "Analog Devices ADIS16220 Programmable Digital Vibration Sensor"
depends on SPI
select IIO_ADIS_LIB
help
Say yes here to build support for Analog Devices adis16220 programmable
digital vibration sensor.

config ADIS16240
tristate "Analog Devices ADIS16240 Programmable Impact Sensor and Recorder"
depends on SPI
select IIO_TRIGGER if IIO_BUFFER
select IIO_SW_RING if IIO_BUFFER
select IIO_ADIS_LIB
select IIO_ADIS_LIB_BUFFER if IIO_BUFFER
help
Say yes here to build support for Analog Devices adis16240 programmable
impact Sensor and recorder.
Expand Down
1 change: 0 additions & 1 deletion drivers/staging/iio/accel/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ adis16220-y := adis16220_core.o
obj-$(CONFIG_ADIS16220) += adis16220.o

adis16240-y := adis16240_core.o
adis16240-$(CONFIG_IIO_BUFFER) += adis16240_ring.o adis16240_trigger.o
obj-$(CONFIG_ADIS16240) += adis16240.o

obj-$(CONFIG_KXSD9) += kxsd9.o
Expand Down
85 changes: 9 additions & 76 deletions drivers/staging/iio/accel/adis16240.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@

#define ADIS16240_STARTUP_DELAY 220 /* ms */

#define ADIS16240_READ_REG(a) a
#define ADIS16240_WRITE_REG(a) ((a) | 0x80)

/* Flash memory write count */
#define ADIS16240_FLASH_CNT 0x00
/* Output, power supply */
Expand Down Expand Up @@ -75,8 +72,6 @@
/* System command */
#define ADIS16240_GLOB_CMD 0x4A

#define ADIS16240_OUTPUTS 6

/* MSC_CTRL */
/* Enables sum-of-squares output (XYZPEAK_OUT) */
#define ADIS16240_MSC_CTRL_XYZPEAK_OUT_EN (1 << 15)
Expand All @@ -101,17 +96,17 @@
/* Flash test, checksum flag: 1 = mismatch, 0 = match */
#define ADIS16240_DIAG_STAT_CHKSUM (1<<6)
/* Power-on, self-test flag: 1 = failure, 0 = pass */
#define ADIS16240_DIAG_STAT_PWRON_FAIL (1<<5)
#define ADIS16240_DIAG_STAT_PWRON_FAIL_BIT 5
/* Power-on self-test: 1 = in-progress, 0 = complete */
#define ADIS16240_DIAG_STAT_PWRON_BUSY (1<<4)
/* SPI communications failure */
#define ADIS16240_DIAG_STAT_SPI_FAIL (1<<3)
#define ADIS16240_DIAG_STAT_SPI_FAIL_BIT 3
/* Flash update failure */
#define ADIS16240_DIAG_STAT_FLASH_UPT (1<<2)
#define ADIS16240_DIAG_STAT_FLASH_UPT_BIT 2
/* Power supply above 3.625 V */
#define ADIS16240_DIAG_STAT_POWER_HIGH (1<<1)
#define ADIS16240_DIAG_STAT_POWER_HIGH_BIT 1
/* Power supply below 3.15 V */
#define ADIS16240_DIAG_STAT_POWER_LOW (1<<0)
#define ADIS16240_DIAG_STAT_POWER_LOW_BIT 0

/* GLOB_CMD */
#define ADIS16240_GLOB_CMD_RESUME (1<<8)
Expand All @@ -120,77 +115,15 @@

#define ADIS16240_ERROR_ACTIVE (1<<14)

#define ADIS16240_MAX_TX 24
#define ADIS16240_MAX_RX 24

/**
* struct adis16240_state - device instance specific data
* @us: actual spi_device
* @trig: data ready trigger registered with iio
* @tx: transmit buffer
* @rx: receive buffer
* @buf_lock: mutex to protect tx and rx
**/
struct adis16240_state {
struct spi_device *us;
struct iio_trigger *trig;
struct mutex buf_lock;
u8 tx[ADIS16240_MAX_TX] ____cacheline_aligned;
u8 rx[ADIS16240_MAX_RX];
};

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

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

#define ADIS16240_SCAN_SUPPLY 0
#define ADIS16240_SCAN_ACC_X 1
#define ADIS16240_SCAN_ACC_Y 2
#define ADIS16240_SCAN_ACC_Z 3
#define ADIS16240_SCAN_ACC_X 0
#define ADIS16240_SCAN_ACC_Y 1
#define ADIS16240_SCAN_ACC_Z 2
#define ADIS16240_SCAN_SUPPLY 3
#define ADIS16240_SCAN_AUX_ADC 4
#define ADIS16240_SCAN_TEMP 5

#ifdef CONFIG_IIO_BUFFER
void adis16240_remove_trigger(struct iio_dev *indio_dev);
int adis16240_probe_trigger(struct iio_dev *indio_dev);

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


int adis16240_configure_ring(struct iio_dev *indio_dev);
void adis16240_unconfigure_ring(struct iio_dev *indio_dev);

#else /* CONFIG_IIO_BUFFER */

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

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

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

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

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

#endif /* CONFIG_IIO_BUFFER */
#endif /* SPI_ADIS16240_H_ */
Loading

0 comments on commit 5cb7cb1

Please sign in to comment.