linux/drivers/staging/iio/accel/adis16220.h
<<
>>
Prefs
   1#ifndef SPI_ADIS16220_H_
   2#define SPI_ADIS16220_H_
   3
   4#define ADIS16220_STARTUP_DELAY 220 /* ms */
   5
   6#define ADIS16220_READ_REG(a)    a
   7#define ADIS16220_WRITE_REG(a) ((a) | 0x80)
   8
   9/* Flash memory write count */
  10#define ADIS16220_FLASH_CNT     0x00
  11/* Control, acceleration offset adjustment control */
  12#define ADIS16220_ACCL_NULL     0x02
  13/* Control, AIN1 offset adjustment control */
  14#define ADIS16220_AIN1_NULL     0x04
  15/* Control, AIN2 offset adjustment control */
  16#define ADIS16220_AIN2_NULL     0x06
  17/* Output, power supply during capture */
  18#define ADIS16220_CAPT_SUPPLY   0x0A
  19/* Output, temperature during capture */
  20#define ADIS16220_CAPT_TEMP     0x0C
  21/* Output, peak acceleration during capture */
  22#define ADIS16220_CAPT_PEAKA    0x0E
  23/* Output, peak AIN1 level during capture */
  24#define ADIS16220_CAPT_PEAK1    0x10
  25/* Output, peak AIN2 level during capture */
  26#define ADIS16220_CAPT_PEAK2    0x12
  27/* Output, capture buffer for acceleration */
  28#define ADIS16220_CAPT_BUFA     0x14
  29/* Output, capture buffer for AIN1 */
  30#define ADIS16220_CAPT_BUF1     0x16
  31/* Output, capture buffer for AIN2 */
  32#define ADIS16220_CAPT_BUF2     0x18
  33/* Control, capture buffer address pointer */
  34#define ADIS16220_CAPT_PNTR     0x1A
  35/* Control, capture control register */
  36#define ADIS16220_CAPT_CTRL     0x1C
  37/* Control, capture period (automatic mode) */
  38#define ADIS16220_CAPT_PRD      0x1E
  39/* Control, Alarm A, acceleration peak threshold */
  40#define ADIS16220_ALM_MAGA      0x20
  41/* Control, Alarm 1, AIN1 peak threshold */
  42#define ADIS16220_ALM_MAG1      0x22
  43/* Control, Alarm 2, AIN2 peak threshold */
  44#define ADIS16220_ALM_MAG2      0x24
  45/* Control, Alarm S, peak threshold */
  46#define ADIS16220_ALM_MAGS      0x26
  47/* Control, alarm configuration register */
  48#define ADIS16220_ALM_CTRL      0x28
  49/* Control, general I/O configuration */
  50#define ADIS16220_GPIO_CTRL     0x32
  51/* Control, self-test control, AIN configuration */
  52#define ADIS16220_MSC_CTRL      0x34
  53/* Control, digital I/O configuration */
  54#define ADIS16220_DIO_CTRL      0x36
  55/* Control, filter configuration */
  56#define ADIS16220_AVG_CNT       0x38
  57/* Status, system status */
  58#define ADIS16220_DIAG_STAT     0x3C
  59/* Control, system commands */
  60#define ADIS16220_GLOB_CMD      0x3E
  61/* Status, self-test response */
  62#define ADIS16220_ST_DELTA      0x40
  63/* Lot Identification Code 1 */
  64#define ADIS16220_LOT_ID1       0x52
  65/* Lot Identification Code 2 */
  66#define ADIS16220_LOT_ID2       0x54
  67/* Product identifier; convert to decimal = 16220 */
  68#define ADIS16220_PROD_ID       0x56
  69/* Serial number */
  70#define ADIS16220_SERIAL_NUM    0x58
  71
  72#define ADIS16220_CAPTURE_SIZE  2048
  73
  74/* MSC_CTRL */
  75#define ADIS16220_MSC_CTRL_SELF_TEST_EN         (1 << 8)
  76#define ADIS16220_MSC_CTRL_POWER_SUP_COM_AIN1   (1 << 1)
  77#define ADIS16220_MSC_CTRL_POWER_SUP_COM_AIN2   (1 << 0)
  78
  79/* DIO_CTRL */
  80#define ADIS16220_MSC_CTRL_DIO2_BUSY_IND     (3<<4)
  81#define ADIS16220_MSC_CTRL_DIO1_BUSY_IND     (3<<2)
  82#define ADIS16220_MSC_CTRL_DIO2_ACT_HIGH     (1<<1)
  83#define ADIS16220_MSC_CTRL_DIO1_ACT_HIGH     (1<<0)
  84
  85/* DIAG_STAT */
  86/* AIN2 sample > ALM_MAG2 */
  87#define ADIS16220_DIAG_STAT_ALM_MAG2    (1<<14)
  88/* AIN1 sample > ALM_MAG1 */
  89#define ADIS16220_DIAG_STAT_ALM_MAG1    (1<<13)
  90/* Acceleration sample > ALM_MAGA */
  91#define ADIS16220_DIAG_STAT_ALM_MAGA    (1<<12)
  92/* Error condition programmed into ALM_MAGS[11:0] and ALM_CTRL[5:4] is true */
  93#define ADIS16220_DIAG_STAT_ALM_MAGS    (1<<11)
  94/* |Peak value in AIN2 data capture| > ALM_MAG2 */
  95#define ADIS16220_DIAG_STAT_PEAK_AIN2   (1<<10)
  96/* |Peak value in AIN1 data capture| > ALM_MAG1 */
  97#define ADIS16220_DIAG_STAT_PEAK_AIN1   (1<<9)
  98/* |Peak value in acceleration data capture| > ALM_MAGA */
  99#define ADIS16220_DIAG_STAT_PEAK_ACCEL  (1<<8)
 100/* Data ready, capture complete */
 101#define ADIS16220_DIAG_STAT_DATA_RDY    (1<<7)
 102#define ADIS16220_DIAG_STAT_FLASH_CHK   (1<<6)
 103#define ADIS16220_DIAG_STAT_SELF_TEST   (1<<5)
 104/* Capture period violation/interruption */
 105#define ADIS16220_DIAG_STAT_VIOLATION   (1<<4)
 106/* SPI communications failure */
 107#define ADIS16220_DIAG_STAT_SPI_FAIL    (1<<3)
 108/* Flash update failure */
 109#define ADIS16220_DIAG_STAT_FLASH_UPT   (1<<2)
 110/* Power supply above 3.625 V */
 111#define ADIS16220_DIAG_STAT_POWER_HIGH  (1<<1)
 112/* Power supply below 3.15 V */
 113#define ADIS16220_DIAG_STAT_POWER_LOW   (1<<0)
 114
 115/* GLOB_CMD */
 116#define ADIS16220_GLOB_CMD_SW_RESET     (1<<7)
 117#define ADIS16220_GLOB_CMD_SELF_TEST    (1<<2)
 118#define ADIS16220_GLOB_CMD_PWR_DOWN     (1<<1)
 119
 120#define ADIS16220_MAX_TX 2048
 121#define ADIS16220_MAX_RX 2048
 122
 123#define ADIS16220_SPI_BURST     (u32)(1000 * 1000)
 124#define ADIS16220_SPI_FAST      (u32)(2000 * 1000)
 125
 126/**
 127 * struct adis16220_state - device instance specific data
 128 * @us:                 actual spi_device
 129 * @work_trigger_to_ring: bh for triggered event handling
 130 * @inter:              used to check if new interrupt has been triggered
 131 * @last_timestamp:     passing timestamp from th to bh of interrupt handler
 132 * @indio_dev:          industrial I/O device structure
 133 * @trig:               data ready trigger registered with iio
 134 * @tx:                 transmit buffer
 135 * @rx:                 recieve buffer
 136 * @buf_lock:           mutex to protect tx and rx
 137 **/
 138struct adis16220_state {
 139        struct spi_device               *us;
 140        struct iio_dev                  *indio_dev;
 141        u8                              *tx;
 142        u8                              *rx;
 143        struct mutex                    buf_lock;
 144};
 145
 146#endif /* SPI_ADIS16220_H_ */
 147