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