Michael Hennerich | b5a4948 | 2010-11-22 11:15:23 +0100 | [diff] [blame] | 1 | /* |
| 2 | * AD5446 SPI DAC driver |
| 3 | * |
| 4 | * Copyright 2010 Analog Devices Inc. |
| 5 | * |
| 6 | * Licensed under the GPL-2 or later. |
| 7 | */ |
Michael Hennerich | d846263 | 2010-11-23 11:14:16 +0100 | [diff] [blame] | 8 | #ifndef IIO_DAC_AD5446_H_ |
| 9 | #define IIO_DAC_AD5446_H_ |
Michael Hennerich | b5a4948 | 2010-11-22 11:15:23 +0100 | [diff] [blame] | 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 | |
Michael Hennerich | d846263 | 2010-11-23 11:14:16 +0100 | [diff] [blame] | 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 | |
Michael Hennerich | bbed4dc | 2011-03-10 13:26:47 +0100 | [diff] [blame] | 28 | #define MODE_PWRDWN_1k 0x1 |
| 29 | #define MODE_PWRDWN_100k 0x2 |
| 30 | #define MODE_PWRDWN_TRISTATE 0x3 |
| 31 | |
Michael Hennerich | d846263 | 2010-11-23 11:14:16 +0100 | [diff] [blame] | 32 | /** |
| 33 | * struct ad5446_state - driver instance specific data |
Michael Hennerich | d846263 | 2010-11-23 11:14:16 +0100 | [diff] [blame] | 34 | * @spi: spi_device |
| 35 | * @chip_info: chip model specific constants, available modes etc |
| 36 | * @reg: supply regulator |
Michael Hennerich | d846263 | 2010-11-23 11:14:16 +0100 | [diff] [blame] | 37 | * @vref_mv: actual reference voltage used |
Michael Hennerich | d846263 | 2010-11-23 11:14:16 +0100 | [diff] [blame] | 38 | */ |
Michael Hennerich | b5a4948 | 2010-11-22 11:15:23 +0100 | [diff] [blame] | 39 | |
| 40 | struct ad5446_state { |
Michael Hennerich | b5a4948 | 2010-11-22 11:15:23 +0100 | [diff] [blame] | 41 | struct spi_device *spi; |
| 42 | const struct ad5446_chip_info *chip_info; |
| 43 | struct regulator *reg; |
Michael Hennerich | b5a4948 | 2010-11-22 11:15:23 +0100 | [diff] [blame] | 44 | unsigned short vref_mv; |
Michael Hennerich | bbed4dc | 2011-03-10 13:26:47 +0100 | [diff] [blame] | 45 | unsigned cached_val; |
| 46 | unsigned pwr_down_mode; |
| 47 | unsigned pwr_down; |
Michael Hennerich | b5a4948 | 2010-11-22 11:15:23 +0100 | [diff] [blame] | 48 | }; |
| 49 | |
Michael Hennerich | d846263 | 2010-11-23 11:14:16 +0100 | [diff] [blame] | 50 | /** |
Michael Hennerich | 4f76548 | 2010-11-23 11:40:13 +0100 | [diff] [blame] | 51 | * struct ad5446_chip_info - chip specific information |
Lars-Peter Clausen | 33ad6b2 | 2011-11-15 16:31:22 +0100 | [diff] [blame] | 52 | * @channel: channel spec for the DAC |
Michael Hennerich | d846263 | 2010-11-23 11:14:16 +0100 | [diff] [blame] | 53 | * @int_vref_mv: AD5620/40/60: the internal reference voltage |
Lars-Peter Clausen | cae329e | 2012-04-25 09:44:59 +0200 | [diff] [blame] | 54 | * @write: chip specific helper function to write to the register |
Michael Hennerich | d846263 | 2010-11-23 11:14:16 +0100 | [diff] [blame] | 55 | */ |
| 56 | |
| 57 | struct ad5446_chip_info { |
Lars-Peter Clausen | 33ad6b2 | 2011-11-15 16:31:22 +0100 | [diff] [blame] | 58 | struct iio_chan_spec channel; |
Michael Hennerich | bbed4dc | 2011-03-10 13:26:47 +0100 | [diff] [blame] | 59 | u16 int_vref_mv; |
Lars-Peter Clausen | cae329e | 2012-04-25 09:44:59 +0200 | [diff] [blame] | 60 | int (*write)(struct ad5446_state *st, unsigned val); |
Michael Hennerich | d846263 | 2010-11-23 11:14:16 +0100 | [diff] [blame] | 61 | }; |
| 62 | |
| 63 | /** |
| 64 | * ad5446_supported_device_ids: |
| 65 | * The AD5620/40/60 parts are available in different fixed internal reference |
| 66 | * voltage options. The actual part numbers may look differently |
| 67 | * (and a bit cryptic), however this style is used to make clear which |
| 68 | * parts are supported here. |
| 69 | */ |
| 70 | |
Michael Hennerich | b5a4948 | 2010-11-22 11:15:23 +0100 | [diff] [blame] | 71 | enum ad5446_supported_device_ids { |
| 72 | ID_AD5444, |
| 73 | ID_AD5446, |
Lars-Peter Clausen | 779c0c4 | 2012-06-26 10:45:43 +0200 | [diff] [blame^] | 74 | ID_AD5450, |
| 75 | ID_AD5451, |
Michael Hennerich | 67d1c1f4 | 2011-04-15 13:51:07 +0200 | [diff] [blame] | 76 | ID_AD5541A, |
Michael Hennerich | b5a4948 | 2010-11-22 11:15:23 +0100 | [diff] [blame] | 77 | ID_AD5512A, |
Michael Hennerich | 0772268 | 2011-02-23 10:45:47 +0100 | [diff] [blame] | 78 | ID_AD5553, |
Michael Hennerich | 2b61535 | 2011-03-10 13:26:48 +0100 | [diff] [blame] | 79 | ID_AD5601, |
| 80 | ID_AD5611, |
| 81 | ID_AD5621, |
Michael Hennerich | d846263 | 2010-11-23 11:14:16 +0100 | [diff] [blame] | 82 | ID_AD5620_2500, |
| 83 | ID_AD5620_1250, |
| 84 | ID_AD5640_2500, |
| 85 | ID_AD5640_1250, |
| 86 | ID_AD5660_2500, |
| 87 | ID_AD5660_1250, |
Lars-Peter Clausen | 18e5ab3 | 2012-04-25 09:45:01 +0200 | [diff] [blame] | 88 | ID_AD5662, |
Michael Hennerich | b5a4948 | 2010-11-22 11:15:23 +0100 | [diff] [blame] | 89 | }; |
| 90 | |
Michael Hennerich | d846263 | 2010-11-23 11:14:16 +0100 | [diff] [blame] | 91 | #endif /* IIO_DAC_AD5446_H_ */ |