^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) // msi-tvanywhere-plus.h - Keytable for msi_tvanywhere_plus Remote Controller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) //
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) // keymap imported from ir-keymaps.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) //
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) // Copyright (c) 2010 by Mauro Carvalho Chehab
^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) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) Keycodes for remote on the MSI TV@nywhere Plus. The controller IC on the card
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) is marked "KS003". The controller is I2C at address 0x30, but does not seem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) to respond to probes until a read is performed from a valid device.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) I don't know why...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) Note: This remote may be of similar or identical design to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) Pixelview remote (?). The raw codes and duplicate button codes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) appear to be the same.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) Henry Wong <henry@stuffedcow.net>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) Some changes to formatting and keycodes by Mark Schultz <n9xmj@yahoo.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) static struct rc_map_table msi_tvanywhere_plus[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) /* ---- Remote Button Layout ----
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) POWER SOURCE SCAN MUTE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) TV/FM 1 2 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) |> 4 5 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) <| 7 8 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) ^^UP 0 + RECALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) vvDN RECORD STOP PLAY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) MINIMIZE ZOOM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) CH+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) VOL- VOL+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) CH-
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) SNAPSHOT MTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) << FUNC >> RESET
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) { 0x01, KEY_NUMERIC_1 }, /* 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) { 0x0b, KEY_NUMERIC_2 }, /* 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) { 0x1b, KEY_NUMERIC_3 }, /* 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) { 0x05, KEY_NUMERIC_4 }, /* 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) { 0x09, KEY_NUMERIC_5 }, /* 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) { 0x15, KEY_NUMERIC_6 }, /* 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) { 0x06, KEY_NUMERIC_7 }, /* 7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) { 0x0a, KEY_NUMERIC_8 }, /* 8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) { 0x12, KEY_NUMERIC_9 }, /* 9 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) { 0x02, KEY_NUMERIC_0 }, /* 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) { 0x10, KEY_KPPLUS }, /* + */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) { 0x13, KEY_AGAIN }, /* Recall */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) { 0x1e, KEY_POWER }, /* Power */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) { 0x07, KEY_VIDEO }, /* Source */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) { 0x1c, KEY_SEARCH }, /* Scan */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) { 0x18, KEY_MUTE }, /* Mute */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) { 0x03, KEY_RADIO }, /* TV/FM */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) /* The next four keys are duplicates that appear to send the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) same IR code as Ch+, Ch-, >>, and << . The raw code assigned
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) to them is the actual code + 0x20 - they will never be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) detected as such unless some way is discovered to distinguish
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) these buttons from those that have the same code. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) { 0x3f, KEY_RIGHT }, /* |> and Ch+ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) { 0x37, KEY_LEFT }, /* <| and Ch- */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) { 0x2c, KEY_UP }, /* ^^Up and >> */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) { 0x24, KEY_DOWN }, /* vvDn and << */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) { 0x00, KEY_RECORD }, /* Record */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) { 0x08, KEY_STOP }, /* Stop */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) { 0x11, KEY_PLAY }, /* Play */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) { 0x0f, KEY_CLOSE }, /* Minimize */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) { 0x19, KEY_ZOOM }, /* Zoom */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) { 0x1a, KEY_CAMERA }, /* Snapshot */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) { 0x0d, KEY_LANGUAGE }, /* MTS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) { 0x14, KEY_VOLUMEDOWN }, /* Vol- */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) { 0x16, KEY_VOLUMEUP }, /* Vol+ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) { 0x17, KEY_CHANNELDOWN }, /* Ch- */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) { 0x1f, KEY_CHANNELUP }, /* Ch+ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) { 0x04, KEY_REWIND }, /* << */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) { 0x0e, KEY_MENU }, /* Function */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) { 0x0c, KEY_FASTFORWARD }, /* >> */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) { 0x1d, KEY_RESTART }, /* Reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) static struct rc_map_list msi_tvanywhere_plus_map = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) .map = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) .scan = msi_tvanywhere_plus,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) .size = ARRAY_SIZE(msi_tvanywhere_plus),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) .rc_proto = RC_PROTO_UNKNOWN, /* Legacy IR type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) .name = RC_MAP_MSI_TVANYWHERE_PLUS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) static int __init init_rc_map_msi_tvanywhere_plus(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) return rc_map_register(&msi_tvanywhere_plus_map);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) static void __exit exit_rc_map_msi_tvanywhere_plus(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) rc_map_unregister(&msi_tvanywhere_plus_map);
^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) module_init(init_rc_map_msi_tvanywhere_plus)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) module_exit(exit_rc_map_msi_tvanywhere_plus)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) MODULE_LICENSE("GPL");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) MODULE_AUTHOR("Mauro Carvalho Chehab");