Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  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
750 
  This page was automatically generated by the LXR engine.