it913x.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821
  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. ret = it913x_wr_reg(d, pro, PID_EN, st->pid_filter_onoff);
  185. mutex_unlock(&d->i2c_mutex);
  186. return ret;
  187. }
  188. static int it913x_pid_filter(struct dvb_usb_adapter *adap,
  189. int index, u16 pid, int onoff)
  190. {
  191. struct dvb_usb_device *d = adap_to_d(adap);
  192. struct it913x_state *st = adap_to_priv(adap);
  193. int ret;
  194. u8 pro = (adap->id == 0) ? DEV_0_DMOD : DEV_1_DMOD;
  195. mutex_lock(&d->i2c_mutex);
  196. deb_info(1, "PID_F (%02x)", onoff);
  197. ret = it913x_wr_reg(d, pro, PID_LSB, (u8)(pid & 0xff));
  198. ret |= it913x_wr_reg(d, pro, PID_MSB, (u8)(pid >> 8));
  199. ret |= it913x_wr_reg(d, pro, PID_INX_EN, (u8)onoff);
  200. ret |= it913x_wr_reg(d, pro, PID_INX, (u8)(index & 0x1f));
  201. if (d->udev->speed == USB_SPEED_HIGH && pid == 0x2000) {
  202. ret |= it913x_wr_reg(d , pro, PID_EN, !onoff);
  203. st->pid_filter_onoff = !onoff;
  204. } else
  205. st->pid_filter_onoff =
  206. adap->pid_filtering;
  207. mutex_unlock(&d->i2c_mutex);
  208. return 0;
  209. }
  210. static int it913x_return_status(struct dvb_usb_device *d)
  211. {
  212. struct it913x_state *st = d->priv;
  213. int ret = it913x_query(d, DEV_0);
  214. if (st->it913x_config.firmware > 0)
  215. info("Firmware Version %d", st->it913x_config.firmware);
  216. return ret;
  217. }
  218. static int it913x_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
  219. int num)
  220. {
  221. struct dvb_usb_device *d = i2c_get_adapdata(adap);
  222. static u8 data[256];
  223. int ret;
  224. u32 reg;
  225. u8 pro;
  226. mutex_lock(&d->i2c_mutex);
  227. deb_info(2, "num of messages %d address %02x", num, msg[0].addr);
  228. pro = (msg[0].addr & 0x2) ? DEV_0_DMOD : 0x0;
  229. pro |= (msg[0].addr & 0x20) ? DEV_1 : DEV_0;
  230. memcpy(data, msg[0].buf, msg[0].len);
  231. reg = (data[0] << 24) + (data[1] << 16) +
  232. (data[2] << 8) + data[3];
  233. if (num == 2) {
  234. ret = it913x_io(d, READ_LONG, pro,
  235. CMD_DEMOD_READ, reg, 0, data, msg[1].len);
  236. memcpy(msg[1].buf, data, msg[1].len);
  237. } else
  238. ret = it913x_io(d, WRITE_LONG, pro, CMD_DEMOD_WRITE,
  239. reg, 0, &data[4], msg[0].len - 4);
  240. mutex_unlock(&d->i2c_mutex);
  241. return ret;
  242. }
  243. static u32 it913x_i2c_func(struct i2c_adapter *adapter)
  244. {
  245. return I2C_FUNC_I2C;
  246. }
  247. static struct i2c_algorithm it913x_i2c_algo = {
  248. .master_xfer = it913x_i2c_xfer,
  249. .functionality = it913x_i2c_func,
  250. };
  251. /* Callbacks for DVB USB */
  252. #if IS_ENABLED(CONFIG_RC_CORE)
  253. static int it913x_rc_query(struct dvb_usb_device *d)
  254. {
  255. u8 ibuf[4];
  256. int ret;
  257. u32 key;
  258. /* Avoid conflict with frontends*/
  259. mutex_lock(&d->i2c_mutex);
  260. ret = it913x_io(d, READ_LONG, PRO_LINK, CMD_IR_GET,
  261. 0, 0, &ibuf[0], sizeof(ibuf));
  262. if ((ibuf[2] + ibuf[3]) == 0xff) {
  263. key = ibuf[2];
  264. key += ibuf[0] << 16;
  265. key += ibuf[1] << 8;
  266. deb_info(1, "NEC Extended Key =%08x", key);
  267. if (d->rc_dev != NULL)
  268. rc_keydown(d->rc_dev, key, 0);
  269. }
  270. mutex_unlock(&d->i2c_mutex);
  271. return ret;
  272. }
  273. static int it913x_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
  274. {
  275. struct it913x_state *st = d->priv;
  276. if (st->proprietary_ir == false) {
  277. rc->map_name = NULL;
  278. return 0;
  279. }
  280. rc->allowed_protos = RC_BIT_NEC;
  281. rc->query = it913x_rc_query;
  282. rc->interval = 250;
  283. return 0;
  284. }
  285. #else
  286. #define it913x_get_rc_config NULL
  287. #endif
  288. /* Firmware sets raw */
  289. static const char fw_it9135_v1[] = FW_IT9135_V1;
  290. static const char fw_it9135_v2[] = FW_IT9135_V2;
  291. static const char fw_it9137[] = FW_IT9137;
  292. static void ite_get_firmware_name(struct dvb_usb_device *d,
  293. const char **name)
  294. {
  295. struct it913x_state *st = d->priv;
  296. int sw;
  297. /* auto switch */
  298. if (le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_KWORLD_2)
  299. sw = IT9137_FW;
  300. else if (st->it913x_config.chip_ver == 1)
  301. sw = IT9135_V1_FW;
  302. else
  303. sw = IT9135_V2_FW;
  304. /* force switch */
  305. if (dvb_usb_it913x_firmware != IT9135_AUTO)
  306. sw = dvb_usb_it913x_firmware;
  307. switch (sw) {
  308. case IT9135_V1_FW:
  309. st->it913x_config.firmware_ver = 1;
  310. st->it913x_config.adc_x2 = 1;
  311. st->it913x_config.read_slevel = false;
  312. *name = fw_it9135_v1;
  313. break;
  314. case IT9135_V2_FW:
  315. st->it913x_config.firmware_ver = 1;
  316. st->it913x_config.adc_x2 = 1;
  317. st->it913x_config.read_slevel = false;
  318. *name = fw_it9135_v2;
  319. switch (st->it913x_config.tuner_id_0) {
  320. case IT9135_61:
  321. case IT9135_62:
  322. break;
  323. default:
  324. info("Unknown tuner ID applying default 0x60");
  325. case IT9135_60:
  326. st->it913x_config.tuner_id_0 = IT9135_60;
  327. }
  328. break;
  329. case IT9137_FW:
  330. default:
  331. st->it913x_config.firmware_ver = 0;
  332. st->it913x_config.adc_x2 = 0;
  333. st->it913x_config.read_slevel = true;
  334. *name = fw_it9137;
  335. }
  336. return;
  337. }
  338. #define TS_MPEG_PKT_SIZE 188
  339. #define EP_LOW 21
  340. #define TS_BUFFER_SIZE_PID (EP_LOW*TS_MPEG_PKT_SIZE)
  341. #define EP_HIGH 348
  342. #define TS_BUFFER_SIZE_MAX (EP_HIGH*TS_MPEG_PKT_SIZE)
  343. static int it913x_get_stream_config(struct dvb_frontend *fe, u8 *ts_type,
  344. struct usb_data_stream_properties *stream)
  345. {
  346. struct dvb_usb_adapter *adap = fe_to_adap(fe);
  347. if (adap->pid_filtering)
  348. stream->u.bulk.buffersize = TS_BUFFER_SIZE_PID;
  349. else
  350. stream->u.bulk.buffersize = TS_BUFFER_SIZE_MAX;
  351. return 0;
  352. }
  353. static int it913x_select_config(struct dvb_usb_device *d)
  354. {
  355. struct it913x_state *st = d->priv;
  356. int ret, reg;
  357. ret = it913x_return_status(d);
  358. if (ret < 0)
  359. return ret;
  360. if (st->it913x_config.chip_ver == 0x02
  361. && st->it913x_config.chip_type == 0x9135)
  362. reg = it913x_read_reg(d, 0x461d);
  363. else
  364. reg = it913x_read_reg(d, 0x461b);
  365. if (reg < 0)
  366. return reg;
  367. if (reg == 0) {
  368. st->it913x_config.dual_mode = 0;
  369. st->it913x_config.tuner_id_0 = IT9135_38;
  370. st->proprietary_ir = true;
  371. } else {
  372. /* TS mode */
  373. reg = it913x_read_reg(d, 0x49c5);
  374. if (reg < 0)
  375. return reg;
  376. st->it913x_config.dual_mode = reg;
  377. /* IR mode type */
  378. reg = it913x_read_reg(d, 0x49ac);
  379. if (reg < 0)
  380. return reg;
  381. if (reg == 5) {
  382. info("Remote propriety (raw) mode");
  383. st->proprietary_ir = true;
  384. } else if (reg == 1) {
  385. info("Remote HID mode NOT SUPPORTED");
  386. st->proprietary_ir = false;
  387. }
  388. /* Tuner_id */
  389. reg = it913x_read_reg(d, 0x49d0);
  390. if (reg < 0)
  391. return reg;
  392. st->it913x_config.tuner_id_0 = reg;
  393. }
  394. info("Dual mode=%x Tuner Type=%x", st->it913x_config.dual_mode,
  395. st->it913x_config.tuner_id_0);
  396. return ret;
  397. }
  398. static int it913x_streaming_ctrl(struct dvb_frontend *fe, int onoff)
  399. {
  400. struct dvb_usb_adapter *adap = fe_to_adap(fe);
  401. struct dvb_usb_device *d = adap_to_d(adap);
  402. struct it913x_state *st = fe_to_priv(fe);
  403. int ret = 0;
  404. u8 pro = (adap->id == 0) ? DEV_0_DMOD : DEV_1_DMOD;
  405. deb_info(1, "STM (%02x)", onoff);
  406. if (!onoff) {
  407. mutex_lock(&d->i2c_mutex);
  408. ret = it913x_wr_reg(d, pro, PID_RST, 0x1);
  409. mutex_unlock(&d->i2c_mutex);
  410. st->pid_filter_onoff =
  411. adap->pid_filtering;
  412. }
  413. return ret;
  414. }
  415. static int it913x_identify_state(struct dvb_usb_device *d, const char **name)
  416. {
  417. struct it913x_state *st = d->priv;
  418. int ret;
  419. u8 reg;
  420. /* Read and select config */
  421. ret = it913x_select_config(d);
  422. if (ret < 0)
  423. return ret;
  424. ite_get_firmware_name(d, name);
  425. if (st->it913x_config.firmware > 0)
  426. return WARM;
  427. if (st->it913x_config.dual_mode) {
  428. st->it913x_config.tuner_id_1 = it913x_read_reg(d, 0x49e0);
  429. ret = it913x_wr_reg(d, DEV_0, GPIOH1_EN, 0x1);
  430. ret |= it913x_wr_reg(d, DEV_0, GPIOH1_ON, 0x1);
  431. ret |= it913x_wr_reg(d, DEV_0, GPIOH1_O, 0x1);
  432. msleep(50);
  433. ret |= it913x_wr_reg(d, DEV_0, GPIOH1_O, 0x0);
  434. msleep(50);
  435. reg = it913x_read_reg(d, GPIOH1_O);
  436. if (reg == 0) {
  437. ret |= it913x_wr_reg(d, DEV_0, GPIOH1_O, 0x1);
  438. ret |= it913x_return_status(d);
  439. if (ret != 0)
  440. ret = it913x_wr_reg(d, DEV_0,
  441. GPIOH1_O, 0x0);
  442. }
  443. }
  444. reg = it913x_read_reg(d, IO_MUX_POWER_CLK);
  445. if (st->it913x_config.dual_mode) {
  446. ret |= it913x_wr_reg(d, DEV_0, 0x4bfb, CHIP2_I2C_ADDR);
  447. if (st->it913x_config.firmware_ver == 1)
  448. ret |= it913x_wr_reg(d, DEV_0, 0xcfff, 0x1);
  449. else
  450. ret |= it913x_wr_reg(d, DEV_0, CLK_O_EN, 0x1);
  451. } else {
  452. ret |= it913x_wr_reg(d, DEV_0, 0x4bfb, 0x0);
  453. if (st->it913x_config.firmware_ver == 1)
  454. ret |= it913x_wr_reg(d, DEV_0, 0xcfff, 0x0);
  455. else
  456. ret |= it913x_wr_reg(d, DEV_0, CLK_O_EN, 0x0);
  457. }
  458. ret |= it913x_wr_reg(d, DEV_0, I2C_CLK, I2C_CLK_100);
  459. return (ret < 0) ? ret : COLD;
  460. }
  461. static int it913x_download_firmware(struct dvb_usb_device *d,
  462. const struct firmware *fw)
  463. {
  464. struct it913x_state *st = d->priv;
  465. int ret = 0, i = 0, pos = 0;
  466. u8 packet_size, min_pkt;
  467. u8 *fw_data;
  468. ret = it913x_wr_reg(d, DEV_0, I2C_CLK, I2C_CLK_100);
  469. info("FRM Starting Firmware Download");
  470. /* Multi firmware loader */
  471. /* This uses scatter write firmware headers */
  472. /* The firmware must start with 03 XX 00 */
  473. /* and be the extact firmware length */
  474. if (st->it913x_config.chip_ver == 2)
  475. min_pkt = 0x11;
  476. else
  477. min_pkt = 0x19;
  478. while (i <= fw->size) {
  479. if (((fw->data[i] == 0x3) && (fw->data[i + 2] == 0x0))
  480. || (i == fw->size)) {
  481. packet_size = i - pos;
  482. if ((packet_size > min_pkt) || (i == fw->size)) {
  483. fw_data = (u8 *)(fw->data + pos);
  484. pos += packet_size;
  485. if (packet_size > 0) {
  486. ret = it913x_io(d, WRITE_DATA,
  487. DEV_0, CMD_SCATTER_WRITE, 0,
  488. 0, fw_data, packet_size);
  489. if (ret < 0)
  490. break;
  491. }
  492. udelay(1000);
  493. }
  494. }
  495. i++;
  496. }
  497. if (ret < 0)
  498. info("FRM Firmware Download Failed (%d)" , ret);
  499. else
  500. info("FRM Firmware Download Completed - Resetting Device");
  501. msleep(30);
  502. ret = it913x_io(d, WRITE_CMD, DEV_0, CMD_BOOT, 0, 0, NULL, 0);
  503. if (ret < 0)
  504. info("FRM Device not responding to reboot");
  505. ret = it913x_return_status(d);
  506. if (st->it913x_config.firmware == 0) {
  507. info("FRM Failed to reboot device");
  508. return -ENODEV;
  509. }
  510. msleep(30);
  511. ret = it913x_wr_reg(d, DEV_0, I2C_CLK, I2C_CLK_400);
  512. msleep(30);
  513. /* Tuner function */
  514. if (st->it913x_config.dual_mode)
  515. ret |= it913x_wr_reg(d, DEV_0_DMOD , 0xec4c, 0xa0);
  516. else
  517. ret |= it913x_wr_reg(d, DEV_0_DMOD , 0xec4c, 0x68);
  518. if ((st->it913x_config.chip_ver == 1) &&
  519. (st->it913x_config.chip_type == 0x9135)) {
  520. ret |= it913x_wr_reg(d, DEV_0, PADODPU, 0x0);
  521. ret |= it913x_wr_reg(d, DEV_0, AGC_O_D, 0x0);
  522. if (st->it913x_config.dual_mode) {
  523. ret |= it913x_wr_reg(d, DEV_1, PADODPU, 0x0);
  524. ret |= it913x_wr_reg(d, DEV_1, AGC_O_D, 0x0);
  525. }
  526. }
  527. return (ret < 0) ? -ENODEV : 0;
  528. }
  529. static int it913x_name(struct dvb_usb_adapter *adap)
  530. {
  531. struct dvb_usb_device *d = adap_to_d(adap);
  532. const char *desc = d->name;
  533. char *fe_name[] = {"_1", "_2", "_3", "_4"};
  534. char *name = adap->fe[0]->ops.info.name;
  535. strlcpy(name, desc, 128);
  536. strlcat(name, fe_name[adap->id], 128);
  537. return 0;
  538. }
  539. static int it913x_frontend_attach(struct dvb_usb_adapter *adap)
  540. {
  541. struct dvb_usb_device *d = adap_to_d(adap);
  542. struct it913x_state *st = d->priv;
  543. int ret = 0;
  544. u8 adap_addr = I2C_BASE_ADDR + (adap->id << 5);
  545. u16 ep_size = (adap->pid_filtering) ? TS_BUFFER_SIZE_PID / 4 :
  546. TS_BUFFER_SIZE_MAX / 4;
  547. u8 pkt_size = 0x80;
  548. if (d->udev->speed != USB_SPEED_HIGH)
  549. pkt_size = 0x10;
  550. st->it913x_config.adf = it913x_read_reg(d, IO_MUX_POWER_CLK);
  551. adap->fe[0] = dvb_attach(it913x_fe_attach,
  552. &d->i2c_adap, adap_addr, &st->it913x_config);
  553. if (adap->id == 0 && adap->fe[0]) {
  554. it913x_wr_reg(d, DEV_0_DMOD, MP2_SW_RST, 0x1);
  555. it913x_wr_reg(d, DEV_0_DMOD, MP2IF2_SW_RST, 0x1);
  556. it913x_wr_reg(d, DEV_0, EP0_TX_EN, 0x0f);
  557. it913x_wr_reg(d, DEV_0, EP0_TX_NAK, 0x1b);
  558. if (st->proprietary_ir == false) /* Enable endpoint 3 */
  559. it913x_wr_reg(d, DEV_0, EP0_TX_EN, 0x3f);
  560. else
  561. it913x_wr_reg(d, DEV_0, EP0_TX_EN, 0x2f);
  562. it913x_wr_reg(d, DEV_0, EP4_TX_LEN_LSB,
  563. ep_size & 0xff);
  564. it913x_wr_reg(d, DEV_0, EP4_TX_LEN_MSB, ep_size >> 8);
  565. ret = it913x_wr_reg(d, DEV_0, EP4_MAX_PKT, pkt_size);
  566. } else if (adap->id == 1 && adap->fe[0]) {
  567. if (st->proprietary_ir == false)
  568. it913x_wr_reg(d, DEV_0, EP0_TX_EN, 0x7f);
  569. else
  570. it913x_wr_reg(d, DEV_0, EP0_TX_EN, 0x6f);
  571. it913x_wr_reg(d, DEV_0, EP5_TX_LEN_LSB,
  572. ep_size & 0xff);
  573. it913x_wr_reg(d, DEV_0, EP5_TX_LEN_MSB, ep_size >> 8);
  574. it913x_wr_reg(d, DEV_0, EP5_MAX_PKT, pkt_size);
  575. it913x_wr_reg(d, DEV_0_DMOD, MP2IF2_EN, 0x1);
  576. it913x_wr_reg(d, DEV_1_DMOD, MP2IF_SERIAL, 0x1);
  577. it913x_wr_reg(d, DEV_1, TOP_HOSTB_SER_MODE, 0x1);
  578. it913x_wr_reg(d, DEV_0_DMOD, TSIS_ENABLE, 0x1);
  579. it913x_wr_reg(d, DEV_0_DMOD, MP2_SW_RST, 0x0);
  580. it913x_wr_reg(d, DEV_0_DMOD, MP2IF2_SW_RST, 0x0);
  581. it913x_wr_reg(d, DEV_0_DMOD, MP2IF2_HALF_PSB, 0x0);
  582. it913x_wr_reg(d, DEV_0_DMOD, MP2IF_STOP_EN, 0x1);
  583. it913x_wr_reg(d, DEV_1_DMOD, MPEG_FULL_SPEED, 0x0);
  584. ret = it913x_wr_reg(d, DEV_1_DMOD, MP2IF_STOP_EN, 0x0);
  585. } else
  586. return -ENODEV;
  587. ret |= it913x_name(adap);
  588. return ret;
  589. }
  590. /* DVB USB Driver */
  591. static int it913x_get_adapter_count(struct dvb_usb_device *d)
  592. {
  593. struct it913x_state *st = d->priv;
  594. if (st->it913x_config.dual_mode)
  595. return 2;
  596. return 1;
  597. }
  598. static struct dvb_usb_device_properties it913x_properties = {
  599. .driver_name = KBUILD_MODNAME,
  600. .owner = THIS_MODULE,
  601. .bInterfaceNumber = 0,
  602. .generic_bulk_ctrl_endpoint = 0x02,
  603. .generic_bulk_ctrl_endpoint_response = 0x81,
  604. .adapter_nr = adapter_nr,
  605. .size_of_priv = sizeof(struct it913x_state),
  606. .identify_state = it913x_identify_state,
  607. .i2c_algo = &it913x_i2c_algo,
  608. .download_firmware = it913x_download_firmware,
  609. .frontend_attach = it913x_frontend_attach,
  610. .get_rc_config = it913x_get_rc_config,
  611. .get_stream_config = it913x_get_stream_config,
  612. .get_adapter_count = it913x_get_adapter_count,
  613. .streaming_ctrl = it913x_streaming_ctrl,
  614. .adapter = {
  615. {
  616. .caps = DVB_USB_ADAP_HAS_PID_FILTER|
  617. DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
  618. .pid_filter_count = 32,
  619. .pid_filter = it913x_pid_filter,
  620. .pid_filter_ctrl = it913x_pid_filter_ctrl,
  621. .stream =
  622. DVB_USB_STREAM_BULK(0x84, 10, TS_BUFFER_SIZE_MAX),
  623. },
  624. {
  625. .caps = DVB_USB_ADAP_HAS_PID_FILTER|
  626. DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
  627. .pid_filter_count = 32,
  628. .pid_filter = it913x_pid_filter,
  629. .pid_filter_ctrl = it913x_pid_filter_ctrl,
  630. .stream =
  631. DVB_USB_STREAM_BULK(0x85, 10, TS_BUFFER_SIZE_MAX),
  632. }
  633. }
  634. };
  635. static const struct usb_device_id it913x_id_table[] = {
  636. { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_UB499_2T_T09,
  637. &it913x_properties, "Kworld UB499-2T T09(IT9137)",
  638. RC_MAP_IT913X_V1) },
  639. { DVB_USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9135,
  640. &it913x_properties, "ITE 9135 Generic",
  641. RC_MAP_IT913X_V1) },
  642. { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV22_IT9137,
  643. &it913x_properties, "Sveon STV22 Dual DVB-T HDTV(IT9137)",
  644. RC_MAP_IT913X_V1) },
  645. { DVB_USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9135_9005,
  646. &it913x_properties, "ITE 9135(9005) Generic",
  647. RC_MAP_IT913X_V2) },
  648. { DVB_USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9135_9006,
  649. &it913x_properties, "ITE 9135(9006) Generic",
  650. RC_MAP_IT913X_V1) },
  651. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_1835,
  652. &it913x_properties, "Avermedia A835B(1835)",
  653. RC_MAP_IT913X_V2) },
  654. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_2835,
  655. &it913x_properties, "Avermedia A835B(2835)",
  656. RC_MAP_IT913X_V2) },
  657. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_3835,
  658. &it913x_properties, "Avermedia A835B(3835)",
  659. RC_MAP_IT913X_V2) },
  660. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_4835,
  661. &it913x_properties, "Avermedia A835B(4835)",
  662. RC_MAP_IT913X_V2) },
  663. {} /* Terminating entry */
  664. };
  665. MODULE_DEVICE_TABLE(usb, it913x_id_table);
  666. static struct usb_driver it913x_driver = {
  667. .name = KBUILD_MODNAME,
  668. .probe = dvb_usbv2_probe,
  669. .disconnect = dvb_usbv2_disconnect,
  670. .suspend = dvb_usbv2_suspend,
  671. .resume = dvb_usbv2_resume,
  672. .id_table = it913x_id_table,
  673. };
  674. module_usb_driver(it913x_driver);
  675. MODULE_AUTHOR("Malcolm Priestley <tvboxspy@gmail.com>");
  676. MODULE_DESCRIPTION("it913x USB 2 Driver");
  677. MODULE_VERSION("1.33");
  678. MODULE_LICENSE("GPL");
  679. MODULE_FIRMWARE(FW_IT9135_V1);
  680. MODULE_FIRMWARE(FW_IT9135_V2);
  681. MODULE_FIRMWARE(FW_IT9137);