123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /*
- * 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_ */
|