V4L/DVB: ir-core: be less pedantic with RC protocol name
[pandora-kernel.git] / drivers / media / IR / ir-keymaps.c
1 /*
2     Keytables for supported remote controls, used on drivers/media
3     devices.
4
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, write to the Free Software
17     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19
20 /*
21  * NOTICE FOR DEVELOPERS:
22  *   The IR mappings should be as close as possible to what's
23  *   specified at:
24  *      http://linuxtv.org/wiki/index.php/Remote_Controllers
25  */
26 #include <linux/module.h>
27
28 #include <linux/input.h>
29 #include <media/ir-common.h>
30
31
32 /*
33  * The usage of tables with just the command part is deprecated.
34  * All new IR keytables should contain address+command and need
35  * to define the proper IR_TYPE (IR_TYPE_RC5/IR_TYPE_NEC).
36  * The deprecated tables should use IR_TYPE_UNKNOWN
37  */
38 #define IR_TABLE(irname, type, tabname)                         \
39 struct ir_scancode_table tabname ## _table = {                  \
40         .scan = tabname,                                        \
41         .size = ARRAY_SIZE(tabname),                            \
42         .ir_type = type,                                        \
43         .name = #irname,                                        \
44 };                                                              \
45 EXPORT_SYMBOL_GPL(tabname ## _table)
46
47
48 /* empty keytable, can be used as placeholder for not-yet created keytables */
49 static struct ir_scancode ir_codes_empty[] = {
50         { 0x2a, KEY_COFFEE },
51 };
52 IR_TABLE(empty, IR_TYPE_UNKNOWN, ir_codes_empty);
53
54 /* Michal Majchrowicz <mmajchrowicz@gmail.com> */
55 static struct ir_scancode ir_codes_proteus_2309[] = {
56         /* numeric */
57         { 0x00, KEY_0 },
58         { 0x01, KEY_1 },
59         { 0x02, KEY_2 },
60         { 0x03, KEY_3 },
61         { 0x04, KEY_4 },
62         { 0x05, KEY_5 },
63         { 0x06, KEY_6 },
64         { 0x07, KEY_7 },
65         { 0x08, KEY_8 },
66         { 0x09, KEY_9 },
67
68         { 0x5c, KEY_POWER },            /* power       */
69         { 0x20, KEY_ZOOM },             /* full screen */
70         { 0x0f, KEY_BACKSPACE },        /* recall      */
71         { 0x1b, KEY_ENTER },            /* mute        */
72         { 0x41, KEY_RECORD },           /* record      */
73         { 0x43, KEY_STOP },             /* stop        */
74         { 0x16, KEY_S },
75         { 0x1a, KEY_POWER2 },           /* off         */
76         { 0x2e, KEY_RED },
77         { 0x1f, KEY_CHANNELDOWN },      /* channel -   */
78         { 0x1c, KEY_CHANNELUP },        /* channel +   */
79         { 0x10, KEY_VOLUMEDOWN },       /* volume -    */
80         { 0x1e, KEY_VOLUMEUP },         /* volume +    */
81         { 0x14, KEY_F1 },
82 };
83 IR_TABLE(proteus_2309, IR_TYPE_UNKNOWN, ir_codes_proteus_2309);
84
85 /* Matt Jesson <dvb@jesson.eclipse.co.uk */
86 static struct ir_scancode ir_codes_avermedia_dvbt[] = {
87         { 0x28, KEY_0 },                /* '0' / 'enter' */
88         { 0x22, KEY_1 },                /* '1' */
89         { 0x12, KEY_2 },                /* '2' / 'up arrow' */
90         { 0x32, KEY_3 },                /* '3' */
91         { 0x24, KEY_4 },                /* '4' / 'left arrow' */
92         { 0x14, KEY_5 },                /* '5' */
93         { 0x34, KEY_6 },                /* '6' / 'right arrow' */
94         { 0x26, KEY_7 },                /* '7' */
95         { 0x16, KEY_8 },                /* '8' / 'down arrow' */
96         { 0x36, KEY_9 },                /* '9' */
97
98         { 0x20, KEY_LIST },             /* 'source' */
99         { 0x10, KEY_TEXT },             /* 'teletext' */
100         { 0x00, KEY_POWER },            /* 'power' */
101         { 0x04, KEY_AUDIO },            /* 'audio' */
102         { 0x06, KEY_ZOOM },             /* 'full screen' */
103         { 0x18, KEY_VIDEO },            /* 'display' */
104         { 0x38, KEY_SEARCH },           /* 'loop' */
105         { 0x08, KEY_INFO },             /* 'preview' */
106         { 0x2a, KEY_REWIND },           /* 'backward <<' */
107         { 0x1a, KEY_FASTFORWARD },      /* 'forward >>' */
108         { 0x3a, KEY_RECORD },           /* 'capture' */
109         { 0x0a, KEY_MUTE },             /* 'mute' */
110         { 0x2c, KEY_RECORD },           /* 'record' */
111         { 0x1c, KEY_PAUSE },            /* 'pause' */
112         { 0x3c, KEY_STOP },             /* 'stop' */
113         { 0x0c, KEY_PLAY },             /* 'play' */
114         { 0x2e, KEY_RED },              /* 'red' */
115         { 0x01, KEY_BLUE },             /* 'blue' / 'cancel' */
116         { 0x0e, KEY_YELLOW },           /* 'yellow' / 'ok' */
117         { 0x21, KEY_GREEN },            /* 'green' */
118         { 0x11, KEY_CHANNELDOWN },      /* 'channel -' */
119         { 0x31, KEY_CHANNELUP },        /* 'channel +' */
120         { 0x1e, KEY_VOLUMEDOWN },       /* 'volume -' */
121         { 0x3e, KEY_VOLUMEUP },         /* 'volume +' */
122 };
123 IR_TABLE(avermedia_dvbt, IR_TYPE_UNKNOWN, ir_codes_avermedia_dvbt);
124
125 /* Mauro Carvalho Chehab <mchehab@infradead.org> */
126 static struct ir_scancode ir_codes_avermedia_m135a[] = {
127         { 0x00, KEY_POWER2 },
128         { 0x2e, KEY_DOT },              /* '.' */
129         { 0x01, KEY_MODE },             /* TV/FM */
130
131         { 0x05, KEY_1 },
132         { 0x06, KEY_2 },
133         { 0x07, KEY_3 },
134         { 0x09, KEY_4 },
135         { 0x0a, KEY_5 },
136         { 0x0b, KEY_6 },
137         { 0x0d, KEY_7 },
138         { 0x0e, KEY_8 },
139         { 0x0f, KEY_9 },
140         { 0x11, KEY_0 },
141
142         { 0x13, KEY_RIGHT },            /* -> */
143         { 0x12, KEY_LEFT },             /* <- */
144
145         { 0x17, KEY_SLEEP },            /* Capturar Imagem */
146         { 0x10, KEY_SHUFFLE },          /* Amostra */
147
148         /* FIXME: The keys bellow aren't ok */
149
150         { 0x43, KEY_CHANNELUP },
151         { 0x42, KEY_CHANNELDOWN },
152         { 0x1f, KEY_VOLUMEUP },
153         { 0x1e, KEY_VOLUMEDOWN },
154         { 0x0c, KEY_ENTER },
155
156         { 0x14, KEY_MUTE },
157         { 0x08, KEY_AUDIO },
158
159         { 0x03, KEY_TEXT },
160         { 0x04, KEY_EPG },
161         { 0x2b, KEY_TV2 },              /* TV2 */
162
163         { 0x1d, KEY_RED },
164         { 0x1c, KEY_YELLOW },
165         { 0x41, KEY_GREEN },
166         { 0x40, KEY_BLUE },
167
168         { 0x1a, KEY_PLAYPAUSE },
169         { 0x19, KEY_RECORD },
170         { 0x18, KEY_PLAY },
171         { 0x1b, KEY_STOP },
172 };
173 IR_TABLE(avermedia_m135a, IR_TYPE_UNKNOWN, ir_codes_avermedia_m135a);
174
175 /* Oldrich Jedlicka <oldium.pro@seznam.cz> */
176 static struct ir_scancode ir_codes_avermedia_cardbus[] = {
177         { 0x00, KEY_POWER },
178         { 0x01, KEY_TUNER },            /* TV/FM */
179         { 0x03, KEY_TEXT },             /* Teletext */
180         { 0x04, KEY_EPG },
181         { 0x05, KEY_1 },
182         { 0x06, KEY_2 },
183         { 0x07, KEY_3 },
184         { 0x08, KEY_AUDIO },
185         { 0x09, KEY_4 },
186         { 0x0a, KEY_5 },
187         { 0x0b, KEY_6 },
188         { 0x0c, KEY_ZOOM },             /* Full screen */
189         { 0x0d, KEY_7 },
190         { 0x0e, KEY_8 },
191         { 0x0f, KEY_9 },
192         { 0x10, KEY_PAGEUP },           /* 16-CH PREV */
193         { 0x11, KEY_0 },
194         { 0x12, KEY_INFO },
195         { 0x13, KEY_AGAIN },            /* CH RTN - channel return */
196         { 0x14, KEY_MUTE },
197         { 0x15, KEY_EDIT },             /* Autoscan */
198         { 0x17, KEY_SAVE },             /* Screenshot */
199         { 0x18, KEY_PLAYPAUSE },
200         { 0x19, KEY_RECORD },
201         { 0x1a, KEY_PLAY },
202         { 0x1b, KEY_STOP },
203         { 0x1c, KEY_FASTFORWARD },
204         { 0x1d, KEY_REWIND },
205         { 0x1e, KEY_VOLUMEDOWN },
206         { 0x1f, KEY_VOLUMEUP },
207         { 0x22, KEY_SLEEP },            /* Sleep */
208         { 0x23, KEY_ZOOM },             /* Aspect */
209         { 0x26, KEY_SCREEN },           /* Pos */
210         { 0x27, KEY_ANGLE },            /* Size */
211         { 0x28, KEY_SELECT },           /* Select */
212         { 0x29, KEY_BLUE },             /* Blue/Picture */
213         { 0x2a, KEY_BACKSPACE },        /* Back */
214         { 0x2b, KEY_MEDIA },            /* PIP (Picture-in-picture) */
215         { 0x2c, KEY_DOWN },
216         { 0x2e, KEY_DOT },
217         { 0x2f, KEY_TV },               /* Live TV */
218         { 0x32, KEY_LEFT },
219         { 0x33, KEY_CLEAR },            /* Clear */
220         { 0x35, KEY_RED },              /* Red/TV */
221         { 0x36, KEY_UP },
222         { 0x37, KEY_HOME },             /* Home */
223         { 0x39, KEY_GREEN },            /* Green/Video */
224         { 0x3d, KEY_YELLOW },           /* Yellow/Music */
225         { 0x3e, KEY_OK },               /* Ok */
226         { 0x3f, KEY_RIGHT },
227         { 0x40, KEY_NEXT },             /* Next */
228         { 0x41, KEY_PREVIOUS },         /* Previous */
229         { 0x42, KEY_CHANNELDOWN },      /* Channel down */
230         { 0x43, KEY_CHANNELUP },        /* Channel up */
231 };
232 IR_TABLE(avermedia_cardbus, IR_TYPE_UNKNOWN, ir_codes_avermedia_cardbus);
233
234 /* Attila Kondoros <attila.kondoros@chello.hu> */
235 static struct ir_scancode ir_codes_apac_viewcomp[] = {
236
237         { 0x01, KEY_1 },
238         { 0x02, KEY_2 },
239         { 0x03, KEY_3 },
240         { 0x04, KEY_4 },
241         { 0x05, KEY_5 },
242         { 0x06, KEY_6 },
243         { 0x07, KEY_7 },
244         { 0x08, KEY_8 },
245         { 0x09, KEY_9 },
246         { 0x00, KEY_0 },
247         { 0x17, KEY_LAST },             /* +100 */
248         { 0x0a, KEY_LIST },             /* recall */
249
250
251         { 0x1c, KEY_TUNER },            /* TV/FM */
252         { 0x15, KEY_SEARCH },           /* scan */
253         { 0x12, KEY_POWER },            /* power */
254         { 0x1f, KEY_VOLUMEDOWN },       /* vol up */
255         { 0x1b, KEY_VOLUMEUP },         /* vol down */
256         { 0x1e, KEY_CHANNELDOWN },      /* chn up */
257         { 0x1a, KEY_CHANNELUP },        /* chn down */
258
259         { 0x11, KEY_VIDEO },            /* video */
260         { 0x0f, KEY_ZOOM },             /* full screen */
261         { 0x13, KEY_MUTE },             /* mute/unmute */
262         { 0x10, KEY_TEXT },             /* min */
263
264         { 0x0d, KEY_STOP },             /* freeze */
265         { 0x0e, KEY_RECORD },           /* record */
266         { 0x1d, KEY_PLAYPAUSE },        /* stop */
267         { 0x19, KEY_PLAY },             /* play */
268
269         { 0x16, KEY_GOTO },             /* osd */
270         { 0x14, KEY_REFRESH },          /* default */
271         { 0x0c, KEY_KPPLUS },           /* fine tune >>>> */
272         { 0x18, KEY_KPMINUS },          /* fine tune <<<< */
273 };
274 IR_TABLE(apac_viewcomp, IR_TYPE_UNKNOWN, ir_codes_apac_viewcomp);
275
276 /* ---------------------------------------------------------------------- */
277
278 static struct ir_scancode ir_codes_pixelview[] = {
279
280         { 0x1e, KEY_POWER },    /* power */
281         { 0x07, KEY_MEDIA },    /* source */
282         { 0x1c, KEY_SEARCH },   /* scan */
283
284
285         { 0x03, KEY_TUNER },            /* TV/FM */
286
287         { 0x00, KEY_RECORD },
288         { 0x08, KEY_STOP },
289         { 0x11, KEY_PLAY },
290
291         { 0x1a, KEY_PLAYPAUSE },        /* freeze */
292         { 0x19, KEY_ZOOM },             /* zoom */
293         { 0x0f, KEY_TEXT },             /* min */
294
295         { 0x01, KEY_1 },
296         { 0x0b, KEY_2 },
297         { 0x1b, KEY_3 },
298         { 0x05, KEY_4 },
299         { 0x09, KEY_5 },
300         { 0x15, KEY_6 },
301         { 0x06, KEY_7 },
302         { 0x0a, KEY_8 },
303         { 0x12, KEY_9 },
304         { 0x02, KEY_0 },
305         { 0x10, KEY_LAST },             /* +100 */
306         { 0x13, KEY_LIST },             /* recall */
307
308         { 0x1f, KEY_CHANNELUP },        /* chn down */
309         { 0x17, KEY_CHANNELDOWN },      /* chn up */
310         { 0x16, KEY_VOLUMEUP },         /* vol down */
311         { 0x14, KEY_VOLUMEDOWN },       /* vol up */
312
313         { 0x04, KEY_KPMINUS },          /* <<< */
314         { 0x0e, KEY_SETUP },            /* function */
315         { 0x0c, KEY_KPPLUS },           /* >>> */
316
317         { 0x0d, KEY_GOTO },             /* mts */
318         { 0x1d, KEY_REFRESH },          /* reset */
319         { 0x18, KEY_MUTE },             /* mute/unmute */
320 };
321 IR_TABLE(pixelview, IR_TYPE_UNKNOWN, ir_codes_pixelview);
322
323 /*
324    Mauro Carvalho Chehab <mchehab@infradead.org>
325    present on PV MPEG 8000GT
326  */
327 static struct ir_scancode ir_codes_pixelview_new[] = {
328         { 0x3c, KEY_TIME },             /* Timeshift */
329         { 0x12, KEY_POWER },
330
331         { 0x3d, KEY_1 },
332         { 0x38, KEY_2 },
333         { 0x18, KEY_3 },
334         { 0x35, KEY_4 },
335         { 0x39, KEY_5 },
336         { 0x15, KEY_6 },
337         { 0x36, KEY_7 },
338         { 0x3a, KEY_8 },
339         { 0x1e, KEY_9 },
340         { 0x3e, KEY_0 },
341
342         { 0x1c, KEY_AGAIN },            /* LOOP */
343         { 0x3f, KEY_MEDIA },            /* Source */
344         { 0x1f, KEY_LAST },             /* +100 */
345         { 0x1b, KEY_MUTE },
346
347         { 0x17, KEY_CHANNELDOWN },
348         { 0x16, KEY_CHANNELUP },
349         { 0x10, KEY_VOLUMEUP },
350         { 0x14, KEY_VOLUMEDOWN },
351         { 0x13, KEY_ZOOM },
352
353         { 0x19, KEY_CAMERA },           /* SNAPSHOT */
354         { 0x1a, KEY_SEARCH },           /* scan */
355
356         { 0x37, KEY_REWIND },           /* << */
357         { 0x32, KEY_RECORD },           /* o (red) */
358         { 0x33, KEY_FORWARD },          /* >> */
359         { 0x11, KEY_STOP },             /* square */
360         { 0x3b, KEY_PLAY },             /* > */
361         { 0x30, KEY_PLAYPAUSE },        /* || */
362
363         { 0x31, KEY_TV },
364         { 0x34, KEY_RADIO },
365 };
366 IR_TABLE(pixelview_new, IR_TYPE_UNKNOWN, ir_codes_pixelview_new);
367
368 static struct ir_scancode ir_codes_nebula[] = {
369         { 0x00, KEY_0 },
370         { 0x01, KEY_1 },
371         { 0x02, KEY_2 },
372         { 0x03, KEY_3 },
373         { 0x04, KEY_4 },
374         { 0x05, KEY_5 },
375         { 0x06, KEY_6 },
376         { 0x07, KEY_7 },
377         { 0x08, KEY_8 },
378         { 0x09, KEY_9 },
379         { 0x0a, KEY_TV },
380         { 0x0b, KEY_AUX },
381         { 0x0c, KEY_DVD },
382         { 0x0d, KEY_POWER },
383         { 0x0e, KEY_MHP },      /* labelled 'Picture' */
384         { 0x0f, KEY_AUDIO },
385         { 0x10, KEY_INFO },
386         { 0x11, KEY_F13 },      /* 16:9 */
387         { 0x12, KEY_F14 },      /* 14:9 */
388         { 0x13, KEY_EPG },
389         { 0x14, KEY_EXIT },
390         { 0x15, KEY_MENU },
391         { 0x16, KEY_UP },
392         { 0x17, KEY_DOWN },
393         { 0x18, KEY_LEFT },
394         { 0x19, KEY_RIGHT },
395         { 0x1a, KEY_ENTER },
396         { 0x1b, KEY_CHANNELUP },
397         { 0x1c, KEY_CHANNELDOWN },
398         { 0x1d, KEY_VOLUMEUP },
399         { 0x1e, KEY_VOLUMEDOWN },
400         { 0x1f, KEY_RED },
401         { 0x20, KEY_GREEN },
402         { 0x21, KEY_YELLOW },
403         { 0x22, KEY_BLUE },
404         { 0x23, KEY_SUBTITLE },
405         { 0x24, KEY_F15 },      /* AD */
406         { 0x25, KEY_TEXT },
407         { 0x26, KEY_MUTE },
408         { 0x27, KEY_REWIND },
409         { 0x28, KEY_STOP },
410         { 0x29, KEY_PLAY },
411         { 0x2a, KEY_FASTFORWARD },
412         { 0x2b, KEY_F16 },      /* chapter */
413         { 0x2c, KEY_PAUSE },
414         { 0x2d, KEY_PLAY },
415         { 0x2e, KEY_RECORD },
416         { 0x2f, KEY_F17 },      /* picture in picture */
417         { 0x30, KEY_KPPLUS },   /* zoom in */
418         { 0x31, KEY_KPMINUS },  /* zoom out */
419         { 0x32, KEY_F18 },      /* capture */
420         { 0x33, KEY_F19 },      /* web */
421         { 0x34, KEY_EMAIL },
422         { 0x35, KEY_PHONE },
423         { 0x36, KEY_PC },
424 };
425 IR_TABLE(nebula, IR_TYPE_UNKNOWN, ir_codes_nebula);
426
427 /* DigitalNow DNTV Live DVB-T Remote */
428 static struct ir_scancode ir_codes_dntv_live_dvb_t[] = {
429         { 0x00, KEY_ESC },              /* 'go up a level?' */
430         /* Keys 0 to 9 */
431         { 0x0a, KEY_0 },
432         { 0x01, KEY_1 },
433         { 0x02, KEY_2 },
434         { 0x03, KEY_3 },
435         { 0x04, KEY_4 },
436         { 0x05, KEY_5 },
437         { 0x06, KEY_6 },
438         { 0x07, KEY_7 },
439         { 0x08, KEY_8 },
440         { 0x09, KEY_9 },
441
442         { 0x0b, KEY_TUNER },            /* tv/fm */
443         { 0x0c, KEY_SEARCH },           /* scan */
444         { 0x0d, KEY_STOP },
445         { 0x0e, KEY_PAUSE },
446         { 0x0f, KEY_LIST },             /* source */
447
448         { 0x10, KEY_MUTE },
449         { 0x11, KEY_REWIND },           /* backward << */
450         { 0x12, KEY_POWER },
451         { 0x13, KEY_CAMERA },           /* snap */
452         { 0x14, KEY_AUDIO },            /* stereo */
453         { 0x15, KEY_CLEAR },            /* reset */
454         { 0x16, KEY_PLAY },
455         { 0x17, KEY_ENTER },
456         { 0x18, KEY_ZOOM },             /* full screen */
457         { 0x19, KEY_FASTFORWARD },      /* forward >> */
458         { 0x1a, KEY_CHANNELUP },
459         { 0x1b, KEY_VOLUMEUP },
460         { 0x1c, KEY_INFO },             /* preview */
461         { 0x1d, KEY_RECORD },           /* record */
462         { 0x1e, KEY_CHANNELDOWN },
463         { 0x1f, KEY_VOLUMEDOWN },
464 };
465 IR_TABLE(dntv_live_dvb_t, IR_TYPE_UNKNOWN, ir_codes_dntv_live_dvb_t);
466
467 /* ---------------------------------------------------------------------- */
468
469 /* IO-DATA BCTV7E Remote */
470 static struct ir_scancode ir_codes_iodata_bctv7e[] = {
471         { 0x40, KEY_TV },
472         { 0x20, KEY_RADIO },            /* FM */
473         { 0x60, KEY_EPG },
474         { 0x00, KEY_POWER },
475
476         /* Keys 0 to 9 */
477         { 0x44, KEY_0 },                /* 10 */
478         { 0x50, KEY_1 },
479         { 0x30, KEY_2 },
480         { 0x70, KEY_3 },
481         { 0x48, KEY_4 },
482         { 0x28, KEY_5 },
483         { 0x68, KEY_6 },
484         { 0x58, KEY_7 },
485         { 0x38, KEY_8 },
486         { 0x78, KEY_9 },
487
488         { 0x10, KEY_L },                /* Live */
489         { 0x08, KEY_TIME },             /* Time Shift */
490
491         { 0x18, KEY_PLAYPAUSE },        /* Play */
492
493         { 0x24, KEY_ENTER },            /* 11 */
494         { 0x64, KEY_ESC },              /* 12 */
495         { 0x04, KEY_M },                /* Multi */
496
497         { 0x54, KEY_VIDEO },
498         { 0x34, KEY_CHANNELUP },
499         { 0x74, KEY_VOLUMEUP },
500         { 0x14, KEY_MUTE },
501
502         { 0x4c, KEY_VCR },              /* SVIDEO */
503         { 0x2c, KEY_CHANNELDOWN },
504         { 0x6c, KEY_VOLUMEDOWN },
505         { 0x0c, KEY_ZOOM },
506
507         { 0x5c, KEY_PAUSE },
508         { 0x3c, KEY_RED },              /* || (red) */
509         { 0x7c, KEY_RECORD },           /* recording */
510         { 0x1c, KEY_STOP },
511
512         { 0x41, KEY_REWIND },           /* backward << */
513         { 0x21, KEY_PLAY },
514         { 0x61, KEY_FASTFORWARD },      /* forward >> */
515         { 0x01, KEY_NEXT },             /* skip >| */
516 };
517 IR_TABLE(iodata_bctv7e, IR_TYPE_UNKNOWN, ir_codes_iodata_bctv7e);
518
519 /* ---------------------------------------------------------------------- */
520
521 /* ADS Tech Instant TV DVB-T PCI Remote */
522 static struct ir_scancode ir_codes_adstech_dvb_t_pci[] = {
523         /* Keys 0 to 9 */
524         { 0x4d, KEY_0 },
525         { 0x57, KEY_1 },
526         { 0x4f, KEY_2 },
527         { 0x53, KEY_3 },
528         { 0x56, KEY_4 },
529         { 0x4e, KEY_5 },
530         { 0x5e, KEY_6 },
531         { 0x54, KEY_7 },
532         { 0x4c, KEY_8 },
533         { 0x5c, KEY_9 },
534
535         { 0x5b, KEY_POWER },
536         { 0x5f, KEY_MUTE },
537         { 0x55, KEY_GOTO },
538         { 0x5d, KEY_SEARCH },
539         { 0x17, KEY_EPG },              /* Guide */
540         { 0x1f, KEY_MENU },
541         { 0x0f, KEY_UP },
542         { 0x46, KEY_DOWN },
543         { 0x16, KEY_LEFT },
544         { 0x1e, KEY_RIGHT },
545         { 0x0e, KEY_SELECT },           /* Enter */
546         { 0x5a, KEY_INFO },
547         { 0x52, KEY_EXIT },
548         { 0x59, KEY_PREVIOUS },
549         { 0x51, KEY_NEXT },
550         { 0x58, KEY_REWIND },
551         { 0x50, KEY_FORWARD },
552         { 0x44, KEY_PLAYPAUSE },
553         { 0x07, KEY_STOP },
554         { 0x1b, KEY_RECORD },
555         { 0x13, KEY_TUNER },            /* Live */
556         { 0x0a, KEY_A },
557         { 0x12, KEY_B },
558         { 0x03, KEY_PROG1 },            /* 1 */
559         { 0x01, KEY_PROG2 },            /* 2 */
560         { 0x00, KEY_PROG3 },            /* 3 */
561         { 0x06, KEY_DVD },
562         { 0x48, KEY_AUX },              /* Photo */
563         { 0x40, KEY_VIDEO },
564         { 0x19, KEY_AUDIO },            /* Music */
565         { 0x0b, KEY_CHANNELUP },
566         { 0x08, KEY_CHANNELDOWN },
567         { 0x15, KEY_VOLUMEUP },
568         { 0x1c, KEY_VOLUMEDOWN },
569 };
570 IR_TABLE(adstech_dvb_t_pci, IR_TYPE_UNKNOWN, ir_codes_adstech_dvb_t_pci);
571
572 /* ---------------------------------------------------------------------- */
573
574 /* MSI TV@nywhere MASTER remote */
575
576 static struct ir_scancode ir_codes_msi_tvanywhere[] = {
577         /* Keys 0 to 9 */
578         { 0x00, KEY_0 },
579         { 0x01, KEY_1 },
580         { 0x02, KEY_2 },
581         { 0x03, KEY_3 },
582         { 0x04, KEY_4 },
583         { 0x05, KEY_5 },
584         { 0x06, KEY_6 },
585         { 0x07, KEY_7 },
586         { 0x08, KEY_8 },
587         { 0x09, KEY_9 },
588
589         { 0x0c, KEY_MUTE },
590         { 0x0f, KEY_SCREEN },           /* Full Screen */
591         { 0x10, KEY_FN },               /* Funtion */
592         { 0x11, KEY_TIME },             /* Time shift */
593         { 0x12, KEY_POWER },
594         { 0x13, KEY_MEDIA },            /* MTS */
595         { 0x14, KEY_SLOW },
596         { 0x16, KEY_REWIND },           /* backward << */
597         { 0x17, KEY_ENTER },            /* Return */
598         { 0x18, KEY_FASTFORWARD },      /* forward >> */
599         { 0x1a, KEY_CHANNELUP },
600         { 0x1b, KEY_VOLUMEUP },
601         { 0x1e, KEY_CHANNELDOWN },
602         { 0x1f, KEY_VOLUMEDOWN },
603 };
604 IR_TABLE(msi_tvanywhere, IR_TYPE_UNKNOWN, ir_codes_msi_tvanywhere);
605
606 /* ---------------------------------------------------------------------- */
607
608 /*
609   Keycodes for remote on the MSI TV@nywhere Plus. The controller IC on the card
610   is marked "KS003". The controller is I2C at address 0x30, but does not seem
611   to respond to probes until a read is performed from a valid device.
612   I don't know why...
613
614   Note: This remote may be of similar or identical design to the
615   Pixelview remote (?).  The raw codes and duplicate button codes
616   appear to be the same.
617
618   Henry Wong <henry@stuffedcow.net>
619   Some changes to formatting and keycodes by Mark Schultz <n9xmj@yahoo.com>
620
621 */
622
623 static struct ir_scancode ir_codes_msi_tvanywhere_plus[] = {
624
625 /*  ---- Remote Button Layout ----
626
627     POWER   SOURCE  SCAN    MUTE
628     TV/FM   1       2       3
629     |>      4       5       6
630     <|      7       8       9
631     ^^UP    0       +       RECALL
632     vvDN    RECORD  STOP    PLAY
633
634         MINIMIZE          ZOOM
635
636                   CH+
637       VOL-                   VOL+
638                   CH-
639
640         SNAPSHOT           MTS
641
642      <<      FUNC    >>     RESET
643 */
644
645         { 0x01, KEY_1 },                /* 1 */
646         { 0x0b, KEY_2 },                /* 2 */
647         { 0x1b, KEY_3 },                /* 3 */
648         { 0x05, KEY_4 },                /* 4 */
649         { 0x09, KEY_5 },                /* 5 */
650         { 0x15, KEY_6 },                /* 6 */
651         { 0x06, KEY_7 },                /* 7 */
652         { 0x0a, KEY_8 },                /* 8 */
653         { 0x12, KEY_9 },                /* 9 */
654         { 0x02, KEY_0 },                /* 0 */
655         { 0x10, KEY_KPPLUS },           /* + */
656         { 0x13, KEY_AGAIN },            /* Recall */
657
658         { 0x1e, KEY_POWER },            /* Power */
659         { 0x07, KEY_TUNER },            /* Source */
660         { 0x1c, KEY_SEARCH },           /* Scan */
661         { 0x18, KEY_MUTE },             /* Mute */
662
663         { 0x03, KEY_RADIO },            /* TV/FM */
664         /* The next four keys are duplicates that appear to send the
665            same IR code as Ch+, Ch-, >>, and << .  The raw code assigned
666            to them is the actual code + 0x20 - they will never be
667            detected as such unless some way is discovered to distinguish
668            these buttons from those that have the same code. */
669         { 0x3f, KEY_RIGHT },            /* |> and Ch+ */
670         { 0x37, KEY_LEFT },             /* <| and Ch- */
671         { 0x2c, KEY_UP },               /* ^^Up and >> */
672         { 0x24, KEY_DOWN },             /* vvDn and << */
673
674         { 0x00, KEY_RECORD },           /* Record */
675         { 0x08, KEY_STOP },             /* Stop */
676         { 0x11, KEY_PLAY },             /* Play */
677
678         { 0x0f, KEY_CLOSE },            /* Minimize */
679         { 0x19, KEY_ZOOM },             /* Zoom */
680         { 0x1a, KEY_CAMERA },           /* Snapshot */
681         { 0x0d, KEY_LANGUAGE },         /* MTS */
682
683         { 0x14, KEY_VOLUMEDOWN },       /* Vol- */
684         { 0x16, KEY_VOLUMEUP },         /* Vol+ */
685         { 0x17, KEY_CHANNELDOWN },      /* Ch- */
686         { 0x1f, KEY_CHANNELUP },        /* Ch+ */
687
688         { 0x04, KEY_REWIND },           /* << */
689         { 0x0e, KEY_MENU },             /* Function */
690         { 0x0c, KEY_FASTFORWARD },      /* >> */
691         { 0x1d, KEY_RESTART },          /* Reset */
692 };
693 IR_TABLE(msi_tvanywhere_plus, IR_TYPE_UNKNOWN, ir_codes_msi_tvanywhere_plus);
694
695 /* ---------------------------------------------------------------------- */
696
697 /* Cinergy 1400 DVB-T */
698 static struct ir_scancode ir_codes_cinergy_1400[] = {
699         { 0x01, KEY_POWER },
700         { 0x02, KEY_1 },
701         { 0x03, KEY_2 },
702         { 0x04, KEY_3 },
703         { 0x05, KEY_4 },
704         { 0x06, KEY_5 },
705         { 0x07, KEY_6 },
706         { 0x08, KEY_7 },
707         { 0x09, KEY_8 },
708         { 0x0a, KEY_9 },
709         { 0x0c, KEY_0 },
710
711         { 0x0b, KEY_VIDEO },
712         { 0x0d, KEY_REFRESH },
713         { 0x0e, KEY_SELECT },
714         { 0x0f, KEY_EPG },
715         { 0x10, KEY_UP },
716         { 0x11, KEY_LEFT },
717         { 0x12, KEY_OK },
718         { 0x13, KEY_RIGHT },
719         { 0x14, KEY_DOWN },
720         { 0x15, KEY_TEXT },
721         { 0x16, KEY_INFO },
722
723         { 0x17, KEY_RED },
724         { 0x18, KEY_GREEN },
725         { 0x19, KEY_YELLOW },
726         { 0x1a, KEY_BLUE },
727
728         { 0x1b, KEY_CHANNELUP },
729         { 0x1c, KEY_VOLUMEUP },
730         { 0x1d, KEY_MUTE },
731         { 0x1e, KEY_VOLUMEDOWN },
732         { 0x1f, KEY_CHANNELDOWN },
733
734         { 0x40, KEY_PAUSE },
735         { 0x4c, KEY_PLAY },
736         { 0x58, KEY_RECORD },
737         { 0x54, KEY_PREVIOUS },
738         { 0x48, KEY_STOP },
739         { 0x5c, KEY_NEXT },
740 };
741 IR_TABLE(cinergy_1400, IR_TYPE_UNKNOWN, ir_codes_cinergy_1400);
742
743 /* ---------------------------------------------------------------------- */
744
745 /* AVERTV STUDIO 303 Remote */
746 static struct ir_scancode ir_codes_avertv_303[] = {
747         { 0x2a, KEY_1 },
748         { 0x32, KEY_2 },
749         { 0x3a, KEY_3 },
750         { 0x4a, KEY_4 },
751         { 0x52, KEY_5 },
752         { 0x5a, KEY_6 },
753         { 0x6a, KEY_7 },
754         { 0x72, KEY_8 },
755         { 0x7a, KEY_9 },
756         { 0x0e, KEY_0 },
757
758         { 0x02, KEY_POWER },
759         { 0x22, KEY_VIDEO },
760         { 0x42, KEY_AUDIO },
761         { 0x62, KEY_ZOOM },
762         { 0x0a, KEY_TV },
763         { 0x12, KEY_CD },
764         { 0x1a, KEY_TEXT },
765
766         { 0x16, KEY_SUBTITLE },
767         { 0x1e, KEY_REWIND },
768         { 0x06, KEY_PRINT },
769
770         { 0x2e, KEY_SEARCH },
771         { 0x36, KEY_SLEEP },
772         { 0x3e, KEY_SHUFFLE },
773         { 0x26, KEY_MUTE },
774
775         { 0x4e, KEY_RECORD },
776         { 0x56, KEY_PAUSE },
777         { 0x5e, KEY_STOP },
778         { 0x46, KEY_PLAY },
779
780         { 0x6e, KEY_RED },
781         { 0x0b, KEY_GREEN },
782         { 0x66, KEY_YELLOW },
783         { 0x03, KEY_BLUE },
784
785         { 0x76, KEY_LEFT },
786         { 0x7e, KEY_RIGHT },
787         { 0x13, KEY_DOWN },
788         { 0x1b, KEY_UP },
789 };
790 IR_TABLE(avertv_303, IR_TYPE_UNKNOWN, ir_codes_avertv_303);
791
792 /* ---------------------------------------------------------------------- */
793
794 /* DigitalNow DNTV Live! DVB-T Pro Remote */
795 static struct ir_scancode ir_codes_dntv_live_dvbt_pro[] = {
796         { 0x16, KEY_POWER },
797         { 0x5b, KEY_HOME },
798
799         { 0x55, KEY_TV },               /* live tv */
800         { 0x58, KEY_TUNER },            /* digital Radio */
801         { 0x5a, KEY_RADIO },            /* FM radio */
802         { 0x59, KEY_DVD },              /* dvd menu */
803         { 0x03, KEY_1 },
804         { 0x01, KEY_2 },
805         { 0x06, KEY_3 },
806         { 0x09, KEY_4 },
807         { 0x1d, KEY_5 },
808         { 0x1f, KEY_6 },
809         { 0x0d, KEY_7 },
810         { 0x19, KEY_8 },
811         { 0x1b, KEY_9 },
812         { 0x0c, KEY_CANCEL },
813         { 0x15, KEY_0 },
814         { 0x4a, KEY_CLEAR },
815         { 0x13, KEY_BACK },
816         { 0x00, KEY_TAB },
817         { 0x4b, KEY_UP },
818         { 0x4e, KEY_LEFT },
819         { 0x4f, KEY_OK },
820         { 0x52, KEY_RIGHT },
821         { 0x51, KEY_DOWN },
822         { 0x1e, KEY_VOLUMEUP },
823         { 0x0a, KEY_VOLUMEDOWN },
824         { 0x02, KEY_CHANNELDOWN },
825         { 0x05, KEY_CHANNELUP },
826         { 0x11, KEY_RECORD },
827         { 0x14, KEY_PLAY },
828         { 0x4c, KEY_PAUSE },
829         { 0x1a, KEY_STOP },
830         { 0x40, KEY_REWIND },
831         { 0x12, KEY_FASTFORWARD },
832         { 0x41, KEY_PREVIOUSSONG },     /* replay |< */
833         { 0x42, KEY_NEXTSONG },         /* skip >| */
834         { 0x54, KEY_CAMERA },           /* capture */
835         { 0x50, KEY_LANGUAGE },         /* sap */
836         { 0x47, KEY_TV2 },              /* pip */
837         { 0x4d, KEY_SCREEN },
838         { 0x43, KEY_SUBTITLE },
839         { 0x10, KEY_MUTE },
840         { 0x49, KEY_AUDIO },            /* l/r */
841         { 0x07, KEY_SLEEP },
842         { 0x08, KEY_VIDEO },            /* a/v */
843         { 0x0e, KEY_PREVIOUS },         /* recall */
844         { 0x45, KEY_ZOOM },             /* zoom + */
845         { 0x46, KEY_ANGLE },            /* zoom - */
846         { 0x56, KEY_RED },
847         { 0x57, KEY_GREEN },
848         { 0x5c, KEY_YELLOW },
849         { 0x5d, KEY_BLUE },
850 };
851 IR_TABLE(dntv_live_dvbt_pro, IR_TYPE_UNKNOWN, ir_codes_dntv_live_dvbt_pro);
852
853 static struct ir_scancode ir_codes_em_terratec[] = {
854         { 0x01, KEY_CHANNEL },
855         { 0x02, KEY_SELECT },
856         { 0x03, KEY_MUTE },
857         { 0x04, KEY_POWER },
858         { 0x05, KEY_1 },
859         { 0x06, KEY_2 },
860         { 0x07, KEY_3 },
861         { 0x08, KEY_CHANNELUP },
862         { 0x09, KEY_4 },
863         { 0x0a, KEY_5 },
864         { 0x0b, KEY_6 },
865         { 0x0c, KEY_CHANNELDOWN },
866         { 0x0d, KEY_7 },
867         { 0x0e, KEY_8 },
868         { 0x0f, KEY_9 },
869         { 0x10, KEY_VOLUMEUP },
870         { 0x11, KEY_0 },
871         { 0x12, KEY_MENU },
872         { 0x13, KEY_PRINT },
873         { 0x14, KEY_VOLUMEDOWN },
874         { 0x16, KEY_PAUSE },
875         { 0x18, KEY_RECORD },
876         { 0x19, KEY_REWIND },
877         { 0x1a, KEY_PLAY },
878         { 0x1b, KEY_FORWARD },
879         { 0x1c, KEY_BACKSPACE },
880         { 0x1e, KEY_STOP },
881         { 0x40, KEY_ZOOM },
882 };
883 IR_TABLE(em_terratec, IR_TYPE_UNKNOWN, ir_codes_em_terratec);
884
885 static struct ir_scancode ir_codes_pinnacle_grey[] = {
886         { 0x3a, KEY_0 },
887         { 0x31, KEY_1 },
888         { 0x32, KEY_2 },
889         { 0x33, KEY_3 },
890         { 0x34, KEY_4 },
891         { 0x35, KEY_5 },
892         { 0x36, KEY_6 },
893         { 0x37, KEY_7 },
894         { 0x38, KEY_8 },
895         { 0x39, KEY_9 },
896
897         { 0x2f, KEY_POWER },
898
899         { 0x2e, KEY_P },
900         { 0x1f, KEY_L },
901         { 0x2b, KEY_I },
902
903         { 0x2d, KEY_SCREEN },
904         { 0x1e, KEY_ZOOM },
905         { 0x1b, KEY_VOLUMEUP },
906         { 0x0f, KEY_VOLUMEDOWN },
907         { 0x17, KEY_CHANNELUP },
908         { 0x1c, KEY_CHANNELDOWN },
909         { 0x25, KEY_INFO },
910
911         { 0x3c, KEY_MUTE },
912
913         { 0x3d, KEY_LEFT },
914         { 0x3b, KEY_RIGHT },
915
916         { 0x3f, KEY_UP },
917         { 0x3e, KEY_DOWN },
918         { 0x1a, KEY_ENTER },
919
920         { 0x1d, KEY_MENU },
921         { 0x19, KEY_AGAIN },
922         { 0x16, KEY_PREVIOUSSONG },
923         { 0x13, KEY_NEXTSONG },
924         { 0x15, KEY_PAUSE },
925         { 0x0e, KEY_REWIND },
926         { 0x0d, KEY_PLAY },
927         { 0x0b, KEY_STOP },
928         { 0x07, KEY_FORWARD },
929         { 0x27, KEY_RECORD },
930         { 0x26, KEY_TUNER },
931         { 0x29, KEY_TEXT },
932         { 0x2a, KEY_MEDIA },
933         { 0x18, KEY_EPG },
934 };
935 IR_TABLE(pinnacle_grey, IR_TYPE_UNKNOWN, ir_codes_pinnacle_grey);
936
937 static struct ir_scancode ir_codes_flyvideo[] = {
938         { 0x0f, KEY_0 },
939         { 0x03, KEY_1 },
940         { 0x04, KEY_2 },
941         { 0x05, KEY_3 },
942         { 0x07, KEY_4 },
943         { 0x08, KEY_5 },
944         { 0x09, KEY_6 },
945         { 0x0b, KEY_7 },
946         { 0x0c, KEY_8 },
947         { 0x0d, KEY_9 },
948
949         { 0x0e, KEY_MODE },     /* Air/Cable */
950         { 0x11, KEY_VIDEO },    /* Video */
951         { 0x15, KEY_AUDIO },    /* Audio */
952         { 0x00, KEY_POWER },    /* Power */
953         { 0x18, KEY_TUNER },    /* AV Source */
954         { 0x02, KEY_ZOOM },     /* Fullscreen */
955         { 0x1a, KEY_LANGUAGE }, /* Stereo */
956         { 0x1b, KEY_MUTE },     /* Mute */
957         { 0x14, KEY_VOLUMEUP }, /* Volume + */
958         { 0x17, KEY_VOLUMEDOWN },/* Volume - */
959         { 0x12, KEY_CHANNELUP },/* Channel + */
960         { 0x13, KEY_CHANNELDOWN },/* Channel - */
961         { 0x06, KEY_AGAIN },    /* Recall */
962         { 0x10, KEY_ENTER },    /* Enter */
963
964         { 0x19, KEY_BACK },     /* Rewind  ( <<< ) */
965         { 0x1f, KEY_FORWARD },  /* Forward ( >>> ) */
966         { 0x0a, KEY_ANGLE },    /* no label, may be used as the PAUSE button */
967 };
968 IR_TABLE(flyvideo, IR_TYPE_UNKNOWN, ir_codes_flyvideo);
969
970 static struct ir_scancode ir_codes_flydvb[] = {
971         { 0x01, KEY_ZOOM },             /* Full Screen */
972         { 0x00, KEY_POWER },            /* Power */
973
974         { 0x03, KEY_1 },
975         { 0x04, KEY_2 },
976         { 0x05, KEY_3 },
977         { 0x07, KEY_4 },
978         { 0x08, KEY_5 },
979         { 0x09, KEY_6 },
980         { 0x0b, KEY_7 },
981         { 0x0c, KEY_8 },
982         { 0x0d, KEY_9 },
983         { 0x06, KEY_AGAIN },            /* Recall */
984         { 0x0f, KEY_0 },
985         { 0x10, KEY_MUTE },             /* Mute */
986         { 0x02, KEY_RADIO },            /* TV/Radio */
987         { 0x1b, KEY_LANGUAGE },         /* SAP (Second Audio Program) */
988
989         { 0x14, KEY_VOLUMEUP },         /* VOL+ */
990         { 0x17, KEY_VOLUMEDOWN },       /* VOL- */
991         { 0x12, KEY_CHANNELUP },        /* CH+ */
992         { 0x13, KEY_CHANNELDOWN },      /* CH- */
993         { 0x1d, KEY_ENTER },            /* Enter */
994
995         { 0x1a, KEY_MODE },             /* PIP */
996         { 0x18, KEY_TUNER },            /* Source */
997
998         { 0x1e, KEY_RECORD },           /* Record/Pause */
999         { 0x15, KEY_ANGLE },            /* Swap (no label on key) */
1000         { 0x1c, KEY_PAUSE },            /* Timeshift/Pause */
1001         { 0x19, KEY_BACK },             /* Rewind << */
1002         { 0x0a, KEY_PLAYPAUSE },        /* Play/Pause */
1003         { 0x1f, KEY_FORWARD },          /* Forward >> */
1004         { 0x16, KEY_PREVIOUS },         /* Back |<< */
1005         { 0x11, KEY_STOP },             /* Stop */
1006         { 0x0e, KEY_NEXT },             /* End >>| */
1007 };
1008 IR_TABLE(flydvb, IR_TYPE_UNKNOWN, ir_codes_flydvb);
1009
1010 static struct ir_scancode ir_codes_cinergy[] = {
1011         { 0x00, KEY_0 },
1012         { 0x01, KEY_1 },
1013         { 0x02, KEY_2 },
1014         { 0x03, KEY_3 },
1015         { 0x04, KEY_4 },
1016         { 0x05, KEY_5 },
1017         { 0x06, KEY_6 },
1018         { 0x07, KEY_7 },
1019         { 0x08, KEY_8 },
1020         { 0x09, KEY_9 },
1021
1022         { 0x0a, KEY_POWER },
1023         { 0x0b, KEY_PROG1 },            /* app */
1024         { 0x0c, KEY_ZOOM },             /* zoom/fullscreen */
1025         { 0x0d, KEY_CHANNELUP },        /* channel */
1026         { 0x0e, KEY_CHANNELDOWN },      /* channel- */
1027         { 0x0f, KEY_VOLUMEUP },
1028         { 0x10, KEY_VOLUMEDOWN },
1029         { 0x11, KEY_TUNER },            /* AV */
1030         { 0x12, KEY_NUMLOCK },          /* -/-- */
1031         { 0x13, KEY_AUDIO },            /* audio */
1032         { 0x14, KEY_MUTE },
1033         { 0x15, KEY_UP },
1034         { 0x16, KEY_DOWN },
1035         { 0x17, KEY_LEFT },
1036         { 0x18, KEY_RIGHT },
1037         { 0x19, BTN_LEFT, },
1038         { 0x1a, BTN_RIGHT, },
1039         { 0x1b, KEY_WWW },              /* text */
1040         { 0x1c, KEY_REWIND },
1041         { 0x1d, KEY_FORWARD },
1042         { 0x1e, KEY_RECORD },
1043         { 0x1f, KEY_PLAY },
1044         { 0x20, KEY_PREVIOUSSONG },
1045         { 0x21, KEY_NEXTSONG },
1046         { 0x22, KEY_PAUSE },
1047         { 0x23, KEY_STOP },
1048 };
1049 IR_TABLE(cinergy, IR_TYPE_UNKNOWN, ir_codes_cinergy);
1050
1051 /* Alfons Geser <a.geser@cox.net>
1052  * updates from Job D. R. Borges <jobdrb@ig.com.br> */
1053 static struct ir_scancode ir_codes_eztv[] = {
1054         { 0x12, KEY_POWER },
1055         { 0x01, KEY_TV },       /* DVR */
1056         { 0x15, KEY_DVD },      /* DVD */
1057         { 0x17, KEY_AUDIO },    /* music */
1058                                 /* DVR mode / DVD mode / music mode */
1059
1060         { 0x1b, KEY_MUTE },     /* mute */
1061         { 0x02, KEY_LANGUAGE }, /* MTS/SAP / audio / autoseek */
1062         { 0x1e, KEY_SUBTITLE }, /* closed captioning / subtitle / seek */
1063         { 0x16, KEY_ZOOM },     /* full screen */
1064         { 0x1c, KEY_VIDEO },    /* video source / eject / delall */
1065         { 0x1d, KEY_RESTART },  /* playback / angle / del */
1066         { 0x2f, KEY_SEARCH },   /* scan / menu / playlist */
1067         { 0x30, KEY_CHANNEL },  /* CH surfing / bookmark / memo */
1068
1069         { 0x31, KEY_HELP },     /* help */
1070         { 0x32, KEY_MODE },     /* num/memo */
1071         { 0x33, KEY_ESC },      /* cancel */
1072
1073         { 0x0c, KEY_UP },       /* up */
1074         { 0x10, KEY_DOWN },     /* down */
1075         { 0x08, KEY_LEFT },     /* left */
1076         { 0x04, KEY_RIGHT },    /* right */
1077         { 0x03, KEY_SELECT },   /* select */
1078
1079         { 0x1f, KEY_REWIND },   /* rewind */
1080         { 0x20, KEY_PLAYPAUSE },/* play/pause */
1081         { 0x29, KEY_FORWARD },  /* forward */
1082         { 0x14, KEY_AGAIN },    /* repeat */
1083         { 0x2b, KEY_RECORD },   /* recording */
1084         { 0x2c, KEY_STOP },     /* stop */
1085         { 0x2d, KEY_PLAY },     /* play */
1086         { 0x2e, KEY_CAMERA },   /* snapshot / shuffle */
1087
1088         { 0x00, KEY_0 },
1089         { 0x05, KEY_1 },
1090         { 0x06, KEY_2 },
1091         { 0x07, KEY_3 },
1092         { 0x09, KEY_4 },
1093         { 0x0a, KEY_5 },
1094         { 0x0b, KEY_6 },
1095         { 0x0d, KEY_7 },
1096         { 0x0e, KEY_8 },
1097         { 0x0f, KEY_9 },
1098
1099         { 0x2a, KEY_VOLUMEUP },
1100         { 0x11, KEY_VOLUMEDOWN },
1101         { 0x18, KEY_CHANNELUP },/* CH.tracking up */
1102         { 0x19, KEY_CHANNELDOWN },/* CH.tracking down */
1103
1104         { 0x13, KEY_ENTER },    /* enter */
1105         { 0x21, KEY_DOT },      /* . (decimal dot) */
1106 };
1107 IR_TABLE(eztv, IR_TYPE_UNKNOWN, ir_codes_eztv);
1108
1109 /* Alex Hermann <gaaf@gmx.net> */
1110 static struct ir_scancode ir_codes_avermedia[] = {
1111         { 0x28, KEY_1 },
1112         { 0x18, KEY_2 },
1113         { 0x38, KEY_3 },
1114         { 0x24, KEY_4 },
1115         { 0x14, KEY_5 },
1116         { 0x34, KEY_6 },
1117         { 0x2c, KEY_7 },
1118         { 0x1c, KEY_8 },
1119         { 0x3c, KEY_9 },
1120         { 0x22, KEY_0 },
1121
1122         { 0x20, KEY_TV },               /* TV/FM */
1123         { 0x10, KEY_CD },               /* CD */
1124         { 0x30, KEY_TEXT },             /* TELETEXT */
1125         { 0x00, KEY_POWER },            /* POWER */
1126
1127         { 0x08, KEY_VIDEO },            /* VIDEO */
1128         { 0x04, KEY_AUDIO },            /* AUDIO */
1129         { 0x0c, KEY_ZOOM },             /* FULL SCREEN */
1130
1131         { 0x12, KEY_SUBTITLE },         /* DISPLAY */
1132         { 0x32, KEY_REWIND },           /* LOOP */
1133         { 0x02, KEY_PRINT },            /* PREVIEW */
1134
1135         { 0x2a, KEY_SEARCH },           /* AUTOSCAN */
1136         { 0x1a, KEY_SLEEP },            /* FREEZE */
1137         { 0x3a, KEY_CAMERA },           /* SNAPSHOT */
1138         { 0x0a, KEY_MUTE },             /* MUTE */
1139
1140         { 0x26, KEY_RECORD },           /* RECORD */
1141         { 0x16, KEY_PAUSE },            /* PAUSE */
1142         { 0x36, KEY_STOP },             /* STOP */
1143         { 0x06, KEY_PLAY },             /* PLAY */
1144
1145         { 0x2e, KEY_RED },              /* RED */
1146         { 0x21, KEY_GREEN },            /* GREEN */
1147         { 0x0e, KEY_YELLOW },           /* YELLOW */
1148         { 0x01, KEY_BLUE },             /* BLUE */
1149
1150         { 0x1e, KEY_VOLUMEDOWN },       /* VOLUME- */
1151         { 0x3e, KEY_VOLUMEUP },         /* VOLUME+ */
1152         { 0x11, KEY_CHANNELDOWN },      /* CHANNEL/PAGE- */
1153         { 0x31, KEY_CHANNELUP }         /* CHANNEL/PAGE+ */
1154 };
1155 IR_TABLE(avermedia, IR_TYPE_UNKNOWN, ir_codes_avermedia);
1156
1157 static struct ir_scancode ir_codes_videomate_tv_pvr[] = {
1158         { 0x14, KEY_MUTE },
1159         { 0x24, KEY_ZOOM },
1160
1161         { 0x01, KEY_DVD },
1162         { 0x23, KEY_RADIO },
1163         { 0x00, KEY_TV },
1164
1165         { 0x0a, KEY_REWIND },
1166         { 0x08, KEY_PLAYPAUSE },
1167         { 0x0f, KEY_FORWARD },
1168
1169         { 0x02, KEY_PREVIOUS },
1170         { 0x07, KEY_STOP },
1171         { 0x06, KEY_NEXT },
1172
1173         { 0x0c, KEY_UP },
1174         { 0x0e, KEY_DOWN },
1175         { 0x0b, KEY_LEFT },
1176         { 0x0d, KEY_RIGHT },
1177         { 0x11, KEY_OK },
1178
1179         { 0x03, KEY_MENU },
1180         { 0x09, KEY_SETUP },
1181         { 0x05, KEY_VIDEO },
1182         { 0x22, KEY_CHANNEL },
1183
1184         { 0x12, KEY_VOLUMEUP },
1185         { 0x15, KEY_VOLUMEDOWN },
1186         { 0x10, KEY_CHANNELUP },
1187         { 0x13, KEY_CHANNELDOWN },
1188
1189         { 0x04, KEY_RECORD },
1190
1191         { 0x16, KEY_1 },
1192         { 0x17, KEY_2 },
1193         { 0x18, KEY_3 },
1194         { 0x19, KEY_4 },
1195         { 0x1a, KEY_5 },
1196         { 0x1b, KEY_6 },
1197         { 0x1c, KEY_7 },
1198         { 0x1d, KEY_8 },
1199         { 0x1e, KEY_9 },
1200         { 0x1f, KEY_0 },
1201
1202         { 0x20, KEY_LANGUAGE },
1203         { 0x21, KEY_SLEEP },
1204 };
1205 IR_TABLE(videomate_tv_pvr, IR_TYPE_UNKNOWN, ir_codes_videomate_tv_pvr);
1206
1207 /* Michael Tokarev <mjt@tls.msk.ru>
1208    http://www.corpit.ru/mjt/beholdTV/remote_control.jpg
1209    keytable is used by MANLI MTV00[0x0c] and BeholdTV 40[13] at
1210    least, and probably other cards too.
1211    The "ascii-art picture" below (in comments, first row
1212    is the keycode in hex, and subsequent row(s) shows
1213    the button labels (several variants when appropriate)
1214    helps to descide which keycodes to assign to the buttons.
1215  */
1216 static struct ir_scancode ir_codes_manli[] = {
1217
1218         /*  0x1c            0x12  *
1219          * FUNCTION         POWER *
1220          *   FM              (|)  *
1221          *                        */
1222         { 0x1c, KEY_RADIO },    /*XXX*/
1223         { 0x12, KEY_POWER },
1224
1225         /*  0x01    0x02    0x03  *
1226          *   1       2       3    *
1227          *                        *
1228          *  0x04    0x05    0x06  *
1229          *   4       5       6    *
1230          *                        *
1231          *  0x07    0x08    0x09  *
1232          *   7       8       9    *
1233          *                        */
1234         { 0x01, KEY_1 },
1235         { 0x02, KEY_2 },
1236         { 0x03, KEY_3 },
1237         { 0x04, KEY_4 },
1238         { 0x05, KEY_5 },
1239         { 0x06, KEY_6 },
1240         { 0x07, KEY_7 },
1241         { 0x08, KEY_8 },
1242         { 0x09, KEY_9 },
1243
1244         /*  0x0a    0x00    0x17  *
1245          * RECALL    0      +100  *
1246          *                  PLUS  *
1247          *                        */
1248         { 0x0a, KEY_AGAIN },    /*XXX KEY_REWIND? */
1249         { 0x00, KEY_0 },
1250         { 0x17, KEY_DIGITS },   /*XXX*/
1251
1252         /*  0x14            0x10  *
1253          *  MENU            INFO  *
1254          *  OSD                   */
1255         { 0x14, KEY_MENU },
1256         { 0x10, KEY_INFO },
1257
1258         /*          0x0b          *
1259          *           Up           *
1260          *                        *
1261          *  0x18    0x16    0x0c  *
1262          *  Left     Ok     Right *
1263          *                        *
1264          *         0x015          *
1265          *         Down           *
1266          *                        */
1267         { 0x0b, KEY_UP },
1268         { 0x18, KEY_LEFT },
1269         { 0x16, KEY_OK },       /*XXX KEY_SELECT? KEY_ENTER? */
1270         { 0x0c, KEY_RIGHT },
1271         { 0x15, KEY_DOWN },
1272
1273         /*  0x11            0x0d  *
1274          *  TV/AV           MODE  *
1275          *  SOURCE         STEREO *
1276          *                        */
1277         { 0x11, KEY_TV },       /*XXX*/
1278         { 0x0d, KEY_MODE },     /*XXX there's no KEY_STEREO     */
1279
1280         /*  0x0f    0x1b    0x1a  *
1281          *  AUDIO   Vol+    Chan+ *
1282          *        TIMESHIFT???    *
1283          *                        *
1284          *  0x0e    0x1f    0x1e  *
1285          *  SLEEP   Vol-    Chan- *
1286          *                        */
1287         { 0x0f, KEY_AUDIO },
1288         { 0x1b, KEY_VOLUMEUP },
1289         { 0x1a, KEY_CHANNELUP },
1290         { 0x0e, KEY_TIME },
1291         { 0x1f, KEY_VOLUMEDOWN },
1292         { 0x1e, KEY_CHANNELDOWN },
1293
1294         /*         0x13     0x19  *
1295          *         MUTE   SNAPSHOT*
1296          *                        */
1297         { 0x13, KEY_MUTE },
1298         { 0x19, KEY_CAMERA },
1299
1300         /* 0x1d unused ? */
1301 };
1302 IR_TABLE(manli, IR_TYPE_UNKNOWN, ir_codes_manli);
1303
1304 /* Mike Baikov <mike@baikov.com> */
1305 static struct ir_scancode ir_codes_gotview7135[] = {
1306
1307         { 0x11, KEY_POWER },
1308         { 0x35, KEY_TV },
1309         { 0x1b, KEY_0 },
1310         { 0x29, KEY_1 },
1311         { 0x19, KEY_2 },
1312         { 0x39, KEY_3 },
1313         { 0x1f, KEY_4 },
1314         { 0x2c, KEY_5 },
1315         { 0x21, KEY_6 },
1316         { 0x24, KEY_7 },
1317         { 0x18, KEY_8 },
1318         { 0x2b, KEY_9 },
1319         { 0x3b, KEY_AGAIN },    /* LOOP */
1320         { 0x06, KEY_AUDIO },
1321         { 0x31, KEY_PRINT },    /* PREVIEW */
1322         { 0x3e, KEY_VIDEO },
1323         { 0x10, KEY_CHANNELUP },
1324         { 0x20, KEY_CHANNELDOWN },
1325         { 0x0c, KEY_VOLUMEDOWN },
1326         { 0x28, KEY_VOLUMEUP },
1327         { 0x08, KEY_MUTE },
1328         { 0x26, KEY_SEARCH },   /* SCAN */
1329         { 0x3f, KEY_CAMERA },   /* SNAPSHOT */
1330         { 0x12, KEY_RECORD },
1331         { 0x32, KEY_STOP },
1332         { 0x3c, KEY_PLAY },
1333         { 0x1d, KEY_REWIND },
1334         { 0x2d, KEY_PAUSE },
1335         { 0x0d, KEY_FORWARD },
1336         { 0x05, KEY_ZOOM },     /*FULL*/
1337
1338         { 0x2a, KEY_F21 },      /* LIVE TIMESHIFT */
1339         { 0x0e, KEY_F22 },      /* MIN TIMESHIFT */
1340         { 0x1e, KEY_TIME },     /* TIMESHIFT */
1341         { 0x38, KEY_F24 },      /* NORMAL TIMESHIFT */
1342 };
1343 IR_TABLE(gotview7135, IR_TYPE_UNKNOWN, ir_codes_gotview7135);
1344
1345 static struct ir_scancode ir_codes_purpletv[] = {
1346         { 0x03, KEY_POWER },
1347         { 0x6f, KEY_MUTE },
1348         { 0x10, KEY_BACKSPACE },        /* Recall */
1349
1350         { 0x11, KEY_0 },
1351         { 0x04, KEY_1 },
1352         { 0x05, KEY_2 },
1353         { 0x06, KEY_3 },
1354         { 0x08, KEY_4 },
1355         { 0x09, KEY_5 },
1356         { 0x0a, KEY_6 },
1357         { 0x0c, KEY_7 },
1358         { 0x0d, KEY_8 },
1359         { 0x0e, KEY_9 },
1360         { 0x12, KEY_DOT },      /* 100+ */
1361
1362         { 0x07, KEY_VOLUMEUP },
1363         { 0x0b, KEY_VOLUMEDOWN },
1364         { 0x1a, KEY_KPPLUS },
1365         { 0x18, KEY_KPMINUS },
1366         { 0x15, KEY_UP },
1367         { 0x1d, KEY_DOWN },
1368         { 0x0f, KEY_CHANNELUP },
1369         { 0x13, KEY_CHANNELDOWN },
1370         { 0x48, KEY_ZOOM },
1371
1372         { 0x1b, KEY_VIDEO },    /* Video source */
1373         { 0x1f, KEY_CAMERA },   /* Snapshot */
1374         { 0x49, KEY_LANGUAGE }, /* MTS Select */
1375         { 0x19, KEY_SEARCH },   /* Auto Scan */
1376
1377         { 0x4b, KEY_RECORD },
1378         { 0x46, KEY_PLAY },
1379         { 0x45, KEY_PAUSE },    /* Pause */
1380         { 0x44, KEY_STOP },
1381         { 0x43, KEY_TIME },     /* Time Shift */
1382         { 0x17, KEY_CHANNEL },  /* SURF CH */
1383         { 0x40, KEY_FORWARD },  /* Forward ? */
1384         { 0x42, KEY_REWIND },   /* Backward ? */
1385
1386 };
1387 IR_TABLE(purpletv, IR_TYPE_UNKNOWN, ir_codes_purpletv);
1388
1389 /* Mapping for the 28 key remote control as seen at
1390    http://www.sednacomputer.com/photo/cardbus-tv.jpg
1391    Pavel Mihaylov <bin@bash.info>
1392    Also for the remote bundled with Kozumi KTV-01C card */
1393 static struct ir_scancode ir_codes_pctv_sedna[] = {
1394         { 0x00, KEY_0 },
1395         { 0x01, KEY_1 },
1396         { 0x02, KEY_2 },
1397         { 0x03, KEY_3 },
1398         { 0x04, KEY_4 },
1399         { 0x05, KEY_5 },
1400         { 0x06, KEY_6 },
1401         { 0x07, KEY_7 },
1402         { 0x08, KEY_8 },
1403         { 0x09, KEY_9 },
1404
1405         { 0x0a, KEY_AGAIN },    /* Recall */
1406         { 0x0b, KEY_CHANNELUP },
1407         { 0x0c, KEY_VOLUMEUP },
1408         { 0x0d, KEY_MODE },     /* Stereo */
1409         { 0x0e, KEY_STOP },
1410         { 0x0f, KEY_PREVIOUSSONG },
1411         { 0x10, KEY_ZOOM },
1412         { 0x11, KEY_TUNER },    /* Source */
1413         { 0x12, KEY_POWER },
1414         { 0x13, KEY_MUTE },
1415         { 0x15, KEY_CHANNELDOWN },
1416         { 0x18, KEY_VOLUMEDOWN },
1417         { 0x19, KEY_CAMERA },   /* Snapshot */
1418         { 0x1a, KEY_NEXTSONG },
1419         { 0x1b, KEY_TIME },     /* Time Shift */
1420         { 0x1c, KEY_RADIO },    /* FM Radio */
1421         { 0x1d, KEY_RECORD },
1422         { 0x1e, KEY_PAUSE },
1423         /* additional codes for Kozumi's remote */
1424         { 0x14, KEY_INFO },     /* OSD */
1425         { 0x16, KEY_OK },       /* OK */
1426         { 0x17, KEY_DIGITS },   /* Plus */
1427         { 0x1f, KEY_PLAY },     /* Play */
1428 };
1429 IR_TABLE(pctv_sedna, IR_TYPE_UNKNOWN, ir_codes_pctv_sedna);
1430
1431 /* Mark Phalan <phalanm@o2.ie> */
1432 static struct ir_scancode ir_codes_pv951[] = {
1433         { 0x00, KEY_0 },
1434         { 0x01, KEY_1 },
1435         { 0x02, KEY_2 },
1436         { 0x03, KEY_3 },
1437         { 0x04, KEY_4 },
1438         { 0x05, KEY_5 },
1439         { 0x06, KEY_6 },
1440         { 0x07, KEY_7 },
1441         { 0x08, KEY_8 },
1442         { 0x09, KEY_9 },
1443
1444         { 0x12, KEY_POWER },
1445         { 0x10, KEY_MUTE },
1446         { 0x1f, KEY_VOLUMEDOWN },
1447         { 0x1b, KEY_VOLUMEUP },
1448         { 0x1a, KEY_CHANNELUP },
1449         { 0x1e, KEY_CHANNELDOWN },
1450         { 0x0e, KEY_PAGEUP },
1451         { 0x1d, KEY_PAGEDOWN },
1452         { 0x13, KEY_SOUND },
1453
1454         { 0x18, KEY_KPPLUSMINUS },      /* CH +/- */
1455         { 0x16, KEY_SUBTITLE },         /* CC */
1456         { 0x0d, KEY_TEXT },             /* TTX */
1457         { 0x0b, KEY_TV },               /* AIR/CBL */
1458         { 0x11, KEY_PC },               /* PC/TV */
1459         { 0x17, KEY_OK },               /* CH RTN */
1460         { 0x19, KEY_MODE },             /* FUNC */
1461         { 0x0c, KEY_SEARCH },           /* AUTOSCAN */
1462
1463         /* Not sure what to do with these ones! */
1464         { 0x0f, KEY_SELECT },           /* SOURCE */
1465         { 0x0a, KEY_KPPLUS },           /* +100 */
1466         { 0x14, KEY_EQUAL },            /* SYNC */
1467         { 0x1c, KEY_MEDIA },            /* PC/TV */
1468 };
1469 IR_TABLE(pv951, IR_TYPE_UNKNOWN, ir_codes_pv951);
1470
1471 /* generic RC5 keytable                                          */
1472 /* see http://users.pandora.be/nenya/electronics/rc5/codes00.htm */
1473 /* used by old (black) Hauppauge remotes                         */
1474 static struct ir_scancode ir_codes_rc5_tv[] = {
1475         /* Keys 0 to 9 */
1476         { 0x00, KEY_0 },
1477         { 0x01, KEY_1 },
1478         { 0x02, KEY_2 },
1479         { 0x03, KEY_3 },
1480         { 0x04, KEY_4 },
1481         { 0x05, KEY_5 },
1482         { 0x06, KEY_6 },
1483         { 0x07, KEY_7 },
1484         { 0x08, KEY_8 },
1485         { 0x09, KEY_9 },
1486
1487         { 0x0b, KEY_CHANNEL },          /* channel / program (japan: 11) */
1488         { 0x0c, KEY_POWER },            /* standby */
1489         { 0x0d, KEY_MUTE },             /* mute / demute */
1490         { 0x0f, KEY_TV },               /* display */
1491         { 0x10, KEY_VOLUMEUP },
1492         { 0x11, KEY_VOLUMEDOWN },
1493         { 0x12, KEY_BRIGHTNESSUP },
1494         { 0x13, KEY_BRIGHTNESSDOWN },
1495         { 0x1e, KEY_SEARCH },           /* search + */
1496         { 0x20, KEY_CHANNELUP },        /* channel / program + */
1497         { 0x21, KEY_CHANNELDOWN },      /* channel / program - */
1498         { 0x22, KEY_CHANNEL },          /* alt / channel */
1499         { 0x23, KEY_LANGUAGE },         /* 1st / 2nd language */
1500         { 0x26, KEY_SLEEP },            /* sleeptimer */
1501         { 0x2e, KEY_MENU },             /* 2nd controls (USA: menu) */
1502         { 0x30, KEY_PAUSE },
1503         { 0x32, KEY_REWIND },
1504         { 0x33, KEY_GOTO },
1505         { 0x35, KEY_PLAY },
1506         { 0x36, KEY_STOP },
1507         { 0x37, KEY_RECORD },           /* recording */
1508         { 0x3c, KEY_TEXT },             /* teletext submode (Japan: 12) */
1509         { 0x3d, KEY_SUSPEND },          /* system standby */
1510
1511 };
1512 IR_TABLE(rc5_tv, IR_TYPE_UNKNOWN, ir_codes_rc5_tv);
1513
1514 /* Table for Leadtek Winfast Remote Controls - used by both bttv and cx88 */
1515 static struct ir_scancode ir_codes_winfast[] = {
1516         /* Keys 0 to 9 */
1517         { 0x12, KEY_0 },
1518         { 0x05, KEY_1 },
1519         { 0x06, KEY_2 },
1520         { 0x07, KEY_3 },
1521         { 0x09, KEY_4 },
1522         { 0x0a, KEY_5 },
1523         { 0x0b, KEY_6 },
1524         { 0x0d, KEY_7 },
1525         { 0x0e, KEY_8 },
1526         { 0x0f, KEY_9 },
1527
1528         { 0x00, KEY_POWER },
1529         { 0x1b, KEY_AUDIO },            /* Audio Source */
1530         { 0x02, KEY_TUNER },            /* TV/FM, not on Y0400052 */
1531         { 0x1e, KEY_VIDEO },            /* Video Source */
1532         { 0x16, KEY_INFO },             /* Display information */
1533         { 0x04, KEY_VOLUMEUP },
1534         { 0x08, KEY_VOLUMEDOWN },
1535         { 0x0c, KEY_CHANNELUP },
1536         { 0x10, KEY_CHANNELDOWN },
1537         { 0x03, KEY_ZOOM },             /* fullscreen */
1538         { 0x1f, KEY_TEXT },             /* closed caption/teletext */
1539         { 0x20, KEY_SLEEP },
1540         { 0x29, KEY_CLEAR },            /* boss key */
1541         { 0x14, KEY_MUTE },
1542         { 0x2b, KEY_RED },
1543         { 0x2c, KEY_GREEN },
1544         { 0x2d, KEY_YELLOW },
1545         { 0x2e, KEY_BLUE },
1546         { 0x18, KEY_KPPLUS },           /* fine tune + , not on Y040052 */
1547         { 0x19, KEY_KPMINUS },          /* fine tune - , not on Y040052 */
1548         { 0x2a, KEY_MEDIA },            /* PIP (Picture in picture */
1549         { 0x21, KEY_DOT },
1550         { 0x13, KEY_ENTER },
1551         { 0x11, KEY_LAST },             /* Recall (last channel */
1552         { 0x22, KEY_PREVIOUS },
1553         { 0x23, KEY_PLAYPAUSE },
1554         { 0x24, KEY_NEXT },
1555         { 0x25, KEY_TIME },             /* Time Shifting */
1556         { 0x26, KEY_STOP },
1557         { 0x27, KEY_RECORD },
1558         { 0x28, KEY_SAVE },             /* Screenshot */
1559         { 0x2f, KEY_MENU },
1560         { 0x30, KEY_CANCEL },
1561         { 0x31, KEY_CHANNEL },          /* Channel Surf */
1562         { 0x32, KEY_SUBTITLE },
1563         { 0x33, KEY_LANGUAGE },
1564         { 0x34, KEY_REWIND },
1565         { 0x35, KEY_FASTFORWARD },
1566         { 0x36, KEY_TV },
1567         { 0x37, KEY_RADIO },            /* FM */
1568         { 0x38, KEY_DVD },
1569
1570         { 0x1a, KEY_MODE},              /* change to MCE mode on Y04G0051 */
1571         { 0x3e, KEY_F21 },              /* MCE +VOL, on Y04G0033 */
1572         { 0x3a, KEY_F22 },              /* MCE -VOL, on Y04G0033 */
1573         { 0x3b, KEY_F23 },              /* MCE +CH,  on Y04G0033 */
1574         { 0x3f, KEY_F24 }               /* MCE -CH,  on Y04G0033 */
1575 };
1576 IR_TABLE(winfast, IR_TYPE_UNKNOWN, ir_codes_winfast);
1577
1578 static struct ir_scancode ir_codes_pinnacle_color[] = {
1579         { 0x59, KEY_MUTE },
1580         { 0x4a, KEY_POWER },
1581
1582         { 0x18, KEY_TEXT },
1583         { 0x26, KEY_TV },
1584         { 0x3d, KEY_PRINT },
1585
1586         { 0x48, KEY_RED },
1587         { 0x04, KEY_GREEN },
1588         { 0x11, KEY_YELLOW },
1589         { 0x00, KEY_BLUE },
1590
1591         { 0x2d, KEY_VOLUMEUP },
1592         { 0x1e, KEY_VOLUMEDOWN },
1593
1594         { 0x49, KEY_MENU },
1595
1596         { 0x16, KEY_CHANNELUP },
1597         { 0x17, KEY_CHANNELDOWN },
1598
1599         { 0x20, KEY_UP },
1600         { 0x21, KEY_DOWN },
1601         { 0x22, KEY_LEFT },
1602         { 0x23, KEY_RIGHT },
1603         { 0x0d, KEY_SELECT },
1604
1605         { 0x08, KEY_BACK },
1606         { 0x07, KEY_REFRESH },
1607
1608         { 0x2f, KEY_ZOOM },
1609         { 0x29, KEY_RECORD },
1610
1611         { 0x4b, KEY_PAUSE },
1612         { 0x4d, KEY_REWIND },
1613         { 0x2e, KEY_PLAY },
1614         { 0x4e, KEY_FORWARD },
1615         { 0x53, KEY_PREVIOUS },
1616         { 0x4c, KEY_STOP },
1617         { 0x54, KEY_NEXT },
1618
1619         { 0x69, KEY_0 },
1620         { 0x6a, KEY_1 },
1621         { 0x6b, KEY_2 },
1622         { 0x6c, KEY_3 },
1623         { 0x6d, KEY_4 },
1624         { 0x6e, KEY_5 },
1625         { 0x6f, KEY_6 },
1626         { 0x70, KEY_7 },
1627         { 0x71, KEY_8 },
1628         { 0x72, KEY_9 },
1629
1630         { 0x74, KEY_CHANNEL },
1631         { 0x0a, KEY_BACKSPACE },
1632 };
1633 IR_TABLE(pinnacle_color, IR_TYPE_UNKNOWN, ir_codes_pinnacle_color);
1634
1635 /* Hauppauge: the newer, gray remotes (seems there are multiple
1636  * slightly different versions), shipped with cx88+ivtv cards.
1637  * almost rc5 coding, but some non-standard keys */
1638 static struct ir_scancode ir_codes_hauppauge_new[] = {
1639         /* Keys 0 to 9 */
1640         { 0x00, KEY_0 },
1641         { 0x01, KEY_1 },
1642         { 0x02, KEY_2 },
1643         { 0x03, KEY_3 },
1644         { 0x04, KEY_4 },
1645         { 0x05, KEY_5 },
1646         { 0x06, KEY_6 },
1647         { 0x07, KEY_7 },
1648         { 0x08, KEY_8 },
1649         { 0x09, KEY_9 },
1650
1651         { 0x0a, KEY_TEXT },             /* keypad asterisk as well */
1652         { 0x0b, KEY_RED },              /* red button */
1653         { 0x0c, KEY_RADIO },
1654         { 0x0d, KEY_MENU },
1655         { 0x0e, KEY_SUBTITLE },         /* also the # key */
1656         { 0x0f, KEY_MUTE },
1657         { 0x10, KEY_VOLUMEUP },
1658         { 0x11, KEY_VOLUMEDOWN },
1659         { 0x12, KEY_PREVIOUS },         /* previous channel */
1660         { 0x14, KEY_UP },
1661         { 0x15, KEY_DOWN },
1662         { 0x16, KEY_LEFT },
1663         { 0x17, KEY_RIGHT },
1664         { 0x18, KEY_VIDEO },            /* Videos */
1665         { 0x19, KEY_AUDIO },            /* Music */
1666         /* 0x1a: Pictures - presume this means
1667            "Multimedia Home Platform" -
1668            no "PICTURES" key in input.h
1669          */
1670         { 0x1a, KEY_MHP },
1671
1672         { 0x1b, KEY_EPG },              /* Guide */
1673         { 0x1c, KEY_TV },
1674         { 0x1e, KEY_NEXTSONG },         /* skip >| */
1675         { 0x1f, KEY_EXIT },             /* back/exit */
1676         { 0x20, KEY_CHANNELUP },        /* channel / program + */
1677         { 0x21, KEY_CHANNELDOWN },      /* channel / program - */
1678         { 0x22, KEY_CHANNEL },          /* source (old black remote) */
1679         { 0x24, KEY_PREVIOUSSONG },     /* replay |< */
1680         { 0x25, KEY_ENTER },            /* OK */
1681         { 0x26, KEY_SLEEP },            /* minimize (old black remote) */
1682         { 0x29, KEY_BLUE },             /* blue key */
1683         { 0x2e, KEY_GREEN },            /* green button */
1684         { 0x30, KEY_PAUSE },            /* pause */
1685         { 0x32, KEY_REWIND },           /* backward << */
1686         { 0x34, KEY_FASTFORWARD },      /* forward >> */
1687         { 0x35, KEY_PLAY },
1688         { 0x36, KEY_STOP },
1689         { 0x37, KEY_RECORD },           /* recording */
1690         { 0x38, KEY_YELLOW },           /* yellow key */
1691         { 0x3b, KEY_SELECT },           /* top right button */
1692         { 0x3c, KEY_ZOOM },             /* full */
1693         { 0x3d, KEY_POWER },            /* system power (green button) */
1694 };
1695 IR_TABLE(hauppauge_new, IR_TYPE_UNKNOWN, ir_codes_hauppauge_new);
1696
1697 static struct ir_scancode ir_codes_npgtech[] = {
1698         { 0x1d, KEY_SWITCHVIDEOMODE },  /* switch inputs */
1699         { 0x2a, KEY_FRONT },
1700
1701         { 0x3e, KEY_1 },
1702         { 0x02, KEY_2 },
1703         { 0x06, KEY_3 },
1704         { 0x0a, KEY_4 },
1705         { 0x0e, KEY_5 },
1706         { 0x12, KEY_6 },
1707         { 0x16, KEY_7 },
1708         { 0x1a, KEY_8 },
1709         { 0x1e, KEY_9 },
1710         { 0x3a, KEY_0 },
1711         { 0x22, KEY_NUMLOCK },          /* -/-- */
1712         { 0x20, KEY_REFRESH },
1713
1714         { 0x03, KEY_BRIGHTNESSDOWN },
1715         { 0x28, KEY_AUDIO },
1716         { 0x3c, KEY_CHANNELUP },
1717         { 0x3f, KEY_VOLUMEDOWN },
1718         { 0x2e, KEY_MUTE },
1719         { 0x3b, KEY_VOLUMEUP },
1720         { 0x00, KEY_CHANNELDOWN },
1721         { 0x07, KEY_BRIGHTNESSUP },
1722         { 0x2c, KEY_TEXT },
1723
1724         { 0x37, KEY_RECORD },
1725         { 0x17, KEY_PLAY },
1726         { 0x13, KEY_PAUSE },
1727         { 0x26, KEY_STOP },
1728         { 0x18, KEY_FASTFORWARD },
1729         { 0x14, KEY_REWIND },
1730         { 0x33, KEY_ZOOM },
1731         { 0x32, KEY_KEYBOARD },
1732         { 0x30, KEY_GOTO },             /* Pointing arrow */
1733         { 0x36, KEY_MACRO },            /* Maximize/Minimize (yellow) */
1734         { 0x0b, KEY_RADIO },
1735         { 0x10, KEY_POWER },
1736
1737 };
1738 IR_TABLE(npgtech, IR_TYPE_UNKNOWN, ir_codes_npgtech);
1739
1740 /* Norwood Micro (non-Pro) TV Tuner
1741    By Peter Naulls <peter@chocky.org>
1742    Key comments are the functions given in the manual */
1743 static struct ir_scancode ir_codes_norwood[] = {
1744         /* Keys 0 to 9 */
1745         { 0x20, KEY_0 },
1746         { 0x21, KEY_1 },
1747         { 0x22, KEY_2 },
1748         { 0x23, KEY_3 },
1749         { 0x24, KEY_4 },
1750         { 0x25, KEY_5 },
1751         { 0x26, KEY_6 },
1752         { 0x27, KEY_7 },
1753         { 0x28, KEY_8 },
1754         { 0x29, KEY_9 },
1755
1756         { 0x78, KEY_TUNER },            /* Video Source        */
1757         { 0x2c, KEY_EXIT },             /* Open/Close software */
1758         { 0x2a, KEY_SELECT },           /* 2 Digit Select      */
1759         { 0x69, KEY_AGAIN },            /* Recall              */
1760
1761         { 0x32, KEY_BRIGHTNESSUP },     /* Brightness increase */
1762         { 0x33, KEY_BRIGHTNESSDOWN },   /* Brightness decrease */
1763         { 0x6b, KEY_KPPLUS },           /* (not named >>>>>)   */
1764         { 0x6c, KEY_KPMINUS },          /* (not named <<<<<)   */
1765
1766         { 0x2d, KEY_MUTE },             /* Mute                */
1767         { 0x30, KEY_VOLUMEUP },         /* Volume up           */
1768         { 0x31, KEY_VOLUMEDOWN },       /* Volume down         */
1769         { 0x60, KEY_CHANNELUP },        /* Channel up          */
1770         { 0x61, KEY_CHANNELDOWN },      /* Channel down        */
1771
1772         { 0x3f, KEY_RECORD },           /* Record              */
1773         { 0x37, KEY_PLAY },             /* Play                */
1774         { 0x36, KEY_PAUSE },            /* Pause               */
1775         { 0x2b, KEY_STOP },             /* Stop                */
1776         { 0x67, KEY_FASTFORWARD },      /* Foward              */
1777         { 0x66, KEY_REWIND },           /* Rewind              */
1778         { 0x3e, KEY_SEARCH },           /* Auto Scan           */
1779         { 0x2e, KEY_CAMERA },           /* Capture Video       */
1780         { 0x6d, KEY_MENU },             /* Show/Hide Control   */
1781         { 0x2f, KEY_ZOOM },             /* Full Screen         */
1782         { 0x34, KEY_RADIO },            /* FM                  */
1783         { 0x65, KEY_POWER },            /* Computer power      */
1784 };
1785 IR_TABLE(norwood, IR_TYPE_UNKNOWN, ir_codes_norwood);
1786
1787 /* From reading the following remotes:
1788  * Zenith Universal 7 / TV Mode 807 / VCR Mode 837
1789  * Hauppauge (from NOVA-CI-s box product)
1790  * This is a "middle of the road" approach, differences are noted
1791  */
1792 static struct ir_scancode ir_codes_budget_ci_old[] = {
1793         { 0x00, KEY_0 },
1794         { 0x01, KEY_1 },
1795         { 0x02, KEY_2 },
1796         { 0x03, KEY_3 },
1797         { 0x04, KEY_4 },
1798         { 0x05, KEY_5 },
1799         { 0x06, KEY_6 },
1800         { 0x07, KEY_7 },
1801         { 0x08, KEY_8 },
1802         { 0x09, KEY_9 },
1803         { 0x0a, KEY_ENTER },
1804         { 0x0b, KEY_RED },
1805         { 0x0c, KEY_POWER },            /* RADIO on Hauppauge */
1806         { 0x0d, KEY_MUTE },
1807         { 0x0f, KEY_A },                /* TV on Hauppauge */
1808         { 0x10, KEY_VOLUMEUP },
1809         { 0x11, KEY_VOLUMEDOWN },
1810         { 0x14, KEY_B },
1811         { 0x1c, KEY_UP },
1812         { 0x1d, KEY_DOWN },
1813         { 0x1e, KEY_OPTION },           /* RESERVED on Hauppauge */
1814         { 0x1f, KEY_BREAK },
1815         { 0x20, KEY_CHANNELUP },
1816         { 0x21, KEY_CHANNELDOWN },
1817         { 0x22, KEY_PREVIOUS },         /* Prev Ch on Zenith, SOURCE on Hauppauge */
1818         { 0x24, KEY_RESTART },
1819         { 0x25, KEY_OK },
1820         { 0x26, KEY_CYCLEWINDOWS },     /* MINIMIZE on Hauppauge */
1821         { 0x28, KEY_ENTER },            /* VCR mode on Zenith */
1822         { 0x29, KEY_PAUSE },
1823         { 0x2b, KEY_RIGHT },
1824         { 0x2c, KEY_LEFT },
1825         { 0x2e, KEY_MENU },             /* FULL SCREEN on Hauppauge */
1826         { 0x30, KEY_SLOW },
1827         { 0x31, KEY_PREVIOUS },         /* VCR mode on Zenith */
1828         { 0x32, KEY_REWIND },
1829         { 0x34, KEY_FASTFORWARD },
1830         { 0x35, KEY_PLAY },
1831         { 0x36, KEY_STOP },
1832         { 0x37, KEY_RECORD },
1833         { 0x38, KEY_TUNER },            /* TV/VCR on Zenith */
1834         { 0x3a, KEY_C },
1835         { 0x3c, KEY_EXIT },
1836         { 0x3d, KEY_POWER2 },
1837         { 0x3e, KEY_TUNER },
1838 };
1839 IR_TABLE(budget_ci_old, IR_TYPE_UNKNOWN, ir_codes_budget_ci_old);
1840
1841 /*
1842  * Marc Fargas <telenieko@telenieko.com>
1843  * this is the remote control that comes with the asus p7131
1844  * which has a label saying is "Model PC-39"
1845  */
1846 static struct ir_scancode ir_codes_asus_pc39[] = {
1847         /* Keys 0 to 9 */
1848         { 0x15, KEY_0 },
1849         { 0x29, KEY_1 },
1850         { 0x2d, KEY_2 },
1851         { 0x2b, KEY_3 },
1852         { 0x09, KEY_4 },
1853         { 0x0d, KEY_5 },
1854         { 0x0b, KEY_6 },
1855         { 0x31, KEY_7 },
1856         { 0x35, KEY_8 },
1857         { 0x33, KEY_9 },
1858
1859         { 0x3e, KEY_RADIO },            /* radio */
1860         { 0x03, KEY_MENU },             /* dvd/menu */
1861         { 0x2a, KEY_VOLUMEUP },
1862         { 0x19, KEY_VOLUMEDOWN },
1863         { 0x37, KEY_UP },
1864         { 0x3b, KEY_DOWN },
1865         { 0x27, KEY_LEFT },
1866         { 0x2f, KEY_RIGHT },
1867         { 0x25, KEY_VIDEO },            /* video */
1868         { 0x39, KEY_AUDIO },            /* music */
1869
1870         { 0x21, KEY_TV },               /* tv */
1871         { 0x1d, KEY_EXIT },             /* back */
1872         { 0x0a, KEY_CHANNELUP },        /* channel / program + */
1873         { 0x1b, KEY_CHANNELDOWN },      /* channel / program - */
1874         { 0x1a, KEY_ENTER },            /* enter */
1875
1876         { 0x06, KEY_PAUSE },            /* play/pause */
1877         { 0x1e, KEY_PREVIOUS },         /* rew */
1878         { 0x26, KEY_NEXT },             /* forward */
1879         { 0x0e, KEY_REWIND },           /* backward << */
1880         { 0x3a, KEY_FASTFORWARD },      /* forward >> */
1881         { 0x36, KEY_STOP },
1882         { 0x2e, KEY_RECORD },           /* recording */
1883         { 0x16, KEY_POWER },            /* the button that reads "close" */
1884
1885         { 0x11, KEY_ZOOM },             /* full screen */
1886         { 0x13, KEY_MACRO },            /* recall */
1887         { 0x23, KEY_HOME },             /* home */
1888         { 0x05, KEY_PVR },              /* picture */
1889         { 0x3d, KEY_MUTE },             /* mute */
1890         { 0x01, KEY_DVD },              /* dvd */
1891 };
1892 IR_TABLE(asus_pc39, IR_TYPE_UNKNOWN, ir_codes_asus_pc39);
1893
1894 /* Encore ENLTV-FM  - black plastic, white front cover with white glowing buttons
1895     Juan Pablo Sormani <sorman@gmail.com> */
1896 static struct ir_scancode ir_codes_encore_enltv[] = {
1897
1898         /* Power button does nothing, neither in Windows app,
1899          although it sends data (used for BIOS wakeup?) */
1900         { 0x0d, KEY_MUTE },
1901
1902         { 0x1e, KEY_TV },
1903         { 0x00, KEY_VIDEO },
1904         { 0x01, KEY_AUDIO },            /* music */
1905         { 0x02, KEY_MHP },              /* picture */
1906
1907         { 0x1f, KEY_1 },
1908         { 0x03, KEY_2 },
1909         { 0x04, KEY_3 },
1910         { 0x05, KEY_4 },
1911         { 0x1c, KEY_5 },
1912         { 0x06, KEY_6 },
1913         { 0x07, KEY_7 },
1914         { 0x08, KEY_8 },
1915         { 0x1d, KEY_9 },
1916         { 0x0a, KEY_0 },
1917
1918         { 0x09, KEY_LIST },             /* -/-- */
1919         { 0x0b, KEY_LAST },             /* recall */
1920
1921         { 0x14, KEY_HOME },             /* win start menu */
1922         { 0x15, KEY_EXIT },             /* exit */
1923         { 0x16, KEY_CHANNELUP },        /* UP */
1924         { 0x12, KEY_CHANNELDOWN },      /* DOWN */
1925         { 0x0c, KEY_VOLUMEUP },         /* RIGHT */
1926         { 0x17, KEY_VOLUMEDOWN },       /* LEFT */
1927
1928         { 0x18, KEY_ENTER },            /* OK */
1929
1930         { 0x0e, KEY_ESC },
1931         { 0x13, KEY_CYCLEWINDOWS },     /* desktop */
1932         { 0x11, KEY_TAB },
1933         { 0x19, KEY_SWITCHVIDEOMODE },  /* switch */
1934
1935         { 0x1a, KEY_MENU },
1936         { 0x1b, KEY_ZOOM },             /* fullscreen */
1937         { 0x44, KEY_TIME },             /* time shift */
1938         { 0x40, KEY_MODE },             /* source */
1939
1940         { 0x5a, KEY_RECORD },
1941         { 0x42, KEY_PLAY },             /* play/pause */
1942         { 0x45, KEY_STOP },
1943         { 0x43, KEY_CAMERA },           /* camera icon */
1944
1945         { 0x48, KEY_REWIND },
1946         { 0x4a, KEY_FASTFORWARD },
1947         { 0x49, KEY_PREVIOUS },
1948         { 0x4b, KEY_NEXT },
1949
1950         { 0x4c, KEY_FAVORITES },        /* tv wall */
1951         { 0x4d, KEY_SOUND },            /* DVD sound */
1952         { 0x4e, KEY_LANGUAGE },         /* DVD lang */
1953         { 0x4f, KEY_TEXT },             /* DVD text */
1954
1955         { 0x50, KEY_SLEEP },            /* shutdown */
1956         { 0x51, KEY_MODE },             /* stereo > main */
1957         { 0x52, KEY_SELECT },           /* stereo > sap */
1958         { 0x53, KEY_PROG1 },            /* teletext */
1959
1960
1961         { 0x59, KEY_RED },              /* AP1 */
1962         { 0x41, KEY_GREEN },            /* AP2 */
1963         { 0x47, KEY_YELLOW },           /* AP3 */
1964         { 0x57, KEY_BLUE },             /* AP4 */
1965 };
1966 IR_TABLE(encore_enltv, IR_TYPE_UNKNOWN, ir_codes_encore_enltv);
1967
1968 /* Encore ENLTV2-FM  - silver plastic - "Wand Media" written at the botton
1969     Mauro Carvalho Chehab <mchehab@infradead.org> */
1970 static struct ir_scancode ir_codes_encore_enltv2[] = {
1971         { 0x4c, KEY_POWER2 },
1972         { 0x4a, KEY_TUNER },
1973         { 0x40, KEY_1 },
1974         { 0x60, KEY_2 },
1975         { 0x50, KEY_3 },
1976         { 0x70, KEY_4 },
1977         { 0x48, KEY_5 },
1978         { 0x68, KEY_6 },
1979         { 0x58, KEY_7 },
1980         { 0x78, KEY_8 },
1981         { 0x44, KEY_9 },
1982         { 0x54, KEY_0 },
1983
1984         { 0x64, KEY_LAST },             /* +100 */
1985         { 0x4e, KEY_AGAIN },            /* Recall */
1986
1987         { 0x6c, KEY_SWITCHVIDEOMODE },  /* Video Source */
1988         { 0x5e, KEY_MENU },
1989         { 0x56, KEY_SCREEN },
1990         { 0x7a, KEY_SETUP },
1991
1992         { 0x46, KEY_MUTE },
1993         { 0x5c, KEY_MODE },             /* Stereo */
1994         { 0x74, KEY_INFO },
1995         { 0x7c, KEY_CLEAR },
1996
1997         { 0x55, KEY_UP },
1998         { 0x49, KEY_DOWN },
1999         { 0x7e, KEY_LEFT },
2000         { 0x59, KEY_RIGHT },
2001         { 0x6a, KEY_ENTER },
2002
2003         { 0x42, KEY_VOLUMEUP },
2004         { 0x62, KEY_VOLUMEDOWN },
2005         { 0x52, KEY_CHANNELUP },
2006         { 0x72, KEY_CHANNELDOWN },
2007
2008         { 0x41, KEY_RECORD },
2009         { 0x51, KEY_CAMERA },           /* Snapshot */
2010         { 0x75, KEY_TIME },             /* Timeshift */
2011         { 0x71, KEY_TV2 },              /* PIP */
2012
2013         { 0x45, KEY_REWIND },
2014         { 0x6f, KEY_PAUSE },
2015         { 0x7d, KEY_FORWARD },
2016         { 0x79, KEY_STOP },
2017 };
2018 IR_TABLE(encore_enltv2, IR_TYPE_UNKNOWN, ir_codes_encore_enltv2);
2019
2020 /* for the Technotrend 1500 bundled remotes (grey and black): */
2021 static struct ir_scancode ir_codes_tt_1500[] = {
2022         { 0x01, KEY_POWER },
2023         { 0x02, KEY_SHUFFLE },          /* ? double-arrow key */
2024         { 0x03, KEY_1 },
2025         { 0x04, KEY_2 },
2026         { 0x05, KEY_3 },
2027         { 0x06, KEY_4 },
2028         { 0x07, KEY_5 },
2029         { 0x08, KEY_6 },
2030         { 0x09, KEY_7 },
2031         { 0x0a, KEY_8 },
2032         { 0x0b, KEY_9 },
2033         { 0x0c, KEY_0 },
2034         { 0x0d, KEY_UP },
2035         { 0x0e, KEY_LEFT },
2036         { 0x0f, KEY_OK },
2037         { 0x10, KEY_RIGHT },
2038         { 0x11, KEY_DOWN },
2039         { 0x12, KEY_INFO },
2040         { 0x13, KEY_EXIT },
2041         { 0x14, KEY_RED },
2042         { 0x15, KEY_GREEN },
2043         { 0x16, KEY_YELLOW },
2044         { 0x17, KEY_BLUE },
2045         { 0x18, KEY_MUTE },
2046         { 0x19, KEY_TEXT },
2047         { 0x1a, KEY_MODE },             /* ? TV/Radio */
2048         { 0x21, KEY_OPTION },
2049         { 0x22, KEY_EPG },
2050         { 0x23, KEY_CHANNELUP },
2051         { 0x24, KEY_CHANNELDOWN },
2052         { 0x25, KEY_VOLUMEUP },
2053         { 0x26, KEY_VOLUMEDOWN },
2054         { 0x27, KEY_SETUP },
2055         { 0x3a, KEY_RECORD },           /* these keys are only in the black remote */
2056         { 0x3b, KEY_PLAY },
2057         { 0x3c, KEY_STOP },
2058         { 0x3d, KEY_REWIND },
2059         { 0x3e, KEY_PAUSE },
2060         { 0x3f, KEY_FORWARD },
2061 };
2062 IR_TABLE(tt_1500, IR_TYPE_UNKNOWN, ir_codes_tt_1500);
2063
2064 /* DViCO FUSION HDTV MCE remote */
2065 static struct ir_scancode ir_codes_fusionhdtv_mce[] = {
2066
2067         { 0x0b, KEY_1 },
2068         { 0x17, KEY_2 },
2069         { 0x1b, KEY_3 },
2070         { 0x07, KEY_4 },
2071         { 0x50, KEY_5 },
2072         { 0x54, KEY_6 },
2073         { 0x48, KEY_7 },
2074         { 0x4c, KEY_8 },
2075         { 0x58, KEY_9 },
2076         { 0x03, KEY_0 },
2077
2078         { 0x5e, KEY_OK },
2079         { 0x51, KEY_UP },
2080         { 0x53, KEY_DOWN },
2081         { 0x5b, KEY_LEFT },
2082         { 0x5f, KEY_RIGHT },
2083
2084         { 0x02, KEY_TV },               /* Labeled DTV on remote */
2085         { 0x0e, KEY_MP3 },
2086         { 0x1a, KEY_DVD },
2087         { 0x1e, KEY_FAVORITES },        /* Labeled CPF on remote */
2088         { 0x16, KEY_SETUP },
2089         { 0x46, KEY_POWER2 },           /* TV On/Off button on remote */
2090         { 0x0a, KEY_EPG },              /* Labeled Guide on remote */
2091
2092         { 0x49, KEY_BACK },
2093         { 0x59, KEY_INFO },             /* Labeled MORE on remote */
2094         { 0x4d, KEY_MENU },             /* Labeled DVDMENU on remote */
2095         { 0x55, KEY_CYCLEWINDOWS },     /* Labeled ALT-TAB on remote */
2096
2097         { 0x0f, KEY_PREVIOUSSONG },     /* Labeled |<< REPLAY on remote */
2098         { 0x12, KEY_NEXTSONG },         /* Labeled >>| SKIP on remote */
2099         { 0x42, KEY_ENTER },            /* Labeled START with a green
2100                                            MS windows logo on remote */
2101
2102         { 0x15, KEY_VOLUMEUP },
2103         { 0x05, KEY_VOLUMEDOWN },
2104         { 0x11, KEY_CHANNELUP },
2105         { 0x09, KEY_CHANNELDOWN },
2106
2107         { 0x52, KEY_CAMERA },
2108         { 0x5a, KEY_TUNER },
2109         { 0x19, KEY_OPEN },
2110
2111         { 0x13, KEY_MODE },             /* 4:3 16:9 select */
2112         { 0x1f, KEY_ZOOM },
2113
2114         { 0x43, KEY_REWIND },
2115         { 0x47, KEY_PLAYPAUSE },
2116         { 0x4f, KEY_FASTFORWARD },
2117         { 0x57, KEY_MUTE },
2118         { 0x0d, KEY_STOP },
2119         { 0x01, KEY_RECORD },
2120         { 0x4e, KEY_POWER },
2121 };
2122 IR_TABLE(fusionhdtv_mce, IR_TYPE_UNKNOWN, ir_codes_fusionhdtv_mce);
2123
2124 /* Pinnacle PCTV HD 800i mini remote */
2125 static struct ir_scancode ir_codes_pinnacle_pctv_hd[] = {
2126
2127         { 0x0f, KEY_1 },
2128         { 0x15, KEY_2 },
2129         { 0x10, KEY_3 },
2130         { 0x18, KEY_4 },
2131         { 0x1b, KEY_5 },
2132         { 0x1e, KEY_6 },
2133         { 0x11, KEY_7 },
2134         { 0x21, KEY_8 },
2135         { 0x12, KEY_9 },
2136         { 0x27, KEY_0 },
2137
2138         { 0x24, KEY_ZOOM },
2139         { 0x2a, KEY_SUBTITLE },
2140
2141         { 0x00, KEY_MUTE },
2142         { 0x01, KEY_ENTER },    /* Pinnacle Logo */
2143         { 0x39, KEY_POWER },
2144
2145         { 0x03, KEY_VOLUMEUP },
2146         { 0x09, KEY_VOLUMEDOWN },
2147         { 0x06, KEY_CHANNELUP },
2148         { 0x0c, KEY_CHANNELDOWN },
2149
2150         { 0x2d, KEY_REWIND },
2151         { 0x30, KEY_PLAYPAUSE },
2152         { 0x33, KEY_FASTFORWARD },
2153         { 0x3c, KEY_STOP },
2154         { 0x36, KEY_RECORD },
2155         { 0x3f, KEY_EPG },      /* Labeled "?" */
2156 };
2157 IR_TABLE(pinnacle_pctv_hd, IR_TYPE_UNKNOWN, ir_codes_pinnacle_pctv_hd);
2158
2159 /*
2160  * Igor Kuznetsov <igk72@ya.ru>
2161  * Andrey J. Melnikov <temnota@kmv.ru>
2162  *
2163  * Keytable is used by BeholdTV 60x series, M6 series at
2164  * least, and probably other cards too.
2165  * The "ascii-art picture" below (in comments, first row
2166  * is the keycode in hex, and subsequent row(s) shows
2167  * the button labels (several variants when appropriate)
2168  * helps to descide which keycodes to assign to the buttons.
2169  */
2170 static struct ir_scancode ir_codes_behold[] = {
2171
2172         /*  0x1c            0x12  *
2173          *  TV/FM          POWER  *
2174          *                        */
2175         { 0x1c, KEY_TUNER },    /* XXX KEY_TV / KEY_RADIO */
2176         { 0x12, KEY_POWER },
2177
2178         /*  0x01    0x02    0x03  *
2179          *   1       2       3    *
2180          *                        *
2181          *  0x04    0x05    0x06  *
2182          *   4       5       6    *
2183          *                        *
2184          *  0x07    0x08    0x09  *
2185          *   7       8       9    *
2186          *                        */
2187         { 0x01, KEY_1 },
2188         { 0x02, KEY_2 },
2189         { 0x03, KEY_3 },
2190         { 0x04, KEY_4 },
2191         { 0x05, KEY_5 },
2192         { 0x06, KEY_6 },
2193         { 0x07, KEY_7 },
2194         { 0x08, KEY_8 },
2195         { 0x09, KEY_9 },
2196
2197         /*  0x0a    0x00    0x17  *
2198          * RECALL    0      MODE  *
2199          *                        */
2200         { 0x0a, KEY_AGAIN },
2201         { 0x00, KEY_0 },
2202         { 0x17, KEY_MODE },
2203
2204         /*  0x14          0x10    *
2205          * ASPECT      FULLSCREEN *
2206          *                        */
2207         { 0x14, KEY_SCREEN },
2208         { 0x10, KEY_ZOOM },
2209
2210         /*          0x0b          *
2211          *           Up           *
2212          *                        *
2213          *  0x18    0x16    0x0c  *
2214          *  Left     Ok     Right *
2215          *                        *
2216          *         0x015          *
2217          *         Down           *
2218          *                        */
2219         { 0x0b, KEY_CHANNELUP },
2220         { 0x18, KEY_VOLUMEDOWN },
2221         { 0x16, KEY_OK },               /* XXX KEY_ENTER */
2222         { 0x0c, KEY_VOLUMEUP },
2223         { 0x15, KEY_CHANNELDOWN },
2224
2225         /*  0x11            0x0d  *
2226          *  MUTE            INFO  *
2227          *                        */
2228         { 0x11, KEY_MUTE },
2229         { 0x0d, KEY_INFO },
2230
2231         /*  0x0f    0x1b    0x1a  *
2232          * RECORD PLAY/PAUSE STOP *
2233          *                        *
2234          *  0x0e    0x1f    0x1e  *
2235          *TELETEXT  AUDIO  SOURCE *
2236          *           RED   YELLOW *
2237          *                        */
2238         { 0x0f, KEY_RECORD },
2239         { 0x1b, KEY_PLAYPAUSE },
2240         { 0x1a, KEY_STOP },
2241         { 0x0e, KEY_TEXT },
2242         { 0x1f, KEY_RED },      /*XXX KEY_AUDIO */
2243         { 0x1e, KEY_YELLOW },   /*XXX KEY_SOURCE        */
2244
2245         /*  0x1d   0x13     0x19  *
2246          * SLEEP  PREVIEW   DVB   *
2247          *         GREEN    BLUE  *
2248          *                        */
2249         { 0x1d, KEY_SLEEP },
2250         { 0x13, KEY_GREEN },
2251         { 0x19, KEY_BLUE },     /* XXX KEY_SAT  */
2252
2253         /*  0x58           0x5c   *
2254          * FREEZE        SNAPSHOT *
2255          *                        */
2256         { 0x58, KEY_SLOW },
2257         { 0x5c, KEY_CAMERA },
2258
2259 };
2260 IR_TABLE(behold, IR_TYPE_UNKNOWN, ir_codes_behold);
2261
2262 /* Beholder Intl. Ltd. 2008
2263  * Dmitry Belimov d.belimov@google.com
2264  * Keytable is used by BeholdTV Columbus
2265  * The "ascii-art picture" below (in comments, first row
2266  * is the keycode in hex, and subsequent row(s) shows
2267  * the button labels (several variants when appropriate)
2268  * helps to descide which keycodes to assign to the buttons.
2269  */
2270 static struct ir_scancode ir_codes_behold_columbus[] = {
2271
2272         /*  0x13   0x11   0x1C   0x12  *
2273          *  Mute  Source  TV/FM  Power *
2274          *                             */
2275
2276         { 0x13, KEY_MUTE },
2277         { 0x11, KEY_PROPS },
2278         { 0x1C, KEY_TUNER },    /* KEY_TV/KEY_RADIO     */
2279         { 0x12, KEY_POWER },
2280
2281         /*  0x01    0x02    0x03  0x0D    *
2282          *   1       2       3   Stereo   *
2283          *                                *
2284          *  0x04    0x05    0x06  0x19    *
2285          *   4       5       6   Snapshot *
2286          *                                *
2287          *  0x07    0x08    0x09  0x10    *
2288          *   7       8       9    Zoom    *
2289          *                                */
2290         { 0x01, KEY_1 },
2291         { 0x02, KEY_2 },
2292         { 0x03, KEY_3 },
2293         { 0x0D, KEY_SETUP },      /* Setup key */
2294         { 0x04, KEY_4 },
2295         { 0x05, KEY_5 },
2296         { 0x06, KEY_6 },
2297         { 0x19, KEY_CAMERA },   /* Snapshot key */
2298         { 0x07, KEY_7 },
2299         { 0x08, KEY_8 },
2300         { 0x09, KEY_9 },
2301         { 0x10, KEY_ZOOM },
2302
2303         /*  0x0A    0x00    0x0B       0x0C   *
2304          * RECALL    0    ChannelUp  VolumeUp *
2305          *                                    */
2306         { 0x0A, KEY_AGAIN },
2307         { 0x00, KEY_0 },
2308         { 0x0B, KEY_CHANNELUP },
2309         { 0x0C, KEY_VOLUMEUP },
2310
2311         /*   0x1B      0x1D      0x15        0x18     *
2312          * Timeshift  Record  ChannelDown  VolumeDown *
2313          *                                            */
2314
2315         { 0x1B, KEY_TIME },
2316         { 0x1D, KEY_RECORD },
2317         { 0x15, KEY_CHANNELDOWN },
2318         { 0x18, KEY_VOLUMEDOWN },
2319
2320         /*   0x0E   0x1E     0x0F     0x1A  *
2321          *   Stop   Pause  Previouse  Next  *
2322          *                                  */
2323
2324         { 0x0E, KEY_STOP },
2325         { 0x1E, KEY_PAUSE },
2326         { 0x0F, KEY_PREVIOUS },
2327         { 0x1A, KEY_NEXT },
2328
2329 };
2330 IR_TABLE(behold_columbus, IR_TYPE_UNKNOWN, ir_codes_behold_columbus);
2331
2332 /*
2333  * Remote control for the Genius TVGO A11MCE
2334  * Adrian Pardini <pardo.bsso@gmail.com>
2335  */
2336 static struct ir_scancode ir_codes_genius_tvgo_a11mce[] = {
2337         /* Keys 0 to 9 */
2338         { 0x48, KEY_0 },
2339         { 0x09, KEY_1 },
2340         { 0x1d, KEY_2 },
2341         { 0x1f, KEY_3 },
2342         { 0x19, KEY_4 },
2343         { 0x1b, KEY_5 },
2344         { 0x11, KEY_6 },
2345         { 0x17, KEY_7 },
2346         { 0x12, KEY_8 },
2347         { 0x16, KEY_9 },
2348
2349         { 0x54, KEY_RECORD },           /* recording */
2350         { 0x06, KEY_MUTE },             /* mute */
2351         { 0x10, KEY_POWER },
2352         { 0x40, KEY_LAST },             /* recall */
2353         { 0x4c, KEY_CHANNELUP },        /* channel / program + */
2354         { 0x00, KEY_CHANNELDOWN },      /* channel / program - */
2355         { 0x0d, KEY_VOLUMEUP },
2356         { 0x15, KEY_VOLUMEDOWN },
2357         { 0x4d, KEY_OK },               /* also labeled as Pause */
2358         { 0x1c, KEY_ZOOM },             /* full screen and Stop*/
2359         { 0x02, KEY_MODE },             /* AV Source or Rewind*/
2360         { 0x04, KEY_LIST },             /* -/-- */
2361         /* small arrows above numbers */
2362         { 0x1a, KEY_NEXT },             /* also Fast Forward */
2363         { 0x0e, KEY_PREVIOUS },         /* also Rewind */
2364         /* these are in a rather non standard layout and have
2365         an alternate name written */
2366         { 0x1e, KEY_UP },               /* Video Setting */
2367         { 0x0a, KEY_DOWN },             /* Video Default */
2368         { 0x05, KEY_CAMERA },           /* Snapshot */
2369         { 0x0c, KEY_RIGHT },            /* Hide Panel */
2370         /* Four buttons without label */
2371         { 0x49, KEY_RED },
2372         { 0x0b, KEY_GREEN },
2373         { 0x13, KEY_YELLOW },
2374         { 0x50, KEY_BLUE },
2375 };
2376 IR_TABLE(genius_tvgo_a11mce, IR_TYPE_UNKNOWN, ir_codes_genius_tvgo_a11mce);
2377
2378 /*
2379  * Remote control for Powercolor Real Angel 330
2380  * Daniel Fraga <fragabr@gmail.com>
2381  */
2382 static struct ir_scancode ir_codes_powercolor_real_angel[] = {
2383         { 0x38, KEY_SWITCHVIDEOMODE },  /* switch inputs */
2384         { 0x0c, KEY_MEDIA },            /* Turn ON/OFF App */
2385         { 0x00, KEY_0 },
2386         { 0x01, KEY_1 },
2387         { 0x02, KEY_2 },
2388         { 0x03, KEY_3 },
2389         { 0x04, KEY_4 },
2390         { 0x05, KEY_5 },
2391         { 0x06, KEY_6 },
2392         { 0x07, KEY_7 },
2393         { 0x08, KEY_8 },
2394         { 0x09, KEY_9 },
2395         { 0x0a, KEY_DIGITS },           /* single, double, tripple digit */
2396         { 0x29, KEY_PREVIOUS },         /* previous channel */
2397         { 0x12, KEY_BRIGHTNESSUP },
2398         { 0x13, KEY_BRIGHTNESSDOWN },
2399         { 0x2b, KEY_MODE },             /* stereo/mono */
2400         { 0x2c, KEY_TEXT },             /* teletext */
2401         { 0x20, KEY_CHANNELUP },        /* channel up */
2402         { 0x21, KEY_CHANNELDOWN },      /* channel down */
2403         { 0x10, KEY_VOLUMEUP },         /* volume up */
2404         { 0x11, KEY_VOLUMEDOWN },       /* volume down */
2405         { 0x0d, KEY_MUTE },
2406         { 0x1f, KEY_RECORD },
2407         { 0x17, KEY_PLAY },
2408         { 0x16, KEY_PAUSE },
2409         { 0x0b, KEY_STOP },
2410         { 0x27, KEY_FASTFORWARD },
2411         { 0x26, KEY_REWIND },
2412         { 0x1e, KEY_SEARCH },           /* autoscan */
2413         { 0x0e, KEY_CAMERA },           /* snapshot */
2414         { 0x2d, KEY_SETUP },
2415         { 0x0f, KEY_SCREEN },           /* full screen */
2416         { 0x14, KEY_RADIO },            /* FM radio */
2417         { 0x25, KEY_POWER },            /* power */
2418 };
2419 IR_TABLE(powercolor_real_angel, IR_TYPE_UNKNOWN, ir_codes_powercolor_real_angel);
2420
2421 /* Kworld Plus TV Analog Lite PCI IR
2422    Mauro Carvalho Chehab <mchehab@infradead.org>
2423  */
2424 static struct ir_scancode ir_codes_kworld_plus_tv_analog[] = {
2425         { 0x0c, KEY_PROG1 },            /* Kworld key */
2426         { 0x16, KEY_CLOSECD },          /* -> ) */
2427         { 0x1d, KEY_POWER2 },
2428
2429         { 0x00, KEY_1 },
2430         { 0x01, KEY_2 },
2431         { 0x02, KEY_3 },                /* Two keys have the same code: 3 and left */
2432         { 0x03, KEY_4 },                /* Two keys have the same code: 3 and right */
2433         { 0x04, KEY_5 },
2434         { 0x05, KEY_6 },
2435         { 0x06, KEY_7 },
2436         { 0x07, KEY_8 },
2437         { 0x08, KEY_9 },
2438         { 0x0a, KEY_0 },
2439
2440         { 0x09, KEY_AGAIN },
2441         { 0x14, KEY_MUTE },
2442
2443         { 0x20, KEY_UP },
2444         { 0x21, KEY_DOWN },
2445         { 0x0b, KEY_ENTER },
2446
2447         { 0x10, KEY_CHANNELUP },
2448         { 0x11, KEY_CHANNELDOWN },
2449
2450         /* Couldn't map key left/key right since those
2451            conflict with '3' and '4' scancodes
2452            I dunno what the original driver does
2453          */
2454
2455         { 0x13, KEY_VOLUMEUP },
2456         { 0x12, KEY_VOLUMEDOWN },
2457
2458         /* The lower part of the IR
2459            There are several duplicated keycodes there.
2460            Most of them conflict with digits.
2461            Add mappings just to the unused scancodes.
2462            Somehow, the original driver has a way to know,
2463            but this doesn't seem to be on some GPIO.
2464            Also, it is not related to the time between keyup
2465            and keydown.
2466          */
2467         { 0x19, KEY_TIME},              /* Timeshift */
2468         { 0x1a, KEY_STOP},
2469         { 0x1b, KEY_RECORD},
2470
2471         { 0x22, KEY_TEXT},
2472
2473         { 0x15, KEY_AUDIO},             /* ((*)) */
2474         { 0x0f, KEY_ZOOM},
2475         { 0x1c, KEY_CAMERA},            /* snapshot */
2476
2477         { 0x18, KEY_RED},               /* B */
2478         { 0x23, KEY_GREEN},             /* C */
2479 };
2480 IR_TABLE(kworld_plus_tv_analog, IR_TYPE_UNKNOWN, ir_codes_kworld_plus_tv_analog);
2481
2482 /* Kaiomy TVnPC U2
2483    Mauro Carvalho Chehab <mchehab@infradead.org>
2484  */
2485 static struct ir_scancode ir_codes_kaiomy[] = {
2486         { 0x43, KEY_POWER2},
2487         { 0x01, KEY_LIST},
2488         { 0x0b, KEY_ZOOM},
2489         { 0x03, KEY_POWER},
2490
2491         { 0x04, KEY_1},
2492         { 0x08, KEY_2},
2493         { 0x02, KEY_3},
2494
2495         { 0x0f, KEY_4},
2496         { 0x05, KEY_5},
2497         { 0x06, KEY_6},
2498
2499         { 0x0c, KEY_7},
2500         { 0x0d, KEY_8},
2501         { 0x0a, KEY_9},
2502
2503         { 0x11, KEY_0},
2504
2505         { 0x09, KEY_CHANNELUP},
2506         { 0x07, KEY_CHANNELDOWN},
2507
2508         { 0x0e, KEY_VOLUMEUP},
2509         { 0x13, KEY_VOLUMEDOWN},
2510
2511         { 0x10, KEY_HOME},
2512         { 0x12, KEY_ENTER},
2513
2514         { 0x14, KEY_RECORD},
2515         { 0x15, KEY_STOP},
2516         { 0x16, KEY_PLAY},
2517         { 0x17, KEY_MUTE},
2518
2519         { 0x18, KEY_UP},
2520         { 0x19, KEY_DOWN},
2521         { 0x1a, KEY_LEFT},
2522         { 0x1b, KEY_RIGHT},
2523
2524         { 0x1c, KEY_RED},
2525         { 0x1d, KEY_GREEN},
2526         { 0x1e, KEY_YELLOW},
2527         { 0x1f, KEY_BLUE},
2528 };
2529 IR_TABLE(kaiomy, IR_TYPE_UNKNOWN, ir_codes_kaiomy);
2530
2531 static struct ir_scancode ir_codes_avermedia_a16d[] = {
2532         { 0x20, KEY_LIST},
2533         { 0x00, KEY_POWER},
2534         { 0x28, KEY_1},
2535         { 0x18, KEY_2},
2536         { 0x38, KEY_3},
2537         { 0x24, KEY_4},
2538         { 0x14, KEY_5},
2539         { 0x34, KEY_6},
2540         { 0x2c, KEY_7},
2541         { 0x1c, KEY_8},
2542         { 0x3c, KEY_9},
2543         { 0x12, KEY_SUBTITLE},
2544         { 0x22, KEY_0},
2545         { 0x32, KEY_REWIND},
2546         { 0x3a, KEY_SHUFFLE},
2547         { 0x02, KEY_PRINT},
2548         { 0x11, KEY_CHANNELDOWN},
2549         { 0x31, KEY_CHANNELUP},
2550         { 0x0c, KEY_ZOOM},
2551         { 0x1e, KEY_VOLUMEDOWN},
2552         { 0x3e, KEY_VOLUMEUP},
2553         { 0x0a, KEY_MUTE},
2554         { 0x04, KEY_AUDIO},
2555         { 0x26, KEY_RECORD},
2556         { 0x06, KEY_PLAY},
2557         { 0x36, KEY_STOP},
2558         { 0x16, KEY_PAUSE},
2559         { 0x2e, KEY_REWIND},
2560         { 0x0e, KEY_FASTFORWARD},
2561         { 0x30, KEY_TEXT},
2562         { 0x21, KEY_GREEN},
2563         { 0x01, KEY_BLUE},
2564         { 0x08, KEY_EPG},
2565         { 0x2a, KEY_MENU},
2566 };
2567 IR_TABLE(avermedia_a16d, IR_TYPE_UNKNOWN, ir_codes_avermedia_a16d);
2568
2569 /* Encore ENLTV-FM v5.3
2570    Mauro Carvalho Chehab <mchehab@infradead.org>
2571  */
2572 static struct ir_scancode ir_codes_encore_enltv_fm53[] = {
2573         { 0x10, KEY_POWER2},
2574         { 0x06, KEY_MUTE},
2575
2576         { 0x09, KEY_1},
2577         { 0x1d, KEY_2},
2578         { 0x1f, KEY_3},
2579         { 0x19, KEY_4},
2580         { 0x1b, KEY_5},
2581         { 0x11, KEY_6},
2582         { 0x17, KEY_7},
2583         { 0x12, KEY_8},
2584         { 0x16, KEY_9},
2585         { 0x48, KEY_0},
2586
2587         { 0x04, KEY_LIST},              /* -/-- */
2588         { 0x40, KEY_LAST},              /* recall */
2589
2590         { 0x02, KEY_MODE},              /* TV/AV */
2591         { 0x05, KEY_CAMERA},            /* SNAPSHOT */
2592
2593         { 0x4c, KEY_CHANNELUP},         /* UP */
2594         { 0x00, KEY_CHANNELDOWN},       /* DOWN */
2595         { 0x0d, KEY_VOLUMEUP},          /* RIGHT */
2596         { 0x15, KEY_VOLUMEDOWN},        /* LEFT */
2597         { 0x49, KEY_ENTER},             /* OK */
2598
2599         { 0x54, KEY_RECORD},
2600         { 0x4d, KEY_PLAY},              /* pause */
2601
2602         { 0x1e, KEY_MENU},              /* video setting */
2603         { 0x0e, KEY_RIGHT},             /* <- */
2604         { 0x1a, KEY_LEFT},              /* -> */
2605
2606         { 0x0a, KEY_CLEAR},             /* video default */
2607         { 0x0c, KEY_ZOOM},              /* hide pannel */
2608         { 0x47, KEY_SLEEP},             /* shutdown */
2609 };
2610 IR_TABLE(encore_enltv_fm53, IR_TYPE_UNKNOWN, ir_codes_encore_enltv_fm53);
2611
2612 /* Zogis Real Audio 220 - 32 keys IR */
2613 static struct ir_scancode ir_codes_real_audio_220_32_keys[] = {
2614         { 0x1c, KEY_RADIO},
2615         { 0x12, KEY_POWER2},
2616
2617         { 0x01, KEY_1},
2618         { 0x02, KEY_2},
2619         { 0x03, KEY_3},
2620         { 0x04, KEY_4},
2621         { 0x05, KEY_5},
2622         { 0x06, KEY_6},
2623         { 0x07, KEY_7},
2624         { 0x08, KEY_8},
2625         { 0x09, KEY_9},
2626         { 0x00, KEY_0},
2627
2628         { 0x0c, KEY_VOLUMEUP},
2629         { 0x18, KEY_VOLUMEDOWN},
2630         { 0x0b, KEY_CHANNELUP},
2631         { 0x15, KEY_CHANNELDOWN},
2632         { 0x16, KEY_ENTER},
2633
2634         { 0x11, KEY_LIST},              /* Source */
2635         { 0x0d, KEY_AUDIO},             /* stereo */
2636
2637         { 0x0f, KEY_PREVIOUS},          /* Prev */
2638         { 0x1b, KEY_TIME},              /* Timeshift */
2639         { 0x1a, KEY_NEXT},              /* Next */
2640
2641         { 0x0e, KEY_STOP},
2642         { 0x1f, KEY_PLAY},
2643         { 0x1e, KEY_PLAYPAUSE},         /* Pause */
2644
2645         { 0x1d, KEY_RECORD},
2646         { 0x13, KEY_MUTE},
2647         { 0x19, KEY_CAMERA},            /* Snapshot */
2648
2649 };
2650 IR_TABLE(real_audio_220_32_keys, IR_TYPE_UNKNOWN, ir_codes_real_audio_220_32_keys);
2651
2652 /* ATI TV Wonder HD 600 USB
2653    Devin Heitmueller <devin.heitmueller@gmail.com>
2654  */
2655 static struct ir_scancode ir_codes_ati_tv_wonder_hd_600[] = {
2656         { 0x00, KEY_RECORD},            /* Row 1 */
2657         { 0x01, KEY_PLAYPAUSE},
2658         { 0x02, KEY_STOP},
2659         { 0x03, KEY_POWER},
2660         { 0x04, KEY_PREVIOUS},  /* Row 2 */
2661         { 0x05, KEY_REWIND},
2662         { 0x06, KEY_FORWARD},
2663         { 0x07, KEY_NEXT},
2664         { 0x08, KEY_EPG},               /* Row 3 */
2665         { 0x09, KEY_HOME},
2666         { 0x0a, KEY_MENU},
2667         { 0x0b, KEY_CHANNELUP},
2668         { 0x0c, KEY_BACK},              /* Row 4 */
2669         { 0x0d, KEY_UP},
2670         { 0x0e, KEY_INFO},
2671         { 0x0f, KEY_CHANNELDOWN},
2672         { 0x10, KEY_LEFT},              /* Row 5 */
2673         { 0x11, KEY_SELECT},
2674         { 0x12, KEY_RIGHT},
2675         { 0x13, KEY_VOLUMEUP},
2676         { 0x14, KEY_LAST},              /* Row 6 */
2677         { 0x15, KEY_DOWN},
2678         { 0x16, KEY_MUTE},
2679         { 0x17, KEY_VOLUMEDOWN},
2680 };
2681 IR_TABLE(ati_tv_wonder_hd_600, IR_TYPE_UNKNOWN, ir_codes_ati_tv_wonder_hd_600);
2682
2683 /* DVBWorld remotes
2684    Igor M. Liplianin <liplianin@me.by>
2685  */
2686 static struct ir_scancode ir_codes_dm1105_nec[] = {
2687         { 0x0a, KEY_POWER2},            /* power */
2688         { 0x0c, KEY_MUTE},              /* mute */
2689         { 0x11, KEY_1},
2690         { 0x12, KEY_2},
2691         { 0x13, KEY_3},
2692         { 0x14, KEY_4},
2693         { 0x15, KEY_5},
2694         { 0x16, KEY_6},
2695         { 0x17, KEY_7},
2696         { 0x18, KEY_8},
2697         { 0x19, KEY_9},
2698         { 0x10, KEY_0},
2699         { 0x1c, KEY_CHANNELUP},         /* ch+ */
2700         { 0x0f, KEY_CHANNELDOWN},       /* ch- */
2701         { 0x1a, KEY_VOLUMEUP},          /* vol+ */
2702         { 0x0e, KEY_VOLUMEDOWN},        /* vol- */
2703         { 0x04, KEY_RECORD},            /* rec */
2704         { 0x09, KEY_CHANNEL},           /* fav */
2705         { 0x08, KEY_BACKSPACE},         /* rewind */
2706         { 0x07, KEY_FASTFORWARD},       /* fast */
2707         { 0x0b, KEY_PAUSE},             /* pause */
2708         { 0x02, KEY_ESC},               /* cancel */
2709         { 0x03, KEY_TAB},               /* tab */
2710         { 0x00, KEY_UP},                /* up */
2711         { 0x1f, KEY_ENTER},             /* ok */
2712         { 0x01, KEY_DOWN},              /* down */
2713         { 0x05, KEY_RECORD},            /* cap */
2714         { 0x06, KEY_STOP},              /* stop */
2715         { 0x40, KEY_ZOOM},              /* full */
2716         { 0x1e, KEY_TV},                /* tvmode */
2717         { 0x1b, KEY_B},                 /* recall */
2718 };
2719 IR_TABLE(dm1105_nec, IR_TYPE_UNKNOWN, ir_codes_dm1105_nec);
2720
2721 static struct ir_scancode ir_codes_tevii_nec[] = {
2722         { 0x0a, KEY_POWER2},
2723         { 0x0c, KEY_MUTE},
2724         { 0x11, KEY_1},
2725         { 0x12, KEY_2},
2726         { 0x13, KEY_3},
2727         { 0x14, KEY_4},
2728         { 0x15, KEY_5},
2729         { 0x16, KEY_6},
2730         { 0x17, KEY_7},
2731         { 0x18, KEY_8},
2732         { 0x19, KEY_9},
2733         { 0x10, KEY_0},
2734         { 0x1c, KEY_MENU},
2735         { 0x0f, KEY_VOLUMEDOWN},
2736         { 0x1a, KEY_LAST},
2737         { 0x0e, KEY_OPEN},
2738         { 0x04, KEY_RECORD},
2739         { 0x09, KEY_VOLUMEUP},
2740         { 0x08, KEY_CHANNELUP},
2741         { 0x07, KEY_PVR},
2742         { 0x0b, KEY_TIME},
2743         { 0x02, KEY_RIGHT},
2744         { 0x03, KEY_LEFT},
2745         { 0x00, KEY_UP},
2746         { 0x1f, KEY_OK},
2747         { 0x01, KEY_DOWN},
2748         { 0x05, KEY_TUNER},
2749         { 0x06, KEY_CHANNELDOWN},
2750         { 0x40, KEY_PLAYPAUSE},
2751         { 0x1e, KEY_REWIND},
2752         { 0x1b, KEY_FAVORITES},
2753         { 0x1d, KEY_BACK},
2754         { 0x4d, KEY_FASTFORWARD},
2755         { 0x44, KEY_EPG},
2756         { 0x4c, KEY_INFO},
2757         { 0x41, KEY_AB},
2758         { 0x43, KEY_AUDIO},
2759         { 0x45, KEY_SUBTITLE},
2760         { 0x4a, KEY_LIST},
2761         { 0x46, KEY_F1},
2762         { 0x47, KEY_F2},
2763         { 0x5e, KEY_F3},
2764         { 0x5c, KEY_F4},
2765         { 0x52, KEY_F5},
2766         { 0x5a, KEY_F6},
2767         { 0x56, KEY_MODE},
2768         { 0x58, KEY_SWITCHVIDEOMODE},
2769 };
2770 IR_TABLE(tevii_nec, IR_TYPE_UNKNOWN, ir_codes_tevii_nec);
2771
2772 static struct ir_scancode ir_codes_tbs_nec[] = {
2773         { 0x04, KEY_POWER2},    /*power*/
2774         { 0x14, KEY_MUTE},      /*mute*/
2775         { 0x07, KEY_1},
2776         { 0x06, KEY_2},
2777         { 0x05, KEY_3},
2778         { 0x0b, KEY_4},
2779         { 0x0a, KEY_5},
2780         { 0x09, KEY_6},
2781         { 0x0f, KEY_7},
2782         { 0x0e, KEY_8},
2783         { 0x0d, KEY_9},
2784         { 0x12, KEY_0},
2785         { 0x16, KEY_CHANNELUP}, /*ch+*/
2786         { 0x11, KEY_CHANNELDOWN},/*ch-*/
2787         { 0x13, KEY_VOLUMEUP},  /*vol+*/
2788         { 0x0c, KEY_VOLUMEDOWN},/*vol-*/
2789         { 0x03, KEY_RECORD},    /*rec*/
2790         { 0x18, KEY_PAUSE},     /*pause*/
2791         { 0x19, KEY_OK},        /*ok*/
2792         { 0x1a, KEY_CAMERA},    /* snapshot */
2793         { 0x01, KEY_UP},
2794         { 0x10, KEY_LEFT},
2795         { 0x02, KEY_RIGHT},
2796         { 0x08, KEY_DOWN},
2797         { 0x15, KEY_FAVORITES},
2798         { 0x17, KEY_SUBTITLE},
2799         { 0x1d, KEY_ZOOM},
2800         { 0x1f, KEY_EXIT},
2801         { 0x1e, KEY_MENU},
2802         { 0x1c, KEY_EPG},
2803         { 0x00, KEY_PREVIOUS},
2804         { 0x1b, KEY_MODE},
2805 };
2806 IR_TABLE(tbs_nec, IR_TYPE_UNKNOWN, ir_codes_tbs_nec);
2807
2808 /* Terratec Cinergy Hybrid T USB XS
2809    Devin Heitmueller <dheitmueller@linuxtv.org>
2810  */
2811 static struct ir_scancode ir_codes_terratec_cinergy_xs[] = {
2812         { 0x41, KEY_HOME},
2813         { 0x01, KEY_POWER},
2814         { 0x42, KEY_MENU},
2815         { 0x02, KEY_1},
2816         { 0x03, KEY_2},
2817         { 0x04, KEY_3},
2818         { 0x43, KEY_SUBTITLE},
2819         { 0x05, KEY_4},
2820         { 0x06, KEY_5},
2821         { 0x07, KEY_6},
2822         { 0x44, KEY_TEXT},
2823         { 0x08, KEY_7},
2824         { 0x09, KEY_8},
2825         { 0x0a, KEY_9},
2826         { 0x45, KEY_DELETE},
2827         { 0x0b, KEY_TUNER},
2828         { 0x0c, KEY_0},
2829         { 0x0d, KEY_MODE},
2830         { 0x46, KEY_TV},
2831         { 0x47, KEY_DVD},
2832         { 0x49, KEY_VIDEO},
2833         { 0x4b, KEY_AUX},
2834         { 0x10, KEY_UP},
2835         { 0x11, KEY_LEFT},
2836         { 0x12, KEY_OK},
2837         { 0x13, KEY_RIGHT},
2838         { 0x14, KEY_DOWN},
2839         { 0x0f, KEY_EPG},
2840         { 0x16, KEY_INFO},
2841         { 0x4d, KEY_BACKSPACE},
2842         { 0x1c, KEY_VOLUMEUP},
2843         { 0x4c, KEY_PLAY},
2844         { 0x1b, KEY_CHANNELUP},
2845         { 0x1e, KEY_VOLUMEDOWN},
2846         { 0x1d, KEY_MUTE},
2847         { 0x1f, KEY_CHANNELDOWN},
2848         { 0x17, KEY_RED},
2849         { 0x18, KEY_GREEN},
2850         { 0x19, KEY_YELLOW},
2851         { 0x1a, KEY_BLUE},
2852         { 0x58, KEY_RECORD},
2853         { 0x48, KEY_STOP},
2854         { 0x40, KEY_PAUSE},
2855         { 0x54, KEY_LAST},
2856         { 0x4e, KEY_REWIND},
2857         { 0x4f, KEY_FASTFORWARD},
2858         { 0x5c, KEY_NEXT},
2859 };
2860 IR_TABLE(terratec_cinergy_xs, IR_TYPE_UNKNOWN, ir_codes_terratec_cinergy_xs);
2861
2862 /* EVGA inDtube
2863    Devin Heitmueller <devin.heitmueller@gmail.com>
2864  */
2865 static struct ir_scancode ir_codes_evga_indtube[] = {
2866         { 0x12, KEY_POWER},
2867         { 0x02, KEY_MODE},      /* TV */
2868         { 0x14, KEY_MUTE},
2869         { 0x1a, KEY_CHANNELUP},
2870         { 0x16, KEY_TV2},       /* PIP */
2871         { 0x1d, KEY_VOLUMEUP},
2872         { 0x05, KEY_CHANNELDOWN},
2873         { 0x0f, KEY_PLAYPAUSE},
2874         { 0x19, KEY_VOLUMEDOWN},
2875         { 0x1c, KEY_REWIND},
2876         { 0x0d, KEY_RECORD},
2877         { 0x18, KEY_FORWARD},
2878         { 0x1e, KEY_PREVIOUS},
2879         { 0x1b, KEY_STOP},
2880         { 0x1f, KEY_NEXT},
2881         { 0x13, KEY_CAMERA},
2882 };
2883 IR_TABLE(evga_indtube, IR_TYPE_UNKNOWN, ir_codes_evga_indtube);
2884
2885 static struct ir_scancode ir_codes_videomate_s350[] = {
2886         { 0x00, KEY_TV},
2887         { 0x01, KEY_DVD},
2888         { 0x04, KEY_RECORD},
2889         { 0x05, KEY_VIDEO},     /* TV/Video */
2890         { 0x07, KEY_STOP},
2891         { 0x08, KEY_PLAYPAUSE},
2892         { 0x0a, KEY_REWIND},
2893         { 0x0f, KEY_FASTFORWARD},
2894         { 0x10, KEY_CHANNELUP},
2895         { 0x12, KEY_VOLUMEUP},
2896         { 0x13, KEY_CHANNELDOWN},
2897         { 0x14, KEY_MUTE},
2898         { 0x15, KEY_VOLUMEDOWN},
2899         { 0x16, KEY_1},
2900         { 0x17, KEY_2},
2901         { 0x18, KEY_3},
2902         { 0x19, KEY_4},
2903         { 0x1a, KEY_5},
2904         { 0x1b, KEY_6},
2905         { 0x1c, KEY_7},
2906         { 0x1d, KEY_8},
2907         { 0x1e, KEY_9},
2908         { 0x1f, KEY_0},
2909         { 0x21, KEY_SLEEP},
2910         { 0x24, KEY_ZOOM},
2911         { 0x25, KEY_LAST},      /* Recall */
2912         { 0x26, KEY_SUBTITLE},  /* CC */
2913         { 0x27, KEY_LANGUAGE},  /* MTS */
2914         { 0x29, KEY_CHANNEL},   /* SURF */
2915         { 0x2b, KEY_A},
2916         { 0x2c, KEY_B},
2917         { 0x2f, KEY_CAMERA},    /* Snapshot */
2918         { 0x23, KEY_RADIO},
2919         { 0x02, KEY_PREVIOUSSONG},
2920         { 0x06, KEY_NEXTSONG},
2921         { 0x03, KEY_EPG},
2922         { 0x09, KEY_SETUP},
2923         { 0x22, KEY_BACKSPACE},
2924         { 0x0c, KEY_UP},
2925         { 0x0e, KEY_DOWN},
2926         { 0x0b, KEY_LEFT},
2927         { 0x0d, KEY_RIGHT},
2928         { 0x11, KEY_ENTER},
2929         { 0x20, KEY_TEXT},
2930 };
2931 IR_TABLE(videomate_s350, IR_TYPE_UNKNOWN, ir_codes_videomate_s350);
2932
2933 /* GADMEI UTV330+ RM008Z remote
2934    Shine Liu <shinel@foxmail.com>
2935  */
2936 static struct ir_scancode ir_codes_gadmei_rm008z[] = {
2937         { 0x14, KEY_POWER2},            /* POWER OFF */
2938         { 0x0c, KEY_MUTE},              /* MUTE */
2939
2940         { 0x18, KEY_TV},                /* TV */
2941         { 0x0e, KEY_VIDEO},             /* AV */
2942         { 0x0b, KEY_AUDIO},             /* SV */
2943         { 0x0f, KEY_RADIO},             /* FM */
2944
2945         { 0x00, KEY_1},
2946         { 0x01, KEY_2},
2947         { 0x02, KEY_3},
2948         { 0x03, KEY_4},
2949         { 0x04, KEY_5},
2950         { 0x05, KEY_6},
2951         { 0x06, KEY_7},
2952         { 0x07, KEY_8},
2953         { 0x08, KEY_9},
2954         { 0x09, KEY_0},
2955         { 0x0a, KEY_INFO},              /* OSD */
2956         { 0x1c, KEY_BACKSPACE},         /* LAST */
2957
2958         { 0x0d, KEY_PLAY},              /* PLAY */
2959         { 0x1e, KEY_CAMERA},            /* SNAPSHOT */
2960         { 0x1a, KEY_RECORD},            /* RECORD */
2961         { 0x17, KEY_STOP},              /* STOP */
2962
2963         { 0x1f, KEY_UP},                /* UP */
2964         { 0x44, KEY_DOWN},              /* DOWN */
2965         { 0x46, KEY_TAB},               /* BACK */
2966         { 0x4a, KEY_ZOOM},              /* FULLSECREEN */
2967
2968         { 0x10, KEY_VOLUMEUP},          /* VOLUMEUP */
2969         { 0x11, KEY_VOLUMEDOWN},        /* VOLUMEDOWN */
2970         { 0x12, KEY_CHANNELUP},         /* CHANNELUP */
2971         { 0x13, KEY_CHANNELDOWN},       /* CHANNELDOWN */
2972         { 0x15, KEY_ENTER},             /* OK */
2973 };
2974 IR_TABLE(gadmei_rm008z, IR_TYPE_UNKNOWN, ir_codes_gadmei_rm008z);
2975
2976 /*************************************************************
2977  *              COMPLETE SCANCODE TABLES
2978  * Instead of just a partial scancode, the tables bellow
2979  * contains the complete scancode and the receiver protocol
2980  *************************************************************/
2981
2982 /*
2983  * Hauppauge:the newer, gray remotes (seems there are multiple
2984  * slightly different versions), shipped with cx88+ivtv cards.
2985  *
2986  * This table contains the complete RC5 code, instead of just the data part
2987  */
2988 static struct ir_scancode ir_codes_rc5_hauppauge_new[] = {
2989         /* Keys 0 to 9 */
2990         { 0x1e00, KEY_0 },
2991         { 0x1e01, KEY_1 },
2992         { 0x1e02, KEY_2 },
2993         { 0x1e03, KEY_3 },
2994         { 0x1e04, KEY_4 },
2995         { 0x1e05, KEY_5 },
2996         { 0x1e06, KEY_6 },
2997         { 0x1e07, KEY_7 },
2998         { 0x1e08, KEY_8 },
2999         { 0x1e09, KEY_9 },
3000
3001         { 0x1e0a, KEY_TEXT },           /* keypad asterisk as well */
3002         { 0x1e0b, KEY_RED },            /* red button */
3003         { 0x1e0c, KEY_RADIO },
3004         { 0x1e0d, KEY_MENU },
3005         { 0x1e0e, KEY_SUBTITLE },               /* also the # key */
3006         { 0x1e0f, KEY_MUTE },
3007         { 0x1e10, KEY_VOLUMEUP },
3008         { 0x1e11, KEY_VOLUMEDOWN },
3009         { 0x1e12, KEY_PREVIOUS },               /* previous channel */
3010         { 0x1e14, KEY_UP },
3011         { 0x1e15, KEY_DOWN },
3012         { 0x1e16, KEY_LEFT },
3013         { 0x1e17, KEY_RIGHT },
3014         { 0x1e18, KEY_VIDEO },          /* Videos */
3015         { 0x1e19, KEY_AUDIO },          /* Music */
3016         /* 0x1e1a: Pictures - presume this means
3017            "Multimedia Home Platform" -
3018            no "PICTURES" key in input.h
3019          */
3020         { 0x1e1a, KEY_MHP },
3021
3022         { 0x1e1b, KEY_EPG },            /* Guide */
3023         { 0x1e1c, KEY_TV },
3024         { 0x1e1e, KEY_NEXTSONG },               /* skip >| */
3025         { 0x1e1f, KEY_EXIT },           /* back/exit */
3026         { 0x1e20, KEY_CHANNELUP },      /* channel / program + */
3027         { 0x1e21, KEY_CHANNELDOWN },    /* channel / program - */
3028         { 0x1e22, KEY_CHANNEL },                /* source (old black remote) */
3029         { 0x1e24, KEY_PREVIOUSSONG },   /* replay |< */
3030         { 0x1e25, KEY_ENTER },          /* OK */
3031         { 0x1e26, KEY_SLEEP },          /* minimize (old black remote) */
3032         { 0x1e29, KEY_BLUE },           /* blue key */
3033         { 0x1e2e, KEY_GREEN },          /* green button */
3034         { 0x1e30, KEY_PAUSE },          /* pause */
3035         { 0x1e32, KEY_REWIND },         /* backward << */
3036         { 0x1e34, KEY_FASTFORWARD },    /* forward >> */
3037         { 0x1e35, KEY_PLAY },
3038         { 0x1e36, KEY_STOP },
3039         { 0x1e37, KEY_RECORD },         /* recording */
3040         { 0x1e38, KEY_YELLOW },         /* yellow key */
3041         { 0x1e3b, KEY_SELECT },         /* top right button */
3042         { 0x1e3c, KEY_ZOOM },           /* full */
3043         { 0x1e3d, KEY_POWER },          /* system power (green button) */
3044 };
3045 IR_TABLE(rc5_hauppauge_new, IR_TYPE_RC5, ir_codes_rc5_hauppauge_new);
3046
3047 /* Terratec Cinergy Hybrid T USB XS FM
3048    Mauro Carvalho Chehab <mchehab@redhat.com>
3049  */
3050 static struct ir_scancode ir_codes_nec_terratec_cinergy_xs[] = {
3051         { 0x1441, KEY_HOME},
3052         { 0x1401, KEY_POWER2},
3053
3054         { 0x1442, KEY_MENU},            /* DVD menu */
3055         { 0x1443, KEY_SUBTITLE},
3056         { 0x1444, KEY_TEXT},            /* Teletext */
3057         { 0x1445, KEY_DELETE},
3058
3059         { 0x1402, KEY_1},
3060         { 0x1403, KEY_2},
3061         { 0x1404, KEY_3},
3062         { 0x1405, KEY_4},
3063         { 0x1406, KEY_5},
3064         { 0x1407, KEY_6},
3065         { 0x1408, KEY_7},
3066         { 0x1409, KEY_8},
3067         { 0x140a, KEY_9},
3068         { 0x140c, KEY_0},
3069
3070         { 0x140b, KEY_TUNER},           /* AV */
3071         { 0x140d, KEY_MODE},            /* A.B */
3072
3073         { 0x1446, KEY_TV},
3074         { 0x1447, KEY_DVD},
3075         { 0x1449, KEY_VIDEO},
3076         { 0x144a, KEY_RADIO},           /* Music */
3077         { 0x144b, KEY_CAMERA},          /* PIC */
3078
3079         { 0x1410, KEY_UP},
3080         { 0x1411, KEY_LEFT},
3081         { 0x1412, KEY_OK},
3082         { 0x1413, KEY_RIGHT},
3083         { 0x1414, KEY_DOWN},
3084
3085         { 0x140f, KEY_EPG},
3086         { 0x1416, KEY_INFO},
3087         { 0x144d, KEY_BACKSPACE},
3088
3089         { 0x141c, KEY_VOLUMEUP},
3090         { 0x141e, KEY_VOLUMEDOWN},
3091
3092         { 0x144c, KEY_PLAY},
3093         { 0x141d, KEY_MUTE},
3094
3095         { 0x141b, KEY_CHANNELUP},
3096         { 0x141f, KEY_CHANNELDOWN},
3097
3098         { 0x1417, KEY_RED},
3099         { 0x1418, KEY_GREEN},
3100         { 0x1419, KEY_YELLOW},
3101         { 0x141a, KEY_BLUE},
3102
3103         { 0x1458, KEY_RECORD},
3104         { 0x1448, KEY_STOP},
3105         { 0x1440, KEY_PAUSE},
3106
3107         { 0x1454, KEY_LAST},
3108         { 0x144e, KEY_REWIND},
3109         { 0x144f, KEY_FASTFORWARD},
3110         { 0x145c, KEY_NEXT},
3111 };
3112 IR_TABLE(nec_terratec_cinergy_xs, IR_TYPE_NEC, ir_codes_nec_terratec_cinergy_xs);
3113
3114 /* Leadtek Winfast TV USB II Deluxe remote
3115    Magnus Alm <magnus.alm@gmail.com>
3116  */
3117 static struct ir_scancode ir_codes_winfast_usbii_deluxe[] = {
3118         { 0x62, KEY_0},
3119         { 0x75, KEY_1},
3120         { 0x76, KEY_2},
3121         { 0x77, KEY_3},
3122         { 0x79, KEY_4},
3123         { 0x7a, KEY_5},
3124         { 0x7b, KEY_6},
3125         { 0x7d, KEY_7},
3126         { 0x7e, KEY_8},
3127         { 0x7f, KEY_9},
3128
3129         { 0x38, KEY_CAMERA},            /* SNAPSHOT */
3130         { 0x37, KEY_RECORD},            /* RECORD */
3131         { 0x35, KEY_TIME},              /* TIMESHIFT */
3132
3133         { 0x74, KEY_VOLUMEUP},          /* VOLUMEUP */
3134         { 0x78, KEY_VOLUMEDOWN},        /* VOLUMEDOWN */
3135         { 0x64, KEY_MUTE},              /* MUTE */
3136
3137         { 0x21, KEY_CHANNEL},           /* SURF */
3138         { 0x7c, KEY_CHANNELUP},         /* CHANNELUP */
3139         { 0x60, KEY_CHANNELDOWN},       /* CHANNELDOWN */
3140         { 0x61, KEY_LAST},              /* LAST CHANNEL (RECALL) */
3141
3142         { 0x72, KEY_VIDEO},             /* INPUT MODES (TV/FM) */
3143
3144         { 0x70, KEY_POWER2},            /* TV ON/OFF */
3145
3146         { 0x39, KEY_CYCLEWINDOWS},      /* MINIMIZE (BOSS) */
3147         { 0x3a, KEY_NEW},               /* PIP */
3148         { 0x73, KEY_ZOOM},              /* FULLSECREEN */
3149
3150         { 0x66, KEY_INFO},              /* OSD (DISPLAY) */
3151
3152         { 0x31, KEY_DOT},               /* '.' */
3153         { 0x63, KEY_ENTER},             /* ENTER */
3154
3155 };
3156 IR_TABLE(winfast_usbii_deluxe, IR_TYPE_UNKNOWN, ir_codes_winfast_usbii_deluxe);
3157
3158 /* Kworld 315U
3159  */
3160 static struct ir_scancode ir_codes_kworld_315u[] = {
3161         { 0x6143, KEY_POWER },
3162         { 0x6101, KEY_TUNER },          /* source */
3163         { 0x610b, KEY_ZOOM },
3164         { 0x6103, KEY_POWER2 },         /* shutdown */
3165
3166         { 0x6104, KEY_1 },
3167         { 0x6108, KEY_2 },
3168         { 0x6102, KEY_3 },
3169         { 0x6109, KEY_CHANNELUP },
3170
3171         { 0x610f, KEY_4 },
3172         { 0x6105, KEY_5 },
3173         { 0x6106, KEY_6 },
3174         { 0x6107, KEY_CHANNELDOWN },
3175
3176         { 0x610c, KEY_7 },
3177         { 0x610d, KEY_8 },
3178         { 0x610a, KEY_9 },
3179         { 0x610e, KEY_VOLUMEUP },
3180
3181         { 0x6110, KEY_LAST },
3182         { 0x6111, KEY_0 },
3183         { 0x6112, KEY_ENTER },
3184         { 0x6113, KEY_VOLUMEDOWN },
3185
3186         { 0x6114, KEY_RECORD },
3187         { 0x6115, KEY_STOP },
3188         { 0x6116, KEY_PLAY },
3189         { 0x6117, KEY_MUTE },
3190
3191         { 0x6118, KEY_UP },
3192         { 0x6119, KEY_DOWN },
3193         { 0x611a, KEY_LEFT },
3194         { 0x611b, KEY_RIGHT },
3195
3196         { 0x611c, KEY_RED },
3197         { 0x611d, KEY_GREEN },
3198         { 0x611e, KEY_YELLOW },
3199         { 0x611f, KEY_BLUE },
3200 };
3201 IR_TABLE(kworld_315u, IR_TYPE_NEC, ir_codes_kworld_315u);