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