/*


    Keytables for supported remote controls. This file is part of
    video4linux.

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

 */
#include <linux/module.h>
#include <linux/moduleparam.h>

#include <linux/input.h>
#include <media/ir-common.h>

/* empty keytable, can be used as placeholder for not-yet created keytables */
IR_KEYTAB_TYPE ir_codes_empty[IR_KEYTAB_SIZE] = {
	[ 0x2a ] = KEY_COFFEE,
};

EXPORT_SYMBOL_GPL(ir_codes_empty);

/* Matt Jesson <dvb@jesson.eclipse.co.uk */
IR_KEYTAB_TYPE ir_codes_avermedia_dvbt[IR_KEYTAB_SIZE] = {
	[ 0x28 ] = KEY_0,         //'0' / 'enter'
	[ 0x22 ] = KEY_1,         //'1'
	[ 0x12 ] = KEY_2,         //'2' / 'up arrow'
	[ 0x32 ] = KEY_3,         //'3'
	[ 0x24 ] = KEY_4,         //'4' / 'left arrow'
	[ 0x14 ] = KEY_5,         //'5'
	[ 0x34 ] = KEY_6,         //'6' / 'right arrow'
	[ 0x26 ] = KEY_7,         //'7'
	[ 0x16 ] = KEY_8,         //'8' / 'down arrow'
	[ 0x36 ] = KEY_9,         //'9'

	[ 0x20 ] = KEY_LIST,        // 'source'
	[ 0x10 ] = KEY_TEXT,        // 'teletext'
	[ 0x00 ] = KEY_POWER,       // 'power'
	[ 0x04 ] = KEY_AUDIO,       // 'audio'
	[ 0x06 ] = KEY_ZOOM,        // 'full screen'
	[ 0x18 ] = KEY_VIDEO,       // 'display'
	[ 0x38 ] = KEY_SEARCH,      // 'loop'
	[ 0x08 ] = KEY_INFO,        // 'preview'
	[ 0x2a ] = KEY_REWIND,      // 'backward <<'
	[ 0x1a ] = KEY_FASTFORWARD, // 'forward >>'
	[ 0x3a ] = KEY_RECORD,      // 'capture'
	[ 0x0a ] = KEY_MUTE,        // 'mute'
	[ 0x2c ] = KEY_RECORD,      // 'record'
	[ 0x1c ] = KEY_PAUSE,       // 'pause'
	[ 0x3c ] = KEY_STOP,        // 'stop'
	[ 0x0c ] = KEY_PLAY,        // 'play'
	[ 0x2e ] = KEY_RED,         // 'red'
	[ 0x01 ] = KEY_BLUE,        // 'blue' / 'cancel'
	[ 0x0e ] = KEY_YELLOW,      // 'yellow' / 'ok'
	[ 0x21 ] = KEY_GREEN,       // 'green'
	[ 0x11 ] = KEY_CHANNELDOWN, // 'channel -'
	[ 0x31 ] = KEY_CHANNELUP,   // 'channel +'
	[ 0x1e ] = KEY_VOLUMEDOWN,  // 'volume -'
	[ 0x3e ] = KEY_VOLUMEUP,    // 'volume +'
};

EXPORT_SYMBOL_GPL(ir_codes_avermedia_dvbt);

/* Attila Kondoros <attila.kondoros@chello.hu> */
IR_KEYTAB_TYPE ir_codes_apac_viewcomp[IR_KEYTAB_SIZE] = {

	[ 0x01 ] = KEY_1,
	[ 0x02 ] = KEY_2,
	[ 0x03 ] = KEY_3,
	[ 0x04 ] = KEY_4,
	[ 0x05 ] = KEY_5,
	[ 0x06 ] = KEY_6,
	[ 0x07 ] = KEY_7,
	[ 0x08 ] = KEY_8,
	[ 0x09 ] = KEY_9,
	[ 0x00 ] = KEY_0,
	[ 0x17 ] = KEY_LAST,        // +100
	[ 0x0a ] = KEY_LIST,        // recall


	[ 0x1c ] = KEY_TUNER,       // TV/FM
	[ 0x15 ] = KEY_SEARCH,      // scan
	[ 0x12 ] = KEY_POWER,       // power
	[ 0x1f ] = KEY_VOLUMEDOWN,  // vol up
	[ 0x1b ] = KEY_VOLUMEUP,    // vol down
	[ 0x1e ] = KEY_CHANNELDOWN, // chn up
	[ 0x1a ] = KEY_CHANNELUP,   // chn down

	[ 0x11 ] = KEY_VIDEO,       // video
	[ 0x0f ] = KEY_ZOOM,        // full screen
	[ 0x13 ] = KEY_MUTE,        // mute/unmute
	[ 0x10 ] = KEY_TEXT,        // min

	[ 0x0d ] = KEY_STOP,        // freeze
	[ 0x0e ] = KEY_RECORD,      // record
	[ 0x1d ] = KEY_PLAYPAUSE,   // stop
	[ 0x19 ] = KEY_PLAY,        // play

	[ 0x16 ] = KEY_GOTO,        // osd
	[ 0x14 ] = KEY_REFRESH,     // default
	[ 0x0c ] = KEY_KPPLUS,      // fine tune >>>>
	[ 0x18 ] = KEY_KPMINUS      // fine tune <<<<
};

EXPORT_SYMBOL_GPL(ir_codes_apac_viewcomp);

/* ---------------------------------------------------------------------- */

IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE] = {

	[ 0x1e ] = KEY_POWER,       // power
	[ 0x07 ] = KEY_MEDIA,       // source
	[ 0x1c ] = KEY_SEARCH,      // scan

/* FIXME: duplicate keycodes?
 *
 * These four keys seem to share the same GPIO as CH+, CH-, <<< and >>>
 * The GPIO values are
 * 6397fb for both "Scan <" and "CH -",
 * 639ffb for "Scan >" and "CH+",
 * 6384fb for "Tune <" and "<<<",
 * 638cfb for "Tune >" and ">>>", regardless of the mask.
 *
 *	[ 0x17 ] = KEY_BACK,        // fm scan <<
 *	[ 0x1f ] = KEY_FORWARD,     // fm scan >>
 *
 *	[ 0x04 ] = KEY_LEFT,        // fm tuning <
 *	[ 0x0c ] = KEY_RIGHT,       // fm tuning >
 *
 * For now, these four keys are disabled. Pressing them will generate
 * the CH+/CH-/<<</>>> events
 */

	[ 0x03 ] = KEY_TUNER,       // TV/FM

	[ 0x00 ] = KEY_RECORD,
	[ 0x08 ] = KEY_STOP,
	[ 0x11 ] = KEY_PLAY,

	[ 0x1a ] = KEY_PLAYPAUSE,   // freeze
	[ 0x19 ] = KEY_ZOOM,        // zoom
	[ 0x0f ] = KEY_TEXT,        // min

	[ 0x01 ] = KEY_1,
	[ 0x0b ] = KEY_2,
	[ 0x1b ] = KEY_3,
	[ 0x05 ] = KEY_4,
	[ 0x09 ] = KEY_5,
	[ 0x15 ] = KEY_6,
	[ 0x06 ] = KEY_7,
	[ 0x0a ] = KEY_8,
	[ 0x12 ] = KEY_9,
	[ 0x02 ] = KEY_0,
	[ 0x10 ] = KEY_LAST,        // +100
	[ 0x13 ] = KEY_LIST,        // recall

	[ 0x1f ] = KEY_CHANNELUP,   // chn down
	[ 0x17 ] = KEY_CHANNELDOWN, // chn up
	[ 0x16 ] = KEY_VOLUMEUP,    // vol down
	[ 0x14 ] = KEY_VOLUMEDOWN,  // vol up

	[ 0x04 ] = KEY_KPMINUS,     // <<<
	[ 0x0e ] = KEY_SETUP,       // function
	[ 0x0c ] = KEY_KPPLUS,      // >>>

	[ 0x0d ] = KEY_GOTO,        // mts
	[ 0x1d ] = KEY_REFRESH,     // reset
	[ 0x18 ] = KEY_MUTE         // mute/unmute
};

EXPORT_SYMBOL_GPL(ir_codes_pixelview);

