linux/drivers/staging/iio/dac/ad5446.h
<<
>>
Prefs
   1/*
   2 * AD5446 SPI DAC driver
   3 *
   4 * Copyright 2010 Analog Devices Inc.
   5 *
   6 * Licensed under the GPL-2 or later.
   7 */
   8#ifndef IIO_DAC_AD5446_H_
   9#define IIO_DAC_AD5446_H_
  10
  11/* DAC Control Bits */
  12
  13#define AD5446_LOAD             (0x0 << 14) /* Load and update */
  14#define AD5446_SDO_DIS          (0x1 << 14) /* Disable SDO */
  15#define AD5446_NOP              (0x2 << 14) /* No operation */
  16#define AD5446_CLK_RISING       (0x3 << 14) /* Clock data on rising edge */
  17
  18#define AD5620_LOAD             (0x0 << 14) /* Load and update Norm Operation*/
  19#define AD5620_PWRDWN_1k        (0x1 << 14) /* Power-down: 1kOhm to GND */
  20#define AD5620_PWRDWN_100k      (0x2 << 14) /* Power-down: 100kOhm to GND */
  21#define AD5620_PWRDWN_TRISTATE  (0x3 << 14) /* Power-down: Three-state */
  22
  23#define AD5660_LOAD             (0x0 << 16) /* Load and update Norm Operation*/
  24#define AD5660_PWRDWN_1k        (0x1 << 16) /* Power-down: 1kOhm to GND */
  25#define AD5660_PWRDWN_100k      (0x2 << 16) /* Power-down: 100kOhm to GND */
  26#define AD5660_PWRDWN_TRISTATE  (0x3 << 16) /* Power-down: Three-state */
  27
  28#define RES_MASK(bits)  ((1 << (bits)) - 1)
  29
  30#define MODE_PWRDWN_1k          0x1
  31#define MODE_PWRDWN_100k        0x2
  32#define MODE_PWRDWN_TRISTATE    0x3
  33
  34/**
  35 * struct ad5446_state - driver instance specific data
  36 * @spi:                spi_device
  37 * @chip_info:          chip model specific constants, available modes etc
  38 * @reg:                supply regulator
  39 * @poll_work:          bottom half of polling interrupt handler
  40 * @vref_mv:            actual reference voltage used
  41 * @xfer:               default spi transfer
  42 * @msg:                default spi message
  43 * @data:               spi transmit buffer
  44 */
  45
  46struct ad5446_state {
  47        struct spi_device               *spi;
  48        const struct ad5446_chip_info   *chip_info;
  49        struct regulator                *reg;
  50        struct work_struct              poll_work;
  51        unsigned short                  vref_mv;
  52        unsigned                        cached_val;
  53        unsigned                        pwr_down_mode;
  54        unsigned                        pwr_down;
  55        struct spi_transfer             xfer;
  56        struct spi_message              msg;
  57        union {
  58                unsigned short          d16;
  59                unsigned char           d24[3];
  60        } data;
  61};
  62
  63/**
  64 * struct ad5446_chip_info - chip specific information
  65 * @bits:               accuracy of the DAC in bits
  66 * @storagebits:        number of bits written to the DAC
  67 * @left_shift:         number of bits the datum must be shifted
  68 * @int_vref_mv:        AD5620/40/60: the internal reference voltage
  69 * @store_sample:       chip specific helper function to store the datum
  70 * @store_sample:       chip specific helper function to store the powerpown cmd
  71 */
  72
  73struct ad5446_chip_info {
  74        u8                      bits;
  75        u8                      storagebits;
  76        u8                      left_shift;
  77        u16                     int_vref_mv;
  78        void (*store_sample)    (struct ad5446_state *st, unsigned val);
  79        void (*store_pwr_down)  (struct ad5446_state *st, unsigned mode);
  80};
  81
  82/**
  83 * ad5446_supported_device_ids:
  84 * The AD5620/40/60 parts are available in different fixed internal reference
  85 * voltage options. The actual part numbers may look differently
  86 * (and a bit cryptic), however this style is used to make clear which
  87 * parts are supported here.
  88 */
  89
  90enum ad5446_supported_device_ids {
  91        ID_AD5444,
  92        ID_AD5446,
  93        ID_AD5541A,
  94        ID_AD5542A,
  95        ID_AD5543,
  96        ID_AD5512A,
  97        ID_AD5553,
  98        ID_AD5601,
  99        ID_AD5611,
 100        ID_AD5621,
 101        ID_AD5620_2500,
 102        ID_AD5620_1250,
 103        ID_AD5640_2500,
 104        ID_AD5640_1250,
 105        ID_AD5660_2500,
 106        ID_AD5660_1250,
 107};
 108
 109#endif /* IIO_DAC_AD5446_H_ */
 110