/* nebula.h - Keytable for nebula Remote Controller
 *
 * keymap imported from ir-keymaps.c
 *
 * Copyright (c) 2010 by Mauro Carvalho Chehab
 *
 * 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>
#include <linux/module.h>

static struct rc_map_table nebula[] = {
	{ 0x0000, KEY_0 },
	{ 0x0001, KEY_1 },
	{ 0x0002, KEY_2 },
	{ 0x0003, KEY_3 },
	{ 0x0004, KEY_4 },
	{ 0x0005, KEY_5 },
	{ 0x0006, KEY_6 },
	{ 0x0007, KEY_7 },
	{ 0x0008, KEY_8 },
	{ 0x0009, KEY_9 },
	{ 0x000a, KEY_TV },
	{ 0x000b, KEY_AUX },
	{ 0x000c, KEY_DVD },
	{ 0x000d, KEY_POWER },
	{ 0x000e, KEY_CAMERA },	/* labelled 'Picture' */
	{ 0x000f, KEY_AUDIO },
	{ 0x0010, KEY_INFO },
	{ 0x0011, KEY_F13 },	/* 16:9 */
	{ 0x0012, KEY_F14 },	/* 14:9 */
	{ 0x0013, KEY_EPG },
	{ 0x0014, KEY_EXIT },
	{ 0x0015, KEY_MENU },
	{ 0x0016, KEY_UP },
	{ 0x0017, KEY_DOWN },
	{ 0x0018, KEY_LEFT },
	{ 0x0019, KEY_RIGHT },
	{ 0x001a, KEY_ENTER },
	{ 0x001b, KEY_CHANNELUP },
	{ 0x001c, KEY_CHANNELDOWN },
	{ 0x001d, KEY_VOLUMEUP },
	{ 0x001e, KEY_VOLUMEDOWN },
	{ 0x001f, KEY_RED },
	{ 0x0020, KEY_GREEN },
	{ 0x0021, KEY_YELLOW },
	{ 0x0022, KEY_BLUE },
	{ 0x0023, KEY_SUBTITLE },
	{ 0x0024, KEY_F15 },	/* AD */
	{ 0x0025, KEY_TEXT },
	{ 0x0026, KEY_MUTE },
	{ 0x0027, KEY_REWIND },
	{ 0x0028, KEY_STOP },
	{ 0x0029, KEY_PLAY },
	{ 0x002a, KEY_FASTFORWARD },
	{ 0x002b, KEY_F16 },	/* chapter */
	{ 0x002c, KEY_PAUSE },
	{ 0x002d, KEY_PLAY },
	{ 0x002e, KEY_RECORD },
	{ 0x002f, KEY_F17 },	/* picture in picture */
	{ 0x0030, KEY_KPPLUS },	/* zoom in */
	{ 0x0031, KEY_KPMINUS },	/* zoom out */
	{ 0x0032, KEY_F18 },	/* capture */
	{ 0x0033, KEY_F19 },	/* web */
	{ 0x0034, KEY_EMAIL },
	{ 0x0035, KEY_PHONE },
	{ 0x0036, KEY_PC },
};

static struct rc_map_list nebula_map = {
	.map = {
		.scan    = nebula,
		.size    = ARRAY_SIZE(nebula),
		.rc_type = RC_TYPE_RC5,
		.name    = RC_MAP_NEBULA,
	}
};

static int __init init_rc_map_nebula(void)
{
	return rc_map_register(&nebula_map);
}

static void __exit exit_rc_map_nebula(void)
{
	rc_map_unregister(&nebula_map);
}

module_init(init_rc_map_nebula)
module_exit(exit_rc_map_nebula)

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Mauro Carvalho Chehab");