IR_KEYTAB_TYPE ir_codes_nebula[IR_KEYTAB_SIZE] = {
	[ 0x00 ] = KEY_0,
	[ 0x01 ] = KEY_1,
	[ 0x02 ] = KEY_2,
	[ 0x03 ] = KEY_3,
	[ 0x04 ] = KEY_4,
	[ 0x05 ] = KEY_5,
	[ 0x06 ] = KEY_6,
	[ 0x07 ] = KEY_7,
	[ 0x08 ] = KEY_8,
	[ 0x09 ] = KEY_9,
	[ 0x0a ] = KEY_TV,
	[ 0x0b ] = KEY_AUX,
	[ 0x0c ] = KEY_DVD,
	[ 0x0d ] = KEY_POWER,
	[ 0x0e ] = KEY_MHP,	/* labelled 'Picture' */
	[ 0x0f ] = KEY_AUDIO,
	[ 0x10 ] = KEY_INFO,
	[ 0x11 ] = KEY_F13,	/* 16:9 */
	[ 0x12 ] = KEY_F14,	/* 14:9 */
	[ 0x13 ] = KEY_EPG,
	[ 0x14 ] = KEY_EXIT,
	[ 0x15 ] = KEY_MENU,
	[ 0x16 ] = KEY_UP,
	[ 0x17 ] = KEY_DOWN,
	[ 0x18 ] = KEY_LEFT,
	[ 0x19 ] = KEY_RIGHT,
	[ 0x1a ] = KEY_ENTER,
	[ 0x1b ] = KEY_CHANNELUP,
	[ 0x1c ] = KEY_CHANNELDOWN,
	[ 0x1d ] = KEY_VOLUMEUP,
	[ 0x1e ] = KEY_VOLUMEDOWN,
	[ 0x1f ] = KEY_RED,
	[ 0x20 ] = KEY_GREEN,
	[ 0x21 ] = KEY_YELLOW,
	[ 0x22 ] = KEY_BLUE,
	[ 0x23 ] = KEY_SUBTITLE,
	[ 0x24 ] = KEY_F15,	/* AD */
	[ 0x25 ] = KEY_TEXT,
	[ 0x26 ] = KEY_MUTE,
	[ 0x27 ] = KEY_REWIND,
	[ 0x28 ] = KEY_STOP,
	[ 0x29 ] = KEY_PLAY,
	[ 0x2a ] = KEY_FASTFORWARD,
	[ 0x2b ] = KEY_F16,	/* chapter */
	[ 0x2c ] = KEY_PAUSE,
	[ 0x2d ] = KEY_PLAY,
	[ 0x2e ] = KEY_RECORD,
	[ 0x2f ] = KEY_F17,	/* picture in picture */
	[ 0x30 ] = KEY_KPPLUS,	/* zoom in */
	[ 0x31 ] = KEY_KPMINUS,	/* zoom out */
	[ 0x32 ] = KEY_F18,	/* capture */
	[ 0x33 ] = KEY_F19,	/* web */
	[ 0x34 ] = KEY_EMAIL,
	[ 0x35 ] = KEY_PHONE,
	[ 0x36 ] = KEY_PC
};

EXPORT_SYMBOL_GPL(ir_codes_nebula);

/* DigitalNow DNTV Live DVB-T Remote */
IR_KEYTAB_TYPE ir_codes_dntv_live_dvb_t[IR_KEYTAB_SIZE] = {
	[ 0x00 ] = KEY_ESC,		/* 'go up a level?' */
	/* Keys 0 to 9 */
	[ 0x0a ] = KEY_0,
	[ 0x01 ] = KEY_1,
	[ 0x02 ] = KEY_2,
	[ 0x03 ] = KEY_3,
	[ 0x04 ] = KEY_4,
	[ 0x05 ] = KEY_5,
	[ 0x06 ] = KEY_6,
	[ 0x07 ] = KEY_7,
	[ 0x08 ] = KEY_8,
	[ 0x09 ] = KEY_9,

	[ 0x0b ] = KEY_TUNER,		/* tv/fm */
	[ 0x0c ] = KEY_SEARCH,		/* scan */
	[ 0x0d ] = KEY_STOP,
	[ 0x0e ] = KEY_PAUSE,
	[ 0x0f ] = KEY_LIST,		/* source */

	[ 0x10 ] = KEY_MUTE,
	[ 0x11 ] = KEY_REWIND,		/* backward << */
	[ 0x12 ] = KEY_POWER,
	[ 0x13 ] = KEY_S,			/* snap */
	[ 0x14 ] = KEY_AUDIO,		/* stereo */
	[ 0x15 ] = KEY_CLEAR,		/* reset */
	[ 0x16 ] = KEY_PLAY,
	[ 0x17 ] = KEY_ENTER,
	[ 0x18 ] = KEY_ZOOM,		/* full screen */
	[ 0x19 ] = KEY_FASTFORWARD,	/* forward >> */
	[ 0x1a ] = KEY_CHANNELUP,
	[ 0x1b ] = KEY_VOLUMEUP,
	[ 0x1c ] = KEY_INFO,		/* preview */
	[ 0x1d ] = KEY_RECORD,		/* record */
	[ 0x1e ] = KEY_CHANNELDOWN,
	[ 0x1f ] = KEY_VOLUMEDOWN,
};

EXPORT_SYMBOL_GPL(ir_codes_dntv_live_dvb_t);

/* ---------------------------------------------------------------------- */

/* IO-DATA BCTV7E Remote */
IR_KEYTAB_TYPE ir_codes_iodata_bctv7e[IR_KEYTAB_SIZE] = {
	[ 0x40 ] = KEY_TV,
	[ 0x20 ] = KEY_RADIO,		/* FM */
	[ 0x60 ] = KEY_EPG,
	[ 0x00 ] = KEY_POWER,

	/* Keys 0 to 9 */
	[ 0x44 ] = KEY_0,		/* 10 */
	[ 0x50 ] = KEY_1,
	[ 0x30 ] = KEY_2,
	[ 0x70 ] = KEY_3,
	[ 0x48 ] = KEY_4,
	[ 0x28 ] = KEY_5,
	[ 0x68 ] = KEY_6,
	[ 0x58 ] = KEY_7,
	[ 0x38 ] = KEY_8,
	[ 0x78 ] = KEY_9,

	[ 0x10 ] = KEY_L,			/* Live */
	[ 0x08 ] = KEY_T,			/* Time Shift */

	[ 0x18 ] = KEY_PLAYPAUSE,		/* Play */

	[ 0x24 ] = KEY_ENTER,		/* 11 */
	[ 0x64 ] = KEY_ESC,		/* 12 */
	[ 0x04 ] = KEY_M,			/* Multi */

	[ 0x54 ] = KEY_VIDEO,
	[ 0x34 ] = KEY_CHANNELUP,
	[ 0x74 ] = KEY_VOLUMEUP,
	[ 0x14 ] = KEY_MUTE,

	[ 0x4c ] = KEY_S,			/* SVIDEO */
	[ 0x2c ] = KEY_CHANNELDOWN,
	[ 0x6c ] = KEY_VOLUMEDOWN,
	[ 0x0c ] = KEY_ZOOM,

	[ 0x5c ] = KEY_PAUSE,
	[ 0x3c ] = KEY_C,			/* || (red) */
	[ 0x7c ] = KEY_RECORD,		/* recording */
	[ 0x1c ] = KEY_STOP,

	[ 0x41 ] = KEY_REWIND,		/* backward << */
	[ 0x21 ] = KEY_PLAY,
	[ 0x61 ] = KEY_FASTFORWARD,	/* forward >> */
	[ 0x01 ] = KEY_NEXT,		/* skip >| */
};

EXPORT_SYMBOL_GPL(ir_codes_iodata_bctv7e);

/* ---------------------------------------------------------------------- */

