• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * DVB USB Linux driver for Afatech AF9015 DVB-T USB2.0 receiver
3  *
4  * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
5  *
6  * Thanks to Afatech who kindly provided information.
7  *
8  *    This program is free software; you can redistribute it and/or modify
9  *    it under the terms of the GNU General Public License as published by
10  *    the Free Software Foundation; either version 2 of the License, or
11  *    (at your option) any later version.
12  *
13  *    This program is distributed in the hope that it will be useful,
14  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *    GNU General Public License for more details.
17  *
18  *    You should have received a copy of the GNU General Public License
19  *    along with this program; if not, write to the Free Software
20  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21  *
22  */
23 
24 #ifndef _DVB_USB_AF9015_H_
25 #define _DVB_USB_AF9015_H_
26 
27 #define DVB_USB_LOG_PREFIX "af9015"
28 #include "dvb-usb.h"
29 
30 #define deb_info(args...) dprintk(dvb_usb_af9015_debug, 0x01, args)
31 #define deb_rc(args...)   dprintk(dvb_usb_af9015_debug, 0x02, args)
32 #define deb_xfer(args...) dprintk(dvb_usb_af9015_debug, 0x04, args)
33 #define deb_reg(args...)  dprintk(dvb_usb_af9015_debug, 0x08, args)
34 #define deb_i2c(args...)  dprintk(dvb_usb_af9015_debug, 0x10, args)
35 #define deb_fw(args...)   dprintk(dvb_usb_af9015_debug, 0x20, args)
36 
37 #define AF9015_I2C_EEPROM  0xa0
38 #define AF9015_I2C_DEMOD   0x38
39 #define AF9015_USB_TIMEOUT 2000
40 
41 /* EEPROM locations */
42 #define AF9015_EEPROM_IR_MODE        0x18
43 #define AF9015_EEPROM_IR_REMOTE_TYPE 0x34
44 #define AF9015_EEPROM_TS_MODE        0x31
45 #define AF9015_EEPROM_DEMOD2_I2C     0x32
46 
47 #define AF9015_EEPROM_SAW_BW1        0x35
48 #define AF9015_EEPROM_XTAL_TYPE1     0x36
49 #define AF9015_EEPROM_SPEC_INV1      0x37
50 #define AF9015_EEPROM_IF1L           0x38
51 #define AF9015_EEPROM_IF1H           0x39
52 #define AF9015_EEPROM_MT2060_IF1L    0x3a
53 #define AF9015_EEPROM_MT2060_IF1H    0x3b
54 #define AF9015_EEPROM_TUNER_ID1      0x3c
55 
56 #define AF9015_EEPROM_SAW_BW2        0x45
57 #define AF9015_EEPROM_XTAL_TYPE2     0x46
58 #define AF9015_EEPROM_SPEC_INV2      0x47
59 #define AF9015_EEPROM_IF2L           0x48
60 #define AF9015_EEPROM_IF2H           0x49
61 #define AF9015_EEPROM_MT2060_IF2L    0x4a
62 #define AF9015_EEPROM_MT2060_IF2H    0x4b
63 #define AF9015_EEPROM_TUNER_ID2      0x4c
64 
65 #define AF9015_EEPROM_OFFSET (AF9015_EEPROM_SAW_BW2 - AF9015_EEPROM_SAW_BW1)
66 
67 #define AF9015_GPIO_ON (1 << 0)
68 #define AF9015_GPIO_EN (1 << 1)
69 #define AF9015_GPIO_O  (1 << 2)
70 #define AF9015_GPIO_I  (1 << 3)
71 
72 #define AF9015_GPIO_TUNER_ON  (AF9015_GPIO_ON|AF9015_GPIO_EN)
73 #define AF9015_GPIO_TUNER_OFF (AF9015_GPIO_ON|AF9015_GPIO_EN|AF9015_GPIO_O)
74 
75 struct req_t {
76 	u8  cmd;       /* [0] */
77 	/*  seq */     /* [1] */
78 	u8  i2c_addr;  /* [2] */
79 	u16 addr;      /* [3|4] */
80 	u8  mbox;      /* [5] */
81 	u8  addr_len;  /* [6] */
82 	u8  data_len;  /* [7] */
83 	u8  *data;
84 };
85 
86 enum af9015_cmd {
87 	GET_CONFIG           = 0x10,
88 	DOWNLOAD_FIRMWARE    = 0x11,
89 	BOOT                 = 0x13,
90 	READ_MEMORY          = 0x20,
91 	WRITE_MEMORY         = 0x21,
92 	READ_WRITE_I2C       = 0x22,
93 	COPY_FIRMWARE        = 0x23,
94 	RECONNECT_USB        = 0x5a,
95 	WRITE_VIRTUAL_MEMORY = 0x26,
96 	GET_IR_CODE          = 0x27,
97 	READ_I2C,
98 	WRITE_I2C,
99 };
100 
101 enum af9015_ir_mode {
102 	AF9015_IR_MODE_DISABLED = 0,
103 	AF9015_IR_MODE_HID,
104 	AF9015_IR_MODE_RLC,
105 	AF9015_IR_MODE_RC6,
106 };
107 
108 struct af9015_state {
109 	struct i2c_adapter i2c_adap; /* I2C adapter for 2nd FE */
110 };
111 
112 struct af9015_config {
113 	u8  dual_mode:1;
114 	u16 mt2060_if1[2];
115 	u16 firmware_size;
116 	u16 firmware_checksum;
117 	u8  *ir_table;
118 	u16 ir_table_size;
119 };
120 
121 enum af9015_remote {
122 	AF9015_REMOTE_NONE                    = 0,
123 	AF9015_REMOTE_A_LINK_DTU_M,
124 	AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
125 	AF9015_REMOTE_MYGICTV_U718,
126 	AF9015_REMOTE_DIGITTRADE_DVB_T,
127 };
128 
129 /* Leadtek WinFast DTV Dongle Gold */
130 static struct dvb_usb_rc_key af9015_rc_keys_leadtek[] = {
131 	{ 0x00, 0x1e, KEY_1 },
132 	{ 0x00, 0x1f, KEY_2 },
133 	{ 0x00, 0x20, KEY_3 },
134 	{ 0x00, 0x21, KEY_4 },
135 	{ 0x00, 0x22, KEY_5 },
136 	{ 0x00, 0x23, KEY_6 },
137 	{ 0x00, 0x24, KEY_7 },
138 	{ 0x00, 0x25, KEY_8 },
139 	{ 0x00, 0x26, KEY_9 },
140 	{ 0x00, 0x27, KEY_0 },
141 	{ 0x00, 0x28, KEY_ENTER },
142 	{ 0x00, 0x4f, KEY_VOLUMEUP },
143 	{ 0x00, 0x50, KEY_VOLUMEDOWN },
144 	{ 0x00, 0x51, KEY_CHANNELDOWN },
145 	{ 0x00, 0x52, KEY_CHANNELUP },
146 };
147 
148 static u8 af9015_ir_table_leadtek[] = {
149 	0x03, 0xfc, 0x00, 0xff, 0x1a, 0x01, 0x00,
150 	0x03, 0xfc, 0x56, 0xa9, 0x00, 0x00, 0x00,
151 	0x03, 0xfc, 0x4b, 0xb4, 0x00, 0x00, 0x00,
152 	0x03, 0xfc, 0x4c, 0xb3, 0xb2, 0x04, 0x00,
153 	0x03, 0xfc, 0x4d, 0xb2, 0x00, 0x00, 0x00,
154 	0x03, 0xfc, 0x4e, 0xb1, 0x00, 0x00, 0x00,
155 	0x03, 0xfc, 0x1f, 0xe0, 0x3d, 0x00, 0x00,
156 	0x03, 0xfc, 0x40, 0xbf, 0x13, 0x01, 0x00,
157 	0x03, 0xfc, 0x14, 0xeb, 0x10, 0x00, 0x00,
158 	0x03, 0xfc, 0x49, 0xb6, 0x05, 0x01, 0x00,
159 	0x03, 0xfc, 0x50, 0xaf, 0x29, 0x00, 0x00,
160 	0x03, 0xfc, 0x0c, 0xf3, 0x52, 0x00, 0x00,
161 	0x03, 0xfc, 0x03, 0xfc, 0x09, 0x00, 0x00,
162 	0x03, 0xfc, 0x08, 0xf7, 0x50, 0x00, 0x00,
163 	0x03, 0xfc, 0x13, 0xec, 0x28, 0x00, 0x00,
164 	0x03, 0xfc, 0x04, 0xfb, 0x4f, 0x00, 0x00,
165 	0x03, 0xfc, 0x4f, 0xb0, 0x0f, 0x01, 0x00,
166 	0x03, 0xfc, 0x10, 0xef, 0x51, 0x00, 0x00,
167 	0x03, 0xfc, 0x51, 0xae, 0x3f, 0x00, 0x00,
168 	0x03, 0xfc, 0x42, 0xbd, 0x13, 0x00, 0x00,
169 	0x03, 0xfc, 0x43, 0xbc, 0x00, 0x00, 0x00,
170 	0x03, 0xfc, 0x44, 0xbb, 0x11, 0x00, 0x00,
171 	0x03, 0xfc, 0x52, 0xad, 0x19, 0x00, 0x00,
172 	0x03, 0xfc, 0x54, 0xab, 0x05, 0x00, 0x00,
173 	0x03, 0xfc, 0x46, 0xb9, 0x29, 0x00, 0x00,
174 	0x03, 0xfc, 0x55, 0xaa, 0x2b, 0x00, 0x00,
175 	0x03, 0xfc, 0x53, 0xac, 0x41, 0x00, 0x00,
176 	0x03, 0xfc, 0x05, 0xfa, 0x1e, 0x00, 0x00,
177 	0x03, 0xfc, 0x06, 0xf9, 0x1f, 0x00, 0x00,
178 	0x03, 0xfc, 0x07, 0xf8, 0x20, 0x00, 0x00,
179 	0x03, 0xfc, 0x1e, 0xe1, 0x19, 0x00, 0x00,
180 	0x03, 0xfc, 0x09, 0xf6, 0x21, 0x00, 0x00,
181 	0x03, 0xfc, 0x0a, 0xf5, 0x22, 0x00, 0x00,
182 	0x03, 0xfc, 0x0b, 0xf4, 0x23, 0x00, 0x00,
183 	0x03, 0xfc, 0x1b, 0xe4, 0x16, 0x00, 0x00,
184 	0x03, 0xfc, 0x0d, 0xf2, 0x24, 0x00, 0x00,
185 	0x03, 0xfc, 0x0e, 0xf1, 0x25, 0x00, 0x00,
186 	0x03, 0xfc, 0x0f, 0xf0, 0x26, 0x00, 0x00,
187 	0x03, 0xfc, 0x16, 0xe9, 0x28, 0x00, 0x00,
188 	0x03, 0xfc, 0x41, 0xbe, 0x37, 0x00, 0x00,
189 	0x03, 0xfc, 0x12, 0xed, 0x27, 0x00, 0x00,
190 	0x03, 0xfc, 0x11, 0xee, 0x2a, 0x00, 0x00,
191 	0x03, 0xfc, 0x48, 0xb7, 0x2c, 0x00, 0x00,
192 	0x03, 0xfc, 0x4a, 0xb5, 0x3c, 0x00, 0x00,
193 	0x03, 0xfc, 0x47, 0xb8, 0x15, 0x01, 0x00,
194 	0x03, 0xfc, 0x45, 0xba, 0x0b, 0x01, 0x00,
195 	0x03, 0xfc, 0x5e, 0xa1, 0x43, 0x00, 0x00,
196 	0x03, 0xfc, 0x5a, 0xa5, 0x42, 0x00, 0x00,
197 	0x03, 0xfc, 0x5b, 0xa4, 0x4b, 0x00, 0x00,
198 	0x03, 0xfc, 0x5f, 0xa0, 0x4e, 0x00, 0x00,
199 };
200 
201 /* TwinHan AzureWave AD-TU700(704J) */
202 static struct dvb_usb_rc_key af9015_rc_keys_twinhan[] = {
203 	{ 0x05, 0x3f, KEY_POWER },
204 	{ 0x00, 0x19, KEY_FAVORITES },    /* Favorite List */
205 	{ 0x00, 0x04, KEY_TEXT },         /* Teletext */
206 	{ 0x00, 0x0e, KEY_POWER },
207 	{ 0x00, 0x0e, KEY_INFO },         /* Preview */
208 	{ 0x00, 0x08, KEY_EPG },          /* Info/EPG */
209 	{ 0x00, 0x0f, KEY_LIST },         /* Record List */
210 	{ 0x00, 0x1e, KEY_1 },
211 	{ 0x00, 0x1f, KEY_2 },
212 	{ 0x00, 0x20, KEY_3 },
213 	{ 0x00, 0x21, KEY_4 },
214 	{ 0x00, 0x22, KEY_5 },
215 	{ 0x00, 0x23, KEY_6 },
216 	{ 0x00, 0x24, KEY_7 },
217 	{ 0x00, 0x25, KEY_8 },
218 	{ 0x00, 0x26, KEY_9 },
219 	{ 0x00, 0x27, KEY_0 },
220 	{ 0x00, 0x29, KEY_CANCEL },       /* Cancel */
221 	{ 0x00, 0x4c, KEY_CLEAR },        /* Clear */
222 	{ 0x00, 0x2a, KEY_BACK },         /* Back */
223 	{ 0x00, 0x2b, KEY_TAB },          /* Tab */
224 	{ 0x00, 0x52, KEY_UP },           /* up arrow */
225 	{ 0x00, 0x51, KEY_DOWN },         /* down arrow */
226 	{ 0x00, 0x4f, KEY_RIGHT },        /* right arrow */
227 	{ 0x00, 0x50, KEY_LEFT },         /* left arrow */
228 	{ 0x00, 0x28, KEY_ENTER },        /* Enter / ok */
229 	{ 0x02, 0x52, KEY_VOLUMEUP },
230 	{ 0x02, 0x51, KEY_VOLUMEDOWN },
231 	{ 0x00, 0x4e, KEY_CHANNELDOWN },
232 	{ 0x00, 0x4b, KEY_CHANNELUP },
233 	{ 0x00, 0x4a, KEY_RECORD },
234 	{ 0x01, 0x11, KEY_PLAY },
235 	{ 0x00, 0x17, KEY_PAUSE },
236 	{ 0x00, 0x0c, KEY_REWIND },       /* FR << */
237 	{ 0x00, 0x11, KEY_FASTFORWARD },  /* FF >> */
238 	{ 0x01, 0x15, KEY_PREVIOUS },     /* Replay */
239 	{ 0x01, 0x0e, KEY_NEXT },         /* Skip */
240 	{ 0x00, 0x13, KEY_CAMERA },       /* Capture */
241 	{ 0x01, 0x0f, KEY_LANGUAGE },     /* SAP */
242 	{ 0x01, 0x13, KEY_TV2 },          /* PIP */
243 	{ 0x00, 0x1d, KEY_ZOOM },         /* Full Screen */
244 	{ 0x01, 0x17, KEY_SUBTITLE },     /* Subtitle / CC */
245 	{ 0x00, 0x10, KEY_MUTE },
246 	{ 0x01, 0x19, KEY_AUDIO },        /* L/R */ /* TODO better event */
247 	{ 0x01, 0x16, KEY_SLEEP },        /* Hibernate */
248 	{ 0x01, 0x16, KEY_SWITCHVIDEOMODE },
249 					  /* A/V */ /* TODO does not work */
250 	{ 0x00, 0x06, KEY_AGAIN },        /* Recall */
251 	{ 0x01, 0x16, KEY_KPPLUS },       /* Zoom+ */ /* TODO does not work */
252 	{ 0x01, 0x16, KEY_KPMINUS },      /* Zoom- */ /* TODO does not work */
253 	{ 0x02, 0x15, KEY_RED },
254 	{ 0x02, 0x0a, KEY_GREEN },
255 	{ 0x02, 0x1c, KEY_YELLOW },
256 	{ 0x02, 0x05, KEY_BLUE },
257 };
258 
259 static u8 af9015_ir_table_twinhan[] = {
260 	0x00, 0xff, 0x16, 0xe9, 0x3f, 0x05, 0x00,
261 	0x00, 0xff, 0x07, 0xf8, 0x16, 0x01, 0x00,
262 	0x00, 0xff, 0x14, 0xeb, 0x11, 0x01, 0x00,
263 	0x00, 0xff, 0x1a, 0xe5, 0x4d, 0x00, 0x00,
264 	0x00, 0xff, 0x4c, 0xb3, 0x17, 0x00, 0x00,
265 	0x00, 0xff, 0x12, 0xed, 0x11, 0x00, 0x00,
266 	0x00, 0xff, 0x40, 0xbf, 0x0c, 0x00, 0x00,
267 	0x00, 0xff, 0x11, 0xee, 0x4a, 0x00, 0x00,
268 	0x00, 0xff, 0x54, 0xab, 0x13, 0x00, 0x00,
269 	0x00, 0xff, 0x41, 0xbe, 0x15, 0x01, 0x00,
270 	0x00, 0xff, 0x42, 0xbd, 0x0e, 0x01, 0x00,
271 	0x00, 0xff, 0x43, 0xbc, 0x17, 0x01, 0x00,
272 	0x00, 0xff, 0x50, 0xaf, 0x0f, 0x01, 0x00,
273 	0x00, 0xff, 0x4d, 0xb2, 0x1d, 0x00, 0x00,
274 	0x00, 0xff, 0x47, 0xb8, 0x13, 0x01, 0x00,
275 	0x00, 0xff, 0x05, 0xfa, 0x4b, 0x00, 0x00,
276 	0x00, 0xff, 0x02, 0xfd, 0x4e, 0x00, 0x00,
277 	0x00, 0xff, 0x0e, 0xf1, 0x06, 0x00, 0x00,
278 	0x00, 0xff, 0x1e, 0xe1, 0x52, 0x02, 0x00,
279 	0x00, 0xff, 0x0a, 0xf5, 0x51, 0x02, 0x00,
280 	0x00, 0xff, 0x10, 0xef, 0x10, 0x00, 0x00,
281 	0x00, 0xff, 0x49, 0xb6, 0x19, 0x01, 0x00,
282 	0x00, 0xff, 0x15, 0xea, 0x27, 0x00, 0x00,
283 	0x00, 0xff, 0x03, 0xfc, 0x1e, 0x00, 0x00,
284 	0x00, 0xff, 0x01, 0xfe, 0x1f, 0x00, 0x00,
285 	0x00, 0xff, 0x06, 0xf9, 0x20, 0x00, 0x00,
286 	0x00, 0xff, 0x09, 0xf6, 0x21, 0x00, 0x00,
287 	0x00, 0xff, 0x1d, 0xe2, 0x22, 0x00, 0x00,
288 	0x00, 0xff, 0x1f, 0xe0, 0x23, 0x00, 0x00,
289 	0x00, 0xff, 0x0d, 0xf2, 0x24, 0x00, 0x00,
290 	0x00, 0xff, 0x19, 0xe6, 0x25, 0x00, 0x00,
291 	0x00, 0xff, 0x1b, 0xe4, 0x26, 0x00, 0x00,
292 	0x00, 0xff, 0x00, 0xff, 0x2b, 0x00, 0x00,
293 	0x00, 0xff, 0x4a, 0xb5, 0x4c, 0x00, 0x00,
294 	0x00, 0xff, 0x4b, 0xb4, 0x52, 0x00, 0x00,
295 	0x00, 0xff, 0x51, 0xae, 0x51, 0x00, 0x00,
296 	0x00, 0xff, 0x52, 0xad, 0x4f, 0x00, 0x00,
297 	0x00, 0xff, 0x4e, 0xb1, 0x50, 0x00, 0x00,
298 	0x00, 0xff, 0x0c, 0xf3, 0x29, 0x00, 0x00,
299 	0x00, 0xff, 0x4f, 0xb0, 0x28, 0x00, 0x00,
300 	0x00, 0xff, 0x13, 0xec, 0x2a, 0x00, 0x00,
301 	0x00, 0xff, 0x17, 0xe8, 0x19, 0x00, 0x00,
302 	0x00, 0xff, 0x04, 0xfb, 0x0f, 0x00, 0x00,
303 	0x00, 0xff, 0x48, 0xb7, 0x0e, 0x00, 0x00,
304 	0x00, 0xff, 0x0f, 0xf0, 0x04, 0x00, 0x00,
305 	0x00, 0xff, 0x1c, 0xe3, 0x08, 0x00, 0x00,
306 	0x00, 0xff, 0x18, 0xe7, 0x15, 0x02, 0x00,
307 	0x00, 0xff, 0x53, 0xac, 0x0a, 0x02, 0x00,
308 	0x00, 0xff, 0x5e, 0xa1, 0x1c, 0x02, 0x00,
309 	0x00, 0xff, 0x5f, 0xa0, 0x05, 0x02, 0x00,
310 };
311 
312 /* A-Link DTU(m) */
313 static struct dvb_usb_rc_key af9015_rc_keys_a_link[] = {
314 	{ 0x00, 0x1e, KEY_1 },
315 	{ 0x00, 0x1f, KEY_2 },
316 	{ 0x00, 0x20, KEY_3 },
317 	{ 0x00, 0x21, KEY_4 },
318 	{ 0x00, 0x22, KEY_5 },
319 	{ 0x00, 0x23, KEY_6 },
320 	{ 0x00, 0x24, KEY_7 },
321 	{ 0x00, 0x25, KEY_8 },
322 	{ 0x00, 0x26, KEY_9 },
323 	{ 0x00, 0x27, KEY_0 },
324 	{ 0x00, 0x2e, KEY_CHANNELUP },
325 	{ 0x00, 0x2d, KEY_CHANNELDOWN },
326 	{ 0x04, 0x28, KEY_ZOOM },
327 	{ 0x00, 0x41, KEY_MUTE },
328 	{ 0x00, 0x42, KEY_VOLUMEDOWN },
329 	{ 0x00, 0x43, KEY_VOLUMEUP },
330 	{ 0x00, 0x44, KEY_GOTO },         /* jump */
331 	{ 0x05, 0x45, KEY_POWER },
332 };
333 
334 static u8 af9015_ir_table_a_link[] = {
335 	0x08, 0xf7, 0x12, 0xed, 0x45, 0x05, 0x00, /* power */
336 	0x08, 0xf7, 0x1a, 0xe5, 0x41, 0x00, 0x00, /* mute */
337 	0x08, 0xf7, 0x01, 0xfe, 0x1e, 0x00, 0x00, /* 1 */
338 	0x08, 0xf7, 0x1c, 0xe3, 0x21, 0x00, 0x00, /* 4 */
339 	0x08, 0xf7, 0x03, 0xfc, 0x24, 0x00, 0x00, /* 7 */
340 	0x08, 0xf7, 0x05, 0xfa, 0x28, 0x04, 0x00, /* zoom */
341 	0x08, 0xf7, 0x00, 0xff, 0x43, 0x00, 0x00, /* volume up */
342 	0x08, 0xf7, 0x16, 0xe9, 0x42, 0x00, 0x00, /* volume down */
343 	0x08, 0xf7, 0x0f, 0xf0, 0x1f, 0x00, 0x00, /* 2 */
344 	0x08, 0xf7, 0x0d, 0xf2, 0x22, 0x00, 0x00, /* 5 */
345 	0x08, 0xf7, 0x1b, 0xe4, 0x25, 0x00, 0x00, /* 8 */
346 	0x08, 0xf7, 0x06, 0xf9, 0x27, 0x00, 0x00, /* 0 */
347 	0x08, 0xf7, 0x14, 0xeb, 0x2e, 0x00, 0x00, /* channel up */
348 	0x08, 0xf7, 0x1d, 0xe2, 0x2d, 0x00, 0x00, /* channel down */
349 	0x08, 0xf7, 0x02, 0xfd, 0x20, 0x00, 0x00, /* 3 */
350 	0x08, 0xf7, 0x18, 0xe7, 0x23, 0x00, 0x00, /* 6 */
351 	0x08, 0xf7, 0x04, 0xfb, 0x26, 0x00, 0x00, /* 9 */
352 	0x08, 0xf7, 0x07, 0xf8, 0x44, 0x00, 0x00, /* jump */
353 };
354 
355 /* MSI DIGIVOX mini II V3.0 */
356 static struct dvb_usb_rc_key af9015_rc_keys_msi[] = {
357 	{ 0x00, 0x1e, KEY_1 },
358 	{ 0x00, 0x1f, KEY_2 },
359 	{ 0x00, 0x20, KEY_3 },
360 	{ 0x00, 0x21, KEY_4 },
361 	{ 0x00, 0x22, KEY_5 },
362 	{ 0x00, 0x23, KEY_6 },
363 	{ 0x00, 0x24, KEY_7 },
364 	{ 0x00, 0x25, KEY_8 },
365 	{ 0x00, 0x26, KEY_9 },
366 	{ 0x00, 0x27, KEY_0 },
367 	{ 0x03, 0x0f, KEY_CHANNELUP },
368 	{ 0x03, 0x0e, KEY_CHANNELDOWN },
369 	{ 0x00, 0x42, KEY_VOLUMEDOWN },
370 	{ 0x00, 0x43, KEY_VOLUMEUP },
371 	{ 0x05, 0x45, KEY_POWER },
372 	{ 0x00, 0x52, KEY_UP },           /* up */
373 	{ 0x00, 0x51, KEY_DOWN },         /* down */
374 	{ 0x00, 0x28, KEY_ENTER },
375 };
376 
377 static u8 af9015_ir_table_msi[] = {
378 	0x03, 0xfc, 0x17, 0xe8, 0x45, 0x05, 0x00, /* power */
379 	0x03, 0xfc, 0x0d, 0xf2, 0x51, 0x00, 0x00, /* down */
380 	0x03, 0xfc, 0x03, 0xfc, 0x52, 0x00, 0x00, /* up */
381 	0x03, 0xfc, 0x1a, 0xe5, 0x1e, 0x00, 0x00, /* 1 */
382 	0x03, 0xfc, 0x02, 0xfd, 0x1f, 0x00, 0x00, /* 2 */
383 	0x03, 0xfc, 0x04, 0xfb, 0x20, 0x00, 0x00, /* 3 */
384 	0x03, 0xfc, 0x1c, 0xe3, 0x21, 0x00, 0x00, /* 4 */
385 	0x03, 0xfc, 0x08, 0xf7, 0x22, 0x00, 0x00, /* 5 */
386 	0x03, 0xfc, 0x1d, 0xe2, 0x23, 0x00, 0x00, /* 6 */
387 	0x03, 0xfc, 0x11, 0xee, 0x24, 0x00, 0x00, /* 7 */
388 	0x03, 0xfc, 0x0b, 0xf4, 0x25, 0x00, 0x00, /* 8 */
389 	0x03, 0xfc, 0x10, 0xef, 0x26, 0x00, 0x00, /* 9 */
390 	0x03, 0xfc, 0x09, 0xf6, 0x27, 0x00, 0x00, /* 0 */
391 	0x03, 0xfc, 0x14, 0xeb, 0x43, 0x00, 0x00, /* volume up */
392 	0x03, 0xfc, 0x1f, 0xe0, 0x42, 0x00, 0x00, /* volume down */
393 	0x03, 0xfc, 0x15, 0xea, 0x0f, 0x03, 0x00, /* channel up */
394 	0x03, 0xfc, 0x05, 0xfa, 0x0e, 0x03, 0x00, /* channel down */
395 	0x03, 0xfc, 0x16, 0xe9, 0x28, 0x00, 0x00, /* enter */
396 };
397 
398 /* MYGICTV U718 */
399 static struct dvb_usb_rc_key af9015_rc_keys_mygictv[] = {
400 	{ 0x00, 0x3d, KEY_SWITCHVIDEOMODE },
401 					  /* TV / AV */
402 	{ 0x05, 0x45, KEY_POWER },
403 	{ 0x00, 0x1e, KEY_1 },
404 	{ 0x00, 0x1f, KEY_2 },
405 	{ 0x00, 0x20, KEY_3 },
406 	{ 0x00, 0x21, KEY_4 },
407 	{ 0x00, 0x22, KEY_5 },
408 	{ 0x00, 0x23, KEY_6 },
409 	{ 0x00, 0x24, KEY_7 },
410 	{ 0x00, 0x25, KEY_8 },
411 	{ 0x00, 0x26, KEY_9 },
412 	{ 0x00, 0x27, KEY_0 },
413 	{ 0x00, 0x41, KEY_MUTE },
414 	{ 0x00, 0x2a, KEY_ESC },          /* Esc */
415 	{ 0x00, 0x2e, KEY_CHANNELUP },
416 	{ 0x00, 0x2d, KEY_CHANNELDOWN },
417 	{ 0x00, 0x42, KEY_VOLUMEDOWN },
418 	{ 0x00, 0x43, KEY_VOLUMEUP },
419 	{ 0x00, 0x52, KEY_UP },           /* up arrow */
420 	{ 0x00, 0x51, KEY_DOWN },         /* down arrow */
421 	{ 0x00, 0x4f, KEY_RIGHT },        /* right arrow */
422 	{ 0x00, 0x50, KEY_LEFT },         /* left arrow */
423 	{ 0x00, 0x28, KEY_ENTER },        /* ok */
424 	{ 0x01, 0x15, KEY_RECORD },
425 	{ 0x03, 0x13, KEY_PLAY },
426 	{ 0x01, 0x13, KEY_PAUSE },
427 	{ 0x01, 0x16, KEY_STOP },
428 	{ 0x03, 0x07, KEY_REWIND },       /* FR << */
429 	{ 0x03, 0x09, KEY_FASTFORWARD },  /* FF >> */
430 	{ 0x00, 0x3b, KEY_TIME },         /* TimeShift */
431 	{ 0x00, 0x3e, KEY_CAMERA },       /* Snapshot */
432 	{ 0x03, 0x16, KEY_CYCLEWINDOWS }, /* yellow, min / max */
433 	{ 0x00, 0x00, KEY_ZOOM },         /* 'select' (?) */
434 	{ 0x03, 0x16, KEY_SHUFFLE },      /* Shuffle */
435 	{ 0x03, 0x45, KEY_POWER },
436 };
437 
438 static u8 af9015_ir_table_mygictv[] = {
439 	0x02, 0xbd, 0x0c, 0xf3, 0x3d, 0x00, 0x00, /* TV / AV */
440 	0x02, 0xbd, 0x14, 0xeb, 0x45, 0x05, 0x00, /* power */
441 	0x02, 0xbd, 0x00, 0xff, 0x1e, 0x00, 0x00, /* 1 */
442 	0x02, 0xbd, 0x01, 0xfe, 0x1f, 0x00, 0x00, /* 2 */
443 	0x02, 0xbd, 0x02, 0xfd, 0x20, 0x00, 0x00, /* 3 */
444 	0x02, 0xbd, 0x03, 0xfc, 0x21, 0x00, 0x00, /* 4 */
445 	0x02, 0xbd, 0x04, 0xfb, 0x22, 0x00, 0x00, /* 5 */
446 	0x02, 0xbd, 0x05, 0xfa, 0x23, 0x00, 0x00, /* 6 */
447 	0x02, 0xbd, 0x06, 0xf9, 0x24, 0x00, 0x00, /* 7 */
448 	0x02, 0xbd, 0x07, 0xf8, 0x25, 0x00, 0x00, /* 8 */
449 	0x02, 0xbd, 0x08, 0xf7, 0x26, 0x00, 0x00, /* 9 */
450 	0x02, 0xbd, 0x09, 0xf6, 0x27, 0x00, 0x00, /* 0 */
451 	0x02, 0xbd, 0x0a, 0xf5, 0x41, 0x00, 0x00, /* mute */
452 	0x02, 0xbd, 0x1c, 0xe3, 0x2a, 0x00, 0x00, /* esc */
453 	0x02, 0xbd, 0x1f, 0xe0, 0x43, 0x00, 0x00, /* volume up */
454 	0x02, 0xbd, 0x12, 0xed, 0x52, 0x00, 0x00, /* up arrow */
455 	0x02, 0xbd, 0x11, 0xee, 0x50, 0x00, 0x00, /* left arrow */
456 	0x02, 0xbd, 0x15, 0xea, 0x28, 0x00, 0x00, /* ok */
457 	0x02, 0xbd, 0x10, 0xef, 0x4f, 0x00, 0x00, /* right arrow */
458 	0x02, 0xbd, 0x13, 0xec, 0x51, 0x00, 0x00, /* down arrow */
459 	0x02, 0xbd, 0x0e, 0xf1, 0x42, 0x00, 0x00, /* volume down */
460 	0x02, 0xbd, 0x19, 0xe6, 0x15, 0x01, 0x00, /* record */
461 	0x02, 0xbd, 0x1e, 0xe1, 0x13, 0x03, 0x00, /* play */
462 	0x02, 0xbd, 0x16, 0xe9, 0x16, 0x01, 0x00, /* stop */
463 	0x02, 0xbd, 0x0b, 0xf4, 0x28, 0x04, 0x00, /* yellow, min / max */
464 	0x02, 0xbd, 0x0f, 0xf0, 0x3b, 0x00, 0x00, /* time shift */
465 	0x02, 0xbd, 0x18, 0xe7, 0x2e, 0x00, 0x00, /* channel up */
466 	0x02, 0xbd, 0x1a, 0xe5, 0x2d, 0x00, 0x00, /* channel down */
467 	0x02, 0xbd, 0x17, 0xe8, 0x3e, 0x00, 0x00, /* snapshot */
468 	0x02, 0xbd, 0x40, 0xbf, 0x13, 0x01, 0x00, /* pause */
469 	0x02, 0xbd, 0x41, 0xbe, 0x09, 0x03, 0x00, /* FF >> */
470 	0x02, 0xbd, 0x42, 0xbd, 0x07, 0x03, 0x00, /* FR << */
471 	0x02, 0xbd, 0x43, 0xbc, 0x00, 0x00, 0x00, /* 'select' (?) */
472 	0x02, 0xbd, 0x44, 0xbb, 0x16, 0x03, 0x00, /* shuffle */
473 	0x02, 0xbd, 0x45, 0xba, 0x45, 0x03, 0x00, /* power */
474 };
475 
476 /* KWorld PlusTV Dual DVB-T Stick (DVB-T 399U) */
477 static u8 af9015_ir_table_kworld[] = {
478 	0x86, 0x6b, 0x0c, 0xf3, 0x2e, 0x07, 0x00,
479 	0x86, 0x6b, 0x16, 0xe9, 0x2d, 0x07, 0x00,
480 	0x86, 0x6b, 0x1d, 0xe2, 0x37, 0x07, 0x00,
481 	0x86, 0x6b, 0x00, 0xff, 0x1e, 0x07, 0x00,
482 	0x86, 0x6b, 0x01, 0xfe, 0x1f, 0x07, 0x00,
483 	0x86, 0x6b, 0x02, 0xfd, 0x20, 0x07, 0x00,
484 	0x86, 0x6b, 0x03, 0xfc, 0x21, 0x07, 0x00,
485 	0x86, 0x6b, 0x04, 0xfb, 0x22, 0x07, 0x00,
486 	0x86, 0x6b, 0x05, 0xfa, 0x23, 0x07, 0x00,
487 	0x86, 0x6b, 0x06, 0xf9, 0x24, 0x07, 0x00,
488 	0x86, 0x6b, 0x07, 0xf8, 0x25, 0x07, 0x00,
489 	0x86, 0x6b, 0x08, 0xf7, 0x26, 0x07, 0x00,
490 	0x86, 0x6b, 0x09, 0xf6, 0x4d, 0x07, 0x00,
491 	0x86, 0x6b, 0x0a, 0xf5, 0x4e, 0x07, 0x00,
492 	0x86, 0x6b, 0x14, 0xeb, 0x4f, 0x07, 0x00,
493 	0x86, 0x6b, 0x1e, 0xe1, 0x50, 0x07, 0x00,
494 	0x86, 0x6b, 0x17, 0xe8, 0x52, 0x07, 0x00,
495 	0x86, 0x6b, 0x1f, 0xe0, 0x51, 0x07, 0x00,
496 	0x86, 0x6b, 0x0e, 0xf1, 0x0b, 0x07, 0x00,
497 	0x86, 0x6b, 0x20, 0xdf, 0x0c, 0x07, 0x00,
498 	0x86, 0x6b, 0x42, 0xbd, 0x0d, 0x07, 0x00,
499 	0x86, 0x6b, 0x0b, 0xf4, 0x0e, 0x07, 0x00,
500 	0x86, 0x6b, 0x43, 0xbc, 0x0f, 0x07, 0x00,
501 	0x86, 0x6b, 0x10, 0xef, 0x10, 0x07, 0x00,
502 	0x86, 0x6b, 0x21, 0xde, 0x11, 0x07, 0x00,
503 	0x86, 0x6b, 0x13, 0xec, 0x12, 0x07, 0x00,
504 	0x86, 0x6b, 0x11, 0xee, 0x13, 0x07, 0x00,
505 	0x86, 0x6b, 0x12, 0xed, 0x14, 0x07, 0x00,
506 	0x86, 0x6b, 0x19, 0xe6, 0x15, 0x07, 0x00,
507 	0x86, 0x6b, 0x1a, 0xe5, 0x16, 0x07, 0x00,
508 	0x86, 0x6b, 0x1b, 0xe4, 0x17, 0x07, 0x00,
509 	0x86, 0x6b, 0x4b, 0xb4, 0x18, 0x07, 0x00,
510 	0x86, 0x6b, 0x40, 0xbf, 0x19, 0x07, 0x00,
511 	0x86, 0x6b, 0x44, 0xbb, 0x1a, 0x07, 0x00,
512 	0x86, 0x6b, 0x41, 0xbe, 0x1b, 0x07, 0x00,
513 	0x86, 0x6b, 0x22, 0xdd, 0x1c, 0x07, 0x00,
514 	0x86, 0x6b, 0x15, 0xea, 0x1d, 0x07, 0x00,
515 	0x86, 0x6b, 0x0f, 0xf0, 0x3f, 0x07, 0x00,
516 	0x86, 0x6b, 0x1c, 0xe3, 0x40, 0x07, 0x00,
517 	0x86, 0x6b, 0x4a, 0xb5, 0x41, 0x07, 0x00,
518 	0x86, 0x6b, 0x48, 0xb7, 0x42, 0x07, 0x00,
519 	0x86, 0x6b, 0x49, 0xb6, 0x43, 0x07, 0x00,
520 	0x86, 0x6b, 0x18, 0xe7, 0x44, 0x07, 0x00,
521 	0x86, 0x6b, 0x23, 0xdc, 0x45, 0x07, 0x00,
522 };
523 
524 /* AverMedia Volar X */
525 static struct dvb_usb_rc_key af9015_rc_keys_avermedia[] = {
526 	{ 0x05, 0x3d, KEY_PROG1 },       /* SOURCE */
527 	{ 0x05, 0x12, KEY_POWER },       /* POWER */
528 	{ 0x05, 0x1e, KEY_1 },           /* 1 */
529 	{ 0x05, 0x1f, KEY_2 },           /* 2 */
530 	{ 0x05, 0x20, KEY_3 },           /* 3 */
531 	{ 0x05, 0x21, KEY_4 },           /* 4 */
532 	{ 0x05, 0x22, KEY_5 },           /* 5 */
533 	{ 0x05, 0x23, KEY_6 },           /* 6 */
534 	{ 0x05, 0x24, KEY_7 },           /* 7 */
535 	{ 0x05, 0x25, KEY_8 },           /* 8 */
536 	{ 0x05, 0x26, KEY_9 },           /* 9 */
537 	{ 0x05, 0x3f, KEY_LEFT },        /* L / DISPLAY */
538 	{ 0x05, 0x27, KEY_0 },           /* 0 */
539 	{ 0x05, 0x0f, KEY_RIGHT },       /* R / CH RTN */
540 	{ 0x05, 0x18, KEY_PROG2 },       /* SNAP SHOT */
541 	{ 0x05, 0x1c, KEY_PROG3 },       /* 16-CH PREV */
542 	{ 0x05, 0x2d, KEY_VOLUMEDOWN },  /* VOL DOWN */
543 	{ 0x05, 0x3e, KEY_ZOOM },        /* FULL SCREEN */
544 	{ 0x05, 0x2e, KEY_VOLUMEUP },    /* VOL UP */
545 	{ 0x05, 0x10, KEY_MUTE },        /* MUTE */
546 	{ 0x05, 0x04, KEY_AUDIO },       /* AUDIO */
547 	{ 0x05, 0x15, KEY_RECORD },      /* RECORD */
548 	{ 0x05, 0x11, KEY_PLAY },        /* PLAY */
549 	{ 0x05, 0x16, KEY_STOP },        /* STOP */
550 	{ 0x05, 0x0c, KEY_PLAYPAUSE },   /* TIMESHIFT / PAUSE */
551 	{ 0x05, 0x05, KEY_BACK },        /* << / RED */
552 	{ 0x05, 0x09, KEY_FORWARD },     /* >> / YELLOW */
553 	{ 0x05, 0x17, KEY_TEXT },        /* TELETEXT */
554 	{ 0x05, 0x0a, KEY_EPG },         /* EPG */
555 	{ 0x05, 0x13, KEY_MENU },        /* MENU */
556 
557 	{ 0x05, 0x0e, KEY_CHANNELUP },   /* CH UP */
558 	{ 0x05, 0x0d, KEY_CHANNELDOWN }, /* CH DOWN */
559 	{ 0x05, 0x19, KEY_FIRST },       /* |<< / GREEN */
560 	{ 0x05, 0x08, KEY_LAST },        /* >>| / BLUE */
561 };
562 
563 static u8 af9015_ir_table_avermedia[] = {
564 	0x02, 0xfd, 0x00, 0xff, 0x12, 0x05, 0x00,
565 	0x02, 0xfd, 0x01, 0xfe, 0x3d, 0x05, 0x00,
566 	0x02, 0xfd, 0x03, 0xfc, 0x17, 0x05, 0x00,
567 	0x02, 0xfd, 0x04, 0xfb, 0x0a, 0x05, 0x00,
568 	0x02, 0xfd, 0x05, 0xfa, 0x1e, 0x05, 0x00,
569 	0x02, 0xfd, 0x06, 0xf9, 0x1f, 0x05, 0x00,
570 	0x02, 0xfd, 0x07, 0xf8, 0x20, 0x05, 0x00,
571 	0x02, 0xfd, 0x09, 0xf6, 0x21, 0x05, 0x00,
572 	0x02, 0xfd, 0x0a, 0xf5, 0x22, 0x05, 0x00,
573 	0x02, 0xfd, 0x0b, 0xf4, 0x23, 0x05, 0x00,
574 	0x02, 0xfd, 0x0d, 0xf2, 0x24, 0x05, 0x00,
575 	0x02, 0xfd, 0x0e, 0xf1, 0x25, 0x05, 0x00,
576 	0x02, 0xfd, 0x0f, 0xf0, 0x26, 0x05, 0x00,
577 	0x02, 0xfd, 0x11, 0xee, 0x27, 0x05, 0x00,
578 	0x02, 0xfd, 0x08, 0xf7, 0x04, 0x05, 0x00,
579 	0x02, 0xfd, 0x0c, 0xf3, 0x3e, 0x05, 0x00,
580 	0x02, 0xfd, 0x10, 0xef, 0x1c, 0x05, 0x00,
581 	0x02, 0xfd, 0x12, 0xed, 0x3f, 0x05, 0x00,
582 	0x02, 0xfd, 0x13, 0xec, 0x0f, 0x05, 0x00,
583 	0x02, 0xfd, 0x14, 0xeb, 0x10, 0x05, 0x00,
584 	0x02, 0xfd, 0x15, 0xea, 0x13, 0x05, 0x00,
585 	0x02, 0xfd, 0x17, 0xe8, 0x18, 0x05, 0x00,
586 	0x02, 0xfd, 0x18, 0xe7, 0x11, 0x05, 0x00,
587 	0x02, 0xfd, 0x19, 0xe6, 0x15, 0x05, 0x00,
588 	0x02, 0xfd, 0x1a, 0xe5, 0x0c, 0x05, 0x00,
589 	0x02, 0xfd, 0x1b, 0xe4, 0x16, 0x05, 0x00,
590 	0x02, 0xfd, 0x1c, 0xe3, 0x09, 0x05, 0x00,
591 	0x02, 0xfd, 0x1d, 0xe2, 0x05, 0x05, 0x00,
592 	0x02, 0xfd, 0x1e, 0xe1, 0x2d, 0x05, 0x00,
593 	0x02, 0xfd, 0x1f, 0xe0, 0x2e, 0x05, 0x00,
594 	0x03, 0xfc, 0x00, 0xff, 0x08, 0x05, 0x00,
595 	0x03, 0xfc, 0x01, 0xfe, 0x19, 0x05, 0x00,
596 	0x03, 0xfc, 0x02, 0xfd, 0x0d, 0x05, 0x00,
597 	0x03, 0xfc, 0x03, 0xfc, 0x0e, 0x05, 0x00,
598 };
599 
600 /* Digittrade DVB-T USB Stick */
601 static struct dvb_usb_rc_key af9015_rc_keys_digittrade[] = {
602 	{ 0x01, 0x0f, KEY_LAST },	/* RETURN */
603 	{ 0x05, 0x17, KEY_TEXT },	/* TELETEXT */
604 	{ 0x01, 0x08, KEY_EPG },	/* EPG */
605 	{ 0x05, 0x13, KEY_POWER },	/* POWER */
606 	{ 0x01, 0x09, KEY_ZOOM },	/* FULLSCREEN */
607 	{ 0x00, 0x40, KEY_AUDIO },	/* DUAL SOUND */
608 	{ 0x00, 0x2c, KEY_PRINT },	/* SNAPSHOT */
609 	{ 0x05, 0x16, KEY_SUBTITLE },	/* SUBTITLE */
610 	{ 0x00, 0x52, KEY_CHANNELUP },	/* CH Up */
611 	{ 0x00, 0x51, KEY_CHANNELDOWN },/* Ch Dn */
612 	{ 0x00, 0x57, KEY_VOLUMEUP },	/* Vol Up */
613 	{ 0x00, 0x56, KEY_VOLUMEDOWN },	/* Vol Dn */
614 	{ 0x01, 0x10, KEY_MUTE },	/* MUTE */
615 	{ 0x00, 0x27, KEY_0 },
616 	{ 0x00, 0x1e, KEY_1 },
617 	{ 0x00, 0x1f, KEY_2 },
618 	{ 0x00, 0x20, KEY_3 },
619 	{ 0x00, 0x21, KEY_4 },
620 	{ 0x00, 0x22, KEY_5 },
621 	{ 0x00, 0x23, KEY_6 },
622 	{ 0x00, 0x24, KEY_7 },
623 	{ 0x00, 0x25, KEY_8 },
624 	{ 0x00, 0x26, KEY_9 },
625 	{ 0x01, 0x17, KEY_PLAYPAUSE },	/* TIMESHIFT */
626 	{ 0x01, 0x15, KEY_RECORD },	/* RECORD */
627 	{ 0x03, 0x13, KEY_PLAY },	/* PLAY */
628 	{ 0x01, 0x16, KEY_STOP },	/* STOP */
629 	{ 0x01, 0x13, KEY_PAUSE },	/* PAUSE */
630 };
631 
632 static u8 af9015_ir_table_digittrade[] = {
633 	0x00, 0xff, 0x06, 0xf9, 0x13, 0x05, 0x00,
634 	0x00, 0xff, 0x4d, 0xb2, 0x17, 0x01, 0x00,
635 	0x00, 0xff, 0x1f, 0xe0, 0x2c, 0x00, 0x00,
636 	0x00, 0xff, 0x0a, 0xf5, 0x15, 0x01, 0x00,
637 	0x00, 0xff, 0x0e, 0xf1, 0x16, 0x01, 0x00,
638 	0x00, 0xff, 0x09, 0xf6, 0x09, 0x01, 0x00,
639 	0x00, 0xff, 0x01, 0xfe, 0x08, 0x01, 0x00,
640 	0x00, 0xff, 0x05, 0xfa, 0x10, 0x01, 0x00,
641 	0x00, 0xff, 0x02, 0xfd, 0x56, 0x00, 0x00,
642 	0x00, 0xff, 0x40, 0xbf, 0x57, 0x00, 0x00,
643 	0x00, 0xff, 0x19, 0xe6, 0x52, 0x00, 0x00,
644 	0x00, 0xff, 0x17, 0xe8, 0x51, 0x00, 0x00,
645 	0x00, 0xff, 0x10, 0xef, 0x0f, 0x01, 0x00,
646 	0x00, 0xff, 0x54, 0xab, 0x27, 0x00, 0x00,
647 	0x00, 0xff, 0x1b, 0xe4, 0x1e, 0x00, 0x00,
648 	0x00, 0xff, 0x11, 0xee, 0x1f, 0x00, 0x00,
649 	0x00, 0xff, 0x15, 0xea, 0x20, 0x00, 0x00,
650 	0x00, 0xff, 0x12, 0xed, 0x21, 0x00, 0x00,
651 	0x00, 0xff, 0x16, 0xe9, 0x22, 0x00, 0x00,
652 	0x00, 0xff, 0x4c, 0xb3, 0x23, 0x00, 0x00,
653 	0x00, 0xff, 0x48, 0xb7, 0x24, 0x00, 0x00,
654 	0x00, 0xff, 0x04, 0xfb, 0x25, 0x00, 0x00,
655 	0x00, 0xff, 0x00, 0xff, 0x26, 0x00, 0x00,
656 	0x00, 0xff, 0x1e, 0xe1, 0x13, 0x03, 0x00,
657 	0x00, 0xff, 0x1a, 0xe5, 0x13, 0x01, 0x00,
658 	0x00, 0xff, 0x03, 0xfc, 0x17, 0x05, 0x00,
659 	0x00, 0xff, 0x0d, 0xf2, 0x16, 0x05, 0x00,
660 	0x00, 0xff, 0x1d, 0xe2, 0x40, 0x00, 0x00,
661 };
662 
663 #endif
664