// SPDX-License-Identifier: GPL-2.0-or-later
/* keytable for Twinhan DTV CAB CI Remote Controller
 *
 * Copyright (c) 2010 by Igor M. Liplianin <liplianin@me.by>
 */

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

static struct rc_map_table twinhan_dtv_cab_ci[] = {
	{ 0x29, KEY_POWER},
	{ 0x28, KEY_FAVORITES},
	{ 0x30, KEY_TEXT},
	{ 0x17, KEY_INFO},              /* Preview */
	{ 0x23, KEY_EPG},
	{ 0x3b, KEY_F22},               /* Record List */

	{ 0x3c, KEY_NUMERIC_1},
	{ 0x3e, KEY_NUMERIC_2},
	{ 0x39, KEY_NUMERIC_3},
	{ 0x36, KEY_NUMERIC_4},
	{ 0x22, KEY_NUMERIC_5},
	{ 0x20, KEY_NUMERIC_6},
	{ 0x32, KEY_NUMERIC_7},
	{ 0x26, KEY_NUMERIC_8},
	{ 0x24, KEY_NUMERIC_9},
	{ 0x2a, KEY_NUMERIC_0},

	{ 0x33, KEY_CANCEL},
	{ 0x2c, KEY_BACK},
	{ 0x15, KEY_CLEAR},
	{ 0x3f, KEY_TAB},
	{ 0x10, KEY_ENTER},
	{ 0x14, KEY_UP},
	{ 0x0d, KEY_RIGHT},
	{ 0x0e, KEY_DOWN},
	{ 0x11, KEY_LEFT},

	{ 0x21, KEY_VOLUMEUP},
	{ 0x35, KEY_VOLUMEDOWN},
	{ 0x3d, KEY_CHANNELDOWN},
	{ 0x3a, KEY_CHANNELUP},
	{ 0x2e, KEY_RECORD},
	{ 0x2b, KEY_PLAY},
	{ 0x13, KEY_PAUSE},
	{ 0x25, KEY_STOP},

	{ 0x1f, KEY_REWIND},
	{ 0x2d, KEY_FASTFORWARD},
	{ 0x1e, KEY_PREVIOUS},          /* Replay |< */
	{ 0x1d, KEY_NEXT},              /* Skip   >| */

	{ 0x0b, KEY_CAMERA},            /* Capture */
	{ 0x0f, KEY_LANGUAGE},          /* SAP */
	{ 0x18, KEY_MODE},              /* PIP */
	{ 0x12, KEY_ZOOM},              /* Full screen */
	{ 0x1c, KEY_SUBTITLE},
	{ 0x2f, KEY_MUTE},
	{ 0x16, KEY_F20},               /* L/R */
	{ 0x38, KEY_F21},               /* Hibernate */

	{ 0x37, KEY_SWITCHVIDEOMODE},   /* A/V */
	{ 0x31, KEY_AGAIN},             /* Recall */
	{ 0x1a, KEY_KPPLUS},            /* Zoom+ */
	{ 0x19, KEY_KPMINUS},           /* Zoom- */
	{ 0x27, KEY_RED},
	{ 0x0C, KEY_GREEN},
	{ 0x01, KEY_YELLOW},
	{ 0x00, KEY_BLUE},
};

static struct rc_map_list twinhan_dtv_cab_ci_map = {
	.map = {
		.scan     = twinhan_dtv_cab_ci,
		.size     = ARRAY_SIZE(twinhan_dtv_cab_ci),
		.rc_proto = RC_PROTO_UNKNOWN,	/* Legacy IR type */
		.name     = RC_MAP_TWINHAN_DTV_CAB_CI,
	}
};

static int __init init_rc_map_twinhan_dtv_cab_ci(void)
{
	return rc_map_register(&twinhan_dtv_cab_ci_map);
}

static void __exit exit_rc_map_twinhan_dtv_cab_ci(void)
{
	rc_map_unregister(&twinhan_dtv_cab_ci_map);
}

module_init(init_rc_map_twinhan_dtv_cab_ci);
module_exit(exit_rc_map_twinhan_dtv_cab_ci);

MODULE_LICENSE("GPL");
