tda18250.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902
  1. /*
  2. * NXP TDA18250 silicon tuner driver
  3. *
  4. * Copyright (C) 2017 Olli Salonen <olli.salonen@iki.fi>
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation; either version 2 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. */
  17. #include "tda18250_priv.h"
  18. #include <linux/regmap.h>
  19. static const struct dvb_tuner_ops tda18250_ops;
  20. static int tda18250_power_control(struct dvb_frontend *fe,
  21. unsigned int power_state)
  22. {
  23. struct i2c_client *client = fe->tuner_priv;
  24. struct tda18250_dev *dev = i2c_get_clientdata(client);
  25. int ret;
  26. unsigned int utmp;
  27. dev_dbg(&client->dev, "power state: %d", power_state);
  28. switch (power_state) {
  29. case TDA18250_POWER_NORMAL:
  30. ret = regmap_write_bits(dev->regmap, R06_POWER2, 0x07, 0x00);
  31. if (ret)
  32. goto err;
  33. ret = regmap_write_bits(dev->regmap, R25_REF, 0xc0, 0xc0);
  34. if (ret)
  35. goto err;
  36. break;
  37. case TDA18250_POWER_STANDBY:
  38. if (dev->loopthrough) {
  39. ret = regmap_write_bits(dev->regmap,
  40. R25_REF, 0xc0, 0x80);
  41. if (ret)
  42. goto err;
  43. ret = regmap_write_bits(dev->regmap,
  44. R06_POWER2, 0x07, 0x02);
  45. if (ret)
  46. goto err;
  47. ret = regmap_write_bits(dev->regmap,
  48. R10_LT1, 0x80, 0x00);
  49. if (ret)
  50. goto err;
  51. } else {
  52. ret = regmap_write_bits(dev->regmap,
  53. R25_REF, 0xc0, 0x80);
  54. if (ret)
  55. goto err;
  56. ret = regmap_write_bits(dev->regmap,
  57. R06_POWER2, 0x07, 0x01);
  58. if (ret)
  59. goto err;
  60. ret = regmap_read(dev->regmap,
  61. R0D_AGC12, &utmp);
  62. if (ret)
  63. goto err;
  64. ret = regmap_write_bits(dev->regmap,
  65. R0D_AGC12, 0x03, 0x03);
  66. if (ret)
  67. goto err;
  68. ret = regmap_write_bits(dev->regmap,
  69. R10_LT1, 0x80, 0x80);
  70. if (ret)
  71. goto err;
  72. ret = regmap_write_bits(dev->regmap,
  73. R0D_AGC12, 0x03, utmp & 0x03);
  74. if (ret)
  75. goto err;
  76. }
  77. break;
  78. default:
  79. ret = -EINVAL;
  80. goto err;
  81. }
  82. return 0;
  83. err:
  84. return ret;
  85. }
  86. static int tda18250_wait_for_irq(struct dvb_frontend *fe,
  87. int maxwait, int step, u8 irq)
  88. {
  89. struct i2c_client *client = fe->tuner_priv;
  90. struct tda18250_dev *dev = i2c_get_clientdata(client);
  91. int ret;
  92. unsigned long timeout;
  93. bool triggered;
  94. unsigned int utmp;
  95. triggered = false;
  96. timeout = jiffies + msecs_to_jiffies(maxwait);
  97. while (!time_after(jiffies, timeout)) {
  98. // check for the IRQ
  99. ret = regmap_read(dev->regmap, R08_IRQ1, &utmp);
  100. if (ret)
  101. goto err;
  102. if ((utmp & irq) == irq) {
  103. triggered = true;
  104. break;
  105. }
  106. msleep(step);
  107. }
  108. dev_dbg(&client->dev, "waited IRQ (0x%02x) %d ms, triggered: %s", irq,
  109. jiffies_to_msecs(jiffies) -
  110. (jiffies_to_msecs(timeout) - maxwait),
  111. triggered ? "true" : "false");
  112. if (!triggered)
  113. return -ETIMEDOUT;
  114. return 0;
  115. err:
  116. return ret;
  117. }
  118. static int tda18250_init(struct dvb_frontend *fe)
  119. {
  120. struct i2c_client *client = fe->tuner_priv;
  121. struct tda18250_dev *dev = i2c_get_clientdata(client);
  122. int ret, i;
  123. /* default values for various regs */
  124. static const u8 init_regs[][2] = {
  125. { R0C_AGC11, 0xc7 },
  126. { R0D_AGC12, 0x5d },
  127. { R0E_AGC13, 0x40 },
  128. { R0F_AGC14, 0x0e },
  129. { R10_LT1, 0x47 },
  130. { R11_LT2, 0x4e },
  131. { R12_AGC21, 0x26 },
  132. { R13_AGC22, 0x60 },
  133. { R18_AGC32, 0x37 },
  134. { R19_AGC33, 0x09 },
  135. { R1A_AGCK, 0x00 },
  136. { R1E_WI_FI, 0x29 },
  137. { R1F_RF_BPF, 0x06 },
  138. { R20_IR_MIX, 0xc6 },
  139. { R21_IF_AGC, 0x00 },
  140. { R2C_PS1, 0x75 },
  141. { R2D_PS2, 0x06 },
  142. { R2E_PS3, 0x07 },
  143. { R30_RSSI2, 0x0e },
  144. { R31_IRQ_CTRL, 0x00 },
  145. { R39_SD5, 0x00 },
  146. { R3B_REGU, 0x55 },
  147. { R3C_RCCAL1, 0xa7 },
  148. { R3F_IRCAL2, 0x85 },
  149. { R40_IRCAL3, 0x87 },
  150. { R41_IRCAL4, 0xc0 },
  151. { R43_PD1, 0x40 },
  152. { R44_PD2, 0xc0 },
  153. { R46_CPUMP, 0x0c },
  154. { R47_LNAPOL, 0x64 },
  155. { R4B_XTALOSC1, 0x30 },
  156. { R59_AGC2_UP2, 0x05 },
  157. { R5B_AGC_AUTO, 0x07 },
  158. { R5C_AGC_DEBUG, 0x00 },
  159. };
  160. /* crystal related regs depend on frequency */
  161. static const u8 xtal_regs[][5] = {
  162. /* reg: 4d 4e 4f 50 51 */
  163. [TDA18250_XTAL_FREQ_16MHZ] = { 0x3e, 0x80, 0x50, 0x00, 0x20 },
  164. [TDA18250_XTAL_FREQ_24MHZ] = { 0x5d, 0xc0, 0xec, 0x00, 0x18 },
  165. [TDA18250_XTAL_FREQ_25MHZ] = { 0x61, 0xa8, 0xec, 0x80, 0x19 },
  166. [TDA18250_XTAL_FREQ_27MHZ] = { 0x69, 0x78, 0x8d, 0x80, 0x1b },
  167. [TDA18250_XTAL_FREQ_30MHZ] = { 0x75, 0x30, 0x8f, 0x00, 0x1e },
  168. };
  169. dev_dbg(&client->dev, "\n");
  170. ret = tda18250_power_control(fe, TDA18250_POWER_NORMAL);
  171. if (ret)
  172. goto err;
  173. msleep(20);
  174. if (dev->warm)
  175. goto warm;
  176. /* set initial register values */
  177. for (i = 0; i < ARRAY_SIZE(init_regs); i++) {
  178. ret = regmap_write(dev->regmap, init_regs[i][0],
  179. init_regs[i][1]);
  180. if (ret)
  181. goto err;
  182. }
  183. /* set xtal related regs */
  184. ret = regmap_bulk_write(dev->regmap, R4D_XTALFLX1,
  185. xtal_regs[dev->xtal_freq], 5);
  186. if (ret)
  187. goto err;
  188. ret = regmap_write_bits(dev->regmap, R10_LT1, 0x80,
  189. dev->loopthrough ? 0x00 : 0x80);
  190. if (ret)
  191. goto err;
  192. /* clear IRQ */
  193. ret = regmap_write(dev->regmap, R0A_IRQ3, TDA18250_IRQ_HW_INIT);
  194. if (ret)
  195. goto err;
  196. /* start HW init */
  197. ret = regmap_write(dev->regmap, R2A_MSM1, 0x70);
  198. if (ret)
  199. goto err;
  200. ret = regmap_write(dev->regmap, R2B_MSM2, 0x01);
  201. if (ret)
  202. goto err;
  203. ret = tda18250_wait_for_irq(fe, 500, 10, TDA18250_IRQ_HW_INIT);
  204. if (ret)
  205. goto err;
  206. /* tuner calibration */
  207. ret = regmap_write(dev->regmap, R2A_MSM1, 0x02);
  208. if (ret)
  209. goto err;
  210. ret = regmap_write(dev->regmap, R2B_MSM2, 0x01);
  211. if (ret)
  212. goto err;
  213. ret = tda18250_wait_for_irq(fe, 500, 10, TDA18250_IRQ_CAL);
  214. if (ret)
  215. goto err;
  216. dev->warm = true;
  217. warm:
  218. /* power up LNA */
  219. ret = regmap_write_bits(dev->regmap, R0C_AGC11, 0x80, 0x00);
  220. if (ret)
  221. goto err;
  222. return 0;
  223. err:
  224. dev_dbg(&client->dev, "failed=%d", ret);
  225. return ret;
  226. }
  227. static int tda18250_set_agc(struct dvb_frontend *fe)
  228. {
  229. struct i2c_client *client = fe->tuner_priv;
  230. struct tda18250_dev *dev = i2c_get_clientdata(client);
  231. struct dtv_frontend_properties *c = &fe->dtv_property_cache;
  232. int ret;
  233. u8 utmp, utmp2;
  234. dev_dbg(&client->dev, "\n");
  235. ret = regmap_write_bits(dev->regmap, R1F_RF_BPF, 0x87, 0x06);
  236. if (ret)
  237. goto err;
  238. utmp = ((c->frequency < 100000000) &&
  239. ((c->delivery_system == SYS_DVBC_ANNEX_A) ||
  240. (c->delivery_system == SYS_DVBC_ANNEX_C)) &&
  241. (c->bandwidth_hz == 6000000)) ? 0x80 : 0x00;
  242. ret = regmap_write(dev->regmap, R5A_H3H5, utmp);
  243. if (ret)
  244. goto err;
  245. /* AGC1 */
  246. switch (c->delivery_system) {
  247. case SYS_ATSC:
  248. case SYS_DVBT:
  249. case SYS_DVBT2:
  250. utmp = 4;
  251. break;
  252. default: /* DVB-C/QAM */
  253. switch (c->bandwidth_hz) {
  254. case 6000000:
  255. utmp = (c->frequency < 800000000) ? 6 : 4;
  256. break;
  257. default: /* 7.935 and 8 MHz */
  258. utmp = (c->frequency < 100000000) ? 2 : 3;
  259. break;
  260. }
  261. break;
  262. }
  263. ret = regmap_write_bits(dev->regmap, R0C_AGC11, 0x07, utmp);
  264. if (ret)
  265. goto err;
  266. /* AGC2 */
  267. switch (c->delivery_system) {
  268. case SYS_ATSC:
  269. case SYS_DVBT:
  270. case SYS_DVBT2:
  271. utmp = (c->frequency < 320000000) ? 20 : 16;
  272. utmp2 = (c->frequency < 320000000) ? 22 : 18;
  273. break;
  274. default: /* DVB-C/QAM */
  275. switch (c->bandwidth_hz) {
  276. case 6000000:
  277. if (c->frequency < 600000000) {
  278. utmp = 18;
  279. utmp2 = 22;
  280. } else if (c->frequency < 800000000) {
  281. utmp = 16;
  282. utmp2 = 20;
  283. } else {
  284. utmp = 14;
  285. utmp2 = 16;
  286. }
  287. break;
  288. default: /* 7.935 and 8 MHz */
  289. utmp = (c->frequency < 320000000) ? 16 : 18;
  290. utmp2 = (c->frequency < 320000000) ? 18 : 20;
  291. break;
  292. }
  293. break;
  294. }
  295. ret = regmap_write_bits(dev->regmap, R58_AGC2_UP1, 0x1f, utmp2+8);
  296. if (ret)
  297. goto err;
  298. ret = regmap_write_bits(dev->regmap, R13_AGC22, 0x1f, utmp);
  299. if (ret)
  300. goto err;
  301. ret = regmap_write_bits(dev->regmap, R14_AGC23, 0x1f, utmp2);
  302. if (ret)
  303. goto err;
  304. switch (c->delivery_system) {
  305. case SYS_ATSC:
  306. case SYS_DVBT:
  307. case SYS_DVBT2:
  308. utmp = 98;
  309. break;
  310. default: /* DVB-C/QAM */
  311. utmp = 90;
  312. break;
  313. }
  314. ret = regmap_write_bits(dev->regmap, R16_AGC25, 0xf8, utmp);
  315. if (ret)
  316. goto err;
  317. ret = regmap_write_bits(dev->regmap, R12_AGC21, 0x60,
  318. (c->frequency > 800000000) ? 0x40 : 0x20);
  319. if (ret)
  320. goto err;
  321. /* AGC3 */
  322. switch (c->delivery_system) {
  323. case SYS_ATSC:
  324. case SYS_DVBT:
  325. case SYS_DVBT2:
  326. utmp = (c->frequency < 320000000) ? 5 : 7;
  327. utmp2 = (c->frequency < 320000000) ? 10 : 12;
  328. break;
  329. default: /* DVB-C/QAM */
  330. utmp = 7;
  331. utmp2 = 12;
  332. break;
  333. }
  334. ret = regmap_write(dev->regmap, R17_AGC31, (utmp << 4) | utmp2);
  335. if (ret)
  336. goto err;
  337. /* S2D */
  338. switch (c->delivery_system) {
  339. case SYS_ATSC:
  340. case SYS_DVBT:
  341. case SYS_DVBT2:
  342. if (c->bandwidth_hz == 8000000)
  343. utmp = 0x04;
  344. else
  345. utmp = (c->frequency < 320000000) ? 0x04 : 0x02;
  346. break;
  347. default: /* DVB-C/QAM */
  348. if (c->bandwidth_hz == 6000000)
  349. utmp = ((c->frequency > 172544000) &&
  350. (c->frequency < 320000000)) ? 0x04 : 0x02;
  351. else /* 7.935 and 8 MHz */
  352. utmp = ((c->frequency > 320000000) &&
  353. (c->frequency < 600000000)) ? 0x02 : 0x04;
  354. break;
  355. }
  356. ret = regmap_write_bits(dev->regmap, R20_IR_MIX, 0x06, utmp);
  357. if (ret)
  358. goto err;
  359. switch (c->delivery_system) {
  360. case SYS_ATSC:
  361. case SYS_DVBT:
  362. case SYS_DVBT2:
  363. utmp = 0;
  364. break;
  365. default: /* DVB-C/QAM */
  366. utmp = (c->frequency < 600000000) ? 0 : 3;
  367. break;
  368. }
  369. ret = regmap_write_bits(dev->regmap, R16_AGC25, 0x03, utmp);
  370. if (ret)
  371. goto err;
  372. utmp = 0x09;
  373. switch (c->delivery_system) {
  374. case SYS_ATSC:
  375. case SYS_DVBT:
  376. case SYS_DVBT2:
  377. if (c->bandwidth_hz == 8000000)
  378. utmp = 0x0c;
  379. break;
  380. default: /* DVB-C/QAM */
  381. utmp = 0x0c;
  382. break;
  383. }
  384. ret = regmap_write_bits(dev->regmap, R0F_AGC14, 0x3f, utmp);
  385. if (ret)
  386. goto err;
  387. return 0;
  388. err:
  389. dev_dbg(&client->dev, "failed=%d", ret);
  390. return ret;
  391. }
  392. static int tda18250_pll_calc(struct dvb_frontend *fe, u8 *rdiv,
  393. u8 *ndiv, u8 *icp)
  394. {
  395. struct i2c_client *client = fe->tuner_priv;
  396. struct tda18250_dev *dev = i2c_get_clientdata(client);
  397. struct dtv_frontend_properties *c = &fe->dtv_property_cache;
  398. int ret;
  399. unsigned int uval, exp, lopd, scale;
  400. unsigned long fvco;
  401. ret = regmap_read(dev->regmap, R34_MD1, &uval);
  402. if (ret)
  403. goto err;
  404. exp = (uval & 0x70) >> 4;
  405. if (exp > 5)
  406. exp = 0;
  407. lopd = 1 << (exp - 1);
  408. scale = uval & 0x0f;
  409. fvco = lopd * scale * ((c->frequency / 1000) + dev->if_frequency);
  410. switch (dev->xtal_freq) {
  411. case TDA18250_XTAL_FREQ_16MHZ:
  412. *rdiv = 1;
  413. *ndiv = 0;
  414. *icp = (fvco < 6622000) ? 0x05 : 0x02;
  415. break;
  416. case TDA18250_XTAL_FREQ_24MHZ:
  417. case TDA18250_XTAL_FREQ_25MHZ:
  418. *rdiv = 3;
  419. *ndiv = 1;
  420. *icp = (fvco < 6622000) ? 0x05 : 0x02;
  421. break;
  422. case TDA18250_XTAL_FREQ_27MHZ:
  423. if (fvco < 6643000) {
  424. *rdiv = 2;
  425. *ndiv = 0;
  426. *icp = 0x05;
  427. } else if (fvco < 6811000) {
  428. *rdiv = 2;
  429. *ndiv = 0;
  430. *icp = 0x06;
  431. } else {
  432. *rdiv = 3;
  433. *ndiv = 1;
  434. *icp = 0x02;
  435. }
  436. break;
  437. case TDA18250_XTAL_FREQ_30MHZ:
  438. *rdiv = 2;
  439. *ndiv = 0;
  440. *icp = (fvco < 6811000) ? 0x05 : 0x02;
  441. break;
  442. default:
  443. return -EINVAL;
  444. }
  445. dev_dbg(&client->dev,
  446. "lopd=%d scale=%u fvco=%lu, rdiv=%d ndiv=%d icp=%d",
  447. lopd, scale, fvco, *rdiv, *ndiv, *icp);
  448. return 0;
  449. err:
  450. return ret;
  451. }
  452. static int tda18250_set_params(struct dvb_frontend *fe)
  453. {
  454. struct i2c_client *client = fe->tuner_priv;
  455. struct tda18250_dev *dev = i2c_get_clientdata(client);
  456. struct dtv_frontend_properties *c = &fe->dtv_property_cache;
  457. u32 if_khz;
  458. int ret;
  459. unsigned int i, j;
  460. u8 utmp;
  461. u8 buf[3];
  462. #define REG 0
  463. #define MASK 1
  464. #define DVBT_6 2
  465. #define DVBT_7 3
  466. #define DVBT_8 4
  467. #define DVBC_6 5
  468. #define DVBC_8 6
  469. #define ATSC 7
  470. static const u8 delsys_params[][16] = {
  471. [REG] = { 0x22, 0x23, 0x24, 0x21, 0x0d, 0x0c, 0x0f, 0x14,
  472. 0x0e, 0x12, 0x58, 0x59, 0x1a, 0x19, 0x1e, 0x30 },
  473. [MASK] = { 0x77, 0xff, 0xff, 0x87, 0xf0, 0x78, 0x07, 0xe0,
  474. 0x60, 0x0f, 0x60, 0x0f, 0x33, 0x30, 0x80, 0x06 },
  475. [DVBT_6] = { 0x51, 0x03, 0x83, 0x82, 0x40, 0x48, 0x01, 0xe0,
  476. 0x60, 0x0f, 0x60, 0x05, 0x03, 0x10, 0x00, 0x04 },
  477. [DVBT_7] = { 0x52, 0x03, 0x85, 0x82, 0x40, 0x48, 0x01, 0xe0,
  478. 0x60, 0x0f, 0x60, 0x05, 0x03, 0x10, 0x00, 0x04 },
  479. [DVBT_8] = { 0x53, 0x03, 0x87, 0x82, 0x40, 0x48, 0x06, 0xe0,
  480. 0x60, 0x07, 0x60, 0x05, 0x03, 0x10, 0x00, 0x04 },
  481. [DVBC_6] = { 0x32, 0x05, 0x86, 0x82, 0x50, 0x00, 0x06, 0x60,
  482. 0x40, 0x0e, 0x60, 0x05, 0x33, 0x10, 0x00, 0x04 },
  483. [DVBC_8] = { 0x53, 0x03, 0x88, 0x82, 0x50, 0x00, 0x06, 0x60,
  484. 0x40, 0x0e, 0x60, 0x05, 0x33, 0x10, 0x00, 0x04 },
  485. [ATSC] = { 0x51, 0x03, 0x83, 0x82, 0x40, 0x48, 0x01, 0xe0,
  486. 0x40, 0x0e, 0x60, 0x05, 0x03, 0x00, 0x80, 0x04 },
  487. };
  488. dev_dbg(&client->dev,
  489. "delivery_system=%d frequency=%u bandwidth_hz=%u",
  490. c->delivery_system, c->frequency, c->bandwidth_hz);
  491. switch (c->delivery_system) {
  492. case SYS_ATSC:
  493. j = ATSC;
  494. if_khz = dev->if_atsc;
  495. break;
  496. case SYS_DVBT:
  497. case SYS_DVBT2:
  498. if (c->bandwidth_hz == 0) {
  499. ret = -EINVAL;
  500. goto err;
  501. } else if (c->bandwidth_hz <= 6000000) {
  502. j = DVBT_6;
  503. if_khz = dev->if_dvbt_6;
  504. } else if (c->bandwidth_hz <= 7000000) {
  505. j = DVBT_7;
  506. if_khz = dev->if_dvbt_7;
  507. } else if (c->bandwidth_hz <= 8000000) {
  508. j = DVBT_8;
  509. if_khz = dev->if_dvbt_8;
  510. } else {
  511. ret = -EINVAL;
  512. goto err;
  513. }
  514. break;
  515. case SYS_DVBC_ANNEX_A:
  516. case SYS_DVBC_ANNEX_C:
  517. if (c->bandwidth_hz == 0) {
  518. ret = -EINVAL;
  519. goto err;
  520. } else if (c->bandwidth_hz <= 6000000) {
  521. j = DVBC_6;
  522. if_khz = dev->if_dvbc_6;
  523. } else if (c->bandwidth_hz <= 8000000) {
  524. j = DVBC_8;
  525. if_khz = dev->if_dvbc_8;
  526. } else {
  527. ret = -EINVAL;
  528. goto err;
  529. }
  530. break;
  531. default:
  532. ret = -EINVAL;
  533. dev_err(&client->dev, "unsupported delivery system=%d",
  534. c->delivery_system);
  535. goto err;
  536. }
  537. /* set delivery system dependent registers */
  538. for (i = 0; i < 16; i++) {
  539. ret = regmap_write_bits(dev->regmap, delsys_params[REG][i],
  540. delsys_params[MASK][i], delsys_params[j][i]);
  541. if (ret)
  542. goto err;
  543. }
  544. /* set IF if needed */
  545. if (dev->if_frequency != if_khz) {
  546. utmp = DIV_ROUND_CLOSEST(if_khz, 50);
  547. ret = regmap_write(dev->regmap, R26_IF, utmp);
  548. if (ret)
  549. goto err;
  550. dev->if_frequency = if_khz;
  551. dev_dbg(&client->dev, "set IF=%u kHz", if_khz);
  552. }
  553. ret = tda18250_set_agc(fe);
  554. if (ret)
  555. goto err;
  556. ret = regmap_write_bits(dev->regmap, R1A_AGCK, 0x03, 0x01);
  557. if (ret)
  558. goto err;
  559. ret = regmap_write_bits(dev->regmap, R14_AGC23, 0x40, 0x00);
  560. if (ret)
  561. goto err;
  562. /* set frequency */
  563. buf[0] = ((c->frequency / 1000) >> 16) & 0xff;
  564. buf[1] = ((c->frequency / 1000) >> 8) & 0xff;
  565. buf[2] = ((c->frequency / 1000) >> 0) & 0xff;
  566. ret = regmap_bulk_write(dev->regmap, R27_RF1, buf, 3);
  567. if (ret)
  568. goto err;
  569. ret = regmap_write(dev->regmap, R0A_IRQ3, TDA18250_IRQ_TUNE);
  570. if (ret)
  571. goto err;
  572. /* initial tune */
  573. ret = regmap_write(dev->regmap, R2A_MSM1, 0x01);
  574. if (ret)
  575. goto err;
  576. ret = regmap_write(dev->regmap, R2B_MSM2, 0x01);
  577. if (ret)
  578. goto err;
  579. ret = tda18250_wait_for_irq(fe, 500, 10, TDA18250_IRQ_TUNE);
  580. if (ret)
  581. goto err;
  582. /* calc ndiv and rdiv */
  583. ret = tda18250_pll_calc(fe, &buf[0], &buf[1], &buf[2]);
  584. if (ret)
  585. goto err;
  586. ret = regmap_write_bits(dev->regmap, R4F_XTALFLX3, 0xe0,
  587. (buf[0] << 6) | (buf[1] << 5));
  588. if (ret)
  589. goto err;
  590. /* clear IRQ */
  591. ret = regmap_write(dev->regmap, R0A_IRQ3, TDA18250_IRQ_TUNE);
  592. if (ret)
  593. goto err;
  594. ret = regmap_write_bits(dev->regmap, R46_CPUMP, 0x07, 0x00);
  595. if (ret)
  596. goto err;
  597. ret = regmap_write_bits(dev->regmap, R39_SD5, 0x03, 0x00);
  598. if (ret)
  599. goto err;
  600. /* tune again */
  601. ret = regmap_write(dev->regmap, R2A_MSM1, 0x01); /* tune */
  602. if (ret)
  603. goto err;
  604. ret = regmap_write(dev->regmap, R2B_MSM2, 0x01); /* go */
  605. if (ret)
  606. goto err;
  607. ret = tda18250_wait_for_irq(fe, 500, 10, TDA18250_IRQ_TUNE);
  608. if (ret)
  609. goto err;
  610. /* pll locking */
  611. msleep(20);
  612. ret = regmap_write_bits(dev->regmap, R2B_MSM2, 0x04, 0x04);
  613. if (ret)
  614. goto err;
  615. msleep(20);
  616. /* restore AGCK */
  617. ret = regmap_write_bits(dev->regmap, R1A_AGCK, 0x03, 0x03);
  618. if (ret)
  619. goto err;
  620. ret = regmap_write_bits(dev->regmap, R14_AGC23, 0x40, 0x40);
  621. if (ret)
  622. goto err;
  623. /* charge pump */
  624. ret = regmap_write_bits(dev->regmap, R46_CPUMP, 0x07, buf[2]);
  625. return 0;
  626. err:
  627. return ret;
  628. }
  629. static int tda18250_get_if_frequency(struct dvb_frontend *fe, u32 *frequency)
  630. {
  631. struct i2c_client *client = fe->tuner_priv;
  632. struct tda18250_dev *dev = i2c_get_clientdata(client);
  633. *frequency = dev->if_frequency * 1000;
  634. return 0;
  635. }
  636. static int tda18250_sleep(struct dvb_frontend *fe)
  637. {
  638. struct i2c_client *client = fe->tuner_priv;
  639. struct tda18250_dev *dev = i2c_get_clientdata(client);
  640. int ret;
  641. dev_dbg(&client->dev, "\n");
  642. /* power down LNA */
  643. ret = regmap_write_bits(dev->regmap, R0C_AGC11, 0x80, 0x00);
  644. if (ret)
  645. return ret;
  646. /* set if freq to 0 in order to make sure it's set after wake up */
  647. dev->if_frequency = 0;
  648. ret = tda18250_power_control(fe, TDA18250_POWER_STANDBY);
  649. return ret;
  650. }
  651. static const struct dvb_tuner_ops tda18250_ops = {
  652. .info = {
  653. .name = "NXP TDA18250",
  654. .frequency_min_hz = 42 * MHz,
  655. .frequency_max_hz = 870 * MHz,
  656. },
  657. .init = tda18250_init,
  658. .set_params = tda18250_set_params,
  659. .get_if_frequency = tda18250_get_if_frequency,
  660. .sleep = tda18250_sleep,
  661. };
  662. static int tda18250_probe(struct i2c_client *client,
  663. const struct i2c_device_id *id)
  664. {
  665. struct tda18250_config *cfg = client->dev.platform_data;
  666. struct dvb_frontend *fe = cfg->fe;
  667. struct tda18250_dev *dev;
  668. int ret;
  669. unsigned char chip_id[3];
  670. /* some registers are always read from HW */
  671. static const struct regmap_range tda18250_yes_ranges[] = {
  672. regmap_reg_range(R05_POWER1, R0B_IRQ4),
  673. regmap_reg_range(R21_IF_AGC, R21_IF_AGC),
  674. regmap_reg_range(R2A_MSM1, R2B_MSM2),
  675. regmap_reg_range(R2F_RSSI1, R31_IRQ_CTRL),
  676. };
  677. static const struct regmap_access_table tda18250_volatile_table = {
  678. .yes_ranges = tda18250_yes_ranges,
  679. .n_yes_ranges = ARRAY_SIZE(tda18250_yes_ranges),
  680. };
  681. static const struct regmap_config tda18250_regmap_config = {
  682. .reg_bits = 8,
  683. .val_bits = 8,
  684. .max_register = TDA18250_NUM_REGS - 1,
  685. .volatile_table = &tda18250_volatile_table,
  686. };
  687. dev = kzalloc(sizeof(*dev), GFP_KERNEL);
  688. if (!dev) {
  689. ret = -ENOMEM;
  690. goto err;
  691. }
  692. i2c_set_clientdata(client, dev);
  693. dev->fe = cfg->fe;
  694. dev->loopthrough = cfg->loopthrough;
  695. if (cfg->xtal_freq < TDA18250_XTAL_FREQ_MAX) {
  696. dev->xtal_freq = cfg->xtal_freq;
  697. } else {
  698. ret = -EINVAL;
  699. dev_err(&client->dev, "xtal_freq invalid=%d", cfg->xtal_freq);
  700. goto err_kfree;
  701. }
  702. dev->if_dvbt_6 = cfg->if_dvbt_6;
  703. dev->if_dvbt_7 = cfg->if_dvbt_7;
  704. dev->if_dvbt_8 = cfg->if_dvbt_8;
  705. dev->if_dvbc_6 = cfg->if_dvbc_6;
  706. dev->if_dvbc_8 = cfg->if_dvbc_8;
  707. dev->if_atsc = cfg->if_atsc;
  708. dev->if_frequency = 0;
  709. dev->warm = false;
  710. dev->regmap = devm_regmap_init_i2c(client, &tda18250_regmap_config);
  711. if (IS_ERR(dev->regmap)) {
  712. ret = PTR_ERR(dev->regmap);
  713. goto err_kfree;
  714. }
  715. /* read the three chip ID registers */
  716. regmap_bulk_read(dev->regmap, R00_ID1, &chip_id, 3);
  717. dev_dbg(&client->dev, "chip_id=%02x:%02x:%02x",
  718. chip_id[0], chip_id[1], chip_id[2]);
  719. switch (chip_id[0]) {
  720. case 0xc7:
  721. dev->slave = false;
  722. break;
  723. case 0x47:
  724. dev->slave = true;
  725. break;
  726. default:
  727. ret = -ENODEV;
  728. goto err_kfree;
  729. }
  730. if (chip_id[1] != 0x4a) {
  731. ret = -ENODEV;
  732. goto err_kfree;
  733. }
  734. switch (chip_id[2]) {
  735. case 0x20:
  736. dev_info(&client->dev,
  737. "NXP TDA18250AHN/%s successfully identified",
  738. dev->slave ? "S" : "M");
  739. break;
  740. case 0x21:
  741. dev_info(&client->dev,
  742. "NXP TDA18250BHN/%s successfully identified",
  743. dev->slave ? "S" : "M");
  744. break;
  745. default:
  746. ret = -ENODEV;
  747. goto err_kfree;
  748. }
  749. fe->tuner_priv = client;
  750. memcpy(&fe->ops.tuner_ops, &tda18250_ops,
  751. sizeof(struct dvb_tuner_ops));
  752. /* put the tuner in standby */
  753. tda18250_power_control(fe, TDA18250_POWER_STANDBY);
  754. return 0;
  755. err_kfree:
  756. kfree(dev);
  757. err:
  758. dev_dbg(&client->dev, "failed=%d", ret);
  759. return ret;
  760. }
  761. static int tda18250_remove(struct i2c_client *client)
  762. {
  763. struct tda18250_dev *dev = i2c_get_clientdata(client);
  764. struct dvb_frontend *fe = dev->fe;
  765. dev_dbg(&client->dev, "\n");
  766. memset(&fe->ops.tuner_ops, 0, sizeof(struct dvb_tuner_ops));
  767. fe->tuner_priv = NULL;
  768. kfree(dev);
  769. return 0;
  770. }
  771. static const struct i2c_device_id tda18250_id_table[] = {
  772. {"tda18250", 0},
  773. {}
  774. };
  775. MODULE_DEVICE_TABLE(i2c, tda18250_id_table);
  776. static struct i2c_driver tda18250_driver = {
  777. .driver = {
  778. .name = "tda18250",
  779. },
  780. .probe = tda18250_probe,
  781. .remove = tda18250_remove,
  782. .id_table = tda18250_id_table,
  783. };
  784. module_i2c_driver(tda18250_driver);
  785. MODULE_DESCRIPTION("NXP TDA18250 silicon tuner driver");
  786. MODULE_AUTHOR("Olli Salonen <olli.salonen@iki.fi>");
  787. MODULE_LICENSE("GPL");