/*
 * Keytable for the GeekBox remote controller
 *
 * Copyright (C) 2017 Martin Blumenstingl <martin.blumenstingl@googlemail.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

#include <media/rc-map.h>
#include <linux/module.h>

static struct rc_map_table geekbox[] = {
	{ 0x01, KEY_BACK },
	{ 0x02, KEY_DOWN },
	{ 0x03, KEY_UP },
	{ 0x07, KEY_OK },
	{ 0x0b, KEY_VOLUMEUP },
	{ 0x0e, KEY_LEFT },
	{ 0x13, KEY_MENU },
	{ 0x14, KEY_POWER },
	{ 0x1a, KEY_RIGHT },
	{ 0x48, KEY_HOME },
	{ 0x58, KEY_VOLUMEDOWN },
	{ 0x5c, KEY_SCREEN },
};

static struct rc_map_list geekbox_map = {
	.map = {
		.scan    = geekbox,
		.size    = ARRAY_SIZE(geekbox),
		.rc_type = RC_TYPE_NEC,
		.name    = RC_MAP_GEEKBOX,
	}
};

static int __init init_rc_map_geekbox(void)
{
	return rc_map_register(&geekbox_map);
}

static void __exit exit_rc_map_geekbox(void)
{
	rc_map_unregister(&geekbox_map);
}

module_init(init_rc_map_geekbox)
module_exit(exit_rc_map_geekbox)

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Martin Blumenstingl <martin.blumenstingl@googlemail.com>");
