1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright (c) 2021 Emanuel Strobel <emanuel.strobel@yahoo.com>
4 */
5
6#include <media/rc-map.h>
7#include <linux/module.h>
8
9/*
10 * Keytable for Dreambox RC10/RC0 and RC20/RC-BT remote controls
11 *
12 * Keys that are not IR addressable:
13 *
14 * // DREAM switches to STB control mode
15 * // TV switches to TV control mode
16 * // MODE toggles STB/TV/BT control modes
17 *
18 */
19
20static struct rc_map_table dreambox[] = {
21	/* Dreambox RC10/RC0/RCU-BT remote */
22	{ 0x3200, KEY_POWER },
23
24	// DREAM
25	{ 0x3290, KEY_HELP },
26	// TV
27
28	{ 0x3201, KEY_1 },
29	{ 0x3202, KEY_2 },
30	{ 0x3203, KEY_3 },
31	{ 0x3204, KEY_4 },
32	{ 0x3205, KEY_5 },
33	{ 0x3206, KEY_6 },
34	{ 0x3207, KEY_7 },
35	{ 0x3208, KEY_8 },
36	{ 0x3209, KEY_9 },
37	{ 0x320a, KEY_PREVIOUS },
38	{ 0x320b, KEY_0 },
39	{ 0x320c, KEY_NEXT },
40
41	{ 0x321f, KEY_RED },
42	{ 0x3220, KEY_GREEN },
43	{ 0x3221, KEY_YELLOW },
44	{ 0x3222, KEY_BLUE },
45
46	{ 0x3210, KEY_INFO },
47	{ 0x3212, KEY_MENU },
48	{ 0x320e, KEY_AUDIO },
49	{ 0x3218, KEY_PVR },
50
51	{ 0x3213, KEY_LEFT },
52	{ 0x3211, KEY_UP },
53	{ 0x3215, KEY_RIGHT },
54	{ 0x3217, KEY_DOWN },
55	{ 0x3214, KEY_OK },
56
57	{ 0x3219, KEY_VOLUMEUP },
58	{ 0x321c, KEY_VOLUMEDOWN },
59
60	{ 0x321d, KEY_ESC }, // EXIT
61	{ 0x321a, KEY_MUTE },
62
63	{ 0x321b, KEY_PAGEUP },
64	{ 0x321e, KEY_PAGEDOWN },
65
66	{ 0x3223, KEY_PREVIOUSSONG },
67	{ 0x3224, KEY_PLAYPAUSE },
68	{ 0x3225, KEY_STOP },
69	{ 0x3226, KEY_NEXTSONG },
70
71	{ 0x3227, KEY_TV },
72	{ 0x3228, KEY_RADIO },
73	{ 0x3229, KEY_TEXT },
74	{ 0x322a, KEY_RECORD },
75
76	/* Dreambox RC20/RC-BT */
77	{ 0x3407, KEY_MUTE },
78	// MODE
79	{ 0x3401, KEY_POWER },
80
81	{ 0x3432, KEY_PREVIOUSSONG },
82	{ 0x3433, KEY_PLAYPAUSE },
83	{ 0x3435, KEY_NEXTSONG },
84
85	{ 0x3436, KEY_RECORD },
86	{ 0x3434, KEY_STOP },
87	{ 0x3425, KEY_TEXT },
88
89	{ 0x341f, KEY_RED },
90	{ 0x3420, KEY_GREEN },
91	{ 0x3421, KEY_YELLOW },
92	{ 0x3422, KEY_BLUE },
93
94	{ 0x341b, KEY_INFO },
95	{ 0x341c, KEY_MENU },
96	{ 0x3430, KEY_AUDIO },
97	{ 0x3431, KEY_PVR },
98
99	{ 0x3414, KEY_LEFT },
100	{ 0x3411, KEY_UP },
101	{ 0x3416, KEY_RIGHT },
102	{ 0x3419, KEY_DOWN },
103	{ 0x3415, KEY_OK },
104
105	{ 0x3413, KEY_VOLUMEUP },
106	{ 0x3418, KEY_VOLUMEDOWN },
107
108	{ 0x3412, KEY_ESC }, // EXIT
109	{ 0x3426, KEY_HELP }, // MIC
110
111	{ 0x3417, KEY_PAGEUP },
112	{ 0x341a, KEY_PAGEDOWN },
113
114	{ 0x3404, KEY_1 },
115	{ 0x3405, KEY_2 },
116	{ 0x3406, KEY_3 },
117	{ 0x3408, KEY_4 },
118	{ 0x3409, KEY_5 },
119	{ 0x340a, KEY_6 },
120	{ 0x340c, KEY_7 },
121	{ 0x340d, KEY_8 },
122	{ 0x340e, KEY_9 },
123	{ 0x340b, KEY_PREVIOUS },
124	{ 0x3410, KEY_0 },
125	{ 0x340f, KEY_NEXT },
126};
127
128static struct rc_map_list dreambox_map = {
129	.map = {
130		.scan     = dreambox,
131		.size     = ARRAY_SIZE(dreambox),
132		.rc_proto = RC_PROTO_NEC,
133		.name     = RC_MAP_DREAMBOX,
134	}
135};
136
137static int __init init_rc_map_dreambox(void)
138{
139	return rc_map_register(&dreambox_map);
140}
141
142static void __exit exit_rc_map_dreambox(void)
143{
144	rc_map_unregister(&dreambox_map);
145}
146
147module_init(init_rc_map_dreambox)
148module_exit(exit_rc_map_dreambox)
149
150MODULE_LICENSE("GPL");
151MODULE_AUTHOR("Emanuel Strobel <emanuel.strobel@yahoo.com>");
152MODULE_DESCRIPTION("Dreambox RC10/RC0 and RC20/RC-BT remote controller keytable");
153