/* ADS Tech Instant TV DVB-T PCI Remote */
IR_KEYTAB_TYPE ir_codes_adstech_dvb_t_pci[IR_KEYTAB_SIZE] = {
	/* Keys 0 to 9 */
	[ 0x4d ] = KEY_0,
	[ 0x57 ] = KEY_1,
	[ 0x4f ] = KEY_2,
	[ 0x53 ] = KEY_3,
	[ 0x56 ] = KEY_4,
	[ 0x4e ] = KEY_5,
	[ 0x5e ] = KEY_6,
	[ 0x54 ] = KEY_7,
	[ 0x4c ] = KEY_8,
	[ 0x5c ] = KEY_9,

	[ 0x5b ] = KEY_POWER,
	[ 0x5f ] = KEY_MUTE,
	[ 0x55 ] = KEY_GOTO,
	[ 0x5d ] = KEY_SEARCH,
	[ 0x17 ] = KEY_EPG,		/* Guide */
	[ 0x1f ] = KEY_MENU,
	[ 0x0f ] = KEY_UP,
	[ 0x46 ] = KEY_DOWN,
	[ 0x16 ] = KEY_LEFT,
	[ 0x1e ] = KEY_RIGHT,
	[ 0x0e ] = KEY_SELECT,		/* Enter */
	[ 0x5a ] = KEY_INFO,
	[ 0x52 ] = KEY_EXIT,
	[ 0x59 ] = KEY_PREVIOUS,
	[ 0x51 ] = KEY_NEXT,
	[ 0x58 ] = KEY_REWIND,
	[ 0x50 ] = KEY_FORWARD,
	[ 0x44 ] = KEY_PLAYPAUSE,
	[ 0x07 ] = KEY_STOP,
	[ 0x1b ] = KEY_RECORD,
	[ 0x13 ] = KEY_TUNER,		/* Live */
	[ 0x0a ] = KEY_A,
	[ 0x12 ] = KEY_B,
	[ 0x03 ] = KEY_PROG1,		/* 1 */
	[ 0x01 ] = KEY_PROG2,		/* 2 */
	[ 0x00 ] = KEY_PROG3,		/* 3 */
	[ 0x06 ] = KEY_DVD,
	[ 0x48 ] = KEY_AUX,		/* Photo */
	[ 0x40 ] = KEY_VIDEO,
	[ 0x19 ] = KEY_AUDIO,		/* Music */
	[ 0x0b ] = KEY_CHANNELUP,
	[ 0x08 ] = KEY_CHANNELDOWN,
	[ 0x15 ] = KEY_VOLUMEUP,
	[ 0x1c ] = KEY_VOLUMEDOWN,
};

EXPORT_SYMBOL_GPL(ir_codes_adstech_dvb_t_pci);

/* ---------------------------------------------------------------------- */

/* MSI TV@nywhere remote */
IR_KEYTAB_TYPE ir_codes_msi_tvanywhere[IR_KEYTAB_SIZE] = {
	/* Keys 0 to 9 */
	[ 0x00 ] = KEY_0,
	[ 0x01 ] = KEY_1,
	[ 0x02 ] = KEY_2,
	[ 0x03 ] = KEY_3,
	[ 0x04 ] = KEY_4,
	[ 0x05 ] = KEY_5,
	[ 0x06 ] = KEY_6,
	[ 0x07 ] = KEY_7,
	[ 0x08 ] = KEY_8,
	[ 0x09 ] = KEY_9,

	[ 0x0c ] = KEY_MUTE,
	[ 0x0f ] = KEY_SCREEN,		/* Full Screen */
	[ 0x10 ] = KEY_F,			/* Funtion */
	[ 0x11 ] = KEY_T,			/* Time shift */
	[ 0x12 ] = KEY_POWER,
	[ 0x13 ] = KEY_MEDIA,		/* MTS */
	[ 0x14 ] = KEY_SLOW,
	[ 0x16 ] = KEY_REWIND,		/* backward << */
	[ 0x17 ] = KEY_ENTER,		/* Return */
	[ 0x18 ] = KEY_FASTFORWARD,	/* forward >> */
	[ 0x1a ] = KEY_CHANNELUP,
	[ 0x1b ] = KEY_VOLUMEUP,
	[ 0x1e ] = KEY_CHANNELDOWN,
	[ 0x1f ] = KEY_VOLUMEDOWN,
};

EXPORT_SYMBOL_GPL(ir_codes_msi_tvanywhere);

/* ---------------------------------------------------------------------- */

/* Cinergy 1400 DVB-T */
IR_KEYTAB_TYPE ir_codes_cinergy_1400[IR_KEYTAB_SIZE] = {
	[ 0x01 ] = KEY_POWER,
	[ 0x02 ] = KEY_1,
	[ 0x03 ] = KEY_2,
	[ 0x04 ] = KEY_3,
	[ 0x05 ] = KEY_4,
	[ 0x06 ] = KEY_5,
	[ 0x07 ] = KEY_6,
	[ 0x08 ] = KEY_7,
	[ 0x09 ] = KEY_8,
	[ 0x0a ] = KEY_9,
	[ 0x0c ] = KEY_0,

	[ 0x0b ] = KEY_VIDEO,
	[ 0x0d ] = KEY_REFRESH,
	[ 0x0e ] = KEY_SELECT,
	[ 0x0f ] = KEY_EPG,
	[ 0x10 ] = KEY_UP,
	[ 0x11 ] = KEY_LEFT,
	[ 0x12 ] = KEY_OK,
	[ 0x13 ] = KEY_RIGHT,
	[ 0x14 ] = KEY_DOWN,
	[ 0x15 ] = KEY_TEXT,
	[ 0x16 ] = KEY_INFO,

	[ 0x17 ] = KEY_RED,
	[ 0x18 ] = KEY_GREEN,
	[ 0x19 ] = KEY_YELLOW,
	[ 0x1a ] = KEY_BLUE,

	[ 0x1b ] = KEY_CHANNELUP,
	[ 0x1c ] = KEY_VOLUMEUP,
	[ 0x1d ] = KEY_MUTE,
	[ 0x1e ] = KEY_VOLUMEDOWN,
	[ 0x1f ] = KEY_CHANNELDOWN,

	[ 0x40 ] = KEY_PAUSE,
	[ 0x4c ] = KEY_PLAY,
	[ 0x58 ] = KEY_RECORD,
	[ 0x54 ] = KEY_PREVIOUS,
	[ 0x48 ] = KEY_STOP,
	[ 0x5c ] = KEY_NEXT,
};

EXPORT_SYMBOL_GPL(ir_codes_cinergy_1400);

/* ---------------------------------------------------------------------- */

/* AVERTV STUDIO 303 Remote */
IR_KEYTAB_TYPE ir_codes_avertv_303[IR_KEYTAB_SIZE] = {
	[ 0x2a ] = KEY_1,
	[ 0x32 ] = KEY_2,
	[ 0x3a ] = KEY_3,
	[ 0x4a ] = KEY_4,
	[ 0x52 ] = KEY_5,
	[ 0x5a ] = KEY_6,
	[ 0x6a ] = KEY_7,
	[ 0x72 ] = KEY_8,
	[ 0x7a ] = KEY_9,
	[ 0x0e ] = KEY_0,

	[ 0x02 ] = KEY_POWER,
	[ 0x22 ] = KEY_VIDEO,
	[ 0x42 ] = KEY_AUDIO,
	[ 0x62 ] = KEY_ZOOM,
	[ 0x0a ] = KEY_TV,
	[ 0x12 ] = KEY_CD,
	[ 0x1a ] = KEY_TEXT,

	[ 0x16 ] = KEY_SUBTITLE,
	[ 0x1e ] = KEY_REWIND,
	[ 0x06 ] = KEY_PRINT,

	[ 0x2e ] = KEY_SEARCH,
	[ 0x36 ] = KEY_SLEEP,
	[ 0x3e ] = KEY_SHUFFLE,
	[ 0x26 ] = KEY_MUTE,

	[ 0x4e ] = KEY_RECORD,
	[ 0x56 ] = KEY_PAUSE,
	[ 0x5e ] = KEY_STOP,
	[ 0x46 ] = KEY_PLAY,

	[ 0x6e ] = KEY_RED,
	[ 0x0b ] = KEY_GREEN,
	[ 0x66 ] = KEY_YELLOW,
	[ 0x03 ] = KEY_BLUE,

	[ 0x76 ] = KEY_LEFT,
	[ 0x7e ] = KEY_RIGHT,
	[ 0x13 ] = KEY_DOWN,
	[ 0x1b ] = KEY_UP,
};

EXPORT_SYMBOL_GPL(ir_codes_avertv_303);

/* ---------------------------------------------------------------------- */

