Merge branch 'omap-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind...
[pandora-kernel.git] / 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         AF9015_IR_MODE_POLLING, /* just guess */
99 };
100
101 struct af9015_state {
102         struct i2c_adapter i2c_adap; /* I2C adapter for 2nd FE */
103 };
104
105 struct af9015_config {
106         u8  dual_mode:1;
107         u16 mt2060_if1[2];
108         u16 firmware_size;
109         u16 firmware_checksum;
110         u32 eeprom_sum;
111         u8  *ir_table;
112         u16 ir_table_size;
113 };
114
115 enum af9015_remote {
116         AF9015_REMOTE_NONE                    = 0,
117 /* 1 */ AF9015_REMOTE_A_LINK_DTU_M,
118         AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
119         AF9015_REMOTE_MYGICTV_U718,
120         AF9015_REMOTE_DIGITTRADE_DVB_T,
121 /* 5 */ AF9015_REMOTE_AVERMEDIA_KS,
122 };
123
124 /* LeadTek - Y04G0051 */
125 /* Leadtek WinFast DTV Dongle Gold */
126 static struct dvb_usb_rc_key ir_codes_af9015_table_leadtek[] = {
127         { 0x001e, KEY_1 },
128         { 0x001f, KEY_2 },
129         { 0x0020, KEY_3 },
130         { 0x0021, KEY_4 },
131         { 0x0022, KEY_5 },
132         { 0x0023, KEY_6 },
133         { 0x0024, KEY_7 },
134         { 0x0025, KEY_8 },
135         { 0x0026, KEY_9 },
136         { 0x0027, KEY_0 },
137         { 0x0028, KEY_OK },
138         { 0x004f, KEY_RIGHT },
139         { 0x0050, KEY_LEFT },
140         { 0x0051, KEY_DOWN },
141         { 0x0052, KEY_UP },
142         { 0x011a, KEY_POWER2 },
143         { 0x04b4, KEY_TV },
144         { 0x04b3, KEY_RED },
145         { 0x04b2, KEY_GREEN },
146         { 0x04b1, KEY_YELLOW },
147         { 0x04b0, KEY_BLUE },
148         { 0x003d, KEY_TEXT },
149         { 0x0113, KEY_SLEEP },
150         { 0x0010, KEY_MUTE },
151         { 0x0105, KEY_ESC },
152         { 0x0009, KEY_SCREEN },
153         { 0x010f, KEY_MENU },
154         { 0x003f, KEY_CHANNEL },
155         { 0x0013, KEY_REWIND },
156         { 0x0012, KEY_PLAY },
157         { 0x0011, KEY_FASTFORWARD },
158         { 0x0005, KEY_PREVIOUS },
159         { 0x0029, KEY_STOP },
160         { 0x002b, KEY_NEXT },
161         { 0x0041, KEY_EPG },
162         { 0x0019, KEY_VIDEO },
163         { 0x0016, KEY_AUDIO },
164         { 0x0037, KEY_DOT },
165         { 0x002a, KEY_AGAIN },
166         { 0x002c, KEY_CAMERA },
167         { 0x003c, KEY_NEW },
168         { 0x0115, KEY_RECORD },
169         { 0x010b, KEY_TIME },
170         { 0x0043, KEY_VOLUMEUP },
171         { 0x0042, KEY_VOLUMEDOWN },
172         { 0x004b, KEY_CHANNELUP },
173         { 0x004e, KEY_CHANNELDOWN },
174 };
175
176 static u8 af9015_ir_table_leadtek[] = {
177         0x03, 0xfc, 0x00, 0xff, 0x1a, 0x01, 0x00, /* KEY_POWER2 */
178         0x03, 0xfc, 0x56, 0xa9, 0xb4, 0x04, 0x00, /* KEY_TV */
179         0x03, 0xfc, 0x4b, 0xb4, 0xb3, 0x04, 0x00, /* KEY_RED */
180         0x03, 0xfc, 0x4c, 0xb3, 0xb2, 0x04, 0x00, /* KEY_GREEN */
181         0x03, 0xfc, 0x4d, 0xb2, 0xb1, 0x04, 0x00, /* KEY_YELLOW */
182         0x03, 0xfc, 0x4e, 0xb1, 0xb0, 0x04, 0x00, /* KEY_BLUE */
183         0x03, 0xfc, 0x1f, 0xe0, 0x3d, 0x00, 0x00, /* KEY_TEXT */
184         0x03, 0xfc, 0x40, 0xbf, 0x13, 0x01, 0x00, /* KEY_SLEEP */
185         0x03, 0xfc, 0x14, 0xeb, 0x10, 0x00, 0x00, /* KEY_MUTE */
186         0x03, 0xfc, 0x49, 0xb6, 0x05, 0x01, 0x00, /* KEY_ESC */
187         0x03, 0xfc, 0x50, 0xaf, 0x29, 0x00, 0x00, /* KEY_STOP (1)*/
188         0x03, 0xfc, 0x0c, 0xf3, 0x52, 0x00, 0x00, /* KEY_UP */
189         0x03, 0xfc, 0x03, 0xfc, 0x09, 0x00, 0x00, /* KEY_SCREEN */
190         0x03, 0xfc, 0x08, 0xf7, 0x50, 0x00, 0x00, /* KEY_LEFT */
191         0x03, 0xfc, 0x13, 0xec, 0x28, 0x00, 0x00, /* KEY_OK (1) */
192         0x03, 0xfc, 0x04, 0xfb, 0x4f, 0x00, 0x00, /* KEY_RIGHT */
193         0x03, 0xfc, 0x4f, 0xb0, 0x0f, 0x01, 0x00, /* KEY_MENU */
194         0x03, 0xfc, 0x10, 0xef, 0x51, 0x00, 0x00, /* KEY_DOWN */
195         0x03, 0xfc, 0x51, 0xae, 0x3f, 0x00, 0x00, /* KEY_CHANNEL */
196         0x03, 0xfc, 0x42, 0xbd, 0x13, 0x00, 0x00, /* KEY_REWIND */
197         0x03, 0xfc, 0x43, 0xbc, 0x12, 0x00, 0x00, /* KEY_PLAY */
198         0x03, 0xfc, 0x44, 0xbb, 0x11, 0x00, 0x00, /* KEY_FASTFORWARD */
199         0x03, 0xfc, 0x52, 0xad, 0x19, 0x00, 0x00, /* KEY_VIDEO (1) */
200         0x03, 0xfc, 0x54, 0xab, 0x05, 0x00, 0x00, /* KEY_PREVIOUS */
201         0x03, 0xfc, 0x46, 0xb9, 0x29, 0x00, 0x00, /* KEY_STOP (2) */
202         0x03, 0xfc, 0x55, 0xaa, 0x2b, 0x00, 0x00, /* KEY_NEXT */
203         0x03, 0xfc, 0x53, 0xac, 0x41, 0x00, 0x00, /* KEY_EPG */
204         0x03, 0xfc, 0x05, 0xfa, 0x1e, 0x00, 0x00, /* KEY_1 */
205         0x03, 0xfc, 0x06, 0xf9, 0x1f, 0x00, 0x00, /* KEY_2 */
206         0x03, 0xfc, 0x07, 0xf8, 0x20, 0x00, 0x00, /* KEY_3 */
207         0x03, 0xfc, 0x1e, 0xe1, 0x19, 0x00, 0x00, /* KEY_VIDEO (2) */
208         0x03, 0xfc, 0x09, 0xf6, 0x21, 0x00, 0x00, /* KEY_4 */
209         0x03, 0xfc, 0x0a, 0xf5, 0x22, 0x00, 0x00, /* KEY_5 */
210         0x03, 0xfc, 0x0b, 0xf4, 0x23, 0x00, 0x00, /* KEY_6 */
211         0x03, 0xfc, 0x1b, 0xe4, 0x16, 0x00, 0x00, /* KEY_AUDIO */
212         0x03, 0xfc, 0x0d, 0xf2, 0x24, 0x00, 0x00, /* KEY_7 */
213         0x03, 0xfc, 0x0e, 0xf1, 0x25, 0x00, 0x00, /* KEY_8 */
214         0x03, 0xfc, 0x0f, 0xf0, 0x26, 0x00, 0x00, /* KEY_9 */
215         0x03, 0xfc, 0x16, 0xe9, 0x28, 0x00, 0x00, /* KEY_OK (2) */
216         0x03, 0xfc, 0x41, 0xbe, 0x37, 0x00, 0x00, /* KEY_DOT */
217         0x03, 0xfc, 0x12, 0xed, 0x27, 0x00, 0x00, /* KEY_0 */
218         0x03, 0xfc, 0x11, 0xee, 0x2a, 0x00, 0x00, /* KEY_AGAIN */
219         0x03, 0xfc, 0x48, 0xb7, 0x2c, 0x00, 0x00, /* KEY_CAMERA */
220         0x03, 0xfc, 0x4a, 0xb5, 0x3c, 0x00, 0x00, /* KEY_NEW */
221         0x03, 0xfc, 0x47, 0xb8, 0x15, 0x01, 0x00, /* KEY_RECORD */
222         0x03, 0xfc, 0x45, 0xba, 0x0b, 0x01, 0x00, /* KEY_TIME */
223         0x03, 0xfc, 0x5e, 0xa1, 0x43, 0x00, 0x00, /* KEY_VOLUMEUP */
224         0x03, 0xfc, 0x5a, 0xa5, 0x42, 0x00, 0x00, /* KEY_VOLUMEDOWN */
225         0x03, 0xfc, 0x5b, 0xa4, 0x4b, 0x00, 0x00, /* KEY_CHANNELUP */
226         0x03, 0xfc, 0x5f, 0xa0, 0x4e, 0x00, 0x00, /* KEY_CHANNELDOWN */
227 };
228
229 /* TwinHan AzureWave AD-TU700(704J) */
230 static struct dvb_usb_rc_key ir_codes_af9015_table_twinhan[] = {
231         { 0x053f, KEY_POWER },
232         { 0x0019, KEY_FAVORITES },    /* Favorite List */
233         { 0x0004, KEY_TEXT },         /* Teletext */
234         { 0x000e, KEY_POWER },
235         { 0x000e, KEY_INFO },         /* Preview */
236         { 0x0008, KEY_EPG },          /* Info/EPG */
237         { 0x000f, KEY_LIST },         /* Record List */
238         { 0x001e, KEY_1 },
239         { 0x001f, KEY_2 },
240         { 0x0020, KEY_3 },
241         { 0x0021, KEY_4 },
242         { 0x0022, KEY_5 },
243         { 0x0023, KEY_6 },
244         { 0x0024, KEY_7 },
245         { 0x0025, KEY_8 },
246         { 0x0026, KEY_9 },
247         { 0x0027, KEY_0 },
248         { 0x0029, KEY_CANCEL },       /* Cancel */
249         { 0x004c, KEY_CLEAR },        /* Clear */
250         { 0x002a, KEY_BACK },         /* Back */
251         { 0x002b, KEY_TAB },          /* Tab */
252         { 0x0052, KEY_UP },           /* up arrow */
253         { 0x0051, KEY_DOWN },         /* down arrow */
254         { 0x004f, KEY_RIGHT },        /* right arrow */
255         { 0x0050, KEY_LEFT },         /* left arrow */
256         { 0x0028, KEY_ENTER },        /* Enter / ok */
257         { 0x0252, KEY_VOLUMEUP },
258         { 0x0251, KEY_VOLUMEDOWN },
259         { 0x004e, KEY_CHANNELDOWN },
260         { 0x004b, KEY_CHANNELUP },
261         { 0x004a, KEY_RECORD },
262         { 0x0111, KEY_PLAY },
263         { 0x0017, KEY_PAUSE },
264         { 0x000c, KEY_REWIND },       /* FR << */
265         { 0x0011, KEY_FASTFORWARD },  /* FF >> */
266         { 0x0115, KEY_PREVIOUS },     /* Replay */
267         { 0x010e, KEY_NEXT },         /* Skip */
268         { 0x0013, KEY_CAMERA },       /* Capture */
269         { 0x010f, KEY_LANGUAGE },     /* SAP */
270         { 0x0113, KEY_TV2 },          /* PIP */
271         { 0x001d, KEY_ZOOM },         /* Full Screen */
272         { 0x0117, KEY_SUBTITLE },     /* Subtitle / CC */
273         { 0x0010, KEY_MUTE },
274         { 0x0119, KEY_AUDIO },        /* L/R */ /* TODO better event */
275         { 0x0116, KEY_SLEEP },        /* Hibernate */
276         { 0x0116, KEY_SWITCHVIDEOMODE },
277                                           /* A/V */ /* TODO does not work */
278         { 0x0006, KEY_AGAIN },        /* Recall */
279         { 0x0116, KEY_KPPLUS },       /* Zoom+ */ /* TODO does not work */
280         { 0x0116, KEY_KPMINUS },      /* Zoom- */ /* TODO does not work */
281         { 0x0215, KEY_RED },
282         { 0x020a, KEY_GREEN },
283         { 0x021c, KEY_YELLOW },
284         { 0x0205, KEY_BLUE },
285 };
286
287 static u8 af9015_ir_table_twinhan[] = {
288         0x00, 0xff, 0x16, 0xe9, 0x3f, 0x05, 0x00,
289         0x00, 0xff, 0x07, 0xf8, 0x16, 0x01, 0x00,
290         0x00, 0xff, 0x14, 0xeb, 0x11, 0x01, 0x00,
291         0x00, 0xff, 0x1a, 0xe5, 0x4d, 0x00, 0x00,
292         0x00, 0xff, 0x4c, 0xb3, 0x17, 0x00, 0x00,
293         0x00, 0xff, 0x12, 0xed, 0x11, 0x00, 0x00,
294         0x00, 0xff, 0x40, 0xbf, 0x0c, 0x00, 0x00,
295         0x00, 0xff, 0x11, 0xee, 0x4a, 0x00, 0x00,
296         0x00, 0xff, 0x54, 0xab, 0x13, 0x00, 0x00,
297         0x00, 0xff, 0x41, 0xbe, 0x15, 0x01, 0x00,
298         0x00, 0xff, 0x42, 0xbd, 0x0e, 0x01, 0x00,
299         0x00, 0xff, 0x43, 0xbc, 0x17, 0x01, 0x00,
300         0x00, 0xff, 0x50, 0xaf, 0x0f, 0x01, 0x00,
301         0x00, 0xff, 0x4d, 0xb2, 0x1d, 0x00, 0x00,
302         0x00, 0xff, 0x47, 0xb8, 0x13, 0x01, 0x00,
303         0x00, 0xff, 0x05, 0xfa, 0x4b, 0x00, 0x00,
304         0x00, 0xff, 0x02, 0xfd, 0x4e, 0x00, 0x00,
305         0x00, 0xff, 0x0e, 0xf1, 0x06, 0x00, 0x00,
306         0x00, 0xff, 0x1e, 0xe1, 0x52, 0x02, 0x00,
307         0x00, 0xff, 0x0a, 0xf5, 0x51, 0x02, 0x00,
308         0x00, 0xff, 0x10, 0xef, 0x10, 0x00, 0x00,
309         0x00, 0xff, 0x49, 0xb6, 0x19, 0x01, 0x00,
310         0x00, 0xff, 0x15, 0xea, 0x27, 0x00, 0x00,
311         0x00, 0xff, 0x03, 0xfc, 0x1e, 0x00, 0x00,
312         0x00, 0xff, 0x01, 0xfe, 0x1f, 0x00, 0x00,
313         0x00, 0xff, 0x06, 0xf9, 0x20, 0x00, 0x00,
314         0x00, 0xff, 0x09, 0xf6, 0x21, 0x00, 0x00,
315         0x00, 0xff, 0x1d, 0xe2, 0x22, 0x00, 0x00,
316         0x00, 0xff, 0x1f, 0xe0, 0x23, 0x00, 0x00,
317         0x00, 0xff, 0x0d, 0xf2, 0x24, 0x00, 0x00,
318         0x00, 0xff, 0x19, 0xe6, 0x25, 0x00, 0x00,
319         0x00, 0xff, 0x1b, 0xe4, 0x26, 0x00, 0x00,
320         0x00, 0xff, 0x00, 0xff, 0x2b, 0x00, 0x00,
321         0x00, 0xff, 0x4a, 0xb5, 0x4c, 0x00, 0x00,
322         0x00, 0xff, 0x4b, 0xb4, 0x52, 0x00, 0x00,
323         0x00, 0xff, 0x51, 0xae, 0x51, 0x00, 0x00,
324         0x00, 0xff, 0x52, 0xad, 0x4f, 0x00, 0x00,
325         0x00, 0xff, 0x4e, 0xb1, 0x50, 0x00, 0x00,
326         0x00, 0xff, 0x0c, 0xf3, 0x29, 0x00, 0x00,
327         0x00, 0xff, 0x4f, 0xb0, 0x28, 0x00, 0x00,
328         0x00, 0xff, 0x13, 0xec, 0x2a, 0x00, 0x00,
329         0x00, 0xff, 0x17, 0xe8, 0x19, 0x00, 0x00,
330         0x00, 0xff, 0x04, 0xfb, 0x0f, 0x00, 0x00,
331         0x00, 0xff, 0x48, 0xb7, 0x0e, 0x00, 0x00,
332         0x00, 0xff, 0x0f, 0xf0, 0x04, 0x00, 0x00,
333         0x00, 0xff, 0x1c, 0xe3, 0x08, 0x00, 0x00,
334         0x00, 0xff, 0x18, 0xe7, 0x15, 0x02, 0x00,
335         0x00, 0xff, 0x53, 0xac, 0x0a, 0x02, 0x00,
336         0x00, 0xff, 0x5e, 0xa1, 0x1c, 0x02, 0x00,
337         0x00, 0xff, 0x5f, 0xa0, 0x05, 0x02, 0x00,
338 };
339
340 /* A-Link DTU(m) */
341 static struct dvb_usb_rc_key ir_codes_af9015_table_a_link[] = {
342         { 0x001e, KEY_1 },
343         { 0x001f, KEY_2 },
344         { 0x0020, KEY_3 },
345         { 0x0021, KEY_4 },
346         { 0x0022, KEY_5 },
347         { 0x0023, KEY_6 },
348         { 0x0024, KEY_7 },
349         { 0x0025, KEY_8 },
350         { 0x0026, KEY_9 },
351         { 0x0027, KEY_0 },
352         { 0x002e, KEY_CHANNELUP },
353         { 0x002d, KEY_CHANNELDOWN },
354         { 0x0428, KEY_ZOOM },
355         { 0x0041, KEY_MUTE },
356         { 0x0042, KEY_VOLUMEDOWN },
357         { 0x0043, KEY_VOLUMEUP },
358         { 0x0044, KEY_GOTO },         /* jump */
359         { 0x0545, KEY_POWER },
360 };
361
362 static u8 af9015_ir_table_a_link[] = {
363         0x08, 0xf7, 0x12, 0xed, 0x45, 0x05, 0x00, /* power */
364         0x08, 0xf7, 0x1a, 0xe5, 0x41, 0x00, 0x00, /* mute */
365         0x08, 0xf7, 0x01, 0xfe, 0x1e, 0x00, 0x00, /* 1 */
366         0x08, 0xf7, 0x1c, 0xe3, 0x21, 0x00, 0x00, /* 4 */
367         0x08, 0xf7, 0x03, 0xfc, 0x24, 0x00, 0x00, /* 7 */
368         0x08, 0xf7, 0x05, 0xfa, 0x28, 0x04, 0x00, /* zoom */
369         0x08, 0xf7, 0x00, 0xff, 0x43, 0x00, 0x00, /* volume up */
370         0x08, 0xf7, 0x16, 0xe9, 0x42, 0x00, 0x00, /* volume down */
371         0x08, 0xf7, 0x0f, 0xf0, 0x1f, 0x00, 0x00, /* 2 */
372         0x08, 0xf7, 0x0d, 0xf2, 0x22, 0x00, 0x00, /* 5 */
373         0x08, 0xf7, 0x1b, 0xe4, 0x25, 0x00, 0x00, /* 8 */
374         0x08, 0xf7, 0x06, 0xf9, 0x27, 0x00, 0x00, /* 0 */
375         0x08, 0xf7, 0x14, 0xeb, 0x2e, 0x00, 0x00, /* channel up */
376         0x08, 0xf7, 0x1d, 0xe2, 0x2d, 0x00, 0x00, /* channel down */
377         0x08, 0xf7, 0x02, 0xfd, 0x20, 0x00, 0x00, /* 3 */
378         0x08, 0xf7, 0x18, 0xe7, 0x23, 0x00, 0x00, /* 6 */
379         0x08, 0xf7, 0x04, 0xfb, 0x26, 0x00, 0x00, /* 9 */
380         0x08, 0xf7, 0x07, 0xf8, 0x44, 0x00, 0x00, /* jump */
381 };
382
383 /* MSI DIGIVOX mini II V3.0 */
384 static struct dvb_usb_rc_key ir_codes_af9015_table_msi[] = {
385         { 0x001e, KEY_1 },
386         { 0x001f, KEY_2 },
387         { 0x0020, KEY_3 },
388         { 0x0021, KEY_4 },
389         { 0x0022, KEY_5 },
390         { 0x0023, KEY_6 },
391         { 0x0024, KEY_7 },
392         { 0x0025, KEY_8 },
393         { 0x0026, KEY_9 },
394         { 0x0027, KEY_0 },
395         { 0x030f, KEY_CHANNELUP },
396         { 0x030e, KEY_CHANNELDOWN },
397         { 0x0042, KEY_VOLUMEDOWN },
398         { 0x0043, KEY_VOLUMEUP },
399         { 0x0545, KEY_POWER },
400         { 0x0052, KEY_UP },           /* up */
401         { 0x0051, KEY_DOWN },         /* down */
402         { 0x0028, KEY_ENTER },
403 };
404
405 static u8 af9015_ir_table_msi[] = {
406         0x03, 0xfc, 0x17, 0xe8, 0x45, 0x05, 0x00, /* power */
407         0x03, 0xfc, 0x0d, 0xf2, 0x51, 0x00, 0x00, /* down */
408         0x03, 0xfc, 0x03, 0xfc, 0x52, 0x00, 0x00, /* up */
409         0x03, 0xfc, 0x1a, 0xe5, 0x1e, 0x00, 0x00, /* 1 */
410         0x03, 0xfc, 0x02, 0xfd, 0x1f, 0x00, 0x00, /* 2 */
411         0x03, 0xfc, 0x04, 0xfb, 0x20, 0x00, 0x00, /* 3 */
412         0x03, 0xfc, 0x1c, 0xe3, 0x21, 0x00, 0x00, /* 4 */
413         0x03, 0xfc, 0x08, 0xf7, 0x22, 0x00, 0x00, /* 5 */
414         0x03, 0xfc, 0x1d, 0xe2, 0x23, 0x00, 0x00, /* 6 */
415         0x03, 0xfc, 0x11, 0xee, 0x24, 0x00, 0x00, /* 7 */
416         0x03, 0xfc, 0x0b, 0xf4, 0x25, 0x00, 0x00, /* 8 */
417         0x03, 0xfc, 0x10, 0xef, 0x26, 0x00, 0x00, /* 9 */
418         0x03, 0xfc, 0x09, 0xf6, 0x27, 0x00, 0x00, /* 0 */
419         0x03, 0xfc, 0x14, 0xeb, 0x43, 0x00, 0x00, /* volume up */
420         0x03, 0xfc, 0x1f, 0xe0, 0x42, 0x00, 0x00, /* volume down */
421         0x03, 0xfc, 0x15, 0xea, 0x0f, 0x03, 0x00, /* channel up */
422         0x03, 0xfc, 0x05, 0xfa, 0x0e, 0x03, 0x00, /* channel down */
423         0x03, 0xfc, 0x16, 0xe9, 0x28, 0x00, 0x00, /* enter */
424 };
425
426 /* MYGICTV U718 */
427 static struct dvb_usb_rc_key ir_codes_af9015_table_mygictv[] = {
428         { 0x003d, KEY_SWITCHVIDEOMODE },
429                                           /* TV / AV */
430         { 0x0545, KEY_POWER },
431         { 0x001e, KEY_1 },
432         { 0x001f, KEY_2 },
433         { 0x0020, KEY_3 },
434         { 0x0021, KEY_4 },
435         { 0x0022, KEY_5 },
436         { 0x0023, KEY_6 },
437         { 0x0024, KEY_7 },
438         { 0x0025, KEY_8 },
439         { 0x0026, KEY_9 },
440         { 0x0027, KEY_0 },
441         { 0x0041, KEY_MUTE },
442         { 0x002a, KEY_ESC },          /* Esc */
443         { 0x002e, KEY_CHANNELUP },
444         { 0x002d, KEY_CHANNELDOWN },
445         { 0x0042, KEY_VOLUMEDOWN },
446         { 0x0043, KEY_VOLUMEUP },
447         { 0x0052, KEY_UP },           /* up arrow */
448         { 0x0051, KEY_DOWN },         /* down arrow */
449         { 0x004f, KEY_RIGHT },        /* right arrow */
450         { 0x0050, KEY_LEFT },         /* left arrow */
451         { 0x0028, KEY_ENTER },        /* ok */
452         { 0x0115, KEY_RECORD },
453         { 0x0313, KEY_PLAY },
454         { 0x0113, KEY_PAUSE },
455         { 0x0116, KEY_STOP },
456         { 0x0307, KEY_REWIND },       /* FR << */
457         { 0x0309, KEY_FASTFORWARD },  /* FF >> */
458         { 0x003b, KEY_TIME },         /* TimeShift */
459         { 0x003e, KEY_CAMERA },       /* Snapshot */
460         { 0x0316, KEY_CYCLEWINDOWS }, /* yellow, min / max */
461         { 0x0000, KEY_ZOOM },         /* 'select' (?) */
462         { 0x0316, KEY_SHUFFLE },      /* Shuffle */
463         { 0x0345, KEY_POWER },
464 };
465
466 static u8 af9015_ir_table_mygictv[] = {
467         0x02, 0xbd, 0x0c, 0xf3, 0x3d, 0x00, 0x00, /* TV / AV */
468         0x02, 0xbd, 0x14, 0xeb, 0x45, 0x05, 0x00, /* power */
469         0x02, 0xbd, 0x00, 0xff, 0x1e, 0x00, 0x00, /* 1 */
470         0x02, 0xbd, 0x01, 0xfe, 0x1f, 0x00, 0x00, /* 2 */
471         0x02, 0xbd, 0x02, 0xfd, 0x20, 0x00, 0x00, /* 3 */
472         0x02, 0xbd, 0x03, 0xfc, 0x21, 0x00, 0x00, /* 4 */
473         0x02, 0xbd, 0x04, 0xfb, 0x22, 0x00, 0x00, /* 5 */
474         0x02, 0xbd, 0x05, 0xfa, 0x23, 0x00, 0x00, /* 6 */
475         0x02, 0xbd, 0x06, 0xf9, 0x24, 0x00, 0x00, /* 7 */
476         0x02, 0xbd, 0x07, 0xf8, 0x25, 0x00, 0x00, /* 8 */
477         0x02, 0xbd, 0x08, 0xf7, 0x26, 0x00, 0x00, /* 9 */
478         0x02, 0xbd, 0x09, 0xf6, 0x27, 0x00, 0x00, /* 0 */
479         0x02, 0xbd, 0x0a, 0xf5, 0x41, 0x00, 0x00, /* mute */
480         0x02, 0xbd, 0x1c, 0xe3, 0x2a, 0x00, 0x00, /* esc */
481         0x02, 0xbd, 0x1f, 0xe0, 0x43, 0x00, 0x00, /* volume up */
482         0x02, 0xbd, 0x12, 0xed, 0x52, 0x00, 0x00, /* up arrow */
483         0x02, 0xbd, 0x11, 0xee, 0x50, 0x00, 0x00, /* left arrow */
484         0x02, 0xbd, 0x15, 0xea, 0x28, 0x00, 0x00, /* ok */
485         0x02, 0xbd, 0x10, 0xef, 0x4f, 0x00, 0x00, /* right arrow */
486         0x02, 0xbd, 0x13, 0xec, 0x51, 0x00, 0x00, /* down arrow */
487         0x02, 0xbd, 0x0e, 0xf1, 0x42, 0x00, 0x00, /* volume down */
488         0x02, 0xbd, 0x19, 0xe6, 0x15, 0x01, 0x00, /* record */
489         0x02, 0xbd, 0x1e, 0xe1, 0x13, 0x03, 0x00, /* play */
490         0x02, 0xbd, 0x16, 0xe9, 0x16, 0x01, 0x00, /* stop */
491         0x02, 0xbd, 0x0b, 0xf4, 0x28, 0x04, 0x00, /* yellow, min / max */
492         0x02, 0xbd, 0x0f, 0xf0, 0x3b, 0x00, 0x00, /* time shift */
493         0x02, 0xbd, 0x18, 0xe7, 0x2e, 0x00, 0x00, /* channel up */
494         0x02, 0xbd, 0x1a, 0xe5, 0x2d, 0x00, 0x00, /* channel down */
495         0x02, 0xbd, 0x17, 0xe8, 0x3e, 0x00, 0x00, /* snapshot */
496         0x02, 0xbd, 0x40, 0xbf, 0x13, 0x01, 0x00, /* pause */
497         0x02, 0xbd, 0x41, 0xbe, 0x09, 0x03, 0x00, /* FF >> */
498         0x02, 0xbd, 0x42, 0xbd, 0x07, 0x03, 0x00, /* FR << */
499         0x02, 0xbd, 0x43, 0xbc, 0x00, 0x00, 0x00, /* 'select' (?) */
500         0x02, 0xbd, 0x44, 0xbb, 0x16, 0x03, 0x00, /* shuffle */
501         0x02, 0xbd, 0x45, 0xba, 0x45, 0x03, 0x00, /* power */
502 };
503
504 /* KWorld PlusTV Dual DVB-T Stick (DVB-T 399U) */
505 static u8 af9015_ir_table_kworld[] = {
506         0x86, 0x6b, 0x0c, 0xf3, 0x2e, 0x07, 0x00,
507         0x86, 0x6b, 0x16, 0xe9, 0x2d, 0x07, 0x00,
508         0x86, 0x6b, 0x1d, 0xe2, 0x37, 0x07, 0x00,
509         0x86, 0x6b, 0x00, 0xff, 0x1e, 0x07, 0x00,
510         0x86, 0x6b, 0x01, 0xfe, 0x1f, 0x07, 0x00,
511         0x86, 0x6b, 0x02, 0xfd, 0x20, 0x07, 0x00,
512         0x86, 0x6b, 0x03, 0xfc, 0x21, 0x07, 0x00,
513         0x86, 0x6b, 0x04, 0xfb, 0x22, 0x07, 0x00,
514         0x86, 0x6b, 0x05, 0xfa, 0x23, 0x07, 0x00,
515         0x86, 0x6b, 0x06, 0xf9, 0x24, 0x07, 0x00,
516         0x86, 0x6b, 0x07, 0xf8, 0x25, 0x07, 0x00,
517         0x86, 0x6b, 0x08, 0xf7, 0x26, 0x07, 0x00,
518         0x86, 0x6b, 0x09, 0xf6, 0x4d, 0x07, 0x00,
519         0x86, 0x6b, 0x0a, 0xf5, 0x4e, 0x07, 0x00,
520         0x86, 0x6b, 0x14, 0xeb, 0x4f, 0x07, 0x00,
521         0x86, 0x6b, 0x1e, 0xe1, 0x50, 0x07, 0x00,
522         0x86, 0x6b, 0x17, 0xe8, 0x52, 0x07, 0x00,
523         0x86, 0x6b, 0x1f, 0xe0, 0x51, 0x07, 0x00,
524         0x86, 0x6b, 0x0e, 0xf1, 0x0b, 0x07, 0x00,
525         0x86, 0x6b, 0x20, 0xdf, 0x0c, 0x07, 0x00,
526         0x86, 0x6b, 0x42, 0xbd, 0x0d, 0x07, 0x00,
527         0x86, 0x6b, 0x0b, 0xf4, 0x0e, 0x07, 0x00,
528         0x86, 0x6b, 0x43, 0xbc, 0x0f, 0x07, 0x00,
529         0x86, 0x6b, 0x10, 0xef, 0x10, 0x07, 0x00,
530         0x86, 0x6b, 0x21, 0xde, 0x11, 0x07, 0x00,
531         0x86, 0x6b, 0x13, 0xec, 0x12, 0x07, 0x00,
532         0x86, 0x6b, 0x11, 0xee, 0x13, 0x07, 0x00,
533         0x86, 0x6b, 0x12, 0xed, 0x14, 0x07, 0x00,
534         0x86, 0x6b, 0x19, 0xe6, 0x15, 0x07, 0x00,
535         0x86, 0x6b, 0x1a, 0xe5, 0x16, 0x07, 0x00,
536         0x86, 0x6b, 0x1b, 0xe4, 0x17, 0x07, 0x00,
537         0x86, 0x6b, 0x4b, 0xb4, 0x18, 0x07, 0x00,
538         0x86, 0x6b, 0x40, 0xbf, 0x19, 0x07, 0x00,
539         0x86, 0x6b, 0x44, 0xbb, 0x1a, 0x07, 0x00,
540         0x86, 0x6b, 0x41, 0xbe, 0x1b, 0x07, 0x00,
541         0x86, 0x6b, 0x22, 0xdd, 0x1c, 0x07, 0x00,
542         0x86, 0x6b, 0x15, 0xea, 0x1d, 0x07, 0x00,
543         0x86, 0x6b, 0x0f, 0xf0, 0x3f, 0x07, 0x00,
544         0x86, 0x6b, 0x1c, 0xe3, 0x40, 0x07, 0x00,
545         0x86, 0x6b, 0x4a, 0xb5, 0x41, 0x07, 0x00,
546         0x86, 0x6b, 0x48, 0xb7, 0x42, 0x07, 0x00,
547         0x86, 0x6b, 0x49, 0xb6, 0x43, 0x07, 0x00,
548         0x86, 0x6b, 0x18, 0xe7, 0x44, 0x07, 0x00,
549         0x86, 0x6b, 0x23, 0xdc, 0x45, 0x07, 0x00,
550 };
551
552 /* AverMedia Volar X */
553 static struct dvb_usb_rc_key ir_codes_af9015_table_avermedia[] = {
554         { 0x053d, KEY_PROG1 },       /* SOURCE */
555         { 0x0512, KEY_POWER },       /* POWER */
556         { 0x051e, KEY_1 },           /* 1 */
557         { 0x051f, KEY_2 },           /* 2 */
558         { 0x0520, KEY_3 },           /* 3 */
559         { 0x0521, KEY_4 },           /* 4 */
560         { 0x0522, KEY_5 },           /* 5 */
561         { 0x0523, KEY_6 },           /* 6 */
562         { 0x0524, KEY_7 },           /* 7 */
563         { 0x0525, KEY_8 },           /* 8 */
564         { 0x0526, KEY_9 },           /* 9 */
565         { 0x053f, KEY_LEFT },        /* L / DISPLAY */
566         { 0x0527, KEY_0 },           /* 0 */
567         { 0x050f, KEY_RIGHT },       /* R / CH RTN */
568         { 0x0518, KEY_PROG2 },       /* SNAP SHOT */
569         { 0x051c, KEY_PROG3 },       /* 16-CH PREV */
570         { 0x052d, KEY_VOLUMEDOWN },  /* VOL DOWN */
571         { 0x053e, KEY_ZOOM },        /* FULL SCREEN */
572         { 0x052e, KEY_VOLUMEUP },    /* VOL UP */
573         { 0x0510, KEY_MUTE },        /* MUTE */
574         { 0x0504, KEY_AUDIO },       /* AUDIO */
575         { 0x0515, KEY_RECORD },      /* RECORD */
576         { 0x0511, KEY_PLAY },        /* PLAY */
577         { 0x0516, KEY_STOP },        /* STOP */
578         { 0x050c, KEY_PLAYPAUSE },   /* TIMESHIFT / PAUSE */
579         { 0x0505, KEY_BACK },        /* << / RED */
580         { 0x0509, KEY_FORWARD },     /* >> / YELLOW */
581         { 0x0517, KEY_TEXT },        /* TELETEXT */
582         { 0x050a, KEY_EPG },         /* EPG */
583         { 0x0513, KEY_MENU },        /* MENU */
584
585         { 0x050e, KEY_CHANNELUP },   /* CH UP */
586         { 0x050d, KEY_CHANNELDOWN }, /* CH DOWN */
587         { 0x0519, KEY_FIRST },       /* |<< / GREEN */
588         { 0x0508, KEY_LAST },        /* >>| / BLUE */
589 };
590
591 static u8 af9015_ir_table_avermedia[] = {
592         0x02, 0xfd, 0x00, 0xff, 0x12, 0x05, 0x00,
593         0x02, 0xfd, 0x01, 0xfe, 0x3d, 0x05, 0x00,
594         0x02, 0xfd, 0x03, 0xfc, 0x17, 0x05, 0x00,
595         0x02, 0xfd, 0x04, 0xfb, 0x0a, 0x05, 0x00,
596         0x02, 0xfd, 0x05, 0xfa, 0x1e, 0x05, 0x00,
597         0x02, 0xfd, 0x06, 0xf9, 0x1f, 0x05, 0x00,
598         0x02, 0xfd, 0x07, 0xf8, 0x20, 0x05, 0x00,
599         0x02, 0xfd, 0x09, 0xf6, 0x21, 0x05, 0x00,
600         0x02, 0xfd, 0x0a, 0xf5, 0x22, 0x05, 0x00,
601         0x02, 0xfd, 0x0b, 0xf4, 0x23, 0x05, 0x00,
602         0x02, 0xfd, 0x0d, 0xf2, 0x24, 0x05, 0x00,
603         0x02, 0xfd, 0x0e, 0xf1, 0x25, 0x05, 0x00,
604         0x02, 0xfd, 0x0f, 0xf0, 0x26, 0x05, 0x00,
605         0x02, 0xfd, 0x11, 0xee, 0x27, 0x05, 0x00,
606         0x02, 0xfd, 0x08, 0xf7, 0x04, 0x05, 0x00,
607         0x02, 0xfd, 0x0c, 0xf3, 0x3e, 0x05, 0x00,
608         0x02, 0xfd, 0x10, 0xef, 0x1c, 0x05, 0x00,
609         0x02, 0xfd, 0x12, 0xed, 0x3f, 0x05, 0x00,
610         0x02, 0xfd, 0x13, 0xec, 0x0f, 0x05, 0x00,
611         0x02, 0xfd, 0x14, 0xeb, 0x10, 0x05, 0x00,
612         0x02, 0xfd, 0x15, 0xea, 0x13, 0x05, 0x00,
613         0x02, 0xfd, 0x17, 0xe8, 0x18, 0x05, 0x00,
614         0x02, 0xfd, 0x18, 0xe7, 0x11, 0x05, 0x00,
615         0x02, 0xfd, 0x19, 0xe6, 0x15, 0x05, 0x00,
616         0x02, 0xfd, 0x1a, 0xe5, 0x0c, 0x05, 0x00,
617         0x02, 0xfd, 0x1b, 0xe4, 0x16, 0x05, 0x00,
618         0x02, 0xfd, 0x1c, 0xe3, 0x09, 0x05, 0x00,
619         0x02, 0xfd, 0x1d, 0xe2, 0x05, 0x05, 0x00,
620         0x02, 0xfd, 0x1e, 0xe1, 0x2d, 0x05, 0x00,
621         0x02, 0xfd, 0x1f, 0xe0, 0x2e, 0x05, 0x00,
622         0x03, 0xfc, 0x00, 0xff, 0x08, 0x05, 0x00,
623         0x03, 0xfc, 0x01, 0xfe, 0x19, 0x05, 0x00,
624         0x03, 0xfc, 0x02, 0xfd, 0x0d, 0x05, 0x00,
625         0x03, 0xfc, 0x03, 0xfc, 0x0e, 0x05, 0x00,
626 };
627
628 static u8 af9015_ir_table_avermedia_ks[] = {
629         0x05, 0xfa, 0x01, 0xfe, 0x12, 0x05, 0x00,
630         0x05, 0xfa, 0x02, 0xfd, 0x0e, 0x05, 0x00,
631         0x05, 0xfa, 0x03, 0xfc, 0x0d, 0x05, 0x00,
632         0x05, 0xfa, 0x04, 0xfb, 0x2e, 0x05, 0x00,
633         0x05, 0xfa, 0x05, 0xfa, 0x2d, 0x05, 0x00,
634         0x05, 0xfa, 0x06, 0xf9, 0x10, 0x05, 0x00,
635         0x05, 0xfa, 0x07, 0xf8, 0x0f, 0x05, 0x00,
636         0x05, 0xfa, 0x08, 0xf7, 0x3d, 0x05, 0x00,
637         0x05, 0xfa, 0x09, 0xf6, 0x1e, 0x05, 0x00,
638         0x05, 0xfa, 0x0a, 0xf5, 0x1f, 0x05, 0x00,
639         0x05, 0xfa, 0x0b, 0xf4, 0x20, 0x05, 0x00,
640         0x05, 0xfa, 0x0c, 0xf3, 0x21, 0x05, 0x00,
641         0x05, 0xfa, 0x0d, 0xf2, 0x22, 0x05, 0x00,
642         0x05, 0xfa, 0x0e, 0xf1, 0x23, 0x05, 0x00,
643         0x05, 0xfa, 0x0f, 0xf0, 0x24, 0x05, 0x00,
644         0x05, 0xfa, 0x10, 0xef, 0x25, 0x05, 0x00,
645         0x05, 0xfa, 0x11, 0xee, 0x26, 0x05, 0x00,
646         0x05, 0xfa, 0x12, 0xed, 0x27, 0x05, 0x00,
647         0x05, 0xfa, 0x13, 0xec, 0x04, 0x05, 0x00,
648         0x05, 0xfa, 0x15, 0xea, 0x0a, 0x05, 0x00,
649         0x05, 0xfa, 0x16, 0xe9, 0x11, 0x05, 0x00,
650         0x05, 0xfa, 0x17, 0xe8, 0x15, 0x05, 0x00,
651         0x05, 0xfa, 0x18, 0xe7, 0x16, 0x05, 0x00,
652         0x05, 0xfa, 0x1c, 0xe3, 0x05, 0x05, 0x00,
653         0x05, 0xfa, 0x1d, 0xe2, 0x09, 0x05, 0x00,
654         0x05, 0xfa, 0x4d, 0xb2, 0x3f, 0x05, 0x00,
655         0x05, 0xfa, 0x56, 0xa9, 0x3e, 0x05, 0x00
656 };
657
658 /* Digittrade DVB-T USB Stick */
659 static struct dvb_usb_rc_key ir_codes_af9015_table_digittrade[] = {
660         { 0x010f, KEY_LAST },   /* RETURN */
661         { 0x0517, KEY_TEXT },   /* TELETEXT */
662         { 0x0108, KEY_EPG },    /* EPG */
663         { 0x0513, KEY_POWER },  /* POWER */
664         { 0x0109, KEY_ZOOM },   /* FULLSCREEN */
665         { 0x0040, KEY_AUDIO },  /* DUAL SOUND */
666         { 0x002c, KEY_PRINT },  /* SNAPSHOT */
667         { 0x0516, KEY_SUBTITLE },       /* SUBTITLE */
668         { 0x0052, KEY_CHANNELUP },      /* CH Up */
669         { 0x0051, KEY_CHANNELDOWN },/* Ch Dn */
670         { 0x0057, KEY_VOLUMEUP },       /* Vol Up */
671         { 0x0056, KEY_VOLUMEDOWN },     /* Vol Dn */
672         { 0x0110, KEY_MUTE },   /* MUTE */
673         { 0x0027, KEY_0 },
674         { 0x001e, KEY_1 },
675         { 0x001f, KEY_2 },
676         { 0x0020, KEY_3 },
677         { 0x0021, KEY_4 },
678         { 0x0022, KEY_5 },
679         { 0x0023, KEY_6 },
680         { 0x0024, KEY_7 },
681         { 0x0025, KEY_8 },
682         { 0x0026, KEY_9 },
683         { 0x0117, KEY_PLAYPAUSE },      /* TIMESHIFT */
684         { 0x0115, KEY_RECORD }, /* RECORD */
685         { 0x0313, KEY_PLAY },   /* PLAY */
686         { 0x0116, KEY_STOP },   /* STOP */
687         { 0x0113, KEY_PAUSE },  /* PAUSE */
688 };
689
690 static u8 af9015_ir_table_digittrade[] = {
691         0x00, 0xff, 0x06, 0xf9, 0x13, 0x05, 0x00,
692         0x00, 0xff, 0x4d, 0xb2, 0x17, 0x01, 0x00,
693         0x00, 0xff, 0x1f, 0xe0, 0x2c, 0x00, 0x00,
694         0x00, 0xff, 0x0a, 0xf5, 0x15, 0x01, 0x00,
695         0x00, 0xff, 0x0e, 0xf1, 0x16, 0x01, 0x00,
696         0x00, 0xff, 0x09, 0xf6, 0x09, 0x01, 0x00,
697         0x00, 0xff, 0x01, 0xfe, 0x08, 0x01, 0x00,
698         0x00, 0xff, 0x05, 0xfa, 0x10, 0x01, 0x00,
699         0x00, 0xff, 0x02, 0xfd, 0x56, 0x00, 0x00,
700         0x00, 0xff, 0x40, 0xbf, 0x57, 0x00, 0x00,
701         0x00, 0xff, 0x19, 0xe6, 0x52, 0x00, 0x00,
702         0x00, 0xff, 0x17, 0xe8, 0x51, 0x00, 0x00,
703         0x00, 0xff, 0x10, 0xef, 0x0f, 0x01, 0x00,
704         0x00, 0xff, 0x54, 0xab, 0x27, 0x00, 0x00,
705         0x00, 0xff, 0x1b, 0xe4, 0x1e, 0x00, 0x00,
706         0x00, 0xff, 0x11, 0xee, 0x1f, 0x00, 0x00,
707         0x00, 0xff, 0x15, 0xea, 0x20, 0x00, 0x00,
708         0x00, 0xff, 0x12, 0xed, 0x21, 0x00, 0x00,
709         0x00, 0xff, 0x16, 0xe9, 0x22, 0x00, 0x00,
710         0x00, 0xff, 0x4c, 0xb3, 0x23, 0x00, 0x00,
711         0x00, 0xff, 0x48, 0xb7, 0x24, 0x00, 0x00,
712         0x00, 0xff, 0x04, 0xfb, 0x25, 0x00, 0x00,
713         0x00, 0xff, 0x00, 0xff, 0x26, 0x00, 0x00,
714         0x00, 0xff, 0x1e, 0xe1, 0x13, 0x03, 0x00,
715         0x00, 0xff, 0x1a, 0xe5, 0x13, 0x01, 0x00,
716         0x00, 0xff, 0x03, 0xfc, 0x17, 0x05, 0x00,
717         0x00, 0xff, 0x0d, 0xf2, 0x16, 0x05, 0x00,
718         0x00, 0xff, 0x1d, 0xe2, 0x40, 0x00, 0x00,
719 };
720
721 /* TREKSTOR DVB-T USB Stick */
722 static struct dvb_usb_rc_key ir_codes_af9015_table_trekstor[] = {
723         { 0x0704, KEY_AGAIN },          /* Home */
724         { 0x0705, KEY_MUTE },           /* Mute */
725         { 0x0706, KEY_UP },                     /* Up */
726         { 0x0707, KEY_DOWN },           /* Down */
727         { 0x0709, KEY_RIGHT },          /* Right */
728         { 0x070a, KEY_ENTER },          /* OK */
729         { 0x070b, KEY_FASTFORWARD },    /* Fast forward */
730         { 0x070c, KEY_REWIND },         /* Rewind */
731         { 0x070d, KEY_PLAY },           /* Play/Pause */
732         { 0x070e, KEY_VOLUMEUP },               /* Volume + */
733         { 0x070f, KEY_VOLUMEDOWN },             /* Volume - */
734         { 0x0710, KEY_RECORD },         /* Record */
735         { 0x0711, KEY_STOP },           /* Stop */
736         { 0x0712, KEY_ZOOM },           /* TV */
737         { 0x0713, KEY_EPG },            /* Info/EPG */
738         { 0x0714, KEY_CHANNELDOWN },    /* Channel - */
739         { 0x0715, KEY_CHANNELUP },              /* Channel + */
740         { 0x071e, KEY_1 },
741         { 0x071f, KEY_2 },
742         { 0x0720, KEY_3 },
743         { 0x0721, KEY_4 },
744         { 0x0722, KEY_5 },
745         { 0x0723, KEY_6 },
746         { 0x0724, KEY_7 },
747         { 0x0725, KEY_8 },
748         { 0x0726, KEY_9 },
749         { 0x0708, KEY_LEFT },           /* LEFT */
750         { 0x0727, KEY_0 },
751 };
752
753 static u8 af9015_ir_table_trekstor[] = {
754         0x00, 0xff, 0x86, 0x79, 0x04, 0x07, 0x00,
755         0x00, 0xff, 0x85, 0x7a, 0x05, 0x07, 0x00,
756         0x00, 0xff, 0x87, 0x78, 0x06, 0x07, 0x00,
757         0x00, 0xff, 0x8c, 0x73, 0x07, 0x07, 0x00,
758         0x00, 0xff, 0x89, 0x76, 0x09, 0x07, 0x00,
759         0x00, 0xff, 0x88, 0x77, 0x0a, 0x07, 0x00,
760         0x00, 0xff, 0x8a, 0x75, 0x0b, 0x07, 0x00,
761         0x00, 0xff, 0x9e, 0x61, 0x0c, 0x07, 0x00,
762         0x00, 0xff, 0x8d, 0x72, 0x0d, 0x07, 0x00,
763         0x00, 0xff, 0x8b, 0x74, 0x0e, 0x07, 0x00,
764         0x00, 0xff, 0x9b, 0x64, 0x0f, 0x07, 0x00,
765         0x00, 0xff, 0x9d, 0x62, 0x10, 0x07, 0x00,
766         0x00, 0xff, 0x8e, 0x71, 0x11, 0x07, 0x00,
767         0x00, 0xff, 0x9c, 0x63, 0x12, 0x07, 0x00,
768         0x00, 0xff, 0x8f, 0x70, 0x13, 0x07, 0x00,
769         0x00, 0xff, 0x93, 0x6c, 0x14, 0x07, 0x00,
770         0x00, 0xff, 0x97, 0x68, 0x15, 0x07, 0x00,
771         0x00, 0xff, 0x92, 0x6d, 0x1e, 0x07, 0x00,
772         0x00, 0xff, 0x96, 0x69, 0x1f, 0x07, 0x00,
773         0x00, 0xff, 0x9a, 0x65, 0x20, 0x07, 0x00,
774         0x00, 0xff, 0x91, 0x6e, 0x21, 0x07, 0x00,
775         0x00, 0xff, 0x95, 0x6a, 0x22, 0x07, 0x00,
776         0x00, 0xff, 0x99, 0x66, 0x23, 0x07, 0x00,
777         0x00, 0xff, 0x90, 0x6f, 0x24, 0x07, 0x00,
778         0x00, 0xff, 0x94, 0x6b, 0x25, 0x07, 0x00,
779         0x00, 0xff, 0x98, 0x67, 0x26, 0x07, 0x00,
780         0x00, 0xff, 0x9f, 0x60, 0x08, 0x07, 0x00,
781         0x00, 0xff, 0x84, 0x7b, 0x27, 0x07, 0x00,
782 };
783
784 /* MSI DIGIVOX mini III */
785 static struct dvb_usb_rc_key ir_codes_af9015_table_msi_digivox_iii[] = {
786         { 0x0713, KEY_POWER },       /* [red power button] */
787         { 0x073b, KEY_VIDEO },       /* Source */
788         { 0x073e, KEY_ZOOM },        /* Zoom */
789         { 0x070b, KEY_POWER2 },      /* ShutDown */
790         { 0x071e, KEY_1 },
791         { 0x071f, KEY_2 },
792         { 0x0720, KEY_3 },
793         { 0x0721, KEY_4 },
794         { 0x0722, KEY_5 },
795         { 0x0723, KEY_6 },
796         { 0x0724, KEY_7 },
797         { 0x0725, KEY_8 },
798         { 0x0726, KEY_9 },
799         { 0x0727, KEY_0 },
800         { 0x0752, KEY_CHANNELUP },   /* CH+ */
801         { 0x0751, KEY_CHANNELDOWN }, /* CH- */
802         { 0x0750, KEY_VOLUMEUP },    /* Vol+ */
803         { 0x074f, KEY_VOLUMEDOWN },  /* Vol- */
804         { 0x0705, KEY_ESC },         /* [back up arrow] */
805         { 0x0708, KEY_OK },          /* [enter arrow] */
806         { 0x073f, KEY_RECORD },      /* Rec */
807         { 0x0716, KEY_STOP },        /* Stop */
808         { 0x072a, KEY_PLAY },        /* Play */
809         { 0x073c, KEY_MUTE },        /* Mute */
810         { 0x0718, KEY_UP },
811         { 0x0707, KEY_DOWN },
812         { 0x070f, KEY_LEFT },
813         { 0x0715, KEY_RIGHT },
814         { 0x0736, KEY_RED },
815         { 0x0737, KEY_GREEN },
816         { 0x072d, KEY_YELLOW },
817         { 0x072e, KEY_BLUE },
818 };
819
820 static u8 af9015_ir_table_msi_digivox_iii[] = {
821         0x61, 0xd6, 0x43, 0xbc, 0x13, 0x07, 0x00, /* KEY_POWER */
822         0x61, 0xd6, 0x01, 0xfe, 0x3b, 0x07, 0x00, /* KEY_VIDEO */
823         0x61, 0xd6, 0x0b, 0xf4, 0x3e, 0x07, 0x00, /* KEY_ZOOM */
824         0x61, 0xd6, 0x03, 0xfc, 0x0b, 0x07, 0x00, /* KEY_POWER2 */
825         0x61, 0xd6, 0x04, 0xfb, 0x1e, 0x07, 0x00, /* KEY_1 */
826         0x61, 0xd6, 0x08, 0xf7, 0x1f, 0x07, 0x00, /* KEY_2 */
827         0x61, 0xd6, 0x02, 0xfd, 0x20, 0x07, 0x00, /* KEY_3 */
828         0x61, 0xd6, 0x0f, 0xf0, 0x21, 0x07, 0x00, /* KEY_4 */
829         0x61, 0xd6, 0x05, 0xfa, 0x22, 0x07, 0x00, /* KEY_5 */
830         0x61, 0xd6, 0x06, 0xf9, 0x23, 0x07, 0x00, /* KEY_6 */
831         0x61, 0xd6, 0x0c, 0xf3, 0x24, 0x07, 0x00, /* KEY_7 */
832         0x61, 0xd6, 0x0d, 0xf2, 0x25, 0x07, 0x00, /* KEY_8 */
833         0x61, 0xd6, 0x0a, 0xf5, 0x26, 0x07, 0x00, /* KEY_9 */
834         0x61, 0xd6, 0x11, 0xee, 0x27, 0x07, 0x00, /* KEY_0 */
835         0x61, 0xd6, 0x09, 0xf6, 0x52, 0x07, 0x00, /* KEY_CHANNELUP */
836         0x61, 0xd6, 0x07, 0xf8, 0x51, 0x07, 0x00, /* KEY_CHANNELDOWN */
837         0x61, 0xd6, 0x0e, 0xf1, 0x50, 0x07, 0x00, /* KEY_VOLUMEUP */
838         0x61, 0xd6, 0x13, 0xec, 0x4f, 0x07, 0x00, /* KEY_VOLUMEDOWN */
839         0x61, 0xd6, 0x10, 0xef, 0x05, 0x07, 0x00, /* KEY_ESC */
840         0x61, 0xd6, 0x12, 0xed, 0x08, 0x07, 0x00, /* KEY_OK */
841         0x61, 0xd6, 0x14, 0xeb, 0x3f, 0x07, 0x00, /* KEY_RECORD */
842         0x61, 0xd6, 0x15, 0xea, 0x16, 0x07, 0x00, /* KEY_STOP */
843         0x61, 0xd6, 0x16, 0xe9, 0x2a, 0x07, 0x00, /* KEY_PLAY */
844         0x61, 0xd6, 0x17, 0xe8, 0x3c, 0x07, 0x00, /* KEY_MUTE */
845         0x61, 0xd6, 0x18, 0xe7, 0x18, 0x07, 0x00, /* KEY_UP */
846         0x61, 0xd6, 0x19, 0xe6, 0x07, 0x07, 0x00, /* KEY_DOWN */
847         0x61, 0xd6, 0x1a, 0xe5, 0x0f, 0x07, 0x00, /* KEY_LEFT */
848         0x61, 0xd6, 0x1b, 0xe4, 0x15, 0x07, 0x00, /* KEY_RIGHT */
849         0x61, 0xd6, 0x1c, 0xe3, 0x36, 0x07, 0x00, /* KEY_RED */
850         0x61, 0xd6, 0x1d, 0xe2, 0x37, 0x07, 0x00, /* KEY_GREEN */
851         0x61, 0xd6, 0x1e, 0xe1, 0x2d, 0x07, 0x00, /* KEY_YELLOW */
852         0x61, 0xd6, 0x1f, 0xe0, 0x2e, 0x07, 0x00, /* KEY_BLUE */
853 };
854
855 #endif