linux/drivers/staging/iio/frequency/ad9832.h
<<
>>
Prefs
   1/*
   2 * AD9832 SPI DDS driver
   3 *
   4 * Copyright 2011 Analog Devices Inc.
   5 *
   6 * Licensed under the GPL-2 or later.
   7 */
   8#ifndef IIO_DDS_AD9832_H_
   9#define IIO_DDS_AD9832_H_
  10
  11/* Registers */
  12
  13#define AD9832_FREQ0LL          0x0
  14#define AD9832_FREQ0HL          0x1
  15#define AD9832_FREQ0LM          0x2
  16#define AD9832_FREQ0HM          0x3
  17#define AD9832_FREQ1LL          0x4
  18#define AD9832_FREQ1HL          0x5
  19#define AD9832_FREQ1LM          0x6
  20#define AD9832_FREQ1HM          0x7
  21#define AD9832_PHASE0L          0x8
  22#define AD9832_PHASE0H          0x9
  23#define AD9832_PHASE1L          0xA
  24#define AD9832_PHASE1H          0xB
  25#define AD9832_PHASE2L          0xC
  26#define AD9832_PHASE2H          0xD
  27#define AD9832_PHASE3L          0xE
  28#define AD9832_PHASE3H          0xF
  29
  30#define AD9832_PHASE_SYM        0x10
  31#define AD9832_FREQ_SYM         0x11
  32#define AD9832_PINCTRL_EN       0x12
  33#define AD9832_OUTPUT_EN        0x13
  34
  35/* Command Control Bits */
  36
  37#define AD9832_CMD_PHA8BITSW    0x1
  38#define AD9832_CMD_PHA16BITSW   0x0
  39#define AD9832_CMD_FRE8BITSW    0x3
  40#define AD9832_CMD_FRE16BITSW   0x2
  41#define AD9832_CMD_FPSELECT     0x6
  42#define AD9832_CMD_SYNCSELSRC   0x8
  43#define AD9832_CMD_SLEEPRESCLR  0xC
  44
  45#define AD9832_FREQ             (1 << 11)
  46#define AD9832_PHASE(x)         (((x) & 3) << 9)
  47#define AD9832_SYNC             (1 << 13)
  48#define AD9832_SELSRC           (1 << 12)
  49#define AD9832_SLEEP            (1 << 13)
  50#define AD9832_RESET            (1 << 12)
  51#define AD9832_CLR              (1 << 11)
  52#define CMD_SHIFT               12
  53#define ADD_SHIFT               8
  54#define AD9832_FREQ_BITS        32
  55#define AD9832_PHASE_BITS       12
  56#define RES_MASK(bits)          ((1 << (bits)) - 1)
  57
  58/**
  59 * struct ad9832_state - driver instance specific data
  60 * @spi:                spi_device
  61 * @reg:                supply regulator
  62 * @mclk:               external master clock
  63 * @ctrl_fp:            cached frequency/phase control word
  64 * @ctrl_ss:            cached sync/selsrc control word
  65 * @ctrl_src:           cached sleep/reset/clr word
  66 * @xfer:               default spi transfer
  67 * @msg:                default spi message
  68 * @freq_xfer:          tuning word spi transfer
  69 * @freq_msg:           tuning word spi message
  70 * @phase_xfer:         tuning word spi transfer
  71 * @phase_msg:          tuning word spi message
  72 * @data:               spi transmit buffer
  73 * @phase_data:         tuning word spi transmit buffer
  74 * @freq_data:          tuning word spi transmit buffer
  75 */
  76
  77struct ad9832_state {
  78        struct spi_device               *spi;
  79        struct regulator                *reg;
  80        unsigned long                   mclk;
  81        unsigned short                  ctrl_fp;
  82        unsigned short                  ctrl_ss;
  83        unsigned short                  ctrl_src;
  84        struct spi_transfer             xfer;
  85        struct spi_message              msg;
  86        struct spi_transfer             freq_xfer[4];
  87        struct spi_message              freq_msg;
  88        struct spi_transfer             phase_xfer[2];
  89        struct spi_message              phase_msg;
  90        /*
  91         * DMA (thus cache coherency maintenance) requires the
  92         * transfer buffers to live in their own cache lines.
  93         */
  94        union {
  95                __be16                  freq_data[4]____cacheline_aligned;
  96                __be16                  phase_data[2];
  97                __be16                  data;
  98        };
  99};
 100
 101/*
 102 * TODO: struct ad9832_platform_data needs to go into include/linux/iio
 103 */
 104
 105/**
 106 * struct ad9832_platform_data - platform specific information
 107 * @mclk:               master clock in Hz
 108 * @freq0:              power up freq0 tuning word in Hz
 109 * @freq1:              power up freq1 tuning word in Hz
 110 * @phase0:             power up phase0 value [0..4095] correlates with 0..2PI
 111 * @phase1:             power up phase1 value [0..4095] correlates with 0..2PI
 112 * @phase2:             power up phase2 value [0..4095] correlates with 0..2PI
 113 * @phase3:             power up phase3 value [0..4095] correlates with 0..2PI
 114 */
 115
 116struct ad9832_platform_data {
 117        unsigned long           mclk;
 118        unsigned long           freq0;
 119        unsigned long           freq1;
 120        unsigned short          phase0;
 121        unsigned short          phase1;
 122        unsigned short          phase2;
 123        unsigned short          phase3;
 124};
 125
 126#endif /* IIO_DDS_AD9832_H_ */
 127