cx25840-core.c 211 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380
  1. /* cx25840 - Conexant CX25840 audio/video decoder driver
  2. *
  3. * Copyright (C) 2004 Ulf Eklund
  4. *
  5. * Based on the saa7115 driver and on the first version of Chris Kennedy's
  6. * cx25840 driver.
  7. *
  8. * Changes by Tyler Trafford <tatrafford@comcast.net>
  9. * - cleanup/rewrite for V4L2 API (2005)
  10. *
  11. * VBI support by Hans Verkuil <hverkuil@xs4all.nl>.
  12. *
  13. * NTSC sliced VBI support by Christopher Neufeld <television@cneufeld.ca>
  14. * with additional fixes by Hans Verkuil <hverkuil@xs4all.nl>.
  15. *
  16. * CX23885 support by Steven Toth <stoth@linuxtv.org>.
  17. *
  18. * CX2388[578] IRQ handling, IO Pin mux configuration and other small fixes are
  19. * Copyright (C) 2010 Andy Walls <awalls@md.metrocast.net>
  20. *
  21. * CX23888 DIF support for the HVR1850
  22. * Copyright (C) 2011 Steven Toth <stoth@kernellabs.com>
  23. *
  24. * This program is free software; you can redistribute it and/or
  25. * modify it under the terms of the GNU General Public License
  26. * as published by the Free Software Foundation; either version 2
  27. * of the License, or (at your option) any later version.
  28. *
  29. * This program is distributed in the hope that it will be useful,
  30. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  31. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  32. * GNU General Public License for more details.
  33. *
  34. * You should have received a copy of the GNU General Public License
  35. * along with this program; if not, write to the Free Software
  36. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  37. */
  38. #include <linux/kernel.h>
  39. #include <linux/module.h>
  40. #include <linux/slab.h>
  41. #include <linux/videodev2.h>
  42. #include <linux/i2c.h>
  43. #include <linux/delay.h>
  44. #include <linux/math64.h>
  45. #include <media/v4l2-common.h>
  46. #include <media/cx25840.h>
  47. #include "cx25840-core.h"
  48. MODULE_DESCRIPTION("Conexant CX25840 audio/video decoder driver");
  49. MODULE_AUTHOR("Ulf Eklund, Chris Kennedy, Hans Verkuil, Tyler Trafford");
  50. MODULE_LICENSE("GPL");
  51. #define CX25840_VID_INT_STAT_REG 0x410
  52. #define CX25840_VID_INT_STAT_BITS 0x0000ffff
  53. #define CX25840_VID_INT_MASK_BITS 0xffff0000
  54. #define CX25840_VID_INT_MASK_SHFT 16
  55. #define CX25840_VID_INT_MASK_REG 0x412
  56. #define CX23885_AUD_MC_INT_MASK_REG 0x80c
  57. #define CX23885_AUD_MC_INT_STAT_BITS 0xffff0000
  58. #define CX23885_AUD_MC_INT_CTRL_BITS 0x0000ffff
  59. #define CX23885_AUD_MC_INT_STAT_SHFT 16
  60. #define CX25840_AUD_INT_CTRL_REG 0x812
  61. #define CX25840_AUD_INT_STAT_REG 0x813
  62. #define CX23885_PIN_CTRL_IRQ_REG 0x123
  63. #define CX23885_PIN_CTRL_IRQ_IR_STAT 0x40
  64. #define CX23885_PIN_CTRL_IRQ_AUD_STAT 0x20
  65. #define CX23885_PIN_CTRL_IRQ_VID_STAT 0x10
  66. #define CX25840_IR_STATS_REG 0x210
  67. #define CX25840_IR_IRQEN_REG 0x214
  68. static int cx25840_debug;
  69. module_param_named(debug,cx25840_debug, int, 0644);
  70. MODULE_PARM_DESC(debug, "Debugging messages [0=Off (default) 1=On]");
  71. /* ----------------------------------------------------------------------- */
  72. static void cx23888_std_setup(struct i2c_client *client);
  73. int cx25840_write(struct i2c_client *client, u16 addr, u8 value)
  74. {
  75. u8 buffer[3];
  76. buffer[0] = addr >> 8;
  77. buffer[1] = addr & 0xff;
  78. buffer[2] = value;
  79. return i2c_master_send(client, buffer, 3);
  80. }
  81. int cx25840_write4(struct i2c_client *client, u16 addr, u32 value)
  82. {
  83. u8 buffer[6];
  84. buffer[0] = addr >> 8;
  85. buffer[1] = addr & 0xff;
  86. buffer[2] = value & 0xff;
  87. buffer[3] = (value >> 8) & 0xff;
  88. buffer[4] = (value >> 16) & 0xff;
  89. buffer[5] = value >> 24;
  90. return i2c_master_send(client, buffer, 6);
  91. }
  92. u8 cx25840_read(struct i2c_client * client, u16 addr)
  93. {
  94. struct i2c_msg msgs[2];
  95. u8 tx_buf[2], rx_buf[1];
  96. /* Write register address */
  97. tx_buf[0] = addr >> 8;
  98. tx_buf[1] = addr & 0xff;
  99. msgs[0].addr = client->addr;
  100. msgs[0].flags = 0;
  101. msgs[0].len = 2;
  102. msgs[0].buf = (char *) tx_buf;
  103. /* Read data from register */
  104. msgs[1].addr = client->addr;
  105. msgs[1].flags = I2C_M_RD;
  106. msgs[1].len = 1;
  107. msgs[1].buf = (char *) rx_buf;
  108. if (i2c_transfer(client->adapter, msgs, 2) < 2)
  109. return 0;
  110. return rx_buf[0];
  111. }
  112. u32 cx25840_read4(struct i2c_client * client, u16 addr)
  113. {
  114. struct i2c_msg msgs[2];
  115. u8 tx_buf[2], rx_buf[4];
  116. /* Write register address */
  117. tx_buf[0] = addr >> 8;
  118. tx_buf[1] = addr & 0xff;
  119. msgs[0].addr = client->addr;
  120. msgs[0].flags = 0;
  121. msgs[0].len = 2;
  122. msgs[0].buf = (char *) tx_buf;
  123. /* Read data from registers */
  124. msgs[1].addr = client->addr;
  125. msgs[1].flags = I2C_M_RD;
  126. msgs[1].len = 4;
  127. msgs[1].buf = (char *) rx_buf;
  128. if (i2c_transfer(client->adapter, msgs, 2) < 2)
  129. return 0;
  130. return (rx_buf[3] << 24) | (rx_buf[2] << 16) | (rx_buf[1] << 8) |
  131. rx_buf[0];
  132. }
  133. int cx25840_and_or(struct i2c_client *client, u16 addr, unsigned and_mask,
  134. u8 or_value)
  135. {
  136. return cx25840_write(client, addr,
  137. (cx25840_read(client, addr) & and_mask) |
  138. or_value);
  139. }
  140. int cx25840_and_or4(struct i2c_client *client, u16 addr, u32 and_mask,
  141. u32 or_value)
  142. {
  143. return cx25840_write4(client, addr,
  144. (cx25840_read4(client, addr) & and_mask) |
  145. or_value);
  146. }
  147. /* ----------------------------------------------------------------------- */
  148. static int set_input(struct i2c_client *client, enum cx25840_video_input vid_input,
  149. enum cx25840_audio_input aud_input);
  150. /* ----------------------------------------------------------------------- */
  151. static int cx23885_s_io_pin_config(struct v4l2_subdev *sd, size_t n,
  152. struct v4l2_subdev_io_pin_config *p)
  153. {
  154. struct i2c_client *client = v4l2_get_subdevdata(sd);
  155. int i;
  156. u32 pin_ctrl;
  157. u8 gpio_oe, gpio_data, strength;
  158. pin_ctrl = cx25840_read4(client, 0x120);
  159. gpio_oe = cx25840_read(client, 0x160);
  160. gpio_data = cx25840_read(client, 0x164);
  161. for (i = 0; i < n; i++) {
  162. strength = p[i].strength;
  163. if (strength > CX25840_PIN_DRIVE_FAST)
  164. strength = CX25840_PIN_DRIVE_FAST;
  165. switch (p[i].pin) {
  166. case CX23885_PIN_IRQ_N_GPIO16:
  167. if (p[i].function != CX23885_PAD_IRQ_N) {
  168. /* GPIO16 */
  169. pin_ctrl &= ~(0x1 << 25);
  170. } else {
  171. /* IRQ_N */
  172. if (p[i].flags &
  173. (V4L2_SUBDEV_IO_PIN_DISABLE |
  174. V4L2_SUBDEV_IO_PIN_INPUT)) {
  175. pin_ctrl &= ~(0x1 << 25);
  176. } else {
  177. pin_ctrl |= (0x1 << 25);
  178. }
  179. if (p[i].flags &
  180. V4L2_SUBDEV_IO_PIN_ACTIVE_LOW) {
  181. pin_ctrl &= ~(0x1 << 24);
  182. } else {
  183. pin_ctrl |= (0x1 << 24);
  184. }
  185. }
  186. break;
  187. case CX23885_PIN_IR_RX_GPIO19:
  188. if (p[i].function != CX23885_PAD_GPIO19) {
  189. /* IR_RX */
  190. gpio_oe |= (0x1 << 0);
  191. pin_ctrl &= ~(0x3 << 18);
  192. pin_ctrl |= (strength << 18);
  193. } else {
  194. /* GPIO19 */
  195. gpio_oe &= ~(0x1 << 0);
  196. if (p[i].flags & V4L2_SUBDEV_IO_PIN_SET_VALUE) {
  197. gpio_data &= ~(0x1 << 0);
  198. gpio_data |= ((p[i].value & 0x1) << 0);
  199. }
  200. pin_ctrl &= ~(0x3 << 12);
  201. pin_ctrl |= (strength << 12);
  202. }
  203. break;
  204. case CX23885_PIN_IR_TX_GPIO20:
  205. if (p[i].function != CX23885_PAD_GPIO20) {
  206. /* IR_TX */
  207. gpio_oe |= (0x1 << 1);
  208. if (p[i].flags & V4L2_SUBDEV_IO_PIN_DISABLE)
  209. pin_ctrl &= ~(0x1 << 10);
  210. else
  211. pin_ctrl |= (0x1 << 10);
  212. pin_ctrl &= ~(0x3 << 18);
  213. pin_ctrl |= (strength << 18);
  214. } else {
  215. /* GPIO20 */
  216. gpio_oe &= ~(0x1 << 1);
  217. if (p[i].flags & V4L2_SUBDEV_IO_PIN_SET_VALUE) {
  218. gpio_data &= ~(0x1 << 1);
  219. gpio_data |= ((p[i].value & 0x1) << 1);
  220. }
  221. pin_ctrl &= ~(0x3 << 12);
  222. pin_ctrl |= (strength << 12);
  223. }
  224. break;
  225. case CX23885_PIN_I2S_SDAT_GPIO21:
  226. if (p[i].function != CX23885_PAD_GPIO21) {
  227. /* I2S_SDAT */
  228. /* TODO: Input or Output config */
  229. gpio_oe |= (0x1 << 2);
  230. pin_ctrl &= ~(0x3 << 22);
  231. pin_ctrl |= (strength << 22);
  232. } else {
  233. /* GPIO21 */
  234. gpio_oe &= ~(0x1 << 2);
  235. if (p[i].flags & V4L2_SUBDEV_IO_PIN_SET_VALUE) {
  236. gpio_data &= ~(0x1 << 2);
  237. gpio_data |= ((p[i].value & 0x1) << 2);
  238. }
  239. pin_ctrl &= ~(0x3 << 12);
  240. pin_ctrl |= (strength << 12);
  241. }
  242. break;
  243. case CX23885_PIN_I2S_WCLK_GPIO22:
  244. if (p[i].function != CX23885_PAD_GPIO22) {
  245. /* I2S_WCLK */
  246. /* TODO: Input or Output config */
  247. gpio_oe |= (0x1 << 3);
  248. pin_ctrl &= ~(0x3 << 22);
  249. pin_ctrl |= (strength << 22);
  250. } else {
  251. /* GPIO22 */
  252. gpio_oe &= ~(0x1 << 3);
  253. if (p[i].flags & V4L2_SUBDEV_IO_PIN_SET_VALUE) {
  254. gpio_data &= ~(0x1 << 3);
  255. gpio_data |= ((p[i].value & 0x1) << 3);
  256. }
  257. pin_ctrl &= ~(0x3 << 12);
  258. pin_ctrl |= (strength << 12);
  259. }
  260. break;
  261. case CX23885_PIN_I2S_BCLK_GPIO23:
  262. if (p[i].function != CX23885_PAD_GPIO23) {
  263. /* I2S_BCLK */
  264. /* TODO: Input or Output config */
  265. gpio_oe |= (0x1 << 4);
  266. pin_ctrl &= ~(0x3 << 22);
  267. pin_ctrl |= (strength << 22);
  268. } else {
  269. /* GPIO23 */
  270. gpio_oe &= ~(0x1 << 4);
  271. if (p[i].flags & V4L2_SUBDEV_IO_PIN_SET_VALUE) {
  272. gpio_data &= ~(0x1 << 4);
  273. gpio_data |= ((p[i].value & 0x1) << 4);
  274. }
  275. pin_ctrl &= ~(0x3 << 12);
  276. pin_ctrl |= (strength << 12);
  277. }
  278. break;
  279. }
  280. }
  281. cx25840_write(client, 0x164, gpio_data);
  282. cx25840_write(client, 0x160, gpio_oe);
  283. cx25840_write4(client, 0x120, pin_ctrl);
  284. return 0;
  285. }
  286. static int common_s_io_pin_config(struct v4l2_subdev *sd, size_t n,
  287. struct v4l2_subdev_io_pin_config *pincfg)
  288. {
  289. struct cx25840_state *state = to_state(sd);
  290. if (is_cx2388x(state))
  291. return cx23885_s_io_pin_config(sd, n, pincfg);
  292. return 0;
  293. }
  294. /* ----------------------------------------------------------------------- */
  295. static void init_dll1(struct i2c_client *client)
  296. {
  297. /* This is the Hauppauge sequence used to
  298. * initialize the Delay Lock Loop 1 (ADC DLL). */
  299. cx25840_write(client, 0x159, 0x23);
  300. cx25840_write(client, 0x15a, 0x87);
  301. cx25840_write(client, 0x15b, 0x06);
  302. udelay(10);
  303. cx25840_write(client, 0x159, 0xe1);
  304. udelay(10);
  305. cx25840_write(client, 0x15a, 0x86);
  306. cx25840_write(client, 0x159, 0xe0);
  307. cx25840_write(client, 0x159, 0xe1);
  308. cx25840_write(client, 0x15b, 0x10);
  309. }
  310. static void init_dll2(struct i2c_client *client)
  311. {
  312. /* This is the Hauppauge sequence used to
  313. * initialize the Delay Lock Loop 2 (ADC DLL). */
  314. cx25840_write(client, 0x15d, 0xe3);
  315. cx25840_write(client, 0x15e, 0x86);
  316. cx25840_write(client, 0x15f, 0x06);
  317. udelay(10);
  318. cx25840_write(client, 0x15d, 0xe1);
  319. cx25840_write(client, 0x15d, 0xe0);
  320. cx25840_write(client, 0x15d, 0xe1);
  321. }
  322. static void cx25836_initialize(struct i2c_client *client)
  323. {
  324. /* reset configuration is described on page 3-77 of the CX25836 datasheet */
  325. /* 2. */
  326. cx25840_and_or(client, 0x000, ~0x01, 0x01);
  327. cx25840_and_or(client, 0x000, ~0x01, 0x00);
  328. /* 3a. */
  329. cx25840_and_or(client, 0x15a, ~0x70, 0x00);
  330. /* 3b. */
  331. cx25840_and_or(client, 0x15b, ~0x1e, 0x06);
  332. /* 3c. */
  333. cx25840_and_or(client, 0x159, ~0x02, 0x02);
  334. /* 3d. */
  335. udelay(10);
  336. /* 3e. */
  337. cx25840_and_or(client, 0x159, ~0x02, 0x00);
  338. /* 3f. */
  339. cx25840_and_or(client, 0x159, ~0xc0, 0xc0);
  340. /* 3g. */
  341. cx25840_and_or(client, 0x159, ~0x01, 0x00);
  342. cx25840_and_or(client, 0x159, ~0x01, 0x01);
  343. /* 3h. */
  344. cx25840_and_or(client, 0x15b, ~0x1e, 0x10);
  345. }
  346. static void cx25840_work_handler(struct work_struct *work)
  347. {
  348. struct cx25840_state *state = container_of(work, struct cx25840_state, fw_work);
  349. cx25840_loadfw(state->c);
  350. wake_up(&state->fw_wait);
  351. }
  352. static void cx25840_initialize(struct i2c_client *client)
  353. {
  354. DEFINE_WAIT(wait);
  355. struct cx25840_state *state = to_state(i2c_get_clientdata(client));
  356. struct workqueue_struct *q;
  357. /* datasheet startup in numbered steps, refer to page 3-77 */
  358. /* 2. */
  359. cx25840_and_or(client, 0x803, ~0x10, 0x00);
  360. /* The default of this register should be 4, but I get 0 instead.
  361. * Set this register to 4 manually. */
  362. cx25840_write(client, 0x000, 0x04);
  363. /* 3. */
  364. init_dll1(client);
  365. init_dll2(client);
  366. cx25840_write(client, 0x136, 0x0a);
  367. /* 4. */
  368. cx25840_write(client, 0x13c, 0x01);
  369. cx25840_write(client, 0x13c, 0x00);
  370. /* 5. */
  371. /* Do the firmware load in a work handler to prevent.
  372. Otherwise the kernel is blocked waiting for the
  373. bit-banging i2c interface to finish uploading the
  374. firmware. */
  375. INIT_WORK(&state->fw_work, cx25840_work_handler);
  376. init_waitqueue_head(&state->fw_wait);
  377. q = create_singlethread_workqueue("cx25840_fw");
  378. if (q) {
  379. prepare_to_wait(&state->fw_wait, &wait, TASK_UNINTERRUPTIBLE);
  380. queue_work(q, &state->fw_work);
  381. schedule();
  382. finish_wait(&state->fw_wait, &wait);
  383. destroy_workqueue(q);
  384. }
  385. /* 6. */
  386. cx25840_write(client, 0x115, 0x8c);
  387. cx25840_write(client, 0x116, 0x07);
  388. cx25840_write(client, 0x118, 0x02);
  389. /* 7. */
  390. cx25840_write(client, 0x4a5, 0x80);
  391. cx25840_write(client, 0x4a5, 0x00);
  392. cx25840_write(client, 0x402, 0x00);
  393. /* 8. */
  394. cx25840_and_or(client, 0x401, ~0x18, 0);
  395. cx25840_and_or(client, 0x4a2, ~0x10, 0x10);
  396. /* steps 8c and 8d are done in change_input() */
  397. /* 10. */
  398. cx25840_write(client, 0x8d3, 0x1f);
  399. cx25840_write(client, 0x8e3, 0x03);
  400. cx25840_std_setup(client);
  401. /* trial and error says these are needed to get audio */
  402. cx25840_write(client, 0x914, 0xa0);
  403. cx25840_write(client, 0x918, 0xa0);
  404. cx25840_write(client, 0x919, 0x01);
  405. /* stereo preferred */
  406. cx25840_write(client, 0x809, 0x04);
  407. /* AC97 shift */
  408. cx25840_write(client, 0x8cf, 0x0f);
  409. /* (re)set input */
  410. set_input(client, state->vid_input, state->aud_input);
  411. /* start microcontroller */
  412. cx25840_and_or(client, 0x803, ~0x10, 0x10);
  413. }
  414. static void cx23885_initialize(struct i2c_client *client)
  415. {
  416. DEFINE_WAIT(wait);
  417. struct cx25840_state *state = to_state(i2c_get_clientdata(client));
  418. u32 clk_freq = 0;
  419. struct workqueue_struct *q;
  420. /* cx23885 sets hostdata to clk_freq pointer */
  421. if (v4l2_get_subdev_hostdata(&state->sd))
  422. clk_freq = *((u32 *)v4l2_get_subdev_hostdata(&state->sd));
  423. /*
  424. * Come out of digital power down
  425. * The CX23888, at least, needs this, otherwise registers aside from
  426. * 0x0-0x2 can't be read or written.
  427. */
  428. cx25840_write(client, 0x000, 0);
  429. /* Internal Reset */
  430. cx25840_and_or(client, 0x102, ~0x01, 0x01);
  431. cx25840_and_or(client, 0x102, ~0x01, 0x00);
  432. /* Stop microcontroller */
  433. cx25840_and_or(client, 0x803, ~0x10, 0x00);
  434. /* DIF in reset? */
  435. cx25840_write(client, 0x398, 0);
  436. /*
  437. * Trust the default xtal, no division
  438. * '885: 28.636363... MHz
  439. * '887: 25.000000 MHz
  440. * '888: 50.000000 MHz
  441. */
  442. cx25840_write(client, 0x2, 0x76);
  443. /* Power up all the PLL's and DLL */
  444. cx25840_write(client, 0x1, 0x40);
  445. /* Sys PLL */
  446. switch (state->id) {
  447. case CX23888_AV:
  448. /*
  449. * 50.0 MHz * (0xb + 0xe8ba26/0x2000000)/4 = 5 * 28.636363 MHz
  450. * 572.73 MHz before post divide
  451. */
  452. if (clk_freq == 25000000) {
  453. /* 888/ImpactVCBe or 25Mhz xtal */
  454. ; /* nothing to do */
  455. } else {
  456. /* HVR1850 or 50MHz xtal */
  457. cx25840_write(client, 0x2, 0x71);
  458. }
  459. cx25840_write4(client, 0x11c, 0x01d1744c);
  460. cx25840_write4(client, 0x118, 0x00000416);
  461. cx25840_write4(client, 0x404, 0x0010253e);
  462. cx25840_write4(client, 0x42c, 0x42600000);
  463. cx25840_write4(client, 0x44c, 0x161f1000);
  464. break;
  465. case CX23887_AV:
  466. /*
  467. * 25.0 MHz * (0x16 + 0x1d1744c/0x2000000)/4 = 5 * 28.636363 MHz
  468. * 572.73 MHz before post divide
  469. */
  470. cx25840_write4(client, 0x11c, 0x01d1744c);
  471. cx25840_write4(client, 0x118, 0x00000416);
  472. break;
  473. case CX23885_AV:
  474. default:
  475. /*
  476. * 28.636363 MHz * (0x14 + 0x0/0x2000000)/4 = 5 * 28.636363 MHz
  477. * 572.73 MHz before post divide
  478. */
  479. cx25840_write4(client, 0x11c, 0x00000000);
  480. cx25840_write4(client, 0x118, 0x00000414);
  481. break;
  482. }
  483. /* Disable DIF bypass */
  484. cx25840_write4(client, 0x33c, 0x00000001);
  485. /* DIF Src phase inc */
  486. cx25840_write4(client, 0x340, 0x0df7df83);
  487. /*
  488. * Vid PLL
  489. * Setup for a BT.656 pixel clock of 13.5 Mpixels/second
  490. *
  491. * 28.636363 MHz * (0xf + 0x02be2c9/0x2000000)/4 = 8 * 13.5 MHz
  492. * 432.0 MHz before post divide
  493. */
  494. /* HVR1850 */
  495. switch (state->id) {
  496. case CX23888_AV:
  497. if (clk_freq == 25000000) {
  498. /* 888/ImpactVCBe or 25MHz xtal */
  499. cx25840_write4(client, 0x10c, 0x01b6db7b);
  500. cx25840_write4(client, 0x108, 0x00000512);
  501. } else {
  502. /* 888/HVR1250 or 50MHz xtal */
  503. cx25840_write4(client, 0x10c, 0x13333333);
  504. cx25840_write4(client, 0x108, 0x00000515);
  505. }
  506. break;
  507. default:
  508. cx25840_write4(client, 0x10c, 0x002be2c9);
  509. cx25840_write4(client, 0x108, 0x0000040f);
  510. }
  511. /* Luma */
  512. cx25840_write4(client, 0x414, 0x00107d12);
  513. /* Chroma */
  514. cx25840_write4(client, 0x420, 0x3d008282);
  515. /*
  516. * Aux PLL
  517. * Initial setup for audio sample clock:
  518. * 48 ksps, 16 bits/sample, x160 multiplier = 122.88 MHz
  519. * Initial I2S output/master clock(?):
  520. * 48 ksps, 16 bits/sample, x16 multiplier = 12.288 MHz
  521. */
  522. switch (state->id) {
  523. case CX23888_AV:
  524. /*
  525. * 50.0 MHz * (0x7 + 0x0bedfa4/0x2000000)/3 = 122.88 MHz
  526. * 368.64 MHz before post divide
  527. * 122.88 MHz / 0xa = 12.288 MHz
  528. */
  529. /* HVR1850 or 50MHz xtal or 25MHz xtal */
  530. cx25840_write4(client, 0x114, 0x017dbf48);
  531. cx25840_write4(client, 0x110, 0x000a030e);
  532. break;
  533. case CX23887_AV:
  534. /*
  535. * 25.0 MHz * (0xe + 0x17dbf48/0x2000000)/3 = 122.88 MHz
  536. * 368.64 MHz before post divide
  537. * 122.88 MHz / 0xa = 12.288 MHz
  538. */
  539. cx25840_write4(client, 0x114, 0x017dbf48);
  540. cx25840_write4(client, 0x110, 0x000a030e);
  541. break;
  542. case CX23885_AV:
  543. default:
  544. /*
  545. * 28.636363 MHz * (0xc + 0x1bf0c9e/0x2000000)/3 = 122.88 MHz
  546. * 368.64 MHz before post divide
  547. * 122.88 MHz / 0xa = 12.288 MHz
  548. */
  549. cx25840_write4(client, 0x114, 0x01bf0c9e);
  550. cx25840_write4(client, 0x110, 0x000a030c);
  551. break;
  552. }
  553. /* ADC2 input select */
  554. cx25840_write(client, 0x102, 0x10);
  555. /* VIN1 & VIN5 */
  556. cx25840_write(client, 0x103, 0x11);
  557. /* Enable format auto detect */
  558. cx25840_write(client, 0x400, 0);
  559. /* Fast subchroma lock */
  560. /* White crush, Chroma AGC & Chroma Killer enabled */
  561. cx25840_write(client, 0x401, 0xe8);
  562. /* Select AFE clock pad output source */
  563. cx25840_write(client, 0x144, 0x05);
  564. /* Drive GPIO2 direction and values for HVR1700
  565. * where an onboard mux selects the output of demodulator
  566. * vs the 417. Failure to set this results in no DTV.
  567. * It's safe to set this across all Hauppauge boards
  568. * currently, regardless of the board type.
  569. */
  570. cx25840_write(client, 0x160, 0x1d);
  571. cx25840_write(client, 0x164, 0x00);
  572. /* Do the firmware load in a work handler to prevent.
  573. Otherwise the kernel is blocked waiting for the
  574. bit-banging i2c interface to finish uploading the
  575. firmware. */
  576. INIT_WORK(&state->fw_work, cx25840_work_handler);
  577. init_waitqueue_head(&state->fw_wait);
  578. q = create_singlethread_workqueue("cx25840_fw");
  579. if (q) {
  580. prepare_to_wait(&state->fw_wait, &wait, TASK_UNINTERRUPTIBLE);
  581. queue_work(q, &state->fw_work);
  582. schedule();
  583. finish_wait(&state->fw_wait, &wait);
  584. destroy_workqueue(q);
  585. }
  586. /* Call the cx23888 specific std setup func, we no longer rely on
  587. * the generic cx24840 func.
  588. */
  589. if (is_cx23888(state))
  590. cx23888_std_setup(client);
  591. else
  592. cx25840_std_setup(client);
  593. /* (re)set input */
  594. set_input(client, state->vid_input, state->aud_input);
  595. /* start microcontroller */
  596. cx25840_and_or(client, 0x803, ~0x10, 0x10);
  597. /* Disable and clear video interrupts - we don't use them */
  598. cx25840_write4(client, CX25840_VID_INT_STAT_REG, 0xffffffff);
  599. /* Disable and clear audio interrupts - we don't use them */
  600. cx25840_write(client, CX25840_AUD_INT_CTRL_REG, 0xff);
  601. cx25840_write(client, CX25840_AUD_INT_STAT_REG, 0xff);
  602. /* CC raw enable */
  603. /* - VIP 1.1 control codes - 10bit, blue field enable.
  604. * - enable raw data during vertical blanking.
  605. * - enable ancillary Data insertion for 656 or VIP.
  606. */
  607. cx25840_write4(client, 0x404, 0x0010253e);
  608. /* CC on - Undocumented Register */
  609. cx25840_write(client, 0x42f, 0x66);
  610. /* HVR-1250 / HVR1850 DIF related */
  611. /* Power everything up */
  612. cx25840_write4(client, 0x130, 0x0);
  613. /* Undocumented */
  614. cx25840_write4(client, 0x478, 0x6628021F);
  615. /* AFE_CLK_OUT_CTRL - Select the clock output source as output */
  616. cx25840_write4(client, 0x144, 0x5);
  617. /* I2C_OUT_CTL - I2S output configuration as
  618. * Master, Sony, Left justified, left sample on WS=1
  619. */
  620. cx25840_write4(client, 0x918, 0x1a0);
  621. /* AFE_DIAG_CTRL1 */
  622. cx25840_write4(client, 0x134, 0x000a1800);
  623. /* AFE_DIAG_CTRL3 - Inverted Polarity for Audio and Video */
  624. cx25840_write4(client, 0x13c, 0x00310000);
  625. }
  626. /* ----------------------------------------------------------------------- */
  627. static void cx231xx_initialize(struct i2c_client *client)
  628. {
  629. DEFINE_WAIT(wait);
  630. struct cx25840_state *state = to_state(i2c_get_clientdata(client));
  631. struct workqueue_struct *q;
  632. /* Internal Reset */
  633. cx25840_and_or(client, 0x102, ~0x01, 0x01);
  634. cx25840_and_or(client, 0x102, ~0x01, 0x00);
  635. /* Stop microcontroller */
  636. cx25840_and_or(client, 0x803, ~0x10, 0x00);
  637. /* DIF in reset? */
  638. cx25840_write(client, 0x398, 0);
  639. /* Trust the default xtal, no division */
  640. /* This changes for the cx23888 products */
  641. cx25840_write(client, 0x2, 0x76);
  642. /* Bring down the regulator for AUX clk */
  643. cx25840_write(client, 0x1, 0x40);
  644. /* Disable DIF bypass */
  645. cx25840_write4(client, 0x33c, 0x00000001);
  646. /* DIF Src phase inc */
  647. cx25840_write4(client, 0x340, 0x0df7df83);
  648. /* Luma */
  649. cx25840_write4(client, 0x414, 0x00107d12);
  650. /* Chroma */
  651. cx25840_write4(client, 0x420, 0x3d008282);
  652. /* ADC2 input select */
  653. cx25840_write(client, 0x102, 0x10);
  654. /* VIN1 & VIN5 */
  655. cx25840_write(client, 0x103, 0x11);
  656. /* Enable format auto detect */
  657. cx25840_write(client, 0x400, 0);
  658. /* Fast subchroma lock */
  659. /* White crush, Chroma AGC & Chroma Killer enabled */
  660. cx25840_write(client, 0x401, 0xe8);
  661. /* Do the firmware load in a work handler to prevent.
  662. Otherwise the kernel is blocked waiting for the
  663. bit-banging i2c interface to finish uploading the
  664. firmware. */
  665. INIT_WORK(&state->fw_work, cx25840_work_handler);
  666. init_waitqueue_head(&state->fw_wait);
  667. q = create_singlethread_workqueue("cx25840_fw");
  668. if (q) {
  669. prepare_to_wait(&state->fw_wait, &wait, TASK_UNINTERRUPTIBLE);
  670. queue_work(q, &state->fw_work);
  671. schedule();
  672. finish_wait(&state->fw_wait, &wait);
  673. destroy_workqueue(q);
  674. }
  675. cx25840_std_setup(client);
  676. /* (re)set input */
  677. set_input(client, state->vid_input, state->aud_input);
  678. /* start microcontroller */
  679. cx25840_and_or(client, 0x803, ~0x10, 0x10);
  680. /* CC raw enable */
  681. cx25840_write(client, 0x404, 0x0b);
  682. /* CC on */
  683. cx25840_write(client, 0x42f, 0x66);
  684. cx25840_write4(client, 0x474, 0x1e1e601a);
  685. }
  686. /* ----------------------------------------------------------------------- */
  687. void cx25840_std_setup(struct i2c_client *client)
  688. {
  689. struct cx25840_state *state = to_state(i2c_get_clientdata(client));
  690. v4l2_std_id std = state->std;
  691. int hblank, hactive, burst, vblank, vactive, sc;
  692. int vblank656, src_decimation;
  693. int luma_lpf, uv_lpf, comb;
  694. u32 pll_int, pll_frac, pll_post;
  695. /* datasheet startup, step 8d */
  696. if (std & ~V4L2_STD_NTSC)
  697. cx25840_write(client, 0x49f, 0x11);
  698. else
  699. cx25840_write(client, 0x49f, 0x14);
  700. if (std & V4L2_STD_625_50) {
  701. hblank = 132;
  702. hactive = 720;
  703. burst = 93;
  704. vblank = 36;
  705. vactive = 580;
  706. vblank656 = 40;
  707. src_decimation = 0x21f;
  708. luma_lpf = 2;
  709. if (std & V4L2_STD_SECAM) {
  710. uv_lpf = 0;
  711. comb = 0;
  712. sc = 0x0a425f;
  713. } else if (std == V4L2_STD_PAL_Nc) {
  714. uv_lpf = 1;
  715. comb = 0x20;
  716. sc = 556453;
  717. } else {
  718. uv_lpf = 1;
  719. comb = 0x20;
  720. sc = 688739;
  721. }
  722. } else {
  723. hactive = 720;
  724. hblank = 122;
  725. vactive = 487;
  726. luma_lpf = 1;
  727. uv_lpf = 1;
  728. src_decimation = 0x21f;
  729. if (std == V4L2_STD_PAL_60) {
  730. vblank = 26;
  731. vblank656 = 26;
  732. burst = 0x5b;
  733. luma_lpf = 2;
  734. comb = 0x20;
  735. sc = 688739;
  736. } else if (std == V4L2_STD_PAL_M) {
  737. vblank = 20;
  738. vblank656 = 24;
  739. burst = 0x61;
  740. comb = 0x20;
  741. sc = 555452;
  742. } else {
  743. vblank = 26;
  744. vblank656 = 26;
  745. burst = 0x5b;
  746. comb = 0x66;
  747. sc = 556063;
  748. }
  749. }
  750. /* DEBUG: Displays configured PLL frequency */
  751. if (!is_cx231xx(state)) {
  752. pll_int = cx25840_read(client, 0x108);
  753. pll_frac = cx25840_read4(client, 0x10c) & 0x1ffffff;
  754. pll_post = cx25840_read(client, 0x109);
  755. v4l_dbg(1, cx25840_debug, client,
  756. "PLL regs = int: %u, frac: %u, post: %u\n",
  757. pll_int, pll_frac, pll_post);
  758. if (pll_post) {
  759. int fin, fsc;
  760. int pll = (28636363L * ((((u64)pll_int) << 25L) + pll_frac)) >> 25L;
  761. pll /= pll_post;
  762. v4l_dbg(1, cx25840_debug, client, "PLL = %d.%06d MHz\n",
  763. pll / 1000000, pll % 1000000);
  764. v4l_dbg(1, cx25840_debug, client, "PLL/8 = %d.%06d MHz\n",
  765. pll / 8000000, (pll / 8) % 1000000);
  766. fin = ((u64)src_decimation * pll) >> 12;
  767. v4l_dbg(1, cx25840_debug, client,
  768. "ADC Sampling freq = %d.%06d MHz\n",
  769. fin / 1000000, fin % 1000000);
  770. fsc = (((u64)sc) * pll) >> 24L;
  771. v4l_dbg(1, cx25840_debug, client,
  772. "Chroma sub-carrier freq = %d.%06d MHz\n",
  773. fsc / 1000000, fsc % 1000000);
  774. v4l_dbg(1, cx25840_debug, client, "hblank %i, hactive %i, "
  775. "vblank %i, vactive %i, vblank656 %i, src_dec %i, "
  776. "burst 0x%02x, luma_lpf %i, uv_lpf %i, comb 0x%02x, "
  777. "sc 0x%06x\n",
  778. hblank, hactive, vblank, vactive, vblank656,
  779. src_decimation, burst, luma_lpf, uv_lpf, comb, sc);
  780. }
  781. }
  782. /* Sets horizontal blanking delay and active lines */
  783. cx25840_write(client, 0x470, hblank);
  784. cx25840_write(client, 0x471,
  785. (((hblank >> 8) & 0x3) | (hactive << 4)) & 0xff);
  786. cx25840_write(client, 0x472, hactive >> 4);
  787. /* Sets burst gate delay */
  788. cx25840_write(client, 0x473, burst);
  789. /* Sets vertical blanking delay and active duration */
  790. cx25840_write(client, 0x474, vblank);
  791. cx25840_write(client, 0x475,
  792. (((vblank >> 8) & 0x3) | (vactive << 4)) & 0xff);
  793. cx25840_write(client, 0x476, vactive >> 4);
  794. cx25840_write(client, 0x477, vblank656);
  795. /* Sets src decimation rate */
  796. cx25840_write(client, 0x478, src_decimation & 0xff);
  797. cx25840_write(client, 0x479, (src_decimation >> 8) & 0xff);
  798. /* Sets Luma and UV Low pass filters */
  799. cx25840_write(client, 0x47a, luma_lpf << 6 | ((uv_lpf << 4) & 0x30));
  800. /* Enables comb filters */
  801. cx25840_write(client, 0x47b, comb);
  802. /* Sets SC Step*/
  803. cx25840_write(client, 0x47c, sc);
  804. cx25840_write(client, 0x47d, (sc >> 8) & 0xff);
  805. cx25840_write(client, 0x47e, (sc >> 16) & 0xff);
  806. /* Sets VBI parameters */
  807. if (std & V4L2_STD_625_50) {
  808. cx25840_write(client, 0x47f, 0x01);
  809. state->vbi_line_offset = 5;
  810. } else {
  811. cx25840_write(client, 0x47f, 0x00);
  812. state->vbi_line_offset = 8;
  813. }
  814. }
  815. /* ----------------------------------------------------------------------- */
  816. static void input_change(struct i2c_client *client)
  817. {
  818. struct cx25840_state *state = to_state(i2c_get_clientdata(client));
  819. v4l2_std_id std = state->std;
  820. /* Follow step 8c and 8d of section 3.16 in the cx25840 datasheet */
  821. if (std & V4L2_STD_SECAM) {
  822. cx25840_write(client, 0x402, 0);
  823. }
  824. else {
  825. cx25840_write(client, 0x402, 0x04);
  826. cx25840_write(client, 0x49f, (std & V4L2_STD_NTSC) ? 0x14 : 0x11);
  827. }
  828. cx25840_and_or(client, 0x401, ~0x60, 0);
  829. cx25840_and_or(client, 0x401, ~0x60, 0x60);
  830. /* Don't write into audio registers on cx2583x chips */
  831. if (is_cx2583x(state))
  832. return;
  833. cx25840_and_or(client, 0x810, ~0x01, 1);
  834. if (state->radio) {
  835. cx25840_write(client, 0x808, 0xf9);
  836. cx25840_write(client, 0x80b, 0x00);
  837. }
  838. else if (std & V4L2_STD_525_60) {
  839. /* Certain Hauppauge PVR150 models have a hardware bug
  840. that causes audio to drop out. For these models the
  841. audio standard must be set explicitly.
  842. To be precise: it affects cards with tuner models
  843. 85, 99 and 112 (model numbers from tveeprom). */
  844. int hw_fix = state->pvr150_workaround;
  845. if (std == V4L2_STD_NTSC_M_JP) {
  846. /* Japan uses EIAJ audio standard */
  847. cx25840_write(client, 0x808, hw_fix ? 0x2f : 0xf7);
  848. } else if (std == V4L2_STD_NTSC_M_KR) {
  849. /* South Korea uses A2 audio standard */
  850. cx25840_write(client, 0x808, hw_fix ? 0x3f : 0xf8);
  851. } else {
  852. /* Others use the BTSC audio standard */
  853. cx25840_write(client, 0x808, hw_fix ? 0x1f : 0xf6);
  854. }
  855. cx25840_write(client, 0x80b, 0x00);
  856. } else if (std & V4L2_STD_PAL) {
  857. /* Autodetect audio standard and audio system */
  858. cx25840_write(client, 0x808, 0xff);
  859. /* Since system PAL-L is pretty much non-existent and
  860. not used by any public broadcast network, force
  861. 6.5 MHz carrier to be interpreted as System DK,
  862. this avoids DK audio detection instability */
  863. cx25840_write(client, 0x80b, 0x00);
  864. } else if (std & V4L2_STD_SECAM) {
  865. /* Autodetect audio standard and audio system */
  866. cx25840_write(client, 0x808, 0xff);
  867. /* If only one of SECAM-DK / SECAM-L is required, then force
  868. 6.5MHz carrier, else autodetect it */
  869. if ((std & V4L2_STD_SECAM_DK) &&
  870. !(std & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC))) {
  871. /* 6.5 MHz carrier to be interpreted as System DK */
  872. cx25840_write(client, 0x80b, 0x00);
  873. } else if (!(std & V4L2_STD_SECAM_DK) &&
  874. (std & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC))) {
  875. /* 6.5 MHz carrier to be interpreted as System L */
  876. cx25840_write(client, 0x80b, 0x08);
  877. } else {
  878. /* 6.5 MHz carrier to be autodetected */
  879. cx25840_write(client, 0x80b, 0x10);
  880. }
  881. }
  882. cx25840_and_or(client, 0x810, ~0x01, 0);
  883. }
  884. static int set_input(struct i2c_client *client, enum cx25840_video_input vid_input,
  885. enum cx25840_audio_input aud_input)
  886. {
  887. struct cx25840_state *state = to_state(i2c_get_clientdata(client));
  888. u8 is_composite = (vid_input >= CX25840_COMPOSITE1 &&
  889. vid_input <= CX25840_COMPOSITE8);
  890. u8 is_component = (vid_input & CX25840_COMPONENT_ON) ==
  891. CX25840_COMPONENT_ON;
  892. u8 is_dif = (vid_input & CX25840_DIF_ON) ==
  893. CX25840_DIF_ON;
  894. u8 is_svideo = (vid_input & CX25840_SVIDEO_ON) ==
  895. CX25840_SVIDEO_ON;
  896. int luma = vid_input & 0xf0;
  897. int chroma = vid_input & 0xf00;
  898. u8 reg;
  899. u32 val;
  900. v4l_dbg(1, cx25840_debug, client,
  901. "decoder set video input %d, audio input %d\n",
  902. vid_input, aud_input);
  903. if (vid_input >= CX25840_VIN1_CH1) {
  904. v4l_dbg(1, cx25840_debug, client, "vid_input 0x%x\n",
  905. vid_input);
  906. reg = vid_input & 0xff;
  907. is_composite = !is_component &&
  908. ((vid_input & CX25840_SVIDEO_ON) != CX25840_SVIDEO_ON);
  909. v4l_dbg(1, cx25840_debug, client, "mux cfg 0x%x comp=%d\n",
  910. reg, is_composite);
  911. } else if (is_composite) {
  912. reg = 0xf0 + (vid_input - CX25840_COMPOSITE1);
  913. } else {
  914. if ((vid_input & ~0xff0) ||
  915. luma < CX25840_SVIDEO_LUMA1 || luma > CX25840_SVIDEO_LUMA8 ||
  916. chroma < CX25840_SVIDEO_CHROMA4 || chroma > CX25840_SVIDEO_CHROMA8) {
  917. v4l_err(client, "0x%04x is not a valid video input!\n",
  918. vid_input);
  919. return -EINVAL;
  920. }
  921. reg = 0xf0 + ((luma - CX25840_SVIDEO_LUMA1) >> 4);
  922. if (chroma >= CX25840_SVIDEO_CHROMA7) {
  923. reg &= 0x3f;
  924. reg |= (chroma - CX25840_SVIDEO_CHROMA7) >> 2;
  925. } else {
  926. reg &= 0xcf;
  927. reg |= (chroma - CX25840_SVIDEO_CHROMA4) >> 4;
  928. }
  929. }
  930. /* The caller has previously prepared the correct routing
  931. * configuration in reg (for the cx23885) so we have no
  932. * need to attempt to flip bits for earlier av decoders.
  933. */
  934. if (!is_cx2388x(state) && !is_cx231xx(state)) {
  935. switch (aud_input) {
  936. case CX25840_AUDIO_SERIAL:
  937. /* do nothing, use serial audio input */
  938. break;
  939. case CX25840_AUDIO4: reg &= ~0x30; break;
  940. case CX25840_AUDIO5: reg &= ~0x30; reg |= 0x10; break;
  941. case CX25840_AUDIO6: reg &= ~0x30; reg |= 0x20; break;
  942. case CX25840_AUDIO7: reg &= ~0xc0; break;
  943. case CX25840_AUDIO8: reg &= ~0xc0; reg |= 0x40; break;
  944. default:
  945. v4l_err(client, "0x%04x is not a valid audio input!\n",
  946. aud_input);
  947. return -EINVAL;
  948. }
  949. }
  950. cx25840_write(client, 0x103, reg);
  951. /* Set INPUT_MODE to Composite, S-Video or Component */
  952. if (is_component)
  953. cx25840_and_or(client, 0x401, ~0x6, 0x6);
  954. else
  955. cx25840_and_or(client, 0x401, ~0x6, is_composite ? 0 : 0x02);
  956. if (is_cx2388x(state)) {
  957. /* Enable or disable the DIF for tuner use */
  958. if (is_dif) {
  959. cx25840_and_or(client, 0x102, ~0x80, 0x80);
  960. /* Set of defaults for NTSC and PAL */
  961. cx25840_write4(client, 0x31c, 0xc2262600);
  962. cx25840_write4(client, 0x320, 0xc2262600);
  963. /* 18271 IF - Nobody else yet uses a different
  964. * tuner with the DIF, so these are reasonable
  965. * assumptions (HVR1250 and HVR1850 specific).
  966. */
  967. cx25840_write4(client, 0x318, 0xda262600);
  968. cx25840_write4(client, 0x33c, 0x2a24c800);
  969. cx25840_write4(client, 0x104, 0x0704dd00);
  970. } else {
  971. cx25840_write4(client, 0x300, 0x015c28f5);
  972. cx25840_and_or(client, 0x102, ~0x80, 0);
  973. cx25840_write4(client, 0x340, 0xdf7df83);
  974. cx25840_write4(client, 0x104, 0x0704dd80);
  975. cx25840_write4(client, 0x314, 0x22400600);
  976. cx25840_write4(client, 0x318, 0x40002600);
  977. cx25840_write4(client, 0x324, 0x40002600);
  978. cx25840_write4(client, 0x32c, 0x0250e620);
  979. cx25840_write4(client, 0x39c, 0x01FF0B00);
  980. cx25840_write4(client, 0x410, 0xffff0dbf);
  981. cx25840_write4(client, 0x414, 0x00137d03);
  982. /* on the 887, 0x418 is HSCALE_CTRL, on the 888 it is
  983. CHROMA_CTRL */
  984. if (is_cx23888(state))
  985. cx25840_write4(client, 0x418, 0x01008080);
  986. else
  987. cx25840_write4(client, 0x418, 0x01000000);
  988. cx25840_write4(client, 0x41c, 0x00000000);
  989. /* on the 887, 0x420 is CHROMA_CTRL, on the 888 it is
  990. CRUSH_CTRL */
  991. if (is_cx23888(state))
  992. cx25840_write4(client, 0x420, 0x001c3e0f);
  993. else
  994. cx25840_write4(client, 0x420, 0x001c8282);
  995. cx25840_write4(client, 0x42c, 0x42600000);
  996. cx25840_write4(client, 0x430, 0x0000039b);
  997. cx25840_write4(client, 0x438, 0x00000000);
  998. cx25840_write4(client, 0x440, 0xF8E3E824);
  999. cx25840_write4(client, 0x444, 0x401040dc);
  1000. cx25840_write4(client, 0x448, 0xcd3f02a0);
  1001. cx25840_write4(client, 0x44c, 0x161f1000);
  1002. cx25840_write4(client, 0x450, 0x00000802);
  1003. cx25840_write4(client, 0x91c, 0x01000000);
  1004. cx25840_write4(client, 0x8e0, 0x03063870);
  1005. cx25840_write4(client, 0x8d4, 0x7FFF0024);
  1006. cx25840_write4(client, 0x8d0, 0x00063073);
  1007. cx25840_write4(client, 0x8c8, 0x00010000);
  1008. cx25840_write4(client, 0x8cc, 0x00080023);
  1009. /* DIF BYPASS */
  1010. cx25840_write4(client, 0x33c, 0x2a04c800);
  1011. }
  1012. /* Reset the DIF */
  1013. cx25840_write4(client, 0x398, 0);
  1014. }
  1015. if (!is_cx2388x(state) && !is_cx231xx(state)) {
  1016. /* Set CH_SEL_ADC2 to 1 if input comes from CH3 */
  1017. cx25840_and_or(client, 0x102, ~0x2, (reg & 0x80) == 0 ? 2 : 0);
  1018. /* Set DUAL_MODE_ADC2 to 1 if input comes from both CH2&CH3 */
  1019. if ((reg & 0xc0) != 0xc0 && (reg & 0x30) != 0x30)
  1020. cx25840_and_or(client, 0x102, ~0x4, 4);
  1021. else
  1022. cx25840_and_or(client, 0x102, ~0x4, 0);
  1023. } else {
  1024. /* Set DUAL_MODE_ADC2 to 1 if component*/
  1025. cx25840_and_or(client, 0x102, ~0x4, is_component ? 0x4 : 0x0);
  1026. if (is_composite) {
  1027. /* ADC2 input select channel 2 */
  1028. cx25840_and_or(client, 0x102, ~0x2, 0);
  1029. } else if (!is_component) {
  1030. /* S-Video */
  1031. if (chroma >= CX25840_SVIDEO_CHROMA7) {
  1032. /* ADC2 input select channel 3 */
  1033. cx25840_and_or(client, 0x102, ~0x2, 2);
  1034. } else {
  1035. /* ADC2 input select channel 2 */
  1036. cx25840_and_or(client, 0x102, ~0x2, 0);
  1037. }
  1038. }
  1039. /* cx23885 / SVIDEO */
  1040. if (is_cx2388x(state) && is_svideo) {
  1041. #define AFE_CTRL (0x104)
  1042. #define MODE_CTRL (0x400)
  1043. cx25840_and_or(client, 0x102, ~0x2, 0x2);
  1044. val = cx25840_read4(client, MODE_CTRL);
  1045. val &= 0xFFFFF9FF;
  1046. /* YC */
  1047. val |= 0x00000200;
  1048. val &= ~0x2000;
  1049. cx25840_write4(client, MODE_CTRL, val);
  1050. val = cx25840_read4(client, AFE_CTRL);
  1051. /* Chroma in select */
  1052. val |= 0x00001000;
  1053. val &= 0xfffffe7f;
  1054. /* Clear VGA_SEL_CH2 and VGA_SEL_CH3 (bits 7 and 8).
  1055. * This sets them to use video rather than audio.
  1056. * Only one of the two will be in use.
  1057. */
  1058. cx25840_write4(client, AFE_CTRL, val);
  1059. } else
  1060. cx25840_and_or(client, 0x102, ~0x2, 0);
  1061. }
  1062. state->vid_input = vid_input;
  1063. state->aud_input = aud_input;
  1064. cx25840_audio_set_path(client);
  1065. input_change(client);
  1066. if (is_cx2388x(state)) {
  1067. /* Audio channel 1 src : Parallel 1 */
  1068. cx25840_write(client, 0x124, 0x03);
  1069. /* Select AFE clock pad output source */
  1070. cx25840_write(client, 0x144, 0x05);
  1071. /* I2S_IN_CTL: I2S_IN_SONY_MODE, LEFT SAMPLE on WS=1 */
  1072. cx25840_write(client, 0x914, 0xa0);
  1073. /* I2S_OUT_CTL:
  1074. * I2S_IN_SONY_MODE, LEFT SAMPLE on WS=1
  1075. * I2S_OUT_MASTER_MODE = Master
  1076. */
  1077. cx25840_write(client, 0x918, 0xa0);
  1078. cx25840_write(client, 0x919, 0x01);
  1079. } else if (is_cx231xx(state)) {
  1080. /* Audio channel 1 src : Parallel 1 */
  1081. cx25840_write(client, 0x124, 0x03);
  1082. /* I2S_IN_CTL: I2S_IN_SONY_MODE, LEFT SAMPLE on WS=1 */
  1083. cx25840_write(client, 0x914, 0xa0);
  1084. /* I2S_OUT_CTL:
  1085. * I2S_IN_SONY_MODE, LEFT SAMPLE on WS=1
  1086. * I2S_OUT_MASTER_MODE = Master
  1087. */
  1088. cx25840_write(client, 0x918, 0xa0);
  1089. cx25840_write(client, 0x919, 0x01);
  1090. }
  1091. if (is_cx2388x(state) && ((aud_input == CX25840_AUDIO7) ||
  1092. (aud_input == CX25840_AUDIO6))) {
  1093. /* Configure audio from LR1 or LR2 input */
  1094. cx25840_write4(client, 0x910, 0);
  1095. cx25840_write4(client, 0x8d0, 0x63073);
  1096. } else
  1097. if (is_cx2388x(state) && (aud_input == CX25840_AUDIO8)) {
  1098. /* Configure audio from tuner/sif input */
  1099. cx25840_write4(client, 0x910, 0x12b000c9);
  1100. cx25840_write4(client, 0x8d0, 0x1f063870);
  1101. }
  1102. if (is_cx23888(state)) {
  1103. /* HVR1850 */
  1104. /* AUD_IO_CTRL - I2S Input, Parallel1*/
  1105. /* - Channel 1 src - Parallel1 (Merlin out) */
  1106. /* - Channel 2 src - Parallel2 (Merlin out) */
  1107. /* - Channel 3 src - Parallel3 (Merlin AC97 out) */
  1108. /* - I2S source and dir - Merlin, output */
  1109. cx25840_write4(client, 0x124, 0x100);
  1110. if (!is_dif) {
  1111. /* Stop microcontroller if we don't need it
  1112. * to avoid audio popping on svideo/composite use.
  1113. */
  1114. cx25840_and_or(client, 0x803, ~0x10, 0x00);
  1115. }
  1116. }
  1117. return 0;
  1118. }
  1119. /* ----------------------------------------------------------------------- */
  1120. static int set_v4lstd(struct i2c_client *client)
  1121. {
  1122. struct cx25840_state *state = to_state(i2c_get_clientdata(client));
  1123. u8 fmt = 0; /* zero is autodetect */
  1124. u8 pal_m = 0;
  1125. /* First tests should be against specific std */
  1126. if (state->std == V4L2_STD_NTSC_M_JP) {
  1127. fmt = 0x2;
  1128. } else if (state->std == V4L2_STD_NTSC_443) {
  1129. fmt = 0x3;
  1130. } else if (state->std == V4L2_STD_PAL_M) {
  1131. pal_m = 1;
  1132. fmt = 0x5;
  1133. } else if (state->std == V4L2_STD_PAL_N) {
  1134. fmt = 0x6;
  1135. } else if (state->std == V4L2_STD_PAL_Nc) {
  1136. fmt = 0x7;
  1137. } else if (state->std == V4L2_STD_PAL_60) {
  1138. fmt = 0x8;
  1139. } else {
  1140. /* Then, test against generic ones */
  1141. if (state->std & V4L2_STD_NTSC)
  1142. fmt = 0x1;
  1143. else if (state->std & V4L2_STD_PAL)
  1144. fmt = 0x4;
  1145. else if (state->std & V4L2_STD_SECAM)
  1146. fmt = 0xc;
  1147. }
  1148. v4l_dbg(1, cx25840_debug, client, "changing video std to fmt %i\n",fmt);
  1149. /* Follow step 9 of section 3.16 in the cx25840 datasheet.
  1150. Without this PAL may display a vertical ghosting effect.
  1151. This happens for example with the Yuan MPC622. */
  1152. if (fmt >= 4 && fmt < 8) {
  1153. /* Set format to NTSC-M */
  1154. cx25840_and_or(client, 0x400, ~0xf, 1);
  1155. /* Turn off LCOMB */
  1156. cx25840_and_or(client, 0x47b, ~6, 0);
  1157. }
  1158. cx25840_and_or(client, 0x400, ~0xf, fmt);
  1159. cx25840_and_or(client, 0x403, ~0x3, pal_m);
  1160. if (is_cx23888(state))
  1161. cx23888_std_setup(client);
  1162. else
  1163. cx25840_std_setup(client);
  1164. if (!is_cx2583x(state))
  1165. input_change(client);
  1166. return 0;
  1167. }
  1168. /* ----------------------------------------------------------------------- */
  1169. static int cx25840_s_ctrl(struct v4l2_ctrl *ctrl)
  1170. {
  1171. struct v4l2_subdev *sd = to_sd(ctrl);
  1172. struct cx25840_state *state = to_state(sd);
  1173. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1174. switch (ctrl->id) {
  1175. case V4L2_CID_BRIGHTNESS:
  1176. cx25840_write(client, 0x414, ctrl->val - 128);
  1177. break;
  1178. case V4L2_CID_CONTRAST:
  1179. cx25840_write(client, 0x415, ctrl->val << 1);
  1180. break;
  1181. case V4L2_CID_SATURATION:
  1182. if (is_cx23888(state)) {
  1183. cx25840_write(client, 0x418, ctrl->val << 1);
  1184. cx25840_write(client, 0x419, ctrl->val << 1);
  1185. } else {
  1186. cx25840_write(client, 0x420, ctrl->val << 1);
  1187. cx25840_write(client, 0x421, ctrl->val << 1);
  1188. }
  1189. break;
  1190. case V4L2_CID_HUE:
  1191. if (is_cx23888(state))
  1192. cx25840_write(client, 0x41a, ctrl->val);
  1193. else
  1194. cx25840_write(client, 0x422, ctrl->val);
  1195. break;
  1196. default:
  1197. return -EINVAL;
  1198. }
  1199. return 0;
  1200. }
  1201. /* ----------------------------------------------------------------------- */
  1202. static int cx25840_set_fmt(struct v4l2_subdev *sd,
  1203. struct v4l2_subdev_pad_config *cfg,
  1204. struct v4l2_subdev_format *format)
  1205. {
  1206. struct v4l2_mbus_framefmt *fmt = &format->format;
  1207. struct cx25840_state *state = to_state(sd);
  1208. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1209. int HSC, VSC, Vsrc, Hsrc, filter, Vlines;
  1210. int is_50Hz = !(state->std & V4L2_STD_525_60);
  1211. if (format->pad || fmt->code != MEDIA_BUS_FMT_FIXED)
  1212. return -EINVAL;
  1213. fmt->field = V4L2_FIELD_INTERLACED;
  1214. fmt->colorspace = V4L2_COLORSPACE_SMPTE170M;
  1215. if (is_cx23888(state)) {
  1216. Vsrc = (cx25840_read(client, 0x42a) & 0x3f) << 4;
  1217. Vsrc |= (cx25840_read(client, 0x429) & 0xf0) >> 4;
  1218. } else {
  1219. Vsrc = (cx25840_read(client, 0x476) & 0x3f) << 4;
  1220. Vsrc |= (cx25840_read(client, 0x475) & 0xf0) >> 4;
  1221. }
  1222. if (is_cx23888(state)) {
  1223. Hsrc = (cx25840_read(client, 0x426) & 0x3f) << 4;
  1224. Hsrc |= (cx25840_read(client, 0x425) & 0xf0) >> 4;
  1225. } else {
  1226. Hsrc = (cx25840_read(client, 0x472) & 0x3f) << 4;
  1227. Hsrc |= (cx25840_read(client, 0x471) & 0xf0) >> 4;
  1228. }
  1229. Vlines = fmt->height + (is_50Hz ? 4 : 7);
  1230. if ((fmt->width * 16 < Hsrc) || (Hsrc < fmt->width) ||
  1231. (Vlines * 8 < Vsrc) || (Vsrc < Vlines)) {
  1232. v4l_err(client, "%dx%d is not a valid size!\n",
  1233. fmt->width, fmt->height);
  1234. return -ERANGE;
  1235. }
  1236. if (format->which == V4L2_SUBDEV_FORMAT_TRY)
  1237. return 0;
  1238. HSC = (Hsrc * (1 << 20)) / fmt->width - (1 << 20);
  1239. VSC = (1 << 16) - (Vsrc * (1 << 9) / Vlines - (1 << 9));
  1240. VSC &= 0x1fff;
  1241. if (fmt->width >= 385)
  1242. filter = 0;
  1243. else if (fmt->width > 192)
  1244. filter = 1;
  1245. else if (fmt->width > 96)
  1246. filter = 2;
  1247. else
  1248. filter = 3;
  1249. v4l_dbg(1, cx25840_debug, client, "decoder set size %dx%d -> scale %ux%u\n",
  1250. fmt->width, fmt->height, HSC, VSC);
  1251. /* HSCALE=HSC */
  1252. cx25840_write(client, 0x418, HSC & 0xff);
  1253. cx25840_write(client, 0x419, (HSC >> 8) & 0xff);
  1254. cx25840_write(client, 0x41a, HSC >> 16);
  1255. /* VSCALE=VSC */
  1256. cx25840_write(client, 0x41c, VSC & 0xff);
  1257. cx25840_write(client, 0x41d, VSC >> 8);
  1258. /* VS_INTRLACE=1 VFILT=filter */
  1259. cx25840_write(client, 0x41e, 0x8 | filter);
  1260. return 0;
  1261. }
  1262. /* ----------------------------------------------------------------------- */
  1263. static void log_video_status(struct i2c_client *client)
  1264. {
  1265. static const char *const fmt_strs[] = {
  1266. "0x0",
  1267. "NTSC-M", "NTSC-J", "NTSC-4.43",
  1268. "PAL-BDGHI", "PAL-M", "PAL-N", "PAL-Nc", "PAL-60",
  1269. "0x9", "0xA", "0xB",
  1270. "SECAM",
  1271. "0xD", "0xE", "0xF"
  1272. };
  1273. struct cx25840_state *state = to_state(i2c_get_clientdata(client));
  1274. u8 vidfmt_sel = cx25840_read(client, 0x400) & 0xf;
  1275. u8 gen_stat1 = cx25840_read(client, 0x40d);
  1276. u8 gen_stat2 = cx25840_read(client, 0x40e);
  1277. int vid_input = state->vid_input;
  1278. v4l_info(client, "Video signal: %spresent\n",
  1279. (gen_stat2 & 0x20) ? "" : "not ");
  1280. v4l_info(client, "Detected format: %s\n",
  1281. fmt_strs[gen_stat1 & 0xf]);
  1282. v4l_info(client, "Specified standard: %s\n",
  1283. vidfmt_sel ? fmt_strs[vidfmt_sel] : "automatic detection");
  1284. if (vid_input >= CX25840_COMPOSITE1 &&
  1285. vid_input <= CX25840_COMPOSITE8) {
  1286. v4l_info(client, "Specified video input: Composite %d\n",
  1287. vid_input - CX25840_COMPOSITE1 + 1);
  1288. } else {
  1289. v4l_info(client, "Specified video input: S-Video (Luma In%d, Chroma In%d)\n",
  1290. (vid_input & 0xf0) >> 4, (vid_input & 0xf00) >> 8);
  1291. }
  1292. v4l_info(client, "Specified audioclock freq: %d Hz\n", state->audclk_freq);
  1293. }
  1294. /* ----------------------------------------------------------------------- */
  1295. static void log_audio_status(struct i2c_client *client)
  1296. {
  1297. struct cx25840_state *state = to_state(i2c_get_clientdata(client));
  1298. u8 download_ctl = cx25840_read(client, 0x803);
  1299. u8 mod_det_stat0 = cx25840_read(client, 0x804);
  1300. u8 mod_det_stat1 = cx25840_read(client, 0x805);
  1301. u8 audio_config = cx25840_read(client, 0x808);
  1302. u8 pref_mode = cx25840_read(client, 0x809);
  1303. u8 afc0 = cx25840_read(client, 0x80b);
  1304. u8 mute_ctl = cx25840_read(client, 0x8d3);
  1305. int aud_input = state->aud_input;
  1306. char *p;
  1307. switch (mod_det_stat0) {
  1308. case 0x00: p = "mono"; break;
  1309. case 0x01: p = "stereo"; break;
  1310. case 0x02: p = "dual"; break;
  1311. case 0x04: p = "tri"; break;
  1312. case 0x10: p = "mono with SAP"; break;
  1313. case 0x11: p = "stereo with SAP"; break;
  1314. case 0x12: p = "dual with SAP"; break;
  1315. case 0x14: p = "tri with SAP"; break;
  1316. case 0xfe: p = "forced mode"; break;
  1317. default: p = "not defined";
  1318. }
  1319. v4l_info(client, "Detected audio mode: %s\n", p);
  1320. switch (mod_det_stat1) {
  1321. case 0x00: p = "not defined"; break;
  1322. case 0x01: p = "EIAJ"; break;
  1323. case 0x02: p = "A2-M"; break;
  1324. case 0x03: p = "A2-BG"; break;
  1325. case 0x04: p = "A2-DK1"; break;
  1326. case 0x05: p = "A2-DK2"; break;
  1327. case 0x06: p = "A2-DK3"; break;
  1328. case 0x07: p = "A1 (6.0 MHz FM Mono)"; break;
  1329. case 0x08: p = "AM-L"; break;
  1330. case 0x09: p = "NICAM-BG"; break;
  1331. case 0x0a: p = "NICAM-DK"; break;
  1332. case 0x0b: p = "NICAM-I"; break;
  1333. case 0x0c: p = "NICAM-L"; break;
  1334. case 0x0d: p = "BTSC/EIAJ/A2-M Mono (4.5 MHz FMMono)"; break;
  1335. case 0x0e: p = "IF FM Radio"; break;
  1336. case 0x0f: p = "BTSC"; break;
  1337. case 0x10: p = "high-deviation FM"; break;
  1338. case 0x11: p = "very high-deviation FM"; break;
  1339. case 0xfd: p = "unknown audio standard"; break;
  1340. case 0xfe: p = "forced audio standard"; break;
  1341. case 0xff: p = "no detected audio standard"; break;
  1342. default: p = "not defined";
  1343. }
  1344. v4l_info(client, "Detected audio standard: %s\n", p);
  1345. v4l_info(client, "Audio microcontroller: %s\n",
  1346. (download_ctl & 0x10) ?
  1347. ((mute_ctl & 0x2) ? "detecting" : "running") : "stopped");
  1348. switch (audio_config >> 4) {
  1349. case 0x00: p = "undefined"; break;
  1350. case 0x01: p = "BTSC"; break;
  1351. case 0x02: p = "EIAJ"; break;
  1352. case 0x03: p = "A2-M"; break;
  1353. case 0x04: p = "A2-BG"; break;
  1354. case 0x05: p = "A2-DK1"; break;
  1355. case 0x06: p = "A2-DK2"; break;
  1356. case 0x07: p = "A2-DK3"; break;
  1357. case 0x08: p = "A1 (6.0 MHz FM Mono)"; break;
  1358. case 0x09: p = "AM-L"; break;
  1359. case 0x0a: p = "NICAM-BG"; break;
  1360. case 0x0b: p = "NICAM-DK"; break;
  1361. case 0x0c: p = "NICAM-I"; break;
  1362. case 0x0d: p = "NICAM-L"; break;
  1363. case 0x0e: p = "FM radio"; break;
  1364. case 0x0f: p = "automatic detection"; break;
  1365. default: p = "undefined";
  1366. }
  1367. v4l_info(client, "Configured audio standard: %s\n", p);
  1368. if ((audio_config >> 4) < 0xF) {
  1369. switch (audio_config & 0xF) {
  1370. case 0x00: p = "MONO1 (LANGUAGE A/Mono L+R channel for BTSC, EIAJ, A2)"; break;
  1371. case 0x01: p = "MONO2 (LANGUAGE B)"; break;
  1372. case 0x02: p = "MONO3 (STEREO forced MONO)"; break;
  1373. case 0x03: p = "MONO4 (NICAM ANALOG-Language C/Analog Fallback)"; break;
  1374. case 0x04: p = "STEREO"; break;
  1375. case 0x05: p = "DUAL1 (AB)"; break;
  1376. case 0x06: p = "DUAL2 (AC) (FM)"; break;
  1377. case 0x07: p = "DUAL3 (BC) (FM)"; break;
  1378. case 0x08: p = "DUAL4 (AC) (AM)"; break;
  1379. case 0x09: p = "DUAL5 (BC) (AM)"; break;
  1380. case 0x0a: p = "SAP"; break;
  1381. default: p = "undefined";
  1382. }
  1383. v4l_info(client, "Configured audio mode: %s\n", p);
  1384. } else {
  1385. switch (audio_config & 0xF) {
  1386. case 0x00: p = "BG"; break;
  1387. case 0x01: p = "DK1"; break;
  1388. case 0x02: p = "DK2"; break;
  1389. case 0x03: p = "DK3"; break;
  1390. case 0x04: p = "I"; break;
  1391. case 0x05: p = "L"; break;
  1392. case 0x06: p = "BTSC"; break;
  1393. case 0x07: p = "EIAJ"; break;
  1394. case 0x08: p = "A2-M"; break;
  1395. case 0x09: p = "FM Radio"; break;
  1396. case 0x0f: p = "automatic standard and mode detection"; break;
  1397. default: p = "undefined";
  1398. }
  1399. v4l_info(client, "Configured audio system: %s\n", p);
  1400. }
  1401. if (aud_input) {
  1402. v4l_info(client, "Specified audio input: Tuner (In%d)\n", aud_input);
  1403. } else {
  1404. v4l_info(client, "Specified audio input: External\n");
  1405. }
  1406. switch (pref_mode & 0xf) {
  1407. case 0: p = "mono/language A"; break;
  1408. case 1: p = "language B"; break;
  1409. case 2: p = "language C"; break;
  1410. case 3: p = "analog fallback"; break;
  1411. case 4: p = "stereo"; break;
  1412. case 5: p = "language AC"; break;
  1413. case 6: p = "language BC"; break;
  1414. case 7: p = "language AB"; break;
  1415. default: p = "undefined";
  1416. }
  1417. v4l_info(client, "Preferred audio mode: %s\n", p);
  1418. if ((audio_config & 0xf) == 0xf) {
  1419. switch ((afc0 >> 3) & 0x3) {
  1420. case 0: p = "system DK"; break;
  1421. case 1: p = "system L"; break;
  1422. case 2: p = "autodetect"; break;
  1423. default: p = "undefined";
  1424. }
  1425. v4l_info(client, "Selected 65 MHz format: %s\n", p);
  1426. switch (afc0 & 0x7) {
  1427. case 0: p = "chroma"; break;
  1428. case 1: p = "BTSC"; break;
  1429. case 2: p = "EIAJ"; break;
  1430. case 3: p = "A2-M"; break;
  1431. case 4: p = "autodetect"; break;
  1432. default: p = "undefined";
  1433. }
  1434. v4l_info(client, "Selected 45 MHz format: %s\n", p);
  1435. }
  1436. }
  1437. /* ----------------------------------------------------------------------- */
  1438. /* This load_fw operation must be called to load the driver's firmware.
  1439. Without this the audio standard detection will fail and you will
  1440. only get mono.
  1441. Since loading the firmware is often problematic when the driver is
  1442. compiled into the kernel I recommend postponing calling this function
  1443. until the first open of the video device. Another reason for
  1444. postponing it is that loading this firmware takes a long time (seconds)
  1445. due to the slow i2c bus speed. So it will speed up the boot process if
  1446. you can avoid loading the fw as long as the video device isn't used. */
  1447. static int cx25840_load_fw(struct v4l2_subdev *sd)
  1448. {
  1449. struct cx25840_state *state = to_state(sd);
  1450. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1451. if (!state->is_initialized) {
  1452. /* initialize and load firmware */
  1453. state->is_initialized = 1;
  1454. if (is_cx2583x(state))
  1455. cx25836_initialize(client);
  1456. else if (is_cx2388x(state))
  1457. cx23885_initialize(client);
  1458. else if (is_cx231xx(state))
  1459. cx231xx_initialize(client);
  1460. else
  1461. cx25840_initialize(client);
  1462. }
  1463. return 0;
  1464. }
  1465. #ifdef CONFIG_VIDEO_ADV_DEBUG
  1466. static int cx25840_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
  1467. {
  1468. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1469. reg->size = 1;
  1470. reg->val = cx25840_read(client, reg->reg & 0x0fff);
  1471. return 0;
  1472. }
  1473. static int cx25840_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg)
  1474. {
  1475. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1476. cx25840_write(client, reg->reg & 0x0fff, reg->val & 0xff);
  1477. return 0;
  1478. }
  1479. #endif
  1480. static int cx25840_s_audio_stream(struct v4l2_subdev *sd, int enable)
  1481. {
  1482. struct cx25840_state *state = to_state(sd);
  1483. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1484. u8 v;
  1485. if (is_cx2583x(state) || is_cx2388x(state) || is_cx231xx(state))
  1486. return 0;
  1487. v4l_dbg(1, cx25840_debug, client, "%s audio output\n",
  1488. enable ? "enable" : "disable");
  1489. if (enable) {
  1490. v = cx25840_read(client, 0x115) | 0x80;
  1491. cx25840_write(client, 0x115, v);
  1492. v = cx25840_read(client, 0x116) | 0x03;
  1493. cx25840_write(client, 0x116, v);
  1494. } else {
  1495. v = cx25840_read(client, 0x115) & ~(0x80);
  1496. cx25840_write(client, 0x115, v);
  1497. v = cx25840_read(client, 0x116) & ~(0x03);
  1498. cx25840_write(client, 0x116, v);
  1499. }
  1500. return 0;
  1501. }
  1502. static int cx25840_s_stream(struct v4l2_subdev *sd, int enable)
  1503. {
  1504. struct cx25840_state *state = to_state(sd);
  1505. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1506. u8 v;
  1507. v4l_dbg(1, cx25840_debug, client, "%s video output\n",
  1508. enable ? "enable" : "disable");
  1509. if (enable) {
  1510. if (is_cx2388x(state) || is_cx231xx(state)) {
  1511. v = cx25840_read(client, 0x421) | 0x0b;
  1512. cx25840_write(client, 0x421, v);
  1513. } else {
  1514. v = cx25840_read(client, 0x115) | 0x0c;
  1515. cx25840_write(client, 0x115, v);
  1516. v = cx25840_read(client, 0x116) | 0x04;
  1517. cx25840_write(client, 0x116, v);
  1518. }
  1519. } else {
  1520. if (is_cx2388x(state) || is_cx231xx(state)) {
  1521. v = cx25840_read(client, 0x421) & ~(0x0b);
  1522. cx25840_write(client, 0x421, v);
  1523. } else {
  1524. v = cx25840_read(client, 0x115) & ~(0x0c);
  1525. cx25840_write(client, 0x115, v);
  1526. v = cx25840_read(client, 0x116) & ~(0x04);
  1527. cx25840_write(client, 0x116, v);
  1528. }
  1529. }
  1530. return 0;
  1531. }
  1532. /* Query the current detected video format */
  1533. static int cx25840_g_std(struct v4l2_subdev *sd, v4l2_std_id *std)
  1534. {
  1535. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1536. v4l2_std_id stds[] = {
  1537. /* 0000 */ V4L2_STD_UNKNOWN,
  1538. /* 0001 */ V4L2_STD_NTSC_M,
  1539. /* 0010 */ V4L2_STD_NTSC_M_JP,
  1540. /* 0011 */ V4L2_STD_NTSC_443,
  1541. /* 0100 */ V4L2_STD_PAL,
  1542. /* 0101 */ V4L2_STD_PAL_M,
  1543. /* 0110 */ V4L2_STD_PAL_N,
  1544. /* 0111 */ V4L2_STD_PAL_Nc,
  1545. /* 1000 */ V4L2_STD_PAL_60,
  1546. /* 1001 */ V4L2_STD_UNKNOWN,
  1547. /* 1010 */ V4L2_STD_UNKNOWN,
  1548. /* 1001 */ V4L2_STD_UNKNOWN,
  1549. /* 1010 */ V4L2_STD_UNKNOWN,
  1550. /* 1011 */ V4L2_STD_UNKNOWN,
  1551. /* 1110 */ V4L2_STD_UNKNOWN,
  1552. /* 1111 */ V4L2_STD_UNKNOWN
  1553. };
  1554. u32 fmt = (cx25840_read4(client, 0x40c) >> 8) & 0xf;
  1555. *std = stds[ fmt ];
  1556. v4l_dbg(1, cx25840_debug, client, "g_std fmt = %x, v4l2_std_id = 0x%x\n",
  1557. fmt, (unsigned int)stds[ fmt ]);
  1558. return 0;
  1559. }
  1560. static int cx25840_g_input_status(struct v4l2_subdev *sd, u32 *status)
  1561. {
  1562. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1563. /* A limited function that checks for signal status and returns
  1564. * the state.
  1565. */
  1566. /* Check for status of Horizontal lock (SRC lock isn't reliable) */
  1567. if ((cx25840_read4(client, 0x40c) & 0x00010000) == 0)
  1568. *status |= V4L2_IN_ST_NO_SIGNAL;
  1569. return 0;
  1570. }
  1571. static int cx25840_s_std(struct v4l2_subdev *sd, v4l2_std_id std)
  1572. {
  1573. struct cx25840_state *state = to_state(sd);
  1574. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1575. if (state->radio == 0 && state->std == std)
  1576. return 0;
  1577. state->radio = 0;
  1578. state->std = std;
  1579. return set_v4lstd(client);
  1580. }
  1581. static int cx25840_s_radio(struct v4l2_subdev *sd)
  1582. {
  1583. struct cx25840_state *state = to_state(sd);
  1584. state->radio = 1;
  1585. return 0;
  1586. }
  1587. static int cx25840_s_video_routing(struct v4l2_subdev *sd,
  1588. u32 input, u32 output, u32 config)
  1589. {
  1590. struct cx25840_state *state = to_state(sd);
  1591. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1592. if (is_cx23888(state))
  1593. cx23888_std_setup(client);
  1594. return set_input(client, input, state->aud_input);
  1595. }
  1596. static int cx25840_s_audio_routing(struct v4l2_subdev *sd,
  1597. u32 input, u32 output, u32 config)
  1598. {
  1599. struct cx25840_state *state = to_state(sd);
  1600. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1601. if (is_cx23888(state))
  1602. cx23888_std_setup(client);
  1603. return set_input(client, state->vid_input, input);
  1604. }
  1605. static int cx25840_s_frequency(struct v4l2_subdev *sd, const struct v4l2_frequency *freq)
  1606. {
  1607. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1608. input_change(client);
  1609. return 0;
  1610. }
  1611. static int cx25840_g_tuner(struct v4l2_subdev *sd, struct v4l2_tuner *vt)
  1612. {
  1613. struct cx25840_state *state = to_state(sd);
  1614. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1615. u8 vpres = cx25840_read(client, 0x40e) & 0x20;
  1616. u8 mode;
  1617. int val = 0;
  1618. if (state->radio)
  1619. return 0;
  1620. vt->signal = vpres ? 0xffff : 0x0;
  1621. if (is_cx2583x(state))
  1622. return 0;
  1623. vt->capability |=
  1624. V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_LANG1 |
  1625. V4L2_TUNER_CAP_LANG2 | V4L2_TUNER_CAP_SAP;
  1626. mode = cx25840_read(client, 0x804);
  1627. /* get rxsubchans and audmode */
  1628. if ((mode & 0xf) == 1)
  1629. val |= V4L2_TUNER_SUB_STEREO;
  1630. else
  1631. val |= V4L2_TUNER_SUB_MONO;
  1632. if (mode == 2 || mode == 4)
  1633. val = V4L2_TUNER_SUB_LANG1 | V4L2_TUNER_SUB_LANG2;
  1634. if (mode & 0x10)
  1635. val |= V4L2_TUNER_SUB_SAP;
  1636. vt->rxsubchans = val;
  1637. vt->audmode = state->audmode;
  1638. return 0;
  1639. }
  1640. static int cx25840_s_tuner(struct v4l2_subdev *sd, const struct v4l2_tuner *vt)
  1641. {
  1642. struct cx25840_state *state = to_state(sd);
  1643. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1644. if (state->radio || is_cx2583x(state))
  1645. return 0;
  1646. switch (vt->audmode) {
  1647. case V4L2_TUNER_MODE_MONO:
  1648. /* mono -> mono
  1649. stereo -> mono
  1650. bilingual -> lang1 */
  1651. cx25840_and_or(client, 0x809, ~0xf, 0x00);
  1652. break;
  1653. case V4L2_TUNER_MODE_STEREO:
  1654. case V4L2_TUNER_MODE_LANG1:
  1655. /* mono -> mono
  1656. stereo -> stereo
  1657. bilingual -> lang1 */
  1658. cx25840_and_or(client, 0x809, ~0xf, 0x04);
  1659. break;
  1660. case V4L2_TUNER_MODE_LANG1_LANG2:
  1661. /* mono -> mono
  1662. stereo -> stereo
  1663. bilingual -> lang1/lang2 */
  1664. cx25840_and_or(client, 0x809, ~0xf, 0x07);
  1665. break;
  1666. case V4L2_TUNER_MODE_LANG2:
  1667. /* mono -> mono
  1668. stereo -> stereo
  1669. bilingual -> lang2 */
  1670. cx25840_and_or(client, 0x809, ~0xf, 0x01);
  1671. break;
  1672. default:
  1673. return -EINVAL;
  1674. }
  1675. state->audmode = vt->audmode;
  1676. return 0;
  1677. }
  1678. static int cx25840_reset(struct v4l2_subdev *sd, u32 val)
  1679. {
  1680. struct cx25840_state *state = to_state(sd);
  1681. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1682. if (is_cx2583x(state))
  1683. cx25836_initialize(client);
  1684. else if (is_cx2388x(state))
  1685. cx23885_initialize(client);
  1686. else if (is_cx231xx(state))
  1687. cx231xx_initialize(client);
  1688. else
  1689. cx25840_initialize(client);
  1690. return 0;
  1691. }
  1692. static int cx25840_log_status(struct v4l2_subdev *sd)
  1693. {
  1694. struct cx25840_state *state = to_state(sd);
  1695. struct i2c_client *client = v4l2_get_subdevdata(sd);
  1696. log_video_status(client);
  1697. if (!is_cx2583x(state))
  1698. log_audio_status(client);
  1699. cx25840_ir_log_status(sd);
  1700. v4l2_ctrl_handler_log_status(&state->hdl, sd->name);
  1701. return 0;
  1702. }
  1703. static int cx23885_irq_handler(struct v4l2_subdev *sd, u32 status,
  1704. bool *handled)
  1705. {
  1706. struct cx25840_state *state = to_state(sd);
  1707. struct i2c_client *c = v4l2_get_subdevdata(sd);
  1708. u8 irq_stat, aud_stat, aud_en, ir_stat, ir_en;
  1709. u32 vid_stat, aud_mc_stat;
  1710. bool block_handled;
  1711. int ret = 0;
  1712. irq_stat = cx25840_read(c, CX23885_PIN_CTRL_IRQ_REG);
  1713. v4l_dbg(2, cx25840_debug, c, "AV Core IRQ status (entry): %s %s %s\n",
  1714. irq_stat & CX23885_PIN_CTRL_IRQ_IR_STAT ? "ir" : " ",
  1715. irq_stat & CX23885_PIN_CTRL_IRQ_AUD_STAT ? "aud" : " ",
  1716. irq_stat & CX23885_PIN_CTRL_IRQ_VID_STAT ? "vid" : " ");
  1717. if ((is_cx23885(state) || is_cx23887(state))) {
  1718. ir_stat = cx25840_read(c, CX25840_IR_STATS_REG);
  1719. ir_en = cx25840_read(c, CX25840_IR_IRQEN_REG);
  1720. v4l_dbg(2, cx25840_debug, c,
  1721. "AV Core ir IRQ status: %#04x disables: %#04x\n",
  1722. ir_stat, ir_en);
  1723. if (irq_stat & CX23885_PIN_CTRL_IRQ_IR_STAT) {
  1724. block_handled = false;
  1725. ret = cx25840_ir_irq_handler(sd,
  1726. status, &block_handled);
  1727. if (block_handled)
  1728. *handled = true;
  1729. }
  1730. }
  1731. aud_stat = cx25840_read(c, CX25840_AUD_INT_STAT_REG);
  1732. aud_en = cx25840_read(c, CX25840_AUD_INT_CTRL_REG);
  1733. v4l_dbg(2, cx25840_debug, c,
  1734. "AV Core audio IRQ status: %#04x disables: %#04x\n",
  1735. aud_stat, aud_en);
  1736. aud_mc_stat = cx25840_read4(c, CX23885_AUD_MC_INT_MASK_REG);
  1737. v4l_dbg(2, cx25840_debug, c,
  1738. "AV Core audio MC IRQ status: %#06x enables: %#06x\n",
  1739. aud_mc_stat >> CX23885_AUD_MC_INT_STAT_SHFT,
  1740. aud_mc_stat & CX23885_AUD_MC_INT_CTRL_BITS);
  1741. if (irq_stat & CX23885_PIN_CTRL_IRQ_AUD_STAT) {
  1742. if (aud_stat) {
  1743. cx25840_write(c, CX25840_AUD_INT_STAT_REG, aud_stat);
  1744. *handled = true;
  1745. }
  1746. }
  1747. vid_stat = cx25840_read4(c, CX25840_VID_INT_STAT_REG);
  1748. v4l_dbg(2, cx25840_debug, c,
  1749. "AV Core video IRQ status: %#06x disables: %#06x\n",
  1750. vid_stat & CX25840_VID_INT_STAT_BITS,
  1751. vid_stat >> CX25840_VID_INT_MASK_SHFT);
  1752. if (irq_stat & CX23885_PIN_CTRL_IRQ_VID_STAT) {
  1753. if (vid_stat & CX25840_VID_INT_STAT_BITS) {
  1754. cx25840_write4(c, CX25840_VID_INT_STAT_REG, vid_stat);
  1755. *handled = true;
  1756. }
  1757. }
  1758. irq_stat = cx25840_read(c, CX23885_PIN_CTRL_IRQ_REG);
  1759. v4l_dbg(2, cx25840_debug, c, "AV Core IRQ status (exit): %s %s %s\n",
  1760. irq_stat & CX23885_PIN_CTRL_IRQ_IR_STAT ? "ir" : " ",
  1761. irq_stat & CX23885_PIN_CTRL_IRQ_AUD_STAT ? "aud" : " ",
  1762. irq_stat & CX23885_PIN_CTRL_IRQ_VID_STAT ? "vid" : " ");
  1763. return ret;
  1764. }
  1765. static int cx25840_irq_handler(struct v4l2_subdev *sd, u32 status,
  1766. bool *handled)
  1767. {
  1768. struct cx25840_state *state = to_state(sd);
  1769. *handled = false;
  1770. /* Only support the CX2388[578] AV Core for now */
  1771. if (is_cx2388x(state))
  1772. return cx23885_irq_handler(sd, status, handled);
  1773. return -ENODEV;
  1774. }
  1775. /* ----------------------------------------------------------------------- */
  1776. #define DIF_PLL_FREQ_WORD (0x300)
  1777. #define DIF_BPF_COEFF01 (0x348)
  1778. #define DIF_BPF_COEFF23 (0x34c)
  1779. #define DIF_BPF_COEFF45 (0x350)
  1780. #define DIF_BPF_COEFF67 (0x354)
  1781. #define DIF_BPF_COEFF89 (0x358)
  1782. #define DIF_BPF_COEFF1011 (0x35c)
  1783. #define DIF_BPF_COEFF1213 (0x360)
  1784. #define DIF_BPF_COEFF1415 (0x364)
  1785. #define DIF_BPF_COEFF1617 (0x368)
  1786. #define DIF_BPF_COEFF1819 (0x36c)
  1787. #define DIF_BPF_COEFF2021 (0x370)
  1788. #define DIF_BPF_COEFF2223 (0x374)
  1789. #define DIF_BPF_COEFF2425 (0x378)
  1790. #define DIF_BPF_COEFF2627 (0x37c)
  1791. #define DIF_BPF_COEFF2829 (0x380)
  1792. #define DIF_BPF_COEFF3031 (0x384)
  1793. #define DIF_BPF_COEFF3233 (0x388)
  1794. #define DIF_BPF_COEFF3435 (0x38c)
  1795. #define DIF_BPF_COEFF36 (0x390)
  1796. static void cx23885_dif_setup(struct i2c_client *client, u32 ifHz)
  1797. {
  1798. u64 pll_freq;
  1799. u32 pll_freq_word;
  1800. v4l_dbg(1, cx25840_debug, client, "%s(%d)\n", __func__, ifHz);
  1801. /* Assuming TV */
  1802. /* Calculate the PLL frequency word based on the adjusted ifHz */
  1803. pll_freq = div_u64((u64)ifHz * 268435456, 50000000);
  1804. pll_freq_word = (u32)pll_freq;
  1805. cx25840_write4(client, DIF_PLL_FREQ_WORD, pll_freq_word);
  1806. /* Round down to the nearest 100KHz */
  1807. ifHz = (ifHz / 100000) * 100000;
  1808. if (ifHz < 3000000)
  1809. ifHz = 3000000;
  1810. if (ifHz > 16000000)
  1811. ifHz = 16000000;
  1812. v4l_dbg(1, cx25840_debug, client, "%s(%d) again\n", __func__, ifHz);
  1813. switch (ifHz) {
  1814. case 3000000:
  1815. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
  1816. cx25840_write4(client, DIF_BPF_COEFF23, 0x00080012);
  1817. cx25840_write4(client, DIF_BPF_COEFF45, 0x001e0024);
  1818. cx25840_write4(client, DIF_BPF_COEFF67, 0x001bfff8);
  1819. cx25840_write4(client, DIF_BPF_COEFF89, 0xffb4ff50);
  1820. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfed8fe68);
  1821. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe24fe34);
  1822. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfebaffc7);
  1823. cx25840_write4(client, DIF_BPF_COEFF1617, 0x014d031f);
  1824. cx25840_write4(client, DIF_BPF_COEFF1819, 0x04f0065d);
  1825. cx25840_write4(client, DIF_BPF_COEFF2021, 0x07010688);
  1826. cx25840_write4(client, DIF_BPF_COEFF2223, 0x04c901d6);
  1827. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfe00f9d3);
  1828. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf600f342);
  1829. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf235f337);
  1830. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf64efb22);
  1831. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0105070f);
  1832. cx25840_write4(client, DIF_BPF_COEFF3435, 0x0c460fce);
  1833. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  1834. break;
  1835. case 3100000:
  1836. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000001);
  1837. cx25840_write4(client, DIF_BPF_COEFF23, 0x00070012);
  1838. cx25840_write4(client, DIF_BPF_COEFF45, 0x00220032);
  1839. cx25840_write4(client, DIF_BPF_COEFF67, 0x00370026);
  1840. cx25840_write4(client, DIF_BPF_COEFF89, 0xfff0ff91);
  1841. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff0efe7c);
  1842. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe01fdcc);
  1843. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe0afedb);
  1844. cx25840_write4(client, DIF_BPF_COEFF1617, 0x00440224);
  1845. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0434060c);
  1846. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0738074e);
  1847. cx25840_write4(client, DIF_BPF_COEFF2223, 0x06090361);
  1848. cx25840_write4(client, DIF_BPF_COEFF2425, 0xff99fb39);
  1849. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf6fef3b6);
  1850. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf21af2a5);
  1851. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf573fa33);
  1852. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0034067d);
  1853. cx25840_write4(client, DIF_BPF_COEFF3435, 0x0bfb0fb9);
  1854. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  1855. break;
  1856. case 3200000:
  1857. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000000);
  1858. cx25840_write4(client, DIF_BPF_COEFF23, 0x0004000e);
  1859. cx25840_write4(client, DIF_BPF_COEFF45, 0x00200038);
  1860. cx25840_write4(client, DIF_BPF_COEFF67, 0x004c004f);
  1861. cx25840_write4(client, DIF_BPF_COEFF89, 0x002fffdf);
  1862. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff5cfeb6);
  1863. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe0dfd92);
  1864. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd7ffe03);
  1865. cx25840_write4(client, DIF_BPF_COEFF1617, 0xff36010a);
  1866. cx25840_write4(client, DIF_BPF_COEFF1819, 0x03410575);
  1867. cx25840_write4(client, DIF_BPF_COEFF2021, 0x072607d2);
  1868. cx25840_write4(client, DIF_BPF_COEFF2223, 0x071804d5);
  1869. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0134fcb7);
  1870. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf81ff451);
  1871. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf223f22e);
  1872. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf4a7f94b);
  1873. cx25840_write4(client, DIF_BPF_COEFF3233, 0xff6405e8);
  1874. cx25840_write4(client, DIF_BPF_COEFF3435, 0x0bae0fa4);
  1875. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  1876. break;
  1877. case 3300000:
  1878. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000ffff);
  1879. cx25840_write4(client, DIF_BPF_COEFF23, 0x00000008);
  1880. cx25840_write4(client, DIF_BPF_COEFF45, 0x001a0036);
  1881. cx25840_write4(client, DIF_BPF_COEFF67, 0x0056006d);
  1882. cx25840_write4(client, DIF_BPF_COEFF89, 0x00670030);
  1883. cx25840_write4(client, DIF_BPF_COEFF1011, 0xffbdff10);
  1884. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe46fd8d);
  1885. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd25fd4f);
  1886. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe35ffe0);
  1887. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0224049f);
  1888. cx25840_write4(client, DIF_BPF_COEFF2021, 0x06c9080e);
  1889. cx25840_write4(client, DIF_BPF_COEFF2223, 0x07ef0627);
  1890. cx25840_write4(client, DIF_BPF_COEFF2425, 0x02c9fe45);
  1891. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf961f513);
  1892. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf250f1d2);
  1893. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf3ecf869);
  1894. cx25840_write4(client, DIF_BPF_COEFF3233, 0xfe930552);
  1895. cx25840_write4(client, DIF_BPF_COEFF3435, 0x0b5f0f8f);
  1896. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  1897. break;
  1898. case 3400000:
  1899. cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffe);
  1900. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffd0001);
  1901. cx25840_write4(client, DIF_BPF_COEFF45, 0x000f002c);
  1902. cx25840_write4(client, DIF_BPF_COEFF67, 0x0054007d);
  1903. cx25840_write4(client, DIF_BPF_COEFF89, 0x0093007c);
  1904. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0024ff82);
  1905. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfea6fdbb);
  1906. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd03fcca);
  1907. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51feb9);
  1908. cx25840_write4(client, DIF_BPF_COEFF1819, 0x00eb0392);
  1909. cx25840_write4(client, DIF_BPF_COEFF2021, 0x06270802);
  1910. cx25840_write4(client, DIF_BPF_COEFF2223, 0x08880750);
  1911. cx25840_write4(client, DIF_BPF_COEFF2425, 0x044dffdb);
  1912. cx25840_write4(client, DIF_BPF_COEFF2627, 0xfabdf5f8);
  1913. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2a0f193);
  1914. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf342f78f);
  1915. cx25840_write4(client, DIF_BPF_COEFF3233, 0xfdc404b9);
  1916. cx25840_write4(client, DIF_BPF_COEFF3435, 0x0b0e0f78);
  1917. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  1918. break;
  1919. case 3500000:
  1920. cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffd);
  1921. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffafff9);
  1922. cx25840_write4(client, DIF_BPF_COEFF45, 0x0002001b);
  1923. cx25840_write4(client, DIF_BPF_COEFF67, 0x0046007d);
  1924. cx25840_write4(client, DIF_BPF_COEFF89, 0x00ad00ba);
  1925. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00870000);
  1926. cx25840_write4(client, DIF_BPF_COEFF1213, 0xff26fe1a);
  1927. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd1bfc7e);
  1928. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99fda4);
  1929. cx25840_write4(client, DIF_BPF_COEFF1819, 0xffa5025c);
  1930. cx25840_write4(client, DIF_BPF_COEFF2021, 0x054507ad);
  1931. cx25840_write4(client, DIF_BPF_COEFF2223, 0x08dd0847);
  1932. cx25840_write4(client, DIF_BPF_COEFF2425, 0x05b80172);
  1933. cx25840_write4(client, DIF_BPF_COEFF2627, 0xfc2ef6ff);
  1934. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf313f170);
  1935. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf2abf6bd);
  1936. cx25840_write4(client, DIF_BPF_COEFF3233, 0xfcf6041f);
  1937. cx25840_write4(client, DIF_BPF_COEFF3435, 0x0abc0f61);
  1938. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  1939. break;
  1940. case 3600000:
  1941. cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffd);
  1942. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fff3);
  1943. cx25840_write4(client, DIF_BPF_COEFF45, 0xfff50006);
  1944. cx25840_write4(client, DIF_BPF_COEFF67, 0x002f006c);
  1945. cx25840_write4(client, DIF_BPF_COEFF89, 0x00b200e3);
  1946. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00dc007e);
  1947. cx25840_write4(client, DIF_BPF_COEFF1213, 0xffb9fea0);
  1948. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd6bfc71);
  1949. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17fcb1);
  1950. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfe65010b);
  1951. cx25840_write4(client, DIF_BPF_COEFF2021, 0x042d0713);
  1952. cx25840_write4(client, DIF_BPF_COEFF2223, 0x08ec0906);
  1953. cx25840_write4(client, DIF_BPF_COEFF2425, 0x07020302);
  1954. cx25840_write4(client, DIF_BPF_COEFF2627, 0xfdaff823);
  1955. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf3a7f16a);
  1956. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf228f5f5);
  1957. cx25840_write4(client, DIF_BPF_COEFF3233, 0xfc2a0384);
  1958. cx25840_write4(client, DIF_BPF_COEFF3435, 0x0a670f4a);
  1959. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  1960. break;
  1961. case 3700000:
  1962. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  1963. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff7ffef);
  1964. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe9fff1);
  1965. cx25840_write4(client, DIF_BPF_COEFF67, 0x0010004d);
  1966. cx25840_write4(client, DIF_BPF_COEFF89, 0x00a100f2);
  1967. cx25840_write4(client, DIF_BPF_COEFF1011, 0x011a00f0);
  1968. cx25840_write4(client, DIF_BPF_COEFF1213, 0x0053ff44);
  1969. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfdedfca2);
  1970. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3fbef);
  1971. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfd39ffae);
  1972. cx25840_write4(client, DIF_BPF_COEFF2021, 0x02ea0638);
  1973. cx25840_write4(client, DIF_BPF_COEFF2223, 0x08b50987);
  1974. cx25840_write4(client, DIF_BPF_COEFF2425, 0x08230483);
  1975. cx25840_write4(client, DIF_BPF_COEFF2627, 0xff39f960);
  1976. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf45bf180);
  1977. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf1b8f537);
  1978. cx25840_write4(client, DIF_BPF_COEFF3233, 0xfb6102e7);
  1979. cx25840_write4(client, DIF_BPF_COEFF3435, 0x0a110f32);
  1980. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  1981. break;
  1982. case 3800000:
  1983. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
  1984. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9ffee);
  1985. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe1ffdd);
  1986. cx25840_write4(client, DIF_BPF_COEFF67, 0xfff00024);
  1987. cx25840_write4(client, DIF_BPF_COEFF89, 0x007c00e5);
  1988. cx25840_write4(client, DIF_BPF_COEFF1011, 0x013a014a);
  1989. cx25840_write4(client, DIF_BPF_COEFF1213, 0x00e6fff8);
  1990. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe98fd0f);
  1991. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3fb67);
  1992. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfc32fe54);
  1993. cx25840_write4(client, DIF_BPF_COEFF2021, 0x01880525);
  1994. cx25840_write4(client, DIF_BPF_COEFF2223, 0x083909c7);
  1995. cx25840_write4(client, DIF_BPF_COEFF2425, 0x091505ee);
  1996. cx25840_write4(client, DIF_BPF_COEFF2627, 0x00c7fab3);
  1997. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf52df1b4);
  1998. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf15df484);
  1999. cx25840_write4(client, DIF_BPF_COEFF3233, 0xfa9b0249);
  2000. cx25840_write4(client, DIF_BPF_COEFF3435, 0x09ba0f19);
  2001. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2002. break;
  2003. case 3900000:
  2004. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000000);
  2005. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffbfff0);
  2006. cx25840_write4(client, DIF_BPF_COEFF45, 0xffdeffcf);
  2007. cx25840_write4(client, DIF_BPF_COEFF67, 0xffd1fff6);
  2008. cx25840_write4(client, DIF_BPF_COEFF89, 0x004800be);
  2009. cx25840_write4(client, DIF_BPF_COEFF1011, 0x01390184);
  2010. cx25840_write4(client, DIF_BPF_COEFF1213, 0x016300ac);
  2011. cx25840_write4(client, DIF_BPF_COEFF1415, 0xff5efdb1);
  2012. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17fb23);
  2013. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb5cfd0d);
  2014. cx25840_write4(client, DIF_BPF_COEFF2021, 0x001703e4);
  2015. cx25840_write4(client, DIF_BPF_COEFF2223, 0x077b09c4);
  2016. cx25840_write4(client, DIF_BPF_COEFF2425, 0x09d2073c);
  2017. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0251fc18);
  2018. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf61cf203);
  2019. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf118f3dc);
  2020. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf9d801aa);
  2021. cx25840_write4(client, DIF_BPF_COEFF3435, 0x09600eff);
  2022. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2023. break;
  2024. case 4000000:
  2025. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000001);
  2026. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffefff4);
  2027. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe1ffc8);
  2028. cx25840_write4(client, DIF_BPF_COEFF67, 0xffbaffca);
  2029. cx25840_write4(client, DIF_BPF_COEFF89, 0x000b0082);
  2030. cx25840_write4(client, DIF_BPF_COEFF1011, 0x01170198);
  2031. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01c10152);
  2032. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0030fe7b);
  2033. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99fb24);
  2034. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfac3fbe9);
  2035. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfea5027f);
  2036. cx25840_write4(client, DIF_BPF_COEFF2223, 0x0683097f);
  2037. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a560867);
  2038. cx25840_write4(client, DIF_BPF_COEFF2627, 0x03d2fd89);
  2039. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf723f26f);
  2040. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0e8f341);
  2041. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf919010a);
  2042. cx25840_write4(client, DIF_BPF_COEFF3435, 0x09060ee5);
  2043. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2044. break;
  2045. case 4100000:
  2046. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010002);
  2047. cx25840_write4(client, DIF_BPF_COEFF23, 0x0002fffb);
  2048. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe8ffca);
  2049. cx25840_write4(client, DIF_BPF_COEFF67, 0xffacffa4);
  2050. cx25840_write4(client, DIF_BPF_COEFF89, 0xffcd0036);
  2051. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00d70184);
  2052. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01f601dc);
  2053. cx25840_write4(client, DIF_BPF_COEFF1415, 0x00ffff60);
  2054. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51fb6d);
  2055. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa6efaf5);
  2056. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfd410103);
  2057. cx25840_write4(client, DIF_BPF_COEFF2223, 0x055708f9);
  2058. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a9e0969);
  2059. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0543ff02);
  2060. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf842f2f5);
  2061. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0cef2b2);
  2062. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf85e006b);
  2063. cx25840_write4(client, DIF_BPF_COEFF3435, 0x08aa0ecb);
  2064. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2065. break;
  2066. case 4200000:
  2067. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010003);
  2068. cx25840_write4(client, DIF_BPF_COEFF23, 0x00050003);
  2069. cx25840_write4(client, DIF_BPF_COEFF45, 0xfff3ffd3);
  2070. cx25840_write4(client, DIF_BPF_COEFF67, 0xffaaff8b);
  2071. cx25840_write4(client, DIF_BPF_COEFF89, 0xff95ffe5);
  2072. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0080014a);
  2073. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01fe023f);
  2074. cx25840_write4(client, DIF_BPF_COEFF1415, 0x01ba0050);
  2075. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe35fbf8);
  2076. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa62fa3b);
  2077. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfbf9ff7e);
  2078. cx25840_write4(client, DIF_BPF_COEFF2223, 0x04010836);
  2079. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0aa90a3d);
  2080. cx25840_write4(client, DIF_BPF_COEFF2627, 0x069f007f);
  2081. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf975f395);
  2082. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0cbf231);
  2083. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf7a9ffcb);
  2084. cx25840_write4(client, DIF_BPF_COEFF3435, 0x084c0eaf);
  2085. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2086. break;
  2087. case 4300000:
  2088. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010003);
  2089. cx25840_write4(client, DIF_BPF_COEFF23, 0x0008000a);
  2090. cx25840_write4(client, DIF_BPF_COEFF45, 0x0000ffe4);
  2091. cx25840_write4(client, DIF_BPF_COEFF67, 0xffb4ff81);
  2092. cx25840_write4(client, DIF_BPF_COEFF89, 0xff6aff96);
  2093. cx25840_write4(client, DIF_BPF_COEFF1011, 0x001c00f0);
  2094. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01d70271);
  2095. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0254013b);
  2096. cx25840_write4(client, DIF_BPF_COEFF1617, 0xff36fcbd);
  2097. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa9ff9c5);
  2098. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfadbfdfe);
  2099. cx25840_write4(client, DIF_BPF_COEFF2223, 0x028c073b);
  2100. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a750adf);
  2101. cx25840_write4(client, DIF_BPF_COEFF2627, 0x07e101fa);
  2102. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfab8f44e);
  2103. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0ddf1be);
  2104. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf6f9ff2b);
  2105. cx25840_write4(client, DIF_BPF_COEFF3435, 0x07ed0e94);
  2106. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2107. break;
  2108. case 4400000:
  2109. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  2110. cx25840_write4(client, DIF_BPF_COEFF23, 0x0009000f);
  2111. cx25840_write4(client, DIF_BPF_COEFF45, 0x000efff8);
  2112. cx25840_write4(client, DIF_BPF_COEFF67, 0xffc9ff87);
  2113. cx25840_write4(client, DIF_BPF_COEFF89, 0xff52ff54);
  2114. cx25840_write4(client, DIF_BPF_COEFF1011, 0xffb5007e);
  2115. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01860270);
  2116. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02c00210);
  2117. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0044fdb2);
  2118. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb22f997);
  2119. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf9f2fc90);
  2120. cx25840_write4(client, DIF_BPF_COEFF2223, 0x0102060f);
  2121. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a050b4c);
  2122. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0902036e);
  2123. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfc0af51e);
  2124. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf106f15a);
  2125. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf64efe8b);
  2126. cx25840_write4(client, DIF_BPF_COEFF3435, 0x078d0e77);
  2127. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2128. break;
  2129. case 4500000:
  2130. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
  2131. cx25840_write4(client, DIF_BPF_COEFF23, 0x00080012);
  2132. cx25840_write4(client, DIF_BPF_COEFF45, 0x0019000e);
  2133. cx25840_write4(client, DIF_BPF_COEFF67, 0xffe5ff9e);
  2134. cx25840_write4(client, DIF_BPF_COEFF89, 0xff4fff25);
  2135. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff560000);
  2136. cx25840_write4(client, DIF_BPF_COEFF1213, 0x0112023b);
  2137. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02f702c0);
  2138. cx25840_write4(client, DIF_BPF_COEFF1617, 0x014dfec8);
  2139. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfbe5f9b3);
  2140. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf947fb41);
  2141. cx25840_write4(client, DIF_BPF_COEFF2223, 0xff7004b9);
  2142. cx25840_write4(client, DIF_BPF_COEFF2425, 0x095a0b81);
  2143. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0a0004d8);
  2144. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfd65f603);
  2145. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf144f104);
  2146. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf5aafdec);
  2147. cx25840_write4(client, DIF_BPF_COEFF3435, 0x072b0e5a);
  2148. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2149. break;
  2150. case 4600000:
  2151. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000001);
  2152. cx25840_write4(client, DIF_BPF_COEFF23, 0x00060012);
  2153. cx25840_write4(client, DIF_BPF_COEFF45, 0x00200022);
  2154. cx25840_write4(client, DIF_BPF_COEFF67, 0x0005ffc1);
  2155. cx25840_write4(client, DIF_BPF_COEFF89, 0xff61ff10);
  2156. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff09ff82);
  2157. cx25840_write4(client, DIF_BPF_COEFF1213, 0x008601d7);
  2158. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02f50340);
  2159. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0241fff0);
  2160. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfcddfa19);
  2161. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8e2fa1e);
  2162. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfde30343);
  2163. cx25840_write4(client, DIF_BPF_COEFF2425, 0x08790b7f);
  2164. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0ad50631);
  2165. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfec7f6fc);
  2166. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf198f0bd);
  2167. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf50dfd4e);
  2168. cx25840_write4(client, DIF_BPF_COEFF3435, 0x06c90e3d);
  2169. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2170. break;
  2171. case 4700000:
  2172. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000ffff);
  2173. cx25840_write4(client, DIF_BPF_COEFF23, 0x0003000f);
  2174. cx25840_write4(client, DIF_BPF_COEFF45, 0x00220030);
  2175. cx25840_write4(client, DIF_BPF_COEFF67, 0x0025ffed);
  2176. cx25840_write4(client, DIF_BPF_COEFF89, 0xff87ff15);
  2177. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfed6ff10);
  2178. cx25840_write4(client, DIF_BPF_COEFF1213, 0xffed014c);
  2179. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02b90386);
  2180. cx25840_write4(client, DIF_BPF_COEFF1617, 0x03110119);
  2181. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfdfefac4);
  2182. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8c6f92f);
  2183. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfc6701b7);
  2184. cx25840_write4(client, DIF_BPF_COEFF2425, 0x07670b44);
  2185. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0b7e0776);
  2186. cx25840_write4(client, DIF_BPF_COEFF2829, 0x002df807);
  2187. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf200f086);
  2188. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf477fcb1);
  2189. cx25840_write4(client, DIF_BPF_COEFF3435, 0x06650e1e);
  2190. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2191. break;
  2192. case 4800000:
  2193. cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffe);
  2194. cx25840_write4(client, DIF_BPF_COEFF23, 0xffff0009);
  2195. cx25840_write4(client, DIF_BPF_COEFF45, 0x001e0038);
  2196. cx25840_write4(client, DIF_BPF_COEFF67, 0x003f001b);
  2197. cx25840_write4(client, DIF_BPF_COEFF89, 0xffbcff36);
  2198. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfec2feb6);
  2199. cx25840_write4(client, DIF_BPF_COEFF1213, 0xff5600a5);
  2200. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0248038d);
  2201. cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b00232);
  2202. cx25840_write4(client, DIF_BPF_COEFF1819, 0xff39fbab);
  2203. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8f4f87f);
  2204. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfb060020);
  2205. cx25840_write4(client, DIF_BPF_COEFF2425, 0x062a0ad2);
  2206. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0bf908a3);
  2207. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0192f922);
  2208. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf27df05e);
  2209. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf3e8fc14);
  2210. cx25840_write4(client, DIF_BPF_COEFF3435, 0x06000e00);
  2211. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2212. break;
  2213. case 4900000:
  2214. cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffd);
  2215. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffc0002);
  2216. cx25840_write4(client, DIF_BPF_COEFF45, 0x00160037);
  2217. cx25840_write4(client, DIF_BPF_COEFF67, 0x00510046);
  2218. cx25840_write4(client, DIF_BPF_COEFF89, 0xfff9ff6d);
  2219. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfed0fe7c);
  2220. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfecefff0);
  2221. cx25840_write4(client, DIF_BPF_COEFF1415, 0x01aa0356);
  2222. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0413032b);
  2223. cx25840_write4(client, DIF_BPF_COEFF1819, 0x007ffcc5);
  2224. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf96cf812);
  2225. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf9cefe87);
  2226. cx25840_write4(client, DIF_BPF_COEFF2425, 0x04c90a2c);
  2227. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c4309b4);
  2228. cx25840_write4(client, DIF_BPF_COEFF2829, 0x02f3fa4a);
  2229. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf30ef046);
  2230. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf361fb7a);
  2231. cx25840_write4(client, DIF_BPF_COEFF3435, 0x059b0de0);
  2232. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2233. break;
  2234. case 5000000:
  2235. cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffd);
  2236. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9fffa);
  2237. cx25840_write4(client, DIF_BPF_COEFF45, 0x000a002d);
  2238. cx25840_write4(client, DIF_BPF_COEFF67, 0x00570067);
  2239. cx25840_write4(client, DIF_BPF_COEFF89, 0x0037ffb5);
  2240. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfefffe68);
  2241. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe62ff3d);
  2242. cx25840_write4(client, DIF_BPF_COEFF1415, 0x00ec02e3);
  2243. cx25840_write4(client, DIF_BPF_COEFF1617, 0x043503f6);
  2244. cx25840_write4(client, DIF_BPF_COEFF1819, 0x01befe05);
  2245. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfa27f7ee);
  2246. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf8c6fcf8);
  2247. cx25840_write4(client, DIF_BPF_COEFF2425, 0x034c0954);
  2248. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c5c0aa4);
  2249. cx25840_write4(client, DIF_BPF_COEFF2829, 0x044cfb7e);
  2250. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf3b1f03f);
  2251. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf2e2fae1);
  2252. cx25840_write4(client, DIF_BPF_COEFF3435, 0x05340dc0);
  2253. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2254. break;
  2255. case 5100000:
  2256. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  2257. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fff4);
  2258. cx25840_write4(client, DIF_BPF_COEFF45, 0xfffd001e);
  2259. cx25840_write4(client, DIF_BPF_COEFF67, 0x0051007b);
  2260. cx25840_write4(client, DIF_BPF_COEFF89, 0x006e0006);
  2261. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff48fe7c);
  2262. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe1bfe9a);
  2263. cx25840_write4(client, DIF_BPF_COEFF1415, 0x001d023e);
  2264. cx25840_write4(client, DIF_BPF_COEFF1617, 0x04130488);
  2265. cx25840_write4(client, DIF_BPF_COEFF1819, 0x02e6ff5b);
  2266. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfb1ef812);
  2267. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf7f7fb7f);
  2268. cx25840_write4(client, DIF_BPF_COEFF2425, 0x01bc084e);
  2269. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c430b72);
  2270. cx25840_write4(client, DIF_BPF_COEFF2829, 0x059afcba);
  2271. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf467f046);
  2272. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf26cfa4a);
  2273. cx25840_write4(client, DIF_BPF_COEFF3435, 0x04cd0da0);
  2274. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2275. break;
  2276. case 5200000:
  2277. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
  2278. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8ffef);
  2279. cx25840_write4(client, DIF_BPF_COEFF45, 0xfff00009);
  2280. cx25840_write4(client, DIF_BPF_COEFF67, 0x003f007f);
  2281. cx25840_write4(client, DIF_BPF_COEFF89, 0x00980056);
  2282. cx25840_write4(client, DIF_BPF_COEFF1011, 0xffa5feb6);
  2283. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe00fe15);
  2284. cx25840_write4(client, DIF_BPF_COEFF1415, 0xff4b0170);
  2285. cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b004d7);
  2286. cx25840_write4(client, DIF_BPF_COEFF1819, 0x03e800b9);
  2287. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfc48f87f);
  2288. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf768fa23);
  2289. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0022071f);
  2290. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0bf90c1b);
  2291. cx25840_write4(client, DIF_BPF_COEFF2829, 0x06dafdfd);
  2292. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf52df05e);
  2293. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf1fef9b5);
  2294. cx25840_write4(client, DIF_BPF_COEFF3435, 0x04640d7f);
  2295. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2296. break;
  2297. case 5300000:
  2298. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000ffff);
  2299. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9ffee);
  2300. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe6fff3);
  2301. cx25840_write4(client, DIF_BPF_COEFF67, 0x00250072);
  2302. cx25840_write4(client, DIF_BPF_COEFF89, 0x00af009c);
  2303. cx25840_write4(client, DIF_BPF_COEFF1011, 0x000cff10);
  2304. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe13fdb8);
  2305. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe870089);
  2306. cx25840_write4(client, DIF_BPF_COEFF1617, 0x031104e1);
  2307. cx25840_write4(client, DIF_BPF_COEFF1819, 0x04b8020f);
  2308. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfd98f92f);
  2309. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf71df8f0);
  2310. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfe8805ce);
  2311. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0b7e0c9c);
  2312. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0808ff44);
  2313. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf603f086);
  2314. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf19af922);
  2315. cx25840_write4(client, DIF_BPF_COEFF3435, 0x03fb0d5e);
  2316. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2317. break;
  2318. case 5400000:
  2319. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000001);
  2320. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffcffef);
  2321. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe0ffe0);
  2322. cx25840_write4(client, DIF_BPF_COEFF67, 0x00050056);
  2323. cx25840_write4(client, DIF_BPF_COEFF89, 0x00b000d1);
  2324. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0071ff82);
  2325. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe53fd8c);
  2326. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfddfff99);
  2327. cx25840_write4(client, DIF_BPF_COEFF1617, 0x024104a3);
  2328. cx25840_write4(client, DIF_BPF_COEFF1819, 0x054a034d);
  2329. cx25840_write4(client, DIF_BPF_COEFF2021, 0xff01fa1e);
  2330. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf717f7ed);
  2331. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfcf50461);
  2332. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0ad50cf4);
  2333. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0921008d);
  2334. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf6e7f0bd);
  2335. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf13ff891);
  2336. cx25840_write4(client, DIF_BPF_COEFF3435, 0x03920d3b);
  2337. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2338. break;
  2339. case 5500000:
  2340. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010002);
  2341. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffffff3);
  2342. cx25840_write4(client, DIF_BPF_COEFF45, 0xffdeffd1);
  2343. cx25840_write4(client, DIF_BPF_COEFF67, 0xffe5002f);
  2344. cx25840_write4(client, DIF_BPF_COEFF89, 0x009c00ed);
  2345. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00cb0000);
  2346. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfebafd94);
  2347. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd61feb0);
  2348. cx25840_write4(client, DIF_BPF_COEFF1617, 0x014d0422);
  2349. cx25840_write4(client, DIF_BPF_COEFF1819, 0x05970464);
  2350. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0074fb41);
  2351. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf759f721);
  2352. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfb7502de);
  2353. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0a000d21);
  2354. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0a2201d4);
  2355. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf7d9f104);
  2356. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf0edf804);
  2357. cx25840_write4(client, DIF_BPF_COEFF3435, 0x03280d19);
  2358. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2359. break;
  2360. case 5600000:
  2361. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010003);
  2362. cx25840_write4(client, DIF_BPF_COEFF23, 0x0003fffa);
  2363. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe3ffc9);
  2364. cx25840_write4(client, DIF_BPF_COEFF67, 0xffc90002);
  2365. cx25840_write4(client, DIF_BPF_COEFF89, 0x007500ef);
  2366. cx25840_write4(client, DIF_BPF_COEFF1011, 0x010e007e);
  2367. cx25840_write4(client, DIF_BPF_COEFF1213, 0xff3dfdcf);
  2368. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd16fddd);
  2369. cx25840_write4(client, DIF_BPF_COEFF1617, 0x00440365);
  2370. cx25840_write4(client, DIF_BPF_COEFF1819, 0x059b0548);
  2371. cx25840_write4(client, DIF_BPF_COEFF2021, 0x01e3fc90);
  2372. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf7dff691);
  2373. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfa0f014d);
  2374. cx25840_write4(client, DIF_BPF_COEFF2627, 0x09020d23);
  2375. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0b0a0318);
  2376. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf8d7f15a);
  2377. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf0a5f779);
  2378. cx25840_write4(client, DIF_BPF_COEFF3435, 0x02bd0cf6);
  2379. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2380. break;
  2381. case 5700000:
  2382. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010003);
  2383. cx25840_write4(client, DIF_BPF_COEFF23, 0x00060001);
  2384. cx25840_write4(client, DIF_BPF_COEFF45, 0xffecffc9);
  2385. cx25840_write4(client, DIF_BPF_COEFF67, 0xffb4ffd4);
  2386. cx25840_write4(client, DIF_BPF_COEFF89, 0x004000d5);
  2387. cx25840_write4(client, DIF_BPF_COEFF1011, 0x013600f0);
  2388. cx25840_write4(client, DIF_BPF_COEFF1213, 0xffd3fe39);
  2389. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd04fd31);
  2390. cx25840_write4(client, DIF_BPF_COEFF1617, 0xff360277);
  2391. cx25840_write4(client, DIF_BPF_COEFF1819, 0x055605ef);
  2392. cx25840_write4(client, DIF_BPF_COEFF2021, 0x033efdfe);
  2393. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf8a5f642);
  2394. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf8cbffb6);
  2395. cx25840_write4(client, DIF_BPF_COEFF2627, 0x07e10cfb);
  2396. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0bd50456);
  2397. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf9dff1be);
  2398. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf067f6f2);
  2399. cx25840_write4(client, DIF_BPF_COEFF3435, 0x02520cd2);
  2400. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2401. break;
  2402. case 5800000:
  2403. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  2404. cx25840_write4(client, DIF_BPF_COEFF23, 0x00080009);
  2405. cx25840_write4(client, DIF_BPF_COEFF45, 0xfff8ffd2);
  2406. cx25840_write4(client, DIF_BPF_COEFF67, 0xffaaffac);
  2407. cx25840_write4(client, DIF_BPF_COEFF89, 0x000200a3);
  2408. cx25840_write4(client, DIF_BPF_COEFF1011, 0x013c014a);
  2409. cx25840_write4(client, DIF_BPF_COEFF1213, 0x006dfec9);
  2410. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd2bfcb7);
  2411. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe350165);
  2412. cx25840_write4(client, DIF_BPF_COEFF1819, 0x04cb0651);
  2413. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0477ff7e);
  2414. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf9a5f635);
  2415. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf7b1fe20);
  2416. cx25840_write4(client, DIF_BPF_COEFF2627, 0x069f0ca8);
  2417. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0c81058b);
  2418. cx25840_write4(client, DIF_BPF_COEFF3031, 0xfaf0f231);
  2419. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf033f66d);
  2420. cx25840_write4(client, DIF_BPF_COEFF3435, 0x01e60cae);
  2421. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2422. break;
  2423. case 5900000:
  2424. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
  2425. cx25840_write4(client, DIF_BPF_COEFF23, 0x0009000e);
  2426. cx25840_write4(client, DIF_BPF_COEFF45, 0x0005ffe1);
  2427. cx25840_write4(client, DIF_BPF_COEFF67, 0xffacff90);
  2428. cx25840_write4(client, DIF_BPF_COEFF89, 0xffc5005f);
  2429. cx25840_write4(client, DIF_BPF_COEFF1011, 0x01210184);
  2430. cx25840_write4(client, DIF_BPF_COEFF1213, 0x00fcff72);
  2431. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd8afc77);
  2432. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51003f);
  2433. cx25840_write4(client, DIF_BPF_COEFF1819, 0x04020669);
  2434. cx25840_write4(client, DIF_BPF_COEFF2021, 0x05830103);
  2435. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfad7f66b);
  2436. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf6c8fc93);
  2437. cx25840_write4(client, DIF_BPF_COEFF2627, 0x05430c2b);
  2438. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d0d06b5);
  2439. cx25840_write4(client, DIF_BPF_COEFF3031, 0xfc08f2b2);
  2440. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf00af5ec);
  2441. cx25840_write4(client, DIF_BPF_COEFF3435, 0x017b0c89);
  2442. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2443. break;
  2444. case 6000000:
  2445. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000001);
  2446. cx25840_write4(client, DIF_BPF_COEFF23, 0x00070012);
  2447. cx25840_write4(client, DIF_BPF_COEFF45, 0x0012fff5);
  2448. cx25840_write4(client, DIF_BPF_COEFF67, 0xffbaff82);
  2449. cx25840_write4(client, DIF_BPF_COEFF89, 0xff8e000f);
  2450. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00e80198);
  2451. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01750028);
  2452. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe18fc75);
  2453. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99ff15);
  2454. cx25840_write4(client, DIF_BPF_COEFF1819, 0x03050636);
  2455. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0656027f);
  2456. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfc32f6e2);
  2457. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf614fb17);
  2458. cx25840_write4(client, DIF_BPF_COEFF2627, 0x03d20b87);
  2459. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d7707d2);
  2460. cx25840_write4(client, DIF_BPF_COEFF3031, 0xfd26f341);
  2461. cx25840_write4(client, DIF_BPF_COEFF3233, 0xefeaf56f);
  2462. cx25840_write4(client, DIF_BPF_COEFF3435, 0x010f0c64);
  2463. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2464. break;
  2465. case 6100000:
  2466. cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0000);
  2467. cx25840_write4(client, DIF_BPF_COEFF23, 0x00050012);
  2468. cx25840_write4(client, DIF_BPF_COEFF45, 0x001c000b);
  2469. cx25840_write4(client, DIF_BPF_COEFF67, 0xffd1ff84);
  2470. cx25840_write4(client, DIF_BPF_COEFF89, 0xff66ffbe);
  2471. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00960184);
  2472. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01cd00da);
  2473. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfeccfcb2);
  2474. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17fdf9);
  2475. cx25840_write4(client, DIF_BPF_COEFF1819, 0x01e005bc);
  2476. cx25840_write4(client, DIF_BPF_COEFF2021, 0x06e703e4);
  2477. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfdabf798);
  2478. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf599f9b3);
  2479. cx25840_write4(client, DIF_BPF_COEFF2627, 0x02510abd);
  2480. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0dbf08df);
  2481. cx25840_write4(client, DIF_BPF_COEFF3031, 0xfe48f3dc);
  2482. cx25840_write4(client, DIF_BPF_COEFF3233, 0xefd5f4f6);
  2483. cx25840_write4(client, DIF_BPF_COEFF3435, 0x00a20c3e);
  2484. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2485. break;
  2486. case 6200000:
  2487. cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffe);
  2488. cx25840_write4(client, DIF_BPF_COEFF23, 0x0002000f);
  2489. cx25840_write4(client, DIF_BPF_COEFF45, 0x0021001f);
  2490. cx25840_write4(client, DIF_BPF_COEFF67, 0xfff0ff97);
  2491. cx25840_write4(client, DIF_BPF_COEFF89, 0xff50ff74);
  2492. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0034014a);
  2493. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01fa0179);
  2494. cx25840_write4(client, DIF_BPF_COEFF1415, 0xff97fd2a);
  2495. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3fcfa);
  2496. cx25840_write4(client, DIF_BPF_COEFF1819, 0x00a304fe);
  2497. cx25840_write4(client, DIF_BPF_COEFF2021, 0x07310525);
  2498. cx25840_write4(client, DIF_BPF_COEFF2223, 0xff37f886);
  2499. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf55cf86e);
  2500. cx25840_write4(client, DIF_BPF_COEFF2627, 0x00c709d0);
  2501. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0de209db);
  2502. cx25840_write4(client, DIF_BPF_COEFF3031, 0xff6df484);
  2503. cx25840_write4(client, DIF_BPF_COEFF3233, 0xefcbf481);
  2504. cx25840_write4(client, DIF_BPF_COEFF3435, 0x00360c18);
  2505. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2506. break;
  2507. case 6300000:
  2508. cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffd);
  2509. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffe000a);
  2510. cx25840_write4(client, DIF_BPF_COEFF45, 0x0021002f);
  2511. cx25840_write4(client, DIF_BPF_COEFF67, 0x0010ffb8);
  2512. cx25840_write4(client, DIF_BPF_COEFF89, 0xff50ff3b);
  2513. cx25840_write4(client, DIF_BPF_COEFF1011, 0xffcc00f0);
  2514. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01fa01fa);
  2515. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0069fdd4);
  2516. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3fc26);
  2517. cx25840_write4(client, DIF_BPF_COEFF1819, 0xff5d0407);
  2518. cx25840_write4(client, DIF_BPF_COEFF2021, 0x07310638);
  2519. cx25840_write4(client, DIF_BPF_COEFF2223, 0x00c9f9a8);
  2520. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf55cf74e);
  2521. cx25840_write4(client, DIF_BPF_COEFF2627, 0xff3908c3);
  2522. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0de20ac3);
  2523. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0093f537);
  2524. cx25840_write4(client, DIF_BPF_COEFF3233, 0xefcbf410);
  2525. cx25840_write4(client, DIF_BPF_COEFF3435, 0xffca0bf2);
  2526. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2527. break;
  2528. case 6400000:
  2529. cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffd);
  2530. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffb0003);
  2531. cx25840_write4(client, DIF_BPF_COEFF45, 0x001c0037);
  2532. cx25840_write4(client, DIF_BPF_COEFF67, 0x002fffe2);
  2533. cx25840_write4(client, DIF_BPF_COEFF89, 0xff66ff17);
  2534. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff6a007e);
  2535. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01cd0251);
  2536. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0134fea5);
  2537. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17fb8b);
  2538. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfe2002e0);
  2539. cx25840_write4(client, DIF_BPF_COEFF2021, 0x06e70713);
  2540. cx25840_write4(client, DIF_BPF_COEFF2223, 0x0255faf5);
  2541. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf599f658);
  2542. cx25840_write4(client, DIF_BPF_COEFF2627, 0xfdaf0799);
  2543. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0dbf0b96);
  2544. cx25840_write4(client, DIF_BPF_COEFF3031, 0x01b8f5f5);
  2545. cx25840_write4(client, DIF_BPF_COEFF3233, 0xefd5f3a3);
  2546. cx25840_write4(client, DIF_BPF_COEFF3435, 0xff5e0bca);
  2547. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2548. break;
  2549. case 6500000:
  2550. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  2551. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9fffb);
  2552. cx25840_write4(client, DIF_BPF_COEFF45, 0x00120037);
  2553. cx25840_write4(client, DIF_BPF_COEFF67, 0x00460010);
  2554. cx25840_write4(client, DIF_BPF_COEFF89, 0xff8eff0f);
  2555. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff180000);
  2556. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01750276);
  2557. cx25840_write4(client, DIF_BPF_COEFF1415, 0x01e8ff8d);
  2558. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99fb31);
  2559. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfcfb0198);
  2560. cx25840_write4(client, DIF_BPF_COEFF2021, 0x065607ad);
  2561. cx25840_write4(client, DIF_BPF_COEFF2223, 0x03cefc64);
  2562. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf614f592);
  2563. cx25840_write4(client, DIF_BPF_COEFF2627, 0xfc2e0656);
  2564. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d770c52);
  2565. cx25840_write4(client, DIF_BPF_COEFF3031, 0x02daf6bd);
  2566. cx25840_write4(client, DIF_BPF_COEFF3233, 0xefeaf33b);
  2567. cx25840_write4(client, DIF_BPF_COEFF3435, 0xfef10ba3);
  2568. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2569. break;
  2570. case 6600000:
  2571. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
  2572. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff7fff5);
  2573. cx25840_write4(client, DIF_BPF_COEFF45, 0x0005002f);
  2574. cx25840_write4(client, DIF_BPF_COEFF67, 0x0054003c);
  2575. cx25840_write4(client, DIF_BPF_COEFF89, 0xffc5ff22);
  2576. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfedfff82);
  2577. cx25840_write4(client, DIF_BPF_COEFF1213, 0x00fc0267);
  2578. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0276007e);
  2579. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51fb1c);
  2580. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfbfe003e);
  2581. cx25840_write4(client, DIF_BPF_COEFF2021, 0x05830802);
  2582. cx25840_write4(client, DIF_BPF_COEFF2223, 0x0529fdec);
  2583. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf6c8f4fe);
  2584. cx25840_write4(client, DIF_BPF_COEFF2627, 0xfabd04ff);
  2585. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d0d0cf6);
  2586. cx25840_write4(client, DIF_BPF_COEFF3031, 0x03f8f78f);
  2587. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf00af2d7);
  2588. cx25840_write4(client, DIF_BPF_COEFF3435, 0xfe850b7b);
  2589. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2590. break;
  2591. case 6700000:
  2592. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000ffff);
  2593. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fff0);
  2594. cx25840_write4(client, DIF_BPF_COEFF45, 0xfff80020);
  2595. cx25840_write4(client, DIF_BPF_COEFF67, 0x00560060);
  2596. cx25840_write4(client, DIF_BPF_COEFF89, 0x0002ff4e);
  2597. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfec4ff10);
  2598. cx25840_write4(client, DIF_BPF_COEFF1213, 0x006d0225);
  2599. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02d50166);
  2600. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe35fb4e);
  2601. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb35fee1);
  2602. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0477080e);
  2603. cx25840_write4(client, DIF_BPF_COEFF2223, 0x065bff82);
  2604. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf7b1f4a0);
  2605. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf9610397);
  2606. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0c810d80);
  2607. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0510f869);
  2608. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf033f278);
  2609. cx25840_write4(client, DIF_BPF_COEFF3435, 0xfe1a0b52);
  2610. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2611. break;
  2612. case 6800000:
  2613. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010000);
  2614. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffaffee);
  2615. cx25840_write4(client, DIF_BPF_COEFF45, 0xffec000c);
  2616. cx25840_write4(client, DIF_BPF_COEFF67, 0x004c0078);
  2617. cx25840_write4(client, DIF_BPF_COEFF89, 0x0040ff8e);
  2618. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfecafeb6);
  2619. cx25840_write4(client, DIF_BPF_COEFF1213, 0xffd301b6);
  2620. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02fc0235);
  2621. cx25840_write4(client, DIF_BPF_COEFF1617, 0xff36fbc5);
  2622. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfaaafd90);
  2623. cx25840_write4(client, DIF_BPF_COEFF2021, 0x033e07d2);
  2624. cx25840_write4(client, DIF_BPF_COEFF2223, 0x075b011b);
  2625. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf8cbf47a);
  2626. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf81f0224);
  2627. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0bd50def);
  2628. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0621f94b);
  2629. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf067f21e);
  2630. cx25840_write4(client, DIF_BPF_COEFF3435, 0xfdae0b29);
  2631. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2632. break;
  2633. case 6900000:
  2634. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010001);
  2635. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffdffef);
  2636. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe3fff6);
  2637. cx25840_write4(client, DIF_BPF_COEFF67, 0x0037007f);
  2638. cx25840_write4(client, DIF_BPF_COEFF89, 0x0075ffdc);
  2639. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfef2fe7c);
  2640. cx25840_write4(client, DIF_BPF_COEFF1213, 0xff3d0122);
  2641. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02ea02dd);
  2642. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0044fc79);
  2643. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa65fc5d);
  2644. cx25840_write4(client, DIF_BPF_COEFF2021, 0x01e3074e);
  2645. cx25840_write4(client, DIF_BPF_COEFF2223, 0x082102ad);
  2646. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfa0ff48c);
  2647. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf6fe00a9);
  2648. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0b0a0e43);
  2649. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0729fa33);
  2650. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf0a5f1c9);
  2651. cx25840_write4(client, DIF_BPF_COEFF3435, 0xfd430b00);
  2652. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2653. break;
  2654. case 7000000:
  2655. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010002);
  2656. cx25840_write4(client, DIF_BPF_COEFF23, 0x0001fff3);
  2657. cx25840_write4(client, DIF_BPF_COEFF45, 0xffdeffe2);
  2658. cx25840_write4(client, DIF_BPF_COEFF67, 0x001b0076);
  2659. cx25840_write4(client, DIF_BPF_COEFF89, 0x009c002d);
  2660. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff35fe68);
  2661. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfeba0076);
  2662. cx25840_write4(client, DIF_BPF_COEFF1415, 0x029f0352);
  2663. cx25840_write4(client, DIF_BPF_COEFF1617, 0x014dfd60);
  2664. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa69fb53);
  2665. cx25840_write4(client, DIF_BPF_COEFF2021, 0x00740688);
  2666. cx25840_write4(client, DIF_BPF_COEFF2223, 0x08a7042d);
  2667. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfb75f4d6);
  2668. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf600ff2d);
  2669. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0a220e7a);
  2670. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0827fb22);
  2671. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf0edf17a);
  2672. cx25840_write4(client, DIF_BPF_COEFF3435, 0xfcd80ad6);
  2673. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2674. break;
  2675. case 7100000:
  2676. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  2677. cx25840_write4(client, DIF_BPF_COEFF23, 0x0004fff9);
  2678. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe0ffd2);
  2679. cx25840_write4(client, DIF_BPF_COEFF67, 0xfffb005e);
  2680. cx25840_write4(client, DIF_BPF_COEFF89, 0x00b0007a);
  2681. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff8ffe7c);
  2682. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe53ffc1);
  2683. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0221038c);
  2684. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0241fe6e);
  2685. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfab6fa80);
  2686. cx25840_write4(client, DIF_BPF_COEFF2021, 0xff010587);
  2687. cx25840_write4(client, DIF_BPF_COEFF2223, 0x08e90590);
  2688. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfcf5f556);
  2689. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf52bfdb3);
  2690. cx25840_write4(client, DIF_BPF_COEFF2829, 0x09210e95);
  2691. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0919fc15);
  2692. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf13ff12f);
  2693. cx25840_write4(client, DIF_BPF_COEFF3435, 0xfc6e0aab);
  2694. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2695. break;
  2696. case 7200000:
  2697. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  2698. cx25840_write4(client, DIF_BPF_COEFF23, 0x00070000);
  2699. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe6ffc9);
  2700. cx25840_write4(client, DIF_BPF_COEFF67, 0xffdb0039);
  2701. cx25840_write4(client, DIF_BPF_COEFF89, 0x00af00b8);
  2702. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfff4feb6);
  2703. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe13ff10);
  2704. cx25840_write4(client, DIF_BPF_COEFF1415, 0x01790388);
  2705. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0311ff92);
  2706. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb48f9ed);
  2707. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfd980453);
  2708. cx25840_write4(client, DIF_BPF_COEFF2223, 0x08e306cd);
  2709. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfe88f60a);
  2710. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf482fc40);
  2711. cx25840_write4(client, DIF_BPF_COEFF2829, 0x08080e93);
  2712. cx25840_write4(client, DIF_BPF_COEFF3031, 0x09fdfd0c);
  2713. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf19af0ea);
  2714. cx25840_write4(client, DIF_BPF_COEFF3435, 0xfc050a81);
  2715. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2716. break;
  2717. case 7300000:
  2718. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
  2719. cx25840_write4(client, DIF_BPF_COEFF23, 0x00080008);
  2720. cx25840_write4(client, DIF_BPF_COEFF45, 0xfff0ffc9);
  2721. cx25840_write4(client, DIF_BPF_COEFF67, 0xffc1000d);
  2722. cx25840_write4(client, DIF_BPF_COEFF89, 0x009800e2);
  2723. cx25840_write4(client, DIF_BPF_COEFF1011, 0x005bff10);
  2724. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe00fe74);
  2725. cx25840_write4(client, DIF_BPF_COEFF1415, 0x00b50345);
  2726. cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b000bc);
  2727. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfc18f9a1);
  2728. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfc4802f9);
  2729. cx25840_write4(client, DIF_BPF_COEFF2223, 0x089807dc);
  2730. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0022f6f0);
  2731. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf407fada);
  2732. cx25840_write4(client, DIF_BPF_COEFF2829, 0x06da0e74);
  2733. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0ad3fe06);
  2734. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf1fef0ab);
  2735. cx25840_write4(client, DIF_BPF_COEFF3435, 0xfb9c0a55);
  2736. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2737. break;
  2738. case 7400000:
  2739. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000001);
  2740. cx25840_write4(client, DIF_BPF_COEFF23, 0x0008000e);
  2741. cx25840_write4(client, DIF_BPF_COEFF45, 0xfffdffd0);
  2742. cx25840_write4(client, DIF_BPF_COEFF67, 0xffafffdf);
  2743. cx25840_write4(client, DIF_BPF_COEFF89, 0x006e00f2);
  2744. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00b8ff82);
  2745. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe1bfdf8);
  2746. cx25840_write4(client, DIF_BPF_COEFF1415, 0xffe302c8);
  2747. cx25840_write4(client, DIF_BPF_COEFF1617, 0x041301dc);
  2748. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfd1af99e);
  2749. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfb1e0183);
  2750. cx25840_write4(client, DIF_BPF_COEFF2223, 0x080908b5);
  2751. cx25840_write4(client, DIF_BPF_COEFF2425, 0x01bcf801);
  2752. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf3bdf985);
  2753. cx25840_write4(client, DIF_BPF_COEFF2829, 0x059a0e38);
  2754. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0b99ff03);
  2755. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf26cf071);
  2756. cx25840_write4(client, DIF_BPF_COEFF3435, 0xfb330a2a);
  2757. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2758. break;
  2759. case 7500000:
  2760. cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0000);
  2761. cx25840_write4(client, DIF_BPF_COEFF23, 0x00070011);
  2762. cx25840_write4(client, DIF_BPF_COEFF45, 0x000affdf);
  2763. cx25840_write4(client, DIF_BPF_COEFF67, 0xffa9ffb5);
  2764. cx25840_write4(client, DIF_BPF_COEFF89, 0x003700e6);
  2765. cx25840_write4(client, DIF_BPF_COEFF1011, 0x01010000);
  2766. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe62fda8);
  2767. cx25840_write4(client, DIF_BPF_COEFF1415, 0xff140219);
  2768. cx25840_write4(client, DIF_BPF_COEFF1617, 0x043502e1);
  2769. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfe42f9e6);
  2770. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfa270000);
  2771. cx25840_write4(client, DIF_BPF_COEFF2223, 0x073a0953);
  2772. cx25840_write4(client, DIF_BPF_COEFF2425, 0x034cf939);
  2773. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf3a4f845);
  2774. cx25840_write4(client, DIF_BPF_COEFF2829, 0x044c0de1);
  2775. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0c4f0000);
  2776. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf2e2f03c);
  2777. cx25840_write4(client, DIF_BPF_COEFF3435, 0xfacc09fe);
  2778. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2779. break;
  2780. case 7600000:
  2781. cx25840_write4(client, DIF_BPF_COEFF01, 0xffffffff);
  2782. cx25840_write4(client, DIF_BPF_COEFF23, 0x00040012);
  2783. cx25840_write4(client, DIF_BPF_COEFF45, 0x0016fff3);
  2784. cx25840_write4(client, DIF_BPF_COEFF67, 0xffafff95);
  2785. cx25840_write4(client, DIF_BPF_COEFF89, 0xfff900c0);
  2786. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0130007e);
  2787. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfecefd89);
  2788. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe560146);
  2789. cx25840_write4(client, DIF_BPF_COEFF1617, 0x041303bc);
  2790. cx25840_write4(client, DIF_BPF_COEFF1819, 0xff81fa76);
  2791. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf96cfe7d);
  2792. cx25840_write4(client, DIF_BPF_COEFF2223, 0x063209b1);
  2793. cx25840_write4(client, DIF_BPF_COEFF2425, 0x04c9fa93);
  2794. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf3bdf71e);
  2795. cx25840_write4(client, DIF_BPF_COEFF2829, 0x02f30d6e);
  2796. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0cf200fd);
  2797. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf361f00e);
  2798. cx25840_write4(client, DIF_BPF_COEFF3435, 0xfa6509d1);
  2799. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2800. break;
  2801. case 7700000:
  2802. cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffe);
  2803. cx25840_write4(client, DIF_BPF_COEFF23, 0x00010010);
  2804. cx25840_write4(client, DIF_BPF_COEFF45, 0x001e0008);
  2805. cx25840_write4(client, DIF_BPF_COEFF67, 0xffc1ff84);
  2806. cx25840_write4(client, DIF_BPF_COEFF89, 0xffbc0084);
  2807. cx25840_write4(client, DIF_BPF_COEFF1011, 0x013e00f0);
  2808. cx25840_write4(client, DIF_BPF_COEFF1213, 0xff56fd9f);
  2809. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfdb8005c);
  2810. cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b00460);
  2811. cx25840_write4(client, DIF_BPF_COEFF1819, 0x00c7fb45);
  2812. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8f4fd07);
  2813. cx25840_write4(client, DIF_BPF_COEFF2223, 0x04fa09ce);
  2814. cx25840_write4(client, DIF_BPF_COEFF2425, 0x062afc07);
  2815. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf407f614);
  2816. cx25840_write4(client, DIF_BPF_COEFF2829, 0x01920ce0);
  2817. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0d8301fa);
  2818. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf3e8efe5);
  2819. cx25840_write4(client, DIF_BPF_COEFF3435, 0xfa0009a4);
  2820. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2821. break;
  2822. case 7800000:
  2823. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  2824. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffd000b);
  2825. cx25840_write4(client, DIF_BPF_COEFF45, 0x0022001d);
  2826. cx25840_write4(client, DIF_BPF_COEFF67, 0xffdbff82);
  2827. cx25840_write4(client, DIF_BPF_COEFF89, 0xff870039);
  2828. cx25840_write4(client, DIF_BPF_COEFF1011, 0x012a014a);
  2829. cx25840_write4(client, DIF_BPF_COEFF1213, 0xffedfde7);
  2830. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd47ff6b);
  2831. cx25840_write4(client, DIF_BPF_COEFF1617, 0x031104c6);
  2832. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0202fc4c);
  2833. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8c6fbad);
  2834. cx25840_write4(client, DIF_BPF_COEFF2223, 0x039909a7);
  2835. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0767fd8e);
  2836. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf482f52b);
  2837. cx25840_write4(client, DIF_BPF_COEFF2829, 0x002d0c39);
  2838. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0e0002f4);
  2839. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf477efc2);
  2840. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf99b0977);
  2841. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2842. break;
  2843. case 7900000:
  2844. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  2845. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffa0004);
  2846. cx25840_write4(client, DIF_BPF_COEFF45, 0x0020002d);
  2847. cx25840_write4(client, DIF_BPF_COEFF67, 0xfffbff91);
  2848. cx25840_write4(client, DIF_BPF_COEFF89, 0xff61ffe8);
  2849. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00f70184);
  2850. cx25840_write4(client, DIF_BPF_COEFF1213, 0x0086fe5c);
  2851. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd0bfe85);
  2852. cx25840_write4(client, DIF_BPF_COEFF1617, 0x024104e5);
  2853. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0323fd7d);
  2854. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8e2fa79);
  2855. cx25840_write4(client, DIF_BPF_COEFF2223, 0x021d093f);
  2856. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0879ff22);
  2857. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf52bf465);
  2858. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfec70b79);
  2859. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0e6803eb);
  2860. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf50defa5);
  2861. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf937094a);
  2862. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2863. break;
  2864. case 8000000:
  2865. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
  2866. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fffd);
  2867. cx25840_write4(client, DIF_BPF_COEFF45, 0x00190036);
  2868. cx25840_write4(client, DIF_BPF_COEFF67, 0x001bffaf);
  2869. cx25840_write4(client, DIF_BPF_COEFF89, 0xff4fff99);
  2870. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00aa0198);
  2871. cx25840_write4(client, DIF_BPF_COEFF1213, 0x0112fef3);
  2872. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd09fdb9);
  2873. cx25840_write4(client, DIF_BPF_COEFF1617, 0x014d04be);
  2874. cx25840_write4(client, DIF_BPF_COEFF1819, 0x041bfecc);
  2875. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf947f978);
  2876. cx25840_write4(client, DIF_BPF_COEFF2223, 0x00900897);
  2877. cx25840_write4(client, DIF_BPF_COEFF2425, 0x095a00b9);
  2878. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf600f3c5);
  2879. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfd650aa3);
  2880. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0ebc04de);
  2881. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf5aaef8e);
  2882. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf8d5091c);
  2883. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2884. break;
  2885. case 8100000:
  2886. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000ffff);
  2887. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff7fff6);
  2888. cx25840_write4(client, DIF_BPF_COEFF45, 0x000e0038);
  2889. cx25840_write4(client, DIF_BPF_COEFF67, 0x0037ffd7);
  2890. cx25840_write4(client, DIF_BPF_COEFF89, 0xff52ff56);
  2891. cx25840_write4(client, DIF_BPF_COEFF1011, 0x004b0184);
  2892. cx25840_write4(client, DIF_BPF_COEFF1213, 0x0186ffa1);
  2893. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd40fd16);
  2894. cx25840_write4(client, DIF_BPF_COEFF1617, 0x00440452);
  2895. cx25840_write4(client, DIF_BPF_COEFF1819, 0x04de0029);
  2896. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf9f2f8b2);
  2897. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfefe07b5);
  2898. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a05024d);
  2899. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf6fef34d);
  2900. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfc0a09b8);
  2901. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0efa05cd);
  2902. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf64eef7d);
  2903. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf87308ed);
  2904. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2905. break;
  2906. case 8200000:
  2907. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010000);
  2908. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fff0);
  2909. cx25840_write4(client, DIF_BPF_COEFF45, 0x00000031);
  2910. cx25840_write4(client, DIF_BPF_COEFF67, 0x004c0005);
  2911. cx25840_write4(client, DIF_BPF_COEFF89, 0xff6aff27);
  2912. cx25840_write4(client, DIF_BPF_COEFF1011, 0xffe4014a);
  2913. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01d70057);
  2914. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfdacfca6);
  2915. cx25840_write4(client, DIF_BPF_COEFF1617, 0xff3603a7);
  2916. cx25840_write4(client, DIF_BPF_COEFF1819, 0x05610184);
  2917. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfadbf82e);
  2918. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfd74069f);
  2919. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a7503d6);
  2920. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf81ff2ff);
  2921. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfab808b9);
  2922. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0f2306b5);
  2923. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf6f9ef72);
  2924. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf81308bf);
  2925. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2926. break;
  2927. case 8300000:
  2928. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010001);
  2929. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffbffee);
  2930. cx25840_write4(client, DIF_BPF_COEFF45, 0xfff30022);
  2931. cx25840_write4(client, DIF_BPF_COEFF67, 0x00560032);
  2932. cx25840_write4(client, DIF_BPF_COEFF89, 0xff95ff10);
  2933. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff8000f0);
  2934. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01fe0106);
  2935. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe46fc71);
  2936. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe3502c7);
  2937. cx25840_write4(client, DIF_BPF_COEFF1819, 0x059e02ce);
  2938. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfbf9f7f2);
  2939. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfbff055b);
  2940. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0aa9054c);
  2941. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf961f2db);
  2942. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf97507aa);
  2943. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0f350797);
  2944. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf7a9ef6d);
  2945. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf7b40890);
  2946. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2947. break;
  2948. case 8400000:
  2949. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010002);
  2950. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffeffee);
  2951. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe8000f);
  2952. cx25840_write4(client, DIF_BPF_COEFF67, 0x00540058);
  2953. cx25840_write4(client, DIF_BPF_COEFF89, 0xffcdff14);
  2954. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff29007e);
  2955. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01f6019e);
  2956. cx25840_write4(client, DIF_BPF_COEFF1415, 0xff01fc7c);
  2957. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd5101bf);
  2958. cx25840_write4(client, DIF_BPF_COEFF1819, 0x059203f6);
  2959. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfd41f7fe);
  2960. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfaa903f3);
  2961. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a9e06a9);
  2962. cx25840_write4(client, DIF_BPF_COEFF2627, 0xfabdf2e2);
  2963. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf842068b);
  2964. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0f320871);
  2965. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf85eef6e);
  2966. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf7560860);
  2967. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2968. break;
  2969. case 8500000:
  2970. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  2971. cx25840_write4(client, DIF_BPF_COEFF23, 0x0002fff2);
  2972. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe1fff9);
  2973. cx25840_write4(client, DIF_BPF_COEFF67, 0x00460073);
  2974. cx25840_write4(client, DIF_BPF_COEFF89, 0x000bff34);
  2975. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfee90000);
  2976. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01c10215);
  2977. cx25840_write4(client, DIF_BPF_COEFF1415, 0xffd0fcc5);
  2978. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99009d);
  2979. cx25840_write4(client, DIF_BPF_COEFF1819, 0x053d04f1);
  2980. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfea5f853);
  2981. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf97d0270);
  2982. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a5607e4);
  2983. cx25840_write4(client, DIF_BPF_COEFF2627, 0xfc2ef314);
  2984. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf723055f);
  2985. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0f180943);
  2986. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf919ef75);
  2987. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf6fa0830);
  2988. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  2989. break;
  2990. case 8600000:
  2991. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  2992. cx25840_write4(client, DIF_BPF_COEFF23, 0x0005fff8);
  2993. cx25840_write4(client, DIF_BPF_COEFF45, 0xffdeffe4);
  2994. cx25840_write4(client, DIF_BPF_COEFF67, 0x002f007f);
  2995. cx25840_write4(client, DIF_BPF_COEFF89, 0x0048ff6b);
  2996. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfec7ff82);
  2997. cx25840_write4(client, DIF_BPF_COEFF1213, 0x0163025f);
  2998. cx25840_write4(client, DIF_BPF_COEFF1415, 0x00a2fd47);
  2999. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17ff73);
  3000. cx25840_write4(client, DIF_BPF_COEFF1819, 0x04a405b2);
  3001. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0017f8ed);
  3002. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf88500dc);
  3003. cx25840_write4(client, DIF_BPF_COEFF2425, 0x09d208f9);
  3004. cx25840_write4(client, DIF_BPF_COEFF2627, 0xfdaff370);
  3005. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf61c0429);
  3006. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0ee80a0b);
  3007. cx25840_write4(client, DIF_BPF_COEFF3233, 0xf9d8ef82);
  3008. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf6a00800);
  3009. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3010. break;
  3011. case 8700000:
  3012. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  3013. cx25840_write4(client, DIF_BPF_COEFF23, 0x0007ffff);
  3014. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe1ffd4);
  3015. cx25840_write4(client, DIF_BPF_COEFF67, 0x0010007a);
  3016. cx25840_write4(client, DIF_BPF_COEFF89, 0x007cffb2);
  3017. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfec6ff10);
  3018. cx25840_write4(client, DIF_BPF_COEFF1213, 0x00e60277);
  3019. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0168fdf9);
  3020. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3fe50);
  3021. cx25840_write4(client, DIF_BPF_COEFF1819, 0x03ce0631);
  3022. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0188f9c8);
  3023. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf7c7ff43);
  3024. cx25840_write4(client, DIF_BPF_COEFF2425, 0x091509e3);
  3025. cx25840_write4(client, DIF_BPF_COEFF2627, 0xff39f3f6);
  3026. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf52d02ea);
  3027. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0ea30ac9);
  3028. cx25840_write4(client, DIF_BPF_COEFF3233, 0xfa9bef95);
  3029. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf64607d0);
  3030. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3031. break;
  3032. case 8800000:
  3033. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
  3034. cx25840_write4(client, DIF_BPF_COEFF23, 0x00090007);
  3035. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe9ffca);
  3036. cx25840_write4(client, DIF_BPF_COEFF67, 0xfff00065);
  3037. cx25840_write4(client, DIF_BPF_COEFF89, 0x00a10003);
  3038. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfee6feb6);
  3039. cx25840_write4(client, DIF_BPF_COEFF1213, 0x0053025b);
  3040. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0213fed0);
  3041. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3fd46);
  3042. cx25840_write4(client, DIF_BPF_COEFF1819, 0x02c70668);
  3043. cx25840_write4(client, DIF_BPF_COEFF2021, 0x02eafadb);
  3044. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf74bfdae);
  3045. cx25840_write4(client, DIF_BPF_COEFF2425, 0x08230a9c);
  3046. cx25840_write4(client, DIF_BPF_COEFF2627, 0x00c7f4a3);
  3047. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf45b01a6);
  3048. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0e480b7c);
  3049. cx25840_write4(client, DIF_BPF_COEFF3233, 0xfb61efae);
  3050. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf5ef079f);
  3051. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3052. break;
  3053. case 8900000:
  3054. cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0000);
  3055. cx25840_write4(client, DIF_BPF_COEFF23, 0x0008000d);
  3056. cx25840_write4(client, DIF_BPF_COEFF45, 0xfff5ffc8);
  3057. cx25840_write4(client, DIF_BPF_COEFF67, 0xffd10043);
  3058. cx25840_write4(client, DIF_BPF_COEFF89, 0x00b20053);
  3059. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff24fe7c);
  3060. cx25840_write4(client, DIF_BPF_COEFF1213, 0xffb9020c);
  3061. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0295ffbb);
  3062. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17fc64);
  3063. cx25840_write4(client, DIF_BPF_COEFF1819, 0x019b0654);
  3064. cx25840_write4(client, DIF_BPF_COEFF2021, 0x042dfc1c);
  3065. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf714fc2a);
  3066. cx25840_write4(client, DIF_BPF_COEFF2425, 0x07020b21);
  3067. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0251f575);
  3068. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf3a7005e);
  3069. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0dd80c24);
  3070. cx25840_write4(client, DIF_BPF_COEFF3233, 0xfc2aefcd);
  3071. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf599076e);
  3072. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3073. break;
  3074. case 9000000:
  3075. cx25840_write4(client, DIF_BPF_COEFF01, 0xffffffff);
  3076. cx25840_write4(client, DIF_BPF_COEFF23, 0x00060011);
  3077. cx25840_write4(client, DIF_BPF_COEFF45, 0x0002ffcf);
  3078. cx25840_write4(client, DIF_BPF_COEFF67, 0xffba0018);
  3079. cx25840_write4(client, DIF_BPF_COEFF89, 0x00ad009a);
  3080. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff79fe68);
  3081. cx25840_write4(client, DIF_BPF_COEFF1213, 0xff260192);
  3082. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02e500ab);
  3083. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99fbb6);
  3084. cx25840_write4(client, DIF_BPF_COEFF1819, 0x005b05f7);
  3085. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0545fd81);
  3086. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf723fabf);
  3087. cx25840_write4(client, DIF_BPF_COEFF2425, 0x05b80b70);
  3088. cx25840_write4(client, DIF_BPF_COEFF2627, 0x03d2f669);
  3089. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf313ff15);
  3090. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0d550cbf);
  3091. cx25840_write4(client, DIF_BPF_COEFF3233, 0xfcf6eff2);
  3092. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf544073d);
  3093. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3094. break;
  3095. case 9100000:
  3096. cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffe);
  3097. cx25840_write4(client, DIF_BPF_COEFF23, 0x00030012);
  3098. cx25840_write4(client, DIF_BPF_COEFF45, 0x000fffdd);
  3099. cx25840_write4(client, DIF_BPF_COEFF67, 0xffacffea);
  3100. cx25840_write4(client, DIF_BPF_COEFF89, 0x009300cf);
  3101. cx25840_write4(client, DIF_BPF_COEFF1011, 0xffdcfe7c);
  3102. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfea600f7);
  3103. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02fd0190);
  3104. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51fb46);
  3105. cx25840_write4(client, DIF_BPF_COEFF1819, 0xff150554);
  3106. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0627fefd);
  3107. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf778f978);
  3108. cx25840_write4(client, DIF_BPF_COEFF2425, 0x044d0b87);
  3109. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0543f77d);
  3110. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2a0fdcf);
  3111. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0cbe0d4e);
  3112. cx25840_write4(client, DIF_BPF_COEFF3233, 0xfdc4f01d);
  3113. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf4f2070b);
  3114. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3115. break;
  3116. case 9200000:
  3117. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  3118. cx25840_write4(client, DIF_BPF_COEFF23, 0x00000010);
  3119. cx25840_write4(client, DIF_BPF_COEFF45, 0x001afff0);
  3120. cx25840_write4(client, DIF_BPF_COEFF67, 0xffaaffbf);
  3121. cx25840_write4(client, DIF_BPF_COEFF89, 0x006700ed);
  3122. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0043feb6);
  3123. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe460047);
  3124. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02db0258);
  3125. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe35fb1b);
  3126. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfddc0473);
  3127. cx25840_write4(client, DIF_BPF_COEFF2021, 0x06c90082);
  3128. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf811f85e);
  3129. cx25840_write4(client, DIF_BPF_COEFF2425, 0x02c90b66);
  3130. cx25840_write4(client, DIF_BPF_COEFF2627, 0x069ff8ad);
  3131. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf250fc8d);
  3132. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0c140dcf);
  3133. cx25840_write4(client, DIF_BPF_COEFF3233, 0xfe93f04d);
  3134. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf4a106d9);
  3135. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3136. break;
  3137. case 9300000:
  3138. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  3139. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffc000c);
  3140. cx25840_write4(client, DIF_BPF_COEFF45, 0x00200006);
  3141. cx25840_write4(client, DIF_BPF_COEFF67, 0xffb4ff9c);
  3142. cx25840_write4(client, DIF_BPF_COEFF89, 0x002f00ef);
  3143. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00a4ff10);
  3144. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe0dff92);
  3145. cx25840_write4(client, DIF_BPF_COEFF1415, 0x028102f7);
  3146. cx25840_write4(client, DIF_BPF_COEFF1617, 0xff36fb37);
  3147. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfcbf035e);
  3148. cx25840_write4(client, DIF_BPF_COEFF2021, 0x07260202);
  3149. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf8e8f778);
  3150. cx25840_write4(client, DIF_BPF_COEFF2425, 0x01340b0d);
  3151. cx25840_write4(client, DIF_BPF_COEFF2627, 0x07e1f9f4);
  3152. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf223fb51);
  3153. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0b590e42);
  3154. cx25840_write4(client, DIF_BPF_COEFF3233, 0xff64f083);
  3155. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf45206a7);
  3156. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3157. break;
  3158. case 9400000:
  3159. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  3160. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff90005);
  3161. cx25840_write4(client, DIF_BPF_COEFF45, 0x0022001a);
  3162. cx25840_write4(client, DIF_BPF_COEFF67, 0xffc9ff86);
  3163. cx25840_write4(client, DIF_BPF_COEFF89, 0xfff000d7);
  3164. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00f2ff82);
  3165. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe01fee5);
  3166. cx25840_write4(client, DIF_BPF_COEFF1415, 0x01f60362);
  3167. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0044fb99);
  3168. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfbcc0222);
  3169. cx25840_write4(client, DIF_BPF_COEFF2021, 0x07380370);
  3170. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf9f7f6cc);
  3171. cx25840_write4(client, DIF_BPF_COEFF2425, 0xff990a7e);
  3172. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0902fb50);
  3173. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf21afa1f);
  3174. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0a8d0ea6);
  3175. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0034f0bf);
  3176. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf4050675);
  3177. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3178. break;
  3179. case 9500000:
  3180. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
  3181. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fffe);
  3182. cx25840_write4(client, DIF_BPF_COEFF45, 0x001e002b);
  3183. cx25840_write4(client, DIF_BPF_COEFF67, 0xffe5ff81);
  3184. cx25840_write4(client, DIF_BPF_COEFF89, 0xffb400a5);
  3185. cx25840_write4(client, DIF_BPF_COEFF1011, 0x01280000);
  3186. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe24fe50);
  3187. cx25840_write4(client, DIF_BPF_COEFF1415, 0x01460390);
  3188. cx25840_write4(client, DIF_BPF_COEFF1617, 0x014dfc3a);
  3189. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb1000ce);
  3190. cx25840_write4(client, DIF_BPF_COEFF2021, 0x070104bf);
  3191. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfb37f65f);
  3192. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfe0009bc);
  3193. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0a00fcbb);
  3194. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf235f8f8);
  3195. cx25840_write4(client, DIF_BPF_COEFF3031, 0x09b20efc);
  3196. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0105f101);
  3197. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf3ba0642);
  3198. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3199. break;
  3200. case 9600000:
  3201. cx25840_write4(client, DIF_BPF_COEFF01, 0x0001ffff);
  3202. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fff7);
  3203. cx25840_write4(client, DIF_BPF_COEFF45, 0x00150036);
  3204. cx25840_write4(client, DIF_BPF_COEFF67, 0x0005ff8c);
  3205. cx25840_write4(client, DIF_BPF_COEFF89, 0xff810061);
  3206. cx25840_write4(client, DIF_BPF_COEFF1011, 0x013d007e);
  3207. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe71fddf);
  3208. cx25840_write4(client, DIF_BPF_COEFF1415, 0x007c0380);
  3209. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0241fd13);
  3210. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa94ff70);
  3211. cx25840_write4(client, DIF_BPF_COEFF2021, 0x068005e2);
  3212. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfc9bf633);
  3213. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfc7308ca);
  3214. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0ad5fe30);
  3215. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf274f7e0);
  3216. cx25840_write4(client, DIF_BPF_COEFF3031, 0x08c90f43);
  3217. cx25840_write4(client, DIF_BPF_COEFF3233, 0x01d4f147);
  3218. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf371060f);
  3219. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3220. break;
  3221. case 9700000:
  3222. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010001);
  3223. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9fff1);
  3224. cx25840_write4(client, DIF_BPF_COEFF45, 0x00090038);
  3225. cx25840_write4(client, DIF_BPF_COEFF67, 0x0025ffa7);
  3226. cx25840_write4(client, DIF_BPF_COEFF89, 0xff5e0012);
  3227. cx25840_write4(client, DIF_BPF_COEFF1011, 0x013200f0);
  3228. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfee3fd9b);
  3229. cx25840_write4(client, DIF_BPF_COEFF1415, 0xffaa0331);
  3230. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0311fe15);
  3231. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa60fe18);
  3232. cx25840_write4(client, DIF_BPF_COEFF2021, 0x05bd06d1);
  3233. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfe1bf64a);
  3234. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfafa07ae);
  3235. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0b7effab);
  3236. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2d5f6d7);
  3237. cx25840_write4(client, DIF_BPF_COEFF3031, 0x07d30f7a);
  3238. cx25840_write4(client, DIF_BPF_COEFF3233, 0x02a3f194);
  3239. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf32905dc);
  3240. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3241. break;
  3242. case 9800000:
  3243. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010002);
  3244. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffcffee);
  3245. cx25840_write4(client, DIF_BPF_COEFF45, 0xfffb0032);
  3246. cx25840_write4(client, DIF_BPF_COEFF67, 0x003fffcd);
  3247. cx25840_write4(client, DIF_BPF_COEFF89, 0xff4effc1);
  3248. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0106014a);
  3249. cx25840_write4(client, DIF_BPF_COEFF1213, 0xff6efd8a);
  3250. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfedd02aa);
  3251. cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b0ff34);
  3252. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa74fcd7);
  3253. cx25840_write4(client, DIF_BPF_COEFF2021, 0x04bf0781);
  3254. cx25840_write4(client, DIF_BPF_COEFF2223, 0xffaaf6a3);
  3255. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf99e066b);
  3256. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0bf90128);
  3257. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf359f5e1);
  3258. cx25840_write4(client, DIF_BPF_COEFF3031, 0x06d20fa2);
  3259. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0370f1e5);
  3260. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf2e405a8);
  3261. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3262. break;
  3263. case 9900000:
  3264. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  3265. cx25840_write4(client, DIF_BPF_COEFF23, 0xffffffee);
  3266. cx25840_write4(client, DIF_BPF_COEFF45, 0xffef0024);
  3267. cx25840_write4(client, DIF_BPF_COEFF67, 0x0051fffa);
  3268. cx25840_write4(client, DIF_BPF_COEFF89, 0xff54ff77);
  3269. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00be0184);
  3270. cx25840_write4(client, DIF_BPF_COEFF1213, 0x0006fdad);
  3271. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe2701f3);
  3272. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0413005e);
  3273. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfad1fbba);
  3274. cx25840_write4(client, DIF_BPF_COEFF2021, 0x039007ee);
  3275. cx25840_write4(client, DIF_BPF_COEFF2223, 0x013bf73d);
  3276. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf868050a);
  3277. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c4302a1);
  3278. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf3fdf4fe);
  3279. cx25840_write4(client, DIF_BPF_COEFF3031, 0x05c70fba);
  3280. cx25840_write4(client, DIF_BPF_COEFF3233, 0x043bf23c);
  3281. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf2a10575);
  3282. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3283. break;
  3284. case 10000000:
  3285. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  3286. cx25840_write4(client, DIF_BPF_COEFF23, 0x0003fff1);
  3287. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe50011);
  3288. cx25840_write4(client, DIF_BPF_COEFF67, 0x00570027);
  3289. cx25840_write4(client, DIF_BPF_COEFF89, 0xff70ff3c);
  3290. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00620198);
  3291. cx25840_write4(client, DIF_BPF_COEFF1213, 0x009efe01);
  3292. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd95011a);
  3293. cx25840_write4(client, DIF_BPF_COEFF1617, 0x04350183);
  3294. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb71fad0);
  3295. cx25840_write4(client, DIF_BPF_COEFF2021, 0x023c0812);
  3296. cx25840_write4(client, DIF_BPF_COEFF2223, 0x02c3f811);
  3297. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf75e0390);
  3298. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c5c0411);
  3299. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf4c1f432);
  3300. cx25840_write4(client, DIF_BPF_COEFF3031, 0x04b30fc1);
  3301. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0503f297);
  3302. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf2610541);
  3303. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3304. break;
  3305. case 10100000:
  3306. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  3307. cx25840_write4(client, DIF_BPF_COEFF23, 0x0006fff7);
  3308. cx25840_write4(client, DIF_BPF_COEFF45, 0xffdffffc);
  3309. cx25840_write4(client, DIF_BPF_COEFF67, 0x00510050);
  3310. cx25840_write4(client, DIF_BPF_COEFF89, 0xff9dff18);
  3311. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfffc0184);
  3312. cx25840_write4(client, DIF_BPF_COEFF1213, 0x0128fe80);
  3313. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd32002e);
  3314. cx25840_write4(client, DIF_BPF_COEFF1617, 0x04130292);
  3315. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfc4dfa21);
  3316. cx25840_write4(client, DIF_BPF_COEFF2021, 0x00d107ee);
  3317. cx25840_write4(client, DIF_BPF_COEFF2223, 0x0435f91c);
  3318. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf6850205);
  3319. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c430573);
  3320. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf5a1f37d);
  3321. cx25840_write4(client, DIF_BPF_COEFF3031, 0x03990fba);
  3322. cx25840_write4(client, DIF_BPF_COEFF3233, 0x05c7f2f8);
  3323. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf222050d);
  3324. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3325. break;
  3326. case 10200000:
  3327. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
  3328. cx25840_write4(client, DIF_BPF_COEFF23, 0x0008fffe);
  3329. cx25840_write4(client, DIF_BPF_COEFF45, 0xffdfffe7);
  3330. cx25840_write4(client, DIF_BPF_COEFF67, 0x003f006e);
  3331. cx25840_write4(client, DIF_BPF_COEFF89, 0xffd6ff0f);
  3332. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff96014a);
  3333. cx25840_write4(client, DIF_BPF_COEFF1213, 0x0197ff1f);
  3334. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd05ff3e);
  3335. cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b0037c);
  3336. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfd59f9b7);
  3337. cx25840_write4(client, DIF_BPF_COEFF2021, 0xff5d0781);
  3338. cx25840_write4(client, DIF_BPF_COEFF2223, 0x0585fa56);
  3339. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf5e4006f);
  3340. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0bf906c4);
  3341. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf69df2e0);
  3342. cx25840_write4(client, DIF_BPF_COEFF3031, 0x02790fa2);
  3343. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0688f35d);
  3344. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf1e604d8);
  3345. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3346. break;
  3347. case 10300000:
  3348. cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0001);
  3349. cx25840_write4(client, DIF_BPF_COEFF23, 0x00090005);
  3350. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe4ffd6);
  3351. cx25840_write4(client, DIF_BPF_COEFF67, 0x0025007e);
  3352. cx25840_write4(client, DIF_BPF_COEFF89, 0x0014ff20);
  3353. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff3c00f0);
  3354. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01e1ffd0);
  3355. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd12fe5c);
  3356. cx25840_write4(client, DIF_BPF_COEFF1617, 0x03110433);
  3357. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfe88f996);
  3358. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfdf106d1);
  3359. cx25840_write4(client, DIF_BPF_COEFF2223, 0x06aafbb7);
  3360. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf57efed8);
  3361. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0b7e07ff);
  3362. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf7b0f25e);
  3363. cx25840_write4(client, DIF_BPF_COEFF3031, 0x01560f7a);
  3364. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0745f3c7);
  3365. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf1ac04a4);
  3366. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3367. break;
  3368. case 10400000:
  3369. cx25840_write4(client, DIF_BPF_COEFF01, 0xffffffff);
  3370. cx25840_write4(client, DIF_BPF_COEFF23, 0x0008000c);
  3371. cx25840_write4(client, DIF_BPF_COEFF45, 0xffedffcb);
  3372. cx25840_write4(client, DIF_BPF_COEFF67, 0x0005007d);
  3373. cx25840_write4(client, DIF_BPF_COEFF89, 0x0050ff4c);
  3374. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfef6007e);
  3375. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01ff0086);
  3376. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd58fd97);
  3377. cx25840_write4(client, DIF_BPF_COEFF1617, 0x024104ad);
  3378. cx25840_write4(client, DIF_BPF_COEFF1819, 0xffcaf9c0);
  3379. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfc9905e2);
  3380. cx25840_write4(client, DIF_BPF_COEFF2223, 0x079afd35);
  3381. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf555fd46);
  3382. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0ad50920);
  3383. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf8d9f1f6);
  3384. cx25840_write4(client, DIF_BPF_COEFF3031, 0x00310f43);
  3385. cx25840_write4(client, DIF_BPF_COEFF3233, 0x07fdf435);
  3386. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf174046f);
  3387. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3388. break;
  3389. case 10500000:
  3390. cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffe);
  3391. cx25840_write4(client, DIF_BPF_COEFF23, 0x00050011);
  3392. cx25840_write4(client, DIF_BPF_COEFF45, 0xfffaffc8);
  3393. cx25840_write4(client, DIF_BPF_COEFF67, 0xffe5006b);
  3394. cx25840_write4(client, DIF_BPF_COEFF89, 0x0082ff8c);
  3395. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfecc0000);
  3396. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01f00130);
  3397. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfdd2fcfc);
  3398. cx25840_write4(client, DIF_BPF_COEFF1617, 0x014d04e3);
  3399. cx25840_write4(client, DIF_BPF_COEFF1819, 0x010efa32);
  3400. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfb6404bf);
  3401. cx25840_write4(client, DIF_BPF_COEFF2223, 0x084efec5);
  3402. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf569fbc2);
  3403. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0a000a23);
  3404. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfa15f1ab);
  3405. cx25840_write4(client, DIF_BPF_COEFF3031, 0xff0b0efc);
  3406. cx25840_write4(client, DIF_BPF_COEFF3233, 0x08b0f4a7);
  3407. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf13f043a);
  3408. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3409. break;
  3410. case 10600000:
  3411. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  3412. cx25840_write4(client, DIF_BPF_COEFF23, 0x00020012);
  3413. cx25840_write4(client, DIF_BPF_COEFF45, 0x0007ffcd);
  3414. cx25840_write4(client, DIF_BPF_COEFF67, 0xffc9004c);
  3415. cx25840_write4(client, DIF_BPF_COEFF89, 0x00a4ffd9);
  3416. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfec3ff82);
  3417. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01b401c1);
  3418. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe76fc97);
  3419. cx25840_write4(client, DIF_BPF_COEFF1617, 0x004404d2);
  3420. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0245fae8);
  3421. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfa5f0370);
  3422. cx25840_write4(client, DIF_BPF_COEFF2223, 0x08c1005f);
  3423. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf5bcfa52);
  3424. cx25840_write4(client, DIF_BPF_COEFF2627, 0x09020b04);
  3425. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfb60f17b);
  3426. cx25840_write4(client, DIF_BPF_COEFF3031, 0xfde70ea6);
  3427. cx25840_write4(client, DIF_BPF_COEFF3233, 0x095df51e);
  3428. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf10c0405);
  3429. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3430. break;
  3431. case 10700000:
  3432. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  3433. cx25840_write4(client, DIF_BPF_COEFF23, 0xffff0011);
  3434. cx25840_write4(client, DIF_BPF_COEFF45, 0x0014ffdb);
  3435. cx25840_write4(client, DIF_BPF_COEFF67, 0xffb40023);
  3436. cx25840_write4(client, DIF_BPF_COEFF89, 0x00b2002a);
  3437. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfedbff10);
  3438. cx25840_write4(client, DIF_BPF_COEFF1213, 0x0150022d);
  3439. cx25840_write4(client, DIF_BPF_COEFF1415, 0xff38fc6f);
  3440. cx25840_write4(client, DIF_BPF_COEFF1617, 0xff36047b);
  3441. cx25840_write4(client, DIF_BPF_COEFF1819, 0x035efbda);
  3442. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf9940202);
  3443. cx25840_write4(client, DIF_BPF_COEFF2223, 0x08ee01f5);
  3444. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf649f8fe);
  3445. cx25840_write4(client, DIF_BPF_COEFF2627, 0x07e10bc2);
  3446. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfcb6f169);
  3447. cx25840_write4(client, DIF_BPF_COEFF3031, 0xfcc60e42);
  3448. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0a04f599);
  3449. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf0db03d0);
  3450. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3451. break;
  3452. case 10800000:
  3453. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  3454. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffb000d);
  3455. cx25840_write4(client, DIF_BPF_COEFF45, 0x001dffed);
  3456. cx25840_write4(client, DIF_BPF_COEFF67, 0xffaafff5);
  3457. cx25840_write4(client, DIF_BPF_COEFF89, 0x00aa0077);
  3458. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff13feb6);
  3459. cx25840_write4(client, DIF_BPF_COEFF1213, 0x00ce026b);
  3460. cx25840_write4(client, DIF_BPF_COEFF1415, 0x000afc85);
  3461. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe3503e3);
  3462. cx25840_write4(client, DIF_BPF_COEFF1819, 0x044cfcfb);
  3463. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf90c0082);
  3464. cx25840_write4(client, DIF_BPF_COEFF2223, 0x08d5037f);
  3465. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf710f7cc);
  3466. cx25840_write4(client, DIF_BPF_COEFF2627, 0x069f0c59);
  3467. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfe16f173);
  3468. cx25840_write4(client, DIF_BPF_COEFF3031, 0xfbaa0dcf);
  3469. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0aa5f617);
  3470. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf0ad039b);
  3471. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3472. break;
  3473. case 10900000:
  3474. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
  3475. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff90006);
  3476. cx25840_write4(client, DIF_BPF_COEFF45, 0x00210003);
  3477. cx25840_write4(client, DIF_BPF_COEFF67, 0xffacffc8);
  3478. cx25840_write4(client, DIF_BPF_COEFF89, 0x008e00b6);
  3479. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff63fe7c);
  3480. cx25840_write4(client, DIF_BPF_COEFF1213, 0x003a0275);
  3481. cx25840_write4(client, DIF_BPF_COEFF1415, 0x00dafcda);
  3482. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd510313);
  3483. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0501fe40);
  3484. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8cbfefd);
  3485. cx25840_write4(client, DIF_BPF_COEFF2223, 0x087604f0);
  3486. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf80af6c2);
  3487. cx25840_write4(client, DIF_BPF_COEFF2627, 0x05430cc8);
  3488. cx25840_write4(client, DIF_BPF_COEFF2829, 0xff7af19a);
  3489. cx25840_write4(client, DIF_BPF_COEFF3031, 0xfa940d4e);
  3490. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0b3ff699);
  3491. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf0810365);
  3492. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3493. break;
  3494. case 11000000:
  3495. cx25840_write4(client, DIF_BPF_COEFF01, 0x0001ffff);
  3496. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8ffff);
  3497. cx25840_write4(client, DIF_BPF_COEFF45, 0x00210018);
  3498. cx25840_write4(client, DIF_BPF_COEFF67, 0xffbaffa3);
  3499. cx25840_write4(client, DIF_BPF_COEFF89, 0x006000e1);
  3500. cx25840_write4(client, DIF_BPF_COEFF1011, 0xffc4fe68);
  3501. cx25840_write4(client, DIF_BPF_COEFF1213, 0xffa0024b);
  3502. cx25840_write4(client, DIF_BPF_COEFF1415, 0x019afd66);
  3503. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc990216);
  3504. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0575ff99);
  3505. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8d4fd81);
  3506. cx25840_write4(client, DIF_BPF_COEFF2223, 0x07d40640);
  3507. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf932f5e6);
  3508. cx25840_write4(client, DIF_BPF_COEFF2627, 0x03d20d0d);
  3509. cx25840_write4(client, DIF_BPF_COEFF2829, 0x00dff1de);
  3510. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf9860cbf);
  3511. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0bd1f71e);
  3512. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf058032f);
  3513. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3514. break;
  3515. case 11100000:
  3516. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010000);
  3517. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fff8);
  3518. cx25840_write4(client, DIF_BPF_COEFF45, 0x001b0029);
  3519. cx25840_write4(client, DIF_BPF_COEFF67, 0xffd1ff8a);
  3520. cx25840_write4(client, DIF_BPF_COEFF89, 0x002600f2);
  3521. cx25840_write4(client, DIF_BPF_COEFF1011, 0x002cfe7c);
  3522. cx25840_write4(client, DIF_BPF_COEFF1213, 0xff0f01f0);
  3523. cx25840_write4(client, DIF_BPF_COEFF1415, 0x023bfe20);
  3524. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc1700fa);
  3525. cx25840_write4(client, DIF_BPF_COEFF1819, 0x05a200f7);
  3526. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf927fc1c);
  3527. cx25840_write4(client, DIF_BPF_COEFF2223, 0x06f40765);
  3528. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfa82f53b);
  3529. cx25840_write4(client, DIF_BPF_COEFF2627, 0x02510d27);
  3530. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0243f23d);
  3531. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf8810c24);
  3532. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0c5cf7a7);
  3533. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf03102fa);
  3534. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3535. break;
  3536. case 11200000:
  3537. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010002);
  3538. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffafff2);
  3539. cx25840_write4(client, DIF_BPF_COEFF45, 0x00110035);
  3540. cx25840_write4(client, DIF_BPF_COEFF67, 0xfff0ff81);
  3541. cx25840_write4(client, DIF_BPF_COEFF89, 0xffe700e7);
  3542. cx25840_write4(client, DIF_BPF_COEFF1011, 0x008ffeb6);
  3543. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe94016d);
  3544. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02b0fefb);
  3545. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3ffd1);
  3546. cx25840_write4(client, DIF_BPF_COEFF1819, 0x05850249);
  3547. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf9c1fadb);
  3548. cx25840_write4(client, DIF_BPF_COEFF2223, 0x05de0858);
  3549. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfbf2f4c4);
  3550. cx25840_write4(client, DIF_BPF_COEFF2627, 0x00c70d17);
  3551. cx25840_write4(client, DIF_BPF_COEFF2829, 0x03a0f2b8);
  3552. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf7870b7c);
  3553. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0cdff833);
  3554. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf00d02c4);
  3555. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3556. break;
  3557. case 11300000:
  3558. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  3559. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffdffee);
  3560. cx25840_write4(client, DIF_BPF_COEFF45, 0x00040038);
  3561. cx25840_write4(client, DIF_BPF_COEFF67, 0x0010ff88);
  3562. cx25840_write4(client, DIF_BPF_COEFF89, 0xffac00c2);
  3563. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00e2ff10);
  3564. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe3900cb);
  3565. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02f1ffe9);
  3566. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3feaa);
  3567. cx25840_write4(client, DIF_BPF_COEFF1819, 0x05210381);
  3568. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfa9cf9c8);
  3569. cx25840_write4(client, DIF_BPF_COEFF2223, 0x04990912);
  3570. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfd7af484);
  3571. cx25840_write4(client, DIF_BPF_COEFF2627, 0xff390cdb);
  3572. cx25840_write4(client, DIF_BPF_COEFF2829, 0x04f4f34d);
  3573. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf69a0ac9);
  3574. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0d5af8c1);
  3575. cx25840_write4(client, DIF_BPF_COEFF3435, 0xefec028e);
  3576. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3577. break;
  3578. case 11400000:
  3579. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  3580. cx25840_write4(client, DIF_BPF_COEFF23, 0x0000ffee);
  3581. cx25840_write4(client, DIF_BPF_COEFF45, 0xfff60033);
  3582. cx25840_write4(client, DIF_BPF_COEFF67, 0x002fff9f);
  3583. cx25840_write4(client, DIF_BPF_COEFF89, 0xff7b0087);
  3584. cx25840_write4(client, DIF_BPF_COEFF1011, 0x011eff82);
  3585. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe080018);
  3586. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02f900d8);
  3587. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17fd96);
  3588. cx25840_write4(client, DIF_BPF_COEFF1819, 0x04790490);
  3589. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfbadf8ed);
  3590. cx25840_write4(client, DIF_BPF_COEFF2223, 0x032f098e);
  3591. cx25840_write4(client, DIF_BPF_COEFF2425, 0xff10f47d);
  3592. cx25840_write4(client, DIF_BPF_COEFF2627, 0xfdaf0c75);
  3593. cx25840_write4(client, DIF_BPF_COEFF2829, 0x063cf3fc);
  3594. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf5ba0a0b);
  3595. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0dccf952);
  3596. cx25840_write4(client, DIF_BPF_COEFF3435, 0xefcd0258);
  3597. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3598. break;
  3599. case 11500000:
  3600. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  3601. cx25840_write4(client, DIF_BPF_COEFF23, 0x0004fff1);
  3602. cx25840_write4(client, DIF_BPF_COEFF45, 0xffea0026);
  3603. cx25840_write4(client, DIF_BPF_COEFF67, 0x0046ffc3);
  3604. cx25840_write4(client, DIF_BPF_COEFF89, 0xff5a003c);
  3605. cx25840_write4(client, DIF_BPF_COEFF1011, 0x013b0000);
  3606. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe04ff63);
  3607. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02c801b8);
  3608. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99fca6);
  3609. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0397056a);
  3610. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfcecf853);
  3611. cx25840_write4(client, DIF_BPF_COEFF2223, 0x01ad09c9);
  3612. cx25840_write4(client, DIF_BPF_COEFF2425, 0x00acf4ad);
  3613. cx25840_write4(client, DIF_BPF_COEFF2627, 0xfc2e0be7);
  3614. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0773f4c2);
  3615. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf4e90943);
  3616. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0e35f9e6);
  3617. cx25840_write4(client, DIF_BPF_COEFF3435, 0xefb10221);
  3618. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3619. break;
  3620. case 11600000:
  3621. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
  3622. cx25840_write4(client, DIF_BPF_COEFF23, 0x0007fff6);
  3623. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe20014);
  3624. cx25840_write4(client, DIF_BPF_COEFF67, 0x0054ffee);
  3625. cx25840_write4(client, DIF_BPF_COEFF89, 0xff4effeb);
  3626. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0137007e);
  3627. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe2efebb);
  3628. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0260027a);
  3629. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51fbe6);
  3630. cx25840_write4(client, DIF_BPF_COEFF1819, 0x02870605);
  3631. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfe4af7fe);
  3632. cx25840_write4(client, DIF_BPF_COEFF2223, 0x001d09c1);
  3633. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0243f515);
  3634. cx25840_write4(client, DIF_BPF_COEFF2627, 0xfabd0b32);
  3635. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0897f59e);
  3636. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf4280871);
  3637. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0e95fa7c);
  3638. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef9701eb);
  3639. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3640. break;
  3641. case 11700000:
  3642. cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0001);
  3643. cx25840_write4(client, DIF_BPF_COEFF23, 0x0008fffd);
  3644. cx25840_write4(client, DIF_BPF_COEFF45, 0xffdeffff);
  3645. cx25840_write4(client, DIF_BPF_COEFF67, 0x0056001d);
  3646. cx25840_write4(client, DIF_BPF_COEFF89, 0xff57ff9c);
  3647. cx25840_write4(client, DIF_BPF_COEFF1011, 0x011300f0);
  3648. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe82fe2e);
  3649. cx25840_write4(client, DIF_BPF_COEFF1415, 0x01ca0310);
  3650. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe35fb62);
  3651. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0155065a);
  3652. cx25840_write4(client, DIF_BPF_COEFF2021, 0xffbaf7f2);
  3653. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfe8c0977);
  3654. cx25840_write4(client, DIF_BPF_COEFF2425, 0x03cef5b2);
  3655. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf9610a58);
  3656. cx25840_write4(client, DIF_BPF_COEFF2829, 0x09a5f68f);
  3657. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf3790797);
  3658. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0eebfb14);
  3659. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef8001b5);
  3660. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3661. break;
  3662. case 11800000:
  3663. cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0000);
  3664. cx25840_write4(client, DIF_BPF_COEFF23, 0x00080004);
  3665. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe0ffe9);
  3666. cx25840_write4(client, DIF_BPF_COEFF67, 0x004c0047);
  3667. cx25840_write4(client, DIF_BPF_COEFF89, 0xff75ff58);
  3668. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00d1014a);
  3669. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfef9fdc8);
  3670. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0111036f);
  3671. cx25840_write4(client, DIF_BPF_COEFF1617, 0xff36fb21);
  3672. cx25840_write4(client, DIF_BPF_COEFF1819, 0x00120665);
  3673. cx25840_write4(client, DIF_BPF_COEFF2021, 0x012df82e);
  3674. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfd0708ec);
  3675. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0542f682);
  3676. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf81f095c);
  3677. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0a9af792);
  3678. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf2db06b5);
  3679. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0f38fbad);
  3680. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef6c017e);
  3681. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3682. break;
  3683. case 11900000:
  3684. cx25840_write4(client, DIF_BPF_COEFF01, 0xffffffff);
  3685. cx25840_write4(client, DIF_BPF_COEFF23, 0x0007000b);
  3686. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe7ffd8);
  3687. cx25840_write4(client, DIF_BPF_COEFF67, 0x00370068);
  3688. cx25840_write4(client, DIF_BPF_COEFF89, 0xffa4ff28);
  3689. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00790184);
  3690. cx25840_write4(client, DIF_BPF_COEFF1213, 0xff87fd91);
  3691. cx25840_write4(client, DIF_BPF_COEFF1415, 0x00430392);
  3692. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0044fb26);
  3693. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfece0626);
  3694. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0294f8b2);
  3695. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfb990825);
  3696. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0698f77f);
  3697. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf6fe0842);
  3698. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0b73f8a7);
  3699. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf25105cd);
  3700. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0f7bfc48);
  3701. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef5a0148);
  3702. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3703. break;
  3704. case 12000000:
  3705. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
  3706. cx25840_write4(client, DIF_BPF_COEFF23, 0x00050010);
  3707. cx25840_write4(client, DIF_BPF_COEFF45, 0xfff2ffcc);
  3708. cx25840_write4(client, DIF_BPF_COEFF67, 0x001b007b);
  3709. cx25840_write4(client, DIF_BPF_COEFF89, 0xffdfff10);
  3710. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00140198);
  3711. cx25840_write4(client, DIF_BPF_COEFF1213, 0x0020fd8e);
  3712. cx25840_write4(client, DIF_BPF_COEFF1415, 0xff710375);
  3713. cx25840_write4(client, DIF_BPF_COEFF1617, 0x014dfb73);
  3714. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfd9a059f);
  3715. cx25840_write4(client, DIF_BPF_COEFF2021, 0x03e0f978);
  3716. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfa4e0726);
  3717. cx25840_write4(client, DIF_BPF_COEFF2425, 0x07c8f8a7);
  3718. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf600070c);
  3719. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0c2ff9c9);
  3720. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf1db04de);
  3721. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0fb4fce5);
  3722. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef4b0111);
  3723. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3724. break;
  3725. case 12100000:
  3726. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  3727. cx25840_write4(client, DIF_BPF_COEFF23, 0x00010012);
  3728. cx25840_write4(client, DIF_BPF_COEFF45, 0xffffffc8);
  3729. cx25840_write4(client, DIF_BPF_COEFF67, 0xfffb007e);
  3730. cx25840_write4(client, DIF_BPF_COEFF89, 0x001dff14);
  3731. cx25840_write4(client, DIF_BPF_COEFF1011, 0xffad0184);
  3732. cx25840_write4(client, DIF_BPF_COEFF1213, 0x00b7fdbe);
  3733. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfea9031b);
  3734. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0241fc01);
  3735. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfc8504d6);
  3736. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0504fa79);
  3737. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf93005f6);
  3738. cx25840_write4(client, DIF_BPF_COEFF2425, 0x08caf9f2);
  3739. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf52b05c0);
  3740. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0ccbfaf9);
  3741. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf17903eb);
  3742. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0fe3fd83);
  3743. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef3f00db);
  3744. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3745. break;
  3746. case 12200000:
  3747. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  3748. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffe0011);
  3749. cx25840_write4(client, DIF_BPF_COEFF45, 0x000cffcc);
  3750. cx25840_write4(client, DIF_BPF_COEFF67, 0xffdb0071);
  3751. cx25840_write4(client, DIF_BPF_COEFF89, 0x0058ff32);
  3752. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff4f014a);
  3753. cx25840_write4(client, DIF_BPF_COEFF1213, 0x013cfe1f);
  3754. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfdfb028a);
  3755. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0311fcc9);
  3756. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb9d03d6);
  3757. cx25840_write4(client, DIF_BPF_COEFF2021, 0x05f4fbad);
  3758. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf848049d);
  3759. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0999fb5b);
  3760. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf4820461);
  3761. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d46fc32);
  3762. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf12d02f4);
  3763. cx25840_write4(client, DIF_BPF_COEFF3233, 0x1007fe21);
  3764. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef3600a4);
  3765. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3766. break;
  3767. case 12300000:
  3768. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
  3769. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffa000e);
  3770. cx25840_write4(client, DIF_BPF_COEFF45, 0x0017ffd9);
  3771. cx25840_write4(client, DIF_BPF_COEFF67, 0xffc10055);
  3772. cx25840_write4(client, DIF_BPF_COEFF89, 0x0088ff68);
  3773. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff0400f0);
  3774. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01a6fea7);
  3775. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd7501cc);
  3776. cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b0fdc0);
  3777. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfaef02a8);
  3778. cx25840_write4(client, DIF_BPF_COEFF2021, 0x06a7fd07);
  3779. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf79d0326);
  3780. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a31fcda);
  3781. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf40702f3);
  3782. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d9ffd72);
  3783. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0f601fa);
  3784. cx25840_write4(client, DIF_BPF_COEFF3233, 0x1021fec0);
  3785. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef2f006d);
  3786. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3787. break;
  3788. case 12400000:
  3789. cx25840_write4(client, DIF_BPF_COEFF01, 0x0001ffff);
  3790. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff80007);
  3791. cx25840_write4(client, DIF_BPF_COEFF45, 0x001fffeb);
  3792. cx25840_write4(client, DIF_BPF_COEFF67, 0xffaf002d);
  3793. cx25840_write4(client, DIF_BPF_COEFF89, 0x00a8ffb0);
  3794. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfed3007e);
  3795. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01e9ff4c);
  3796. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd2000ee);
  3797. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0413fed8);
  3798. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa82015c);
  3799. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0715fe7d);
  3800. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf7340198);
  3801. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a8dfe69);
  3802. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf3bd017c);
  3803. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0dd5feb8);
  3804. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0d500fd);
  3805. cx25840_write4(client, DIF_BPF_COEFF3233, 0x1031ff60);
  3806. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef2b0037);
  3807. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3808. break;
  3809. case 12500000:
  3810. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010000);
  3811. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff70000);
  3812. cx25840_write4(client, DIF_BPF_COEFF45, 0x00220000);
  3813. cx25840_write4(client, DIF_BPF_COEFF67, 0xffa90000);
  3814. cx25840_write4(client, DIF_BPF_COEFF89, 0x00b30000);
  3815. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfec20000);
  3816. cx25840_write4(client, DIF_BPF_COEFF1213, 0x02000000);
  3817. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd030000);
  3818. cx25840_write4(client, DIF_BPF_COEFF1617, 0x04350000);
  3819. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa5e0000);
  3820. cx25840_write4(client, DIF_BPF_COEFF2021, 0x073b0000);
  3821. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf7110000);
  3822. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0aac0000);
  3823. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf3a40000);
  3824. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0de70000);
  3825. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0c90000);
  3826. cx25840_write4(client, DIF_BPF_COEFF3233, 0x10360000);
  3827. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef290000);
  3828. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3829. break;
  3830. case 12600000:
  3831. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010001);
  3832. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fff9);
  3833. cx25840_write4(client, DIF_BPF_COEFF45, 0x001f0015);
  3834. cx25840_write4(client, DIF_BPF_COEFF67, 0xffafffd3);
  3835. cx25840_write4(client, DIF_BPF_COEFF89, 0x00a80050);
  3836. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfed3ff82);
  3837. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01e900b4);
  3838. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd20ff12);
  3839. cx25840_write4(client, DIF_BPF_COEFF1617, 0x04130128);
  3840. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa82fea4);
  3841. cx25840_write4(client, DIF_BPF_COEFF2021, 0x07150183);
  3842. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf734fe68);
  3843. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a8d0197);
  3844. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf3bdfe84);
  3845. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0dd50148);
  3846. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0d5ff03);
  3847. cx25840_write4(client, DIF_BPF_COEFF3233, 0x103100a0);
  3848. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef2bffc9);
  3849. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3850. break;
  3851. case 12700000:
  3852. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
  3853. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffafff2);
  3854. cx25840_write4(client, DIF_BPF_COEFF45, 0x00170027);
  3855. cx25840_write4(client, DIF_BPF_COEFF67, 0xffc1ffab);
  3856. cx25840_write4(client, DIF_BPF_COEFF89, 0x00880098);
  3857. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff04ff10);
  3858. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01a60159);
  3859. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd75fe34);
  3860. cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b00240);
  3861. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfaeffd58);
  3862. cx25840_write4(client, DIF_BPF_COEFF2021, 0x06a702f9);
  3863. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf79dfcda);
  3864. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a310326);
  3865. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf407fd0d);
  3866. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d9f028e);
  3867. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0f6fe06);
  3868. cx25840_write4(client, DIF_BPF_COEFF3233, 0x10210140);
  3869. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef2fff93);
  3870. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3871. break;
  3872. case 12800000:
  3873. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  3874. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffeffef);
  3875. cx25840_write4(client, DIF_BPF_COEFF45, 0x000c0034);
  3876. cx25840_write4(client, DIF_BPF_COEFF67, 0xffdbff8f);
  3877. cx25840_write4(client, DIF_BPF_COEFF89, 0x005800ce);
  3878. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff4ffeb6);
  3879. cx25840_write4(client, DIF_BPF_COEFF1213, 0x013c01e1);
  3880. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfdfbfd76);
  3881. cx25840_write4(client, DIF_BPF_COEFF1617, 0x03110337);
  3882. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb9dfc2a);
  3883. cx25840_write4(client, DIF_BPF_COEFF2021, 0x05f40453);
  3884. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf848fb63);
  3885. cx25840_write4(client, DIF_BPF_COEFF2425, 0x099904a5);
  3886. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf482fb9f);
  3887. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d4603ce);
  3888. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf12dfd0c);
  3889. cx25840_write4(client, DIF_BPF_COEFF3233, 0x100701df);
  3890. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef36ff5c);
  3891. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3892. break;
  3893. case 12900000:
  3894. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  3895. cx25840_write4(client, DIF_BPF_COEFF23, 0x0001ffee);
  3896. cx25840_write4(client, DIF_BPF_COEFF45, 0xffff0038);
  3897. cx25840_write4(client, DIF_BPF_COEFF67, 0xfffbff82);
  3898. cx25840_write4(client, DIF_BPF_COEFF89, 0x001d00ec);
  3899. cx25840_write4(client, DIF_BPF_COEFF1011, 0xffadfe7c);
  3900. cx25840_write4(client, DIF_BPF_COEFF1213, 0x00b70242);
  3901. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfea9fce5);
  3902. cx25840_write4(client, DIF_BPF_COEFF1617, 0x024103ff);
  3903. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfc85fb2a);
  3904. cx25840_write4(client, DIF_BPF_COEFF2021, 0x05040587);
  3905. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf930fa0a);
  3906. cx25840_write4(client, DIF_BPF_COEFF2425, 0x08ca060e);
  3907. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf52bfa40);
  3908. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0ccb0507);
  3909. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf179fc15);
  3910. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0fe3027d);
  3911. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef3fff25);
  3912. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3913. break;
  3914. case 13000000:
  3915. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
  3916. cx25840_write4(client, DIF_BPF_COEFF23, 0x0005fff0);
  3917. cx25840_write4(client, DIF_BPF_COEFF45, 0xfff20034);
  3918. cx25840_write4(client, DIF_BPF_COEFF67, 0x001bff85);
  3919. cx25840_write4(client, DIF_BPF_COEFF89, 0xffdf00f0);
  3920. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0014fe68);
  3921. cx25840_write4(client, DIF_BPF_COEFF1213, 0x00200272);
  3922. cx25840_write4(client, DIF_BPF_COEFF1415, 0xff71fc8b);
  3923. cx25840_write4(client, DIF_BPF_COEFF1617, 0x014d048d);
  3924. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfd9afa61);
  3925. cx25840_write4(client, DIF_BPF_COEFF2021, 0x03e00688);
  3926. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfa4ef8da);
  3927. cx25840_write4(client, DIF_BPF_COEFF2425, 0x07c80759);
  3928. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf600f8f4);
  3929. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0c2f0637);
  3930. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf1dbfb22);
  3931. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0fb4031b);
  3932. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef4bfeef);
  3933. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3934. break;
  3935. case 13100000:
  3936. cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0001);
  3937. cx25840_write4(client, DIF_BPF_COEFF23, 0x0007fff5);
  3938. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe70028);
  3939. cx25840_write4(client, DIF_BPF_COEFF67, 0x0037ff98);
  3940. cx25840_write4(client, DIF_BPF_COEFF89, 0xffa400d8);
  3941. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0079fe7c);
  3942. cx25840_write4(client, DIF_BPF_COEFF1213, 0xff87026f);
  3943. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0043fc6e);
  3944. cx25840_write4(client, DIF_BPF_COEFF1617, 0x004404da);
  3945. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfecef9da);
  3946. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0294074e);
  3947. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfb99f7db);
  3948. cx25840_write4(client, DIF_BPF_COEFF2425, 0x06980881);
  3949. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf6fef7be);
  3950. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0b730759);
  3951. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf251fa33);
  3952. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0f7b03b8);
  3953. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef5afeb8);
  3954. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3955. break;
  3956. case 13200000:
  3957. cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0000);
  3958. cx25840_write4(client, DIF_BPF_COEFF23, 0x0008fffc);
  3959. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe00017);
  3960. cx25840_write4(client, DIF_BPF_COEFF67, 0x004cffb9);
  3961. cx25840_write4(client, DIF_BPF_COEFF89, 0xff7500a8);
  3962. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00d1feb6);
  3963. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfef90238);
  3964. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0111fc91);
  3965. cx25840_write4(client, DIF_BPF_COEFF1617, 0xff3604df);
  3966. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0012f99b);
  3967. cx25840_write4(client, DIF_BPF_COEFF2021, 0x012d07d2);
  3968. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfd07f714);
  3969. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0542097e);
  3970. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf81ff6a4);
  3971. cx25840_write4(client, DIF_BPF_COEFF2829, 0x0a9a086e);
  3972. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf2dbf94b);
  3973. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0f380453);
  3974. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef6cfe82);
  3975. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3976. break;
  3977. case 13300000:
  3978. cx25840_write4(client, DIF_BPF_COEFF01, 0xffffffff);
  3979. cx25840_write4(client, DIF_BPF_COEFF23, 0x00080003);
  3980. cx25840_write4(client, DIF_BPF_COEFF45, 0xffde0001);
  3981. cx25840_write4(client, DIF_BPF_COEFF67, 0x0056ffe3);
  3982. cx25840_write4(client, DIF_BPF_COEFF89, 0xff570064);
  3983. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0113ff10);
  3984. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe8201d2);
  3985. cx25840_write4(client, DIF_BPF_COEFF1415, 0x01cafcf0);
  3986. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe35049e);
  3987. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0155f9a6);
  3988. cx25840_write4(client, DIF_BPF_COEFF2021, 0xffba080e);
  3989. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfe8cf689);
  3990. cx25840_write4(client, DIF_BPF_COEFF2425, 0x03ce0a4e);
  3991. cx25840_write4(client, DIF_BPF_COEFF2627, 0xf961f5a8);
  3992. cx25840_write4(client, DIF_BPF_COEFF2829, 0x09a50971);
  3993. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf379f869);
  3994. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0eeb04ec);
  3995. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef80fe4b);
  3996. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  3997. break;
  3998. case 13400000:
  3999. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
  4000. cx25840_write4(client, DIF_BPF_COEFF23, 0x0007000a);
  4001. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe2ffec);
  4002. cx25840_write4(client, DIF_BPF_COEFF67, 0x00540012);
  4003. cx25840_write4(client, DIF_BPF_COEFF89, 0xff4e0015);
  4004. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0137ff82);
  4005. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe2e0145);
  4006. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0260fd86);
  4007. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51041a);
  4008. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0287f9fb);
  4009. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfe4a0802);
  4010. cx25840_write4(client, DIF_BPF_COEFF2223, 0x001df63f);
  4011. cx25840_write4(client, DIF_BPF_COEFF2425, 0x02430aeb);
  4012. cx25840_write4(client, DIF_BPF_COEFF2627, 0xfabdf4ce);
  4013. cx25840_write4(client, DIF_BPF_COEFF2829, 0x08970a62);
  4014. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf428f78f);
  4015. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0e950584);
  4016. cx25840_write4(client, DIF_BPF_COEFF3435, 0xef97fe15);
  4017. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4018. break;
  4019. case 13500000:
  4020. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  4021. cx25840_write4(client, DIF_BPF_COEFF23, 0x0004000f);
  4022. cx25840_write4(client, DIF_BPF_COEFF45, 0xffeaffda);
  4023. cx25840_write4(client, DIF_BPF_COEFF67, 0x0046003d);
  4024. cx25840_write4(client, DIF_BPF_COEFF89, 0xff5affc4);
  4025. cx25840_write4(client, DIF_BPF_COEFF1011, 0x013b0000);
  4026. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe04009d);
  4027. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02c8fe48);
  4028. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99035a);
  4029. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0397fa96);
  4030. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfcec07ad);
  4031. cx25840_write4(client, DIF_BPF_COEFF2223, 0x01adf637);
  4032. cx25840_write4(client, DIF_BPF_COEFF2425, 0x00ac0b53);
  4033. cx25840_write4(client, DIF_BPF_COEFF2627, 0xfc2ef419);
  4034. cx25840_write4(client, DIF_BPF_COEFF2829, 0x07730b3e);
  4035. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf4e9f6bd);
  4036. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0e35061a);
  4037. cx25840_write4(client, DIF_BPF_COEFF3435, 0xefb1fddf);
  4038. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4039. break;
  4040. case 13600000:
  4041. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  4042. cx25840_write4(client, DIF_BPF_COEFF23, 0x00000012);
  4043. cx25840_write4(client, DIF_BPF_COEFF45, 0xfff6ffcd);
  4044. cx25840_write4(client, DIF_BPF_COEFF67, 0x002f0061);
  4045. cx25840_write4(client, DIF_BPF_COEFF89, 0xff7bff79);
  4046. cx25840_write4(client, DIF_BPF_COEFF1011, 0x011e007e);
  4047. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe08ffe8);
  4048. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02f9ff28);
  4049. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17026a);
  4050. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0479fb70);
  4051. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfbad0713);
  4052. cx25840_write4(client, DIF_BPF_COEFF2223, 0x032ff672);
  4053. cx25840_write4(client, DIF_BPF_COEFF2425, 0xff100b83);
  4054. cx25840_write4(client, DIF_BPF_COEFF2627, 0xfdaff38b);
  4055. cx25840_write4(client, DIF_BPF_COEFF2829, 0x063c0c04);
  4056. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf5baf5f5);
  4057. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0dcc06ae);
  4058. cx25840_write4(client, DIF_BPF_COEFF3435, 0xefcdfda8);
  4059. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4060. break;
  4061. case 13700000:
  4062. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  4063. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffd0012);
  4064. cx25840_write4(client, DIF_BPF_COEFF45, 0x0004ffc8);
  4065. cx25840_write4(client, DIF_BPF_COEFF67, 0x00100078);
  4066. cx25840_write4(client, DIF_BPF_COEFF89, 0xffacff3e);
  4067. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00e200f0);
  4068. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe39ff35);
  4069. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02f10017);
  4070. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd30156);
  4071. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0521fc7f);
  4072. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfa9c0638);
  4073. cx25840_write4(client, DIF_BPF_COEFF2223, 0x0499f6ee);
  4074. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfd7a0b7c);
  4075. cx25840_write4(client, DIF_BPF_COEFF2627, 0xff39f325);
  4076. cx25840_write4(client, DIF_BPF_COEFF2829, 0x04f40cb3);
  4077. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf69af537);
  4078. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0d5a073f);
  4079. cx25840_write4(client, DIF_BPF_COEFF3435, 0xefecfd72);
  4080. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4081. break;
  4082. case 13800000:
  4083. cx25840_write4(client, DIF_BPF_COEFF01, 0x0001fffe);
  4084. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffa000e);
  4085. cx25840_write4(client, DIF_BPF_COEFF45, 0x0011ffcb);
  4086. cx25840_write4(client, DIF_BPF_COEFF67, 0xfff0007f);
  4087. cx25840_write4(client, DIF_BPF_COEFF89, 0xffe7ff19);
  4088. cx25840_write4(client, DIF_BPF_COEFF1011, 0x008f014a);
  4089. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe94fe93);
  4090. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02b00105);
  4091. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3002f);
  4092. cx25840_write4(client, DIF_BPF_COEFF1819, 0x0585fdb7);
  4093. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf9c10525);
  4094. cx25840_write4(client, DIF_BPF_COEFF2223, 0x05def7a8);
  4095. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfbf20b3c);
  4096. cx25840_write4(client, DIF_BPF_COEFF2627, 0x00c7f2e9);
  4097. cx25840_write4(client, DIF_BPF_COEFF2829, 0x03a00d48);
  4098. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf787f484);
  4099. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0cdf07cd);
  4100. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf00dfd3c);
  4101. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4102. break;
  4103. case 13900000:
  4104. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010000);
  4105. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff80008);
  4106. cx25840_write4(client, DIF_BPF_COEFF45, 0x001bffd7);
  4107. cx25840_write4(client, DIF_BPF_COEFF67, 0xffd10076);
  4108. cx25840_write4(client, DIF_BPF_COEFF89, 0x0026ff0e);
  4109. cx25840_write4(client, DIF_BPF_COEFF1011, 0x002c0184);
  4110. cx25840_write4(client, DIF_BPF_COEFF1213, 0xff0ffe10);
  4111. cx25840_write4(client, DIF_BPF_COEFF1415, 0x023b01e0);
  4112. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17ff06);
  4113. cx25840_write4(client, DIF_BPF_COEFF1819, 0x05a2ff09);
  4114. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf92703e4);
  4115. cx25840_write4(client, DIF_BPF_COEFF2223, 0x06f4f89b);
  4116. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfa820ac5);
  4117. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0251f2d9);
  4118. cx25840_write4(client, DIF_BPF_COEFF2829, 0x02430dc3);
  4119. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf881f3dc);
  4120. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0c5c0859);
  4121. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf031fd06);
  4122. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4123. break;
  4124. case 14000000:
  4125. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010001);
  4126. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff80001);
  4127. cx25840_write4(client, DIF_BPF_COEFF45, 0x0021ffe8);
  4128. cx25840_write4(client, DIF_BPF_COEFF67, 0xffba005d);
  4129. cx25840_write4(client, DIF_BPF_COEFF89, 0x0060ff1f);
  4130. cx25840_write4(client, DIF_BPF_COEFF1011, 0xffc40198);
  4131. cx25840_write4(client, DIF_BPF_COEFF1213, 0xffa0fdb5);
  4132. cx25840_write4(client, DIF_BPF_COEFF1415, 0x019a029a);
  4133. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99fdea);
  4134. cx25840_write4(client, DIF_BPF_COEFF1819, 0x05750067);
  4135. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8d4027f);
  4136. cx25840_write4(client, DIF_BPF_COEFF2223, 0x07d4f9c0);
  4137. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf9320a1a);
  4138. cx25840_write4(client, DIF_BPF_COEFF2627, 0x03d2f2f3);
  4139. cx25840_write4(client, DIF_BPF_COEFF2829, 0x00df0e22);
  4140. cx25840_write4(client, DIF_BPF_COEFF3031, 0xf986f341);
  4141. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0bd108e2);
  4142. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf058fcd1);
  4143. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4144. break;
  4145. case 14100000:
  4146. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
  4147. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9fffa);
  4148. cx25840_write4(client, DIF_BPF_COEFF45, 0x0021fffd);
  4149. cx25840_write4(client, DIF_BPF_COEFF67, 0xffac0038);
  4150. cx25840_write4(client, DIF_BPF_COEFF89, 0x008eff4a);
  4151. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff630184);
  4152. cx25840_write4(client, DIF_BPF_COEFF1213, 0x003afd8b);
  4153. cx25840_write4(client, DIF_BPF_COEFF1415, 0x00da0326);
  4154. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51fced);
  4155. cx25840_write4(client, DIF_BPF_COEFF1819, 0x050101c0);
  4156. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8cb0103);
  4157. cx25840_write4(client, DIF_BPF_COEFF2223, 0x0876fb10);
  4158. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf80a093e);
  4159. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0543f338);
  4160. cx25840_write4(client, DIF_BPF_COEFF2829, 0xff7a0e66);
  4161. cx25840_write4(client, DIF_BPF_COEFF3031, 0xfa94f2b2);
  4162. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0b3f0967);
  4163. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf081fc9b);
  4164. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4165. break;
  4166. case 14200000:
  4167. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  4168. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffbfff3);
  4169. cx25840_write4(client, DIF_BPF_COEFF45, 0x001d0013);
  4170. cx25840_write4(client, DIF_BPF_COEFF67, 0xffaa000b);
  4171. cx25840_write4(client, DIF_BPF_COEFF89, 0x00aaff89);
  4172. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff13014a);
  4173. cx25840_write4(client, DIF_BPF_COEFF1213, 0x00cefd95);
  4174. cx25840_write4(client, DIF_BPF_COEFF1415, 0x000a037b);
  4175. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe35fc1d);
  4176. cx25840_write4(client, DIF_BPF_COEFF1819, 0x044c0305);
  4177. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf90cff7e);
  4178. cx25840_write4(client, DIF_BPF_COEFF2223, 0x08d5fc81);
  4179. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf7100834);
  4180. cx25840_write4(client, DIF_BPF_COEFF2627, 0x069ff3a7);
  4181. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfe160e8d);
  4182. cx25840_write4(client, DIF_BPF_COEFF3031, 0xfbaaf231);
  4183. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0aa509e9);
  4184. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf0adfc65);
  4185. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4186. break;
  4187. case 14300000:
  4188. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  4189. cx25840_write4(client, DIF_BPF_COEFF23, 0xffffffef);
  4190. cx25840_write4(client, DIF_BPF_COEFF45, 0x00140025);
  4191. cx25840_write4(client, DIF_BPF_COEFF67, 0xffb4ffdd);
  4192. cx25840_write4(client, DIF_BPF_COEFF89, 0x00b2ffd6);
  4193. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfedb00f0);
  4194. cx25840_write4(client, DIF_BPF_COEFF1213, 0x0150fdd3);
  4195. cx25840_write4(client, DIF_BPF_COEFF1415, 0xff380391);
  4196. cx25840_write4(client, DIF_BPF_COEFF1617, 0xff36fb85);
  4197. cx25840_write4(client, DIF_BPF_COEFF1819, 0x035e0426);
  4198. cx25840_write4(client, DIF_BPF_COEFF2021, 0xf994fdfe);
  4199. cx25840_write4(client, DIF_BPF_COEFF2223, 0x08eefe0b);
  4200. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf6490702);
  4201. cx25840_write4(client, DIF_BPF_COEFF2627, 0x07e1f43e);
  4202. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfcb60e97);
  4203. cx25840_write4(client, DIF_BPF_COEFF3031, 0xfcc6f1be);
  4204. cx25840_write4(client, DIF_BPF_COEFF3233, 0x0a040a67);
  4205. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf0dbfc30);
  4206. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4207. break;
  4208. case 14400000:
  4209. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  4210. cx25840_write4(client, DIF_BPF_COEFF23, 0x0002ffee);
  4211. cx25840_write4(client, DIF_BPF_COEFF45, 0x00070033);
  4212. cx25840_write4(client, DIF_BPF_COEFF67, 0xffc9ffb4);
  4213. cx25840_write4(client, DIF_BPF_COEFF89, 0x00a40027);
  4214. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfec3007e);
  4215. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01b4fe3f);
  4216. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe760369);
  4217. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0044fb2e);
  4218. cx25840_write4(client, DIF_BPF_COEFF1819, 0x02450518);
  4219. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfa5ffc90);
  4220. cx25840_write4(client, DIF_BPF_COEFF2223, 0x08c1ffa1);
  4221. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf5bc05ae);
  4222. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0902f4fc);
  4223. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfb600e85);
  4224. cx25840_write4(client, DIF_BPF_COEFF3031, 0xfde7f15a);
  4225. cx25840_write4(client, DIF_BPF_COEFF3233, 0x095d0ae2);
  4226. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf10cfbfb);
  4227. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4228. break;
  4229. case 14500000:
  4230. cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0002);
  4231. cx25840_write4(client, DIF_BPF_COEFF23, 0x0005ffef);
  4232. cx25840_write4(client, DIF_BPF_COEFF45, 0xfffa0038);
  4233. cx25840_write4(client, DIF_BPF_COEFF67, 0xffe5ff95);
  4234. cx25840_write4(client, DIF_BPF_COEFF89, 0x00820074);
  4235. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfecc0000);
  4236. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01f0fed0);
  4237. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfdd20304);
  4238. cx25840_write4(client, DIF_BPF_COEFF1617, 0x014dfb1d);
  4239. cx25840_write4(client, DIF_BPF_COEFF1819, 0x010e05ce);
  4240. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfb64fb41);
  4241. cx25840_write4(client, DIF_BPF_COEFF2223, 0x084e013b);
  4242. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf569043e);
  4243. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0a00f5dd);
  4244. cx25840_write4(client, DIF_BPF_COEFF2829, 0xfa150e55);
  4245. cx25840_write4(client, DIF_BPF_COEFF3031, 0xff0bf104);
  4246. cx25840_write4(client, DIF_BPF_COEFF3233, 0x08b00b59);
  4247. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf13ffbc6);
  4248. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4249. break;
  4250. case 14600000:
  4251. cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0001);
  4252. cx25840_write4(client, DIF_BPF_COEFF23, 0x0008fff4);
  4253. cx25840_write4(client, DIF_BPF_COEFF45, 0xffed0035);
  4254. cx25840_write4(client, DIF_BPF_COEFF67, 0x0005ff83);
  4255. cx25840_write4(client, DIF_BPF_COEFF89, 0x005000b4);
  4256. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfef6ff82);
  4257. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01ffff7a);
  4258. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd580269);
  4259. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0241fb53);
  4260. cx25840_write4(client, DIF_BPF_COEFF1819, 0xffca0640);
  4261. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfc99fa1e);
  4262. cx25840_write4(client, DIF_BPF_COEFF2223, 0x079a02cb);
  4263. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf55502ba);
  4264. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0ad5f6e0);
  4265. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf8d90e0a);
  4266. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0031f0bd);
  4267. cx25840_write4(client, DIF_BPF_COEFF3233, 0x07fd0bcb);
  4268. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf174fb91);
  4269. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4270. break;
  4271. case 14700000:
  4272. cx25840_write4(client, DIF_BPF_COEFF01, 0xffffffff);
  4273. cx25840_write4(client, DIF_BPF_COEFF23, 0x0009fffb);
  4274. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe4002a);
  4275. cx25840_write4(client, DIF_BPF_COEFF67, 0x0025ff82);
  4276. cx25840_write4(client, DIF_BPF_COEFF89, 0x001400e0);
  4277. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff3cff10);
  4278. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01e10030);
  4279. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd1201a4);
  4280. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0311fbcd);
  4281. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfe88066a);
  4282. cx25840_write4(client, DIF_BPF_COEFF2021, 0xfdf1f92f);
  4283. cx25840_write4(client, DIF_BPF_COEFF2223, 0x06aa0449);
  4284. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf57e0128);
  4285. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0b7ef801);
  4286. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf7b00da2);
  4287. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0156f086);
  4288. cx25840_write4(client, DIF_BPF_COEFF3233, 0x07450c39);
  4289. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf1acfb5c);
  4290. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4291. break;
  4292. case 14800000:
  4293. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
  4294. cx25840_write4(client, DIF_BPF_COEFF23, 0x00080002);
  4295. cx25840_write4(client, DIF_BPF_COEFF45, 0xffdf0019);
  4296. cx25840_write4(client, DIF_BPF_COEFF67, 0x003fff92);
  4297. cx25840_write4(client, DIF_BPF_COEFF89, 0xffd600f1);
  4298. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff96feb6);
  4299. cx25840_write4(client, DIF_BPF_COEFF1213, 0x019700e1);
  4300. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd0500c2);
  4301. cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b0fc84);
  4302. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfd590649);
  4303. cx25840_write4(client, DIF_BPF_COEFF2021, 0xff5df87f);
  4304. cx25840_write4(client, DIF_BPF_COEFF2223, 0x058505aa);
  4305. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf5e4ff91);
  4306. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0bf9f93c);
  4307. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf69d0d20);
  4308. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0279f05e);
  4309. cx25840_write4(client, DIF_BPF_COEFF3233, 0x06880ca3);
  4310. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf1e6fb28);
  4311. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4312. break;
  4313. case 14900000:
  4314. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  4315. cx25840_write4(client, DIF_BPF_COEFF23, 0x00060009);
  4316. cx25840_write4(client, DIF_BPF_COEFF45, 0xffdf0004);
  4317. cx25840_write4(client, DIF_BPF_COEFF67, 0x0051ffb0);
  4318. cx25840_write4(client, DIF_BPF_COEFF89, 0xff9d00e8);
  4319. cx25840_write4(client, DIF_BPF_COEFF1011, 0xfffcfe7c);
  4320. cx25840_write4(client, DIF_BPF_COEFF1213, 0x01280180);
  4321. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd32ffd2);
  4322. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0413fd6e);
  4323. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfc4d05df);
  4324. cx25840_write4(client, DIF_BPF_COEFF2021, 0x00d1f812);
  4325. cx25840_write4(client, DIF_BPF_COEFF2223, 0x043506e4);
  4326. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf685fdfb);
  4327. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c43fa8d);
  4328. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf5a10c83);
  4329. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0399f046);
  4330. cx25840_write4(client, DIF_BPF_COEFF3233, 0x05c70d08);
  4331. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf222faf3);
  4332. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4333. break;
  4334. case 15000000:
  4335. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  4336. cx25840_write4(client, DIF_BPF_COEFF23, 0x0003000f);
  4337. cx25840_write4(client, DIF_BPF_COEFF45, 0xffe5ffef);
  4338. cx25840_write4(client, DIF_BPF_COEFF67, 0x0057ffd9);
  4339. cx25840_write4(client, DIF_BPF_COEFF89, 0xff7000c4);
  4340. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0062fe68);
  4341. cx25840_write4(client, DIF_BPF_COEFF1213, 0x009e01ff);
  4342. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd95fee6);
  4343. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0435fe7d);
  4344. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb710530);
  4345. cx25840_write4(client, DIF_BPF_COEFF2021, 0x023cf7ee);
  4346. cx25840_write4(client, DIF_BPF_COEFF2223, 0x02c307ef);
  4347. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf75efc70);
  4348. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c5cfbef);
  4349. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf4c10bce);
  4350. cx25840_write4(client, DIF_BPF_COEFF3031, 0x04b3f03f);
  4351. cx25840_write4(client, DIF_BPF_COEFF3233, 0x05030d69);
  4352. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf261fabf);
  4353. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4354. break;
  4355. case 15100000:
  4356. cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
  4357. cx25840_write4(client, DIF_BPF_COEFF23, 0xffff0012);
  4358. cx25840_write4(client, DIF_BPF_COEFF45, 0xffefffdc);
  4359. cx25840_write4(client, DIF_BPF_COEFF67, 0x00510006);
  4360. cx25840_write4(client, DIF_BPF_COEFF89, 0xff540089);
  4361. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00befe7c);
  4362. cx25840_write4(client, DIF_BPF_COEFF1213, 0x00060253);
  4363. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe27fe0d);
  4364. cx25840_write4(client, DIF_BPF_COEFF1617, 0x0413ffa2);
  4365. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfad10446);
  4366. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0390f812);
  4367. cx25840_write4(client, DIF_BPF_COEFF2223, 0x013b08c3);
  4368. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf868faf6);
  4369. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c43fd5f);
  4370. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf3fd0b02);
  4371. cx25840_write4(client, DIF_BPF_COEFF3031, 0x05c7f046);
  4372. cx25840_write4(client, DIF_BPF_COEFF3233, 0x043b0dc4);
  4373. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf2a1fa8b);
  4374. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4375. break;
  4376. case 15200000:
  4377. cx25840_write4(client, DIF_BPF_COEFF01, 0x0001fffe);
  4378. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffc0012);
  4379. cx25840_write4(client, DIF_BPF_COEFF45, 0xfffbffce);
  4380. cx25840_write4(client, DIF_BPF_COEFF67, 0x003f0033);
  4381. cx25840_write4(client, DIF_BPF_COEFF89, 0xff4e003f);
  4382. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0106feb6);
  4383. cx25840_write4(client, DIF_BPF_COEFF1213, 0xff6e0276);
  4384. cx25840_write4(client, DIF_BPF_COEFF1415, 0xfeddfd56);
  4385. cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b000cc);
  4386. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa740329);
  4387. cx25840_write4(client, DIF_BPF_COEFF2021, 0x04bff87f);
  4388. cx25840_write4(client, DIF_BPF_COEFF2223, 0xffaa095d);
  4389. cx25840_write4(client, DIF_BPF_COEFF2425, 0xf99ef995);
  4390. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0bf9fed8);
  4391. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf3590a1f);
  4392. cx25840_write4(client, DIF_BPF_COEFF3031, 0x06d2f05e);
  4393. cx25840_write4(client, DIF_BPF_COEFF3233, 0x03700e1b);
  4394. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf2e4fa58);
  4395. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4396. break;
  4397. case 15300000:
  4398. cx25840_write4(client, DIF_BPF_COEFF01, 0x0001ffff);
  4399. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9000f);
  4400. cx25840_write4(client, DIF_BPF_COEFF45, 0x0009ffc8);
  4401. cx25840_write4(client, DIF_BPF_COEFF67, 0x00250059);
  4402. cx25840_write4(client, DIF_BPF_COEFF89, 0xff5effee);
  4403. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0132ff10);
  4404. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfee30265);
  4405. cx25840_write4(client, DIF_BPF_COEFF1415, 0xffaafccf);
  4406. cx25840_write4(client, DIF_BPF_COEFF1617, 0x031101eb);
  4407. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa6001e8);
  4408. cx25840_write4(client, DIF_BPF_COEFF2021, 0x05bdf92f);
  4409. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfe1b09b6);
  4410. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfafaf852);
  4411. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0b7e0055);
  4412. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2d50929);
  4413. cx25840_write4(client, DIF_BPF_COEFF3031, 0x07d3f086);
  4414. cx25840_write4(client, DIF_BPF_COEFF3233, 0x02a30e6c);
  4415. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf329fa24);
  4416. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4417. break;
  4418. case 15400000:
  4419. cx25840_write4(client, DIF_BPF_COEFF01, 0x00010001);
  4420. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff80009);
  4421. cx25840_write4(client, DIF_BPF_COEFF45, 0x0015ffca);
  4422. cx25840_write4(client, DIF_BPF_COEFF67, 0x00050074);
  4423. cx25840_write4(client, DIF_BPF_COEFF89, 0xff81ff9f);
  4424. cx25840_write4(client, DIF_BPF_COEFF1011, 0x013dff82);
  4425. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe710221);
  4426. cx25840_write4(client, DIF_BPF_COEFF1415, 0x007cfc80);
  4427. cx25840_write4(client, DIF_BPF_COEFF1617, 0x024102ed);
  4428. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa940090);
  4429. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0680fa1e);
  4430. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfc9b09cd);
  4431. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfc73f736);
  4432. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0ad501d0);
  4433. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2740820);
  4434. cx25840_write4(client, DIF_BPF_COEFF3031, 0x08c9f0bd);
  4435. cx25840_write4(client, DIF_BPF_COEFF3233, 0x01d40eb9);
  4436. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf371f9f1);
  4437. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4438. break;
  4439. case 15500000:
  4440. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
  4441. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff80002);
  4442. cx25840_write4(client, DIF_BPF_COEFF45, 0x001effd5);
  4443. cx25840_write4(client, DIF_BPF_COEFF67, 0xffe5007f);
  4444. cx25840_write4(client, DIF_BPF_COEFF89, 0xffb4ff5b);
  4445. cx25840_write4(client, DIF_BPF_COEFF1011, 0x01280000);
  4446. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe2401b0);
  4447. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0146fc70);
  4448. cx25840_write4(client, DIF_BPF_COEFF1617, 0x014d03c6);
  4449. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb10ff32);
  4450. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0701fb41);
  4451. cx25840_write4(client, DIF_BPF_COEFF2223, 0xfb3709a1);
  4452. cx25840_write4(client, DIF_BPF_COEFF2425, 0xfe00f644);
  4453. cx25840_write4(client, DIF_BPF_COEFF2627, 0x0a000345);
  4454. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2350708);
  4455. cx25840_write4(client, DIF_BPF_COEFF3031, 0x09b2f104);
  4456. cx25840_write4(client, DIF_BPF_COEFF3233, 0x01050eff);
  4457. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf3baf9be);
  4458. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4459. break;
  4460. case 15600000:
  4461. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  4462. cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9fffb);
  4463. cx25840_write4(client, DIF_BPF_COEFF45, 0x0022ffe6);
  4464. cx25840_write4(client, DIF_BPF_COEFF67, 0xffc9007a);
  4465. cx25840_write4(client, DIF_BPF_COEFF89, 0xfff0ff29);
  4466. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00f2007e);
  4467. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe01011b);
  4468. cx25840_write4(client, DIF_BPF_COEFF1415, 0x01f6fc9e);
  4469. cx25840_write4(client, DIF_BPF_COEFF1617, 0x00440467);
  4470. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfbccfdde);
  4471. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0738fc90);
  4472. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf9f70934);
  4473. cx25840_write4(client, DIF_BPF_COEFF2425, 0xff99f582);
  4474. cx25840_write4(client, DIF_BPF_COEFF2627, 0x090204b0);
  4475. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf21a05e1);
  4476. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0a8df15a);
  4477. cx25840_write4(client, DIF_BPF_COEFF3233, 0x00340f41);
  4478. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf405f98b);
  4479. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4480. break;
  4481. case 15700000:
  4482. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  4483. cx25840_write4(client, DIF_BPF_COEFF23, 0xfffcfff4);
  4484. cx25840_write4(client, DIF_BPF_COEFF45, 0x0020fffa);
  4485. cx25840_write4(client, DIF_BPF_COEFF67, 0xffb40064);
  4486. cx25840_write4(client, DIF_BPF_COEFF89, 0x002fff11);
  4487. cx25840_write4(client, DIF_BPF_COEFF1011, 0x00a400f0);
  4488. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe0d006e);
  4489. cx25840_write4(client, DIF_BPF_COEFF1415, 0x0281fd09);
  4490. cx25840_write4(client, DIF_BPF_COEFF1617, 0xff3604c9);
  4491. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfcbffca2);
  4492. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0726fdfe);
  4493. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf8e80888);
  4494. cx25840_write4(client, DIF_BPF_COEFF2425, 0x0134f4f3);
  4495. cx25840_write4(client, DIF_BPF_COEFF2627, 0x07e1060c);
  4496. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf22304af);
  4497. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0b59f1be);
  4498. cx25840_write4(client, DIF_BPF_COEFF3233, 0xff640f7d);
  4499. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf452f959);
  4500. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4501. break;
  4502. case 15800000:
  4503. cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
  4504. cx25840_write4(client, DIF_BPF_COEFF23, 0x0000fff0);
  4505. cx25840_write4(client, DIF_BPF_COEFF45, 0x001a0010);
  4506. cx25840_write4(client, DIF_BPF_COEFF67, 0xffaa0041);
  4507. cx25840_write4(client, DIF_BPF_COEFF89, 0x0067ff13);
  4508. cx25840_write4(client, DIF_BPF_COEFF1011, 0x0043014a);
  4509. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe46ffb9);
  4510. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02dbfda8);
  4511. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe3504e5);
  4512. cx25840_write4(client, DIF_BPF_COEFF1819, 0xfddcfb8d);
  4513. cx25840_write4(client, DIF_BPF_COEFF2021, 0x06c9ff7e);
  4514. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf81107a2);
  4515. cx25840_write4(client, DIF_BPF_COEFF2425, 0x02c9f49a);
  4516. cx25840_write4(client, DIF_BPF_COEFF2627, 0x069f0753);
  4517. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2500373);
  4518. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0c14f231);
  4519. cx25840_write4(client, DIF_BPF_COEFF3233, 0xfe930fb3);
  4520. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf4a1f927);
  4521. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4522. break;
  4523. case 15900000:
  4524. cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0002);
  4525. cx25840_write4(client, DIF_BPF_COEFF23, 0x0003ffee);
  4526. cx25840_write4(client, DIF_BPF_COEFF45, 0x000f0023);
  4527. cx25840_write4(client, DIF_BPF_COEFF67, 0xffac0016);
  4528. cx25840_write4(client, DIF_BPF_COEFF89, 0x0093ff31);
  4529. cx25840_write4(client, DIF_BPF_COEFF1011, 0xffdc0184);
  4530. cx25840_write4(client, DIF_BPF_COEFF1213, 0xfea6ff09);
  4531. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02fdfe70);
  4532. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd5104ba);
  4533. cx25840_write4(client, DIF_BPF_COEFF1819, 0xff15faac);
  4534. cx25840_write4(client, DIF_BPF_COEFF2021, 0x06270103);
  4535. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf7780688);
  4536. cx25840_write4(client, DIF_BPF_COEFF2425, 0x044df479);
  4537. cx25840_write4(client, DIF_BPF_COEFF2627, 0x05430883);
  4538. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2a00231);
  4539. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0cbef2b2);
  4540. cx25840_write4(client, DIF_BPF_COEFF3233, 0xfdc40fe3);
  4541. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf4f2f8f5);
  4542. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4543. break;
  4544. case 16000000:
  4545. cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0001);
  4546. cx25840_write4(client, DIF_BPF_COEFF23, 0x0006ffef);
  4547. cx25840_write4(client, DIF_BPF_COEFF45, 0x00020031);
  4548. cx25840_write4(client, DIF_BPF_COEFF67, 0xffbaffe8);
  4549. cx25840_write4(client, DIF_BPF_COEFF89, 0x00adff66);
  4550. cx25840_write4(client, DIF_BPF_COEFF1011, 0xff790198);
  4551. cx25840_write4(client, DIF_BPF_COEFF1213, 0xff26fe6e);
  4552. cx25840_write4(client, DIF_BPF_COEFF1415, 0x02e5ff55);
  4553. cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99044a);
  4554. cx25840_write4(client, DIF_BPF_COEFF1819, 0x005bfa09);
  4555. cx25840_write4(client, DIF_BPF_COEFF2021, 0x0545027f);
  4556. cx25840_write4(client, DIF_BPF_COEFF2223, 0xf7230541);
  4557. cx25840_write4(client, DIF_BPF_COEFF2425, 0x05b8f490);
  4558. cx25840_write4(client, DIF_BPF_COEFF2627, 0x03d20997);
  4559. cx25840_write4(client, DIF_BPF_COEFF2829, 0xf31300eb);
  4560. cx25840_write4(client, DIF_BPF_COEFF3031, 0x0d55f341);
  4561. cx25840_write4(client, DIF_BPF_COEFF3233, 0xfcf6100e);
  4562. cx25840_write4(client, DIF_BPF_COEFF3435, 0xf544f8c3);
  4563. cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
  4564. break;
  4565. }
  4566. }
  4567. static void cx23888_std_setup(struct i2c_client *client)
  4568. {
  4569. struct cx25840_state *state = to_state(i2c_get_clientdata(client));
  4570. v4l2_std_id std = state->std;
  4571. u32 ifHz;
  4572. cx25840_write4(client, 0x478, 0x6628021F);
  4573. cx25840_write4(client, 0x400, 0x0);
  4574. cx25840_write4(client, 0x4b4, 0x20524030);
  4575. cx25840_write4(client, 0x47c, 0x010a8263);
  4576. if (std & V4L2_STD_NTSC) {
  4577. v4l_dbg(1, cx25840_debug, client, "%s() Selecting NTSC",
  4578. __func__);
  4579. /* Horiz / vert timing */
  4580. cx25840_write4(client, 0x428, 0x1e1e601a);
  4581. cx25840_write4(client, 0x424, 0x5b2d007a);
  4582. /* DIF NTSC */
  4583. cx25840_write4(client, 0x304, 0x6503bc0c);
  4584. cx25840_write4(client, 0x308, 0xbd038c85);
  4585. cx25840_write4(client, 0x30c, 0x1db4640a);
  4586. cx25840_write4(client, 0x310, 0x00008800);
  4587. cx25840_write4(client, 0x314, 0x44400400);
  4588. cx25840_write4(client, 0x32c, 0x0c800800);
  4589. cx25840_write4(client, 0x330, 0x27000100);
  4590. cx25840_write4(client, 0x334, 0x1f296e1f);
  4591. cx25840_write4(client, 0x338, 0x009f50c1);
  4592. cx25840_write4(client, 0x340, 0x1befbf06);
  4593. cx25840_write4(client, 0x344, 0x000035e8);
  4594. /* DIF I/F */
  4595. ifHz = 5400000;
  4596. } else {
  4597. v4l_dbg(1, cx25840_debug, client, "%s() Selecting PAL-BG",
  4598. __func__);
  4599. /* Horiz / vert timing */
  4600. cx25840_write4(client, 0x428, 0x28244024);
  4601. cx25840_write4(client, 0x424, 0x5d2d0084);
  4602. /* DIF */
  4603. cx25840_write4(client, 0x304, 0x6503bc0c);
  4604. cx25840_write4(client, 0x308, 0xbd038c85);
  4605. cx25840_write4(client, 0x30c, 0x1db4640a);
  4606. cx25840_write4(client, 0x310, 0x00008800);
  4607. cx25840_write4(client, 0x314, 0x44400600);
  4608. cx25840_write4(client, 0x32c, 0x0c800800);
  4609. cx25840_write4(client, 0x330, 0x27000100);
  4610. cx25840_write4(client, 0x334, 0x213530ec);
  4611. cx25840_write4(client, 0x338, 0x00a65ba8);
  4612. cx25840_write4(client, 0x340, 0x1befbf06);
  4613. cx25840_write4(client, 0x344, 0x000035e8);
  4614. /* DIF I/F */
  4615. ifHz = 6000000;
  4616. }
  4617. cx23885_dif_setup(client, ifHz);
  4618. /* Explicitly ensure the inputs are reconfigured after
  4619. * a standard change.
  4620. */
  4621. set_input(client, state->vid_input, state->aud_input);
  4622. }
  4623. /* ----------------------------------------------------------------------- */
  4624. static const struct v4l2_ctrl_ops cx25840_ctrl_ops = {
  4625. .s_ctrl = cx25840_s_ctrl,
  4626. };
  4627. static const struct v4l2_subdev_core_ops cx25840_core_ops = {
  4628. .log_status = cx25840_log_status,
  4629. .g_ctrl = v4l2_subdev_g_ctrl,
  4630. .s_ctrl = v4l2_subdev_s_ctrl,
  4631. .s_ext_ctrls = v4l2_subdev_s_ext_ctrls,
  4632. .try_ext_ctrls = v4l2_subdev_try_ext_ctrls,
  4633. .g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
  4634. .queryctrl = v4l2_subdev_queryctrl,
  4635. .querymenu = v4l2_subdev_querymenu,
  4636. .reset = cx25840_reset,
  4637. .load_fw = cx25840_load_fw,
  4638. .s_io_pin_config = common_s_io_pin_config,
  4639. #ifdef CONFIG_VIDEO_ADV_DEBUG
  4640. .g_register = cx25840_g_register,
  4641. .s_register = cx25840_s_register,
  4642. #endif
  4643. .interrupt_service_routine = cx25840_irq_handler,
  4644. };
  4645. static const struct v4l2_subdev_tuner_ops cx25840_tuner_ops = {
  4646. .s_frequency = cx25840_s_frequency,
  4647. .s_radio = cx25840_s_radio,
  4648. .g_tuner = cx25840_g_tuner,
  4649. .s_tuner = cx25840_s_tuner,
  4650. };
  4651. static const struct v4l2_subdev_audio_ops cx25840_audio_ops = {
  4652. .s_clock_freq = cx25840_s_clock_freq,
  4653. .s_routing = cx25840_s_audio_routing,
  4654. .s_stream = cx25840_s_audio_stream,
  4655. };
  4656. static const struct v4l2_subdev_video_ops cx25840_video_ops = {
  4657. .s_std = cx25840_s_std,
  4658. .g_std = cx25840_g_std,
  4659. .s_routing = cx25840_s_video_routing,
  4660. .s_stream = cx25840_s_stream,
  4661. .g_input_status = cx25840_g_input_status,
  4662. };
  4663. static const struct v4l2_subdev_vbi_ops cx25840_vbi_ops = {
  4664. .decode_vbi_line = cx25840_decode_vbi_line,
  4665. .s_raw_fmt = cx25840_s_raw_fmt,
  4666. .s_sliced_fmt = cx25840_s_sliced_fmt,
  4667. .g_sliced_fmt = cx25840_g_sliced_fmt,
  4668. };
  4669. static const struct v4l2_subdev_pad_ops cx25840_pad_ops = {
  4670. .set_fmt = cx25840_set_fmt,
  4671. };
  4672. static const struct v4l2_subdev_ops cx25840_ops = {
  4673. .core = &cx25840_core_ops,
  4674. .tuner = &cx25840_tuner_ops,
  4675. .audio = &cx25840_audio_ops,
  4676. .video = &cx25840_video_ops,
  4677. .vbi = &cx25840_vbi_ops,
  4678. .pad = &cx25840_pad_ops,
  4679. .ir = &cx25840_ir_ops,
  4680. };
  4681. /* ----------------------------------------------------------------------- */
  4682. static u32 get_cx2388x_ident(struct i2c_client *client)
  4683. {
  4684. u32 ret;
  4685. /* Come out of digital power down */
  4686. cx25840_write(client, 0x000, 0);
  4687. /* Detecting whether the part is cx23885/7/8 is more
  4688. * difficult than it needs to be. No ID register. Instead we
  4689. * probe certain registers indicated in the datasheets to look
  4690. * for specific defaults that differ between the silicon designs. */
  4691. /* It's either 885/7 if the IR Tx Clk Divider register exists */
  4692. if (cx25840_read4(client, 0x204) & 0xffff) {
  4693. /* CX23885 returns bogus repetitive byte values for the DIF,
  4694. * which doesn't exist for it. (Ex. 8a8a8a8a or 31313131) */
  4695. ret = cx25840_read4(client, 0x300);
  4696. if (((ret & 0xffff0000) >> 16) == (ret & 0xffff)) {
  4697. /* No DIF */
  4698. ret = CX23885_AV;
  4699. } else {
  4700. /* CX23887 has a broken DIF, but the registers
  4701. * appear valid (but unused), good enough to detect. */
  4702. ret = CX23887_AV;
  4703. }
  4704. } else if (cx25840_read4(client, 0x300) & 0x0fffffff) {
  4705. /* DIF PLL Freq Word reg exists; chip must be a CX23888 */
  4706. ret = CX23888_AV;
  4707. } else {
  4708. v4l_err(client, "Unable to detect h/w, assuming cx23887\n");
  4709. ret = CX23887_AV;
  4710. }
  4711. /* Back into digital power down */
  4712. cx25840_write(client, 0x000, 2);
  4713. return ret;
  4714. }
  4715. static int cx25840_probe(struct i2c_client *client,
  4716. const struct i2c_device_id *did)
  4717. {
  4718. struct cx25840_state *state;
  4719. struct v4l2_subdev *sd;
  4720. int default_volume;
  4721. u32 id;
  4722. u16 device_id;
  4723. #if defined(CONFIG_MEDIA_CONTROLLER)
  4724. int ret;
  4725. #endif
  4726. /* Check if the adapter supports the needed features */
  4727. if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
  4728. return -EIO;
  4729. v4l_dbg(1, cx25840_debug, client, "detecting cx25840 client on address 0x%x\n", client->addr << 1);
  4730. device_id = cx25840_read(client, 0x101) << 8;
  4731. device_id |= cx25840_read(client, 0x100);
  4732. v4l_dbg(1, cx25840_debug, client, "device_id = 0x%04x\n", device_id);
  4733. /* The high byte of the device ID should be
  4734. * 0x83 for the cx2583x and 0x84 for the cx2584x */
  4735. if ((device_id & 0xff00) == 0x8300) {
  4736. id = CX25836 + ((device_id >> 4) & 0xf) - 6;
  4737. } else if ((device_id & 0xff00) == 0x8400) {
  4738. id = CX25840 + ((device_id >> 4) & 0xf);
  4739. } else if (device_id == 0x0000) {
  4740. id = get_cx2388x_ident(client);
  4741. } else if ((device_id & 0xfff0) == 0x5A30) {
  4742. /* The CX23100 (0x5A3C = 23100) doesn't have an A/V decoder */
  4743. id = CX2310X_AV;
  4744. } else if ((device_id & 0xff) == (device_id >> 8)) {
  4745. v4l_err(client,
  4746. "likely a confused/unresponsive cx2388[578] A/V decoder"
  4747. " found @ 0x%x (%s)\n",
  4748. client->addr << 1, client->adapter->name);
  4749. v4l_err(client, "A method to reset it from the cx25840 driver"
  4750. " software is not known at this time\n");
  4751. return -ENODEV;
  4752. } else {
  4753. v4l_dbg(1, cx25840_debug, client, "cx25840 not found\n");
  4754. return -ENODEV;
  4755. }
  4756. state = devm_kzalloc(&client->dev, sizeof(*state), GFP_KERNEL);
  4757. if (state == NULL)
  4758. return -ENOMEM;
  4759. sd = &state->sd;
  4760. v4l2_i2c_subdev_init(sd, client, &cx25840_ops);
  4761. #if defined(CONFIG_MEDIA_CONTROLLER)
  4762. /*
  4763. * TODO: add media controller support for analog video inputs like
  4764. * composite, svideo, etc.
  4765. * A real input pad for this analog demod would be like:
  4766. * ___________
  4767. * TUNER --------> | |
  4768. * | |
  4769. * SVIDEO .......> | cx25840 |
  4770. * | |
  4771. * COMPOSITE1 ...> |_________|
  4772. *
  4773. * However, at least for now, there's no much gain on modelling
  4774. * those extra inputs. So, let's add it only when needed.
  4775. */
  4776. state->pads[CX25840_PAD_INPUT].flags = MEDIA_PAD_FL_SINK;
  4777. state->pads[CX25840_PAD_VID_OUT].flags = MEDIA_PAD_FL_SOURCE;
  4778. state->pads[CX25840_PAD_VBI_OUT].flags = MEDIA_PAD_FL_SOURCE;
  4779. sd->entity.type = MEDIA_ENT_T_V4L2_SUBDEV_DECODER;
  4780. ret = media_entity_init(&sd->entity, ARRAY_SIZE(state->pads),
  4781. state->pads, 0);
  4782. if (ret < 0) {
  4783. v4l_info(client, "failed to initialize media entity!\n");
  4784. return ret;
  4785. }
  4786. #endif
  4787. switch (id) {
  4788. case CX23885_AV:
  4789. v4l_info(client, "cx23885 A/V decoder found @ 0x%x (%s)\n",
  4790. client->addr << 1, client->adapter->name);
  4791. break;
  4792. case CX23887_AV:
  4793. v4l_info(client, "cx23887 A/V decoder found @ 0x%x (%s)\n",
  4794. client->addr << 1, client->adapter->name);
  4795. break;
  4796. case CX23888_AV:
  4797. v4l_info(client, "cx23888 A/V decoder found @ 0x%x (%s)\n",
  4798. client->addr << 1, client->adapter->name);
  4799. break;
  4800. case CX2310X_AV:
  4801. v4l_info(client, "cx%d A/V decoder found @ 0x%x (%s)\n",
  4802. device_id, client->addr << 1, client->adapter->name);
  4803. break;
  4804. case CX25840:
  4805. case CX25841:
  4806. case CX25842:
  4807. case CX25843:
  4808. /* Note: revision '(device_id & 0x0f) == 2' was never built. The
  4809. marking skips from 0x1 == 22 to 0x3 == 23. */
  4810. v4l_info(client, "cx25%3x-2%x found @ 0x%x (%s)\n",
  4811. (device_id & 0xfff0) >> 4,
  4812. (device_id & 0x0f) < 3 ? (device_id & 0x0f) + 1
  4813. : (device_id & 0x0f),
  4814. client->addr << 1, client->adapter->name);
  4815. break;
  4816. case CX25836:
  4817. case CX25837:
  4818. default:
  4819. v4l_info(client, "cx25%3x-%x found @ 0x%x (%s)\n",
  4820. (device_id & 0xfff0) >> 4, device_id & 0x0f,
  4821. client->addr << 1, client->adapter->name);
  4822. break;
  4823. }
  4824. state->c = client;
  4825. state->vid_input = CX25840_COMPOSITE7;
  4826. state->aud_input = CX25840_AUDIO8;
  4827. state->audclk_freq = 48000;
  4828. state->audmode = V4L2_TUNER_MODE_LANG1;
  4829. state->vbi_line_offset = 8;
  4830. state->id = id;
  4831. state->rev = device_id;
  4832. v4l2_ctrl_handler_init(&state->hdl, 9);
  4833. v4l2_ctrl_new_std(&state->hdl, &cx25840_ctrl_ops,
  4834. V4L2_CID_BRIGHTNESS, 0, 255, 1, 128);
  4835. v4l2_ctrl_new_std(&state->hdl, &cx25840_ctrl_ops,
  4836. V4L2_CID_CONTRAST, 0, 127, 1, 64);
  4837. v4l2_ctrl_new_std(&state->hdl, &cx25840_ctrl_ops,
  4838. V4L2_CID_SATURATION, 0, 127, 1, 64);
  4839. v4l2_ctrl_new_std(&state->hdl, &cx25840_ctrl_ops,
  4840. V4L2_CID_HUE, -128, 127, 1, 0);
  4841. if (!is_cx2583x(state)) {
  4842. default_volume = cx25840_read(client, 0x8d4);
  4843. /*
  4844. * Enforce the legacy PVR-350/MSP3400 to PVR-150/CX25843 volume
  4845. * scale mapping limits to avoid -ERANGE errors when
  4846. * initializing the volume control
  4847. */
  4848. if (default_volume > 228) {
  4849. /* Bottom out at -96 dB, v4l2 vol range 0x2e00-0x2fff */
  4850. default_volume = 228;
  4851. cx25840_write(client, 0x8d4, 228);
  4852. }
  4853. else if (default_volume < 20) {
  4854. /* Top out at + 8 dB, v4l2 vol range 0xfe00-0xffff */
  4855. default_volume = 20;
  4856. cx25840_write(client, 0x8d4, 20);
  4857. }
  4858. default_volume = (((228 - default_volume) >> 1) + 23) << 9;
  4859. state->volume = v4l2_ctrl_new_std(&state->hdl,
  4860. &cx25840_audio_ctrl_ops, V4L2_CID_AUDIO_VOLUME,
  4861. 0, 65535, 65535 / 100, default_volume);
  4862. state->mute = v4l2_ctrl_new_std(&state->hdl,
  4863. &cx25840_audio_ctrl_ops, V4L2_CID_AUDIO_MUTE,
  4864. 0, 1, 1, 0);
  4865. v4l2_ctrl_new_std(&state->hdl, &cx25840_audio_ctrl_ops,
  4866. V4L2_CID_AUDIO_BALANCE,
  4867. 0, 65535, 65535 / 100, 32768);
  4868. v4l2_ctrl_new_std(&state->hdl, &cx25840_audio_ctrl_ops,
  4869. V4L2_CID_AUDIO_BASS,
  4870. 0, 65535, 65535 / 100, 32768);
  4871. v4l2_ctrl_new_std(&state->hdl, &cx25840_audio_ctrl_ops,
  4872. V4L2_CID_AUDIO_TREBLE,
  4873. 0, 65535, 65535 / 100, 32768);
  4874. }
  4875. sd->ctrl_handler = &state->hdl;
  4876. if (state->hdl.error) {
  4877. int err = state->hdl.error;
  4878. v4l2_ctrl_handler_free(&state->hdl);
  4879. return err;
  4880. }
  4881. if (!is_cx2583x(state))
  4882. v4l2_ctrl_cluster(2, &state->volume);
  4883. v4l2_ctrl_handler_setup(&state->hdl);
  4884. if (client->dev.platform_data) {
  4885. struct cx25840_platform_data *pdata = client->dev.platform_data;
  4886. state->pvr150_workaround = pdata->pvr150_workaround;
  4887. }
  4888. cx25840_ir_probe(sd);
  4889. return 0;
  4890. }
  4891. static int cx25840_remove(struct i2c_client *client)
  4892. {
  4893. struct v4l2_subdev *sd = i2c_get_clientdata(client);
  4894. struct cx25840_state *state = to_state(sd);
  4895. cx25840_ir_remove(sd);
  4896. v4l2_device_unregister_subdev(sd);
  4897. v4l2_ctrl_handler_free(&state->hdl);
  4898. return 0;
  4899. }
  4900. static const struct i2c_device_id cx25840_id[] = {
  4901. { "cx25840", 0 },
  4902. { }
  4903. };
  4904. MODULE_DEVICE_TABLE(i2c, cx25840_id);
  4905. static struct i2c_driver cx25840_driver = {
  4906. .driver = {
  4907. .name = "cx25840",
  4908. },
  4909. .probe = cx25840_probe,
  4910. .remove = cx25840_remove,
  4911. .id_table = cx25840_id,
  4912. };
  4913. module_i2c_driver(cx25840_driver);