]> Pileus Git - ~andy/linux/blob - drivers/staging/comedi/drivers/dt9812.h
180fd5a39575bd74455c9cfbca906ac2775fddbd
[~andy/linux] / drivers / staging / comedi / drivers / dt9812.h
1 #ifndef __DT9812_H__
2 #define __DT9812_H__
3
4 #define DT9812_DIAGS_BOARD_INFO_ADDR        0xFBFF
5 #define DT9812_MAX_WRITE_CMD_PIPE_SIZE      32
6 #define DT9812_MAX_READ_CMD_PIPE_SIZE       32
7
8 /*
9  * See Silican Laboratories C8051F020/1/2/3 manual
10  */
11 #define F020_SFR_P4                       0x84
12 #define F020_SFR_P1                       0x90
13 #define F020_SFR_P2                       0xa0
14 #define F020_SFR_P3                       0xb0
15 #define F020_SFR_AMX0CF                   0xba
16 #define F020_SFR_AMX0SL                   0xbb
17 #define F020_SFR_ADC0CF                   0xbc
18 #define F020_SFR_ADC0L                    0xbe
19 #define F020_SFR_ADC0H                    0xbf
20 #define F020_SFR_DAC0L                    0xd2
21 #define F020_SFR_DAC0H                    0xd3
22 #define F020_SFR_DAC0CN                   0xd4
23 #define F020_SFR_DAC1L                    0xd5
24 #define F020_SFR_DAC1H                    0xd6
25 #define F020_SFR_DAC1CN                   0xd7
26 #define F020_SFR_ADC0CN                   0xe8
27
28 #define F020_MASK_ADC0CF_AMP0GN0          0x01
29 #define F020_MASK_ADC0CF_AMP0GN1          0x02
30 #define F020_MASK_ADC0CF_AMP0GN2          0x04
31
32 #define F020_MASK_ADC0CN_AD0EN            0x80
33 #define F020_MASK_ADC0CN_AD0INT           0x20
34 #define F020_MASK_ADC0CN_AD0BUSY          0x10
35
36 #define F020_MASK_DACxCN_DACxEN           0x80
37
38 typedef enum {                  //                      A/D      D/A     DI   DO    CT
39         DT9812_DEVID_DT9812_10, //    8        2       8    8     1   +/- 10V
40         DT9812_DEVID_DT9812_2PT5,       //    8        2       8    8     1   0-2.44V
41 #if 0
42         DT9812_DEVID_DT9813,    //    16       2       4    4     1   +/- 10V
43         DT9812_DEVID_DT9814     //    24       2       0    0     1   +/- 10V
44 #endif
45 } dt9812_devid_t;
46
47 typedef enum {
48         DT9812_GAIN_0PT25 = 1,
49         DT9812_GAIN_0PT5 = 2,
50         DT9812_GAIN_1 = 4,
51         DT9812_GAIN_2 = 8,
52         DT9812_GAIN_4 = 16,
53         DT9812_GAIN_8 = 32,
54         DT9812_GAIN_16 = 64,
55 } dt9812_gain_t;
56
57 typedef enum {
58         DT9812_LEAST_USB_FIRMWARE_CMD_CODE = 0,
59         DT9812_W_FLASH_DATA = 0,        // Write Flash memory
60         DT9812_R_FLASH_DATA = 1,        // Read Flash memory (misc config info)
61
62         // Register read/write commands for processor
63         DT9812_R_SINGLE_BYTE_REG = 2,   // Read a single byte of USB memory
64         DT9812_W_SINGLE_BYTE_REG = 3,   // Write a single byte of USB memory
65         DT9812_R_MULTI_BYTE_REG = 4,    // Multiple Reads of USB memory
66         DT9812_W_MULTI_BYTE_REG = 5,    // Multiple Writes of USB memory
67         DT9812_RMW_SINGLE_BYTE_REG = 6, // Read, (AND) with mask, OR value,
68         // then write (single)
69         DT9812_RMW_MULTI_BYTE_REG = 7,  // Read, (AND) with mask, OR value,
70         // then write (multiple)
71
72         // Register read/write commands for SMBus
73         DT9812_R_SINGLE_BYTE_SMBUS = 8, // Read a single byte of SMBus
74         DT9812_W_SINGLE_BYTE_SMBUS = 9, // Write a single byte of SMBus
75         DT9812_R_MULTI_BYTE_SMBUS = 10, // Multiple Reads of SMBus
76         DT9812_W_MULTI_BYTE_SMBUS = 11, // Multiple Writes of SMBus
77
78         // Register read/write commands for a device
79         DT9812_R_SINGLE_BYTE_DEV = 12,  // Read a single byte of a device
80         DT9812_W_SINGLE_BYTE_DEV = 13,  // Write a single byte of a device
81         DT9812_R_MULTI_BYTE_DEV = 14,   // Multiple Reads of a device
82         DT9812_W_MULTI_BYTE_DEV = 15,   // Multiple Writes of a device
83
84         DT9812_W_DAC_THRESHOLD = 16,    // Not sure if we'll need this
85
86         DT9812_W_INT_ON_CHANGE_MASK = 17,       // Set interrupt on change mask
87
88         DT9812_W_CGL = 18,      // Write (or Clear) the CGL for the ADC
89         DT9812_R_MULTI_BYTE_USBMEM = 19,        // Multiple Reads of USB memory
90         DT9812_W_MULTI_BYTE_USBMEM = 20,        // Multiple Writes to USB memory
91
92         DT9812_START_SUBSYSTEM = 21,    // Issue a start command to a
93         // given subsystem
94         DT9812_STOP_SUBSYSTEM = 22,     // Issue a stop command to a
95         // given subsystem
96
97         DT9812_CALIBRATE_POT = 23,      //calibrate the board using CAL_POT_CMD
98         DT9812_W_DAC_FIFO_SIZE = 24,    // set the DAC FIFO size
99         DT9812_W_CGL_DAC = 25,  // Write (or Clear) the CGL for the DAC
100         DT9812_R_SINGLE_VALUE_CMD = 26, // Read a single value from a subsystem
101         DT9812_W_SINGLE_VALUE_CMD = 27, // Write a single value to a subsystem
102         DT9812_MAX_USB_FIRMWARE_CMD_CODE        // Valid DT9812_USB_FIRMWARE_CMD_CODE's
103                 // will be less than this number
104 } dt9812_usb_firmware_cmd_t;
105
106 typedef struct {
107         u16 numbytes;
108         u16 address;
109 } dt9812_flash_data_t;
110
111 #define DT9812_MAX_NUM_MULTI_BYTE_RDS  \
112     ((DT9812_MAX_WRITE_CMD_PIPE_SIZE - 4 - 1) / sizeof(u8))
113
114 typedef struct {
115         u8 count;
116         u8 address[DT9812_MAX_NUM_MULTI_BYTE_RDS];
117 } dt9812_read_multi_t;
118
119 typedef struct {
120         u8 address;
121         u8 value;
122 } dt9812_write_byte_t;
123
124 #define DT9812_MAX_NUM_MULTI_BYTE_WRTS  \
125     ((DT9812_MAX_WRITE_CMD_PIPE_SIZE - 4 - 1) / sizeof(dt9812_write_byte_t))
126
127 typedef struct {
128         u8 count;
129         dt9812_write_byte_t write[DT9812_MAX_NUM_MULTI_BYTE_WRTS];
130 } dt9812_write_multi_t;
131
132 typedef struct {
133         u8 address;
134         u8 and_mask;
135         u8 or_value;
136 } dt9812_rmw_byte_t;
137
138 #define DT9812_MAX_NUM_MULTI_BYTE_RMWS  \
139     ((DT9812_MAX_WRITE_CMD_PIPE_SIZE - 4 - 1) / sizeof(dt9812_rmw_byte_t))
140
141 typedef struct {
142         u8 count;
143         dt9812_rmw_byte_t rmw[DT9812_MAX_NUM_MULTI_BYTE_RMWS];
144 } dt9812_rmw_multi_t;
145
146 typedef struct dt9812_usb_cmd {
147
148         u32 cmd;
149         union {
150                 dt9812_flash_data_t flash_data_info;
151                 dt9812_read_multi_t read_multi_info;
152                 dt9812_write_multi_t write_multi_info;
153                 dt9812_rmw_multi_t rmw_multi_info;
154         } u;
155 #if 0
156         WRITE_BYTE_INFO WriteByteInfo;
157         READ_BYTE_INFO ReadByteInfo;
158         WRITE_MULTI_INFO WriteMultiInfo;
159         READ_MULTI_INFO ReadMultiInfo;
160         RMW_BYTE_INFO RMWByteInfo;
161         RMW_MULTI_INFO RMWMultiInfo;
162         DAC_THRESHOLD_INFO DacThresholdInfo;
163         INT_ON_CHANGE_MASK_INFO IntOnChangeMaskInfo;
164         CGL_INFO CglInfo;
165         SUBSYSTEM_INFO SubsystemInfo;
166         CAL_POT_CMD CalPotCmd;
167         WRITE_DEV_BYTE_INFO WriteDevByteInfo;
168         READ_DEV_BYTE_INFO ReadDevByteInfo;
169         WRITE_DEV_MULTI_INFO WriteDevMultiInfo;
170         READ_DEV_MULTI_INFO ReadDevMultiInfo;
171         READ_SINGLE_VALUE_INFO ReadSingleValueInfo;
172         WRITE_SINGLE_VALUE_INFO WriteSingleValueInfo;
173 #endif
174 } dt9812_usb_cmd_t;
175
176 #endif