rtl28xxu.c 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963
  1. /*
  2. * Realtek RTL28xxU DVB USB driver
  3. *
  4. * Copyright (C) 2009 Antti Palosaari <crope@iki.fi>
  5. * Copyright (C) 2011 Antti Palosaari <crope@iki.fi>
  6. * Copyright (C) 2012 Thomas Mair <thomas.mair86@googlemail.com>
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 2 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License along
  19. * with this program; if not, write to the Free Software Foundation, Inc.,
  20. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  21. */
  22. #include "rtl28xxu.h"
  23. static int rtl28xxu_disable_rc;
  24. module_param_named(disable_rc, rtl28xxu_disable_rc, int, 0644);
  25. MODULE_PARM_DESC(disable_rc, "disable RTL2832U remote controller");
  26. DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
  27. static int rtl28xxu_ctrl_msg(struct dvb_usb_device *d, struct rtl28xxu_req *req)
  28. {
  29. struct rtl28xxu_dev *dev = d->priv;
  30. int ret;
  31. unsigned int pipe;
  32. u8 requesttype;
  33. mutex_lock(&d->usb_mutex);
  34. if (req->size > sizeof(dev->buf)) {
  35. dev_err(&d->intf->dev, "too large message %u\n", req->size);
  36. ret = -EINVAL;
  37. goto err_mutex_unlock;
  38. }
  39. if (req->index & CMD_WR_FLAG) {
  40. /* write */
  41. memcpy(dev->buf, req->data, req->size);
  42. requesttype = (USB_TYPE_VENDOR | USB_DIR_OUT);
  43. pipe = usb_sndctrlpipe(d->udev, 0);
  44. } else {
  45. /* read */
  46. requesttype = (USB_TYPE_VENDOR | USB_DIR_IN);
  47. pipe = usb_rcvctrlpipe(d->udev, 0);
  48. }
  49. ret = usb_control_msg(d->udev, pipe, 0, requesttype, req->value,
  50. req->index, dev->buf, req->size, 1000);
  51. dvb_usb_dbg_usb_control_msg(d->udev, 0, requesttype, req->value,
  52. req->index, dev->buf, req->size);
  53. if (ret < 0)
  54. goto err_mutex_unlock;
  55. /* read request, copy returned data to return buf */
  56. if (requesttype == (USB_TYPE_VENDOR | USB_DIR_IN))
  57. memcpy(req->data, dev->buf, req->size);
  58. mutex_unlock(&d->usb_mutex);
  59. return 0;
  60. err_mutex_unlock:
  61. mutex_unlock(&d->usb_mutex);
  62. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  63. return ret;
  64. }
  65. static int rtl28xxu_wr_regs(struct dvb_usb_device *d, u16 reg, u8 *val, int len)
  66. {
  67. struct rtl28xxu_req req;
  68. if (reg < 0x3000)
  69. req.index = CMD_USB_WR;
  70. else if (reg < 0x4000)
  71. req.index = CMD_SYS_WR;
  72. else
  73. req.index = CMD_IR_WR;
  74. req.value = reg;
  75. req.size = len;
  76. req.data = val;
  77. return rtl28xxu_ctrl_msg(d, &req);
  78. }
  79. static int rtl28xxu_rd_regs(struct dvb_usb_device *d, u16 reg, u8 *val, int len)
  80. {
  81. struct rtl28xxu_req req;
  82. if (reg < 0x3000)
  83. req.index = CMD_USB_RD;
  84. else if (reg < 0x4000)
  85. req.index = CMD_SYS_RD;
  86. else
  87. req.index = CMD_IR_RD;
  88. req.value = reg;
  89. req.size = len;
  90. req.data = val;
  91. return rtl28xxu_ctrl_msg(d, &req);
  92. }
  93. static int rtl28xxu_wr_reg(struct dvb_usb_device *d, u16 reg, u8 val)
  94. {
  95. return rtl28xxu_wr_regs(d, reg, &val, 1);
  96. }
  97. static int rtl28xxu_rd_reg(struct dvb_usb_device *d, u16 reg, u8 *val)
  98. {
  99. return rtl28xxu_rd_regs(d, reg, val, 1);
  100. }
  101. static int rtl28xxu_wr_reg_mask(struct dvb_usb_device *d, u16 reg, u8 val,
  102. u8 mask)
  103. {
  104. int ret;
  105. u8 tmp;
  106. /* no need for read if whole reg is written */
  107. if (mask != 0xff) {
  108. ret = rtl28xxu_rd_reg(d, reg, &tmp);
  109. if (ret)
  110. return ret;
  111. val &= mask;
  112. tmp &= ~mask;
  113. val |= tmp;
  114. }
  115. return rtl28xxu_wr_reg(d, reg, val);
  116. }
  117. /* I2C */
  118. static int rtl28xxu_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
  119. int num)
  120. {
  121. int ret;
  122. struct dvb_usb_device *d = i2c_get_adapdata(adap);
  123. struct rtl28xxu_dev *dev = d->priv;
  124. struct rtl28xxu_req req;
  125. /*
  126. * It is not known which are real I2C bus xfer limits, but testing
  127. * with RTL2831U + MT2060 gives max RD 24 and max WR 22 bytes.
  128. * TODO: find out RTL2832U lens
  129. */
  130. /*
  131. * I2C adapter logic looks rather complicated due to fact it handles
  132. * three different access methods. Those methods are;
  133. * 1) integrated demod access
  134. * 2) old I2C access
  135. * 3) new I2C access
  136. *
  137. * Used method is selected in order 1, 2, 3. Method 3 can handle all
  138. * requests but there is two reasons why not use it always;
  139. * 1) It is most expensive, usually two USB messages are needed
  140. * 2) At least RTL2831U does not support it
  141. *
  142. * Method 3 is needed in case of I2C write+read (typical register read)
  143. * where write is more than one byte.
  144. */
  145. if (mutex_lock_interruptible(&d->i2c_mutex) < 0)
  146. return -EAGAIN;
  147. if (num == 2 && !(msg[0].flags & I2C_M_RD) &&
  148. (msg[1].flags & I2C_M_RD)) {
  149. if (msg[0].len > 24 || msg[1].len > 24) {
  150. /* TODO: check msg[0].len max */
  151. ret = -EOPNOTSUPP;
  152. goto err_mutex_unlock;
  153. } else if (msg[0].addr == 0x10) {
  154. /* method 1 - integrated demod */
  155. if (msg[0].buf[0] == 0x00) {
  156. /* return demod page from driver cache */
  157. msg[1].buf[0] = dev->page;
  158. ret = 0;
  159. } else {
  160. req.value = (msg[0].buf[0] << 8) | (msg[0].addr << 1);
  161. req.index = CMD_DEMOD_RD | dev->page;
  162. req.size = msg[1].len;
  163. req.data = &msg[1].buf[0];
  164. ret = rtl28xxu_ctrl_msg(d, &req);
  165. }
  166. } else if (msg[0].len < 2) {
  167. /* method 2 - old I2C */
  168. req.value = (msg[0].buf[0] << 8) | (msg[0].addr << 1);
  169. req.index = CMD_I2C_RD;
  170. req.size = msg[1].len;
  171. req.data = &msg[1].buf[0];
  172. ret = rtl28xxu_ctrl_msg(d, &req);
  173. } else {
  174. /* method 3 - new I2C */
  175. req.value = (msg[0].addr << 1);
  176. req.index = CMD_I2C_DA_WR;
  177. req.size = msg[0].len;
  178. req.data = msg[0].buf;
  179. ret = rtl28xxu_ctrl_msg(d, &req);
  180. if (ret)
  181. goto err_mutex_unlock;
  182. req.value = (msg[0].addr << 1);
  183. req.index = CMD_I2C_DA_RD;
  184. req.size = msg[1].len;
  185. req.data = msg[1].buf;
  186. ret = rtl28xxu_ctrl_msg(d, &req);
  187. }
  188. } else if (num == 1 && !(msg[0].flags & I2C_M_RD)) {
  189. if (msg[0].len > 22) {
  190. /* TODO: check msg[0].len max */
  191. ret = -EOPNOTSUPP;
  192. goto err_mutex_unlock;
  193. } else if (msg[0].addr == 0x10) {
  194. /* method 1 - integrated demod */
  195. if (msg[0].buf[0] == 0x00) {
  196. /* save demod page for later demod access */
  197. dev->page = msg[0].buf[1];
  198. ret = 0;
  199. } else {
  200. req.value = (msg[0].buf[0] << 8) |
  201. (msg[0].addr << 1);
  202. req.index = CMD_DEMOD_WR | dev->page;
  203. req.size = msg[0].len-1;
  204. req.data = &msg[0].buf[1];
  205. ret = rtl28xxu_ctrl_msg(d, &req);
  206. }
  207. } else if ((msg[0].len < 23) && (!dev->new_i2c_write)) {
  208. /* method 2 - old I2C */
  209. req.value = (msg[0].buf[0] << 8) | (msg[0].addr << 1);
  210. req.index = CMD_I2C_WR;
  211. req.size = msg[0].len-1;
  212. req.data = &msg[0].buf[1];
  213. ret = rtl28xxu_ctrl_msg(d, &req);
  214. } else {
  215. /* method 3 - new I2C */
  216. req.value = (msg[0].addr << 1);
  217. req.index = CMD_I2C_DA_WR;
  218. req.size = msg[0].len;
  219. req.data = msg[0].buf;
  220. ret = rtl28xxu_ctrl_msg(d, &req);
  221. }
  222. } else if (num == 1 && (msg[0].flags & I2C_M_RD)) {
  223. req.value = (msg[0].addr << 1);
  224. req.index = CMD_I2C_DA_RD;
  225. req.size = msg[0].len;
  226. req.data = msg[0].buf;
  227. ret = rtl28xxu_ctrl_msg(d, &req);
  228. } else {
  229. ret = -EOPNOTSUPP;
  230. }
  231. /* Retry failed I2C messages */
  232. if (ret == -EPIPE)
  233. ret = -EAGAIN;
  234. err_mutex_unlock:
  235. mutex_unlock(&d->i2c_mutex);
  236. return ret ? ret : num;
  237. }
  238. static u32 rtl28xxu_i2c_func(struct i2c_adapter *adapter)
  239. {
  240. return I2C_FUNC_I2C;
  241. }
  242. static struct i2c_algorithm rtl28xxu_i2c_algo = {
  243. .master_xfer = rtl28xxu_i2c_xfer,
  244. .functionality = rtl28xxu_i2c_func,
  245. };
  246. static int rtl2831u_read_config(struct dvb_usb_device *d)
  247. {
  248. struct rtl28xxu_dev *dev = d_to_priv(d);
  249. int ret;
  250. u8 buf[1];
  251. /* open RTL2831U/RTL2830 I2C gate */
  252. struct rtl28xxu_req req_gate_open = {0x0120, 0x0011, 0x0001, "\x08"};
  253. /* tuner probes */
  254. struct rtl28xxu_req req_mt2060 = {0x00c0, CMD_I2C_RD, 1, buf};
  255. struct rtl28xxu_req req_qt1010 = {0x0fc4, CMD_I2C_RD, 1, buf};
  256. dev_dbg(&d->intf->dev, "\n");
  257. /*
  258. * RTL2831U GPIOs
  259. * =========================================================
  260. * GPIO0 | tuner#0 | 0 off | 1 on | MXL5005S (?)
  261. * GPIO2 | LED | 0 off | 1 on |
  262. * GPIO4 | tuner#1 | 0 on | 1 off | MT2060
  263. */
  264. /* GPIO direction */
  265. ret = rtl28xxu_wr_reg(d, SYS_GPIO_DIR, 0x0a);
  266. if (ret)
  267. goto err;
  268. /* enable as output GPIO0, GPIO2, GPIO4 */
  269. ret = rtl28xxu_wr_reg(d, SYS_GPIO_OUT_EN, 0x15);
  270. if (ret)
  271. goto err;
  272. /*
  273. * Probe used tuner. We need to know used tuner before demod attach
  274. * since there is some demod params needed to set according to tuner.
  275. */
  276. /* demod needs some time to wake up */
  277. msleep(20);
  278. dev->tuner_name = "NONE";
  279. /* open demod I2C gate */
  280. ret = rtl28xxu_ctrl_msg(d, &req_gate_open);
  281. if (ret)
  282. goto err;
  283. /* check QT1010 ID(?) register; reg=0f val=2c */
  284. ret = rtl28xxu_ctrl_msg(d, &req_qt1010);
  285. if (ret == 0 && buf[0] == 0x2c) {
  286. dev->tuner = TUNER_RTL2830_QT1010;
  287. dev->tuner_name = "QT1010";
  288. goto found;
  289. }
  290. /* open demod I2C gate */
  291. ret = rtl28xxu_ctrl_msg(d, &req_gate_open);
  292. if (ret)
  293. goto err;
  294. /* check MT2060 ID register; reg=00 val=63 */
  295. ret = rtl28xxu_ctrl_msg(d, &req_mt2060);
  296. if (ret == 0 && buf[0] == 0x63) {
  297. dev->tuner = TUNER_RTL2830_MT2060;
  298. dev->tuner_name = "MT2060";
  299. goto found;
  300. }
  301. /* assume MXL5005S */
  302. dev->tuner = TUNER_RTL2830_MXL5005S;
  303. dev->tuner_name = "MXL5005S";
  304. goto found;
  305. found:
  306. dev_dbg(&d->intf->dev, "tuner=%s\n", dev->tuner_name);
  307. return 0;
  308. err:
  309. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  310. return ret;
  311. }
  312. static int rtl2832u_read_config(struct dvb_usb_device *d)
  313. {
  314. struct rtl28xxu_dev *dev = d_to_priv(d);
  315. int ret;
  316. u8 buf[2];
  317. /* open RTL2832U/RTL2832 I2C gate */
  318. struct rtl28xxu_req req_gate_open = {0x0120, 0x0011, 0x0001, "\x18"};
  319. /* close RTL2832U/RTL2832 I2C gate */
  320. struct rtl28xxu_req req_gate_close = {0x0120, 0x0011, 0x0001, "\x10"};
  321. /* tuner probes */
  322. struct rtl28xxu_req req_fc0012 = {0x00c6, CMD_I2C_RD, 1, buf};
  323. struct rtl28xxu_req req_fc0013 = {0x00c6, CMD_I2C_RD, 1, buf};
  324. struct rtl28xxu_req req_mt2266 = {0x00c0, CMD_I2C_RD, 1, buf};
  325. struct rtl28xxu_req req_fc2580 = {0x01ac, CMD_I2C_RD, 1, buf};
  326. struct rtl28xxu_req req_mt2063 = {0x00c0, CMD_I2C_RD, 1, buf};
  327. struct rtl28xxu_req req_max3543 = {0x00c0, CMD_I2C_RD, 1, buf};
  328. struct rtl28xxu_req req_tua9001 = {0x7ec0, CMD_I2C_RD, 2, buf};
  329. struct rtl28xxu_req req_mxl5007t = {0xd9c0, CMD_I2C_RD, 1, buf};
  330. struct rtl28xxu_req req_e4000 = {0x02c8, CMD_I2C_RD, 1, buf};
  331. struct rtl28xxu_req req_tda18272 = {0x00c0, CMD_I2C_RD, 2, buf};
  332. struct rtl28xxu_req req_r820t = {0x0034, CMD_I2C_RD, 1, buf};
  333. struct rtl28xxu_req req_r828d = {0x0074, CMD_I2C_RD, 1, buf};
  334. struct rtl28xxu_req req_mn88472 = {0xff38, CMD_I2C_RD, 1, buf};
  335. struct rtl28xxu_req req_mn88473 = {0xff38, CMD_I2C_RD, 1, buf};
  336. struct rtl28xxu_req req_si2157 = {0x00c0, CMD_I2C_RD, 1, buf};
  337. struct rtl28xxu_req req_si2168 = {0x00c8, CMD_I2C_RD, 1, buf};
  338. dev_dbg(&d->intf->dev, "\n");
  339. /* enable GPIO3 and GPIO6 as output */
  340. ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_DIR, 0x00, 0x40);
  341. if (ret)
  342. goto err;
  343. ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_OUT_EN, 0x48, 0x48);
  344. if (ret)
  345. goto err;
  346. /*
  347. * Probe used tuner. We need to know used tuner before demod attach
  348. * since there is some demod params needed to set according to tuner.
  349. */
  350. /* open demod I2C gate */
  351. ret = rtl28xxu_ctrl_msg(d, &req_gate_open);
  352. if (ret)
  353. goto err;
  354. dev->tuner_name = "NONE";
  355. /* check FC0012 ID register; reg=00 val=a1 */
  356. ret = rtl28xxu_ctrl_msg(d, &req_fc0012);
  357. if (ret == 0 && buf[0] == 0xa1) {
  358. dev->tuner = TUNER_RTL2832_FC0012;
  359. dev->tuner_name = "FC0012";
  360. goto tuner_found;
  361. }
  362. /* check FC0013 ID register; reg=00 val=a3 */
  363. ret = rtl28xxu_ctrl_msg(d, &req_fc0013);
  364. if (ret == 0 && buf[0] == 0xa3) {
  365. dev->tuner = TUNER_RTL2832_FC0013;
  366. dev->tuner_name = "FC0013";
  367. goto tuner_found;
  368. }
  369. /* check MT2266 ID register; reg=00 val=85 */
  370. ret = rtl28xxu_ctrl_msg(d, &req_mt2266);
  371. if (ret == 0 && buf[0] == 0x85) {
  372. dev->tuner = TUNER_RTL2832_MT2266;
  373. dev->tuner_name = "MT2266";
  374. goto tuner_found;
  375. }
  376. /* check FC2580 ID register; reg=01 val=56 */
  377. ret = rtl28xxu_ctrl_msg(d, &req_fc2580);
  378. if (ret == 0 && buf[0] == 0x56) {
  379. dev->tuner = TUNER_RTL2832_FC2580;
  380. dev->tuner_name = "FC2580";
  381. goto tuner_found;
  382. }
  383. /* check MT2063 ID register; reg=00 val=9e || 9c */
  384. ret = rtl28xxu_ctrl_msg(d, &req_mt2063);
  385. if (ret == 0 && (buf[0] == 0x9e || buf[0] == 0x9c)) {
  386. dev->tuner = TUNER_RTL2832_MT2063;
  387. dev->tuner_name = "MT2063";
  388. goto tuner_found;
  389. }
  390. /* check MAX3543 ID register; reg=00 val=38 */
  391. ret = rtl28xxu_ctrl_msg(d, &req_max3543);
  392. if (ret == 0 && buf[0] == 0x38) {
  393. dev->tuner = TUNER_RTL2832_MAX3543;
  394. dev->tuner_name = "MAX3543";
  395. goto tuner_found;
  396. }
  397. /* check TUA9001 ID register; reg=7e val=2328 */
  398. ret = rtl28xxu_ctrl_msg(d, &req_tua9001);
  399. if (ret == 0 && buf[0] == 0x23 && buf[1] == 0x28) {
  400. dev->tuner = TUNER_RTL2832_TUA9001;
  401. dev->tuner_name = "TUA9001";
  402. goto tuner_found;
  403. }
  404. /* check MXL5007R ID register; reg=d9 val=14 */
  405. ret = rtl28xxu_ctrl_msg(d, &req_mxl5007t);
  406. if (ret == 0 && buf[0] == 0x14) {
  407. dev->tuner = TUNER_RTL2832_MXL5007T;
  408. dev->tuner_name = "MXL5007T";
  409. goto tuner_found;
  410. }
  411. /* check E4000 ID register; reg=02 val=40 */
  412. ret = rtl28xxu_ctrl_msg(d, &req_e4000);
  413. if (ret == 0 && buf[0] == 0x40) {
  414. dev->tuner = TUNER_RTL2832_E4000;
  415. dev->tuner_name = "E4000";
  416. goto tuner_found;
  417. }
  418. /* check TDA18272 ID register; reg=00 val=c760 */
  419. ret = rtl28xxu_ctrl_msg(d, &req_tda18272);
  420. if (ret == 0 && (buf[0] == 0xc7 || buf[1] == 0x60)) {
  421. dev->tuner = TUNER_RTL2832_TDA18272;
  422. dev->tuner_name = "TDA18272";
  423. goto tuner_found;
  424. }
  425. /* check R820T ID register; reg=00 val=69 */
  426. ret = rtl28xxu_ctrl_msg(d, &req_r820t);
  427. if (ret == 0 && buf[0] == 0x69) {
  428. dev->tuner = TUNER_RTL2832_R820T;
  429. dev->tuner_name = "R820T";
  430. goto tuner_found;
  431. }
  432. /* check R828D ID register; reg=00 val=69 */
  433. ret = rtl28xxu_ctrl_msg(d, &req_r828d);
  434. if (ret == 0 && buf[0] == 0x69) {
  435. dev->tuner = TUNER_RTL2832_R828D;
  436. dev->tuner_name = "R828D";
  437. goto tuner_found;
  438. }
  439. /* GPIO0 and GPIO5 to reset Si2157/Si2168 tuner and demod */
  440. ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_OUT_VAL, 0x00, 0x21);
  441. if (ret)
  442. goto err;
  443. ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_OUT_EN, 0x00, 0x21);
  444. if (ret)
  445. goto err;
  446. msleep(50);
  447. ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_OUT_VAL, 0x21, 0x21);
  448. if (ret)
  449. goto err;
  450. ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_OUT_EN, 0x21, 0x21);
  451. if (ret)
  452. goto err;
  453. msleep(50);
  454. /* check Si2157 ID register; reg=c0 val=80 */
  455. ret = rtl28xxu_ctrl_msg(d, &req_si2157);
  456. if (ret == 0 && ((buf[0] & 0x80) == 0x80)) {
  457. dev->tuner = TUNER_RTL2832_SI2157;
  458. dev->tuner_name = "SI2157";
  459. goto tuner_found;
  460. }
  461. tuner_found:
  462. dev_dbg(&d->intf->dev, "tuner=%s\n", dev->tuner_name);
  463. /* probe slave demod */
  464. if (dev->tuner == TUNER_RTL2832_R828D) {
  465. /* power on MN88472 demod on GPIO0 */
  466. ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_OUT_VAL, 0x01, 0x01);
  467. if (ret)
  468. goto err;
  469. ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_DIR, 0x00, 0x01);
  470. if (ret)
  471. goto err;
  472. ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_OUT_EN, 0x01, 0x01);
  473. if (ret)
  474. goto err;
  475. /* check MN88472 answers */
  476. ret = rtl28xxu_ctrl_msg(d, &req_mn88472);
  477. if (ret == 0 && buf[0] == 0x02) {
  478. dev_dbg(&d->intf->dev, "MN88472 found\n");
  479. dev->slave_demod = SLAVE_DEMOD_MN88472;
  480. goto demod_found;
  481. }
  482. ret = rtl28xxu_ctrl_msg(d, &req_mn88473);
  483. if (ret == 0 && buf[0] == 0x03) {
  484. dev_dbg(&d->intf->dev, "MN88473 found\n");
  485. dev->slave_demod = SLAVE_DEMOD_MN88473;
  486. goto demod_found;
  487. }
  488. }
  489. if (dev->tuner == TUNER_RTL2832_SI2157) {
  490. /* check Si2168 ID register; reg=c8 val=80 */
  491. ret = rtl28xxu_ctrl_msg(d, &req_si2168);
  492. if (ret == 0 && ((buf[0] & 0x80) == 0x80)) {
  493. dev_dbg(&d->intf->dev, "Si2168 found\n");
  494. dev->slave_demod = SLAVE_DEMOD_SI2168;
  495. goto demod_found;
  496. }
  497. }
  498. demod_found:
  499. /* close demod I2C gate */
  500. ret = rtl28xxu_ctrl_msg(d, &req_gate_close);
  501. if (ret < 0)
  502. goto err;
  503. return 0;
  504. err:
  505. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  506. return ret;
  507. }
  508. static int rtl28xxu_read_config(struct dvb_usb_device *d)
  509. {
  510. struct rtl28xxu_dev *dev = d_to_priv(d);
  511. if (dev->chip_id == CHIP_ID_RTL2831U)
  512. return rtl2831u_read_config(d);
  513. else
  514. return rtl2832u_read_config(d);
  515. }
  516. static int rtl28xxu_identify_state(struct dvb_usb_device *d, const char **name)
  517. {
  518. struct rtl28xxu_dev *dev = d_to_priv(d);
  519. int ret;
  520. struct rtl28xxu_req req_demod_i2c = {0x0020, CMD_I2C_DA_RD, 0, NULL};
  521. dev_dbg(&d->intf->dev, "\n");
  522. /*
  523. * Detect chip type using I2C command that is not supported
  524. * by old RTL2831U.
  525. */
  526. ret = rtl28xxu_ctrl_msg(d, &req_demod_i2c);
  527. if (ret == -EPIPE) {
  528. dev->chip_id = CHIP_ID_RTL2831U;
  529. } else if (ret == 0) {
  530. dev->chip_id = CHIP_ID_RTL2832U;
  531. } else {
  532. dev_err(&d->intf->dev, "chip type detection failed %d\n", ret);
  533. goto err;
  534. }
  535. dev_dbg(&d->intf->dev, "chip_id=%u\n", dev->chip_id);
  536. /* Retry failed I2C messages */
  537. d->i2c_adap.retries = 3;
  538. d->i2c_adap.timeout = msecs_to_jiffies(10);
  539. return WARM;
  540. err:
  541. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  542. return ret;
  543. }
  544. static const struct rtl2830_platform_data rtl2830_mt2060_platform_data = {
  545. .clk = 28800000,
  546. .spec_inv = 1,
  547. .vtop = 0x20,
  548. .krf = 0x04,
  549. .agc_targ_val = 0x2d,
  550. };
  551. static const struct rtl2830_platform_data rtl2830_qt1010_platform_data = {
  552. .clk = 28800000,
  553. .spec_inv = 1,
  554. .vtop = 0x20,
  555. .krf = 0x04,
  556. .agc_targ_val = 0x2d,
  557. };
  558. static const struct rtl2830_platform_data rtl2830_mxl5005s_platform_data = {
  559. .clk = 28800000,
  560. .spec_inv = 0,
  561. .vtop = 0x3f,
  562. .krf = 0x04,
  563. .agc_targ_val = 0x3e,
  564. };
  565. static int rtl2831u_frontend_attach(struct dvb_usb_adapter *adap)
  566. {
  567. struct dvb_usb_device *d = adap_to_d(adap);
  568. struct rtl28xxu_dev *dev = d_to_priv(d);
  569. struct rtl2830_platform_data *pdata = &dev->rtl2830_platform_data;
  570. struct i2c_board_info board_info;
  571. struct i2c_client *client;
  572. int ret;
  573. dev_dbg(&d->intf->dev, "\n");
  574. switch (dev->tuner) {
  575. case TUNER_RTL2830_QT1010:
  576. *pdata = rtl2830_qt1010_platform_data;
  577. break;
  578. case TUNER_RTL2830_MT2060:
  579. *pdata = rtl2830_mt2060_platform_data;
  580. break;
  581. case TUNER_RTL2830_MXL5005S:
  582. *pdata = rtl2830_mxl5005s_platform_data;
  583. break;
  584. default:
  585. dev_err(&d->intf->dev, "unknown tuner %s\n", dev->tuner_name);
  586. ret = -ENODEV;
  587. goto err;
  588. }
  589. /* attach demodulator */
  590. memset(&board_info, 0, sizeof(board_info));
  591. strlcpy(board_info.type, "rtl2830", I2C_NAME_SIZE);
  592. board_info.addr = 0x10;
  593. board_info.platform_data = pdata;
  594. request_module("%s", board_info.type);
  595. client = i2c_new_device(&d->i2c_adap, &board_info);
  596. if (client == NULL || client->dev.driver == NULL) {
  597. ret = -ENODEV;
  598. goto err;
  599. }
  600. if (!try_module_get(client->dev.driver->owner)) {
  601. i2c_unregister_device(client);
  602. ret = -ENODEV;
  603. goto err;
  604. }
  605. adap->fe[0] = pdata->get_dvb_frontend(client);
  606. dev->demod_i2c_adapter = pdata->get_i2c_adapter(client);
  607. dev->i2c_client_demod = client;
  608. return 0;
  609. err:
  610. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  611. return ret;
  612. }
  613. static const struct rtl2832_platform_data rtl2832_fc2580_platform_data = {
  614. .clk = 28800000,
  615. .tuner = TUNER_RTL2832_FC2580,
  616. };
  617. static const struct rtl2832_platform_data rtl2832_fc0012_platform_data = {
  618. .clk = 28800000,
  619. .tuner = TUNER_RTL2832_FC0012
  620. };
  621. static const struct rtl2832_platform_data rtl2832_fc0013_platform_data = {
  622. .clk = 28800000,
  623. .tuner = TUNER_RTL2832_FC0013
  624. };
  625. static const struct rtl2832_platform_data rtl2832_tua9001_platform_data = {
  626. .clk = 28800000,
  627. .tuner = TUNER_RTL2832_TUA9001,
  628. };
  629. static const struct rtl2832_platform_data rtl2832_e4000_platform_data = {
  630. .clk = 28800000,
  631. .tuner = TUNER_RTL2832_E4000,
  632. };
  633. static const struct rtl2832_platform_data rtl2832_r820t_platform_data = {
  634. .clk = 28800000,
  635. .tuner = TUNER_RTL2832_R820T,
  636. };
  637. static const struct rtl2832_platform_data rtl2832_si2157_platform_data = {
  638. .clk = 28800000,
  639. .tuner = TUNER_RTL2832_SI2157,
  640. };
  641. static int rtl2832u_fc0012_tuner_callback(struct dvb_usb_device *d,
  642. int cmd, int arg)
  643. {
  644. int ret;
  645. u8 val;
  646. dev_dbg(&d->intf->dev, "cmd=%d arg=%d\n", cmd, arg);
  647. switch (cmd) {
  648. case FC_FE_CALLBACK_VHF_ENABLE:
  649. /* set output values */
  650. ret = rtl28xxu_rd_reg(d, SYS_GPIO_OUT_VAL, &val);
  651. if (ret)
  652. goto err;
  653. if (arg)
  654. val &= 0xbf; /* set GPIO6 low */
  655. else
  656. val |= 0x40; /* set GPIO6 high */
  657. ret = rtl28xxu_wr_reg(d, SYS_GPIO_OUT_VAL, val);
  658. if (ret)
  659. goto err;
  660. break;
  661. default:
  662. ret = -EINVAL;
  663. goto err;
  664. }
  665. return 0;
  666. err:
  667. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  668. return ret;
  669. }
  670. static int rtl2832u_tua9001_tuner_callback(struct dvb_usb_device *d,
  671. int cmd, int arg)
  672. {
  673. int ret;
  674. u8 val;
  675. dev_dbg(&d->intf->dev, "cmd=%d arg=%d\n", cmd, arg);
  676. /*
  677. * CEN always enabled by hardware wiring
  678. * RESETN GPIO4
  679. * RXEN GPIO1
  680. */
  681. switch (cmd) {
  682. case TUA9001_CMD_RESETN:
  683. if (arg)
  684. val = (1 << 4);
  685. else
  686. val = (0 << 4);
  687. ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_OUT_VAL, val, 0x10);
  688. if (ret)
  689. goto err;
  690. break;
  691. case TUA9001_CMD_RXEN:
  692. if (arg)
  693. val = (1 << 1);
  694. else
  695. val = (0 << 1);
  696. ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_OUT_VAL, val, 0x02);
  697. if (ret)
  698. goto err;
  699. break;
  700. }
  701. return 0;
  702. err:
  703. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  704. return ret;
  705. }
  706. static int rtl2832u_frontend_callback(void *adapter_priv, int component,
  707. int cmd, int arg)
  708. {
  709. struct i2c_adapter *adapter = adapter_priv;
  710. struct device *parent = adapter->dev.parent;
  711. struct i2c_adapter *parent_adapter;
  712. struct dvb_usb_device *d;
  713. struct rtl28xxu_dev *dev;
  714. /*
  715. * All tuners are connected to demod muxed I2C adapter. We have to
  716. * resolve its parent adapter in order to get handle for this driver
  717. * private data. That is a bit hackish solution, GPIO or direct driver
  718. * callback would be better...
  719. */
  720. if (parent != NULL && parent->type == &i2c_adapter_type)
  721. parent_adapter = to_i2c_adapter(parent);
  722. else
  723. return -EINVAL;
  724. d = i2c_get_adapdata(parent_adapter);
  725. dev = d->priv;
  726. dev_dbg(&d->intf->dev, "component=%d cmd=%d arg=%d\n",
  727. component, cmd, arg);
  728. switch (component) {
  729. case DVB_FRONTEND_COMPONENT_TUNER:
  730. switch (dev->tuner) {
  731. case TUNER_RTL2832_FC0012:
  732. return rtl2832u_fc0012_tuner_callback(d, cmd, arg);
  733. case TUNER_RTL2832_TUA9001:
  734. return rtl2832u_tua9001_tuner_callback(d, cmd, arg);
  735. }
  736. }
  737. return 0;
  738. }
  739. static int rtl2832u_frontend_attach(struct dvb_usb_adapter *adap)
  740. {
  741. struct dvb_usb_device *d = adap_to_d(adap);
  742. struct rtl28xxu_dev *dev = d_to_priv(d);
  743. struct rtl2832_platform_data *pdata = &dev->rtl2832_platform_data;
  744. struct i2c_board_info board_info;
  745. struct i2c_client *client;
  746. int ret;
  747. dev_dbg(&d->intf->dev, "\n");
  748. switch (dev->tuner) {
  749. case TUNER_RTL2832_FC0012:
  750. *pdata = rtl2832_fc0012_platform_data;
  751. break;
  752. case TUNER_RTL2832_FC0013:
  753. *pdata = rtl2832_fc0013_platform_data;
  754. break;
  755. case TUNER_RTL2832_FC2580:
  756. *pdata = rtl2832_fc2580_platform_data;
  757. break;
  758. case TUNER_RTL2832_TUA9001:
  759. *pdata = rtl2832_tua9001_platform_data;
  760. break;
  761. case TUNER_RTL2832_E4000:
  762. *pdata = rtl2832_e4000_platform_data;
  763. break;
  764. case TUNER_RTL2832_R820T:
  765. case TUNER_RTL2832_R828D:
  766. *pdata = rtl2832_r820t_platform_data;
  767. break;
  768. case TUNER_RTL2832_SI2157:
  769. *pdata = rtl2832_si2157_platform_data;
  770. break;
  771. default:
  772. dev_err(&d->intf->dev, "unknown tuner %s\n", dev->tuner_name);
  773. ret = -ENODEV;
  774. goto err;
  775. }
  776. /* attach demodulator */
  777. memset(&board_info, 0, sizeof(board_info));
  778. strlcpy(board_info.type, "rtl2832", I2C_NAME_SIZE);
  779. board_info.addr = 0x10;
  780. board_info.platform_data = pdata;
  781. request_module("%s", board_info.type);
  782. client = i2c_new_device(&d->i2c_adap, &board_info);
  783. if (client == NULL || client->dev.driver == NULL) {
  784. ret = -ENODEV;
  785. goto err;
  786. }
  787. if (!try_module_get(client->dev.driver->owner)) {
  788. i2c_unregister_device(client);
  789. ret = -ENODEV;
  790. goto err;
  791. }
  792. adap->fe[0] = pdata->get_dvb_frontend(client);
  793. dev->demod_i2c_adapter = pdata->get_i2c_adapter(client);
  794. dev->i2c_client_demod = client;
  795. /* set fe callback */
  796. adap->fe[0]->callback = rtl2832u_frontend_callback;
  797. if (dev->slave_demod) {
  798. struct i2c_board_info info = {};
  799. /*
  800. * We continue on reduced mode, without DVB-T2/C, using master
  801. * demod, when slave demod fails.
  802. */
  803. ret = 0;
  804. /* attach slave demodulator */
  805. if (dev->slave_demod == SLAVE_DEMOD_MN88472) {
  806. struct mn88472_config mn88472_config = {};
  807. mn88472_config.fe = &adap->fe[1];
  808. mn88472_config.i2c_wr_max = 22,
  809. strlcpy(info.type, "mn88472", I2C_NAME_SIZE);
  810. mn88472_config.xtal = 20500000;
  811. mn88472_config.ts_mode = SERIAL_TS_MODE;
  812. mn88472_config.ts_clock = VARIABLE_TS_CLOCK;
  813. info.addr = 0x18;
  814. info.platform_data = &mn88472_config;
  815. request_module(info.type);
  816. client = i2c_new_device(&d->i2c_adap, &info);
  817. if (client == NULL || client->dev.driver == NULL) {
  818. dev->slave_demod = SLAVE_DEMOD_NONE;
  819. goto err_slave_demod_failed;
  820. }
  821. if (!try_module_get(client->dev.driver->owner)) {
  822. i2c_unregister_device(client);
  823. dev->slave_demod = SLAVE_DEMOD_NONE;
  824. goto err_slave_demod_failed;
  825. }
  826. dev->i2c_client_slave_demod = client;
  827. } else if (dev->slave_demod == SLAVE_DEMOD_MN88473) {
  828. struct mn88473_config mn88473_config = {};
  829. mn88473_config.fe = &adap->fe[1];
  830. mn88473_config.i2c_wr_max = 22,
  831. strlcpy(info.type, "mn88473", I2C_NAME_SIZE);
  832. info.addr = 0x18;
  833. info.platform_data = &mn88473_config;
  834. request_module(info.type);
  835. client = i2c_new_device(&d->i2c_adap, &info);
  836. if (client == NULL || client->dev.driver == NULL) {
  837. dev->slave_demod = SLAVE_DEMOD_NONE;
  838. goto err_slave_demod_failed;
  839. }
  840. if (!try_module_get(client->dev.driver->owner)) {
  841. i2c_unregister_device(client);
  842. dev->slave_demod = SLAVE_DEMOD_NONE;
  843. goto err_slave_demod_failed;
  844. }
  845. dev->i2c_client_slave_demod = client;
  846. } else {
  847. struct si2168_config si2168_config = {};
  848. struct i2c_adapter *adapter;
  849. si2168_config.i2c_adapter = &adapter;
  850. si2168_config.fe = &adap->fe[1];
  851. si2168_config.ts_mode = SI2168_TS_SERIAL;
  852. si2168_config.ts_clock_inv = false;
  853. si2168_config.ts_clock_gapped = true;
  854. strlcpy(info.type, "si2168", I2C_NAME_SIZE);
  855. info.addr = 0x64;
  856. info.platform_data = &si2168_config;
  857. request_module(info.type);
  858. client = i2c_new_device(&d->i2c_adap, &info);
  859. if (client == NULL || client->dev.driver == NULL) {
  860. dev->slave_demod = SLAVE_DEMOD_NONE;
  861. goto err_slave_demod_failed;
  862. }
  863. if (!try_module_get(client->dev.driver->owner)) {
  864. i2c_unregister_device(client);
  865. dev->slave_demod = SLAVE_DEMOD_NONE;
  866. goto err_slave_demod_failed;
  867. }
  868. dev->i2c_client_slave_demod = client;
  869. /* for Si2168 devices use only new I2C write method */
  870. dev->new_i2c_write = true;
  871. }
  872. }
  873. return 0;
  874. err_slave_demod_failed:
  875. err:
  876. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  877. return ret;
  878. }
  879. static int rtl28xxu_frontend_attach(struct dvb_usb_adapter *adap)
  880. {
  881. struct rtl28xxu_dev *dev = adap_to_priv(adap);
  882. if (dev->chip_id == CHIP_ID_RTL2831U)
  883. return rtl2831u_frontend_attach(adap);
  884. else
  885. return rtl2832u_frontend_attach(adap);
  886. }
  887. static int rtl28xxu_frontend_detach(struct dvb_usb_adapter *adap)
  888. {
  889. struct dvb_usb_device *d = adap_to_d(adap);
  890. struct rtl28xxu_dev *dev = d_to_priv(d);
  891. struct i2c_client *client;
  892. dev_dbg(&d->intf->dev, "\n");
  893. /* remove I2C slave demod */
  894. client = dev->i2c_client_slave_demod;
  895. if (client) {
  896. module_put(client->dev.driver->owner);
  897. i2c_unregister_device(client);
  898. }
  899. /* remove I2C demod */
  900. client = dev->i2c_client_demod;
  901. if (client) {
  902. module_put(client->dev.driver->owner);
  903. i2c_unregister_device(client);
  904. }
  905. return 0;
  906. }
  907. static struct qt1010_config rtl28xxu_qt1010_config = {
  908. .i2c_address = 0x62, /* 0xc4 */
  909. };
  910. static struct mt2060_config rtl28xxu_mt2060_config = {
  911. .i2c_address = 0x60, /* 0xc0 */
  912. .clock_out = 0,
  913. };
  914. static struct mxl5005s_config rtl28xxu_mxl5005s_config = {
  915. .i2c_address = 0x63, /* 0xc6 */
  916. .if_freq = IF_FREQ_4570000HZ,
  917. .xtal_freq = CRYSTAL_FREQ_16000000HZ,
  918. .agc_mode = MXL_SINGLE_AGC,
  919. .tracking_filter = MXL_TF_C_H,
  920. .rssi_enable = MXL_RSSI_ENABLE,
  921. .cap_select = MXL_CAP_SEL_ENABLE,
  922. .div_out = MXL_DIV_OUT_4,
  923. .clock_out = MXL_CLOCK_OUT_DISABLE,
  924. .output_load = MXL5005S_IF_OUTPUT_LOAD_200_OHM,
  925. .top = MXL5005S_TOP_25P2,
  926. .mod_mode = MXL_DIGITAL_MODE,
  927. .if_mode = MXL_ZERO_IF,
  928. .AgcMasterByte = 0x00,
  929. };
  930. static int rtl2831u_tuner_attach(struct dvb_usb_adapter *adap)
  931. {
  932. int ret;
  933. struct dvb_usb_device *d = adap_to_d(adap);
  934. struct rtl28xxu_dev *dev = d_to_priv(d);
  935. struct dvb_frontend *fe;
  936. dev_dbg(&d->intf->dev, "\n");
  937. switch (dev->tuner) {
  938. case TUNER_RTL2830_QT1010:
  939. fe = dvb_attach(qt1010_attach, adap->fe[0],
  940. dev->demod_i2c_adapter,
  941. &rtl28xxu_qt1010_config);
  942. break;
  943. case TUNER_RTL2830_MT2060:
  944. fe = dvb_attach(mt2060_attach, adap->fe[0],
  945. dev->demod_i2c_adapter,
  946. &rtl28xxu_mt2060_config, 1220);
  947. break;
  948. case TUNER_RTL2830_MXL5005S:
  949. fe = dvb_attach(mxl5005s_attach, adap->fe[0],
  950. dev->demod_i2c_adapter,
  951. &rtl28xxu_mxl5005s_config);
  952. break;
  953. default:
  954. fe = NULL;
  955. dev_err(&d->intf->dev, "unknown tuner %d\n", dev->tuner);
  956. }
  957. if (fe == NULL) {
  958. ret = -ENODEV;
  959. goto err;
  960. }
  961. return 0;
  962. err:
  963. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  964. return ret;
  965. }
  966. static const struct fc0012_config rtl2832u_fc0012_config = {
  967. .i2c_address = 0x63, /* 0xc6 >> 1 */
  968. .xtal_freq = FC_XTAL_28_8_MHZ,
  969. };
  970. static const struct r820t_config rtl2832u_r820t_config = {
  971. .i2c_addr = 0x1a,
  972. .xtal = 28800000,
  973. .max_i2c_msg_len = 2,
  974. .rafael_chip = CHIP_R820T,
  975. };
  976. static const struct r820t_config rtl2832u_r828d_config = {
  977. .i2c_addr = 0x3a,
  978. .xtal = 16000000,
  979. .max_i2c_msg_len = 2,
  980. .rafael_chip = CHIP_R828D,
  981. };
  982. static int rtl2832u_tuner_attach(struct dvb_usb_adapter *adap)
  983. {
  984. int ret;
  985. struct dvb_usb_device *d = adap_to_d(adap);
  986. struct rtl28xxu_dev *dev = d_to_priv(d);
  987. struct dvb_frontend *fe = NULL;
  988. struct i2c_board_info info;
  989. struct i2c_client *client;
  990. struct v4l2_subdev *subdev = NULL;
  991. struct platform_device *pdev;
  992. struct rtl2832_sdr_platform_data pdata;
  993. dev_dbg(&d->intf->dev, "\n");
  994. memset(&info, 0, sizeof(struct i2c_board_info));
  995. memset(&pdata, 0, sizeof(pdata));
  996. switch (dev->tuner) {
  997. case TUNER_RTL2832_FC0012:
  998. fe = dvb_attach(fc0012_attach, adap->fe[0],
  999. dev->demod_i2c_adapter, &rtl2832u_fc0012_config);
  1000. /* since fc0012 includs reading the signal strength delegate
  1001. * that to the tuner driver */
  1002. adap->fe[0]->ops.read_signal_strength =
  1003. adap->fe[0]->ops.tuner_ops.get_rf_strength;
  1004. break;
  1005. case TUNER_RTL2832_FC0013:
  1006. fe = dvb_attach(fc0013_attach, adap->fe[0],
  1007. dev->demod_i2c_adapter, 0xc6>>1, 0, FC_XTAL_28_8_MHZ);
  1008. /* fc0013 also supports signal strength reading */
  1009. adap->fe[0]->ops.read_signal_strength =
  1010. adap->fe[0]->ops.tuner_ops.get_rf_strength;
  1011. break;
  1012. case TUNER_RTL2832_E4000: {
  1013. struct e4000_config e4000_config = {
  1014. .fe = adap->fe[0],
  1015. .clock = 28800000,
  1016. };
  1017. strlcpy(info.type, "e4000", I2C_NAME_SIZE);
  1018. info.addr = 0x64;
  1019. info.platform_data = &e4000_config;
  1020. request_module(info.type);
  1021. client = i2c_new_device(dev->demod_i2c_adapter, &info);
  1022. if (client == NULL || client->dev.driver == NULL)
  1023. break;
  1024. if (!try_module_get(client->dev.driver->owner)) {
  1025. i2c_unregister_device(client);
  1026. break;
  1027. }
  1028. dev->i2c_client_tuner = client;
  1029. subdev = i2c_get_clientdata(client);
  1030. }
  1031. break;
  1032. case TUNER_RTL2832_FC2580: {
  1033. struct fc2580_platform_data fc2580_pdata = {
  1034. .dvb_frontend = adap->fe[0],
  1035. };
  1036. struct i2c_board_info board_info = {};
  1037. strlcpy(board_info.type, "fc2580", I2C_NAME_SIZE);
  1038. board_info.addr = 0x56;
  1039. board_info.platform_data = &fc2580_pdata;
  1040. request_module("fc2580");
  1041. client = i2c_new_device(dev->demod_i2c_adapter,
  1042. &board_info);
  1043. if (client == NULL || client->dev.driver == NULL)
  1044. break;
  1045. if (!try_module_get(client->dev.driver->owner)) {
  1046. i2c_unregister_device(client);
  1047. break;
  1048. }
  1049. dev->i2c_client_tuner = client;
  1050. subdev = fc2580_pdata.get_v4l2_subdev(client);
  1051. }
  1052. break;
  1053. case TUNER_RTL2832_TUA9001: {
  1054. struct tua9001_platform_data tua9001_pdata = {
  1055. .dvb_frontend = adap->fe[0],
  1056. };
  1057. struct i2c_board_info board_info = {};
  1058. /* enable GPIO1 and GPIO4 as output */
  1059. ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_DIR, 0x00, 0x12);
  1060. if (ret)
  1061. goto err;
  1062. ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_OUT_EN, 0x12, 0x12);
  1063. if (ret)
  1064. goto err;
  1065. strlcpy(board_info.type, "tua9001", I2C_NAME_SIZE);
  1066. board_info.addr = 0x60;
  1067. board_info.platform_data = &tua9001_pdata;
  1068. request_module("tua9001");
  1069. client = i2c_new_device(dev->demod_i2c_adapter, &board_info);
  1070. if (client == NULL || client->dev.driver == NULL)
  1071. break;
  1072. if (!try_module_get(client->dev.driver->owner)) {
  1073. i2c_unregister_device(client);
  1074. break;
  1075. }
  1076. dev->i2c_client_tuner = client;
  1077. break;
  1078. }
  1079. case TUNER_RTL2832_R820T:
  1080. fe = dvb_attach(r820t_attach, adap->fe[0],
  1081. dev->demod_i2c_adapter,
  1082. &rtl2832u_r820t_config);
  1083. /* Use tuner to get the signal strength */
  1084. adap->fe[0]->ops.read_signal_strength =
  1085. adap->fe[0]->ops.tuner_ops.get_rf_strength;
  1086. break;
  1087. case TUNER_RTL2832_R828D:
  1088. fe = dvb_attach(r820t_attach, adap->fe[0],
  1089. dev->demod_i2c_adapter,
  1090. &rtl2832u_r828d_config);
  1091. adap->fe[0]->ops.read_signal_strength =
  1092. adap->fe[0]->ops.tuner_ops.get_rf_strength;
  1093. if (adap->fe[1]) {
  1094. fe = dvb_attach(r820t_attach, adap->fe[1],
  1095. dev->demod_i2c_adapter,
  1096. &rtl2832u_r828d_config);
  1097. adap->fe[1]->ops.read_signal_strength =
  1098. adap->fe[1]->ops.tuner_ops.get_rf_strength;
  1099. }
  1100. break;
  1101. case TUNER_RTL2832_SI2157: {
  1102. struct si2157_config si2157_config = {
  1103. .fe = adap->fe[0],
  1104. .if_port = 0,
  1105. .inversion = false,
  1106. };
  1107. strlcpy(info.type, "si2157", I2C_NAME_SIZE);
  1108. info.addr = 0x60;
  1109. info.platform_data = &si2157_config;
  1110. request_module(info.type);
  1111. client = i2c_new_device(&d->i2c_adap, &info);
  1112. if (client == NULL || client->dev.driver == NULL)
  1113. break;
  1114. if (!try_module_get(client->dev.driver->owner)) {
  1115. i2c_unregister_device(client);
  1116. break;
  1117. }
  1118. dev->i2c_client_tuner = client;
  1119. subdev = i2c_get_clientdata(client);
  1120. /* copy tuner ops for 2nd FE as tuner is shared */
  1121. if (adap->fe[1]) {
  1122. adap->fe[1]->tuner_priv =
  1123. adap->fe[0]->tuner_priv;
  1124. memcpy(&adap->fe[1]->ops.tuner_ops,
  1125. &adap->fe[0]->ops.tuner_ops,
  1126. sizeof(struct dvb_tuner_ops));
  1127. }
  1128. }
  1129. break;
  1130. default:
  1131. dev_err(&d->intf->dev, "unknown tuner %d\n", dev->tuner);
  1132. }
  1133. if (fe == NULL && dev->i2c_client_tuner == NULL) {
  1134. ret = -ENODEV;
  1135. goto err;
  1136. }
  1137. /* register SDR */
  1138. switch (dev->tuner) {
  1139. case TUNER_RTL2832_FC2580:
  1140. case TUNER_RTL2832_FC0012:
  1141. case TUNER_RTL2832_FC0013:
  1142. case TUNER_RTL2832_E4000:
  1143. case TUNER_RTL2832_R820T:
  1144. case TUNER_RTL2832_R828D:
  1145. pdata.clk = dev->rtl2832_platform_data.clk;
  1146. pdata.tuner = dev->tuner;
  1147. pdata.regmap = dev->rtl2832_platform_data.regmap;
  1148. pdata.dvb_frontend = adap->fe[0];
  1149. pdata.dvb_usb_device = d;
  1150. pdata.v4l2_subdev = subdev;
  1151. request_module("%s", "rtl2832_sdr");
  1152. pdev = platform_device_register_data(&d->intf->dev,
  1153. "rtl2832_sdr",
  1154. PLATFORM_DEVID_AUTO,
  1155. &pdata, sizeof(pdata));
  1156. if (IS_ERR(pdev) || pdev->dev.driver == NULL)
  1157. break;
  1158. dev->platform_device_sdr = pdev;
  1159. break;
  1160. default:
  1161. dev_dbg(&d->intf->dev, "no SDR for tuner=%d\n", dev->tuner);
  1162. }
  1163. return 0;
  1164. err:
  1165. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  1166. return ret;
  1167. }
  1168. static int rtl28xxu_tuner_attach(struct dvb_usb_adapter *adap)
  1169. {
  1170. struct rtl28xxu_dev *dev = adap_to_priv(adap);
  1171. if (dev->chip_id == CHIP_ID_RTL2831U)
  1172. return rtl2831u_tuner_attach(adap);
  1173. else
  1174. return rtl2832u_tuner_attach(adap);
  1175. }
  1176. static int rtl28xxu_tuner_detach(struct dvb_usb_adapter *adap)
  1177. {
  1178. struct dvb_usb_device *d = adap_to_d(adap);
  1179. struct rtl28xxu_dev *dev = d_to_priv(d);
  1180. struct i2c_client *client;
  1181. struct platform_device *pdev;
  1182. dev_dbg(&d->intf->dev, "\n");
  1183. /* remove platform SDR */
  1184. pdev = dev->platform_device_sdr;
  1185. if (pdev)
  1186. platform_device_unregister(pdev);
  1187. /* remove I2C tuner */
  1188. client = dev->i2c_client_tuner;
  1189. if (client) {
  1190. module_put(client->dev.driver->owner);
  1191. i2c_unregister_device(client);
  1192. }
  1193. return 0;
  1194. }
  1195. static int rtl28xxu_init(struct dvb_usb_device *d)
  1196. {
  1197. int ret;
  1198. u8 val;
  1199. dev_dbg(&d->intf->dev, "\n");
  1200. /* init USB endpoints */
  1201. ret = rtl28xxu_rd_reg(d, USB_SYSCTL_0, &val);
  1202. if (ret)
  1203. goto err;
  1204. /* enable DMA and Full Packet Mode*/
  1205. val |= 0x09;
  1206. ret = rtl28xxu_wr_reg(d, USB_SYSCTL_0, val);
  1207. if (ret)
  1208. goto err;
  1209. /* set EPA maximum packet size to 0x0200 */
  1210. ret = rtl28xxu_wr_regs(d, USB_EPA_MAXPKT, "\x00\x02\x00\x00", 4);
  1211. if (ret)
  1212. goto err;
  1213. /* change EPA FIFO length */
  1214. ret = rtl28xxu_wr_regs(d, USB_EPA_FIFO_CFG, "\x14\x00\x00\x00", 4);
  1215. if (ret)
  1216. goto err;
  1217. return ret;
  1218. err:
  1219. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  1220. return ret;
  1221. }
  1222. static int rtl2831u_power_ctrl(struct dvb_usb_device *d, int onoff)
  1223. {
  1224. int ret;
  1225. u8 gpio, sys0, epa_ctl[2];
  1226. dev_dbg(&d->intf->dev, "onoff=%d\n", onoff);
  1227. /* demod adc */
  1228. ret = rtl28xxu_rd_reg(d, SYS_SYS0, &sys0);
  1229. if (ret)
  1230. goto err;
  1231. /* tuner power, read GPIOs */
  1232. ret = rtl28xxu_rd_reg(d, SYS_GPIO_OUT_VAL, &gpio);
  1233. if (ret)
  1234. goto err;
  1235. dev_dbg(&d->intf->dev, "RD SYS0=%02x GPIO_OUT_VAL=%02x\n", sys0, gpio);
  1236. if (onoff) {
  1237. gpio |= 0x01; /* GPIO0 = 1 */
  1238. gpio &= (~0x10); /* GPIO4 = 0 */
  1239. gpio |= 0x04; /* GPIO2 = 1, LED on */
  1240. sys0 = sys0 & 0x0f;
  1241. sys0 |= 0xe0;
  1242. epa_ctl[0] = 0x00; /* clear stall */
  1243. epa_ctl[1] = 0x00; /* clear reset */
  1244. } else {
  1245. gpio &= (~0x01); /* GPIO0 = 0 */
  1246. gpio |= 0x10; /* GPIO4 = 1 */
  1247. gpio &= (~0x04); /* GPIO2 = 1, LED off */
  1248. sys0 = sys0 & (~0xc0);
  1249. epa_ctl[0] = 0x10; /* set stall */
  1250. epa_ctl[1] = 0x02; /* set reset */
  1251. }
  1252. dev_dbg(&d->intf->dev, "WR SYS0=%02x GPIO_OUT_VAL=%02x\n", sys0, gpio);
  1253. /* demod adc */
  1254. ret = rtl28xxu_wr_reg(d, SYS_SYS0, sys0);
  1255. if (ret)
  1256. goto err;
  1257. /* tuner power, write GPIOs */
  1258. ret = rtl28xxu_wr_reg(d, SYS_GPIO_OUT_VAL, gpio);
  1259. if (ret)
  1260. goto err;
  1261. /* streaming EP: stall & reset */
  1262. ret = rtl28xxu_wr_regs(d, USB_EPA_CTL, epa_ctl, 2);
  1263. if (ret)
  1264. goto err;
  1265. if (onoff)
  1266. usb_clear_halt(d->udev, usb_rcvbulkpipe(d->udev, 0x81));
  1267. return ret;
  1268. err:
  1269. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  1270. return ret;
  1271. }
  1272. static int rtl2832u_power_ctrl(struct dvb_usb_device *d, int onoff)
  1273. {
  1274. int ret;
  1275. dev_dbg(&d->intf->dev, "onoff=%d\n", onoff);
  1276. if (onoff) {
  1277. /* GPIO3=1, GPIO4=0 */
  1278. ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_OUT_VAL, 0x08, 0x18);
  1279. if (ret)
  1280. goto err;
  1281. /* suspend? */
  1282. ret = rtl28xxu_wr_reg_mask(d, SYS_DEMOD_CTL1, 0x00, 0x10);
  1283. if (ret)
  1284. goto err;
  1285. /* enable PLL */
  1286. ret = rtl28xxu_wr_reg_mask(d, SYS_DEMOD_CTL, 0x80, 0x80);
  1287. if (ret)
  1288. goto err;
  1289. /* disable reset */
  1290. ret = rtl28xxu_wr_reg_mask(d, SYS_DEMOD_CTL, 0x20, 0x20);
  1291. if (ret)
  1292. goto err;
  1293. /* streaming EP: clear stall & reset */
  1294. ret = rtl28xxu_wr_regs(d, USB_EPA_CTL, "\x00\x00", 2);
  1295. if (ret)
  1296. goto err;
  1297. ret = usb_clear_halt(d->udev, usb_rcvbulkpipe(d->udev, 0x81));
  1298. if (ret)
  1299. goto err;
  1300. } else {
  1301. /* GPIO4=1 */
  1302. ret = rtl28xxu_wr_reg_mask(d, SYS_GPIO_OUT_VAL, 0x10, 0x10);
  1303. if (ret)
  1304. goto err;
  1305. /* disable PLL */
  1306. ret = rtl28xxu_wr_reg_mask(d, SYS_DEMOD_CTL, 0x00, 0x80);
  1307. if (ret)
  1308. goto err;
  1309. /* streaming EP: set stall & reset */
  1310. ret = rtl28xxu_wr_regs(d, USB_EPA_CTL, "\x10\x02", 2);
  1311. if (ret)
  1312. goto err;
  1313. }
  1314. return ret;
  1315. err:
  1316. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  1317. return ret;
  1318. }
  1319. static int rtl28xxu_power_ctrl(struct dvb_usb_device *d, int onoff)
  1320. {
  1321. struct rtl28xxu_dev *dev = d_to_priv(d);
  1322. if (dev->chip_id == CHIP_ID_RTL2831U)
  1323. return rtl2831u_power_ctrl(d, onoff);
  1324. else
  1325. return rtl2832u_power_ctrl(d, onoff);
  1326. }
  1327. static int rtl28xxu_frontend_ctrl(struct dvb_frontend *fe, int onoff)
  1328. {
  1329. struct dvb_usb_device *d = fe_to_d(fe);
  1330. struct rtl28xxu_dev *dev = fe_to_priv(fe);
  1331. struct rtl2832_platform_data *pdata = &dev->rtl2832_platform_data;
  1332. int ret;
  1333. u8 val;
  1334. dev_dbg(&d->intf->dev, "fe=%d onoff=%d\n", fe->id, onoff);
  1335. if (dev->chip_id == CHIP_ID_RTL2831U)
  1336. return 0;
  1337. if (fe->id == 0) {
  1338. /* control internal demod ADC */
  1339. if (onoff)
  1340. val = 0x48; /* enable ADC */
  1341. else
  1342. val = 0x00; /* disable ADC */
  1343. ret = rtl28xxu_wr_reg_mask(d, SYS_DEMOD_CTL, val, 0x48);
  1344. if (ret)
  1345. goto err;
  1346. } else if (fe->id == 1) {
  1347. /* bypass slave demod TS through master demod */
  1348. ret = pdata->slave_ts_ctrl(dev->i2c_client_demod, onoff);
  1349. if (ret)
  1350. goto err;
  1351. }
  1352. return 0;
  1353. err:
  1354. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  1355. return ret;
  1356. }
  1357. #if IS_ENABLED(CONFIG_RC_CORE)
  1358. static int rtl2831u_rc_query(struct dvb_usb_device *d)
  1359. {
  1360. int ret, i;
  1361. struct rtl28xxu_dev *dev = d->priv;
  1362. u8 buf[5];
  1363. u32 rc_code;
  1364. struct rtl28xxu_reg_val rc_nec_tab[] = {
  1365. { 0x3033, 0x80 },
  1366. { 0x3020, 0x43 },
  1367. { 0x3021, 0x16 },
  1368. { 0x3022, 0x16 },
  1369. { 0x3023, 0x5a },
  1370. { 0x3024, 0x2d },
  1371. { 0x3025, 0x16 },
  1372. { 0x3026, 0x01 },
  1373. { 0x3028, 0xb0 },
  1374. { 0x3029, 0x04 },
  1375. { 0x302c, 0x88 },
  1376. { 0x302e, 0x13 },
  1377. { 0x3030, 0xdf },
  1378. { 0x3031, 0x05 },
  1379. };
  1380. /* init remote controller */
  1381. if (!dev->rc_active) {
  1382. for (i = 0; i < ARRAY_SIZE(rc_nec_tab); i++) {
  1383. ret = rtl28xxu_wr_reg(d, rc_nec_tab[i].reg,
  1384. rc_nec_tab[i].val);
  1385. if (ret)
  1386. goto err;
  1387. }
  1388. dev->rc_active = true;
  1389. }
  1390. ret = rtl28xxu_rd_regs(d, SYS_IRRC_RP, buf, 5);
  1391. if (ret)
  1392. goto err;
  1393. if (buf[4] & 0x01) {
  1394. enum rc_type proto;
  1395. if (buf[2] == (u8) ~buf[3]) {
  1396. if (buf[0] == (u8) ~buf[1]) {
  1397. /* NEC standard (16 bit) */
  1398. rc_code = RC_SCANCODE_NEC(buf[0], buf[2]);
  1399. proto = RC_TYPE_NEC;
  1400. } else {
  1401. /* NEC extended (24 bit) */
  1402. rc_code = RC_SCANCODE_NECX(buf[0] << 8 | buf[1],
  1403. buf[2]);
  1404. proto = RC_TYPE_NECX;
  1405. }
  1406. } else {
  1407. /* NEC full (32 bit) */
  1408. rc_code = RC_SCANCODE_NEC32(buf[0] << 24 | buf[1] << 16 |
  1409. buf[2] << 8 | buf[3]);
  1410. proto = RC_TYPE_NEC32;
  1411. }
  1412. rc_keydown(d->rc_dev, proto, rc_code, 0);
  1413. ret = rtl28xxu_wr_reg(d, SYS_IRRC_SR, 1);
  1414. if (ret)
  1415. goto err;
  1416. /* repeated intentionally to avoid extra keypress */
  1417. ret = rtl28xxu_wr_reg(d, SYS_IRRC_SR, 1);
  1418. if (ret)
  1419. goto err;
  1420. }
  1421. return ret;
  1422. err:
  1423. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  1424. return ret;
  1425. }
  1426. static int rtl2831u_get_rc_config(struct dvb_usb_device *d,
  1427. struct dvb_usb_rc *rc)
  1428. {
  1429. rc->map_name = RC_MAP_EMPTY;
  1430. rc->allowed_protos = RC_BIT_NEC | RC_BIT_NECX | RC_BIT_NEC32;
  1431. rc->query = rtl2831u_rc_query;
  1432. rc->interval = 400;
  1433. return 0;
  1434. }
  1435. static int rtl2832u_rc_query(struct dvb_usb_device *d)
  1436. {
  1437. int ret, i, len;
  1438. struct rtl28xxu_dev *dev = d->priv;
  1439. struct ir_raw_event ev;
  1440. u8 buf[128];
  1441. static const struct rtl28xxu_reg_val_mask refresh_tab[] = {
  1442. {IR_RX_IF, 0x03, 0xff},
  1443. {IR_RX_BUF_CTRL, 0x80, 0xff},
  1444. {IR_RX_CTRL, 0x80, 0xff},
  1445. };
  1446. /* init remote controller */
  1447. if (!dev->rc_active) {
  1448. static const struct rtl28xxu_reg_val_mask init_tab[] = {
  1449. {SYS_DEMOD_CTL1, 0x00, 0x04},
  1450. {SYS_DEMOD_CTL1, 0x00, 0x08},
  1451. {USB_CTRL, 0x20, 0x20},
  1452. {SYS_GPIO_DIR, 0x00, 0x08},
  1453. {SYS_GPIO_OUT_EN, 0x08, 0x08},
  1454. {SYS_GPIO_OUT_VAL, 0x08, 0x08},
  1455. {IR_MAX_DURATION0, 0xd0, 0xff},
  1456. {IR_MAX_DURATION1, 0x07, 0xff},
  1457. {IR_IDLE_LEN0, 0xc0, 0xff},
  1458. {IR_IDLE_LEN1, 0x00, 0xff},
  1459. {IR_GLITCH_LEN, 0x03, 0xff},
  1460. {IR_RX_CLK, 0x09, 0xff},
  1461. {IR_RX_CFG, 0x1c, 0xff},
  1462. {IR_MAX_H_TOL_LEN, 0x1e, 0xff},
  1463. {IR_MAX_L_TOL_LEN, 0x1e, 0xff},
  1464. {IR_RX_CTRL, 0x80, 0xff},
  1465. };
  1466. for (i = 0; i < ARRAY_SIZE(init_tab); i++) {
  1467. ret = rtl28xxu_wr_reg_mask(d, init_tab[i].reg,
  1468. init_tab[i].val, init_tab[i].mask);
  1469. if (ret)
  1470. goto err;
  1471. }
  1472. dev->rc_active = true;
  1473. }
  1474. ret = rtl28xxu_rd_reg(d, IR_RX_IF, &buf[0]);
  1475. if (ret)
  1476. goto err;
  1477. if (buf[0] != 0x83)
  1478. goto exit;
  1479. ret = rtl28xxu_rd_reg(d, IR_RX_BC, &buf[0]);
  1480. if (ret)
  1481. goto err;
  1482. len = buf[0];
  1483. /* read raw code from hw */
  1484. ret = rtl28xxu_rd_regs(d, IR_RX_BUF, buf, len);
  1485. if (ret)
  1486. goto err;
  1487. /* let hw receive new code */
  1488. for (i = 0; i < ARRAY_SIZE(refresh_tab); i++) {
  1489. ret = rtl28xxu_wr_reg_mask(d, refresh_tab[i].reg,
  1490. refresh_tab[i].val, refresh_tab[i].mask);
  1491. if (ret)
  1492. goto err;
  1493. }
  1494. /* pass data to Kernel IR decoder */
  1495. init_ir_raw_event(&ev);
  1496. for (i = 0; i < len; i++) {
  1497. ev.pulse = buf[i] >> 7;
  1498. ev.duration = 50800 * (buf[i] & 0x7f);
  1499. ir_raw_event_store_with_filter(d->rc_dev, &ev);
  1500. }
  1501. /* 'flush' ir_raw_event_store_with_filter() */
  1502. ir_raw_event_set_idle(d->rc_dev, true);
  1503. ir_raw_event_handle(d->rc_dev);
  1504. exit:
  1505. return ret;
  1506. err:
  1507. dev_dbg(&d->intf->dev, "failed=%d\n", ret);
  1508. return ret;
  1509. }
  1510. static int rtl2832u_get_rc_config(struct dvb_usb_device *d,
  1511. struct dvb_usb_rc *rc)
  1512. {
  1513. /* disable IR interrupts in order to avoid SDR sample loss */
  1514. if (rtl28xxu_disable_rc)
  1515. return rtl28xxu_wr_reg(d, IR_RX_IE, 0x00);
  1516. /* load empty to enable rc */
  1517. if (!rc->map_name)
  1518. rc->map_name = RC_MAP_EMPTY;
  1519. rc->allowed_protos = RC_BIT_ALL;
  1520. rc->driver_type = RC_DRIVER_IR_RAW;
  1521. rc->query = rtl2832u_rc_query;
  1522. rc->interval = 200;
  1523. return 0;
  1524. }
  1525. static int rtl28xxu_get_rc_config(struct dvb_usb_device *d,
  1526. struct dvb_usb_rc *rc)
  1527. {
  1528. struct rtl28xxu_dev *dev = d_to_priv(d);
  1529. if (dev->chip_id == CHIP_ID_RTL2831U)
  1530. return rtl2831u_get_rc_config(d, rc);
  1531. else
  1532. return rtl2832u_get_rc_config(d, rc);
  1533. }
  1534. #else
  1535. #define rtl28xxu_get_rc_config NULL
  1536. #endif
  1537. static int rtl28xxu_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
  1538. {
  1539. struct rtl28xxu_dev *dev = adap_to_priv(adap);
  1540. if (dev->chip_id == CHIP_ID_RTL2831U) {
  1541. struct rtl2830_platform_data *pdata = &dev->rtl2830_platform_data;
  1542. return pdata->pid_filter_ctrl(adap->fe[0], onoff);
  1543. } else {
  1544. struct rtl2832_platform_data *pdata = &dev->rtl2832_platform_data;
  1545. return pdata->pid_filter_ctrl(adap->fe[0], onoff);
  1546. }
  1547. }
  1548. static int rtl28xxu_pid_filter(struct dvb_usb_adapter *adap, int index,
  1549. u16 pid, int onoff)
  1550. {
  1551. struct rtl28xxu_dev *dev = adap_to_priv(adap);
  1552. if (dev->chip_id == CHIP_ID_RTL2831U) {
  1553. struct rtl2830_platform_data *pdata = &dev->rtl2830_platform_data;
  1554. return pdata->pid_filter(adap->fe[0], index, pid, onoff);
  1555. } else {
  1556. struct rtl2832_platform_data *pdata = &dev->rtl2832_platform_data;
  1557. return pdata->pid_filter(adap->fe[0], index, pid, onoff);
  1558. }
  1559. }
  1560. static const struct dvb_usb_device_properties rtl28xxu_props = {
  1561. .driver_name = KBUILD_MODNAME,
  1562. .owner = THIS_MODULE,
  1563. .adapter_nr = adapter_nr,
  1564. .size_of_priv = sizeof(struct rtl28xxu_dev),
  1565. .identify_state = rtl28xxu_identify_state,
  1566. .power_ctrl = rtl28xxu_power_ctrl,
  1567. .frontend_ctrl = rtl28xxu_frontend_ctrl,
  1568. .i2c_algo = &rtl28xxu_i2c_algo,
  1569. .read_config = rtl28xxu_read_config,
  1570. .frontend_attach = rtl28xxu_frontend_attach,
  1571. .frontend_detach = rtl28xxu_frontend_detach,
  1572. .tuner_attach = rtl28xxu_tuner_attach,
  1573. .tuner_detach = rtl28xxu_tuner_detach,
  1574. .init = rtl28xxu_init,
  1575. .get_rc_config = rtl28xxu_get_rc_config,
  1576. .num_adapters = 1,
  1577. .adapter = {
  1578. {
  1579. .caps = DVB_USB_ADAP_HAS_PID_FILTER |
  1580. DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
  1581. .pid_filter_count = 32,
  1582. .pid_filter_ctrl = rtl28xxu_pid_filter_ctrl,
  1583. .pid_filter = rtl28xxu_pid_filter,
  1584. .stream = DVB_USB_STREAM_BULK(0x81, 6, 8 * 512),
  1585. },
  1586. },
  1587. };
  1588. static const struct usb_device_id rtl28xxu_id_table[] = {
  1589. /* RTL2831U devices: */
  1590. { DVB_USB_DEVICE(USB_VID_REALTEK, USB_PID_REALTEK_RTL2831U,
  1591. &rtl28xxu_props, "Realtek RTL2831U reference design", NULL) },
  1592. { DVB_USB_DEVICE(USB_VID_WIDEVIEW, USB_PID_FREECOM_DVBT,
  1593. &rtl28xxu_props, "Freecom USB2.0 DVB-T", NULL) },
  1594. { DVB_USB_DEVICE(USB_VID_WIDEVIEW, USB_PID_FREECOM_DVBT_2,
  1595. &rtl28xxu_props, "Freecom USB2.0 DVB-T", NULL) },
  1596. /* RTL2832U devices: */
  1597. { DVB_USB_DEVICE(USB_VID_REALTEK, 0x2832,
  1598. &rtl28xxu_props, "Realtek RTL2832U reference design", NULL) },
  1599. { DVB_USB_DEVICE(USB_VID_REALTEK, 0x2838,
  1600. &rtl28xxu_props, "Realtek RTL2832U reference design", NULL) },
  1601. { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_BLACK_REV1,
  1602. &rtl28xxu_props, "TerraTec Cinergy T Stick Black", RC_MAP_TERRATEC_SLIM) },
  1603. { DVB_USB_DEVICE(USB_VID_GTEK, USB_PID_DELOCK_USB2_DVBT,
  1604. &rtl28xxu_props, "G-Tek Electronics Group Lifeview LV5TDLX DVB-T", NULL) },
  1605. { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_NOXON_DAB_STICK,
  1606. &rtl28xxu_props, "TerraTec NOXON DAB Stick", NULL) },
  1607. { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_NOXON_DAB_STICK_REV2,
  1608. &rtl28xxu_props, "TerraTec NOXON DAB Stick (rev 2)", NULL) },
  1609. { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_NOXON_DAB_STICK_REV3,
  1610. &rtl28xxu_props, "TerraTec NOXON DAB Stick (rev 3)", NULL) },
  1611. { DVB_USB_DEVICE(USB_VID_GTEK, USB_PID_TREKSTOR_TERRES_2_0,
  1612. &rtl28xxu_props, "Trekstor DVB-T Stick Terres 2.0", NULL) },
  1613. { DVB_USB_DEVICE(USB_VID_DEXATEK, 0x1101,
  1614. &rtl28xxu_props, "Dexatek DK DVB-T Dongle", NULL) },
  1615. { DVB_USB_DEVICE(USB_VID_LEADTEK, 0x6680,
  1616. &rtl28xxu_props, "DigitalNow Quad DVB-T Receiver", NULL) },
  1617. { DVB_USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV_DONGLE_MINID,
  1618. &rtl28xxu_props, "Leadtek Winfast DTV Dongle Mini D", NULL) },
  1619. { DVB_USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV2000DS_PLUS,
  1620. &rtl28xxu_props, "Leadtek WinFast DTV2000DS Plus", RC_MAP_LEADTEK_Y04G0051) },
  1621. { DVB_USB_DEVICE(USB_VID_TERRATEC, 0x00d3,
  1622. &rtl28xxu_props, "TerraTec Cinergy T Stick RC (Rev. 3)", NULL) },
  1623. { DVB_USB_DEVICE(USB_VID_DEXATEK, 0x1102,
  1624. &rtl28xxu_props, "Dexatek DK mini DVB-T Dongle", NULL) },
  1625. { DVB_USB_DEVICE(USB_VID_TERRATEC, 0x00d7,
  1626. &rtl28xxu_props, "TerraTec Cinergy T Stick+", NULL) },
  1627. { DVB_USB_DEVICE(USB_VID_KWORLD_2, 0xd3a8,
  1628. &rtl28xxu_props, "ASUS My Cinema-U3100Mini Plus V2", NULL) },
  1629. { DVB_USB_DEVICE(USB_VID_KWORLD_2, 0xd393,
  1630. &rtl28xxu_props, "GIGABYTE U7300", NULL) },
  1631. { DVB_USB_DEVICE(USB_VID_DEXATEK, 0x1104,
  1632. &rtl28xxu_props, "MSI DIGIVOX Micro HD", NULL) },
  1633. { DVB_USB_DEVICE(USB_VID_COMPRO, 0x0620,
  1634. &rtl28xxu_props, "Compro VideoMate U620F", NULL) },
  1635. { DVB_USB_DEVICE(USB_VID_COMPRO, 0x0650,
  1636. &rtl28xxu_props, "Compro VideoMate U650F", NULL) },
  1637. { DVB_USB_DEVICE(USB_VID_KWORLD_2, 0xd394,
  1638. &rtl28xxu_props, "MaxMedia HU394-T", NULL) },
  1639. { DVB_USB_DEVICE(USB_VID_LEADTEK, 0x6a03,
  1640. &rtl28xxu_props, "Leadtek WinFast DTV Dongle mini", NULL) },
  1641. { DVB_USB_DEVICE(USB_VID_GTEK, USB_PID_CPYTO_REDI_PC50A,
  1642. &rtl28xxu_props, "Crypto ReDi PC 50 A", NULL) },
  1643. { DVB_USB_DEVICE(USB_VID_KYE, 0x707f,
  1644. &rtl28xxu_props, "Genius TVGo DVB-T03", NULL) },
  1645. { DVB_USB_DEVICE(USB_VID_KWORLD_2, 0xd395,
  1646. &rtl28xxu_props, "Peak DVB-T USB", NULL) },
  1647. { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV20_RTL2832U,
  1648. &rtl28xxu_props, "Sveon STV20", NULL) },
  1649. { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV21,
  1650. &rtl28xxu_props, "Sveon STV21", NULL) },
  1651. { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV27,
  1652. &rtl28xxu_props, "Sveon STV27", NULL) },
  1653. { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_TURBOX_DTT_2000,
  1654. &rtl28xxu_props, "TURBO-X Pure TV Tuner DTT-2000", NULL) },
  1655. /* RTL2832P devices: */
  1656. { DVB_USB_DEVICE(USB_VID_HANFTEK, 0x0131,
  1657. &rtl28xxu_props, "Astrometa DVB-T2", NULL) },
  1658. { DVB_USB_DEVICE(0x5654, 0xca42,
  1659. &rtl28xxu_props, "GoTView MasterHD 3", NULL) },
  1660. { }
  1661. };
  1662. MODULE_DEVICE_TABLE(usb, rtl28xxu_id_table);
  1663. static struct usb_driver rtl28xxu_usb_driver = {
  1664. .name = KBUILD_MODNAME,
  1665. .id_table = rtl28xxu_id_table,
  1666. .probe = dvb_usbv2_probe,
  1667. .disconnect = dvb_usbv2_disconnect,
  1668. .suspend = dvb_usbv2_suspend,
  1669. .resume = dvb_usbv2_resume,
  1670. .reset_resume = dvb_usbv2_reset_resume,
  1671. .no_dynamic_id = 1,
  1672. .soft_unbind = 1,
  1673. };
  1674. module_usb_driver(rtl28xxu_usb_driver);
  1675. MODULE_DESCRIPTION("Realtek RTL28xxU DVB USB driver");
  1676. MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
  1677. MODULE_AUTHOR("Thomas Mair <thomas.mair86@googlemail.com>");
  1678. MODULE_LICENSE("GPL");