• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/media/dvb/dvb-usb/
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
67struct req_t {
68	u8  cmd;       /* [0] */
69	/*  seq */     /* [1] */
70	u8  i2c_addr;  /* [2] */
71	u16 addr;      /* [3|4] */
72	u8  mbox;      /* [5] */
73	u8  addr_len;  /* [6] */
74	u8  data_len;  /* [7] */
75	u8  *data;
76};
77
78enum af9015_cmd {
79	GET_CONFIG           = 0x10,
80	DOWNLOAD_FIRMWARE    = 0x11,
81	BOOT                 = 0x13,
82	READ_MEMORY          = 0x20,
83	WRITE_MEMORY         = 0x21,
84	READ_WRITE_I2C       = 0x22,
85	COPY_FIRMWARE        = 0x23,
86	RECONNECT_USB        = 0x5a,
87	WRITE_VIRTUAL_MEMORY = 0x26,
88	GET_IR_CODE          = 0x27,
89	READ_I2C,
90	WRITE_I2C,
91};
92
93enum af9015_ir_mode {
94	AF9015_IR_MODE_DISABLED = 0,
95	AF9015_IR_MODE_HID,
96	AF9015_IR_MODE_RLC,
97	AF9015_IR_MODE_RC6,
98	AF9015_IR_MODE_POLLING, /* just guess */
99};
100
101struct af9015_state {
102	struct i2c_adapter i2c_adap; /* I2C adapter for 2nd FE */
103};
104
105struct af9015_config {
106	u8  dual_mode:1;
107	u16 mt2060_if1[2];
108	u16 firmware_size;
109	u16 firmware_checksum;
110	u32 eeprom_sum;
111	u8  *ir_table;
112	u16 ir_table_size;
113};
114
115enum af9015_remote {
116	AF9015_REMOTE_NONE                    = 0,
117/* 1 */	AF9015_REMOTE_A_LINK_DTU_M,
118	AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
119	AF9015_REMOTE_MYGICTV_U718,
120	AF9015_REMOTE_DIGITTRADE_DVB_T,
121/* 5 */	AF9015_REMOTE_AVERMEDIA_KS,
122};
123
124/* LeadTek - Y04G0051 */
125/* Leadtek WinFast DTV Dongle Gold */
126static struct ir_scancode ir_codes_af9015_table_leadtek[] = {
127	{ 0x001e, KEY_1 },
128	{ 0x001f, KEY_2 },
129	{ 0x0020, KEY_3 },
130	{ 0x0021, KEY_4 },
131	{ 0x0022, KEY_5 },
132	{ 0x0023, KEY_6 },
133	{ 0x0024, KEY_7 },
134	{ 0x0025, KEY_8 },
135	{ 0x0026, KEY_9 },
136	{ 0x0027, KEY_0 },
137	{ 0x0028, KEY_OK },
138	{ 0x004f, KEY_RIGHT },
139	{ 0x0050, KEY_LEFT },
140	{ 0x0051, KEY_DOWN },
141	{ 0x0052, KEY_UP },
142	{ 0x011a, KEY_POWER2 },
143	{ 0x04b4, KEY_TV },
144	{ 0x04b3, KEY_RED },
145	{ 0x04b2, KEY_GREEN },
146	{ 0x04b1, KEY_YELLOW },
147	{ 0x04b0, KEY_BLUE },
148	{ 0x003d, KEY_TEXT },
149	{ 0x0113, KEY_SLEEP },
150	{ 0x0010, KEY_MUTE },
151	{ 0x0105, KEY_ESC },
152	{ 0x0009, KEY_SCREEN },
153	{ 0x010f, KEY_MENU },
154	{ 0x003f, KEY_CHANNEL },
155	{ 0x0013, KEY_REWIND },
156	{ 0x0012, KEY_PLAY },
157	{ 0x0011, KEY_FASTFORWARD },
158	{ 0x0005, KEY_PREVIOUS },
159	{ 0x0029, KEY_STOP },
160	{ 0x002b, KEY_NEXT },
161	{ 0x0041, KEY_EPG },
162	{ 0x0019, KEY_VIDEO },
163	{ 0x0016, KEY_AUDIO },
164	{ 0x0037, KEY_DOT },
165	{ 0x002a, KEY_AGAIN },
166	{ 0x002c, KEY_CAMERA },
167	{ 0x003c, KEY_NEW },
168	{ 0x0115, KEY_RECORD },
169	{ 0x010b, KEY_TIME },
170	{ 0x0043, KEY_VOLUMEUP },
171	{ 0x0042, KEY_VOLUMEDOWN },
172	{ 0x004b, KEY_CHANNELUP },
173	{ 0x004e, KEY_CHANNELDOWN },
174};
175
176static u8 af9015_ir_table_leadtek[] = {
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};
228
229/* TwinHan AzureWave AD-TU700(704J) */
230static struct ir_scancode ir_codes_af9015_table_twinhan[] = {
231	{ 0x053f, KEY_POWER },
232	{ 0x0019, KEY_FAVORITES },    /* Favorite List */
233	{ 0x0004, KEY_TEXT },         /* Teletext */
234	{ 0x000e, KEY_POWER },
235	{ 0x000e, KEY_INFO },         /* Preview */
236	{ 0x0008, KEY_EPG },          /* Info/EPG */
237	{ 0x000f, KEY_LIST },         /* Record List */
238	{ 0x001e, KEY_1 },
239	{ 0x001f, KEY_2 },
240	{ 0x0020, KEY_3 },
241	{ 0x0021, KEY_4 },
242	{ 0x0022, KEY_5 },
243	{ 0x0023, KEY_6 },
244	{ 0x0024, KEY_7 },
245	{ 0x0025, KEY_8 },
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 },
274	{ 0x0119, KEY_AUDIO },        /* L/R */ /* TODO better event */
275	{ 0x0116, KEY_SLEEP },        /* Hibernate */
276	{ 0x0116, KEY_SWITCHVIDEOMODE },
277					  /* A/V */ /* TODO does not work */
278	{ 0x0006, KEY_AGAIN },        /* Recall */
279	{ 0x0116, KEY_KPPLUS },       /* Zoom+ */ /* TODO does not work */
280	{ 0x0116, KEY_KPMINUS },      /* Zoom- */ /* TODO does not work */
281	{ 0x0215, KEY_RED },
282	{ 0x020a, KEY_GREEN },
283	{ 0x021c, KEY_YELLOW },
284	{ 0x0205, KEY_BLUE },
285};
286
287static u8 af9015_ir_table_twinhan[] = {
288	0x00, 0xff, 0x16, 0xe9, 0x3f, 0x05, 0x00,
289	0x00, 0xff, 0x07, 0xf8, 0x16, 0x01, 0x00,
290	0x00, 0xff, 0x14, 0xeb, 0x11, 0x01, 0x00,
291	0x00, 0xff, 0x1a, 0xe5, 0x4d, 0x00, 0x00,
292	0x00, 0xff, 0x4c, 0xb3, 0x17, 0x00, 0x00,
293	0x00, 0xff, 0x12, 0xed, 0x11, 0x00, 0x00,
294	0x00, 0xff, 0x40, 0xbf, 0x0c, 0x00, 0x00,
295	0x00, 0xff, 0x11, 0xee, 0x4a, 0x00, 0x00,
296	0x00, 0xff, 0x54, 0xab, 0x13, 0x00, 0x00,
297	0x00, 0xff, 0x41, 0xbe, 0x15, 0x01, 0x00,
298	0x00, 0xff, 0x42, 0xbd, 0x0e, 0x01, 0x00,
299	0x00, 0xff, 0x43, 0xbc, 0x17, 0x01, 0x00,
300	0x00, 0xff, 0x50, 0xaf, 0x0f, 0x01, 0x00,
301	0x00, 0xff, 0x4d, 0xb2, 0x1d, 0x00, 0x00,
302	0x00, 0xff, 0x47, 0xb8, 0x13, 0x01, 0x00,
303	0x00, 0xff, 0x05, 0xfa, 0x4b, 0x00, 0x00,
304	0x00, 0xff, 0x02, 0xfd, 0x4e, 0x00, 0x00,
305	0x00, 0xff, 0x0e, 0xf1, 0x06, 0x00, 0x00,
306	0x00, 0xff, 0x1e, 0xe1, 0x52, 0x02, 0x00,
307	0x00, 0xff, 0x0a, 0xf5, 0x51, 0x02, 0x00,
308	0x00, 0xff, 0x10, 0xef, 0x10, 0x00, 0x00,
309	0x00, 0xff, 0x49, 0xb6, 0x19, 0x01, 0x00,
310	0x00, 0xff, 0x15, 0xea, 0x27, 0x00, 0x00,
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};
361
362static u8 af9015_ir_table_a_link[] = {
363	0x08, 0xf7, 0x12, 0xed, 0x45, 0x05, 0x00, /* power */
364	0x08, 0xf7, 0x1a, 0xe5, 0x41, 0x00, 0x00, /* mute */
365	0x08, 0xf7, 0x01, 0xfe, 0x1e, 0x00, 0x00, /* 1 */
366	0x08, 0xf7, 0x1c, 0xe3, 0x21, 0x00, 0x00, /* 4 */
367	0x08, 0xf7, 0x03, 0xfc, 0x24, 0x00, 0x00, /* 7 */
368	0x08, 0xf7, 0x05, 0xfa, 0x28, 0x04, 0x00, /* zoom */
369	0x08, 0xf7, 0x00, 0xff, 0x43, 0x00, 0x00, /* volume up */
370	0x08, 0xf7, 0x16, 0xe9, 0x42, 0x00, 0x00, /* volume down */
371	0x08, 0xf7, 0x0f, 0xf0, 0x1f, 0x00, 0x00, /* 2 */
372	0x08, 0xf7, 0x0d, 0xf2, 0x22, 0x00, 0x00, /* 5 */
373	0x08, 0xf7, 0x1b, 0xe4, 0x25, 0x00, 0x00, /* 8 */
374	0x08, 0xf7, 0x06, 0xf9, 0x27, 0x00, 0x00, /* 0 */
375	0x08, 0xf7, 0x14, 0xeb, 0x2e, 0x00, 0x00, /* channel up */
376	0x08, 0xf7, 0x1d, 0xe2, 0x2d, 0x00, 0x00, /* channel down */
377	0x08, 0xf7, 0x02, 0xfd, 0x20, 0x00, 0x00, /* 3 */
378	0x08, 0xf7, 0x18, 0xe7, 0x23, 0x00, 0x00, /* 6 */
379	0x08, 0xf7, 0x04, 0xfb, 0x26, 0x00, 0x00, /* 9 */
380	0x08, 0xf7, 0x07, 0xf8, 0x44, 0x00, 0x00, /* jump */
381};
382
383/* MSI DIGIVOX mini II V3.0 */
384static struct ir_scancode ir_codes_af9015_table_msi[] = {
385	{ 0x001e, KEY_1 },
386	{ 0x001f, KEY_2 },
387	{ 0x0020, KEY_3 },
388	{ 0x0021, KEY_4 },
389	{ 0x0022, KEY_5 },
390	{ 0x0023, KEY_6 },
391	{ 0x0024, KEY_7 },
392	{ 0x0025, KEY_8 },
393	{ 0x0026, KEY_9 },
394	{ 0x0027, KEY_0 },
395	{ 0x030f, KEY_CHANNELUP },
396	{ 0x030e, KEY_CHANNELDOWN },
397	{ 0x0042, KEY_VOLUMEDOWN },
398	{ 0x0043, KEY_VOLUMEUP },
399	{ 0x0545, KEY_POWER },
400	{ 0x0052, KEY_UP },           /* up */
401	{ 0x0051, KEY_DOWN },         /* down */
402	{ 0x0028, KEY_ENTER },
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};
425
426/* MYGICTV U718 */
427static struct ir_scancode ir_codes_af9015_table_mygictv[] = {
428	{ 0x003d, KEY_SWITCHVIDEOMODE },
429					  /* TV / AV */
430	{ 0x0545, KEY_POWER },
431	{ 0x001e, KEY_1 },
432	{ 0x001f, KEY_2 },
433	{ 0x0020, KEY_3 },
434	{ 0x0021, KEY_4 },
435	{ 0x0022, KEY_5 },
436	{ 0x0023, KEY_6 },
437	{ 0x0024, KEY_7 },
438	{ 0x0025, KEY_8 },
439	{ 0x0026, KEY_9 },
440	{ 0x0027, KEY_0 },
441	{ 0x0041, KEY_MUTE },
442	{ 0x002a, KEY_ESC },          /* Esc */
443	{ 0x002e, KEY_CHANNELUP },
444	{ 0x002d, KEY_CHANNELDOWN },
445	{ 0x0042, KEY_VOLUMEDOWN },
446	{ 0x0043, KEY_VOLUMEUP },
447	{ 0x0052, KEY_UP },           /* up arrow */
448	{ 0x0051, KEY_DOWN },         /* down arrow */
449	{ 0x004f, KEY_RIGHT },        /* right arrow */
450	{ 0x0050, KEY_LEFT },         /* left arrow */
451	{ 0x0028, KEY_ENTER },        /* ok */
452	{ 0x0115, KEY_RECORD },
453	{ 0x0313, KEY_PLAY },
454	{ 0x0113, KEY_PAUSE },
455	{ 0x0116, KEY_STOP },
456	{ 0x0307, KEY_REWIND },       /* FR << */
457	{ 0x0309, KEY_FASTFORWARD },  /* FF >> */
458	{ 0x003b, KEY_TIME },         /* TimeShift */
459	{ 0x003e, KEY_CAMERA },       /* Snapshot */
460	{ 0x0316, KEY_CYCLEWINDOWS }, /* yellow, min / max */
461	{ 0x0000, KEY_ZOOM },         /* 'select' (?) */
462	{ 0x0316, KEY_SHUFFLE },      /* Shuffle */
463	{ 0x0345, 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};
503
504/* KWorld PlusTV Dual DVB-T Stick (DVB-T 399U) */
505static u8 af9015_ir_table_kworld[] = {
506	0x86, 0x6b, 0x0c, 0xf3, 0x2e, 0x07, 0x00,
507	0x86, 0x6b, 0x16, 0xe9, 0x2d, 0x07, 0x00,
508	0x86, 0x6b, 0x1d, 0xe2, 0x37, 0x07, 0x00,
509	0x86, 0x6b, 0x00, 0xff, 0x1e, 0x07, 0x00,
510	0x86, 0x6b, 0x01, 0xfe, 0x1f, 0x07, 0x00,
511	0x86, 0x6b, 0x02, 0xfd, 0x20, 0x07, 0x00,
512	0x86, 0x6b, 0x03, 0xfc, 0x21, 0x07, 0x00,
513	0x86, 0x6b, 0x04, 0xfb, 0x22, 0x07, 0x00,
514	0x86, 0x6b, 0x05, 0xfa, 0x23, 0x07, 0x00,
515	0x86, 0x6b, 0x06, 0xf9, 0x24, 0x07, 0x00,
516	0x86, 0x6b, 0x07, 0xf8, 0x25, 0x07, 0x00,
517	0x86, 0x6b, 0x08, 0xf7, 0x26, 0x07, 0x00,
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};
551
552/* AverMedia Volar X */
553static struct ir_scancode ir_codes_af9015_table_avermedia[] = {
554	{ 0x053d, KEY_PROG1 },       /* SOURCE */
555	{ 0x0512, KEY_POWER },       /* POWER */
556	{ 0x051e, KEY_1 },           /* 1 */
557	{ 0x051f, KEY_2 },           /* 2 */
558	{ 0x0520, KEY_3 },           /* 3 */
559	{ 0x0521, KEY_4 },           /* 4 */
560	{ 0x0522, KEY_5 },           /* 5 */
561	{ 0x0523, KEY_6 },           /* 6 */
562	{ 0x0524, KEY_7 },           /* 7 */
563	{ 0x0525, KEY_8 },           /* 8 */
564	{ 0x0526, KEY_9 },           /* 9 */
565	{ 0x053f, KEY_LEFT },        /* L / DISPLAY */
566	{ 0x0527, KEY_0 },           /* 0 */
567	{ 0x050f, KEY_RIGHT },       /* R / CH RTN */
568	{ 0x0518, KEY_PROG2 },       /* SNAP SHOT */
569	{ 0x051c, KEY_PROG3 },       /* 16-CH PREV */
570	{ 0x052d, KEY_VOLUMEDOWN },  /* VOL DOWN */
571	{ 0x053e, KEY_ZOOM },        /* FULL SCREEN */
572	{ 0x052e, KEY_VOLUMEUP },    /* VOL UP */
573	{ 0x0510, KEY_MUTE },        /* MUTE */
574	{ 0x0504, KEY_AUDIO },       /* AUDIO */
575	{ 0x0515, KEY_RECORD },      /* RECORD */
576	{ 0x0511, KEY_PLAY },        /* PLAY */
577	{ 0x0516, KEY_STOP },        /* STOP */
578	{ 0x050c, KEY_PLAYPAUSE },   /* TIMESHIFT / PAUSE */
579	{ 0x0505, KEY_BACK },        /* << / RED */
580	{ 0x0509, KEY_FORWARD },     /* >> / YELLOW */
581	{ 0x0517, KEY_TEXT },        /* TELETEXT */
582	{ 0x050a, KEY_EPG },         /* EPG */
583	{ 0x0513, KEY_MENU },        /* MENU */
584
585	{ 0x050e, KEY_CHANNELUP },   /* CH UP */
586	{ 0x050d, KEY_CHANNELDOWN }, /* CH DOWN */
587	{ 0x0519, KEY_FIRST },       /* |<< / GREEN */
588	{ 0x0508, KEY_LAST },        /* >>| / BLUE */
589};
590
591static u8 af9015_ir_table_avermedia[] = {
592	0x02, 0xfd, 0x00, 0xff, 0x12, 0x05, 0x00,
593	0x02, 0xfd, 0x01, 0xfe, 0x3d, 0x05, 0x00,
594	0x02, 0xfd, 0x03, 0xfc, 0x17, 0x05, 0x00,
595	0x02, 0xfd, 0x04, 0xfb, 0x0a, 0x05, 0x00,
596	0x02, 0xfd, 0x05, 0xfa, 0x1e, 0x05, 0x00,
597	0x02, 0xfd, 0x06, 0xf9, 0x1f, 0x05, 0x00,
598	0x02, 0xfd, 0x07, 0xf8, 0x20, 0x05, 0x00,
599	0x02, 0xfd, 0x09, 0xf6, 0x21, 0x05, 0x00,
600	0x02, 0xfd, 0x0a, 0xf5, 0x22, 0x05, 0x00,
601	0x02, 0xfd, 0x0b, 0xf4, 0x23, 0x05, 0x00,
602	0x02, 0xfd, 0x0d, 0xf2, 0x24, 0x05, 0x00,
603	0x02, 0xfd, 0x0e, 0xf1, 0x25, 0x05, 0x00,
604	0x02, 0xfd, 0x0f, 0xf0, 0x26, 0x05, 0x00,
605	0x02, 0xfd, 0x11, 0xee, 0x27, 0x05, 0x00,
606	0x02, 0xfd, 0x08, 0xf7, 0x04, 0x05, 0x00,
607	0x02, 0xfd, 0x0c, 0xf3, 0x3e, 0x05, 0x00,
608	0x02, 0xfd, 0x10, 0xef, 0x1c, 0x05, 0x00,
609	0x02, 0xfd, 0x12, 0xed, 0x3f, 0x05, 0x00,
610	0x02, 0xfd, 0x13, 0xec, 0x0f, 0x05, 0x00,
611	0x02, 0xfd, 0x14, 0xeb, 0x10, 0x05, 0x00,
612	0x02, 0xfd, 0x15, 0xea, 0x13, 0x05, 0x00,
613	0x02, 0xfd, 0x17, 0xe8, 0x18, 0x05, 0x00,
614	0x02, 0xfd, 0x18, 0xe7, 0x11, 0x05, 0x00,
615	0x02, 0xfd, 0x19, 0xe6, 0x15, 0x05, 0x00,
616	0x02, 0xfd, 0x1a, 0xe5, 0x0c, 0x05, 0x00,
617	0x02, 0xfd, 0x1b, 0xe4, 0x16, 0x05, 0x00,
618	0x02, 0xfd, 0x1c, 0xe3, 0x09, 0x05, 0x00,
619	0x02, 0xfd, 0x1d, 0xe2, 0x05, 0x05, 0x00,
620	0x02, 0xfd, 0x1e, 0xe1, 0x2d, 0x05, 0x00,
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};
657
658/* Digittrade DVB-T USB Stick */
659static struct ir_scancode ir_codes_af9015_table_digittrade[] = {
660	{ 0x010f, KEY_LAST },	/* RETURN */
661	{ 0x0517, KEY_TEXT },	/* TELETEXT */
662	{ 0x0108, KEY_EPG },	/* EPG */
663	{ 0x0513, KEY_POWER },	/* POWER */
664	{ 0x0109, KEY_ZOOM },	/* FULLSCREEN */
665	{ 0x0040, KEY_AUDIO },	/* DUAL SOUND */
666	{ 0x002c, KEY_PRINT },	/* SNAPSHOT */
667	{ 0x0516, KEY_SUBTITLE },	/* SUBTITLE */
668	{ 0x0052, KEY_CHANNELUP },	/* CH Up */
669	{ 0x0051, KEY_CHANNELDOWN },/* Ch Dn */
670	{ 0x0057, KEY_VOLUMEUP },	/* Vol Up */
671	{ 0x0056, KEY_VOLUMEDOWN },	/* Vol Dn */
672	{ 0x0110, KEY_MUTE },	/* MUTE */
673	{ 0x0027, KEY_0 },
674	{ 0x001e, KEY_1 },
675	{ 0x001f, KEY_2 },
676	{ 0x0020, KEY_3 },
677	{ 0x0021, KEY_4 },
678	{ 0x0022, KEY_5 },
679	{ 0x0023, KEY_6 },
680	{ 0x0024, KEY_7 },
681	{ 0x0025, KEY_8 },
682	{ 0x0026, KEY_9 },
683	{ 0x0117, KEY_PLAYPAUSE },	/* TIMESHIFT */
684	{ 0x0115, KEY_RECORD },	/* RECORD */
685	{ 0x0313, KEY_PLAY },	/* PLAY */
686	{ 0x0116, KEY_STOP },	/* STOP */
687	{ 0x0113, KEY_PAUSE },	/* PAUSE */
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};
720
721/* TREKSTOR DVB-T USB Stick */
722static struct ir_scancode ir_codes_af9015_table_trekstor[] = {
723	{ 0x0704, KEY_AGAIN },		/* Home */
724	{ 0x0705, KEY_MUTE },		/* Mute */
725	{ 0x0706, KEY_UP },			/* Up */
726	{ 0x0707, KEY_DOWN },		/* Down */
727	{ 0x0709, KEY_RIGHT },		/* Right */
728	{ 0x070a, KEY_ENTER },		/* OK */
729	{ 0x070b, KEY_FASTFORWARD },	/* Fast forward */
730	{ 0x070c, KEY_REWIND },		/* Rewind */
731	{ 0x070d, KEY_PLAY },		/* Play/Pause */
732	{ 0x070e, KEY_VOLUMEUP },		/* Volume + */
733	{ 0x070f, KEY_VOLUMEDOWN },		/* Volume - */
734	{ 0x0710, KEY_RECORD },		/* Record */
735	{ 0x0711, KEY_STOP },		/* Stop */
736	{ 0x0712, KEY_ZOOM },		/* TV */
737	{ 0x0713, KEY_EPG },		/* Info/EPG */
738	{ 0x0714, KEY_CHANNELDOWN },	/* Channel - */
739	{ 0x0715, KEY_CHANNELUP },		/* Channel + */
740	{ 0x071e, KEY_1 },
741	{ 0x071f, KEY_2 },
742	{ 0x0720, KEY_3 },
743	{ 0x0721, KEY_4 },
744	{ 0x0722, KEY_5 },
745	{ 0x0723, KEY_6 },
746	{ 0x0724, KEY_7 },
747	{ 0x0725, KEY_8 },
748	{ 0x0726, KEY_9 },
749	{ 0x0708, KEY_LEFT },		/* LEFT */
750	{ 0x0727, KEY_0 },
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};
783
784/* MSI DIGIVOX mini III */
785static struct ir_scancode ir_codes_af9015_table_msi_digivox_iii[] = {
786	{ 0x0713, KEY_POWER },       /* [red power button] */
787	{ 0x073b, KEY_VIDEO },       /* Source */
788	{ 0x073e, KEY_ZOOM },        /* Zoom */
789	{ 0x070b, KEY_POWER2 },      /* ShutDown */
790	{ 0x071e, KEY_1 },
791	{ 0x071f, KEY_2 },
792	{ 0x0720, KEY_3 },
793	{ 0x0721, KEY_4 },
794	{ 0x0722, KEY_5 },
795	{ 0x0723, KEY_6 },
796	{ 0x0724, KEY_7 },
797	{ 0x0725, KEY_8 },
798	{ 0x0726, KEY_9 },
799	{ 0x0727, KEY_0 },
800	{ 0x0752, KEY_CHANNELUP },   /* CH+ */
801	{ 0x0751, KEY_CHANNELDOWN }, /* CH- */
802	{ 0x0750, KEY_VOLUMEUP },    /* Vol+ */
803	{ 0x074f, KEY_VOLUMEDOWN },  /* Vol- */
804	{ 0x0705, KEY_ESC },         /* [back up arrow] */
805	{ 0x0708, KEY_OK },          /* [enter arrow] */
806	{ 0x073f, KEY_RECORD },      /* Rec */
807	{ 0x0716, KEY_STOP },        /* Stop */
808	{ 0x072a, KEY_PLAY },        /* Play */
809	{ 0x073c, KEY_MUTE },        /* Mute */
810	{ 0x0718, KEY_UP },
811	{ 0x0707, KEY_DOWN },
812	{ 0x070f, KEY_LEFT },
813	{ 0x0715, KEY_RIGHT },
814	{ 0x0736, KEY_RED },
815	{ 0x0737, KEY_GREEN },
816	{ 0x072d, KEY_YELLOW },
817	{ 0x072e, KEY_BLUE },
818};
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};
854
855#endif
856