/* DigitalNow DNTV Live! DVB-T Pro Remote */
IR_KEYTAB_TYPE ir_codes_dntv_live_dvbt_pro[IR_KEYTAB_SIZE] = {
	[ 0x16 ] = KEY_POWER,
	[ 0x5b ] = KEY_HOME,

	[ 0x55 ] = KEY_TV,		/* live tv */
	[ 0x58 ] = KEY_TUNER,		/* digital Radio */
	[ 0x5a ] = KEY_RADIO,		/* FM radio */
	[ 0x59 ] = KEY_DVD,		/* dvd menu */
	[ 0x03 ] = KEY_1,
	[ 0x01 ] = KEY_2,
	[ 0x06 ] = KEY_3,
	[ 0x09 ] = KEY_4,
	[ 0x1d ] = KEY_5,
	[ 0x1f ] = KEY_6,
	[ 0x0d ] = KEY_7,
	[ 0x19 ] = KEY_8,
	[ 0x1b ] = KEY_9,
	[ 0x0c ] = KEY_CANCEL,
	[ 0x15 ] = KEY_0,
	[ 0x4a ] = KEY_CLEAR,
	[ 0x13 ] = KEY_BACK,
	[ 0x00 ] = KEY_TAB,
	[ 0x4b ] = KEY_UP,
	[ 0x4e ] = KEY_LEFT,
	[ 0x4f ] = KEY_OK,
	[ 0x52 ] = KEY_RIGHT,
	[ 0x51 ] = KEY_DOWN,
	[ 0x1e ] = KEY_VOLUMEUP,
	[ 0x0a ] = KEY_VOLUMEDOWN,
	[ 0x02 ] = KEY_CHANNELDOWN,
	[ 0x05 ] = KEY_CHANNELUP,
	[ 0x11 ] = KEY_RECORD,
	[ 0x14 ] = KEY_PLAY,
	[ 0x4c ] = KEY_PAUSE,
	[ 0x1a ] = KEY_STOP,
	[ 0x40 ] = KEY_REWIND,
	[ 0x12 ] = KEY_FASTFORWARD,
	[ 0x41 ] = KEY_PREVIOUSSONG,	/* replay |< */
	[ 0x42 ] = KEY_NEXTSONG,	/* skip >| */
	[ 0x54 ] = KEY_CAMERA,		/* capture */
	[ 0x50 ] = KEY_LANGUAGE,	/* sap */
	[ 0x47 ] = KEY_TV2,		/* pip */
	[ 0x4d ] = KEY_SCREEN,
	[ 0x43 ] = KEY_SUBTITLE,
	[ 0x10 ] = KEY_MUTE,
	[ 0x49 ] = KEY_AUDIO,		/* l/r */
	[ 0x07 ] = KEY_SLEEP,
	[ 0x08 ] = KEY_VIDEO,		/* a/v */
	[ 0x0e ] = KEY_PREVIOUS,	/* recall */
	[ 0x45 ] = KEY_ZOOM,		/* zoom + */
	[ 0x46 ] = KEY_ANGLE,		/* zoom - */
	[ 0x56 ] = KEY_RED,
	[ 0x57 ] = KEY_GREEN,
	[ 0x5c ] = KEY_YELLOW,
	[ 0x5d ] = KEY_BLUE,
};

EXPORT_SYMBOL_GPL(ir_codes_dntv_live_dvbt_pro);

IR_KEYTAB_TYPE ir_codes_em_terratec[IR_KEYTAB_SIZE] = {
	[ 0x01 ] = KEY_CHANNEL,
	[ 0x02 ] = KEY_SELECT,
	[ 0x03 ] = KEY_MUTE,
	[ 0x04 ] = KEY_POWER,
	[ 0x05 ] = KEY_1,
	[ 0x06 ] = KEY_2,
	[ 0x07 ] = KEY_3,
	[ 0x08 ] = KEY_CHANNELUP,
	[ 0x09 ] = KEY_4,
	[ 0x0a ] = KEY_5,
	[ 0x0b ] = KEY_6,
	[ 0x0c ] = KEY_CHANNELDOWN,
	[ 0x0d ] = KEY_7,
	[ 0x0e ] = KEY_8,
	[ 0x0f ] = KEY_9,
	[ 0x10 ] = KEY_VOLUMEUP,
	[ 0x11 ] = KEY_0,
	[ 0x12 ] = KEY_MENU,
	[ 0x13 ] = KEY_PRINT,
	[ 0x14 ] = KEY_VOLUMEDOWN,
	[ 0x16 ] = KEY_PAUSE,
	[ 0x18 ] = KEY_RECORD,
	[ 0x19 ] = KEY_REWIND,
	[ 0x1a ] = KEY_PLAY,
	[ 0x1b ] = KEY_FORWARD,
	[ 0x1c ] = KEY_BACKSPACE,
	[ 0x1e ] = KEY_STOP,
	[ 0x40 ] = KEY_ZOOM,
};

EXPORT_SYMBOL_GPL(ir_codes_em_terratec);

IR_KEYTAB_TYPE ir_codes_em_pinnacle_usb[IR_KEYTAB_SIZE] = {
	[ 0x3a ] = KEY_0,
	[ 0x31 ] = KEY_1,
	[ 0x32 ] = KEY_2,
	[ 0x33 ] = KEY_3,
	[ 0x34 ] = KEY_4,
	[ 0x35 ] = KEY_5,
	[ 0x36 ] = KEY_6,
	[ 0x37 ] = KEY_7,
	[ 0x38 ] = KEY_8,
	[ 0x39 ] = KEY_9,

	[ 0x2f ] = KEY_POWER,

	[ 0x2e ] = KEY_P,
	[ 0x1f ] = KEY_L,
	[ 0x2b ] = KEY_I,

	[ 0x2d ] = KEY_ZOOM,
	[ 0x1e ] = KEY_ZOOM,
	[ 0x1b ] = KEY_VOLUMEUP,
	[ 0x0f ] = KEY_VOLUMEDOWN,
	[ 0x17 ] = KEY_CHANNELUP,
	[ 0x1c ] = KEY_CHANNELDOWN,
	[ 0x25 ] = KEY_INFO,

	[ 0x3c ] = KEY_MUTE,

	[ 0x3d ] = KEY_LEFT,
	[ 0x3b ] = KEY_RIGHT,

	[ 0x3f ] = KEY_UP,
	[ 0x3e ] = KEY_DOWN,
	[ 0x1a ] = KEY_PAUSE,

	[ 0x1d ] = KEY_MENU,
	[ 0x19 ] = KEY_PLAY,
	[ 0x16 ] = KEY_REWIND,
	[ 0x13 ] = KEY_FORWARD,
	[ 0x15 ] = KEY_PAUSE,
	[ 0x0e ] = KEY_REWIND,
	[ 0x0d ] = KEY_PLAY,
	[ 0x0b ] = KEY_STOP,
	[ 0x07 ] = KEY_FORWARD,
	[ 0x27 ] = KEY_RECORD,
	[ 0x26 ] = KEY_TUNER,
	[ 0x29 ] = KEY_TEXT,
	[ 0x2a ] = KEY_MEDIA,
	[ 0x18 ] = KEY_EPG,
	[ 0x27 ] = KEY_RECORD,
};

EXPORT_SYMBOL_GPL(ir_codes_em_pinnacle_usb);

IR_KEYTAB_TYPE ir_codes_flyvideo[IR_KEYTAB_SIZE] = {
	[ 0x0f ] = KEY_0,
	[ 0x03 ] = KEY_1,
	[ 0x04 ] = KEY_2,
	[ 0x05 ] = KEY_3,
	[ 0x07 ] = KEY_4,
	[ 0x08 ] = KEY_5,
	[ 0x09 ] = KEY_6,
	[ 0x0b ] = KEY_7,
	[ 0x0c ] = KEY_8,
	[ 0x0d ] = KEY_9,

	[ 0x0e ] = KEY_MODE,         // Air/Cable
	[ 0x11 ] = KEY_VIDEO,        // Video
	[ 0x15 ] = KEY_AUDIO,        // Audio
	[ 0x00 ] = KEY_POWER,        // Power
	[ 0x18 ] = KEY_TUNER,        // AV Source
	[ 0x02 ] = KEY_ZOOM,         // Fullscreen
	[ 0x1a ] = KEY_LANGUAGE,     // Stereo
	[ 0x1b ] = KEY_MUTE,         // Mute
	[ 0x14 ] = KEY_VOLUMEUP,     // Volume +
	[ 0x17 ] = KEY_VOLUMEDOWN,   // Volume -
	[ 0x12 ] = KEY_CHANNELUP,    // Channel +
	[ 0x13 ] = KEY_CHANNELDOWN,  // Channel -
	[ 0x06 ] = KEY_AGAIN,        // Recall
	[ 0x10 ] = KEY_ENTER,      // Enter
};

EXPORT_SYMBOL_GPL(ir_codes_flyvideo);

