^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /* rc5-imon-mce.c - Keytable for Windows Media Center RC-6 remotes for use
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * with the SoundGraph iMON/Antec Veris hardware IR decoder
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (c) 2010 by Jarod Wilson <jarod@redhat.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <media/rc-map.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) /* mce-mode imon mce remote key table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) static struct rc_map_table imon_mce[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) /* keys sorted mostly by frequency of use to optimize lookups */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) { 0x800ff415, KEY_REWIND },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) { 0x800ff414, KEY_FASTFORWARD },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) { 0x800ff41b, KEY_PREVIOUS },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) { 0x800ff41a, KEY_NEXT },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) { 0x800ff416, KEY_PLAY },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) { 0x800ff418, KEY_PAUSE },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) { 0x800ff419, KEY_STOP },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) { 0x800ff417, KEY_RECORD },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) { 0x02000052, KEY_UP },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) { 0x02000051, KEY_DOWN },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) { 0x02000050, KEY_LEFT },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) { 0x0200004f, KEY_RIGHT },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) { 0x800ff41e, KEY_UP },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) { 0x800ff41f, KEY_DOWN },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) { 0x800ff420, KEY_LEFT },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) { 0x800ff421, KEY_RIGHT },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) /* 0x800ff40b also KEY_NUMERIC_POUND on some receivers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) { 0x800ff40b, KEY_ENTER },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) { 0x02000028, KEY_ENTER },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) /* the OK and Enter buttons decode to the same value on some remotes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) { 0x02000028, KEY_OK }, */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) { 0x800ff422, KEY_OK },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) { 0x0200002a, KEY_EXIT },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) { 0x800ff423, KEY_EXIT },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) { 0x02000029, KEY_DELETE },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) /* 0x800ff40a also KEY_NUMERIC_STAR on some receivers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) { 0x800ff40a, KEY_DELETE },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) { 0x800ff40e, KEY_MUTE },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) { 0x800ff410, KEY_VOLUMEUP },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) { 0x800ff411, KEY_VOLUMEDOWN },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) { 0x800ff412, KEY_CHANNELUP },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) { 0x800ff413, KEY_CHANNELDOWN },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) { 0x0200001e, KEY_NUMERIC_1 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) { 0x0200001f, KEY_NUMERIC_2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) { 0x02000020, KEY_NUMERIC_3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) { 0x02000021, KEY_NUMERIC_4 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) { 0x02000022, KEY_NUMERIC_5 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) { 0x02000023, KEY_NUMERIC_6 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) { 0x02000024, KEY_NUMERIC_7 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) { 0x02000025, KEY_NUMERIC_8 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) { 0x02000026, KEY_NUMERIC_9 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) { 0x02000027, KEY_NUMERIC_0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) { 0x800ff401, KEY_NUMERIC_1 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) { 0x800ff402, KEY_NUMERIC_2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) { 0x800ff403, KEY_NUMERIC_3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) { 0x800ff404, KEY_NUMERIC_4 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) { 0x800ff405, KEY_NUMERIC_5 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) { 0x800ff406, KEY_NUMERIC_6 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) { 0x800ff407, KEY_NUMERIC_7 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) { 0x800ff408, KEY_NUMERIC_8 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) { 0x800ff409, KEY_NUMERIC_9 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) { 0x800ff400, KEY_NUMERIC_0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) { 0x02200025, KEY_NUMERIC_STAR },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) { 0x02200020, KEY_NUMERIC_POUND },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) /* 0x800ff41d also KEY_BLUE on some receivers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) { 0x800ff41d, KEY_NUMERIC_STAR },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) /* 0x800ff41c also KEY_PREVIOUS on some receivers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) { 0x800ff41c, KEY_NUMERIC_POUND },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) { 0x800ff446, KEY_TV },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) { 0x800ff447, KEY_AUDIO }, /* My Music */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) { 0x800ff448, KEY_PVR }, /* RecordedTV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) { 0x800ff449, KEY_CAMERA },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) { 0x800ff44a, KEY_VIDEO },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) /* 0x800ff424 also KEY_MENU on some receivers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) { 0x800ff424, KEY_DVD },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) /* 0x800ff425 also KEY_GREEN on some receivers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) { 0x800ff425, KEY_TUNER }, /* LiveTV */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) { 0x800ff450, KEY_RADIO },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) { 0x800ff44c, KEY_LANGUAGE },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) { 0x800ff427, KEY_ZOOM }, /* Aspect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) { 0x800ff45b, KEY_RED },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) { 0x800ff45c, KEY_GREEN },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) { 0x800ff45d, KEY_YELLOW },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) { 0x800ff45e, KEY_BLUE },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) { 0x800ff466, KEY_RED },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) /* { 0x800ff425, KEY_GREEN }, */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) { 0x800ff468, KEY_YELLOW },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) /* { 0x800ff41d, KEY_BLUE }, */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) { 0x800ff40f, KEY_INFO },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) { 0x800ff426, KEY_EPG }, /* Guide */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) { 0x800ff45a, KEY_SUBTITLE }, /* Caption/Teletext */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) { 0x800ff44d, KEY_TITLE },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) { 0x800ff40c, KEY_POWER },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) { 0x800ff40d, KEY_MEDIA }, /* Windows MCE button */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) static struct rc_map_list imon_mce_map = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) .map = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) .scan = imon_mce,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) .size = ARRAY_SIZE(imon_mce),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) /* its RC6, but w/a hardware decoder */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) .rc_proto = RC_PROTO_RC6_MCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) .name = RC_MAP_IMON_MCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) static int __init init_rc_map_imon_mce(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) return rc_map_register(&imon_mce_map);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) static void __exit exit_rc_map_imon_mce(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) rc_map_unregister(&imon_mce_map);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) module_init(init_rc_map_imon_mce)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) module_exit(exit_rc_map_imon_mce)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) MODULE_LICENSE("GPL");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) MODULE_AUTHOR("Jarod Wilson <jarod@redhat.com>");