af9015.h 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854
  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. #ifndef _DVB_USB_AF9015_H_
  24. #define _DVB_USB_AF9015_H_
  25. #define DVB_USB_LOG_PREFIX "af9015"
  26. #include "dvb-usb.h"
  27. #define deb_info(args...) dprintk(dvb_usb_af9015_debug, 0x01, args)
  28. #define deb_rc(args...) dprintk(dvb_usb_af9015_debug, 0x02, args)
  29. #define deb_xfer(args...) dprintk(dvb_usb_af9015_debug, 0x04, args)
  30. #define deb_reg(args...) dprintk(dvb_usb_af9015_debug, 0x08, args)
  31. #define deb_i2c(args...) dprintk(dvb_usb_af9015_debug, 0x10, args)
  32. #define deb_fw(args...) dprintk(dvb_usb_af9015_debug, 0x20, args)
  33. #define AF9015_I2C_EEPROM 0xa0
  34. #define AF9015_I2C_DEMOD 0x38
  35. #define AF9015_USB_TIMEOUT 2000
  36. /* EEPROM locations */
  37. #define AF9015_EEPROM_IR_MODE 0x18
  38. #define AF9015_EEPROM_IR_REMOTE_TYPE 0x34
  39. #define AF9015_EEPROM_TS_MODE 0x31
  40. #define AF9015_EEPROM_DEMOD2_I2C 0x32
  41. #define AF9015_EEPROM_SAW_BW1 0x35
  42. #define AF9015_EEPROM_XTAL_TYPE1 0x36
  43. #define AF9015_EEPROM_SPEC_INV1 0x37
  44. #define AF9015_EEPROM_IF1L 0x38
  45. #define AF9015_EEPROM_IF1H 0x39
  46. #define AF9015_EEPROM_MT2060_IF1L 0x3a
  47. #define AF9015_EEPROM_MT2060_IF1H 0x3b
  48. #define AF9015_EEPROM_TUNER_ID1 0x3c
  49. #define AF9015_EEPROM_SAW_BW2 0x45
  50. #define AF9015_EEPROM_XTAL_TYPE2 0x46
  51. #define AF9015_EEPROM_SPEC_INV2 0x47
  52. #define AF9015_EEPROM_IF2L 0x48
  53. #define AF9015_EEPROM_IF2H 0x49
  54. #define AF9015_EEPROM_MT2060_IF2L 0x4a
  55. #define AF9015_EEPROM_MT2060_IF2H 0x4b
  56. #define AF9015_EEPROM_TUNER_ID2 0x4c
  57. #define AF9015_EEPROM_OFFSET (AF9015_EEPROM_SAW_BW2 - AF9015_EEPROM_SAW_BW1)
  58. struct req_t {
  59. u8 cmd; /* [0] */
  60. /* seq */ /* [1] */
  61. u8 i2c_addr; /* [2] */
  62. u16 addr; /* [3|4] */
  63. u8 mbox; /* [5] */
  64. u8 addr_len; /* [6] */
  65. u8 data_len; /* [7] */
  66. u8 *data;
  67. };
  68. enum af9015_cmd {
  69. GET_CONFIG = 0x10,
  70. DOWNLOAD_FIRMWARE = 0x11,
  71. BOOT = 0x13,
  72. READ_MEMORY = 0x20,
  73. WRITE_MEMORY = 0x21,
  74. READ_WRITE_I2C = 0x22,
  75. COPY_FIRMWARE = 0x23,
  76. RECONNECT_USB = 0x5a,
  77. WRITE_VIRTUAL_MEMORY = 0x26,
  78. GET_IR_CODE = 0x27,
  79. READ_I2C,
  80. WRITE_I2C,
  81. };
  82. enum af9015_ir_mode {
  83. AF9015_IR_MODE_DISABLED = 0,
  84. AF9015_IR_MODE_HID,
  85. AF9015_IR_MODE_RLC,
  86. AF9015_IR_MODE_RC6,
  87. AF9015_IR_MODE_POLLING, /* just guess */
  88. };
  89. struct af9015_state {
  90. struct i2c_adapter i2c_adap; /* I2C adapter for 2nd FE */
  91. };
  92. struct af9015_config {
  93. u8 dual_mode:1;
  94. u16 mt2060_if1[2];
  95. u16 firmware_size;
  96. u16 firmware_checksum;
  97. u8 *ir_table;
  98. u16 ir_table_size;
  99. };
  100. enum af9015_remote {
  101. AF9015_REMOTE_NONE = 0,
  102. /* 1 */ AF9015_REMOTE_A_LINK_DTU_M,
  103. AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
  104. AF9015_REMOTE_MYGICTV_U718,
  105. AF9015_REMOTE_DIGITTRADE_DVB_T,
  106. /* 5 */ AF9015_REMOTE_AVERMEDIA_KS,
  107. };
  108. /* LeadTek - Y04G0051 */
  109. /* Leadtek WinFast DTV Dongle Gold */
  110. static struct dvb_usb_rc_key af9015_rc_keys_leadtek[] = {
  111. { 0x001e, KEY_1 },
  112. { 0x001f, KEY_2 },
  113. { 0x0020, KEY_3 },
  114. { 0x0021, KEY_4 },
  115. { 0x0022, KEY_5 },
  116. { 0x0023, KEY_6 },
  117. { 0x0024, KEY_7 },
  118. { 0x0025, KEY_8 },
  119. { 0x0026, KEY_9 },
  120. { 0x0027, KEY_0 },
  121. { 0x0028, KEY_OK },
  122. { 0x004f, KEY_RIGHT },
  123. { 0x0050, KEY_LEFT },
  124. { 0x0051, KEY_DOWN },
  125. { 0x0052, KEY_UP },
  126. { 0x011a, KEY_POWER2 },
  127. { 0x04b4, KEY_TV },
  128. { 0x04b3, KEY_RED },
  129. { 0x04b2, KEY_GREEN },
  130. { 0x04b1, KEY_YELLOW },
  131. { 0x04b0, KEY_BLUE },
  132. { 0x003d, KEY_TEXT },
  133. { 0x0113, KEY_SLEEP },
  134. { 0x0010, KEY_MUTE },
  135. { 0x0105, KEY_ESC },
  136. { 0x0009, KEY_SCREEN },
  137. { 0x010f, KEY_MENU },
  138. { 0x003f, KEY_CHANNEL },
  139. { 0x0013, KEY_REWIND },
  140. { 0x0012, KEY_PLAY },
  141. { 0x0011, KEY_FASTFORWARD },
  142. { 0x0005, KEY_PREVIOUS },
  143. { 0x0029, KEY_STOP },
  144. { 0x002b, KEY_NEXT },
  145. { 0x0041, KEY_EPG },
  146. { 0x0019, KEY_VIDEO },
  147. { 0x0016, KEY_AUDIO },
  148. { 0x0037, KEY_DOT },
  149. { 0x002a, KEY_AGAIN },
  150. { 0x002c, KEY_CAMERA },
  151. { 0x003c, KEY_NEW },
  152. { 0x0115, KEY_RECORD },
  153. { 0x010b, KEY_TIME },
  154. { 0x0043, KEY_VOLUMEUP },
  155. { 0x0042, KEY_VOLUMEDOWN },
  156. { 0x004b, KEY_CHANNELUP },
  157. { 0x004e, KEY_CHANNELDOWN },
  158. };
  159. static u8 af9015_ir_table_leadtek[] = {
  160. 0x03, 0xfc, 0x00, 0xff, 0x1a, 0x01, 0x00, /* KEY_POWER2 */
  161. 0x03, 0xfc, 0x56, 0xa9, 0xb4, 0x04, 0x00, /* KEY_TV */
  162. 0x03, 0xfc, 0x4b, 0xb4, 0xb3, 0x04, 0x00, /* KEY_RED */
  163. 0x03, 0xfc, 0x4c, 0xb3, 0xb2, 0x04, 0x00, /* KEY_GREEN */
  164. 0x03, 0xfc, 0x4d, 0xb2, 0xb1, 0x04, 0x00, /* KEY_YELLOW */
  165. 0x03, 0xfc, 0x4e, 0xb1, 0xb0, 0x04, 0x00, /* KEY_BLUE */
  166. 0x03, 0xfc, 0x1f, 0xe0, 0x3d, 0x00, 0x00, /* KEY_TEXT */
  167. 0x03, 0xfc, 0x40, 0xbf, 0x13, 0x01, 0x00, /* KEY_SLEEP */
  168. 0x03, 0xfc, 0x14, 0xeb, 0x10, 0x00, 0x00, /* KEY_MUTE */
  169. 0x03, 0xfc, 0x49, 0xb6, 0x05, 0x01, 0x00, /* KEY_ESC */
  170. 0x03, 0xfc, 0x50, 0xaf, 0x29, 0x00, 0x00, /* KEY_STOP (1)*/
  171. 0x03, 0xfc, 0x0c, 0xf3, 0x52, 0x00, 0x00, /* KEY_UP */
  172. 0x03, 0xfc, 0x03, 0xfc, 0x09, 0x00, 0x00, /* KEY_SCREEN */
  173. 0x03, 0xfc, 0x08, 0xf7, 0x50, 0x00, 0x00, /* KEY_LEFT */
  174. 0x03, 0xfc, 0x13, 0xec, 0x28, 0x00, 0x00, /* KEY_OK (1) */
  175. 0x03, 0xfc, 0x04, 0xfb, 0x4f, 0x00, 0x00, /* KEY_RIGHT */
  176. 0x03, 0xfc, 0x4f, 0xb0, 0x0f, 0x01, 0x00, /* KEY_MENU */
  177. 0x03, 0xfc, 0x10, 0xef, 0x51, 0x00, 0x00, /* KEY_DOWN */
  178. 0x03, 0xfc, 0x51, 0xae, 0x3f, 0x00, 0x00, /* KEY_CHANNEL */
  179. 0x03, 0xfc, 0x42, 0xbd, 0x13, 0x00, 0x00, /* KEY_REWIND */
  180. 0x03, 0xfc, 0x43, 0xbc, 0x12, 0x00, 0x00, /* KEY_PLAY */
  181. 0x03, 0xfc, 0x44, 0xbb, 0x11, 0x00, 0x00, /* KEY_FASTFORWARD */
  182. 0x03, 0xfc, 0x52, 0xad, 0x19, 0x00, 0x00, /* KEY_VIDEO (1) */
  183. 0x03, 0xfc, 0x54, 0xab, 0x05, 0x00, 0x00, /* KEY_PREVIOUS */
  184. 0x03, 0xfc, 0x46, 0xb9, 0x29, 0x00, 0x00, /* KEY_STOP (2) */
  185. 0x03, 0xfc, 0x55, 0xaa, 0x2b, 0x00, 0x00, /* KEY_NEXT */
  186. 0x03, 0xfc, 0x53, 0xac, 0x41, 0x00, 0x00, /* KEY_EPG */
  187. 0x03, 0xfc, 0x05, 0xfa, 0x1e, 0x00, 0x00, /* KEY_1 */
  188. 0x03, 0xfc, 0x06, 0xf9, 0x1f, 0x00, 0x00, /* KEY_2 */
  189. 0x03, 0xfc, 0x07, 0xf8, 0x20, 0x00, 0x00, /* KEY_3 */
  190. 0x03, 0xfc, 0x1e, 0xe1, 0x19, 0x00, 0x00, /* KEY_VIDEO (2) */
  191. 0x03, 0xfc, 0x09, 0xf6, 0x21, 0x00, 0x00, /* KEY_4 */
  192. 0x03, 0xfc, 0x0a, 0xf5, 0x22, 0x00, 0x00, /* KEY_5 */
  193. 0x03, 0xfc, 0x0b, 0xf4, 0x23, 0x00, 0x00, /* KEY_6 */
  194. 0x03, 0xfc, 0x1b, 0xe4, 0x16, 0x00, 0x00, /* KEY_AUDIO */
  195. 0x03, 0xfc, 0x0d, 0xf2, 0x24, 0x00, 0x00, /* KEY_7 */
  196. 0x03, 0xfc, 0x0e, 0xf1, 0x25, 0x00, 0x00, /* KEY_8 */
  197. 0x03, 0xfc, 0x0f, 0xf0, 0x26, 0x00, 0x00, /* KEY_9 */
  198. 0x03, 0xfc, 0x16, 0xe9, 0x28, 0x00, 0x00, /* KEY_OK (2) */
  199. 0x03, 0xfc, 0x41, 0xbe, 0x37, 0x00, 0x00, /* KEY_DOT */
  200. 0x03, 0xfc, 0x12, 0xed, 0x27, 0x00, 0x00, /* KEY_0 */
  201. 0x03, 0xfc, 0x11, 0xee, 0x2a, 0x00, 0x00, /* KEY_AGAIN */
  202. 0x03, 0xfc, 0x48, 0xb7, 0x2c, 0x00, 0x00, /* KEY_CAMERA */
  203. 0x03, 0xfc, 0x4a, 0xb5, 0x3c, 0x00, 0x00, /* KEY_NEW */
  204. 0x03, 0xfc, 0x47, 0xb8, 0x15, 0x01, 0x00, /* KEY_RECORD */
  205. 0x03, 0xfc, 0x45, 0xba, 0x0b, 0x01, 0x00, /* KEY_TIME */
  206. 0x03, 0xfc, 0x5e, 0xa1, 0x43, 0x00, 0x00, /* KEY_VOLUMEUP */
  207. 0x03, 0xfc, 0x5a, 0xa5, 0x42, 0x00, 0x00, /* KEY_VOLUMEDOWN */
  208. 0x03, 0xfc, 0x5b, 0xa4, 0x4b, 0x00, 0x00, /* KEY_CHANNELUP */
  209. 0x03, 0xfc, 0x5f, 0xa0, 0x4e, 0x00, 0x00, /* KEY_CHANNELDOWN */
  210. };
  211. /* TwinHan AzureWave AD-TU700(704J) */
  212. static struct dvb_usb_rc_key af9015_rc_keys_twinhan[] = {
  213. { 0x053f, KEY_POWER },
  214. { 0x0019, KEY_FAVORITES }, /* Favorite List */
  215. { 0x0004, KEY_TEXT }, /* Teletext */
  216. { 0x000e, KEY_POWER },
  217. { 0x000e, KEY_INFO }, /* Preview */
  218. { 0x0008, KEY_EPG }, /* Info/EPG */
  219. { 0x000f, KEY_LIST }, /* Record List */
  220. { 0x001e, KEY_1 },
  221. { 0x001f, KEY_2 },
  222. { 0x0020, KEY_3 },
  223. { 0x0021, KEY_4 },
  224. { 0x0022, KEY_5 },
  225. { 0x0023, KEY_6 },
  226. { 0x0024, KEY_7 },
  227. { 0x0025, KEY_8 },
  228. { 0x0026, KEY_9 },
  229. { 0x0027, KEY_0 },
  230. { 0x0029, KEY_CANCEL }, /* Cancel */
  231. { 0x004c, KEY_CLEAR }, /* Clear */
  232. { 0x002a, KEY_BACK }, /* Back */
  233. { 0x002b, KEY_TAB }, /* Tab */
  234. { 0x0052, KEY_UP }, /* up arrow */
  235. { 0x0051, KEY_DOWN }, /* down arrow */
  236. { 0x004f, KEY_RIGHT }, /* right arrow */
  237. { 0x0050, KEY_LEFT }, /* left arrow */
  238. { 0x0028, KEY_ENTER }, /* Enter / ok */
  239. { 0x0252, KEY_VOLUMEUP },
  240. { 0x0251, KEY_VOLUMEDOWN },
  241. { 0x004e, KEY_CHANNELDOWN },
  242. { 0x004b, KEY_CHANNELUP },
  243. { 0x004a, KEY_RECORD },
  244. { 0x0111, KEY_PLAY },
  245. { 0x0017, KEY_PAUSE },
  246. { 0x000c, KEY_REWIND }, /* FR << */
  247. { 0x0011, KEY_FASTFORWARD }, /* FF >> */
  248. { 0x0115, KEY_PREVIOUS }, /* Replay */
  249. { 0x010e, KEY_NEXT }, /* Skip */
  250. { 0x0013, KEY_CAMERA }, /* Capture */
  251. { 0x010f, KEY_LANGUAGE }, /* SAP */
  252. { 0x0113, KEY_TV2 }, /* PIP */
  253. { 0x001d, KEY_ZOOM }, /* Full Screen */
  254. { 0x0117, KEY_SUBTITLE }, /* Subtitle / CC */
  255. { 0x0010, KEY_MUTE },
  256. { 0x0119, KEY_AUDIO }, /* L/R */ /* TODO better event */
  257. { 0x0116, KEY_SLEEP }, /* Hibernate */
  258. { 0x0116, KEY_SWITCHVIDEOMODE },
  259. /* A/V */ /* TODO does not work */
  260. { 0x0006, KEY_AGAIN }, /* Recall */
  261. { 0x0116, KEY_KPPLUS }, /* Zoom+ */ /* TODO does not work */
  262. { 0x0116, KEY_KPMINUS }, /* Zoom- */ /* TODO does not work */
  263. { 0x0215, KEY_RED },
  264. { 0x020a, KEY_GREEN },
  265. { 0x021c, KEY_YELLOW },
  266. { 0x0205, KEY_BLUE },
  267. };
  268. static u8 af9015_ir_table_twinhan[] = {
  269. 0x00, 0xff, 0x16, 0xe9, 0x3f, 0x05, 0x00,
  270. 0x00, 0xff, 0x07, 0xf8, 0x16, 0x01, 0x00,
  271. 0x00, 0xff, 0x14, 0xeb, 0x11, 0x01, 0x00,
  272. 0x00, 0xff, 0x1a, 0xe5, 0x4d, 0x00, 0x00,
  273. 0x00, 0xff, 0x4c, 0xb3, 0x17, 0x00, 0x00,
  274. 0x00, 0xff, 0x12, 0xed, 0x11, 0x00, 0x00,
  275. 0x00, 0xff, 0x40, 0xbf, 0x0c, 0x00, 0x00,
  276. 0x00, 0xff, 0x11, 0xee, 0x4a, 0x00, 0x00,
  277. 0x00, 0xff, 0x54, 0xab, 0x13, 0x00, 0x00,
  278. 0x00, 0xff, 0x41, 0xbe, 0x15, 0x01, 0x00,
  279. 0x00, 0xff, 0x42, 0xbd, 0x0e, 0x01, 0x00,
  280. 0x00, 0xff, 0x43, 0xbc, 0x17, 0x01, 0x00,
  281. 0x00, 0xff, 0x50, 0xaf, 0x0f, 0x01, 0x00,
  282. 0x00, 0xff, 0x4d, 0xb2, 0x1d, 0x00, 0x00,
  283. 0x00, 0xff, 0x47, 0xb8, 0x13, 0x01, 0x00,
  284. 0x00, 0xff, 0x05, 0xfa, 0x4b, 0x00, 0x00,
  285. 0x00, 0xff, 0x02, 0xfd, 0x4e, 0x00, 0x00,
  286. 0x00, 0xff, 0x0e, 0xf1, 0x06, 0x00, 0x00,
  287. 0x00, 0xff, 0x1e, 0xe1, 0x52, 0x02, 0x00,
  288. 0x00, 0xff, 0x0a, 0xf5, 0x51, 0x02, 0x00,
  289. 0x00, 0xff, 0x10, 0xef, 0x10, 0x00, 0x00,
  290. 0x00, 0xff, 0x49, 0xb6, 0x19, 0x01, 0x00,
  291. 0x00, 0xff, 0x15, 0xea, 0x27, 0x00, 0x00,
  292. 0x00, 0xff, 0x03, 0xfc, 0x1e, 0x00, 0x00,
  293. 0x00, 0xff, 0x01, 0xfe, 0x1f, 0x00, 0x00,
  294. 0x00, 0xff, 0x06, 0xf9, 0x20, 0x00, 0x00,
  295. 0x00, 0xff, 0x09, 0xf6, 0x21, 0x00, 0x00,
  296. 0x00, 0xff, 0x1d, 0xe2, 0x22, 0x00, 0x00,
  297. 0x00, 0xff, 0x1f, 0xe0, 0x23, 0x00, 0x00,
  298. 0x00, 0xff, 0x0d, 0xf2, 0x24, 0x00, 0x00,
  299. 0x00, 0xff, 0x19, 0xe6, 0x25, 0x00, 0x00,
  300. 0x00, 0xff, 0x1b, 0xe4, 0x26, 0x00, 0x00,
  301. 0x00, 0xff, 0x00, 0xff, 0x2b, 0x00, 0x00,
  302. 0x00, 0xff, 0x4a, 0xb5, 0x4c, 0x00, 0x00,
  303. 0x00, 0xff, 0x4b, 0xb4, 0x52, 0x00, 0x00,
  304. 0x00, 0xff, 0x51, 0xae, 0x51, 0x00, 0x00,
  305. 0x00, 0xff, 0x52, 0xad, 0x4f, 0x00, 0x00,
  306. 0x00, 0xff, 0x4e, 0xb1, 0x50, 0x00, 0x00,
  307. 0x00, 0xff, 0x0c, 0xf3, 0x29, 0x00, 0x00,
  308. 0x00, 0xff, 0x4f, 0xb0, 0x28, 0x00, 0x00,
  309. 0x00, 0xff, 0x13, 0xec, 0x2a, 0x00, 0x00,
  310. 0x00, 0xff, 0x17, 0xe8, 0x19, 0x00, 0x00,
  311. 0x00, 0xff, 0x04, 0xfb, 0x0f, 0x00, 0x00,
  312. 0x00, 0xff, 0x48, 0xb7, 0x0e, 0x00, 0x00,
  313. 0x00, 0xff, 0x0f, 0xf0, 0x04, 0x00, 0x00,
  314. 0x00, 0xff, 0x1c, 0xe3, 0x08, 0x00, 0x00,
  315. 0x00, 0xff, 0x18, 0xe7, 0x15, 0x02, 0x00,
  316. 0x00, 0xff, 0x53, 0xac, 0x0a, 0x02, 0x00,
  317. 0x00, 0xff, 0x5e, 0xa1, 0x1c, 0x02, 0x00,
  318. 0x00, 0xff, 0x5f, 0xa0, 0x05, 0x02, 0x00,
  319. };
  320. /* A-Link DTU(m) */
  321. static struct dvb_usb_rc_key af9015_rc_keys_a_link[] = {
  322. { 0x001e, KEY_1 },
  323. { 0x001f, KEY_2 },
  324. { 0x0020, KEY_3 },
  325. { 0x0021, KEY_4 },
  326. { 0x0022, KEY_5 },
  327. { 0x0023, KEY_6 },
  328. { 0x0024, KEY_7 },
  329. { 0x0025, KEY_8 },
  330. { 0x0026, KEY_9 },
  331. { 0x0027, KEY_0 },
  332. { 0x002e, KEY_CHANNELUP },
  333. { 0x002d, KEY_CHANNELDOWN },
  334. { 0x0428, KEY_ZOOM },
  335. { 0x0041, KEY_MUTE },
  336. { 0x0042, KEY_VOLUMEDOWN },
  337. { 0x0043, KEY_VOLUMEUP },
  338. { 0x0044, KEY_GOTO }, /* jump */
  339. { 0x0545, KEY_POWER },
  340. };
  341. static u8 af9015_ir_table_a_link[] = {
  342. 0x08, 0xf7, 0x12, 0xed, 0x45, 0x05, 0x00, /* power */
  343. 0x08, 0xf7, 0x1a, 0xe5, 0x41, 0x00, 0x00, /* mute */
  344. 0x08, 0xf7, 0x01, 0xfe, 0x1e, 0x00, 0x00, /* 1 */
  345. 0x08, 0xf7, 0x1c, 0xe3, 0x21, 0x00, 0x00, /* 4 */
  346. 0x08, 0xf7, 0x03, 0xfc, 0x24, 0x00, 0x00, /* 7 */
  347. 0x08, 0xf7, 0x05, 0xfa, 0x28, 0x04, 0x00, /* zoom */
  348. 0x08, 0xf7, 0x00, 0xff, 0x43, 0x00, 0x00, /* volume up */
  349. 0x08, 0xf7, 0x16, 0xe9, 0x42, 0x00, 0x00, /* volume down */
  350. 0x08, 0xf7, 0x0f, 0xf0, 0x1f, 0x00, 0x00, /* 2 */
  351. 0x08, 0xf7, 0x0d, 0xf2, 0x22, 0x00, 0x00, /* 5 */
  352. 0x08, 0xf7, 0x1b, 0xe4, 0x25, 0x00, 0x00, /* 8 */
  353. 0x08, 0xf7, 0x06, 0xf9, 0x27, 0x00, 0x00, /* 0 */
  354. 0x08, 0xf7, 0x14, 0xeb, 0x2e, 0x00, 0x00, /* channel up */
  355. 0x08, 0xf7, 0x1d, 0xe2, 0x2d, 0x00, 0x00, /* channel down */
  356. 0x08, 0xf7, 0x02, 0xfd, 0x20, 0x00, 0x00, /* 3 */
  357. 0x08, 0xf7, 0x18, 0xe7, 0x23, 0x00, 0x00, /* 6 */
  358. 0x08, 0xf7, 0x04, 0xfb, 0x26, 0x00, 0x00, /* 9 */
  359. 0x08, 0xf7, 0x07, 0xf8, 0x44, 0x00, 0x00, /* jump */
  360. };
  361. /* MSI DIGIVOX mini II V3.0 */
  362. static struct dvb_usb_rc_key af9015_rc_keys_msi[] = {
  363. { 0x001e, KEY_1 },
  364. { 0x001f, KEY_2 },
  365. { 0x0020, KEY_3 },
  366. { 0x0021, KEY_4 },
  367. { 0x0022, KEY_5 },
  368. { 0x0023, KEY_6 },
  369. { 0x0024, KEY_7 },
  370. { 0x0025, KEY_8 },
  371. { 0x0026, KEY_9 },
  372. { 0x0027, KEY_0 },
  373. { 0x030f, KEY_CHANNELUP },
  374. { 0x030e, KEY_CHANNELDOWN },
  375. { 0x0042, KEY_VOLUMEDOWN },
  376. { 0x0043, KEY_VOLUMEUP },
  377. { 0x0545, KEY_POWER },
  378. { 0x0052, KEY_UP }, /* up */
  379. { 0x0051, KEY_DOWN }, /* down */
  380. { 0x0028, KEY_ENTER },
  381. };
  382. static u8 af9015_ir_table_msi[] = {
  383. 0x03, 0xfc, 0x17, 0xe8, 0x45, 0x05, 0x00, /* power */
  384. 0x03, 0xfc, 0x0d, 0xf2, 0x51, 0x00, 0x00, /* down */
  385. 0x03, 0xfc, 0x03, 0xfc, 0x52, 0x00, 0x00, /* up */
  386. 0x03, 0xfc, 0x1a, 0xe5, 0x1e, 0x00, 0x00, /* 1 */
  387. 0x03, 0xfc, 0x02, 0xfd, 0x1f, 0x00, 0x00, /* 2 */
  388. 0x03, 0xfc, 0x04, 0xfb, 0x20, 0x00, 0x00, /* 3 */
  389. 0x03, 0xfc, 0x1c, 0xe3, 0x21, 0x00, 0x00, /* 4 */
  390. 0x03, 0xfc, 0x08, 0xf7, 0x22, 0x00, 0x00, /* 5 */
  391. 0x03, 0xfc, 0x1d, 0xe2, 0x23, 0x00, 0x00, /* 6 */
  392. 0x03, 0xfc, 0x11, 0xee, 0x24, 0x00, 0x00, /* 7 */
  393. 0x03, 0xfc, 0x0b, 0xf4, 0x25, 0x00, 0x00, /* 8 */
  394. 0x03, 0xfc, 0x10, 0xef, 0x26, 0x00, 0x00, /* 9 */
  395. 0x03, 0xfc, 0x09, 0xf6, 0x27, 0x00, 0x00, /* 0 */
  396. 0x03, 0xfc, 0x14, 0xeb, 0x43, 0x00, 0x00, /* volume up */
  397. 0x03, 0xfc, 0x1f, 0xe0, 0x42, 0x00, 0x00, /* volume down */
  398. 0x03, 0xfc, 0x15, 0xea, 0x0f, 0x03, 0x00, /* channel up */
  399. 0x03, 0xfc, 0x05, 0xfa, 0x0e, 0x03, 0x00, /* channel down */
  400. 0x03, 0xfc, 0x16, 0xe9, 0x28, 0x00, 0x00, /* enter */
  401. };
  402. /* MYGICTV U718 */
  403. static struct dvb_usb_rc_key af9015_rc_keys_mygictv[] = {
  404. { 0x003d, KEY_SWITCHVIDEOMODE },
  405. /* TV / AV */
  406. { 0x0545, KEY_POWER },
  407. { 0x001e, KEY_1 },
  408. { 0x001f, KEY_2 },
  409. { 0x0020, KEY_3 },
  410. { 0x0021, KEY_4 },
  411. { 0x0022, KEY_5 },
  412. { 0x0023, KEY_6 },
  413. { 0x0024, KEY_7 },
  414. { 0x0025, KEY_8 },
  415. { 0x0026, KEY_9 },
  416. { 0x0027, KEY_0 },
  417. { 0x0041, KEY_MUTE },
  418. { 0x002a, KEY_ESC }, /* Esc */
  419. { 0x002e, KEY_CHANNELUP },
  420. { 0x002d, KEY_CHANNELDOWN },
  421. { 0x0042, KEY_VOLUMEDOWN },
  422. { 0x0043, KEY_VOLUMEUP },
  423. { 0x0052, KEY_UP }, /* up arrow */
  424. { 0x0051, KEY_DOWN }, /* down arrow */
  425. { 0x004f, KEY_RIGHT }, /* right arrow */
  426. { 0x0050, KEY_LEFT }, /* left arrow */
  427. { 0x0028, KEY_ENTER }, /* ok */
  428. { 0x0115, KEY_RECORD },
  429. { 0x0313, KEY_PLAY },
  430. { 0x0113, KEY_PAUSE },
  431. { 0x0116, KEY_STOP },
  432. { 0x0307, KEY_REWIND }, /* FR << */
  433. { 0x0309, KEY_FASTFORWARD }, /* FF >> */
  434. { 0x003b, KEY_TIME }, /* TimeShift */
  435. { 0x003e, KEY_CAMERA }, /* Snapshot */
  436. { 0x0316, KEY_CYCLEWINDOWS }, /* yellow, min / max */
  437. { 0x0000, KEY_ZOOM }, /* 'select' (?) */
  438. { 0x0316, KEY_SHUFFLE }, /* Shuffle */
  439. { 0x0345, KEY_POWER },
  440. };
  441. static u8 af9015_ir_table_mygictv[] = {
  442. 0x02, 0xbd, 0x0c, 0xf3, 0x3d, 0x00, 0x00, /* TV / AV */
  443. 0x02, 0xbd, 0x14, 0xeb, 0x45, 0x05, 0x00, /* power */
  444. 0x02, 0xbd, 0x00, 0xff, 0x1e, 0x00, 0x00, /* 1 */
  445. 0x02, 0xbd, 0x01, 0xfe, 0x1f, 0x00, 0x00, /* 2 */
  446. 0x02, 0xbd, 0x02, 0xfd, 0x20, 0x00, 0x00, /* 3 */
  447. 0x02, 0xbd, 0x03, 0xfc, 0x21, 0x00, 0x00, /* 4 */
  448. 0x02, 0xbd, 0x04, 0xfb, 0x22, 0x00, 0x00, /* 5 */
  449. 0x02, 0xbd, 0x05, 0xfa, 0x23, 0x00, 0x00, /* 6 */
  450. 0x02, 0xbd, 0x06, 0xf9, 0x24, 0x00, 0x00, /* 7 */
  451. 0x02, 0xbd, 0x07, 0xf8, 0x25, 0x00, 0x00, /* 8 */
  452. 0x02, 0xbd, 0x08, 0xf7, 0x26, 0x00, 0x00, /* 9 */
  453. 0x02, 0xbd, 0x09, 0xf6, 0x27, 0x00, 0x00, /* 0 */
  454. 0x02, 0xbd, 0x0a, 0xf5, 0x41, 0x00, 0x00, /* mute */
  455. 0x02, 0xbd, 0x1c, 0xe3, 0x2a, 0x00, 0x00, /* esc */
  456. 0x02, 0xbd, 0x1f, 0xe0, 0x43, 0x00, 0x00, /* volume up */
  457. 0x02, 0xbd, 0x12, 0xed, 0x52, 0x00, 0x00, /* up arrow */
  458. 0x02, 0xbd, 0x11, 0xee, 0x50, 0x00, 0x00, /* left arrow */
  459. 0x02, 0xbd, 0x15, 0xea, 0x28, 0x00, 0x00, /* ok */
  460. 0x02, 0xbd, 0x10, 0xef, 0x4f, 0x00, 0x00, /* right arrow */
  461. 0x02, 0xbd, 0x13, 0xec, 0x51, 0x00, 0x00, /* down arrow */
  462. 0x02, 0xbd, 0x0e, 0xf1, 0x42, 0x00, 0x00, /* volume down */
  463. 0x02, 0xbd, 0x19, 0xe6, 0x15, 0x01, 0x00, /* record */
  464. 0x02, 0xbd, 0x1e, 0xe1, 0x13, 0x03, 0x00, /* play */
  465. 0x02, 0xbd, 0x16, 0xe9, 0x16, 0x01, 0x00, /* stop */
  466. 0x02, 0xbd, 0x0b, 0xf4, 0x28, 0x04, 0x00, /* yellow, min / max */
  467. 0x02, 0xbd, 0x0f, 0xf0, 0x3b, 0x00, 0x00, /* time shift */
  468. 0x02, 0xbd, 0x18, 0xe7, 0x2e, 0x00, 0x00, /* channel up */
  469. 0x02, 0xbd, 0x1a, 0xe5, 0x2d, 0x00, 0x00, /* channel down */
  470. 0x02, 0xbd, 0x17, 0xe8, 0x3e, 0x00, 0x00, /* snapshot */
  471. 0x02, 0xbd, 0x40, 0xbf, 0x13, 0x01, 0x00, /* pause */
  472. 0x02, 0xbd, 0x41, 0xbe, 0x09, 0x03, 0x00, /* FF >> */
  473. 0x02, 0xbd, 0x42, 0xbd, 0x07, 0x03, 0x00, /* FR << */
  474. 0x02, 0xbd, 0x43, 0xbc, 0x00, 0x00, 0x00, /* 'select' (?) */
  475. 0x02, 0xbd, 0x44, 0xbb, 0x16, 0x03, 0x00, /* shuffle */
  476. 0x02, 0xbd, 0x45, 0xba, 0x45, 0x03, 0x00, /* power */
  477. };
  478. /* KWorld PlusTV Dual DVB-T Stick (DVB-T 399U) */
  479. static u8 af9015_ir_table_kworld[] = {
  480. 0x86, 0x6b, 0x0c, 0xf3, 0x2e, 0x07, 0x00,
  481. 0x86, 0x6b, 0x16, 0xe9, 0x2d, 0x07, 0x00,
  482. 0x86, 0x6b, 0x1d, 0xe2, 0x37, 0x07, 0x00,
  483. 0x86, 0x6b, 0x00, 0xff, 0x1e, 0x07, 0x00,
  484. 0x86, 0x6b, 0x01, 0xfe, 0x1f, 0x07, 0x00,
  485. 0x86, 0x6b, 0x02, 0xfd, 0x20, 0x07, 0x00,
  486. 0x86, 0x6b, 0x03, 0xfc, 0x21, 0x07, 0x00,
  487. 0x86, 0x6b, 0x04, 0xfb, 0x22, 0x07, 0x00,
  488. 0x86, 0x6b, 0x05, 0xfa, 0x23, 0x07, 0x00,
  489. 0x86, 0x6b, 0x06, 0xf9, 0x24, 0x07, 0x00,
  490. 0x86, 0x6b, 0x07, 0xf8, 0x25, 0x07, 0x00,
  491. 0x86, 0x6b, 0x08, 0xf7, 0x26, 0x07, 0x00,
  492. 0x86, 0x6b, 0x09, 0xf6, 0x4d, 0x07, 0x00,
  493. 0x86, 0x6b, 0x0a, 0xf5, 0x4e, 0x07, 0x00,
  494. 0x86, 0x6b, 0x14, 0xeb, 0x4f, 0x07, 0x00,
  495. 0x86, 0x6b, 0x1e, 0xe1, 0x50, 0x07, 0x00,
  496. 0x86, 0x6b, 0x17, 0xe8, 0x52, 0x07, 0x00,
  497. 0x86, 0x6b, 0x1f, 0xe0, 0x51, 0x07, 0x00,
  498. 0x86, 0x6b, 0x0e, 0xf1, 0x0b, 0x07, 0x00,
  499. 0x86, 0x6b, 0x20, 0xdf, 0x0c, 0x07, 0x00,
  500. 0x86, 0x6b, 0x42, 0xbd, 0x0d, 0x07, 0x00,
  501. 0x86, 0x6b, 0x0b, 0xf4, 0x0e, 0x07, 0x00,
  502. 0x86, 0x6b, 0x43, 0xbc, 0x0f, 0x07, 0x00,
  503. 0x86, 0x6b, 0x10, 0xef, 0x10, 0x07, 0x00,
  504. 0x86, 0x6b, 0x21, 0xde, 0x11, 0x07, 0x00,
  505. 0x86, 0x6b, 0x13, 0xec, 0x12, 0x07, 0x00,
  506. 0x86, 0x6b, 0x11, 0xee, 0x13, 0x07, 0x00,
  507. 0x86, 0x6b, 0x12, 0xed, 0x14, 0x07, 0x00,
  508. 0x86, 0x6b, 0x19, 0xe6, 0x15, 0x07, 0x00,
  509. 0x86, 0x6b, 0x1a, 0xe5, 0x16, 0x07, 0x00,
  510. 0x86, 0x6b, 0x1b, 0xe4, 0x17, 0x07, 0x00,
  511. 0x86, 0x6b, 0x4b, 0xb4, 0x18, 0x07, 0x00,
  512. 0x86, 0x6b, 0x40, 0xbf, 0x19, 0x07, 0x00,
  513. 0x86, 0x6b, 0x44, 0xbb, 0x1a, 0x07, 0x00,
  514. 0x86, 0x6b, 0x41, 0xbe, 0x1b, 0x07, 0x00,
  515. 0x86, 0x6b, 0x22, 0xdd, 0x1c, 0x07, 0x00,
  516. 0x86, 0x6b, 0x15, 0xea, 0x1d, 0x07, 0x00,
  517. 0x86, 0x6b, 0x0f, 0xf0, 0x3f, 0x07, 0x00,
  518. 0x86, 0x6b, 0x1c, 0xe3, 0x40, 0x07, 0x00,
  519. 0x86, 0x6b, 0x4a, 0xb5, 0x41, 0x07, 0x00,
  520. 0x86, 0x6b, 0x48, 0xb7, 0x42, 0x07, 0x00,
  521. 0x86, 0x6b, 0x49, 0xb6, 0x43, 0x07, 0x00,
  522. 0x86, 0x6b, 0x18, 0xe7, 0x44, 0x07, 0x00,
  523. 0x86, 0x6b, 0x23, 0xdc, 0x45, 0x07, 0x00,
  524. };
  525. /* AverMedia Volar X */
  526. static struct dvb_usb_rc_key af9015_rc_keys_avermedia[] = {
  527. { 0x053d, KEY_PROG1 }, /* SOURCE */
  528. { 0x0512, KEY_POWER }, /* POWER */
  529. { 0x051e, KEY_1 }, /* 1 */
  530. { 0x051f, KEY_2 }, /* 2 */
  531. { 0x0520, KEY_3 }, /* 3 */
  532. { 0x0521, KEY_4 }, /* 4 */
  533. { 0x0522, KEY_5 }, /* 5 */
  534. { 0x0523, KEY_6 }, /* 6 */
  535. { 0x0524, KEY_7 }, /* 7 */
  536. { 0x0525, KEY_8 }, /* 8 */
  537. { 0x0526, KEY_9 }, /* 9 */
  538. { 0x053f, KEY_LEFT }, /* L / DISPLAY */
  539. { 0x0527, KEY_0 }, /* 0 */
  540. { 0x050f, KEY_RIGHT }, /* R / CH RTN */
  541. { 0x0518, KEY_PROG2 }, /* SNAP SHOT */
  542. { 0x051c, KEY_PROG3 }, /* 16-CH PREV */
  543. { 0x052d, KEY_VOLUMEDOWN }, /* VOL DOWN */
  544. { 0x053e, KEY_ZOOM }, /* FULL SCREEN */
  545. { 0x052e, KEY_VOLUMEUP }, /* VOL UP */
  546. { 0x0510, KEY_MUTE }, /* MUTE */
  547. { 0x0504, KEY_AUDIO }, /* AUDIO */
  548. { 0x0515, KEY_RECORD }, /* RECORD */
  549. { 0x0511, KEY_PLAY }, /* PLAY */
  550. { 0x0516, KEY_STOP }, /* STOP */
  551. { 0x050c, KEY_PLAYPAUSE }, /* TIMESHIFT / PAUSE */
  552. { 0x0505, KEY_BACK }, /* << / RED */
  553. { 0x0509, KEY_FORWARD }, /* >> / YELLOW */
  554. { 0x0517, KEY_TEXT }, /* TELETEXT */
  555. { 0x050a, KEY_EPG }, /* EPG */
  556. { 0x0513, KEY_MENU }, /* MENU */
  557. { 0x050e, KEY_CHANNELUP }, /* CH UP */
  558. { 0x050d, KEY_CHANNELDOWN }, /* CH DOWN */
  559. { 0x0519, KEY_FIRST }, /* |<< / GREEN */
  560. { 0x0508, KEY_LAST }, /* >>| / BLUE */
  561. };
  562. static u8 af9015_ir_table_avermedia[] = {
  563. 0x02, 0xfd, 0x00, 0xff, 0x12, 0x05, 0x00,
  564. 0x02, 0xfd, 0x01, 0xfe, 0x3d, 0x05, 0x00,
  565. 0x02, 0xfd, 0x03, 0xfc, 0x17, 0x05, 0x00,
  566. 0x02, 0xfd, 0x04, 0xfb, 0x0a, 0x05, 0x00,
  567. 0x02, 0xfd, 0x05, 0xfa, 0x1e, 0x05, 0x00,
  568. 0x02, 0xfd, 0x06, 0xf9, 0x1f, 0x05, 0x00,
  569. 0x02, 0xfd, 0x07, 0xf8, 0x20, 0x05, 0x00,
  570. 0x02, 0xfd, 0x09, 0xf6, 0x21, 0x05, 0x00,
  571. 0x02, 0xfd, 0x0a, 0xf5, 0x22, 0x05, 0x00,
  572. 0x02, 0xfd, 0x0b, 0xf4, 0x23, 0x05, 0x00,
  573. 0x02, 0xfd, 0x0d, 0xf2, 0x24, 0x05, 0x00,
  574. 0x02, 0xfd, 0x0e, 0xf1, 0x25, 0x05, 0x00,
  575. 0x02, 0xfd, 0x0f, 0xf0, 0x26, 0x05, 0x00,
  576. 0x02, 0xfd, 0x11, 0xee, 0x27, 0x05, 0x00,
  577. 0x02, 0xfd, 0x08, 0xf7, 0x04, 0x05, 0x00,
  578. 0x02, 0xfd, 0x0c, 0xf3, 0x3e, 0x05, 0x00,
  579. 0x02, 0xfd, 0x10, 0xef, 0x1c, 0x05, 0x00,
  580. 0x02, 0xfd, 0x12, 0xed, 0x3f, 0x05, 0x00,
  581. 0x02, 0xfd, 0x13, 0xec, 0x0f, 0x05, 0x00,
  582. 0x02, 0xfd, 0x14, 0xeb, 0x10, 0x05, 0x00,
  583. 0x02, 0xfd, 0x15, 0xea, 0x13, 0x05, 0x00,
  584. 0x02, 0xfd, 0x17, 0xe8, 0x18, 0x05, 0x00,
  585. 0x02, 0xfd, 0x18, 0xe7, 0x11, 0x05, 0x00,
  586. 0x02, 0xfd, 0x19, 0xe6, 0x15, 0x05, 0x00,
  587. 0x02, 0xfd, 0x1a, 0xe5, 0x0c, 0x05, 0x00,
  588. 0x02, 0xfd, 0x1b, 0xe4, 0x16, 0x05, 0x00,
  589. 0x02, 0xfd, 0x1c, 0xe3, 0x09, 0x05, 0x00,
  590. 0x02, 0xfd, 0x1d, 0xe2, 0x05, 0x05, 0x00,
  591. 0x02, 0xfd, 0x1e, 0xe1, 0x2d, 0x05, 0x00,
  592. 0x02, 0xfd, 0x1f, 0xe0, 0x2e, 0x05, 0x00,
  593. 0x03, 0xfc, 0x00, 0xff, 0x08, 0x05, 0x00,
  594. 0x03, 0xfc, 0x01, 0xfe, 0x19, 0x05, 0x00,
  595. 0x03, 0xfc, 0x02, 0xfd, 0x0d, 0x05, 0x00,
  596. 0x03, 0xfc, 0x03, 0xfc, 0x0e, 0x05, 0x00,
  597. };
  598. static u8 af9015_ir_table_avermedia_ks[] = {
  599. 0x05, 0xfa, 0x01, 0xfe, 0x12, 0x05, 0x00,
  600. 0x05, 0xfa, 0x02, 0xfd, 0x0e, 0x05, 0x00,
  601. 0x05, 0xfa, 0x03, 0xfc, 0x0d, 0x05, 0x00,
  602. 0x05, 0xfa, 0x04, 0xfb, 0x2e, 0x05, 0x00,
  603. 0x05, 0xfa, 0x05, 0xfa, 0x2d, 0x05, 0x00,
  604. 0x05, 0xfa, 0x06, 0xf9, 0x10, 0x05, 0x00,
  605. 0x05, 0xfa, 0x07, 0xf8, 0x0f, 0x05, 0x00,
  606. 0x05, 0xfa, 0x08, 0xf7, 0x3d, 0x05, 0x00,
  607. 0x05, 0xfa, 0x09, 0xf6, 0x1e, 0x05, 0x00,
  608. 0x05, 0xfa, 0x0a, 0xf5, 0x1f, 0x05, 0x00,
  609. 0x05, 0xfa, 0x0b, 0xf4, 0x20, 0x05, 0x00,
  610. 0x05, 0xfa, 0x0c, 0xf3, 0x21, 0x05, 0x00,
  611. 0x05, 0xfa, 0x0d, 0xf2, 0x22, 0x05, 0x00,
  612. 0x05, 0xfa, 0x0e, 0xf1, 0x23, 0x05, 0x00,
  613. 0x05, 0xfa, 0x0f, 0xf0, 0x24, 0x05, 0x00,
  614. 0x05, 0xfa, 0x10, 0xef, 0x25, 0x05, 0x00,
  615. 0x05, 0xfa, 0x11, 0xee, 0x26, 0x05, 0x00,
  616. 0x05, 0xfa, 0x12, 0xed, 0x27, 0x05, 0x00,
  617. 0x05, 0xfa, 0x13, 0xec, 0x04, 0x05, 0x00,
  618. 0x05, 0xfa, 0x15, 0xea, 0x0a, 0x05, 0x00,
  619. 0x05, 0xfa, 0x16, 0xe9, 0x11, 0x05, 0x00,
  620. 0x05, 0xfa, 0x17, 0xe8, 0x15, 0x05, 0x00,
  621. 0x05, 0xfa, 0x18, 0xe7, 0x16, 0x05, 0x00,
  622. 0x05, 0xfa, 0x1c, 0xe3, 0x05, 0x05, 0x00,
  623. 0x05, 0xfa, 0x1d, 0xe2, 0x09, 0x05, 0x00,
  624. 0x05, 0xfa, 0x4d, 0xb2, 0x3f, 0x05, 0x00,
  625. 0x05, 0xfa, 0x56, 0xa9, 0x3e, 0x05, 0x00
  626. };
  627. /* Digittrade DVB-T USB Stick */
  628. static struct dvb_usb_rc_key af9015_rc_keys_digittrade[] = {
  629. { 0x010f, KEY_LAST }, /* RETURN */
  630. { 0x0517, KEY_TEXT }, /* TELETEXT */
  631. { 0x0108, KEY_EPG }, /* EPG */
  632. { 0x0513, KEY_POWER }, /* POWER */
  633. { 0x0109, KEY_ZOOM }, /* FULLSCREEN */
  634. { 0x0040, KEY_AUDIO }, /* DUAL SOUND */
  635. { 0x002c, KEY_PRINT }, /* SNAPSHOT */
  636. { 0x0516, KEY_SUBTITLE }, /* SUBTITLE */
  637. { 0x0052, KEY_CHANNELUP }, /* CH Up */
  638. { 0x0051, KEY_CHANNELDOWN },/* Ch Dn */
  639. { 0x0057, KEY_VOLUMEUP }, /* Vol Up */
  640. { 0x0056, KEY_VOLUMEDOWN }, /* Vol Dn */
  641. { 0x0110, KEY_MUTE }, /* MUTE */
  642. { 0x0027, KEY_0 },
  643. { 0x001e, KEY_1 },
  644. { 0x001f, KEY_2 },
  645. { 0x0020, KEY_3 },
  646. { 0x0021, KEY_4 },
  647. { 0x0022, KEY_5 },
  648. { 0x0023, KEY_6 },
  649. { 0x0024, KEY_7 },
  650. { 0x0025, KEY_8 },
  651. { 0x0026, KEY_9 },
  652. { 0x0117, KEY_PLAYPAUSE }, /* TIMESHIFT */
  653. { 0x0115, KEY_RECORD }, /* RECORD */
  654. { 0x0313, KEY_PLAY }, /* PLAY */
  655. { 0x0116, KEY_STOP }, /* STOP */
  656. { 0x0113, KEY_PAUSE }, /* PAUSE */
  657. };
  658. static u8 af9015_ir_table_digittrade[] = {
  659. 0x00, 0xff, 0x06, 0xf9, 0x13, 0x05, 0x00,
  660. 0x00, 0xff, 0x4d, 0xb2, 0x17, 0x01, 0x00,
  661. 0x00, 0xff, 0x1f, 0xe0, 0x2c, 0x00, 0x00,
  662. 0x00, 0xff, 0x0a, 0xf5, 0x15, 0x01, 0x00,
  663. 0x00, 0xff, 0x0e, 0xf1, 0x16, 0x01, 0x00,
  664. 0x00, 0xff, 0x09, 0xf6, 0x09, 0x01, 0x00,
  665. 0x00, 0xff, 0x01, 0xfe, 0x08, 0x01, 0x00,
  666. 0x00, 0xff, 0x05, 0xfa, 0x10, 0x01, 0x00,
  667. 0x00, 0xff, 0x02, 0xfd, 0x56, 0x00, 0x00,
  668. 0x00, 0xff, 0x40, 0xbf, 0x57, 0x00, 0x00,
  669. 0x00, 0xff, 0x19, 0xe6, 0x52, 0x00, 0x00,
  670. 0x00, 0xff, 0x17, 0xe8, 0x51, 0x00, 0x00,
  671. 0x00, 0xff, 0x10, 0xef, 0x0f, 0x01, 0x00,
  672. 0x00, 0xff, 0x54, 0xab, 0x27, 0x00, 0x00,
  673. 0x00, 0xff, 0x1b, 0xe4, 0x1e, 0x00, 0x00,
  674. 0x00, 0xff, 0x11, 0xee, 0x1f, 0x00, 0x00,
  675. 0x00, 0xff, 0x15, 0xea, 0x20, 0x00, 0x00,
  676. 0x00, 0xff, 0x12, 0xed, 0x21, 0x00, 0x00,
  677. 0x00, 0xff, 0x16, 0xe9, 0x22, 0x00, 0x00,
  678. 0x00, 0xff, 0x4c, 0xb3, 0x23, 0x00, 0x00,
  679. 0x00, 0xff, 0x48, 0xb7, 0x24, 0x00, 0x00,
  680. 0x00, 0xff, 0x04, 0xfb, 0x25, 0x00, 0x00,
  681. 0x00, 0xff, 0x00, 0xff, 0x26, 0x00, 0x00,
  682. 0x00, 0xff, 0x1e, 0xe1, 0x13, 0x03, 0x00,
  683. 0x00, 0xff, 0x1a, 0xe5, 0x13, 0x01, 0x00,
  684. 0x00, 0xff, 0x03, 0xfc, 0x17, 0x05, 0x00,
  685. 0x00, 0xff, 0x0d, 0xf2, 0x16, 0x05, 0x00,
  686. 0x00, 0xff, 0x1d, 0xe2, 0x40, 0x00, 0x00,
  687. };
  688. /* TREKSTOR DVB-T USB Stick */
  689. static struct dvb_usb_rc_key af9015_rc_keys_trekstor[] = {
  690. { 0x0704, KEY_AGAIN }, /* Home */
  691. { 0x0705, KEY_MUTE }, /* Mute */
  692. { 0x0706, KEY_UP }, /* Up */
  693. { 0x0707, KEY_DOWN }, /* Down */
  694. { 0x0709, KEY_RIGHT }, /* Right */
  695. { 0x070a, KEY_ENTER }, /* OK */
  696. { 0x070b, KEY_FASTFORWARD }, /* Fast forward */
  697. { 0x070c, KEY_REWIND }, /* Rewind */
  698. { 0x070d, KEY_PLAY }, /* Play/Pause */
  699. { 0x070e, KEY_VOLUMEUP }, /* Volume + */
  700. { 0x070f, KEY_VOLUMEDOWN }, /* Volume - */
  701. { 0x0710, KEY_RECORD }, /* Record */
  702. { 0x0711, KEY_STOP }, /* Stop */
  703. { 0x0712, KEY_ZOOM }, /* TV */
  704. { 0x0713, KEY_EPG }, /* Info/EPG */
  705. { 0x0714, KEY_CHANNELDOWN }, /* Channel - */
  706. { 0x0715, KEY_CHANNELUP }, /* Channel + */
  707. { 0x071e, KEY_1 },
  708. { 0x071f, KEY_2 },
  709. { 0x0720, KEY_3 },
  710. { 0x0721, KEY_4 },
  711. { 0x0722, KEY_5 },
  712. { 0x0723, KEY_6 },
  713. { 0x0724, KEY_7 },
  714. { 0x0725, KEY_8 },
  715. { 0x0726, KEY_9 },
  716. { 0x0708, KEY_LEFT }, /* LEFT */
  717. { 0x0727, KEY_0 },
  718. };
  719. static u8 af9015_ir_table_trekstor[] = {
  720. 0x00, 0xff, 0x86, 0x79, 0x04, 0x07, 0x00,
  721. 0x00, 0xff, 0x85, 0x7a, 0x05, 0x07, 0x00,
  722. 0x00, 0xff, 0x87, 0x78, 0x06, 0x07, 0x00,
  723. 0x00, 0xff, 0x8c, 0x73, 0x07, 0x07, 0x00,
  724. 0x00, 0xff, 0x89, 0x76, 0x09, 0x07, 0x00,
  725. 0x00, 0xff, 0x88, 0x77, 0x0a, 0x07, 0x00,
  726. 0x00, 0xff, 0x8a, 0x75, 0x0b, 0x07, 0x00,
  727. 0x00, 0xff, 0x9e, 0x61, 0x0c, 0x07, 0x00,
  728. 0x00, 0xff, 0x8d, 0x72, 0x0d, 0x07, 0x00,
  729. 0x00, 0xff, 0x8b, 0x74, 0x0e, 0x07, 0x00,
  730. 0x00, 0xff, 0x9b, 0x64, 0x0f, 0x07, 0x00,
  731. 0x00, 0xff, 0x9d, 0x62, 0x10, 0x07, 0x00,
  732. 0x00, 0xff, 0x8e, 0x71, 0x11, 0x07, 0x00,
  733. 0x00, 0xff, 0x9c, 0x63, 0x12, 0x07, 0x00,
  734. 0x00, 0xff, 0x8f, 0x70, 0x13, 0x07, 0x00,
  735. 0x00, 0xff, 0x93, 0x6c, 0x14, 0x07, 0x00,
  736. 0x00, 0xff, 0x97, 0x68, 0x15, 0x07, 0x00,
  737. 0x00, 0xff, 0x92, 0x6d, 0x1e, 0x07, 0x00,
  738. 0x00, 0xff, 0x96, 0x69, 0x1f, 0x07, 0x00,
  739. 0x00, 0xff, 0x9a, 0x65, 0x20, 0x07, 0x00,
  740. 0x00, 0xff, 0x91, 0x6e, 0x21, 0x07, 0x00,
  741. 0x00, 0xff, 0x95, 0x6a, 0x22, 0x07, 0x00,
  742. 0x00, 0xff, 0x99, 0x66, 0x23, 0x07, 0x00,
  743. 0x00, 0xff, 0x90, 0x6f, 0x24, 0x07, 0x00,
  744. 0x00, 0xff, 0x94, 0x6b, 0x25, 0x07, 0x00,
  745. 0x00, 0xff, 0x98, 0x67, 0x26, 0x07, 0x00,
  746. 0x00, 0xff, 0x9f, 0x60, 0x08, 0x07, 0x00,
  747. 0x00, 0xff, 0x84, 0x7b, 0x27, 0x07, 0x00,
  748. };
  749. /* MSI DIGIVOX mini III */
  750. static struct dvb_usb_rc_key af9015_rc_keys_msi_digivox_iii[] = {
  751. { 0x0713, KEY_POWER }, /* [red power button] */
  752. { 0x073b, KEY_VIDEO }, /* Source */
  753. { 0x073e, KEY_ZOOM }, /* Zoom */
  754. { 0x070b, KEY_POWER2 }, /* ShutDown */
  755. { 0x071e, KEY_1 },
  756. { 0x071f, KEY_2 },
  757. { 0x0720, KEY_3 },
  758. { 0x0721, KEY_4 },
  759. { 0x0722, KEY_5 },
  760. { 0x0723, KEY_6 },
  761. { 0x0724, KEY_7 },
  762. { 0x0725, KEY_8 },
  763. { 0x0726, KEY_9 },
  764. { 0x0727, KEY_0 },
  765. { 0x0752, KEY_CHANNELUP }, /* CH+ */
  766. { 0x0751, KEY_CHANNELDOWN }, /* CH- */
  767. { 0x0750, KEY_VOLUMEUP }, /* Vol+ */
  768. { 0x074f, KEY_VOLUMEDOWN }, /* Vol- */
  769. { 0x0705, KEY_ESC }, /* [back up arrow] */
  770. { 0x0708, KEY_OK }, /* [enter arrow] */
  771. { 0x073f, KEY_RECORD }, /* Rec */
  772. { 0x0716, KEY_STOP }, /* Stop */
  773. { 0x072a, KEY_PLAY }, /* Play */
  774. { 0x073c, KEY_MUTE }, /* Mute */
  775. { 0x0718, KEY_UP },
  776. { 0x0707, KEY_DOWN },
  777. { 0x070f, KEY_LEFT },
  778. { 0x0715, KEY_RIGHT },
  779. { 0x0736, KEY_RED },
  780. { 0x0737, KEY_GREEN },
  781. { 0x072d, KEY_YELLOW },
  782. { 0x072e, KEY_BLUE },
  783. };
  784. static u8 af9015_ir_table_msi_digivox_iii[] = {
  785. 0x61, 0xd6, 0x43, 0xbc, 0x13, 0x07, 0x00, /* KEY_POWER */
  786. 0x61, 0xd6, 0x01, 0xfe, 0x3b, 0x07, 0x00, /* KEY_VIDEO */
  787. 0x61, 0xd6, 0x0b, 0xf4, 0x3e, 0x07, 0x00, /* KEY_ZOOM */
  788. 0x61, 0xd6, 0x03, 0xfc, 0x0b, 0x07, 0x00, /* KEY_POWER2 */
  789. 0x61, 0xd6, 0x04, 0xfb, 0x1e, 0x07, 0x00, /* KEY_1 */
  790. 0x61, 0xd6, 0x08, 0xf7, 0x1f, 0x07, 0x00, /* KEY_2 */
  791. 0x61, 0xd6, 0x02, 0xfd, 0x20, 0x07, 0x00, /* KEY_3 */
  792. 0x61, 0xd6, 0x0f, 0xf0, 0x21, 0x07, 0x00, /* KEY_4 */
  793. 0x61, 0xd6, 0x05, 0xfa, 0x22, 0x07, 0x00, /* KEY_5 */
  794. 0x61, 0xd6, 0x06, 0xf9, 0x23, 0x07, 0x00, /* KEY_6 */
  795. 0x61, 0xd6, 0x0c, 0xf3, 0x24, 0x07, 0x00, /* KEY_7 */
  796. 0x61, 0xd6, 0x0d, 0xf2, 0x25, 0x07, 0x00, /* KEY_8 */
  797. 0x61, 0xd6, 0x0a, 0xf5, 0x26, 0x07, 0x00, /* KEY_9 */
  798. 0x61, 0xd6, 0x11, 0xee, 0x27, 0x07, 0x00, /* KEY_0 */
  799. 0x61, 0xd6, 0x09, 0xf6, 0x52, 0x07, 0x00, /* KEY_CHANNELUP */
  800. 0x61, 0xd6, 0x07, 0xf8, 0x51, 0x07, 0x00, /* KEY_CHANNELDOWN */
  801. 0x61, 0xd6, 0x0e, 0xf1, 0x50, 0x07, 0x00, /* KEY_VOLUMEUP */
  802. 0x61, 0xd6, 0x13, 0xec, 0x4f, 0x07, 0x00, /* KEY_VOLUMEDOWN */
  803. 0x61, 0xd6, 0x10, 0xef, 0x05, 0x07, 0x00, /* KEY_ESC */
  804. 0x61, 0xd6, 0x12, 0xed, 0x08, 0x07, 0x00, /* KEY_OK */
  805. 0x61, 0xd6, 0x14, 0xeb, 0x3f, 0x07, 0x00, /* KEY_RECORD */
  806. 0x61, 0xd6, 0x15, 0xea, 0x16, 0x07, 0x00, /* KEY_STOP */
  807. 0x61, 0xd6, 0x16, 0xe9, 0x2a, 0x07, 0x00, /* KEY_PLAY */
  808. 0x61, 0xd6, 0x17, 0xe8, 0x3c, 0x07, 0x00, /* KEY_MUTE */
  809. 0x61, 0xd6, 0x18, 0xe7, 0x18, 0x07, 0x00, /* KEY_UP */
  810. 0x61, 0xd6, 0x19, 0xe6, 0x07, 0x07, 0x00, /* KEY_DOWN */
  811. 0x61, 0xd6, 0x1a, 0xe5, 0x0f, 0x07, 0x00, /* KEY_LEFT */
  812. 0x61, 0xd6, 0x1b, 0xe4, 0x15, 0x07, 0x00, /* KEY_RIGHT */
  813. 0x61, 0xd6, 0x1c, 0xe3, 0x36, 0x07, 0x00, /* KEY_RED */
  814. 0x61, 0xd6, 0x1d, 0xe2, 0x37, 0x07, 0x00, /* KEY_GREEN */
  815. 0x61, 0xd6, 0x1e, 0xe1, 0x2d, 0x07, 0x00, /* KEY_YELLOW */
  816. 0x61, 0xd6, 0x1f, 0xe0, 0x2e, 0x07, 0x00, /* KEY_BLUE */
  817. };
  818. #endif