IR_KEYTAB_TYPE ir_codes_flydvb[IR_KEYTAB_SIZE] = {
	[ 0x01 ] = KEY_ZOOM,		// Full Screen
	[ 0x00 ] = KEY_POWER,		// Power

	[ 0x03 ] = KEY_1,
	[ 0x04 ] = KEY_2,
	[ 0x05 ] = KEY_3,
	[ 0x07 ] = KEY_4,
	[ 0x08 ] = KEY_5,
	[ 0x09 ] = KEY_6,
	[ 0x0b ] = KEY_7,
	[ 0x0c ] = KEY_8,
	[ 0x0d ] = KEY_9,
	[ 0x06 ] = KEY_AGAIN,		// Recall
	[ 0x0f ] = KEY_0,
	[ 0x10 ] = KEY_MUTE,		// Mute
	[ 0x02 ] = KEY_RADIO,		// TV/Radio
	[ 0x1b ] = KEY_LANGUAGE,		// SAP (Second Audio Program)

	[ 0x14 ] = KEY_VOLUMEUP,		// VOL+
	[ 0x17 ] = KEY_VOLUMEDOWN,	// VOL-
	[ 0x12 ] = KEY_CHANNELUP,		// CH+
	[ 0x13 ] = KEY_CHANNELDOWN,	// CH-
	[ 0x1d ] = KEY_ENTER,		// Enter

	[ 0x1a ] = KEY_MODE,		// PIP
	[ 0x18 ] = KEY_TUNER,		// Source

	[ 0x1e ] = KEY_RECORD,		// Record/Pause
	[ 0x15 ] = KEY_ANGLE,		// Swap (no label on key)
	[ 0x1c ] = KEY_PAUSE,		// Timeshift/Pause
	[ 0x19 ] = KEY_BACK,		// Rewind <<
	[ 0x0a ] = KEY_PLAYPAUSE,		// Play/Pause
	[ 0x1f ] = KEY_FORWARD,		// Forward >>
	[ 0x16 ] = KEY_PREVIOUS,		// Back |<<
	[ 0x11 ] = KEY_STOP,		// Stop
	[ 0x0e ] = KEY_NEXT,		// End >>|
};

EXPORT_SYMBOL_GPL(ir_codes_flydvb);

IR_KEYTAB_TYPE ir_codes_cinergy[IR_KEYTAB_SIZE] = {
	[ 0x00 ] = KEY_0,
	[ 0x01 ] = KEY_1,
	[ 0x02 ] = KEY_2,
	[ 0x03 ] = KEY_3,
	[ 0x04 ] = KEY_4,
	[ 0x05 ] = KEY_5,
	[ 0x06 ] = KEY_6,
	[ 0x07 ] = KEY_7,
	[ 0x08 ] = KEY_8,
	[ 0x09 ] = KEY_9,

	[ 0x0a ] = KEY_POWER,
	[ 0x0b ] = KEY_PROG1,           // app
	[ 0x0c ] = KEY_ZOOM,            // zoom/fullscreen
	[ 0x0d ] = KEY_CHANNELUP,       // channel
	[ 0x0e ] = KEY_CHANNELDOWN,     // channel-
	[ 0x0f ] = KEY_VOLUMEUP,
	[ 0x10 ] = KEY_VOLUMEDOWN,
	[ 0x11 ] = KEY_TUNER,           // AV
	[ 0x12 ] = KEY_NUMLOCK,         // -/--
	[ 0x13 ] = KEY_AUDIO,           // audio
	[ 0x14 ] = KEY_MUTE,
	[ 0x15 ] = KEY_UP,
	[ 0x16 ] = KEY_DOWN,
	[ 0x17 ] = KEY_LEFT,
	[ 0x18 ] = KEY_RIGHT,
	[ 0x19 ] = BTN_LEFT,
	[ 0x1a ] = BTN_RIGHT,
	[ 0x1b ] = KEY_WWW,             // text
	[ 0x1c ] = KEY_REWIND,
	[ 0x1d ] = KEY_FORWARD,
	[ 0x1e ] = KEY_RECORD,
	[ 0x1f ] = KEY_PLAY,
	[ 0x20 ] = KEY_PREVIOUSSONG,
	[ 0x21 ] = KEY_NEXTSONG,
	[ 0x22 ] = KEY_PAUSE,
	[ 0x23 ] = KEY_STOP,
};

EXPORT_SYMBOL_GPL(ir_codes_cinergy);

/* Alfons Geser <a.geser@cox.net>
 * updates from Job D. R. Borges <jobdrb@ig.com.br> */
IR_KEYTAB_TYPE ir_codes_eztv[IR_KEYTAB_SIZE] = {
	[ 0x12 ] = KEY_POWER,
	[ 0x01 ] = KEY_TV,             // DVR
	[ 0x15 ] = KEY_DVD,            // DVD
	[ 0x17 ] = KEY_AUDIO,          // music
				     // DVR mode / DVD mode / music mode

	[ 0x1b ] = KEY_MUTE,           // mute
	[ 0x02 ] = KEY_LANGUAGE,       // MTS/SAP / audio / autoseek
	[ 0x1e ] = KEY_SUBTITLE,       // closed captioning / subtitle / seek
	[ 0x16 ] = KEY_ZOOM,           // full screen
	[ 0x1c ] = KEY_VIDEO,          // video source / eject / delall
	[ 0x1d ] = KEY_RESTART,        // playback / angle / del
	[ 0x2f ] = KEY_SEARCH,         // scan / menu / playlist
	[ 0x30 ] = KEY_CHANNEL,        // CH surfing / bookmark / memo

	[ 0x31 ] = KEY_HELP,           // help
	[ 0x32 ] = KEY_MODE,           // num/memo
	[ 0x33 ] = KEY_ESC,            // cancel

	[ 0x0c ] = KEY_UP,             // up
	[ 0x10 ] = KEY_DOWN,           // down
	[ 0x08 ] = KEY_LEFT,           // left
	[ 0x04 ] = KEY_RIGHT,          // right
	[ 0x03 ] = KEY_SELECT,         // select

	[ 0x1f ] = KEY_REWIND,         // rewind
	[ 0x20 ] = KEY_PLAYPAUSE,      // play/pause
	[ 0x29 ] = KEY_FORWARD,        // forward
	[ 0x14 ] = KEY_AGAIN,          // repeat
	[ 0x2b ] = KEY_RECORD,         // recording
	[ 0x2c ] = KEY_STOP,           // stop
	[ 0x2d ] = KEY_PLAY,           // play
	[ 0x2e ] = KEY_SHUFFLE,        // snapshot / shuffle

	[ 0x00 ] = KEY_0,
	[ 0x05 ] = KEY_1,
	[ 0x06 ] = KEY_2,
	[ 0x07 ] = KEY_3,
	[ 0x09 ] = KEY_4,
	[ 0x0a ] = KEY_5,
	[ 0x0b ] = KEY_6,
	[ 0x0d ] = KEY_7,
	[ 0x0e ] = KEY_8,
	[ 0x0f ] = KEY_9,

	[ 0x2a ] = KEY_VOLUMEUP,
	[ 0x11 ] = KEY_VOLUMEDOWN,
	[ 0x18 ] = KEY_CHANNELUP,      // CH.tracking up
	[ 0x19 ] = KEY_CHANNELDOWN,    // CH.tracking down

	[ 0x13 ] = KEY_ENTER,        // enter
	[ 0x21 ] = KEY_DOT,          // . (decimal dot)
};

EXPORT_SYMBOL_GPL(ir_codes_eztv);

/* Alex Hermann <gaaf@gmx.net> */
IR_KEYTAB_TYPE ir_codes_avermedia[IR_KEYTAB_SIZE] = {
	[ 0x28 ] = KEY_1,
	[ 0x18 ] = KEY_2,
	[ 0x38 ] = KEY_3,
	[ 0x24 ] = KEY_4,
	[ 0x14 ] = KEY_5,
	[ 0x34 ] = KEY_6,
	[ 0x2c ] = KEY_7,
	[ 0x1c ] = KEY_8,
	[ 0x3c ] = KEY_9,
	[ 0x22 ] = KEY_0,

	[ 0x20 ] = KEY_TV,		/* TV/FM */
	[ 0x10 ] = KEY_CD,		/* CD */
	[ 0x30 ] = KEY_TEXT,		/* TELETEXT */
	[ 0x00 ] = KEY_POWER,		/* POWER */

	[ 0x08 ] = KEY_VIDEO,		/* VIDEO */
	[ 0x04 ] = KEY_AUDIO,		/* AUDIO */
	[ 0x0c ] = KEY_ZOOM,		/* FULL SCREEN */

	[ 0x12 ] = KEY_SUBTITLE,	/* DISPLAY */
	[ 0x32 ] = KEY_REWIND,		/* LOOP	*/
	[ 0x02 ] = KEY_PRINT,		/* PREVIEW */

	[ 0x2a ] = KEY_SEARCH,		/* AUTOSCAN */
	[ 0x1a ] = KEY_SLEEP,		/* FREEZE */
	[ 0x3a ] = KEY_SHUFFLE,		/* SNAPSHOT */
	[ 0x0a ] = KEY_MUTE,		/* MUTE */

	[ 0x26 ] = KEY_RECORD,		/* RECORD */
	[ 0x16 ] = KEY_PAUSE,		/* PAUSE */
	[ 0x36 ] = KEY_STOP,		/* STOP */
	[ 0x06 ] = KEY_PLAY,		/* PLAY */

	[ 0x2e ] = KEY_RED,		/* RED */
	[ 0x21 ] = KEY_GREEN,		/* GREEN */
	[ 0x0e ] = KEY_YELLOW,		/* YELLOW */
	[ 0x01 ] = KEY_BLUE,		/* BLUE */

	[ 0x1e ] = KEY_VOLUMEDOWN,	/* VOLUME- */
	[ 0x3e ] = KEY_VOLUMEUP,	/* VOLUME+ */
	[ 0x11 ] = KEY_CHANNELDOWN,	/* CHANNEL/PAGE- */
	[ 0x31 ] = KEY_CHANNELUP	/* CHANNEL/PAGE+ */
};

