Merge branch 'for-2.6.30' into for-2.6.31
[linux-2.6] / drivers / media / dvb / dvb-usb / af9015.h
1 /*
2  * DVB USB Linux driver for Afatech AF9015 DVB-T USB2.0 receiver
3  *
4  * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
5  *
6  * Thanks to Afatech who kindly provided information.
7  *
8  *    This program is free software; you can redistribute it and/or modify
9  *    it under the terms of the GNU General Public License as published by
10  *    the Free Software Foundation; either version 2 of the License, or
11  *    (at your option) any later version.
12  *
13  *    This program is distributed in the hope that it will be useful,
14  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *    GNU General Public License for more details.
17  *
18  *    You should have received a copy of the GNU General Public License
19  *    along with this program; if not, write to the Free Software
20  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21  *
22  */
23
24 #ifndef _DVB_USB_AF9015_H_
25 #define _DVB_USB_AF9015_H_
26
27 #define DVB_USB_LOG_PREFIX "af9015"
28 #include "dvb-usb.h"
29
30 #define deb_info(args...) dprintk(dvb_usb_af9015_debug, 0x01, args)
31 #define deb_rc(args...)   dprintk(dvb_usb_af9015_debug, 0x02, args)
32 #define deb_xfer(args...) dprintk(dvb_usb_af9015_debug, 0x04, args)
33 #define deb_reg(args...)  dprintk(dvb_usb_af9015_debug, 0x08, args)
34 #define deb_i2c(args...)  dprintk(dvb_usb_af9015_debug, 0x10, args)
35 #define deb_fw(args...)   dprintk(dvb_usb_af9015_debug, 0x20, args)
36
37 #define AF9015_I2C_EEPROM  0xa0
38 #define AF9015_I2C_DEMOD   0x38
39 #define AF9015_USB_TIMEOUT 2000
40
41 /* EEPROM locations */
42 #define AF9015_EEPROM_IR_MODE        0x18
43 #define AF9015_EEPROM_IR_REMOTE_TYPE 0x34
44 #define AF9015_EEPROM_TS_MODE        0x31
45 #define AF9015_EEPROM_DEMOD2_I2C     0x32
46
47 #define AF9015_EEPROM_SAW_BW1        0x35
48 #define AF9015_EEPROM_XTAL_TYPE1     0x36
49 #define AF9015_EEPROM_SPEC_INV1      0x37
50 #define AF9015_EEPROM_IF1L           0x38
51 #define AF9015_EEPROM_IF1H           0x39
52 #define AF9015_EEPROM_MT2060_IF1L    0x3a
53 #define AF9015_EEPROM_MT2060_IF1H    0x3b
54 #define AF9015_EEPROM_TUNER_ID1      0x3c
55
56 #define AF9015_EEPROM_SAW_BW2        0x45
57 #define AF9015_EEPROM_XTAL_TYPE2     0x46
58 #define AF9015_EEPROM_SPEC_INV2      0x47
59 #define AF9015_EEPROM_IF2L           0x48
60 #define AF9015_EEPROM_IF2H           0x49
61 #define AF9015_EEPROM_MT2060_IF2L    0x4a
62 #define AF9015_EEPROM_MT2060_IF2H    0x4b
63 #define AF9015_EEPROM_TUNER_ID2      0x4c
64
65 #define AF9015_EEPROM_OFFSET (AF9015_EEPROM_SAW_BW2 - AF9015_EEPROM_SAW_BW1)
66
67 struct req_t {
68         u8  cmd;       /* [0] */
69         /*  seq */     /* [1] */
70         u8  i2c_addr;  /* [2] */
71         u16 addr;      /* [3|4] */
72         u8  mbox;      /* [5] */
73         u8  addr_len;  /* [6] */
74         u8  data_len;  /* [7] */
75         u8  *data;
76 };
77
78 enum af9015_cmd {
79         GET_CONFIG           = 0x10,
80         DOWNLOAD_FIRMWARE    = 0x11,
81         BOOT                 = 0x13,
82         READ_MEMORY          = 0x20,
83         WRITE_MEMORY         = 0x21,
84         READ_WRITE_I2C       = 0x22,
85         COPY_FIRMWARE        = 0x23,
86         RECONNECT_USB        = 0x5a,
87         WRITE_VIRTUAL_MEMORY = 0x26,
88         GET_IR_CODE          = 0x27,
89         READ_I2C,
90         WRITE_I2C,
91 };
92
93 enum af9015_ir_mode {
94         AF9015_IR_MODE_DISABLED = 0,
95         AF9015_IR_MODE_HID,
96         AF9015_IR_MODE_RLC,
97         AF9015_IR_MODE_RC6,
98 };
99
100 struct af9015_state {
101         struct i2c_adapter i2c_adap; /* I2C adapter for 2nd FE */
102 };
103
104 struct af9015_config {
105         u8  dual_mode:1;
106         u16 mt2060_if1[2];
107         u16 firmware_size;
108         u16 firmware_checksum;
109         u8  *ir_table;
110         u16 ir_table_size;
111 };
112
113 enum af9015_remote {
114         AF9015_REMOTE_NONE                    = 0,
115 /* 1 */ AF9015_REMOTE_A_LINK_DTU_M,
116         AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
117         AF9015_REMOTE_MYGICTV_U718,
118         AF9015_REMOTE_DIGITTRADE_DVB_T,
119 /* 5 */ AF9015_REMOTE_AVERMEDIA_KS,
120 };
121
122 /* Leadtek WinFast DTV Dongle Gold */
123 static struct dvb_usb_rc_key af9015_rc_keys_leadtek[] = {
124         { 0x00, 0x1e, KEY_1 },
125         { 0x00, 0x1f, KEY_2 },
126         { 0x00, 0x20, KEY_3 },
127         { 0x00, 0x21, KEY_4 },
128         { 0x00, 0x22, KEY_5 },
129         { 0x00, 0x23, KEY_6 },
130         { 0x00, 0x24, KEY_7 },
131         { 0x00, 0x25, KEY_8 },
132         { 0x00, 0x26, KEY_9 },
133         { 0x00, 0x27, KEY_0 },
134         { 0x00, 0x28, KEY_ENTER },
135         { 0x00, 0x4f, KEY_VOLUMEUP },
136         { 0x00, 0x50, KEY_VOLUMEDOWN },
137         { 0x00, 0x51, KEY_CHANNELDOWN },
138         { 0x00, 0x52, KEY_CHANNELUP },
139 };
140
141 static u8 af9015_ir_table_leadtek[] = {
142         0x03, 0xfc, 0x00, 0xff, 0x1a, 0x01, 0x00,
143         0x03, 0xfc, 0x56, 0xa9, 0x00, 0x00, 0x00,
144         0x03, 0xfc, 0x4b, 0xb4, 0x00, 0x00, 0x00,
145         0x03, 0xfc, 0x4c, 0xb3, 0xb2, 0x04, 0x00,
146         0x03, 0xfc, 0x4d, 0xb2, 0x00, 0x00, 0x00,
147         0x03, 0xfc, 0x4e, 0xb1, 0x00, 0x00, 0x00,
148         0x03, 0xfc, 0x1f, 0xe0, 0x3d, 0x00, 0x00,
149         0x03, 0xfc, 0x40, 0xbf, 0x13, 0x01, 0x00,
150         0x03, 0xfc, 0x14, 0xeb, 0x10, 0x00, 0x00,
151         0x03, 0xfc, 0x49, 0xb6, 0x05, 0x01, 0x00,
152         0x03, 0xfc, 0x50, 0xaf, 0x29, 0x00, 0x00,
153         0x03, 0xfc, 0x0c, 0xf3, 0x52, 0x00, 0x00,
154         0x03, 0xfc, 0x03, 0xfc, 0x09, 0x00, 0x00,
155         0x03, 0xfc, 0x08, 0xf7, 0x50, 0x00, 0x00,
156         0x03, 0xfc, 0x13, 0xec, 0x28, 0x00, 0x00,
157         0x03, 0xfc, 0x04, 0xfb, 0x4f, 0x00, 0x00,
158         0x03, 0xfc, 0x4f, 0xb0, 0x0f, 0x01, 0x00,
159         0x03, 0xfc, 0x10, 0xef, 0x51, 0x00, 0x00,
160         0x03, 0xfc, 0x51, 0xae, 0x3f, 0x00, 0x00,
161         0x03, 0xfc, 0x42, 0xbd, 0x13, 0x00, 0x00,
162         0x03, 0xfc, 0x43, 0xbc, 0x00, 0x00, 0x00,
163         0x03, 0xfc, 0x44, 0xbb, 0x11, 0x00, 0x00,
164         0x03, 0xfc, 0x52, 0xad, 0x19, 0x00, 0x00,
165         0x03, 0xfc, 0x54, 0xab, 0x05, 0x00, 0x00,
166         0x03, 0xfc, 0x46, 0xb9, 0x29, 0x00, 0x00,
167         0x03, 0xfc, 0x55, 0xaa, 0x2b, 0x00, 0x00,
168         0x03, 0xfc, 0x53, 0xac, 0x41, 0x00, 0x00,
169         0x03, 0xfc, 0x05, 0xfa, 0x1e, 0x00, 0x00,
170         0x03, 0xfc, 0x06, 0xf9, 0x1f, 0x00, 0x00,
171         0x03, 0xfc, 0x07, 0xf8, 0x20, 0x00, 0x00,
172         0x03, 0xfc, 0x1e, 0xe1, 0x19, 0x00, 0x00,
173         0x03, 0xfc, 0x09, 0xf6, 0x21, 0x00, 0x00,
174         0x03, 0xfc, 0x0a, 0xf5, 0x22, 0x00, 0x00,
175         0x03, 0xfc, 0x0b, 0xf4, 0x23, 0x00, 0x00,
176         0x03, 0xfc, 0x1b, 0xe4, 0x16, 0x00, 0x00,
177         0x03, 0xfc, 0x0d, 0xf2, 0x24, 0x00, 0x00,
178         0x03, 0xfc, 0x0e, 0xf1, 0x25, 0x00, 0x00,
179         0x03, 0xfc, 0x0f, 0xf0, 0x26, 0x00, 0x00,
180         0x03, 0xfc, 0x16, 0xe9, 0x28, 0x00, 0x00,
181         0x03, 0xfc, 0x41, 0xbe, 0x37, 0x00, 0x00,
182         0x03, 0xfc, 0x12, 0xed, 0x27, 0x00, 0x00,
183         0x03, 0xfc, 0x11, 0xee, 0x2a, 0x00, 0x00,
184         0x03, 0xfc, 0x48, 0xb7, 0x2c, 0x00, 0x00,
185         0x03, 0xfc, 0x4a, 0xb5, 0x3c, 0x00, 0x00,
186         0x03, 0xfc, 0x47, 0xb8, 0x15, 0x01, 0x00,
187         0x03, 0xfc, 0x45, 0xba, 0x0b, 0x01, 0x00,
188         0x03, 0xfc, 0x5e, 0xa1, 0x43, 0x00, 0x00,
189         0x03, 0xfc, 0x5a, 0xa5, 0x42, 0x00, 0x00,
190         0x03, 0xfc, 0x5b, 0xa4, 0x4b, 0x00, 0x00,
191         0x03, 0xfc, 0x5f, 0xa0, 0x4e, 0x00, 0x00,
192 };
193
194 /* TwinHan AzureWave AD-TU700(704J) */
195 static struct dvb_usb_rc_key af9015_rc_keys_twinhan[] = {
196         { 0x05, 0x3f, KEY_POWER },
197         { 0x00, 0x19, KEY_FAVORITES },    /* Favorite List */
198         { 0x00, 0x04, KEY_TEXT },         /* Teletext */
199         { 0x00, 0x0e, KEY_POWER },
200         { 0x00, 0x0e, KEY_INFO },         /* Preview */
201         { 0x00, 0x08, KEY_EPG },          /* Info/EPG */
202         { 0x00, 0x0f, KEY_LIST },         /* Record List */
203         { 0x00, 0x1e, KEY_1 },
204         { 0x00, 0x1f, KEY_2 },
205         { 0x00, 0x20, KEY_3 },
206         { 0x00, 0x21, KEY_4 },
207         { 0x00, 0x22, KEY_5 },
208         { 0x00, 0x23, KEY_6 },
209         { 0x00, 0x24, KEY_7 },
210         { 0x00, 0x25, KEY_8 },
211         { 0x00, 0x26, KEY_9 },
212         { 0x00, 0x27, KEY_0 },
213         { 0x00, 0x29, KEY_CANCEL },       /* Cancel */
214         { 0x00, 0x4c, KEY_CLEAR },        /* Clear */
215         { 0x00, 0x2a, KEY_BACK },         /* Back */
216         { 0x00, 0x2b, KEY_TAB },          /* Tab */
217         { 0x00, 0x52, KEY_UP },           /* up arrow */
218         { 0x00, 0x51, KEY_DOWN },         /* down arrow */
219         { 0x00, 0x4f, KEY_RIGHT },        /* right arrow */
220         { 0x00, 0x50, KEY_LEFT },         /* left arrow */
221         { 0x00, 0x28, KEY_ENTER },        /* Enter / ok */
222         { 0x02, 0x52, KEY_VOLUMEUP },
223         { 0x02, 0x51, KEY_VOLUMEDOWN },
224         { 0x00, 0x4e, KEY_CHANNELDOWN },
225         { 0x00, 0x4b, KEY_CHANNELUP },
226         { 0x00, 0x4a, KEY_RECORD },
227         { 0x01, 0x11, KEY_PLAY },
228         { 0x00, 0x17, KEY_PAUSE },
229         { 0x00, 0x0c, KEY_REWIND },       /* FR << */
230         { 0x00, 0x11, KEY_FASTFORWARD },  /* FF >> */
231         { 0x01, 0x15, KEY_PREVIOUS },     /* Replay */
232         { 0x01, 0x0e, KEY_NEXT },         /* Skip */
233         { 0x00, 0x13, KEY_CAMERA },       /* Capture */
234         { 0x01, 0x0f, KEY_LANGUAGE },     /* SAP */
235         { 0x01, 0x13, KEY_TV2 },          /* PIP */
236         { 0x00, 0x1d, KEY_ZOOM },         /* Full Screen */
237         { 0x01, 0x17, KEY_SUBTITLE },     /* Subtitle / CC */
238         { 0x00, 0x10, KEY_MUTE },
239         { 0x01, 0x19, KEY_AUDIO },        /* L/R */ /* TODO better event */
240         { 0x01, 0x16, KEY_SLEEP },        /* Hibernate */
241         { 0x01, 0x16, KEY_SWITCHVIDEOMODE },
242                                           /* A/V */ /* TODO does not work */
243         { 0x00, 0x06, KEY_AGAIN },        /* Recall */
244         { 0x01, 0x16, KEY_KPPLUS },       /* Zoom+ */ /* TODO does not work */
245         { 0x01, 0x16, KEY_KPMINUS },      /* Zoom- */ /* TODO does not work */
246         { 0x02, 0x15, KEY_RED },
247         { 0x02, 0x0a, KEY_GREEN },
248         { 0x02, 0x1c, KEY_YELLOW },
249         { 0x02, 0x05, KEY_BLUE },
250 };
251
252 static u8 af9015_ir_table_twinhan[] = {
253         0x00, 0xff, 0x16, 0xe9, 0x3f, 0x05, 0x00,
254         0x00, 0xff, 0x07, 0xf8, 0x16, 0x01, 0x00,
255         0x00, 0xff, 0x14, 0xeb, 0x11, 0x01, 0x00,
256         0x00, 0xff, 0x1a, 0xe5, 0x4d, 0x00, 0x00,
257         0x00, 0xff, 0x4c, 0xb3, 0x17, 0x00, 0x00,
258         0x00, 0xff, 0x12, 0xed, 0x11, 0x00, 0x00,
259         0x00, 0xff, 0x40, 0xbf, 0x0c, 0x00, 0x00,
260         0x00, 0xff, 0x11, 0xee, 0x4a, 0x00, 0x00,
261         0x00, 0xff, 0x54, 0xab, 0x13, 0x00, 0x00,
262         0x00, 0xff, 0x41, 0xbe, 0x15, 0x01, 0x00,
263         0x00, 0xff, 0x42, 0xbd, 0x0e, 0x01, 0x00,
264         0x00, 0xff, 0x43, 0xbc, 0x17, 0x01, 0x00,
265         0x00, 0xff, 0x50, 0xaf, 0x0f, 0x01, 0x00,
266         0x00, 0xff, 0x4d, 0xb2, 0x1d, 0x00, 0x00,
267         0x00, 0xff, 0x47, 0xb8, 0x13, 0x01, 0x00,
268         0x00, 0xff, 0x05, 0xfa, 0x4b, 0x00, 0x00,
269         0x00, 0xff, 0x02, 0xfd, 0x4e, 0x00, 0x00,
270         0x00, 0xff, 0x0e, 0xf1, 0x06, 0x00, 0x00,
271         0x00, 0xff, 0x1e, 0xe1, 0x52, 0x02, 0x00,
272         0x00, 0xff, 0x0a, 0xf5, 0x51, 0x02, 0x00,
273         0x00, 0xff, 0x10, 0xef, 0x10, 0x00, 0x00,
274         0x00, 0xff, 0x49, 0xb6, 0x19, 0x01, 0x00,
275         0x00, 0xff, 0x15, 0xea, 0x27, 0x00, 0x00,
276         0x00, 0xff, 0x03, 0xfc, 0x1e, 0x00, 0x00,
277         0x00, 0xff, 0x01, 0xfe, 0x1f, 0x00, 0x00,
278         0x00, 0xff, 0x06, 0xf9, 0x20, 0x00, 0x00,
279         0x00, 0xff, 0x09, 0xf6, 0x21, 0x00, 0x00,
280         0x00, 0xff, 0x1d, 0xe2, 0x22, 0x00, 0x00,
281         0x00, 0xff, 0x1f, 0xe0, 0x23, 0x00, 0x00,
282         0x00, 0xff, 0x0d, 0xf2, 0x24, 0x00, 0x00,
283         0x00, 0xff, 0x19, 0xe6, 0x25, 0x00, 0x00,
284         0x00, 0xff, 0x1b, 0xe4, 0x26, 0x00, 0x00,
285         0x00, 0xff, 0x00, 0xff, 0x2b, 0x00, 0x00,
286         0x00, 0xff, 0x4a, 0xb5, 0x4c, 0x00, 0x00,
287         0x00, 0xff, 0x4b, 0xb4, 0x52, 0x00, 0x00,
288         0x00, 0xff, 0x51, 0xae, 0x51, 0x00, 0x00,
289         0x00, 0xff, 0x52, 0xad, 0x4f, 0x00, 0x00,
290         0x00, 0xff, 0x4e, 0xb1, 0x50, 0x00, 0x00,
291         0x00, 0xff, 0x0c, 0xf3, 0x29, 0x00, 0x00,
292         0x00, 0xff, 0x4f, 0xb0, 0x28, 0x00, 0x00,
293         0x00, 0xff, 0x13, 0xec, 0x2a, 0x00, 0x00,
294         0x00, 0xff, 0x17, 0xe8, 0x19, 0x00, 0x00,
295         0x00, 0xff, 0x04, 0xfb, 0x0f, 0x00, 0x00,
296         0x00, 0xff, 0x48, 0xb7, 0x0e, 0x00, 0x00,
297         0x00, 0xff, 0x0f, 0xf0, 0x04, 0x00, 0x00,
298         0x00, 0xff, 0x1c, 0xe3, 0x08, 0x00, 0x00,
299         0x00, 0xff, 0x18, 0xe7, 0x15, 0x02, 0x00,
300         0x00, 0xff, 0x53, 0xac, 0x0a, 0x02, 0x00,
301         0x00, 0xff, 0x5e, 0xa1, 0x1c, 0x02, 0x00,
302         0x00, 0xff, 0x5f, 0xa0, 0x05, 0x02, 0x00,
303 };
304
305 /* A-Link DTU(m) */
306 static struct dvb_usb_rc_key af9015_rc_keys_a_link[] = {
307         { 0x00, 0x1e, KEY_1 },
308         { 0x00, 0x1f, KEY_2 },
309         { 0x00, 0x20, KEY_3 },
310         { 0x00, 0x21, KEY_4 },
311         { 0x00, 0x22, KEY_5 },
312         { 0x00, 0x23, KEY_6 },
313         { 0x00, 0x24, KEY_7 },
314         { 0x00, 0x25, KEY_8 },
315         { 0x00, 0x26, KEY_9 },
316         { 0x00, 0x27, KEY_0 },
317         { 0x00, 0x2e, KEY_CHANNELUP },
318         { 0x00, 0x2d, KEY_CHANNELDOWN },
319         { 0x04, 0x28, KEY_ZOOM },
320         { 0x00, 0x41, KEY_MUTE },
321         { 0x00, 0x42, KEY_VOLUMEDOWN },
322         { 0x00, 0x43, KEY_VOLUMEUP },
323         { 0x00, 0x44, KEY_GOTO },         /* jump */
324         { 0x05, 0x45, KEY_POWER },
325 };
326
327 static u8 af9015_ir_table_a_link[] = {
328         0x08, 0xf7, 0x12, 0xed, 0x45, 0x05, 0x00, /* power */
329         0x08, 0xf7, 0x1a, 0xe5, 0x41, 0x00, 0x00, /* mute */
330         0x08, 0xf7, 0x01, 0xfe, 0x1e, 0x00, 0x00, /* 1 */
331         0x08, 0xf7, 0x1c, 0xe3, 0x21, 0x00, 0x00, /* 4 */
332         0x08, 0xf7, 0x03, 0xfc, 0x24, 0x00, 0x00, /* 7 */
333         0x08, 0xf7, 0x05, 0xfa, 0x28, 0x04, 0x00, /* zoom */
334         0x08, 0xf7, 0x00, 0xff, 0x43, 0x00, 0x00, /* volume up */
335         0x08, 0xf7, 0x16, 0xe9, 0x42, 0x00, 0x00, /* volume down */
336         0x08, 0xf7, 0x0f, 0xf0, 0x1f, 0x00, 0x00, /* 2 */
337         0x08, 0xf7, 0x0d, 0xf2, 0x22, 0x00, 0x00, /* 5 */
338         0x08, 0xf7, 0x1b, 0xe4, 0x25, 0x00, 0x00, /* 8 */
339         0x08, 0xf7, 0x06, 0xf9, 0x27, 0x00, 0x00, /* 0 */
340         0x08, 0xf7, 0x14, 0xeb, 0x2e, 0x00, 0x00, /* channel up */
341         0x08, 0xf7, 0x1d, 0xe2, 0x2d, 0x00, 0x00, /* channel down */
342         0x08, 0xf7, 0x02, 0xfd, 0x20, 0x00, 0x00, /* 3 */
343         0x08, 0xf7, 0x18, 0xe7, 0x23, 0x00, 0x00, /* 6 */
344         0x08, 0xf7, 0x04, 0xfb, 0x26, 0x00, 0x00, /* 9 */
345         0x08, 0xf7, 0x07, 0xf8, 0x44, 0x00, 0x00, /* jump */
346 };
347
348 /* MSI DIGIVOX mini II V3.0 */
349 static struct dvb_usb_rc_key af9015_rc_keys_msi[] = {
350         { 0x00, 0x1e, KEY_1 },
351         { 0x00, 0x1f, KEY_2 },
352         { 0x00, 0x20, KEY_3 },
353         { 0x00, 0x21, KEY_4 },
354         { 0x00, 0x22, KEY_5 },
355         { 0x00, 0x23, KEY_6 },
356         { 0x00, 0x24, KEY_7 },
357         { 0x00, 0x25, KEY_8 },
358         { 0x00, 0x26, KEY_9 },
359         { 0x00, 0x27, KEY_0 },
360         { 0x03, 0x0f, KEY_CHANNELUP },
361         { 0x03, 0x0e, KEY_CHANNELDOWN },
362         { 0x00, 0x42, KEY_VOLUMEDOWN },
363         { 0x00, 0x43, KEY_VOLUMEUP },
364         { 0x05, 0x45, KEY_POWER },
365         { 0x00, 0x52, KEY_UP },           /* up */
366         { 0x00, 0x51, KEY_DOWN },         /* down */
367         { 0x00, 0x28, KEY_ENTER },
368 };
369
370 static u8 af9015_ir_table_msi[] = {
371         0x03, 0xfc, 0x17, 0xe8, 0x45, 0x05, 0x00, /* power */
372         0x03, 0xfc, 0x0d, 0xf2, 0x51, 0x00, 0x00, /* down */
373         0x03, 0xfc, 0x03, 0xfc, 0x52, 0x00, 0x00, /* up */
374         0x03, 0xfc, 0x1a, 0xe5, 0x1e, 0x00, 0x00, /* 1 */
375         0x03, 0xfc, 0x02, 0xfd, 0x1f, 0x00, 0x00, /* 2 */
376         0x03, 0xfc, 0x04, 0xfb, 0x20, 0x00, 0x00, /* 3 */
377         0x03, 0xfc, 0x1c, 0xe3, 0x21, 0x00, 0x00, /* 4 */
378         0x03, 0xfc, 0x08, 0xf7, 0x22, 0x00, 0x00, /* 5 */
379         0x03, 0xfc, 0x1d, 0xe2, 0x23, 0x00, 0x00, /* 6 */
380         0x03, 0xfc, 0x11, 0xee, 0x24, 0x00, 0x00, /* 7 */
381         0x03, 0xfc, 0x0b, 0xf4, 0x25, 0x00, 0x00, /* 8 */
382         0x03, 0xfc, 0x10, 0xef, 0x26, 0x00, 0x00, /* 9 */
383         0x03, 0xfc, 0x09, 0xf6, 0x27, 0x00, 0x00, /* 0 */
384         0x03, 0xfc, 0x14, 0xeb, 0x43, 0x00, 0x00, /* volume up */
385         0x03, 0xfc, 0x1f, 0xe0, 0x42, 0x00, 0x00, /* volume down */
386         0x03, 0xfc, 0x15, 0xea, 0x0f, 0x03, 0x00, /* channel up */
387         0x03, 0xfc, 0x05, 0xfa, 0x0e, 0x03, 0x00, /* channel down */
388         0x03, 0xfc, 0x16, 0xe9, 0x28, 0x00, 0x00, /* enter */
389 };
390
391 /* MYGICTV U718 */
392 static struct dvb_usb_rc_key af9015_rc_keys_mygictv[] = {
393         { 0x00, 0x3d, KEY_SWITCHVIDEOMODE },
394                                           /* TV / AV */
395         { 0x05, 0x45, KEY_POWER },
396         { 0x00, 0x1e, KEY_1 },
397         { 0x00, 0x1f, KEY_2 },
398         { 0x00, 0x20, KEY_3 },
399         { 0x00, 0x21, KEY_4 },
400         { 0x00, 0x22, KEY_5 },
401         { 0x00, 0x23, KEY_6 },
402         { 0x00, 0x24, KEY_7 },
403         { 0x00, 0x25, KEY_8 },
404         { 0x00, 0x26, KEY_9 },
405         { 0x00, 0x27, KEY_0 },
406         { 0x00, 0x41, KEY_MUTE },
407         { 0x00, 0x2a, KEY_ESC },          /* Esc */
408         { 0x00, 0x2e, KEY_CHANNELUP },
409         { 0x00, 0x2d, KEY_CHANNELDOWN },
410         { 0x00, 0x42, KEY_VOLUMEDOWN },
411         { 0x00, 0x43, KEY_VOLUMEUP },
412         { 0x00, 0x52, KEY_UP },           /* up arrow */
413         { 0x00, 0x51, KEY_DOWN },         /* down arrow */
414         { 0x00, 0x4f, KEY_RIGHT },        /* right arrow */
415         { 0x00, 0x50, KEY_LEFT },         /* left arrow */
416         { 0x00, 0x28, KEY_ENTER },        /* ok */
417         { 0x01, 0x15, KEY_RECORD },
418         { 0x03, 0x13, KEY_PLAY },
419         { 0x01, 0x13, KEY_PAUSE },
420         { 0x01, 0x16, KEY_STOP },
421         { 0x03, 0x07, KEY_REWIND },       /* FR << */
422         { 0x03, 0x09, KEY_FASTFORWARD },  /* FF >> */
423         { 0x00, 0x3b, KEY_TIME },         /* TimeShift */
424         { 0x00, 0x3e, KEY_CAMERA },       /* Snapshot */
425         { 0x03, 0x16, KEY_CYCLEWINDOWS }, /* yellow, min / max */
426         { 0x00, 0x00, KEY_ZOOM },         /* 'select' (?) */
427         { 0x03, 0x16, KEY_SHUFFLE },      /* Shuffle */
428         { 0x03, 0x45, KEY_POWER },
429 };
430
431 static u8 af9015_ir_table_mygictv[] = {
432         0x02, 0xbd, 0x0c, 0xf3, 0x3d, 0x00, 0x00, /* TV / AV */
433         0x02, 0xbd, 0x14, 0xeb, 0x45, 0x05, 0x00, /* power */
434         0x02, 0xbd, 0x00, 0xff, 0x1e, 0x00, 0x00, /* 1 */
435         0x02, 0xbd, 0x01, 0xfe, 0x1f, 0x00, 0x00, /* 2 */
436         0x02, 0xbd, 0x02, 0xfd, 0x20, 0x00, 0x00, /* 3 */
437         0x02, 0xbd, 0x03, 0xfc, 0x21, 0x00, 0x00, /* 4 */
438         0x02, 0xbd, 0x04, 0xfb, 0x22, 0x00, 0x00, /* 5 */
439         0x02, 0xbd, 0x05, 0xfa, 0x23, 0x00, 0x00, /* 6 */
440         0x02, 0xbd, 0x06, 0xf9, 0x24, 0x00, 0x00, /* 7 */
441         0x02, 0xbd, 0x07, 0xf8, 0x25, 0x00, 0x00, /* 8 */
442         0x02, 0xbd, 0x08, 0xf7, 0x26, 0x00, 0x00, /* 9 */
443         0x02, 0xbd, 0x09, 0xf6, 0x27, 0x00, 0x00, /* 0 */
444         0x02, 0xbd, 0x0a, 0xf5, 0x41, 0x00, 0x00, /* mute */
445         0x02, 0xbd, 0x1c, 0xe3, 0x2a, 0x00, 0x00, /* esc */
446         0x02, 0xbd, 0x1f, 0xe0, 0x43, 0x00, 0x00, /* volume up */
447         0x02, 0xbd, 0x12, 0xed, 0x52, 0x00, 0x00, /* up arrow */
448         0x02, 0xbd, 0x11, 0xee, 0x50, 0x00, 0x00, /* left arrow */
449         0x02, 0xbd, 0x15, 0xea, 0x28, 0x00, 0x00, /* ok */
450         0x02, 0xbd, 0x10, 0xef, 0x4f, 0x00, 0x00, /* right arrow */
451         0x02, 0xbd, 0x13, 0xec, 0x51, 0x00, 0x00, /* down arrow */
452         0x02, 0xbd, 0x0e, 0xf1, 0x42, 0x00, 0x00, /* volume down */
453         0x02, 0xbd, 0x19, 0xe6, 0x15, 0x01, 0x00, /* record */
454         0x02, 0xbd, 0x1e, 0xe1, 0x13, 0x03, 0x00, /* play */
455         0x02, 0xbd, 0x16, 0xe9, 0x16, 0x01, 0x00, /* stop */
456         0x02, 0xbd, 0x0b, 0xf4, 0x28, 0x04, 0x00, /* yellow, min / max */
457         0x02, 0xbd, 0x0f, 0xf0, 0x3b, 0x00, 0x00, /* time shift */
458         0x02, 0xbd, 0x18, 0xe7, 0x2e, 0x00, 0x00, /* channel up */
459         0x02, 0xbd, 0x1a, 0xe5, 0x2d, 0x00, 0x00, /* channel down */
460         0x02, 0xbd, 0x17, 0xe8, 0x3e, 0x00, 0x00, /* snapshot */
461         0x02, 0xbd, 0x40, 0xbf, 0x13, 0x01, 0x00, /* pause */
462         0x02, 0xbd, 0x41, 0xbe, 0x09, 0x03, 0x00, /* FF >> */
463         0x02, 0xbd, 0x42, 0xbd, 0x07, 0x03, 0x00, /* FR << */
464         0x02, 0xbd, 0x43, 0xbc, 0x00, 0x00, 0x00, /* 'select' (?) */
465         0x02, 0xbd, 0x44, 0xbb, 0x16, 0x03, 0x00, /* shuffle */
466         0x02, 0xbd, 0x45, 0xba, 0x45, 0x03, 0x00, /* power */
467 };
468
469 /* KWorld PlusTV Dual DVB-T Stick (DVB-T 399U) */
470 static u8 af9015_ir_table_kworld[] = {
471         0x86, 0x6b, 0x0c, 0xf3, 0x2e, 0x07, 0x00,
472         0x86, 0x6b, 0x16, 0xe9, 0x2d, 0x07, 0x00,
473         0x86, 0x6b, 0x1d, 0xe2, 0x37, 0x07, 0x00,
474         0x86, 0x6b, 0x00, 0xff, 0x1e, 0x07, 0x00,
475         0x86, 0x6b, 0x01, 0xfe, 0x1f, 0x07, 0x00,
476         0x86, 0x6b, 0x02, 0xfd, 0x20, 0x07, 0x00,
477         0x86, 0x6b, 0x03, 0xfc, 0x21, 0x07, 0x00,
478         0x86, 0x6b, 0x04, 0xfb, 0x22, 0x07, 0x00,
479         0x86, 0x6b, 0x05, 0xfa, 0x23, 0x07, 0x00,
480         0x86, 0x6b, 0x06, 0xf9, 0x24, 0x07, 0x00,
481         0x86, 0x6b, 0x07, 0xf8, 0x25, 0x07, 0x00,
482         0x86, 0x6b, 0x08, 0xf7, 0x26, 0x07, 0x00,
483         0x86, 0x6b, 0x09, 0xf6, 0x4d, 0x07, 0x00,
484         0x86, 0x6b, 0x0a, 0xf5, 0x4e, 0x07, 0x00,
485         0x86, 0x6b, 0x14, 0xeb, 0x4f, 0x07, 0x00,
486         0x86, 0x6b, 0x1e, 0xe1, 0x50, 0x07, 0x00,
487         0x86, 0x6b, 0x17, 0xe8, 0x52, 0x07, 0x00,
488         0x86, 0x6b, 0x1f, 0xe0, 0x51, 0x07, 0x00,
489         0x86, 0x6b, 0x0e, 0xf1, 0x0b, 0x07, 0x00,
490         0x86, 0x6b, 0x20, 0xdf, 0x0c, 0x07, 0x00,
491         0x86, 0x6b, 0x42, 0xbd, 0x0d, 0x07, 0x00,
492         0x86, 0x6b, 0x0b, 0xf4, 0x0e, 0x07, 0x00,
493         0x86, 0x6b, 0x43, 0xbc, 0x0f, 0x07, 0x00,
494         0x86, 0x6b, 0x10, 0xef, 0x10, 0x07, 0x00,
495         0x86, 0x6b, 0x21, 0xde, 0x11, 0x07, 0x00,
496         0x86, 0x6b, 0x13, 0xec, 0x12, 0x07, 0x00,
497         0x86, 0x6b, 0x11, 0xee, 0x13, 0x07, 0x00,
498         0x86, 0x6b, 0x12, 0xed, 0x14, 0x07, 0x00,
499         0x86, 0x6b, 0x19, 0xe6, 0x15, 0x07, 0x00,
500         0x86, 0x6b, 0x1a, 0xe5, 0x16, 0x07, 0x00,
501         0x86, 0x6b, 0x1b, 0xe4, 0x17, 0x07, 0x00,
502         0x86, 0x6b, 0x4b, 0xb4, 0x18, 0x07, 0x00,
503         0x86, 0x6b, 0x40, 0xbf, 0x19, 0x07, 0x00,
504         0x86, 0x6b, 0x44, 0xbb, 0x1a, 0x07, 0x00,
505         0x86, 0x6b, 0x41, 0xbe, 0x1b, 0x07, 0x00,
506         0x86, 0x6b, 0x22, 0xdd, 0x1c, 0x07, 0x00,
507         0x86, 0x6b, 0x15, 0xea, 0x1d, 0x07, 0x00,
508         0x86, 0x6b, 0x0f, 0xf0, 0x3f, 0x07, 0x00,
509         0x86, 0x6b, 0x1c, 0xe3, 0x40, 0x07, 0x00,
510         0x86, 0x6b, 0x4a, 0xb5, 0x41, 0x07, 0x00,
511         0x86, 0x6b, 0x48, 0xb7, 0x42, 0x07, 0x00,
512         0x86, 0x6b, 0x49, 0xb6, 0x43, 0x07, 0x00,
513         0x86, 0x6b, 0x18, 0xe7, 0x44, 0x07, 0x00,
514         0x86, 0x6b, 0x23, 0xdc, 0x45, 0x07, 0x00,
515 };
516
517 /* AverMedia Volar X */
518 static struct dvb_usb_rc_key af9015_rc_keys_avermedia[] = {
519         { 0x05, 0x3d, KEY_PROG1 },       /* SOURCE */
520         { 0x05, 0x12, KEY_POWER },       /* POWER */
521         { 0x05, 0x1e, KEY_1 },           /* 1 */
522         { 0x05, 0x1f, KEY_2 },           /* 2 */
523         { 0x05, 0x20, KEY_3 },           /* 3 */
524         { 0x05, 0x21, KEY_4 },           /* 4 */
525         { 0x05, 0x22, KEY_5 },           /* 5 */
526         { 0x05, 0x23, KEY_6 },           /* 6 */
527         { 0x05, 0x24, KEY_7 },           /* 7 */
528         { 0x05, 0x25, KEY_8 },           /* 8 */
529         { 0x05, 0x26, KEY_9 },           /* 9 */
530         { 0x05, 0x3f, KEY_LEFT },        /* L / DISPLAY */
531         { 0x05, 0x27, KEY_0 },           /* 0 */
532         { 0x05, 0x0f, KEY_RIGHT },       /* R / CH RTN */
533         { 0x05, 0x18, KEY_PROG2 },       /* SNAP SHOT */
534         { 0x05, 0x1c, KEY_PROG3 },       /* 16-CH PREV */
535         { 0x05, 0x2d, KEY_VOLUMEDOWN },  /* VOL DOWN */
536         { 0x05, 0x3e, KEY_ZOOM },        /* FULL SCREEN */
537         { 0x05, 0x2e, KEY_VOLUMEUP },    /* VOL UP */
538         { 0x05, 0x10, KEY_MUTE },        /* MUTE */
539         { 0x05, 0x04, KEY_AUDIO },       /* AUDIO */
540         { 0x05, 0x15, KEY_RECORD },      /* RECORD */
541         { 0x05, 0x11, KEY_PLAY },        /* PLAY */
542         { 0x05, 0x16, KEY_STOP },        /* STOP */
543         { 0x05, 0x0c, KEY_PLAYPAUSE },   /* TIMESHIFT / PAUSE */
544         { 0x05, 0x05, KEY_BACK },        /* << / RED */
545         { 0x05, 0x09, KEY_FORWARD },     /* >> / YELLOW */
546         { 0x05, 0x17, KEY_TEXT },        /* TELETEXT */
547         { 0x05, 0x0a, KEY_EPG },         /* EPG */
548         { 0x05, 0x13, KEY_MENU },        /* MENU */
549
550         { 0x05, 0x0e, KEY_CHANNELUP },   /* CH UP */
551         { 0x05, 0x0d, KEY_CHANNELDOWN }, /* CH DOWN */
552         { 0x05, 0x19, KEY_FIRST },       /* |<< / GREEN */
553         { 0x05, 0x08, KEY_LAST },        /* >>| / BLUE */
554 };
555
556 static u8 af9015_ir_table_avermedia[] = {
557         0x02, 0xfd, 0x00, 0xff, 0x12, 0x05, 0x00,
558         0x02, 0xfd, 0x01, 0xfe, 0x3d, 0x05, 0x00,
559         0x02, 0xfd, 0x03, 0xfc, 0x17, 0x05, 0x00,
560         0x02, 0xfd, 0x04, 0xfb, 0x0a, 0x05, 0x00,
561         0x02, 0xfd, 0x05, 0xfa, 0x1e, 0x05, 0x00,
562         0x02, 0xfd, 0x06, 0xf9, 0x1f, 0x05, 0x00,
563         0x02, 0xfd, 0x07, 0xf8, 0x20, 0x05, 0x00,
564         0x02, 0xfd, 0x09, 0xf6, 0x21, 0x05, 0x00,
565         0x02, 0xfd, 0x0a, 0xf5, 0x22, 0x05, 0x00,
566         0x02, 0xfd, 0x0b, 0xf4, 0x23, 0x05, 0x00,
567         0x02, 0xfd, 0x0d, 0xf2, 0x24, 0x05, 0x00,
568         0x02, 0xfd, 0x0e, 0xf1, 0x25, 0x05, 0x00,
569         0x02, 0xfd, 0x0f, 0xf0, 0x26, 0x05, 0x00,
570         0x02, 0xfd, 0x11, 0xee, 0x27, 0x05, 0x00,
571         0x02, 0xfd, 0x08, 0xf7, 0x04, 0x05, 0x00,
572         0x02, 0xfd, 0x0c, 0xf3, 0x3e, 0x05, 0x00,
573         0x02, 0xfd, 0x10, 0xef, 0x1c, 0x05, 0x00,
574         0x02, 0xfd, 0x12, 0xed, 0x3f, 0x05, 0x00,
575         0x02, 0xfd, 0x13, 0xec, 0x0f, 0x05, 0x00,
576         0x02, 0xfd, 0x14, 0xeb, 0x10, 0x05, 0x00,
577         0x02, 0xfd, 0x15, 0xea, 0x13, 0x05, 0x00,
578         0x02, 0xfd, 0x17, 0xe8, 0x18, 0x05, 0x00,
579         0x02, 0xfd, 0x18, 0xe7, 0x11, 0x05, 0x00,
580         0x02, 0xfd, 0x19, 0xe6, 0x15, 0x05, 0x00,
581         0x02, 0xfd, 0x1a, 0xe5, 0x0c, 0x05, 0x00,
582         0x02, 0xfd, 0x1b, 0xe4, 0x16, 0x05, 0x00,
583         0x02, 0xfd, 0x1c, 0xe3, 0x09, 0x05, 0x00,
584         0x02, 0xfd, 0x1d, 0xe2, 0x05, 0x05, 0x00,
585         0x02, 0xfd, 0x1e, 0xe1, 0x2d, 0x05, 0x00,
586         0x02, 0xfd, 0x1f, 0xe0, 0x2e, 0x05, 0x00,
587         0x03, 0xfc, 0x00, 0xff, 0x08, 0x05, 0x00,
588         0x03, 0xfc, 0x01, 0xfe, 0x19, 0x05, 0x00,
589         0x03, 0xfc, 0x02, 0xfd, 0x0d, 0x05, 0x00,
590         0x03, 0xfc, 0x03, 0xfc, 0x0e, 0x05, 0x00,
591 };
592
593 static u8 af9015_ir_table_avermedia_ks[] = {
594         0x05, 0xfa, 0x01, 0xfe, 0x12, 0x05, 0x00,
595         0x05, 0xfa, 0x02, 0xfd, 0x0e, 0x05, 0x00,
596         0x05, 0xfa, 0x03, 0xfc, 0x0d, 0x05, 0x00,
597         0x05, 0xfa, 0x04, 0xfb, 0x2e, 0x05, 0x00,
598         0x05, 0xfa, 0x05, 0xfa, 0x2d, 0x05, 0x00,
599         0x05, 0xfa, 0x06, 0xf9, 0x10, 0x05, 0x00,
600         0x05, 0xfa, 0x07, 0xf8, 0x0f, 0x05, 0x00,
601         0x05, 0xfa, 0x08, 0xf7, 0x3d, 0x05, 0x00,
602         0x05, 0xfa, 0x09, 0xf6, 0x1e, 0x05, 0x00,
603         0x05, 0xfa, 0x0a, 0xf5, 0x1f, 0x05, 0x00,
604         0x05, 0xfa, 0x0b, 0xf4, 0x20, 0x05, 0x00,
605         0x05, 0xfa, 0x0c, 0xf3, 0x21, 0x05, 0x00,
606         0x05, 0xfa, 0x0d, 0xf2, 0x22, 0x05, 0x00,
607         0x05, 0xfa, 0x0e, 0xf1, 0x23, 0x05, 0x00,
608         0x05, 0xfa, 0x0f, 0xf0, 0x24, 0x05, 0x00,
609         0x05, 0xfa, 0x10, 0xef, 0x25, 0x05, 0x00,
610         0x05, 0xfa, 0x11, 0xee, 0x26, 0x05, 0x00,
611         0x05, 0xfa, 0x12, 0xed, 0x27, 0x05, 0x00,
612         0x05, 0xfa, 0x13, 0xec, 0x04, 0x05, 0x00,
613         0x05, 0xfa, 0x15, 0xea, 0x0a, 0x05, 0x00,
614         0x05, 0xfa, 0x16, 0xe9, 0x11, 0x05, 0x00,
615         0x05, 0xfa, 0x17, 0xe8, 0x15, 0x05, 0x00,
616         0x05, 0xfa, 0x18, 0xe7, 0x16, 0x05, 0x00,
617         0x05, 0xfa, 0x1c, 0xe3, 0x05, 0x05, 0x00,
618         0x05, 0xfa, 0x1d, 0xe2, 0x09, 0x05, 0x00,
619         0x05, 0xfa, 0x4d, 0xb2, 0x3f, 0x05, 0x00,
620         0x05, 0xfa, 0x56, 0xa9, 0x3e, 0x05, 0x00
621 };
622
623 /* Digittrade DVB-T USB Stick */
624 static struct dvb_usb_rc_key af9015_rc_keys_digittrade[] = {
625         { 0x01, 0x0f, KEY_LAST },       /* RETURN */
626         { 0x05, 0x17, KEY_TEXT },       /* TELETEXT */
627         { 0x01, 0x08, KEY_EPG },        /* EPG */
628         { 0x05, 0x13, KEY_POWER },      /* POWER */
629         { 0x01, 0x09, KEY_ZOOM },       /* FULLSCREEN */
630         { 0x00, 0x40, KEY_AUDIO },      /* DUAL SOUND */
631         { 0x00, 0x2c, KEY_PRINT },      /* SNAPSHOT */
632         { 0x05, 0x16, KEY_SUBTITLE },   /* SUBTITLE */
633         { 0x00, 0x52, KEY_CHANNELUP },  /* CH Up */
634         { 0x00, 0x51, KEY_CHANNELDOWN },/* Ch Dn */
635         { 0x00, 0x57, KEY_VOLUMEUP },   /* Vol Up */
636         { 0x00, 0x56, KEY_VOLUMEDOWN }, /* Vol Dn */
637         { 0x01, 0x10, KEY_MUTE },       /* MUTE */
638         { 0x00, 0x27, KEY_0 },
639         { 0x00, 0x1e, KEY_1 },
640         { 0x00, 0x1f, KEY_2 },
641         { 0x00, 0x20, KEY_3 },
642         { 0x00, 0x21, KEY_4 },
643         { 0x00, 0x22, KEY_5 },
644         { 0x00, 0x23, KEY_6 },
645         { 0x00, 0x24, KEY_7 },
646         { 0x00, 0x25, KEY_8 },
647         { 0x00, 0x26, KEY_9 },
648         { 0x01, 0x17, KEY_PLAYPAUSE },  /* TIMESHIFT */
649         { 0x01, 0x15, KEY_RECORD },     /* RECORD */
650         { 0x03, 0x13, KEY_PLAY },       /* PLAY */
651         { 0x01, 0x16, KEY_STOP },       /* STOP */
652         { 0x01, 0x13, KEY_PAUSE },      /* PAUSE */
653 };
654
655 static u8 af9015_ir_table_digittrade[] = {
656         0x00, 0xff, 0x06, 0xf9, 0x13, 0x05, 0x00,
657         0x00, 0xff, 0x4d, 0xb2, 0x17, 0x01, 0x00,
658         0x00, 0xff, 0x1f, 0xe0, 0x2c, 0x00, 0x00,
659         0x00, 0xff, 0x0a, 0xf5, 0x15, 0x01, 0x00,
660         0x00, 0xff, 0x0e, 0xf1, 0x16, 0x01, 0x00,
661         0x00, 0xff, 0x09, 0xf6, 0x09, 0x01, 0x00,
662         0x00, 0xff, 0x01, 0xfe, 0x08, 0x01, 0x00,
663         0x00, 0xff, 0x05, 0xfa, 0x10, 0x01, 0x00,
664         0x00, 0xff, 0x02, 0xfd, 0x56, 0x00, 0x00,
665         0x00, 0xff, 0x40, 0xbf, 0x57, 0x00, 0x00,
666         0x00, 0xff, 0x19, 0xe6, 0x52, 0x00, 0x00,
667         0x00, 0xff, 0x17, 0xe8, 0x51, 0x00, 0x00,
668         0x00, 0xff, 0x10, 0xef, 0x0f, 0x01, 0x00,
669         0x00, 0xff, 0x54, 0xab, 0x27, 0x00, 0x00,
670         0x00, 0xff, 0x1b, 0xe4, 0x1e, 0x00, 0x00,
671         0x00, 0xff, 0x11, 0xee, 0x1f, 0x00, 0x00,
672         0x00, 0xff, 0x15, 0xea, 0x20, 0x00, 0x00,
673         0x00, 0xff, 0x12, 0xed, 0x21, 0x00, 0x00,
674         0x00, 0xff, 0x16, 0xe9, 0x22, 0x00, 0x00,
675         0x00, 0xff, 0x4c, 0xb3, 0x23, 0x00, 0x00,
676         0x00, 0xff, 0x48, 0xb7, 0x24, 0x00, 0x00,
677         0x00, 0xff, 0x04, 0xfb, 0x25, 0x00, 0x00,
678         0x00, 0xff, 0x00, 0xff, 0x26, 0x00, 0x00,
679         0x00, 0xff, 0x1e, 0xe1, 0x13, 0x03, 0x00,
680         0x00, 0xff, 0x1a, 0xe5, 0x13, 0x01, 0x00,
681         0x00, 0xff, 0x03, 0xfc, 0x17, 0x05, 0x00,
682         0x00, 0xff, 0x0d, 0xf2, 0x16, 0x05, 0x00,
683         0x00, 0xff, 0x1d, 0xe2, 0x40, 0x00, 0x00,
684 };
685
686 /* TREKSTOR DVB-T USB Stick */
687 static struct dvb_usb_rc_key af9015_rc_keys_trekstor[] = {
688         { 0x07, 0x04, KEY_AGAIN },              /* Home */
689         { 0x07, 0x05, KEY_MUTE },               /* Mute */
690         { 0x07, 0x06, KEY_UP },                 /* Up */
691         { 0x07, 0x07, KEY_DOWN },               /* Down */
692         { 0x07, 0x09, KEY_RIGHT },              /* Right */
693         { 0x07, 0x0a, KEY_ENTER },              /* OK */
694         { 0x07, 0x0b, KEY_FASTFORWARD },        /* Fast forward */
695         { 0x07, 0x0c, KEY_REWIND },             /* Rewind */
696         { 0x07, 0x0d, KEY_PLAY },               /* Play/Pause */
697         { 0x07, 0x0e, KEY_VOLUMEUP },           /* Volume + */
698         { 0x07, 0x0f, KEY_VOLUMEDOWN },         /* Volume - */
699         { 0x07, 0x10, KEY_RECORD },             /* Record */
700         { 0x07, 0x11, KEY_STOP },               /* Stop */
701         { 0x07, 0x12, KEY_ZOOM },               /* TV */
702         { 0x07, 0x13, KEY_EPG },                /* Info/EPG */
703         { 0x07, 0x14, KEY_CHANNELDOWN },        /* Channel - */
704         { 0x07, 0x15, KEY_CHANNELUP },          /* Channel + */
705         { 0x07, 0x1e, KEY_1 },
706         { 0x07, 0x1f, KEY_2 },
707         { 0x07, 0x20, KEY_3 },
708         { 0x07, 0x21, KEY_4 },
709         { 0x07, 0x22, KEY_5 },
710         { 0x07, 0x23, KEY_6 },
711         { 0x07, 0x24, KEY_7 },
712         { 0x07, 0x25, KEY_8 },
713         { 0x07, 0x26, KEY_9 },
714         { 0x07, 0x08, KEY_LEFT },               /* LEFT */
715         { 0x07, 0x27, KEY_0 },
716 };
717
718 static u8 af9015_ir_table_trekstor[] = {
719         0x00, 0xff, 0x86, 0x79, 0x04, 0x07, 0x00,
720         0x00, 0xff, 0x85, 0x7a, 0x05, 0x07, 0x00,
721         0x00, 0xff, 0x87, 0x78, 0x06, 0x07, 0x00,
722         0x00, 0xff, 0x8c, 0x73, 0x07, 0x07, 0x00,
723         0x00, 0xff, 0x89, 0x76, 0x09, 0x07, 0x00,
724         0x00, 0xff, 0x88, 0x77, 0x0a, 0x07, 0x00,
725         0x00, 0xff, 0x8a, 0x75, 0x0b, 0x07, 0x00,
726         0x00, 0xff, 0x9e, 0x61, 0x0c, 0x07, 0x00,
727         0x00, 0xff, 0x8d, 0x72, 0x0d, 0x07, 0x00,
728         0x00, 0xff, 0x8b, 0x74, 0x0e, 0x07, 0x00,
729         0x00, 0xff, 0x9b, 0x64, 0x0f, 0x07, 0x00,
730         0x00, 0xff, 0x9d, 0x62, 0x10, 0x07, 0x00,
731         0x00, 0xff, 0x8e, 0x71, 0x11, 0x07, 0x00,
732         0x00, 0xff, 0x9c, 0x63, 0x12, 0x07, 0x00,
733         0x00, 0xff, 0x8f, 0x70, 0x13, 0x07, 0x00,
734         0x00, 0xff, 0x93, 0x6c, 0x14, 0x07, 0x00,
735         0x00, 0xff, 0x97, 0x68, 0x15, 0x07, 0x00,
736         0x00, 0xff, 0x92, 0x6d, 0x1e, 0x07, 0x00,
737         0x00, 0xff, 0x96, 0x69, 0x1f, 0x07, 0x00,
738         0x00, 0xff, 0x9a, 0x65, 0x20, 0x07, 0x00,
739         0x00, 0xff, 0x91, 0x6e, 0x21, 0x07, 0x00,
740         0x00, 0xff, 0x95, 0x6a, 0x22, 0x07, 0x00,
741         0x00, 0xff, 0x99, 0x66, 0x23, 0x07, 0x00,
742         0x00, 0xff, 0x90, 0x6f, 0x24, 0x07, 0x00,
743         0x00, 0xff, 0x94, 0x6b, 0x25, 0x07, 0x00,
744         0x00, 0xff, 0x98, 0x67, 0x26, 0x07, 0x00,
745         0x00, 0xff, 0x9f, 0x60, 0x08, 0x07, 0x00,
746         0x00, 0xff, 0x84, 0x7b, 0x27, 0x07, 0x00,
747 };
748
749 #endif