/* rc-rc6-mce.c - Keytable for Windows Media Center RC-6 remotes for use
 * with the Media Center Edition eHome Infrared Transceiver.
 *
 * Copyright (c) 2010 by Jarod Wilson <jarod@redhat.com>
 *
 * 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.
 */

#include <media/rc-map.h>

static struct ir_scancode rc6_mce[] = {

	{ 0x800f0400, KEY_NUMERIC_0 },
	{ 0x800f0401, KEY_NUMERIC_1 },
	{ 0x800f0402, KEY_NUMERIC_2 },
	{ 0x800f0403, KEY_NUMERIC_3 },
	{ 0x800f0404, KEY_NUMERIC_4 },
	{ 0x800f0405, KEY_NUMERIC_5 },
	{ 0x800f0406, KEY_NUMERIC_6 },
	{ 0x800f0407, KEY_NUMERIC_7 },
	{ 0x800f0408, KEY_NUMERIC_8 },
	{ 0x800f0409, KEY_NUMERIC_9 },

	{ 0x800f040a, KEY_DELETE },
	{ 0x800f040b, KEY_ENTER },
	{ 0x800f040c, KEY_POWER },		/* PC Power */
	{ 0x800f040d, KEY_PROG1 },		/* Windows MCE button */
	{ 0x800f040e, KEY_MUTE },
	{ 0x800f040f, KEY_INFO },

	{ 0x800f0410, KEY_VOLUMEUP },
	{ 0x800f0411, KEY_VOLUMEDOWN },
	{ 0x800f0412, KEY_CHANNELUP },
	{ 0x800f0413, KEY_CHANNELDOWN },

	{ 0x800f0414, KEY_FASTFORWARD },
	{ 0x800f0415, KEY_REWIND },
	{ 0x800f0416, KEY_PLAY },
	{ 0x800f0417, KEY_RECORD },
	{ 0x800f0418, KEY_PAUSE },
	{ 0x800f046e, KEY_PLAYPAUSE },
	{ 0x800f0419, KEY_STOP },
	{ 0x800f041a, KEY_NEXT },
	{ 0x800f041b, KEY_PREVIOUS },
	{ 0x800f041c, KEY_NUMERIC_POUND },
	{ 0x800f041d, KEY_NUMERIC_STAR },

	{ 0x800f041e, KEY_UP },
	{ 0x800f041f, KEY_DOWN },
	{ 0x800f0420, KEY_LEFT },
	{ 0x800f0421, KEY_RIGHT },

	{ 0x800f0422, KEY_OK },
	{ 0x800f0423, KEY_EXIT },
	{ 0x800f0424, KEY_DVD },
	{ 0x800f0425, KEY_TUNER },		/* LiveTV */
	{ 0x800f0426, KEY_EPG },		/* Guide */
	{ 0x800f0427, KEY_ZOOM },		/* Aspect */

	{ 0x800f043a, KEY_BRIGHTNESSUP },

	{ 0x800f0446, KEY_TV },
	{ 0x800f0447, KEY_AUDIO },		/* My Music */
	{ 0x800f0448, KEY_PVR },		/* RecordedTV */
	{ 0x800f0449, KEY_CAMERA },
	{ 0x800f044a, KEY_VIDEO },
	{ 0x800f044c, KEY_LANGUAGE },
	{ 0x800f044d, KEY_TITLE },
	{ 0x800f044e, KEY_PRINT },	/* Print - HP OEM version of remote */

	{ 0x800f0450, KEY_RADIO },

	{ 0x800f045a, KEY_SUBTITLE },		/* Caption/Teletext */
	{ 0x800f045b, KEY_RED },
	{ 0x800f045c, KEY_GREEN },
	{ 0x800f045d, KEY_YELLOW },
	{ 0x800f045e, KEY_BLUE },

	{ 0x800f0465, KEY_POWER2 },	/* TV Power */
	{ 0x800f046e, KEY_PLAYPAUSE },
	{ 0x800f046f, KEY_MEDIA },	/* Start media application (NEW) */

	{ 0x800f0480, KEY_BRIGHTNESSDOWN },
	{ 0x800f0481, KEY_PLAYPAUSE },
};

static struct rc_keymap rc6_mce_map = {
	.map = {
		.scan    = rc6_mce,
		.size    = ARRAY_SIZE(rc6_mce),
		.ir_type = IR_TYPE_RC6,
		.name    = RC_MAP_RC6_MCE,
	}
};

static int __init init_rc_map_rc6_mce(void)
{
	return ir_register_map(&rc6_mce_map);
}

static void __exit exit_rc_map_rc6_mce(void)
{
	ir_unregister_map(&rc6_mce_map);
}

module_init(init_rc_map_rc6_mce)
module_exit(exit_rc_map_rc6_mce)

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Jarod Wilson <jarod@redhat.com>");