EXPORT_SYMBOL_GPL(ir_codes_avermedia);

IR_KEYTAB_TYPE ir_codes_videomate_tv_pvr[IR_KEYTAB_SIZE] = {
	[ 0x14 ] = KEY_MUTE,
	[ 0x24 ] = KEY_ZOOM,

	[ 0x01 ] = KEY_DVD,
	[ 0x23 ] = KEY_RADIO,
	[ 0x00 ] = KEY_TV,

	[ 0x0a ] = KEY_REWIND,
	[ 0x08 ] = KEY_PLAYPAUSE,
	[ 0x0f ] = KEY_FORWARD,

	[ 0x02 ] = KEY_PREVIOUS,
	[ 0x07 ] = KEY_STOP,
	[ 0x06 ] = KEY_NEXT,

	[ 0x0c ] = KEY_UP,
	[ 0x0e ] = KEY_DOWN,
	[ 0x0b ] = KEY_LEFT,
	[ 0x0d ] = KEY_RIGHT,
	[ 0x11 ] = KEY_OK,

	[ 0x03 ] = KEY_MENU,
	[ 0x09 ] = KEY_SETUP,
	[ 0x05 ] = KEY_VIDEO,
	[ 0x22 ] = KEY_CHANNEL,

	[ 0x12 ] = KEY_VOLUMEUP,
	[ 0x15 ] = KEY_VOLUMEDOWN,
	[ 0x10 ] = KEY_CHANNELUP,
	[ 0x13 ] = KEY_CHANNELDOWN,

	[ 0x04 ] = KEY_RECORD,

	[ 0x16 ] = KEY_1,
	[ 0x17 ] = KEY_2,
	[ 0x18 ] = KEY_3,
	[ 0x19 ] = KEY_4,
	[ 0x1a ] = KEY_5,
	[ 0x1b ] = KEY_6,
	[ 0x1c ] = KEY_7,
	[ 0x1d ] = KEY_8,
	[ 0x1e ] = KEY_9,
	[ 0x1f ] = KEY_0,

	[ 0x20 ] = KEY_LANGUAGE,
	[ 0x21 ] = KEY_SLEEP,
};

EXPORT_SYMBOL_GPL(ir_codes_videomate_tv_pvr);

/* Michael Tokarev <mjt@tls.msk.ru>
   http://www.corpit.ru/mjt/beholdTV/remote_control.jpg
   keytable is used by MANLI MTV00[ 0x0c ] and BeholdTV 40[13] at
   least, and probably other cards too.
   The "ascii-art picture" below (in comments, first row
   is the keycode in hex, and subsequent row(s) shows
   the button labels (several variants when appropriate)
   helps to descide which keycodes to assign to the buttons.
 */
IR_KEYTAB_TYPE ir_codes_manli[IR_KEYTAB_SIZE] = {

	/*  0x1c            0x12  *
	 * FUNCTION         POWER *
	 *   FM              (|)  *
	 *                        */
	[ 0x1c ] = KEY_RADIO,	/*XXX*/
	[ 0x12 ] = KEY_POWER,

	/*  0x01    0x02    0x03  *
	 *   1       2       3    *
	 *                        *
	 *  0x04    0x05    0x06  *
	 *   4       5       6    *
	 *                        *
	 *  0x07    0x08    0x09  *
	 *   7       8       9    *
	 *                        */
	[ 0x01 ] = KEY_1,
	[ 0x02 ] = KEY_2,
	[ 0x03 ] = KEY_3,
	[ 0x04 ] = KEY_4,
	[ 0x05 ] = KEY_5,
	[ 0x06 ] = KEY_6,
	[ 0x07 ] = KEY_7,
	[ 0x08 ] = KEY_8,
	[ 0x09 ] = KEY_9,

	/*  0x0a    0x00    0x17  *
	 * RECALL    0      +100  *
	 *                  PLUS  *
	 *                        */
	[ 0x0a ] = KEY_AGAIN,	/*XXX KEY_REWIND? */
	[ 0x00 ] = KEY_0,
	[ 0x17 ] = KEY_DIGITS,	/*XXX*/

	/*  0x14            0x10  *
	 *  MENU            INFO  *
	 *  OSD                   */
	[ 0x14 ] = KEY_MENU,
	[ 0x10 ] = KEY_INFO,

	/*          0x0b          *
	 *           Up           *
	 *                        *
	 *  0x18    0x16    0x0c  *
	 *  Left     Ok     Right *
	 *                        *
	 *         0x015          *
	 *         Down           *
	 *                        */
	[ 0x0b ] = KEY_UP,	/*XXX KEY_SCROLLUP? */
	[ 0x18 ] = KEY_LEFT,	/*XXX KEY_BACK? */
	[ 0x16 ] = KEY_OK,	/*XXX KEY_SELECT? KEY_ENTER? */
	[ 0x0c ] = KEY_RIGHT,	/*XXX KEY_FORWARD? */
	[ 0x15 ] = KEY_DOWN,	/*XXX KEY_SCROLLDOWN? */

	/*  0x11            0x0d  *
	 *  TV/AV           MODE  *
	 *  SOURCE         STEREO *
	 *                        */
	[ 0x11 ] = KEY_TV,	/*XXX*/
	[ 0x0d ] = KEY_MODE,	/*XXX there's no KEY_STEREO */

	/*  0x0f    0x1b    0x1a  *
	 *  AUDIO   Vol+    Chan+ *
	 *        TIMESHIFT???    *
	 *                        *
	 *  0x0e    0x1f    0x1e  *
	 *  SLEEP   Vol-    Chan- *
	 *                        */
	[ 0x0f ] = KEY_AUDIO,
	[ 0x1b ] = KEY_VOLUMEUP,
	[ 0x1a ] = KEY_CHANNELUP,
	[ 0x0e ] = KEY_SLEEP,	/*XXX maybe KEY_PAUSE */
	[ 0x1f ] = KEY_VOLUMEDOWN,
	[ 0x1e ] = KEY_CHANNELDOWN,

	/*         0x13     0x19  *
	 *         MUTE   SNAPSHOT*
	 *                        */
	[ 0x13 ] = KEY_MUTE,
	[ 0x19 ] = KEY_RECORD,	/*XXX*/

	// 0x1d unused ?
};

EXPORT_SYMBOL_GPL(ir_codes_manli);

/* Mike Baikov <mike@baikov.com> */
IR_KEYTAB_TYPE ir_codes_gotview7135[IR_KEYTAB_SIZE] = {

	[ 0x21 ] = KEY_POWER,
	[ 0x69 ] = KEY_TV,
	[ 0x33 ] = KEY_0,
	[ 0x51 ] = KEY_1,
	[ 0x31 ] = KEY_2,
	[ 0x71 ] = KEY_3,
	[ 0x3b ] = KEY_4,
	[ 0x58 ] = KEY_5,
	[ 0x41 ] = KEY_6,
	[ 0x48 ] = KEY_7,
	[ 0x30 ] = KEY_8,
	[ 0x53 ] = KEY_9,
	[ 0x73 ] = KEY_AGAIN, /* LOOP */
	[ 0x0a ] = KEY_AUDIO,
	[ 0x61 ] = KEY_PRINT, /* PREVIEW */
	[ 0x7a ] = KEY_VIDEO,
	[ 0x20 ] = KEY_CHANNELUP,
	[ 0x40 ] = KEY_CHANNELDOWN,
	[ 0x18 ] = KEY_VOLUMEDOWN,
	[ 0x50 ] = KEY_VOLUMEUP,
	[ 0x10 ] = KEY_MUTE,
	[ 0x4a ] = KEY_SEARCH,
	[ 0x7b ] = KEY_SHUFFLE, /* SNAPSHOT */
	[ 0x22 ] = KEY_RECORD,
	[ 0x62 ] = KEY_STOP,
	[ 0x78 ] = KEY_PLAY,
	[ 0x39 ] = KEY_REWIND,
	[ 0x59 ] = KEY_PAUSE,
	[ 0x19 ] = KEY_FORWARD,
	[ 0x09 ] = KEY_ZOOM,

	[ 0x52 ] = KEY_F21, /* LIVE TIMESHIFT */
	[ 0x1a ] = KEY_F22, /* MIN TIMESHIFT */
	[ 0x3a ] = KEY_F23, /* TIMESHIFT */
	[ 0x70 ] = KEY_F24, /* NORMAL TIMESHIFT */
};

