linux/drivers/media/common/ir-keymaps.c
<<
>>
Prefs
   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 */
  32static struct ir_scancode ir_codes_empty[] = {
  33        { 0x2a, KEY_COFFEE },
  34};
  35
  36struct ir_scancode_table ir_codes_empty_table = {
  37        .scan = ir_codes_empty,
  38        .size = ARRAY_SIZE(ir_codes_empty),
  39};
  40EXPORT_SYMBOL_GPL(ir_codes_empty_table);
  41
  42/* Michal Majchrowicz <mmajchrowicz@gmail.com> */
  43static 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
  72struct ir_scancode_table ir_codes_proteus_2309_table = {
  73        .scan = ir_codes_proteus_2309,
  74        .size = ARRAY_SIZE(ir_codes_proteus_2309),
  75};
  76EXPORT_SYMBOL_GPL(ir_codes_proteus_2309_table);
  77
  78/* Matt Jesson <dvb@jesson.eclipse.co.uk */
  79static 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
 117struct ir_scancode_table ir_codes_avermedia_dvbt_table = {
 118        .scan = ir_codes_avermedia_dvbt,
 119        .size = ARRAY_SIZE(ir_codes_avermedia_dvbt),
 120};
 121EXPORT_SYMBOL_GPL(ir_codes_avermedia_dvbt_table);
 122
 123/* Mauro Carvalho Chehab <mchehab@infradead.org> */
 124static 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
 172struct ir_scancode_table ir_codes_avermedia_m135a_table = {
 173        .scan = ir_codes_avermedia_m135a,
 174        .size = ARRAY_SIZE(ir_codes_avermedia_m135a),
 175};
 176EXPORT_SYMBOL_GPL(ir_codes_avermedia_m135a_table);
 177
 178/* Oldrich Jedlicka <oldium.pro@seznam.cz> */
 179static 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
 236struct ir_scancode_table ir_codes_avermedia_cardbus_table = {
 237        .scan = ir_codes_avermedia_cardbus,
 238        .size = ARRAY_SIZE(ir_codes_avermedia_cardbus),
 239};
 240EXPORT_SYMBOL_GPL(ir_codes_avermedia_cardbus_table);
 241
 242/* Attila Kondoros <attila.kondoros@chello.hu> */
 243static 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
 283struct ir_scancode_table ir_codes_apac_viewcomp_table = {
 284        .scan = ir_codes_apac_viewcomp,
 285        .size = ARRAY_SIZE(ir_codes_apac_viewcomp),
 286};
 287EXPORT_SYMBOL_GPL(ir_codes_apac_viewcomp_table);
 288
 289/* ---------------------------------------------------------------------- */
 290
 291static 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
 335struct ir_scancode_table ir_codes_pixelview_table = {
 336        .scan = ir_codes_pixelview,
 337        .size = ARRAY_SIZE(ir_codes_pixelview),
 338};
 339EXPORT_SYMBOL_GPL(ir_codes_pixelview_table);
 340
 341/*
 342   Mauro Carvalho Chehab <mchehab@infradead.org>
 343   present on PV MPEG 8000GT
 344 */
 345static 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
 385struct ir_scancode_table ir_codes_pixelview_new_table = {
 386        .scan = ir_codes_pixelview_new,
 387        .size = ARRAY_SIZE(ir_codes_pixelview_new),
 388};
 389EXPORT_SYMBOL_GPL(ir_codes_pixelview_new_table);
 390
 391static 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
 449struct ir_scancode_table ir_codes_nebula_table = {
 450        .scan = ir_codes_nebula,
 451        .size = ARRAY_SIZE(ir_codes_nebula),
 452};
 453EXPORT_SYMBOL_GPL(ir_codes_nebula_table);
 454
 455/* DigitalNow DNTV Live DVB-T Remote */
 456static 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
 494struct 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};
 498EXPORT_SYMBOL_GPL(ir_codes_dntv_live_dvb_t_table);
 499
 500/* ---------------------------------------------------------------------- */
 501
 502/* IO-DATA BCTV7E Remote */
 503static 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
 551struct ir_scancode_table ir_codes_iodata_bctv7e_table = {
 552        .scan = ir_codes_iodata_bctv7e,
 553        .size = ARRAY_SIZE(ir_codes_iodata_bctv7e),
 554};
 555EXPORT_SYMBOL_GPL(ir_codes_iodata_bctv7e_table);
 556
 557/* ---------------------------------------------------------------------- */
 558
 559/* ADS Tech Instant TV DVB-T PCI Remote */
 560static 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
 609struct 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};
 613EXPORT_SYMBOL_GPL(ir_codes_adstech_dvb_t_pci_table);
 614
 615/* ---------------------------------------------------------------------- */
 616
 617/* MSI TV@nywhere MASTER remote */
 618
 619static 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
 648struct ir_scancode_table ir_codes_msi_tvanywhere_table = {
 649        .scan = ir_codes_msi_tvanywhere,
 650        .size = ARRAY_SIZE(ir_codes_msi_tvanywhere),
 651};
 652EXPORT_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
 671static 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
 742struct 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};
 746EXPORT_SYMBOL_GPL(ir_codes_msi_tvanywhere_plus_table);
 747
 748/* ---------------------------------------------------------------------- */
 749
 750/* Cinergy 1400 DVB-T */
 751static 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
 795struct ir_scancode_table ir_codes_cinergy_1400_table = {
 796        .scan = ir_codes_cinergy_1400,
 797        .size = ARRAY_SIZE(ir_codes_cinergy_1400),
 798};
 799EXPORT_SYMBOL_GPL(ir_codes_cinergy_1400_table);
 800
 801/* ---------------------------------------------------------------------- */
 802
 803/* AVERTV STUDIO 303 Remote */
 804static 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
 849struct ir_scancode_table ir_codes_avertv_303_table = {
 850        .scan = ir_codes_avertv_303,
 851        .size = ARRAY_SIZE(ir_codes_avertv_303),
 852};
 853EXPORT_SYMBOL_GPL(ir_codes_avertv_303_table);
 854
 855/* ---------------------------------------------------------------------- */
 856
 857/* DigitalNow DNTV Live! DVB-T Pro Remote */
 858static 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
 915struct 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};
 919EXPORT_SYMBOL_GPL(ir_codes_dntv_live_dvbt_pro_table);
 920
 921static 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
 952struct ir_scancode_table ir_codes_em_terratec_table = {
 953        .scan = ir_codes_em_terratec,
 954        .size = ARRAY_SIZE(ir_codes_em_terratec),
 955};
 956EXPORT_SYMBOL_GPL(ir_codes_em_terratec_table);
 957
 958static 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
