diff options
author | Antti Palosaari <crope@iki.fi> | 2010-09-12 12:31:56 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-10-20 23:05:52 -0400 |
commit | d3bb73de97a9685bb150f81017d7e184fdb18451 (patch) | |
tree | d551bf4cd3710e678dabff7a19283fca0a9632a7 /drivers/media/dvb | |
parent | 2ec01b41e3e06bd22d8f6c7f330605b554e9b121 (diff) |
V4L/DVB: af9015: reimplement remote controller
Remove HID and polling via firmware API. Implement direct access to remote codes via memory read and write.
HID and polling via firmware api never worked 100% well and there was also some limitations which tied used remote and device together.
After that it is possible to use upcoming kernel remote controller core.
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/dvb')
-rw-r--r-- | drivers/media/dvb/dvb-usb/af9015.c | 194 | ||||
-rw-r--r-- | drivers/media/dvb/dvb-usb/af9015.h | 1142 |
2 files changed, 466 insertions, 870 deletions
diff --git a/drivers/media/dvb/dvb-usb/af9015.c b/drivers/media/dvb/dvb-usb/af9015.c index bf6ff2bb95c5..f82f50d6acf5 100644 --- a/drivers/media/dvb/dvb-usb/af9015.c +++ b/drivers/media/dvb/dvb-usb/af9015.c | |||
@@ -599,37 +599,6 @@ free: | |||
599 | return ret; | 599 | return ret; |
600 | } | 600 | } |
601 | 601 | ||
602 | static int af9015_download_ir_table(struct dvb_usb_device *d) | ||
603 | { | ||
604 | int i, packets = 0, ret; | ||
605 | u16 addr = 0x9a56; /* ir-table start address */ | ||
606 | struct req_t req = {WRITE_MEMORY, 0, 0, 0, 0, 1, NULL}; | ||
607 | u8 *data = NULL; | ||
608 | deb_info("%s:\n", __func__); | ||
609 | |||
610 | data = af9015_config.ir_table; | ||
611 | packets = af9015_config.ir_table_size; | ||
612 | |||
613 | /* no remote */ | ||
614 | if (!packets) | ||
615 | goto exit; | ||
616 | |||
617 | /* load remote ir-table */ | ||
618 | for (i = 0; i < packets; i++) { | ||
619 | req.addr = addr + i; | ||
620 | req.data = &data[i]; | ||
621 | ret = af9015_ctrl_msg(d, &req); | ||
622 | if (ret) { | ||
623 | err("ir-table download failed at packet %d with " \ | ||
624 | "code %d", i, ret); | ||
625 | return ret; | ||
626 | } | ||
627 | } | ||
628 | |||
629 | exit: | ||
630 | return 0; | ||
631 | } | ||
632 | |||
633 | static int af9015_init(struct dvb_usb_device *d) | 602 | static int af9015_init(struct dvb_usb_device *d) |
634 | { | 603 | { |
635 | int ret; | 604 | int ret; |
@@ -639,10 +608,6 @@ static int af9015_init(struct dvb_usb_device *d) | |||
639 | if (ret) | 608 | if (ret) |
640 | goto error; | 609 | goto error; |
641 | 610 | ||
642 | ret = af9015_download_ir_table(d); | ||
643 | if (ret) | ||
644 | goto error; | ||
645 | |||
646 | error: | 611 | error: |
647 | return ret; | 612 | return ret; |
648 | } | 613 | } |
@@ -739,8 +704,6 @@ struct af9015_setup { | |||
739 | unsigned int id; | 704 | unsigned int id; |
740 | struct ir_scancode *rc_key_map; | 705 | struct ir_scancode *rc_key_map; |
741 | unsigned int rc_key_map_size; | 706 | unsigned int rc_key_map_size; |
742 | u8 *ir_table; | ||
743 | unsigned int ir_table_size; | ||
744 | }; | 707 | }; |
745 | 708 | ||
746 | static const struct af9015_setup *af9015_setup_match(unsigned int id, | 709 | static const struct af9015_setup *af9015_setup_match(unsigned int id, |
@@ -753,57 +716,40 @@ static const struct af9015_setup *af9015_setup_match(unsigned int id, | |||
753 | } | 716 | } |
754 | 717 | ||
755 | static const struct af9015_setup af9015_setup_modparam[] = { | 718 | static const struct af9015_setup af9015_setup_modparam[] = { |
756 | { AF9015_REMOTE_A_LINK_DTU_M, | 719 | { AF9015_REMOTE_A_LINK_DTU_M, af9015_rc_a_link, |
757 | ir_codes_af9015_table_a_link, ARRAY_SIZE(ir_codes_af9015_table_a_link), | 720 | ARRAY_SIZE(af9015_rc_a_link) }, |
758 | af9015_ir_table_a_link, ARRAY_SIZE(af9015_ir_table_a_link) }, | 721 | { AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3, af9015_rc_msi, |
759 | { AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3, | 722 | ARRAY_SIZE(af9015_rc_msi) }, |
760 | ir_codes_af9015_table_msi, ARRAY_SIZE(ir_codes_af9015_table_msi), | 723 | { AF9015_REMOTE_MYGICTV_U718, af9015_rc_mygictv, |
761 | af9015_ir_table_msi, ARRAY_SIZE(af9015_ir_table_msi) }, | 724 | ARRAY_SIZE(af9015_rc_mygictv) }, |
762 | { AF9015_REMOTE_MYGICTV_U718, | 725 | { AF9015_REMOTE_DIGITTRADE_DVB_T, af9015_rc_digittrade, |
763 | ir_codes_af9015_table_mygictv, ARRAY_SIZE(ir_codes_af9015_table_mygictv), | 726 | ARRAY_SIZE(af9015_rc_digittrade) }, |
764 | af9015_ir_table_mygictv, ARRAY_SIZE(af9015_ir_table_mygictv) }, | 727 | { AF9015_REMOTE_AVERMEDIA_KS, af9015_rc_avermedia_ks, |
765 | { AF9015_REMOTE_DIGITTRADE_DVB_T, | 728 | ARRAY_SIZE(af9015_rc_avermedia_ks) }, |
766 | ir_codes_af9015_table_digittrade, ARRAY_SIZE(ir_codes_af9015_table_digittrade), | ||
767 | af9015_ir_table_digittrade, ARRAY_SIZE(af9015_ir_table_digittrade) }, | ||
768 | { AF9015_REMOTE_AVERMEDIA_KS, | ||
769 | ir_codes_af9015_table_avermedia, ARRAY_SIZE(ir_codes_af9015_table_avermedia), | ||
770 | af9015_ir_table_avermedia_ks, ARRAY_SIZE(af9015_ir_table_avermedia_ks) }, | ||
771 | { } | 729 | { } |
772 | }; | 730 | }; |
773 | 731 | ||
774 | /* don't add new entries here anymore, use hashes instead */ | 732 | /* don't add new entries here anymore, use hashes instead */ |
775 | static const struct af9015_setup af9015_setup_usbids[] = { | 733 | static const struct af9015_setup af9015_setup_usbids[] = { |
776 | { USB_VID_LEADTEK, | 734 | { USB_VID_LEADTEK, af9015_rc_leadtek, |
777 | ir_codes_af9015_table_leadtek, ARRAY_SIZE(ir_codes_af9015_table_leadtek), | 735 | ARRAY_SIZE(af9015_rc_leadtek) }, |
778 | af9015_ir_table_leadtek, ARRAY_SIZE(af9015_ir_table_leadtek) }, | 736 | { USB_VID_VISIONPLUS, af9015_rc_twinhan, |
779 | { USB_VID_VISIONPLUS, | 737 | ARRAY_SIZE(af9015_rc_twinhan) }, |
780 | ir_codes_af9015_table_twinhan, ARRAY_SIZE(ir_codes_af9015_table_twinhan), | 738 | { USB_VID_KWORLD_2, af9015_rc_kworld, |
781 | af9015_ir_table_twinhan, ARRAY_SIZE(af9015_ir_table_twinhan) }, | 739 | ARRAY_SIZE(af9015_rc_kworld) }, |
782 | { USB_VID_KWORLD_2, /* TODO: use correct rc keys */ | 740 | { USB_VID_AVERMEDIA, af9015_rc_avermedia, |
783 | ir_codes_af9015_table_twinhan, ARRAY_SIZE(ir_codes_af9015_table_twinhan), | 741 | ARRAY_SIZE(af9015_rc_avermedia) }, |
784 | af9015_ir_table_kworld, ARRAY_SIZE(af9015_ir_table_kworld) }, | 742 | { USB_VID_MSI_2, af9015_rc_msi_digivox_iii, |
785 | { USB_VID_AVERMEDIA, | 743 | ARRAY_SIZE(af9015_rc_msi_digivox_iii) }, |
786 | ir_codes_af9015_table_avermedia, ARRAY_SIZE(ir_codes_af9015_table_avermedia), | 744 | { USB_VID_TERRATEC, af9015_rc_terratec, |
787 | af9015_ir_table_avermedia, ARRAY_SIZE(af9015_ir_table_avermedia) }, | 745 | ARRAY_SIZE(af9015_rc_terratec) }, |
788 | { USB_VID_MSI_2, | ||
789 | ir_codes_af9015_table_msi_digivox_iii, ARRAY_SIZE(ir_codes_af9015_table_msi_digivox_iii), | ||
790 | af9015_ir_table_msi_digivox_iii, ARRAY_SIZE(af9015_ir_table_msi_digivox_iii) }, | ||
791 | { USB_VID_TERRATEC, | ||
792 | ir_codes_terratec, ARRAY_SIZE(ir_codes_terratec), | ||
793 | af9015_ir_terratec, ARRAY_SIZE(af9015_ir_terratec) }, | ||
794 | { } | 746 | { } |
795 | }; | 747 | }; |
796 | 748 | ||
797 | static const struct af9015_setup af9015_setup_hashes[] = { | 749 | static const struct af9015_setup af9015_setup_hashes[] = { |
798 | { 0xb8feb708, | 750 | { 0xb8feb708, af9015_rc_msi, ARRAY_SIZE(af9015_rc_msi) }, |
799 | ir_codes_af9015_table_msi, ARRAY_SIZE(ir_codes_af9015_table_msi), | 751 | { 0xa3703d00, af9015_rc_a_link, ARRAY_SIZE(af9015_rc_a_link) }, |
800 | af9015_ir_table_msi, ARRAY_SIZE(af9015_ir_table_msi) }, | 752 | { 0x9b7dc64e, af9015_rc_mygictv, ARRAY_SIZE(af9015_rc_mygictv) }, |
801 | { 0xa3703d00, | ||
802 | ir_codes_af9015_table_a_link, ARRAY_SIZE(ir_codes_af9015_table_a_link), | ||
803 | af9015_ir_table_a_link, ARRAY_SIZE(af9015_ir_table_a_link) }, | ||
804 | { 0x9b7dc64e, | ||
805 | ir_codes_af9015_table_mygictv, ARRAY_SIZE(ir_codes_af9015_table_mygictv), | ||
806 | af9015_ir_table_mygictv, ARRAY_SIZE(af9015_ir_table_mygictv) }, | ||
807 | { } | 753 | { } |
808 | }; | 754 | }; |
809 | 755 | ||
@@ -841,11 +787,8 @@ static void af9015_set_remote_config(struct usb_device *udev, | |||
841 | } else if (udev->descriptor.idProduct == | 787 | } else if (udev->descriptor.idProduct == |
842 | cpu_to_le16(USB_PID_TREKSTOR_DVBT)) { | 788 | cpu_to_le16(USB_PID_TREKSTOR_DVBT)) { |
843 | table = &(const struct af9015_setup){ 0, | 789 | table = &(const struct af9015_setup){ 0, |
844 | ir_codes_af9015_table_trekstor, | 790 | af9015_rc_trekstor, |
845 | ARRAY_SIZE(ir_codes_af9015_table_trekstor), | 791 | ARRAY_SIZE(af9015_rc_trekstor) }; |
846 | af9015_ir_table_trekstor, | ||
847 | ARRAY_SIZE(af9015_ir_table_trekstor) | ||
848 | }; | ||
849 | } | 792 | } |
850 | } else if (!table) | 793 | } else if (!table) |
851 | table = af9015_setup_match(vendor, af9015_setup_usbids); | 794 | table = af9015_setup_match(vendor, af9015_setup_usbids); |
@@ -854,8 +797,6 @@ static void af9015_set_remote_config(struct usb_device *udev, | |||
854 | if (table) { | 797 | if (table) { |
855 | props->rc.legacy.rc_key_map = table->rc_key_map; | 798 | props->rc.legacy.rc_key_map = table->rc_key_map; |
856 | props->rc.legacy.rc_key_map_size = table->rc_key_map_size; | 799 | props->rc.legacy.rc_key_map_size = table->rc_key_map_size; |
857 | af9015_config.ir_table = table->ir_table; | ||
858 | af9015_config.ir_table_size = table->ir_table_size; | ||
859 | } | 800 | } |
860 | } | 801 | } |
861 | 802 | ||
@@ -1065,34 +1006,66 @@ static int af9015_identify_state(struct usb_device *udev, | |||
1065 | 1006 | ||
1066 | static int af9015_rc_query(struct dvb_usb_device *d, u32 *event, int *state) | 1007 | static int af9015_rc_query(struct dvb_usb_device *d, u32 *event, int *state) |
1067 | { | 1008 | { |
1068 | u8 buf[8]; | 1009 | struct af9015_state *priv = d->priv; |
1069 | struct req_t req = {GET_IR_CODE, 0, 0, 0, 0, sizeof(buf), buf}; | 1010 | int ret; |
1070 | struct ir_scancode *keymap = d->props.rc.legacy.rc_key_map; | 1011 | u8 ircode[5], repeat; |
1071 | int i, ret; | ||
1072 | 1012 | ||
1073 | memset(buf, 0, sizeof(buf)); | 1013 | /* read registers needed to detect remote controller code */ |
1014 | ret = af9015_read_reg(d, 0x98df, &repeat); | ||
1015 | if (ret) | ||
1016 | goto error; | ||
1074 | 1017 | ||
1075 | ret = af9015_ctrl_msg(d, &req); | 1018 | ret = af9015_read_reg(d, 0x98e7, &ircode[3]); |
1076 | if (ret) | 1019 | if (ret) |
1077 | return ret; | 1020 | goto error; |
1021 | |||
1022 | ret = af9015_read_reg(d, 0x98e8, &ircode[4]); | ||
1023 | if (ret) | ||
1024 | goto error; | ||
1078 | 1025 | ||
1079 | *event = 0; | 1026 | if (ircode[3] || ircode[4]) { |
1080 | *state = REMOTE_NO_KEY_PRESSED; | 1027 | deb_rc("%s: key pressed\n", __func__); |
1028 | ircode[0] = 1; /* DVB_USB_RC_NEC_KEY_PRESSED */ | ||
1081 | 1029 | ||
1082 | for (i = 0; i < d->props.rc.legacy.rc_key_map_size; i++) { | 1030 | /* read 1st address byte */ |
1083 | if (!buf[1] && rc5_custom(&keymap[i]) == buf[0] && | 1031 | ret = af9015_read_reg(d, 0x98e5, &ircode[1]); |
1084 | rc5_data(&keymap[i]) == buf[2]) { | 1032 | if (ret) |
1085 | *event = keymap[i].keycode; | 1033 | goto error; |
1086 | *state = REMOTE_KEY_PRESSED; | 1034 | |
1087 | break; | 1035 | /* clean data bytes from mem */ |
1088 | } | 1036 | ret = af9015_write_reg(d, 0x98e7, 0); |
1037 | if (ret) | ||
1038 | goto error; | ||
1039 | |||
1040 | ret = af9015_write_reg(d, 0x98e8, 0); | ||
1041 | if (ret) | ||
1042 | goto error; | ||
1043 | |||
1044 | /* FIXME: Hack to pass checksum on the custom field for the | ||
1045 | remote controllers using NEC extended address. | ||
1046 | That must done since dvb_usb_nec_rc_key_to_event() | ||
1047 | does not support NEC extended address format. */ | ||
1048 | ircode[2] = ~ircode[1]; | ||
1049 | } else if (priv->rc_repeat != repeat) { | ||
1050 | deb_rc("%s: key repeated\n", __func__); | ||
1051 | ircode[0] = 2; /* DVB_USB_RC_NEC_KEY_REPEATED */ | ||
1052 | } else { | ||
1053 | deb_rc("%s: no key press\n", __func__); | ||
1054 | ircode[0] = 0; /* DVB_USB_RC_NEC_EMPTY */ | ||
1089 | } | 1055 | } |
1090 | if (!buf[1]) | ||
1091 | deb_rc("%s: %02x %02x %02x %02x %02x %02x %02x %02x\n", | ||
1092 | __func__, buf[0], buf[1], buf[2], buf[3], buf[4], | ||
1093 | buf[5], buf[6], buf[7]); | ||
1094 | 1056 | ||
1095 | return 0; | 1057 | priv->rc_repeat = repeat; |
1058 | |||
1059 | deb_rc("%s: ", __func__); | ||
1060 | debug_dump(ircode, sizeof(ircode), deb_rc); | ||
1061 | |||
1062 | dvb_usb_nec_rc_key_to_event(d, ircode, event, state); | ||
1063 | |||
1064 | error: | ||
1065 | if (ret) | ||
1066 | err("%s: failed:%d", __func__, ret); | ||
1067 | |||
1068 | return ret; | ||
1096 | } | 1069 | } |
1097 | 1070 | ||
1098 | /* init 2nd I2C adapter */ | 1071 | /* init 2nd I2C adapter */ |
@@ -1329,6 +1302,7 @@ static struct usb_device_id af9015_usb_table[] = { | |||
1329 | }; | 1302 | }; |
1330 | MODULE_DEVICE_TABLE(usb, af9015_usb_table); | 1303 | MODULE_DEVICE_TABLE(usb, af9015_usb_table); |
1331 | 1304 | ||
1305 | #define AF9015_RC_INTERVAL 500 | ||
1332 | static struct dvb_usb_device_properties af9015_properties[] = { | 1306 | static struct dvb_usb_device_properties af9015_properties[] = { |
1333 | { | 1307 | { |
1334 | .caps = DVB_USB_IS_AN_I2C_ADAPTER, | 1308 | .caps = DVB_USB_IS_AN_I2C_ADAPTER, |
@@ -1381,7 +1355,7 @@ static struct dvb_usb_device_properties af9015_properties[] = { | |||
1381 | 1355 | ||
1382 | .rc.legacy = { | 1356 | .rc.legacy = { |
1383 | .rc_query = af9015_rc_query, | 1357 | .rc_query = af9015_rc_query, |
1384 | .rc_interval = 150, | 1358 | .rc_interval = AF9015_RC_INTERVAL, |
1385 | }, | 1359 | }, |
1386 | 1360 | ||
1387 | .i2c_algo = &af9015_i2c_algo, | 1361 | .i2c_algo = &af9015_i2c_algo, |
@@ -1500,7 +1474,7 @@ static struct dvb_usb_device_properties af9015_properties[] = { | |||
1500 | 1474 | ||
1501 | .rc.legacy = { | 1475 | .rc.legacy = { |
1502 | .rc_query = af9015_rc_query, | 1476 | .rc_query = af9015_rc_query, |
1503 | .rc_interval = 150, | 1477 | .rc_interval = AF9015_RC_INTERVAL, |
1504 | }, | 1478 | }, |
1505 | 1479 | ||
1506 | .i2c_algo = &af9015_i2c_algo, | 1480 | .i2c_algo = &af9015_i2c_algo, |
@@ -1609,7 +1583,7 @@ static struct dvb_usb_device_properties af9015_properties[] = { | |||
1609 | 1583 | ||
1610 | .rc.legacy = { | 1584 | .rc.legacy = { |
1611 | .rc_query = af9015_rc_query, | 1585 | .rc_query = af9015_rc_query, |
1612 | .rc_interval = 150, | 1586 | .rc_interval = AF9015_RC_INTERVAL, |
1613 | }, | 1587 | }, |
1614 | 1588 | ||
1615 | .i2c_algo = &af9015_i2c_algo, | 1589 | .i2c_algo = &af9015_i2c_algo, |
diff --git a/drivers/media/dvb/dvb-usb/af9015.h b/drivers/media/dvb/dvb-usb/af9015.h index ab5de92d3f2e..948e50b47ae1 100644 --- a/drivers/media/dvb/dvb-usb/af9015.h +++ b/drivers/media/dvb/dvb-usb/af9015.h | |||
@@ -100,6 +100,7 @@ enum af9015_ir_mode { | |||
100 | 100 | ||
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 | }; | 104 | }; |
104 | 105 | ||
105 | struct af9015_config { | 106 | struct af9015_config { |
@@ -108,8 +109,6 @@ struct af9015_config { | |||
108 | u16 firmware_size; | 109 | u16 firmware_size; |
109 | u16 firmware_checksum; | 110 | u16 firmware_checksum; |
110 | u32 eeprom_sum; | 111 | u32 eeprom_sum; |
111 | u8 *ir_table; | ||
112 | u16 ir_table_size; | ||
113 | }; | 112 | }; |
114 | 113 | ||
115 | enum af9015_remote { | 114 | enum af9015_remote { |
@@ -123,796 +122,419 @@ enum af9015_remote { | |||
123 | 122 | ||
124 | /* LeadTek - Y04G0051 */ | 123 | /* LeadTek - Y04G0051 */ |
125 | /* Leadtek WinFast DTV Dongle Gold */ | 124 | /* Leadtek WinFast DTV Dongle Gold */ |
126 | static struct ir_scancode ir_codes_af9015_table_leadtek[] = { | 125 | static struct ir_scancode af9015_rc_leadtek[] = { |
127 | { 0x001e, KEY_1 }, | 126 | { 0x0300, KEY_POWER2 }, |
128 | { 0x001f, KEY_2 }, | 127 | { 0x0303, KEY_SCREEN }, |
129 | { 0x0020, KEY_3 }, | 128 | { 0x0304, KEY_RIGHT }, |
130 | { 0x0021, KEY_4 }, | 129 | { 0x0305, KEY_1 }, |
131 | { 0x0022, KEY_5 }, | 130 | { 0x0306, KEY_2 }, |
132 | { 0x0023, KEY_6 }, | 131 | { 0x0307, KEY_3 }, |
133 | { 0x0024, KEY_7 }, | 132 | { 0x0308, KEY_LEFT }, |
134 | { 0x0025, KEY_8 }, | 133 | { 0x0309, KEY_4 }, |
135 | { 0x0026, KEY_9 }, | 134 | { 0x030a, KEY_5 }, |
136 | { 0x0027, KEY_0 }, | 135 | { 0x030b, KEY_6 }, |
137 | { 0x0028, KEY_OK }, | 136 | { 0x030c, KEY_UP }, |
138 | { 0x004f, KEY_RIGHT }, | 137 | { 0x030d, KEY_7 }, |
139 | { 0x0050, KEY_LEFT }, | 138 | { 0x030e, KEY_8 }, |
140 | { 0x0051, KEY_DOWN }, | 139 | { 0x030f, KEY_9 }, |
141 | { 0x0052, KEY_UP }, | 140 | { 0x0310, KEY_DOWN }, |
142 | { 0x011a, KEY_POWER2 }, | 141 | { 0x0311, KEY_AGAIN }, |
143 | { 0x04b4, KEY_TV }, | 142 | { 0x0312, KEY_0 }, |
144 | { 0x04b3, KEY_RED }, | 143 | { 0x0313, KEY_OK }, /* 1st ok */ |
145 | { 0x04b2, KEY_GREEN }, | 144 | { 0x0314, KEY_MUTE }, |
146 | { 0x04b1, KEY_YELLOW }, | 145 | { 0x0316, KEY_OK }, /* 2nd ok */ |
147 | { 0x04b0, KEY_BLUE }, | 146 | { 0x031e, KEY_VIDEO }, /* 2nd video */ |
148 | { 0x003d, KEY_TEXT }, | 147 | { 0x031b, KEY_AUDIO }, |
149 | { 0x0113, KEY_SLEEP }, | 148 | { 0x031f, KEY_TEXT }, |
150 | { 0x0010, KEY_MUTE }, | 149 | { 0x0340, KEY_SLEEP }, |
151 | { 0x0105, KEY_ESC }, | 150 | { 0x0341, KEY_DOT }, |
152 | { 0x0009, KEY_SCREEN }, | 151 | { 0x0342, KEY_REWIND }, |
153 | { 0x010f, KEY_MENU }, | 152 | { 0x0343, KEY_PLAY }, |
154 | { 0x003f, KEY_CHANNEL }, | 153 | { 0x0344, KEY_FASTFORWARD }, |
155 | { 0x0013, KEY_REWIND }, | 154 | { 0x0345, KEY_TIME }, |
156 | { 0x0012, KEY_PLAY }, | 155 | { 0x0346, KEY_STOP }, /* 2nd stop */ |
157 | { 0x0011, KEY_FASTFORWARD }, | 156 | { 0x0347, KEY_RECORD }, |
158 | { 0x0005, KEY_PREVIOUS }, | 157 | { 0x0348, KEY_CAMERA }, |
159 | { 0x0029, KEY_STOP }, | 158 | { 0x0349, KEY_ESC }, |
160 | { 0x002b, KEY_NEXT }, | 159 | { 0x034a, KEY_NEW }, |
161 | { 0x0041, KEY_EPG }, | 160 | { 0x034b, KEY_RED }, |
162 | { 0x0019, KEY_VIDEO }, | 161 | { 0x034c, KEY_GREEN }, |
163 | { 0x0016, KEY_AUDIO }, | 162 | { 0x034d, KEY_YELLOW }, |
164 | { 0x0037, KEY_DOT }, | 163 | { 0x034e, KEY_BLUE }, |
165 | { 0x002a, KEY_AGAIN }, | 164 | { 0x034f, KEY_MENU }, |
166 | { 0x002c, KEY_CAMERA }, | 165 | { 0x0350, KEY_STOP }, /* 1st stop */ |
167 | { 0x003c, KEY_NEW }, | 166 | { 0x0351, KEY_CHANNEL }, |
168 | { 0x0115, KEY_RECORD }, | 167 | { 0x0352, KEY_VIDEO }, /* 1st video */ |
169 | { 0x010b, KEY_TIME }, | 168 | { 0x0353, KEY_EPG }, |
170 | { 0x0043, KEY_VOLUMEUP }, | 169 | { 0x0354, KEY_PREVIOUS }, |
171 | { 0x0042, KEY_VOLUMEDOWN }, | 170 | { 0x0355, KEY_NEXT }, |
172 | { 0x004b, KEY_CHANNELUP }, | 171 | { 0x0356, KEY_TV }, |
173 | { 0x004e, KEY_CHANNELDOWN }, | 172 | { 0x035a, KEY_VOLUMEDOWN }, |
174 | }; | 173 | { 0x035b, KEY_CHANNELUP }, |
175 | 174 | { 0x035e, KEY_VOLUMEUP }, | |
176 | static u8 af9015_ir_table_leadtek[] = { | 175 | { 0x035f, KEY_CHANNELDOWN }, |
177 | 0x03, 0xfc, 0x00, 0xff, 0x1a, 0x01, 0x00, /* KEY_POWER2 */ | ||
178 | 0x03, 0xfc, 0x56, 0xa9, 0xb4, 0x04, 0x00, /* KEY_TV */ | ||
179 | 0x03, 0xfc, 0x4b, 0xb4, 0xb3, 0x04, 0x00, /* KEY_RED */ | ||
180 | 0x03, 0xfc, 0x4c, 0xb3, 0xb2, 0x04, 0x00, /* KEY_GREEN */ | ||
181 | 0x03, 0xfc, 0x4d, 0xb2, 0xb1, 0x04, 0x00, /* KEY_YELLOW */ | ||
182 | 0x03, 0xfc, 0x4e, 0xb1, 0xb0, 0x04, 0x00, /* KEY_BLUE */ | ||
183 | 0x03, 0xfc, 0x1f, 0xe0, 0x3d, 0x00, 0x00, /* KEY_TEXT */ | ||
184 | 0x03, 0xfc, 0x40, 0xbf, 0x13, 0x01, 0x00, /* KEY_SLEEP */ | ||
185 | 0x03, 0xfc, 0x14, 0xeb, 0x10, 0x00, 0x00, /* KEY_MUTE */ | ||
186 | 0x03, 0xfc, 0x49, 0xb6, 0x05, 0x01, 0x00, /* KEY_ESC */ | ||
187 | 0x03, 0xfc, 0x50, 0xaf, 0x29, 0x00, 0x00, /* KEY_STOP (1)*/ | ||
188 | 0x03, 0xfc, 0x0c, 0xf3, 0x52, 0x00, 0x00, /* KEY_UP */ | ||
189 | 0x03, 0xfc, 0x03, 0xfc, 0x09, 0x00, 0x00, /* KEY_SCREEN */ | ||
190 | 0x03, 0xfc, 0x08, 0xf7, 0x50, 0x00, 0x00, /* KEY_LEFT */ | ||
191 | 0x03, 0xfc, 0x13, 0xec, 0x28, 0x00, 0x00, /* KEY_OK (1) */ | ||
192 | 0x03, 0xfc, 0x04, 0xfb, 0x4f, 0x00, 0x00, /* KEY_RIGHT */ | ||
193 | 0x03, 0xfc, 0x4f, 0xb0, 0x0f, 0x01, 0x00, /* KEY_MENU */ | ||
194 | 0x03, 0xfc, 0x10, 0xef, 0x51, 0x00, 0x00, /* KEY_DOWN */ | ||
195 | 0x03, 0xfc, 0x51, 0xae, 0x3f, 0x00, 0x00, /* KEY_CHANNEL */ | ||
196 | 0x03, 0xfc, 0x42, 0xbd, 0x13, 0x00, 0x00, /* KEY_REWIND */ | ||
197 | 0x03, 0xfc, 0x43, 0xbc, 0x12, 0x00, 0x00, /* KEY_PLAY */ | ||
198 | 0x03, 0xfc, 0x44, 0xbb, 0x11, 0x00, 0x00, /* KEY_FASTFORWARD */ | ||
199 | 0x03, 0xfc, 0x52, 0xad, 0x19, 0x00, 0x00, /* KEY_VIDEO (1) */ | ||
200 | 0x03, 0xfc, 0x54, 0xab, 0x05, 0x00, 0x00, /* KEY_PREVIOUS */ | ||
201 | 0x03, 0xfc, 0x46, 0xb9, 0x29, 0x00, 0x00, /* KEY_STOP (2) */ | ||
202 | 0x03, 0xfc, 0x55, 0xaa, 0x2b, 0x00, 0x00, /* KEY_NEXT */ | ||
203 | 0x03, 0xfc, 0x53, 0xac, 0x41, 0x00, 0x00, /* KEY_EPG */ | ||
204 | 0x03, 0xfc, 0x05, 0xfa, 0x1e, 0x00, 0x00, /* KEY_1 */ | ||
205 | 0x03, 0xfc, 0x06, 0xf9, 0x1f, 0x00, 0x00, /* KEY_2 */ | ||
206 | 0x03, 0xfc, 0x07, 0xf8, 0x20, 0x00, 0x00, /* KEY_3 */ | ||
207 | 0x03, 0xfc, 0x1e, 0xe1, 0x19, 0x00, 0x00, /* KEY_VIDEO (2) */ | ||
208 | 0x03, 0xfc, 0x09, 0xf6, 0x21, 0x00, 0x00, /* KEY_4 */ | ||
209 | 0x03, 0xfc, 0x0a, 0xf5, 0x22, 0x00, 0x00, /* KEY_5 */ | ||
210 | 0x03, 0xfc, 0x0b, 0xf4, 0x23, 0x00, 0x00, /* KEY_6 */ | ||
211 | 0x03, 0xfc, 0x1b, 0xe4, 0x16, 0x00, 0x00, /* KEY_AUDIO */ | ||
212 | 0x03, 0xfc, 0x0d, 0xf2, 0x24, 0x00, 0x00, /* KEY_7 */ | ||
213 | 0x03, 0xfc, 0x0e, 0xf1, 0x25, 0x00, 0x00, /* KEY_8 */ | ||
214 | 0x03, 0xfc, 0x0f, 0xf0, 0x26, 0x00, 0x00, /* KEY_9 */ | ||
215 | 0x03, 0xfc, 0x16, 0xe9, 0x28, 0x00, 0x00, /* KEY_OK (2) */ | ||
216 | 0x03, 0xfc, 0x41, 0xbe, 0x37, 0x00, 0x00, /* KEY_DOT */ | ||
217 | 0x03, 0xfc, 0x12, 0xed, 0x27, 0x00, 0x00, /* KEY_0 */ | ||
218 | 0x03, 0xfc, 0x11, 0xee, 0x2a, 0x00, 0x00, /* KEY_AGAIN */ | ||
219 | 0x03, 0xfc, 0x48, 0xb7, 0x2c, 0x00, 0x00, /* KEY_CAMERA */ | ||
220 | 0x03, 0xfc, 0x4a, 0xb5, 0x3c, 0x00, 0x00, /* KEY_NEW */ | ||
221 | 0x03, 0xfc, 0x47, 0xb8, 0x15, 0x01, 0x00, /* KEY_RECORD */ | ||
222 | 0x03, 0xfc, 0x45, 0xba, 0x0b, 0x01, 0x00, /* KEY_TIME */ | ||
223 | 0x03, 0xfc, 0x5e, 0xa1, 0x43, 0x00, 0x00, /* KEY_VOLUMEUP */ | ||
224 | 0x03, 0xfc, 0x5a, 0xa5, 0x42, 0x00, 0x00, /* KEY_VOLUMEDOWN */ | ||
225 | 0x03, 0xfc, 0x5b, 0xa4, 0x4b, 0x00, 0x00, /* KEY_CHANNELUP */ | ||
226 | 0x03, 0xfc, 0x5f, 0xa0, 0x4e, 0x00, 0x00, /* KEY_CHANNELDOWN */ | ||
227 | }; | 176 | }; |
228 | 177 | ||
229 | /* TwinHan AzureWave AD-TU700(704J) */ | 178 | /* TwinHan AzureWave AD-TU700(704J) */ |
230 | static struct ir_scancode ir_codes_af9015_table_twinhan[] = { | 179 | static struct ir_scancode af9015_rc_twinhan[] = { |
231 | { 0x053f, KEY_POWER }, | 180 | { 0x0000, KEY_TAB }, /* Tab */ |
232 | { 0x0019, KEY_FAVORITES }, /* Favorite List */ | 181 | { 0x0001, KEY_2 }, |
233 | { 0x0004, KEY_TEXT }, /* Teletext */ | 182 | { 0x0002, KEY_CHANNELDOWN }, |
234 | { 0x000e, KEY_POWER }, | 183 | { 0x0003, KEY_1 }, |
235 | { 0x000e, KEY_INFO }, /* Preview */ | 184 | { 0x0004, KEY_LIST }, /* Record List */ |
236 | { 0x0008, KEY_EPG }, /* Info/EPG */ | 185 | { 0x0005, KEY_CHANNELUP }, |
237 | { 0x000f, KEY_LIST }, /* Record List */ | 186 | { 0x0006, KEY_3 }, |
238 | { 0x001e, KEY_1 }, | 187 | { 0x0007, KEY_SLEEP }, /* Hibernate */ |
239 | { 0x001f, KEY_2 }, | 188 | { 0x0008, KEY_SWITCHVIDEOMODE }, /* A/V */ |
240 | { 0x0020, KEY_3 }, | 189 | { 0x0009, KEY_4 }, |
241 | { 0x0021, KEY_4 }, | 190 | { 0x000a, KEY_VOLUMEDOWN }, |
242 | { 0x0022, KEY_5 }, | 191 | { 0x000c, KEY_CANCEL }, /* Cancel */ |
243 | { 0x0023, KEY_6 }, | 192 | { 0x000d, KEY_7 }, |
244 | { 0x0024, KEY_7 }, | 193 | { 0x000e, KEY_AGAIN }, /* Recall */ |
245 | { 0x0025, KEY_8 }, | 194 | { 0x000f, KEY_TEXT }, /* Teletext */ |
246 | { 0x0026, KEY_9 }, | ||
247 | { 0x0027, KEY_0 }, | ||
248 | { 0x0029, KEY_CANCEL }, /* Cancel */ | ||
249 | { 0x004c, KEY_CLEAR }, /* Clear */ | ||
250 | { 0x002a, KEY_BACK }, /* Back */ | ||
251 | { 0x002b, KEY_TAB }, /* Tab */ | ||
252 | { 0x0052, KEY_UP }, /* up arrow */ | ||
253 | { 0x0051, KEY_DOWN }, /* down arrow */ | ||
254 | { 0x004f, KEY_RIGHT }, /* right arrow */ | ||
255 | { 0x0050, KEY_LEFT }, /* left arrow */ | ||
256 | { 0x0028, KEY_ENTER }, /* Enter / ok */ | ||
257 | { 0x0252, KEY_VOLUMEUP }, | ||
258 | { 0x0251, KEY_VOLUMEDOWN }, | ||
259 | { 0x004e, KEY_CHANNELDOWN }, | ||
260 | { 0x004b, KEY_CHANNELUP }, | ||
261 | { 0x004a, KEY_RECORD }, | ||
262 | { 0x0111, KEY_PLAY }, | ||
263 | { 0x0017, KEY_PAUSE }, | ||
264 | { 0x000c, KEY_REWIND }, /* FR << */ | ||
265 | { 0x0011, KEY_FASTFORWARD }, /* FF >> */ | ||
266 | { 0x0115, KEY_PREVIOUS }, /* Replay */ | ||
267 | { 0x010e, KEY_NEXT }, /* Skip */ | ||
268 | { 0x0013, KEY_CAMERA }, /* Capture */ | ||
269 | { 0x010f, KEY_LANGUAGE }, /* SAP */ | ||
270 | { 0x0113, KEY_TV2 }, /* PIP */ | ||
271 | { 0x001d, KEY_ZOOM }, /* Full Screen */ | ||
272 | { 0x0117, KEY_SUBTITLE }, /* Subtitle / CC */ | ||
273 | { 0x0010, KEY_MUTE }, | 195 | { 0x0010, KEY_MUTE }, |
274 | { 0x0119, KEY_AUDIO }, /* L/R */ /* TODO better event */ | 196 | { 0x0011, KEY_RECORD }, |
275 | { 0x0116, KEY_SLEEP }, /* Hibernate */ | 197 | { 0x0012, KEY_FASTFORWARD }, /* FF >> */ |
276 | { 0x0116, KEY_SWITCHVIDEOMODE }, | 198 | { 0x0013, KEY_BACK }, /* Back */ |
277 | /* A/V */ /* TODO does not work */ | 199 | { 0x0014, KEY_PLAY }, |
278 | { 0x0006, KEY_AGAIN }, /* Recall */ | 200 | { 0x0015, KEY_0 }, |
279 | { 0x0116, KEY_KPPLUS }, /* Zoom+ */ /* TODO does not work */ | 201 | { 0x0016, KEY_POWER }, |
280 | { 0x0116, KEY_KPMINUS }, /* Zoom- */ /* TODO does not work */ | 202 | { 0x0017, KEY_FAVORITES }, /* Favorite List */ |
281 | { 0x0215, KEY_RED }, | 203 | { 0x0018, KEY_RED }, |
282 | { 0x020a, KEY_GREEN }, | 204 | { 0x0019, KEY_8 }, |
283 | { 0x021c, KEY_YELLOW }, | 205 | { 0x001a, KEY_STOP }, |
284 | { 0x0205, KEY_BLUE }, | 206 | { 0x001b, KEY_9 }, |
285 | }; | 207 | { 0x001c, KEY_EPG }, /* Info/EPG */ |
286 | 208 | { 0x001d, KEY_5 }, | |
287 | static u8 af9015_ir_table_twinhan[] = { | 209 | { 0x001e, KEY_VOLUMEUP }, |
288 | 0x00, 0xff, 0x16, 0xe9, 0x3f, 0x05, 0x00, | 210 | { 0x001f, KEY_6 }, |
289 | 0x00, 0xff, 0x07, 0xf8, 0x16, 0x01, 0x00, | 211 | { 0x0040, KEY_REWIND }, /* FR << */ |
290 | 0x00, 0xff, 0x14, 0xeb, 0x11, 0x01, 0x00, | 212 | { 0x0041, KEY_PREVIOUS }, /* Replay */ |
291 | 0x00, 0xff, 0x1a, 0xe5, 0x4d, 0x00, 0x00, | 213 | { 0x0042, KEY_NEXT }, /* Skip */ |
292 | 0x00, 0xff, 0x4c, 0xb3, 0x17, 0x00, 0x00, | 214 | { 0x0043, KEY_SUBTITLE }, /* Subtitle / CC */ |
293 | 0x00, 0xff, 0x12, 0xed, 0x11, 0x00, 0x00, | 215 | { 0x0045, KEY_KPPLUS }, /* Zoom+ */ |
294 | 0x00, 0xff, 0x40, 0xbf, 0x0c, 0x00, 0x00, | 216 | { 0x0046, KEY_KPMINUS }, /* Zoom- */ |
295 | 0x00, 0xff, 0x11, 0xee, 0x4a, 0x00, 0x00, | 217 | { 0x0047, KEY_TV2 }, /* PIP */ |
296 | 0x00, 0xff, 0x54, 0xab, 0x13, 0x00, 0x00, | 218 | { 0x0048, KEY_INFO }, /* Preview */ |
297 | 0x00, 0xff, 0x41, 0xbe, 0x15, 0x01, 0x00, | 219 | { 0x0049, KEY_AUDIO }, /* L/R */ /* TODO better event */ |
298 | 0x00, 0xff, 0x42, 0xbd, 0x0e, 0x01, 0x00, | 220 | { 0x004a, KEY_CLEAR }, /* Clear */ |
299 | 0x00, 0xff, 0x43, 0xbc, 0x17, 0x01, 0x00, | 221 | { 0x004b, KEY_UP }, /* up arrow */ |
300 | 0x00, 0xff, 0x50, 0xaf, 0x0f, 0x01, 0x00, | 222 | { 0x004c, KEY_PAUSE }, |
301 | 0x00, 0xff, 0x4d, 0xb2, 0x1d, 0x00, 0x00, | 223 | { 0x004d, KEY_ZOOM }, /* Full Screen */ |
302 | 0x00, 0xff, 0x47, 0xb8, 0x13, 0x01, 0x00, | 224 | { 0x004e, KEY_LEFT }, /* left arrow */ |
303 | 0x00, 0xff, 0x05, 0xfa, 0x4b, 0x00, 0x00, | 225 | { 0x004f, KEY_ENTER }, /* Enter / ok */ |
304 | 0x00, 0xff, 0x02, 0xfd, 0x4e, 0x00, 0x00, | 226 | { 0x0050, KEY_LANGUAGE }, /* SAP */ |
305 | 0x00, 0xff, 0x0e, 0xf1, 0x06, 0x00, 0x00, | 227 | { 0x0051, KEY_DOWN }, /* down arrow */ |
306 | 0x00, 0xff, 0x1e, 0xe1, 0x52, 0x02, 0x00, | 228 | { 0x0052, KEY_RIGHT }, /* right arrow */ |
307 | 0x00, 0xff, 0x0a, 0xf5, 0x51, 0x02, 0x00, | 229 | { 0x0053, KEY_GREEN }, |
308 | 0x00, 0xff, 0x10, 0xef, 0x10, 0x00, 0x00, | 230 | { 0x0054, KEY_CAMERA }, /* Capture */ |
309 | 0x00, 0xff, 0x49, 0xb6, 0x19, 0x01, 0x00, | 231 | { 0x005e, KEY_YELLOW }, |
310 | 0x00, 0xff, 0x15, 0xea, 0x27, 0x00, 0x00, | 232 | { 0x005f, KEY_BLUE }, |
311 | 0x00, 0xff, 0x03, 0xfc, 0x1e, 0x00, 0x00, | ||
312 | 0x00, 0xff, 0x01, 0xfe, 0x1f, 0x00, 0x00, | ||
313 | 0x00, 0xff, 0x06, 0xf9, 0x20, 0x00, 0x00, | ||
314 | 0x00, 0xff, 0x09, 0xf6, 0x21, 0x00, 0x00, | ||
315 | 0x00, 0xff, 0x1d, 0xe2, 0x22, 0x00, 0x00, | ||
316 | 0x00, 0xff, 0x1f, 0xe0, 0x23, 0x00, 0x00, | ||
317 | 0x00, 0xff, 0x0d, 0xf2, 0x24, 0x00, 0x00, | ||
318 | 0x00, 0xff, 0x19, 0xe6, 0x25, 0x00, 0x00, | ||
319 | 0x00, 0xff, 0x1b, 0xe4, 0x26, 0x00, 0x00, | ||
320 | 0x00, 0xff, 0x00, 0xff, 0x2b, 0x00, 0x00, | ||
321 | 0x00, 0xff, 0x4a, 0xb5, 0x4c, 0x00, 0x00, | ||
322 | 0x00, 0xff, 0x4b, 0xb4, 0x52, 0x00, 0x00, | ||
323 | 0x00, 0xff, 0x51, 0xae, 0x51, 0x00, 0x00, | ||
324 | 0x00, 0xff, 0x52, 0xad, 0x4f, 0x00, 0x00, | ||
325 | 0x00, 0xff, 0x4e, 0xb1, 0x50, 0x00, 0x00, | ||
326 | 0x00, 0xff, 0x0c, 0xf3, 0x29, 0x00, 0x00, | ||
327 | 0x00, 0xff, 0x4f, 0xb0, 0x28, 0x00, 0x00, | ||
328 | 0x00, 0xff, 0x13, 0xec, 0x2a, 0x00, 0x00, | ||
329 | 0x00, 0xff, 0x17, 0xe8, 0x19, 0x00, 0x00, | ||
330 | 0x00, 0xff, 0x04, 0xfb, 0x0f, 0x00, 0x00, | ||
331 | 0x00, 0xff, 0x48, 0xb7, 0x0e, 0x00, 0x00, | ||
332 | 0x00, 0xff, 0x0f, 0xf0, 0x04, 0x00, 0x00, | ||
333 | 0x00, 0xff, 0x1c, 0xe3, 0x08, 0x00, 0x00, | ||
334 | 0x00, 0xff, 0x18, 0xe7, 0x15, 0x02, 0x00, | ||
335 | 0x00, 0xff, 0x53, 0xac, 0x0a, 0x02, 0x00, | ||
336 | 0x00, 0xff, 0x5e, 0xa1, 0x1c, 0x02, 0x00, | ||
337 | 0x00, 0xff, 0x5f, 0xa0, 0x05, 0x02, 0x00, | ||
338 | }; | ||
339 | |||
340 | /* A-Link DTU(m) */ | ||
341 | static struct ir_scancode ir_codes_af9015_table_a_link[] = { | ||
342 | { 0x001e, KEY_1 }, | ||
343 | { 0x001f, KEY_2 }, | ||
344 | { 0x0020, KEY_3 }, | ||
345 | { 0x0021, KEY_4 }, | ||
346 | { 0x0022, KEY_5 }, | ||
347 | { 0x0023, KEY_6 }, | ||
348 | { 0x0024, KEY_7 }, | ||
349 | { 0x0025, KEY_8 }, | ||
350 | { 0x0026, KEY_9 }, | ||
351 | { 0x0027, KEY_0 }, | ||
352 | { 0x002e, KEY_CHANNELUP }, | ||
353 | { 0x002d, KEY_CHANNELDOWN }, | ||
354 | { 0x0428, KEY_ZOOM }, | ||
355 | { 0x0041, KEY_MUTE }, | ||
356 | { 0x0042, KEY_VOLUMEDOWN }, | ||
357 | { 0x0043, KEY_VOLUMEUP }, | ||
358 | { 0x0044, KEY_GOTO }, /* jump */ | ||
359 | { 0x0545, KEY_POWER }, | ||
360 | }; | 233 | }; |
361 | 234 | ||
362 | static u8 af9015_ir_table_a_link[] = { | 235 | /* A-Link DTU(m) - 3x6 slim remote */ |
363 | 0x08, 0xf7, 0x12, 0xed, 0x45, 0x05, 0x00, /* power */ | 236 | static struct ir_scancode af9015_rc_a_link[] = { |
364 | 0x08, 0xf7, 0x1a, 0xe5, 0x41, 0x00, 0x00, /* mute */ | 237 | { 0x0800, KEY_VOLUMEUP }, |
365 | 0x08, 0xf7, 0x01, 0xfe, 0x1e, 0x00, 0x00, /* 1 */ | 238 | { 0x0801, KEY_1 }, |
366 | 0x08, 0xf7, 0x1c, 0xe3, 0x21, 0x00, 0x00, /* 4 */ | 239 | { 0x0802, KEY_3 }, |
367 | 0x08, 0xf7, 0x03, 0xfc, 0x24, 0x00, 0x00, /* 7 */ | 240 | { 0x0803, KEY_7 }, |
368 | 0x08, 0xf7, 0x05, 0xfa, 0x28, 0x04, 0x00, /* zoom */ | 241 | { 0x0804, KEY_9 }, |
369 | 0x08, 0xf7, 0x00, 0xff, 0x43, 0x00, 0x00, /* volume up */ | 242 | { 0x0805, KEY_ZOOM }, |
370 | 0x08, 0xf7, 0x16, 0xe9, 0x42, 0x00, 0x00, /* volume down */ | 243 | { 0x0806, KEY_0 }, |
371 | 0x08, 0xf7, 0x0f, 0xf0, 0x1f, 0x00, 0x00, /* 2 */ | 244 | { 0x0807, KEY_GOTO }, /* jump */ |
372 | 0x08, 0xf7, 0x0d, 0xf2, 0x22, 0x00, 0x00, /* 5 */ | 245 | { 0x080d, KEY_5 }, |
373 | 0x08, 0xf7, 0x1b, 0xe4, 0x25, 0x00, 0x00, /* 8 */ | 246 | { 0x080f, KEY_2 }, |
374 | 0x08, 0xf7, 0x06, 0xf9, 0x27, 0x00, 0x00, /* 0 */ | 247 | { 0x0812, KEY_POWER }, |
375 | 0x08, 0xf7, 0x14, 0xeb, 0x2e, 0x00, 0x00, /* channel up */ | 248 | { 0x0814, KEY_CHANNELUP }, |
376 | 0x08, 0xf7, 0x1d, 0xe2, 0x2d, 0x00, 0x00, /* channel down */ | 249 | { 0x0816, KEY_VOLUMEDOWN }, |
377 | 0x08, 0xf7, 0x02, 0xfd, 0x20, 0x00, 0x00, /* 3 */ | 250 | { 0x0818, KEY_6 }, |
378 | 0x08, 0xf7, 0x18, 0xe7, 0x23, 0x00, 0x00, /* 6 */ | 251 | { 0x081a, KEY_MUTE }, |
379 | 0x08, 0xf7, 0x04, 0xfb, 0x26, 0x00, 0x00, /* 9 */ | 252 | { 0x081b, KEY_8 }, |
380 | 0x08, 0xf7, 0x07, 0xf8, 0x44, 0x00, 0x00, /* jump */ | 253 | { 0x081c, KEY_4 }, |
254 | { 0x081d, KEY_CHANNELDOWN }, | ||
381 | }; | 255 | }; |
382 | 256 | ||
383 | /* MSI DIGIVOX mini II V3.0 */ | 257 | /* MSI DIGIVOX mini II V3.0 */ |
384 | static struct ir_scancode ir_codes_af9015_table_msi[] = { | 258 | static struct ir_scancode af9015_rc_msi[] = { |
385 | { 0x001e, KEY_1 }, | 259 | { 0x0002, KEY_2 }, |
386 | { 0x001f, KEY_2 }, | 260 | { 0x0003, KEY_UP }, /* up */ |
387 | { 0x0020, KEY_3 }, | 261 | { 0x0004, KEY_3 }, |
388 | { 0x0021, KEY_4 }, | 262 | { 0x0005, KEY_CHANNELDOWN }, |
389 | { 0x0022, KEY_5 }, | 263 | { 0x0008, KEY_5 }, |
390 | { 0x0023, KEY_6 }, | 264 | { 0x0009, KEY_0 }, |
391 | { 0x0024, KEY_7 }, | 265 | { 0x000b, KEY_8 }, |
392 | { 0x0025, KEY_8 }, | 266 | { 0x000d, KEY_DOWN }, /* down */ |
393 | { 0x0026, KEY_9 }, | 267 | { 0x0010, KEY_9 }, |
394 | { 0x0027, KEY_0 }, | 268 | { 0x0011, KEY_7 }, |
395 | { 0x030f, KEY_CHANNELUP }, | 269 | { 0x0014, KEY_VOLUMEUP }, |
396 | { 0x030e, KEY_CHANNELDOWN }, | 270 | { 0x0015, KEY_CHANNELUP }, |
397 | { 0x0042, KEY_VOLUMEDOWN }, | 271 | { 0x0016, KEY_ENTER }, |
398 | { 0x0043, KEY_VOLUMEUP }, | 272 | { 0x0017, KEY_POWER }, |
399 | { 0x0545, KEY_POWER }, | 273 | { 0x001a, KEY_1 }, |
400 | { 0x0052, KEY_UP }, /* up */ | 274 | { 0x001c, KEY_4 }, |
401 | { 0x0051, KEY_DOWN }, /* down */ | 275 | { 0x001d, KEY_6 }, |
402 | { 0x0028, KEY_ENTER }, | 276 | { 0x001f, KEY_VOLUMEDOWN }, |
403 | }; | ||
404 | |||
405 | static u8 af9015_ir_table_msi[] = { | ||
406 | 0x03, 0xfc, 0x17, 0xe8, 0x45, 0x05, 0x00, /* power */ | ||
407 | 0x03, 0xfc, 0x0d, 0xf2, 0x51, 0x00, 0x00, /* down */ | ||
408 | 0x03, 0xfc, 0x03, 0xfc, 0x52, 0x00, 0x00, /* up */ | ||
409 | 0x03, 0xfc, 0x1a, 0xe5, 0x1e, 0x00, 0x00, /* 1 */ | ||
410 | 0x03, 0xfc, 0x02, 0xfd, 0x1f, 0x00, 0x00, /* 2 */ | ||
411 | 0x03, 0xfc, 0x04, 0xfb, 0x20, 0x00, 0x00, /* 3 */ | ||
412 | 0x03, 0xfc, 0x1c, 0xe3, 0x21, 0x00, 0x00, /* 4 */ | ||
413 | 0x03, 0xfc, 0x08, 0xf7, 0x22, 0x00, 0x00, /* 5 */ | ||
414 | 0x03, 0xfc, 0x1d, 0xe2, 0x23, 0x00, 0x00, /* 6 */ | ||
415 | 0x03, 0xfc, 0x11, 0xee, 0x24, 0x00, 0x00, /* 7 */ | ||
416 | 0x03, 0xfc, 0x0b, 0xf4, 0x25, 0x00, 0x00, /* 8 */ | ||
417 | 0x03, 0xfc, 0x10, 0xef, 0x26, 0x00, 0x00, /* 9 */ | ||
418 | 0x03, 0xfc, 0x09, 0xf6, 0x27, 0x00, 0x00, /* 0 */ | ||
419 | 0x03, 0xfc, 0x14, 0xeb, 0x43, 0x00, 0x00, /* volume up */ | ||
420 | 0x03, 0xfc, 0x1f, 0xe0, 0x42, 0x00, 0x00, /* volume down */ | ||
421 | 0x03, 0xfc, 0x15, 0xea, 0x0f, 0x03, 0x00, /* channel up */ | ||
422 | 0x03, 0xfc, 0x05, 0xfa, 0x0e, 0x03, 0x00, /* channel down */ | ||
423 | 0x03, 0xfc, 0x16, 0xe9, 0x28, 0x00, 0x00, /* enter */ | ||
424 | }; | 277 | }; |
425 | 278 | ||
426 | /* MYGICTV U718 */ | 279 | /* MYGICTV U718 */ |
427 | static struct ir_scancode ir_codes_af9015_table_mygictv[] = { | 280 | /* Uses NEC extended 0x02bd. Extended byte removed for compatibility... */ |
428 | { 0x003d, KEY_SWITCHVIDEOMODE }, | 281 | static struct ir_scancode af9015_rc_mygictv[] = { |
429 | /* TV / AV */ | 282 | { 0x0200, KEY_1 }, |
430 | { 0x0545, KEY_POWER }, | 283 | { 0x0201, KEY_2 }, |
431 | { 0x001e, KEY_1 }, | 284 | { 0x0202, KEY_3 }, |
432 | { 0x001f, KEY_2 }, | 285 | { 0x0203, KEY_4 }, |
433 | { 0x0020, KEY_3 }, | 286 | { 0x0204, KEY_5 }, |
434 | { 0x0021, KEY_4 }, | 287 | { 0x0205, KEY_6 }, |
435 | { 0x0022, KEY_5 }, | 288 | { 0x0206, KEY_7 }, |
436 | { 0x0023, KEY_6 }, | 289 | { 0x0207, KEY_8 }, |
437 | { 0x0024, KEY_7 }, | 290 | { 0x0208, KEY_9 }, |
438 | { 0x0025, KEY_8 }, | 291 | { 0x0209, KEY_0 }, |
439 | { 0x0026, KEY_9 }, | 292 | { 0x020a, KEY_MUTE }, |
440 | { 0x0027, KEY_0 }, | 293 | { 0x020b, KEY_CYCLEWINDOWS }, /* yellow, min / max */ |
441 | { 0x0041, KEY_MUTE }, | 294 | { 0x020c, KEY_SWITCHVIDEOMODE }, /* TV / AV */ |
442 | { 0x002a, KEY_ESC }, /* Esc */ | 295 | { 0x020e, KEY_VOLUMEDOWN }, |
443 | { 0x002e, KEY_CHANNELUP }, | 296 | { 0x020f, KEY_TIME }, /* TimeShift */ |
444 | { 0x002d, KEY_CHANNELDOWN }, | 297 | { 0x0210, KEY_RIGHT }, /* right arrow */ |
445 | { 0x0042, KEY_VOLUMEDOWN }, | 298 | { 0x0211, KEY_LEFT }, /* left arrow */ |
446 | { 0x0043, KEY_VOLUMEUP }, | 299 | { 0x0212, KEY_UP }, /* up arrow */ |
447 | { 0x0052, KEY_UP }, /* up arrow */ | 300 | { 0x0213, KEY_DOWN }, /* down arrow */ |
448 | { 0x0051, KEY_DOWN }, /* down arrow */ | 301 | { 0x0214, KEY_POWER }, |
449 | { 0x004f, KEY_RIGHT }, /* right arrow */ | 302 | { 0x0215, KEY_ENTER }, /* ok */ |
450 | { 0x0050, KEY_LEFT }, /* left arrow */ | 303 | { 0x0216, KEY_STOP }, |
451 | { 0x0028, KEY_ENTER }, /* ok */ | 304 | { 0x0217, KEY_CAMERA }, /* Snapshot */ |
452 | { 0x0115, KEY_RECORD }, | 305 | { 0x0218, KEY_CHANNELUP }, |
453 | { 0x0313, KEY_PLAY }, | 306 | { 0x0219, KEY_RECORD }, |
454 | { 0x0113, KEY_PAUSE }, | 307 | { 0x021a, KEY_CHANNELDOWN }, |
455 | { 0x0116, KEY_STOP }, | 308 | { 0x021c, KEY_ESC }, /* Esc */ |
456 | { 0x0307, KEY_REWIND }, /* FR << */ | 309 | { 0x021e, KEY_PLAY }, |
457 | { 0x0309, KEY_FASTFORWARD }, /* FF >> */ | 310 | { 0x021f, KEY_VOLUMEUP }, |
458 | { 0x003b, KEY_TIME }, /* TimeShift */ | 311 | { 0x0240, KEY_PAUSE }, |
459 | { 0x003e, KEY_CAMERA }, /* Snapshot */ | 312 | { 0x0241, KEY_FASTFORWARD }, /* FF >> */ |
460 | { 0x0316, KEY_CYCLEWINDOWS }, /* yellow, min / max */ | 313 | { 0x0242, KEY_REWIND }, /* FR << */ |
461 | { 0x0000, KEY_ZOOM }, /* 'select' (?) */ | 314 | { 0x0243, KEY_ZOOM }, /* 'select' (?) */ |
462 | { 0x0316, KEY_SHUFFLE }, /* Shuffle */ | 315 | { 0x0244, KEY_SHUFFLE }, /* Shuffle */ |
463 | { 0x0345, KEY_POWER }, | 316 | { 0x0245, KEY_POWER }, |
464 | }; | ||
465 | |||
466 | static u8 af9015_ir_table_mygictv[] = { | ||
467 | 0x02, 0xbd, 0x0c, 0xf3, 0x3d, 0x00, 0x00, /* TV / AV */ | ||
468 | 0x02, 0xbd, 0x14, 0xeb, 0x45, 0x05, 0x00, /* power */ | ||
469 | 0x02, 0xbd, 0x00, 0xff, 0x1e, 0x00, 0x00, /* 1 */ | ||
470 | 0x02, 0xbd, 0x01, 0xfe, 0x1f, 0x00, 0x00, /* 2 */ | ||
471 | 0x02, 0xbd, 0x02, 0xfd, 0x20, 0x00, 0x00, /* 3 */ | ||
472 | 0x02, 0xbd, 0x03, 0xfc, 0x21, 0x00, 0x00, /* 4 */ | ||
473 | 0x02, 0xbd, 0x04, 0xfb, 0x22, 0x00, 0x00, /* 5 */ | ||
474 | 0x02, 0xbd, 0x05, 0xfa, 0x23, 0x00, 0x00, /* 6 */ | ||
475 | 0x02, 0xbd, 0x06, 0xf9, 0x24, 0x00, 0x00, /* 7 */ | ||
476 | 0x02, 0xbd, 0x07, 0xf8, 0x25, 0x00, 0x00, /* 8 */ | ||
477 | 0x02, 0xbd, 0x08, 0xf7, 0x26, 0x00, 0x00, /* 9 */ | ||
478 | 0x02, 0xbd, 0x09, 0xf6, 0x27, 0x00, 0x00, /* 0 */ | ||
479 | 0x02, 0xbd, 0x0a, 0xf5, 0x41, 0x00, 0x00, /* mute */ | ||
480 | 0x02, 0xbd, 0x1c, 0xe3, 0x2a, 0x00, 0x00, /* esc */ | ||
481 | 0x02, 0xbd, 0x1f, 0xe0, 0x43, 0x00, 0x00, /* volume up */ | ||
482 | 0x02, 0xbd, 0x12, 0xed, 0x52, 0x00, 0x00, /* up arrow */ | ||
483 | 0x02, 0xbd, 0x11, 0xee, 0x50, 0x00, 0x00, /* left arrow */ | ||
484 | 0x02, 0xbd, 0x15, 0xea, 0x28, 0x00, 0x00, /* ok */ | ||
485 | 0x02, 0xbd, 0x10, 0xef, 0x4f, 0x00, 0x00, /* right arrow */ | ||
486 | 0x02, 0xbd, 0x13, 0xec, 0x51, 0x00, 0x00, /* down arrow */ | ||
487 | 0x02, 0xbd, 0x0e, 0xf1, 0x42, 0x00, 0x00, /* volume down */ | ||
488 | 0x02, 0xbd, 0x19, 0xe6, 0x15, 0x01, 0x00, /* record */ | ||
489 | 0x02, 0xbd, 0x1e, 0xe1, 0x13, 0x03, 0x00, /* play */ | ||
490 | 0x02, 0xbd, 0x16, 0xe9, 0x16, 0x01, 0x00, /* stop */ | ||
491 | 0x02, 0xbd, 0x0b, 0xf4, 0x28, 0x04, 0x00, /* yellow, min / max */ | ||
492 | 0x02, 0xbd, 0x0f, 0xf0, 0x3b, 0x00, 0x00, /* time shift */ | ||
493 | 0x02, 0xbd, 0x18, 0xe7, 0x2e, 0x00, 0x00, /* channel up */ | ||
494 | 0x02, 0xbd, 0x1a, 0xe5, 0x2d, 0x00, 0x00, /* channel down */ | ||
495 | 0x02, 0xbd, 0x17, 0xe8, 0x3e, 0x00, 0x00, /* snapshot */ | ||
496 | 0x02, 0xbd, 0x40, 0xbf, 0x13, 0x01, 0x00, /* pause */ | ||
497 | 0x02, 0xbd, 0x41, 0xbe, 0x09, 0x03, 0x00, /* FF >> */ | ||
498 | 0x02, 0xbd, 0x42, 0xbd, 0x07, 0x03, 0x00, /* FR << */ | ||
499 | 0x02, 0xbd, 0x43, 0xbc, 0x00, 0x00, 0x00, /* 'select' (?) */ | ||
500 | 0x02, 0xbd, 0x44, 0xbb, 0x16, 0x03, 0x00, /* shuffle */ | ||
501 | 0x02, 0xbd, 0x45, 0xba, 0x45, 0x03, 0x00, /* power */ | ||
502 | }; | 317 | }; |
503 | 318 | ||
504 | /* KWorld PlusTV Dual DVB-T Stick (DVB-T 399U) */ | 319 | /* KWorld PlusTV Dual DVB-T Stick (DVB-T 399U) */ |
505 | static u8 af9015_ir_table_kworld[] = { | 320 | /* FIXME: This mapping is totally incomplete and probably even wrong... */ |
506 | 0x86, 0x6b, 0x0c, 0xf3, 0x2e, 0x07, 0x00, | 321 | /* Uses NEC extended 0x866b. Extended byte removed for compatibility... */ |
507 | 0x86, 0x6b, 0x16, 0xe9, 0x2d, 0x07, 0x00, | 322 | static struct ir_scancode af9015_rc_kworld[] = { |
508 | 0x86, 0x6b, 0x1d, 0xe2, 0x37, 0x07, 0x00, | 323 | { 0x8600, KEY_1 }, |
509 | 0x86, 0x6b, 0x00, 0xff, 0x1e, 0x07, 0x00, | 324 | { 0x8601, KEY_2 }, |
510 | 0x86, 0x6b, 0x01, 0xfe, 0x1f, 0x07, 0x00, | 325 | { 0x8602, KEY_3 }, |
511 | 0x86, 0x6b, 0x02, 0xfd, 0x20, 0x07, 0x00, | 326 | { 0x8603, KEY_4 }, |
512 | 0x86, 0x6b, 0x03, 0xfc, 0x21, 0x07, 0x00, | 327 | { 0x8604, KEY_5 }, |
513 | 0x86, 0x6b, 0x04, 0xfb, 0x22, 0x07, 0x00, | 328 | { 0x8605, KEY_6 }, |
514 | 0x86, 0x6b, 0x05, 0xfa, 0x23, 0x07, 0x00, | 329 | { 0x8606, KEY_7 }, |
515 | 0x86, 0x6b, 0x06, 0xf9, 0x24, 0x07, 0x00, | 330 | { 0x8607, KEY_8 }, |
516 | 0x86, 0x6b, 0x07, 0xf8, 0x25, 0x07, 0x00, | 331 | { 0x8608, KEY_9 }, |
517 | 0x86, 0x6b, 0x08, 0xf7, 0x26, 0x07, 0x00, | 332 | { 0x860a, KEY_0 }, |
518 | 0x86, 0x6b, 0x09, 0xf6, 0x4d, 0x07, 0x00, | ||
519 | 0x86, 0x6b, 0x0a, 0xf5, 0x4e, 0x07, 0x00, | ||
520 | 0x86, 0x6b, 0x14, 0xeb, 0x4f, 0x07, 0x00, | ||
521 | 0x86, 0x6b, 0x1e, 0xe1, 0x50, 0x07, 0x00, | ||
522 | 0x86, 0x6b, 0x17, 0xe8, 0x52, 0x07, 0x00, | ||
523 | 0x86, 0x6b, 0x1f, 0xe0, 0x51, 0x07, 0x00, | ||
524 | 0x86, 0x6b, 0x0e, 0xf1, 0x0b, 0x07, 0x00, | ||
525 | 0x86, 0x6b, 0x20, 0xdf, 0x0c, 0x07, 0x00, | ||
526 | 0x86, 0x6b, 0x42, 0xbd, 0x0d, 0x07, 0x00, | ||
527 | 0x86, 0x6b, 0x0b, 0xf4, 0x0e, 0x07, 0x00, | ||
528 | 0x86, 0x6b, 0x43, 0xbc, 0x0f, 0x07, 0x00, | ||
529 | 0x86, 0x6b, 0x10, 0xef, 0x10, 0x07, 0x00, | ||
530 | 0x86, 0x6b, 0x21, 0xde, 0x11, 0x07, 0x00, | ||
531 | 0x86, 0x6b, 0x13, 0xec, 0x12, 0x07, 0x00, | ||
532 | 0x86, 0x6b, 0x11, 0xee, 0x13, 0x07, 0x00, | ||
533 | 0x86, 0x6b, 0x12, 0xed, 0x14, 0x07, 0x00, | ||
534 | 0x86, 0x6b, 0x19, 0xe6, 0x15, 0x07, 0x00, | ||
535 | 0x86, 0x6b, 0x1a, 0xe5, 0x16, 0x07, 0x00, | ||
536 | 0x86, 0x6b, 0x1b, 0xe4, 0x17, 0x07, 0x00, | ||
537 | 0x86, 0x6b, 0x4b, 0xb4, 0x18, 0x07, 0x00, | ||
538 | 0x86, 0x6b, 0x40, 0xbf, 0x19, 0x07, 0x00, | ||
539 | 0x86, 0x6b, 0x44, 0xbb, 0x1a, 0x07, 0x00, | ||
540 | 0x86, 0x6b, 0x41, 0xbe, 0x1b, 0x07, 0x00, | ||
541 | 0x86, 0x6b, 0x22, 0xdd, 0x1c, 0x07, 0x00, | ||
542 | 0x86, 0x6b, 0x15, 0xea, 0x1d, 0x07, 0x00, | ||
543 | 0x86, 0x6b, 0x0f, 0xf0, 0x3f, 0x07, 0x00, | ||
544 | 0x86, 0x6b, 0x1c, 0xe3, 0x40, 0x07, 0x00, | ||
545 | 0x86, 0x6b, 0x4a, 0xb5, 0x41, 0x07, 0x00, | ||
546 | 0x86, 0x6b, 0x48, 0xb7, 0x42, 0x07, 0x00, | ||
547 | 0x86, 0x6b, 0x49, 0xb6, 0x43, 0x07, 0x00, | ||
548 | 0x86, 0x6b, 0x18, 0xe7, 0x44, 0x07, 0x00, | ||
549 | 0x86, 0x6b, 0x23, 0xdc, 0x45, 0x07, 0x00, | ||
550 | }; | 333 | }; |
551 | 334 | ||
552 | /* AverMedia Volar X */ | 335 | /* AverMedia Volar X */ |
553 | static struct ir_scancode ir_codes_af9015_table_avermedia[] = { | 336 | static struct ir_scancode af9015_rc_avermedia[] = { |
554 | { 0x053d, KEY_PROG1 }, /* SOURCE */ | 337 | { 0x0200, KEY_POWER }, /* POWER */ |
555 | { 0x0512, KEY_POWER }, /* POWER */ | 338 | { 0x0201, KEY_PROG1 }, /* SOURCE */ |
556 | { 0x051e, KEY_1 }, /* 1 */ | 339 | { 0x0203, KEY_TEXT }, /* TELETEXT */ |
557 | { 0x051f, KEY_2 }, /* 2 */ | 340 | { 0x0204, KEY_EPG }, /* EPG */ |
558 | { 0x0520, KEY_3 }, /* 3 */ | 341 | { 0x0205, KEY_1 }, /* 1 */ |
559 | { 0x0521, KEY_4 }, /* 4 */ | 342 | { 0x0206, KEY_2 }, /* 2 */ |
560 | { 0x0522, KEY_5 }, /* 5 */ | 343 | { 0x0207, KEY_3 }, /* 3 */ |
561 | { 0x0523, KEY_6 }, /* 6 */ | 344 | { 0x0208, KEY_AUDIO }, /* AUDIO */ |
562 | { 0x0524, KEY_7 }, /* 7 */ | 345 | { 0x0209, KEY_4 }, /* 4 */ |
563 | { 0x0525, KEY_8 }, /* 8 */ | 346 | { 0x020a, KEY_5 }, /* 5 */ |
564 | { 0x0526, KEY_9 }, /* 9 */ | 347 | { 0x020b, KEY_6 }, /* 6 */ |
565 | { 0x053f, KEY_LEFT }, /* L / DISPLAY */ | 348 | { 0x020c, KEY_ZOOM }, /* FULL SCREEN */ |
566 | { 0x0527, KEY_0 }, /* 0 */ | 349 | { 0x020d, KEY_7 }, /* 7 */ |
567 | { 0x050f, KEY_RIGHT }, /* R / CH RTN */ | 350 | { 0x020e, KEY_8 }, /* 8 */ |
568 | { 0x0518, KEY_PROG2 }, /* SNAP SHOT */ | 351 | { 0x020f, KEY_9 }, /* 9 */ |
569 | { 0x051c, KEY_PROG3 }, /* 16-CH PREV */ | 352 | { 0x0210, KEY_PROG3 }, /* 16-CH PREV */ |
570 | { 0x052d, KEY_VOLUMEDOWN }, /* VOL DOWN */ | 353 | { 0x0211, KEY_0 }, /* 0 */ |
571 | { 0x053e, KEY_ZOOM }, /* FULL SCREEN */ | 354 | { 0x0212, KEY_LEFT }, /* L / DISPLAY */ |
572 | { 0x052e, KEY_VOLUMEUP }, /* VOL UP */ | 355 | { 0x0213, KEY_RIGHT }, /* R / CH RTN */ |
573 | { 0x0510, KEY_MUTE }, /* MUTE */ | 356 | { 0x0214, KEY_MUTE }, /* MUTE */ |
574 | { 0x0504, KEY_AUDIO }, /* AUDIO */ | 357 | { 0x0215, KEY_MENU }, /* MENU */ |
575 | { 0x0515, KEY_RECORD }, /* RECORD */ | 358 | { 0x0217, KEY_PROG2 }, /* SNAP SHOT */ |
576 | { 0x0511, KEY_PLAY }, /* PLAY */ | 359 | { 0x0218, KEY_PLAY }, /* PLAY */ |
577 | { 0x0516, KEY_STOP }, /* STOP */ | 360 | { 0x0219, KEY_RECORD }, /* RECORD */ |
578 | { 0x050c, KEY_PLAYPAUSE }, /* TIMESHIFT / PAUSE */ | 361 | { 0x021a, KEY_PLAYPAUSE }, /* TIMESHIFT / PAUSE */ |
579 | { 0x0505, KEY_BACK }, /* << / RED */ | 362 | { 0x021b, KEY_STOP }, /* STOP */ |
580 | { 0x0509, KEY_FORWARD }, /* >> / YELLOW */ | 363 | { 0x021c, KEY_FORWARD }, /* >> / YELLOW */ |
581 | { 0x0517, KEY_TEXT }, /* TELETEXT */ | 364 | { 0x021d, KEY_BACK }, /* << / RED */ |
582 | { 0x050a, KEY_EPG }, /* EPG */ | 365 | { 0x021e, KEY_VOLUMEDOWN }, /* VOL DOWN */ |
583 | { 0x0513, KEY_MENU }, /* MENU */ | 366 | { 0x021f, KEY_VOLUMEUP }, /* VOL UP */ |
584 | 367 | ||
585 | { 0x050e, KEY_CHANNELUP }, /* CH UP */ | 368 | { 0x0300, KEY_LAST }, /* >>| / BLUE */ |
586 | { 0x050d, KEY_CHANNELDOWN }, /* CH DOWN */ | 369 | { 0x0301, KEY_FIRST }, /* |<< / GREEN */ |
587 | { 0x0519, KEY_FIRST }, /* |<< / GREEN */ | 370 | { 0x0302, KEY_CHANNELDOWN }, /* CH DOWN */ |
588 | { 0x0508, KEY_LAST }, /* >>| / BLUE */ | 371 | { 0x0303, KEY_CHANNELUP }, /* CH UP */ |
589 | }; | 372 | }; |
590 | 373 | ||
591 | static u8 af9015_ir_table_avermedia[] = { | 374 | /* AverMedia KS */ |
592 | 0x02, 0xfd, 0x00, 0xff, 0x12, 0x05, 0x00, | 375 | /* FIXME: mappings are not 100% correct? */ |
593 | 0x02, 0xfd, 0x01, 0xfe, 0x3d, 0x05, 0x00, | 376 | static struct ir_scancode af9015_rc_avermedia_ks[] = { |
594 | 0x02, 0xfd, 0x03, 0xfc, 0x17, 0x05, 0x00, | 377 | { 0x0501, KEY_POWER }, |
595 | 0x02, 0xfd, 0x04, 0xfb, 0x0a, 0x05, 0x00, | 378 | { 0x0502, KEY_CHANNELUP }, |
596 | 0x02, 0xfd, 0x05, 0xfa, 0x1e, 0x05, 0x00, | 379 | { 0x0503, KEY_CHANNELDOWN }, |
597 | 0x02, 0xfd, 0x06, 0xf9, 0x1f, 0x05, 0x00, | 380 | { 0x0504, KEY_VOLUMEUP }, |
598 | 0x02, 0xfd, 0x07, 0xf8, 0x20, 0x05, 0x00, | 381 | { 0x0505, KEY_VOLUMEDOWN }, |
599 | 0x02, 0xfd, 0x09, 0xf6, 0x21, 0x05, 0x00, | 382 | { 0x0506, KEY_MUTE }, |
600 | 0x02, 0xfd, 0x0a, 0xf5, 0x22, 0x05, 0x00, | 383 | { 0x0507, KEY_RIGHT }, |
601 | 0x02, 0xfd, 0x0b, 0xf4, 0x23, 0x05, 0x00, | 384 | { 0x0508, KEY_PROG1 }, |
602 | 0x02, 0xfd, 0x0d, 0xf2, 0x24, 0x05, 0x00, | 385 | { 0x0509, KEY_1 }, |
603 | 0x02, 0xfd, 0x0e, 0xf1, 0x25, 0x05, 0x00, | 386 | { 0x050a, KEY_2 }, |
604 | 0x02, 0xfd, 0x0f, 0xf0, 0x26, 0x05, 0x00, | 387 | { 0x050b, KEY_3 }, |
605 | 0x02, 0xfd, 0x11, 0xee, 0x27, 0x05, 0x00, | 388 | { 0x050c, KEY_4 }, |
606 | 0x02, 0xfd, 0x08, 0xf7, 0x04, 0x05, 0x00, | 389 | { 0x050d, KEY_5 }, |
607 | 0x02, 0xfd, 0x0c, 0xf3, 0x3e, 0x05, 0x00, | 390 | { 0x050e, KEY_6 }, |
608 | 0x02, 0xfd, 0x10, 0xef, 0x1c, 0x05, 0x00, | 391 | { 0x050f, KEY_7 }, |
609 | 0x02, 0xfd, 0x12, 0xed, 0x3f, 0x05, 0x00, | 392 | { 0x0510, KEY_8 }, |
610 | 0x02, 0xfd, 0x13, 0xec, 0x0f, 0x05, 0x00, | 393 | { 0x0511, KEY_9 }, |
611 | 0x02, 0xfd, 0x14, 0xeb, 0x10, 0x05, 0x00, | 394 | { 0x0512, KEY_0 }, |
612 | 0x02, 0xfd, 0x15, 0xea, 0x13, 0x05, 0x00, | 395 | { 0x0513, KEY_AUDIO }, |
613 | 0x02, 0xfd, 0x17, 0xe8, 0x18, 0x05, 0x00, | 396 | { 0x0515, KEY_EPG }, |
614 | 0x02, 0xfd, 0x18, 0xe7, 0x11, 0x05, 0x00, | 397 | { 0x0516, KEY_PLAY }, |
615 | 0x02, 0xfd, 0x19, 0xe6, 0x15, 0x05, 0x00, | 398 | { 0x0517, KEY_RECORD }, |
616 | 0x02, 0xfd, 0x1a, 0xe5, 0x0c, 0x05, 0x00, | 399 | { 0x0518, KEY_STOP }, |
617 | 0x02, 0xfd, 0x1b, 0xe4, 0x16, 0x05, 0x00, | 400 | { 0x051c, KEY_BACK }, |
618 | 0x02, 0xfd, 0x1c, 0xe3, 0x09, 0x05, 0x00, | 401 | { 0x051d, KEY_FORWARD }, |
619 | 0x02, 0xfd, 0x1d, 0xe2, 0x05, 0x05, 0x00, | 402 | { 0x054d, KEY_LEFT }, |
620 | 0x02, 0xfd, 0x1e, 0xe1, 0x2d, 0x05, 0x00, | 403 | { 0x0556, KEY_ZOOM }, |
621 | 0x02, 0xfd, 0x1f, 0xe0, 0x2e, 0x05, 0x00, | ||
622 | 0x03, 0xfc, 0x00, 0xff, 0x08, 0x05, 0x00, | ||
623 | 0x03, 0xfc, 0x01, 0xfe, 0x19, 0x05, 0x00, | ||
624 | 0x03, 0xfc, 0x02, 0xfd, 0x0d, 0x05, 0x00, | ||
625 | 0x03, 0xfc, 0x03, 0xfc, 0x0e, 0x05, 0x00, | ||
626 | }; | ||
627 | |||
628 | static u8 af9015_ir_table_avermedia_ks[] = { | ||
629 | 0x05, 0xfa, 0x01, 0xfe, 0x12, 0x05, 0x00, | ||
630 | 0x05, 0xfa, 0x02, 0xfd, 0x0e, 0x05, 0x00, | ||
631 | 0x05, 0xfa, 0x03, 0xfc, 0x0d, 0x05, 0x00, | ||
632 | 0x05, 0xfa, 0x04, 0xfb, 0x2e, 0x05, 0x00, | ||
633 | 0x05, 0xfa, 0x05, 0xfa, 0x2d, 0x05, 0x00, | ||
634 | 0x05, 0xfa, 0x06, 0xf9, 0x10, 0x05, 0x00, | ||
635 | 0x05, 0xfa, 0x07, 0xf8, 0x0f, 0x05, 0x00, | ||
636 | 0x05, 0xfa, 0x08, 0xf7, 0x3d, 0x05, 0x00, | ||
637 | 0x05, 0xfa, 0x09, 0xf6, 0x1e, 0x05, 0x00, | ||
638 | 0x05, 0xfa, 0x0a, 0xf5, 0x1f, 0x05, 0x00, | ||
639 | 0x05, 0xfa, 0x0b, 0xf4, 0x20, 0x05, 0x00, | ||
640 | 0x05, 0xfa, 0x0c, 0xf3, 0x21, 0x05, 0x00, | ||
641 | 0x05, 0xfa, 0x0d, 0xf2, 0x22, 0x05, 0x00, | ||
642 | 0x05, 0xfa, 0x0e, 0xf1, 0x23, 0x05, 0x00, | ||
643 | 0x05, 0xfa, 0x0f, 0xf0, 0x24, 0x05, 0x00, | ||
644 | 0x05, 0xfa, 0x10, 0xef, 0x25, 0x05, 0x00, | ||
645 | 0x05, 0xfa, 0x11, 0xee, 0x26, 0x05, 0x00, | ||
646 | 0x05, 0xfa, 0x12, 0xed, 0x27, 0x05, 0x00, | ||
647 | 0x05, 0xfa, 0x13, 0xec, 0x04, 0x05, 0x00, | ||
648 | 0x05, 0xfa, 0x15, 0xea, 0x0a, 0x05, 0x00, | ||
649 | 0x05, 0xfa, 0x16, 0xe9, 0x11, 0x05, 0x00, | ||
650 | 0x05, 0xfa, 0x17, 0xe8, 0x15, 0x05, 0x00, | ||
651 | 0x05, 0xfa, 0x18, 0xe7, 0x16, 0x05, 0x00, | ||
652 | 0x05, 0xfa, 0x1c, 0xe3, 0x05, 0x05, 0x00, | ||
653 | 0x05, 0xfa, 0x1d, 0xe2, 0x09, 0x05, 0x00, | ||
654 | 0x05, 0xfa, 0x4d, 0xb2, 0x3f, 0x05, 0x00, | ||
655 | 0x05, 0xfa, 0x56, 0xa9, 0x3e, 0x05, 0x00 | ||
656 | }; | 404 | }; |
657 | 405 | ||
658 | /* Digittrade DVB-T USB Stick */ | 406 | /* Digittrade DVB-T USB Stick */ |
659 | static struct ir_scancode ir_codes_af9015_table_digittrade[] = { | 407 | static struct ir_scancode af9015_rc_digittrade[] = { |
660 | { 0x010f, KEY_LAST }, /* RETURN */ | 408 | { 0x0000, KEY_9 }, |
661 | { 0x0517, KEY_TEXT }, /* TELETEXT */ | 409 | { 0x0001, KEY_EPG }, /* EPG */ |
662 | { 0x0108, KEY_EPG }, /* EPG */ | 410 | { 0x0002, KEY_VOLUMEDOWN }, /* Vol Dn */ |
663 | { 0x0513, KEY_POWER }, /* POWER */ | 411 | { 0x0003, KEY_TEXT }, /* TELETEXT */ |
664 | { 0x0109, KEY_ZOOM }, /* FULLSCREEN */ | 412 | { 0x0004, KEY_8 }, |
665 | { 0x0040, KEY_AUDIO }, /* DUAL SOUND */ | 413 | { 0x0005, KEY_MUTE }, /* MUTE */ |
666 | { 0x002c, KEY_PRINT }, /* SNAPSHOT */ | 414 | { 0x0006, KEY_POWER }, /* POWER */ |
667 | { 0x0516, KEY_SUBTITLE }, /* SUBTITLE */ | 415 | { 0x0009, KEY_ZOOM }, /* FULLSCREEN */ |
668 | { 0x0052, KEY_CHANNELUP }, /* CH Up */ | 416 | { 0x000a, KEY_RECORD }, /* RECORD */ |
669 | { 0x0051, KEY_CHANNELDOWN },/* Ch Dn */ | 417 | { 0x000d, KEY_SUBTITLE }, /* SUBTITLE */ |
670 | { 0x0057, KEY_VOLUMEUP }, /* Vol Up */ | 418 | { 0x000e, KEY_STOP }, /* STOP */ |
671 | { 0x0056, KEY_VOLUMEDOWN }, /* Vol Dn */ | 419 | { 0x0010, KEY_LAST }, /* RETURN */ |
672 | { 0x0110, KEY_MUTE }, /* MUTE */ | 420 | { 0x0011, KEY_2 }, |
673 | { 0x0027, KEY_0 }, | 421 | { 0x0012, KEY_4 }, |
674 | { 0x001e, KEY_1 }, | 422 | { 0x0015, KEY_3 }, |
675 | { 0x001f, KEY_2 }, | 423 | { 0x0016, KEY_5 }, |
676 | { 0x0020, KEY_3 }, | 424 | { 0x0017, KEY_CHANNELDOWN }, /* Ch Dn */ |
677 | { 0x0021, KEY_4 }, | 425 | { 0x0019, KEY_CHANNELUP }, /* CH Up */ |
678 | { 0x0022, KEY_5 }, | 426 | { 0x001a, KEY_PAUSE }, /* PAUSE */ |
679 | { 0x0023, KEY_6 }, | 427 | { 0x001b, KEY_1 }, |
680 | { 0x0024, KEY_7 }, | 428 | { 0x001d, KEY_AUDIO }, /* DUAL SOUND */ |
681 | { 0x0025, KEY_8 }, | 429 | { 0x001e, KEY_PLAY }, /* PLAY */ |
682 | { 0x0026, KEY_9 }, | 430 | { 0x001f, KEY_PRINT }, /* SNAPSHOT */ |
683 | { 0x0117, KEY_PLAYPAUSE }, /* TIMESHIFT */ | 431 | { 0x0040, KEY_VOLUMEUP }, /* Vol Up */ |
684 | { 0x0115, KEY_RECORD }, /* RECORD */ | 432 | { 0x0048, KEY_7 }, |
685 | { 0x0313, KEY_PLAY }, /* PLAY */ | 433 | { 0x004c, KEY_6 }, |
686 | { 0x0116, KEY_STOP }, /* STOP */ | 434 | { 0x004d, KEY_PLAYPAUSE }, /* TIMESHIFT */ |
687 | { 0x0113, KEY_PAUSE }, /* PAUSE */ | 435 | { 0x0054, KEY_0 }, |
688 | }; | ||
689 | |||
690 | static u8 af9015_ir_table_digittrade[] = { | ||
691 | 0x00, 0xff, 0x06, 0xf9, 0x13, 0x05, 0x00, | ||
692 | 0x00, 0xff, 0x4d, 0xb2, 0x17, 0x01, 0x00, | ||
693 | 0x00, 0xff, 0x1f, 0xe0, 0x2c, 0x00, 0x00, | ||
694 | 0x00, 0xff, 0x0a, 0xf5, 0x15, 0x01, 0x00, | ||
695 | 0x00, 0xff, 0x0e, 0xf1, 0x16, 0x01, 0x00, | ||
696 | 0x00, 0xff, 0x09, 0xf6, 0x09, 0x01, 0x00, | ||
697 | 0x00, 0xff, 0x01, 0xfe, 0x08, 0x01, 0x00, | ||
698 | 0x00, 0xff, 0x05, 0xfa, 0x10, 0x01, 0x00, | ||
699 | 0x00, 0xff, 0x02, 0xfd, 0x56, 0x00, 0x00, | ||
700 | 0x00, 0xff, 0x40, 0xbf, 0x57, 0x00, 0x00, | ||
701 | 0x00, 0xff, 0x19, 0xe6, 0x52, 0x00, 0x00, | ||
702 | 0x00, 0xff, 0x17, 0xe8, 0x51, 0x00, 0x00, | ||
703 | 0x00, 0xff, 0x10, 0xef, 0x0f, 0x01, 0x00, | ||
704 | 0x00, 0xff, 0x54, 0xab, 0x27, 0x00, 0x00, | ||
705 | 0x00, 0xff, 0x1b, 0xe4, 0x1e, 0x00, 0x00, | ||
706 | 0x00, 0xff, 0x11, 0xee, 0x1f, 0x00, 0x00, | ||
707 | 0x00, 0xff, 0x15, 0xea, 0x20, 0x00, 0x00, | ||
708 | 0x00, 0xff, 0x12, 0xed, 0x21, 0x00, 0x00, | ||
709 | 0x00, 0xff, 0x16, 0xe9, 0x22, 0x00, 0x00, | ||
710 | 0x00, 0xff, 0x4c, 0xb3, 0x23, 0x00, 0x00, | ||
711 | 0x00, 0xff, 0x48, 0xb7, 0x24, 0x00, 0x00, | ||
712 | 0x00, 0xff, 0x04, 0xfb, 0x25, 0x00, 0x00, | ||
713 | 0x00, 0xff, 0x00, 0xff, 0x26, 0x00, 0x00, | ||
714 | 0x00, 0xff, 0x1e, 0xe1, 0x13, 0x03, 0x00, | ||
715 | 0x00, 0xff, 0x1a, 0xe5, 0x13, 0x01, 0x00, | ||
716 | 0x00, 0xff, 0x03, 0xfc, 0x17, 0x05, 0x00, | ||
717 | 0x00, 0xff, 0x0d, 0xf2, 0x16, 0x05, 0x00, | ||
718 | 0x00, 0xff, 0x1d, 0xe2, 0x40, 0x00, 0x00, | ||
719 | }; | 436 | }; |
720 | 437 | ||
721 | /* TREKSTOR DVB-T USB Stick */ | 438 | /* TREKSTOR DVB-T USB Stick */ |
722 | static struct ir_scancode ir_codes_af9015_table_trekstor[] = { | 439 | static struct ir_scancode af9015_rc_trekstor[] = { |
723 | { 0x0704, KEY_AGAIN }, /* Home */ | 440 | { 0x0084, KEY_0 }, |
724 | { 0x0705, KEY_MUTE }, /* Mute */ | 441 | { 0x0085, KEY_MUTE }, /* Mute */ |
725 | { 0x0706, KEY_UP }, /* Up */ | 442 | { 0x0086, KEY_AGAIN }, /* Home */ |
726 | { 0x0707, KEY_DOWN }, /* Down */ | 443 | { 0x0087, KEY_UP }, /* Up */ |
727 | { 0x0709, KEY_RIGHT }, /* Right */ | 444 | { 0x0088, KEY_ENTER }, /* OK */ |
728 | { 0x070a, KEY_ENTER }, /* OK */ | 445 | { 0x0089, KEY_RIGHT }, /* Right */ |
729 | { 0x070b, KEY_FASTFORWARD }, /* Fast forward */ | 446 | { 0x008a, KEY_FASTFORWARD }, /* Fast forward */ |
730 | { 0x070c, KEY_REWIND }, /* Rewind */ | 447 | { 0x008b, KEY_VOLUMEUP }, /* Volume + */ |
731 | { 0x070d, KEY_PLAY }, /* Play/Pause */ | 448 | { 0x008c, KEY_DOWN }, /* Down */ |
732 | { 0x070e, KEY_VOLUMEUP }, /* Volume + */ | 449 | { 0x008d, KEY_PLAY }, /* Play/Pause */ |
733 | { 0x070f, KEY_VOLUMEDOWN }, /* Volume - */ | 450 | { 0x008e, KEY_STOP }, /* Stop */ |
734 | { 0x0710, KEY_RECORD }, /* Record */ | 451 | { 0x008f, KEY_EPG }, /* Info/EPG */ |
735 | { 0x0711, KEY_STOP }, /* Stop */ | 452 | { 0x0090, KEY_7 }, |
736 | { 0x0712, KEY_ZOOM }, /* TV */ | 453 | { 0x0091, KEY_4 }, |
737 | { 0x0713, KEY_EPG }, /* Info/EPG */ | 454 | { 0x0092, KEY_1 }, |
738 | { 0x0714, KEY_CHANNELDOWN }, /* Channel - */ | 455 | { 0x0093, KEY_CHANNELDOWN }, /* Channel - */ |
739 | { 0x0715, KEY_CHANNELUP }, /* Channel + */ | 456 | { 0x0094, KEY_8 }, |
740 | { 0x071e, KEY_1 }, | 457 | { 0x0095, KEY_5 }, |
741 | { 0x071f, KEY_2 }, | 458 | { 0x0096, KEY_2 }, |
742 | { 0x0720, KEY_3 }, | 459 | { 0x0097, KEY_CHANNELUP }, /* Channel + */ |
743 | { 0x0721, KEY_4 }, | 460 | { 0x0098, KEY_9 }, |
744 | { 0x0722, KEY_5 }, | 461 | { 0x0099, KEY_6 }, |
745 | { 0x0723, KEY_6 }, | 462 | { 0x009a, KEY_3 }, |
746 | { 0x0724, KEY_7 }, | 463 | { 0x009b, KEY_VOLUMEDOWN }, /* Volume - */ |
747 | { 0x0725, KEY_8 }, | 464 | { 0x009c, KEY_ZOOM }, /* TV */ |
748 | { 0x0726, KEY_9 }, | 465 | { 0x009d, KEY_RECORD }, /* Record */ |
749 | { 0x0708, KEY_LEFT }, /* LEFT */ | 466 | { 0x009e, KEY_REWIND }, /* Rewind */ |
750 | { 0x0727, KEY_0 }, | 467 | { 0x009f, KEY_LEFT }, /* Left */ |
751 | }; | ||
752 | |||
753 | static u8 af9015_ir_table_trekstor[] = { | ||
754 | 0x00, 0xff, 0x86, 0x79, 0x04, 0x07, 0x00, | ||
755 | 0x00, 0xff, 0x85, 0x7a, 0x05, 0x07, 0x00, | ||
756 | 0x00, 0xff, 0x87, 0x78, 0x06, 0x07, 0x00, | ||
757 | 0x00, 0xff, 0x8c, 0x73, 0x07, 0x07, 0x00, | ||
758 | 0x00, 0xff, 0x89, 0x76, 0x09, 0x07, 0x00, | ||
759 | 0x00, 0xff, 0x88, 0x77, 0x0a, 0x07, 0x00, | ||
760 | 0x00, 0xff, 0x8a, 0x75, 0x0b, 0x07, 0x00, | ||
761 | 0x00, 0xff, 0x9e, 0x61, 0x0c, 0x07, 0x00, | ||
762 | 0x00, 0xff, 0x8d, 0x72, 0x0d, 0x07, 0x00, | ||
763 | 0x00, 0xff, 0x8b, 0x74, 0x0e, 0x07, 0x00, | ||
764 | 0x00, 0xff, 0x9b, 0x64, 0x0f, 0x07, 0x00, | ||
765 | 0x00, 0xff, 0x9d, 0x62, 0x10, 0x07, 0x00, | ||
766 | 0x00, 0xff, 0x8e, 0x71, 0x11, 0x07, 0x00, | ||
767 | 0x00, 0xff, 0x9c, 0x63, 0x12, 0x07, 0x00, | ||
768 | 0x00, 0xff, 0x8f, 0x70, 0x13, 0x07, 0x00, | ||
769 | 0x00, 0xff, 0x93, 0x6c, 0x14, 0x07, 0x00, | ||
770 | 0x00, 0xff, 0x97, 0x68, 0x15, 0x07, 0x00, | ||
771 | 0x00, 0xff, 0x92, 0x6d, 0x1e, 0x07, 0x00, | ||
772 | 0x00, 0xff, 0x96, 0x69, 0x1f, 0x07, 0x00, | ||
773 | 0x00, 0xff, 0x9a, 0x65, 0x20, 0x07, 0x00, | ||
774 | 0x00, 0xff, 0x91, 0x6e, 0x21, 0x07, 0x00, | ||
775 | 0x00, 0xff, 0x95, 0x6a, 0x22, 0x07, 0x00, | ||
776 | 0x00, 0xff, 0x99, 0x66, 0x23, 0x07, 0x00, | ||
777 | 0x00, 0xff, 0x90, 0x6f, 0x24, 0x07, 0x00, | ||
778 | 0x00, 0xff, 0x94, 0x6b, 0x25, 0x07, 0x00, | ||
779 | 0x00, 0xff, 0x98, 0x67, 0x26, 0x07, 0x00, | ||
780 | 0x00, 0xff, 0x9f, 0x60, 0x08, 0x07, 0x00, | ||
781 | 0x00, 0xff, 0x84, 0x7b, 0x27, 0x07, 0x00, | ||
782 | }; | 468 | }; |
783 | 469 | ||
784 | /* MSI DIGIVOX mini III */ | 470 | /* MSI DIGIVOX mini III */ |
785 | static struct ir_scancode ir_codes_af9015_table_msi_digivox_iii[] = { | 471 | /* Uses NEC extended 0x61d6. Extended byte removed for compatibility... */ |
786 | { 0x0713, KEY_POWER }, /* [red power button] */ | 472 | static struct ir_scancode af9015_rc_msi_digivox_iii[] = { |
787 | { 0x073b, KEY_VIDEO }, /* Source */ | 473 | { 0x6101, KEY_VIDEO }, /* Source */ |
788 | { 0x073e, KEY_ZOOM }, /* Zoom */ | 474 | { 0x6102, KEY_3 }, |
789 | { 0x070b, KEY_POWER2 }, /* ShutDown */ | 475 | { 0x6103, KEY_POWER2 }, /* ShutDown */ |
790 | { 0x071e, KEY_1 }, | 476 | { 0x6104, KEY_1 }, |
791 | { 0x071f, KEY_2 }, | 477 | { 0x6105, KEY_5 }, |
792 | { 0x0720, KEY_3 }, | 478 | { 0x6106, KEY_6 }, |
793 | { 0x0721, KEY_4 }, | 479 | { 0x6107, KEY_CHANNELDOWN }, /* CH- */ |
794 | { 0x0722, KEY_5 }, | 480 | { 0x6108, KEY_2 }, |
795 | { 0x0723, KEY_6 }, | 481 | { 0x6109, KEY_CHANNELUP }, /* CH+ */ |
796 | { 0x0724, KEY_7 }, | 482 | { 0x610a, KEY_9 }, |
797 | { 0x0725, KEY_8 }, | 483 | { 0x610b, KEY_ZOOM }, /* Zoom */ |
798 | { 0x0726, KEY_9 }, | 484 | { 0x610c, KEY_7 }, |
799 | { 0x0727, KEY_0 }, | 485 | { 0x610d, KEY_8 }, |
800 | { 0x0752, KEY_CHANNELUP }, /* CH+ */ | 486 | { 0x610e, KEY_VOLUMEUP }, /* Vol+ */ |
801 | { 0x0751, KEY_CHANNELDOWN }, /* CH- */ | 487 | { 0x610f, KEY_4 }, |
802 | { 0x0750, KEY_VOLUMEUP }, /* Vol+ */ | 488 | { 0x6110, KEY_ESC }, /* [back up arrow] */ |
803 | { 0x074f, KEY_VOLUMEDOWN }, /* Vol- */ | 489 | { 0x6111, KEY_0 }, |
804 | { 0x0705, KEY_ESC }, /* [back up arrow] */ | 490 | { 0x6112, KEY_OK }, /* [enter arrow] */ |
805 | { 0x0708, KEY_OK }, /* [enter arrow] */ | 491 | { 0x6113, KEY_VOLUMEDOWN }, /* Vol- */ |
806 | { 0x073f, KEY_RECORD }, /* Rec */ | 492 | { 0x6114, KEY_RECORD }, /* Rec */ |
807 | { 0x0716, KEY_STOP }, /* Stop */ | 493 | { 0x6115, KEY_STOP }, /* Stop */ |
808 | { 0x072a, KEY_PLAY }, /* Play */ | 494 | { 0x6116, KEY_PLAY }, /* Play */ |
809 | { 0x073c, KEY_MUTE }, /* Mute */ | 495 | { 0x6117, KEY_MUTE }, /* Mute */ |
810 | { 0x0718, KEY_UP }, | 496 | { 0x6118, KEY_UP }, |
811 | { 0x0707, KEY_DOWN }, | 497 | { 0x6119, KEY_DOWN }, |
812 | { 0x070f, KEY_LEFT }, | 498 | { 0x611a, KEY_LEFT }, |
813 | { 0x0715, KEY_RIGHT }, | 499 | { 0x611b, KEY_RIGHT }, |
814 | { 0x0736, KEY_RED }, | 500 | { 0x611c, KEY_RED }, |
815 | { 0x0737, KEY_GREEN }, | 501 | { 0x611d, KEY_GREEN }, |
816 | { 0x072d, KEY_YELLOW }, | 502 | { 0x611e, KEY_YELLOW }, |
817 | { 0x072e, KEY_BLUE }, | 503 | { 0x611f, KEY_BLUE }, |
818 | }; | 504 | { 0x6143, KEY_POWER }, /* [red power button] */ |
819 | |||
820 | static u8 af9015_ir_table_msi_digivox_iii[] = { | ||
821 | 0x61, 0xd6, 0x43, 0xbc, 0x13, 0x07, 0x00, /* KEY_POWER */ | ||
822 | 0x61, 0xd6, 0x01, 0xfe, 0x3b, 0x07, 0x00, /* KEY_VIDEO */ | ||
823 | 0x61, 0xd6, 0x0b, 0xf4, 0x3e, 0x07, 0x00, /* KEY_ZOOM */ | ||
824 | 0x61, 0xd6, 0x03, 0xfc, 0x0b, 0x07, 0x00, /* KEY_POWER2 */ | ||
825 | 0x61, 0xd6, 0x04, 0xfb, 0x1e, 0x07, 0x00, /* KEY_1 */ | ||
826 | 0x61, 0xd6, 0x08, 0xf7, 0x1f, 0x07, 0x00, /* KEY_2 */ | ||
827 | 0x61, 0xd6, 0x02, 0xfd, 0x20, 0x07, 0x00, /* KEY_3 */ | ||
828 | 0x61, 0xd6, 0x0f, 0xf0, 0x21, 0x07, 0x00, /* KEY_4 */ | ||
829 | 0x61, 0xd6, 0x05, 0xfa, 0x22, 0x07, 0x00, /* KEY_5 */ | ||
830 | 0x61, 0xd6, 0x06, 0xf9, 0x23, 0x07, 0x00, /* KEY_6 */ | ||
831 | 0x61, 0xd6, 0x0c, 0xf3, 0x24, 0x07, 0x00, /* KEY_7 */ | ||
832 | 0x61, 0xd6, 0x0d, 0xf2, 0x25, 0x07, 0x00, /* KEY_8 */ | ||
833 | 0x61, 0xd6, 0x0a, 0xf5, 0x26, 0x07, 0x00, /* KEY_9 */ | ||
834 | 0x61, 0xd6, 0x11, 0xee, 0x27, 0x07, 0x00, /* KEY_0 */ | ||
835 | 0x61, 0xd6, 0x09, 0xf6, 0x52, 0x07, 0x00, /* KEY_CHANNELUP */ | ||
836 | 0x61, 0xd6, 0x07, 0xf8, 0x51, 0x07, 0x00, /* KEY_CHANNELDOWN */ | ||
837 | 0x61, 0xd6, 0x0e, 0xf1, 0x50, 0x07, 0x00, /* KEY_VOLUMEUP */ | ||
838 | 0x61, 0xd6, 0x13, 0xec, 0x4f, 0x07, 0x00, /* KEY_VOLUMEDOWN */ | ||
839 | 0x61, 0xd6, 0x10, 0xef, 0x05, 0x07, 0x00, /* KEY_ESC */ | ||
840 | 0x61, 0xd6, 0x12, 0xed, 0x08, 0x07, 0x00, /* KEY_OK */ | ||
841 | 0x61, 0xd6, 0x14, 0xeb, 0x3f, 0x07, 0x00, /* KEY_RECORD */ | ||
842 | 0x61, 0xd6, 0x15, 0xea, 0x16, 0x07, 0x00, /* KEY_STOP */ | ||
843 | 0x61, 0xd6, 0x16, 0xe9, 0x2a, 0x07, 0x00, /* KEY_PLAY */ | ||
844 | 0x61, 0xd6, 0x17, 0xe8, 0x3c, 0x07, 0x00, /* KEY_MUTE */ | ||
845 | 0x61, 0xd6, 0x18, 0xe7, 0x18, 0x07, 0x00, /* KEY_UP */ | ||
846 | 0x61, 0xd6, 0x19, 0xe6, 0x07, 0x07, 0x00, /* KEY_DOWN */ | ||
847 | 0x61, 0xd6, 0x1a, 0xe5, 0x0f, 0x07, 0x00, /* KEY_LEFT */ | ||
848 | 0x61, 0xd6, 0x1b, 0xe4, 0x15, 0x07, 0x00, /* KEY_RIGHT */ | ||
849 | 0x61, 0xd6, 0x1c, 0xe3, 0x36, 0x07, 0x00, /* KEY_RED */ | ||
850 | 0x61, 0xd6, 0x1d, 0xe2, 0x37, 0x07, 0x00, /* KEY_GREEN */ | ||
851 | 0x61, 0xd6, 0x1e, 0xe1, 0x2d, 0x07, 0x00, /* KEY_YELLOW */ | ||
852 | 0x61, 0xd6, 0x1f, 0xe0, 0x2e, 0x07, 0x00, /* KEY_BLUE */ | ||
853 | }; | 505 | }; |
854 | 506 | ||
855 | /* TerraTec - 4x7 slim remote */ | 507 | /* TerraTec - 4x7 slim remote */ |
856 | static struct ir_scancode ir_codes_terratec[] = { | 508 | /* Uses NEC extended 0x02bd. Extended byte removed for compatibility... */ |
857 | { 0x0010, KEY_MUTE }, | 509 | static struct ir_scancode af9015_rc_terratec[] = { |
858 | { 0x0008, KEY_EPG }, | 510 | { 0x0200, KEY_1 }, |
859 | { 0x0009, KEY_ZOOM }, /* symbol: PIP or zoom ? */ | 511 | { 0x0201, KEY_2 }, |
860 | { 0x043d, KEY_POWER2 }, /* [red power button] */ | 512 | { 0x0202, KEY_3 }, |
861 | { 0x001e, KEY_1 }, | 513 | { 0x0203, KEY_4 }, |
862 | { 0x001f, KEY_2 }, | 514 | { 0x0204, KEY_5 }, |
863 | { 0x0020, KEY_3 }, | 515 | { 0x0205, KEY_6 }, |
864 | { 0x0021, KEY_4 }, | 516 | { 0x0206, KEY_7 }, |
865 | { 0x0022, KEY_5 }, | 517 | { 0x0207, KEY_8 }, |
866 | { 0x0023, KEY_6 }, | 518 | { 0x0208, KEY_9 }, |
867 | { 0x0024, KEY_7 }, | 519 | { 0x0209, KEY_0 }, |
868 | { 0x0025, KEY_8 }, | 520 | { 0x020a, KEY_MUTE }, |
869 | { 0x0026, KEY_9 }, | 521 | { 0x020b, KEY_ZOOM }, /* symbol: PIP or zoom ? */ |
870 | { 0x0027, KEY_0 }, | 522 | { 0x020e, KEY_VOLUMEDOWN }, |
871 | { 0x0029, KEY_ESC }, | 523 | { 0x020f, KEY_PLAYPAUSE }, |
872 | { 0x0013, KEY_CAMERA }, /* snapshot */ | 524 | { 0x0210, KEY_RIGHT }, |
873 | { 0x0028, KEY_OK }, | 525 | { 0x0211, KEY_LEFT }, |
874 | { 0x004f, KEY_RIGHT }, | 526 | { 0x0212, KEY_UP }, |
875 | { 0x0050, KEY_LEFT }, | 527 | { 0x0213, KEY_DOWN }, |
876 | { 0x0051, KEY_DOWN }, | 528 | { 0x0215, KEY_OK }, |
877 | { 0x0052, KEY_UP }, | 529 | { 0x0216, KEY_STOP }, |
878 | { 0x004b, KEY_CHANNELUP }, | 530 | { 0x0217, KEY_CAMERA }, /* snapshot */ |
879 | { 0x004e, KEY_CHANNELDOWN }, | 531 | { 0x0218, KEY_CHANNELUP }, |
880 | { 0x0057, KEY_VOLUMEUP }, | 532 | { 0x0219, KEY_RECORD }, |
881 | { 0x0056, KEY_VOLUMEDOWN }, | 533 | { 0x021a, KEY_CHANNELDOWN }, |
882 | { 0x0015, KEY_RECORD }, | 534 | { 0x021c, KEY_ESC }, |
883 | { 0x001b, KEY_STOP }, | 535 | { 0x021f, KEY_VOLUMEUP }, |
884 | { 0x002c, KEY_PLAYPAUSE }, | 536 | { 0x0244, KEY_EPG }, |
885 | }; | 537 | { 0x0245, KEY_POWER2 }, /* [red power button] */ |
886 | |||
887 | static u8 af9015_ir_terratec[] = { | ||
888 | 0x02, 0xbd, 0x0a, 0xf5, 0x10, 0x00, 0x00, /* KEY_MUTE */ | ||
889 | 0x02, 0xbd, 0x0b, 0xf4, 0x09, 0x00, 0x00, /* KEY_ZOOM */ | ||
890 | 0x02, 0xbd, 0x00, 0xff, 0x1e, 0x00, 0x00, /* KEY_1 */ | ||
891 | 0x02, 0xbd, 0x01, 0xfe, 0x1f, 0x00, 0x00, /* KEY_2 */ | ||
892 | 0x02, 0xbd, 0x02, 0xfd, 0x20, 0x00, 0x00, /* KEY_3 */ | ||
893 | 0x02, 0xbd, 0x03, 0xfc, 0x21, 0x00, 0x00, /* KEY_4 */ | ||
894 | 0x02, 0xbd, 0x04, 0xfb, 0x22, 0x00, 0x00, /* KEY_5 */ | ||
895 | 0x02, 0xbd, 0x05, 0xfa, 0x23, 0x00, 0x00, /* KEY_6 */ | ||
896 | 0x02, 0xbd, 0x06, 0xf9, 0x24, 0x00, 0x00, /* KEY_7 */ | ||
897 | 0x02, 0xbd, 0x07, 0xf8, 0x25, 0x00, 0x00, /* KEY_8 */ | ||
898 | 0x02, 0xbd, 0x08, 0xf7, 0x26, 0x00, 0x00, /* KEY_9 */ | ||
899 | 0x02, 0xbd, 0x09, 0xf6, 0x27, 0x00, 0x00, /* KEY_0 */ | ||
900 | 0x02, 0xbd, 0x12, 0xed, 0x52, 0x00, 0x00, /* KEY_UP */ | ||
901 | 0x02, 0xbd, 0x17, 0xe8, 0x13, 0x00, 0x00, /* KEY_CAMERA */ | ||
902 | 0x02, 0xbd, 0x11, 0xee, 0x50, 0x00, 0x00, /* KEY_LEFT */ | ||
903 | 0x02, 0xbd, 0x15, 0xea, 0x28, 0x00, 0x00, /* KEY_OK */ | ||
904 | 0x02, 0xbd, 0x10, 0xef, 0x4f, 0x00, 0x00, /* KEY_RIGHT */ | ||
905 | 0x02, 0xbd, 0x18, 0xe7, 0x4b, 0x00, 0x00, /* KEY_CHANNELUP */ | ||
906 | 0x02, 0xbd, 0x13, 0xec, 0x51, 0x00, 0x00, /* KEY_DOWN */ | ||
907 | 0x02, 0xbd, 0x19, 0xe6, 0x15, 0x00, 0x00, /* KEY_RECORD */ | ||
908 | 0x02, 0xbd, 0x1a, 0xe5, 0x4e, 0x00, 0x00, /* KEY_CHANNELDOWN */ | ||
909 | 0x02, 0xbd, 0x0e, 0xf1, 0x56, 0x00, 0x00, /* KEY_VOLUMEDOWN */ | ||
910 | 0x02, 0xbd, 0x16, 0xe9, 0x1b, 0x00, 0x00, /* KEY_STOP */ | ||
911 | 0x02, 0xbd, 0x1c, 0xe3, 0x29, 0x00, 0x00, /* KEY_ESC */ | ||
912 | 0x02, 0xbd, 0x1f, 0xe0, 0x57, 0x00, 0x00, /* KEY_VOLUMEUP */ | ||
913 | 0x02, 0xbd, 0x44, 0xbb, 0x08, 0x00, 0x00, /* KEY_EPG */ | ||
914 | 0x02, 0xbd, 0x45, 0xba, 0x3d, 0x04, 0x00, /* KEY_POWER2 */ | ||
915 | 0x02, 0xbd, 0x0f, 0xf0, 0x2c, 0x00, 0x00, /* KEY_PLAYPAUSE */ | ||
916 | }; | 538 | }; |
917 | 539 | ||
918 | #endif | 540 | #endif |