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