1009struct ir_scancode_table ir_codes_pinnacle_grey_table = {
1010        .scan = ir_codes_pinnacle_grey,
1011        .size = ARRAY_SIZE(ir_codes_pinnacle_grey),
1012};
1013EXPORT_SYMBOL_GPL(ir_codes_pinnacle_grey_table);
1014
1015static 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
1047struct ir_scancode_table ir_codes_flyvideo_table = {
1048        .scan = ir_codes_flyvideo,
1049        .size = ARRAY_SIZE(ir_codes_flyvideo),
1050};
1051EXPORT_SYMBOL_GPL(ir_codes_flyvideo_table);
1052
1053static 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
1092struct ir_scancode_table ir_codes_flydvb_table = {
1093        .scan = ir_codes_flydvb,
1094        .size = ARRAY_SIZE(ir_codes_flydvb),
1095};
1096EXPORT_SYMBOL_GPL(ir_codes_flydvb_table);
1097
1098static 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
1138struct ir_scancode_table ir_codes_cinergy_table = {
1139        .scan = ir_codes_cinergy,
1140        .size = ARRAY_SIZE(ir_codes_cinergy),
1141};
1142EXPORT_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> */
1146static 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
1201struct ir_scancode_table ir_codes_eztv_table = {
1202        .scan = ir_codes_eztv,
1203        .size = ARRAY_SIZE(ir_codes_eztv),
1204};
1205EXPORT_SYMBOL_GPL(ir_codes_eztv_table);
1206
1207/* Alex Hermann <gaaf@gmx.net> */
1208static 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
1254struct ir_scancode_table ir_codes_avermedia_table = {
1255        .scan = ir_codes_avermedia,
1256        .size = ARRAY_SIZE(ir_codes_avermedia),
1257};
1258EXPORT_SYMBOL_GPL(ir_codes_avermedia_table);
1259
1260static 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
1309struct 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};
1313EXPORT_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 */
1324static 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
1411struct ir_scancode_table ir_codes_manli_table = {
1412        .scan = ir_codes_manli,
1413        .size = ARRAY_SIZE(ir_codes_manli),
1414};
1415EXPORT_SYMBOL_GPL(ir_codes_manli_table);
1416
1417/* Mike Baikov <mike@baikov.com> */
1418static 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
1457struct ir_scancode_table ir_codes_gotview7135_table = {
1458        .scan = ir_codes_gotview7135,
1459        .size = ARRAY_SIZE(ir_codes_gotview7135),
1460};
1461EXPORT_SYMBOL_GPL(ir_codes_gotview7135_table);
1462
1463static 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
1506struct ir_scancode_table ir_codes_purpletv_table = {
1507        .scan = ir_codes_purpletv,
1508        .size = ARRAY_SIZE(ir_codes_purpletv),
1509};
1510EXPORT_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 */
1516static 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
1553struct ir_scancode_table ir_codes_pctv_sedna_table = {
1554        .scan = ir_codes_pctv_sedna,
1555        .size = ARRAY_SIZE(ir_codes_pctv_sedna),
1556};
1557EXPORT_SYMBOL_GPL(ir_codes_pctv_sedna_table);
1558
1559/* Mark Phalan <phalanm@o2.ie> */
1560static 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
1598struct ir_scancode_table ir_codes_pv951_table = {
1599        .scan = ir_codes_pv951,
1600        .size = ARRAY_SIZE(ir_codes_pv951),
1601};
1602EXPORT_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                         */
1607static 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
1646struct ir_scancode_table ir_codes_rc5_tv_table = {
1647        .scan = ir_codes_rc5_tv,
1648        .size = ARRAY_SIZE(ir_codes_rc5_tv),
1649};
1650EXPORT_SYMBOL_GPL(ir_codes_rc5_tv_table);
1651
1652/* Table for Leadtek Winfast Remote Controls - used by both bttv and cx88 */
1653static 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        { 0x3e, KEY_F21 },              /* MCE +VOL, on Y04G0033 */
1709        { 0x3a, KEY_F22 },              /* MCE -VOL, on Y04G0033 */
1710        { 0x3b, KEY_F23 },              /* MCE +CH,  on Y04G0033 */
1711        { 0x3f, KEY_F24 }               /* MCE -CH,  on Y04G0033 */
1712};
1713
1714struct ir_scancode_table ir_codes_winfast_table = {
1715        .scan = ir_codes_winfast,
1716        .size = ARRAY_SIZE(ir_codes_winfast),
1717};
1718EXPORT_SYMBOL_GPL(ir_codes_winfast_table);
1719
1720static struct ir_scancode ir_codes_pinnacle_color[] = {
1721        { 0x59, KEY_MUTE },
1722        { 0x4a, KEY_POWER },
1723
1724        { 0x18, KEY_TEXT },
1725        { 0x26, KEY_TV },
1726        { 0x3d, KEY_PRINT },
1727
1728        { 0x48, KEY_RED },
1729        { 0x04, KEY_GREEN },
1730        { 0x11, KEY_YELLOW },
1731        { 0x00, KEY_BLUE },
1732
1733        { 0x2d, KEY_VOLUMEUP },
1734        { 0x1e, KEY_VOLUMEDOWN },
1735
1736        { 0x49, KEY_MENU },
1737
1738        { 0x16, KEY_CHANNELUP },
1739        { 0x17, KEY_CHANNELDOWN },
1740
1741        { 0x20, KEY_UP },
1742        { 0x21, KEY_DOWN },
1743        { 0x22, KEY_LEFT },
1744        { 0x23, KEY_RIGHT },
1745        { 0x0d, KEY_SELECT },
1746
1747        { 0x08, KEY_BACK },
1748        { 0x07, KEY_REFRESH },
1749
1750        { 0x2f, KEY_ZOOM },
1751        { 0x29, KEY_RECORD },
1752
1753        { 0x4b, KEY_PAUSE },
1754        { 0x4d, KEY_REWIND },
1755        { 0x2e, KEY_PLAY },
1756        { 0x4e, KEY_FORWARD },
1757        { 0x53, KEY_PREVIOUS },
1758        { 0x4c, KEY_STOP },
1759        { 0x54, KEY_NEXT },
1760
1761        { 0x69, KEY_0 },
1762        { 0x6a, KEY_1 },
1763        { 0x6b, KEY_2 },
1764        { 0x6c, KEY_3 },
1765        { 0x6d, KEY_4 },
1766        { 0x6e, KEY_5 },
1767        { 0x6f, KEY_6 },
1768        { 0x70, KEY_7 },
1769        { 0x71, KEY_8 },
1770        { 0x72, KEY_9 },
1771
1772        { 0x74, KEY_CHANNEL },
1773        { 0x0a, KEY_BACKSPACE },
1774};
1775
1776struct ir_scancode_table ir_codes_pinnacle_color_table = {
1777        .scan = ir_codes_pinnacle_color,
1778        .size = ARRAY_SIZE(ir_codes_pinnacle_color),
1779};
1780EXPORT_SYMBOL_GPL(ir_codes_pinnacle_color_table);
1781
1782/* Hauppauge: the newer, gray remotes (seems there are multiple
1783 * slightly different versions), shipped with cx88+ivtv cards.
1784 * almost rc5 coding, but some non-standard keys */
1785static struct ir_scancode ir_codes_hauppauge_new[] = {
1786        /* Keys 0 to 9 */
1787        { 0x00, KEY_0 },
1788        { 0x01, KEY_1 },
1789        { 0x02, KEY_2 },
1790        { 0x03, KEY_3 },
1791        { 0x04, KEY_4 },
1792        { 0x05, KEY_5 },
1793        { 0x06, KEY_6 },
1794        { 0x07, KEY_7 },
1795        { 0x08, KEY_8 },
1796        { 0x09, KEY_9 },
1797
1798        { 0x0a, KEY_TEXT },             /* keypad asterisk as well */
1799        { 0x0b, KEY_RED },              /* red button */
1800        { 0x0c, KEY_RADIO },
1801        { 0x0d, KEY_MENU },
1802        { 0x0e, KEY_SUBTITLE },         /* also the # key */
1803        { 0x0f, KEY_MUTE },
1804        { 0x10, KEY_VOLUMEUP },
1805        { 0x11, KEY_VOLUMEDOWN },
1806        { 0x12, KEY_PREVIOUS },         /* previous channel */
1807        { 0x14, KEY_UP },
1808        { 0x15, KEY_DOWN },
1809        { 0x16, KEY_LEFT },
1810        { 0x17, KEY_RIGHT },
1811        { 0x18, KEY_VIDEO },            /* Videos */
1812        { 0x19, KEY_AUDIO },            /* Music */
1813        /* 0x1a: Pictures - presume this means
1814           "Multimedia Home Platform" -
1815           no "PICTURES" key in input.h
1816         */
1817        { 0x1a, KEY_MHP },
1818
1819        { 0x1b, KEY_EPG },              /* Guide */
1820        { 0x1c, KEY_TV },
1821        { 0x1e, KEY_NEXTSONG },         /* skip >| */
1822        { 0x1f, KEY_EXIT },             /* back/exit */
1823        { 0x20, KEY_CHANNELUP },        /* channel / program + */
1824        { 0x21, KEY_CHANNELDOWN },      /* channel / program - */
1825        { 0x22, KEY_CHANNEL },          /* source (old black remote) */
1826        { 0x24, KEY_PREVIOUSSONG },     /* replay |< */
1827        { 0x25, KEY_ENTER },            /* OK */
1828        { 0x26, KEY_SLEEP },            /* minimize (old black remote) */
1829        { 0x29, KEY_BLUE },             /* blue key */
1830        { 0x2e, KEY_GREEN },            /* green button */
1831        { 0x30, KEY_PAUSE },            /* pause */
1832        { 0x32, KEY_REWIND },           /* backward << */
1833        { 0x34, KEY_FASTFORWARD },      /* forward >> */
1834        { 0x35, KEY_PLAY },
1835        { 0x36, KEY_STOP },
1836        { 0x37, KEY_RECORD },           /* recording */
1837        { 0x38, KEY_YELLOW },           /* yellow key */
1838        { 0x3b, KEY_SELECT },           /* top right button */
1839        { 0x3c, KEY_ZOOM },             /* full */
1840        { 0x3d, KEY_POWER },            /* system power (green button) */
1841};
1842
1843struct ir_scancode_table ir_codes_hauppauge_new_table = {
1844        .scan = ir_codes_hauppauge_new,
1845        .size = ARRAY_SIZE(ir_codes_hauppauge_new),
1846};
1847EXPORT_SYMBOL_GPL(ir_codes_hauppauge_new_table);
1848
1849static struct ir_scancode ir_codes_npgtech[] = {
1850        { 0x1d, KEY_SWITCHVIDEOMODE },  /* switch inputs */
1851        { 0x2a, KEY_FRONT },
1852
1853        { 0x3e, KEY_1 },
1854        { 0x02, KEY_2 },
1855        { 0x06, KEY_3 },
1856        { 0x0a, KEY_4 },
1857        { 0x0e, KEY_5 },
1858        { 0x12, KEY_6 },
1859        { 0x16, KEY_7 },
1860        { 0x1a, KEY_8 },
1861        { 0x1e, KEY_9 },
1862        { 0x3a, KEY_0 },
1863        { 0x22, KEY_NUMLOCK },          /* -/-- */
1864        { 0x20, KEY_REFRESH },
1865
1866        { 0x03, KEY_BRIGHTNESSDOWN },
1867        { 0x28, KEY_AUDIO },
1868        { 0x3c, KEY_CHANNELUP },
1869        { 0x3f, KEY_VOLUMEDOWN },
1870        { 0x2e, KEY_MUTE },
1871        { 0x3b, KEY_VOLUMEUP },
1872        { 0x00, KEY_CHANNELDOWN },
1873        { 0x07, KEY_BRIGHTNESSUP },
1874        { 0x2c, KEY_TEXT },
1875
1876        { 0x37, KEY_RECORD },
1877        { 0x17, KEY_PLAY },
1878        { 0x13, KEY_PAUSE },
1879        { 0x26, KEY_STOP },
1880        { 0x18, KEY_FASTFORWARD },
1881        { 0x14, KEY_REWIND },
1882        { 0x33, KEY_ZOOM },
1883        { 0x32, KEY_KEYBOARD },
1884        { 0x30, KEY_GOTO },             /* Pointing arrow */
1885        { 0x36, KEY_MACRO },            /* Maximize/Minimize (yellow) */
1886        { 0x0b, KEY_RADIO },
1887        { 0x10, KEY_POWER },
1888
1889};
1890
1891struct ir_scancode_table ir_codes_npgtech_table = {
1892        .scan = ir_codes_npgtech,
1893        .size = ARRAY_SIZE(ir_codes_npgtech),
1894};
1895EXPORT_SYMBOL_GPL(ir_codes_npgtech_table);
1896
1897/* Norwood Micro (non-Pro) TV Tuner
1898   By Peter Naulls <peter@chocky.org>
1899   Key comments are the functions given in the manual */
1900static struct ir_scancode ir_codes_norwood[] = {
1901        /* Keys 0 to 9 */
1902        { 0x20, KEY_0 },
1903        { 0x21, KEY_1 },
1904        { 0x22, KEY_2 },
1905        { 0x23, KEY_3 },
1906        { 0x24, KEY_4 },
1907        { 0x25, KEY_5 },
1908        { 0x26, KEY_6 },
1909        { 0x27, KEY_7 },
1910        { 0x28, KEY_8 },
1911        { 0x29, KEY_9 },
1912
1913        { 0x78, KEY_TUNER },            /* Video Source        */
1914        { 0x2c, KEY_EXIT },             /* Open/Close software */
1915        { 0x2a, KEY_SELECT },           /* 2 Digit Select      */
1916        { 0x69, KEY_AGAIN },            /* Recall              */
1917
1918        { 0x32, KEY_BRIGHTNESSUP },     /* Brightness increase */
1919        { 0x33, KEY_BRIGHTNESSDOWN },   /* Brightness decrease */
1920        { 0x6b, KEY_KPPLUS },           /* (not named >>>>>)   */
1921        { 0x6c, KEY_KPMINUS },          /* (not named <<<<<)   */
1922
1923        { 0x2d, KEY_MUTE },             /* Mute                */
1924        { 0x30, KEY_VOLUMEUP },         /* Volume up           */
1925        { 0x31, KEY_VOLUMEDOWN },       /* Volume down         */
1926        { 0x60, KEY_CHANNELUP },        /* Channel up          */
1927        { 0x61, KEY_CHANNELDOWN },      /* Channel down        */
1928
1929        { 0x3f, KEY_RECORD },           /* Record              */
1930        { 0x37, KEY_PLAY },             /* Play                */
1931        { 0x36, KEY_PAUSE },            /* Pause               */
1932        { 0x2b, KEY_STOP },             /* Stop                */
1933        { 0x67, KEY_FASTFORWARD },      /* Foward              */
1934        { 0x66, KEY_REWIND },           /* Rewind              */
1935        { 0x3e, KEY_SEARCH },           /* Auto Scan           */
1936        { 0x2e, KEY_CAMERA },           /* Capture Video       */
1937        { 0x6d, KEY_MENU },             /* Show/Hide Control   */
1938        { 0x2f, KEY_ZOOM },             /* Full Screen         */
1939        { 0x34, KEY_RADIO },            /* FM                  */
1940        { 0x65, KEY_POWER },            /* Computer power      */
1941};
1942
1943struct ir_scancode_table ir_codes_norwood_table = {
1944        .scan = ir_codes_norwood,
1945        .size = ARRAY_SIZE(ir_codes_norwood),
1946};
1947EXPORT_SYMBOL_GPL(ir_codes_norwood_table);
1948
1949/* From reading the following remotes:
1950 * Zenith Universal 7 / TV Mode 807 / VCR Mode 837
1951 * Hauppauge (from NOVA-CI-s box product)
1952 * This is a "middle of the road" approach, differences are noted
1953 */
1954static struct ir_scancode ir_codes_budget_ci_old[] = {
1955        { 0x00, KEY_0 },
1956        { 0x01, KEY_1 },
1957        { 0x02, KEY_2 },
1958        { 0x03, KEY_3 },
1959        { 0x04, KEY_4 },
1960        { 0x05, KEY_5 },
1961        { 0x06, KEY_6 },
1962        { 0x07, KEY_7 },
1963        { 0x08, KEY_8 },
1964        { 0x09, KEY_9 },
1965        { 0x0a, KEY_ENTER },
1966        { 0x0b, KEY_RED },
1967        { 0x0c, KEY_POWER },            /* RADIO on Hauppauge */
1968        { 0x0d, KEY_MUTE },
1969        { 0x0f, KEY_A },                /* TV on Hauppauge */
1970        { 0x10, KEY_VOLUMEUP },
1971        { 0x11, KEY_VOLUMEDOWN },
1972        { 0x14, KEY_B },
1973        { 0x1c, KEY_UP },
1974        { 0x1d, KEY_DOWN },
1975        { 0x1e, KEY_OPTION },           /* RESERVED on Hauppauge */
1976        { 0x1f, KEY_BREAK },
1977        { 0x20, KEY_CHANNELUP },
1978        { 0x21, KEY_CHANNELDOWN },
1979        { 0x22, KEY_PREVIOUS },         /* Prev Ch on Zenith, SOURCE on Hauppauge */
1980        { 0x24, KEY_RESTART },
1981        { 0x25, KEY_OK },
1982        { 0x26, KEY_CYCLEWINDOWS },     /* MINIMIZE on Hauppauge */
1983        { 0x28, KEY_ENTER },            /* VCR mode on Zenith */
1984        { 0x29, KEY_PAUSE },
1985        { 0x2b, KEY_RIGHT },
1986        { 0x2c, KEY_LEFT },
1987        { 0x2e, KEY_MENU },             /* FULL SCREEN on Hauppauge */
1988        { 0x30, KEY_SLOW },
1989        { 0x31, KEY_PREVIOUS },         /* VCR mode on Zenith */
1990        { 0x32, KEY_REWIND },
1991        { 0x34, KEY_FASTFORWARD },
1992        { 0x35, KEY_PLAY },
1993        { 0x36, KEY_STOP },
1994        { 0x37, KEY_RECORD },
1995        { 0x38, KEY_TUNER },            /* TV/VCR on Zenith */
1996        { 0x3a, KEY_C },
1997        { 0x3c, KEY_EXIT },
1998        { 0x3d, KEY_POWER2 },
1999        { 0x3e, KEY_TUNER },
2000};
2001
2002struct ir_scancode_table ir_codes_budget_ci_old_table = {
2003        .scan = ir_codes_budget_ci_old,
2004        .size = ARRAY_SIZE(ir_codes_budget_ci_old),
2005};
2006EXPORT_SYMBOL_GPL(ir_codes_budget_ci_old_table);
2007
2008/*
2009 * Marc Fargas <telenieko@telenieko.com>
2010 * this is the remote control that comes with the asus p7131
2011 * which has a label saying is "Model PC-39"
2012 */
2013static struct ir_scancode ir_codes_asus_pc39[] = {
2014        /* Keys 0 to 9 */
2015        { 0x15, KEY_0 },
2016        { 0x29, KEY_1 },
2017        { 0x2d, KEY_2 },
2018        { 0x2b, KEY_3 },
2019        { 0x09, KEY_4 },
2020        { 0x0d, KEY_5 },
2021        { 0x0b, KEY_6 },
2022        { 0x31, KEY_7 },
2023        { 0x35, KEY_8 },
2024        { 0x33, KEY_9 },
2025
2026        { 0x3e, KEY_RADIO },            /* radio */
2027        { 0x03, KEY_MENU },             /* dvd/menu */
2028        { 0x2a, KEY_VOLUMEUP },
2029        { 0x19, KEY_VOLUMEDOWN },
2030        { 0x37, KEY_UP },
2031        { 0x3b, KEY_DOWN },
2032        { 0x27, KEY_LEFT },
2033        { 0x2f, KEY_RIGHT },
2034        { 0x25, KEY_VIDEO },            /* video */
2035        { 0x39, KEY_AUDIO },            /* music */
2036
2037        { 0x21, KEY_TV },               /* tv */
2038        { 0x1d, KEY_EXIT },             /* back */
2039        { 0x0a, KEY_CHANNELUP },        /* channel / program + */
2040        { 0x1b, KEY_CHANNELDOWN },      /* channel / program - */
2041        { 0x1a, KEY_ENTER },            /* enter */
2042
2043        { 0x06, KEY_PAUSE },            /* play/pause */
2044        { 0x1e, KEY_PREVIOUS },         /* rew */
2045        { 0x26, KEY_NEXT },             /* forward */
2046        { 0x0e, KEY_REWIND },           /* backward << */
2047        { 0x3a, KEY_FASTFORWARD },      /* forward >> */
2048        { 0x36, KEY_STOP },
2049        { 0x2e, KEY_RECORD },           /* recording */
2050        { 0x16, KEY_POWER },            /* the button that reads "close" */
2051
2052        { 0x11, KEY_ZOOM },             /* full screen */
2053        { 0x13, KEY_MACRO },            /* recall */
2054        { 0x23, KEY_HOME },             /* home */
2055        { 0x05, KEY_PVR },              /* picture */
2056        { 0x3d, KEY_MUTE },             /* mute */
2057        { 0x01, KEY_DVD },              /* dvd */
2058};
2059
2060struct ir_scancode_table ir_codes_asus_pc39_table = {
2061        .scan = ir_codes_asus_pc39,
2062        .size = ARRAY_SIZE(ir_codes_asus_pc39),
2063};
2064EXPORT_SYMBOL_GPL(ir_codes_asus_pc39_table);
2065
2066
2067/* Encore ENLTV-FM  - black plastic, white front cover with white glowing buttons
2068    Juan Pablo Sormani <sorman@gmail.com> */
2069static struct ir_scancode ir_codes_encore_enltv[] = {
2070
2071        /* Power button does nothing, neither in Windows app,
2072         although it sends data (used for BIOS wakeup?) */
2073        { 0x0d, KEY_MUTE },
2074
2075        { 0x1e, KEY_TV },
2076        { 0x00, KEY_VIDEO },
2077        { 0x01, KEY_AUDIO },            /* music */
2078        { 0x02, KEY_MHP },              /* picture */
2079
2080        { 0x1f, KEY_1 },
2081        { 0x03, KEY_2 },
2082        { 0x04, KEY_3 },
2083        { 0x05, KEY_4 },
2084        { 0x1c, KEY_5 },
2085        { 0x06, KEY_6 },
2086        { 0x07, KEY_7 },
2087        { 0x08, KEY_8 },
2088        { 0x1d, KEY_9 },
2089        { 0x0a, KEY_0 },
2090
2091        { 0x09, KEY_LIST },             /* -/-- */
2092        { 0x0b, KEY_LAST },             /* recall */
2093
2094        { 0x14, KEY_HOME },             /* win start menu */
2095        { 0x15, KEY_EXIT },             /* exit */
2096        { 0x16, KEY_CHANNELUP },        /* UP */
2097        { 0x12, KEY_CHANNELDOWN },      /* DOWN */
2098        { 0x0c, KEY_VOLUMEUP },         /* RIGHT */
2099        { 0x17, KEY_VOLUMEDOWN },       /* LEFT */
2100
2101        { 0x18, KEY_ENTER },            /* OK */
2102
2103        { 0x0e, KEY_ESC },
2104        { 0x13, KEY_CYCLEWINDOWS },     /* desktop */
2105        { 0x11, KEY_TAB },
2106        { 0x19, KEY_SWITCHVIDEOMODE },  /* switch */
2107
2108        { 0x1a, KEY_MENU },
2109        { 0x1b, KEY_ZOOM },             /* fullscreen */
2110        { 0x44, KEY_TIME },             /* time shift */
2111        { 0x40, KEY_MODE },             /* source */
2112
2113        { 0x5a, KEY_RECORD },
2114        { 0x42, KEY_PLAY },             /* play/pause */
2115        { 0x45, KEY_STOP },
2116        { 0x43, KEY_CAMERA },           /* camera icon */
2117
2118        { 0x48, KEY_REWIND },
2119        { 0x4a, KEY_FASTFORWARD },
2120        { 0x49, KEY_PREVIOUS },
2121        { 0x4b, KEY_NEXT },
2122
2123        { 0x4c, KEY_FAVORITES },        /* tv wall */
2124        { 0x4d, KEY_SOUND },            /* DVD sound */
2125        { 0x4e, KEY_LANGUAGE },         /* DVD lang */
2126        { 0x4f, KEY_TEXT },             /* DVD text */
2127
2128        { 0x50, KEY_SLEEP },            /* shutdown */
2129        { 0x51, KEY_MODE },             /* stereo > main */
2130        { 0x52, KEY_SELECT },           /* stereo > sap */
2131        { 0x53, KEY_PROG1 },            /* teletext */
2132
2133
2134        { 0x59, KEY_RED },              /* AP1 */
2135        { 0x41, KEY_GREEN },            /* AP2 */
2136        { 0x47, KEY_YELLOW },           /* AP3 */
2137        { 0x57, KEY_BLUE },             /* AP4 */
2138};
2139
2140struct ir_scancode_table ir_codes_encore_enltv_table = {
2141        .scan = ir_codes_encore_enltv,
2142        .size = ARRAY_SIZE(ir_codes_encore_enltv),
2143};
2144EXPORT_SYMBOL_GPL(ir_codes_encore_enltv_table);
2145
2146/* Encore ENLTV2-FM  - silver plastic - "Wand Media" written at the botton
2147    Mauro Carvalho Chehab <mchehab@infradead.org> */
2148static struct ir_scancode ir_codes_encore_enltv2[] = {
2149        { 0x4c, KEY_POWER2 },
2150        { 0x4a, KEY_TUNER },
2151        { 0x40, KEY_1 },
2152        { 0x60, KEY_2 },
2153        { 0x50, KEY_3 },
2154        { 0x70, KEY_4 },
2155        { 0x48, KEY_5 },
2156        { 0x68, KEY_6 },
2157        { 0x58, KEY_7 },
2158        { 0x78, KEY_8 },
2159        { 0x44, KEY_9 },
2160        { 0x54, KEY_0 },
2161
2162        { 0x64, KEY_LAST },             /* +100 */
2163        { 0x4e, KEY_AGAIN },            /* Recall */
2164
2165        { 0x6c, KEY_SWITCHVIDEOMODE },  /* Video Source */
2166        { 0x5e, KEY_MENU },
2167        { 0x56, KEY_SCREEN },
2168        { 0x7a, KEY_SETUP },
2169
2170        { 0x46, KEY_MUTE },
2171        { 0x5c, KEY_MODE },             /* Stereo */
2172        { 0x74, KEY_INFO },
2173        { 0x7c, KEY_CLEAR },
2174
2175        { 0x55, KEY_UP },
2176        { 0x49, KEY_DOWN },
2177        { 0x7e, KEY_LEFT },
2178        { 0x59, KEY_RIGHT },
2179        { 0x6a, KEY_ENTER },
2180
2181        { 0x42, KEY_VOLUMEUP },
2182        { 0x62, KEY_VOLUMEDOWN },
2183        { 0x52, KEY_CHANNELUP },
2184        { 0x72, KEY_CHANNELDOWN },
2185
2186        { 0x41, KEY_RECORD },
2187        { 0x51, KEY_CAMERA },           /* Snapshot */
2188        { 0x75, KEY_TIME },             /* Timeshift */
2189        { 0x71, KEY_TV2 },              /* PIP */
2190
2191        { 0x45, KEY_REWIND },
2192        { 0x6f, KEY_PAUSE },
2193        { 0x7d, KEY_FORWARD },
2194        { 0x79, KEY_STOP },
2195};
2196
2197struct ir_scancode_table ir_codes_encore_enltv2_table = {
2198        .scan = ir_codes_encore_enltv2,
2199        .size = ARRAY_SIZE(ir_codes_encore_enltv2),
2200};
2201EXPORT_SYMBOL_GPL(ir_codes_encore_enltv2_table);
2202
2203/* for the Technotrend 1500 bundled remotes (grey and black): */
2204static struct ir_scancode ir_codes_tt_1500[] = {
2205        { 0x01, KEY_POWER },
2206        { 0x02, KEY_SHUFFLE },          /* ? double-arrow key */
2207        { 0x03, KEY_1 },
2208        { 0x04, KEY_2 },
2209        { 0x05, KEY_3 },
2210        { 0x06, KEY_4 },
2211        { 0x07, KEY_5 },
2212        { 0x08, KEY_6 },
2213        { 0x09, KEY_7 },
2214        { 0x0a, KEY_8 },
2215        { 0x0b, KEY_9 },
2216        { 0x0c, KEY_0 },
2217        { 0x0d, KEY_UP },
2218        { 0x0e, KEY_LEFT },
2219        { 0x0f, KEY_OK },
2220        { 0x10, KEY_RIGHT },
2221        { 0x11, KEY_DOWN },
2222        { 0x12, KEY_INFO },
2223        { 0x13, KEY_EXIT },
2224        { 0x14, KEY_RED },
2225        { 0x15, KEY_GREEN },
2226        { 0x16, KEY_YELLOW },
2227        { 0x17, KEY_BLUE },
2228        { 0x18, KEY_MUTE },
2229        { 0x19, KEY_TEXT },
2230        { 0x1a, KEY_MODE },             /* ? TV/Radio */
2231        { 0x21, KEY_OPTION },
2232        { 0x22, KEY_EPG },
2233        { 0x23, KEY_CHANNELUP },
2234        { 0x24, KEY_CHANNELDOWN },
2235        { 0x25, KEY_VOLUMEUP },
2236        { 0x26, KEY_VOLUMEDOWN },
2237        { 0x27, KEY_SETUP },
2238        { 0x3a, KEY_RECORD },           /* these keys are only in the black remote */
2239        { 0x3b, KEY_PLAY },
2240        { 0x3c, KEY_STOP },
2241        { 0x3d, KEY_REWIND },
2242        { 0x3e, KEY_PAUSE },
2243        { 0x3f, KEY_FORWARD },
2244};
2245
2246struct ir_scancode_table ir_codes_tt_1500_table = {
2247        .scan = ir_codes_tt_1500,
2248        .size = ARRAY_SIZE(ir_codes_tt_1500),
2249};
2250EXPORT_SYMBOL_GPL(ir_codes_tt_1500_table);
2251
2252/* DViCO FUSION HDTV MCE remote */
2253static struct ir_scancode ir_codes_fusionhdtv_mce[] = {
2254
2255        { 0x0b, KEY_1 },
2256        { 0x17, KEY_2 },
2257        { 0x1b, KEY_3 },
2258        { 0x07, KEY_4 },
2259        { 0x50, KEY_5 },
2260        { 0x54, KEY_6 },
2261        { 0x48, KEY_7 },
2262        { 0x4c, KEY_8 },
2263        { 0x58, KEY_9 },
2264        { 0x03, KEY_0 },
2265
2266        { 0x5e, KEY_OK },
2267        { 0x51, KEY_UP },
2268        { 0x53, KEY_DOWN },
2269        { 0x5b, KEY_LEFT },
2270        { 0x5f, KEY_RIGHT },
2271
2272        { 0x02, KEY_TV },               /* Labeled DTV on remote */
2273        { 0x0e, KEY_MP3 },
2274        { 0x1a, KEY_DVD },
2275        { 0x1e, KEY_FAVORITES },        /* Labeled CPF on remote */
2276        { 0x16, KEY_SETUP },
2277        { 0x46, KEY_POWER2 },           /* TV On/Off button on remote */
2278        { 0x0a, KEY_EPG },              /* Labeled Guide on remote */
2279
2280        { 0x49, KEY_BACK },
2281        { 0x59, KEY_INFO },             /* Labeled MORE on remote */
2282        { 0x4d, KEY_MENU },             /* Labeled DVDMENU on remote */
2283        { 0x55, KEY_CYCLEWINDOWS },     /* Labeled ALT-TAB on remote */
2284
2285        { 0x0f, KEY_PREVIOUSSONG },     /* Labeled |<< REPLAY on remote */
2286        { 0x12, KEY_NEXTSONG },         /* Labeled >>| SKIP on remote */
2287        { 0x42, KEY_ENTER },            /* Labeled START with a green
2288                                           MS windows logo on remote */
2289
2290        { 0x15, KEY_VOLUMEUP },
2291        { 0x05, KEY_VOLUMEDOWN },
2292        { 0x11, KEY_CHANNELUP },
2293        { 0x09, KEY_CHANNELDOWN },
2294
2295        { 0x52, KEY_CAMERA },
2296        { 0x5a, KEY_TUNER },
2297        { 0x19, KEY_OPEN },
2298
2299        { 0x13, KEY_MODE },             /* 4:3 16:9 select */
2300        { 0x1f, KEY_ZOOM },
2301
2302        { 0x43, KEY_REWIND },
2303        { 0x47, KEY_PLAYPAUSE },
2304        { 0x4f, KEY_FASTFORWARD },
2305        { 0x57, KEY_MUTE },
2306        { 0x0d, KEY_STOP },
2307        { 0x01, KEY_RECORD },
2308        { 0x4e, KEY_POWER },
2309};
2310
2311struct ir_scancode_table ir_codes_fusionhdtv_mce_table = {
2312        .scan = ir_codes_fusionhdtv_mce,
2313        .size = ARRAY_SIZE(ir_codes_fusionhdtv_mce),
2314};
2315EXPORT_SYMBOL_GPL(ir_codes_fusionhdtv_mce_table);
2316
2317/* Pinnacle PCTV HD 800i mini remote */
2318static struct ir_scancode ir_codes_pinnacle_pctv_hd[] = {
2319
2320        { 0x0f, KEY_1 },
2321        { 0x15, KEY_2 },
2322        { 0x10, KEY_3 },
2323        { 0x18, KEY_4 },
2324        { 0x1b, KEY_5 },
2325        { 0x1e, KEY_6 },
2326        { 0x11, KEY_7 },
2327        { 0x21, KEY_8 },
2328        { 0x12, KEY_9 },
2329        { 0x27, KEY_0 },
2330
2331        { 0x24, KEY_ZOOM },
2332        { 0x2a, KEY_SUBTITLE },
2333
2334        { 0x00, KEY_MUTE },
2335        { 0x01, KEY_ENTER },    /* Pinnacle Logo */
2336        { 0x39, KEY_POWER },
2337
2338        { 0x03, KEY_VOLUMEUP },
2339        { 0x09, KEY_VOLUMEDOWN },
2340        { 0x06, KEY_CHANNELUP },
2341        { 0x0c, KEY_CHANNELDOWN },
2342
2343        { 0x2d, KEY_REWIND },
2344        { 0x30, KEY_PLAYPAUSE },
2345        { 0x33, KEY_FASTFORWARD },
2346        { 0x3c, KEY_STOP },
2347        { 0x36, KEY_RECORD },
2348        { 0x3f, KEY_EPG },      /* Labeled "?" */
2349};
2350
2351struct ir_scancode_table ir_codes_pinnacle_pctv_hd_table = {
2352        .scan = ir_codes_pinnacle_pctv_hd,
2353        .size = ARRAY_SIZE(ir_codes_pinnacle_pctv_hd),
2354};
2355EXPORT_SYMBOL_GPL(ir_codes_pinnacle_pctv_hd_table);
2356
2357/*
2358 * Igor Kuznetsov <igk72@ya.ru>
2359 * Andrey J. Melnikov <temnota@kmv.ru>
2360 *
2361 * Keytable is used by BeholdTV 60x series, M6 series at
2362 * least, and probably other cards too.
2363 * The "ascii-art picture" below (in comments, first row
2364 * is the keycode in hex, and subsequent row(s) shows
2365 * the button labels (several variants when appropriate)
2366 * helps to descide which keycodes to assign to the buttons.
2367 */
2368static struct ir_scancode ir_codes_behold[] = {
2369
2370        /*  0x1c            0x12  *
2371         *  TV/FM          POWER  *
2372         *                        */
2373        { 0x1c, KEY_TUNER },    /* XXX KEY_TV / KEY_RADIO */
2374        { 0x12, KEY_POWER },
2375
2376        /*  0x01    0x02    0x03  *
2377         *   1       2       3    *
2378         *                        *
2379         *  0x04    0x05    0x06  *
2380         *   4       5       6    *
2381         *                        *
2382         *  0x07    0x08    0x09  *
2383         *   7       8       9    *
2384         *                        */
2385        { 0x01, KEY_1 },
2386        { 0x02, KEY_2 },
2387        { 0x03, KEY_3 },
2388        { 0x04, KEY_4 },
2389        { 0x05, KEY_5 },
2390        { 0x06, KEY_6 },
2391        { 0x07, KEY_7 },
2392        { 0x08, KEY_8 },
2393        { 0x09, KEY_9 },
2394
2395        /*  0x0a    0x00    0x17  *
2396         * RECALL    0      MODE  *
2397         *                        */
2398        { 0x0a, KEY_AGAIN },
2399        { 0x00, KEY_0 },
2400        { 0x17, KEY_MODE },
2401
2402        /*  0x14          0x10    *
2403         * ASPECT      FULLSCREEN *
2404         *                        */
2405        { 0x14, KEY_SCREEN },
2406        { 0x10, KEY_ZOOM },
2407
2408        /*          0x0b          *
2409         *           Up           *
2410         *                        *
2411         *  0x18    0x16    0x0c  *
2412         *  Left     Ok     Right *
2413         *                        *
2414         *         0x015          *
2415         *         Down           *
2416         *                        */
2417        { 0x0b, KEY_CHANNELUP },
2418        { 0x18, KEY_VOLUMEDOWN },
2419        { 0x16, KEY_OK },               /* XXX KEY_ENTER */
2420        { 0x0c, KEY_VOLUMEUP },
2421        { 0x15, KEY_CHANNELDOWN },
2422
2423        /*  0x11            0x0d  *
2424         *  MUTE            INFO  *
2425         *                        */
2426        { 0x11, KEY_MUTE },
2427        { 0x0d, KEY_INFO },
2428
2429        /*  0x0f    0x1b    0x1a  *
2430         * RECORD PLAY/PAUSE STOP *
2431         *                        *
2432         *  0x0e    0x1f    0x1e  *
2433         *TELETEXT  AUDIO  SOURCE *
2434         *           RED   YELLOW *
2435         *                        */
2436        { 0x0f, KEY_RECORD },
2437        { 0x1b, KEY_PLAYPAUSE },
2438        { 0x1a, KEY_STOP },
2439        { 0x0e, KEY_TEXT },
2440        { 0x1f, KEY_RED },      /*XXX KEY_AUDIO */
2441        { 0x1e, KEY_YELLOW },   /*XXX KEY_SOURCE        */
2442
2443        /*  0x1d   0x13     0x19  *
2444         * SLEEP  PREVIEW   DVB   *
2445         *         GREEN    BLUE  *
2446         *                        */
2447        { 0x1d, KEY_SLEEP },
2448        { 0x13, KEY_GREEN },
2449        { 0x19, KEY_BLUE },     /* XXX KEY_SAT  */
2450
2451        /*  0x58           0x5c   *
2452         * FREEZE        SNAPSHOT *
2453         *                        */
2454        { 0x58, KEY_SLOW },
2455        { 0x5c, KEY_CAMERA },
2456
2457};
2458
2459struct ir_scancode_table ir_codes_behold_table = {
2460        .scan = ir_codes_behold,
2461        .size = ARRAY_SIZE(ir_codes_behold),
2462};
2463EXPORT_SYMBOL_GPL(ir_codes_behold_table);
2464
2465/* Beholder Intl. Ltd. 2008
2466 * Dmitry Belimov d.belimov@google.com
2467 * Keytable is used by BeholdTV Columbus
2468 * The "ascii-art picture" below (in comments, first row
2469 * is the keycode in hex, and subsequent row(s) shows
2470 * the button labels (several variants when appropriate)
2471 * helps to descide which keycodes to assign to the buttons.
2472 */
2473static struct ir_scancode ir_codes_behold_columbus[] = {
2474
2475        /*  0x13   0x11   0x1C   0x12  *
2476         *  Mute  Source  TV/FM  Power *
2477         *                             */
2478
2479        { 0x13, KEY_MUTE },
2480        { 0x11, KEY_PROPS },
2481        { 0x1C, KEY_TUNER },    /* KEY_TV/KEY_RADIO     */
2482        { 0x12, KEY_POWER },
2483
2484        /*  0x01    0x02    0x03  0x0D    *
2485         *   1       2       3   Stereo   *
2486         *                                *
2487         *  0x04    0x05    0x06  0x19    *
2488         *   4       5       6   Snapshot *
2489         *                                *
2490         *  0x07    0x08    0x09  0x10    *
2491         *   7       8       9    Zoom    *
2492         *                                */
2493        { 0x01, KEY_1 },
2494        { 0x02, KEY_2 },
2495        { 0x03, KEY_3 },
2496        { 0x0D, KEY_SETUP },      /* Setup key */
2497        { 0x04, KEY_4 },
2498        { 0x05, KEY_5 },
2499        { 0x06, KEY_6 },
2500        { 0x19, KEY_CAMERA },   /* Snapshot key */
2501        { 0x07, KEY_7 },
2502        { 0x08, KEY_8 },
2503        { 0x09, KEY_9 },
2504        { 0x10, KEY_ZOOM },
2505
2506        /*  0x0A    0x00    0x0B       0x0C   *
2507         * RECALL    0    ChannelUp  VolumeUp *
2508         *                                    */
2509        { 0x0A, KEY_AGAIN },
2510        { 0x00, KEY_0 },
2511        { 0x0B, KEY_CHANNELUP },
2512        { 0x0C, KEY_VOLUMEUP },
2513
2514        /*   0x1B      0x1D      0x15        0x18     *
2515         * Timeshift  Record  ChannelDown  VolumeDown *
2516         *                                            */
2517
2518        { 0x1B, KEY_TIME },
2519        { 0x1D, KEY_RECORD },
2520        { 0x15, KEY_CHANNELDOWN },
2521        { 0x18, KEY_VOLUMEDOWN },
2522
2523        /*   0x0E   0x1E     0x0F     0x1A  *
2524         *   Stop   Pause  Previouse  Next  *
2525         *                                  */
2526
2527        { 0x0E, KEY_STOP },
2528        { 0x1E, KEY_PAUSE },
2529        { 0x0F, KEY_PREVIOUS },
2530        { 0x1A, KEY_NEXT },
2531
2532};
2533
2534struct ir_scancode_table ir_codes_behold_columbus_table = {
2535        .scan = ir_codes_behold_columbus,
2536        .size = ARRAY_SIZE(ir_codes_behold_columbus),
2537};
2538EXPORT_SYMBOL_GPL(ir_codes_behold_columbus_table);
2539
2540/*
2541 * Remote control for the Genius TVGO A11MCE
2542 * Adrian Pardini <pardo.bsso@gmail.com>
2543 */
2544static struct ir_scancode ir_codes_genius_tvgo_a11mce[] = {
2545        /* Keys 0 to 9 */
2546        { 0x48, KEY_0 },
2547        { 0x09, KEY_1 },
2548        { 0x1d, KEY_2 },
2549        { 0x1f, KEY_3 },
2550        { 0x19, KEY_4 },
2551        { 0x1b, KEY_5 },
2552        { 0x11, KEY_6 },
2553        { 0x17, KEY_7 },
2554        { 0x12, KEY_8 },
2555        { 0x16, KEY_9 },
2556
2557        { 0x54, KEY_RECORD },           /* recording */
2558        { 0x06, KEY_MUTE },             /* mute */
2559        { 0x10, KEY_POWER },
2560        { 0x40, KEY_LAST },             /* recall */
2561        { 0x4c, KEY_CHANNELUP },        /* channel / program + */
2562        { 0x00, KEY_CHANNELDOWN },      /* channel / program - */
2563        { 0x0d, KEY_VOLUMEUP },
2564        { 0x15, KEY_VOLUMEDOWN },
2565        { 0x4d, KEY_OK },               /* also labeled as Pause */
2566        { 0x1c, KEY_ZOOM },             /* full screen and Stop*/
2567        { 0x02, KEY_MODE },             /* AV Source or Rewind*/
2568        { 0x04, KEY_LIST },             /* -/-- */
2569        /* small arrows above numbers */
2570        { 0x1a, KEY_NEXT },             /* also Fast Forward */
2571        { 0x0e, KEY_PREVIOUS },         /* also Rewind */
2572        /* these are in a rather non standard layout and have
2573        an alternate name written */
2574        { 0x1e, KEY_UP },               /* Video Setting */
2575        { 0x0a, KEY_DOWN },             /* Video Default */
2576        { 0x05, KEY_CAMERA },           /* Snapshot */
2577        { 0x0c, KEY_RIGHT },            /* Hide Panel */
2578        /* Four buttons without label */
2579        { 0x49, KEY_RED },
2580        { 0x0b, KEY_GREEN },
2581        { 0x13, KEY_YELLOW },
2582        { 0x50, KEY_BLUE },
2583};
2584
2585struct ir_scancode_table ir_codes_genius_tvgo_a11mce_table = {
2586        .scan = ir_codes_genius_tvgo_a11mce,
2587        .size = ARRAY_SIZE(ir_codes_genius_tvgo_a11mce),
2588};
2589EXPORT_SYMBOL_GPL(ir_codes_genius_tvgo_a11mce_table);
2590
2591/*
2592 * Remote control for Powercolor Real Angel 330
2593 * Daniel Fraga <fragabr@gmail.com>
2594 */
2595static struct ir_scancode ir_codes_powercolor_real_angel[] = {
2596        { 0x38, KEY_SWITCHVIDEOMODE },  /* switch inputs */
2597        { 0x0c, KEY_MEDIA },            /* Turn ON/OFF App */
2598        { 0x00, KEY_0 },
2599        { 0x01, KEY_1 },
2600        { 0x02, KEY_2 },
2601        { 0x03, KEY_3 },
2602        { 0x04, KEY_4 },
2603        { 0x05, KEY_5 },
2604        { 0x06, KEY_6 },
2605        { 0x07, KEY_7 },
2606        { 0x08, KEY_8 },
2607        { 0x09, KEY_9 },
2608        { 0x0a, KEY_DIGITS },           /* single, double, tripple digit */
2609        { 0x29, KEY_PREVIOUS },         /* previous channel */
2610        { 0x12, KEY_BRIGHTNESSUP },
2611        { 0x13, KEY_BRIGHTNESSDOWN },
2612        { 0x2b, KEY_MODE },             /* stereo/mono */
2613        { 0x2c, KEY_TEXT },             /* teletext */
2614        { 0x20, KEY_CHANNELUP },        /* channel up */
2615        { 0x21, KEY_CHANNELDOWN },      /* channel down */
2616        { 0x10, KEY_VOLUMEUP },         /* volume up */
2617        { 0x11, KEY_VOLUMEDOWN },       /* volume down */
2618        { 0x0d, KEY_MUTE },
2619        { 0x1f, KEY_RECORD },
2620        { 0x17, KEY_PLAY },
2621        { 0x16, KEY_PAUSE },
2622        { 0x0b, KEY_STOP },
2623        { 0x27, KEY_FASTFORWARD },
2624        { 0x26, KEY_REWIND },
2625        { 0x1e, KEY_SEARCH },           /* autoscan */
2626        { 0x0e, KEY_CAMERA },           /* snapshot */
2627        { 0x2d, KEY_SETUP },
2628        { 0x0f, KEY_SCREEN },           /* full screen */
2629        { 0x14, KEY_RADIO },            /* FM radio */
2630        { 0x25, KEY_POWER },            /* power */
2631};
2632
2633struct ir_scancode_table ir_codes_powercolor_real_angel_table = {
2634        .scan = ir_codes_powercolor_real_angel,
2635        .size = ARRAY_SIZE(ir_codes_powercolor_real_angel),
2636};
2637EXPORT_SYMBOL_GPL(ir_codes_powercolor_real_angel_table);
2638
2639/* Kworld Plus TV Analog Lite PCI IR
2640   Mauro Carvalho Chehab <mchehab@infradead.org>
2641 */
2642static struct ir_scancode ir_codes_kworld_plus_tv_analog[] = {
2643        { 0x0c, KEY_PROG1 },            /* Kworld key */
2644        { 0x16, KEY_CLOSECD },          /* -> ) */
2645        { 0x1d, KEY_POWER2 },
2646
2647        { 0x00, KEY_1 },
2648        { 0x01, KEY_2 },
2649        { 0x02, KEY_3 },                /* Two keys have the same code: 3 and left */
2650        { 0x03, KEY_4 },                /* Two keys have the same code: 3 and right */
2651        { 0x04, KEY_5 },
2652        { 0x05, KEY_6 },
2653        { 0x06, KEY_7 },
2654        { 0x07, KEY_8 },
2655        { 0x08, KEY_9 },
2656        { 0x0a, KEY_0 },
2657
2658        { 0x09, KEY_AGAIN },
2659        { 0x14, KEY_MUTE },
2660
2661        { 0x20, KEY_UP },
2662        { 0x21, KEY_DOWN },
2663        { 0x0b, KEY_ENTER },
2664
2665        { 0x10, KEY_CHANNELUP },
2666        { 0x11, KEY_CHANNELDOWN },
2667
2668        /* Couldn't map key left/key right since those
2669           conflict with '3' and '4' scancodes
2670           I dunno what the original driver does
2671         */
2672
2673        { 0x13, KEY_VOLUMEUP },
2674        { 0x12, KEY_VOLUMEDOWN },
2675
2676        /* The lower part of the IR
2677           There are several duplicated keycodes there.
2678           Most of them conflict with digits.
2679           Add mappings just to the unused scancodes.
2680           Somehow, the original driver has a way to know,
2681           but this doesn't seem to be on some GPIO.
2682           Also, it is not related to the time between keyup
2683           and keydown.
2684         */
2685        { 0x19, KEY_TIME},              /* Timeshift */
2686        { 0x1a, KEY_STOP},
2687        { 0x1b, KEY_RECORD},
2688
2689        { 0x22, KEY_TEXT},
2690
2691        { 0x15, KEY_AUDIO},             /* ((*)) */
2692        { 0x0f, KEY_ZOOM},
2693        { 0x1c, KEY_CAMERA},            /* snapshot */
2694
2695        { 0x18, KEY_RED},               /* B */
2696        { 0x23, KEY_GREEN},             /* C */
2697};
2698struct ir_scancode_table ir_codes_kworld_plus_tv_analog_table = {
2699        .scan = ir_codes_kworld_plus_tv_analog,
2700        .size = ARRAY_SIZE(ir_codes_kworld_plus_tv_analog),
2701};
2702EXPORT_SYMBOL_GPL(ir_codes_kworld_plus_tv_analog_table);
2703
2704/* Kaiomy TVnPC U2
2705   Mauro Carvalho Chehab <mchehab@infradead.org>
2706 */
2707static struct ir_scancode ir_codes_kaiomy[] = {
2708        { 0x43, KEY_POWER2},
2709        { 0x01, KEY_LIST},
2710        { 0x0b, KEY_ZOOM},
2711        { 0x03, KEY_POWER},
2712
2713        { 0x04, KEY_1},
2714        { 0x08, KEY_2},
2715        { 0x02, KEY_3},
2716
2717        { 0x0f, KEY_4},
2718        { 0x05, KEY_5},
2719        { 0x06, KEY_6},
2720
2721        { 0x0c, KEY_7},
2722        { 0x0d, KEY_8},
2723        { 0x0a, KEY_9},
2724
2725        { 0x11, KEY_0},
2726
2727        { 0x09, KEY_CHANNELUP},
2728        { 0x07, KEY_CHANNELDOWN},
2729
2730        { 0x0e, KEY_VOLUMEUP},
2731        { 0x13, KEY_VOLUMEDOWN},
2732
2733        { 0x10, KEY_HOME},
2734        { 0x12, KEY_ENTER},
2735
2736        { 0x14, KEY_RECORD},
2737        { 0x15, KEY_STOP},
2738        { 0x16, KEY_PLAY},
2739        { 0x17, KEY_MUTE},
2740
2741        { 0x18, KEY_UP},
2742        { 0x19, KEY_DOWN},
2743        { 0x1a, KEY_LEFT},
2744        { 0x1b, KEY_RIGHT},
2745
2746        { 0x1c, KEY_RED},
2747        { 0x1d, KEY_GREEN},
2748        { 0x1e, KEY_YELLOW},
2749        { 0x1f, KEY_BLUE},
2750};
2751struct ir_scancode_table ir_codes_kaiomy_table = {
2752        .scan = ir_codes_kaiomy,
2753        .size = ARRAY_SIZE(ir_codes_kaiomy),
2754};
2755EXPORT_SYMBOL_GPL(ir_codes_kaiomy_table);
2756
2757static struct ir_scancode ir_codes_avermedia_a16d[] = {
2758        { 0x20, KEY_LIST},
2759        { 0x00, KEY_POWER},
2760        { 0x28, KEY_1},
2761        { 0x18, KEY_2},
2762        { 0x38, KEY_3},
2763        { 0x24, KEY_4},
2764        { 0x14, KEY_5},
2765        { 0x34, KEY_6},
2766        { 0x2c, KEY_7},
2767        { 0x1c, KEY_8},
2768        { 0x3c, KEY_9},
2769        { 0x12, KEY_SUBTITLE},
2770        { 0x22, KEY_0},
2771        { 0x32, KEY_REWIND},
2772        { 0x3a, KEY_SHUFFLE},
2773        { 0x02, KEY_PRINT},
2774        { 0x11, KEY_CHANNELDOWN},
2775        { 0x31, KEY_CHANNELUP},
2776        { 0x0c, KEY_ZOOM},
2777        { 0x1e, KEY_VOLUMEDOWN},
2778        { 0x3e, KEY_VOLUMEUP},
2779        { 0x0a, KEY_MUTE},
2780        { 0x04, KEY_AUDIO},
2781        { 0x26, KEY_RECORD},
2782        { 0x06, KEY_PLAY},
2783        { 0x36, KEY_STOP},
2784        { 0x16, KEY_PAUSE},
2785        { 0x2e, KEY_REWIND},
2786        { 0x0e, KEY_FASTFORWARD},
2787        { 0x30, KEY_TEXT},
2788        { 0x21, KEY_GREEN},
2789        { 0x01, KEY_BLUE},
2790        { 0x08, KEY_EPG},
2791        { 0x2a, KEY_MENU},
2792};
2793struct ir_scancode_table ir_codes_avermedia_a16d_table = {
2794        .scan = ir_codes_avermedia_a16d,
2795        .size = ARRAY_SIZE(ir_codes_avermedia_a16d),
2796};
2797EXPORT_SYMBOL_GPL(ir_codes_avermedia_a16d_table);
2798
2799/* Encore ENLTV-FM v5.3
2800   Mauro Carvalho Chehab <mchehab@infradead.org>
2801 */
2802static struct ir_scancode ir_codes_encore_enltv_fm53[] = {
2803        { 0x10, KEY_POWER2},
2804        { 0x06, KEY_MUTE},
2805
2806        { 0x09, KEY_1},
2807        { 0x1d, KEY_2},
2808        { 0x1f, KEY_3},
2809        { 0x19, KEY_4},
2810        { 0x1b, KEY_5},
2811        { 0x11, KEY_6},
2812        { 0x17, KEY_7},
2813        { 0x12, KEY_8},
2814        { 0x16, KEY_9},
2815        { 0x48, KEY_0},
2816
2817        { 0x04, KEY_LIST},              /* -/-- */
2818        { 0x40, KEY_LAST},              /* recall */
2819
2820        { 0x02, KEY_MODE},              /* TV/AV */
2821        { 0x05, KEY_CAMERA},            /* SNAPSHOT */
2822
2823        { 0x4c, KEY_CHANNELUP},         /* UP */
2824        { 0x00, KEY_CHANNELDOWN},       /* DOWN */
2825        { 0x0d, KEY_VOLUMEUP},          /* RIGHT */
2826        { 0x15, KEY_VOLUMEDOWN},        /* LEFT */
2827        { 0x49, KEY_ENTER},             /* OK */
2828
2829        { 0x54, KEY_RECORD},
2830        { 0x4d, KEY_PLAY},              /* pause */
2831
2832        { 0x1e, KEY_MENU},              /* video setting */
2833        { 0x0e, KEY_RIGHT},             /* <- */
2834        { 0x1a, KEY_LEFT},              /* -> */
2835
2836        { 0x0a, KEY_CLEAR},             /* video default */
2837        { 0x0c, KEY_ZOOM},              /* hide pannel */
2838        { 0x47, KEY_SLEEP},             /* shutdown */
2839};
2840struct ir_scancode_table ir_codes_encore_enltv_fm53_table = {
2841        .scan = ir_codes_encore_enltv_fm53,
2842        .size = ARRAY_SIZE(ir_codes_encore_enltv_fm53),
2843};
2844EXPORT_SYMBOL_GPL(ir_codes_encore_enltv_fm53_table);
2845
2846/* Zogis Real Audio 220 - 32 keys IR */
2847static struct ir_scancode ir_codes_real_audio_220_32_keys[] = {
2848        { 0x1c, KEY_RADIO},
2849        { 0x12, KEY_POWER2},
2850
2851        { 0x01, KEY_1},
2852        { 0x02, KEY_2},
2853        { 0x03, KEY_3},
2854        { 0x04, KEY_4},
2855        { 0x05, KEY_5},
2856        { 0x06, KEY_6},
2857        { 0x07, KEY_7},
2858        { 0x08, KEY_8},
2859        { 0x09, KEY_9},
2860        { 0x00, KEY_0},
2861
2862        { 0x0c, KEY_VOLUMEUP},
2863        { 0x18, KEY_VOLUMEDOWN},
2864        { 0x0b, KEY_CHANNELUP},
2865        { 0x15, KEY_CHANNELDOWN},
2866        { 0x16, KEY_ENTER},
2867
2868        { 0x11, KEY_LIST},              /* Source */
2869        { 0x0d, KEY_AUDIO},             /* stereo */
2870
2871        { 0x0f, KEY_PREVIOUS},          /* Prev */
2872        { 0x1b, KEY_TIME},              /* Timeshift */
2873        { 0x1a, KEY_NEXT},              /* Next */
2874
2875        { 0x0e, KEY_STOP},
2876        { 0x1f, KEY_PLAY},
2877        { 0x1e, KEY_PLAYPAUSE},         /* Pause */
2878
2879        { 0x1d, KEY_RECORD},
2880        { 0x13, KEY_MUTE},
2881        { 0x19, KEY_CAMERA},            /* Snapshot */
2882
2883};
2884struct ir_scancode_table ir_codes_real_audio_220_32_keys_table = {
2885        .scan = ir_codes_real_audio_220_32_keys,
2886        .size = ARRAY_SIZE(ir_codes_real_audio_220_32_keys),
2887};
2888EXPORT_SYMBOL_GPL(ir_codes_real_audio_220_32_keys_table);
2889
2890/* ATI TV Wonder HD 600 USB
2891   Devin Heitmueller <devin.heitmueller@gmail.com>
2892 */
2893static struct ir_scancode ir_codes_ati_tv_wonder_hd_600[] = {
2894        { 0x00, KEY_RECORD},            /* Row 1 */
2895        { 0x01, KEY_PLAYPAUSE},
2896        { 0x02, KEY_STOP},
2897        { 0x03, KEY_POWER},
2898        { 0x04, KEY_PREVIOUS},  /* Row 2 */
2899        { 0x05, KEY_REWIND},
2900        { 0x06, KEY_FORWARD},
2901        { 0x07, KEY_NEXT},
2902        { 0x08, KEY_EPG},               /* Row 3 */
2903        { 0x09, KEY_HOME},
2904        { 0x0a, KEY_MENU},
2905        { 0x0b, KEY_CHANNELUP},
2906        { 0x0c, KEY_BACK},              /* Row 4 */
2907        { 0x0d, KEY_UP},
2908        { 0x0e, KEY_INFO},
2909        { 0x0f, KEY_CHANNELDOWN},
2910        { 0x10, KEY_LEFT},              /* Row 5 */
2911        { 0x11, KEY_SELECT},
2912        { 0x12, KEY_RIGHT},
2913        { 0x13, KEY_VOLUMEUP},
2914        { 0x14, KEY_LAST},              /* Row 6 */
2915        { 0x15, KEY_DOWN},
2916        { 0x16, KEY_MUTE},
2917        { 0x17, KEY_VOLUMEDOWN},
2918};
2919struct ir_scancode_table ir_codes_ati_tv_wonder_hd_600_table = {
2920        .scan = ir_codes_ati_tv_wonder_hd_600,
2921        .size = ARRAY_SIZE(ir_codes_ati_tv_wonder_hd_600),
2922};
2923EXPORT_SYMBOL_GPL(ir_codes_ati_tv_wonder_hd_600_table);
2924
2925/* DVBWorld remotes
2926   Igor M. Liplianin <liplianin@me.by>
2927 */
2928static struct ir_scancode ir_codes_dm1105_nec[] = {
2929        { 0x0a, KEY_POWER2},            /* power */
2930        { 0x0c, KEY_MUTE},              /* mute */
2931        { 0x11, KEY_1},
2932        { 0x12, KEY_2},
2933        { 0x13, KEY_3},
2934        { 0x14, KEY_4},
2935        { 0x15, KEY_5},
2936        { 0x16, KEY_6},
2937        { 0x17, KEY_7},
2938        { 0x18, KEY_8},
2939        { 0x19, KEY_9},
2940        { 0x10, KEY_0},
2941        { 0x1c, KEY_CHANNELUP},         /* ch+ */
2942        { 0x0f, KEY_CHANNELDOWN},       /* ch- */
2943        { 0x1a, KEY_VOLUMEUP},          /* vol+ */
2944        { 0x0e, KEY_VOLUMEDOWN},        /* vol- */
2945        { 0x04, KEY_RECORD},            /* rec */
2946        { 0x09, KEY_CHANNEL},           /* fav */
2947        { 0x08, KEY_BACKSPACE},         /* rewind */
2948        { 0x07, KEY_FASTFORWARD},       /* fast */
2949        { 0x0b, KEY_PAUSE},             /* pause */
2950        { 0x02, KEY_ESC},               /* cancel */
2951        { 0x03, KEY_TAB},               /* tab */
2952        { 0x00, KEY_UP},                /* up */
2953        { 0x1f, KEY_ENTER},             /* ok */
2954        { 0x01, KEY_DOWN},              /* down */
2955        { 0x05, KEY_RECORD},            /* cap */
2956        { 0x06, KEY_STOP},              /* stop */
2957        { 0x40, KEY_ZOOM},              /* full */
2958        { 0x1e, KEY_TV},                /* tvmode */
2959        { 0x1b, KEY_B},                 /* recall */
2960};
2961struct ir_scancode_table ir_codes_dm1105_nec_table = {
2962        .scan = ir_codes_dm1105_nec,
2963        .size = ARRAY_SIZE(ir_codes_dm1105_nec),
2964};
2965EXPORT_SYMBOL_GPL(ir_codes_dm1105_nec_table);
2966
2967/* Terratec Cinergy Hybrid T USB XS
2968   Devin Heitmueller <dheitmueller@linuxtv.org>
2969 */
2970static struct ir_scancode ir_codes_terratec_cinergy_xs[] = {
2971        { 0x41, KEY_HOME},
2972        { 0x01, KEY_POWER},
2973        { 0x42, KEY_MENU},
2974        { 0x02, KEY_1},
2975        { 0x03, KEY_2},
2976        { 0x04, KEY_3},
2977        { 0x43, KEY_SUBTITLE},
2978        { 0x05, KEY_4},
2979        { 0x06, KEY_5},
2980        { 0x07, KEY_6},
2981        { 0x44, KEY_TEXT},
2982        { 0x08, KEY_7},
2983        { 0x09, KEY_8},
2984        { 0x0a, KEY_9},
2985        { 0x45, KEY_DELETE},
2986        { 0x0b, KEY_TUNER},
2987        { 0x0c, KEY_0},
2988        { 0x0d, KEY_MODE},
2989        { 0x46, KEY_TV},
2990        { 0x47, KEY_DVD},
2991        { 0x49, KEY_VIDEO},
2992        { 0x4b, KEY_AUX},
2993        { 0x10, KEY_UP},
2994        { 0x11, KEY_LEFT},
2995        { 0x12, KEY_OK},
2996        { 0x13, KEY_RIGHT},
2997        { 0x14, KEY_DOWN},
2998        { 0x0f, KEY_EPG},
2999        { 0x16, KEY_INFO},
3000        { 0x4d, KEY_BACKSPACE},
3001        { 0x1c, KEY_VOLUMEUP},
3002        { 0x4c, KEY_PLAY},
3003        { 0x1b, KEY_CHANNELUP},
3004        { 0x1e, KEY_VOLUMEDOWN},
3005        { 0x1d, KEY_MUTE},
3006        { 0x1f, KEY_CHANNELDOWN},
3007        { 0x17, KEY_RED},
3008        { 0x18, KEY_GREEN},
3009        { 0x19, KEY_YELLOW},
3010        { 0x1a, KEY_BLUE},
3011        { 0x58, KEY_RECORD},
3012        { 0x48, KEY_STOP},
3013        { 0x40, KEY_PAUSE},
3014        { 0x54, KEY_LAST},
3015        { 0x4e, KEY_REWIND},
3016        { 0x4f, KEY_FASTFORWARD},
3017        { 0x5c, KEY_NEXT},
3018};
3019struct ir_scancode_table ir_codes_terratec_cinergy_xs_table = {
3020        .scan = ir_codes_terratec_cinergy_xs,
3021        .size = ARRAY_SIZE(ir_codes_terratec_cinergy_xs),
3022};
3023EXPORT_SYMBOL_GPL(ir_codes_terratec_cinergy_xs_table);
3024
3025/* EVGA inDtube
3026   Devin Heitmueller <devin.heitmueller@gmail.com>
3027 */
3028static struct ir_scancode ir_codes_evga_indtube[] = {
3029        { 0x12, KEY_POWER},
3030        { 0x02, KEY_MODE},      /* TV */
3031        { 0x14, KEY_MUTE},
3032        { 0x1a, KEY_CHANNELUP},
3033        { 0x16, KEY_TV2},       /* PIP */
3034        { 0x1d, KEY_VOLUMEUP},
3035        { 0x05, KEY_CHANNELDOWN},
3036        { 0x0f, KEY_PLAYPAUSE},
3037        { 0x19, KEY_VOLUMEDOWN},
3038        { 0x1c, KEY_REWIND},
3039        { 0x0d, KEY_RECORD},
3040        { 0x18, KEY_FORWARD},
3041        { 0x1e, KEY_PREVIOUS},
3042        { 0x1b, KEY_STOP},
3043        { 0x1f, KEY_NEXT},
3044        { 0x13, KEY_CAMERA},
3045};
3046struct ir_scancode_table ir_codes_evga_indtube_table = {
3047        .scan = ir_codes_evga_indtube,
3048        .size = ARRAY_SIZE(ir_codes_evga_indtube),
3049};
3050EXPORT_SYMBOL_GPL(ir_codes_evga_indtube_table);
3051
3052static struct ir_scancode ir_codes_videomate_s350[] = {
3053        { 0x00, KEY_TV},
3054        { 0x01, KEY_DVD},
3055        { 0x04, KEY_RECORD},
3056        { 0x05, KEY_VIDEO},     /* TV/Video */
3057        { 0x07, KEY_STOP},
3058        { 0x08, KEY_PLAYPAUSE},
3059        { 0x0a, KEY_REWIND},
3060        { 0x0f, KEY_FASTFORWARD},
3061        { 0x10, KEY_CHANNELUP},
3062        { 0x12, KEY_VOLUMEUP},
3063        { 0x13, KEY_CHANNELDOWN},
3064        { 0x14, KEY_MUTE},
3065        { 0x15, KEY_VOLUMEDOWN},
3066        { 0x16, KEY_1},
3067        { 0x17, KEY_2},
3068        { 0x18, KEY_3},
3069        { 0x19, KEY_4},
3070        { 0x1a, KEY_5},
3071        { 0x1b, KEY_6},
3072        { 0x1c, KEY_7},
3073        { 0x1d, KEY_8},
3074        { 0x1e, KEY_9},
3075        { 0x1f, KEY_0},
3076        { 0x21, KEY_SLEEP},
3077        { 0x24, KEY_ZOOM},
3078        { 0x25, KEY_LAST},      /* Recall */
3079        { 0x26, KEY_SUBTITLE},  /* CC */
3080        { 0x27, KEY_LANGUAGE},  /* MTS */
3081        { 0x29, KEY_CHANNEL},   /* SURF */
3082        { 0x2b, KEY_A},
3083        { 0x2c, KEY_B},
3084        { 0x2f, KEY_CAMERA},    /* Snapshot */
3085        { 0x23, KEY_RADIO},
3086        { 0x02, KEY_PREVIOUSSONG},
3087        { 0x06, KEY_NEXTSONG},
3088        { 0x03, KEY_EPG},
3089        { 0x09, KEY_SETUP},
3090        { 0x22, KEY_BACKSPACE},
3091        { 0x0c, KEY_UP},
3092        { 0x0e, KEY_DOWN},
3093        { 0x0b, KEY_LEFT},
3094        { 0x0d, KEY_RIGHT},
3095        { 0x11, KEY_ENTER},
3096        { 0x20, KEY_TEXT},
3097};
3098struct ir_scancode_table ir_codes_videomate_s350_table = {
3099        .scan = ir_codes_videomate_s350,
3100        .size = ARRAY_SIZE(ir_codes_videomate_s350),
3101};
3102EXPORT_SYMBOL_GPL(ir_codes_videomate_s350_table);
3103
3104/* GADMEI UTV330+ RM008Z remote
3105   Shine Liu <shinel@foxmail.com>
3106 */
3107static struct ir_scancode ir_codes_gadmei_rm008z[] = {
3108        { 0x14, KEY_POWER2},            /* POWER OFF */
3109        { 0x0c, KEY_MUTE},              /* MUTE */
3110
3111        { 0x18, KEY_TV},                /* TV */
3112        { 0x0e, KEY_VIDEO},             /* AV */
3113        { 0x0b, KEY_AUDIO},             /* SV */
3114        { 0x0f, KEY_RADIO},             /* FM */
3115
3116        { 0x00, KEY_1},
3117        { 0x01, KEY_2},
3118        { 0x02, KEY_3},
3119        { 0x03, KEY_4},
3120        { 0x04, KEY_5},
3121        { 0x05, KEY_6},
3122        { 0x06, KEY_7},
3123        { 0x07, KEY_8},
3124        { 0x08, KEY_9},
3125        { 0x09, KEY_0},
3126        { 0x0a, KEY_INFO},              /* OSD */
3127        { 0x1c, KEY_BACKSPACE},         /* LAST */
3128
3129        { 0x0d, KEY_PLAY},              /* PLAY */
3130        { 0x1e, KEY_CAMERA},            /* SNAPSHOT */
3131        { 0x1a, KEY_RECORD},            /* RECORD */
3132        { 0x17, KEY_STOP},              /* STOP */
3133
3134        { 0x1f, KEY_UP},                /* UP */
3135        { 0x44, KEY_DOWN},              /* DOWN */
3136        { 0x46, KEY_TAB},               /* BACK */
3137        { 0x4a, KEY_ZOOM},              /* FULLSECREEN */
3138
3139        { 0x10, KEY_VOLUMEUP},          /* VOLUMEUP */
3140        { 0x11, KEY_VOLUMEDOWN},        /* VOLUMEDOWN */
3141        { 0x12, KEY_CHANNELUP},         /* CHANNELUP */
3142        { 0x13, KEY_CHANNELDOWN},       /* CHANNELDOWN */
3143        { 0x15, KEY_ENTER},             /* OK */
3144};
3145struct ir_scancode_table ir_codes_gadmei_rm008z_table = {
3146        .scan = ir_codes_gadmei_rm008z,
3147        .size = ARRAY_SIZE(ir_codes_gadmei_rm008z),
3148};
3149EXPORT_SYMBOL_GPL(ir_codes_gadmei_rm008z_table);
3150