EXPORT_SYMBOL_GPL(ir_codes_gotview7135);

IR_KEYTAB_TYPE ir_codes_purpletv[IR_KEYTAB_SIZE] = {
	[ 0x03 ] = KEY_POWER,
	[ 0x6f ] = KEY_MUTE,
	[ 0x10 ] = KEY_BACKSPACE,       /* Recall */

	[ 0x11 ] = KEY_0,
	[ 0x04 ] = KEY_1,
	[ 0x05 ] = KEY_2,
	[ 0x06 ] = KEY_3,
	[ 0x08 ] = KEY_4,
	[ 0x09 ] = KEY_5,
	[ 0x0a ] = KEY_6,
	[ 0x0c ] = KEY_7,
	[ 0x0d ] = KEY_8,
	[ 0x0e ] = KEY_9,
	[ 0x12 ] = KEY_DOT,           /* 100+ */

	[ 0x07 ] = KEY_VOLUMEUP,
	[ 0x0b ] = KEY_VOLUMEDOWN,
	[ 0x1a ] = KEY_KPPLUS,
	[ 0x18 ] = KEY_KPMINUS,
	[ 0x15 ] = KEY_UP,
	[ 0x1d ] = KEY_DOWN,
	[ 0x0f ] = KEY_CHANNELUP,
	[ 0x13 ] = KEY_CHANNELDOWN,
	[ 0x48 ] = KEY_ZOOM,

	[ 0x1b ] = KEY_VIDEO,           /* Video source */
	[ 0x49 ] = KEY_LANGUAGE,        /* MTS Select */
	[ 0x19 ] = KEY_SEARCH,          /* Auto Scan */

	[ 0x4b ] = KEY_RECORD,
	[ 0x46 ] = KEY_PLAY,
	[ 0x45 ] = KEY_PAUSE,           /* Pause */
	[ 0x44 ] = KEY_STOP,
	[ 0x40 ] = KEY_FORWARD,         /* Forward ? */
	[ 0x42 ] = KEY_REWIND,          /* Backward ? */

};

EXPORT_SYMBOL_GPL(ir_codes_purpletv);

/* Mapping for the 28 key remote control as seen at
   http://www.sednacomputer.com/photo/cardbus-tv.jpg
   Pavel Mihaylov <bin@bash.info> */
IR_KEYTAB_TYPE ir_codes_pctv_sedna[IR_KEYTAB_SIZE] = {
	[ 0x00 ] = KEY_0,
	[ 0x01 ] = KEY_1,
	[ 0x02 ] = KEY_2,
	[ 0x03 ] = KEY_3,
	[ 0x04 ] = KEY_4,
	[ 0x05 ] = KEY_5,
	[ 0x06 ] = KEY_6,
	[ 0x07 ] = KEY_7,
	[ 0x08 ] = KEY_8,
	[ 0x09 ] = KEY_9,

	[ 0x0a ] = KEY_AGAIN,          /* Recall */
	[ 0x0b ] = KEY_CHANNELUP,
	[ 0x0c ] = KEY_VOLUMEUP,
	[ 0x0d ] = KEY_MODE,           /* Stereo */
	[ 0x0e ] = KEY_STOP,
	[ 0x0f ] = KEY_PREVIOUSSONG,
	[ 0x10 ] = KEY_ZOOM,
	[ 0x11 ] = KEY_TUNER,          /* Source */
	[ 0x12 ] = KEY_POWER,
	[ 0x13 ] = KEY_MUTE,
	[ 0x15 ] = KEY_CHANNELDOWN,
	[ 0x18 ] = KEY_VOLUMEDOWN,
	[ 0x19 ] = KEY_SHUFFLE,        /* Snapshot */
	[ 0x1a ] = KEY_NEXTSONG,
	[ 0x1b ] = KEY_TEXT,           /* Time Shift */
	[ 0x1c ] = KEY_RADIO,          /* FM Radio */
	[ 0x1d ] = KEY_RECORD,
	[ 0x1e ] = KEY_PAUSE,
};

EXPORT_SYMBOL_GPL(ir_codes_pctv_sedna);

/* Mark Phalan <phalanm@o2.ie> */
IR_KEYTAB_TYPE ir_codes_pv951[IR_KEYTAB_SIZE] = {
	[ 0x00 ] = KEY_0,
	[ 0x01 ] = KEY_1,
	[ 0x02 ] = KEY_2,
	[ 0x03 ] = KEY_3,
	[ 0x04 ] = KEY_4,
	[ 0x05 ] = KEY_5,
	[ 0x06 ] = KEY_6,
	[ 0x07 ] = KEY_7,
	[ 0x08 ] = KEY_8,
	[ 0x09 ] = KEY_9,

	[ 0x12 ] = KEY_POWER,
	[ 0x10 ] = KEY_MUTE,
	[ 0x1f ] = KEY_VOLUMEDOWN,
	[ 0x1b ] = KEY_VOLUMEUP,
	[ 0x1a ] = KEY_CHANNELUP,
	[ 0x1e ] = KEY_CHANNELDOWN,
	[ 0x0e ] = KEY_PAGEUP,
	[ 0x1d ] = KEY_PAGEDOWN,
	[ 0x13 ] = KEY_SOUND,

	[ 0x18 ] = KEY_KPPLUSMINUS,	/* CH +/- */
	[ 0x16 ] = KEY_SUBTITLE,		/* CC */
	[ 0x0d ] = KEY_TEXT,		/* TTX */
	[ 0x0b ] = KEY_TV,		/* AIR/CBL */
	[ 0x11 ] = KEY_PC,		/* PC/TV */
	[ 0x17 ] = KEY_OK,		/* CH RTN */
	[ 0x19 ] = KEY_MODE, 		/* FUNC */
	[ 0x0c ] = KEY_SEARCH, 		/* AUTOSCAN */

	/* Not sure what to do with these ones! */
	[ 0x0f ] = KEY_SELECT, 		/* SOURCE */
	[ 0x0a ] = KEY_KPPLUS,		/* +100 */
	[ 0x14 ] = KEY_EQUAL,		/* SYNC */
	[ 0x1c ] = KEY_MEDIA,             /* PC/TV */
};

EXPORT_SYMBOL_GPL(ir_codes_pv951);

/* generic RC5 keytable                                          */
/* see http://users.pandora.be/nenya/electronics/rc5/codes00.htm */
/* used by old (black) Hauppauge remotes                         */
IR_KEYTAB_TYPE ir_codes_rc5_tv[IR_KEYTAB_SIZE] = {
	/* Keys 0 to 9 */
	[ 0x00 ] = KEY_0,
	[ 0x01 ] = KEY_1,
	[ 0x02 ] = KEY_2,
	[ 0x03 ] = KEY_3,
	[ 0x04 ] = KEY_4,
	[ 0x05 ] = KEY_5,
	[ 0x06 ] = KEY_6,
	[ 0x07 ] = KEY_7,
	[ 0x08 ] = KEY_8,
	[ 0x09 ] = KEY_9,

	[ 0x0b ] = KEY_CHANNEL,		/* channel / program (japan: 11) */
	[ 0x0c ] = KEY_POWER,		/* standby */
	[ 0x0d ] = KEY_MUTE,		/* mute / demute */
	[ 0x0f ] = KEY_TV,		/* display */
	[ 0x10 ] = KEY_VOLUMEUP,
	[ 0x11 ] = KEY_VOLUMEDOWN,
	[ 0x12 ] = KEY_BRIGHTNESSUP,
	[ 0x13 ] = KEY_BRIGHTNESSDOWN,
	[ 0x1e ] = KEY_SEARCH,		/* search + */
	[ 0x20 ] = KEY_CHANNELUP,	/* channel / program + */
	[ 0x21 ] = KEY_CHANNELDOWN,	/* channel / program - */
	[ 0x22 ] = KEY_CHANNEL,		/* alt / channel */
	[ 0x23 ] = KEY_LANGUAGE,	/* 1st / 2nd language */
	[ 0x26 ] = KEY_SLEEP,		/* sleeptimer */
	[ 0x2e ] = KEY_MENU,		/* 2nd controls (USA: menu) */
	[ 0x30 ] = KEY_PAUSE,
	[ 0x32 ] = KEY_REWIND,
	[ 0x33 ] = KEY_GOTO,
	[ 0x35 ] = KEY_PLAY,
	[ 0x36 ] = KEY_STOP,
	[ 0x37 ] = KEY_RECORD,		/* recording */
	[ 0x3c ] = KEY_TEXT,    	/* teletext submode (Japan: 12) */
	[ 0x3d ] = KEY_SUSPEND,		/* system standby */

};

