diff options
author | Antti Palosaari <crope@iki.fi> | 2010-10-12 16:22:32 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-10-20 23:18:14 -0400 |
commit | 1cd72781db93c00fbee0bf4aed9e310a1d589738 (patch) | |
tree | c38f395682c51cd3193343a634047dc4634af5c6 /drivers/media/dvb/dvb-usb | |
parent | 3cbf5072ee0f38da278d67b7fafcfd6c86f83d36 (diff) |
[media] af9015: move remote controllers to new RC core
Use new RC core instead of old legacy RC implementation.
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/dvb/dvb-usb')
-rw-r--r-- | drivers/media/dvb/dvb-usb/af9015.c | 227 | ||||
-rw-r--r-- | drivers/media/dvb/dvb-usb/af9015.h | 418 |
2 files changed, 121 insertions, 524 deletions
diff --git a/drivers/media/dvb/dvb-usb/af9015.c b/drivers/media/dvb/dvb-usb/af9015.c index b04e25a631d1..63ba76bc2339 100644 --- a/drivers/media/dvb/dvb-usb/af9015.c +++ b/drivers/media/dvb/dvb-usb/af9015.c | |||
@@ -701,106 +701,97 @@ error: | |||
701 | return ret; | 701 | return ret; |
702 | } | 702 | } |
703 | 703 | ||
704 | struct af9015_setup { | 704 | struct af9015_rc_setup { |
705 | unsigned int id; | 705 | unsigned int id; |
706 | struct ir_scancode *rc_key_map; | 706 | char *rc_codes; |
707 | unsigned int rc_key_map_size; | ||
708 | }; | 707 | }; |
709 | 708 | ||
710 | static const struct af9015_setup *af9015_setup_match(unsigned int id, | 709 | static char *af9015_rc_setup_match(unsigned int id, |
711 | const struct af9015_setup *table) | 710 | const struct af9015_rc_setup *table) |
712 | { | 711 | { |
713 | for (; table->rc_key_map; table++) | 712 | for (; table->rc_codes; table++) |
714 | if (table->id == id) | 713 | if (table->id == id) |
715 | return table; | 714 | return table->rc_codes; |
716 | return NULL; | 715 | return NULL; |
717 | } | 716 | } |
718 | 717 | ||
719 | static const struct af9015_setup af9015_setup_modparam[] = { | 718 | static const struct af9015_rc_setup af9015_rc_setup_modparam[] = { |
720 | { AF9015_REMOTE_A_LINK_DTU_M, af9015_rc_a_link, | 719 | { AF9015_REMOTE_A_LINK_DTU_M, RC_MAP_ALINK_DTU_M }, |
721 | ARRAY_SIZE(af9015_rc_a_link) }, | 720 | { AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3, RC_MAP_MSI_DIGIVOX_II }, |
722 | { AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3, af9015_rc_msi, | 721 | { AF9015_REMOTE_MYGICTV_U718, RC_MAP_TOTAL_MEDIA_IN_HAND }, |
723 | ARRAY_SIZE(af9015_rc_msi) }, | 722 | { AF9015_REMOTE_DIGITTRADE_DVB_T, RC_MAP_DIGITTRADE }, |
724 | { AF9015_REMOTE_MYGICTV_U718, af9015_rc_mygictv, | 723 | { AF9015_REMOTE_AVERMEDIA_KS, RC_MAP_AVERMEDIA_RM_KS }, |
725 | ARRAY_SIZE(af9015_rc_mygictv) }, | ||
726 | { AF9015_REMOTE_DIGITTRADE_DVB_T, af9015_rc_digittrade, | ||
727 | ARRAY_SIZE(af9015_rc_digittrade) }, | ||
728 | { AF9015_REMOTE_AVERMEDIA_KS, af9015_rc_avermedia_ks, | ||
729 | ARRAY_SIZE(af9015_rc_avermedia_ks) }, | ||
730 | { } | 724 | { } |
731 | }; | 725 | }; |
732 | 726 | ||
733 | /* don't add new entries here anymore, use hashes instead */ | 727 | static const struct af9015_rc_setup af9015_rc_setup_hashes[] = { |
734 | static const struct af9015_setup af9015_setup_usbids[] = { | 728 | { 0xb8feb708, RC_MAP_MSI_DIGIVOX_II }, |
735 | { USB_VID_LEADTEK, af9015_rc_leadtek, | 729 | { 0xa3703d00, RC_MAP_ALINK_DTU_M }, |
736 | ARRAY_SIZE(af9015_rc_leadtek) }, | 730 | { 0x9b7dc64e, RC_MAP_TOTAL_MEDIA_IN_HAND }, /* MYGICTV U718 */ |
737 | { USB_VID_VISIONPLUS, af9015_rc_twinhan, | ||
738 | ARRAY_SIZE(af9015_rc_twinhan) }, | ||
739 | { USB_VID_KWORLD_2, af9015_rc_kworld, | ||
740 | ARRAY_SIZE(af9015_rc_kworld) }, | ||
741 | { USB_VID_AVERMEDIA, af9015_rc_avermedia, | ||
742 | ARRAY_SIZE(af9015_rc_avermedia) }, | ||
743 | { USB_VID_MSI_2, af9015_rc_msi_digivox_iii, | ||
744 | ARRAY_SIZE(af9015_rc_msi_digivox_iii) }, | ||
745 | { USB_VID_TERRATEC, af9015_rc_terratec, | ||
746 | ARRAY_SIZE(af9015_rc_terratec) }, | ||
747 | { } | 731 | { } |
748 | }; | 732 | }; |
749 | 733 | ||
750 | static const struct af9015_setup af9015_setup_hashes[] = { | 734 | static const struct af9015_rc_setup af9015_rc_setup_usbids[] = { |
751 | { 0xb8feb708, af9015_rc_msi, ARRAY_SIZE(af9015_rc_msi) }, | 735 | { (USB_VID_TERRATEC << 16) + USB_PID_TERRATEC_CINERGY_T_STICK_DUAL_RC, |
752 | { 0xa3703d00, af9015_rc_a_link, ARRAY_SIZE(af9015_rc_a_link) }, | 736 | RC_MAP_TERRATEC_SLIM }, |
753 | { 0x9b7dc64e, af9015_rc_mygictv, ARRAY_SIZE(af9015_rc_mygictv) }, | 737 | { (USB_VID_VISIONPLUS << 16) + USB_PID_AZUREWAVE_AD_TU700, |
738 | RC_MAP_AZUREWAVE_AD_TU700 }, | ||
739 | { (USB_VID_VISIONPLUS << 16) + USB_PID_TINYTWIN, | ||
740 | RC_MAP_AZUREWAVE_AD_TU700 }, | ||
741 | { (USB_VID_MSI_2 << 16) + USB_PID_MSI_DIGI_VOX_MINI_III, | ||
742 | RC_MAP_MSI_DIGIVOX_III }, | ||
743 | { (USB_VID_LEADTEK << 16) + USB_PID_WINFAST_DTV_DONGLE_GOLD, | ||
744 | RC_MAP_LEADTEK_Y04G0051 }, | ||
745 | { (USB_VID_AVERMEDIA << 16) + USB_PID_AVERMEDIA_VOLAR_X, | ||
746 | RC_MAP_AVERMEDIA_M135A }, | ||
747 | { (USB_VID_AFATECH << 16) + USB_PID_TREKSTOR_DVBT, | ||
748 | RC_MAP_TREKSTOR }, | ||
754 | { } | 749 | { } |
755 | }; | 750 | }; |
756 | 751 | ||
757 | static void af9015_set_remote_config(struct usb_device *udev, | 752 | static void af9015_set_remote_config(struct usb_device *udev, |
758 | struct dvb_usb_device_properties *props) | 753 | struct dvb_usb_device_properties *props) |
759 | { | 754 | { |
760 | const struct af9015_setup *table = NULL; | 755 | u16 vid = le16_to_cpu(udev->descriptor.idVendor); |
761 | 756 | u16 pid = le16_to_cpu(udev->descriptor.idProduct); | |
762 | if (dvb_usb_af9015_remote) { | 757 | |
763 | /* load remote defined as module param */ | 758 | /* try to load remote based module param */ |
764 | table = af9015_setup_match(dvb_usb_af9015_remote, | 759 | props->rc.core.rc_codes = af9015_rc_setup_match( |
765 | af9015_setup_modparam); | 760 | dvb_usb_af9015_remote, af9015_rc_setup_modparam); |
766 | } else { | 761 | |
767 | u16 vendor = le16_to_cpu(udev->descriptor.idVendor); | 762 | /* try to load remote based eeprom hash */ |
768 | 763 | if (!props->rc.core.rc_codes) | |
769 | table = af9015_setup_match(af9015_config.eeprom_sum, | 764 | props->rc.core.rc_codes = af9015_rc_setup_match( |
770 | af9015_setup_hashes); | 765 | af9015_config.eeprom_sum, af9015_rc_setup_hashes); |
771 | 766 | ||
772 | if (!table && vendor == USB_VID_AFATECH) { | 767 | /* try to load remote based USB ID */ |
773 | /* Check USB manufacturer and product strings and try | 768 | if (!props->rc.core.rc_codes) |
774 | to determine correct remote in case of chip vendor | 769 | props->rc.core.rc_codes = af9015_rc_setup_match( |
775 | reference IDs are used. | 770 | (vid << 16) + pid, af9015_rc_setup_usbids); |
776 | DO NOT ADD ANYTHING NEW HERE. Use hashes instead. | 771 | |
777 | */ | 772 | /* try to load remote based USB iManufacturer string */ |
778 | char manufacturer[10]; | 773 | if (!props->rc.core.rc_codes && vid == USB_VID_AFATECH) { |
779 | memset(manufacturer, 0, sizeof(manufacturer)); | 774 | /* Check USB manufacturer and product strings and try |
780 | usb_string(udev, udev->descriptor.iManufacturer, | 775 | to determine correct remote in case of chip vendor |
781 | manufacturer, sizeof(manufacturer)); | 776 | reference IDs are used. |
782 | if (!strcmp("MSI", manufacturer)) { | 777 | DO NOT ADD ANYTHING NEW HERE. Use hashes instead. */ |
783 | /* iManufacturer 1 MSI | 778 | char manufacturer[10]; |
784 | iProduct 2 MSI K-VOX */ | 779 | memset(manufacturer, 0, sizeof(manufacturer)); |
785 | table = af9015_setup_match( | 780 | usb_string(udev, udev->descriptor.iManufacturer, |
786 | AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3, | 781 | manufacturer, sizeof(manufacturer)); |
787 | af9015_setup_modparam); | 782 | if (!strcmp("MSI", manufacturer)) { |
788 | } else if (udev->descriptor.idProduct == | 783 | /* iManufacturer 1 MSI |
789 | cpu_to_le16(USB_PID_TREKSTOR_DVBT)) { | 784 | iProduct 2 MSI K-VOX */ |
790 | table = &(const struct af9015_setup){ 0, | 785 | props->rc.core.rc_codes = af9015_rc_setup_match( |
791 | af9015_rc_trekstor, | 786 | AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3, |
792 | ARRAY_SIZE(af9015_rc_trekstor) }; | 787 | af9015_rc_setup_modparam); |
793 | } | 788 | } |
794 | } else if (!table) | ||
795 | table = af9015_setup_match(vendor, af9015_setup_usbids); | ||
796 | } | ||
797 | |||
798 | if (table) { | ||
799 | props->rc.legacy.rc_key_map = table->rc_key_map; | ||
800 | props->rc.legacy.rc_key_map_size = table->rc_key_map_size; | ||
801 | } | 789 | } |
790 | return; | ||
802 | } | 791 | } |
803 | 792 | ||
793 | static int af9015_rc_query(struct dvb_usb_device *d); | ||
794 | |||
804 | static int af9015_read_config(struct usb_device *udev) | 795 | static int af9015_read_config(struct usb_device *udev) |
805 | { | 796 | { |
806 | int ret; | 797 | int ret; |
@@ -825,10 +816,11 @@ static int af9015_read_config(struct usb_device *udev) | |||
825 | deb_info("%s: IR mode:%d\n", __func__, val); | 816 | deb_info("%s: IR mode:%d\n", __func__, val); |
826 | for (i = 0; i < af9015_properties_count; i++) { | 817 | for (i = 0; i < af9015_properties_count; i++) { |
827 | if (val == AF9015_IR_MODE_DISABLED) { | 818 | if (val == AF9015_IR_MODE_DISABLED) { |
828 | af9015_properties[i].rc.legacy.rc_key_map = NULL; | 819 | af9015_properties[i].rc.core.rc_query = NULL; |
829 | af9015_properties[i].rc.legacy.rc_key_map_size = 0; | 820 | } else { |
830 | } else | 821 | af9015_properties[i].rc.core.rc_query = af9015_rc_query; |
831 | af9015_set_remote_config(udev, &af9015_properties[i]); | 822 | af9015_set_remote_config(udev, &af9015_properties[i]); |
823 | } | ||
832 | } | 824 | } |
833 | 825 | ||
834 | /* TS mode - one or two receivers */ | 826 | /* TS mode - one or two receivers */ |
@@ -1009,34 +1001,41 @@ static int af9015_identify_state(struct usb_device *udev, | |||
1009 | return ret; | 1001 | return ret; |
1010 | } | 1002 | } |
1011 | 1003 | ||
1012 | static int af9015_rc_query(struct dvb_usb_device *d, u32 *event, int *state) | 1004 | static int af9015_rc_query(struct dvb_usb_device *d) |
1013 | { | 1005 | { |
1014 | struct af9015_state *priv = d->priv; | 1006 | struct af9015_state *priv = d->priv; |
1015 | int ret; | 1007 | int ret; |
1016 | u8 ircode[5], repeat; | 1008 | u8 repeat, keycode[4]; |
1017 | 1009 | ||
1018 | /* read registers needed to detect remote controller code */ | 1010 | /* read registers needed to detect remote controller code */ |
1011 | /* TODO: Implement read multiple registers to reduce idle USB traffic. | ||
1012 | Currently three reads are needed for one idle rc polling. */ | ||
1019 | ret = af9015_read_reg(d, 0x98df, &repeat); | 1013 | ret = af9015_read_reg(d, 0x98df, &repeat); |
1020 | if (ret) | 1014 | if (ret) |
1021 | goto error; | 1015 | goto error; |
1022 | 1016 | ||
1023 | ret = af9015_read_reg(d, 0x98e7, &ircode[3]); | 1017 | ret = af9015_read_reg(d, 0x98e7, &keycode[2]); |
1024 | if (ret) | 1018 | if (ret) |
1025 | goto error; | 1019 | goto error; |
1026 | 1020 | ||
1027 | ret = af9015_read_reg(d, 0x98e8, &ircode[4]); | 1021 | ret = af9015_read_reg(d, 0x98e8, &keycode[3]); |
1028 | if (ret) | 1022 | if (ret) |
1029 | goto error; | 1023 | goto error; |
1030 | 1024 | ||
1031 | if (ircode[3] || ircode[4]) { | 1025 | if (keycode[2] || keycode[3]) { |
1032 | deb_rc("%s: key pressed\n", __func__); | ||
1033 | ircode[0] = 1; /* DVB_USB_RC_NEC_KEY_PRESSED */ | ||
1034 | |||
1035 | /* read 1st address byte */ | 1026 | /* read 1st address byte */ |
1036 | ret = af9015_read_reg(d, 0x98e5, &ircode[1]); | 1027 | ret = af9015_read_reg(d, 0x98e5, &keycode[0]); |
1028 | if (ret) | ||
1029 | goto error; | ||
1030 | |||
1031 | /* read 2nd address byte */ | ||
1032 | ret = af9015_read_reg(d, 0x98e6, &keycode[1]); | ||
1037 | if (ret) | 1033 | if (ret) |
1038 | goto error; | 1034 | goto error; |
1039 | 1035 | ||
1036 | deb_rc("%s: key pressed ", __func__); | ||
1037 | debug_dump(keycode, sizeof(keycode), deb_rc); | ||
1038 | |||
1040 | /* clean data bytes from mem */ | 1039 | /* clean data bytes from mem */ |
1041 | ret = af9015_write_reg(d, 0x98e7, 0); | 1040 | ret = af9015_write_reg(d, 0x98e7, 0); |
1042 | if (ret) | 1041 | if (ret) |
@@ -1046,26 +1045,28 @@ static int af9015_rc_query(struct dvb_usb_device *d, u32 *event, int *state) | |||
1046 | if (ret) | 1045 | if (ret) |
1047 | goto error; | 1046 | goto error; |
1048 | 1047 | ||
1049 | /* FIXME: Hack to pass checksum on the custom field for the | 1048 | if (keycode[2] == (u8) ~keycode[3]) { |
1050 | remote controllers using NEC extended address. | 1049 | if (keycode[0] == (u8) ~keycode[1]) { |
1051 | That must done since dvb_usb_nec_rc_key_to_event() | 1050 | /* NEC */ |
1052 | does not support NEC extended address format. */ | 1051 | priv->rc_keycode = keycode[0] << 8 | keycode[2]; |
1053 | ircode[2] = ~ircode[1]; | 1052 | } else { |
1053 | /* NEC extended*/ | ||
1054 | priv->rc_keycode = keycode[0] << 16 | | ||
1055 | keycode[1] << 8 | keycode[2]; | ||
1056 | } | ||
1057 | ir_keydown(d->rc_input_dev, priv->rc_keycode, 0); | ||
1058 | } else { | ||
1059 | priv->rc_keycode = 0; /* clear just for sure */ | ||
1060 | } | ||
1054 | } else if (priv->rc_repeat != repeat) { | 1061 | } else if (priv->rc_repeat != repeat) { |
1055 | deb_rc("%s: key repeated\n", __func__); | 1062 | deb_rc("%s: key repeated\n", __func__); |
1056 | ircode[0] = 2; /* DVB_USB_RC_NEC_KEY_REPEATED */ | 1063 | ir_keydown(d->rc_input_dev, priv->rc_keycode, 0); |
1057 | } else { | 1064 | } else { |
1058 | deb_rc("%s: no key press\n", __func__); | 1065 | deb_rc("%s: no key press\n", __func__); |
1059 | ircode[0] = 0; /* DVB_USB_RC_NEC_EMPTY */ | ||
1060 | } | 1066 | } |
1061 | 1067 | ||
1062 | priv->rc_repeat = repeat; | 1068 | priv->rc_repeat = repeat; |
1063 | 1069 | ||
1064 | deb_rc("%s: ", __func__); | ||
1065 | debug_dump(ircode, sizeof(ircode), deb_rc); | ||
1066 | |||
1067 | dvb_usb_nec_rc_key_to_event(d, ircode, event, state); | ||
1068 | |||
1069 | error: | 1070 | error: |
1070 | if (ret) | 1071 | if (ret) |
1071 | err("%s: failed:%d", __func__, ret); | 1072 | err("%s: failed:%d", __func__, ret); |
@@ -1359,9 +1360,13 @@ static struct dvb_usb_device_properties af9015_properties[] = { | |||
1359 | 1360 | ||
1360 | .identify_state = af9015_identify_state, | 1361 | .identify_state = af9015_identify_state, |
1361 | 1362 | ||
1362 | .rc.legacy = { | 1363 | .rc.core = { |
1363 | .rc_query = af9015_rc_query, | 1364 | .protocol = IR_TYPE_NEC, |
1365 | .module_name = "af9015", | ||
1364 | .rc_interval = AF9015_RC_INTERVAL, | 1366 | .rc_interval = AF9015_RC_INTERVAL, |
1367 | .rc_props = { | ||
1368 | .allowed_protos = IR_TYPE_NEC, | ||
1369 | }, | ||
1365 | }, | 1370 | }, |
1366 | 1371 | ||
1367 | .i2c_algo = &af9015_i2c_algo, | 1372 | .i2c_algo = &af9015_i2c_algo, |
@@ -1483,9 +1488,13 @@ static struct dvb_usb_device_properties af9015_properties[] = { | |||
1483 | 1488 | ||
1484 | .identify_state = af9015_identify_state, | 1489 | .identify_state = af9015_identify_state, |
1485 | 1490 | ||
1486 | .rc.legacy = { | 1491 | .rc.core = { |
1487 | .rc_query = af9015_rc_query, | 1492 | .protocol = IR_TYPE_NEC, |
1493 | .module_name = "af9015", | ||
1488 | .rc_interval = AF9015_RC_INTERVAL, | 1494 | .rc_interval = AF9015_RC_INTERVAL, |
1495 | .rc_props = { | ||
1496 | .allowed_protos = IR_TYPE_NEC, | ||
1497 | }, | ||
1489 | }, | 1498 | }, |
1490 | 1499 | ||
1491 | .i2c_algo = &af9015_i2c_algo, | 1500 | .i2c_algo = &af9015_i2c_algo, |
@@ -1592,9 +1601,13 @@ static struct dvb_usb_device_properties af9015_properties[] = { | |||
1592 | 1601 | ||
1593 | .identify_state = af9015_identify_state, | 1602 | .identify_state = af9015_identify_state, |
1594 | 1603 | ||
1595 | .rc.legacy = { | 1604 | .rc.core = { |
1596 | .rc_query = af9015_rc_query, | 1605 | .protocol = IR_TYPE_NEC, |
1606 | .module_name = "af9015", | ||
1597 | .rc_interval = AF9015_RC_INTERVAL, | 1607 | .rc_interval = AF9015_RC_INTERVAL, |
1608 | .rc_props = { | ||
1609 | .allowed_protos = IR_TYPE_NEC, | ||
1610 | }, | ||
1598 | }, | 1611 | }, |
1599 | 1612 | ||
1600 | .i2c_algo = &af9015_i2c_algo, | 1613 | .i2c_algo = &af9015_i2c_algo, |
diff --git a/drivers/media/dvb/dvb-usb/af9015.h b/drivers/media/dvb/dvb-usb/af9015.h index 948e50b47ae1..f20cfa6ed690 100644 --- a/drivers/media/dvb/dvb-usb/af9015.h +++ b/drivers/media/dvb/dvb-usb/af9015.h | |||
@@ -101,6 +101,7 @@ enum af9015_ir_mode { | |||
101 | struct af9015_state { | 101 | struct af9015_state { |
102 | struct i2c_adapter i2c_adap; /* I2C adapter for 2nd FE */ | 102 | struct i2c_adapter i2c_adap; /* I2C adapter for 2nd FE */ |
103 | u8 rc_repeat; | 103 | u8 rc_repeat; |
104 | u32 rc_keycode; | ||
104 | }; | 105 | }; |
105 | 106 | ||
106 | struct af9015_config { | 107 | struct af9015_config { |
@@ -120,421 +121,4 @@ enum af9015_remote { | |||
120 | /* 5 */ AF9015_REMOTE_AVERMEDIA_KS, | 121 | /* 5 */ AF9015_REMOTE_AVERMEDIA_KS, |
121 | }; | 122 | }; |
122 | 123 | ||
123 | /* LeadTek - Y04G0051 */ | ||
124 | /* Leadtek WinFast DTV Dongle Gold */ | ||
125 | static struct ir_scancode af9015_rc_leadtek[] = { | ||
126 | { 0x0300, KEY_POWER2 }, | ||
127 | { 0x0303, KEY_SCREEN }, | ||
128 | { 0x0304, KEY_RIGHT }, | ||
129 | { 0x0305, KEY_1 }, | ||
130 | { 0x0306, KEY_2 }, | ||
131 | { 0x0307, KEY_3 }, | ||
132 | { 0x0308, KEY_LEFT }, | ||
133 | { 0x0309, KEY_4 }, | ||
134 | { 0x030a, KEY_5 }, | ||
135 | { 0x030b, KEY_6 }, | ||
136 | { 0x030c, KEY_UP }, | ||
137 | { 0x030d, KEY_7 }, | ||
138 | { 0x030e, KEY_8 }, | ||
139 | { 0x030f, KEY_9 }, | ||
140 | { 0x0310, KEY_DOWN }, | ||
141 | { 0x0311, KEY_AGAIN }, | ||
142 | { 0x0312, KEY_0 }, | ||
143 | { 0x0313, KEY_OK }, /* 1st ok */ | ||
144 | { 0x0314, KEY_MUTE }, | ||
145 | { 0x0316, KEY_OK }, /* 2nd ok */ | ||
146 | { 0x031e, KEY_VIDEO }, /* 2nd video */ | ||
147 | { 0x031b, KEY_AUDIO }, | ||
148 | { 0x031f, KEY_TEXT }, | ||
149 | { 0x0340, KEY_SLEEP }, | ||
150 | { 0x0341, KEY_DOT }, | ||
151 | { 0x0342, KEY_REWIND }, | ||
152 | { 0x0343, KEY_PLAY }, | ||
153 | { 0x0344, KEY_FASTFORWARD }, | ||
154 | { 0x0345, KEY_TIME }, | ||
155 | { 0x0346, KEY_STOP }, /* 2nd stop */ | ||
156 | { 0x0347, KEY_RECORD }, | ||
157 | { 0x0348, KEY_CAMERA }, | ||
158 | { 0x0349, KEY_ESC }, | ||
159 | { 0x034a, KEY_NEW }, | ||
160 | { 0x034b, KEY_RED }, | ||
161 | { 0x034c, KEY_GREEN }, | ||
162 | { 0x034d, KEY_YELLOW }, | ||
163 | { 0x034e, KEY_BLUE }, | ||
164 | { 0x034f, KEY_MENU }, | ||
165 | { 0x0350, KEY_STOP }, /* 1st stop */ | ||
166 | { 0x0351, KEY_CHANNEL }, | ||
167 | { 0x0352, KEY_VIDEO }, /* 1st video */ | ||
168 | { 0x0353, KEY_EPG }, | ||
169 | { 0x0354, KEY_PREVIOUS }, | ||
170 | { 0x0355, KEY_NEXT }, | ||
171 | { 0x0356, KEY_TV }, | ||
172 | { 0x035a, KEY_VOLUMEDOWN }, | ||
173 | { 0x035b, KEY_CHANNELUP }, | ||
174 | { 0x035e, KEY_VOLUMEUP }, | ||
175 | { 0x035f, KEY_CHANNELDOWN }, | ||
176 | }; | ||
177 | |||
178 | /* TwinHan AzureWave AD-TU700(704J) */ | ||
179 | static struct ir_scancode af9015_rc_twinhan[] = { | ||
180 | { 0x0000, KEY_TAB }, /* Tab */ | ||
181 | { 0x0001, KEY_2 }, | ||
182 | { 0x0002, KEY_CHANNELDOWN }, | ||
183 | { 0x0003, KEY_1 }, | ||
184 | { 0x0004, KEY_LIST }, /* Record List */ | ||
185 | { 0x0005, KEY_CHANNELUP }, | ||
186 | { 0x0006, KEY_3 }, | ||
187 | { 0x0007, KEY_SLEEP }, /* Hibernate */ | ||
188 | { 0x0008, KEY_SWITCHVIDEOMODE }, /* A/V */ | ||
189 | { 0x0009, KEY_4 }, | ||
190 | { 0x000a, KEY_VOLUMEDOWN }, | ||
191 | { 0x000c, KEY_CANCEL }, /* Cancel */ | ||
192 | { 0x000d, KEY_7 }, | ||
193 | { 0x000e, KEY_AGAIN }, /* Recall */ | ||
194 | { 0x000f, KEY_TEXT }, /* Teletext */ | ||
195 | { 0x0010, KEY_MUTE }, | ||
196 | { 0x0011, KEY_RECORD }, | ||
197 | { 0x0012, KEY_FASTFORWARD }, /* FF >> */ | ||
198 | { 0x0013, KEY_BACK }, /* Back */ | ||
199 | { 0x0014, KEY_PLAY }, | ||
200 | { 0x0015, KEY_0 }, | ||
201 | { 0x0016, KEY_POWER }, | ||
202 | { 0x0017, KEY_FAVORITES }, /* Favorite List */ | ||
203 | { 0x0018, KEY_RED }, | ||
204 | { 0x0019, KEY_8 }, | ||
205 | { 0x001a, KEY_STOP }, | ||
206 | { 0x001b, KEY_9 }, | ||
207 | { 0x001c, KEY_EPG }, /* Info/EPG */ | ||
208 | { 0x001d, KEY_5 }, | ||
209 | { 0x001e, KEY_VOLUMEUP }, | ||
210 | { 0x001f, KEY_6 }, | ||
211 | { 0x0040, KEY_REWIND }, /* FR << */ | ||
212 | { 0x0041, KEY_PREVIOUS }, /* Replay */ | ||
213 | { 0x0042, KEY_NEXT }, /* Skip */ | ||
214 | { 0x0043, KEY_SUBTITLE }, /* Subtitle / CC */ | ||
215 | { 0x0045, KEY_KPPLUS }, /* Zoom+ */ | ||
216 | { 0x0046, KEY_KPMINUS }, /* Zoom- */ | ||
217 | { 0x0047, KEY_TV2 }, /* PIP */ | ||
218 | { 0x0048, KEY_INFO }, /* Preview */ | ||
219 | { 0x0049, KEY_AUDIO }, /* L/R */ /* TODO better event */ | ||
220 | { 0x004a, KEY_CLEAR }, /* Clear */ | ||
221 | { 0x004b, KEY_UP }, /* up arrow */ | ||
222 | { 0x004c, KEY_PAUSE }, | ||
223 | { 0x004d, KEY_ZOOM }, /* Full Screen */ | ||
224 | { 0x004e, KEY_LEFT }, /* left arrow */ | ||
225 | { 0x004f, KEY_ENTER }, /* Enter / ok */ | ||
226 | { 0x0050, KEY_LANGUAGE }, /* SAP */ | ||
227 | { 0x0051, KEY_DOWN }, /* down arrow */ | ||
228 | { 0x0052, KEY_RIGHT }, /* right arrow */ | ||
229 | { 0x0053, KEY_GREEN }, | ||
230 | { 0x0054, KEY_CAMERA }, /* Capture */ | ||
231 | { 0x005e, KEY_YELLOW }, | ||
232 | { 0x005f, KEY_BLUE }, | ||
233 | }; | ||
234 | |||
235 | /* A-Link DTU(m) - 3x6 slim remote */ | ||
236 | static struct ir_scancode af9015_rc_a_link[] = { | ||
237 | { 0x0800, KEY_VOLUMEUP }, | ||
238 | { 0x0801, KEY_1 }, | ||
239 | { 0x0802, KEY_3 }, | ||
240 | { 0x0803, KEY_7 }, | ||
241 | { 0x0804, KEY_9 }, | ||
242 | { 0x0805, KEY_ZOOM }, | ||
243 | { 0x0806, KEY_0 }, | ||
244 | { 0x0807, KEY_GOTO }, /* jump */ | ||
245 | { 0x080d, KEY_5 }, | ||
246 | { 0x080f, KEY_2 }, | ||
247 | { 0x0812, KEY_POWER }, | ||
248 | { 0x0814, KEY_CHANNELUP }, | ||
249 | { 0x0816, KEY_VOLUMEDOWN }, | ||
250 | { 0x0818, KEY_6 }, | ||
251 | { 0x081a, KEY_MUTE }, | ||
252 | { 0x081b, KEY_8 }, | ||
253 | { 0x081c, KEY_4 }, | ||
254 | { 0x081d, KEY_CHANNELDOWN }, | ||
255 | }; | ||
256 | |||
257 | /* MSI DIGIVOX mini II V3.0 */ | ||
258 | static struct ir_scancode af9015_rc_msi[] = { | ||
259 | { 0x0002, KEY_2 }, | ||
260 | { 0x0003, KEY_UP }, /* up */ | ||
261 | { 0x0004, KEY_3 }, | ||
262 | { 0x0005, KEY_CHANNELDOWN }, | ||
263 | { 0x0008, KEY_5 }, | ||
264 | { 0x0009, KEY_0 }, | ||
265 | { 0x000b, KEY_8 }, | ||
266 | { 0x000d, KEY_DOWN }, /* down */ | ||
267 | { 0x0010, KEY_9 }, | ||
268 | { 0x0011, KEY_7 }, | ||
269 | { 0x0014, KEY_VOLUMEUP }, | ||
270 | { 0x0015, KEY_CHANNELUP }, | ||
271 | { 0x0016, KEY_ENTER }, | ||
272 | { 0x0017, KEY_POWER }, | ||
273 | { 0x001a, KEY_1 }, | ||
274 | { 0x001c, KEY_4 }, | ||
275 | { 0x001d, KEY_6 }, | ||
276 | { 0x001f, KEY_VOLUMEDOWN }, | ||
277 | }; | ||
278 | |||
279 | /* MYGICTV U718 */ | ||
280 | /* Uses NEC extended 0x02bd. Extended byte removed for compatibility... */ | ||
281 | static struct ir_scancode af9015_rc_mygictv[] = { | ||
282 | { 0x0200, KEY_1 }, | ||
283 | { 0x0201, KEY_2 }, | ||
284 | { 0x0202, KEY_3 }, | ||
285 | { 0x0203, KEY_4 }, | ||
286 | { 0x0204, KEY_5 }, | ||
287 | { 0x0205, KEY_6 }, | ||
288 | { 0x0206, KEY_7 }, | ||
289 | { 0x0207, KEY_8 }, | ||
290 | { 0x0208, KEY_9 }, | ||
291 | { 0x0209, KEY_0 }, | ||
292 | { 0x020a, KEY_MUTE }, | ||
293 | { 0x020b, KEY_CYCLEWINDOWS }, /* yellow, min / max */ | ||
294 | { 0x020c, KEY_SWITCHVIDEOMODE }, /* TV / AV */ | ||
295 | { 0x020e, KEY_VOLUMEDOWN }, | ||
296 | { 0x020f, KEY_TIME }, /* TimeShift */ | ||
297 | { 0x0210, KEY_RIGHT }, /* right arrow */ | ||
298 | { 0x0211, KEY_LEFT }, /* left arrow */ | ||
299 | { 0x0212, KEY_UP }, /* up arrow */ | ||
300 | { 0x0213, KEY_DOWN }, /* down arrow */ | ||
301 | { 0x0214, KEY_POWER }, | ||
302 | { 0x0215, KEY_ENTER }, /* ok */ | ||
303 | { 0x0216, KEY_STOP }, | ||
304 | { 0x0217, KEY_CAMERA }, /* Snapshot */ | ||
305 | { 0x0218, KEY_CHANNELUP }, | ||
306 | { 0x0219, KEY_RECORD }, | ||
307 | { 0x021a, KEY_CHANNELDOWN }, | ||
308 | { 0x021c, KEY_ESC }, /* Esc */ | ||
309 | { 0x021e, KEY_PLAY }, | ||
310 | { 0x021f, KEY_VOLUMEUP }, | ||
311 | { 0x0240, KEY_PAUSE }, | ||
312 | { 0x0241, KEY_FASTFORWARD }, /* FF >> */ | ||
313 | { 0x0242, KEY_REWIND }, /* FR << */ | ||
314 | { 0x0243, KEY_ZOOM }, /* 'select' (?) */ | ||
315 | { 0x0244, KEY_SHUFFLE }, /* Shuffle */ | ||
316 | { 0x0245, KEY_POWER }, | ||
317 | }; | ||
318 | |||
319 | /* KWorld PlusTV Dual DVB-T Stick (DVB-T 399U) */ | ||
320 | /* FIXME: This mapping is totally incomplete and probably even wrong... */ | ||
321 | /* Uses NEC extended 0x866b. Extended byte removed for compatibility... */ | ||
322 | static struct ir_scancode af9015_rc_kworld[] = { | ||
323 | { 0x8600, KEY_1 }, | ||
324 | { 0x8601, KEY_2 }, | ||
325 | { 0x8602, KEY_3 }, | ||
326 | { 0x8603, KEY_4 }, | ||
327 | { 0x8604, KEY_5 }, | ||
328 | { 0x8605, KEY_6 }, | ||
329 | { 0x8606, KEY_7 }, | ||
330 | { 0x8607, KEY_8 }, | ||
331 | { 0x8608, KEY_9 }, | ||
332 | { 0x860a, KEY_0 }, | ||
333 | }; | ||
334 | |||
335 | /* AverMedia Volar X */ | ||
336 | static struct ir_scancode af9015_rc_avermedia[] = { | ||
337 | { 0x0200, KEY_POWER }, /* POWER */ | ||
338 | { 0x0201, KEY_PROG1 }, /* SOURCE */ | ||
339 | { 0x0203, KEY_TEXT }, /* TELETEXT */ | ||
340 | { 0x0204, KEY_EPG }, /* EPG */ | ||
341 | { 0x0205, KEY_1 }, /* 1 */ | ||
342 | { 0x0206, KEY_2 }, /* 2 */ | ||
343 | { 0x0207, KEY_3 }, /* 3 */ | ||
344 | { 0x0208, KEY_AUDIO }, /* AUDIO */ | ||
345 | { 0x0209, KEY_4 }, /* 4 */ | ||
346 | { 0x020a, KEY_5 }, /* 5 */ | ||
347 | { 0x020b, KEY_6 }, /* 6 */ | ||
348 | { 0x020c, KEY_ZOOM }, /* FULL SCREEN */ | ||
349 | { 0x020d, KEY_7 }, /* 7 */ | ||
350 | { 0x020e, KEY_8 }, /* 8 */ | ||
351 | { 0x020f, KEY_9 }, /* 9 */ | ||
352 | { 0x0210, KEY_PROG3 }, /* 16-CH PREV */ | ||
353 | { 0x0211, KEY_0 }, /* 0 */ | ||
354 | { 0x0212, KEY_LEFT }, /* L / DISPLAY */ | ||
355 | { 0x0213, KEY_RIGHT }, /* R / CH RTN */ | ||
356 | { 0x0214, KEY_MUTE }, /* MUTE */ | ||
357 | { 0x0215, KEY_MENU }, /* MENU */ | ||
358 | { 0x0217, KEY_PROG2 }, /* SNAP SHOT */ | ||
359 | { 0x0218, KEY_PLAY }, /* PLAY */ | ||
360 | { 0x0219, KEY_RECORD }, /* RECORD */ | ||
361 | { 0x021a, KEY_PLAYPAUSE }, /* TIMESHIFT / PAUSE */ | ||
362 | { 0x021b, KEY_STOP }, /* STOP */ | ||
363 | { 0x021c, KEY_FORWARD }, /* >> / YELLOW */ | ||
364 | { 0x021d, KEY_BACK }, /* << / RED */ | ||
365 | { 0x021e, KEY_VOLUMEDOWN }, /* VOL DOWN */ | ||
366 | { 0x021f, KEY_VOLUMEUP }, /* VOL UP */ | ||
367 | |||
368 | { 0x0300, KEY_LAST }, /* >>| / BLUE */ | ||
369 | { 0x0301, KEY_FIRST }, /* |<< / GREEN */ | ||
370 | { 0x0302, KEY_CHANNELDOWN }, /* CH DOWN */ | ||
371 | { 0x0303, KEY_CHANNELUP }, /* CH UP */ | ||
372 | }; | ||
373 | |||
374 | /* AverMedia KS */ | ||
375 | /* FIXME: mappings are not 100% correct? */ | ||
376 | static struct ir_scancode af9015_rc_avermedia_ks[] = { | ||
377 | { 0x0501, KEY_POWER }, | ||
378 | { 0x0502, KEY_CHANNELUP }, | ||
379 | { 0x0503, KEY_CHANNELDOWN }, | ||
380 | { 0x0504, KEY_VOLUMEUP }, | ||
381 | { 0x0505, KEY_VOLUMEDOWN }, | ||
382 | { 0x0506, KEY_MUTE }, | ||
383 | { 0x0507, KEY_RIGHT }, | ||
384 | { 0x0508, KEY_PROG1 }, | ||
385 | { 0x0509, KEY_1 }, | ||
386 | { 0x050a, KEY_2 }, | ||
387 | { 0x050b, KEY_3 }, | ||
388 | { 0x050c, KEY_4 }, | ||
389 | { 0x050d, KEY_5 }, | ||
390 | { 0x050e, KEY_6 }, | ||
391 | { 0x050f, KEY_7 }, | ||
392 | { 0x0510, KEY_8 }, | ||
393 | { 0x0511, KEY_9 }, | ||
394 | { 0x0512, KEY_0 }, | ||
395 | { 0x0513, KEY_AUDIO }, | ||
396 | { 0x0515, KEY_EPG }, | ||
397 | { 0x0516, KEY_PLAY }, | ||
398 | { 0x0517, KEY_RECORD }, | ||
399 | { 0x0518, KEY_STOP }, | ||
400 | { 0x051c, KEY_BACK }, | ||
401 | { 0x051d, KEY_FORWARD }, | ||
402 | { 0x054d, KEY_LEFT }, | ||
403 | { 0x0556, KEY_ZOOM }, | ||
404 | }; | ||
405 | |||
406 | /* Digittrade DVB-T USB Stick */ | ||
407 | static struct ir_scancode af9015_rc_digittrade[] = { | ||
408 | { 0x0000, KEY_9 }, | ||
409 | { 0x0001, KEY_EPG }, /* EPG */ | ||
410 | { 0x0002, KEY_VOLUMEDOWN }, /* Vol Dn */ | ||
411 | { 0x0003, KEY_TEXT }, /* TELETEXT */ | ||
412 | { 0x0004, KEY_8 }, | ||
413 | { 0x0005, KEY_MUTE }, /* MUTE */ | ||
414 | { 0x0006, KEY_POWER }, /* POWER */ | ||
415 | { 0x0009, KEY_ZOOM }, /* FULLSCREEN */ | ||
416 | { 0x000a, KEY_RECORD }, /* RECORD */ | ||
417 | { 0x000d, KEY_SUBTITLE }, /* SUBTITLE */ | ||
418 | { 0x000e, KEY_STOP }, /* STOP */ | ||
419 | { 0x0010, KEY_LAST }, /* RETURN */ | ||
420 | { 0x0011, KEY_2 }, | ||
421 | { 0x0012, KEY_4 }, | ||
422 | { 0x0015, KEY_3 }, | ||
423 | { 0x0016, KEY_5 }, | ||
424 | { 0x0017, KEY_CHANNELDOWN }, /* Ch Dn */ | ||
425 | { 0x0019, KEY_CHANNELUP }, /* CH Up */ | ||
426 | { 0x001a, KEY_PAUSE }, /* PAUSE */ | ||
427 | { 0x001b, KEY_1 }, | ||
428 | { 0x001d, KEY_AUDIO }, /* DUAL SOUND */ | ||
429 | { 0x001e, KEY_PLAY }, /* PLAY */ | ||
430 | { 0x001f, KEY_PRINT }, /* SNAPSHOT */ | ||
431 | { 0x0040, KEY_VOLUMEUP }, /* Vol Up */ | ||
432 | { 0x0048, KEY_7 }, | ||
433 | { 0x004c, KEY_6 }, | ||
434 | { 0x004d, KEY_PLAYPAUSE }, /* TIMESHIFT */ | ||
435 | { 0x0054, KEY_0 }, | ||
436 | }; | ||
437 | |||
438 | /* TREKSTOR DVB-T USB Stick */ | ||
439 | static struct ir_scancode af9015_rc_trekstor[] = { | ||
440 | { 0x0084, KEY_0 }, | ||
441 | { 0x0085, KEY_MUTE }, /* Mute */ | ||
442 | { 0x0086, KEY_AGAIN }, /* Home */ | ||
443 | { 0x0087, KEY_UP }, /* Up */ | ||
444 | { 0x0088, KEY_ENTER }, /* OK */ | ||
445 | { 0x0089, KEY_RIGHT }, /* Right */ | ||
446 | { 0x008a, KEY_FASTFORWARD }, /* Fast forward */ | ||
447 | { 0x008b, KEY_VOLUMEUP }, /* Volume + */ | ||
448 | { 0x008c, KEY_DOWN }, /* Down */ | ||
449 | { 0x008d, KEY_PLAY }, /* Play/Pause */ | ||
450 | { 0x008e, KEY_STOP }, /* Stop */ | ||
451 | { 0x008f, KEY_EPG }, /* Info/EPG */ | ||
452 | { 0x0090, KEY_7 }, | ||
453 | { 0x0091, KEY_4 }, | ||
454 | { 0x0092, KEY_1 }, | ||
455 | { 0x0093, KEY_CHANNELDOWN }, /* Channel - */ | ||
456 | { 0x0094, KEY_8 }, | ||
457 | { 0x0095, KEY_5 }, | ||
458 | { 0x0096, KEY_2 }, | ||
459 | { 0x0097, KEY_CHANNELUP }, /* Channel + */ | ||
460 | { 0x0098, KEY_9 }, | ||
461 | { 0x0099, KEY_6 }, | ||
462 | { 0x009a, KEY_3 }, | ||
463 | { 0x009b, KEY_VOLUMEDOWN }, /* Volume - */ | ||
464 | { 0x009c, KEY_ZOOM }, /* TV */ | ||
465 | { 0x009d, KEY_RECORD }, /* Record */ | ||
466 | { 0x009e, KEY_REWIND }, /* Rewind */ | ||
467 | { 0x009f, KEY_LEFT }, /* Left */ | ||
468 | }; | ||
469 | |||
470 | /* MSI DIGIVOX mini III */ | ||
471 | /* Uses NEC extended 0x61d6. Extended byte removed for compatibility... */ | ||
472 | static struct ir_scancode af9015_rc_msi_digivox_iii[] = { | ||
473 | { 0x6101, KEY_VIDEO }, /* Source */ | ||
474 | { 0x6102, KEY_3 }, | ||
475 | { 0x6103, KEY_POWER2 }, /* ShutDown */ | ||
476 | { 0x6104, KEY_1 }, | ||
477 | { 0x6105, KEY_5 }, | ||
478 | { 0x6106, KEY_6 }, | ||
479 | { 0x6107, KEY_CHANNELDOWN }, /* CH- */ | ||
480 | { 0x6108, KEY_2 }, | ||
481 | { 0x6109, KEY_CHANNELUP }, /* CH+ */ | ||
482 | { 0x610a, KEY_9 }, | ||
483 | { 0x610b, KEY_ZOOM }, /* Zoom */ | ||
484 | { 0x610c, KEY_7 }, | ||
485 | { 0x610d, KEY_8 }, | ||
486 | { 0x610e, KEY_VOLUMEUP }, /* Vol+ */ | ||
487 | { 0x610f, KEY_4 }, | ||
488 | { 0x6110, KEY_ESC }, /* [back up arrow] */ | ||
489 | { 0x6111, KEY_0 }, | ||
490 | { 0x6112, KEY_OK }, /* [enter arrow] */ | ||
491 | { 0x6113, KEY_VOLUMEDOWN }, /* Vol- */ | ||
492 | { 0x6114, KEY_RECORD }, /* Rec */ | ||
493 | { 0x6115, KEY_STOP }, /* Stop */ | ||
494 | { 0x6116, KEY_PLAY }, /* Play */ | ||
495 | { 0x6117, KEY_MUTE }, /* Mute */ | ||
496 | { 0x6118, KEY_UP }, | ||
497 | { 0x6119, KEY_DOWN }, | ||
498 | { 0x611a, KEY_LEFT }, | ||
499 | { 0x611b, KEY_RIGHT }, | ||
500 | { 0x611c, KEY_RED }, | ||
501 | { 0x611d, KEY_GREEN }, | ||
502 | { 0x611e, KEY_YELLOW }, | ||
503 | { 0x611f, KEY_BLUE }, | ||
504 | { 0x6143, KEY_POWER }, /* [red power button] */ | ||
505 | }; | ||
506 | |||
507 | /* TerraTec - 4x7 slim remote */ | ||
508 | /* Uses NEC extended 0x02bd. Extended byte removed for compatibility... */ | ||
509 | static struct ir_scancode af9015_rc_terratec[] = { | ||
510 | { 0x0200, KEY_1 }, | ||
511 | { 0x0201, KEY_2 }, | ||
512 | { 0x0202, KEY_3 }, | ||
513 | { 0x0203, KEY_4 }, | ||
514 | { 0x0204, KEY_5 }, | ||
515 | { 0x0205, KEY_6 }, | ||
516 | { 0x0206, KEY_7 }, | ||
517 | { 0x0207, KEY_8 }, | ||
518 | { 0x0208, KEY_9 }, | ||
519 | { 0x0209, KEY_0 }, | ||
520 | { 0x020a, KEY_MUTE }, | ||
521 | { 0x020b, KEY_ZOOM }, /* symbol: PIP or zoom ? */ | ||
522 | { 0x020e, KEY_VOLUMEDOWN }, | ||
523 | { 0x020f, KEY_PLAYPAUSE }, | ||
524 | { 0x0210, KEY_RIGHT }, | ||
525 | { 0x0211, KEY_LEFT }, | ||
526 | { 0x0212, KEY_UP }, | ||
527 | { 0x0213, KEY_DOWN }, | ||
528 | { 0x0215, KEY_OK }, | ||
529 | { 0x0216, KEY_STOP }, | ||
530 | { 0x0217, KEY_CAMERA }, /* snapshot */ | ||
531 | { 0x0218, KEY_CHANNELUP }, | ||
532 | { 0x0219, KEY_RECORD }, | ||
533 | { 0x021a, KEY_CHANNELDOWN }, | ||
534 | { 0x021c, KEY_ESC }, | ||
535 | { 0x021f, KEY_VOLUMEUP }, | ||
536 | { 0x0244, KEY_EPG }, | ||
537 | { 0x0245, KEY_POWER2 }, /* [red power button] */ | ||
538 | }; | ||
539 | |||
540 | #endif | 124 | #endif |