~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to drivers/staging/iio/dac/ad5446.h

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

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