Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[pandora-kernel.git] / drivers / media / dvb / dvb-usb / anysee.h
1 /*
2  * DVB USB Linux driver for Anysee E30 DVB-C & DVB-T USB2.0 receiver
3  *
4  * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
5  *
6  *    This program is free software; you can redistribute it and/or modify
7  *    it under the terms of the GNU General Public License as published by
8  *    the Free Software Foundation; either version 2 of the License, or
9  *    (at your option) any later version.
10  *
11  *    This program is distributed in the hope that it will be useful,
12  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *    GNU General Public License for more details.
15  *
16  *    You should have received a copy of the GNU General Public License
17  *    along with this program; if not, write to the Free Software
18  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  *
20  * TODO:
21  * - add smart card reader support for Conditional Access (CA)
22  *
23  * Card reader in Anysee is nothing more than ISO 7816 card reader.
24  * There is no hardware CAM in any Anysee device sold.
25  * In my understanding it should be implemented by making own module
26  * for ISO 7816 card reader, like dvb_ca_en50221 is implemented. This
27  * module registers serial interface that can be used to communicate
28  * with any ISO 7816 smart card.
29  *
30  * Any help according to implement serial smart card reader support
31  * is highly welcome!
32  */
33
34 #ifndef _DVB_USB_ANYSEE_H_
35 #define _DVB_USB_ANYSEE_H_
36
37 #define DVB_USB_LOG_PREFIX "anysee"
38 #include "dvb-usb.h"
39
40 #define deb_info(args...) dprintk(dvb_usb_anysee_debug, 0x01, args)
41 #define deb_xfer(args...) dprintk(dvb_usb_anysee_debug, 0x02, args)
42 #define deb_rc(args...)   dprintk(dvb_usb_anysee_debug, 0x04, args)
43 #define deb_reg(args...)  dprintk(dvb_usb_anysee_debug, 0x08, args)
44 #define deb_i2c(args...)  dprintk(dvb_usb_anysee_debug, 0x10, args)
45 #define deb_fw(args...)   dprintk(dvb_usb_anysee_debug, 0x20, args)
46
47 enum cmd {
48         CMD_I2C_READ            = 0x33,
49         CMD_I2C_WRITE           = 0x31,
50         CMD_REG_READ            = 0xb0,
51         CMD_REG_WRITE           = 0xb1,
52         CMD_STREAMING_CTRL      = 0x12,
53         CMD_LED_AND_IR_CTRL     = 0x16,
54         CMD_GET_IR_CODE         = 0x41,
55         CMD_GET_HW_INFO         = 0x19,
56         CMD_SMARTCARD           = 0x34,
57 };
58
59 struct anysee_state {
60         u8 hw; /* PCB ID */
61         u8 seq;
62 };
63
64 #define ANYSEE_HW_507T    2 /* E30 */
65 #define ANYSEE_HW_507CD   6 /* E30 Plus */
66 #define ANYSEE_HW_507DC  10 /* E30 C Plus */
67 #define ANYSEE_HW_507SI  11 /* E30 S2 Plus */
68 #define ANYSEE_HW_507FA  15 /* E30 Combo Plus / E30 C Plus */
69 #define ANYSEE_HW_508TC  18 /* E7 TC */
70 #define ANYSEE_HW_508S2  19 /* E7 S2 */
71 #define ANYSEE_HW_508PTC 21 /* E7 PTC Plus */
72 #define ANYSEE_HW_508PS2 22 /* E7 PS2 Plus */
73
74 #define REG_IOA       0x80 /* Port A (bit addressable) */
75 #define REG_IOB       0x90 /* Port B (bit addressable) */
76 #define REG_IOC       0xa0 /* Port C (bit addressable) */
77 #define REG_IOD       0xb0 /* Port D (bit addressable) */
78 #define REG_IOE       0xb1 /* Port E (NOT bit addressable) */
79 #define REG_OEA       0xb2 /* Port A Output Enable */
80 #define REG_OEB       0xb3 /* Port B Output Enable */
81 #define REG_OEC       0xb4 /* Port C Output Enable */
82 #define REG_OED       0xb5 /* Port D Output Enable */
83 #define REG_OEE       0xb6 /* Port E Output Enable */
84
85 #endif
86
87 /***************************************************************************
88  * USB API description (reverse engineered)
89  ***************************************************************************
90
91 Transaction flow:
92 =================
93 BULK[00001] >>> REQUEST PACKET 64 bytes
94 BULK[00081] <<< REPLY PACKET #1 64 bytes (PREVIOUS TRANSACTION REPLY)
95 BULK[00081] <<< REPLY PACKET #2 64 bytes (CURRENT TRANSACTION REPLY)
96
97 General reply packet(s) are always used if not own reply defined.
98
99 ============================================================================
100 | 00-63 | GENERAL REPLY PACKET #1 (PREVIOUS REPLY)
101 ============================================================================
102 |    00 | reply data (if any) from previous transaction
103 |       | Just same reply packet as returned during previous transaction.
104 |       | Needed only if reply is missed in previous transaction.
105 |       | Just skip normally.
106 ----------------------------------------------------------------------------
107 | 01-59 | don't care
108 ----------------------------------------------------------------------------
109 |    60 | packet sequence number
110 ----------------------------------------------------------------------------
111 | 61-63 | don't care
112 ----------------------------------------------------------------------------
113
114 ============================================================================
115 | 00-63 | GENERAL REPLY PACKET #2 (CURRENT REPLY)
116 ============================================================================
117 |    00 | reply data (if any)
118 ----------------------------------------------------------------------------
119 | 01-59 | don't care
120 ----------------------------------------------------------------------------
121 |    60 | packet sequence number
122 ----------------------------------------------------------------------------
123 | 61-63 | don't care
124 ----------------------------------------------------------------------------
125
126 ============================================================================
127 | 00-63 | I2C WRITE REQUEST PACKET
128 ============================================================================
129 |    00 | 0x31 I2C write command
130 ----------------------------------------------------------------------------
131 |    01 | i2c address
132 ----------------------------------------------------------------------------
133 |    02 | data length
134 |       | 0x02 (for typical I2C reg / val pair)
135 ----------------------------------------------------------------------------
136 |    03 | 0x01
137 ----------------------------------------------------------------------------
138 | 04-   | data
139 ----------------------------------------------------------------------------
140 |   -59 | don't care
141 ----------------------------------------------------------------------------
142 |    60 | packet sequence number
143 ----------------------------------------------------------------------------
144 | 61-63 | don't care
145 ----------------------------------------------------------------------------
146
147 ============================================================================
148 | 00-63 | I2C READ REQUEST PACKET
149 ============================================================================
150 |    00 | 0x33 I2C read command
151 ----------------------------------------------------------------------------
152 |    01 | i2c address + 1
153 ----------------------------------------------------------------------------
154 |    02 | register
155 ----------------------------------------------------------------------------
156 |    03 | 0x00
157 ----------------------------------------------------------------------------
158 |    04 | 0x00
159 ----------------------------------------------------------------------------
160 |    05 | data length
161 ----------------------------------------------------------------------------
162 | 06-59 | don't care
163 ----------------------------------------------------------------------------
164 |    60 | packet sequence number
165 ----------------------------------------------------------------------------
166 | 61-63 | don't care
167 ----------------------------------------------------------------------------
168
169 ============================================================================
170 | 00-63 | USB CONTROLLER REGISTER WRITE REQUEST PACKET
171 ============================================================================
172 |    00 | 0xb1 register write command
173 ----------------------------------------------------------------------------
174 | 01-02 | register
175 ----------------------------------------------------------------------------
176 |    03 | 0x01
177 ----------------------------------------------------------------------------
178 |    04 | value
179 ----------------------------------------------------------------------------
180 | 05-59 | don't care
181 ----------------------------------------------------------------------------
182 |    60 | packet sequence number
183 ----------------------------------------------------------------------------
184 | 61-63 | don't care
185 ----------------------------------------------------------------------------
186
187 ============================================================================
188 | 00-63 | USB CONTROLLER REGISTER READ REQUEST PACKET
189 ============================================================================
190 |    00 | 0xb0 register read command
191 ----------------------------------------------------------------------------
192 | 01-02 | register
193 ----------------------------------------------------------------------------
194 |    03 | 0x01
195 ----------------------------------------------------------------------------
196 | 04-59 | don't care
197 ----------------------------------------------------------------------------
198 |    60 | packet sequence number
199 ----------------------------------------------------------------------------
200 | 61-63 | don't care
201 ----------------------------------------------------------------------------
202
203 ============================================================================
204 | 00-63 | LED CONTROL REQUEST PACKET
205 ============================================================================
206 |    00 | 0x16 LED and IR control command
207 ----------------------------------------------------------------------------
208 |    01 | 0x01 (LED)
209 ----------------------------------------------------------------------------
210 |    03 | 0x00 blink
211 |       | 0x01 lights continuously
212 ----------------------------------------------------------------------------
213 |    04 | blink interval
214 |       | 0x00 fastest (looks like LED lights continuously)
215 |       | 0xff slowest
216 ----------------------------------------------------------------------------
217 | 05-59 | don't care
218 ----------------------------------------------------------------------------
219 |    60 | packet sequence number
220 ----------------------------------------------------------------------------
221 | 61-63 | don't care
222 ----------------------------------------------------------------------------
223
224 ============================================================================
225 | 00-63 | IR CONTROL REQUEST PACKET
226 ============================================================================
227 |    00 | 0x16 LED and IR control command
228 ----------------------------------------------------------------------------
229 |    01 | 0x02 (IR)
230 ----------------------------------------------------------------------------
231 |    03 | 0x00 IR disabled
232 |       | 0x01 IR enabled
233 ----------------------------------------------------------------------------
234 | 04-59 | don't care
235 ----------------------------------------------------------------------------
236 |    60 | packet sequence number
237 ----------------------------------------------------------------------------
238 | 61-63 | don't care
239 ----------------------------------------------------------------------------
240
241 ============================================================================
242 | 00-63 | STREAMING CONTROL REQUEST PACKET
243 ============================================================================
244 |    00 | 0x12 streaming control command
245 ----------------------------------------------------------------------------
246 |    01 | 0x00 streaming disabled
247 |       | 0x01 streaming enabled
248 ----------------------------------------------------------------------------
249 |    02 | 0x00
250 ----------------------------------------------------------------------------
251 | 03-59 | don't care
252 ----------------------------------------------------------------------------
253 |    60 | packet sequence number
254 ----------------------------------------------------------------------------
255 | 61-63 | don't care
256 ----------------------------------------------------------------------------
257
258 ============================================================================
259 | 00-63 | REMOTE CONTROL REQUEST PACKET
260 ============================================================================
261 |    00 | 0x41 remote control command
262 ----------------------------------------------------------------------------
263 | 01-59 | don't care
264 ----------------------------------------------------------------------------
265 |    60 | packet sequence number
266 ----------------------------------------------------------------------------
267 | 61-63 | don't care
268 ----------------------------------------------------------------------------
269
270 ============================================================================
271 | 00-63 | REMOTE CONTROL REPLY PACKET
272 ============================================================================
273 |    00 | 0x00 code not received
274 |       | 0x01 code received
275 ----------------------------------------------------------------------------
276 |    01 | remote control code
277 ----------------------------------------------------------------------------
278 | 02-59 | don't care
279 ----------------------------------------------------------------------------
280 |    60 | packet sequence number
281 ----------------------------------------------------------------------------
282 | 61-63 | don't care
283 ----------------------------------------------------------------------------
284
285 ============================================================================
286 | 00-63 | GET HARDWARE INFO REQUEST PACKET
287 ============================================================================
288 |    00 | 0x19 get hardware info command
289 ----------------------------------------------------------------------------
290 | 01-59 | don't care
291 ----------------------------------------------------------------------------
292 |    60 | packet sequence number
293 ----------------------------------------------------------------------------
294 | 61-63 | don't care
295 ----------------------------------------------------------------------------
296
297 ============================================================================
298 | 00-63 | GET HARDWARE INFO REPLY PACKET
299 ============================================================================
300 |    00 | hardware id
301 ----------------------------------------------------------------------------
302 | 01-02 | firmware version
303 ----------------------------------------------------------------------------
304 | 03-59 | don't care
305 ----------------------------------------------------------------------------
306 |    60 | packet sequence number
307 ----------------------------------------------------------------------------
308 | 61-63 | don't care
309 ----------------------------------------------------------------------------
310
311 ============================================================================
312 | 00-63 | SMART CARD READER PACKET
313 ============================================================================
314 |    00 | 0x34 smart card reader command
315 ----------------------------------------------------------------------------
316 |    xx |
317 ----------------------------------------------------------------------------
318 | xx-59 | don't care
319 ----------------------------------------------------------------------------
320 |    60 | packet sequence number
321 ----------------------------------------------------------------------------
322 | 61-63 | don't care
323 ----------------------------------------------------------------------------
324
325 */