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 MODE_PWRDWN_1k 0x1 29 #define MODE_PWRDWN_100k 0x2 30 #define MODE_PWRDWN_TRISTATE 0x3 31 32 /** 33 * struct ad5446_state - driver instance specific data 34 * @spi: spi_device 35 * @chip_info: chip model specific constants, available modes etc 36 * @reg: supply regulator 37 * @poll_work: bottom half of polling interrupt handler 38 * @vref_mv: actual reference voltage used 39 * @xfer: default spi transfer 40 * @msg: default spi message 41 * @data: spi transmit buffer 42 */ 43 44 struct ad5446_state { 45 struct spi_device *spi; 46 const struct ad5446_chip_info *chip_info; 47 struct regulator *reg; 48 struct work_struct poll_work; 49 unsigned short vref_mv; 50 unsigned cached_val; 51 unsigned pwr_down_mode; 52 unsigned pwr_down; 53 struct spi_transfer xfer; 54 struct spi_message msg; 55 union { 56 unsigned short d16; 57 unsigned char d24[3]; 58 } data; 59 }; 60 61 /** 62 * struct ad5446_chip_info - chip specific information 63 * @channel: channel spec for the DAC 64 * @int_vref_mv: AD5620/40/60: the internal reference voltage 65 * @store_sample: chip specific helper function to store the datum 66 * @store_sample: chip specific helper function to store the powerpown cmd 67 */ 68 69 struct ad5446_chip_info { 70 struct iio_chan_spec channel; 71 u16 int_vref_mv; 72 void (*store_sample) (struct ad5446_state *st, unsigned val); 73 void (*store_pwr_down) (struct ad5446_state *st, unsigned mode); 74 }; 75 76 /** 77 * ad5446_supported_device_ids: 78 * The AD5620/40/60 parts are available in different fixed internal reference 79 * voltage options. The actual part numbers may look differently 80 * (and a bit cryptic), however this style is used to make clear which 81 * parts are supported here. 82 */ 83 84 enum ad5446_supported_device_ids { 85 ID_AD5444, 86 ID_AD5446, 87 ID_AD5541A, 88 ID_AD5542A, 89 ID_AD5543, 90 ID_AD5512A, 91 ID_AD5553, 92 ID_AD5601, 93 ID_AD5611, 94 ID_AD5621, 95 ID_AD5620_2500, 96 ID_AD5620_1250, 97 ID_AD5640_2500, 98 ID_AD5640_1250, 99 ID_AD5660_2500, 100 ID_AD5660_1250, 101 }; 102 103 #endif /* IIO_DAC_AD5446_H_ */ 104