af9035.c 56 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * Afatech AF9035 DVB USB driver
  4. *
  5. * Copyright (C) 2009 Antti Palosaari <[email protected]>
  6. * Copyright (C) 2012 Antti Palosaari <[email protected]>
  7. */
  8. #include "af9035.h"
  9. /* Max transfer size done by I2C transfer functions */
  10. #define MAX_XFER_SIZE 64
  11. DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
  12. static u16 af9035_checksum(const u8 *buf, size_t len)
  13. {
  14. size_t i;
  15. u16 checksum = 0;
  16. for (i = 1; i < len; i++) {
  17. if (i % 2)
  18. checksum += buf[i] << 8;
  19. else
  20. checksum += buf[i];
  21. }
  22. checksum = ~checksum;
  23. return checksum;
  24. }
  25. static int af9035_ctrl_msg(struct dvb_usb_device *d, struct usb_req *req)
  26. {
  27. #define REQ_HDR_LEN 4 /* send header size */
  28. #define ACK_HDR_LEN 3 /* rece header size */
  29. #define CHECKSUM_LEN 2
  30. #define USB_TIMEOUT 2000
  31. struct state *state = d_to_priv(d);
  32. struct usb_interface *intf = d->intf;
  33. int ret, wlen, rlen;
  34. u16 checksum, tmp_checksum;
  35. mutex_lock(&d->usb_mutex);
  36. /* buffer overflow check */
  37. if (req->wlen > (BUF_LEN - REQ_HDR_LEN - CHECKSUM_LEN) ||
  38. req->rlen > (BUF_LEN - ACK_HDR_LEN - CHECKSUM_LEN)) {
  39. dev_err(&intf->dev, "too much data wlen=%d rlen=%d\n",
  40. req->wlen, req->rlen);
  41. ret = -EINVAL;
  42. goto exit;
  43. }
  44. state->buf[0] = REQ_HDR_LEN + req->wlen + CHECKSUM_LEN - 1;
  45. state->buf[1] = req->mbox;
  46. state->buf[2] = req->cmd;
  47. state->buf[3] = state->seq++;
  48. memcpy(&state->buf[REQ_HDR_LEN], req->wbuf, req->wlen);
  49. wlen = REQ_HDR_LEN + req->wlen + CHECKSUM_LEN;
  50. rlen = ACK_HDR_LEN + req->rlen + CHECKSUM_LEN;
  51. /* calc and add checksum */
  52. checksum = af9035_checksum(state->buf, state->buf[0] - 1);
  53. state->buf[state->buf[0] - 1] = (checksum >> 8);
  54. state->buf[state->buf[0] - 0] = (checksum & 0xff);
  55. /* no ack for these packets */
  56. if (req->cmd == CMD_FW_DL)
  57. rlen = 0;
  58. ret = dvb_usbv2_generic_rw_locked(d,
  59. state->buf, wlen, state->buf, rlen);
  60. if (ret)
  61. goto exit;
  62. /* no ack for those packets */
  63. if (req->cmd == CMD_FW_DL)
  64. goto exit;
  65. /* verify checksum */
  66. checksum = af9035_checksum(state->buf, rlen - 2);
  67. tmp_checksum = (state->buf[rlen - 2] << 8) | state->buf[rlen - 1];
  68. if (tmp_checksum != checksum) {
  69. dev_err(&intf->dev, "command=%02x checksum mismatch (%04x != %04x)\n",
  70. req->cmd, tmp_checksum, checksum);
  71. ret = -EIO;
  72. goto exit;
  73. }
  74. /* check status */
  75. if (state->buf[2]) {
  76. /* fw returns status 1 when IR code was not received */
  77. if (req->cmd == CMD_IR_GET || state->buf[2] == 1) {
  78. ret = 1;
  79. goto exit;
  80. }
  81. dev_dbg(&intf->dev, "command=%02x failed fw error=%d\n",
  82. req->cmd, state->buf[2]);
  83. ret = -EIO;
  84. goto exit;
  85. }
  86. /* read request, copy returned data to return buf */
  87. if (req->rlen)
  88. memcpy(req->rbuf, &state->buf[ACK_HDR_LEN], req->rlen);
  89. exit:
  90. mutex_unlock(&d->usb_mutex);
  91. return ret;
  92. }
  93. /* write multiple registers */
  94. static int af9035_wr_regs(struct dvb_usb_device *d, u32 reg, u8 *val, int len)
  95. {
  96. struct usb_interface *intf = d->intf;
  97. u8 wbuf[MAX_XFER_SIZE];
  98. u8 mbox = (reg >> 16) & 0xff;
  99. struct usb_req req = { CMD_MEM_WR, mbox, 6 + len, wbuf, 0, NULL };
  100. if (6 + len > sizeof(wbuf)) {
  101. dev_warn(&intf->dev, "i2c wr: len=%d is too big!\n", len);
  102. return -EOPNOTSUPP;
  103. }
  104. wbuf[0] = len;
  105. wbuf[1] = 2;
  106. wbuf[2] = 0;
  107. wbuf[3] = 0;
  108. wbuf[4] = (reg >> 8) & 0xff;
  109. wbuf[5] = (reg >> 0) & 0xff;
  110. memcpy(&wbuf[6], val, len);
  111. return af9035_ctrl_msg(d, &req);
  112. }
  113. /* read multiple registers */
  114. static int af9035_rd_regs(struct dvb_usb_device *d, u32 reg, u8 *val, int len)
  115. {
  116. u8 wbuf[] = { len, 2, 0, 0, (reg >> 8) & 0xff, reg & 0xff };
  117. u8 mbox = (reg >> 16) & 0xff;
  118. struct usb_req req = { CMD_MEM_RD, mbox, sizeof(wbuf), wbuf, len, val };
  119. return af9035_ctrl_msg(d, &req);
  120. }
  121. /* write single register */
  122. static int af9035_wr_reg(struct dvb_usb_device *d, u32 reg, u8 val)
  123. {
  124. return af9035_wr_regs(d, reg, &val, 1);
  125. }
  126. /* read single register */
  127. static int af9035_rd_reg(struct dvb_usb_device *d, u32 reg, u8 *val)
  128. {
  129. return af9035_rd_regs(d, reg, val, 1);
  130. }
  131. /* write single register with mask */
  132. static int af9035_wr_reg_mask(struct dvb_usb_device *d, u32 reg, u8 val,
  133. u8 mask)
  134. {
  135. int ret;
  136. u8 tmp;
  137. /* no need for read if whole reg is written */
  138. if (mask != 0xff) {
  139. ret = af9035_rd_regs(d, reg, &tmp, 1);
  140. if (ret)
  141. return ret;
  142. val &= mask;
  143. tmp &= ~mask;
  144. val |= tmp;
  145. }
  146. return af9035_wr_regs(d, reg, &val, 1);
  147. }
  148. static int af9035_add_i2c_dev(struct dvb_usb_device *d, const char *type,
  149. u8 addr, void *platform_data, struct i2c_adapter *adapter)
  150. {
  151. int ret, num;
  152. struct state *state = d_to_priv(d);
  153. struct usb_interface *intf = d->intf;
  154. struct i2c_client *client;
  155. struct i2c_board_info board_info = {
  156. .addr = addr,
  157. .platform_data = platform_data,
  158. };
  159. strscpy(board_info.type, type, I2C_NAME_SIZE);
  160. /* find first free client */
  161. for (num = 0; num < AF9035_I2C_CLIENT_MAX; num++) {
  162. if (state->i2c_client[num] == NULL)
  163. break;
  164. }
  165. dev_dbg(&intf->dev, "num=%d\n", num);
  166. if (num == AF9035_I2C_CLIENT_MAX) {
  167. dev_err(&intf->dev, "I2C client out of index\n");
  168. ret = -ENODEV;
  169. goto err;
  170. }
  171. request_module("%s", board_info.type);
  172. /* register I2C device */
  173. client = i2c_new_client_device(adapter, &board_info);
  174. if (!i2c_client_has_driver(client)) {
  175. dev_err(&intf->dev, "failed to bind i2c device to %s driver\n", type);
  176. ret = -ENODEV;
  177. goto err;
  178. }
  179. /* increase I2C driver usage count */
  180. if (!try_module_get(client->dev.driver->owner)) {
  181. i2c_unregister_device(client);
  182. ret = -ENODEV;
  183. goto err;
  184. }
  185. state->i2c_client[num] = client;
  186. return 0;
  187. err:
  188. dev_dbg(&intf->dev, "failed=%d\n", ret);
  189. return ret;
  190. }
  191. static void af9035_del_i2c_dev(struct dvb_usb_device *d)
  192. {
  193. int num;
  194. struct state *state = d_to_priv(d);
  195. struct usb_interface *intf = d->intf;
  196. struct i2c_client *client;
  197. /* find last used client */
  198. num = AF9035_I2C_CLIENT_MAX;
  199. while (num--) {
  200. if (state->i2c_client[num] != NULL)
  201. break;
  202. }
  203. dev_dbg(&intf->dev, "num=%d\n", num);
  204. if (num == -1) {
  205. dev_err(&intf->dev, "I2C client out of index\n");
  206. goto err;
  207. }
  208. client = state->i2c_client[num];
  209. /* decrease I2C driver usage count */
  210. module_put(client->dev.driver->owner);
  211. /* unregister I2C device */
  212. i2c_unregister_device(client);
  213. state->i2c_client[num] = NULL;
  214. return;
  215. err:
  216. dev_dbg(&intf->dev, "failed\n");
  217. }
  218. static int af9035_i2c_master_xfer(struct i2c_adapter *adap,
  219. struct i2c_msg msg[], int num)
  220. {
  221. struct dvb_usb_device *d = i2c_get_adapdata(adap);
  222. struct state *state = d_to_priv(d);
  223. int ret;
  224. u32 reg;
  225. if (mutex_lock_interruptible(&d->i2c_mutex) < 0)
  226. return -EAGAIN;
  227. /*
  228. * AF9035 I2C sub header is 5 bytes long. Meaning of those bytes are:
  229. * 0: data len
  230. * 1: I2C addr << 1
  231. * 2: reg addr len
  232. * byte 3 and 4 can be used as reg addr
  233. * 3: reg addr MSB
  234. * used when reg addr len is set to 2
  235. * 4: reg addr LSB
  236. * used when reg addr len is set to 1 or 2
  237. *
  238. * For the simplify we do not use register addr at all.
  239. * NOTE: As a firmware knows tuner type there is very small possibility
  240. * there could be some tuner I2C hacks done by firmware and this may
  241. * lead problems if firmware expects those bytes are used.
  242. *
  243. * TODO: Here is few hacks. AF9035 chip integrates AF9033 demodulator.
  244. * IT9135 chip integrates AF9033 demodulator and RF tuner. For dual
  245. * tuner devices, there is also external AF9033 demodulator connected
  246. * via external I2C bus. All AF9033 demod I2C traffic, both single and
  247. * dual tuner configuration, is covered by firmware - actual USB IO
  248. * looks just like a memory access.
  249. * In case of IT913x chip, there is own tuner driver. It is implemented
  250. * currently as a I2C driver, even tuner IP block is likely build
  251. * directly into the demodulator memory space and there is no own I2C
  252. * bus. I2C subsystem does not allow register multiple devices to same
  253. * bus, having same slave address. Due to that we reuse demod address,
  254. * shifted by one bit, on that case.
  255. *
  256. * For IT930x we use a different command and the sub header is
  257. * different as well:
  258. * 0: data len
  259. * 1: I2C bus (0x03 seems to be only value used)
  260. * 2: I2C addr << 1
  261. */
  262. #define AF9035_IS_I2C_XFER_WRITE_READ(_msg, _num) \
  263. (_num == 2 && !(_msg[0].flags & I2C_M_RD) && (_msg[1].flags & I2C_M_RD))
  264. #define AF9035_IS_I2C_XFER_WRITE(_msg, _num) \
  265. (_num == 1 && !(_msg[0].flags & I2C_M_RD))
  266. #define AF9035_IS_I2C_XFER_READ(_msg, _num) \
  267. (_num == 1 && (_msg[0].flags & I2C_M_RD))
  268. if (AF9035_IS_I2C_XFER_WRITE_READ(msg, num)) {
  269. if (msg[0].len > 40 || msg[1].len > 40) {
  270. /* TODO: correct limits > 40 */
  271. ret = -EOPNOTSUPP;
  272. } else if ((msg[0].addr == state->af9033_i2c_addr[0]) ||
  273. (msg[0].addr == state->af9033_i2c_addr[1])) {
  274. if (msg[0].len < 3 || msg[1].len < 1) {
  275. ret = -EOPNOTSUPP;
  276. goto unlock;
  277. }
  278. /* demod access via firmware interface */
  279. reg = msg[0].buf[0] << 16 | msg[0].buf[1] << 8 |
  280. msg[0].buf[2];
  281. if (msg[0].addr == state->af9033_i2c_addr[1])
  282. reg |= 0x100000;
  283. ret = af9035_rd_regs(d, reg, &msg[1].buf[0],
  284. msg[1].len);
  285. } else if (state->no_read) {
  286. memset(msg[1].buf, 0, msg[1].len);
  287. ret = 0;
  288. } else {
  289. /* I2C write + read */
  290. u8 buf[MAX_XFER_SIZE];
  291. struct usb_req req = { CMD_I2C_RD, 0, 5 + msg[0].len,
  292. buf, msg[1].len, msg[1].buf };
  293. if (state->chip_type == 0x9306) {
  294. req.cmd = CMD_GENERIC_I2C_RD;
  295. req.wlen = 3 + msg[0].len;
  296. }
  297. req.mbox |= ((msg[0].addr & 0x80) >> 3);
  298. buf[0] = msg[1].len;
  299. if (state->chip_type == 0x9306) {
  300. buf[1] = 0x03; /* I2C bus */
  301. buf[2] = msg[0].addr << 1;
  302. memcpy(&buf[3], msg[0].buf, msg[0].len);
  303. } else {
  304. buf[1] = msg[0].addr << 1;
  305. buf[3] = 0x00; /* reg addr MSB */
  306. buf[4] = 0x00; /* reg addr LSB */
  307. /* Keep prev behavior for write req len > 2*/
  308. if (msg[0].len > 2) {
  309. buf[2] = 0x00; /* reg addr len */
  310. memcpy(&buf[5], msg[0].buf, msg[0].len);
  311. /* Use reg addr fields if write req len <= 2 */
  312. } else {
  313. req.wlen = 5;
  314. buf[2] = msg[0].len;
  315. if (msg[0].len == 2) {
  316. buf[3] = msg[0].buf[0];
  317. buf[4] = msg[0].buf[1];
  318. } else if (msg[0].len == 1) {
  319. buf[4] = msg[0].buf[0];
  320. }
  321. }
  322. }
  323. ret = af9035_ctrl_msg(d, &req);
  324. }
  325. } else if (AF9035_IS_I2C_XFER_WRITE(msg, num)) {
  326. if (msg[0].len > 40) {
  327. /* TODO: correct limits > 40 */
  328. ret = -EOPNOTSUPP;
  329. } else if ((msg[0].addr == state->af9033_i2c_addr[0]) ||
  330. (msg[0].addr == state->af9033_i2c_addr[1])) {
  331. if (msg[0].len < 3) {
  332. ret = -EOPNOTSUPP;
  333. goto unlock;
  334. }
  335. /* demod access via firmware interface */
  336. reg = msg[0].buf[0] << 16 | msg[0].buf[1] << 8 |
  337. msg[0].buf[2];
  338. if (msg[0].addr == state->af9033_i2c_addr[1])
  339. reg |= 0x100000;
  340. ret = af9035_wr_regs(d, reg, &msg[0].buf[3], msg[0].len - 3);
  341. } else {
  342. /* I2C write */
  343. u8 buf[MAX_XFER_SIZE];
  344. struct usb_req req = { CMD_I2C_WR, 0, 5 + msg[0].len,
  345. buf, 0, NULL };
  346. if (state->chip_type == 0x9306) {
  347. req.cmd = CMD_GENERIC_I2C_WR;
  348. req.wlen = 3 + msg[0].len;
  349. }
  350. req.mbox |= ((msg[0].addr & 0x80) >> 3);
  351. buf[0] = msg[0].len;
  352. if (state->chip_type == 0x9306) {
  353. buf[1] = 0x03; /* I2C bus */
  354. buf[2] = msg[0].addr << 1;
  355. memcpy(&buf[3], msg[0].buf, msg[0].len);
  356. } else {
  357. buf[1] = msg[0].addr << 1;
  358. buf[2] = 0x00; /* reg addr len */
  359. buf[3] = 0x00; /* reg addr MSB */
  360. buf[4] = 0x00; /* reg addr LSB */
  361. memcpy(&buf[5], msg[0].buf, msg[0].len);
  362. }
  363. ret = af9035_ctrl_msg(d, &req);
  364. }
  365. } else if (AF9035_IS_I2C_XFER_READ(msg, num)) {
  366. if (msg[0].len > 40) {
  367. /* TODO: correct limits > 40 */
  368. ret = -EOPNOTSUPP;
  369. } else if (state->no_read) {
  370. memset(msg[0].buf, 0, msg[0].len);
  371. ret = 0;
  372. } else {
  373. /* I2C read */
  374. u8 buf[5];
  375. struct usb_req req = { CMD_I2C_RD, 0, sizeof(buf),
  376. buf, msg[0].len, msg[0].buf };
  377. if (state->chip_type == 0x9306) {
  378. req.cmd = CMD_GENERIC_I2C_RD;
  379. req.wlen = 3;
  380. }
  381. req.mbox |= ((msg[0].addr & 0x80) >> 3);
  382. buf[0] = msg[0].len;
  383. if (state->chip_type == 0x9306) {
  384. buf[1] = 0x03; /* I2C bus */
  385. buf[2] = msg[0].addr << 1;
  386. } else {
  387. buf[1] = msg[0].addr << 1;
  388. buf[2] = 0x00; /* reg addr len */
  389. buf[3] = 0x00; /* reg addr MSB */
  390. buf[4] = 0x00; /* reg addr LSB */
  391. }
  392. ret = af9035_ctrl_msg(d, &req);
  393. }
  394. } else {
  395. /*
  396. * We support only three kind of I2C transactions:
  397. * 1) 1 x write + 1 x read (repeated start)
  398. * 2) 1 x write
  399. * 3) 1 x read
  400. */
  401. ret = -EOPNOTSUPP;
  402. }
  403. unlock:
  404. mutex_unlock(&d->i2c_mutex);
  405. if (ret < 0)
  406. return ret;
  407. else
  408. return num;
  409. }
  410. static u32 af9035_i2c_functionality(struct i2c_adapter *adapter)
  411. {
  412. return I2C_FUNC_I2C;
  413. }
  414. static struct i2c_algorithm af9035_i2c_algo = {
  415. .master_xfer = af9035_i2c_master_xfer,
  416. .functionality = af9035_i2c_functionality,
  417. };
  418. static int af9035_identify_state(struct dvb_usb_device *d, const char **name)
  419. {
  420. struct state *state = d_to_priv(d);
  421. struct usb_interface *intf = d->intf;
  422. int ret, i, ts_mode_invalid;
  423. unsigned int utmp, eeprom_addr;
  424. u8 tmp;
  425. u8 wbuf[1] = { 1 };
  426. u8 rbuf[4];
  427. struct usb_req req = { CMD_FW_QUERYINFO, 0, sizeof(wbuf), wbuf,
  428. sizeof(rbuf), rbuf };
  429. ret = af9035_rd_regs(d, 0x1222, rbuf, 3);
  430. if (ret < 0)
  431. goto err;
  432. state->chip_version = rbuf[0];
  433. state->chip_type = rbuf[2] << 8 | rbuf[1] << 0;
  434. ret = af9035_rd_reg(d, 0x384f, &state->prechip_version);
  435. if (ret < 0)
  436. goto err;
  437. dev_info(&intf->dev, "prechip_version=%02x chip_version=%02x chip_type=%04x\n",
  438. state->prechip_version, state->chip_version, state->chip_type);
  439. if (state->chip_type == 0x9135) {
  440. if (state->chip_version == 0x02) {
  441. *name = AF9035_FIRMWARE_IT9135_V2;
  442. utmp = 0x00461d;
  443. } else {
  444. *name = AF9035_FIRMWARE_IT9135_V1;
  445. utmp = 0x00461b;
  446. }
  447. /* Check if eeprom exists */
  448. ret = af9035_rd_reg(d, utmp, &tmp);
  449. if (ret < 0)
  450. goto err;
  451. if (tmp == 0x00) {
  452. dev_dbg(&intf->dev, "no eeprom\n");
  453. state->no_eeprom = true;
  454. goto check_firmware_status;
  455. }
  456. eeprom_addr = EEPROM_BASE_IT9135;
  457. } else if (state->chip_type == 0x9306) {
  458. *name = AF9035_FIRMWARE_IT9303;
  459. state->no_eeprom = true;
  460. goto check_firmware_status;
  461. } else {
  462. *name = AF9035_FIRMWARE_AF9035;
  463. eeprom_addr = EEPROM_BASE_AF9035;
  464. }
  465. /* Read and store eeprom */
  466. for (i = 0; i < 256; i += 32) {
  467. ret = af9035_rd_regs(d, eeprom_addr + i, &state->eeprom[i], 32);
  468. if (ret < 0)
  469. goto err;
  470. }
  471. dev_dbg(&intf->dev, "eeprom dump:\n");
  472. for (i = 0; i < 256; i += 16)
  473. dev_dbg(&intf->dev, "%*ph\n", 16, &state->eeprom[i]);
  474. /* check for dual tuner mode */
  475. tmp = state->eeprom[EEPROM_TS_MODE];
  476. ts_mode_invalid = 0;
  477. switch (tmp) {
  478. case 0:
  479. break;
  480. case 1:
  481. case 3:
  482. state->dual_mode = true;
  483. break;
  484. case 5:
  485. if (state->chip_type != 0x9135 && state->chip_type != 0x9306)
  486. state->dual_mode = true; /* AF9035 */
  487. else
  488. ts_mode_invalid = 1;
  489. break;
  490. default:
  491. ts_mode_invalid = 1;
  492. }
  493. dev_dbg(&intf->dev, "ts mode=%d dual mode=%d\n", tmp, state->dual_mode);
  494. if (ts_mode_invalid)
  495. dev_info(&intf->dev, "ts mode=%d not supported, defaulting to single tuner mode!", tmp);
  496. check_firmware_status:
  497. ret = af9035_ctrl_msg(d, &req);
  498. if (ret < 0)
  499. goto err;
  500. dev_dbg(&intf->dev, "reply=%*ph\n", 4, rbuf);
  501. if (rbuf[0] || rbuf[1] || rbuf[2] || rbuf[3])
  502. ret = WARM;
  503. else
  504. ret = COLD;
  505. return ret;
  506. err:
  507. dev_dbg(&intf->dev, "failed=%d\n", ret);
  508. return ret;
  509. }
  510. static int af9035_download_firmware_old(struct dvb_usb_device *d,
  511. const struct firmware *fw)
  512. {
  513. struct usb_interface *intf = d->intf;
  514. int ret, i, j, len;
  515. u8 wbuf[1];
  516. struct usb_req req = { 0, 0, 0, NULL, 0, NULL };
  517. struct usb_req req_fw_dl = { CMD_FW_DL, 0, 0, wbuf, 0, NULL };
  518. u8 hdr_core;
  519. u16 hdr_addr, hdr_data_len, hdr_checksum;
  520. #define MAX_DATA 58
  521. #define HDR_SIZE 7
  522. /*
  523. * Thanks to Daniel Glöckner <[email protected]> about that info!
  524. *
  525. * byte 0: MCS 51 core
  526. * There are two inside the AF9035 (1=Link and 2=OFDM) with separate
  527. * address spaces
  528. * byte 1-2: Big endian destination address
  529. * byte 3-4: Big endian number of data bytes following the header
  530. * byte 5-6: Big endian header checksum, apparently ignored by the chip
  531. * Calculated as ~(h[0]*256+h[1]+h[2]*256+h[3]+h[4]*256)
  532. */
  533. for (i = fw->size; i > HDR_SIZE;) {
  534. hdr_core = fw->data[fw->size - i + 0];
  535. hdr_addr = fw->data[fw->size - i + 1] << 8;
  536. hdr_addr |= fw->data[fw->size - i + 2] << 0;
  537. hdr_data_len = fw->data[fw->size - i + 3] << 8;
  538. hdr_data_len |= fw->data[fw->size - i + 4] << 0;
  539. hdr_checksum = fw->data[fw->size - i + 5] << 8;
  540. hdr_checksum |= fw->data[fw->size - i + 6] << 0;
  541. dev_dbg(&intf->dev, "core=%d addr=%04x data_len=%d checksum=%04x\n",
  542. hdr_core, hdr_addr, hdr_data_len, hdr_checksum);
  543. if (((hdr_core != 1) && (hdr_core != 2)) ||
  544. (hdr_data_len > i)) {
  545. dev_dbg(&intf->dev, "bad firmware\n");
  546. break;
  547. }
  548. /* download begin packet */
  549. req.cmd = CMD_FW_DL_BEGIN;
  550. ret = af9035_ctrl_msg(d, &req);
  551. if (ret < 0)
  552. goto err;
  553. /* download firmware packet(s) */
  554. for (j = HDR_SIZE + hdr_data_len; j > 0; j -= MAX_DATA) {
  555. len = j;
  556. if (len > MAX_DATA)
  557. len = MAX_DATA;
  558. req_fw_dl.wlen = len;
  559. req_fw_dl.wbuf = (u8 *) &fw->data[fw->size - i +
  560. HDR_SIZE + hdr_data_len - j];
  561. ret = af9035_ctrl_msg(d, &req_fw_dl);
  562. if (ret < 0)
  563. goto err;
  564. }
  565. /* download end packet */
  566. req.cmd = CMD_FW_DL_END;
  567. ret = af9035_ctrl_msg(d, &req);
  568. if (ret < 0)
  569. goto err;
  570. i -= hdr_data_len + HDR_SIZE;
  571. dev_dbg(&intf->dev, "data uploaded=%zu\n", fw->size - i);
  572. }
  573. /* print warn if firmware is bad, continue and see what happens */
  574. if (i)
  575. dev_warn(&intf->dev, "bad firmware\n");
  576. return 0;
  577. err:
  578. dev_dbg(&intf->dev, "failed=%d\n", ret);
  579. return ret;
  580. }
  581. static int af9035_download_firmware_new(struct dvb_usb_device *d,
  582. const struct firmware *fw)
  583. {
  584. struct usb_interface *intf = d->intf;
  585. int ret, i, i_prev;
  586. struct usb_req req_fw_dl = { CMD_FW_SCATTER_WR, 0, 0, NULL, 0, NULL };
  587. #define HDR_SIZE 7
  588. /*
  589. * There seems to be following firmware header. Meaning of bytes 0-3
  590. * is unknown.
  591. *
  592. * 0: 3
  593. * 1: 0, 1
  594. * 2: 0
  595. * 3: 1, 2, 3
  596. * 4: addr MSB
  597. * 5: addr LSB
  598. * 6: count of data bytes ?
  599. */
  600. for (i = HDR_SIZE, i_prev = 0; i <= fw->size; i++) {
  601. if (i == fw->size ||
  602. (fw->data[i + 0] == 0x03 &&
  603. (fw->data[i + 1] == 0x00 ||
  604. fw->data[i + 1] == 0x01) &&
  605. fw->data[i + 2] == 0x00)) {
  606. req_fw_dl.wlen = i - i_prev;
  607. req_fw_dl.wbuf = (u8 *) &fw->data[i_prev];
  608. i_prev = i;
  609. ret = af9035_ctrl_msg(d, &req_fw_dl);
  610. if (ret < 0)
  611. goto err;
  612. dev_dbg(&intf->dev, "data uploaded=%d\n", i);
  613. }
  614. }
  615. return 0;
  616. err:
  617. dev_dbg(&intf->dev, "failed=%d\n", ret);
  618. return ret;
  619. }
  620. static int af9035_download_firmware(struct dvb_usb_device *d,
  621. const struct firmware *fw)
  622. {
  623. struct usb_interface *intf = d->intf;
  624. struct state *state = d_to_priv(d);
  625. int ret;
  626. u8 wbuf[1];
  627. u8 rbuf[4];
  628. u8 tmp;
  629. struct usb_req req = { 0, 0, 0, NULL, 0, NULL };
  630. struct usb_req req_fw_ver = { CMD_FW_QUERYINFO, 0, 1, wbuf, 4, rbuf };
  631. dev_dbg(&intf->dev, "\n");
  632. /*
  633. * In case of dual tuner configuration we need to do some extra
  634. * initialization in order to download firmware to slave demod too,
  635. * which is done by master demod.
  636. * Master feeds also clock and controls power via GPIO.
  637. */
  638. if (state->dual_mode) {
  639. /* configure gpioh1, reset & power slave demod */
  640. ret = af9035_wr_reg_mask(d, 0x00d8b0, 0x01, 0x01);
  641. if (ret < 0)
  642. goto err;
  643. ret = af9035_wr_reg_mask(d, 0x00d8b1, 0x01, 0x01);
  644. if (ret < 0)
  645. goto err;
  646. ret = af9035_wr_reg_mask(d, 0x00d8af, 0x00, 0x01);
  647. if (ret < 0)
  648. goto err;
  649. usleep_range(10000, 50000);
  650. ret = af9035_wr_reg_mask(d, 0x00d8af, 0x01, 0x01);
  651. if (ret < 0)
  652. goto err;
  653. /* tell the slave I2C address */
  654. tmp = state->eeprom[EEPROM_2ND_DEMOD_ADDR];
  655. /* Use default I2C address if eeprom has no address set */
  656. if (!tmp)
  657. tmp = 0x1d << 1; /* 8-bit format used by chip */
  658. if ((state->chip_type == 0x9135) ||
  659. (state->chip_type == 0x9306)) {
  660. ret = af9035_wr_reg(d, 0x004bfb, tmp);
  661. if (ret < 0)
  662. goto err;
  663. } else {
  664. ret = af9035_wr_reg(d, 0x00417f, tmp);
  665. if (ret < 0)
  666. goto err;
  667. /* enable clock out */
  668. ret = af9035_wr_reg_mask(d, 0x00d81a, 0x01, 0x01);
  669. if (ret < 0)
  670. goto err;
  671. }
  672. }
  673. if (fw->data[0] == 0x01)
  674. ret = af9035_download_firmware_old(d, fw);
  675. else
  676. ret = af9035_download_firmware_new(d, fw);
  677. if (ret < 0)
  678. goto err;
  679. /* firmware loaded, request boot */
  680. req.cmd = CMD_FW_BOOT;
  681. ret = af9035_ctrl_msg(d, &req);
  682. if (ret < 0)
  683. goto err;
  684. /* ensure firmware starts */
  685. wbuf[0] = 1;
  686. ret = af9035_ctrl_msg(d, &req_fw_ver);
  687. if (ret < 0)
  688. goto err;
  689. if (!(rbuf[0] || rbuf[1] || rbuf[2] || rbuf[3])) {
  690. dev_err(&intf->dev, "firmware did not run\n");
  691. ret = -ENODEV;
  692. goto err;
  693. }
  694. dev_info(&intf->dev, "firmware version=%d.%d.%d.%d",
  695. rbuf[0], rbuf[1], rbuf[2], rbuf[3]);
  696. return 0;
  697. err:
  698. dev_dbg(&intf->dev, "failed=%d\n", ret);
  699. return ret;
  700. }
  701. static int af9035_read_config(struct dvb_usb_device *d)
  702. {
  703. struct usb_interface *intf = d->intf;
  704. struct state *state = d_to_priv(d);
  705. int ret, i;
  706. u8 tmp;
  707. u16 tmp16;
  708. /* Demod I2C address */
  709. state->af9033_i2c_addr[0] = 0x1c;
  710. state->af9033_i2c_addr[1] = 0x1d;
  711. state->af9033_config[0].adc_multiplier = AF9033_ADC_MULTIPLIER_2X;
  712. state->af9033_config[1].adc_multiplier = AF9033_ADC_MULTIPLIER_2X;
  713. state->af9033_config[0].ts_mode = AF9033_TS_MODE_USB;
  714. state->af9033_config[1].ts_mode = AF9033_TS_MODE_SERIAL;
  715. state->it930x_addresses = 0;
  716. if (state->chip_type == 0x9135) {
  717. /* feed clock for integrated RF tuner */
  718. state->af9033_config[0].dyn0_clk = true;
  719. state->af9033_config[1].dyn0_clk = true;
  720. if (state->chip_version == 0x02) {
  721. state->af9033_config[0].tuner = AF9033_TUNER_IT9135_60;
  722. state->af9033_config[1].tuner = AF9033_TUNER_IT9135_60;
  723. } else {
  724. state->af9033_config[0].tuner = AF9033_TUNER_IT9135_38;
  725. state->af9033_config[1].tuner = AF9033_TUNER_IT9135_38;
  726. }
  727. if (state->no_eeprom) {
  728. /* Remote controller to NEC polling by default */
  729. state->ir_mode = 0x05;
  730. state->ir_type = 0x00;
  731. goto skip_eeprom;
  732. }
  733. } else if (state->chip_type == 0x9306) {
  734. /*
  735. * IT930x is an USB bridge, only single demod-single tuner
  736. * configurations seen so far.
  737. */
  738. if ((le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_AVERMEDIA) &&
  739. (le16_to_cpu(d->udev->descriptor.idProduct) == USB_PID_AVERMEDIA_TD310)) {
  740. state->it930x_addresses = 1;
  741. }
  742. return 0;
  743. }
  744. /* Remote controller */
  745. state->ir_mode = state->eeprom[EEPROM_IR_MODE];
  746. state->ir_type = state->eeprom[EEPROM_IR_TYPE];
  747. if (state->dual_mode) {
  748. /* Read 2nd demodulator I2C address. 8-bit format on eeprom */
  749. tmp = state->eeprom[EEPROM_2ND_DEMOD_ADDR];
  750. if (tmp)
  751. state->af9033_i2c_addr[1] = tmp >> 1;
  752. dev_dbg(&intf->dev, "2nd demod I2C addr=%02x\n",
  753. state->af9033_i2c_addr[1]);
  754. }
  755. for (i = 0; i < state->dual_mode + 1; i++) {
  756. unsigned int eeprom_offset = 0;
  757. /* tuner */
  758. tmp = state->eeprom[EEPROM_1_TUNER_ID + eeprom_offset];
  759. dev_dbg(&intf->dev, "[%d]tuner=%02x\n", i, tmp);
  760. /* tuner sanity check */
  761. if (state->chip_type == 0x9135) {
  762. if (state->chip_version == 0x02) {
  763. /* IT9135 BX (v2) */
  764. switch (tmp) {
  765. case AF9033_TUNER_IT9135_60:
  766. case AF9033_TUNER_IT9135_61:
  767. case AF9033_TUNER_IT9135_62:
  768. state->af9033_config[i].tuner = tmp;
  769. break;
  770. }
  771. } else {
  772. /* IT9135 AX (v1) */
  773. switch (tmp) {
  774. case AF9033_TUNER_IT9135_38:
  775. case AF9033_TUNER_IT9135_51:
  776. case AF9033_TUNER_IT9135_52:
  777. state->af9033_config[i].tuner = tmp;
  778. break;
  779. }
  780. }
  781. } else {
  782. /* AF9035 */
  783. state->af9033_config[i].tuner = tmp;
  784. }
  785. if (state->af9033_config[i].tuner != tmp) {
  786. dev_info(&intf->dev, "[%d] overriding tuner from %02x to %02x\n",
  787. i, tmp, state->af9033_config[i].tuner);
  788. }
  789. switch (state->af9033_config[i].tuner) {
  790. case AF9033_TUNER_TUA9001:
  791. case AF9033_TUNER_FC0011:
  792. case AF9033_TUNER_MXL5007T:
  793. case AF9033_TUNER_TDA18218:
  794. case AF9033_TUNER_FC2580:
  795. case AF9033_TUNER_FC0012:
  796. state->af9033_config[i].spec_inv = 1;
  797. break;
  798. case AF9033_TUNER_IT9135_38:
  799. case AF9033_TUNER_IT9135_51:
  800. case AF9033_TUNER_IT9135_52:
  801. case AF9033_TUNER_IT9135_60:
  802. case AF9033_TUNER_IT9135_61:
  803. case AF9033_TUNER_IT9135_62:
  804. break;
  805. default:
  806. dev_warn(&intf->dev, "tuner id=%02x not supported, please report!",
  807. tmp);
  808. }
  809. /* disable dual mode if driver does not support it */
  810. if (i == 1)
  811. switch (state->af9033_config[i].tuner) {
  812. case AF9033_TUNER_FC0012:
  813. case AF9033_TUNER_IT9135_38:
  814. case AF9033_TUNER_IT9135_51:
  815. case AF9033_TUNER_IT9135_52:
  816. case AF9033_TUNER_IT9135_60:
  817. case AF9033_TUNER_IT9135_61:
  818. case AF9033_TUNER_IT9135_62:
  819. case AF9033_TUNER_MXL5007T:
  820. break;
  821. default:
  822. state->dual_mode = false;
  823. dev_info(&intf->dev, "driver does not support 2nd tuner and will disable it");
  824. }
  825. /* tuner IF frequency */
  826. tmp = state->eeprom[EEPROM_1_IF_L + eeprom_offset];
  827. tmp16 = tmp << 0;
  828. tmp = state->eeprom[EEPROM_1_IF_H + eeprom_offset];
  829. tmp16 |= tmp << 8;
  830. dev_dbg(&intf->dev, "[%d]IF=%d\n", i, tmp16);
  831. eeprom_offset += 0x10; /* shift for the 2nd tuner params */
  832. }
  833. skip_eeprom:
  834. /* get demod clock */
  835. ret = af9035_rd_reg(d, 0x00d800, &tmp);
  836. if (ret < 0)
  837. goto err;
  838. tmp = (tmp >> 0) & 0x0f;
  839. for (i = 0; i < ARRAY_SIZE(state->af9033_config); i++) {
  840. if (state->chip_type == 0x9135)
  841. state->af9033_config[i].clock = clock_lut_it9135[tmp];
  842. else
  843. state->af9033_config[i].clock = clock_lut_af9035[tmp];
  844. }
  845. state->no_read = false;
  846. /* Some MXL5007T devices cannot properly handle tuner I2C read ops. */
  847. if (state->af9033_config[0].tuner == AF9033_TUNER_MXL5007T &&
  848. le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_AVERMEDIA)
  849. switch (le16_to_cpu(d->udev->descriptor.idProduct)) {
  850. case USB_PID_AVERMEDIA_A867:
  851. case USB_PID_AVERMEDIA_TWINSTAR:
  852. dev_info(&intf->dev,
  853. "Device may have issues with I2C read operations. Enabling fix.\n");
  854. state->no_read = true;
  855. break;
  856. }
  857. return 0;
  858. err:
  859. dev_dbg(&intf->dev, "failed=%d\n", ret);
  860. return ret;
  861. }
  862. static int af9035_tua9001_tuner_callback(struct dvb_usb_device *d,
  863. int cmd, int arg)
  864. {
  865. struct usb_interface *intf = d->intf;
  866. int ret;
  867. u8 val;
  868. dev_dbg(&intf->dev, "cmd=%d arg=%d\n", cmd, arg);
  869. /*
  870. * CEN always enabled by hardware wiring
  871. * RESETN GPIOT3
  872. * RXEN GPIOT2
  873. */
  874. switch (cmd) {
  875. case TUA9001_CMD_RESETN:
  876. if (arg)
  877. val = 0x00;
  878. else
  879. val = 0x01;
  880. ret = af9035_wr_reg_mask(d, 0x00d8e7, val, 0x01);
  881. if (ret < 0)
  882. goto err;
  883. break;
  884. case TUA9001_CMD_RXEN:
  885. if (arg)
  886. val = 0x01;
  887. else
  888. val = 0x00;
  889. ret = af9035_wr_reg_mask(d, 0x00d8eb, val, 0x01);
  890. if (ret < 0)
  891. goto err;
  892. break;
  893. }
  894. return 0;
  895. err:
  896. dev_dbg(&intf->dev, "failed=%d\n", ret);
  897. return ret;
  898. }
  899. static int af9035_fc0011_tuner_callback(struct dvb_usb_device *d,
  900. int cmd, int arg)
  901. {
  902. struct usb_interface *intf = d->intf;
  903. int ret;
  904. switch (cmd) {
  905. case FC0011_FE_CALLBACK_POWER:
  906. /* Tuner enable */
  907. ret = af9035_wr_reg_mask(d, 0xd8eb, 1, 1);
  908. if (ret < 0)
  909. goto err;
  910. ret = af9035_wr_reg_mask(d, 0xd8ec, 1, 1);
  911. if (ret < 0)
  912. goto err;
  913. ret = af9035_wr_reg_mask(d, 0xd8ed, 1, 1);
  914. if (ret < 0)
  915. goto err;
  916. /* LED */
  917. ret = af9035_wr_reg_mask(d, 0xd8d0, 1, 1);
  918. if (ret < 0)
  919. goto err;
  920. ret = af9035_wr_reg_mask(d, 0xd8d1, 1, 1);
  921. if (ret < 0)
  922. goto err;
  923. usleep_range(10000, 50000);
  924. break;
  925. case FC0011_FE_CALLBACK_RESET:
  926. ret = af9035_wr_reg(d, 0xd8e9, 1);
  927. if (ret < 0)
  928. goto err;
  929. ret = af9035_wr_reg(d, 0xd8e8, 1);
  930. if (ret < 0)
  931. goto err;
  932. ret = af9035_wr_reg(d, 0xd8e7, 1);
  933. if (ret < 0)
  934. goto err;
  935. usleep_range(10000, 20000);
  936. ret = af9035_wr_reg(d, 0xd8e7, 0);
  937. if (ret < 0)
  938. goto err;
  939. usleep_range(10000, 20000);
  940. break;
  941. default:
  942. ret = -EINVAL;
  943. goto err;
  944. }
  945. return 0;
  946. err:
  947. dev_dbg(&intf->dev, "failed=%d\n", ret);
  948. return ret;
  949. }
  950. static int af9035_tuner_callback(struct dvb_usb_device *d, int cmd, int arg)
  951. {
  952. struct state *state = d_to_priv(d);
  953. switch (state->af9033_config[0].tuner) {
  954. case AF9033_TUNER_FC0011:
  955. return af9035_fc0011_tuner_callback(d, cmd, arg);
  956. case AF9033_TUNER_TUA9001:
  957. return af9035_tua9001_tuner_callback(d, cmd, arg);
  958. default:
  959. break;
  960. }
  961. return 0;
  962. }
  963. static int af9035_frontend_callback(void *adapter_priv, int component,
  964. int cmd, int arg)
  965. {
  966. struct i2c_adapter *adap = adapter_priv;
  967. struct dvb_usb_device *d = i2c_get_adapdata(adap);
  968. struct usb_interface *intf = d->intf;
  969. dev_dbg(&intf->dev, "component=%d cmd=%d arg=%d\n",
  970. component, cmd, arg);
  971. switch (component) {
  972. case DVB_FRONTEND_COMPONENT_TUNER:
  973. return af9035_tuner_callback(d, cmd, arg);
  974. default:
  975. break;
  976. }
  977. return 0;
  978. }
  979. static int af9035_get_adapter_count(struct dvb_usb_device *d)
  980. {
  981. struct state *state = d_to_priv(d);
  982. return state->dual_mode + 1;
  983. }
  984. static int af9035_frontend_attach(struct dvb_usb_adapter *adap)
  985. {
  986. struct state *state = adap_to_priv(adap);
  987. struct dvb_usb_device *d = adap_to_d(adap);
  988. struct usb_interface *intf = d->intf;
  989. int ret;
  990. dev_dbg(&intf->dev, "adap->id=%d\n", adap->id);
  991. if (!state->af9033_config[adap->id].tuner) {
  992. /* unsupported tuner */
  993. ret = -ENODEV;
  994. goto err;
  995. }
  996. state->af9033_config[adap->id].fe = &adap->fe[0];
  997. state->af9033_config[adap->id].ops = &state->ops;
  998. ret = af9035_add_i2c_dev(d, "af9033", state->af9033_i2c_addr[adap->id],
  999. &state->af9033_config[adap->id], &d->i2c_adap);
  1000. if (ret)
  1001. goto err;
  1002. if (adap->fe[0] == NULL) {
  1003. ret = -ENODEV;
  1004. goto err;
  1005. }
  1006. /* disable I2C-gate */
  1007. adap->fe[0]->ops.i2c_gate_ctrl = NULL;
  1008. adap->fe[0]->callback = af9035_frontend_callback;
  1009. return 0;
  1010. err:
  1011. dev_dbg(&intf->dev, "failed=%d\n", ret);
  1012. return ret;
  1013. }
  1014. /*
  1015. * The I2C speed register is calculated with:
  1016. * I2C speed register = (1000000000 / (24.4 * 16 * I2C_speed))
  1017. *
  1018. * The default speed register for it930x is 7, with means a
  1019. * speed of ~366 kbps
  1020. */
  1021. #define I2C_SPEED_366K 7
  1022. static int it930x_frontend_attach(struct dvb_usb_adapter *adap)
  1023. {
  1024. struct state *state = adap_to_priv(adap);
  1025. struct dvb_usb_device *d = adap_to_d(adap);
  1026. struct usb_interface *intf = d->intf;
  1027. int ret;
  1028. struct si2168_config si2168_config;
  1029. struct i2c_adapter *adapter;
  1030. dev_dbg(&intf->dev, "adap->id=%d\n", adap->id);
  1031. /* I2C master bus 2 clock speed 366k */
  1032. ret = af9035_wr_reg(d, 0x00f6a7, I2C_SPEED_366K);
  1033. if (ret < 0)
  1034. goto err;
  1035. /* I2C master bus 1,3 clock speed 366k */
  1036. ret = af9035_wr_reg(d, 0x00f103, I2C_SPEED_366K);
  1037. if (ret < 0)
  1038. goto err;
  1039. /* set gpio11 low */
  1040. ret = af9035_wr_reg_mask(d, 0xd8d4, 0x01, 0x01);
  1041. if (ret < 0)
  1042. goto err;
  1043. ret = af9035_wr_reg_mask(d, 0xd8d5, 0x01, 0x01);
  1044. if (ret < 0)
  1045. goto err;
  1046. ret = af9035_wr_reg_mask(d, 0xd8d3, 0x01, 0x01);
  1047. if (ret < 0)
  1048. goto err;
  1049. /* Tuner enable using gpiot2_en, gpiot2_on and gpiot2_o (reset) */
  1050. ret = af9035_wr_reg_mask(d, 0xd8b8, 0x01, 0x01);
  1051. if (ret < 0)
  1052. goto err;
  1053. ret = af9035_wr_reg_mask(d, 0xd8b9, 0x01, 0x01);
  1054. if (ret < 0)
  1055. goto err;
  1056. ret = af9035_wr_reg_mask(d, 0xd8b7, 0x00, 0x01);
  1057. if (ret < 0)
  1058. goto err;
  1059. msleep(200);
  1060. ret = af9035_wr_reg_mask(d, 0xd8b7, 0x01, 0x01);
  1061. if (ret < 0)
  1062. goto err;
  1063. memset(&si2168_config, 0, sizeof(si2168_config));
  1064. si2168_config.i2c_adapter = &adapter;
  1065. si2168_config.fe = &adap->fe[0];
  1066. si2168_config.ts_mode = SI2168_TS_SERIAL;
  1067. state->af9033_config[adap->id].fe = &adap->fe[0];
  1068. state->af9033_config[adap->id].ops = &state->ops;
  1069. ret = af9035_add_i2c_dev(d, "si2168",
  1070. it930x_addresses_table[state->it930x_addresses].frontend_i2c_addr,
  1071. &si2168_config, &d->i2c_adap);
  1072. if (ret)
  1073. goto err;
  1074. if (adap->fe[0] == NULL) {
  1075. ret = -ENODEV;
  1076. goto err;
  1077. }
  1078. state->i2c_adapter_demod = adapter;
  1079. return 0;
  1080. err:
  1081. dev_dbg(&intf->dev, "failed=%d\n", ret);
  1082. return ret;
  1083. }
  1084. static int af9035_frontend_detach(struct dvb_usb_adapter *adap)
  1085. {
  1086. struct state *state = adap_to_priv(adap);
  1087. struct dvb_usb_device *d = adap_to_d(adap);
  1088. struct usb_interface *intf = d->intf;
  1089. dev_dbg(&intf->dev, "adap->id=%d\n", adap->id);
  1090. if (adap->id == 1) {
  1091. if (state->i2c_client[1])
  1092. af9035_del_i2c_dev(d);
  1093. } else if (adap->id == 0) {
  1094. if (state->i2c_client[0])
  1095. af9035_del_i2c_dev(d);
  1096. }
  1097. return 0;
  1098. }
  1099. static const struct fc0011_config af9035_fc0011_config = {
  1100. .i2c_address = 0x60,
  1101. };
  1102. static struct mxl5007t_config af9035_mxl5007t_config[] = {
  1103. {
  1104. .xtal_freq_hz = MxL_XTAL_24_MHZ,
  1105. .if_freq_hz = MxL_IF_4_57_MHZ,
  1106. .invert_if = 0,
  1107. .loop_thru_enable = 0,
  1108. .clk_out_enable = 0,
  1109. .clk_out_amp = MxL_CLKOUT_AMP_0_94V,
  1110. }, {
  1111. .xtal_freq_hz = MxL_XTAL_24_MHZ,
  1112. .if_freq_hz = MxL_IF_4_57_MHZ,
  1113. .invert_if = 0,
  1114. .loop_thru_enable = 1,
  1115. .clk_out_enable = 1,
  1116. .clk_out_amp = MxL_CLKOUT_AMP_0_94V,
  1117. }
  1118. };
  1119. static struct tda18218_config af9035_tda18218_config = {
  1120. .i2c_address = 0x60,
  1121. .i2c_wr_max = 21,
  1122. };
  1123. static const struct fc0012_config af9035_fc0012_config[] = {
  1124. {
  1125. .i2c_address = 0x63,
  1126. .xtal_freq = FC_XTAL_36_MHZ,
  1127. .dual_master = true,
  1128. .loop_through = true,
  1129. .clock_out = true,
  1130. }, {
  1131. .i2c_address = 0x63 | 0x80, /* I2C bus select hack */
  1132. .xtal_freq = FC_XTAL_36_MHZ,
  1133. .dual_master = true,
  1134. }
  1135. };
  1136. static int af9035_tuner_attach(struct dvb_usb_adapter *adap)
  1137. {
  1138. struct state *state = adap_to_priv(adap);
  1139. struct dvb_usb_device *d = adap_to_d(adap);
  1140. struct usb_interface *intf = d->intf;
  1141. int ret;
  1142. struct dvb_frontend *fe;
  1143. struct i2c_msg msg[1];
  1144. u8 tuner_addr;
  1145. dev_dbg(&intf->dev, "adap->id=%d\n", adap->id);
  1146. /*
  1147. * XXX: Hack used in that function: we abuse unused I2C address bit [7]
  1148. * to carry info about used I2C bus for dual tuner configuration.
  1149. */
  1150. switch (state->af9033_config[adap->id].tuner) {
  1151. case AF9033_TUNER_TUA9001: {
  1152. struct tua9001_platform_data tua9001_pdata = {
  1153. .dvb_frontend = adap->fe[0],
  1154. };
  1155. /*
  1156. * AF9035 gpiot3 = TUA9001 RESETN
  1157. * AF9035 gpiot2 = TUA9001 RXEN
  1158. */
  1159. /* configure gpiot2 and gpiot2 as output */
  1160. ret = af9035_wr_reg_mask(d, 0x00d8ec, 0x01, 0x01);
  1161. if (ret < 0)
  1162. goto err;
  1163. ret = af9035_wr_reg_mask(d, 0x00d8ed, 0x01, 0x01);
  1164. if (ret < 0)
  1165. goto err;
  1166. ret = af9035_wr_reg_mask(d, 0x00d8e8, 0x01, 0x01);
  1167. if (ret < 0)
  1168. goto err;
  1169. ret = af9035_wr_reg_mask(d, 0x00d8e9, 0x01, 0x01);
  1170. if (ret < 0)
  1171. goto err;
  1172. /* attach tuner */
  1173. ret = af9035_add_i2c_dev(d, "tua9001", 0x60, &tua9001_pdata,
  1174. &d->i2c_adap);
  1175. if (ret)
  1176. goto err;
  1177. fe = adap->fe[0];
  1178. break;
  1179. }
  1180. case AF9033_TUNER_FC0011:
  1181. fe = dvb_attach(fc0011_attach, adap->fe[0],
  1182. &d->i2c_adap, &af9035_fc0011_config);
  1183. break;
  1184. case AF9033_TUNER_MXL5007T:
  1185. if (adap->id == 0) {
  1186. ret = af9035_wr_reg(d, 0x00d8e0, 1);
  1187. if (ret < 0)
  1188. goto err;
  1189. ret = af9035_wr_reg(d, 0x00d8e1, 1);
  1190. if (ret < 0)
  1191. goto err;
  1192. ret = af9035_wr_reg(d, 0x00d8df, 0);
  1193. if (ret < 0)
  1194. goto err;
  1195. msleep(30);
  1196. ret = af9035_wr_reg(d, 0x00d8df, 1);
  1197. if (ret < 0)
  1198. goto err;
  1199. msleep(300);
  1200. ret = af9035_wr_reg(d, 0x00d8c0, 1);
  1201. if (ret < 0)
  1202. goto err;
  1203. ret = af9035_wr_reg(d, 0x00d8c1, 1);
  1204. if (ret < 0)
  1205. goto err;
  1206. ret = af9035_wr_reg(d, 0x00d8bf, 0);
  1207. if (ret < 0)
  1208. goto err;
  1209. ret = af9035_wr_reg(d, 0x00d8b4, 1);
  1210. if (ret < 0)
  1211. goto err;
  1212. ret = af9035_wr_reg(d, 0x00d8b5, 1);
  1213. if (ret < 0)
  1214. goto err;
  1215. ret = af9035_wr_reg(d, 0x00d8b3, 1);
  1216. if (ret < 0)
  1217. goto err;
  1218. tuner_addr = 0x60;
  1219. } else {
  1220. tuner_addr = 0x60 | 0x80; /* I2C bus hack */
  1221. }
  1222. /* attach tuner */
  1223. fe = dvb_attach(mxl5007t_attach, adap->fe[0], &d->i2c_adap,
  1224. tuner_addr, &af9035_mxl5007t_config[adap->id]);
  1225. break;
  1226. case AF9033_TUNER_TDA18218:
  1227. /* attach tuner */
  1228. fe = dvb_attach(tda18218_attach, adap->fe[0],
  1229. &d->i2c_adap, &af9035_tda18218_config);
  1230. break;
  1231. case AF9033_TUNER_FC2580: {
  1232. struct fc2580_platform_data fc2580_pdata = {
  1233. .dvb_frontend = adap->fe[0],
  1234. };
  1235. /* Tuner enable using gpiot2_o, gpiot2_en and gpiot2_on */
  1236. ret = af9035_wr_reg_mask(d, 0xd8eb, 0x01, 0x01);
  1237. if (ret < 0)
  1238. goto err;
  1239. ret = af9035_wr_reg_mask(d, 0xd8ec, 0x01, 0x01);
  1240. if (ret < 0)
  1241. goto err;
  1242. ret = af9035_wr_reg_mask(d, 0xd8ed, 0x01, 0x01);
  1243. if (ret < 0)
  1244. goto err;
  1245. usleep_range(10000, 50000);
  1246. /* attach tuner */
  1247. ret = af9035_add_i2c_dev(d, "fc2580", 0x56, &fc2580_pdata,
  1248. &d->i2c_adap);
  1249. if (ret)
  1250. goto err;
  1251. fe = adap->fe[0];
  1252. break;
  1253. }
  1254. case AF9033_TUNER_FC0012:
  1255. /*
  1256. * AF9035 gpiot2 = FC0012 enable
  1257. * XXX: there seems to be something on gpioh8 too, but on my
  1258. * test I didn't find any difference.
  1259. */
  1260. if (adap->id == 0) {
  1261. /* configure gpiot2 as output and high */
  1262. ret = af9035_wr_reg_mask(d, 0xd8eb, 0x01, 0x01);
  1263. if (ret < 0)
  1264. goto err;
  1265. ret = af9035_wr_reg_mask(d, 0xd8ec, 0x01, 0x01);
  1266. if (ret < 0)
  1267. goto err;
  1268. ret = af9035_wr_reg_mask(d, 0xd8ed, 0x01, 0x01);
  1269. if (ret < 0)
  1270. goto err;
  1271. } else {
  1272. /*
  1273. * FIXME: That belongs for the FC0012 driver.
  1274. * Write 02 to FC0012 master tuner register 0d directly
  1275. * in order to make slave tuner working.
  1276. */
  1277. msg[0].addr = 0x63;
  1278. msg[0].flags = 0;
  1279. msg[0].len = 2;
  1280. msg[0].buf = "\x0d\x02";
  1281. ret = i2c_transfer(&d->i2c_adap, msg, 1);
  1282. if (ret < 0)
  1283. goto err;
  1284. }
  1285. usleep_range(10000, 50000);
  1286. fe = dvb_attach(fc0012_attach, adap->fe[0], &d->i2c_adap,
  1287. &af9035_fc0012_config[adap->id]);
  1288. break;
  1289. case AF9033_TUNER_IT9135_38:
  1290. case AF9033_TUNER_IT9135_51:
  1291. case AF9033_TUNER_IT9135_52:
  1292. case AF9033_TUNER_IT9135_60:
  1293. case AF9033_TUNER_IT9135_61:
  1294. case AF9033_TUNER_IT9135_62:
  1295. {
  1296. struct platform_device *pdev;
  1297. const char *name;
  1298. struct it913x_platform_data it913x_pdata = {
  1299. .regmap = state->af9033_config[adap->id].regmap,
  1300. .fe = adap->fe[0],
  1301. };
  1302. switch (state->af9033_config[adap->id].tuner) {
  1303. case AF9033_TUNER_IT9135_38:
  1304. case AF9033_TUNER_IT9135_51:
  1305. case AF9033_TUNER_IT9135_52:
  1306. name = "it9133ax-tuner";
  1307. break;
  1308. case AF9033_TUNER_IT9135_60:
  1309. case AF9033_TUNER_IT9135_61:
  1310. case AF9033_TUNER_IT9135_62:
  1311. name = "it9133bx-tuner";
  1312. break;
  1313. default:
  1314. ret = -ENODEV;
  1315. goto err;
  1316. }
  1317. if (state->dual_mode) {
  1318. if (adap->id == 0)
  1319. it913x_pdata.role = IT913X_ROLE_DUAL_MASTER;
  1320. else
  1321. it913x_pdata.role = IT913X_ROLE_DUAL_SLAVE;
  1322. } else {
  1323. it913x_pdata.role = IT913X_ROLE_SINGLE;
  1324. }
  1325. request_module("%s", "it913x");
  1326. pdev = platform_device_register_data(&d->intf->dev, name,
  1327. PLATFORM_DEVID_AUTO,
  1328. &it913x_pdata,
  1329. sizeof(it913x_pdata));
  1330. if (IS_ERR(pdev) || !pdev->dev.driver) {
  1331. ret = -ENODEV;
  1332. goto err;
  1333. }
  1334. if (!try_module_get(pdev->dev.driver->owner)) {
  1335. platform_device_unregister(pdev);
  1336. ret = -ENODEV;
  1337. goto err;
  1338. }
  1339. state->platform_device_tuner[adap->id] = pdev;
  1340. fe = adap->fe[0];
  1341. break;
  1342. }
  1343. default:
  1344. fe = NULL;
  1345. }
  1346. if (fe == NULL) {
  1347. ret = -ENODEV;
  1348. goto err;
  1349. }
  1350. return 0;
  1351. err:
  1352. dev_dbg(&intf->dev, "failed=%d\n", ret);
  1353. return ret;
  1354. }
  1355. static int it930x_tuner_attach(struct dvb_usb_adapter *adap)
  1356. {
  1357. struct state *state = adap_to_priv(adap);
  1358. struct dvb_usb_device *d = adap_to_d(adap);
  1359. struct usb_interface *intf = d->intf;
  1360. int ret;
  1361. struct si2157_config si2157_config;
  1362. dev_dbg(&intf->dev, "adap->id=%d\n", adap->id);
  1363. memset(&si2157_config, 0, sizeof(si2157_config));
  1364. si2157_config.fe = adap->fe[0];
  1365. /*
  1366. * HACK: The Logilink VG0022A and TerraTec TC2 Stick have
  1367. * a bug: when the si2157 firmware that came with the device
  1368. * is replaced by a new one, the I2C transfers to the tuner
  1369. * will return just 0xff.
  1370. *
  1371. * Probably, the vendor firmware has some patch specifically
  1372. * designed for this device. So, we can't replace by the
  1373. * generic firmware. The right solution would be to extract
  1374. * the si2157 firmware from the original driver and ask the
  1375. * driver to load the specifically designed firmware, but,
  1376. * while we don't have that, the next best solution is to just
  1377. * keep the original firmware at the device.
  1378. */
  1379. if ((le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_DEXATEK &&
  1380. le16_to_cpu(d->udev->descriptor.idProduct) == 0x0100) ||
  1381. (le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_TERRATEC &&
  1382. le16_to_cpu(d->udev->descriptor.idProduct) == USB_PID_TERRATEC_CINERGY_TC2_STICK))
  1383. si2157_config.dont_load_firmware = true;
  1384. si2157_config.if_port = it930x_addresses_table[state->it930x_addresses].tuner_if_port;
  1385. ret = af9035_add_i2c_dev(d, "si2157",
  1386. it930x_addresses_table[state->it930x_addresses].tuner_i2c_addr,
  1387. &si2157_config, state->i2c_adapter_demod);
  1388. if (ret)
  1389. goto err;
  1390. return 0;
  1391. err:
  1392. dev_dbg(&intf->dev, "failed=%d\n", ret);
  1393. return ret;
  1394. }
  1395. static int it930x_tuner_detach(struct dvb_usb_adapter *adap)
  1396. {
  1397. struct state *state = adap_to_priv(adap);
  1398. struct dvb_usb_device *d = adap_to_d(adap);
  1399. struct usb_interface *intf = d->intf;
  1400. dev_dbg(&intf->dev, "adap->id=%d\n", adap->id);
  1401. if (adap->id == 1) {
  1402. if (state->i2c_client[3])
  1403. af9035_del_i2c_dev(d);
  1404. } else if (adap->id == 0) {
  1405. if (state->i2c_client[1])
  1406. af9035_del_i2c_dev(d);
  1407. }
  1408. return 0;
  1409. }
  1410. static int af9035_tuner_detach(struct dvb_usb_adapter *adap)
  1411. {
  1412. struct state *state = adap_to_priv(adap);
  1413. struct dvb_usb_device *d = adap_to_d(adap);
  1414. struct usb_interface *intf = d->intf;
  1415. dev_dbg(&intf->dev, "adap->id=%d\n", adap->id);
  1416. switch (state->af9033_config[adap->id].tuner) {
  1417. case AF9033_TUNER_TUA9001:
  1418. case AF9033_TUNER_FC2580:
  1419. if (adap->id == 1) {
  1420. if (state->i2c_client[3])
  1421. af9035_del_i2c_dev(d);
  1422. } else if (adap->id == 0) {
  1423. if (state->i2c_client[1])
  1424. af9035_del_i2c_dev(d);
  1425. }
  1426. break;
  1427. case AF9033_TUNER_IT9135_38:
  1428. case AF9033_TUNER_IT9135_51:
  1429. case AF9033_TUNER_IT9135_52:
  1430. case AF9033_TUNER_IT9135_60:
  1431. case AF9033_TUNER_IT9135_61:
  1432. case AF9033_TUNER_IT9135_62:
  1433. {
  1434. struct platform_device *pdev;
  1435. pdev = state->platform_device_tuner[adap->id];
  1436. if (pdev) {
  1437. module_put(pdev->dev.driver->owner);
  1438. platform_device_unregister(pdev);
  1439. }
  1440. break;
  1441. }
  1442. }
  1443. return 0;
  1444. }
  1445. static int af9035_init(struct dvb_usb_device *d)
  1446. {
  1447. struct state *state = d_to_priv(d);
  1448. struct usb_interface *intf = d->intf;
  1449. int ret, i;
  1450. u16 frame_size = (d->udev->speed == USB_SPEED_FULL ? 5 : 87) * 188 / 4;
  1451. u8 packet_size = (d->udev->speed == USB_SPEED_FULL ? 64 : 512) / 4;
  1452. struct reg_val_mask tab[] = {
  1453. { 0x80f99d, 0x01, 0x01 },
  1454. { 0x80f9a4, 0x01, 0x01 },
  1455. { 0x00dd11, 0x00, 0x20 },
  1456. { 0x00dd11, 0x00, 0x40 },
  1457. { 0x00dd13, 0x00, 0x20 },
  1458. { 0x00dd13, 0x00, 0x40 },
  1459. { 0x00dd11, 0x20, 0x20 },
  1460. { 0x00dd88, (frame_size >> 0) & 0xff, 0xff},
  1461. { 0x00dd89, (frame_size >> 8) & 0xff, 0xff},
  1462. { 0x00dd0c, packet_size, 0xff},
  1463. { 0x00dd11, state->dual_mode << 6, 0x40 },
  1464. { 0x00dd8a, (frame_size >> 0) & 0xff, 0xff},
  1465. { 0x00dd8b, (frame_size >> 8) & 0xff, 0xff},
  1466. { 0x00dd0d, packet_size, 0xff },
  1467. { 0x80f9a3, state->dual_mode, 0x01 },
  1468. { 0x80f9cd, state->dual_mode, 0x01 },
  1469. { 0x80f99d, 0x00, 0x01 },
  1470. { 0x80f9a4, 0x00, 0x01 },
  1471. };
  1472. dev_dbg(&intf->dev, "USB speed=%d frame_size=%04x packet_size=%02x\n",
  1473. d->udev->speed, frame_size, packet_size);
  1474. /* init endpoints */
  1475. for (i = 0; i < ARRAY_SIZE(tab); i++) {
  1476. ret = af9035_wr_reg_mask(d, tab[i].reg, tab[i].val,
  1477. tab[i].mask);
  1478. if (ret < 0)
  1479. goto err;
  1480. }
  1481. return 0;
  1482. err:
  1483. dev_dbg(&intf->dev, "failed=%d\n", ret);
  1484. return ret;
  1485. }
  1486. static int it930x_init(struct dvb_usb_device *d)
  1487. {
  1488. struct state *state = d_to_priv(d);
  1489. struct usb_interface *intf = d->intf;
  1490. int ret, i;
  1491. u16 frame_size = (d->udev->speed == USB_SPEED_FULL ? 5 : 816) * 188 / 4;
  1492. u8 packet_size = (d->udev->speed == USB_SPEED_FULL ? 64 : 512) / 4;
  1493. struct reg_val_mask tab[] = {
  1494. { 0x00da1a, 0x00, 0x01 }, /* ignore_sync_byte */
  1495. { 0x00f41f, 0x04, 0x04 }, /* dvbt_inten */
  1496. { 0x00da10, 0x00, 0x01 }, /* mpeg_full_speed */
  1497. { 0x00f41a, 0x01, 0x01 }, /* dvbt_en */
  1498. { 0x00da1d, 0x01, 0x01 }, /* mp2_sw_rst, reset EP4 */
  1499. { 0x00dd11, 0x00, 0x20 }, /* ep4_tx_en, disable EP4 */
  1500. { 0x00dd13, 0x00, 0x20 }, /* ep4_tx_nak, disable EP4 NAK */
  1501. { 0x00dd11, 0x20, 0x20 }, /* ep4_tx_en, enable EP4 */
  1502. { 0x00dd11, 0x00, 0x40 }, /* ep5_tx_en, disable EP5 */
  1503. { 0x00dd13, 0x00, 0x40 }, /* ep5_tx_nak, disable EP5 NAK */
  1504. { 0x00dd11, state->dual_mode << 6, 0x40 }, /* enable EP5 */
  1505. { 0x00dd88, (frame_size >> 0) & 0xff, 0xff},
  1506. { 0x00dd89, (frame_size >> 8) & 0xff, 0xff},
  1507. { 0x00dd0c, packet_size, 0xff},
  1508. { 0x00dd8a, (frame_size >> 0) & 0xff, 0xff},
  1509. { 0x00dd8b, (frame_size >> 8) & 0xff, 0xff},
  1510. { 0x00dd0d, packet_size, 0xff },
  1511. { 0x00da1d, 0x00, 0x01 }, /* mp2_sw_rst, disable */
  1512. { 0x00d833, 0x01, 0xff }, /* slew rate ctrl: slew rate boosts */
  1513. { 0x00d830, 0x00, 0xff }, /* Bit 0 of output driving control */
  1514. { 0x00d831, 0x01, 0xff }, /* Bit 1 of output driving control */
  1515. { 0x00d832, 0x00, 0xff }, /* Bit 2 of output driving control */
  1516. /* suspend gpio1 for TS-C */
  1517. { 0x00d8b0, 0x01, 0xff }, /* gpio1 */
  1518. { 0x00d8b1, 0x01, 0xff }, /* gpio1 */
  1519. { 0x00d8af, 0x00, 0xff }, /* gpio1 */
  1520. /* suspend gpio7 for TS-D */
  1521. { 0x00d8c4, 0x01, 0xff }, /* gpio7 */
  1522. { 0x00d8c5, 0x01, 0xff }, /* gpio7 */
  1523. { 0x00d8c3, 0x00, 0xff }, /* gpio7 */
  1524. /* suspend gpio13 for TS-B */
  1525. { 0x00d8dc, 0x01, 0xff }, /* gpio13 */
  1526. { 0x00d8dd, 0x01, 0xff }, /* gpio13 */
  1527. { 0x00d8db, 0x00, 0xff }, /* gpio13 */
  1528. /* suspend gpio14 for TS-E */
  1529. { 0x00d8e4, 0x01, 0xff }, /* gpio14 */
  1530. { 0x00d8e5, 0x01, 0xff }, /* gpio14 */
  1531. { 0x00d8e3, 0x00, 0xff }, /* gpio14 */
  1532. /* suspend gpio15 for TS-A */
  1533. { 0x00d8e8, 0x01, 0xff }, /* gpio15 */
  1534. { 0x00d8e9, 0x01, 0xff }, /* gpio15 */
  1535. { 0x00d8e7, 0x00, 0xff }, /* gpio15 */
  1536. { 0x00da58, 0x00, 0x01 }, /* ts_in_src, serial */
  1537. { 0x00da73, 0x01, 0xff }, /* ts0_aggre_mode */
  1538. { 0x00da78, 0x47, 0xff }, /* ts0_sync_byte */
  1539. { 0x00da4c, 0x01, 0xff }, /* ts0_en */
  1540. { 0x00da5a, 0x1f, 0xff }, /* ts_fail_ignore */
  1541. };
  1542. dev_dbg(&intf->dev, "USB speed=%d frame_size=%04x packet_size=%02x\n",
  1543. d->udev->speed, frame_size, packet_size);
  1544. /* init endpoints */
  1545. for (i = 0; i < ARRAY_SIZE(tab); i++) {
  1546. ret = af9035_wr_reg_mask(d, tab[i].reg,
  1547. tab[i].val, tab[i].mask);
  1548. if (ret < 0)
  1549. goto err;
  1550. }
  1551. return 0;
  1552. err:
  1553. dev_dbg(&intf->dev, "failed=%d\n", ret);
  1554. return ret;
  1555. }
  1556. #if IS_ENABLED(CONFIG_RC_CORE)
  1557. static int af9035_rc_query(struct dvb_usb_device *d)
  1558. {
  1559. struct usb_interface *intf = d->intf;
  1560. int ret;
  1561. enum rc_proto proto;
  1562. u32 key;
  1563. u8 buf[4];
  1564. struct usb_req req = { CMD_IR_GET, 0, 0, NULL, 4, buf };
  1565. ret = af9035_ctrl_msg(d, &req);
  1566. if (ret == 1)
  1567. return 0;
  1568. else if (ret < 0)
  1569. goto err;
  1570. if ((buf[2] + buf[3]) == 0xff) {
  1571. if ((buf[0] + buf[1]) == 0xff) {
  1572. /* NEC standard 16bit */
  1573. key = RC_SCANCODE_NEC(buf[0], buf[2]);
  1574. proto = RC_PROTO_NEC;
  1575. } else {
  1576. /* NEC extended 24bit */
  1577. key = RC_SCANCODE_NECX(buf[0] << 8 | buf[1], buf[2]);
  1578. proto = RC_PROTO_NECX;
  1579. }
  1580. } else {
  1581. /* NEC full code 32bit */
  1582. key = RC_SCANCODE_NEC32(buf[0] << 24 | buf[1] << 16 |
  1583. buf[2] << 8 | buf[3]);
  1584. proto = RC_PROTO_NEC32;
  1585. }
  1586. dev_dbg(&intf->dev, "%*ph\n", 4, buf);
  1587. rc_keydown(d->rc_dev, proto, key, 0);
  1588. return 0;
  1589. err:
  1590. dev_dbg(&intf->dev, "failed=%d\n", ret);
  1591. return ret;
  1592. }
  1593. static int af9035_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
  1594. {
  1595. struct state *state = d_to_priv(d);
  1596. struct usb_interface *intf = d->intf;
  1597. dev_dbg(&intf->dev, "ir_mode=%02x ir_type=%02x\n",
  1598. state->ir_mode, state->ir_type);
  1599. /* don't activate rc if in HID mode or if not available */
  1600. if (state->ir_mode == 0x05) {
  1601. switch (state->ir_type) {
  1602. case 0: /* NEC */
  1603. default:
  1604. rc->allowed_protos = RC_PROTO_BIT_NEC |
  1605. RC_PROTO_BIT_NECX | RC_PROTO_BIT_NEC32;
  1606. break;
  1607. case 1: /* RC6 */
  1608. rc->allowed_protos = RC_PROTO_BIT_RC6_MCE;
  1609. break;
  1610. }
  1611. rc->query = af9035_rc_query;
  1612. rc->interval = 500;
  1613. /* load empty to enable rc */
  1614. if (!rc->map_name)
  1615. rc->map_name = RC_MAP_EMPTY;
  1616. }
  1617. return 0;
  1618. }
  1619. #else
  1620. #define af9035_get_rc_config NULL
  1621. #endif
  1622. static int af9035_get_stream_config(struct dvb_frontend *fe, u8 *ts_type,
  1623. struct usb_data_stream_properties *stream)
  1624. {
  1625. struct dvb_usb_device *d = fe_to_d(fe);
  1626. struct usb_interface *intf = d->intf;
  1627. dev_dbg(&intf->dev, "adap=%d\n", fe_to_adap(fe)->id);
  1628. if (d->udev->speed == USB_SPEED_FULL)
  1629. stream->u.bulk.buffersize = 5 * 188;
  1630. return 0;
  1631. }
  1632. static int af9035_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
  1633. {
  1634. struct state *state = adap_to_priv(adap);
  1635. return state->ops.pid_filter_ctrl(adap->fe[0], onoff);
  1636. }
  1637. static int af9035_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid,
  1638. int onoff)
  1639. {
  1640. struct state *state = adap_to_priv(adap);
  1641. return state->ops.pid_filter(adap->fe[0], index, pid, onoff);
  1642. }
  1643. static int af9035_probe(struct usb_interface *intf,
  1644. const struct usb_device_id *id)
  1645. {
  1646. struct usb_device *udev = interface_to_usbdev(intf);
  1647. char manufacturer[sizeof("Afatech")];
  1648. memset(manufacturer, 0, sizeof(manufacturer));
  1649. usb_string(udev, udev->descriptor.iManufacturer,
  1650. manufacturer, sizeof(manufacturer));
  1651. /*
  1652. * There is two devices having same ID but different chipset. One uses
  1653. * AF9015 and the other IT9135 chipset. Only difference seen on lsusb
  1654. * is iManufacturer string.
  1655. *
  1656. * idVendor 0x0ccd TerraTec Electronic GmbH
  1657. * idProduct 0x0099
  1658. * bcdDevice 2.00
  1659. * iManufacturer 1 Afatech
  1660. * iProduct 2 DVB-T 2
  1661. *
  1662. * idVendor 0x0ccd TerraTec Electronic GmbH
  1663. * idProduct 0x0099
  1664. * bcdDevice 2.00
  1665. * iManufacturer 1 ITE Technologies, Inc.
  1666. * iProduct 2 DVB-T TV Stick
  1667. */
  1668. if ((le16_to_cpu(udev->descriptor.idVendor) == USB_VID_TERRATEC) &&
  1669. (le16_to_cpu(udev->descriptor.idProduct) == 0x0099)) {
  1670. if (!strcmp("Afatech", manufacturer)) {
  1671. dev_dbg(&udev->dev, "rejecting device\n");
  1672. return -ENODEV;
  1673. }
  1674. }
  1675. return dvb_usbv2_probe(intf, id);
  1676. }
  1677. /* interface 0 is used by DVB-T receiver and
  1678. interface 1 is for remote controller (HID) */
  1679. static const struct dvb_usb_device_properties af9035_props = {
  1680. .driver_name = KBUILD_MODNAME,
  1681. .owner = THIS_MODULE,
  1682. .adapter_nr = adapter_nr,
  1683. .size_of_priv = sizeof(struct state),
  1684. .generic_bulk_ctrl_endpoint = 0x02,
  1685. .generic_bulk_ctrl_endpoint_response = 0x81,
  1686. .identify_state = af9035_identify_state,
  1687. .download_firmware = af9035_download_firmware,
  1688. .i2c_algo = &af9035_i2c_algo,
  1689. .read_config = af9035_read_config,
  1690. .frontend_attach = af9035_frontend_attach,
  1691. .frontend_detach = af9035_frontend_detach,
  1692. .tuner_attach = af9035_tuner_attach,
  1693. .tuner_detach = af9035_tuner_detach,
  1694. .init = af9035_init,
  1695. .get_rc_config = af9035_get_rc_config,
  1696. .get_stream_config = af9035_get_stream_config,
  1697. .get_adapter_count = af9035_get_adapter_count,
  1698. .adapter = {
  1699. {
  1700. .caps = DVB_USB_ADAP_HAS_PID_FILTER |
  1701. DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
  1702. .pid_filter_count = 32,
  1703. .pid_filter_ctrl = af9035_pid_filter_ctrl,
  1704. .pid_filter = af9035_pid_filter,
  1705. .stream = DVB_USB_STREAM_BULK(0x84, 6, 87 * 188),
  1706. }, {
  1707. .caps = DVB_USB_ADAP_HAS_PID_FILTER |
  1708. DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
  1709. .pid_filter_count = 32,
  1710. .pid_filter_ctrl = af9035_pid_filter_ctrl,
  1711. .pid_filter = af9035_pid_filter,
  1712. .stream = DVB_USB_STREAM_BULK(0x85, 6, 87 * 188),
  1713. },
  1714. },
  1715. };
  1716. static const struct dvb_usb_device_properties it930x_props = {
  1717. .driver_name = KBUILD_MODNAME,
  1718. .owner = THIS_MODULE,
  1719. .adapter_nr = adapter_nr,
  1720. .size_of_priv = sizeof(struct state),
  1721. .generic_bulk_ctrl_endpoint = 0x02,
  1722. .generic_bulk_ctrl_endpoint_response = 0x81,
  1723. .identify_state = af9035_identify_state,
  1724. .download_firmware = af9035_download_firmware,
  1725. .i2c_algo = &af9035_i2c_algo,
  1726. .read_config = af9035_read_config,
  1727. .frontend_attach = it930x_frontend_attach,
  1728. .frontend_detach = af9035_frontend_detach,
  1729. .tuner_attach = it930x_tuner_attach,
  1730. .tuner_detach = it930x_tuner_detach,
  1731. .init = it930x_init,
  1732. .get_stream_config = af9035_get_stream_config,
  1733. .get_adapter_count = af9035_get_adapter_count,
  1734. .adapter = {
  1735. {
  1736. .stream = DVB_USB_STREAM_BULK(0x84, 4, 816 * 188),
  1737. }, {
  1738. .stream = DVB_USB_STREAM_BULK(0x85, 4, 816 * 188),
  1739. },
  1740. },
  1741. };
  1742. static const struct usb_device_id af9035_id_table[] = {
  1743. /* AF9035 devices */
  1744. { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9035_9035,
  1745. &af9035_props, "Afatech AF9035 reference design", NULL) },
  1746. { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9035_1000,
  1747. &af9035_props, "Afatech AF9035 reference design", NULL) },
  1748. { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9035_1001,
  1749. &af9035_props, "Afatech AF9035 reference design", NULL) },
  1750. { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9035_1002,
  1751. &af9035_props, "Afatech AF9035 reference design", NULL) },
  1752. { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9035_1003,
  1753. &af9035_props, "Afatech AF9035 reference design", NULL) },
  1754. { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK,
  1755. &af9035_props, "TerraTec Cinergy T Stick", NULL) },
  1756. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835,
  1757. &af9035_props, "AVerMedia AVerTV Volar HD/PRO (A835)", NULL) },
  1758. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_B835,
  1759. &af9035_props, "AVerMedia AVerTV Volar HD/PRO (A835)", NULL) },
  1760. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_1867,
  1761. &af9035_props, "AVerMedia HD Volar (A867)", NULL) },
  1762. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A867,
  1763. &af9035_props, "AVerMedia HD Volar (A867)", NULL) },
  1764. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_TWINSTAR,
  1765. &af9035_props, "AVerMedia Twinstar (A825)", NULL) },
  1766. { DVB_USB_DEVICE(USB_VID_ASUS, USB_PID_ASUS_U3100MINI_PLUS,
  1767. &af9035_props, "Asus U3100Mini Plus", NULL) },
  1768. { DVB_USB_DEVICE(USB_VID_TERRATEC, 0x00aa,
  1769. &af9035_props, "TerraTec Cinergy T Stick (rev. 2)", NULL) },
  1770. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, 0x0337,
  1771. &af9035_props, "AVerMedia HD Volar (A867)", NULL) },
  1772. { DVB_USB_DEVICE(USB_VID_GTEK, USB_PID_EVOLVEO_XTRATV_STICK,
  1773. &af9035_props, "EVOLVEO XtraTV stick", NULL) },
  1774. /* IT9135 devices */
  1775. { DVB_USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9135,
  1776. &af9035_props, "ITE 9135 Generic", RC_MAP_IT913X_V1) },
  1777. { DVB_USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9135_9005,
  1778. &af9035_props, "ITE 9135(9005) Generic", RC_MAP_IT913X_V2) },
  1779. { DVB_USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9135_9006,
  1780. &af9035_props, "ITE 9135(9006) Generic", RC_MAP_IT913X_V1) },
  1781. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_1835,
  1782. &af9035_props, "Avermedia A835B(1835)", RC_MAP_IT913X_V2) },
  1783. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_2835,
  1784. &af9035_props, "Avermedia A835B(2835)", RC_MAP_IT913X_V2) },
  1785. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_3835,
  1786. &af9035_props, "Avermedia A835B(3835)", RC_MAP_IT913X_V2) },
  1787. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835B_4835,
  1788. &af9035_props, "Avermedia A835B(4835)", RC_MAP_IT913X_V2) },
  1789. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_TD110,
  1790. &af9035_props, "Avermedia AverTV Volar HD 2 (TD110)", RC_MAP_AVERMEDIA_RM_KS) },
  1791. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_H335,
  1792. &af9035_props, "Avermedia H335", RC_MAP_IT913X_V2) },
  1793. { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_UB499_2T_T09,
  1794. &af9035_props, "Kworld UB499-2T T09", RC_MAP_IT913X_V1) },
  1795. { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV22_IT9137,
  1796. &af9035_props, "Sveon STV22 Dual DVB-T HDTV",
  1797. RC_MAP_IT913X_V1) },
  1798. { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_CTVDIGDUAL_V2,
  1799. &af9035_props, "Digital Dual TV Receiver CTVDIGDUAL_V2",
  1800. RC_MAP_IT913X_V1) },
  1801. { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_T1,
  1802. &af9035_props, "TerraTec T1", RC_MAP_IT913X_V1) },
  1803. /* XXX: that same ID [0ccd:0099] is used by af9015 driver too */
  1804. { DVB_USB_DEVICE(USB_VID_TERRATEC, 0x0099,
  1805. &af9035_props, "TerraTec Cinergy T Stick Dual RC (rev. 2)",
  1806. NULL) },
  1807. { DVB_USB_DEVICE(USB_VID_LEADTEK, 0x6a05,
  1808. &af9035_props, "Leadtek WinFast DTV Dongle Dual", NULL) },
  1809. { DVB_USB_DEVICE(USB_VID_HAUPPAUGE, 0xf900,
  1810. &af9035_props, "Hauppauge WinTV-MiniStick 2", NULL) },
  1811. { DVB_USB_DEVICE(USB_VID_PCTV, USB_PID_PCTV_78E,
  1812. &af9035_props, "PCTV AndroiDTV (78e)", RC_MAP_IT913X_V1) },
  1813. { DVB_USB_DEVICE(USB_VID_PCTV, USB_PID_PCTV_79E,
  1814. &af9035_props, "PCTV microStick (79e)", RC_MAP_IT913X_V2) },
  1815. /* IT930x devices */
  1816. { DVB_USB_DEVICE(USB_VID_ITETECH, USB_PID_ITETECH_IT9303,
  1817. &it930x_props, "ITE 9303 Generic", NULL) },
  1818. { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_TD310,
  1819. &it930x_props, "AVerMedia TD310 DVB-T2", NULL) },
  1820. { DVB_USB_DEVICE(USB_VID_DEXATEK, 0x0100,
  1821. &it930x_props, "Logilink VG0022A", NULL) },
  1822. { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_TC2_STICK,
  1823. &it930x_props, "TerraTec Cinergy TC2 Stick", NULL) },
  1824. { }
  1825. };
  1826. MODULE_DEVICE_TABLE(usb, af9035_id_table);
  1827. static struct usb_driver af9035_usb_driver = {
  1828. .name = KBUILD_MODNAME,
  1829. .id_table = af9035_id_table,
  1830. .probe = af9035_probe,
  1831. .disconnect = dvb_usbv2_disconnect,
  1832. .suspend = dvb_usbv2_suspend,
  1833. .resume = dvb_usbv2_resume,
  1834. .reset_resume = dvb_usbv2_reset_resume,
  1835. .no_dynamic_id = 1,
  1836. .soft_unbind = 1,
  1837. };
  1838. module_usb_driver(af9035_usb_driver);
  1839. MODULE_AUTHOR("Antti Palosaari <[email protected]>");
  1840. MODULE_DESCRIPTION("Afatech AF9035 driver");
  1841. MODULE_LICENSE("GPL");
  1842. MODULE_FIRMWARE(AF9035_FIRMWARE_AF9035);
  1843. MODULE_FIRMWARE(AF9035_FIRMWARE_IT9135_V1);
  1844. MODULE_FIRMWARE(AF9035_FIRMWARE_IT9135_V2);
  1845. MODULE_FIRMWARE(AF9035_FIRMWARE_IT9303);