ddbridge-core.c 83 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417
  1. /*
  2. * ddbridge-core.c: Digital Devices bridge core functions
  3. *
  4. * Copyright (C) 2010-2017 Digital Devices GmbH
  5. * Marcus Metzler <mocm@metzlerbros.de>
  6. * Ralph Metzler <rjkm@metzlerbros.de>
  7. *
  8. *
  9. * This program is free software; you can redistribute it and/or
  10. * modify it under the terms of the GNU General Public License
  11. * version 2 only, as published by the Free Software Foundation.
  12. *
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU General Public License for more details.
  18. *
  19. * To obtain the license, point your browser to
  20. * http://www.gnu.org/copyleft/gpl.html
  21. */
  22. #include <linux/module.h>
  23. #include <linux/init.h>
  24. #include <linux/interrupt.h>
  25. #include <linux/delay.h>
  26. #include <linux/slab.h>
  27. #include <linux/poll.h>
  28. #include <linux/io.h>
  29. #include <linux/pci.h>
  30. #include <linux/pci_ids.h>
  31. #include <linux/timer.h>
  32. #include <linux/i2c.h>
  33. #include <linux/swab.h>
  34. #include <linux/vmalloc.h>
  35. #include "ddbridge.h"
  36. #include "ddbridge-i2c.h"
  37. #include "ddbridge-regs.h"
  38. #include "ddbridge-max.h"
  39. #include "ddbridge-ci.h"
  40. #include "ddbridge-io.h"
  41. #include "tda18271c2dd.h"
  42. #include "stv6110x.h"
  43. #include "stv090x.h"
  44. #include "lnbh24.h"
  45. #include "drxk.h"
  46. #include "stv0367.h"
  47. #include "stv0367_priv.h"
  48. #include "cxd2841er.h"
  49. #include "tda18212.h"
  50. #include "stv0910.h"
  51. #include "stv6111.h"
  52. #include "lnbh25.h"
  53. #include "cxd2099.h"
  54. #include "dvb_dummy_fe.h"
  55. /****************************************************************************/
  56. #define DDB_MAX_ADAPTER 64
  57. /****************************************************************************/
  58. DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
  59. static int adapter_alloc;
  60. module_param(adapter_alloc, int, 0444);
  61. MODULE_PARM_DESC(adapter_alloc,
  62. "0-one adapter per io, 1-one per tab with io, 2-one per tab, 3-one for all");
  63. static int ci_bitrate = 70000;
  64. module_param(ci_bitrate, int, 0444);
  65. MODULE_PARM_DESC(ci_bitrate, " Bitrate in KHz for output to CI.");
  66. static int ts_loop = -1;
  67. module_param(ts_loop, int, 0444);
  68. MODULE_PARM_DESC(ts_loop, "TS in/out test loop on port ts_loop");
  69. static int xo2_speed = 2;
  70. module_param(xo2_speed, int, 0444);
  71. MODULE_PARM_DESC(xo2_speed, "default transfer speed for xo2 based duoflex, 0=55,1=75,2=90,3=104 MBit/s, default=2, use attribute to change for individual cards");
  72. #ifdef __arm__
  73. static int alt_dma = 1;
  74. #else
  75. static int alt_dma;
  76. #endif
  77. module_param(alt_dma, int, 0444);
  78. MODULE_PARM_DESC(alt_dma, "use alternative DMA buffer handling");
  79. static int no_init;
  80. module_param(no_init, int, 0444);
  81. MODULE_PARM_DESC(no_init, "do not initialize most devices");
  82. static int stv0910_single;
  83. module_param(stv0910_single, int, 0444);
  84. MODULE_PARM_DESC(stv0910_single, "use stv0910 cards as single demods");
  85. static int dma_buf_num = 8;
  86. module_param(dma_buf_num, int, 0444);
  87. MODULE_PARM_DESC(dma_buf_num, "Number of DMA buffers, possible values: 8-32");
  88. static int dma_buf_size = 21;
  89. module_param(dma_buf_size, int, 0444);
  90. MODULE_PARM_DESC(dma_buf_size,
  91. "DMA buffer size as multiple of 128*47, possible values: 1-43");
  92. static int dummy_tuner;
  93. module_param(dummy_tuner, int, 0444);
  94. MODULE_PARM_DESC(dummy_tuner,
  95. "attach dummy tuner to port 0 on Octopus V3 or Octopus Mini cards");
  96. /****************************************************************************/
  97. static DEFINE_MUTEX(redirect_lock);
  98. static struct workqueue_struct *ddb_wq;
  99. static struct ddb *ddbs[DDB_MAX_ADAPTER];
  100. /****************************************************************************/
  101. /****************************************************************************/
  102. /****************************************************************************/
  103. struct ddb_irq *ddb_irq_set(struct ddb *dev, u32 link, u32 nr,
  104. void (*handler)(void *), void *data)
  105. {
  106. struct ddb_irq *irq = &dev->link[link].irq[nr];
  107. irq->handler = handler;
  108. irq->data = data;
  109. return irq;
  110. }
  111. static void ddb_set_dma_table(struct ddb_io *io)
  112. {
  113. struct ddb *dev = io->port->dev;
  114. struct ddb_dma *dma = io->dma;
  115. u32 i;
  116. u64 mem;
  117. if (!dma)
  118. return;
  119. for (i = 0; i < dma->num; i++) {
  120. mem = dma->pbuf[i];
  121. ddbwritel(dev, mem & 0xffffffff, dma->bufregs + i * 8);
  122. ddbwritel(dev, mem >> 32, dma->bufregs + i * 8 + 4);
  123. }
  124. dma->bufval = ((dma->div & 0x0f) << 16) |
  125. ((dma->num & 0x1f) << 11) |
  126. ((dma->size >> 7) & 0x7ff);
  127. }
  128. static void ddb_set_dma_tables(struct ddb *dev)
  129. {
  130. u32 i;
  131. for (i = 0; i < DDB_MAX_PORT; i++) {
  132. if (dev->port[i].input[0])
  133. ddb_set_dma_table(dev->port[i].input[0]);
  134. if (dev->port[i].input[1])
  135. ddb_set_dma_table(dev->port[i].input[1]);
  136. if (dev->port[i].output)
  137. ddb_set_dma_table(dev->port[i].output);
  138. }
  139. }
  140. /****************************************************************************/
  141. /****************************************************************************/
  142. /****************************************************************************/
  143. static void ddb_redirect_dma(struct ddb *dev,
  144. struct ddb_dma *sdma,
  145. struct ddb_dma *ddma)
  146. {
  147. u32 i, base;
  148. u64 mem;
  149. sdma->bufval = ddma->bufval;
  150. base = sdma->bufregs;
  151. for (i = 0; i < ddma->num; i++) {
  152. mem = ddma->pbuf[i];
  153. ddbwritel(dev, mem & 0xffffffff, base + i * 8);
  154. ddbwritel(dev, mem >> 32, base + i * 8 + 4);
  155. }
  156. }
  157. static int ddb_unredirect(struct ddb_port *port)
  158. {
  159. struct ddb_input *oredi, *iredi = NULL;
  160. struct ddb_output *iredo = NULL;
  161. /* dev_info(port->dev->dev,
  162. * "unredirect %d.%d\n", port->dev->nr, port->nr);
  163. */
  164. mutex_lock(&redirect_lock);
  165. if (port->output->dma->running) {
  166. mutex_unlock(&redirect_lock);
  167. return -EBUSY;
  168. }
  169. oredi = port->output->redi;
  170. if (!oredi)
  171. goto done;
  172. if (port->input[0]) {
  173. iredi = port->input[0]->redi;
  174. iredo = port->input[0]->redo;
  175. if (iredo) {
  176. iredo->port->output->redi = oredi;
  177. if (iredo->port->input[0]) {
  178. iredo->port->input[0]->redi = iredi;
  179. ddb_redirect_dma(oredi->port->dev,
  180. oredi->dma, iredo->dma);
  181. }
  182. port->input[0]->redo = NULL;
  183. ddb_set_dma_table(port->input[0]);
  184. }
  185. oredi->redi = iredi;
  186. port->input[0]->redi = NULL;
  187. }
  188. oredi->redo = NULL;
  189. port->output->redi = NULL;
  190. ddb_set_dma_table(oredi);
  191. done:
  192. mutex_unlock(&redirect_lock);
  193. return 0;
  194. }
  195. static int ddb_redirect(u32 i, u32 p)
  196. {
  197. struct ddb *idev = ddbs[(i >> 4) & 0x3f];
  198. struct ddb_input *input, *input2;
  199. struct ddb *pdev = ddbs[(p >> 4) & 0x3f];
  200. struct ddb_port *port;
  201. if (!idev || !pdev)
  202. return -EINVAL;
  203. if (!idev->has_dma || !pdev->has_dma)
  204. return -EINVAL;
  205. port = &pdev->port[p & 0x0f];
  206. if (!port->output)
  207. return -EINVAL;
  208. if (ddb_unredirect(port))
  209. return -EBUSY;
  210. if (i == 8)
  211. return 0;
  212. input = &idev->input[i & 7];
  213. if (!input)
  214. return -EINVAL;
  215. mutex_lock(&redirect_lock);
  216. if (port->output->dma->running || input->dma->running) {
  217. mutex_unlock(&redirect_lock);
  218. return -EBUSY;
  219. }
  220. input2 = port->input[0];
  221. if (input2) {
  222. if (input->redi) {
  223. input2->redi = input->redi;
  224. input->redi = NULL;
  225. } else {
  226. input2->redi = input;
  227. }
  228. }
  229. input->redo = port->output;
  230. port->output->redi = input;
  231. ddb_redirect_dma(input->port->dev, input->dma, port->output->dma);
  232. mutex_unlock(&redirect_lock);
  233. return 0;
  234. }
  235. /****************************************************************************/
  236. /****************************************************************************/
  237. /****************************************************************************/
  238. static void dma_free(struct pci_dev *pdev, struct ddb_dma *dma, int dir)
  239. {
  240. int i;
  241. if (!dma)
  242. return;
  243. for (i = 0; i < dma->num; i++) {
  244. if (dma->vbuf[i]) {
  245. if (alt_dma) {
  246. dma_unmap_single(&pdev->dev, dma->pbuf[i],
  247. dma->size,
  248. dir ? DMA_TO_DEVICE :
  249. DMA_FROM_DEVICE);
  250. kfree(dma->vbuf[i]);
  251. dma->vbuf[i] = NULL;
  252. } else {
  253. dma_free_coherent(&pdev->dev, dma->size,
  254. dma->vbuf[i], dma->pbuf[i]);
  255. }
  256. dma->vbuf[i] = NULL;
  257. }
  258. }
  259. }
  260. static int dma_alloc(struct pci_dev *pdev, struct ddb_dma *dma, int dir)
  261. {
  262. int i;
  263. if (!dma)
  264. return 0;
  265. for (i = 0; i < dma->num; i++) {
  266. if (alt_dma) {
  267. dma->vbuf[i] = kmalloc(dma->size, __GFP_RETRY_MAYFAIL);
  268. if (!dma->vbuf[i])
  269. return -ENOMEM;
  270. dma->pbuf[i] = dma_map_single(&pdev->dev,
  271. dma->vbuf[i],
  272. dma->size,
  273. dir ? DMA_TO_DEVICE :
  274. DMA_FROM_DEVICE);
  275. if (dma_mapping_error(&pdev->dev, dma->pbuf[i])) {
  276. kfree(dma->vbuf[i]);
  277. dma->vbuf[i] = NULL;
  278. return -ENOMEM;
  279. }
  280. } else {
  281. dma->vbuf[i] = dma_alloc_coherent(&pdev->dev,
  282. dma->size,
  283. &dma->pbuf[i],
  284. GFP_KERNEL);
  285. if (!dma->vbuf[i])
  286. return -ENOMEM;
  287. }
  288. }
  289. return 0;
  290. }
  291. int ddb_buffers_alloc(struct ddb *dev)
  292. {
  293. int i;
  294. struct ddb_port *port;
  295. for (i = 0; i < dev->port_num; i++) {
  296. port = &dev->port[i];
  297. switch (port->class) {
  298. case DDB_PORT_TUNER:
  299. if (port->input[0]->dma)
  300. if (dma_alloc(dev->pdev, port->input[0]->dma, 0)
  301. < 0)
  302. return -1;
  303. if (port->input[1]->dma)
  304. if (dma_alloc(dev->pdev, port->input[1]->dma, 0)
  305. < 0)
  306. return -1;
  307. break;
  308. case DDB_PORT_CI:
  309. case DDB_PORT_LOOP:
  310. if (port->input[0]->dma)
  311. if (dma_alloc(dev->pdev, port->input[0]->dma, 0)
  312. < 0)
  313. return -1;
  314. if (port->output->dma)
  315. if (dma_alloc(dev->pdev, port->output->dma, 1)
  316. < 0)
  317. return -1;
  318. break;
  319. default:
  320. break;
  321. }
  322. }
  323. ddb_set_dma_tables(dev);
  324. return 0;
  325. }
  326. void ddb_buffers_free(struct ddb *dev)
  327. {
  328. int i;
  329. struct ddb_port *port;
  330. for (i = 0; i < dev->port_num; i++) {
  331. port = &dev->port[i];
  332. if (port->input[0] && port->input[0]->dma)
  333. dma_free(dev->pdev, port->input[0]->dma, 0);
  334. if (port->input[1] && port->input[1]->dma)
  335. dma_free(dev->pdev, port->input[1]->dma, 0);
  336. if (port->output && port->output->dma)
  337. dma_free(dev->pdev, port->output->dma, 1);
  338. }
  339. }
  340. static void calc_con(struct ddb_output *output, u32 *con, u32 *con2, u32 flags)
  341. {
  342. struct ddb *dev = output->port->dev;
  343. u32 bitrate = output->port->obr, max_bitrate = 72000;
  344. u32 gap = 4, nco = 0;
  345. *con = 0x1c;
  346. if (output->port->gap != 0xffffffff) {
  347. flags |= 1;
  348. gap = output->port->gap;
  349. max_bitrate = 0;
  350. }
  351. if (dev->link[0].info->type == DDB_OCTOPUS_CI && output->port->nr > 1) {
  352. *con = 0x10c;
  353. if (dev->link[0].ids.regmapid >= 0x10003 && !(flags & 1)) {
  354. if (!(flags & 2)) {
  355. /* NCO */
  356. max_bitrate = 0;
  357. gap = 0;
  358. if (bitrate != 72000) {
  359. if (bitrate >= 96000) {
  360. *con |= 0x800;
  361. } else {
  362. *con |= 0x1000;
  363. nco = (bitrate * 8192 + 71999)
  364. / 72000;
  365. }
  366. }
  367. } else {
  368. /* Divider and gap */
  369. *con |= 0x1810;
  370. if (bitrate <= 64000) {
  371. max_bitrate = 64000;
  372. nco = 8;
  373. } else if (bitrate <= 72000) {
  374. max_bitrate = 72000;
  375. nco = 7;
  376. } else {
  377. max_bitrate = 96000;
  378. nco = 5;
  379. }
  380. }
  381. } else {
  382. if (bitrate > 72000) {
  383. *con |= 0x810; /* 96 MBit/s and gap */
  384. max_bitrate = 96000;
  385. }
  386. *con |= 0x10; /* enable gap */
  387. }
  388. }
  389. if (max_bitrate > 0) {
  390. if (bitrate > max_bitrate)
  391. bitrate = max_bitrate;
  392. if (bitrate < 31000)
  393. bitrate = 31000;
  394. gap = ((max_bitrate - bitrate) * 94) / bitrate;
  395. if (gap < 2)
  396. *con &= ~0x10; /* Disable gap */
  397. else
  398. gap -= 2;
  399. if (gap > 127)
  400. gap = 127;
  401. }
  402. *con2 = (nco << 16) | gap;
  403. }
  404. static void ddb_output_start(struct ddb_output *output)
  405. {
  406. struct ddb *dev = output->port->dev;
  407. u32 con = 0x11c, con2 = 0;
  408. spin_lock_irq(&output->dma->lock);
  409. output->dma->cbuf = 0;
  410. output->dma->coff = 0;
  411. output->dma->stat = 0;
  412. ddbwritel(dev, 0, DMA_BUFFER_CONTROL(output->dma));
  413. if (output->port->input[0]->port->class == DDB_PORT_LOOP)
  414. con = (1UL << 13) | 0x14;
  415. else
  416. calc_con(output, &con, &con2, 0);
  417. ddbwritel(dev, 0, TS_CONTROL(output));
  418. ddbwritel(dev, 2, TS_CONTROL(output));
  419. ddbwritel(dev, 0, TS_CONTROL(output));
  420. ddbwritel(dev, con, TS_CONTROL(output));
  421. ddbwritel(dev, con2, TS_CONTROL2(output));
  422. ddbwritel(dev, output->dma->bufval,
  423. DMA_BUFFER_SIZE(output->dma));
  424. ddbwritel(dev, 0, DMA_BUFFER_ACK(output->dma));
  425. ddbwritel(dev, 1, DMA_BASE_READ);
  426. ddbwritel(dev, 7, DMA_BUFFER_CONTROL(output->dma));
  427. ddbwritel(dev, con | 1, TS_CONTROL(output));
  428. output->dma->running = 1;
  429. spin_unlock_irq(&output->dma->lock);
  430. }
  431. static void ddb_output_stop(struct ddb_output *output)
  432. {
  433. struct ddb *dev = output->port->dev;
  434. spin_lock_irq(&output->dma->lock);
  435. ddbwritel(dev, 0, TS_CONTROL(output));
  436. ddbwritel(dev, 0, DMA_BUFFER_CONTROL(output->dma));
  437. output->dma->running = 0;
  438. spin_unlock_irq(&output->dma->lock);
  439. }
  440. static void ddb_input_stop(struct ddb_input *input)
  441. {
  442. struct ddb *dev = input->port->dev;
  443. u32 tag = DDB_LINK_TAG(input->port->lnr);
  444. spin_lock_irq(&input->dma->lock);
  445. ddbwritel(dev, 0, tag | TS_CONTROL(input));
  446. ddbwritel(dev, 0, DMA_BUFFER_CONTROL(input->dma));
  447. input->dma->running = 0;
  448. spin_unlock_irq(&input->dma->lock);
  449. }
  450. static void ddb_input_start(struct ddb_input *input)
  451. {
  452. struct ddb *dev = input->port->dev;
  453. spin_lock_irq(&input->dma->lock);
  454. input->dma->cbuf = 0;
  455. input->dma->coff = 0;
  456. input->dma->stat = 0;
  457. ddbwritel(dev, 0, DMA_BUFFER_CONTROL(input->dma));
  458. ddbwritel(dev, 0, TS_CONTROL(input));
  459. ddbwritel(dev, 2, TS_CONTROL(input));
  460. ddbwritel(dev, 0, TS_CONTROL(input));
  461. ddbwritel(dev, input->dma->bufval,
  462. DMA_BUFFER_SIZE(input->dma));
  463. ddbwritel(dev, 0, DMA_BUFFER_ACK(input->dma));
  464. ddbwritel(dev, 1, DMA_BASE_WRITE);
  465. ddbwritel(dev, 3, DMA_BUFFER_CONTROL(input->dma));
  466. ddbwritel(dev, 0x09, TS_CONTROL(input));
  467. if (input->port->type == DDB_TUNER_DUMMY)
  468. ddbwritel(dev, 0x000fff01, TS_CONTROL2(input));
  469. input->dma->running = 1;
  470. spin_unlock_irq(&input->dma->lock);
  471. }
  472. static void ddb_input_start_all(struct ddb_input *input)
  473. {
  474. struct ddb_input *i = input;
  475. struct ddb_output *o;
  476. mutex_lock(&redirect_lock);
  477. while (i && (o = i->redo)) {
  478. ddb_output_start(o);
  479. i = o->port->input[0];
  480. if (i)
  481. ddb_input_start(i);
  482. }
  483. ddb_input_start(input);
  484. mutex_unlock(&redirect_lock);
  485. }
  486. static void ddb_input_stop_all(struct ddb_input *input)
  487. {
  488. struct ddb_input *i = input;
  489. struct ddb_output *o;
  490. mutex_lock(&redirect_lock);
  491. ddb_input_stop(input);
  492. while (i && (o = i->redo)) {
  493. ddb_output_stop(o);
  494. i = o->port->input[0];
  495. if (i)
  496. ddb_input_stop(i);
  497. }
  498. mutex_unlock(&redirect_lock);
  499. }
  500. static u32 ddb_output_free(struct ddb_output *output)
  501. {
  502. u32 idx, off, stat = output->dma->stat;
  503. s32 diff;
  504. idx = (stat >> 11) & 0x1f;
  505. off = (stat & 0x7ff) << 7;
  506. if (output->dma->cbuf != idx) {
  507. if ((((output->dma->cbuf + 1) % output->dma->num) == idx) &&
  508. (output->dma->size - output->dma->coff <= (2 * 188)))
  509. return 0;
  510. return 188;
  511. }
  512. diff = off - output->dma->coff;
  513. if (diff <= 0 || diff > (2 * 188))
  514. return 188;
  515. return 0;
  516. }
  517. static ssize_t ddb_output_write(struct ddb_output *output,
  518. const __user u8 *buf, size_t count)
  519. {
  520. struct ddb *dev = output->port->dev;
  521. u32 idx, off, stat = output->dma->stat;
  522. u32 left = count, len;
  523. idx = (stat >> 11) & 0x1f;
  524. off = (stat & 0x7ff) << 7;
  525. while (left) {
  526. len = output->dma->size - output->dma->coff;
  527. if ((((output->dma->cbuf + 1) % output->dma->num) == idx) &&
  528. off == 0) {
  529. if (len <= 188)
  530. break;
  531. len -= 188;
  532. }
  533. if (output->dma->cbuf == idx) {
  534. if (off > output->dma->coff) {
  535. len = off - output->dma->coff;
  536. len -= (len % 188);
  537. if (len <= 188)
  538. break;
  539. len -= 188;
  540. }
  541. }
  542. if (len > left)
  543. len = left;
  544. if (copy_from_user(output->dma->vbuf[output->dma->cbuf] +
  545. output->dma->coff,
  546. buf, len))
  547. return -EIO;
  548. if (alt_dma)
  549. dma_sync_single_for_device(
  550. dev->dev,
  551. output->dma->pbuf[output->dma->cbuf],
  552. output->dma->size, DMA_TO_DEVICE);
  553. left -= len;
  554. buf += len;
  555. output->dma->coff += len;
  556. if (output->dma->coff == output->dma->size) {
  557. output->dma->coff = 0;
  558. output->dma->cbuf = ((output->dma->cbuf + 1) %
  559. output->dma->num);
  560. }
  561. ddbwritel(dev,
  562. (output->dma->cbuf << 11) |
  563. (output->dma->coff >> 7),
  564. DMA_BUFFER_ACK(output->dma));
  565. }
  566. return count - left;
  567. }
  568. static u32 ddb_input_avail(struct ddb_input *input)
  569. {
  570. struct ddb *dev = input->port->dev;
  571. u32 idx, off, stat = input->dma->stat;
  572. u32 ctrl = ddbreadl(dev, DMA_BUFFER_CONTROL(input->dma));
  573. idx = (stat >> 11) & 0x1f;
  574. off = (stat & 0x7ff) << 7;
  575. if (ctrl & 4) {
  576. dev_err(dev->dev, "IA %d %d %08x\n", idx, off, ctrl);
  577. ddbwritel(dev, stat, DMA_BUFFER_ACK(input->dma));
  578. return 0;
  579. }
  580. if (input->dma->cbuf != idx)
  581. return 188;
  582. return 0;
  583. }
  584. static ssize_t ddb_input_read(struct ddb_input *input,
  585. __user u8 *buf, size_t count)
  586. {
  587. struct ddb *dev = input->port->dev;
  588. u32 left = count;
  589. u32 idx, free, stat = input->dma->stat;
  590. int ret;
  591. idx = (stat >> 11) & 0x1f;
  592. while (left) {
  593. if (input->dma->cbuf == idx)
  594. return count - left;
  595. free = input->dma->size - input->dma->coff;
  596. if (free > left)
  597. free = left;
  598. if (alt_dma)
  599. dma_sync_single_for_cpu(
  600. dev->dev,
  601. input->dma->pbuf[input->dma->cbuf],
  602. input->dma->size, DMA_FROM_DEVICE);
  603. ret = copy_to_user(buf, input->dma->vbuf[input->dma->cbuf] +
  604. input->dma->coff, free);
  605. if (ret)
  606. return -EFAULT;
  607. input->dma->coff += free;
  608. if (input->dma->coff == input->dma->size) {
  609. input->dma->coff = 0;
  610. input->dma->cbuf = (input->dma->cbuf + 1) %
  611. input->dma->num;
  612. }
  613. left -= free;
  614. buf += free;
  615. ddbwritel(dev,
  616. (input->dma->cbuf << 11) | (input->dma->coff >> 7),
  617. DMA_BUFFER_ACK(input->dma));
  618. }
  619. return count;
  620. }
  621. /****************************************************************************/
  622. /****************************************************************************/
  623. static ssize_t ts_write(struct file *file, const __user char *buf,
  624. size_t count, loff_t *ppos)
  625. {
  626. struct dvb_device *dvbdev = file->private_data;
  627. struct ddb_output *output = dvbdev->priv;
  628. struct ddb *dev = output->port->dev;
  629. size_t left = count;
  630. int stat;
  631. if (!dev->has_dma)
  632. return -EINVAL;
  633. while (left) {
  634. if (ddb_output_free(output) < 188) {
  635. if (file->f_flags & O_NONBLOCK)
  636. break;
  637. if (wait_event_interruptible(
  638. output->dma->wq,
  639. ddb_output_free(output) >= 188) < 0)
  640. break;
  641. }
  642. stat = ddb_output_write(output, buf, left);
  643. if (stat < 0)
  644. return stat;
  645. buf += stat;
  646. left -= stat;
  647. }
  648. return (left == count) ? -EAGAIN : (count - left);
  649. }
  650. static ssize_t ts_read(struct file *file, __user char *buf,
  651. size_t count, loff_t *ppos)
  652. {
  653. struct dvb_device *dvbdev = file->private_data;
  654. struct ddb_output *output = dvbdev->priv;
  655. struct ddb_input *input = output->port->input[0];
  656. struct ddb *dev = output->port->dev;
  657. size_t left = count;
  658. int stat;
  659. if (!dev->has_dma)
  660. return -EINVAL;
  661. while (left) {
  662. if (ddb_input_avail(input) < 188) {
  663. if (file->f_flags & O_NONBLOCK)
  664. break;
  665. if (wait_event_interruptible(
  666. input->dma->wq,
  667. ddb_input_avail(input) >= 188) < 0)
  668. break;
  669. }
  670. stat = ddb_input_read(input, buf, left);
  671. if (stat < 0)
  672. return stat;
  673. left -= stat;
  674. buf += stat;
  675. }
  676. return (count && (left == count)) ? -EAGAIN : (count - left);
  677. }
  678. static __poll_t ts_poll(struct file *file, poll_table *wait)
  679. {
  680. struct dvb_device *dvbdev = file->private_data;
  681. struct ddb_output *output = dvbdev->priv;
  682. struct ddb_input *input = output->port->input[0];
  683. __poll_t mask = 0;
  684. poll_wait(file, &input->dma->wq, wait);
  685. poll_wait(file, &output->dma->wq, wait);
  686. if (ddb_input_avail(input) >= 188)
  687. mask |= EPOLLIN | EPOLLRDNORM;
  688. if (ddb_output_free(output) >= 188)
  689. mask |= EPOLLOUT | EPOLLWRNORM;
  690. return mask;
  691. }
  692. static int ts_release(struct inode *inode, struct file *file)
  693. {
  694. struct dvb_device *dvbdev = file->private_data;
  695. struct ddb_output *output = NULL;
  696. struct ddb_input *input = NULL;
  697. if (dvbdev) {
  698. output = dvbdev->priv;
  699. input = output->port->input[0];
  700. }
  701. if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
  702. if (!input)
  703. return -EINVAL;
  704. ddb_input_stop(input);
  705. } else if ((file->f_flags & O_ACCMODE) == O_WRONLY) {
  706. if (!output)
  707. return -EINVAL;
  708. ddb_output_stop(output);
  709. }
  710. return dvb_generic_release(inode, file);
  711. }
  712. static int ts_open(struct inode *inode, struct file *file)
  713. {
  714. int err;
  715. struct dvb_device *dvbdev = file->private_data;
  716. struct ddb_output *output = NULL;
  717. struct ddb_input *input = NULL;
  718. if (dvbdev) {
  719. output = dvbdev->priv;
  720. input = output->port->input[0];
  721. }
  722. if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
  723. if (!input)
  724. return -EINVAL;
  725. if (input->redo || input->redi)
  726. return -EBUSY;
  727. } else if ((file->f_flags & O_ACCMODE) == O_WRONLY) {
  728. if (!output)
  729. return -EINVAL;
  730. } else {
  731. return -EINVAL;
  732. }
  733. err = dvb_generic_open(inode, file);
  734. if (err < 0)
  735. return err;
  736. if ((file->f_flags & O_ACCMODE) == O_RDONLY)
  737. ddb_input_start(input);
  738. else if ((file->f_flags & O_ACCMODE) == O_WRONLY)
  739. ddb_output_start(output);
  740. return err;
  741. }
  742. static const struct file_operations ci_fops = {
  743. .owner = THIS_MODULE,
  744. .read = ts_read,
  745. .write = ts_write,
  746. .open = ts_open,
  747. .release = ts_release,
  748. .poll = ts_poll,
  749. .mmap = NULL,
  750. };
  751. static struct dvb_device dvbdev_ci = {
  752. .priv = NULL,
  753. .readers = 1,
  754. .writers = 1,
  755. .users = 2,
  756. .fops = &ci_fops,
  757. };
  758. /****************************************************************************/
  759. /****************************************************************************/
  760. static int locked_gate_ctrl(struct dvb_frontend *fe, int enable)
  761. {
  762. struct ddb_input *input = fe->sec_priv;
  763. struct ddb_port *port = input->port;
  764. struct ddb_dvb *dvb = &port->dvb[input->nr & 1];
  765. int status;
  766. if (enable) {
  767. mutex_lock(&port->i2c_gate_lock);
  768. status = dvb->i2c_gate_ctrl(fe, 1);
  769. } else {
  770. status = dvb->i2c_gate_ctrl(fe, 0);
  771. mutex_unlock(&port->i2c_gate_lock);
  772. }
  773. return status;
  774. }
  775. static int demod_attach_drxk(struct ddb_input *input)
  776. {
  777. struct i2c_adapter *i2c = &input->port->i2c->adap;
  778. struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
  779. struct device *dev = input->port->dev->dev;
  780. struct drxk_config config;
  781. memset(&config, 0, sizeof(config));
  782. config.adr = 0x29 + (input->nr & 1);
  783. config.microcode_name = "drxk_a3.mc";
  784. dvb->fe = dvb_attach(drxk_attach, &config, i2c);
  785. if (!dvb->fe) {
  786. dev_err(dev, "No DRXK found!\n");
  787. return -ENODEV;
  788. }
  789. dvb->fe->sec_priv = input;
  790. dvb->i2c_gate_ctrl = dvb->fe->ops.i2c_gate_ctrl;
  791. dvb->fe->ops.i2c_gate_ctrl = locked_gate_ctrl;
  792. return 0;
  793. }
  794. static int tuner_attach_tda18271(struct ddb_input *input)
  795. {
  796. struct i2c_adapter *i2c = &input->port->i2c->adap;
  797. struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
  798. struct device *dev = input->port->dev->dev;
  799. struct dvb_frontend *fe;
  800. if (dvb->fe->ops.i2c_gate_ctrl)
  801. dvb->fe->ops.i2c_gate_ctrl(dvb->fe, 1);
  802. fe = dvb_attach(tda18271c2dd_attach, dvb->fe, i2c, 0x60);
  803. if (dvb->fe->ops.i2c_gate_ctrl)
  804. dvb->fe->ops.i2c_gate_ctrl(dvb->fe, 0);
  805. if (!fe) {
  806. dev_err(dev, "No TDA18271 found!\n");
  807. return -ENODEV;
  808. }
  809. return 0;
  810. }
  811. /******************************************************************************/
  812. /******************************************************************************/
  813. /******************************************************************************/
  814. static struct stv0367_config ddb_stv0367_config[] = {
  815. {
  816. .demod_address = 0x1f,
  817. .xtal = 27000000,
  818. .if_khz = 0,
  819. .if_iq_mode = FE_TER_NORMAL_IF_TUNER,
  820. .ts_mode = STV0367_SERIAL_PUNCT_CLOCK,
  821. .clk_pol = STV0367_CLOCKPOLARITY_DEFAULT,
  822. }, {
  823. .demod_address = 0x1e,
  824. .xtal = 27000000,
  825. .if_khz = 0,
  826. .if_iq_mode = FE_TER_NORMAL_IF_TUNER,
  827. .ts_mode = STV0367_SERIAL_PUNCT_CLOCK,
  828. .clk_pol = STV0367_CLOCKPOLARITY_DEFAULT,
  829. },
  830. };
  831. static int demod_attach_stv0367(struct ddb_input *input)
  832. {
  833. struct i2c_adapter *i2c = &input->port->i2c->adap;
  834. struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
  835. struct device *dev = input->port->dev->dev;
  836. /* attach frontend */
  837. dvb->fe = dvb_attach(stv0367ddb_attach,
  838. &ddb_stv0367_config[(input->nr & 1)], i2c);
  839. if (!dvb->fe) {
  840. dev_err(dev, "No stv0367 found!\n");
  841. return -ENODEV;
  842. }
  843. dvb->fe->sec_priv = input;
  844. dvb->i2c_gate_ctrl = dvb->fe->ops.i2c_gate_ctrl;
  845. dvb->fe->ops.i2c_gate_ctrl = locked_gate_ctrl;
  846. return 0;
  847. }
  848. static int tuner_tda18212_ping(struct ddb_input *input, unsigned short adr)
  849. {
  850. struct i2c_adapter *adapter = &input->port->i2c->adap;
  851. struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
  852. struct device *dev = input->port->dev->dev;
  853. u8 tda_id[2];
  854. u8 subaddr = 0x00;
  855. dev_dbg(dev, "stv0367-tda18212 tuner ping\n");
  856. if (dvb->fe->ops.i2c_gate_ctrl)
  857. dvb->fe->ops.i2c_gate_ctrl(dvb->fe, 1);
  858. if (i2c_read_regs(adapter, adr, subaddr, tda_id, sizeof(tda_id)) < 0)
  859. dev_dbg(dev, "tda18212 ping 1 fail\n");
  860. if (i2c_read_regs(adapter, adr, subaddr, tda_id, sizeof(tda_id)) < 0)
  861. dev_warn(dev, "tda18212 ping failed, expect problems\n");
  862. if (dvb->fe->ops.i2c_gate_ctrl)
  863. dvb->fe->ops.i2c_gate_ctrl(dvb->fe, 0);
  864. return 0;
  865. }
  866. static int demod_attach_cxd28xx(struct ddb_input *input, int par, int osc24)
  867. {
  868. struct i2c_adapter *i2c = &input->port->i2c->adap;
  869. struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
  870. struct device *dev = input->port->dev->dev;
  871. struct cxd2841er_config cfg;
  872. /* the cxd2841er driver expects 8bit/shifted I2C addresses */
  873. cfg.i2c_addr = ((input->nr & 1) ? 0x6d : 0x6c) << 1;
  874. cfg.xtal = osc24 ? SONY_XTAL_24000 : SONY_XTAL_20500;
  875. cfg.flags = CXD2841ER_AUTO_IFHZ | CXD2841ER_EARLY_TUNE |
  876. CXD2841ER_NO_WAIT_LOCK | CXD2841ER_NO_AGCNEG |
  877. CXD2841ER_TSBITS;
  878. if (!par)
  879. cfg.flags |= CXD2841ER_TS_SERIAL;
  880. /* attach frontend */
  881. dvb->fe = dvb_attach(cxd2841er_attach_t_c, &cfg, i2c);
  882. if (!dvb->fe) {
  883. dev_err(dev, "No cxd2837/38/43/54 found!\n");
  884. return -ENODEV;
  885. }
  886. dvb->fe->sec_priv = input;
  887. dvb->i2c_gate_ctrl = dvb->fe->ops.i2c_gate_ctrl;
  888. dvb->fe->ops.i2c_gate_ctrl = locked_gate_ctrl;
  889. return 0;
  890. }
  891. static int tuner_attach_tda18212(struct ddb_input *input, u32 porttype)
  892. {
  893. struct i2c_adapter *adapter = &input->port->i2c->adap;
  894. struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
  895. struct device *dev = input->port->dev->dev;
  896. struct i2c_client *client;
  897. struct tda18212_config config = {
  898. .fe = dvb->fe,
  899. .if_dvbt_6 = 3550,
  900. .if_dvbt_7 = 3700,
  901. .if_dvbt_8 = 4150,
  902. .if_dvbt2_6 = 3250,
  903. .if_dvbt2_7 = 4000,
  904. .if_dvbt2_8 = 4000,
  905. .if_dvbc = 5000,
  906. };
  907. u8 addr = (input->nr & 1) ? 0x63 : 0x60;
  908. /* due to a hardware quirk with the I2C gate on the stv0367+tda18212
  909. * combo, the tda18212 must be probed by reading it's id _twice_ when
  910. * cold started, or it very likely will fail.
  911. */
  912. if (porttype == DDB_TUNER_DVBCT_ST)
  913. tuner_tda18212_ping(input, addr);
  914. /* perform tuner probe/init/attach */
  915. client = dvb_module_probe("tda18212", NULL, adapter, addr, &config);
  916. if (!client)
  917. goto err;
  918. dvb->i2c_client[0] = client;
  919. return 0;
  920. err:
  921. dev_err(dev, "TDA18212 tuner not found. Device is not fully operational.\n");
  922. return -ENODEV;
  923. }
  924. /****************************************************************************/
  925. /****************************************************************************/
  926. /****************************************************************************/
  927. static struct stv090x_config stv0900 = {
  928. .device = STV0900,
  929. .demod_mode = STV090x_DUAL,
  930. .clk_mode = STV090x_CLK_EXT,
  931. .xtal = 27000000,
  932. .address = 0x69,
  933. .ts1_mode = STV090x_TSMODE_SERIAL_PUNCTURED,
  934. .ts2_mode = STV090x_TSMODE_SERIAL_PUNCTURED,
  935. .ts1_tei = 1,
  936. .ts2_tei = 1,
  937. .repeater_level = STV090x_RPTLEVEL_16,
  938. .adc1_range = STV090x_ADC_1Vpp,
  939. .adc2_range = STV090x_ADC_1Vpp,
  940. .diseqc_envelope_mode = true,
  941. };
  942. static struct stv090x_config stv0900_aa = {
  943. .device = STV0900,
  944. .demod_mode = STV090x_DUAL,
  945. .clk_mode = STV090x_CLK_EXT,
  946. .xtal = 27000000,
  947. .address = 0x68,
  948. .ts1_mode = STV090x_TSMODE_SERIAL_PUNCTURED,
  949. .ts2_mode = STV090x_TSMODE_SERIAL_PUNCTURED,
  950. .ts1_tei = 1,
  951. .ts2_tei = 1,
  952. .repeater_level = STV090x_RPTLEVEL_16,
  953. .adc1_range = STV090x_ADC_1Vpp,
  954. .adc2_range = STV090x_ADC_1Vpp,
  955. .diseqc_envelope_mode = true,
  956. };
  957. static struct stv6110x_config stv6110a = {
  958. .addr = 0x60,
  959. .refclk = 27000000,
  960. .clk_div = 1,
  961. };
  962. static struct stv6110x_config stv6110b = {
  963. .addr = 0x63,
  964. .refclk = 27000000,
  965. .clk_div = 1,
  966. };
  967. static int demod_attach_stv0900(struct ddb_input *input, int type)
  968. {
  969. struct i2c_adapter *i2c = &input->port->i2c->adap;
  970. struct stv090x_config *feconf = type ? &stv0900_aa : &stv0900;
  971. struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
  972. struct device *dev = input->port->dev->dev;
  973. dvb->fe = dvb_attach(stv090x_attach, feconf, i2c,
  974. (input->nr & 1) ? STV090x_DEMODULATOR_1
  975. : STV090x_DEMODULATOR_0);
  976. if (!dvb->fe) {
  977. dev_err(dev, "No STV0900 found!\n");
  978. return -ENODEV;
  979. }
  980. if (!dvb_attach(lnbh24_attach, dvb->fe, i2c, 0,
  981. 0, (input->nr & 1) ?
  982. (0x09 - type) : (0x0b - type))) {
  983. dev_err(dev, "No LNBH24 found!\n");
  984. dvb_frontend_detach(dvb->fe);
  985. return -ENODEV;
  986. }
  987. return 0;
  988. }
  989. static int tuner_attach_stv6110(struct ddb_input *input, int type)
  990. {
  991. struct i2c_adapter *i2c = &input->port->i2c->adap;
  992. struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
  993. struct device *dev = input->port->dev->dev;
  994. struct stv090x_config *feconf = type ? &stv0900_aa : &stv0900;
  995. struct stv6110x_config *tunerconf = (input->nr & 1) ?
  996. &stv6110b : &stv6110a;
  997. const struct stv6110x_devctl *ctl;
  998. ctl = dvb_attach(stv6110x_attach, dvb->fe, tunerconf, i2c);
  999. if (!ctl) {
  1000. dev_err(dev, "No STV6110X found!\n");
  1001. return -ENODEV;
  1002. }
  1003. dev_info(dev, "attach tuner input %d adr %02x\n",
  1004. input->nr, tunerconf->addr);
  1005. feconf->tuner_init = ctl->tuner_init;
  1006. feconf->tuner_sleep = ctl->tuner_sleep;
  1007. feconf->tuner_set_mode = ctl->tuner_set_mode;
  1008. feconf->tuner_set_frequency = ctl->tuner_set_frequency;
  1009. feconf->tuner_get_frequency = ctl->tuner_get_frequency;
  1010. feconf->tuner_set_bandwidth = ctl->tuner_set_bandwidth;
  1011. feconf->tuner_get_bandwidth = ctl->tuner_get_bandwidth;
  1012. feconf->tuner_set_bbgain = ctl->tuner_set_bbgain;
  1013. feconf->tuner_get_bbgain = ctl->tuner_get_bbgain;
  1014. feconf->tuner_set_refclk = ctl->tuner_set_refclk;
  1015. feconf->tuner_get_status = ctl->tuner_get_status;
  1016. return 0;
  1017. }
  1018. static const struct stv0910_cfg stv0910_p = {
  1019. .adr = 0x68,
  1020. .parallel = 1,
  1021. .rptlvl = 4,
  1022. .clk = 30000000,
  1023. };
  1024. static const struct lnbh25_config lnbh25_cfg = {
  1025. .i2c_address = 0x0c << 1,
  1026. .data2_config = LNBH25_TEN
  1027. };
  1028. static int demod_attach_stv0910(struct ddb_input *input, int type)
  1029. {
  1030. struct i2c_adapter *i2c = &input->port->i2c->adap;
  1031. struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
  1032. struct device *dev = input->port->dev->dev;
  1033. struct stv0910_cfg cfg = stv0910_p;
  1034. struct lnbh25_config lnbcfg = lnbh25_cfg;
  1035. if (stv0910_single)
  1036. cfg.single = 1;
  1037. if (type)
  1038. cfg.parallel = 2;
  1039. dvb->fe = dvb_attach(stv0910_attach, i2c, &cfg, (input->nr & 1));
  1040. if (!dvb->fe) {
  1041. cfg.adr = 0x6c;
  1042. dvb->fe = dvb_attach(stv0910_attach, i2c,
  1043. &cfg, (input->nr & 1));
  1044. }
  1045. if (!dvb->fe) {
  1046. dev_err(dev, "No STV0910 found!\n");
  1047. return -ENODEV;
  1048. }
  1049. /* attach lnbh25 - leftshift by one as the lnbh25 driver expects 8bit
  1050. * i2c addresses
  1051. */
  1052. lnbcfg.i2c_address = (((input->nr & 1) ? 0x0d : 0x0c) << 1);
  1053. if (!dvb_attach(lnbh25_attach, dvb->fe, &lnbcfg, i2c)) {
  1054. lnbcfg.i2c_address = (((input->nr & 1) ? 0x09 : 0x08) << 1);
  1055. if (!dvb_attach(lnbh25_attach, dvb->fe, &lnbcfg, i2c)) {
  1056. dev_err(dev, "No LNBH25 found!\n");
  1057. dvb_frontend_detach(dvb->fe);
  1058. return -ENODEV;
  1059. }
  1060. }
  1061. return 0;
  1062. }
  1063. static int tuner_attach_stv6111(struct ddb_input *input, int type)
  1064. {
  1065. struct i2c_adapter *i2c = &input->port->i2c->adap;
  1066. struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
  1067. struct device *dev = input->port->dev->dev;
  1068. struct dvb_frontend *fe;
  1069. u8 adr = (type ? 0 : 4) + ((input->nr & 1) ? 0x63 : 0x60);
  1070. fe = dvb_attach(stv6111_attach, dvb->fe, i2c, adr);
  1071. if (!fe) {
  1072. fe = dvb_attach(stv6111_attach, dvb->fe, i2c, adr & ~4);
  1073. if (!fe) {
  1074. dev_err(dev, "No STV6111 found at 0x%02x!\n", adr);
  1075. return -ENODEV;
  1076. }
  1077. }
  1078. return 0;
  1079. }
  1080. static int demod_attach_dummy(struct ddb_input *input)
  1081. {
  1082. struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
  1083. struct device *dev = input->port->dev->dev;
  1084. dvb->fe = dvb_attach(dvb_dummy_fe_qam_attach);
  1085. if (!dvb->fe) {
  1086. dev_err(dev, "QAM dummy attach failed!\n");
  1087. return -ENODEV;
  1088. }
  1089. return 0;
  1090. }
  1091. static int start_feed(struct dvb_demux_feed *dvbdmxfeed)
  1092. {
  1093. struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
  1094. struct ddb_input *input = dvbdmx->priv;
  1095. struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
  1096. if (!dvb->users)
  1097. ddb_input_start_all(input);
  1098. return ++dvb->users;
  1099. }
  1100. static int stop_feed(struct dvb_demux_feed *dvbdmxfeed)
  1101. {
  1102. struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
  1103. struct ddb_input *input = dvbdmx->priv;
  1104. struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
  1105. if (--dvb->users)
  1106. return dvb->users;
  1107. ddb_input_stop_all(input);
  1108. return 0;
  1109. }
  1110. static void dvb_input_detach(struct ddb_input *input)
  1111. {
  1112. struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
  1113. struct dvb_demux *dvbdemux = &dvb->demux;
  1114. switch (dvb->attached) {
  1115. case 0x31:
  1116. if (dvb->fe2)
  1117. dvb_unregister_frontend(dvb->fe2);
  1118. if (dvb->fe)
  1119. dvb_unregister_frontend(dvb->fe);
  1120. /* fallthrough */
  1121. case 0x30:
  1122. dvb_module_release(dvb->i2c_client[0]);
  1123. dvb->i2c_client[0] = NULL;
  1124. if (dvb->fe2)
  1125. dvb_frontend_detach(dvb->fe2);
  1126. if (dvb->fe)
  1127. dvb_frontend_detach(dvb->fe);
  1128. dvb->fe = NULL;
  1129. dvb->fe2 = NULL;
  1130. /* fallthrough */
  1131. case 0x20:
  1132. dvb_net_release(&dvb->dvbnet);
  1133. /* fallthrough */
  1134. case 0x12:
  1135. dvbdemux->dmx.remove_frontend(&dvbdemux->dmx,
  1136. &dvb->hw_frontend);
  1137. dvbdemux->dmx.remove_frontend(&dvbdemux->dmx,
  1138. &dvb->mem_frontend);
  1139. /* fallthrough */
  1140. case 0x11:
  1141. dvb_dmxdev_release(&dvb->dmxdev);
  1142. /* fallthrough */
  1143. case 0x10:
  1144. dvb_dmx_release(&dvb->demux);
  1145. /* fallthrough */
  1146. case 0x01:
  1147. break;
  1148. }
  1149. dvb->attached = 0x00;
  1150. }
  1151. static int dvb_register_adapters(struct ddb *dev)
  1152. {
  1153. int i, ret = 0;
  1154. struct ddb_port *port;
  1155. struct dvb_adapter *adap;
  1156. if (adapter_alloc == 3) {
  1157. port = &dev->port[0];
  1158. adap = port->dvb[0].adap;
  1159. ret = dvb_register_adapter(adap, "DDBridge", THIS_MODULE,
  1160. port->dev->dev,
  1161. adapter_nr);
  1162. if (ret < 0)
  1163. return ret;
  1164. port->dvb[0].adap_registered = 1;
  1165. for (i = 0; i < dev->port_num; i++) {
  1166. port = &dev->port[i];
  1167. port->dvb[0].adap = adap;
  1168. port->dvb[1].adap = adap;
  1169. }
  1170. return 0;
  1171. }
  1172. for (i = 0; i < dev->port_num; i++) {
  1173. port = &dev->port[i];
  1174. switch (port->class) {
  1175. case DDB_PORT_TUNER:
  1176. adap = port->dvb[0].adap;
  1177. ret = dvb_register_adapter(adap, "DDBridge",
  1178. THIS_MODULE,
  1179. port->dev->dev,
  1180. adapter_nr);
  1181. if (ret < 0)
  1182. return ret;
  1183. port->dvb[0].adap_registered = 1;
  1184. if (adapter_alloc > 0) {
  1185. port->dvb[1].adap = port->dvb[0].adap;
  1186. break;
  1187. }
  1188. adap = port->dvb[1].adap;
  1189. ret = dvb_register_adapter(adap, "DDBridge",
  1190. THIS_MODULE,
  1191. port->dev->dev,
  1192. adapter_nr);
  1193. if (ret < 0)
  1194. return ret;
  1195. port->dvb[1].adap_registered = 1;
  1196. break;
  1197. case DDB_PORT_CI:
  1198. case DDB_PORT_LOOP:
  1199. adap = port->dvb[0].adap;
  1200. ret = dvb_register_adapter(adap, "DDBridge",
  1201. THIS_MODULE,
  1202. port->dev->dev,
  1203. adapter_nr);
  1204. if (ret < 0)
  1205. return ret;
  1206. port->dvb[0].adap_registered = 1;
  1207. break;
  1208. default:
  1209. if (adapter_alloc < 2)
  1210. break;
  1211. adap = port->dvb[0].adap;
  1212. ret = dvb_register_adapter(adap, "DDBridge",
  1213. THIS_MODULE,
  1214. port->dev->dev,
  1215. adapter_nr);
  1216. if (ret < 0)
  1217. return ret;
  1218. port->dvb[0].adap_registered = 1;
  1219. break;
  1220. }
  1221. }
  1222. return ret;
  1223. }
  1224. static void dvb_unregister_adapters(struct ddb *dev)
  1225. {
  1226. int i;
  1227. struct ddb_port *port;
  1228. struct ddb_dvb *dvb;
  1229. for (i = 0; i < dev->link[0].info->port_num; i++) {
  1230. port = &dev->port[i];
  1231. dvb = &port->dvb[0];
  1232. if (dvb->adap_registered)
  1233. dvb_unregister_adapter(dvb->adap);
  1234. dvb->adap_registered = 0;
  1235. dvb = &port->dvb[1];
  1236. if (dvb->adap_registered)
  1237. dvb_unregister_adapter(dvb->adap);
  1238. dvb->adap_registered = 0;
  1239. }
  1240. }
  1241. static int dvb_input_attach(struct ddb_input *input)
  1242. {
  1243. int ret = 0;
  1244. struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1];
  1245. struct ddb_port *port = input->port;
  1246. struct dvb_adapter *adap = dvb->adap;
  1247. struct dvb_demux *dvbdemux = &dvb->demux;
  1248. int par = 0, osc24 = 0;
  1249. dvb->attached = 0x01;
  1250. dvbdemux->priv = input;
  1251. dvbdemux->dmx.capabilities = DMX_TS_FILTERING |
  1252. DMX_SECTION_FILTERING | DMX_MEMORY_BASED_FILTERING;
  1253. dvbdemux->start_feed = start_feed;
  1254. dvbdemux->stop_feed = stop_feed;
  1255. dvbdemux->filternum = 256;
  1256. dvbdemux->feednum = 256;
  1257. ret = dvb_dmx_init(dvbdemux);
  1258. if (ret < 0)
  1259. return ret;
  1260. dvb->attached = 0x10;
  1261. dvb->dmxdev.filternum = 256;
  1262. dvb->dmxdev.demux = &dvbdemux->dmx;
  1263. ret = dvb_dmxdev_init(&dvb->dmxdev, adap);
  1264. if (ret < 0)
  1265. goto err_detach;
  1266. dvb->attached = 0x11;
  1267. dvb->mem_frontend.source = DMX_MEMORY_FE;
  1268. dvb->demux.dmx.add_frontend(&dvb->demux.dmx, &dvb->mem_frontend);
  1269. dvb->hw_frontend.source = DMX_FRONTEND_0;
  1270. dvb->demux.dmx.add_frontend(&dvb->demux.dmx, &dvb->hw_frontend);
  1271. ret = dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, &dvb->hw_frontend);
  1272. if (ret < 0)
  1273. goto err_detach;
  1274. dvb->attached = 0x12;
  1275. ret = dvb_net_init(adap, &dvb->dvbnet, dvb->dmxdev.demux);
  1276. if (ret < 0)
  1277. goto err_detach;
  1278. dvb->attached = 0x20;
  1279. dvb->fe = NULL;
  1280. dvb->fe2 = NULL;
  1281. switch (port->type) {
  1282. case DDB_TUNER_MXL5XX:
  1283. if (ddb_fe_attach_mxl5xx(input) < 0)
  1284. goto err_detach;
  1285. break;
  1286. case DDB_TUNER_DVBS_ST:
  1287. if (demod_attach_stv0900(input, 0) < 0)
  1288. goto err_detach;
  1289. if (tuner_attach_stv6110(input, 0) < 0)
  1290. goto err_tuner;
  1291. break;
  1292. case DDB_TUNER_DVBS_ST_AA:
  1293. if (demod_attach_stv0900(input, 1) < 0)
  1294. goto err_detach;
  1295. if (tuner_attach_stv6110(input, 1) < 0)
  1296. goto err_tuner;
  1297. break;
  1298. case DDB_TUNER_DVBS_STV0910:
  1299. if (demod_attach_stv0910(input, 0) < 0)
  1300. goto err_detach;
  1301. if (tuner_attach_stv6111(input, 0) < 0)
  1302. goto err_tuner;
  1303. break;
  1304. case DDB_TUNER_DVBS_STV0910_PR:
  1305. if (demod_attach_stv0910(input, 1) < 0)
  1306. goto err_detach;
  1307. if (tuner_attach_stv6111(input, 1) < 0)
  1308. goto err_tuner;
  1309. break;
  1310. case DDB_TUNER_DVBS_STV0910_P:
  1311. if (demod_attach_stv0910(input, 0) < 0)
  1312. goto err_detach;
  1313. if (tuner_attach_stv6111(input, 1) < 0)
  1314. goto err_tuner;
  1315. break;
  1316. case DDB_TUNER_DVBCT_TR:
  1317. if (demod_attach_drxk(input) < 0)
  1318. goto err_detach;
  1319. if (tuner_attach_tda18271(input) < 0)
  1320. goto err_tuner;
  1321. break;
  1322. case DDB_TUNER_DVBCT_ST:
  1323. if (demod_attach_stv0367(input) < 0)
  1324. goto err_detach;
  1325. if (tuner_attach_tda18212(input, port->type) < 0)
  1326. goto err_tuner;
  1327. break;
  1328. case DDB_TUNER_DVBC2T2I_SONY_P:
  1329. if (input->port->dev->link[input->port->lnr].info->ts_quirks &
  1330. TS_QUIRK_ALT_OSC)
  1331. osc24 = 0;
  1332. else
  1333. osc24 = 1;
  1334. /* fall-through */
  1335. case DDB_TUNER_DVBCT2_SONY_P:
  1336. case DDB_TUNER_DVBC2T2_SONY_P:
  1337. case DDB_TUNER_ISDBT_SONY_P:
  1338. if (input->port->dev->link[input->port->lnr].info->ts_quirks
  1339. & TS_QUIRK_SERIAL)
  1340. par = 0;
  1341. else
  1342. par = 1;
  1343. if (demod_attach_cxd28xx(input, par, osc24) < 0)
  1344. goto err_detach;
  1345. if (tuner_attach_tda18212(input, port->type) < 0)
  1346. goto err_tuner;
  1347. break;
  1348. case DDB_TUNER_DVBC2T2I_SONY:
  1349. osc24 = 1;
  1350. /* fall-through */
  1351. case DDB_TUNER_DVBCT2_SONY:
  1352. case DDB_TUNER_DVBC2T2_SONY:
  1353. case DDB_TUNER_ISDBT_SONY:
  1354. if (demod_attach_cxd28xx(input, 0, osc24) < 0)
  1355. goto err_detach;
  1356. if (tuner_attach_tda18212(input, port->type) < 0)
  1357. goto err_tuner;
  1358. break;
  1359. case DDB_TUNER_DUMMY:
  1360. if (demod_attach_dummy(input) < 0)
  1361. goto err_detach;
  1362. break;
  1363. case DDB_TUNER_MCI:
  1364. if (ddb_fe_attach_mci(input) < 0)
  1365. goto err_detach;
  1366. break;
  1367. default:
  1368. return 0;
  1369. }
  1370. dvb->attached = 0x30;
  1371. if (dvb->fe) {
  1372. if (dvb_register_frontend(adap, dvb->fe) < 0)
  1373. goto err_detach;
  1374. if (dvb->fe2) {
  1375. if (dvb_register_frontend(adap, dvb->fe2) < 0) {
  1376. dvb_unregister_frontend(dvb->fe);
  1377. goto err_detach;
  1378. }
  1379. dvb->fe2->tuner_priv = dvb->fe->tuner_priv;
  1380. memcpy(&dvb->fe2->ops.tuner_ops,
  1381. &dvb->fe->ops.tuner_ops,
  1382. sizeof(struct dvb_tuner_ops));
  1383. }
  1384. }
  1385. dvb->attached = 0x31;
  1386. return 0;
  1387. err_tuner:
  1388. dev_err(port->dev->dev, "tuner attach failed!\n");
  1389. if (dvb->fe2)
  1390. dvb_frontend_detach(dvb->fe2);
  1391. if (dvb->fe)
  1392. dvb_frontend_detach(dvb->fe);
  1393. err_detach:
  1394. dvb_input_detach(input);
  1395. /* return error from ret if set */
  1396. if (ret < 0)
  1397. return ret;
  1398. return -ENODEV;
  1399. }
  1400. static int port_has_encti(struct ddb_port *port)
  1401. {
  1402. struct device *dev = port->dev->dev;
  1403. u8 val;
  1404. int ret = i2c_read_reg(&port->i2c->adap, 0x20, 0, &val);
  1405. if (!ret)
  1406. dev_info(dev, "[0x20]=0x%02x\n", val);
  1407. return ret ? 0 : 1;
  1408. }
  1409. static int port_has_cxd(struct ddb_port *port, u8 *type)
  1410. {
  1411. u8 val;
  1412. u8 probe[4] = { 0xe0, 0x00, 0x00, 0x00 }, data[4];
  1413. struct i2c_msg msgs[2] = {{ .addr = 0x40, .flags = 0,
  1414. .buf = probe, .len = 4 },
  1415. { .addr = 0x40, .flags = I2C_M_RD,
  1416. .buf = data, .len = 4 } };
  1417. val = i2c_transfer(&port->i2c->adap, msgs, 2);
  1418. if (val != 2)
  1419. return 0;
  1420. if (data[0] == 0x02 && data[1] == 0x2b && data[3] == 0x43)
  1421. *type = 2;
  1422. else
  1423. *type = 1;
  1424. return 1;
  1425. }
  1426. static int port_has_xo2(struct ddb_port *port, u8 *type, u8 *id)
  1427. {
  1428. u8 probe[1] = { 0x00 }, data[4];
  1429. if (i2c_io(&port->i2c->adap, 0x10, probe, 1, data, 4))
  1430. return 0;
  1431. if (data[0] == 'D' && data[1] == 'F') {
  1432. *id = data[2];
  1433. *type = 1;
  1434. return 1;
  1435. }
  1436. if (data[0] == 'C' && data[1] == 'I') {
  1437. *id = data[2];
  1438. *type = 2;
  1439. return 1;
  1440. }
  1441. return 0;
  1442. }
  1443. static int port_has_stv0900(struct ddb_port *port)
  1444. {
  1445. u8 val;
  1446. if (i2c_read_reg16(&port->i2c->adap, 0x69, 0xf100, &val) < 0)
  1447. return 0;
  1448. return 1;
  1449. }
  1450. static int port_has_stv0900_aa(struct ddb_port *port, u8 *id)
  1451. {
  1452. if (i2c_read_reg16(&port->i2c->adap, 0x68, 0xf100, id) < 0)
  1453. return 0;
  1454. return 1;
  1455. }
  1456. static int port_has_drxks(struct ddb_port *port)
  1457. {
  1458. u8 val;
  1459. if (i2c_read(&port->i2c->adap, 0x29, &val) < 0)
  1460. return 0;
  1461. if (i2c_read(&port->i2c->adap, 0x2a, &val) < 0)
  1462. return 0;
  1463. return 1;
  1464. }
  1465. static int port_has_stv0367(struct ddb_port *port)
  1466. {
  1467. u8 val;
  1468. if (i2c_read_reg16(&port->i2c->adap, 0x1e, 0xf000, &val) < 0)
  1469. return 0;
  1470. if (val != 0x60)
  1471. return 0;
  1472. if (i2c_read_reg16(&port->i2c->adap, 0x1f, 0xf000, &val) < 0)
  1473. return 0;
  1474. if (val != 0x60)
  1475. return 0;
  1476. return 1;
  1477. }
  1478. static int init_xo2(struct ddb_port *port)
  1479. {
  1480. struct i2c_adapter *i2c = &port->i2c->adap;
  1481. struct ddb *dev = port->dev;
  1482. u8 val, data[2];
  1483. int res;
  1484. res = i2c_read_regs(i2c, 0x10, 0x04, data, 2);
  1485. if (res < 0)
  1486. return res;
  1487. if (data[0] != 0x01) {
  1488. dev_info(dev->dev, "Port %d: invalid XO2\n", port->nr);
  1489. return -1;
  1490. }
  1491. i2c_read_reg(i2c, 0x10, 0x08, &val);
  1492. if (val != 0) {
  1493. i2c_write_reg(i2c, 0x10, 0x08, 0x00);
  1494. msleep(100);
  1495. }
  1496. /* Enable tuner power, disable pll, reset demods */
  1497. i2c_write_reg(i2c, 0x10, 0x08, 0x04);
  1498. usleep_range(2000, 3000);
  1499. /* Release demod resets */
  1500. i2c_write_reg(i2c, 0x10, 0x08, 0x07);
  1501. /* speed: 0=55,1=75,2=90,3=104 MBit/s */
  1502. i2c_write_reg(i2c, 0x10, 0x09, xo2_speed);
  1503. if (dev->link[port->lnr].info->con_clock) {
  1504. dev_info(dev->dev, "Setting continuous clock for XO2\n");
  1505. i2c_write_reg(i2c, 0x10, 0x0a, 0x03);
  1506. i2c_write_reg(i2c, 0x10, 0x0b, 0x03);
  1507. } else {
  1508. i2c_write_reg(i2c, 0x10, 0x0a, 0x01);
  1509. i2c_write_reg(i2c, 0x10, 0x0b, 0x01);
  1510. }
  1511. usleep_range(2000, 3000);
  1512. /* Start XO2 PLL */
  1513. i2c_write_reg(i2c, 0x10, 0x08, 0x87);
  1514. return 0;
  1515. }
  1516. static int init_xo2_ci(struct ddb_port *port)
  1517. {
  1518. struct i2c_adapter *i2c = &port->i2c->adap;
  1519. struct ddb *dev = port->dev;
  1520. u8 val, data[2];
  1521. int res;
  1522. res = i2c_read_regs(i2c, 0x10, 0x04, data, 2);
  1523. if (res < 0)
  1524. return res;
  1525. if (data[0] > 1) {
  1526. dev_info(dev->dev, "Port %d: invalid XO2 CI %02x\n",
  1527. port->nr, data[0]);
  1528. return -1;
  1529. }
  1530. dev_info(dev->dev, "Port %d: DuoFlex CI %u.%u\n",
  1531. port->nr, data[0], data[1]);
  1532. i2c_read_reg(i2c, 0x10, 0x08, &val);
  1533. if (val != 0) {
  1534. i2c_write_reg(i2c, 0x10, 0x08, 0x00);
  1535. msleep(100);
  1536. }
  1537. /* Enable both CI */
  1538. i2c_write_reg(i2c, 0x10, 0x08, 3);
  1539. usleep_range(2000, 3000);
  1540. /* speed: 0=55,1=75,2=90,3=104 MBit/s */
  1541. i2c_write_reg(i2c, 0x10, 0x09, 1);
  1542. i2c_write_reg(i2c, 0x10, 0x08, 0x83);
  1543. usleep_range(2000, 3000);
  1544. if (dev->link[port->lnr].info->con_clock) {
  1545. dev_info(dev->dev, "Setting continuous clock for DuoFlex CI\n");
  1546. i2c_write_reg(i2c, 0x10, 0x0a, 0x03);
  1547. i2c_write_reg(i2c, 0x10, 0x0b, 0x03);
  1548. } else {
  1549. i2c_write_reg(i2c, 0x10, 0x0a, 0x01);
  1550. i2c_write_reg(i2c, 0x10, 0x0b, 0x01);
  1551. }
  1552. return 0;
  1553. }
  1554. static int port_has_cxd28xx(struct ddb_port *port, u8 *id)
  1555. {
  1556. struct i2c_adapter *i2c = &port->i2c->adap;
  1557. int status;
  1558. status = i2c_write_reg(&port->i2c->adap, 0x6e, 0, 0);
  1559. if (status)
  1560. return 0;
  1561. status = i2c_read_reg(i2c, 0x6e, 0xfd, id);
  1562. if (status)
  1563. return 0;
  1564. return 1;
  1565. }
  1566. static char *xo2names[] = {
  1567. "DUAL DVB-S2", "DUAL DVB-C/T/T2",
  1568. "DUAL DVB-ISDBT", "DUAL DVB-C/C2/T/T2",
  1569. "DUAL ATSC", "DUAL DVB-C/C2/T/T2,ISDB-T",
  1570. "", ""
  1571. };
  1572. static char *xo2types[] = {
  1573. "DVBS_ST", "DVBCT2_SONY",
  1574. "ISDBT_SONY", "DVBC2T2_SONY",
  1575. "ATSC_ST", "DVBC2T2I_SONY"
  1576. };
  1577. static void ddb_port_probe(struct ddb_port *port)
  1578. {
  1579. struct ddb *dev = port->dev;
  1580. u32 l = port->lnr;
  1581. u8 id, type;
  1582. port->name = "NO MODULE";
  1583. port->type_name = "NONE";
  1584. port->class = DDB_PORT_NONE;
  1585. /* Handle missing ports and ports without I2C */
  1586. if (dummy_tuner && !port->nr &&
  1587. dev->link[0].ids.device == 0x0005) {
  1588. port->name = "DUMMY";
  1589. port->class = DDB_PORT_TUNER;
  1590. port->type = DDB_TUNER_DUMMY;
  1591. port->type_name = "DUMMY";
  1592. return;
  1593. }
  1594. if (port->nr == ts_loop) {
  1595. port->name = "TS LOOP";
  1596. port->class = DDB_PORT_LOOP;
  1597. return;
  1598. }
  1599. if (port->nr == 1 && dev->link[l].info->type == DDB_OCTOPUS_CI &&
  1600. dev->link[l].info->i2c_mask == 1) {
  1601. port->name = "NO TAB";
  1602. port->class = DDB_PORT_NONE;
  1603. return;
  1604. }
  1605. if (dev->link[l].info->type == DDB_OCTOPUS_MAX) {
  1606. port->name = "DUAL DVB-S2 MAX";
  1607. port->type_name = "MXL5XX";
  1608. port->class = DDB_PORT_TUNER;
  1609. port->type = DDB_TUNER_MXL5XX;
  1610. if (port->i2c)
  1611. ddbwritel(dev, I2C_SPEED_400,
  1612. port->i2c->regs + I2C_TIMING);
  1613. return;
  1614. }
  1615. if (dev->link[l].info->type == DDB_OCTOPUS_MCI) {
  1616. if (port->nr >= dev->link[l].info->mci)
  1617. return;
  1618. port->name = "DUAL MCI";
  1619. port->type_name = "MCI";
  1620. port->class = DDB_PORT_TUNER;
  1621. port->type = DDB_TUNER_MCI;
  1622. return;
  1623. }
  1624. if (port->nr > 1 && dev->link[l].info->type == DDB_OCTOPUS_CI) {
  1625. port->name = "CI internal";
  1626. port->type_name = "INTERNAL";
  1627. port->class = DDB_PORT_CI;
  1628. port->type = DDB_CI_INTERNAL;
  1629. }
  1630. if (!port->i2c)
  1631. return;
  1632. /* Probe ports with I2C */
  1633. if (port_has_cxd(port, &id)) {
  1634. if (id == 1) {
  1635. port->name = "CI";
  1636. port->type_name = "CXD2099";
  1637. port->class = DDB_PORT_CI;
  1638. port->type = DDB_CI_EXTERNAL_SONY;
  1639. ddbwritel(dev, I2C_SPEED_400,
  1640. port->i2c->regs + I2C_TIMING);
  1641. } else {
  1642. dev_info(dev->dev, "Port %d: Uninitialized DuoFlex\n",
  1643. port->nr);
  1644. return;
  1645. }
  1646. } else if (port_has_xo2(port, &type, &id)) {
  1647. ddbwritel(dev, I2C_SPEED_400, port->i2c->regs + I2C_TIMING);
  1648. /*dev_info(dev->dev, "XO2 ID %02x\n", id);*/
  1649. if (type == 2) {
  1650. port->name = "DuoFlex CI";
  1651. port->class = DDB_PORT_CI;
  1652. port->type = DDB_CI_EXTERNAL_XO2;
  1653. port->type_name = "CI_XO2";
  1654. init_xo2_ci(port);
  1655. return;
  1656. }
  1657. id >>= 2;
  1658. if (id > 5) {
  1659. port->name = "unknown XO2 DuoFlex";
  1660. port->type_name = "UNKNOWN";
  1661. } else {
  1662. port->name = xo2names[id];
  1663. port->class = DDB_PORT_TUNER;
  1664. port->type = DDB_TUNER_XO2 + id;
  1665. port->type_name = xo2types[id];
  1666. init_xo2(port);
  1667. }
  1668. } else if (port_has_cxd28xx(port, &id)) {
  1669. switch (id) {
  1670. case 0xa4:
  1671. port->name = "DUAL DVB-C2T2 CXD2843";
  1672. port->type = DDB_TUNER_DVBC2T2_SONY_P;
  1673. port->type_name = "DVBC2T2_SONY";
  1674. break;
  1675. case 0xb1:
  1676. port->name = "DUAL DVB-CT2 CXD2837";
  1677. port->type = DDB_TUNER_DVBCT2_SONY_P;
  1678. port->type_name = "DVBCT2_SONY";
  1679. break;
  1680. case 0xb0:
  1681. port->name = "DUAL ISDB-T CXD2838";
  1682. port->type = DDB_TUNER_ISDBT_SONY_P;
  1683. port->type_name = "ISDBT_SONY";
  1684. break;
  1685. case 0xc1:
  1686. port->name = "DUAL DVB-C2T2 ISDB-T CXD2854";
  1687. port->type = DDB_TUNER_DVBC2T2I_SONY_P;
  1688. port->type_name = "DVBC2T2I_ISDBT_SONY";
  1689. break;
  1690. default:
  1691. return;
  1692. }
  1693. port->class = DDB_PORT_TUNER;
  1694. ddbwritel(dev, I2C_SPEED_400, port->i2c->regs + I2C_TIMING);
  1695. } else if (port_has_stv0900(port)) {
  1696. port->name = "DUAL DVB-S2";
  1697. port->class = DDB_PORT_TUNER;
  1698. port->type = DDB_TUNER_DVBS_ST;
  1699. port->type_name = "DVBS_ST";
  1700. ddbwritel(dev, I2C_SPEED_100, port->i2c->regs + I2C_TIMING);
  1701. } else if (port_has_stv0900_aa(port, &id)) {
  1702. port->name = "DUAL DVB-S2";
  1703. port->class = DDB_PORT_TUNER;
  1704. if (id == 0x51) {
  1705. if (port->nr == 0 &&
  1706. dev->link[l].info->ts_quirks & TS_QUIRK_REVERSED)
  1707. port->type = DDB_TUNER_DVBS_STV0910_PR;
  1708. else
  1709. port->type = DDB_TUNER_DVBS_STV0910_P;
  1710. port->type_name = "DVBS_ST_0910";
  1711. } else {
  1712. port->type = DDB_TUNER_DVBS_ST_AA;
  1713. port->type_name = "DVBS_ST_AA";
  1714. }
  1715. ddbwritel(dev, I2C_SPEED_100, port->i2c->regs + I2C_TIMING);
  1716. } else if (port_has_drxks(port)) {
  1717. port->name = "DUAL DVB-C/T";
  1718. port->class = DDB_PORT_TUNER;
  1719. port->type = DDB_TUNER_DVBCT_TR;
  1720. port->type_name = "DVBCT_TR";
  1721. ddbwritel(dev, I2C_SPEED_400, port->i2c->regs + I2C_TIMING);
  1722. } else if (port_has_stv0367(port)) {
  1723. port->name = "DUAL DVB-C/T";
  1724. port->class = DDB_PORT_TUNER;
  1725. port->type = DDB_TUNER_DVBCT_ST;
  1726. port->type_name = "DVBCT_ST";
  1727. ddbwritel(dev, I2C_SPEED_100, port->i2c->regs + I2C_TIMING);
  1728. } else if (port_has_encti(port)) {
  1729. port->name = "ENCTI";
  1730. port->class = DDB_PORT_LOOP;
  1731. }
  1732. }
  1733. /****************************************************************************/
  1734. /****************************************************************************/
  1735. /****************************************************************************/
  1736. static int ddb_port_attach(struct ddb_port *port)
  1737. {
  1738. int ret = 0;
  1739. switch (port->class) {
  1740. case DDB_PORT_TUNER:
  1741. ret = dvb_input_attach(port->input[0]);
  1742. if (ret < 0)
  1743. break;
  1744. ret = dvb_input_attach(port->input[1]);
  1745. if (ret < 0) {
  1746. dvb_input_detach(port->input[0]);
  1747. break;
  1748. }
  1749. port->input[0]->redi = port->input[0];
  1750. port->input[1]->redi = port->input[1];
  1751. break;
  1752. case DDB_PORT_CI:
  1753. ret = ddb_ci_attach(port, ci_bitrate);
  1754. if (ret < 0)
  1755. break;
  1756. /* fall-through */
  1757. case DDB_PORT_LOOP:
  1758. ret = dvb_register_device(port->dvb[0].adap,
  1759. &port->dvb[0].dev,
  1760. &dvbdev_ci, (void *)port->output,
  1761. DVB_DEVICE_SEC, 0);
  1762. break;
  1763. default:
  1764. break;
  1765. }
  1766. if (ret < 0)
  1767. dev_err(port->dev->dev, "port_attach on port %d failed\n",
  1768. port->nr);
  1769. return ret;
  1770. }
  1771. int ddb_ports_attach(struct ddb *dev)
  1772. {
  1773. int i, numports, err_ports = 0, ret = 0;
  1774. struct ddb_port *port;
  1775. if (dev->port_num) {
  1776. ret = dvb_register_adapters(dev);
  1777. if (ret < 0) {
  1778. dev_err(dev->dev, "Registering adapters failed. Check DVB_MAX_ADAPTERS in config.\n");
  1779. return ret;
  1780. }
  1781. }
  1782. numports = dev->port_num;
  1783. for (i = 0; i < dev->port_num; i++) {
  1784. port = &dev->port[i];
  1785. if (port->class != DDB_PORT_NONE) {
  1786. ret = ddb_port_attach(port);
  1787. if (ret)
  1788. err_ports++;
  1789. } else {
  1790. numports--;
  1791. }
  1792. }
  1793. if (err_ports) {
  1794. if (err_ports == numports) {
  1795. dev_err(dev->dev, "All connected ports failed to initialise!\n");
  1796. return -ENODEV;
  1797. }
  1798. dev_warn(dev->dev, "%d of %d connected ports failed to initialise!\n",
  1799. err_ports, numports);
  1800. }
  1801. return 0;
  1802. }
  1803. void ddb_ports_detach(struct ddb *dev)
  1804. {
  1805. int i;
  1806. struct ddb_port *port;
  1807. for (i = 0; i < dev->port_num; i++) {
  1808. port = &dev->port[i];
  1809. switch (port->class) {
  1810. case DDB_PORT_TUNER:
  1811. dvb_input_detach(port->input[1]);
  1812. dvb_input_detach(port->input[0]);
  1813. break;
  1814. case DDB_PORT_CI:
  1815. case DDB_PORT_LOOP:
  1816. ddb_ci_detach(port);
  1817. break;
  1818. }
  1819. }
  1820. dvb_unregister_adapters(dev);
  1821. }
  1822. /* Copy input DMA pointers to output DMA and ACK. */
  1823. static void input_write_output(struct ddb_input *input,
  1824. struct ddb_output *output)
  1825. {
  1826. ddbwritel(output->port->dev,
  1827. input->dma->stat, DMA_BUFFER_ACK(output->dma));
  1828. output->dma->cbuf = (input->dma->stat >> 11) & 0x1f;
  1829. output->dma->coff = (input->dma->stat & 0x7ff) << 7;
  1830. }
  1831. static void output_ack_input(struct ddb_output *output,
  1832. struct ddb_input *input)
  1833. {
  1834. ddbwritel(input->port->dev,
  1835. output->dma->stat, DMA_BUFFER_ACK(input->dma));
  1836. }
  1837. static void input_write_dvb(struct ddb_input *input,
  1838. struct ddb_input *input2)
  1839. {
  1840. struct ddb_dvb *dvb = &input2->port->dvb[input2->nr & 1];
  1841. struct ddb_dma *dma, *dma2;
  1842. struct ddb *dev = input->port->dev;
  1843. int ack = 1;
  1844. dma = input->dma;
  1845. dma2 = input->dma;
  1846. /*
  1847. * if there also is an output connected, do not ACK.
  1848. * input_write_output will ACK.
  1849. */
  1850. if (input->redo) {
  1851. dma2 = input->redo->dma;
  1852. ack = 0;
  1853. }
  1854. while (dma->cbuf != ((dma->stat >> 11) & 0x1f) ||
  1855. (4 & dma->ctrl)) {
  1856. if (4 & dma->ctrl) {
  1857. /* dev_err(dev->dev, "Overflow dma %d\n", dma->nr); */
  1858. ack = 1;
  1859. }
  1860. if (alt_dma)
  1861. dma_sync_single_for_cpu(dev->dev, dma2->pbuf[dma->cbuf],
  1862. dma2->size, DMA_FROM_DEVICE);
  1863. dvb_dmx_swfilter_packets(&dvb->demux,
  1864. dma2->vbuf[dma->cbuf],
  1865. dma2->size / 188);
  1866. dma->cbuf = (dma->cbuf + 1) % dma2->num;
  1867. if (ack)
  1868. ddbwritel(dev, (dma->cbuf << 11),
  1869. DMA_BUFFER_ACK(dma));
  1870. dma->stat = safe_ddbreadl(dev, DMA_BUFFER_CURRENT(dma));
  1871. dma->ctrl = safe_ddbreadl(dev, DMA_BUFFER_CONTROL(dma));
  1872. }
  1873. }
  1874. static void input_work(struct work_struct *work)
  1875. {
  1876. struct ddb_dma *dma = container_of(work, struct ddb_dma, work);
  1877. struct ddb_input *input = (struct ddb_input *)dma->io;
  1878. struct ddb *dev = input->port->dev;
  1879. unsigned long flags;
  1880. spin_lock_irqsave(&dma->lock, flags);
  1881. if (!dma->running) {
  1882. spin_unlock_irqrestore(&dma->lock, flags);
  1883. return;
  1884. }
  1885. dma->stat = ddbreadl(dev, DMA_BUFFER_CURRENT(dma));
  1886. dma->ctrl = ddbreadl(dev, DMA_BUFFER_CONTROL(dma));
  1887. if (input->redi)
  1888. input_write_dvb(input, input->redi);
  1889. if (input->redo)
  1890. input_write_output(input, input->redo);
  1891. wake_up(&dma->wq);
  1892. spin_unlock_irqrestore(&dma->lock, flags);
  1893. }
  1894. static void input_handler(void *data)
  1895. {
  1896. struct ddb_input *input = (struct ddb_input *)data;
  1897. struct ddb_dma *dma = input->dma;
  1898. queue_work(ddb_wq, &dma->work);
  1899. }
  1900. static void output_work(struct work_struct *work)
  1901. {
  1902. struct ddb_dma *dma = container_of(work, struct ddb_dma, work);
  1903. struct ddb_output *output = (struct ddb_output *)dma->io;
  1904. struct ddb *dev = output->port->dev;
  1905. unsigned long flags;
  1906. spin_lock_irqsave(&dma->lock, flags);
  1907. if (!dma->running)
  1908. goto unlock_exit;
  1909. dma->stat = ddbreadl(dev, DMA_BUFFER_CURRENT(dma));
  1910. dma->ctrl = ddbreadl(dev, DMA_BUFFER_CONTROL(dma));
  1911. if (output->redi)
  1912. output_ack_input(output, output->redi);
  1913. wake_up(&dma->wq);
  1914. unlock_exit:
  1915. spin_unlock_irqrestore(&dma->lock, flags);
  1916. }
  1917. static void output_handler(void *data)
  1918. {
  1919. struct ddb_output *output = (struct ddb_output *)data;
  1920. struct ddb_dma *dma = output->dma;
  1921. queue_work(ddb_wq, &dma->work);
  1922. }
  1923. /****************************************************************************/
  1924. /****************************************************************************/
  1925. static const struct ddb_regmap *io_regmap(struct ddb_io *io, int link)
  1926. {
  1927. const struct ddb_info *info;
  1928. if (link)
  1929. info = io->port->dev->link[io->port->lnr].info;
  1930. else
  1931. info = io->port->dev->link[0].info;
  1932. if (!info)
  1933. return NULL;
  1934. return info->regmap;
  1935. }
  1936. static void ddb_dma_init(struct ddb_io *io, int nr, int out)
  1937. {
  1938. struct ddb_dma *dma;
  1939. const struct ddb_regmap *rm = io_regmap(io, 0);
  1940. dma = out ? &io->port->dev->odma[nr] : &io->port->dev->idma[nr];
  1941. io->dma = dma;
  1942. dma->io = io;
  1943. spin_lock_init(&dma->lock);
  1944. init_waitqueue_head(&dma->wq);
  1945. if (out) {
  1946. INIT_WORK(&dma->work, output_work);
  1947. dma->regs = rm->odma->base + rm->odma->size * nr;
  1948. dma->bufregs = rm->odma_buf->base + rm->odma_buf->size * nr;
  1949. dma->num = dma_buf_num;
  1950. dma->size = dma_buf_size * 128 * 47;
  1951. dma->div = 1;
  1952. } else {
  1953. INIT_WORK(&dma->work, input_work);
  1954. dma->regs = rm->idma->base + rm->idma->size * nr;
  1955. dma->bufregs = rm->idma_buf->base + rm->idma_buf->size * nr;
  1956. dma->num = dma_buf_num;
  1957. dma->size = dma_buf_size * 128 * 47;
  1958. dma->div = 1;
  1959. }
  1960. ddbwritel(io->port->dev, 0, DMA_BUFFER_ACK(dma));
  1961. dev_dbg(io->port->dev->dev, "init link %u, io %u, dma %u, dmaregs %08x bufregs %08x\n",
  1962. io->port->lnr, io->nr, nr, dma->regs, dma->bufregs);
  1963. }
  1964. static void ddb_input_init(struct ddb_port *port, int nr, int pnr, int anr)
  1965. {
  1966. struct ddb *dev = port->dev;
  1967. struct ddb_input *input = &dev->input[anr];
  1968. const struct ddb_regmap *rm;
  1969. port->input[pnr] = input;
  1970. input->nr = nr;
  1971. input->port = port;
  1972. rm = io_regmap(input, 1);
  1973. input->regs = DDB_LINK_TAG(port->lnr) |
  1974. (rm->input->base + rm->input->size * nr);
  1975. dev_dbg(dev->dev, "init link %u, input %u, regs %08x\n",
  1976. port->lnr, nr, input->regs);
  1977. if (dev->has_dma) {
  1978. const struct ddb_regmap *rm0 = io_regmap(input, 0);
  1979. u32 base = rm0->irq_base_idma;
  1980. u32 dma_nr = nr;
  1981. if (port->lnr)
  1982. dma_nr += 32 + (port->lnr - 1) * 8;
  1983. dev_dbg(dev->dev, "init link %u, input %u, handler %u\n",
  1984. port->lnr, nr, dma_nr + base);
  1985. ddb_irq_set(dev, 0, dma_nr + base, &input_handler, input);
  1986. ddb_dma_init(input, dma_nr, 0);
  1987. }
  1988. }
  1989. static void ddb_output_init(struct ddb_port *port, int nr)
  1990. {
  1991. struct ddb *dev = port->dev;
  1992. struct ddb_output *output = &dev->output[nr];
  1993. const struct ddb_regmap *rm;
  1994. port->output = output;
  1995. output->nr = nr;
  1996. output->port = port;
  1997. rm = io_regmap(output, 1);
  1998. output->regs = DDB_LINK_TAG(port->lnr) |
  1999. (rm->output->base + rm->output->size * nr);
  2000. dev_dbg(dev->dev, "init link %u, output %u, regs %08x\n",
  2001. port->lnr, nr, output->regs);
  2002. if (dev->has_dma) {
  2003. const struct ddb_regmap *rm0 = io_regmap(output, 0);
  2004. u32 base = rm0->irq_base_odma;
  2005. ddb_irq_set(dev, 0, nr + base, &output_handler, output);
  2006. ddb_dma_init(output, nr, 1);
  2007. }
  2008. }
  2009. static int ddb_port_match_i2c(struct ddb_port *port)
  2010. {
  2011. struct ddb *dev = port->dev;
  2012. u32 i;
  2013. for (i = 0; i < dev->i2c_num; i++) {
  2014. if (dev->i2c[i].link == port->lnr &&
  2015. dev->i2c[i].nr == port->nr) {
  2016. port->i2c = &dev->i2c[i];
  2017. return 1;
  2018. }
  2019. }
  2020. return 0;
  2021. }
  2022. static int ddb_port_match_link_i2c(struct ddb_port *port)
  2023. {
  2024. struct ddb *dev = port->dev;
  2025. u32 i;
  2026. for (i = 0; i < dev->i2c_num; i++) {
  2027. if (dev->i2c[i].link == port->lnr) {
  2028. port->i2c = &dev->i2c[i];
  2029. return 1;
  2030. }
  2031. }
  2032. return 0;
  2033. }
  2034. void ddb_ports_init(struct ddb *dev)
  2035. {
  2036. u32 i, l, p;
  2037. struct ddb_port *port;
  2038. const struct ddb_info *info;
  2039. const struct ddb_regmap *rm;
  2040. for (p = l = 0; l < DDB_MAX_LINK; l++) {
  2041. info = dev->link[l].info;
  2042. if (!info)
  2043. continue;
  2044. rm = info->regmap;
  2045. if (!rm)
  2046. continue;
  2047. for (i = 0; i < info->port_num; i++, p++) {
  2048. port = &dev->port[p];
  2049. port->dev = dev;
  2050. port->nr = i;
  2051. port->lnr = l;
  2052. port->pnr = p;
  2053. port->gap = 0xffffffff;
  2054. port->obr = ci_bitrate;
  2055. mutex_init(&port->i2c_gate_lock);
  2056. if (!ddb_port_match_i2c(port)) {
  2057. if (info->type == DDB_OCTOPUS_MAX)
  2058. ddb_port_match_link_i2c(port);
  2059. }
  2060. ddb_port_probe(port);
  2061. port->dvb[0].adap = &dev->adap[2 * p];
  2062. port->dvb[1].adap = &dev->adap[2 * p + 1];
  2063. if (port->class == DDB_PORT_NONE && i && p &&
  2064. dev->port[p - 1].type == DDB_CI_EXTERNAL_XO2) {
  2065. port->class = DDB_PORT_CI;
  2066. port->type = DDB_CI_EXTERNAL_XO2_B;
  2067. port->name = "DuoFlex CI_B";
  2068. port->i2c = dev->port[p - 1].i2c;
  2069. }
  2070. dev_info(dev->dev, "Port %u: Link %u, Link Port %u (TAB %u): %s\n",
  2071. port->pnr, port->lnr, port->nr, port->nr + 1,
  2072. port->name);
  2073. if (port->class == DDB_PORT_CI &&
  2074. port->type == DDB_CI_EXTERNAL_XO2) {
  2075. ddb_input_init(port, 2 * i, 0, 2 * i);
  2076. ddb_output_init(port, i);
  2077. continue;
  2078. }
  2079. if (port->class == DDB_PORT_CI &&
  2080. port->type == DDB_CI_EXTERNAL_XO2_B) {
  2081. ddb_input_init(port, 2 * i - 1, 0, 2 * i - 1);
  2082. ddb_output_init(port, i);
  2083. continue;
  2084. }
  2085. if (port->class == DDB_PORT_NONE)
  2086. continue;
  2087. switch (dev->link[l].info->type) {
  2088. case DDB_OCTOPUS_CI:
  2089. if (i >= 2) {
  2090. ddb_input_init(port, 2 + i, 0, 2 + i);
  2091. ddb_input_init(port, 4 + i, 1, 4 + i);
  2092. ddb_output_init(port, i);
  2093. break;
  2094. } /* fallthrough */
  2095. case DDB_OCTOPUS:
  2096. ddb_input_init(port, 2 * i, 0, 2 * i);
  2097. ddb_input_init(port, 2 * i + 1, 1, 2 * i + 1);
  2098. ddb_output_init(port, i);
  2099. break;
  2100. case DDB_OCTOPUS_MAX:
  2101. case DDB_OCTOPUS_MAX_CT:
  2102. case DDB_OCTOPUS_MCI:
  2103. ddb_input_init(port, 2 * i, 0, 2 * p);
  2104. ddb_input_init(port, 2 * i + 1, 1, 2 * p + 1);
  2105. break;
  2106. default:
  2107. break;
  2108. }
  2109. }
  2110. }
  2111. dev->port_num = p;
  2112. }
  2113. void ddb_ports_release(struct ddb *dev)
  2114. {
  2115. int i;
  2116. struct ddb_port *port;
  2117. for (i = 0; i < dev->port_num; i++) {
  2118. port = &dev->port[i];
  2119. if (port->input[0] && port->input[0]->dma)
  2120. cancel_work_sync(&port->input[0]->dma->work);
  2121. if (port->input[1] && port->input[1]->dma)
  2122. cancel_work_sync(&port->input[1]->dma->work);
  2123. if (port->output && port->output->dma)
  2124. cancel_work_sync(&port->output->dma->work);
  2125. }
  2126. }
  2127. /****************************************************************************/
  2128. /****************************************************************************/
  2129. /****************************************************************************/
  2130. #define IRQ_HANDLE(_nr) \
  2131. do { if ((s & (1UL << ((_nr) & 0x1f))) && \
  2132. dev->link[0].irq[_nr].handler) \
  2133. dev->link[0].irq[_nr].handler(dev->link[0].irq[_nr].data); } \
  2134. while (0)
  2135. #define IRQ_HANDLE_NIBBLE(_shift) { \
  2136. if (s & (0x0000000f << ((_shift) & 0x1f))) { \
  2137. IRQ_HANDLE(0 + (_shift)); \
  2138. IRQ_HANDLE(1 + (_shift)); \
  2139. IRQ_HANDLE(2 + (_shift)); \
  2140. IRQ_HANDLE(3 + (_shift)); \
  2141. } \
  2142. }
  2143. #define IRQ_HANDLE_BYTE(_shift) { \
  2144. if (s & (0x000000ff << ((_shift) & 0x1f))) { \
  2145. IRQ_HANDLE(0 + (_shift)); \
  2146. IRQ_HANDLE(1 + (_shift)); \
  2147. IRQ_HANDLE(2 + (_shift)); \
  2148. IRQ_HANDLE(3 + (_shift)); \
  2149. IRQ_HANDLE(4 + (_shift)); \
  2150. IRQ_HANDLE(5 + (_shift)); \
  2151. IRQ_HANDLE(6 + (_shift)); \
  2152. IRQ_HANDLE(7 + (_shift)); \
  2153. } \
  2154. }
  2155. static void irq_handle_msg(struct ddb *dev, u32 s)
  2156. {
  2157. dev->i2c_irq++;
  2158. IRQ_HANDLE_NIBBLE(0);
  2159. }
  2160. static void irq_handle_io(struct ddb *dev, u32 s)
  2161. {
  2162. dev->ts_irq++;
  2163. IRQ_HANDLE_NIBBLE(4);
  2164. IRQ_HANDLE_BYTE(8);
  2165. IRQ_HANDLE_BYTE(16);
  2166. IRQ_HANDLE_BYTE(24);
  2167. }
  2168. irqreturn_t ddb_irq_handler0(int irq, void *dev_id)
  2169. {
  2170. struct ddb *dev = (struct ddb *)dev_id;
  2171. u32 mask = 0x8fffff00;
  2172. u32 s = mask & ddbreadl(dev, INTERRUPT_STATUS);
  2173. if (!s)
  2174. return IRQ_NONE;
  2175. do {
  2176. if (s & 0x80000000)
  2177. return IRQ_NONE;
  2178. ddbwritel(dev, s, INTERRUPT_ACK);
  2179. irq_handle_io(dev, s);
  2180. } while ((s = mask & ddbreadl(dev, INTERRUPT_STATUS)));
  2181. return IRQ_HANDLED;
  2182. }
  2183. irqreturn_t ddb_irq_handler1(int irq, void *dev_id)
  2184. {
  2185. struct ddb *dev = (struct ddb *)dev_id;
  2186. u32 mask = 0x8000000f;
  2187. u32 s = mask & ddbreadl(dev, INTERRUPT_STATUS);
  2188. if (!s)
  2189. return IRQ_NONE;
  2190. do {
  2191. if (s & 0x80000000)
  2192. return IRQ_NONE;
  2193. ddbwritel(dev, s, INTERRUPT_ACK);
  2194. irq_handle_msg(dev, s);
  2195. } while ((s = mask & ddbreadl(dev, INTERRUPT_STATUS)));
  2196. return IRQ_HANDLED;
  2197. }
  2198. irqreturn_t ddb_irq_handler(int irq, void *dev_id)
  2199. {
  2200. struct ddb *dev = (struct ddb *)dev_id;
  2201. u32 s = ddbreadl(dev, INTERRUPT_STATUS);
  2202. int ret = IRQ_HANDLED;
  2203. if (!s)
  2204. return IRQ_NONE;
  2205. do {
  2206. if (s & 0x80000000)
  2207. return IRQ_NONE;
  2208. ddbwritel(dev, s, INTERRUPT_ACK);
  2209. if (s & 0x0000000f)
  2210. irq_handle_msg(dev, s);
  2211. if (s & 0x0fffff00)
  2212. irq_handle_io(dev, s);
  2213. } while ((s = ddbreadl(dev, INTERRUPT_STATUS)));
  2214. return ret;
  2215. }
  2216. /****************************************************************************/
  2217. /****************************************************************************/
  2218. /****************************************************************************/
  2219. static int reg_wait(struct ddb *dev, u32 reg, u32 bit)
  2220. {
  2221. u32 count = 0;
  2222. while (safe_ddbreadl(dev, reg) & bit) {
  2223. ndelay(10);
  2224. if (++count == 100)
  2225. return -1;
  2226. }
  2227. return 0;
  2228. }
  2229. static int flashio(struct ddb *dev, u32 lnr, u8 *wbuf, u32 wlen, u8 *rbuf,
  2230. u32 rlen)
  2231. {
  2232. u32 data, shift;
  2233. u32 tag = DDB_LINK_TAG(lnr);
  2234. struct ddb_link *link = &dev->link[lnr];
  2235. mutex_lock(&link->flash_mutex);
  2236. if (wlen > 4)
  2237. ddbwritel(dev, 1, tag | SPI_CONTROL);
  2238. while (wlen > 4) {
  2239. /* FIXME: check for big-endian */
  2240. data = swab32(*(u32 *)wbuf);
  2241. wbuf += 4;
  2242. wlen -= 4;
  2243. ddbwritel(dev, data, tag | SPI_DATA);
  2244. if (reg_wait(dev, tag | SPI_CONTROL, 4))
  2245. goto fail;
  2246. }
  2247. if (rlen)
  2248. ddbwritel(dev, 0x0001 | ((wlen << (8 + 3)) & 0x1f00),
  2249. tag | SPI_CONTROL);
  2250. else
  2251. ddbwritel(dev, 0x0003 | ((wlen << (8 + 3)) & 0x1f00),
  2252. tag | SPI_CONTROL);
  2253. data = 0;
  2254. shift = ((4 - wlen) * 8);
  2255. while (wlen) {
  2256. data <<= 8;
  2257. data |= *wbuf;
  2258. wlen--;
  2259. wbuf++;
  2260. }
  2261. if (shift)
  2262. data <<= shift;
  2263. ddbwritel(dev, data, tag | SPI_DATA);
  2264. if (reg_wait(dev, tag | SPI_CONTROL, 4))
  2265. goto fail;
  2266. if (!rlen) {
  2267. ddbwritel(dev, 0, tag | SPI_CONTROL);
  2268. goto exit;
  2269. }
  2270. if (rlen > 4)
  2271. ddbwritel(dev, 1, tag | SPI_CONTROL);
  2272. while (rlen > 4) {
  2273. ddbwritel(dev, 0xffffffff, tag | SPI_DATA);
  2274. if (reg_wait(dev, tag | SPI_CONTROL, 4))
  2275. goto fail;
  2276. data = ddbreadl(dev, tag | SPI_DATA);
  2277. *(u32 *)rbuf = swab32(data);
  2278. rbuf += 4;
  2279. rlen -= 4;
  2280. }
  2281. ddbwritel(dev, 0x0003 | ((rlen << (8 + 3)) & 0x1F00),
  2282. tag | SPI_CONTROL);
  2283. ddbwritel(dev, 0xffffffff, tag | SPI_DATA);
  2284. if (reg_wait(dev, tag | SPI_CONTROL, 4))
  2285. goto fail;
  2286. data = ddbreadl(dev, tag | SPI_DATA);
  2287. ddbwritel(dev, 0, tag | SPI_CONTROL);
  2288. if (rlen < 4)
  2289. data <<= ((4 - rlen) * 8);
  2290. while (rlen > 0) {
  2291. *rbuf = ((data >> 24) & 0xff);
  2292. data <<= 8;
  2293. rbuf++;
  2294. rlen--;
  2295. }
  2296. exit:
  2297. mutex_unlock(&link->flash_mutex);
  2298. return 0;
  2299. fail:
  2300. mutex_unlock(&link->flash_mutex);
  2301. return -1;
  2302. }
  2303. int ddbridge_flashread(struct ddb *dev, u32 link, u8 *buf, u32 addr, u32 len)
  2304. {
  2305. u8 cmd[4] = {0x03, (addr >> 16) & 0xff,
  2306. (addr >> 8) & 0xff, addr & 0xff};
  2307. return flashio(dev, link, cmd, 4, buf, len);
  2308. }
  2309. /*
  2310. * TODO/FIXME: add/implement IOCTLs from upstream driver
  2311. */
  2312. #define DDB_NAME "ddbridge"
  2313. static u32 ddb_num;
  2314. static int ddb_major;
  2315. static DEFINE_MUTEX(ddb_mutex);
  2316. static int ddb_release(struct inode *inode, struct file *file)
  2317. {
  2318. struct ddb *dev = file->private_data;
  2319. dev->ddb_dev_users--;
  2320. return 0;
  2321. }
  2322. static int ddb_open(struct inode *inode, struct file *file)
  2323. {
  2324. struct ddb *dev = ddbs[iminor(inode)];
  2325. if (dev->ddb_dev_users)
  2326. return -EBUSY;
  2327. dev->ddb_dev_users++;
  2328. file->private_data = dev;
  2329. return 0;
  2330. }
  2331. static long ddb_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
  2332. {
  2333. struct ddb *dev = file->private_data;
  2334. dev_warn(dev->dev, "DDB IOCTLs unsupported (cmd: %d, arg: %lu)\n",
  2335. cmd, arg);
  2336. return -ENOTTY;
  2337. }
  2338. static const struct file_operations ddb_fops = {
  2339. .unlocked_ioctl = ddb_ioctl,
  2340. .open = ddb_open,
  2341. .release = ddb_release,
  2342. };
  2343. static char *ddb_devnode(struct device *device, umode_t *mode)
  2344. {
  2345. struct ddb *dev = dev_get_drvdata(device);
  2346. return kasprintf(GFP_KERNEL, "ddbridge/card%d", dev->nr);
  2347. }
  2348. #define __ATTR_MRO(_name, _show) { \
  2349. .attr = { .name = __stringify(_name), .mode = 0444 }, \
  2350. .show = _show, \
  2351. }
  2352. #define __ATTR_MWO(_name, _store) { \
  2353. .attr = { .name = __stringify(_name), .mode = 0222 }, \
  2354. .store = _store, \
  2355. }
  2356. static ssize_t ports_show(struct device *device,
  2357. struct device_attribute *attr, char *buf)
  2358. {
  2359. struct ddb *dev = dev_get_drvdata(device);
  2360. return sprintf(buf, "%d\n", dev->port_num);
  2361. }
  2362. static ssize_t ts_irq_show(struct device *device,
  2363. struct device_attribute *attr, char *buf)
  2364. {
  2365. struct ddb *dev = dev_get_drvdata(device);
  2366. return sprintf(buf, "%d\n", dev->ts_irq);
  2367. }
  2368. static ssize_t i2c_irq_show(struct device *device,
  2369. struct device_attribute *attr, char *buf)
  2370. {
  2371. struct ddb *dev = dev_get_drvdata(device);
  2372. return sprintf(buf, "%d\n", dev->i2c_irq);
  2373. }
  2374. static ssize_t fan_show(struct device *device,
  2375. struct device_attribute *attr, char *buf)
  2376. {
  2377. struct ddb *dev = dev_get_drvdata(device);
  2378. u32 val;
  2379. val = ddbreadl(dev, GPIO_OUTPUT) & 1;
  2380. return sprintf(buf, "%d\n", val);
  2381. }
  2382. static ssize_t fan_store(struct device *device, struct device_attribute *d,
  2383. const char *buf, size_t count)
  2384. {
  2385. struct ddb *dev = dev_get_drvdata(device);
  2386. u32 val;
  2387. if (sscanf(buf, "%u\n", &val) != 1)
  2388. return -EINVAL;
  2389. ddbwritel(dev, 1, GPIO_DIRECTION);
  2390. ddbwritel(dev, val & 1, GPIO_OUTPUT);
  2391. return count;
  2392. }
  2393. static ssize_t fanspeed_show(struct device *device,
  2394. struct device_attribute *attr, char *buf)
  2395. {
  2396. struct ddb *dev = dev_get_drvdata(device);
  2397. int num = attr->attr.name[8] - 0x30;
  2398. struct ddb_link *link = &dev->link[num];
  2399. u32 spd;
  2400. spd = ddblreadl(link, TEMPMON_FANCONTROL) & 0xff;
  2401. return sprintf(buf, "%u\n", spd * 100);
  2402. }
  2403. static ssize_t temp_show(struct device *device,
  2404. struct device_attribute *attr, char *buf)
  2405. {
  2406. struct ddb *dev = dev_get_drvdata(device);
  2407. struct ddb_link *link = &dev->link[0];
  2408. struct i2c_adapter *adap;
  2409. int temp, temp2;
  2410. u8 tmp[2];
  2411. if (!link->info->temp_num)
  2412. return sprintf(buf, "no sensor\n");
  2413. adap = &dev->i2c[link->info->temp_bus].adap;
  2414. if (i2c_read_regs(adap, 0x48, 0, tmp, 2) < 0)
  2415. return sprintf(buf, "read_error\n");
  2416. temp = (tmp[0] << 3) | (tmp[1] >> 5);
  2417. temp *= 125;
  2418. if (link->info->temp_num == 2) {
  2419. if (i2c_read_regs(adap, 0x49, 0, tmp, 2) < 0)
  2420. return sprintf(buf, "read_error\n");
  2421. temp2 = (tmp[0] << 3) | (tmp[1] >> 5);
  2422. temp2 *= 125;
  2423. return sprintf(buf, "%d %d\n", temp, temp2);
  2424. }
  2425. return sprintf(buf, "%d\n", temp);
  2426. }
  2427. static ssize_t ctemp_show(struct device *device,
  2428. struct device_attribute *attr, char *buf)
  2429. {
  2430. struct ddb *dev = dev_get_drvdata(device);
  2431. struct i2c_adapter *adap;
  2432. int temp;
  2433. u8 tmp[2];
  2434. int num = attr->attr.name[4] - 0x30;
  2435. adap = &dev->i2c[num].adap;
  2436. if (!adap)
  2437. return 0;
  2438. if (i2c_read_regs(adap, 0x49, 0, tmp, 2) < 0)
  2439. if (i2c_read_regs(adap, 0x4d, 0, tmp, 2) < 0)
  2440. return sprintf(buf, "no sensor\n");
  2441. temp = tmp[0] * 1000;
  2442. return sprintf(buf, "%d\n", temp);
  2443. }
  2444. static ssize_t led_show(struct device *device,
  2445. struct device_attribute *attr, char *buf)
  2446. {
  2447. struct ddb *dev = dev_get_drvdata(device);
  2448. int num = attr->attr.name[3] - 0x30;
  2449. return sprintf(buf, "%d\n", dev->leds & (1 << num) ? 1 : 0);
  2450. }
  2451. static void ddb_set_led(struct ddb *dev, int num, int val)
  2452. {
  2453. if (!dev->link[0].info->led_num)
  2454. return;
  2455. switch (dev->port[num].class) {
  2456. case DDB_PORT_TUNER:
  2457. switch (dev->port[num].type) {
  2458. case DDB_TUNER_DVBS_ST:
  2459. i2c_write_reg16(&dev->i2c[num].adap,
  2460. 0x69, 0xf14c, val ? 2 : 0);
  2461. break;
  2462. case DDB_TUNER_DVBCT_ST:
  2463. i2c_write_reg16(&dev->i2c[num].adap,
  2464. 0x1f, 0xf00e, 0);
  2465. i2c_write_reg16(&dev->i2c[num].adap,
  2466. 0x1f, 0xf00f, val ? 1 : 0);
  2467. break;
  2468. case DDB_TUNER_XO2 ... DDB_TUNER_DVBC2T2I_SONY:
  2469. {
  2470. u8 v;
  2471. i2c_read_reg(&dev->i2c[num].adap, 0x10, 0x08, &v);
  2472. v = (v & ~0x10) | (val ? 0x10 : 0);
  2473. i2c_write_reg(&dev->i2c[num].adap, 0x10, 0x08, v);
  2474. break;
  2475. }
  2476. default:
  2477. break;
  2478. }
  2479. break;
  2480. }
  2481. }
  2482. static ssize_t led_store(struct device *device,
  2483. struct device_attribute *attr,
  2484. const char *buf, size_t count)
  2485. {
  2486. struct ddb *dev = dev_get_drvdata(device);
  2487. int num = attr->attr.name[3] - 0x30;
  2488. u32 val;
  2489. if (sscanf(buf, "%u\n", &val) != 1)
  2490. return -EINVAL;
  2491. if (val)
  2492. dev->leds |= (1 << num);
  2493. else
  2494. dev->leds &= ~(1 << num);
  2495. ddb_set_led(dev, num, val);
  2496. return count;
  2497. }
  2498. static ssize_t snr_show(struct device *device,
  2499. struct device_attribute *attr, char *buf)
  2500. {
  2501. struct ddb *dev = dev_get_drvdata(device);
  2502. char snr[32];
  2503. int num = attr->attr.name[3] - 0x30;
  2504. if (dev->port[num].type >= DDB_TUNER_XO2) {
  2505. if (i2c_read_regs(&dev->i2c[num].adap, 0x10, 0x10, snr, 16) < 0)
  2506. return sprintf(buf, "NO SNR\n");
  2507. snr[16] = 0;
  2508. } else {
  2509. /* serial number at 0x100-0x11f */
  2510. if (i2c_read_regs16(&dev->i2c[num].adap,
  2511. 0x57, 0x100, snr, 32) < 0)
  2512. if (i2c_read_regs16(&dev->i2c[num].adap,
  2513. 0x50, 0x100, snr, 32) < 0)
  2514. return sprintf(buf, "NO SNR\n");
  2515. snr[31] = 0; /* in case it is not terminated on EEPROM */
  2516. }
  2517. return sprintf(buf, "%s\n", snr);
  2518. }
  2519. static ssize_t bsnr_show(struct device *device,
  2520. struct device_attribute *attr, char *buf)
  2521. {
  2522. struct ddb *dev = dev_get_drvdata(device);
  2523. char snr[16];
  2524. ddbridge_flashread(dev, 0, snr, 0x10, 15);
  2525. snr[15] = 0; /* in case it is not terminated on EEPROM */
  2526. return sprintf(buf, "%s\n", snr);
  2527. }
  2528. static ssize_t bpsnr_show(struct device *device,
  2529. struct device_attribute *attr, char *buf)
  2530. {
  2531. struct ddb *dev = dev_get_drvdata(device);
  2532. unsigned char snr[32];
  2533. if (!dev->i2c_num)
  2534. return 0;
  2535. if (i2c_read_regs16(&dev->i2c[0].adap,
  2536. 0x50, 0x0000, snr, 32) < 0 ||
  2537. snr[0] == 0xff)
  2538. return sprintf(buf, "NO SNR\n");
  2539. snr[31] = 0; /* in case it is not terminated on EEPROM */
  2540. return sprintf(buf, "%s\n", snr);
  2541. }
  2542. static ssize_t redirect_show(struct device *device,
  2543. struct device_attribute *attr, char *buf)
  2544. {
  2545. return 0;
  2546. }
  2547. static ssize_t redirect_store(struct device *device,
  2548. struct device_attribute *attr,
  2549. const char *buf, size_t count)
  2550. {
  2551. unsigned int i, p;
  2552. int res;
  2553. if (sscanf(buf, "%x %x\n", &i, &p) != 2)
  2554. return -EINVAL;
  2555. res = ddb_redirect(i, p);
  2556. if (res < 0)
  2557. return res;
  2558. dev_info(device, "redirect: %02x, %02x\n", i, p);
  2559. return count;
  2560. }
  2561. static ssize_t gap_show(struct device *device,
  2562. struct device_attribute *attr, char *buf)
  2563. {
  2564. struct ddb *dev = dev_get_drvdata(device);
  2565. int num = attr->attr.name[3] - 0x30;
  2566. return sprintf(buf, "%d\n", dev->port[num].gap);
  2567. }
  2568. static ssize_t gap_store(struct device *device, struct device_attribute *attr,
  2569. const char *buf, size_t count)
  2570. {
  2571. struct ddb *dev = dev_get_drvdata(device);
  2572. int num = attr->attr.name[3] - 0x30;
  2573. unsigned int val;
  2574. if (sscanf(buf, "%u\n", &val) != 1)
  2575. return -EINVAL;
  2576. if (val > 128)
  2577. return -EINVAL;
  2578. if (val == 128)
  2579. val = 0xffffffff;
  2580. dev->port[num].gap = val;
  2581. return count;
  2582. }
  2583. static ssize_t version_show(struct device *device,
  2584. struct device_attribute *attr, char *buf)
  2585. {
  2586. struct ddb *dev = dev_get_drvdata(device);
  2587. return sprintf(buf, "%08x %08x\n",
  2588. dev->link[0].ids.hwid, dev->link[0].ids.regmapid);
  2589. }
  2590. static ssize_t hwid_show(struct device *device,
  2591. struct device_attribute *attr, char *buf)
  2592. {
  2593. struct ddb *dev = dev_get_drvdata(device);
  2594. return sprintf(buf, "0x%08X\n", dev->link[0].ids.hwid);
  2595. }
  2596. static ssize_t regmap_show(struct device *device,
  2597. struct device_attribute *attr, char *buf)
  2598. {
  2599. struct ddb *dev = dev_get_drvdata(device);
  2600. return sprintf(buf, "0x%08X\n", dev->link[0].ids.regmapid);
  2601. }
  2602. static ssize_t fmode_show(struct device *device,
  2603. struct device_attribute *attr, char *buf)
  2604. {
  2605. int num = attr->attr.name[5] - 0x30;
  2606. struct ddb *dev = dev_get_drvdata(device);
  2607. return sprintf(buf, "%u\n", dev->link[num].lnb.fmode);
  2608. }
  2609. static ssize_t devid_show(struct device *device,
  2610. struct device_attribute *attr, char *buf)
  2611. {
  2612. int num = attr->attr.name[5] - 0x30;
  2613. struct ddb *dev = dev_get_drvdata(device);
  2614. return sprintf(buf, "%08x\n", dev->link[num].ids.devid);
  2615. }
  2616. static ssize_t fmode_store(struct device *device, struct device_attribute *attr,
  2617. const char *buf, size_t count)
  2618. {
  2619. struct ddb *dev = dev_get_drvdata(device);
  2620. int num = attr->attr.name[5] - 0x30;
  2621. unsigned int val;
  2622. if (sscanf(buf, "%u\n", &val) != 1)
  2623. return -EINVAL;
  2624. if (val > 3)
  2625. return -EINVAL;
  2626. ddb_lnb_init_fmode(dev, &dev->link[num], val);
  2627. return count;
  2628. }
  2629. static struct device_attribute ddb_attrs[] = {
  2630. __ATTR_RO(version),
  2631. __ATTR_RO(ports),
  2632. __ATTR_RO(ts_irq),
  2633. __ATTR_RO(i2c_irq),
  2634. __ATTR(gap0, 0664, gap_show, gap_store),
  2635. __ATTR(gap1, 0664, gap_show, gap_store),
  2636. __ATTR(gap2, 0664, gap_show, gap_store),
  2637. __ATTR(gap3, 0664, gap_show, gap_store),
  2638. __ATTR(fmode0, 0664, fmode_show, fmode_store),
  2639. __ATTR(fmode1, 0664, fmode_show, fmode_store),
  2640. __ATTR(fmode2, 0664, fmode_show, fmode_store),
  2641. __ATTR(fmode3, 0664, fmode_show, fmode_store),
  2642. __ATTR_MRO(devid0, devid_show),
  2643. __ATTR_MRO(devid1, devid_show),
  2644. __ATTR_MRO(devid2, devid_show),
  2645. __ATTR_MRO(devid3, devid_show),
  2646. __ATTR_RO(hwid),
  2647. __ATTR_RO(regmap),
  2648. __ATTR(redirect, 0664, redirect_show, redirect_store),
  2649. __ATTR_MRO(snr, bsnr_show),
  2650. __ATTR_RO(bpsnr),
  2651. __ATTR_NULL,
  2652. };
  2653. static struct device_attribute ddb_attrs_temp[] = {
  2654. __ATTR_RO(temp),
  2655. };
  2656. static struct device_attribute ddb_attrs_fan[] = {
  2657. __ATTR(fan, 0664, fan_show, fan_store),
  2658. };
  2659. static struct device_attribute ddb_attrs_snr[] = {
  2660. __ATTR_MRO(snr0, snr_show),
  2661. __ATTR_MRO(snr1, snr_show),
  2662. __ATTR_MRO(snr2, snr_show),
  2663. __ATTR_MRO(snr3, snr_show),
  2664. };
  2665. static struct device_attribute ddb_attrs_ctemp[] = {
  2666. __ATTR_MRO(temp0, ctemp_show),
  2667. __ATTR_MRO(temp1, ctemp_show),
  2668. __ATTR_MRO(temp2, ctemp_show),
  2669. __ATTR_MRO(temp3, ctemp_show),
  2670. };
  2671. static struct device_attribute ddb_attrs_led[] = {
  2672. __ATTR(led0, 0664, led_show, led_store),
  2673. __ATTR(led1, 0664, led_show, led_store),
  2674. __ATTR(led2, 0664, led_show, led_store),
  2675. __ATTR(led3, 0664, led_show, led_store),
  2676. };
  2677. static struct device_attribute ddb_attrs_fanspeed[] = {
  2678. __ATTR_MRO(fanspeed0, fanspeed_show),
  2679. __ATTR_MRO(fanspeed1, fanspeed_show),
  2680. __ATTR_MRO(fanspeed2, fanspeed_show),
  2681. __ATTR_MRO(fanspeed3, fanspeed_show),
  2682. };
  2683. static struct class ddb_class = {
  2684. .name = "ddbridge",
  2685. .owner = THIS_MODULE,
  2686. .devnode = ddb_devnode,
  2687. };
  2688. static int ddb_class_create(void)
  2689. {
  2690. ddb_major = register_chrdev(0, DDB_NAME, &ddb_fops);
  2691. if (ddb_major < 0)
  2692. return ddb_major;
  2693. if (class_register(&ddb_class) < 0)
  2694. return -1;
  2695. return 0;
  2696. }
  2697. static void ddb_class_destroy(void)
  2698. {
  2699. class_unregister(&ddb_class);
  2700. unregister_chrdev(ddb_major, DDB_NAME);
  2701. }
  2702. static void ddb_device_attrs_del(struct ddb *dev)
  2703. {
  2704. int i;
  2705. for (i = 0; i < 4; i++)
  2706. if (dev->link[i].info && dev->link[i].info->tempmon_irq)
  2707. device_remove_file(dev->ddb_dev,
  2708. &ddb_attrs_fanspeed[i]);
  2709. for (i = 0; i < dev->link[0].info->temp_num; i++)
  2710. device_remove_file(dev->ddb_dev, &ddb_attrs_temp[i]);
  2711. for (i = 0; i < dev->link[0].info->fan_num; i++)
  2712. device_remove_file(dev->ddb_dev, &ddb_attrs_fan[i]);
  2713. for (i = 0; i < dev->i2c_num && i < 4; i++) {
  2714. if (dev->link[0].info->led_num)
  2715. device_remove_file(dev->ddb_dev, &ddb_attrs_led[i]);
  2716. device_remove_file(dev->ddb_dev, &ddb_attrs_snr[i]);
  2717. device_remove_file(dev->ddb_dev, &ddb_attrs_ctemp[i]);
  2718. }
  2719. for (i = 0; ddb_attrs[i].attr.name; i++)
  2720. device_remove_file(dev->ddb_dev, &ddb_attrs[i]);
  2721. }
  2722. static int ddb_device_attrs_add(struct ddb *dev)
  2723. {
  2724. int i;
  2725. for (i = 0; ddb_attrs[i].attr.name; i++)
  2726. if (device_create_file(dev->ddb_dev, &ddb_attrs[i]))
  2727. goto fail;
  2728. for (i = 0; i < dev->link[0].info->temp_num; i++)
  2729. if (device_create_file(dev->ddb_dev, &ddb_attrs_temp[i]))
  2730. goto fail;
  2731. for (i = 0; i < dev->link[0].info->fan_num; i++)
  2732. if (device_create_file(dev->ddb_dev, &ddb_attrs_fan[i]))
  2733. goto fail;
  2734. for (i = 0; (i < dev->i2c_num) && (i < 4); i++) {
  2735. if (device_create_file(dev->ddb_dev, &ddb_attrs_snr[i]))
  2736. goto fail;
  2737. if (device_create_file(dev->ddb_dev, &ddb_attrs_ctemp[i]))
  2738. goto fail;
  2739. if (dev->link[0].info->led_num)
  2740. if (device_create_file(dev->ddb_dev,
  2741. &ddb_attrs_led[i]))
  2742. goto fail;
  2743. }
  2744. for (i = 0; i < 4; i++)
  2745. if (dev->link[i].info && dev->link[i].info->tempmon_irq)
  2746. if (device_create_file(dev->ddb_dev,
  2747. &ddb_attrs_fanspeed[i]))
  2748. goto fail;
  2749. return 0;
  2750. fail:
  2751. return -1;
  2752. }
  2753. int ddb_device_create(struct ddb *dev)
  2754. {
  2755. int res = 0;
  2756. if (ddb_num == DDB_MAX_ADAPTER)
  2757. return -ENOMEM;
  2758. mutex_lock(&ddb_mutex);
  2759. dev->nr = ddb_num;
  2760. ddbs[dev->nr] = dev;
  2761. dev->ddb_dev = device_create(&ddb_class, dev->dev,
  2762. MKDEV(ddb_major, dev->nr),
  2763. dev, "ddbridge%d", dev->nr);
  2764. if (IS_ERR(dev->ddb_dev)) {
  2765. res = PTR_ERR(dev->ddb_dev);
  2766. dev_info(dev->dev, "Could not create ddbridge%d\n", dev->nr);
  2767. goto fail;
  2768. }
  2769. res = ddb_device_attrs_add(dev);
  2770. if (res) {
  2771. ddb_device_attrs_del(dev);
  2772. device_destroy(&ddb_class, MKDEV(ddb_major, dev->nr));
  2773. ddbs[dev->nr] = NULL;
  2774. dev->ddb_dev = ERR_PTR(-ENODEV);
  2775. } else {
  2776. ddb_num++;
  2777. }
  2778. fail:
  2779. mutex_unlock(&ddb_mutex);
  2780. return res;
  2781. }
  2782. void ddb_device_destroy(struct ddb *dev)
  2783. {
  2784. if (IS_ERR(dev->ddb_dev))
  2785. return;
  2786. ddb_device_attrs_del(dev);
  2787. device_destroy(&ddb_class, MKDEV(ddb_major, dev->nr));
  2788. }
  2789. /****************************************************************************/
  2790. /****************************************************************************/
  2791. /****************************************************************************/
  2792. static void tempmon_setfan(struct ddb_link *link)
  2793. {
  2794. u32 temp, temp2, pwm;
  2795. if ((ddblreadl(link, TEMPMON_CONTROL) &
  2796. TEMPMON_CONTROL_OVERTEMP) != 0) {
  2797. dev_info(link->dev->dev, "Over temperature condition\n");
  2798. link->overtemperature_error = 1;
  2799. }
  2800. temp = (ddblreadl(link, TEMPMON_SENSOR0) >> 8) & 0xFF;
  2801. if (temp & 0x80)
  2802. temp = 0;
  2803. temp2 = (ddblreadl(link, TEMPMON_SENSOR1) >> 8) & 0xFF;
  2804. if (temp2 & 0x80)
  2805. temp2 = 0;
  2806. if (temp2 > temp)
  2807. temp = temp2;
  2808. pwm = (ddblreadl(link, TEMPMON_FANCONTROL) >> 8) & 0x0F;
  2809. if (pwm > 10)
  2810. pwm = 10;
  2811. if (temp >= link->temp_tab[pwm]) {
  2812. while (pwm < 10 && temp >= link->temp_tab[pwm + 1])
  2813. pwm += 1;
  2814. } else {
  2815. while (pwm > 1 && temp < link->temp_tab[pwm - 2])
  2816. pwm -= 1;
  2817. }
  2818. ddblwritel(link, (pwm << 8), TEMPMON_FANCONTROL);
  2819. }
  2820. static void temp_handler(void *data)
  2821. {
  2822. struct ddb_link *link = (struct ddb_link *)data;
  2823. spin_lock(&link->temp_lock);
  2824. tempmon_setfan(link);
  2825. spin_unlock(&link->temp_lock);
  2826. }
  2827. static int tempmon_init(struct ddb_link *link, int first_time)
  2828. {
  2829. struct ddb *dev = link->dev;
  2830. int status = 0;
  2831. u32 l = link->nr;
  2832. spin_lock_irq(&link->temp_lock);
  2833. if (first_time) {
  2834. static u8 temperature_table[11] = {
  2835. 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80 };
  2836. memcpy(link->temp_tab, temperature_table,
  2837. sizeof(temperature_table));
  2838. }
  2839. ddb_irq_set(dev, l, link->info->tempmon_irq, temp_handler, link);
  2840. ddblwritel(link, (TEMPMON_CONTROL_OVERTEMP | TEMPMON_CONTROL_AUTOSCAN |
  2841. TEMPMON_CONTROL_INTENABLE),
  2842. TEMPMON_CONTROL);
  2843. ddblwritel(link, (3 << 8), TEMPMON_FANCONTROL);
  2844. link->overtemperature_error =
  2845. ((ddblreadl(link, TEMPMON_CONTROL) &
  2846. TEMPMON_CONTROL_OVERTEMP) != 0);
  2847. if (link->overtemperature_error) {
  2848. dev_info(link->dev->dev, "Over temperature condition\n");
  2849. status = -1;
  2850. }
  2851. tempmon_setfan(link);
  2852. spin_unlock_irq(&link->temp_lock);
  2853. return status;
  2854. }
  2855. static int ddb_init_tempmon(struct ddb_link *link)
  2856. {
  2857. const struct ddb_info *info = link->info;
  2858. if (!info->tempmon_irq)
  2859. return 0;
  2860. if (info->type == DDB_OCTOPUS_MAX_CT)
  2861. if (link->ids.regmapid < 0x00010002)
  2862. return 0;
  2863. spin_lock_init(&link->temp_lock);
  2864. dev_dbg(link->dev->dev, "init_tempmon\n");
  2865. return tempmon_init(link, 1);
  2866. }
  2867. /****************************************************************************/
  2868. /****************************************************************************/
  2869. /****************************************************************************/
  2870. static int ddb_init_boards(struct ddb *dev)
  2871. {
  2872. const struct ddb_info *info;
  2873. struct ddb_link *link;
  2874. u32 l;
  2875. for (l = 0; l < DDB_MAX_LINK; l++) {
  2876. link = &dev->link[l];
  2877. info = link->info;
  2878. if (!info)
  2879. continue;
  2880. if (info->board_control) {
  2881. ddbwritel(dev, 0, DDB_LINK_TAG(l) | BOARD_CONTROL);
  2882. msleep(100);
  2883. ddbwritel(dev, info->board_control_2,
  2884. DDB_LINK_TAG(l) | BOARD_CONTROL);
  2885. usleep_range(2000, 3000);
  2886. ddbwritel(dev,
  2887. info->board_control_2 | info->board_control,
  2888. DDB_LINK_TAG(l) | BOARD_CONTROL);
  2889. usleep_range(2000, 3000);
  2890. }
  2891. ddb_init_tempmon(link);
  2892. }
  2893. return 0;
  2894. }
  2895. int ddb_init(struct ddb *dev)
  2896. {
  2897. mutex_init(&dev->link[0].lnb.lock);
  2898. mutex_init(&dev->link[0].flash_mutex);
  2899. if (no_init) {
  2900. ddb_device_create(dev);
  2901. return 0;
  2902. }
  2903. ddb_init_boards(dev);
  2904. if (ddb_i2c_init(dev) < 0)
  2905. goto fail1;
  2906. ddb_ports_init(dev);
  2907. if (ddb_buffers_alloc(dev) < 0) {
  2908. dev_info(dev->dev, "Could not allocate buffer memory\n");
  2909. goto fail2;
  2910. }
  2911. if (ddb_ports_attach(dev) < 0)
  2912. goto fail3;
  2913. ddb_device_create(dev);
  2914. if (dev->link[0].info->fan_num) {
  2915. ddbwritel(dev, 1, GPIO_DIRECTION);
  2916. ddbwritel(dev, 1, GPIO_OUTPUT);
  2917. }
  2918. return 0;
  2919. fail3:
  2920. dev_err(dev->dev, "fail3\n");
  2921. ddb_ports_detach(dev);
  2922. ddb_buffers_free(dev);
  2923. fail2:
  2924. dev_err(dev->dev, "fail2\n");
  2925. ddb_ports_release(dev);
  2926. ddb_i2c_release(dev);
  2927. fail1:
  2928. dev_err(dev->dev, "fail1\n");
  2929. return -1;
  2930. }
  2931. void ddb_unmap(struct ddb *dev)
  2932. {
  2933. if (dev->regs)
  2934. iounmap(dev->regs);
  2935. vfree(dev);
  2936. }
  2937. int ddb_exit_ddbridge(int stage, int error)
  2938. {
  2939. switch (stage) {
  2940. default:
  2941. case 2:
  2942. destroy_workqueue(ddb_wq);
  2943. /* fall-through */
  2944. case 1:
  2945. ddb_class_destroy();
  2946. break;
  2947. }
  2948. return error;
  2949. }
  2950. int ddb_init_ddbridge(void)
  2951. {
  2952. if (dma_buf_num < 8)
  2953. dma_buf_num = 8;
  2954. if (dma_buf_num > 32)
  2955. dma_buf_num = 32;
  2956. if (dma_buf_size < 1)
  2957. dma_buf_size = 1;
  2958. if (dma_buf_size > 43)
  2959. dma_buf_size = 43;
  2960. if (ddb_class_create() < 0)
  2961. return -1;
  2962. ddb_wq = alloc_workqueue("ddbridge", 0, 0);
  2963. if (!ddb_wq)
  2964. return ddb_exit_ddbridge(1, -1);
  2965. return 0;
  2966. }