it913x.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825
  1. /*
  2. * DVB USB compliant linux driver for ITE IT9135 and IT9137
  3. *
  4. * Copyright (C) 2011 Malcolm Priestley (tvboxspy@gmail.com)
  5. * IT9135 (C) ITE Tech Inc.
  6. * IT9137 (C) ITE Tech Inc.
  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 Version 2, as
  10. * published by the Free Software Foundation.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, write to the Free Software
  19. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20. *
  21. *
  22. * see Documentation/dvb/README.dvb-usb for more information
  23. * see Documentation/dvb/it9137.txt for firmware information
  24. *
  25. */
  26. #define DVB_USB_LOG_PREFIX "it913x"
  27. #include <linux/usb.h>
  28. #include <linux/usb/input.h>
  29. #include <media/rc-core.h>
  30. #include "dvb_usb.h"
  31. #include "it913x-fe.h"
  32. /* debug */
  33. static int dvb_usb_it913x_debug;
  34. #define it_debug(var, level, args...) \
  35. do { if ((var & level)) pr_debug(DVB_USB_LOG_PREFIX": " args); \
  36. } while (0)
  37. #define deb_info(level, args...) it_debug(dvb_usb_it913x_debug, level, args)
  38. #define info(args...) pr_info(DVB_USB_LOG_PREFIX": " args)
  39. module_param_named(debug, dvb_usb_it913x_debug, int, 0644);
  40. MODULE_PARM_DESC(debug, "set debugging level (1=info (or-able)).");
  41. static int dvb_usb_it913x_firmware;
  42. module_param_named(firmware, dvb_usb_it913x_firmware, int, 0644);
  43. MODULE_PARM_DESC(firmware, "set firmware 0=auto "\
  44. "1=IT9137 2=IT9135 V1 3=IT9135 V2");
  45. #define FW_IT9137 "dvb-usb-it9137-01.fw"
  46. #define FW_IT9135_V1 "dvb-usb-it9135-01.fw"
  47. #define FW_IT9135_V2 "dvb-usb-it9135-02.fw"
  48. DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
  49. struct it913x_state {
  50. struct ite_config it913x_config;
  51. u8 pid_filter_onoff;
  52. bool proprietary_ir;
  53. int cmd_counter;
  54. };
  55. static u16 check_sum(u8 *p, u8 len)
  56. {
  57. u16 sum = 0;
  58. u8 i = 1;
  59. while (i < len)
  60. sum += (i++ & 1) ? (*p++) << 8 : *p++;
  61. return ~sum;
  62. }
  63. static int it913x_io(struct dvb_usb_device *d, u8 mode, u8 pro,
  64. u8 cmd, u32 reg, u8 addr, u8 *data, u8 len)
  65. {
  66. struct it913x_state *st = d->priv;
  67. int ret = 0, i, buf_size = 1;
  68. u8 *buff;
  69. u8 rlen;
  70. u16 chk_sum;
  71. buff = kzalloc(256, GFP_KERNEL);
  72. if (!buff) {
  73. info("USB Buffer Failed");
  74. return -ENOMEM;
  75. }
  76. buff[buf_size++] = pro;
  77. buff[buf_size++] = cmd;
  78. buff[buf_size++] = st->cmd_counter;
  79. switch (mode) {
  80. case READ_LONG:
  81. case WRITE_LONG:
  82. buff[buf_size++] = len;
  83. buff[buf_size++] = 2;
  84. buff[buf_size++] = (reg >> 24);
  85. buff[buf_size++] = (reg >> 16) & 0xff;
  86. buff[buf_size++] = (reg >> 8) & 0xff;
  87. buff[buf_size++] = reg & 0xff;
  88. break;
  89. case READ_SHORT:
  90. buff[buf_size++] = addr;
  91. break;
  92. case WRITE_SHORT:
  93. buff[buf_size++] = len;
  94. buff[buf_size++] = addr;
  95. buff[buf_size++] = (reg >> 8) & 0xff;
  96. buff[buf_size++] = reg & 0xff;
  97. break;
  98. case READ_DATA:
  99. case WRITE_DATA:
  100. break;
  101. case WRITE_CMD:
  102. mode = 7;
  103. break;
  104. default:
  105. kfree(buff);
  106. return -EINVAL;
  107. }
  108. if (mode & 1) {
  109. for (i = 0; i < len ; i++)
  110. buff[buf_size++] = data[i];
  111. }
  112. chk_sum = check_sum(&buff[1], buf_size);
  113. buff[buf_size++] = chk_sum >> 8;
  114. buff[0] = buf_size;
  115. buff[buf_size++] = (chk_sum & 0xff);
  116. ret = dvb_usbv2_generic_rw(d, buff, buf_size, buff, (mode & 1) ?
  117. 5 : len + 5);
  118. if (ret < 0)
  119. goto error;
  120. rlen = (mode & 0x1) ? 0x1 : len;
  121. if (mode & 1)
  122. ret = buff[2];
  123. else
  124. memcpy(data, &buff[3], rlen);
  125. st->cmd_counter++;
  126. error: kfree(buff);
  127. return ret;
  128. }
  129. static int it913x_wr_reg(struct dvb_usb_device *d, u8 pro, u32 reg , u8 data)
  130. {
  131. int ret;
  132. u8 b[1];
  133. b[0] = data;
  134. ret = it913x_io(d, WRITE_LONG, pro,
  135. CMD_DEMOD_WRITE, reg, 0, b, sizeof(b));
  136. return ret;
  137. }
  138. static int it913x_read_reg(struct dvb_usb_device *d, u32 reg)
  139. {
  140. int ret;
  141. u8 data[1];
  142. ret = it913x_io(d, READ_LONG, DEV_0,
  143. CMD_DEMOD_READ, reg, 0, &data[0], sizeof(data));
  144. return (ret < 0) ? ret : data[0];
  145. }
  146. static int it913x_query(struct dvb_usb_device *d, u8 pro)
  147. {
  148. struct it913x_state *st = d->priv;
  149. int ret, i;
  150. u8 data[4];
  151. u8 ver;
  152. for (i = 0; i < 5; i++) {
  153. ret = it913x_io(d, READ_LONG, pro, CMD_DEMOD_READ,
  154. 0x1222, 0, &data[0], 3);
  155. ver = data[0];
  156. if (ver > 0 && ver < 3)
  157. break;
  158. msleep(100);
  159. }
  160. if (ver < 1 || ver > 2) {
  161. info("Failed to identify chip version applying 1");
  162. st->it913x_config.chip_ver = 0x1;
  163. st->it913x_config.chip_type = 0x9135;
  164. return 0;
  165. }
  166. st->it913x_config.chip_ver = ver;
  167. st->it913x_config.chip_type = (u16)(data[2] << 8) + data[1];
  168. info("Chip Version=%02x Chip Type=%04x", st->it913x_config.chip_ver,
  169. st->it913x_config.chip_type);
  170. ret = it913x_io(d, READ_SHORT, pro,
  171. CMD_QUERYINFO, 0, 0x1, &data[0], 4);
  172. st->it913x_config.firmware = (data[0] << 24) | (data[1] << 16) |
  173. (data[2] << 8) | data[3];
  174. return ret;
  175. }
  176. static int it913x_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
  177. {
  178. struct dvb_usb_device *d = adap_to_d(adap);
  179. struct it913x_state *st = adap_to_priv(adap);
  180. int ret;
  181. u8 pro = (adap->id == 0) ? DEV_0_DMOD : DEV_1_DMOD;
  182. mutex_lock(&d->i2c_mutex);
  183. deb_info(1, "PID_C (%02x)", onoff);
  184. st->pid_filter_onoff = adap->pid_filtering;
  185. ret = it913x_wr_reg(d, pro, PID_EN, st->pid_filter_onoff);
  186. mutex_unlock(&d->i2c_mutex);
  187. return ret;
  188. }
  189. static int it913x_pid_filter(struct dvb_usb_adapter *adap,
  190. int index, u16 pid, int onoff)
  191. {
  192. struct dvb_usb_device *d = adap_to_d(adap);
  193. struct it913x_state *st = adap_to_priv(adap);
  194. int ret;
  195. u8 pro = (adap->id == 0) ? DEV_0_DMOD : DEV_1_DMOD;
  196. mutex_lock(&d->i2c_mutex);
  197. deb_info(1, "PID_F (%02x)", onoff);
  198. ret = it913x_wr_reg(d, pro, PID_LSB, (u8)(pid & 0xff));
  199. ret |= it913x_wr_reg(d, pro, PID_MSB, (u8)(pid >> 8));
  200. ret |= it913x_wr_reg(d, pro, PID_INX_EN, (u8)onoff);
  201. ret |= it913x_wr_reg(d, pro, PID_INX, (u8)(index & 0x1f));
  202. if (d->udev->speed == USB_SPEED_HIGH && pid == 0x2000) {
  203. ret |= it913x_wr_reg(d , pro, PID_EN, !onoff);
  204. st->pid_filter_onoff = !onoff;
  205. } else
  206. st->pid_filter_onoff =
  207. adap->pid_filtering;
  208. mutex_unlock(&d->i2c_mutex);
  209. return 0;
  210. }
  211. static int it913x_return_status(struct dvb_usb_device *d)
  212. {
  213. struct it913x_state *st = d->priv;
  214. int ret = it913x_query(d, DEV_0);
  215. if (st->it913x_config.firmware > 0)
  216. info("Firmware Version %d", st->it913x_config.firmware);
  217. return ret;
  218. }
  219. static int it913x_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
  220. int num)
  221. {
  222. struct dvb_usb_device *d = i2c_get_adapdata(adap);
  223. static u8 data[256];
  224. int ret;
  225. u32 reg;
  226. u8 pro;
  227. mutex_lock(&d->i2c_mutex);
  228. deb_info(2, "num of messages %d address %02x", num, msg[0].addr);
  229. pro = (msg[0].addr & 0x2) ? DEV_0_DMOD : 0x0;
  230. pro |= (msg[0].addr & 0x20) ? DEV_1 : DEV_0;
  231. memcpy(data, msg[0].buf, msg[0].len);
  232. reg = (data[0] << 24) + (data[1] << 16) +
  233. (data[2] << 8) + data[3];
  234. if (num == 2) {
  235. ret = it913x_io(d, READ_LONG, pro,
  236. CMD_DEMOD_READ, reg, 0, data, msg[1].len);
  237. memcpy(msg[1].buf, data, msg[1].len);
  238. } else
  239. ret = it913x_io(d, WRITE_LONG, pro, CMD_DEMOD_WRITE,
  240. reg, 0, &data[4], msg[0].len - 4);
  241. mutex_unlock(&d->i2c_mutex);
  242. return ret;
  243. }
  244. static u32 it913x_i2c_func(struct i2c_adapter *adapter)
  245. {
  246. return I2C_FUNC_I2C;
  247. }
  248. static struct i2c_algorithm it913x_i2c_algo = {
  249. .master_xfer = it913x_i2c_xfer,
  250. .functionality = it913x_i2c_func,
  251. };
  252. /* Callbacks for DVB USB */
  253. #if IS_ENABLED(CONFIG_RC_CORE)
  254. static int it913x_rc_query(struct dvb_usb_device *d)
  255. {
  256. u8 ibuf[4];
  257. int ret;
  258. u32 key;
  259. /* Avoid conflict with frontends*/
  260. mutex_lock(&d->i2c_mutex);
  261. ret = it913x_io(d, READ_LONG, PRO_LINK, CMD_IR_GET,
  262. 0, 0, &ibuf[0], sizeof(ibuf));
  263. if ((ibuf[2] + ibuf[3]) == 0xff) {
  264. key = ibuf[2];
  265. key += ibuf[0] << 16;
  266. key += ibuf[1] << 8;
  267. deb_info(1, "NEC Extended Key =%08x", key);
  268. if (d->rc_dev != NULL)
  269. rc_keydown(d->rc_dev, key, 0);
  270. }
  271. mutex_unlock(&d->i2c_mutex);
  272. return ret;
  273. }
  274. static int it913x_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
  275. {
  276. struct it913x_state *st = d->priv;
  277. if (st->proprietary_ir == false) {
  278. rc->map_name = NULL;
  279. return 0;
  280. }
  281. rc->allowed_protos = RC_BIT_NEC;
  282. rc->query = it913x_rc_query;
  283. rc->interval = 250;
  284. return 0;
  285. }
  286. #else
  287. #define it913x_get_rc_config NULL
  288. #endif
  289. /* Firmware sets raw */
  290. static const char fw_it9135_v1[] = FW_IT9135_V1;
  291. static const char fw_it9135_v2[] = FW_IT9135_V2;
  292. static const char fw_it9137[] = FW_IT9137;
  293. static void ite_get_firmware_name(struct dvb_usb_device *d,
  294. const char **name)
  295. {
  296. struct it913x_state *st = d->priv;
  297. int sw;
  298. /* auto switch */
  299. if (le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_KWORLD_2)
  300. sw = IT9137_FW;
  301. else if (st->it913x_config.chip_ver == 1)
  302. sw = IT9135_V1_FW;
  303. else
  304. sw = IT9135_V2_FW;
  305. /* force switch */
  306. if (dvb_usb_it913x_firmware != IT9135_AUTO)
  307. sw = dvb_usb_it913x_firmware;
  308. switch (sw) {
  309. case IT9135_V1_FW:
  310. st->it913x_config.firmware_ver = 1;
  311. st->it913x_config.adc_x2 = 1;
  312. st->it913x_config.read_slevel = false;
  313. *name = fw_it9135_v1;
  314. break;
  315. case IT9135_V2_FW:
  316. st->it913x_config.firmware_ver = 1;
  317. st->it913x_config.adc_x2 = 1;
  318. st->it913x_config.read_slevel = false;
  319. *name = fw_it9135_v2;
  320. switch (st->it913x_config.tuner_id_0) {
  321. case IT9135_61:
  322. case IT9135_62:
  323. break;
  324. default:
  325. info("Unknown tuner ID applying default 0x60");
  326. case IT9135_60:
  327. st->it913x_config.tuner_id_0 = IT9135_60;
  328. }
  329. break;
  330. case IT9137_FW:
  331. default:
  332. st->it913x_config.firmware_ver = 0;
  333. st->it913x_config.adc_x2 = 0;
  334. st->it913x_config.read_slevel = true;
  335. *name = fw_it9137;
  336. }
  337. return;
  338. }
  339. #define TS_MPEG_PKT_SIZE 188
  340. #define EP_LOW 21
  341. #define TS_BUFFER_SIZE_PID (EP_LOW*TS_MPEG_PKT_SIZE)
  342. #define EP_HIGH 348
  343. #define TS_BUFFER_SIZE_MAX (EP_HIGH*TS_MPEG_PKT_SIZE)
  344. static int it913x_get_stream_config(struct dvb_frontend *fe, u8 *ts_type,
  345. struct usb_data_stream_properties *stream)
  346. {
  347. struct dvb_usb_adapter *adap = fe_to_adap(fe);
  348. if (adap->pid_filtering)
  349. stream->u.bulk.buffersize = TS_BUFFER_SIZE_PID;
  350. else
  351. stream->u.bulk.buffersize = TS_BUFFER_SIZE_MAX;
  352. return 0;
  353. }
  354. static int it913x_select_config(struct dvb_usb_device *d)
  355. {
  356. struct it913x_state *st = d->priv;
  357. int ret, reg;
  358. ret = it913x_return_status(d);
  359. if (ret < 0)
  360. return ret;
  361. if (st->it913x_config.chip_ver == 0x02
  362. && st->it913x_config.chip_type == 0x9135)
  363. reg = it913x_read_reg(d, 0x461d);
  364. else
  365. reg = it913x_read_reg(d, 0x461b);
  366. if (reg < 0)
  367. return reg;
  368. if (reg == 0) {
  369. st->it913x_config.dual_mode = 0;
  370. st->it913x_config.tuner_id_0 = IT9135_38;
  371. st->proprietary_ir = true;
  372. } else {
  373. /* TS mode */
  374. reg = it913x_read_reg(d, 0x49c5);
  375. if (reg < 0)
  376. return reg;
  377. st->it913x_config.dual_mode = reg;
  378. /* IR mode type */
  379. reg = it913x_read_reg(d, 0x49ac);
  380. if (reg < 0)
  381. return reg;
  382. if (reg == 5) {
  383. info("Remote propriety (raw) mode");
  384. st->proprietary_ir = true;
  385. } else if (reg == 1) {
  386. info("Remote HID mode NOT SUPPORTED");
  387. st->proprietary_ir = false;
  388. }
  389. /* Tuner_id */
  390. reg = it913x_read_reg(d, 0x49d0);
  391. if (reg < 0)
  392. return reg;
  393. st->it913x_config.tuner_id_0 = reg;
  394. }
  395. info("Dual mode=%x Tuner Type=%x", st->it913x_config.dual_mode,
  396. st->it913x_config.tuner_id_0);
  397. return ret;
  398. }
  399. static int it913x_streaming_ctrl(struct dvb_frontend *fe, int onoff)
  400. {
  401. struct dvb_usb_adapter *adap = fe_to_adap(fe);
  402. struct dvb_usb_device *d = adap_to_d(adap);
  403. struct it913x_state *st = fe_to_priv(fe);
  404. int ret = 0;
  405. u8 pro = (adap->id == 0) ? DEV_0_DMOD : DEV_1_DMOD;
  406. deb_info(1, "STM (%02x)", onoff);
  407. if (!onoff) {
  408. mutex_lock(&d->i2c_mutex);
  409. ret = it913x_wr_reg(d, pro, PID_RST, 0x1);
  410. mutex_unlock(&d->i2c_mutex);
  411. st->pid_filter_onoff =
  412. adap->pid_filtering;
  413. }
  414. return ret;
  415. }
  416. static int it913x_identify_state(struct dvb_usb_device *d, const char **name)
  417. {
  418. struct it913x_state *st = d->priv;
  419. int ret;
  420. u8 reg;
  421. /* Read and select config */
  422. ret = it913x_select_config(d);
  423. if (ret < 0)
  424. return ret;
  425. ite_get_firmware_name(d, name);
  426. if (st->it913x_config.firmware > 0)
  427. return WARM;
  428. if (st->it913x_config.dual_mode) {
  429. st->it913x_config.tuner_id_1 = it913x_read_reg(d, 0x49e0);
  430. ret = it913x_wr_reg(d, DEV_0, GPIOH1_EN, 0x1);
  431. ret |= it913x_wr_reg(d, DEV_0, GPIOH1_ON, 0x1);
  432. ret |= it913x_wr_reg(d, DEV_0, GPIOH1_O, 0x1);
  433. msleep(50);
  434. ret |= it913x_wr_reg(d, DEV_0, GPIOH1_O, 0x0);
  435. msleep(50);
  436. reg = it913x_read_reg(d, GPIOH1_O);
  437. if (reg == 0) {
  438. ret |= it913x_wr_reg(d, DEV_0, GPIOH1_O, 0x1);
  439. ret |= it913x_return_status(d);
  440. if (ret != 0)
  441. ret = it913x_wr_reg(d, DEV_0,
  442. GPIOH1_O, 0x0);
  443. }
  444. }
  445. reg = it913x_read_reg(d, IO_MUX_POWER_CLK);
  446. if (st->it913x_config.dual_mode) {
  447. ret |= it913x_wr_reg(d, DEV_0, 0x4bfb, CHIP2_I2C_ADDR);
  448. if (st->it913x_config.firmware_ver == 1)
  449. ret |= it913x_wr_reg(d, DEV_0, 0xcfff, 0x1);
  450. else
  451. ret |= it913x_wr_reg(d, DEV_0, CLK_O_EN, 0x1);
  452. } else {
  453. ret |= it913x_wr_reg(d, DEV_0, 0x4bfb, 0x0);
  454. if (st->it913x_config.firmware_ver == 1)
  455. ret |= it913x_wr_reg(d, DEV_0, 0xcfff, 0x0);
  456. else
  457. ret |= it913x_wr_reg(d, DEV_0, CLK_O_EN, 0x0);
  458. }
  459. ret |= it913x_wr_reg(d, DEV_0, I2C_CLK, I2C_CLK_100);
  460. return (ret < 0) ? ret : COLD;
  461. }
  462. static int it913x_download_firmware(struct dvb_usb_device *d,
  463. const struct firmware *fw)
  464. {
  465. struct it913x_state *st = d->priv;
  466. int ret = 0, i = 0, pos = 0;
  467. u8 packet_size, min_pkt;
  468. u8 *fw_data;
  469. ret = it913x_wr_reg(d, DEV_0, I2C_CLK, I2C_CLK_100);
  470. info("FRM Starting Firmware Download");
  471. /* Multi firmware loader */
  472. /* This uses scatter write firmware headers */
  473. /* The firmware must start with 03 XX 00 */
  474. /* and be the extact firmware length */
  475. if (st->it913x_config.chip_ver == 2)
  476. min_pkt = 0x11;
  477. else
  478. min_pkt = 0x19;
  479. while (i <= fw->size) {
  480. if (((fw->data[i] == 0x3) && (fw->data[i + 2] == 0x0))
  481. || (i == fw->size)) {
  482. packet_size = i - pos;
  483. if ((packet_size > min_pkt) || (i == fw->size)) {
  484. fw_data = (u8 *)(fw->data + pos);
  485. pos += packet_size;
  486. if (packet_size > 0) {
  487. ret = it913x_io(d, WRITE_DATA,
  488. DEV_0, CMD_SCATTER_WRITE, 0,
  489. 0, fw_data, packet_size);
  490. if (ret < 0)
  491. break;
  492. }
  493. udelay(1000);
  494. }
  495. }
  496. i++;
  497. }
  498. if (ret < 0)
  499. info("FRM Firmware Download Failed (%d)" , ret);
  500. else
  501. info("FRM Firmware Download Completed - Resetting Device");
  502. msleep(30);
  503. ret = it913x_io(d, WRITE_CMD, DEV_0, CMD_BOOT, 0, 0, NULL, 0);
  504. if (ret < 0)
  505. info("FRM Device not responding to reboot");
  506. ret = it913x_return_status(d);
  507. if (st->it913x_config.firmware == 0) {
  508. info("FRM Failed to reboot device");
  509. return -ENODEV;
  510. }
  511. msleep(30);
  512. ret = it913x_wr_reg(d, DEV_0, I2C_CLK, I2C_CLK_400);
  513. msleep(30);
  514. /* Tuner function */
  515. if (st->it913x_config.dual_mode)
  516. ret |= it913x_wr_reg(d, DEV_0_DMOD , 0xec4c, 0xa0);
  517. else
  518. ret |= it913x_wr_reg(d, DEV_0_DMOD , 0xec4c, 0x68);
  519. if ((st->it913x_config.chip_ver == 1) &&
  520. (st->it913x_config.chip_type == 0x9135)) {
  521. ret |= it913x_wr_reg(d, DEV_0, PADODPU, 0x0);
  522. ret |= it913x_wr_reg(d, DEV_0, AGC_O_D, 0x0);
  523. if (st->it913x_config.dual_mode) {
  524. ret |= it913x_wr_reg(d, DEV_1, PADODPU, 0x0);
  525. ret |= it913x_wr_reg(d, DEV_1, AGC_O_D, 0x0);
  526. }
  527. }
  528. return (ret < 0) ? -ENODEV : 0;
  529. }
  530. static int it913x_name(struct dvb_usb_adapter *adap)
  531. {
  532. struct dvb_usb_device *d = adap_to_d(adap);
  533. const char *desc = d->name;
  534. char *fe_name[] = {"_1", "_2", "_3", "_4"};
  535. char *name = adap->fe[0]->ops.info.name;
  536. strlcpy(name, desc, 128);
  537. strlcat(name, fe_name[adap->id], 128);
  538. return 0;
  539. }
  540. static int it913x_frontend_attach(struct dvb_usb_adapter *adap)
  541. {
  542. struct dvb_usb_device *d = adap_to_d(adap);
  543. struct it913x_state *st = d->priv;
  544. int ret = 0;
  545. u8 adap_addr = I2C_BASE_ADDR + (adap->id << 5);
  546. u16 ep_size = (adap->pid_filtering) ? TS_BUFFER_SIZE_PID / 4 :
  547. TS_BUFFER_SIZE_MAX / 4;
  548. u8 pkt_size = 0x80;
  549. if (d->udev->speed != USB_SPEED_HIGH)
  550. pkt_size = 0x10;
  551. st->it913x_config.adf = it913x_read_reg(d, IO_MUX_POWER_CLK);
  552. adap->fe[0] = dvb_attach(it913x_fe_attach,
  553. &d->i2c_adap, adap_addr, &st->it913x_config);
  554. if (adap->id == 0 && adap->fe[0]) {
  555. it913x_wr_reg(d, DEV_0_DMOD, MP2_SW_RST, 0x1);
  556. it913x_wr_reg(d, DEV_0_DMOD, MP2IF2_SW_RST, 0x1);
  557. it913x_wr_reg(d, DEV_0, EP0_TX_EN, 0x0f);
  558. it913x_wr_reg(d, DEV_0, EP0_TX_NAK, 0x1b);
  559. if (st->proprietary_ir == false) /* Enable endpoint 3 */
  560. it913x_wr_reg(d, DEV_0, EP0_TX_EN, 0x3f);
  561. else
  562. it913x_wr_reg(d, DEV_0, EP0_TX_EN, 0x2f);
  563. it913x_wr_reg(d, DEV_0, EP4_TX_LEN_LSB,
  564. ep_size & 0xff);
  565. it913x_wr_reg(d, DEV_0, EP4_TX_LEN_MSB, ep_size >> 8);
  566. ret = it913x_wr_reg(d, DEV_0, EP4_MAX_PKT, pkt_size);
  567. } else if (adap->id == 1 && adap->fe[0]) {
  568. if (st->proprietary_ir == false)
  569. it913x_wr_reg(d, DEV_0, EP0_TX_EN, 0x7f);
  570. else
  571. it913x_wr_reg(d, DEV_0, EP0_TX_EN, 0x6f);
  572. it913x_wr_reg(d, DEV_0, EP5_TX_LEN_LSB,
  573. ep_size & 0xff);
  574. it913x_wr_reg(d, DEV_0, EP5_TX_LEN_MSB, ep_size >> 8);
  575. it913x_wr_reg(d, DEV_0, EP5_MAX_PKT, pkt_size);
  576. it913x_wr_reg(d, DEV_0_DMOD, MP2IF2_EN, 0x1);
  577. it913x_wr_reg(d, DEV_1_DMOD, MP2IF_SERIAL, 0x1);
  578. it913x_wr_reg(d, DEV_1, TOP_HOSTB_SER_MODE, 0x1);
  579. it913x_wr_reg(d, DEV_0_DMOD, TSIS_ENABLE, 0x1);
  580. it913x_wr_reg(d, DEV_0_DMOD, MP2_SW_RST, 0x0);
  581. it913x_wr_reg(d, DEV_0_DMOD, MP2IF2_SW_RST, 0x0);
  582. it913x_wr_reg(d, DEV_0_DMOD, MP2IF2_HALF_PSB, 0x0);
  583. it913x_wr_reg(d, DEV_0_DMOD, MP2IF_STOP_EN, 0x1);
  584. it913x_wr_reg(d, DEV_1_DMOD, MPEG_FULL_SPEED, 0x0);
  585. ret = it913x_wr_reg(d, DEV_1_DMOD, MP2IF_STOP_EN, 0x0);
  586. } else
  587. return -ENODEV;
  588. ret |= it913x_name(adap);
  589. return ret;
  590. }
  591. /* DVB USB Driver */
  592. static int it913x_get_adapter_count(struct dvb_usb_device *d)
  593. {
  594. struct it913x_state *st = d->priv;
  595. if (st->it913x_config.dual_mode)
  596. return 2;
  597. return 1;
  598. }
  599. static struct dvb_usb_device_properties it913x_properties = {
  600. .driver_name = KBUILD_MODNAME,
  601. .owner = THIS_MODULE,
  602. .bInterfaceNumber = 0,
  603. .generic_bulk_ctrl_endpoint = 0x02,
  604. .generic_bulk_ctrl_endpoint_response = 0x81,
  605. .adapter_nr = adapter_nr,
  606. .size_of_priv = sizeof(struct it913x_state),
  607. .identify_state = it913x_identify_state,
  608. .i2c_algo = &it913x_i2c_algo,
  609. .download_firmware = it913x_download_firmware,
  610. .frontend_attach = it913x_frontend_attach,
  611. .get_rc_config = it913x_get_rc_config,
  612. .get_stream_config = it913x_get_stream_config,
  613. .get_adapter_count = it913x_get_adapter_count,
  614. .streaming_ctrl = it913x_streaming_ctrl,
  615. .adapter = {
  616. {
  617. .caps = DVB_USB_ADAP_HAS_PID_FILTER|
  618. DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
  619. .pid_filter_count = 32,
  620. .pid_filter = it913x_pid_filter,
  621. .pid_filter_ctrl = it913x_pid_filter_ctrl,
  622. .stream =
  623. DVB_USB_STREAM_BULK(0x84, 10, TS_BUFFER_SIZE_MAX),
  624. },
  625. {
  626. .caps = DVB_USB_ADAP_HAS_PID_FILTER|
  627. DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
  628. .pid_filter_count = 32,
  629. .pid_filter = it913x_pid_filter,
  630. .pid_filter_ctrl = it913x_pid_filter_ctrl,
  631. .stream =
  632. DVB_USB_STREAM_BULK(0x85, 10, TS_BUFFER_SIZE_MAX),
  633. }
  634. }
  635. };
  636. static const struct usb_device_id it913x_id_table[] = {
  637. { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_UB499_2T_T09,
  638. &it913x_properties, "Kworld UB499-2T T09(IT9137)",
  639. RC_MAP_IT913X_V1) },
  640. { DVB_USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9135,
  641. &it913x_properties, "ITE 9135 Generic",
  642. RC_MAP_IT913X_V1) },
  643. { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV22_IT9137,
  644. &it913x_properties, "Sveon STV22 Dual DVB-T HDTV(IT9137)",
  645. RC_MAP_IT913X_V1) },
  646. { DVB_USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9135_9005,
  647. &it913x_properties, "ITE 9135(9005) Generic",
  648. RC_MAP_IT913X_V2) },
  649. { DVB_USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9135_9006,
  650. &it913x_properties, "ITE 9135(9006) Generic",
  651. RC_MAP_IT913X_V1) },
  652. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_1835,
  653. &it913x_properties, "Avermedia A835B(1835)",
  654. RC_MAP_IT913X_V2) },
  655. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_2835,
  656. &it913x_properties, "Avermedia A835B(2835)",
  657. RC_MAP_IT913X_V2) },
  658. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_3835,
  659. &it913x_properties, "Avermedia A835B(3835)",
  660. RC_MAP_IT913X_V2) },
  661. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_4835,
  662. &it913x_properties, "Avermedia A835B(4835)",
  663. RC_MAP_IT913X_V2) },
  664. { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_CTVDIGDUAL_V2,
  665. &it913x_properties, "Digital Dual TV Receiver CTVDIGDUAL_V2",
  666. RC_MAP_IT913X_V1) },
  667. {} /* Terminating entry */
  668. };
  669. MODULE_DEVICE_TABLE(usb, it913x_id_table);
  670. static struct usb_driver it913x_driver = {
  671. .name = KBUILD_MODNAME,
  672. .probe = dvb_usbv2_probe,
  673. .disconnect = dvb_usbv2_disconnect,
  674. .suspend = dvb_usbv2_suspend,
  675. .resume = dvb_usbv2_resume,
  676. .id_table = it913x_id_table,
  677. };
  678. module_usb_driver(it913x_driver);
  679. MODULE_AUTHOR("Malcolm Priestley <tvboxspy@gmail.com>");
  680. MODULE_DESCRIPTION("it913x USB 2 Driver");
  681. MODULE_VERSION("1.33");
  682. MODULE_LICENSE("GPL");
  683. MODULE_FIRMWARE(FW_IT9135_V1);
  684. MODULE_FIRMWARE(FW_IT9135_V2);
  685. MODULE_FIRMWARE(FW_IT9137);