aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2010-09-12 12:31:56 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-10-20 23:05:52 -0400
commitd3bb73de97a9685bb150f81017d7e184fdb18451 (patch)
treed551bf4cd3710e678dabff7a19283fca0a9632a7 /drivers/media/dvb
parent2ec01b41e3e06bd22d8f6c7f330605b554e9b121 (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.c194
-rw-r--r--drivers/media/dvb/dvb-usb/af9015.h1142
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
602static 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
629exit:
630 return 0;
631}
632
633static int af9015_init(struct dvb_usb_device *d) 602static 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
646error: 611error:
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
746static const struct af9015_setup *af9015_setup_match(unsigned int id, 709static 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
755static const struct af9015_setup af9015_setup_modparam[] = { 718static 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 */
775static const struct af9015_setup af9015_setup_usbids[] = { 733static 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
797static const struct af9015_setup af9015_setup_hashes[] = { 749static 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
1066static int af9015_rc_query(struct dvb_usb_device *d, u32 *event, int *state) 1007static 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
1064error:
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};
1330MODULE_DEVICE_TABLE(usb, af9015_usb_table); 1303MODULE_DEVICE_TABLE(usb, af9015_usb_table);
1331 1304
1305#define AF9015_RC_INTERVAL 500
1332static struct dvb_usb_device_properties af9015_properties[] = { 1306static 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
101struct af9015_state { 101struct 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
105struct af9015_config { 106struct 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
115enum af9015_remote { 114enum 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 */
126static struct ir_scancode ir_codes_af9015_table_leadtek[] = { 125static 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 },
176static 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) */
230static struct ir_scancode ir_codes_af9015_table_twinhan[] = { 179static 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 },
287static 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) */
341static 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
362static u8 af9015_ir_table_a_link[] = { 235/* A-Link DTU(m) - 3x6 slim remote */
363 0x08, 0xf7, 0x12, 0xed, 0x45, 0x05, 0x00, /* power */ 236static 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 */
384static struct ir_scancode ir_codes_af9015_table_msi[] = { 258static 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
405static 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 */
427static struct ir_scancode ir_codes_af9015_table_mygictv[] = { 280/* Uses NEC extended 0x02bd. Extended byte removed for compatibility... */
428 { 0x003d, KEY_SWITCHVIDEOMODE }, 281static 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
466static 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) */
505static 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, 322static 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 */
553static struct ir_scancode ir_codes_af9015_table_avermedia[] = { 336static 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
591static 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, 376static 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
628static 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 */
659static struct ir_scancode ir_codes_af9015_table_digittrade[] = { 407static 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
690static 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 */
722static struct ir_scancode ir_codes_af9015_table_trekstor[] = { 439static 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
753static 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 */
785static 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] */ 472static 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
820static 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 */
856static struct ir_scancode ir_codes_terratec[] = { 508/* Uses NEC extended 0x02bd. Extended byte removed for compatibility... */
857 { 0x0010, KEY_MUTE }, 509static 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
887static 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