linux/drivers/staging/iio/accel/adis16203.h
<<
>>
Prefs
   1#ifndef SPI_ADIS16203_H_
   2#define SPI_ADIS16203_H_
   3
   4#define ADIS16203_STARTUP_DELAY 220 /* ms */
   5
   6#define ADIS16203_READ_REG(a)    a
   7#define ADIS16203_WRITE_REG(a) ((a) | 0x80)
   8
   9#define ADIS16203_FLASH_CNT      0x00 /* Flash memory write count */
  10#define ADIS16203_SUPPLY_OUT     0x02 /* Output, power supply */
  11#define ADIS16203_AUX_ADC        0x08 /* Output, auxiliary ADC input */
  12#define ADIS16203_TEMP_OUT       0x0A /* Output, temperature */
  13#define ADIS16203_XINCL_OUT      0x0C /* Output, x-axis inclination */
  14#define ADIS16203_YINCL_OUT      0x0E /* Output, y-axis inclination */
  15#define ADIS16203_INCL_NULL      0x18 /* Incline null calibration */
  16#define ADIS16203_ALM_MAG1       0x20 /* Alarm 1 amplitude threshold */
  17#define ADIS16203_ALM_MAG2       0x22 /* Alarm 2 amplitude threshold */
  18#define ADIS16203_ALM_SMPL1      0x24 /* Alarm 1, sample period */
  19#define ADIS16203_ALM_SMPL2      0x26 /* Alarm 2, sample period */
  20#define ADIS16203_ALM_CTRL       0x28 /* Alarm control */
  21#define ADIS16203_AUX_DAC        0x30 /* Auxiliary DAC data */
  22#define ADIS16203_GPIO_CTRL      0x32 /* General-purpose digital input/output control */
  23#define ADIS16203_MSC_CTRL       0x34 /* Miscellaneous control */
  24#define ADIS16203_SMPL_PRD       0x36 /* Internal sample period (rate) control */
  25#define ADIS16203_AVG_CNT        0x38 /* Operation, filter configuration */
  26#define ADIS16203_SLP_CNT        0x3A /* Operation, sleep mode control */
  27#define ADIS16203_DIAG_STAT      0x3C /* Diagnostics, system status register */
  28#define ADIS16203_GLOB_CMD       0x3E /* Operation, system command register */
  29
  30#define ADIS16203_OUTPUTS        5
  31
  32/* MSC_CTRL */
  33#define ADIS16203_MSC_CTRL_PWRUP_SELF_TEST      (1 << 10) /* Self-test at power-on: 1 = disabled, 0 = enabled */
  34#define ADIS16203_MSC_CTRL_REVERSE_ROT_EN       (1 << 9)  /* Reverses rotation of both inclination outputs */
  35#define ADIS16203_MSC_CTRL_SELF_TEST_EN         (1 << 8)  /* Self-test enable */
  36#define ADIS16203_MSC_CTRL_DATA_RDY_EN          (1 << 2)  /* Data-ready enable: 1 = enabled, 0 = disabled */
  37#define ADIS16203_MSC_CTRL_ACTIVE_HIGH          (1 << 1)  /* Data-ready polarity: 1 = active high, 0 = active low */
  38#define ADIS16203_MSC_CTRL_DATA_RDY_DIO1        (1 << 0)  /* Data-ready line selection: 1 = DIO1, 0 = DIO0 */
  39
  40/* DIAG_STAT */
  41#define ADIS16203_DIAG_STAT_ALARM2        (1<<9) /* Alarm 2 status: 1 = alarm active, 0 = alarm inactive */
  42#define ADIS16203_DIAG_STAT_ALARM1        (1<<8) /* Alarm 1 status: 1 = alarm active, 0 = alarm inactive */
  43#define ADIS16203_DIAG_STAT_SELFTEST_FAIL (1<<5) /* Self-test diagnostic error flag */
  44#define ADIS16203_DIAG_STAT_SPI_FAIL      (1<<3) /* SPI communications failure */
  45#define ADIS16203_DIAG_STAT_FLASH_UPT     (1<<2) /* Flash update failure */
  46#define ADIS16203_DIAG_STAT_POWER_HIGH    (1<<1) /* Power supply above 3.625 V */
  47#define ADIS16203_DIAG_STAT_POWER_LOW     (1<<0) /* Power supply below 3.15 V */
  48
  49/* GLOB_CMD */
  50#define ADIS16203_GLOB_CMD_SW_RESET     (1<<7)
  51#define ADIS16203_GLOB_CMD_CLEAR_STAT   (1<<4)
  52#define ADIS16203_GLOB_CMD_FACTORY_CAL  (1<<1)
  53
  54#define ADIS16203_MAX_TX 12
  55#define ADIS16203_MAX_RX 10
  56
  57#define ADIS16203_ERROR_ACTIVE          (1<<14)
  58
  59/**
  60 * struct adis16203_state - device instance specific data
  61 * @us:                 actual spi_device
  62 * @work_trigger_to_ring: bh for triggered event handling
  63 * @inter:              used to check if new interrupt has been triggered
  64 * @last_timestamp:     passing timestamp from th to bh of interrupt handler
  65 * @indio_dev:          industrial I/O device structure
  66 * @trig:               data ready trigger registered with iio
  67 * @tx:                 transmit buffer
  68 * @rx:                 receive buffer
  69 * @buf_lock:           mutex to protect tx and rx
  70 **/
  71struct adis16203_state {
  72        struct spi_device               *us;
  73        struct work_struct              work_trigger_to_ring;
  74        s64                             last_timestamp;
  75        struct iio_dev                  *indio_dev;
  76        struct iio_trigger              *trig;
  77        u8                              *tx;
  78        u8                              *rx;
  79        struct mutex                    buf_lock;
  80};
  81
  82int adis16203_set_irq(struct device *dev, bool enable);
  83
  84#ifdef CONFIG_IIO_RING_BUFFER
  85enum adis16203_scan {
  86        ADIS16203_SCAN_SUPPLY,
  87        ADIS16203_SCAN_AUX_ADC,
  88        ADIS16203_SCAN_TEMP,
  89        ADIS16203_SCAN_INCLI_X,
  90        ADIS16203_SCAN_INCLI_Y,
  91};
  92
  93void adis16203_remove_trigger(struct iio_dev *indio_dev);
  94int adis16203_probe_trigger(struct iio_dev *indio_dev);
  95
  96ssize_t adis16203_read_data_from_ring(struct device *dev,
  97                                      struct device_attribute *attr,
  98                                      char *buf);
  99
 100int adis16203_configure_ring(struct iio_dev *indio_dev);
 101void adis16203_unconfigure_ring(struct iio_dev *indio_dev);
 102
 103int adis16203_initialize_ring(struct iio_ring_buffer *ring);
 104void adis16203_uninitialize_ring(struct iio_ring_buffer *ring);
 105#else /* CONFIG_IIO_RING_BUFFER */
 106
 107static inline void adis16203_remove_trigger(struct iio_dev *indio_dev)
 108{
 109}
 110
 111static inline int adis16203_probe_trigger(struct iio_dev *indio_dev)
 112{
 113        return 0;
 114}
 115
 116static inline ssize_t
 117adis16203_read_data_from_ring(struct device *dev,
 118                              struct device_attribute *attr,
 119                              char *buf)
 120{
 121        return 0;
 122}
 123
 124static int adis16203_configure_ring(struct iio_dev *indio_dev)
 125{
 126        return 0;
 127}
 128
 129static inline void adis16203_unconfigure_ring(struct iio_dev *indio_dev)
 130{
 131}
 132
 133static inline int adis16203_initialize_ring(struct iio_ring_buffer *ring)
 134{
 135        return 0;
 136}
 137
 138static inline void adis16203_uninitialize_ring(struct iio_ring_buffer *ring)
 139{
 140}
 141
 142#endif /* CONFIG_IIO_RING_BUFFER */
 143#endif /* SPI_ADIS16203_H_ */
 144