EXPORT_SYMBOL_GPL(ir_codes_rc5_tv);

/* Table for Leadtek Winfast Remote Controls - used by both bttv and cx88 */
IR_KEYTAB_TYPE ir_codes_winfast[IR_KEYTAB_SIZE] = {
	/* Keys 0 to 9 */
	[ 0x12 ] = KEY_0,
	[ 0x05 ] = KEY_1,
	[ 0x06 ] = KEY_2,
	[ 0x07 ] = KEY_3,
	[ 0x09 ] = KEY_4,
	[ 0x0a ] = KEY_5,
	[ 0x0b ] = KEY_6,
	[ 0x0d ] = KEY_7,
	[ 0x0e ] = KEY_8,
	[ 0x0f ] = KEY_9,

	[ 0x00 ] = KEY_POWER,
	[ 0x02 ] = KEY_TUNER,		/* TV/FM */
	[ 0x1e ] = KEY_VIDEO,
	[ 0x04 ] = KEY_VOLUMEUP,
	[ 0x08 ] = KEY_VOLUMEDOWN,
	[ 0x0c ] = KEY_CHANNELUP,
	[ 0x10 ] = KEY_CHANNELDOWN,
	[ 0x03 ] = KEY_ZOOM,		/* fullscreen */
	[ 0x1f ] = KEY_SUBTITLE,		/* closed caption/teletext */
	[ 0x20 ] = KEY_SLEEP,
	[ 0x14 ] = KEY_MUTE,
	[ 0x2b ] = KEY_RED,
	[ 0x2c ] = KEY_GREEN,
	[ 0x2d ] = KEY_YELLOW,
	[ 0x2e ] = KEY_BLUE,
	[ 0x18 ] = KEY_KPPLUS,		/* fine tune + */
	[ 0x19 ] = KEY_KPMINUS,		/* fine tune - */
	[ 0x21 ] = KEY_DOT,
	[ 0x13 ] = KEY_ENTER,
	[ 0x22 ] = KEY_BACK,
	[ 0x23 ] = KEY_PLAYPAUSE,
	[ 0x24 ] = KEY_NEXT,
	[ 0x26 ] = KEY_STOP,
	[ 0x27 ] = KEY_RECORD
};

EXPORT_SYMBOL_GPL(ir_codes_winfast);

IR_KEYTAB_TYPE ir_codes_pinnacle[IR_KEYTAB_SIZE] = {
	[ 0x59 ] = KEY_MUTE,
	[ 0x4a ] = KEY_POWER,

	[ 0x18 ] = KEY_TEXT,
	[ 0x26 ] = KEY_TV,
	[ 0x3d ] = KEY_PRINT,

	[ 0x48 ] = KEY_RED,
	[ 0x04 ] = KEY_GREEN,
	[ 0x11 ] = KEY_YELLOW,
	[ 0x00 ] = KEY_BLUE,

	[ 0x2d ] = KEY_VOLUMEUP,
	[ 0x1e ] = KEY_VOLUMEDOWN,

	[ 0x49 ] = KEY_MENU,

	[ 0x16 ] = KEY_CHANNELUP,
	[ 0x17 ] = KEY_CHANNELDOWN,

	[ 0x20 ] = KEY_UP,
	[ 0x21 ] = KEY_DOWN,
	[ 0x22 ] = KEY_LEFT,
	[ 0x23 ] = KEY_RIGHT,
	[ 0x0d ] = KEY_SELECT,



	[ 0x08 ] = KEY_BACK,
	[ 0x07 ] = KEY_REFRESH,

	[ 0x2f ] = KEY_ZOOM,
	[ 0x29 ] = KEY_RECORD,

	[ 0x4b ] = KEY_PAUSE,
	[ 0x4d ] = KEY_REWIND,
	[ 0x2e ] = KEY_PLAY,
	[ 0x4e ] = KEY_FORWARD,
	[ 0x53 ] = KEY_PREVIOUS,
	[ 0x4c ] = KEY_STOP,
	[ 0x54 ] = KEY_NEXT,

	[ 0x69 ] = KEY_0,
	[ 0x6a ] = KEY_1,
	[ 0x6b ] = KEY_2,
	[ 0x6c ] = KEY_3,
	[ 0x6d ] = KEY_4,
	[ 0x6e ] = KEY_5,
	[ 0x6f ] = KEY_6,
	[ 0x70 ] = KEY_7,
	[ 0x71 ] = KEY_8,
	[ 0x72 ] = KEY_9,

	[ 0x74 ] = KEY_CHANNEL,
	[ 0x0a ] = KEY_BACKSPACE,
};

EXPORT_SYMBOL_GPL(ir_codes_pinnacle);

/* Hauppauge: the newer, gray remotes (seems there are multiple
 * slightly different versions), shipped with cx88+ivtv cards.
 * almost rc5 coding, but some non-standard keys */
IR_KEYTAB_TYPE ir_codes_hauppauge_new[IR_KEYTAB_SIZE] = {
	/* Keys 0 to 9 */
	[ 0x00 ] = KEY_0,
	[ 0x01 ] = KEY_1,
	[ 0x02 ] = KEY_2,
	[ 0x03 ] = KEY_3,
	[ 0x04 ] = KEY_4,
	[ 0x05 ] = KEY_5,
	[ 0x06 ] = KEY_6,
	[ 0x07 ] = KEY_7,
	[ 0x08 ] = KEY_8,
	[ 0x09 ] = KEY_9,

	[ 0x0a ] = KEY_TEXT,      	/* keypad asterisk as well */
	[ 0x0b ] = KEY_RED,		/* red button */
	[ 0x0c ] = KEY_RADIO,
	[ 0x0d ] = KEY_MENU,
	[ 0x0e ] = KEY_SUBTITLE,	/* also the # key */
	[ 0x0f ] = KEY_MUTE,
	[ 0x10 ] = KEY_VOLUMEUP,
	[ 0x11 ] = KEY_VOLUMEDOWN,
	[ 0x12 ] = KEY_PREVIOUS,	/* previous channel */
	[ 0x14 ] = KEY_UP,
	[ 0x15 ] = KEY_DOWN,
	[ 0x16 ] = KEY_LEFT,
	[ 0x17 ] = KEY_RIGHT,
	[ 0x18 ] = KEY_VIDEO,		/* Videos */
	[ 0x19 ] = KEY_AUDIO,		/* Music */
	/* 0x1a: Pictures - presume this means
	   "Multimedia Home Platform" -
	   no "PICTURES" key in input.h
	 */
	[ 0x1a ] = KEY_MHP,

	[ 0x1b ] = KEY_EPG,		/* Guide */
	[ 0x1c ] = KEY_TV,
	[ 0x1e ] = KEY_NEXTSONG,	/* skip >| */
	[ 0x1f ] = KEY_EXIT,		/* back/exit */
	[ 0x20 ] = KEY_CHANNELUP,	/* channel / program + */
	[ 0x21 ] = KEY_CHANNELDOWN,	/* channel / program - */
	[ 0x22 ] = KEY_CHANNEL,		/* source (old black remote) */
	[ 0x24 ] = KEY_PREVIOUSSONG,	/* replay |< */
	[ 0x25 ] = KEY_ENTER,		/* OK */
	[ 0x26 ] = KEY_SLEEP,		/* minimize (old black remote) */
	[ 0x29 ] = KEY_BLUE,		/* blue key */
	[ 0x2e ] = KEY_GREEN,		/* green button */
	[ 0x30 ] = KEY_PAUSE,		/* pause */
	[ 0x32 ] = KEY_REWIND,		/* backward << */
	[ 0x34 ] = KEY_FASTFORWARD,	/* forward >> */
	[ 0x35 ] = KEY_PLAY,
	[ 0x36 ] = KEY_STOP,
	[ 0x37 ] = KEY_RECORD,		/* recording */
	[ 0x38 ] = KEY_YELLOW,		/* yellow key */
	[ 0x3b ] = KEY_SELECT,		/* top right button */
	[ 0x3c ] = KEY_ZOOM,		/* full */
	[ 0x3d ] = KEY_POWER,		/* system power (green button) */
};

EXPORT_SYMBOL_GPL(ir_codes_hauppauge_new);

