blob: c6181047b9784e7a3630137e9750ea6bce17966d [file] [log] [blame]
Antti Palosaaria51e34d2008-05-17 23:05:48 -03001/*
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
Antti Palosaari9fdd9ca2008-06-11 11:43:19 -030026 * for ISO 7816 card reader, like dvb_ca_en50221 is implemented. This
27 * module registers serial interface that can be used to communicate
Antti Palosaaria51e34d2008-05-17 23:05:48 -030028 * 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
47enum 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
59struct anysee_state {
Antti Palosaari41f81f62011-04-10 17:53:52 -030060 u8 hw; /* PCB ID */
Antti Palosaaria51e34d2008-05-17 23:05:48 -030061 u8 seq;
62};
63
Antti Palosaari41f81f62011-04-10 17:53:52 -030064#define ANYSEE_HW_02 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 */
Antti Palosaaria43be982011-04-10 20:23:02 -030069#define ANYSEE_HW_508TC 18 /* E7 TC */
Antti Palosaari41f81f62011-04-10 17:53:52 -030070
71#define REG_IOA 0x80 /* Port A (bit addressable) */
72#define REG_IOB 0x90 /* Port B (bit addressable) */
73#define REG_IOC 0xa0 /* Port C (bit addressable) */
74#define REG_IOD 0xb0 /* Port D (bit addressable) */
75#define REG_IOE 0xb1 /* Port E (NOT bit addressable) */
76#define REG_OEA 0xb2 /* Port A Output Enable */
77#define REG_OEB 0xb3 /* Port B Output Enable */
78#define REG_OEC 0xb4 /* Port C Output Enable */
79#define REG_OED 0xb5 /* Port D Output Enable */
80#define REG_OEE 0xb6 /* Port E Output Enable */
81
Antti Palosaaria51e34d2008-05-17 23:05:48 -030082#endif
83
84/***************************************************************************
85 * USB API description (reverse engineered)
86 ***************************************************************************
87
88Transaction flow:
89=================
90BULK[00001] >>> REQUEST PACKET 64 bytes
91BULK[00081] <<< REPLY PACKET #1 64 bytes (PREVIOUS TRANSACTION REPLY)
92BULK[00081] <<< REPLY PACKET #2 64 bytes (CURRENT TRANSACTION REPLY)
93
94General reply packet(s) are always used if not own reply defined.
95
96============================================================================
97| 00-63 | GENERAL REPLY PACKET #1 (PREVIOUS REPLY)
98============================================================================
99| 00 | reply data (if any) from previous transaction
100| | Just same reply packet as returned during previous transaction.
101| | Needed only if reply is missed in previous transaction.
102| | Just skip normally.
103----------------------------------------------------------------------------
104| 01-59 | don't care
105----------------------------------------------------------------------------
106| 60 | packet sequence number
107----------------------------------------------------------------------------
108| 61-63 | don't care
109----------------------------------------------------------------------------
110
111============================================================================
112| 00-63 | GENERAL REPLY PACKET #2 (CURRENT REPLY)
113============================================================================
114| 00 | reply data (if any)
115----------------------------------------------------------------------------
116| 01-59 | don't care
117----------------------------------------------------------------------------
118| 60 | packet sequence number
119----------------------------------------------------------------------------
120| 61-63 | don't care
121----------------------------------------------------------------------------
122
123============================================================================
124| 00-63 | I2C WRITE REQUEST PACKET
125============================================================================
126| 00 | 0x31 I2C write command
127----------------------------------------------------------------------------
128| 01 | i2c address
129----------------------------------------------------------------------------
130| 02 | data length
131| | 0x02 (for typical I2C reg / val pair)
132----------------------------------------------------------------------------
133| 03 | 0x01
134----------------------------------------------------------------------------
135| 04- | data
136----------------------------------------------------------------------------
137| -59 | don't care
138----------------------------------------------------------------------------
139| 60 | packet sequence number
140----------------------------------------------------------------------------
141| 61-63 | don't care
142----------------------------------------------------------------------------
143
144============================================================================
145| 00-63 | I2C READ REQUEST PACKET
146============================================================================
147| 00 | 0x33 I2C read command
148----------------------------------------------------------------------------
149| 01 | i2c address + 1
150----------------------------------------------------------------------------
151| 02 | register
152----------------------------------------------------------------------------
153| 03 | 0x00
154----------------------------------------------------------------------------
155| 04 | 0x00
156----------------------------------------------------------------------------
Antti Palosaarib3e6a5a2011-04-09 21:00:51 -0300157| 05 | data length
Antti Palosaaria51e34d2008-05-17 23:05:48 -0300158----------------------------------------------------------------------------
159| 06-59 | don't care
160----------------------------------------------------------------------------
161| 60 | packet sequence number
162----------------------------------------------------------------------------
163| 61-63 | don't care
164----------------------------------------------------------------------------
165
166============================================================================
167| 00-63 | USB CONTROLLER REGISTER WRITE REQUEST PACKET
168============================================================================
169| 00 | 0xb1 register write command
170----------------------------------------------------------------------------
171| 01-02 | register
172----------------------------------------------------------------------------
173| 03 | 0x01
174----------------------------------------------------------------------------
175| 04 | value
176----------------------------------------------------------------------------
177| 05-59 | don't care
178----------------------------------------------------------------------------
179| 60 | packet sequence number
180----------------------------------------------------------------------------
181| 61-63 | don't care
182----------------------------------------------------------------------------
183
184============================================================================
185| 00-63 | USB CONTROLLER REGISTER READ REQUEST PACKET
186============================================================================
187| 00 | 0xb0 register read command
188----------------------------------------------------------------------------
189| 01-02 | register
190----------------------------------------------------------------------------
191| 03 | 0x01
192----------------------------------------------------------------------------
193| 04-59 | don't care
194----------------------------------------------------------------------------
195| 60 | packet sequence number
196----------------------------------------------------------------------------
197| 61-63 | don't care
198----------------------------------------------------------------------------
199
200============================================================================
201| 00-63 | LED CONTROL REQUEST PACKET
202============================================================================
203| 00 | 0x16 LED and IR control command
204----------------------------------------------------------------------------
205| 01 | 0x01 (LED)
206----------------------------------------------------------------------------
207| 03 | 0x00 blink
208| | 0x01 lights continuously
209----------------------------------------------------------------------------
210| 04 | blink interval
211| | 0x00 fastest (looks like LED lights continuously)
212| | 0xff slowest
213----------------------------------------------------------------------------
214| 05-59 | don't care
215----------------------------------------------------------------------------
216| 60 | packet sequence number
217----------------------------------------------------------------------------
218| 61-63 | don't care
219----------------------------------------------------------------------------
220
221============================================================================
222| 00-63 | IR CONTROL REQUEST PACKET
223============================================================================
224| 00 | 0x16 LED and IR control command
225----------------------------------------------------------------------------
226| 01 | 0x02 (IR)
227----------------------------------------------------------------------------
228| 03 | 0x00 IR disabled
229| | 0x01 IR enabled
230----------------------------------------------------------------------------
231| 04-59 | don't care
232----------------------------------------------------------------------------
233| 60 | packet sequence number
234----------------------------------------------------------------------------
235| 61-63 | don't care
236----------------------------------------------------------------------------
237
238============================================================================
239| 00-63 | STREAMING CONTROL REQUEST PACKET
240============================================================================
241| 00 | 0x12 streaming control command
242----------------------------------------------------------------------------
243| 01 | 0x00 streaming disabled
244| | 0x01 streaming enabled
245----------------------------------------------------------------------------
246| 02 | 0x00
247----------------------------------------------------------------------------
248| 03-59 | don't care
249----------------------------------------------------------------------------
250| 60 | packet sequence number
251----------------------------------------------------------------------------
252| 61-63 | don't care
253----------------------------------------------------------------------------
254
255============================================================================
256| 00-63 | REMOTE CONTROL REQUEST PACKET
257============================================================================
258| 00 | 0x41 remote control command
259----------------------------------------------------------------------------
260| 01-59 | don't care
261----------------------------------------------------------------------------
262| 60 | packet sequence number
263----------------------------------------------------------------------------
264| 61-63 | don't care
265----------------------------------------------------------------------------
266
267============================================================================
268| 00-63 | REMOTE CONTROL REPLY PACKET
269============================================================================
270| 00 | 0x00 code not received
271| | 0x01 code received
272----------------------------------------------------------------------------
273| 01 | remote control code
274----------------------------------------------------------------------------
275| 02-59 | don't care
276----------------------------------------------------------------------------
277| 60 | packet sequence number
278----------------------------------------------------------------------------
279| 61-63 | don't care
280----------------------------------------------------------------------------
281
282============================================================================
283| 00-63 | GET HARDWARE INFO REQUEST PACKET
284============================================================================
285| 00 | 0x19 get hardware info command
286----------------------------------------------------------------------------
287| 01-59 | don't care
288----------------------------------------------------------------------------
289| 60 | packet sequence number
290----------------------------------------------------------------------------
291| 61-63 | don't care
292----------------------------------------------------------------------------
293
294============================================================================
295| 00-63 | GET HARDWARE INFO REPLY PACKET
296============================================================================
297| 00 | hardware id
298----------------------------------------------------------------------------
299| 01-02 | firmware version
300----------------------------------------------------------------------------
301| 03-59 | don't care
302----------------------------------------------------------------------------
303| 60 | packet sequence number
304----------------------------------------------------------------------------
305| 61-63 | don't care
306----------------------------------------------------------------------------
307
308============================================================================
309| 00-63 | SMART CARD READER PACKET
310============================================================================
311| 00 | 0x34 smart card reader command
312----------------------------------------------------------------------------
313| xx |
314----------------------------------------------------------------------------
315| xx-59 | don't care
316----------------------------------------------------------------------------
317| 60 | packet sequence number
318----------------------------------------------------------------------------
319| 61-63 | don't care
320----------------------------------------------------------------------------
321
322*/