/*
 * keymap imported from cxusb.c
 *
 * Copyright (C) 2016 Sean Young
 *
 * 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; version 2.
 */

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

static struct rc_map_table rc_map_dvico_portable_table[] = {
	{ 0x0302, KEY_SETUP },       /* Profile */
	{ 0x0343, KEY_POWER2 },
	{ 0x0306, KEY_EPG },
	{ 0x035a, KEY_BACK },
	{ 0x0305, KEY_MENU },
	{ 0x0347, KEY_INFO },
	{ 0x0301, KEY_TAB },
	{ 0x0342, KEY_PREVIOUSSONG },/* Replay */
	{ 0x0349, KEY_VOLUMEUP },
	{ 0x0309, KEY_VOLUMEDOWN },
	{ 0x0354, KEY_CHANNELUP },
	{ 0x030b, KEY_CHANNELDOWN },
	{ 0x0316, KEY_CAMERA },
	{ 0x0340, KEY_TUNER },	/* ATV/DTV */
	{ 0x0345, KEY_OPEN },
	{ 0x0319, KEY_1 },
	{ 0x0318, KEY_2 },
	{ 0x031b, KEY_3 },
	{ 0x031a, KEY_4 },
	{ 0x0358, KEY_5 },
	{ 0x0359, KEY_6 },
	{ 0x0315, KEY_7 },
	{ 0x0314, KEY_8 },
	{ 0x0317, KEY_9 },
	{ 0x0344, KEY_ANGLE },	/* Aspect */
	{ 0x0355, KEY_0 },
	{ 0x0307, KEY_ZOOM },
	{ 0x030a, KEY_REWIND },
	{ 0x0308, KEY_PLAYPAUSE },
	{ 0x034b, KEY_FASTFORWARD },
	{ 0x035b, KEY_MUTE },
	{ 0x0304, KEY_STOP },
	{ 0x0356, KEY_RECORD },
	{ 0x0357, KEY_POWER },
	{ 0x0341, KEY_UNKNOWN },    /* INPUT */
	{ 0x0300, KEY_UNKNOWN },    /* HD */
};

static struct rc_map_list dvico_portable_map = {
	.map = {
		.scan    = rc_map_dvico_portable_table,
		.size    = ARRAY_SIZE(rc_map_dvico_portable_table),
		.rc_type = RC_TYPE_NEC,
		.name    = RC_MAP_DVICO_PORTABLE,
	}
};

static int __init init_rc_map_dvico_portable(void)
{
	return rc_map_register(&dvico_portable_map);
}

static void __exit exit_rc_map_dvico_portable(void)
{
	rc_map_unregister(&dvico_portable_map);
}

module_init(init_rc_map_dvico_portable)
module_exit(exit_rc_map_dvico_portable)

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