1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | /* * AD9833/AD9834/AD9837/AD9838 SPI DDS driver * * Copyright 2010-2011 Analog Devices Inc. * * Licensed under the GPL-2. */ #ifndef IIO_DDS_AD9834_H_ #define IIO_DDS_AD9834_H_ /* Registers */ #define AD9834_REG_CMD 0 #define AD9834_REG_FREQ0 BIT(14) #define AD9834_REG_FREQ1 BIT(15) #define AD9834_REG_PHASE0 (BIT(15) | BIT(14)) #define AD9834_REG_PHASE1 (BIT(15) | BIT(14) | BIT(13)) /* Command Control Bits */ #define AD9834_B28 BIT(13) #define AD9834_HLB BIT(12) #define AD9834_FSEL BIT(11) #define AD9834_PSEL BIT(10) #define AD9834_PIN_SW BIT(9) #define AD9834_RESET BIT(8) #define AD9834_SLEEP1 BIT(7) #define AD9834_SLEEP12 BIT(6) #define AD9834_OPBITEN BIT(5) #define AD9834_SIGN_PIB BIT(4) #define AD9834_DIV2 BIT(3) #define AD9834_MODE BIT(1) #define AD9834_FREQ_BITS 28 #define AD9834_PHASE_BITS 12 #define RES_MASK(bits) (BIT(bits) - 1) /** * struct ad9834_state - driver instance specific data * @spi: spi_device * @reg: supply regulator * @mclk: external master clock * @control: cached control word * @xfer: default spi transfer * @msg: default spi message * @freq_xfer: tuning word spi transfer * @freq_msg: tuning word spi message * @data: spi transmit buffer * @freq_data: tuning word spi transmit buffer */ struct ad9834_state { struct spi_device *spi; struct regulator *reg; unsigned int mclk; unsigned short control; unsigned short devid; struct spi_transfer xfer; struct spi_message msg; struct spi_transfer freq_xfer[2]; struct spi_message freq_msg; /* * DMA (thus cache coherency maintenance) requires the * transfer buffers to live in their own cache lines. */ __be16 data ____cacheline_aligned; __be16 freq_data[2]; }; /* * TODO: struct ad7887_platform_data needs to go into include/linux/iio */ /** * struct ad9834_platform_data - platform specific information * @mclk: master clock in Hz * @freq0: power up freq0 tuning word in Hz * @freq1: power up freq1 tuning word in Hz * @phase0: power up phase0 value [0..4095] correlates with 0..2PI * @phase1: power up phase1 value [0..4095] correlates with 0..2PI * @en_div2: digital output/2 is passed to the SIGN BIT OUT pin * @en_signbit_msb_out: the MSB (or MSB/2) of the DAC data is connected to the * SIGN BIT OUT pin. en_div2 controls whether it is the MSB * or MSB/2 that is output. if en_signbit_msb_out=false, * the on-board comparator is connected to SIGN BIT OUT */ struct ad9834_platform_data { unsigned int mclk; unsigned int freq0; unsigned int freq1; unsigned short phase0; unsigned short phase1; bool en_div2; bool en_signbit_msb_out; }; /** * ad9834_supported_device_ids: */ enum ad9834_supported_device_ids { ID_AD9833, ID_AD9834, ID_AD9837, ID_AD9838, }; #endif /* IIO_DDS_AD9834_H_ */ |