rtl2832.c 33 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334
  1. /*
  2. * Realtek RTL2832 DVB-T demodulator driver
  3. *
  4. * Copyright (C) 2012 Thomas Mair <thomas.mair86@gmail.com>
  5. * Copyright (C) 2012-2014 Antti Palosaari <crope@iki.fi>
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License along
  18. * with this program; if not, write to the Free Software Foundation, Inc.,
  19. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  20. */
  21. #include "rtl2832_priv.h"
  22. #define REG_MASK(b) (BIT(b + 1) - 1)
  23. static const struct rtl2832_reg_entry registers[] = {
  24. [DVBT_SOFT_RST] = {0x101, 2, 2},
  25. [DVBT_IIC_REPEAT] = {0x101, 3, 3},
  26. [DVBT_TR_WAIT_MIN_8K] = {0x188, 11, 2},
  27. [DVBT_RSD_BER_FAIL_VAL] = {0x18f, 15, 0},
  28. [DVBT_EN_BK_TRK] = {0x1a6, 7, 7},
  29. [DVBT_AD_EN_REG] = {0x008, 7, 7},
  30. [DVBT_AD_EN_REG1] = {0x008, 6, 6},
  31. [DVBT_EN_BBIN] = {0x1b1, 0, 0},
  32. [DVBT_MGD_THD0] = {0x195, 7, 0},
  33. [DVBT_MGD_THD1] = {0x196, 7, 0},
  34. [DVBT_MGD_THD2] = {0x197, 7, 0},
  35. [DVBT_MGD_THD3] = {0x198, 7, 0},
  36. [DVBT_MGD_THD4] = {0x199, 7, 0},
  37. [DVBT_MGD_THD5] = {0x19a, 7, 0},
  38. [DVBT_MGD_THD6] = {0x19b, 7, 0},
  39. [DVBT_MGD_THD7] = {0x19c, 7, 0},
  40. [DVBT_EN_CACQ_NOTCH] = {0x161, 4, 4},
  41. [DVBT_AD_AV_REF] = {0x009, 6, 0},
  42. [DVBT_REG_PI] = {0x00a, 2, 0},
  43. [DVBT_PIP_ON] = {0x021, 3, 3},
  44. [DVBT_SCALE1_B92] = {0x292, 7, 0},
  45. [DVBT_SCALE1_B93] = {0x293, 7, 0},
  46. [DVBT_SCALE1_BA7] = {0x2a7, 7, 0},
  47. [DVBT_SCALE1_BA9] = {0x2a9, 7, 0},
  48. [DVBT_SCALE1_BAA] = {0x2aa, 7, 0},
  49. [DVBT_SCALE1_BAB] = {0x2ab, 7, 0},
  50. [DVBT_SCALE1_BAC] = {0x2ac, 7, 0},
  51. [DVBT_SCALE1_BB0] = {0x2b0, 7, 0},
  52. [DVBT_SCALE1_BB1] = {0x2b1, 7, 0},
  53. [DVBT_KB_P1] = {0x164, 3, 1},
  54. [DVBT_KB_P2] = {0x164, 6, 4},
  55. [DVBT_KB_P3] = {0x165, 2, 0},
  56. [DVBT_OPT_ADC_IQ] = {0x006, 5, 4},
  57. [DVBT_AD_AVI] = {0x009, 1, 0},
  58. [DVBT_AD_AVQ] = {0x009, 3, 2},
  59. [DVBT_K1_CR_STEP12] = {0x2ad, 9, 4},
  60. [DVBT_TRK_KS_P2] = {0x16f, 2, 0},
  61. [DVBT_TRK_KS_I2] = {0x170, 5, 3},
  62. [DVBT_TR_THD_SET2] = {0x172, 3, 0},
  63. [DVBT_TRK_KC_P2] = {0x173, 5, 3},
  64. [DVBT_TRK_KC_I2] = {0x175, 2, 0},
  65. [DVBT_CR_THD_SET2] = {0x176, 7, 6},
  66. [DVBT_PSET_IFFREQ] = {0x119, 21, 0},
  67. [DVBT_SPEC_INV] = {0x115, 0, 0},
  68. [DVBT_RSAMP_RATIO] = {0x19f, 27, 2},
  69. [DVBT_CFREQ_OFF_RATIO] = {0x19d, 23, 4},
  70. [DVBT_FSM_STAGE] = {0x351, 6, 3},
  71. [DVBT_RX_CONSTEL] = {0x33c, 3, 2},
  72. [DVBT_RX_HIER] = {0x33c, 6, 4},
  73. [DVBT_RX_C_RATE_LP] = {0x33d, 2, 0},
  74. [DVBT_RX_C_RATE_HP] = {0x33d, 5, 3},
  75. [DVBT_GI_IDX] = {0x351, 1, 0},
  76. [DVBT_FFT_MODE_IDX] = {0x351, 2, 2},
  77. [DVBT_RSD_BER_EST] = {0x34e, 15, 0},
  78. [DVBT_CE_EST_EVM] = {0x40c, 15, 0},
  79. [DVBT_RF_AGC_VAL] = {0x35b, 13, 0},
  80. [DVBT_IF_AGC_VAL] = {0x359, 13, 0},
  81. [DVBT_DAGC_VAL] = {0x305, 7, 0},
  82. [DVBT_SFREQ_OFF] = {0x318, 13, 0},
  83. [DVBT_CFREQ_OFF] = {0x35f, 17, 0},
  84. [DVBT_POLAR_RF_AGC] = {0x00e, 1, 1},
  85. [DVBT_POLAR_IF_AGC] = {0x00e, 0, 0},
  86. [DVBT_AAGC_HOLD] = {0x104, 5, 5},
  87. [DVBT_EN_RF_AGC] = {0x104, 6, 6},
  88. [DVBT_EN_IF_AGC] = {0x104, 7, 7},
  89. [DVBT_IF_AGC_MIN] = {0x108, 7, 0},
  90. [DVBT_IF_AGC_MAX] = {0x109, 7, 0},
  91. [DVBT_RF_AGC_MIN] = {0x10a, 7, 0},
  92. [DVBT_RF_AGC_MAX] = {0x10b, 7, 0},
  93. [DVBT_IF_AGC_MAN] = {0x10c, 6, 6},
  94. [DVBT_IF_AGC_MAN_VAL] = {0x10c, 13, 0},
  95. [DVBT_RF_AGC_MAN] = {0x10e, 6, 6},
  96. [DVBT_RF_AGC_MAN_VAL] = {0x10e, 13, 0},
  97. [DVBT_DAGC_TRG_VAL] = {0x112, 7, 0},
  98. [DVBT_AGC_TARG_VAL_0] = {0x102, 0, 0},
  99. [DVBT_AGC_TARG_VAL_8_1] = {0x103, 7, 0},
  100. [DVBT_AAGC_LOOP_GAIN] = {0x1c7, 5, 1},
  101. [DVBT_LOOP_GAIN2_3_0] = {0x104, 4, 1},
  102. [DVBT_LOOP_GAIN2_4] = {0x105, 7, 7},
  103. [DVBT_LOOP_GAIN3] = {0x1c8, 4, 0},
  104. [DVBT_VTOP1] = {0x106, 5, 0},
  105. [DVBT_VTOP2] = {0x1c9, 5, 0},
  106. [DVBT_VTOP3] = {0x1ca, 5, 0},
  107. [DVBT_KRF1] = {0x1cb, 7, 0},
  108. [DVBT_KRF2] = {0x107, 7, 0},
  109. [DVBT_KRF3] = {0x1cd, 7, 0},
  110. [DVBT_KRF4] = {0x1ce, 7, 0},
  111. [DVBT_EN_GI_PGA] = {0x1e5, 0, 0},
  112. [DVBT_THD_LOCK_UP] = {0x1d9, 8, 0},
  113. [DVBT_THD_LOCK_DW] = {0x1db, 8, 0},
  114. [DVBT_THD_UP1] = {0x1dd, 7, 0},
  115. [DVBT_THD_DW1] = {0x1de, 7, 0},
  116. [DVBT_INTER_CNT_LEN] = {0x1d8, 3, 0},
  117. [DVBT_GI_PGA_STATE] = {0x1e6, 3, 3},
  118. [DVBT_EN_AGC_PGA] = {0x1d7, 0, 0},
  119. [DVBT_CKOUTPAR] = {0x17b, 5, 5},
  120. [DVBT_CKOUT_PWR] = {0x17b, 6, 6},
  121. [DVBT_SYNC_DUR] = {0x17b, 7, 7},
  122. [DVBT_ERR_DUR] = {0x17c, 0, 0},
  123. [DVBT_SYNC_LVL] = {0x17c, 1, 1},
  124. [DVBT_ERR_LVL] = {0x17c, 2, 2},
  125. [DVBT_VAL_LVL] = {0x17c, 3, 3},
  126. [DVBT_SERIAL] = {0x17c, 4, 4},
  127. [DVBT_SER_LSB] = {0x17c, 5, 5},
  128. [DVBT_CDIV_PH0] = {0x17d, 3, 0},
  129. [DVBT_CDIV_PH1] = {0x17d, 7, 4},
  130. [DVBT_MPEG_IO_OPT_2_2] = {0x006, 7, 7},
  131. [DVBT_MPEG_IO_OPT_1_0] = {0x007, 7, 6},
  132. [DVBT_CKOUTPAR_PIP] = {0x0b7, 4, 4},
  133. [DVBT_CKOUT_PWR_PIP] = {0x0b7, 3, 3},
  134. [DVBT_SYNC_LVL_PIP] = {0x0b7, 2, 2},
  135. [DVBT_ERR_LVL_PIP] = {0x0b7, 1, 1},
  136. [DVBT_VAL_LVL_PIP] = {0x0b7, 0, 0},
  137. [DVBT_CKOUTPAR_PID] = {0x0b9, 4, 4},
  138. [DVBT_CKOUT_PWR_PID] = {0x0b9, 3, 3},
  139. [DVBT_SYNC_LVL_PID] = {0x0b9, 2, 2},
  140. [DVBT_ERR_LVL_PID] = {0x0b9, 1, 1},
  141. [DVBT_VAL_LVL_PID] = {0x0b9, 0, 0},
  142. [DVBT_SM_PASS] = {0x193, 11, 0},
  143. [DVBT_AD7_SETTING] = {0x011, 15, 0},
  144. [DVBT_RSSI_R] = {0x301, 6, 0},
  145. [DVBT_ACI_DET_IND] = {0x312, 0, 0},
  146. [DVBT_REG_MON] = {0x00d, 1, 0},
  147. [DVBT_REG_MONSEL] = {0x00d, 2, 2},
  148. [DVBT_REG_GPE] = {0x00d, 7, 7},
  149. [DVBT_REG_GPO] = {0x010, 0, 0},
  150. [DVBT_REG_4MSEL] = {0x013, 0, 0},
  151. };
  152. /* Our regmap is bypassing I2C adapter lock, thus we do it! */
  153. static int rtl2832_bulk_write(struct i2c_client *client, unsigned int reg,
  154. const void *val, size_t val_count)
  155. {
  156. struct rtl2832_dev *dev = i2c_get_clientdata(client);
  157. int ret;
  158. i2c_lock_adapter(client->adapter);
  159. ret = regmap_bulk_write(dev->regmap, reg, val, val_count);
  160. i2c_unlock_adapter(client->adapter);
  161. return ret;
  162. }
  163. static int rtl2832_update_bits(struct i2c_client *client, unsigned int reg,
  164. unsigned int mask, unsigned int val)
  165. {
  166. struct rtl2832_dev *dev = i2c_get_clientdata(client);
  167. int ret;
  168. i2c_lock_adapter(client->adapter);
  169. ret = regmap_update_bits(dev->regmap, reg, mask, val);
  170. i2c_unlock_adapter(client->adapter);
  171. return ret;
  172. }
  173. static int rtl2832_bulk_read(struct i2c_client *client, unsigned int reg,
  174. void *val, size_t val_count)
  175. {
  176. struct rtl2832_dev *dev = i2c_get_clientdata(client);
  177. int ret;
  178. i2c_lock_adapter(client->adapter);
  179. ret = regmap_bulk_read(dev->regmap, reg, val, val_count);
  180. i2c_unlock_adapter(client->adapter);
  181. return ret;
  182. }
  183. static int rtl2832_rd_demod_reg(struct rtl2832_dev *dev, int reg, u32 *val)
  184. {
  185. struct i2c_client *client = dev->client;
  186. int ret, i;
  187. u16 reg_start_addr;
  188. u8 msb, lsb, reading[4], len;
  189. u32 reading_tmp, mask;
  190. reg_start_addr = registers[reg].start_address;
  191. msb = registers[reg].msb;
  192. lsb = registers[reg].lsb;
  193. len = (msb >> 3) + 1;
  194. mask = REG_MASK(msb - lsb);
  195. ret = rtl2832_bulk_read(client, reg_start_addr, reading, len);
  196. if (ret)
  197. goto err;
  198. reading_tmp = 0;
  199. for (i = 0; i < len; i++)
  200. reading_tmp |= reading[i] << ((len - 1 - i) * 8);
  201. *val = (reading_tmp >> lsb) & mask;
  202. return 0;
  203. err:
  204. dev_dbg(&client->dev, "failed=%d\n", ret);
  205. return ret;
  206. }
  207. static int rtl2832_wr_demod_reg(struct rtl2832_dev *dev, int reg, u32 val)
  208. {
  209. struct i2c_client *client = dev->client;
  210. int ret, i;
  211. u16 reg_start_addr;
  212. u8 msb, lsb, reading[4], writing[4], len;
  213. u32 reading_tmp, writing_tmp, mask;
  214. reg_start_addr = registers[reg].start_address;
  215. msb = registers[reg].msb;
  216. lsb = registers[reg].lsb;
  217. len = (msb >> 3) + 1;
  218. mask = REG_MASK(msb - lsb);
  219. ret = rtl2832_bulk_read(client, reg_start_addr, reading, len);
  220. if (ret)
  221. goto err;
  222. reading_tmp = 0;
  223. for (i = 0; i < len; i++)
  224. reading_tmp |= reading[i] << ((len - 1 - i) * 8);
  225. writing_tmp = reading_tmp & ~(mask << lsb);
  226. writing_tmp |= ((val & mask) << lsb);
  227. for (i = 0; i < len; i++)
  228. writing[i] = (writing_tmp >> ((len - 1 - i) * 8)) & 0xff;
  229. ret = rtl2832_bulk_write(client, reg_start_addr, writing, len);
  230. if (ret)
  231. goto err;
  232. return 0;
  233. err:
  234. dev_dbg(&client->dev, "failed=%d\n", ret);
  235. return ret;
  236. }
  237. static int rtl2832_set_if(struct dvb_frontend *fe, u32 if_freq)
  238. {
  239. struct rtl2832_dev *dev = fe->demodulator_priv;
  240. struct i2c_client *client = dev->client;
  241. int ret;
  242. u64 pset_iffreq;
  243. u8 en_bbin = (if_freq == 0 ? 0x1 : 0x0);
  244. /*
  245. * PSET_IFFREQ = - floor((IfFreqHz % CrystalFreqHz) * pow(2, 22)
  246. * / CrystalFreqHz)
  247. */
  248. pset_iffreq = if_freq % dev->pdata->clk;
  249. pset_iffreq *= 0x400000;
  250. pset_iffreq = div_u64(pset_iffreq, dev->pdata->clk);
  251. pset_iffreq = -pset_iffreq;
  252. pset_iffreq = pset_iffreq & 0x3fffff;
  253. dev_dbg(&client->dev, "if_frequency=%d pset_iffreq=%08x\n",
  254. if_freq, (unsigned)pset_iffreq);
  255. ret = rtl2832_wr_demod_reg(dev, DVBT_EN_BBIN, en_bbin);
  256. if (ret)
  257. goto err;
  258. ret = rtl2832_wr_demod_reg(dev, DVBT_PSET_IFFREQ, pset_iffreq);
  259. if (ret)
  260. goto err;
  261. return 0;
  262. err:
  263. dev_dbg(&client->dev, "failed=%d\n", ret);
  264. return ret;
  265. }
  266. static int rtl2832_init(struct dvb_frontend *fe)
  267. {
  268. struct rtl2832_dev *dev = fe->demodulator_priv;
  269. struct i2c_client *client = dev->client;
  270. struct dtv_frontend_properties *c = &dev->fe.dtv_property_cache;
  271. const struct rtl2832_reg_value *init;
  272. int i, ret, len;
  273. /* initialization values for the demodulator registers */
  274. struct rtl2832_reg_value rtl2832_initial_regs[] = {
  275. {DVBT_AD_EN_REG, 0x1},
  276. {DVBT_AD_EN_REG1, 0x1},
  277. {DVBT_RSD_BER_FAIL_VAL, 0x2800},
  278. {DVBT_MGD_THD0, 0x10},
  279. {DVBT_MGD_THD1, 0x20},
  280. {DVBT_MGD_THD2, 0x20},
  281. {DVBT_MGD_THD3, 0x40},
  282. {DVBT_MGD_THD4, 0x22},
  283. {DVBT_MGD_THD5, 0x32},
  284. {DVBT_MGD_THD6, 0x37},
  285. {DVBT_MGD_THD7, 0x39},
  286. {DVBT_EN_BK_TRK, 0x0},
  287. {DVBT_EN_CACQ_NOTCH, 0x0},
  288. {DVBT_AD_AV_REF, 0x2a},
  289. {DVBT_REG_PI, 0x6},
  290. {DVBT_PIP_ON, 0x0},
  291. {DVBT_CDIV_PH0, 0x8},
  292. {DVBT_CDIV_PH1, 0x8},
  293. {DVBT_SCALE1_B92, 0x4},
  294. {DVBT_SCALE1_B93, 0xb0},
  295. {DVBT_SCALE1_BA7, 0x78},
  296. {DVBT_SCALE1_BA9, 0x28},
  297. {DVBT_SCALE1_BAA, 0x59},
  298. {DVBT_SCALE1_BAB, 0x83},
  299. {DVBT_SCALE1_BAC, 0xd4},
  300. {DVBT_SCALE1_BB0, 0x65},
  301. {DVBT_SCALE1_BB1, 0x43},
  302. {DVBT_KB_P1, 0x1},
  303. {DVBT_KB_P2, 0x4},
  304. {DVBT_KB_P3, 0x7},
  305. {DVBT_K1_CR_STEP12, 0xa},
  306. {DVBT_REG_GPE, 0x1},
  307. {DVBT_SERIAL, 0x0},
  308. {DVBT_CDIV_PH0, 0x9},
  309. {DVBT_CDIV_PH1, 0x9},
  310. {DVBT_MPEG_IO_OPT_2_2, 0x0},
  311. {DVBT_MPEG_IO_OPT_1_0, 0x0},
  312. {DVBT_TRK_KS_P2, 0x4},
  313. {DVBT_TRK_KS_I2, 0x7},
  314. {DVBT_TR_THD_SET2, 0x6},
  315. {DVBT_TRK_KC_I2, 0x5},
  316. {DVBT_CR_THD_SET2, 0x1},
  317. };
  318. dev_dbg(&client->dev, "\n");
  319. for (i = 0; i < ARRAY_SIZE(rtl2832_initial_regs); i++) {
  320. ret = rtl2832_wr_demod_reg(dev, rtl2832_initial_regs[i].reg,
  321. rtl2832_initial_regs[i].value);
  322. if (ret)
  323. goto err;
  324. }
  325. /* load tuner specific settings */
  326. dev_dbg(&client->dev, "load settings for tuner=%02x\n",
  327. dev->pdata->tuner);
  328. switch (dev->pdata->tuner) {
  329. case RTL2832_TUNER_FC2580:
  330. len = ARRAY_SIZE(rtl2832_tuner_init_fc2580);
  331. init = rtl2832_tuner_init_fc2580;
  332. break;
  333. case RTL2832_TUNER_FC0012:
  334. case RTL2832_TUNER_FC0013:
  335. len = ARRAY_SIZE(rtl2832_tuner_init_fc0012);
  336. init = rtl2832_tuner_init_fc0012;
  337. break;
  338. case RTL2832_TUNER_TUA9001:
  339. len = ARRAY_SIZE(rtl2832_tuner_init_tua9001);
  340. init = rtl2832_tuner_init_tua9001;
  341. break;
  342. case RTL2832_TUNER_E4000:
  343. len = ARRAY_SIZE(rtl2832_tuner_init_e4000);
  344. init = rtl2832_tuner_init_e4000;
  345. break;
  346. case RTL2832_TUNER_R820T:
  347. case RTL2832_TUNER_R828D:
  348. len = ARRAY_SIZE(rtl2832_tuner_init_r820t);
  349. init = rtl2832_tuner_init_r820t;
  350. break;
  351. case RTL2832_TUNER_SI2157:
  352. len = ARRAY_SIZE(rtl2832_tuner_init_si2157);
  353. init = rtl2832_tuner_init_si2157;
  354. break;
  355. default:
  356. ret = -EINVAL;
  357. goto err;
  358. }
  359. for (i = 0; i < len; i++) {
  360. ret = rtl2832_wr_demod_reg(dev, init[i].reg, init[i].value);
  361. if (ret)
  362. goto err;
  363. }
  364. /* init stats here in order signal app which stats are supported */
  365. c->strength.len = 1;
  366. c->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
  367. c->cnr.len = 1;
  368. c->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
  369. c->post_bit_error.len = 1;
  370. c->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
  371. c->post_bit_count.len = 1;
  372. c->post_bit_count.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
  373. /* start statistics polling */
  374. schedule_delayed_work(&dev->stat_work, msecs_to_jiffies(2000));
  375. dev->sleeping = false;
  376. return 0;
  377. err:
  378. dev_dbg(&client->dev, "failed=%d\n", ret);
  379. return ret;
  380. }
  381. static int rtl2832_sleep(struct dvb_frontend *fe)
  382. {
  383. struct rtl2832_dev *dev = fe->demodulator_priv;
  384. struct i2c_client *client = dev->client;
  385. int ret;
  386. dev_dbg(&client->dev, "\n");
  387. dev->sleeping = true;
  388. /* stop statistics polling */
  389. cancel_delayed_work_sync(&dev->stat_work);
  390. dev->fe_status = 0;
  391. ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x1);
  392. if (ret)
  393. goto err;
  394. return 0;
  395. err:
  396. dev_dbg(&client->dev, "failed=%d\n", ret);
  397. return ret;
  398. }
  399. static int rtl2832_get_tune_settings(struct dvb_frontend *fe,
  400. struct dvb_frontend_tune_settings *s)
  401. {
  402. struct rtl2832_dev *dev = fe->demodulator_priv;
  403. struct i2c_client *client = dev->client;
  404. dev_dbg(&client->dev, "\n");
  405. s->min_delay_ms = 1000;
  406. s->step_size = fe->ops.info.frequency_stepsize * 2;
  407. s->max_drift = (fe->ops.info.frequency_stepsize * 2) + 1;
  408. return 0;
  409. }
  410. static int rtl2832_set_frontend(struct dvb_frontend *fe)
  411. {
  412. struct rtl2832_dev *dev = fe->demodulator_priv;
  413. struct i2c_client *client = dev->client;
  414. struct dtv_frontend_properties *c = &fe->dtv_property_cache;
  415. int ret, i, j;
  416. u64 bw_mode, num, num2;
  417. u32 resamp_ratio, cfreq_off_ratio;
  418. static u8 bw_params[3][32] = {
  419. /* 6 MHz bandwidth */
  420. {
  421. 0xf5, 0xff, 0x15, 0x38, 0x5d, 0x6d, 0x52, 0x07, 0xfa, 0x2f,
  422. 0x53, 0xf5, 0x3f, 0xca, 0x0b, 0x91, 0xea, 0x30, 0x63, 0xb2,
  423. 0x13, 0xda, 0x0b, 0xc4, 0x18, 0x7e, 0x16, 0x66, 0x08, 0x67,
  424. 0x19, 0xe0,
  425. },
  426. /* 7 MHz bandwidth */
  427. {
  428. 0xe7, 0xcc, 0xb5, 0xba, 0xe8, 0x2f, 0x67, 0x61, 0x00, 0xaf,
  429. 0x86, 0xf2, 0xbf, 0x59, 0x04, 0x11, 0xb6, 0x33, 0xa4, 0x30,
  430. 0x15, 0x10, 0x0a, 0x42, 0x18, 0xf8, 0x17, 0xd9, 0x07, 0x22,
  431. 0x19, 0x10,
  432. },
  433. /* 8 MHz bandwidth */
  434. {
  435. 0x09, 0xf6, 0xd2, 0xa7, 0x9a, 0xc9, 0x27, 0x77, 0x06, 0xbf,
  436. 0xec, 0xf4, 0x4f, 0x0b, 0xfc, 0x01, 0x63, 0x35, 0x54, 0xa7,
  437. 0x16, 0x66, 0x08, 0xb4, 0x19, 0x6e, 0x19, 0x65, 0x05, 0xc8,
  438. 0x19, 0xe0,
  439. },
  440. };
  441. dev_dbg(&client->dev, "frequency=%u bandwidth_hz=%u inversion=%u\n",
  442. c->frequency, c->bandwidth_hz, c->inversion);
  443. /* program tuner */
  444. if (fe->ops.tuner_ops.set_params)
  445. fe->ops.tuner_ops.set_params(fe);
  446. /* PIP mode related */
  447. ret = rtl2832_bulk_write(client, 0x192, "\x00\x0f\xff", 3);
  448. if (ret)
  449. goto err;
  450. /* If the frontend has get_if_frequency(), use it */
  451. if (fe->ops.tuner_ops.get_if_frequency) {
  452. u32 if_freq;
  453. ret = fe->ops.tuner_ops.get_if_frequency(fe, &if_freq);
  454. if (ret)
  455. goto err;
  456. ret = rtl2832_set_if(fe, if_freq);
  457. if (ret)
  458. goto err;
  459. }
  460. switch (c->bandwidth_hz) {
  461. case 6000000:
  462. i = 0;
  463. bw_mode = 48000000;
  464. break;
  465. case 7000000:
  466. i = 1;
  467. bw_mode = 56000000;
  468. break;
  469. case 8000000:
  470. i = 2;
  471. bw_mode = 64000000;
  472. break;
  473. default:
  474. dev_err(&client->dev, "invalid bandwidth_hz %u\n",
  475. c->bandwidth_hz);
  476. ret = -EINVAL;
  477. goto err;
  478. }
  479. for (j = 0; j < sizeof(bw_params[0]); j++) {
  480. ret = rtl2832_bulk_write(client, 0x11c + j, &bw_params[i][j], 1);
  481. if (ret)
  482. goto err;
  483. }
  484. /* calculate and set resample ratio
  485. * RSAMP_RATIO = floor(CrystalFreqHz * 7 * pow(2, 22)
  486. * / ConstWithBandwidthMode)
  487. */
  488. num = dev->pdata->clk * 7;
  489. num *= 0x400000;
  490. num = div_u64(num, bw_mode);
  491. resamp_ratio = num & 0x3ffffff;
  492. ret = rtl2832_wr_demod_reg(dev, DVBT_RSAMP_RATIO, resamp_ratio);
  493. if (ret)
  494. goto err;
  495. /* calculate and set cfreq off ratio
  496. * CFREQ_OFF_RATIO = - floor(ConstWithBandwidthMode * pow(2, 20)
  497. * / (CrystalFreqHz * 7))
  498. */
  499. num = bw_mode << 20;
  500. num2 = dev->pdata->clk * 7;
  501. num = div_u64(num, num2);
  502. num = -num;
  503. cfreq_off_ratio = num & 0xfffff;
  504. ret = rtl2832_wr_demod_reg(dev, DVBT_CFREQ_OFF_RATIO, cfreq_off_ratio);
  505. if (ret)
  506. goto err;
  507. /* soft reset */
  508. ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x1);
  509. if (ret)
  510. goto err;
  511. ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x0);
  512. if (ret)
  513. goto err;
  514. return 0;
  515. err:
  516. dev_dbg(&client->dev, "failed=%d\n", ret);
  517. return ret;
  518. }
  519. static int rtl2832_get_frontend(struct dvb_frontend *fe)
  520. {
  521. struct rtl2832_dev *dev = fe->demodulator_priv;
  522. struct i2c_client *client = dev->client;
  523. struct dtv_frontend_properties *c = &fe->dtv_property_cache;
  524. int ret;
  525. u8 buf[3];
  526. if (dev->sleeping)
  527. return 0;
  528. ret = rtl2832_bulk_read(client, 0x33c, buf, 2);
  529. if (ret)
  530. goto err;
  531. ret = rtl2832_bulk_read(client, 0x351, &buf[2], 1);
  532. if (ret)
  533. goto err;
  534. dev_dbg(&client->dev, "TPS=%*ph\n", 3, buf);
  535. switch ((buf[0] >> 2) & 3) {
  536. case 0:
  537. c->modulation = QPSK;
  538. break;
  539. case 1:
  540. c->modulation = QAM_16;
  541. break;
  542. case 2:
  543. c->modulation = QAM_64;
  544. break;
  545. }
  546. switch ((buf[2] >> 2) & 1) {
  547. case 0:
  548. c->transmission_mode = TRANSMISSION_MODE_2K;
  549. break;
  550. case 1:
  551. c->transmission_mode = TRANSMISSION_MODE_8K;
  552. }
  553. switch ((buf[2] >> 0) & 3) {
  554. case 0:
  555. c->guard_interval = GUARD_INTERVAL_1_32;
  556. break;
  557. case 1:
  558. c->guard_interval = GUARD_INTERVAL_1_16;
  559. break;
  560. case 2:
  561. c->guard_interval = GUARD_INTERVAL_1_8;
  562. break;
  563. case 3:
  564. c->guard_interval = GUARD_INTERVAL_1_4;
  565. break;
  566. }
  567. switch ((buf[0] >> 4) & 7) {
  568. case 0:
  569. c->hierarchy = HIERARCHY_NONE;
  570. break;
  571. case 1:
  572. c->hierarchy = HIERARCHY_1;
  573. break;
  574. case 2:
  575. c->hierarchy = HIERARCHY_2;
  576. break;
  577. case 3:
  578. c->hierarchy = HIERARCHY_4;
  579. break;
  580. }
  581. switch ((buf[1] >> 3) & 7) {
  582. case 0:
  583. c->code_rate_HP = FEC_1_2;
  584. break;
  585. case 1:
  586. c->code_rate_HP = FEC_2_3;
  587. break;
  588. case 2:
  589. c->code_rate_HP = FEC_3_4;
  590. break;
  591. case 3:
  592. c->code_rate_HP = FEC_5_6;
  593. break;
  594. case 4:
  595. c->code_rate_HP = FEC_7_8;
  596. break;
  597. }
  598. switch ((buf[1] >> 0) & 7) {
  599. case 0:
  600. c->code_rate_LP = FEC_1_2;
  601. break;
  602. case 1:
  603. c->code_rate_LP = FEC_2_3;
  604. break;
  605. case 2:
  606. c->code_rate_LP = FEC_3_4;
  607. break;
  608. case 3:
  609. c->code_rate_LP = FEC_5_6;
  610. break;
  611. case 4:
  612. c->code_rate_LP = FEC_7_8;
  613. break;
  614. }
  615. return 0;
  616. err:
  617. dev_dbg(&client->dev, "failed=%d\n", ret);
  618. return ret;
  619. }
  620. static int rtl2832_read_status(struct dvb_frontend *fe, enum fe_status *status)
  621. {
  622. struct rtl2832_dev *dev = fe->demodulator_priv;
  623. struct i2c_client *client = dev->client;
  624. int ret;
  625. u32 uninitialized_var(tmp);
  626. dev_dbg(&client->dev, "\n");
  627. *status = 0;
  628. if (dev->sleeping)
  629. return 0;
  630. ret = rtl2832_rd_demod_reg(dev, DVBT_FSM_STAGE, &tmp);
  631. if (ret)
  632. goto err;
  633. if (tmp == 11) {
  634. *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER |
  635. FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
  636. } else if (tmp == 10) {
  637. *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER |
  638. FE_HAS_VITERBI;
  639. }
  640. dev->fe_status = *status;
  641. return 0;
  642. err:
  643. dev_dbg(&client->dev, "failed=%d\n", ret);
  644. return ret;
  645. }
  646. static int rtl2832_read_snr(struct dvb_frontend *fe, u16 *snr)
  647. {
  648. struct dtv_frontend_properties *c = &fe->dtv_property_cache;
  649. /* report SNR in resolution of 0.1 dB */
  650. if (c->cnr.stat[0].scale == FE_SCALE_DECIBEL)
  651. *snr = div_s64(c->cnr.stat[0].svalue, 100);
  652. else
  653. *snr = 0;
  654. return 0;
  655. }
  656. static int rtl2832_read_ber(struct dvb_frontend *fe, u32 *ber)
  657. {
  658. struct rtl2832_dev *dev = fe->demodulator_priv;
  659. *ber = (dev->post_bit_error - dev->post_bit_error_prev);
  660. dev->post_bit_error_prev = dev->post_bit_error;
  661. return 0;
  662. }
  663. static void rtl2832_stat_work(struct work_struct *work)
  664. {
  665. struct rtl2832_dev *dev = container_of(work, struct rtl2832_dev, stat_work.work);
  666. struct i2c_client *client = dev->client;
  667. struct dtv_frontend_properties *c = &dev->fe.dtv_property_cache;
  668. int ret, tmp;
  669. u8 u8tmp, buf[2];
  670. u16 u16tmp;
  671. dev_dbg(&client->dev, "\n");
  672. /* signal strength */
  673. if (dev->fe_status & FE_HAS_SIGNAL) {
  674. /* read digital AGC */
  675. ret = rtl2832_bulk_read(client, 0x305, &u8tmp, 1);
  676. if (ret)
  677. goto err;
  678. dev_dbg(&client->dev, "digital agc=%02x", u8tmp);
  679. u8tmp = ~u8tmp;
  680. u16tmp = u8tmp << 8 | u8tmp << 0;
  681. c->strength.stat[0].scale = FE_SCALE_RELATIVE;
  682. c->strength.stat[0].uvalue = u16tmp;
  683. } else {
  684. c->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
  685. }
  686. /* CNR */
  687. if (dev->fe_status & FE_HAS_VITERBI) {
  688. unsigned hierarchy, constellation;
  689. #define CONSTELLATION_NUM 3
  690. #define HIERARCHY_NUM 4
  691. static const u32 constant[CONSTELLATION_NUM][HIERARCHY_NUM] = {
  692. {85387325, 85387325, 85387325, 85387325},
  693. {86676178, 86676178, 87167949, 87795660},
  694. {87659938, 87659938, 87885178, 88241743},
  695. };
  696. ret = rtl2832_bulk_read(client, 0x33c, &u8tmp, 1);
  697. if (ret)
  698. goto err;
  699. constellation = (u8tmp >> 2) & 0x03; /* [3:2] */
  700. if (constellation > CONSTELLATION_NUM - 1)
  701. goto err_schedule_delayed_work;
  702. hierarchy = (u8tmp >> 4) & 0x07; /* [6:4] */
  703. if (hierarchy > HIERARCHY_NUM - 1)
  704. goto err_schedule_delayed_work;
  705. ret = rtl2832_bulk_read(client, 0x40c, buf, 2);
  706. if (ret)
  707. goto err;
  708. u16tmp = buf[0] << 8 | buf[1] << 0;
  709. if (u16tmp)
  710. tmp = (constant[constellation][hierarchy] -
  711. intlog10(u16tmp)) / ((1 << 24) / 10000);
  712. else
  713. tmp = 0;
  714. dev_dbg(&client->dev, "cnr raw=%u\n", u16tmp);
  715. c->cnr.stat[0].scale = FE_SCALE_DECIBEL;
  716. c->cnr.stat[0].svalue = tmp;
  717. } else {
  718. c->cnr.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
  719. }
  720. /* BER */
  721. if (dev->fe_status & FE_HAS_LOCK) {
  722. ret = rtl2832_bulk_read(client, 0x34e, buf, 2);
  723. if (ret)
  724. goto err;
  725. u16tmp = buf[0] << 8 | buf[1] << 0;
  726. dev->post_bit_error += u16tmp;
  727. dev->post_bit_count += 1000000;
  728. dev_dbg(&client->dev, "ber errors=%u total=1000000\n", u16tmp);
  729. c->post_bit_error.stat[0].scale = FE_SCALE_COUNTER;
  730. c->post_bit_error.stat[0].uvalue = dev->post_bit_error;
  731. c->post_bit_count.stat[0].scale = FE_SCALE_COUNTER;
  732. c->post_bit_count.stat[0].uvalue = dev->post_bit_count;
  733. } else {
  734. c->post_bit_error.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
  735. c->post_bit_count.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
  736. }
  737. err_schedule_delayed_work:
  738. schedule_delayed_work(&dev->stat_work, msecs_to_jiffies(2000));
  739. return;
  740. err:
  741. dev_dbg(&client->dev, "failed=%d\n", ret);
  742. }
  743. /*
  744. * I2C gate/mux/repeater logic
  745. * We must use unlocked __i2c_transfer() here (through regmap) because of I2C
  746. * adapter lock is already taken by tuner driver.
  747. * There is delay mechanism to avoid unneeded I2C gate open / close. Gate close
  748. * is delayed here a little bit in order to see if there is sequence of I2C
  749. * messages sent to same I2C bus.
  750. */
  751. static void rtl2832_i2c_gate_work(struct work_struct *work)
  752. {
  753. struct rtl2832_dev *dev = container_of(work, struct rtl2832_dev, i2c_gate_work.work);
  754. struct i2c_client *client = dev->client;
  755. int ret;
  756. /* close gate */
  757. ret = rtl2832_update_bits(dev->client, 0x101, 0x08, 0x00);
  758. if (ret)
  759. goto err;
  760. return;
  761. err:
  762. dev_dbg(&client->dev, "failed=%d\n", ret);
  763. }
  764. static int rtl2832_select(struct i2c_adapter *adap, void *mux_priv, u32 chan_id)
  765. {
  766. struct rtl2832_dev *dev = mux_priv;
  767. struct i2c_client *client = dev->client;
  768. int ret;
  769. /* terminate possible gate closing */
  770. cancel_delayed_work(&dev->i2c_gate_work);
  771. /*
  772. * I2C adapter lock is already taken and due to that we will use
  773. * regmap_update_bits() which does not lock again I2C adapter.
  774. */
  775. ret = regmap_update_bits(dev->regmap, 0x101, 0x08, 0x08);
  776. if (ret)
  777. goto err;
  778. return 0;
  779. err:
  780. dev_dbg(&client->dev, "failed=%d\n", ret);
  781. return ret;
  782. }
  783. static int rtl2832_deselect(struct i2c_adapter *adap, void *mux_priv,
  784. u32 chan_id)
  785. {
  786. struct rtl2832_dev *dev = mux_priv;
  787. schedule_delayed_work(&dev->i2c_gate_work, usecs_to_jiffies(100));
  788. return 0;
  789. }
  790. static struct dvb_frontend_ops rtl2832_ops = {
  791. .delsys = { SYS_DVBT },
  792. .info = {
  793. .name = "Realtek RTL2832 (DVB-T)",
  794. .frequency_min = 174000000,
  795. .frequency_max = 862000000,
  796. .frequency_stepsize = 166667,
  797. .caps = FE_CAN_FEC_1_2 |
  798. FE_CAN_FEC_2_3 |
  799. FE_CAN_FEC_3_4 |
  800. FE_CAN_FEC_5_6 |
  801. FE_CAN_FEC_7_8 |
  802. FE_CAN_FEC_AUTO |
  803. FE_CAN_QPSK |
  804. FE_CAN_QAM_16 |
  805. FE_CAN_QAM_64 |
  806. FE_CAN_QAM_AUTO |
  807. FE_CAN_TRANSMISSION_MODE_AUTO |
  808. FE_CAN_GUARD_INTERVAL_AUTO |
  809. FE_CAN_HIERARCHY_AUTO |
  810. FE_CAN_RECOVER |
  811. FE_CAN_MUTE_TS
  812. },
  813. .init = rtl2832_init,
  814. .sleep = rtl2832_sleep,
  815. .get_tune_settings = rtl2832_get_tune_settings,
  816. .set_frontend = rtl2832_set_frontend,
  817. .get_frontend = rtl2832_get_frontend,
  818. .read_status = rtl2832_read_status,
  819. .read_snr = rtl2832_read_snr,
  820. .read_ber = rtl2832_read_ber,
  821. };
  822. static bool rtl2832_volatile_reg(struct device *dev, unsigned int reg)
  823. {
  824. switch (reg) {
  825. case 0x305:
  826. case 0x33c:
  827. case 0x34e:
  828. case 0x351:
  829. case 0x40c ... 0x40d:
  830. return true;
  831. default:
  832. break;
  833. }
  834. return false;
  835. }
  836. /*
  837. * We implement own I2C access routines for regmap in order to get manual access
  838. * to I2C adapter lock, which is needed for I2C mux adapter.
  839. */
  840. static int rtl2832_regmap_read(void *context, const void *reg_buf,
  841. size_t reg_size, void *val_buf, size_t val_size)
  842. {
  843. struct i2c_client *client = context;
  844. int ret;
  845. struct i2c_msg msg[2] = {
  846. {
  847. .addr = client->addr,
  848. .flags = 0,
  849. .len = reg_size,
  850. .buf = (u8 *)reg_buf,
  851. }, {
  852. .addr = client->addr,
  853. .flags = I2C_M_RD,
  854. .len = val_size,
  855. .buf = val_buf,
  856. }
  857. };
  858. ret = __i2c_transfer(client->adapter, msg, 2);
  859. if (ret != 2) {
  860. dev_warn(&client->dev, "i2c reg read failed %d\n", ret);
  861. if (ret >= 0)
  862. ret = -EREMOTEIO;
  863. return ret;
  864. }
  865. return 0;
  866. }
  867. static int rtl2832_regmap_write(void *context, const void *data, size_t count)
  868. {
  869. struct i2c_client *client = context;
  870. int ret;
  871. struct i2c_msg msg[1] = {
  872. {
  873. .addr = client->addr,
  874. .flags = 0,
  875. .len = count,
  876. .buf = (u8 *)data,
  877. }
  878. };
  879. ret = __i2c_transfer(client->adapter, msg, 1);
  880. if (ret != 1) {
  881. dev_warn(&client->dev, "i2c reg write failed %d\n", ret);
  882. if (ret >= 0)
  883. ret = -EREMOTEIO;
  884. return ret;
  885. }
  886. return 0;
  887. }
  888. static int rtl2832_regmap_gather_write(void *context, const void *reg,
  889. size_t reg_len, const void *val,
  890. size_t val_len)
  891. {
  892. struct i2c_client *client = context;
  893. int ret;
  894. u8 buf[256];
  895. struct i2c_msg msg[1] = {
  896. {
  897. .addr = client->addr,
  898. .flags = 0,
  899. .len = 1 + val_len,
  900. .buf = buf,
  901. }
  902. };
  903. buf[0] = *(u8 const *)reg;
  904. memcpy(&buf[1], val, val_len);
  905. ret = __i2c_transfer(client->adapter, msg, 1);
  906. if (ret != 1) {
  907. dev_warn(&client->dev, "i2c reg write failed %d\n", ret);
  908. if (ret >= 0)
  909. ret = -EREMOTEIO;
  910. return ret;
  911. }
  912. return 0;
  913. }
  914. /*
  915. * FIXME: Hack. Implement own regmap locking in order to silence lockdep
  916. * recursive lock warning. That happens when regmap I2C client calls I2C mux
  917. * adapter, which leads demod I2C repeater enable via demod regmap. Operation
  918. * takes two regmap locks recursively - but those are different regmap instances
  919. * in a two different I2C drivers, so it is not deadlock. Proper fix is to make
  920. * regmap aware of lockdep.
  921. */
  922. static void rtl2832_regmap_lock(void *__dev)
  923. {
  924. struct rtl2832_dev *dev = __dev;
  925. struct i2c_client *client = dev->client;
  926. dev_dbg(&client->dev, "\n");
  927. mutex_lock(&dev->regmap_mutex);
  928. }
  929. static void rtl2832_regmap_unlock(void *__dev)
  930. {
  931. struct rtl2832_dev *dev = __dev;
  932. struct i2c_client *client = dev->client;
  933. dev_dbg(&client->dev, "\n");
  934. mutex_unlock(&dev->regmap_mutex);
  935. }
  936. static struct dvb_frontend *rtl2832_get_dvb_frontend(struct i2c_client *client)
  937. {
  938. struct rtl2832_dev *dev = i2c_get_clientdata(client);
  939. dev_dbg(&client->dev, "\n");
  940. return &dev->fe;
  941. }
  942. static struct i2c_adapter *rtl2832_get_i2c_adapter(struct i2c_client *client)
  943. {
  944. struct rtl2832_dev *dev = i2c_get_clientdata(client);
  945. dev_dbg(&client->dev, "\n");
  946. return dev->i2c_adapter_tuner;
  947. }
  948. static int rtl2832_enable_slave_ts(struct i2c_client *client)
  949. {
  950. struct rtl2832_dev *dev = i2c_get_clientdata(client);
  951. int ret;
  952. dev_dbg(&client->dev, "\n");
  953. ret = rtl2832_bulk_write(client, 0x10c, "\x5f\xff", 2);
  954. if (ret)
  955. goto err;
  956. ret = rtl2832_wr_demod_reg(dev, DVBT_PIP_ON, 0x1);
  957. if (ret)
  958. goto err;
  959. ret = rtl2832_bulk_write(client, 0x0bc, "\x18", 1);
  960. if (ret)
  961. goto err;
  962. ret = rtl2832_bulk_write(client, 0x022, "\x01", 1);
  963. if (ret)
  964. goto err;
  965. ret = rtl2832_bulk_write(client, 0x026, "\x1f", 1);
  966. if (ret)
  967. goto err;
  968. ret = rtl2832_bulk_write(client, 0x027, "\xff", 1);
  969. if (ret)
  970. goto err;
  971. ret = rtl2832_bulk_write(client, 0x192, "\x7f\xf7\xff", 3);
  972. if (ret)
  973. goto err;
  974. /* soft reset */
  975. ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x1);
  976. if (ret)
  977. goto err;
  978. ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x0);
  979. if (ret)
  980. goto err;
  981. return 0;
  982. err:
  983. dev_dbg(&client->dev, "failed=%d\n", ret);
  984. return ret;
  985. }
  986. static int rtl2832_pid_filter_ctrl(struct dvb_frontend *fe, int onoff)
  987. {
  988. struct rtl2832_dev *dev = fe->demodulator_priv;
  989. struct i2c_client *client = dev->client;
  990. int ret;
  991. u8 u8tmp;
  992. dev_dbg(&client->dev, "onoff=%d\n", onoff);
  993. /* enable / disable PID filter */
  994. if (onoff)
  995. u8tmp = 0x80;
  996. else
  997. u8tmp = 0x00;
  998. ret = rtl2832_update_bits(client, 0x061, 0xc0, u8tmp);
  999. if (ret)
  1000. goto err;
  1001. return 0;
  1002. err:
  1003. dev_dbg(&client->dev, "failed=%d\n", ret);
  1004. return ret;
  1005. }
  1006. static int rtl2832_pid_filter(struct dvb_frontend *fe, u8 index, u16 pid,
  1007. int onoff)
  1008. {
  1009. struct rtl2832_dev *dev = fe->demodulator_priv;
  1010. struct i2c_client *client = dev->client;
  1011. int ret;
  1012. u8 buf[4];
  1013. dev_dbg(&client->dev, "index=%d pid=%04x onoff=%d\n",
  1014. index, pid, onoff);
  1015. /* skip invalid PIDs (0x2000) */
  1016. if (pid > 0x1fff || index > 32)
  1017. return 0;
  1018. if (onoff)
  1019. set_bit(index, &dev->filters);
  1020. else
  1021. clear_bit(index, &dev->filters);
  1022. /* enable / disable PIDs */
  1023. buf[0] = (dev->filters >> 0) & 0xff;
  1024. buf[1] = (dev->filters >> 8) & 0xff;
  1025. buf[2] = (dev->filters >> 16) & 0xff;
  1026. buf[3] = (dev->filters >> 24) & 0xff;
  1027. ret = rtl2832_bulk_write(client, 0x062, buf, 4);
  1028. if (ret)
  1029. goto err;
  1030. /* add PID */
  1031. buf[0] = (pid >> 8) & 0xff;
  1032. buf[1] = (pid >> 0) & 0xff;
  1033. ret = rtl2832_bulk_write(client, 0x066 + 2 * index, buf, 2);
  1034. if (ret)
  1035. goto err;
  1036. return 0;
  1037. err:
  1038. dev_dbg(&client->dev, "failed=%d\n", ret);
  1039. return ret;
  1040. }
  1041. static int rtl2832_probe(struct i2c_client *client,
  1042. const struct i2c_device_id *id)
  1043. {
  1044. struct rtl2832_platform_data *pdata = client->dev.platform_data;
  1045. struct i2c_adapter *i2c = client->adapter;
  1046. struct rtl2832_dev *dev;
  1047. int ret;
  1048. u8 tmp;
  1049. static const struct regmap_bus regmap_bus = {
  1050. .read = rtl2832_regmap_read,
  1051. .write = rtl2832_regmap_write,
  1052. .gather_write = rtl2832_regmap_gather_write,
  1053. .val_format_endian_default = REGMAP_ENDIAN_NATIVE,
  1054. };
  1055. static const struct regmap_range_cfg regmap_range_cfg[] = {
  1056. {
  1057. .selector_reg = 0x00,
  1058. .selector_mask = 0xff,
  1059. .selector_shift = 0,
  1060. .window_start = 0,
  1061. .window_len = 0x100,
  1062. .range_min = 0 * 0x100,
  1063. .range_max = 5 * 0x100,
  1064. },
  1065. };
  1066. dev_dbg(&client->dev, "\n");
  1067. /* allocate memory for the internal state */
  1068. dev = kzalloc(sizeof(struct rtl2832_dev), GFP_KERNEL);
  1069. if (dev == NULL) {
  1070. ret = -ENOMEM;
  1071. goto err;
  1072. }
  1073. /* setup the state */
  1074. i2c_set_clientdata(client, dev);
  1075. dev->client = client;
  1076. dev->pdata = client->dev.platform_data;
  1077. dev->sleeping = true;
  1078. INIT_DELAYED_WORK(&dev->i2c_gate_work, rtl2832_i2c_gate_work);
  1079. INIT_DELAYED_WORK(&dev->stat_work, rtl2832_stat_work);
  1080. /* create regmap */
  1081. mutex_init(&dev->regmap_mutex);
  1082. dev->regmap_config.reg_bits = 8,
  1083. dev->regmap_config.val_bits = 8,
  1084. dev->regmap_config.lock = rtl2832_regmap_lock,
  1085. dev->regmap_config.unlock = rtl2832_regmap_unlock,
  1086. dev->regmap_config.lock_arg = dev,
  1087. dev->regmap_config.volatile_reg = rtl2832_volatile_reg,
  1088. dev->regmap_config.max_register = 5 * 0x100,
  1089. dev->regmap_config.ranges = regmap_range_cfg,
  1090. dev->regmap_config.num_ranges = ARRAY_SIZE(regmap_range_cfg),
  1091. dev->regmap_config.cache_type = REGCACHE_NONE,
  1092. dev->regmap = regmap_init(&client->dev, &regmap_bus, client,
  1093. &dev->regmap_config);
  1094. if (IS_ERR(dev->regmap)) {
  1095. ret = PTR_ERR(dev->regmap);
  1096. goto err_kfree;
  1097. }
  1098. /* check if the demod is there */
  1099. ret = rtl2832_bulk_read(client, 0x000, &tmp, 1);
  1100. if (ret)
  1101. goto err_regmap_exit;
  1102. /* create muxed i2c adapter for demod tuner bus */
  1103. dev->i2c_adapter_tuner = i2c_add_mux_adapter(i2c, &i2c->dev, dev,
  1104. 0, 0, 0, rtl2832_select, rtl2832_deselect);
  1105. if (dev->i2c_adapter_tuner == NULL) {
  1106. ret = -ENODEV;
  1107. goto err_regmap_exit;
  1108. }
  1109. /* create dvb_frontend */
  1110. memcpy(&dev->fe.ops, &rtl2832_ops, sizeof(struct dvb_frontend_ops));
  1111. dev->fe.demodulator_priv = dev;
  1112. /* setup callbacks */
  1113. pdata->get_dvb_frontend = rtl2832_get_dvb_frontend;
  1114. pdata->get_i2c_adapter = rtl2832_get_i2c_adapter;
  1115. pdata->enable_slave_ts = rtl2832_enable_slave_ts;
  1116. pdata->pid_filter = rtl2832_pid_filter;
  1117. pdata->pid_filter_ctrl = rtl2832_pid_filter_ctrl;
  1118. pdata->bulk_read = rtl2832_bulk_read;
  1119. pdata->bulk_write = rtl2832_bulk_write;
  1120. pdata->update_bits = rtl2832_update_bits;
  1121. dev_info(&client->dev, "Realtek RTL2832 successfully attached\n");
  1122. return 0;
  1123. err_regmap_exit:
  1124. regmap_exit(dev->regmap);
  1125. err_kfree:
  1126. kfree(dev);
  1127. err:
  1128. dev_dbg(&client->dev, "failed=%d\n", ret);
  1129. return ret;
  1130. }
  1131. static int rtl2832_remove(struct i2c_client *client)
  1132. {
  1133. struct rtl2832_dev *dev = i2c_get_clientdata(client);
  1134. dev_dbg(&client->dev, "\n");
  1135. cancel_delayed_work_sync(&dev->i2c_gate_work);
  1136. i2c_del_mux_adapter(dev->i2c_adapter_tuner);
  1137. regmap_exit(dev->regmap);
  1138. kfree(dev);
  1139. return 0;
  1140. }
  1141. static const struct i2c_device_id rtl2832_id_table[] = {
  1142. {"rtl2832", 0},
  1143. {}
  1144. };
  1145. MODULE_DEVICE_TABLE(i2c, rtl2832_id_table);
  1146. static struct i2c_driver rtl2832_driver = {
  1147. .driver = {
  1148. .name = "rtl2832",
  1149. },
  1150. .probe = rtl2832_probe,
  1151. .remove = rtl2832_remove,
  1152. .id_table = rtl2832_id_table,
  1153. };
  1154. module_i2c_driver(rtl2832_driver);
  1155. MODULE_AUTHOR("Thomas Mair <mair.thomas86@gmail.com>");
  1156. MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
  1157. MODULE_DESCRIPTION("Realtek RTL2832 DVB-T demodulator driver");
  1158. MODULE_LICENSE("GPL");