clk-exynos5433.c 207 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423
  1. /*
  2. * Copyright (c) 2014 Samsung Electronics Co., Ltd.
  3. * Author: Chanwoo Choi <cw00.choi@samsung.com>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License version 2 as
  7. * published by the Free Software Foundation.
  8. *
  9. * Common Clock Framework support for Exynos5443 SoC.
  10. */
  11. #include <linux/clk.h>
  12. #include <linux/clkdev.h>
  13. #include <linux/clk-provider.h>
  14. #include <linux/of.h>
  15. #include <dt-bindings/clock/exynos5433.h>
  16. #include "clk.h"
  17. #include "clk-pll.h"
  18. /*
  19. * Register offset definitions for CMU_TOP
  20. */
  21. #define ISP_PLL_LOCK 0x0000
  22. #define AUD_PLL_LOCK 0x0004
  23. #define ISP_PLL_CON0 0x0100
  24. #define ISP_PLL_CON1 0x0104
  25. #define ISP_PLL_FREQ_DET 0x0108
  26. #define AUD_PLL_CON0 0x0110
  27. #define AUD_PLL_CON1 0x0114
  28. #define AUD_PLL_CON2 0x0118
  29. #define AUD_PLL_FREQ_DET 0x011c
  30. #define MUX_SEL_TOP0 0x0200
  31. #define MUX_SEL_TOP1 0x0204
  32. #define MUX_SEL_TOP2 0x0208
  33. #define MUX_SEL_TOP3 0x020c
  34. #define MUX_SEL_TOP4 0x0210
  35. #define MUX_SEL_TOP_MSCL 0x0220
  36. #define MUX_SEL_TOP_CAM1 0x0224
  37. #define MUX_SEL_TOP_DISP 0x0228
  38. #define MUX_SEL_TOP_FSYS0 0x0230
  39. #define MUX_SEL_TOP_FSYS1 0x0234
  40. #define MUX_SEL_TOP_PERIC0 0x0238
  41. #define MUX_SEL_TOP_PERIC1 0x023c
  42. #define MUX_ENABLE_TOP0 0x0300
  43. #define MUX_ENABLE_TOP1 0x0304
  44. #define MUX_ENABLE_TOP2 0x0308
  45. #define MUX_ENABLE_TOP3 0x030c
  46. #define MUX_ENABLE_TOP4 0x0310
  47. #define MUX_ENABLE_TOP_MSCL 0x0320
  48. #define MUX_ENABLE_TOP_CAM1 0x0324
  49. #define MUX_ENABLE_TOP_DISP 0x0328
  50. #define MUX_ENABLE_TOP_FSYS0 0x0330
  51. #define MUX_ENABLE_TOP_FSYS1 0x0334
  52. #define MUX_ENABLE_TOP_PERIC0 0x0338
  53. #define MUX_ENABLE_TOP_PERIC1 0x033c
  54. #define MUX_STAT_TOP0 0x0400
  55. #define MUX_STAT_TOP1 0x0404
  56. #define MUX_STAT_TOP2 0x0408
  57. #define MUX_STAT_TOP3 0x040c
  58. #define MUX_STAT_TOP4 0x0410
  59. #define MUX_STAT_TOP_MSCL 0x0420
  60. #define MUX_STAT_TOP_CAM1 0x0424
  61. #define MUX_STAT_TOP_FSYS0 0x0430
  62. #define MUX_STAT_TOP_FSYS1 0x0434
  63. #define MUX_STAT_TOP_PERIC0 0x0438
  64. #define MUX_STAT_TOP_PERIC1 0x043c
  65. #define DIV_TOP0 0x0600
  66. #define DIV_TOP1 0x0604
  67. #define DIV_TOP2 0x0608
  68. #define DIV_TOP3 0x060c
  69. #define DIV_TOP4 0x0610
  70. #define DIV_TOP_MSCL 0x0618
  71. #define DIV_TOP_CAM10 0x061c
  72. #define DIV_TOP_CAM11 0x0620
  73. #define DIV_TOP_FSYS0 0x062c
  74. #define DIV_TOP_FSYS1 0x0630
  75. #define DIV_TOP_FSYS2 0x0634
  76. #define DIV_TOP_PERIC0 0x0638
  77. #define DIV_TOP_PERIC1 0x063c
  78. #define DIV_TOP_PERIC2 0x0640
  79. #define DIV_TOP_PERIC3 0x0644
  80. #define DIV_TOP_PERIC4 0x0648
  81. #define DIV_TOP_PLL_FREQ_DET 0x064c
  82. #define DIV_STAT_TOP0 0x0700
  83. #define DIV_STAT_TOP1 0x0704
  84. #define DIV_STAT_TOP2 0x0708
  85. #define DIV_STAT_TOP3 0x070c
  86. #define DIV_STAT_TOP4 0x0710
  87. #define DIV_STAT_TOP_MSCL 0x0718
  88. #define DIV_STAT_TOP_CAM10 0x071c
  89. #define DIV_STAT_TOP_CAM11 0x0720
  90. #define DIV_STAT_TOP_FSYS0 0x072c
  91. #define DIV_STAT_TOP_FSYS1 0x0730
  92. #define DIV_STAT_TOP_FSYS2 0x0734
  93. #define DIV_STAT_TOP_PERIC0 0x0738
  94. #define DIV_STAT_TOP_PERIC1 0x073c
  95. #define DIV_STAT_TOP_PERIC2 0x0740
  96. #define DIV_STAT_TOP_PERIC3 0x0744
  97. #define DIV_STAT_TOP_PLL_FREQ_DET 0x074c
  98. #define ENABLE_ACLK_TOP 0x0800
  99. #define ENABLE_SCLK_TOP 0x0a00
  100. #define ENABLE_SCLK_TOP_MSCL 0x0a04
  101. #define ENABLE_SCLK_TOP_CAM1 0x0a08
  102. #define ENABLE_SCLK_TOP_DISP 0x0a0c
  103. #define ENABLE_SCLK_TOP_FSYS 0x0a10
  104. #define ENABLE_SCLK_TOP_PERIC 0x0a14
  105. #define ENABLE_IP_TOP 0x0b00
  106. #define ENABLE_CMU_TOP 0x0c00
  107. #define ENABLE_CMU_TOP_DIV_STAT 0x0c04
  108. static unsigned long top_clk_regs[] __initdata = {
  109. ISP_PLL_LOCK,
  110. AUD_PLL_LOCK,
  111. ISP_PLL_CON0,
  112. ISP_PLL_CON1,
  113. ISP_PLL_FREQ_DET,
  114. AUD_PLL_CON0,
  115. AUD_PLL_CON1,
  116. AUD_PLL_CON2,
  117. AUD_PLL_FREQ_DET,
  118. MUX_SEL_TOP0,
  119. MUX_SEL_TOP1,
  120. MUX_SEL_TOP2,
  121. MUX_SEL_TOP3,
  122. MUX_SEL_TOP4,
  123. MUX_SEL_TOP_MSCL,
  124. MUX_SEL_TOP_CAM1,
  125. MUX_SEL_TOP_DISP,
  126. MUX_SEL_TOP_FSYS0,
  127. MUX_SEL_TOP_FSYS1,
  128. MUX_SEL_TOP_PERIC0,
  129. MUX_SEL_TOP_PERIC1,
  130. MUX_ENABLE_TOP0,
  131. MUX_ENABLE_TOP1,
  132. MUX_ENABLE_TOP2,
  133. MUX_ENABLE_TOP3,
  134. MUX_ENABLE_TOP4,
  135. MUX_ENABLE_TOP_MSCL,
  136. MUX_ENABLE_TOP_CAM1,
  137. MUX_ENABLE_TOP_DISP,
  138. MUX_ENABLE_TOP_FSYS0,
  139. MUX_ENABLE_TOP_FSYS1,
  140. MUX_ENABLE_TOP_PERIC0,
  141. MUX_ENABLE_TOP_PERIC1,
  142. MUX_STAT_TOP0,
  143. MUX_STAT_TOP1,
  144. MUX_STAT_TOP2,
  145. MUX_STAT_TOP3,
  146. MUX_STAT_TOP4,
  147. MUX_STAT_TOP_MSCL,
  148. MUX_STAT_TOP_CAM1,
  149. MUX_STAT_TOP_FSYS0,
  150. MUX_STAT_TOP_FSYS1,
  151. MUX_STAT_TOP_PERIC0,
  152. MUX_STAT_TOP_PERIC1,
  153. DIV_TOP0,
  154. DIV_TOP1,
  155. DIV_TOP2,
  156. DIV_TOP3,
  157. DIV_TOP4,
  158. DIV_TOP_MSCL,
  159. DIV_TOP_CAM10,
  160. DIV_TOP_CAM11,
  161. DIV_TOP_FSYS0,
  162. DIV_TOP_FSYS1,
  163. DIV_TOP_FSYS2,
  164. DIV_TOP_PERIC0,
  165. DIV_TOP_PERIC1,
  166. DIV_TOP_PERIC2,
  167. DIV_TOP_PERIC3,
  168. DIV_TOP_PERIC4,
  169. DIV_TOP_PLL_FREQ_DET,
  170. DIV_STAT_TOP0,
  171. DIV_STAT_TOP1,
  172. DIV_STAT_TOP2,
  173. DIV_STAT_TOP3,
  174. DIV_STAT_TOP4,
  175. DIV_STAT_TOP_MSCL,
  176. DIV_STAT_TOP_CAM10,
  177. DIV_STAT_TOP_CAM11,
  178. DIV_STAT_TOP_FSYS0,
  179. DIV_STAT_TOP_FSYS1,
  180. DIV_STAT_TOP_FSYS2,
  181. DIV_STAT_TOP_PERIC0,
  182. DIV_STAT_TOP_PERIC1,
  183. DIV_STAT_TOP_PERIC2,
  184. DIV_STAT_TOP_PERIC3,
  185. DIV_STAT_TOP_PLL_FREQ_DET,
  186. ENABLE_ACLK_TOP,
  187. ENABLE_SCLK_TOP,
  188. ENABLE_SCLK_TOP_MSCL,
  189. ENABLE_SCLK_TOP_CAM1,
  190. ENABLE_SCLK_TOP_DISP,
  191. ENABLE_SCLK_TOP_FSYS,
  192. ENABLE_SCLK_TOP_PERIC,
  193. ENABLE_IP_TOP,
  194. ENABLE_CMU_TOP,
  195. ENABLE_CMU_TOP_DIV_STAT,
  196. };
  197. /* list of all parent clock list */
  198. PNAME(mout_aud_pll_p) = { "oscclk", "fout_aud_pll", };
  199. PNAME(mout_isp_pll_p) = { "oscclk", "fout_isp_pll", };
  200. PNAME(mout_aud_pll_user_p) = { "oscclk", "mout_aud_pll", };
  201. PNAME(mout_mphy_pll_user_p) = { "oscclk", "sclk_mphy_pll", };
  202. PNAME(mout_mfc_pll_user_p) = { "oscclk", "sclk_mfc_pll", };
  203. PNAME(mout_bus_pll_user_p) = { "oscclk", "sclk_bus_pll", };
  204. PNAME(mout_bus_pll_user_t_p) = { "oscclk", "mout_bus_pll_user", };
  205. PNAME(mout_mphy_pll_user_t_p) = { "oscclk", "mout_mphy_pll_user", };
  206. PNAME(mout_bus_mfc_pll_user_p) = { "mout_bus_pll_user", "mout_mfc_pll_user",};
  207. PNAME(mout_mfc_bus_pll_user_p) = { "mout_mfc_pll_user", "mout_bus_pll_user",};
  208. PNAME(mout_aclk_cam1_552_b_p) = { "mout_aclk_cam1_552_a",
  209. "mout_mfc_pll_user", };
  210. PNAME(mout_aclk_cam1_552_a_p) = { "mout_isp_pll", "mout_bus_pll_user", };
  211. PNAME(mout_aclk_mfc_400_c_p) = { "mout_aclk_mfc_400_b",
  212. "mout_mphy_pll_user", };
  213. PNAME(mout_aclk_mfc_400_b_p) = { "mout_aclk_mfc_400_a",
  214. "mout_bus_pll_user", };
  215. PNAME(mout_aclk_mfc_400_a_p) = { "mout_mfc_pll_user", "mout_isp_pll", };
  216. PNAME(mout_bus_mphy_pll_user_p) = { "mout_bus_pll_user",
  217. "mout_mphy_pll_user", };
  218. PNAME(mout_aclk_mscl_b_p) = { "mout_aclk_mscl_400_a",
  219. "mout_mphy_pll_user", };
  220. PNAME(mout_aclk_g2d_400_b_p) = { "mout_aclk_g2d_400_a",
  221. "mout_mphy_pll_user", };
  222. PNAME(mout_sclk_jpeg_c_p) = { "mout_sclk_jpeg_b", "mout_mphy_pll_user",};
  223. PNAME(mout_sclk_jpeg_b_p) = { "mout_sclk_jpeg_a", "mout_mfc_pll_user", };
  224. PNAME(mout_sclk_mmc2_b_p) = { "mout_sclk_mmc2_a", "mout_mfc_pll_user",};
  225. PNAME(mout_sclk_mmc1_b_p) = { "mout_sclk_mmc1_a", "mout_mfc_pll_user",};
  226. PNAME(mout_sclk_mmc0_d_p) = { "mout_sclk_mmc0_c", "mout_isp_pll", };
  227. PNAME(mout_sclk_mmc0_c_p) = { "mout_sclk_mmc0_b", "mout_mphy_pll_user",};
  228. PNAME(mout_sclk_mmc0_b_p) = { "mout_sclk_mmc0_a", "mout_mfc_pll_user", };
  229. PNAME(mout_sclk_spdif_p) = { "sclk_audio0", "sclk_audio1",
  230. "oscclk", "ioclk_spdif_extclk", };
  231. PNAME(mout_sclk_audio1_p) = { "ioclk_audiocdclk1", "oscclk",
  232. "mout_aud_pll_user_t",};
  233. PNAME(mout_sclk_audio0_p) = { "ioclk_audiocdclk0", "oscclk",
  234. "mout_aud_pll_user_t",};
  235. PNAME(mout_sclk_hdmi_spdif_p) = { "sclk_audio1", "ioclk_spdif_extclk", };
  236. static struct samsung_fixed_factor_clock top_fixed_factor_clks[] __initdata = {
  237. FFACTOR(0, "oscclk_efuse_common", "oscclk", 1, 1, 0),
  238. };
  239. static struct samsung_fixed_rate_clock top_fixed_clks[] __initdata = {
  240. /* Xi2s{0|1}CDCLK input clock for I2S/PCM */
  241. FRATE(0, "ioclk_audiocdclk1", NULL, CLK_IS_ROOT, 100000000),
  242. FRATE(0, "ioclk_audiocdclk0", NULL, CLK_IS_ROOT, 100000000),
  243. /* Xi2s1SDI input clock for SPDIF */
  244. FRATE(0, "ioclk_spdif_extclk", NULL, CLK_IS_ROOT, 100000000),
  245. /* XspiCLK[4:0] input clock for SPI */
  246. FRATE(0, "ioclk_spi4_clk_in", NULL, CLK_IS_ROOT, 50000000),
  247. FRATE(0, "ioclk_spi3_clk_in", NULL, CLK_IS_ROOT, 50000000),
  248. FRATE(0, "ioclk_spi2_clk_in", NULL, CLK_IS_ROOT, 50000000),
  249. FRATE(0, "ioclk_spi1_clk_in", NULL, CLK_IS_ROOT, 50000000),
  250. FRATE(0, "ioclk_spi0_clk_in", NULL, CLK_IS_ROOT, 50000000),
  251. /* Xi2s1SCLK input clock for I2S1_BCLK */
  252. FRATE(0, "ioclk_i2s1_bclk_in", NULL, CLK_IS_ROOT, 12288000),
  253. };
  254. static struct samsung_mux_clock top_mux_clks[] __initdata = {
  255. /* MUX_SEL_TOP0 */
  256. MUX(CLK_MOUT_AUD_PLL, "mout_aud_pll", mout_aud_pll_p, MUX_SEL_TOP0,
  257. 4, 1),
  258. MUX(CLK_MOUT_ISP_PLL, "mout_isp_pll", mout_isp_pll_p, MUX_SEL_TOP0,
  259. 0, 1),
  260. /* MUX_SEL_TOP1 */
  261. MUX(CLK_MOUT_AUD_PLL_USER_T, "mout_aud_pll_user_t",
  262. mout_aud_pll_user_p, MUX_SEL_TOP1, 12, 1),
  263. MUX(CLK_MOUT_MPHY_PLL_USER, "mout_mphy_pll_user", mout_mphy_pll_user_p,
  264. MUX_SEL_TOP1, 8, 1),
  265. MUX(CLK_MOUT_MFC_PLL_USER, "mout_mfc_pll_user", mout_mfc_pll_user_p,
  266. MUX_SEL_TOP1, 4, 1),
  267. MUX(CLK_MOUT_BUS_PLL_USER, "mout_bus_pll_user", mout_bus_pll_user_p,
  268. MUX_SEL_TOP1, 0, 1),
  269. /* MUX_SEL_TOP2 */
  270. MUX(CLK_MOUT_ACLK_HEVC_400, "mout_aclk_hevc_400",
  271. mout_bus_mfc_pll_user_p, MUX_SEL_TOP2, 28, 1),
  272. MUX(CLK_MOUT_ACLK_CAM1_333, "mout_aclk_cam1_333",
  273. mout_mfc_bus_pll_user_p, MUX_SEL_TOP2, 16, 1),
  274. MUX(CLK_MOUT_ACLK_CAM1_552_B, "mout_aclk_cam1_552_b",
  275. mout_aclk_cam1_552_b_p, MUX_SEL_TOP2, 12, 1),
  276. MUX(CLK_MOUT_ACLK_CAM1_552_A, "mout_aclk_cam1_552_a",
  277. mout_aclk_cam1_552_a_p, MUX_SEL_TOP2, 8, 1),
  278. MUX(CLK_MOUT_ACLK_ISP_DIS_400, "mout_aclk_isp_dis_400",
  279. mout_bus_mfc_pll_user_p, MUX_SEL_TOP2, 4, 1),
  280. MUX(CLK_MOUT_ACLK_ISP_400, "mout_aclk_isp_400",
  281. mout_bus_mfc_pll_user_p, MUX_SEL_TOP2, 0, 1),
  282. /* MUX_SEL_TOP3 */
  283. MUX(CLK_MOUT_ACLK_BUS0_400, "mout_aclk_bus0_400",
  284. mout_bus_mphy_pll_user_p, MUX_SEL_TOP3, 20, 1),
  285. MUX(CLK_MOUT_ACLK_MSCL_400_B, "mout_aclk_mscl_400_b",
  286. mout_aclk_mscl_b_p, MUX_SEL_TOP3, 16, 1),
  287. MUX(CLK_MOUT_ACLK_MSCL_400_A, "mout_aclk_mscl_400_a",
  288. mout_bus_mfc_pll_user_p, MUX_SEL_TOP3, 12, 1),
  289. MUX(CLK_MOUT_ACLK_GSCL_333, "mout_aclk_gscl_333",
  290. mout_mfc_bus_pll_user_p, MUX_SEL_TOP3, 8, 1),
  291. MUX(CLK_MOUT_ACLK_G2D_400_B, "mout_aclk_g2d_400_b",
  292. mout_aclk_g2d_400_b_p, MUX_SEL_TOP3, 4, 1),
  293. MUX(CLK_MOUT_ACLK_G2D_400_A, "mout_aclk_g2d_400_a",
  294. mout_bus_mfc_pll_user_p, MUX_SEL_TOP3, 0, 1),
  295. /* MUX_SEL_TOP4 */
  296. MUX(CLK_MOUT_ACLK_MFC_400_C, "mout_aclk_mfc_400_c",
  297. mout_aclk_mfc_400_c_p, MUX_SEL_TOP4, 8, 1),
  298. MUX(CLK_MOUT_ACLK_MFC_400_B, "mout_aclk_mfc_400_b",
  299. mout_aclk_mfc_400_b_p, MUX_SEL_TOP4, 4, 1),
  300. MUX(CLK_MOUT_ACLK_MFC_400_A, "mout_aclk_mfc_400_a",
  301. mout_aclk_mfc_400_a_p, MUX_SEL_TOP4, 0, 1),
  302. /* MUX_SEL_TOP_MSCL */
  303. MUX(CLK_MOUT_SCLK_JPEG_C, "mout_sclk_jpeg_c", mout_sclk_jpeg_c_p,
  304. MUX_SEL_TOP_MSCL, 8, 1),
  305. MUX(CLK_MOUT_SCLK_JPEG_B, "mout_sclk_jpeg_b", mout_sclk_jpeg_b_p,
  306. MUX_SEL_TOP_MSCL, 4, 1),
  307. MUX(CLK_MOUT_SCLK_JPEG_A, "mout_sclk_jpeg_a", mout_bus_pll_user_t_p,
  308. MUX_SEL_TOP_MSCL, 0, 1),
  309. /* MUX_SEL_TOP_CAM1 */
  310. MUX(CLK_MOUT_SCLK_ISP_SENSOR2, "mout_sclk_isp_sensor2",
  311. mout_bus_pll_user_t_p, MUX_SEL_TOP_CAM1, 24, 1),
  312. MUX(CLK_MOUT_SCLK_ISP_SENSOR1, "mout_sclk_isp_sensor1",
  313. mout_bus_pll_user_t_p, MUX_SEL_TOP_CAM1, 20, 1),
  314. MUX(CLK_MOUT_SCLK_ISP_SENSOR0, "mout_sclk_isp_sensor0",
  315. mout_bus_pll_user_t_p, MUX_SEL_TOP_CAM1, 16, 1),
  316. MUX(CLK_MOUT_SCLK_ISP_UART, "mout_sclk_isp_uart",
  317. mout_bus_pll_user_t_p, MUX_SEL_TOP_CAM1, 8, 1),
  318. MUX(CLK_MOUT_SCLK_ISP_SPI1, "mout_sclk_isp_spi1",
  319. mout_bus_pll_user_t_p, MUX_SEL_TOP_CAM1, 4, 1),
  320. MUX(CLK_MOUT_SCLK_ISP_SPI0, "mout_sclk_isp_spi0",
  321. mout_bus_pll_user_t_p, MUX_SEL_TOP_CAM1, 0, 1),
  322. /* MUX_SEL_TOP_FSYS0 */
  323. MUX(CLK_MOUT_SCLK_MMC2_B, "mout_sclk_mmc2_b", mout_sclk_mmc2_b_p,
  324. MUX_SEL_TOP_FSYS0, 28, 1),
  325. MUX(CLK_MOUT_SCLK_MMC2_A, "mout_sclk_mmc2_a", mout_bus_pll_user_t_p,
  326. MUX_SEL_TOP_FSYS0, 24, 1),
  327. MUX(CLK_MOUT_SCLK_MMC1_B, "mout_sclk_mmc1_b", mout_sclk_mmc1_b_p,
  328. MUX_SEL_TOP_FSYS0, 20, 1),
  329. MUX(CLK_MOUT_SCLK_MMC1_A, "mout_sclk_mmc1_a", mout_bus_pll_user_t_p,
  330. MUX_SEL_TOP_FSYS0, 16, 1),
  331. MUX(CLK_MOUT_SCLK_MMC0_D, "mout_sclk_mmc0_d", mout_sclk_mmc0_d_p,
  332. MUX_SEL_TOP_FSYS0, 12, 1),
  333. MUX(CLK_MOUT_SCLK_MMC0_C, "mout_sclk_mmc0_c", mout_sclk_mmc0_c_p,
  334. MUX_SEL_TOP_FSYS0, 8, 1),
  335. MUX(CLK_MOUT_SCLK_MMC0_B, "mout_sclk_mmc0_b", mout_sclk_mmc0_b_p,
  336. MUX_SEL_TOP_FSYS0, 4, 1),
  337. MUX(CLK_MOUT_SCLK_MMC0_A, "mout_sclk_mmc0_a", mout_bus_pll_user_t_p,
  338. MUX_SEL_TOP_FSYS0, 0, 1),
  339. /* MUX_SEL_TOP_FSYS1 */
  340. MUX(CLK_MOUT_SCLK_PCIE_100, "mout_sclk_pcie_100", mout_bus_pll_user_t_p,
  341. MUX_SEL_TOP_FSYS1, 12, 1),
  342. MUX(CLK_MOUT_SCLK_UFSUNIPRO, "mout_sclk_ufsunipro",
  343. mout_mphy_pll_user_t_p, MUX_SEL_TOP_FSYS1, 8, 1),
  344. MUX(CLK_MOUT_SCLK_USBHOST30, "mout_sclk_usbhost30",
  345. mout_bus_pll_user_t_p, MUX_SEL_TOP_FSYS1, 4, 1),
  346. MUX(CLK_MOUT_SCLK_USBDRD30, "mout_sclk_usbdrd30",
  347. mout_bus_pll_user_t_p, MUX_SEL_TOP_FSYS1, 0, 1),
  348. /* MUX_SEL_TOP_PERIC0 */
  349. MUX(CLK_MOUT_SCLK_SPI4, "mout_sclk_spi4", mout_bus_pll_user_t_p,
  350. MUX_SEL_TOP_PERIC0, 28, 1),
  351. MUX(CLK_MOUT_SCLK_SPI3, "mout_sclk_spi3", mout_bus_pll_user_t_p,
  352. MUX_SEL_TOP_PERIC0, 24, 1),
  353. MUX(CLK_MOUT_SCLK_UART2, "mout_sclk_uart2", mout_bus_pll_user_t_p,
  354. MUX_SEL_TOP_PERIC0, 20, 1),
  355. MUX(CLK_MOUT_SCLK_UART1, "mout_sclk_uart1", mout_bus_pll_user_t_p,
  356. MUX_SEL_TOP_PERIC0, 16, 1),
  357. MUX(CLK_MOUT_SCLK_UART0, "mout_sclk_uart0", mout_bus_pll_user_t_p,
  358. MUX_SEL_TOP_PERIC0, 12, 1),
  359. MUX(CLK_MOUT_SCLK_SPI2, "mout_sclk_spi2", mout_bus_pll_user_t_p,
  360. MUX_SEL_TOP_PERIC0, 8, 1),
  361. MUX(CLK_MOUT_SCLK_SPI1, "mout_sclk_spi1", mout_bus_pll_user_t_p,
  362. MUX_SEL_TOP_PERIC0, 4, 1),
  363. MUX(CLK_MOUT_SCLK_SPI0, "mout_sclk_spi0", mout_bus_pll_user_t_p,
  364. MUX_SEL_TOP_PERIC0, 0, 1),
  365. /* MUX_SEL_TOP_PERIC1 */
  366. MUX(CLK_MOUT_SCLK_SLIMBUS, "mout_sclk_slimbus", mout_aud_pll_user_p,
  367. MUX_SEL_TOP_PERIC1, 16, 1),
  368. MUX(CLK_MOUT_SCLK_SPDIF, "mout_sclk_spdif", mout_sclk_spdif_p,
  369. MUX_SEL_TOP_PERIC1, 12, 2),
  370. MUX(CLK_MOUT_SCLK_AUDIO1, "mout_sclk_audio1", mout_sclk_audio1_p,
  371. MUX_SEL_TOP_PERIC1, 4, 2),
  372. MUX(CLK_MOUT_SCLK_AUDIO0, "mout_sclk_audio0", mout_sclk_audio0_p,
  373. MUX_SEL_TOP_PERIC1, 0, 2),
  374. /* MUX_SEL_TOP_DISP */
  375. MUX(CLK_MOUT_SCLK_HDMI_SPDIF, "mout_sclk_hdmi_spdif",
  376. mout_sclk_hdmi_spdif_p, MUX_SEL_TOP_DISP, 0, 1),
  377. };
  378. static struct samsung_div_clock top_div_clks[] __initdata = {
  379. /* DIV_TOP0 */
  380. DIV(CLK_DIV_ACLK_CAM1_333, "div_aclk_cam1_333", "mout_aclk_cam1_333",
  381. DIV_TOP0, 28, 3),
  382. DIV(CLK_DIV_ACLK_CAM1_400, "div_aclk_cam1_400", "mout_bus_pll_user",
  383. DIV_TOP0, 24, 3),
  384. DIV(CLK_DIV_ACLK_CAM1_552, "div_aclk_cam1_552", "mout_aclk_cam1_552_b",
  385. DIV_TOP0, 20, 3),
  386. DIV(CLK_DIV_ACLK_CAM0_333, "div_aclk_cam0_333", "mout_mfc_pll_user",
  387. DIV_TOP0, 16, 3),
  388. DIV(CLK_DIV_ACLK_CAM0_400, "div_aclk_cam0_400", "mout_bus_pll_user",
  389. DIV_TOP0, 12, 3),
  390. DIV(CLK_DIV_ACLK_CAM0_552, "div_aclk_cam0_552", "mout_isp_pll",
  391. DIV_TOP0, 8, 3),
  392. DIV(CLK_DIV_ACLK_ISP_DIS_400, "div_aclk_isp_dis_400",
  393. "mout_aclk_isp_dis_400", DIV_TOP0, 4, 4),
  394. DIV(CLK_DIV_ACLK_ISP_400, "div_aclk_isp_400",
  395. "mout_aclk_isp_400", DIV_TOP0, 0, 4),
  396. /* DIV_TOP1 */
  397. DIV(CLK_DIV_ACLK_GSCL_111, "div_aclk_gscl_111", "mout_aclk_gscl_333",
  398. DIV_TOP1, 28, 3),
  399. DIV(CLK_DIV_ACLK_GSCL_333, "div_aclk_gscl_333", "mout_aclk_gscl_333",
  400. DIV_TOP1, 24, 3),
  401. DIV(CLK_DIV_ACLK_HEVC_400, "div_aclk_hevc_400", "mout_aclk_hevc_400",
  402. DIV_TOP1, 20, 3),
  403. DIV(CLK_DIV_ACLK_MFC_400, "div_aclk_mfc_400", "mout_aclk_mfc_400_c",
  404. DIV_TOP1, 12, 3),
  405. DIV(CLK_DIV_ACLK_G2D_266, "div_aclk_g2d_266", "mout_bus_pll_user",
  406. DIV_TOP1, 8, 3),
  407. DIV(CLK_DIV_ACLK_G2D_400, "div_aclk_g2d_400", "mout_aclk_g2d_400_b",
  408. DIV_TOP1, 0, 3),
  409. /* DIV_TOP2 */
  410. DIV(CLK_DIV_ACLK_MSCL_400, "div_aclk_mscl_400", "mout_aclk_mscl_400_b",
  411. DIV_TOP2, 4, 3),
  412. DIV(CLK_DIV_ACLK_FSYS_200, "div_aclk_fsys_200", "mout_bus_pll_user",
  413. DIV_TOP2, 0, 3),
  414. /* DIV_TOP3 */
  415. DIV(CLK_DIV_ACLK_IMEM_SSSX_266, "div_aclk_imem_sssx_266",
  416. "mout_bus_pll_user", DIV_TOP3, 24, 3),
  417. DIV(CLK_DIV_ACLK_IMEM_200, "div_aclk_imem_200",
  418. "mout_bus_pll_user", DIV_TOP3, 20, 3),
  419. DIV(CLK_DIV_ACLK_IMEM_266, "div_aclk_imem_266",
  420. "mout_bus_pll_user", DIV_TOP3, 16, 3),
  421. DIV(CLK_DIV_ACLK_PERIC_66_B, "div_aclk_peric_66_b",
  422. "div_aclk_peric_66_a", DIV_TOP3, 12, 3),
  423. DIV(CLK_DIV_ACLK_PERIC_66_A, "div_aclk_peric_66_a",
  424. "mout_bus_pll_user", DIV_TOP3, 8, 3),
  425. DIV(CLK_DIV_ACLK_PERIS_66_B, "div_aclk_peris_66_b",
  426. "div_aclk_peris_66_a", DIV_TOP3, 4, 3),
  427. DIV(CLK_DIV_ACLK_PERIS_66_A, "div_aclk_peris_66_a",
  428. "mout_bus_pll_user", DIV_TOP3, 0, 3),
  429. /* DIV_TOP4 */
  430. DIV(CLK_DIV_ACLK_G3D_400, "div_aclk_g3d_400", "mout_bus_pll_user",
  431. DIV_TOP4, 8, 3),
  432. DIV(CLK_DIV_ACLK_BUS0_400, "div_aclk_bus0_400", "mout_aclk_bus0_400",
  433. DIV_TOP4, 4, 3),
  434. DIV(CLK_DIV_ACLK_BUS1_400, "div_aclk_bus1_400", "mout_bus_pll_user",
  435. DIV_TOP4, 0, 3),
  436. /* DIV_TOP_MSCL */
  437. DIV(CLK_DIV_SCLK_JPEG, "div_sclk_jpeg", "mout_sclk_jpeg_c",
  438. DIV_TOP_MSCL, 0, 4),
  439. /* DIV_TOP_CAM10 */
  440. DIV(CLK_DIV_SCLK_ISP_UART, "div_sclk_isp_uart", "mout_sclk_isp_uart",
  441. DIV_TOP_CAM10, 24, 5),
  442. DIV(CLK_DIV_SCLK_ISP_SPI1_B, "div_sclk_isp_spi1_b",
  443. "div_sclk_isp_spi1_a", DIV_TOP_CAM10, 16, 8),
  444. DIV(CLK_DIV_SCLK_ISP_SPI1_A, "div_sclk_isp_spi1_a",
  445. "mout_sclk_isp_spi1", DIV_TOP_CAM10, 12, 4),
  446. DIV(CLK_DIV_SCLK_ISP_SPI0_B, "div_sclk_isp_spi0_b",
  447. "div_sclk_isp_spi0_a", DIV_TOP_CAM10, 4, 8),
  448. DIV(CLK_DIV_SCLK_ISP_SPI0_A, "div_sclk_isp_spi0_a",
  449. "mout_sclk_isp_spi0", DIV_TOP_CAM10, 0, 4),
  450. /* DIV_TOP_CAM11 */
  451. DIV(CLK_DIV_SCLK_ISP_SENSOR2_B, "div_sclk_isp_sensor2_b",
  452. "div_sclk_isp_sensor2_a", DIV_TOP_CAM11, 20, 4),
  453. DIV(CLK_DIV_SCLK_ISP_SENSOR2_A, "div_sclk_isp_sensor2_a",
  454. "mout_sclk_isp_sensor2", DIV_TOP_CAM11, 16, 4),
  455. DIV(CLK_DIV_SCLK_ISP_SENSOR1_B, "div_sclk_isp_sensor1_b",
  456. "div_sclk_isp_sensor1_a", DIV_TOP_CAM11, 12, 4),
  457. DIV(CLK_DIV_SCLK_ISP_SENSOR1_A, "div_sclk_isp_sensor1_a",
  458. "mout_sclk_isp_sensor1", DIV_TOP_CAM11, 8, 4),
  459. DIV(CLK_DIV_SCLK_ISP_SENSOR0_B, "div_sclk_isp_sensor0_b",
  460. "div_sclk_isp_sensor0_a", DIV_TOP_CAM11, 12, 4),
  461. DIV(CLK_DIV_SCLK_ISP_SENSOR0_A, "div_sclk_isp_sensor0_a",
  462. "mout_sclk_isp_sensor0", DIV_TOP_CAM11, 8, 4),
  463. /* DIV_TOP_FSYS0 */
  464. DIV(CLK_DIV_SCLK_MMC1_B, "div_sclk_mmc1_b", "div_sclk_mmc1_a",
  465. DIV_TOP_FSYS0, 16, 8),
  466. DIV(CLK_DIV_SCLK_MMC1_A, "div_sclk_mmc1_a", "mout_sclk_mmc1_b",
  467. DIV_TOP_FSYS0, 12, 4),
  468. DIV_F(CLK_DIV_SCLK_MMC0_B, "div_sclk_mmc0_b", "div_sclk_mmc0_a",
  469. DIV_TOP_FSYS0, 4, 8, CLK_SET_RATE_PARENT, 0),
  470. DIV_F(CLK_DIV_SCLK_MMC0_A, "div_sclk_mmc0_a", "mout_sclk_mmc0_d",
  471. DIV_TOP_FSYS0, 0, 4, CLK_SET_RATE_PARENT, 0),
  472. /* DIV_TOP_FSYS1 */
  473. DIV(CLK_DIV_SCLK_MMC2_B, "div_sclk_mmc2_b", "div_sclk_mmc2_a",
  474. DIV_TOP_FSYS1, 4, 8),
  475. DIV(CLK_DIV_SCLK_MMC2_A, "div_sclk_mmc2_a", "mout_sclk_mmc2_b",
  476. DIV_TOP_FSYS1, 0, 4),
  477. /* DIV_TOP_FSYS2 */
  478. DIV(CLK_DIV_SCLK_PCIE_100, "div_sclk_pcie_100", "mout_sclk_pcie_100",
  479. DIV_TOP_FSYS2, 12, 3),
  480. DIV(CLK_DIV_SCLK_USBHOST30, "div_sclk_usbhost30",
  481. "mout_sclk_usbhost30", DIV_TOP_FSYS2, 8, 4),
  482. DIV(CLK_DIV_SCLK_UFSUNIPRO, "div_sclk_ufsunipro",
  483. "mout_sclk_ufsunipro", DIV_TOP_FSYS2, 4, 4),
  484. DIV(CLK_DIV_SCLK_USBDRD30, "div_sclk_usbdrd30", "mout_sclk_usbdrd30",
  485. DIV_TOP_FSYS2, 0, 4),
  486. /* DIV_TOP_PERIC0 */
  487. DIV(CLK_DIV_SCLK_SPI1_B, "div_sclk_spi1_b", "div_sclk_spi1_a",
  488. DIV_TOP_PERIC0, 16, 8),
  489. DIV(CLK_DIV_SCLK_SPI1_A, "div_sclk_spi1_a", "mout_sclk_spi1",
  490. DIV_TOP_PERIC0, 12, 4),
  491. DIV(CLK_DIV_SCLK_SPI0_B, "div_sclk_spi0_b", "div_sclk_spi0_a",
  492. DIV_TOP_PERIC0, 4, 8),
  493. DIV(CLK_DIV_SCLK_SPI0_A, "div_sclk_spi0_a", "mout_sclk_spi0",
  494. DIV_TOP_PERIC0, 0, 4),
  495. /* DIV_TOP_PERIC1 */
  496. DIV(CLK_DIV_SCLK_SPI2_B, "div_sclk_spi2_b", "div_sclk_spi2_a",
  497. DIV_TOP_PERIC1, 4, 8),
  498. DIV(CLK_DIV_SCLK_SPI2_A, "div_sclk_spi2_a", "mout_sclk_spi2",
  499. DIV_TOP_PERIC1, 0, 4),
  500. /* DIV_TOP_PERIC2 */
  501. DIV(CLK_DIV_SCLK_UART2, "div_sclk_uart2", "mout_sclk_uart2",
  502. DIV_TOP_PERIC2, 8, 4),
  503. DIV(CLK_DIV_SCLK_UART1, "div_sclk_uart1", "mout_sclk_uart0",
  504. DIV_TOP_PERIC2, 4, 4),
  505. DIV(CLK_DIV_SCLK_UART0, "div_sclk_uart0", "mout_sclk_uart1",
  506. DIV_TOP_PERIC2, 0, 4),
  507. /* DIV_TOP_PERIC3 */
  508. DIV(CLK_DIV_SCLK_I2S1, "div_sclk_i2s1", "sclk_audio1",
  509. DIV_TOP_PERIC3, 16, 6),
  510. DIV(CLK_DIV_SCLK_PCM1, "div_sclk_pcm1", "sclk_audio1",
  511. DIV_TOP_PERIC3, 8, 8),
  512. DIV(CLK_DIV_SCLK_AUDIO1, "div_sclk_audio1", "mout_sclk_audio1",
  513. DIV_TOP_PERIC3, 4, 4),
  514. DIV(CLK_DIV_SCLK_AUDIO0, "div_sclk_audio0", "mout_sclk_audio0",
  515. DIV_TOP_PERIC3, 0, 4),
  516. /* DIV_TOP_PERIC4 */
  517. DIV(CLK_DIV_SCLK_SPI4_B, "div_sclk_spi4_b", "div_sclk_spi4_a",
  518. DIV_TOP_PERIC4, 16, 8),
  519. DIV(CLK_DIV_SCLK_SPI4_A, "div_sclk_spi4_a", "mout_sclk_spi4",
  520. DIV_TOP_PERIC4, 12, 4),
  521. DIV(CLK_DIV_SCLK_SPI3_B, "div_sclk_spi3_b", "div_sclk_spi3_a",
  522. DIV_TOP_PERIC4, 4, 8),
  523. DIV(CLK_DIV_SCLK_SPI3_A, "div_sclk_spi3_a", "mout_sclk_spi3",
  524. DIV_TOP_PERIC4, 0, 4),
  525. };
  526. static struct samsung_gate_clock top_gate_clks[] __initdata = {
  527. /* ENABLE_ACLK_TOP */
  528. GATE(CLK_ACLK_G3D_400, "aclk_g3d_400", "div_aclk_g3d_400",
  529. ENABLE_ACLK_TOP, 30, 0, 0),
  530. GATE(CLK_ACLK_IMEM_SSX_266, "aclk_imem_ssx_266",
  531. "div_aclk_imem_sssx_266", ENABLE_ACLK_TOP,
  532. 29, CLK_IGNORE_UNUSED, 0),
  533. GATE(CLK_ACLK_BUS0_400, "aclk_bus0_400", "div_aclk_bus0_400",
  534. ENABLE_ACLK_TOP, 26,
  535. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  536. GATE(CLK_ACLK_BUS1_400, "aclk_bus1_400", "div_aclk_bus1_400",
  537. ENABLE_ACLK_TOP, 25,
  538. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  539. GATE(CLK_ACLK_IMEM_200, "aclk_imem_200", "div_aclk_imem_266",
  540. ENABLE_ACLK_TOP, 24,
  541. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  542. GATE(CLK_ACLK_IMEM_266, "aclk_imem_266", "div_aclk_imem_200",
  543. ENABLE_ACLK_TOP, 23,
  544. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  545. GATE(CLK_ACLK_PERIC_66, "aclk_peric_66", "div_aclk_peric_66_b",
  546. ENABLE_ACLK_TOP, 22,
  547. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  548. GATE(CLK_ACLK_PERIS_66, "aclk_peris_66", "div_aclk_peris_66_b",
  549. ENABLE_ACLK_TOP, 21,
  550. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  551. GATE(CLK_ACLK_MSCL_400, "aclk_mscl_400", "div_aclk_mscl_400",
  552. ENABLE_ACLK_TOP, 19,
  553. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  554. GATE(CLK_ACLK_FSYS_200, "aclk_fsys_200", "div_aclk_fsys_200",
  555. ENABLE_ACLK_TOP, 18,
  556. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  557. GATE(CLK_ACLK_GSCL_111, "aclk_gscl_111", "div_aclk_gscl_111",
  558. ENABLE_ACLK_TOP, 15,
  559. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  560. GATE(CLK_ACLK_GSCL_333, "aclk_gscl_333", "div_aclk_gscl_333",
  561. ENABLE_ACLK_TOP, 14,
  562. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  563. GATE(CLK_ACLK_CAM1_333, "aclk_cam1_333", "div_aclk_cam1_333",
  564. ENABLE_ACLK_TOP, 13,
  565. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  566. GATE(CLK_ACLK_CAM1_400, "aclk_cam1_400", "div_aclk_cam1_400",
  567. ENABLE_ACLK_TOP, 12,
  568. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  569. GATE(CLK_ACLK_CAM1_552, "aclk_cam1_552", "div_aclk_cam1_552",
  570. ENABLE_ACLK_TOP, 11,
  571. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  572. GATE(CLK_ACLK_CAM0_333, "aclk_cam0_333", "div_aclk_cam0_333",
  573. ENABLE_ACLK_TOP, 10,
  574. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  575. GATE(CLK_ACLK_CAM0_400, "aclk_cam0_400", "div_aclk_cam0_400",
  576. ENABLE_ACLK_TOP, 9,
  577. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  578. GATE(CLK_ACLK_CAM0_552, "aclk_cam0_552", "div_aclk_cam0_552",
  579. ENABLE_ACLK_TOP, 8,
  580. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  581. GATE(CLK_ACLK_ISP_DIS_400, "aclk_isp_dis_400", "div_aclk_isp_dis_400",
  582. ENABLE_ACLK_TOP, 7,
  583. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  584. GATE(CLK_ACLK_ISP_400, "aclk_isp_400", "div_aclk_isp_400",
  585. ENABLE_ACLK_TOP, 6,
  586. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  587. GATE(CLK_ACLK_HEVC_400, "aclk_hevc_400", "div_aclk_hevc_400",
  588. ENABLE_ACLK_TOP, 5,
  589. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  590. GATE(CLK_ACLK_MFC_400, "aclk_mfc_400", "div_aclk_mfc_400",
  591. ENABLE_ACLK_TOP, 3,
  592. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  593. GATE(CLK_ACLK_G2D_266, "aclk_g2d_266", "div_aclk_g2d_266",
  594. ENABLE_ACLK_TOP, 2,
  595. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  596. GATE(CLK_ACLK_G2D_400, "aclk_g2d_400", "div_aclk_g2d_400",
  597. ENABLE_ACLK_TOP, 0,
  598. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  599. /* ENABLE_SCLK_TOP_MSCL */
  600. GATE(CLK_SCLK_JPEG_MSCL, "sclk_jpeg_mscl", "div_sclk_jpeg",
  601. ENABLE_SCLK_TOP_MSCL, 0, 0, 0),
  602. /* ENABLE_SCLK_TOP_CAM1 */
  603. GATE(CLK_SCLK_ISP_SENSOR2, "sclk_isp_sensor2", "div_sclk_isp_sensor2_b",
  604. ENABLE_SCLK_TOP_CAM1, 7, 0, 0),
  605. GATE(CLK_SCLK_ISP_SENSOR1, "sclk_isp_sensor1", "div_sclk_isp_sensor1_b",
  606. ENABLE_SCLK_TOP_CAM1, 6, 0, 0),
  607. GATE(CLK_SCLK_ISP_SENSOR0, "sclk_isp_sensor0", "div_sclk_isp_sensor0_b",
  608. ENABLE_SCLK_TOP_CAM1, 5, 0, 0),
  609. GATE(CLK_SCLK_ISP_MCTADC_CAM1, "sclk_isp_mctadc_cam1", "oscclk",
  610. ENABLE_SCLK_TOP_CAM1, 4, 0, 0),
  611. GATE(CLK_SCLK_ISP_UART_CAM1, "sclk_isp_uart_cam1", "div_sclk_isp_uart",
  612. ENABLE_SCLK_TOP_CAM1, 2, 0, 0),
  613. GATE(CLK_SCLK_ISP_SPI1_CAM1, "sclk_isp_spi1_cam1", "div_sclk_isp_spi1_b",
  614. ENABLE_SCLK_TOP_CAM1, 1, 0, 0),
  615. GATE(CLK_SCLK_ISP_SPI0_CAM1, "sclk_isp_spi0_cam1", "div_sclk_isp_spi0_b",
  616. ENABLE_SCLK_TOP_CAM1, 0, 0, 0),
  617. /* ENABLE_SCLK_TOP_DISP */
  618. GATE(CLK_SCLK_HDMI_SPDIF_DISP, "sclk_hdmi_spdif_disp",
  619. "mout_sclk_hdmi_spdif", ENABLE_SCLK_TOP_DISP, 0,
  620. CLK_IGNORE_UNUSED, 0),
  621. /* ENABLE_SCLK_TOP_FSYS */
  622. GATE(CLK_SCLK_PCIE_100_FSYS, "sclk_pcie_100_fsys", "div_sclk_pcie_100",
  623. ENABLE_SCLK_TOP_FSYS, 7, 0, 0),
  624. GATE(CLK_SCLK_MMC2_FSYS, "sclk_mmc2_fsys", "div_sclk_mmc2_b",
  625. ENABLE_SCLK_TOP_FSYS, 6, CLK_SET_RATE_PARENT, 0),
  626. GATE(CLK_SCLK_MMC1_FSYS, "sclk_mmc1_fsys", "div_sclk_mmc1_b",
  627. ENABLE_SCLK_TOP_FSYS, 5, CLK_SET_RATE_PARENT, 0),
  628. GATE(CLK_SCLK_MMC0_FSYS, "sclk_mmc0_fsys", "div_sclk_mmc0_b",
  629. ENABLE_SCLK_TOP_FSYS, 4, CLK_SET_RATE_PARENT, 0),
  630. GATE(CLK_SCLK_UFSUNIPRO_FSYS, "sclk_ufsunipro_fsys",
  631. "div_sclk_ufsunipro", ENABLE_SCLK_TOP_FSYS,
  632. 3, CLK_SET_RATE_PARENT, 0),
  633. GATE(CLK_SCLK_USBHOST30_FSYS, "sclk_usbhost30_fsys",
  634. "div_sclk_usbhost30", ENABLE_SCLK_TOP_FSYS,
  635. 1, CLK_SET_RATE_PARENT, 0),
  636. GATE(CLK_SCLK_USBDRD30_FSYS, "sclk_usbdrd30_fsys",
  637. "div_sclk_usbdrd30", ENABLE_SCLK_TOP_FSYS,
  638. 0, CLK_SET_RATE_PARENT, 0),
  639. /* ENABLE_SCLK_TOP_PERIC */
  640. GATE(CLK_SCLK_SPI4_PERIC, "sclk_spi4_peric", "div_sclk_spi4_b",
  641. ENABLE_SCLK_TOP_PERIC, 12, CLK_SET_RATE_PARENT, 0),
  642. GATE(CLK_SCLK_SPI3_PERIC, "sclk_spi3_peric", "div_sclk_spi3_b",
  643. ENABLE_SCLK_TOP_PERIC, 11, CLK_SET_RATE_PARENT, 0),
  644. GATE(CLK_SCLK_SPDIF_PERIC, "sclk_spdif_peric", "mout_sclk_spdif",
  645. ENABLE_SCLK_TOP_PERIC, 9, CLK_SET_RATE_PARENT, 0),
  646. GATE(CLK_SCLK_I2S1_PERIC, "sclk_i2s1_peric", "div_sclk_i2s1",
  647. ENABLE_SCLK_TOP_PERIC, 8, CLK_SET_RATE_PARENT, 0),
  648. GATE(CLK_SCLK_PCM1_PERIC, "sclk_pcm1_peric", "div_sclk_pcm1",
  649. ENABLE_SCLK_TOP_PERIC, 7, CLK_SET_RATE_PARENT, 0),
  650. GATE(CLK_SCLK_UART2_PERIC, "sclk_uart2_peric", "div_sclk_uart2",
  651. ENABLE_SCLK_TOP_PERIC, 5, CLK_SET_RATE_PARENT, 0),
  652. GATE(CLK_SCLK_UART1_PERIC, "sclk_uart1_peric", "div_sclk_uart1",
  653. ENABLE_SCLK_TOP_PERIC, 4, CLK_SET_RATE_PARENT, 0),
  654. GATE(CLK_SCLK_UART0_PERIC, "sclk_uart0_peric", "div_sclk_uart0",
  655. ENABLE_SCLK_TOP_PERIC, 3, CLK_SET_RATE_PARENT, 0),
  656. GATE(CLK_SCLK_SPI2_PERIC, "sclk_spi2_peric", "div_sclk_spi2_b",
  657. ENABLE_SCLK_TOP_PERIC, 2, CLK_SET_RATE_PARENT, 0),
  658. GATE(CLK_SCLK_SPI1_PERIC, "sclk_spi1_peric", "div_sclk_spi1_b",
  659. ENABLE_SCLK_TOP_PERIC, 1, CLK_SET_RATE_PARENT, 0),
  660. GATE(CLK_SCLK_SPI0_PERIC, "sclk_spi0_peric", "div_sclk_spi0_b",
  661. ENABLE_SCLK_TOP_PERIC, 0, CLK_SET_RATE_PARENT, 0),
  662. /* MUX_ENABLE_TOP_PERIC1 */
  663. GATE(CLK_SCLK_SLIMBUS, "sclk_slimbus", "mout_sclk_slimbus",
  664. MUX_ENABLE_TOP_PERIC1, 16, 0, 0),
  665. GATE(CLK_SCLK_AUDIO1, "sclk_audio1", "div_sclk_audio1",
  666. MUX_ENABLE_TOP_PERIC1, 4, 0, 0),
  667. GATE(CLK_SCLK_AUDIO0, "sclk_audio0", "div_sclk_audio0",
  668. MUX_ENABLE_TOP_PERIC1, 0, 0, 0),
  669. };
  670. /*
  671. * ATLAS_PLL & APOLLO_PLL & MEM0_PLL & MEM1_PLL & BUS_PLL & MFC_PLL
  672. * & MPHY_PLL & G3D_PLL & DISP_PLL & ISP_PLL
  673. */
  674. static struct samsung_pll_rate_table exynos5443_pll_rates[] = {
  675. PLL_35XX_RATE(2500000000U, 625, 6, 0),
  676. PLL_35XX_RATE(2400000000U, 500, 5, 0),
  677. PLL_35XX_RATE(2300000000U, 575, 6, 0),
  678. PLL_35XX_RATE(2200000000U, 550, 6, 0),
  679. PLL_35XX_RATE(2100000000U, 350, 4, 0),
  680. PLL_35XX_RATE(2000000000U, 500, 6, 0),
  681. PLL_35XX_RATE(1900000000U, 475, 6, 0),
  682. PLL_35XX_RATE(1800000000U, 375, 5, 0),
  683. PLL_35XX_RATE(1700000000U, 425, 6, 0),
  684. PLL_35XX_RATE(1600000000U, 400, 6, 0),
  685. PLL_35XX_RATE(1500000000U, 250, 4, 0),
  686. PLL_35XX_RATE(1400000000U, 350, 6, 0),
  687. PLL_35XX_RATE(1332000000U, 222, 4, 0),
  688. PLL_35XX_RATE(1300000000U, 325, 6, 0),
  689. PLL_35XX_RATE(1200000000U, 500, 5, 1),
  690. PLL_35XX_RATE(1100000000U, 550, 6, 1),
  691. PLL_35XX_RATE(1086000000U, 362, 4, 1),
  692. PLL_35XX_RATE(1066000000U, 533, 6, 1),
  693. PLL_35XX_RATE(1000000000U, 500, 6, 1),
  694. PLL_35XX_RATE(933000000U, 311, 4, 1),
  695. PLL_35XX_RATE(921000000U, 307, 4, 1),
  696. PLL_35XX_RATE(900000000U, 375, 5, 1),
  697. PLL_35XX_RATE(825000000U, 275, 4, 1),
  698. PLL_35XX_RATE(800000000U, 400, 6, 1),
  699. PLL_35XX_RATE(733000000U, 733, 12, 1),
  700. PLL_35XX_RATE(700000000U, 175, 3, 1),
  701. PLL_35XX_RATE(667000000U, 222, 4, 1),
  702. PLL_35XX_RATE(633000000U, 211, 4, 1),
  703. PLL_35XX_RATE(600000000U, 500, 5, 2),
  704. PLL_35XX_RATE(552000000U, 460, 5, 2),
  705. PLL_35XX_RATE(550000000U, 550, 6, 2),
  706. PLL_35XX_RATE(543000000U, 362, 4, 2),
  707. PLL_35XX_RATE(533000000U, 533, 6, 2),
  708. PLL_35XX_RATE(500000000U, 500, 6, 2),
  709. PLL_35XX_RATE(444000000U, 370, 5, 2),
  710. PLL_35XX_RATE(420000000U, 350, 5, 2),
  711. PLL_35XX_RATE(400000000U, 400, 6, 2),
  712. PLL_35XX_RATE(350000000U, 350, 6, 2),
  713. PLL_35XX_RATE(333000000U, 222, 4, 2),
  714. PLL_35XX_RATE(300000000U, 500, 5, 3),
  715. PLL_35XX_RATE(266000000U, 532, 6, 3),
  716. PLL_35XX_RATE(200000000U, 400, 6, 3),
  717. PLL_35XX_RATE(166000000U, 332, 6, 3),
  718. PLL_35XX_RATE(160000000U, 320, 6, 3),
  719. PLL_35XX_RATE(133000000U, 532, 6, 4),
  720. PLL_35XX_RATE(100000000U, 400, 6, 4),
  721. { /* sentinel */ }
  722. };
  723. /* AUD_PLL */
  724. static struct samsung_pll_rate_table exynos5443_aud_pll_rates[] = {
  725. PLL_36XX_RATE(400000000U, 200, 3, 2, 0),
  726. PLL_36XX_RATE(393216000U, 197, 3, 2, -25690),
  727. PLL_36XX_RATE(384000000U, 128, 2, 2, 0),
  728. PLL_36XX_RATE(368640000U, 246, 4, 2, -15729),
  729. PLL_36XX_RATE(361507200U, 181, 3, 2, -16148),
  730. PLL_36XX_RATE(338688000U, 113, 2, 2, -6816),
  731. PLL_36XX_RATE(294912000U, 98, 1, 3, 19923),
  732. PLL_36XX_RATE(288000000U, 96, 1, 3, 0),
  733. PLL_36XX_RATE(252000000U, 84, 1, 3, 0),
  734. { /* sentinel */ }
  735. };
  736. static struct samsung_pll_clock top_pll_clks[] __initdata = {
  737. PLL(pll_35xx, CLK_FOUT_ISP_PLL, "fout_isp_pll", "oscclk",
  738. ISP_PLL_LOCK, ISP_PLL_CON0, exynos5443_pll_rates),
  739. PLL(pll_36xx, CLK_FOUT_AUD_PLL, "fout_aud_pll", "oscclk",
  740. AUD_PLL_LOCK, AUD_PLL_CON0, exynos5443_aud_pll_rates),
  741. };
  742. static struct samsung_cmu_info top_cmu_info __initdata = {
  743. .pll_clks = top_pll_clks,
  744. .nr_pll_clks = ARRAY_SIZE(top_pll_clks),
  745. .mux_clks = top_mux_clks,
  746. .nr_mux_clks = ARRAY_SIZE(top_mux_clks),
  747. .div_clks = top_div_clks,
  748. .nr_div_clks = ARRAY_SIZE(top_div_clks),
  749. .gate_clks = top_gate_clks,
  750. .nr_gate_clks = ARRAY_SIZE(top_gate_clks),
  751. .fixed_clks = top_fixed_clks,
  752. .nr_fixed_clks = ARRAY_SIZE(top_fixed_clks),
  753. .fixed_factor_clks = top_fixed_factor_clks,
  754. .nr_fixed_factor_clks = ARRAY_SIZE(top_fixed_factor_clks),
  755. .nr_clk_ids = TOP_NR_CLK,
  756. .clk_regs = top_clk_regs,
  757. .nr_clk_regs = ARRAY_SIZE(top_clk_regs),
  758. };
  759. static void __init exynos5433_cmu_top_init(struct device_node *np)
  760. {
  761. samsung_cmu_register_one(np, &top_cmu_info);
  762. }
  763. CLK_OF_DECLARE(exynos5433_cmu_top, "samsung,exynos5433-cmu-top",
  764. exynos5433_cmu_top_init);
  765. /*
  766. * Register offset definitions for CMU_CPIF
  767. */
  768. #define MPHY_PLL_LOCK 0x0000
  769. #define MPHY_PLL_CON0 0x0100
  770. #define MPHY_PLL_CON1 0x0104
  771. #define MPHY_PLL_FREQ_DET 0x010c
  772. #define MUX_SEL_CPIF0 0x0200
  773. #define DIV_CPIF 0x0600
  774. #define ENABLE_SCLK_CPIF 0x0a00
  775. static unsigned long cpif_clk_regs[] __initdata = {
  776. MPHY_PLL_LOCK,
  777. MPHY_PLL_CON0,
  778. MPHY_PLL_CON1,
  779. MPHY_PLL_FREQ_DET,
  780. MUX_SEL_CPIF0,
  781. DIV_CPIF,
  782. ENABLE_SCLK_CPIF,
  783. };
  784. /* list of all parent clock list */
  785. PNAME(mout_mphy_pll_p) = { "oscclk", "fout_mphy_pll", };
  786. static struct samsung_pll_clock cpif_pll_clks[] __initdata = {
  787. PLL(pll_35xx, CLK_FOUT_MPHY_PLL, "fout_mphy_pll", "oscclk",
  788. MPHY_PLL_LOCK, MPHY_PLL_CON0, exynos5443_pll_rates),
  789. };
  790. static struct samsung_mux_clock cpif_mux_clks[] __initdata = {
  791. /* MUX_SEL_CPIF0 */
  792. MUX(CLK_MOUT_MPHY_PLL, "mout_mphy_pll", mout_mphy_pll_p, MUX_SEL_CPIF0,
  793. 0, 1),
  794. };
  795. static struct samsung_div_clock cpif_div_clks[] __initdata = {
  796. /* DIV_CPIF */
  797. DIV(CLK_DIV_SCLK_MPHY, "div_sclk_mphy", "mout_mphy_pll", DIV_CPIF,
  798. 0, 6),
  799. };
  800. static struct samsung_gate_clock cpif_gate_clks[] __initdata = {
  801. /* ENABLE_SCLK_CPIF */
  802. GATE(CLK_SCLK_MPHY_PLL, "sclk_mphy_pll", "mout_mphy_pll",
  803. ENABLE_SCLK_CPIF, 9, 0, 0),
  804. GATE(CLK_SCLK_UFS_MPHY, "sclk_ufs_mphy", "div_sclk_mphy",
  805. ENABLE_SCLK_CPIF, 4, 0, 0),
  806. };
  807. static struct samsung_cmu_info cpif_cmu_info __initdata = {
  808. .pll_clks = cpif_pll_clks,
  809. .nr_pll_clks = ARRAY_SIZE(cpif_pll_clks),
  810. .mux_clks = cpif_mux_clks,
  811. .nr_mux_clks = ARRAY_SIZE(cpif_mux_clks),
  812. .div_clks = cpif_div_clks,
  813. .nr_div_clks = ARRAY_SIZE(cpif_div_clks),
  814. .gate_clks = cpif_gate_clks,
  815. .nr_gate_clks = ARRAY_SIZE(cpif_gate_clks),
  816. .nr_clk_ids = CPIF_NR_CLK,
  817. .clk_regs = cpif_clk_regs,
  818. .nr_clk_regs = ARRAY_SIZE(cpif_clk_regs),
  819. };
  820. static void __init exynos5433_cmu_cpif_init(struct device_node *np)
  821. {
  822. samsung_cmu_register_one(np, &cpif_cmu_info);
  823. }
  824. CLK_OF_DECLARE(exynos5433_cmu_cpif, "samsung,exynos5433-cmu-cpif",
  825. exynos5433_cmu_cpif_init);
  826. /*
  827. * Register offset definitions for CMU_MIF
  828. */
  829. #define MEM0_PLL_LOCK 0x0000
  830. #define MEM1_PLL_LOCK 0x0004
  831. #define BUS_PLL_LOCK 0x0008
  832. #define MFC_PLL_LOCK 0x000c
  833. #define MEM0_PLL_CON0 0x0100
  834. #define MEM0_PLL_CON1 0x0104
  835. #define MEM0_PLL_FREQ_DET 0x010c
  836. #define MEM1_PLL_CON0 0x0110
  837. #define MEM1_PLL_CON1 0x0114
  838. #define MEM1_PLL_FREQ_DET 0x011c
  839. #define BUS_PLL_CON0 0x0120
  840. #define BUS_PLL_CON1 0x0124
  841. #define BUS_PLL_FREQ_DET 0x012c
  842. #define MFC_PLL_CON0 0x0130
  843. #define MFC_PLL_CON1 0x0134
  844. #define MFC_PLL_FREQ_DET 0x013c
  845. #define MUX_SEL_MIF0 0x0200
  846. #define MUX_SEL_MIF1 0x0204
  847. #define MUX_SEL_MIF2 0x0208
  848. #define MUX_SEL_MIF3 0x020c
  849. #define MUX_SEL_MIF4 0x0210
  850. #define MUX_SEL_MIF5 0x0214
  851. #define MUX_SEL_MIF6 0x0218
  852. #define MUX_SEL_MIF7 0x021c
  853. #define MUX_ENABLE_MIF0 0x0300
  854. #define MUX_ENABLE_MIF1 0x0304
  855. #define MUX_ENABLE_MIF2 0x0308
  856. #define MUX_ENABLE_MIF3 0x030c
  857. #define MUX_ENABLE_MIF4 0x0310
  858. #define MUX_ENABLE_MIF5 0x0314
  859. #define MUX_ENABLE_MIF6 0x0318
  860. #define MUX_ENABLE_MIF7 0x031c
  861. #define MUX_STAT_MIF0 0x0400
  862. #define MUX_STAT_MIF1 0x0404
  863. #define MUX_STAT_MIF2 0x0408
  864. #define MUX_STAT_MIF3 0x040c
  865. #define MUX_STAT_MIF4 0x0410
  866. #define MUX_STAT_MIF5 0x0414
  867. #define MUX_STAT_MIF6 0x0418
  868. #define MUX_STAT_MIF7 0x041c
  869. #define DIV_MIF1 0x0604
  870. #define DIV_MIF2 0x0608
  871. #define DIV_MIF3 0x060c
  872. #define DIV_MIF4 0x0610
  873. #define DIV_MIF5 0x0614
  874. #define DIV_MIF_PLL_FREQ_DET 0x0618
  875. #define DIV_STAT_MIF1 0x0704
  876. #define DIV_STAT_MIF2 0x0708
  877. #define DIV_STAT_MIF3 0x070c
  878. #define DIV_STAT_MIF4 0x0710
  879. #define DIV_STAT_MIF5 0x0714
  880. #define DIV_STAT_MIF_PLL_FREQ_DET 0x0718
  881. #define ENABLE_ACLK_MIF0 0x0800
  882. #define ENABLE_ACLK_MIF1 0x0804
  883. #define ENABLE_ACLK_MIF2 0x0808
  884. #define ENABLE_ACLK_MIF3 0x080c
  885. #define ENABLE_PCLK_MIF 0x0900
  886. #define ENABLE_PCLK_MIF_SECURE_DREX0_TZ 0x0904
  887. #define ENABLE_PCLK_MIF_SECURE_DREX1_TZ 0x0908
  888. #define ENABLE_PCLK_MIF_SECURE_MONOTONIC_CNT 0x090c
  889. #define ENABLE_PCLK_MIF_SECURE_RTC 0x0910
  890. #define ENABLE_SCLK_MIF 0x0a00
  891. #define ENABLE_IP_MIF0 0x0b00
  892. #define ENABLE_IP_MIF1 0x0b04
  893. #define ENABLE_IP_MIF2 0x0b08
  894. #define ENABLE_IP_MIF3 0x0b0c
  895. #define ENABLE_IP_MIF_SECURE_DREX0_TZ 0x0b10
  896. #define ENABLE_IP_MIF_SECURE_DREX1_TZ 0x0b14
  897. #define ENABLE_IP_MIF_SECURE_MONOTONIC_CNT 0x0b18
  898. #define ENABLE_IP_MIF_SECURE_RTC 0x0b1c
  899. #define CLKOUT_CMU_MIF 0x0c00
  900. #define CLKOUT_CMU_MIF_DIV_STAT 0x0c04
  901. #define DREX_FREQ_CTRL0 0x1000
  902. #define DREX_FREQ_CTRL1 0x1004
  903. #define PAUSE 0x1008
  904. #define DDRPHY_LOCK_CTRL 0x100c
  905. static unsigned long mif_clk_regs[] __initdata = {
  906. MEM0_PLL_LOCK,
  907. MEM1_PLL_LOCK,
  908. BUS_PLL_LOCK,
  909. MFC_PLL_LOCK,
  910. MEM0_PLL_CON0,
  911. MEM0_PLL_CON1,
  912. MEM0_PLL_FREQ_DET,
  913. MEM1_PLL_CON0,
  914. MEM1_PLL_CON1,
  915. MEM1_PLL_FREQ_DET,
  916. BUS_PLL_CON0,
  917. BUS_PLL_CON1,
  918. BUS_PLL_FREQ_DET,
  919. MFC_PLL_CON0,
  920. MFC_PLL_CON1,
  921. MFC_PLL_FREQ_DET,
  922. MUX_SEL_MIF0,
  923. MUX_SEL_MIF1,
  924. MUX_SEL_MIF2,
  925. MUX_SEL_MIF3,
  926. MUX_SEL_MIF4,
  927. MUX_SEL_MIF5,
  928. MUX_SEL_MIF6,
  929. MUX_SEL_MIF7,
  930. MUX_ENABLE_MIF0,
  931. MUX_ENABLE_MIF1,
  932. MUX_ENABLE_MIF2,
  933. MUX_ENABLE_MIF3,
  934. MUX_ENABLE_MIF4,
  935. MUX_ENABLE_MIF5,
  936. MUX_ENABLE_MIF6,
  937. MUX_ENABLE_MIF7,
  938. MUX_STAT_MIF0,
  939. MUX_STAT_MIF1,
  940. MUX_STAT_MIF2,
  941. MUX_STAT_MIF3,
  942. MUX_STAT_MIF4,
  943. MUX_STAT_MIF5,
  944. MUX_STAT_MIF6,
  945. MUX_STAT_MIF7,
  946. DIV_MIF1,
  947. DIV_MIF2,
  948. DIV_MIF3,
  949. DIV_MIF4,
  950. DIV_MIF5,
  951. DIV_MIF_PLL_FREQ_DET,
  952. DIV_STAT_MIF1,
  953. DIV_STAT_MIF2,
  954. DIV_STAT_MIF3,
  955. DIV_STAT_MIF4,
  956. DIV_STAT_MIF5,
  957. DIV_STAT_MIF_PLL_FREQ_DET,
  958. ENABLE_ACLK_MIF0,
  959. ENABLE_ACLK_MIF1,
  960. ENABLE_ACLK_MIF2,
  961. ENABLE_ACLK_MIF3,
  962. ENABLE_PCLK_MIF,
  963. ENABLE_PCLK_MIF_SECURE_DREX0_TZ,
  964. ENABLE_PCLK_MIF_SECURE_DREX1_TZ,
  965. ENABLE_PCLK_MIF_SECURE_MONOTONIC_CNT,
  966. ENABLE_PCLK_MIF_SECURE_RTC,
  967. ENABLE_SCLK_MIF,
  968. ENABLE_IP_MIF0,
  969. ENABLE_IP_MIF1,
  970. ENABLE_IP_MIF2,
  971. ENABLE_IP_MIF3,
  972. ENABLE_IP_MIF_SECURE_DREX0_TZ,
  973. ENABLE_IP_MIF_SECURE_DREX1_TZ,
  974. ENABLE_IP_MIF_SECURE_MONOTONIC_CNT,
  975. ENABLE_IP_MIF_SECURE_RTC,
  976. CLKOUT_CMU_MIF,
  977. CLKOUT_CMU_MIF_DIV_STAT,
  978. DREX_FREQ_CTRL0,
  979. DREX_FREQ_CTRL1,
  980. PAUSE,
  981. DDRPHY_LOCK_CTRL,
  982. };
  983. static struct samsung_pll_clock mif_pll_clks[] __initdata = {
  984. PLL(pll_35xx, CLK_FOUT_MEM0_PLL, "fout_mem0_pll", "oscclk",
  985. MEM0_PLL_LOCK, MEM0_PLL_CON0, exynos5443_pll_rates),
  986. PLL(pll_35xx, CLK_FOUT_MEM1_PLL, "fout_mem1_pll", "oscclk",
  987. MEM1_PLL_LOCK, MEM1_PLL_CON0, exynos5443_pll_rates),
  988. PLL(pll_35xx, CLK_FOUT_BUS_PLL, "fout_bus_pll", "oscclk",
  989. BUS_PLL_LOCK, BUS_PLL_CON0, exynos5443_pll_rates),
  990. PLL(pll_35xx, CLK_FOUT_MFC_PLL, "fout_mfc_pll", "oscclk",
  991. MFC_PLL_LOCK, MFC_PLL_CON0, exynos5443_pll_rates),
  992. };
  993. /* list of all parent clock list */
  994. PNAME(mout_mfc_pll_div2_p) = { "mout_mfc_pll", "dout_mfc_pll", };
  995. PNAME(mout_bus_pll_div2_p) = { "mout_bus_pll", "dout_bus_pll", };
  996. PNAME(mout_mem1_pll_div2_p) = { "mout_mem1_pll", "dout_mem1_pll", };
  997. PNAME(mout_mem0_pll_div2_p) = { "mout_mem0_pll", "dout_mem0_pll", };
  998. PNAME(mout_mfc_pll_p) = { "oscclk", "fout_mfc_pll", };
  999. PNAME(mout_bus_pll_p) = { "oscclk", "fout_bus_pll", };
  1000. PNAME(mout_mem1_pll_p) = { "oscclk", "fout_mem1_pll", };
  1001. PNAME(mout_mem0_pll_p) = { "oscclk", "fout_mem0_pll", };
  1002. PNAME(mout_clk2x_phy_c_p) = { "mout_mem0_pll_div2", "mout_clkm_phy_b", };
  1003. PNAME(mout_clk2x_phy_b_p) = { "mout_bus_pll_div2", "mout_clkm_phy_a", };
  1004. PNAME(mout_clk2x_phy_a_p) = { "mout_bus_pll_div2", "mout_mfc_pll_div2", };
  1005. PNAME(mout_clkm_phy_b_p) = { "mout_mem1_pll_div2", "mout_clkm_phy_a", };
  1006. PNAME(mout_aclk_mifnm_200_p) = { "mout_mem0_pll_div2", "div_mif_pre", };
  1007. PNAME(mout_aclk_mifnm_400_p) = { "mout_mem1_pll_div2", "mout_bus_pll_div2",};
  1008. PNAME(mout_aclk_disp_333_b_p) = { "mout_aclk_disp_333_a",
  1009. "mout_bus_pll_div2", };
  1010. PNAME(mout_aclk_disp_333_a_p) = { "mout_mfc_pll_div2", "sclk_mphy_pll", };
  1011. PNAME(mout_sclk_decon_vclk_c_p) = { "mout_sclk_decon_vclk_b",
  1012. "sclk_mphy_pll", };
  1013. PNAME(mout_sclk_decon_vclk_b_p) = { "mout_sclk_decon_vclk_a",
  1014. "mout_mfc_pll_div2", };
  1015. PNAME(mout_sclk_decon_p) = { "oscclk", "mout_bus_pll_div2", };
  1016. PNAME(mout_sclk_decon_eclk_c_p) = { "mout_sclk_decon_eclk_b",
  1017. "sclk_mphy_pll", };
  1018. PNAME(mout_sclk_decon_eclk_b_p) = { "mout_sclk_decon_eclk_a",
  1019. "mout_mfc_pll_div2", };
  1020. PNAME(mout_sclk_decon_tv_eclk_c_p) = { "mout_sclk_decon_tv_eclk_b",
  1021. "sclk_mphy_pll", };
  1022. PNAME(mout_sclk_decon_tv_eclk_b_p) = { "mout_sclk_decon_tv_eclk_a",
  1023. "mout_mfc_pll_div2", };
  1024. PNAME(mout_sclk_dsd_c_p) = { "mout_sclk_dsd_b", "mout_bus_pll_div2", };
  1025. PNAME(mout_sclk_dsd_b_p) = { "mout_sclk_dsd_a", "sclk_mphy_pll", };
  1026. PNAME(mout_sclk_dsd_a_p) = { "oscclk", "mout_mfc_pll_div2", };
  1027. PNAME(mout_sclk_dsim0_c_p) = { "mout_sclk_dsim0_b", "sclk_mphy_pll", };
  1028. PNAME(mout_sclk_dsim0_b_p) = { "mout_sclk_dsim0_a", "mout_mfc_pll_div2" };
  1029. PNAME(mout_sclk_decon_tv_vclk_c_p) = { "mout_sclk_decon_tv_vclk_b",
  1030. "sclk_mphy_pll", };
  1031. PNAME(mout_sclk_decon_tv_vclk_b_p) = { "mout_sclk_decon_tv_vclk_a",
  1032. "mout_mfc_pll_div2", };
  1033. PNAME(mout_sclk_dsim1_c_p) = { "mout_sclk_dsim1_b", "sclk_mphy_pll", };
  1034. PNAME(mout_sclk_dsim1_b_p) = { "mout_sclk_dsim1_a", "mout_mfc_pll_div2",};
  1035. static struct samsung_fixed_factor_clock mif_fixed_factor_clks[] __initdata = {
  1036. /* dout_{mfc|bus|mem1|mem0}_pll is half fixed rate from parent mux */
  1037. FFACTOR(CLK_DOUT_MFC_PLL, "dout_mfc_pll", "mout_mfc_pll", 1, 1, 0),
  1038. FFACTOR(CLK_DOUT_BUS_PLL, "dout_bus_pll", "mout_bus_pll", 1, 1, 0),
  1039. FFACTOR(CLK_DOUT_MEM1_PLL, "dout_mem1_pll", "mout_mem1_pll", 1, 1, 0),
  1040. FFACTOR(CLK_DOUT_MEM0_PLL, "dout_mem0_pll", "mout_mem0_pll", 1, 1, 0),
  1041. };
  1042. static struct samsung_mux_clock mif_mux_clks[] __initdata = {
  1043. /* MUX_SEL_MIF0 */
  1044. MUX(CLK_MOUT_MFC_PLL_DIV2, "mout_mfc_pll_div2", mout_mfc_pll_div2_p,
  1045. MUX_SEL_MIF0, 28, 1),
  1046. MUX(CLK_MOUT_BUS_PLL_DIV2, "mout_bus_pll_div2", mout_bus_pll_div2_p,
  1047. MUX_SEL_MIF0, 24, 1),
  1048. MUX(CLK_MOUT_MEM1_PLL_DIV2, "mout_mem1_pll_div2", mout_mem1_pll_div2_p,
  1049. MUX_SEL_MIF0, 20, 1),
  1050. MUX(CLK_MOUT_MEM0_PLL_DIV2, "mout_mem0_pll_div2", mout_mem0_pll_div2_p,
  1051. MUX_SEL_MIF0, 16, 1),
  1052. MUX(CLK_MOUT_MFC_PLL, "mout_mfc_pll", mout_mfc_pll_p, MUX_SEL_MIF0,
  1053. 12, 1),
  1054. MUX(CLK_MOUT_BUS_PLL, "mout_bus_pll", mout_bus_pll_p, MUX_SEL_MIF0,
  1055. 8, 1),
  1056. MUX(CLK_MOUT_MEM1_PLL, "mout_mem1_pll", mout_mem1_pll_p, MUX_SEL_MIF0,
  1057. 4, 1),
  1058. MUX(CLK_MOUT_MEM0_PLL, "mout_mem0_pll", mout_mem0_pll_p, MUX_SEL_MIF0,
  1059. 0, 1),
  1060. /* MUX_SEL_MIF1 */
  1061. MUX(CLK_MOUT_CLK2X_PHY_C, "mout_clk2x_phy_c", mout_clk2x_phy_c_p,
  1062. MUX_SEL_MIF1, 24, 1),
  1063. MUX(CLK_MOUT_CLK2X_PHY_B, "mout_clk2x_phy_b", mout_clk2x_phy_b_p,
  1064. MUX_SEL_MIF1, 20, 1),
  1065. MUX(CLK_MOUT_CLK2X_PHY_A, "mout_clk2x_phy_a", mout_clk2x_phy_a_p,
  1066. MUX_SEL_MIF1, 16, 1),
  1067. MUX(CLK_MOUT_CLKM_PHY_C, "mout_clkm_phy_c", mout_clk2x_phy_c_p,
  1068. MUX_SEL_MIF1, 12, 1),
  1069. MUX(CLK_MOUT_CLKM_PHY_B, "mout_clkm_phy_b", mout_clkm_phy_b_p,
  1070. MUX_SEL_MIF1, 8, 1),
  1071. MUX(CLK_MOUT_CLKM_PHY_A, "mout_clkm_phy_a", mout_clk2x_phy_a_p,
  1072. MUX_SEL_MIF1, 4, 1),
  1073. /* MUX_SEL_MIF2 */
  1074. MUX(CLK_MOUT_ACLK_MIFNM_200, "mout_aclk_mifnm_200",
  1075. mout_aclk_mifnm_200_p, MUX_SEL_MIF2, 8, 1),
  1076. MUX(CLK_MOUT_ACLK_MIFNM_400, "mout_aclk_mifnm_400",
  1077. mout_aclk_mifnm_400_p, MUX_SEL_MIF2, 0, 1),
  1078. /* MUX_SEL_MIF3 */
  1079. MUX(CLK_MOUT_ACLK_DISP_333_B, "mout_aclk_disp_333_b",
  1080. mout_aclk_disp_333_b_p, MUX_SEL_MIF3, 4, 1),
  1081. MUX(CLK_MOUT_ACLK_DISP_333_A, "mout_aclk_disp_333_a",
  1082. mout_aclk_disp_333_a_p, MUX_SEL_MIF3, 0, 1),
  1083. /* MUX_SEL_MIF4 */
  1084. MUX(CLK_MOUT_SCLK_DECON_VCLK_C, "mout_sclk_decon_vclk_c",
  1085. mout_sclk_decon_vclk_c_p, MUX_SEL_MIF4, 24, 1),
  1086. MUX(CLK_MOUT_SCLK_DECON_VCLK_B, "mout_sclk_decon_vclk_b",
  1087. mout_sclk_decon_vclk_b_p, MUX_SEL_MIF4, 20, 1),
  1088. MUX(CLK_MOUT_SCLK_DECON_VCLK_A, "mout_sclk_decon_vclk_a",
  1089. mout_sclk_decon_p, MUX_SEL_MIF4, 16, 1),
  1090. MUX(CLK_MOUT_SCLK_DECON_ECLK_C, "mout_sclk_decon_eclk_c",
  1091. mout_sclk_decon_eclk_c_p, MUX_SEL_MIF4, 8, 1),
  1092. MUX(CLK_MOUT_SCLK_DECON_ECLK_B, "mout_sclk_decon_eclk_b",
  1093. mout_sclk_decon_eclk_b_p, MUX_SEL_MIF4, 4, 1),
  1094. MUX(CLK_MOUT_SCLK_DECON_ECLK_A, "mout_sclk_decon_eclk_a",
  1095. mout_sclk_decon_p, MUX_SEL_MIF4, 0, 1),
  1096. /* MUX_SEL_MIF5 */
  1097. MUX(CLK_MOUT_SCLK_DECON_TV_ECLK_C, "mout_sclk_decon_tv_eclk_c",
  1098. mout_sclk_decon_tv_eclk_c_p, MUX_SEL_MIF5, 24, 1),
  1099. MUX(CLK_MOUT_SCLK_DECON_TV_ECLK_B, "mout_sclk_decon_tv_eclk_b",
  1100. mout_sclk_decon_tv_eclk_b_p, MUX_SEL_MIF5, 20, 1),
  1101. MUX(CLK_MOUT_SCLK_DECON_TV_ECLK_A, "mout_sclk_decon_tv_eclk_a",
  1102. mout_sclk_decon_p, MUX_SEL_MIF5, 16, 1),
  1103. MUX(CLK_MOUT_SCLK_DSD_C, "mout_sclk_dsd_c", mout_sclk_dsd_c_p,
  1104. MUX_SEL_MIF5, 8, 1),
  1105. MUX(CLK_MOUT_SCLK_DSD_B, "mout_sclk_dsd_b", mout_sclk_dsd_b_p,
  1106. MUX_SEL_MIF5, 4, 1),
  1107. MUX(CLK_MOUT_SCLK_DSD_A, "mout_sclk_dsd_a", mout_sclk_dsd_a_p,
  1108. MUX_SEL_MIF5, 0, 1),
  1109. /* MUX_SEL_MIF6 */
  1110. MUX(CLK_MOUT_SCLK_DSIM0_C, "mout_sclk_dsim0_c", mout_sclk_dsim0_c_p,
  1111. MUX_SEL_MIF6, 8, 1),
  1112. MUX(CLK_MOUT_SCLK_DSIM0_B, "mout_sclk_dsim0_b", mout_sclk_dsim0_b_p,
  1113. MUX_SEL_MIF6, 4, 1),
  1114. MUX(CLK_MOUT_SCLK_DSIM0_A, "mout_sclk_dsim0_a", mout_sclk_decon_p,
  1115. MUX_SEL_MIF6, 0, 1),
  1116. /* MUX_SEL_MIF7 */
  1117. MUX(CLK_MOUT_SCLK_DECON_TV_VCLK_C, "mout_sclk_decon_tv_vclk_c",
  1118. mout_sclk_decon_tv_vclk_c_p, MUX_SEL_MIF7, 24, 1),
  1119. MUX(CLK_MOUT_SCLK_DECON_TV_VCLK_B, "mout_sclk_decon_tv_vclk_b",
  1120. mout_sclk_decon_tv_vclk_b_p, MUX_SEL_MIF7, 20, 1),
  1121. MUX(CLK_MOUT_SCLK_DECON_TV_VCLK_A, "mout_sclk_decon_tv_vclk_a",
  1122. mout_sclk_decon_p, MUX_SEL_MIF7, 16, 1),
  1123. MUX(CLK_MOUT_SCLK_DSIM1_C, "mout_sclk_dsim1_c", mout_sclk_dsim1_c_p,
  1124. MUX_SEL_MIF7, 8, 1),
  1125. MUX(CLK_MOUT_SCLK_DSIM1_B, "mout_sclk_dsim1_b", mout_sclk_dsim1_b_p,
  1126. MUX_SEL_MIF7, 4, 1),
  1127. MUX(CLK_MOUT_SCLK_DSIM1_A, "mout_sclk_dsim1_a", mout_sclk_decon_p,
  1128. MUX_SEL_MIF7, 0, 1),
  1129. };
  1130. static struct samsung_div_clock mif_div_clks[] __initdata = {
  1131. /* DIV_MIF1 */
  1132. DIV(CLK_DIV_SCLK_HPM_MIF, "div_sclk_hpm_mif", "div_clk2x_phy",
  1133. DIV_MIF1, 16, 2),
  1134. DIV(CLK_DIV_ACLK_DREX1, "div_aclk_drex1", "div_clk2x_phy", DIV_MIF1,
  1135. 12, 2),
  1136. DIV(CLK_DIV_ACLK_DREX0, "div_aclk_drex0", "div_clk2x_phy", DIV_MIF1,
  1137. 8, 2),
  1138. DIV(CLK_DIV_CLK2XPHY, "div_clk2x_phy", "mout_clk2x_phy_c", DIV_MIF1,
  1139. 4, 4),
  1140. /* DIV_MIF2 */
  1141. DIV(CLK_DIV_ACLK_MIF_266, "div_aclk_mif_266", "mout_bus_pll_div2",
  1142. DIV_MIF2, 20, 3),
  1143. DIV(CLK_DIV_ACLK_MIFND_133, "div_aclk_mifnd_133", "div_mif_pre",
  1144. DIV_MIF2, 16, 4),
  1145. DIV(CLK_DIV_ACLK_MIF_133, "div_aclk_mif_133", "div_mif_pre",
  1146. DIV_MIF2, 12, 4),
  1147. DIV(CLK_DIV_ACLK_MIFNM_200, "div_aclk_mifnm_200",
  1148. "mout_aclk_mifnm_200", DIV_MIF2, 8, 3),
  1149. DIV(CLK_DIV_ACLK_MIF_200, "div_aclk_mif_200", "div_aclk_mif_400",
  1150. DIV_MIF2, 4, 2),
  1151. DIV(CLK_DIV_ACLK_MIF_400, "div_aclk_mif_400", "mout_aclk_mifnm_400",
  1152. DIV_MIF2, 0, 3),
  1153. /* DIV_MIF3 */
  1154. DIV(CLK_DIV_ACLK_BUS2_400, "div_aclk_bus2_400", "div_mif_pre",
  1155. DIV_MIF3, 16, 4),
  1156. DIV(CLK_DIV_ACLK_DISP_333, "div_aclk_disp_333", "mout_aclk_disp_333_b",
  1157. DIV_MIF3, 4, 3),
  1158. DIV(CLK_DIV_ACLK_CPIF_200, "div_aclk_cpif_200", "mout_aclk_mifnm_200",
  1159. DIV_MIF3, 0, 3),
  1160. /* DIV_MIF4 */
  1161. DIV(CLK_DIV_SCLK_DSIM1, "div_sclk_dsim1", "mout_sclk_dsim1_c",
  1162. DIV_MIF4, 24, 4),
  1163. DIV(CLK_DIV_SCLK_DECON_TV_VCLK, "div_sclk_decon_tv_vclk",
  1164. "mout_sclk_decon_tv_vclk_c", DIV_MIF4, 20, 4),
  1165. DIV(CLK_DIV_SCLK_DSIM0, "div_sclk_dsim0", "mout_sclk_dsim0_c",
  1166. DIV_MIF4, 16, 4),
  1167. DIV(CLK_DIV_SCLK_DSD, "div_sclk_dsd", "mout_sclk_dsd_c",
  1168. DIV_MIF4, 12, 4),
  1169. DIV(CLK_DIV_SCLK_DECON_TV_ECLK, "div_sclk_decon_tv_eclk",
  1170. "mout_sclk_decon_tv_eclk_c", DIV_MIF4, 8, 4),
  1171. DIV(CLK_DIV_SCLK_DECON_VCLK, "div_sclk_decon_vclk",
  1172. "mout_sclk_decon_vclk_c", DIV_MIF4, 4, 4),
  1173. DIV(CLK_DIV_SCLK_DECON_ECLK, "div_sclk_decon_eclk",
  1174. "mout_sclk_decon_eclk_c", DIV_MIF4, 0, 4),
  1175. /* DIV_MIF5 */
  1176. DIV(CLK_DIV_MIF_PRE, "div_mif_pre", "mout_bus_pll_div2", DIV_MIF5,
  1177. 0, 3),
  1178. };
  1179. static struct samsung_gate_clock mif_gate_clks[] __initdata = {
  1180. /* ENABLE_ACLK_MIF0 */
  1181. GATE(CLK_CLK2X_PHY1, "clk2k_phy1", "div_clk2x_phy", ENABLE_ACLK_MIF0,
  1182. 19, CLK_IGNORE_UNUSED, 0),
  1183. GATE(CLK_CLK2X_PHY0, "clk2x_phy0", "div_clk2x_phy", ENABLE_ACLK_MIF0,
  1184. 18, CLK_IGNORE_UNUSED, 0),
  1185. GATE(CLK_CLKM_PHY1, "clkm_phy1", "mout_clkm_phy_c", ENABLE_ACLK_MIF0,
  1186. 17, CLK_IGNORE_UNUSED, 0),
  1187. GATE(CLK_CLKM_PHY0, "clkm_phy0", "mout_clkm_phy_c", ENABLE_ACLK_MIF0,
  1188. 16, CLK_IGNORE_UNUSED, 0),
  1189. GATE(CLK_RCLK_DREX1, "rclk_drex1", "oscclk", ENABLE_ACLK_MIF0,
  1190. 15, CLK_IGNORE_UNUSED, 0),
  1191. GATE(CLK_RCLK_DREX0, "rclk_drex0", "oscclk", ENABLE_ACLK_MIF0,
  1192. 14, CLK_IGNORE_UNUSED, 0),
  1193. GATE(CLK_ACLK_DREX1_TZ, "aclk_drex1_tz", "div_aclk_drex1",
  1194. ENABLE_ACLK_MIF0, 13, CLK_IGNORE_UNUSED, 0),
  1195. GATE(CLK_ACLK_DREX0_TZ, "aclk_drex0_tz", "div_aclk_drex0",
  1196. ENABLE_ACLK_MIF0, 12, CLK_IGNORE_UNUSED, 0),
  1197. GATE(CLK_ACLK_DREX1_PEREV, "aclk_drex1_perev", "div_aclk_drex1",
  1198. ENABLE_ACLK_MIF0, 11, CLK_IGNORE_UNUSED, 0),
  1199. GATE(CLK_ACLK_DREX0_PEREV, "aclk_drex0_perev", "div_aclk_drex0",
  1200. ENABLE_ACLK_MIF0, 10, CLK_IGNORE_UNUSED, 0),
  1201. GATE(CLK_ACLK_DREX1_MEMIF, "aclk_drex1_memif", "div_aclk_drex1",
  1202. ENABLE_ACLK_MIF0, 9, CLK_IGNORE_UNUSED, 0),
  1203. GATE(CLK_ACLK_DREX0_MEMIF, "aclk_drex0_memif", "div_aclk_drex0",
  1204. ENABLE_ACLK_MIF0, 8, CLK_IGNORE_UNUSED, 0),
  1205. GATE(CLK_ACLK_DREX1_SCH, "aclk_drex1_sch", "div_aclk_drex1",
  1206. ENABLE_ACLK_MIF0, 7, CLK_IGNORE_UNUSED, 0),
  1207. GATE(CLK_ACLK_DREX0_SCH, "aclk_drex0_sch", "div_aclk_drex0",
  1208. ENABLE_ACLK_MIF0, 6, CLK_IGNORE_UNUSED, 0),
  1209. GATE(CLK_ACLK_DREX1_BUSIF, "aclk_drex1_busif", "div_aclk_drex1",
  1210. ENABLE_ACLK_MIF0, 5, CLK_IGNORE_UNUSED, 0),
  1211. GATE(CLK_ACLK_DREX0_BUSIF, "aclk_drex0_busif", "div_aclk_drex0",
  1212. ENABLE_ACLK_MIF0, 4, CLK_IGNORE_UNUSED, 0),
  1213. GATE(CLK_ACLK_DREX1_BUSIF_RD, "aclk_drex1_busif_rd", "div_aclk_drex1",
  1214. ENABLE_ACLK_MIF0, 3, CLK_IGNORE_UNUSED, 0),
  1215. GATE(CLK_ACLK_DREX0_BUSIF_RD, "aclk_drex0_busif_rd", "div_aclk_drex0",
  1216. ENABLE_ACLK_MIF0, 2, CLK_IGNORE_UNUSED, 0),
  1217. GATE(CLK_ACLK_DREX1, "aclk_drex1", "div_aclk_drex1",
  1218. ENABLE_ACLK_MIF0, 2, CLK_IGNORE_UNUSED, 0),
  1219. GATE(CLK_ACLK_DREX0, "aclk_drex0", "div_aclk_drex0",
  1220. ENABLE_ACLK_MIF0, 1, CLK_IGNORE_UNUSED, 0),
  1221. /* ENABLE_ACLK_MIF1 */
  1222. GATE(CLK_ACLK_ASYNCAXIS_MIF_IMEM, "aclk_asyncaxis_mif_imem",
  1223. "div_aclk_mif_200", ENABLE_ACLK_MIF1, 28,
  1224. CLK_IGNORE_UNUSED, 0),
  1225. GATE(CLK_ACLK_ASYNCAXIS_NOC_P_CCI, "aclk_asyncaxis_noc_p_cci",
  1226. "div_aclk_mif_200", ENABLE_ACLK_MIF1,
  1227. 27, CLK_IGNORE_UNUSED, 0),
  1228. GATE(CLK_ACLK_ASYNCAXIM_NOC_P_CCI, "aclk_asyncaxim_noc_p_cci",
  1229. "div_aclk_mif_133", ENABLE_ACLK_MIF1,
  1230. 26, CLK_IGNORE_UNUSED, 0),
  1231. GATE(CLK_ACLK_ASYNCAXIS_CP1, "aclk_asyncaxis_cp1",
  1232. "div_aclk_mifnm_200", ENABLE_ACLK_MIF1,
  1233. 25, CLK_IGNORE_UNUSED, 0),
  1234. GATE(CLK_ACLK_ASYNCAXIM_CP1, "aclk_asyncaxim_cp1",
  1235. "div_aclk_drex1", ENABLE_ACLK_MIF1,
  1236. 24, CLK_IGNORE_UNUSED, 0),
  1237. GATE(CLK_ACLK_ASYNCAXIS_CP0, "aclk_asyncaxis_cp0",
  1238. "div_aclk_mifnm_200", ENABLE_ACLK_MIF1,
  1239. 23, CLK_IGNORE_UNUSED, 0),
  1240. GATE(CLK_ACLK_ASYNCAXIM_CP0, "aclk_asyncaxim_cp0",
  1241. "div_aclk_drex0", ENABLE_ACLK_MIF1,
  1242. 22, CLK_IGNORE_UNUSED, 0),
  1243. GATE(CLK_ACLK_ASYNCAXIS_DREX1_3, "aclk_asyncaxis_drex1_3",
  1244. "div_aclk_mif_133", ENABLE_ACLK_MIF1,
  1245. 21, CLK_IGNORE_UNUSED, 0),
  1246. GATE(CLK_ACLK_ASYNCAXIM_DREX1_3, "aclk_asyncaxim_drex1_3",
  1247. "div_aclk_drex1", ENABLE_ACLK_MIF1,
  1248. 20, CLK_IGNORE_UNUSED, 0),
  1249. GATE(CLK_ACLK_ASYNCAXIS_DREX1_1, "aclk_asyncaxis_drex1_1",
  1250. "div_aclk_mif_133", ENABLE_ACLK_MIF1,
  1251. 19, CLK_IGNORE_UNUSED, 0),
  1252. GATE(CLK_ACLK_ASYNCAXIM_DREX1_1, "aclk_asyncaxim_drex1_1",
  1253. "div_aclk_drex1", ENABLE_ACLK_MIF1,
  1254. 18, CLK_IGNORE_UNUSED, 0),
  1255. GATE(CLK_ACLK_ASYNCAXIS_DREX1_0, "aclk_asyncaxis_drex1_0",
  1256. "div_aclk_mif_133", ENABLE_ACLK_MIF1,
  1257. 17, CLK_IGNORE_UNUSED, 0),
  1258. GATE(CLK_ACLK_ASYNCAXIM_DREX1_0, "aclk_asyncaxim_drex1_0",
  1259. "div_aclk_drex1", ENABLE_ACLK_MIF1,
  1260. 16, CLK_IGNORE_UNUSED, 0),
  1261. GATE(CLK_ACLK_ASYNCAXIS_DREX0_3, "aclk_asyncaxis_drex0_3",
  1262. "div_aclk_mif_133", ENABLE_ACLK_MIF1,
  1263. 15, CLK_IGNORE_UNUSED, 0),
  1264. GATE(CLK_ACLK_ASYNCAXIM_DREX0_3, "aclk_asyncaxim_drex0_3",
  1265. "div_aclk_drex0", ENABLE_ACLK_MIF1,
  1266. 14, CLK_IGNORE_UNUSED, 0),
  1267. GATE(CLK_ACLK_ASYNCAXIS_DREX0_1, "aclk_asyncaxis_drex0_1",
  1268. "div_aclk_mif_133", ENABLE_ACLK_MIF1,
  1269. 13, CLK_IGNORE_UNUSED, 0),
  1270. GATE(CLK_ACLK_ASYNCAXIM_DREX0_1, "aclk_asyncaxim_drex0_1",
  1271. "div_aclk_drex0", ENABLE_ACLK_MIF1,
  1272. 12, CLK_IGNORE_UNUSED, 0),
  1273. GATE(CLK_ACLK_ASYNCAXIS_DREX0_0, "aclk_asyncaxis_drex0_0",
  1274. "div_aclk_mif_133", ENABLE_ACLK_MIF1,
  1275. 11, CLK_IGNORE_UNUSED, 0),
  1276. GATE(CLK_ACLK_ASYNCAXIM_DREX0_0, "aclk_asyncaxim_drex0_0",
  1277. "div_aclk_drex0", ENABLE_ACLK_MIF1,
  1278. 10, CLK_IGNORE_UNUSED, 0),
  1279. GATE(CLK_ACLK_AHB2APB_MIF2P, "aclk_ahb2apb_mif2p", "div_aclk_mif_133",
  1280. ENABLE_ACLK_MIF1, 9, CLK_IGNORE_UNUSED, 0),
  1281. GATE(CLK_ACLK_AHB2APB_MIF1P, "aclk_ahb2apb_mif1p", "div_aclk_mif_133",
  1282. ENABLE_ACLK_MIF1, 8, CLK_IGNORE_UNUSED, 0),
  1283. GATE(CLK_ACLK_AHB2APB_MIF0P, "aclk_ahb2apb_mif0p", "div_aclk_mif_133",
  1284. ENABLE_ACLK_MIF1, 7, CLK_IGNORE_UNUSED, 0),
  1285. GATE(CLK_ACLK_IXIU_CCI, "aclk_ixiu_cci", "div_aclk_mif_400",
  1286. ENABLE_ACLK_MIF1, 6, CLK_IGNORE_UNUSED, 0),
  1287. GATE(CLK_ACLK_XIU_MIFSFRX, "aclk_xiu_mifsfrx", "div_aclk_mif_200",
  1288. ENABLE_ACLK_MIF1, 5, CLK_IGNORE_UNUSED, 0),
  1289. GATE(CLK_ACLK_MIFNP_133, "aclk_mifnp_133", "div_aclk_mif_133",
  1290. ENABLE_ACLK_MIF1, 4, CLK_IGNORE_UNUSED, 0),
  1291. GATE(CLK_ACLK_MIFNM_200, "aclk_mifnm_200", "div_aclk_mifnm_200",
  1292. ENABLE_ACLK_MIF1, 3, CLK_IGNORE_UNUSED, 0),
  1293. GATE(CLK_ACLK_MIFND_133, "aclk_mifnd_133", "div_aclk_mifnd_133",
  1294. ENABLE_ACLK_MIF1, 2, CLK_IGNORE_UNUSED, 0),
  1295. GATE(CLK_ACLK_MIFND_400, "aclk_mifnd_400", "div_aclk_mif_400",
  1296. ENABLE_ACLK_MIF1, 1, CLK_IGNORE_UNUSED, 0),
  1297. GATE(CLK_ACLK_CCI, "aclk_cci", "div_aclk_mif_400", ENABLE_ACLK_MIF1,
  1298. 0, CLK_IGNORE_UNUSED, 0),
  1299. /* ENABLE_ACLK_MIF2 */
  1300. GATE(CLK_ACLK_MIFND_266, "aclk_mifnd_266", "div_aclk_mif_266",
  1301. ENABLE_ACLK_MIF2, 20, CLK_IGNORE_UNUSED, 0),
  1302. GATE(CLK_ACLK_PPMU_DREX1S3, "aclk_ppmu_drex1s3", "div_aclk_drex1",
  1303. ENABLE_ACLK_MIF2, 17, CLK_IGNORE_UNUSED, 0),
  1304. GATE(CLK_ACLK_PPMU_DREX1S1, "aclk_ppmu_drex1s1", "div_aclk_drex1",
  1305. ENABLE_ACLK_MIF2, 16, CLK_IGNORE_UNUSED, 0),
  1306. GATE(CLK_ACLK_PPMU_DREX1S0, "aclk_ppmu_drex1s0", "div_aclk_drex1",
  1307. ENABLE_ACLK_MIF2, 15, CLK_IGNORE_UNUSED, 0),
  1308. GATE(CLK_ACLK_PPMU_DREX0S3, "aclk_ppmu_drex0s3", "div_aclk_drex0",
  1309. ENABLE_ACLK_MIF2, 14, CLK_IGNORE_UNUSED, 0),
  1310. GATE(CLK_ACLK_PPMU_DREX0S1, "aclk_ppmu_drex0s1", "div_aclk_drex0",
  1311. ENABLE_ACLK_MIF2, 13, CLK_IGNORE_UNUSED, 0),
  1312. GATE(CLK_ACLK_PPMU_DREX0S0, "aclk_ppmu_drex0s0", "div_aclk_drex0",
  1313. ENABLE_ACLK_MIF2, 12, CLK_IGNORE_UNUSED, 0),
  1314. GATE(CLK_ACLK_AXIDS_CCI_MIFSFRX, "aclk_axids_cci_mifsfrx",
  1315. "div_aclk_mif_200", ENABLE_ACLK_MIF2, 7,
  1316. CLK_IGNORE_UNUSED, 0),
  1317. GATE(CLK_ACLK_AXISYNCDNS_CCI, "aclk_axisyncdns_cci",
  1318. "div_aclk_mif_400", ENABLE_ACLK_MIF2,
  1319. 5, CLK_IGNORE_UNUSED, 0),
  1320. GATE(CLK_ACLK_AXISYNCDN_CCI, "aclk_axisyncdn_cci", "div_aclk_mif_400",
  1321. ENABLE_ACLK_MIF2, 4, CLK_IGNORE_UNUSED, 0),
  1322. GATE(CLK_ACLK_AXISYNCDN_NOC_D, "aclk_axisyncdn_noc_d",
  1323. "div_aclk_mif_200", ENABLE_ACLK_MIF2,
  1324. 3, CLK_IGNORE_UNUSED, 0),
  1325. GATE(CLK_ACLK_ASYNCAPBS_MIF_CSSYS, "aclk_asyncapbs_mif_cssys",
  1326. "div_aclk_mifnd_133", ENABLE_ACLK_MIF2, 0, 0, 0),
  1327. /* ENABLE_ACLK_MIF3 */
  1328. GATE(CLK_ACLK_BUS2_400, "aclk_bus2_400", "div_aclk_bus2_400",
  1329. ENABLE_ACLK_MIF3, 4,
  1330. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  1331. GATE(CLK_ACLK_DISP_333, "aclk_disp_333", "div_aclk_disp_333",
  1332. ENABLE_ACLK_MIF3, 1,
  1333. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  1334. GATE(CLK_ACLK_CPIF_200, "aclk_cpif_200", "div_aclk_cpif_200",
  1335. ENABLE_ACLK_MIF3, 0,
  1336. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  1337. /* ENABLE_PCLK_MIF */
  1338. GATE(CLK_PCLK_PPMU_DREX1S3, "pclk_ppmu_drex1s3", "div_aclk_drex1",
  1339. ENABLE_PCLK_MIF, 29, CLK_IGNORE_UNUSED, 0),
  1340. GATE(CLK_PCLK_PPMU_DREX1S1, "pclk_ppmu_drex1s1", "div_aclk_drex1",
  1341. ENABLE_PCLK_MIF, 28, CLK_IGNORE_UNUSED, 0),
  1342. GATE(CLK_PCLK_PPMU_DREX1S0, "pclk_ppmu_drex1s0", "div_aclk_drex1",
  1343. ENABLE_PCLK_MIF, 27, CLK_IGNORE_UNUSED, 0),
  1344. GATE(CLK_PCLK_PPMU_DREX0S3, "pclk_ppmu_drex0s3", "div_aclk_drex0",
  1345. ENABLE_PCLK_MIF, 26, CLK_IGNORE_UNUSED, 0),
  1346. GATE(CLK_PCLK_PPMU_DREX0S1, "pclk_ppmu_drex0s1", "div_aclk_drex0",
  1347. ENABLE_PCLK_MIF, 25, CLK_IGNORE_UNUSED, 0),
  1348. GATE(CLK_PCLK_PPMU_DREX0S0, "pclk_ppmu_drex0s0", "div_aclk_drex0",
  1349. ENABLE_PCLK_MIF, 24, CLK_IGNORE_UNUSED, 0),
  1350. GATE(CLK_PCLK_ASYNCAXI_NOC_P_CCI, "pclk_asyncaxi_noc_p_cci",
  1351. "div_aclk_mif_133", ENABLE_PCLK_MIF, 21,
  1352. CLK_IGNORE_UNUSED, 0),
  1353. GATE(CLK_PCLK_ASYNCAXI_CP1, "pclk_asyncaxi_cp1", "div_aclk_mif_133",
  1354. ENABLE_PCLK_MIF, 19, 0, 0),
  1355. GATE(CLK_PCLK_ASYNCAXI_CP0, "pclk_asyncaxi_cp0", "div_aclk_mif_133",
  1356. ENABLE_PCLK_MIF, 18, 0, 0),
  1357. GATE(CLK_PCLK_ASYNCAXI_DREX1_3, "pclk_asyncaxi_drex1_3",
  1358. "div_aclk_mif_133", ENABLE_PCLK_MIF, 17, 0, 0),
  1359. GATE(CLK_PCLK_ASYNCAXI_DREX1_1, "pclk_asyncaxi_drex1_1",
  1360. "div_aclk_mif_133", ENABLE_PCLK_MIF, 16, 0, 0),
  1361. GATE(CLK_PCLK_ASYNCAXI_DREX1_0, "pclk_asyncaxi_drex1_0",
  1362. "div_aclk_mif_133", ENABLE_PCLK_MIF, 15, 0, 0),
  1363. GATE(CLK_PCLK_ASYNCAXI_DREX0_3, "pclk_asyncaxi_drex0_3",
  1364. "div_aclk_mif_133", ENABLE_PCLK_MIF, 14, 0, 0),
  1365. GATE(CLK_PCLK_ASYNCAXI_DREX0_1, "pclk_asyncaxi_drex0_1",
  1366. "div_aclk_mif_133", ENABLE_PCLK_MIF, 13, 0, 0),
  1367. GATE(CLK_PCLK_ASYNCAXI_DREX0_0, "pclk_asyncaxi_drex0_0",
  1368. "div_aclk_mif_133", ENABLE_PCLK_MIF, 12, 0, 0),
  1369. GATE(CLK_PCLK_MIFSRVND_133, "pclk_mifsrvnd_133", "div_aclk_mif_133",
  1370. ENABLE_PCLK_MIF, 11, 0, 0),
  1371. GATE(CLK_PCLK_PMU_MIF, "pclk_pmu_mif", "div_aclk_mif_133",
  1372. ENABLE_PCLK_MIF, 10, CLK_IGNORE_UNUSED, 0),
  1373. GATE(CLK_PCLK_SYSREG_MIF, "pclk_sysreg_mif", "div_aclk_mif_133",
  1374. ENABLE_PCLK_MIF, 9, CLK_IGNORE_UNUSED, 0),
  1375. GATE(CLK_PCLK_GPIO_ALIVE, "pclk_gpio_alive", "div_aclk_mif_133",
  1376. ENABLE_PCLK_MIF, 8, CLK_IGNORE_UNUSED, 0),
  1377. GATE(CLK_PCLK_ABB, "pclk_abb", "div_aclk_mif_133",
  1378. ENABLE_PCLK_MIF, 7, 0, 0),
  1379. GATE(CLK_PCLK_PMU_APBIF, "pclk_pmu_apbif", "div_aclk_mif_133",
  1380. ENABLE_PCLK_MIF, 6, CLK_IGNORE_UNUSED, 0),
  1381. GATE(CLK_PCLK_DDR_PHY1, "pclk_ddr_phy1", "div_aclk_mif_133",
  1382. ENABLE_PCLK_MIF, 5, 0, 0),
  1383. GATE(CLK_PCLK_DREX1, "pclk_drex1", "div_aclk_mif_133",
  1384. ENABLE_PCLK_MIF, 3, CLK_IGNORE_UNUSED, 0),
  1385. GATE(CLK_PCLK_DDR_PHY0, "pclk_ddr_phy0", "div_aclk_mif_133",
  1386. ENABLE_PCLK_MIF, 2, 0, 0),
  1387. GATE(CLK_PCLK_DREX0, "pclk_drex0", "div_aclk_mif_133",
  1388. ENABLE_PCLK_MIF, 0, CLK_IGNORE_UNUSED, 0),
  1389. /* ENABLE_PCLK_MIF_SECURE_DREX0_TZ */
  1390. GATE(CLK_PCLK_DREX0_TZ, "pclk_drex0_tz", "div_aclk_mif_133",
  1391. ENABLE_PCLK_MIF_SECURE_DREX0_TZ, 0, 0, 0),
  1392. /* ENABLE_PCLK_MIF_SECURE_DREX1_TZ */
  1393. GATE(CLK_PCLK_DREX1_TZ, "pclk_drex1_tz", "div_aclk_mif_133",
  1394. ENABLE_PCLK_MIF_SECURE_DREX1_TZ, 0, 0, 0),
  1395. /* ENABLE_PCLK_MIF_SECURE_MONOTONIC_CNT */
  1396. GATE(CLK_PCLK_MONOTONIC_CNT, "pclk_monotonic_cnt", "div_aclk_mif_133",
  1397. ENABLE_PCLK_MIF_SECURE_MONOTONIC_CNT, 0, 0, 0),
  1398. /* ENABLE_PCLK_MIF_SECURE_RTC */
  1399. GATE(CLK_PCLK_RTC, "pclk_rtc", "div_aclk_mif_133",
  1400. ENABLE_PCLK_MIF_SECURE_RTC, 0, 0, 0),
  1401. /* ENABLE_SCLK_MIF */
  1402. GATE(CLK_SCLK_DSIM1_DISP, "sclk_dsim1_disp", "div_sclk_dsim1",
  1403. ENABLE_SCLK_MIF, 15, CLK_IGNORE_UNUSED, 0),
  1404. GATE(CLK_SCLK_DECON_TV_VCLK_DISP, "sclk_decon_tv_vclk_disp",
  1405. "div_sclk_decon_tv_vclk", ENABLE_SCLK_MIF,
  1406. 14, CLK_IGNORE_UNUSED, 0),
  1407. GATE(CLK_SCLK_DSIM0_DISP, "sclk_dsim0_disp", "div_sclk_dsim0",
  1408. ENABLE_SCLK_MIF, 9, CLK_IGNORE_UNUSED, 0),
  1409. GATE(CLK_SCLK_DSD_DISP, "sclk_dsd_disp", "div_sclk_dsd",
  1410. ENABLE_SCLK_MIF, 8, CLK_IGNORE_UNUSED, 0),
  1411. GATE(CLK_SCLK_DECON_TV_ECLK_DISP, "sclk_decon_tv_eclk_disp",
  1412. "div_sclk_decon_tv_eclk", ENABLE_SCLK_MIF,
  1413. 7, CLK_IGNORE_UNUSED, 0),
  1414. GATE(CLK_SCLK_DECON_VCLK_DISP, "sclk_decon_vclk_disp",
  1415. "div_sclk_decon_vclk", ENABLE_SCLK_MIF,
  1416. 6, CLK_IGNORE_UNUSED, 0),
  1417. GATE(CLK_SCLK_DECON_ECLK_DISP, "sclk_decon_eclk_disp",
  1418. "div_sclk_decon_eclk", ENABLE_SCLK_MIF,
  1419. 5, CLK_IGNORE_UNUSED, 0),
  1420. GATE(CLK_SCLK_HPM_MIF, "sclk_hpm_mif", "div_sclk_hpm_mif",
  1421. ENABLE_SCLK_MIF, 4,
  1422. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  1423. GATE(CLK_SCLK_MFC_PLL, "sclk_mfc_pll", "mout_mfc_pll_div2",
  1424. ENABLE_SCLK_MIF, 3, CLK_IGNORE_UNUSED, 0),
  1425. GATE(CLK_SCLK_BUS_PLL, "sclk_bus_pll", "mout_bus_pll_div2",
  1426. ENABLE_SCLK_MIF, 2, CLK_IGNORE_UNUSED, 0),
  1427. GATE(CLK_SCLK_BUS_PLL_APOLLO, "sclk_bus_pll_apollo", "sclk_bus_pll",
  1428. ENABLE_SCLK_MIF, 1, CLK_IGNORE_UNUSED, 0),
  1429. GATE(CLK_SCLK_BUS_PLL_ATLAS, "sclk_bus_pll_atlas", "sclk_bus_pll",
  1430. ENABLE_SCLK_MIF, 0, CLK_IGNORE_UNUSED, 0),
  1431. };
  1432. static struct samsung_cmu_info mif_cmu_info __initdata = {
  1433. .pll_clks = mif_pll_clks,
  1434. .nr_pll_clks = ARRAY_SIZE(mif_pll_clks),
  1435. .mux_clks = mif_mux_clks,
  1436. .nr_mux_clks = ARRAY_SIZE(mif_mux_clks),
  1437. .div_clks = mif_div_clks,
  1438. .nr_div_clks = ARRAY_SIZE(mif_div_clks),
  1439. .gate_clks = mif_gate_clks,
  1440. .nr_gate_clks = ARRAY_SIZE(mif_gate_clks),
  1441. .fixed_factor_clks = mif_fixed_factor_clks,
  1442. .nr_fixed_factor_clks = ARRAY_SIZE(mif_fixed_factor_clks),
  1443. .nr_clk_ids = MIF_NR_CLK,
  1444. .clk_regs = mif_clk_regs,
  1445. .nr_clk_regs = ARRAY_SIZE(mif_clk_regs),
  1446. };
  1447. static void __init exynos5433_cmu_mif_init(struct device_node *np)
  1448. {
  1449. samsung_cmu_register_one(np, &mif_cmu_info);
  1450. }
  1451. CLK_OF_DECLARE(exynos5433_cmu_mif, "samsung,exynos5433-cmu-mif",
  1452. exynos5433_cmu_mif_init);
  1453. /*
  1454. * Register offset definitions for CMU_PERIC
  1455. */
  1456. #define DIV_PERIC 0x0600
  1457. #define DIV_STAT_PERIC 0x0700
  1458. #define ENABLE_ACLK_PERIC 0x0800
  1459. #define ENABLE_PCLK_PERIC0 0x0900
  1460. #define ENABLE_PCLK_PERIC1 0x0904
  1461. #define ENABLE_SCLK_PERIC 0x0A00
  1462. #define ENABLE_IP_PERIC0 0x0B00
  1463. #define ENABLE_IP_PERIC1 0x0B04
  1464. #define ENABLE_IP_PERIC2 0x0B08
  1465. static unsigned long peric_clk_regs[] __initdata = {
  1466. DIV_PERIC,
  1467. DIV_STAT_PERIC,
  1468. ENABLE_ACLK_PERIC,
  1469. ENABLE_PCLK_PERIC0,
  1470. ENABLE_PCLK_PERIC1,
  1471. ENABLE_SCLK_PERIC,
  1472. ENABLE_IP_PERIC0,
  1473. ENABLE_IP_PERIC1,
  1474. ENABLE_IP_PERIC2,
  1475. };
  1476. static struct samsung_div_clock peric_div_clks[] __initdata = {
  1477. /* DIV_PERIC */
  1478. DIV(CLK_DIV_SCLK_SCI, "div_sclk_sci", "oscclk", DIV_PERIC, 4, 4),
  1479. DIV(CLK_DIV_SCLK_SC_IN, "div_sclk_sc_in", "oscclk", DIV_PERIC, 0, 4),
  1480. };
  1481. static struct samsung_gate_clock peric_gate_clks[] __initdata = {
  1482. /* ENABLE_ACLK_PERIC */
  1483. GATE(CLK_ACLK_AHB2APB_PERIC2P, "aclk_ahb2apb_peric2p", "aclk_peric_66",
  1484. ENABLE_ACLK_PERIC, 3, CLK_IGNORE_UNUSED, 0),
  1485. GATE(CLK_ACLK_AHB2APB_PERIC1P, "aclk_ahb2apb_peric1p", "aclk_peric_66",
  1486. ENABLE_ACLK_PERIC, 2, CLK_IGNORE_UNUSED, 0),
  1487. GATE(CLK_ACLK_AHB2APB_PERIC0P, "aclk_ahb2apb_peric0p", "aclk_peric_66",
  1488. ENABLE_ACLK_PERIC, 1, CLK_IGNORE_UNUSED, 0),
  1489. GATE(CLK_ACLK_PERICNP_66, "aclk_pericnp_66", "aclk_peric_66",
  1490. ENABLE_ACLK_PERIC, 0, CLK_IGNORE_UNUSED, 0),
  1491. /* ENABLE_PCLK_PERIC0 */
  1492. GATE(CLK_PCLK_SCI, "pclk_sci", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1493. 31, CLK_SET_RATE_PARENT, 0),
  1494. GATE(CLK_PCLK_GPIO_FINGER, "pclk_gpio_finger", "aclk_peric_66",
  1495. ENABLE_PCLK_PERIC0, 30, CLK_IGNORE_UNUSED, 0),
  1496. GATE(CLK_PCLK_GPIO_ESE, "pclk_gpio_ese", "aclk_peric_66",
  1497. ENABLE_PCLK_PERIC0, 29, CLK_IGNORE_UNUSED, 0),
  1498. GATE(CLK_PCLK_PWM, "pclk_pwm", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1499. 28, CLK_SET_RATE_PARENT, 0),
  1500. GATE(CLK_PCLK_SPDIF, "pclk_spdif", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1501. 26, CLK_SET_RATE_PARENT, 0),
  1502. GATE(CLK_PCLK_PCM1, "pclk_pcm1", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1503. 25, CLK_SET_RATE_PARENT, 0),
  1504. GATE(CLK_PCLK_I2S1, "pclk_i2s", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1505. 24, CLK_SET_RATE_PARENT, 0),
  1506. GATE(CLK_PCLK_SPI2, "pclk_spi2", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1507. 23, CLK_SET_RATE_PARENT, 0),
  1508. GATE(CLK_PCLK_SPI1, "pclk_spi1", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1509. 22, CLK_SET_RATE_PARENT, 0),
  1510. GATE(CLK_PCLK_SPI0, "pclk_spi0", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1511. 21, CLK_SET_RATE_PARENT, 0),
  1512. GATE(CLK_PCLK_ADCIF, "pclk_adcif", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1513. 20, CLK_SET_RATE_PARENT, 0),
  1514. GATE(CLK_PCLK_GPIO_TOUCH, "pclk_gpio_touch", "aclk_peric_66",
  1515. ENABLE_PCLK_PERIC0, 19, CLK_IGNORE_UNUSED, 0),
  1516. GATE(CLK_PCLK_GPIO_NFC, "pclk_gpio_nfc", "aclk_peric_66",
  1517. ENABLE_PCLK_PERIC0, 18, CLK_IGNORE_UNUSED, 0),
  1518. GATE(CLK_PCLK_GPIO_PERIC, "pclk_gpio_peric", "aclk_peric_66",
  1519. ENABLE_PCLK_PERIC0, 17, CLK_IGNORE_UNUSED, 0),
  1520. GATE(CLK_PCLK_PMU_PERIC, "pclk_pmu_peric", "aclk_peric_66",
  1521. ENABLE_PCLK_PERIC0, 16, CLK_SET_RATE_PARENT, 0),
  1522. GATE(CLK_PCLK_SYSREG_PERIC, "pclk_sysreg_peric", "aclk_peric_66",
  1523. ENABLE_PCLK_PERIC0, 15,
  1524. CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 0),
  1525. GATE(CLK_PCLK_UART2, "pclk_uart2", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1526. 14, CLK_SET_RATE_PARENT, 0),
  1527. GATE(CLK_PCLK_UART1, "pclk_uart1", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1528. 13, CLK_SET_RATE_PARENT, 0),
  1529. GATE(CLK_PCLK_UART0, "pclk_uart0", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1530. 12, CLK_SET_RATE_PARENT, 0),
  1531. GATE(CLK_PCLK_HSI2C3, "pclk_hsi2c3", "aclk_peric_66",
  1532. ENABLE_PCLK_PERIC0, 11, CLK_SET_RATE_PARENT, 0),
  1533. GATE(CLK_PCLK_HSI2C2, "pclk_hsi2c2", "aclk_peric_66",
  1534. ENABLE_PCLK_PERIC0, 10, CLK_SET_RATE_PARENT, 0),
  1535. GATE(CLK_PCLK_HSI2C1, "pclk_hsi2c1", "aclk_peric_66",
  1536. ENABLE_PCLK_PERIC0, 9, CLK_SET_RATE_PARENT, 0),
  1537. GATE(CLK_PCLK_HSI2C0, "pclk_hsi2c0", "aclk_peric_66",
  1538. ENABLE_PCLK_PERIC0, 8, CLK_SET_RATE_PARENT, 0),
  1539. GATE(CLK_PCLK_I2C7, "pclk_i2c7", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1540. 7, CLK_SET_RATE_PARENT, 0),
  1541. GATE(CLK_PCLK_I2C6, "pclk_i2c6", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1542. 6, CLK_SET_RATE_PARENT, 0),
  1543. GATE(CLK_PCLK_I2C5, "pclk_i2c5", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1544. 5, CLK_SET_RATE_PARENT, 0),
  1545. GATE(CLK_PCLK_I2C4, "pclk_i2c4", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1546. 4, CLK_SET_RATE_PARENT, 0),
  1547. GATE(CLK_PCLK_I2C3, "pclk_i2c3", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1548. 3, CLK_SET_RATE_PARENT, 0),
  1549. GATE(CLK_PCLK_I2C2, "pclk_i2c2", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1550. 2, CLK_SET_RATE_PARENT, 0),
  1551. GATE(CLK_PCLK_I2C1, "pclk_i2c1", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1552. 1, CLK_SET_RATE_PARENT, 0),
  1553. GATE(CLK_PCLK_I2C0, "pclk_i2c0", "aclk_peric_66", ENABLE_PCLK_PERIC0,
  1554. 0, CLK_SET_RATE_PARENT, 0),
  1555. /* ENABLE_PCLK_PERIC1 */
  1556. GATE(CLK_PCLK_SPI4, "pclk_spi4", "aclk_peric_66", ENABLE_PCLK_PERIC1,
  1557. 9, CLK_SET_RATE_PARENT, 0),
  1558. GATE(CLK_PCLK_SPI3, "pclk_spi3", "aclk_peric_66", ENABLE_PCLK_PERIC1,
  1559. 8, CLK_SET_RATE_PARENT, 0),
  1560. GATE(CLK_PCLK_HSI2C11, "pclk_hsi2c11", "aclk_peric_66",
  1561. ENABLE_PCLK_PERIC1, 7, CLK_SET_RATE_PARENT, 0),
  1562. GATE(CLK_PCLK_HSI2C10, "pclk_hsi2c10", "aclk_peric_66",
  1563. ENABLE_PCLK_PERIC1, 6, CLK_SET_RATE_PARENT, 0),
  1564. GATE(CLK_PCLK_HSI2C9, "pclk_hsi2c9", "aclk_peric_66",
  1565. ENABLE_PCLK_PERIC1, 5, CLK_SET_RATE_PARENT, 0),
  1566. GATE(CLK_PCLK_HSI2C8, "pclk_hsi2c8", "aclk_peric_66",
  1567. ENABLE_PCLK_PERIC1, 4, CLK_SET_RATE_PARENT, 0),
  1568. GATE(CLK_PCLK_HSI2C7, "pclk_hsi2c7", "aclk_peric_66",
  1569. ENABLE_PCLK_PERIC1, 3, CLK_SET_RATE_PARENT, 0),
  1570. GATE(CLK_PCLK_HSI2C6, "pclk_hsi2c6", "aclk_peric_66",
  1571. ENABLE_PCLK_PERIC1, 2, CLK_SET_RATE_PARENT, 0),
  1572. GATE(CLK_PCLK_HSI2C5, "pclk_hsi2c5", "aclk_peric_66",
  1573. ENABLE_PCLK_PERIC1, 1, CLK_SET_RATE_PARENT, 0),
  1574. GATE(CLK_PCLK_HSI2C4, "pclk_hsi2c4", "aclk_peric_66",
  1575. ENABLE_PCLK_PERIC1, 0, CLK_SET_RATE_PARENT, 0),
  1576. /* ENABLE_SCLK_PERIC */
  1577. GATE(CLK_SCLK_IOCLK_SPI4, "sclk_ioclk_spi4", "ioclk_spi4_clk_in",
  1578. ENABLE_SCLK_PERIC, 21, CLK_SET_RATE_PARENT, 0),
  1579. GATE(CLK_SCLK_IOCLK_SPI3, "sclk_ioclk_spi3", "ioclk_spi3_clk_in",
  1580. ENABLE_SCLK_PERIC, 20, CLK_SET_RATE_PARENT, 0),
  1581. GATE(CLK_SCLK_SPI4, "sclk_spi4", "sclk_spi4_peric", ENABLE_SCLK_PERIC,
  1582. 19, CLK_SET_RATE_PARENT, 0),
  1583. GATE(CLK_SCLK_SPI3, "sclk_spi3", "sclk_spi3_peric", ENABLE_SCLK_PERIC,
  1584. 18, CLK_SET_RATE_PARENT, 0),
  1585. GATE(CLK_SCLK_SCI, "sclk_sci", "div_sclk_sci", ENABLE_SCLK_PERIC,
  1586. 17, 0, 0),
  1587. GATE(CLK_SCLK_SC_IN, "sclk_sc_in", "div_sclk_sc_in", ENABLE_SCLK_PERIC,
  1588. 16, 0, 0),
  1589. GATE(CLK_SCLK_PWM, "sclk_pwm", "oscclk", ENABLE_SCLK_PERIC, 15, 0, 0),
  1590. GATE(CLK_SCLK_IOCLK_SPI2, "sclk_ioclk_spi2", "ioclk_spi2_clk_in",
  1591. ENABLE_SCLK_PERIC, 13, CLK_SET_RATE_PARENT, 0),
  1592. GATE(CLK_SCLK_IOCLK_SPI1, "sclk_ioclk_spi1", "ioclk_spi1_clk_in",
  1593. ENABLE_SCLK_PERIC, 12,
  1594. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  1595. GATE(CLK_SCLK_IOCLK_SPI0, "sclk_ioclk_spi0", "ioclk_spi0_clk_in",
  1596. ENABLE_SCLK_PERIC, 11, CLK_SET_RATE_PARENT, 0),
  1597. GATE(CLK_SCLK_IOCLK_I2S1_BCLK, "sclk_ioclk_i2s1_bclk",
  1598. "ioclk_i2s1_bclk_in", ENABLE_SCLK_PERIC, 10,
  1599. CLK_SET_RATE_PARENT, 0),
  1600. GATE(CLK_SCLK_SPDIF, "sclk_spdif", "sclk_spdif_peric",
  1601. ENABLE_SCLK_PERIC, 8, CLK_SET_RATE_PARENT, 0),
  1602. GATE(CLK_SCLK_PCM1, "sclk_pcm1", "sclk_pcm1_peric",
  1603. ENABLE_SCLK_PERIC, 7, CLK_SET_RATE_PARENT, 0),
  1604. GATE(CLK_SCLK_I2S1, "sclk_i2s1", "sclk_i2s1_peric",
  1605. ENABLE_SCLK_PERIC, 6, CLK_SET_RATE_PARENT, 0),
  1606. GATE(CLK_SCLK_SPI2, "sclk_spi2", "sclk_spi2_peric", ENABLE_SCLK_PERIC,
  1607. 5, CLK_SET_RATE_PARENT, 0),
  1608. GATE(CLK_SCLK_SPI1, "sclk_spi1", "sclk_spi1_peric", ENABLE_SCLK_PERIC,
  1609. 4, CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  1610. GATE(CLK_SCLK_SPI0, "sclk_spi0", "sclk_spi0_peric", ENABLE_SCLK_PERIC,
  1611. 3, CLK_SET_RATE_PARENT, 0),
  1612. GATE(CLK_SCLK_UART2, "sclk_uart2", "sclk_uart2_peric",
  1613. ENABLE_SCLK_PERIC, 2, CLK_SET_RATE_PARENT, 0),
  1614. GATE(CLK_SCLK_UART1, "sclk_uart1", "sclk_uart1_peric",
  1615. ENABLE_SCLK_PERIC, 1, CLK_SET_RATE_PARENT, 0),
  1616. GATE(CLK_SCLK_UART0, "sclk_uart0", "sclk_uart0_peric",
  1617. ENABLE_SCLK_PERIC, 0, CLK_SET_RATE_PARENT, 0),
  1618. };
  1619. static struct samsung_cmu_info peric_cmu_info __initdata = {
  1620. .div_clks = peric_div_clks,
  1621. .nr_div_clks = ARRAY_SIZE(peric_div_clks),
  1622. .gate_clks = peric_gate_clks,
  1623. .nr_gate_clks = ARRAY_SIZE(peric_gate_clks),
  1624. .nr_clk_ids = PERIC_NR_CLK,
  1625. .clk_regs = peric_clk_regs,
  1626. .nr_clk_regs = ARRAY_SIZE(peric_clk_regs),
  1627. };
  1628. static void __init exynos5433_cmu_peric_init(struct device_node *np)
  1629. {
  1630. samsung_cmu_register_one(np, &peric_cmu_info);
  1631. }
  1632. CLK_OF_DECLARE(exynos5433_cmu_peric, "samsung,exynos5433-cmu-peric",
  1633. exynos5433_cmu_peric_init);
  1634. /*
  1635. * Register offset definitions for CMU_PERIS
  1636. */
  1637. #define ENABLE_ACLK_PERIS 0x0800
  1638. #define ENABLE_PCLK_PERIS 0x0900
  1639. #define ENABLE_PCLK_PERIS_SECURE_TZPC 0x0904
  1640. #define ENABLE_PCLK_PERIS_SECURE_SECKEY_APBIF 0x0908
  1641. #define ENABLE_PCLK_PERIS_SECURE_CHIPID_APBIF 0x090c
  1642. #define ENABLE_PCLK_PERIS_SECURE_TOPRTC 0x0910
  1643. #define ENABLE_PCLK_PERIS_SECURE_CUSTOM_EFUSE_APBIF 0x0914
  1644. #define ENABLE_PCLK_PERIS_SECURE_ANTIRBK_CNT_APBIF 0x0918
  1645. #define ENABLE_PCLK_PERIS_SECURE_OTP_CON_APBIF 0x091c
  1646. #define ENABLE_SCLK_PERIS 0x0a00
  1647. #define ENABLE_SCLK_PERIS_SECURE_SECKEY 0x0a04
  1648. #define ENABLE_SCLK_PERIS_SECURE_CHIPID 0x0a08
  1649. #define ENABLE_SCLK_PERIS_SECURE_TOPRTC 0x0a0c
  1650. #define ENABLE_SCLK_PERIS_SECURE_CUSTOM_EFUSE 0x0a10
  1651. #define ENABLE_SCLK_PERIS_SECURE_ANTIRBK_CNT 0x0a14
  1652. #define ENABLE_SCLK_PERIS_SECURE_OTP_CON 0x0a18
  1653. #define ENABLE_IP_PERIS0 0x0b00
  1654. #define ENABLE_IP_PERIS1 0x0b04
  1655. #define ENABLE_IP_PERIS_SECURE_TZPC 0x0b08
  1656. #define ENABLE_IP_PERIS_SECURE_SECKEY 0x0b0c
  1657. #define ENABLE_IP_PERIS_SECURE_CHIPID 0x0b10
  1658. #define ENABLE_IP_PERIS_SECURE_TOPRTC 0x0b14
  1659. #define ENABLE_IP_PERIS_SECURE_CUSTOM_EFUSE 0x0b18
  1660. #define ENABLE_IP_PERIS_SECURE_ANTIBRK_CNT 0x0b1c
  1661. #define ENABLE_IP_PERIS_SECURE_OTP_CON 0x0b20
  1662. static unsigned long peris_clk_regs[] __initdata = {
  1663. ENABLE_ACLK_PERIS,
  1664. ENABLE_PCLK_PERIS,
  1665. ENABLE_PCLK_PERIS_SECURE_TZPC,
  1666. ENABLE_PCLK_PERIS_SECURE_SECKEY_APBIF,
  1667. ENABLE_PCLK_PERIS_SECURE_CHIPID_APBIF,
  1668. ENABLE_PCLK_PERIS_SECURE_TOPRTC,
  1669. ENABLE_PCLK_PERIS_SECURE_CUSTOM_EFUSE_APBIF,
  1670. ENABLE_PCLK_PERIS_SECURE_ANTIRBK_CNT_APBIF,
  1671. ENABLE_PCLK_PERIS_SECURE_OTP_CON_APBIF,
  1672. ENABLE_SCLK_PERIS,
  1673. ENABLE_SCLK_PERIS_SECURE_SECKEY,
  1674. ENABLE_SCLK_PERIS_SECURE_CHIPID,
  1675. ENABLE_SCLK_PERIS_SECURE_TOPRTC,
  1676. ENABLE_SCLK_PERIS_SECURE_CUSTOM_EFUSE,
  1677. ENABLE_SCLK_PERIS_SECURE_ANTIRBK_CNT,
  1678. ENABLE_SCLK_PERIS_SECURE_OTP_CON,
  1679. ENABLE_IP_PERIS0,
  1680. ENABLE_IP_PERIS1,
  1681. ENABLE_IP_PERIS_SECURE_TZPC,
  1682. ENABLE_IP_PERIS_SECURE_SECKEY,
  1683. ENABLE_IP_PERIS_SECURE_CHIPID,
  1684. ENABLE_IP_PERIS_SECURE_TOPRTC,
  1685. ENABLE_IP_PERIS_SECURE_CUSTOM_EFUSE,
  1686. ENABLE_IP_PERIS_SECURE_ANTIBRK_CNT,
  1687. ENABLE_IP_PERIS_SECURE_OTP_CON,
  1688. };
  1689. static struct samsung_gate_clock peris_gate_clks[] __initdata = {
  1690. /* ENABLE_ACLK_PERIS */
  1691. GATE(CLK_ACLK_AHB2APB_PERIS1P, "aclk_ahb2apb_peris1p", "aclk_peris_66",
  1692. ENABLE_ACLK_PERIS, 2, CLK_IGNORE_UNUSED, 0),
  1693. GATE(CLK_ACLK_AHB2APB_PERIS0P, "aclk_ahb2apb_peris0p", "aclk_peris_66",
  1694. ENABLE_ACLK_PERIS, 1, CLK_IGNORE_UNUSED, 0),
  1695. GATE(CLK_ACLK_PERISNP_66, "aclk_perisnp_66", "aclk_peris_66",
  1696. ENABLE_ACLK_PERIS, 0, CLK_IGNORE_UNUSED, 0),
  1697. /* ENABLE_PCLK_PERIS */
  1698. GATE(CLK_PCLK_HPM_APBIF, "pclk_hpm_apbif", "aclk_peris_66",
  1699. ENABLE_PCLK_PERIS, 30, CLK_IGNORE_UNUSED, 0),
  1700. GATE(CLK_PCLK_TMU1_APBIF, "pclk_tmu1_apbif", "aclk_peris_66",
  1701. ENABLE_PCLK_PERIS, 24, CLK_IGNORE_UNUSED, 0),
  1702. GATE(CLK_PCLK_TMU0_APBIF, "pclk_tmu0_apbif", "aclk_peris_66",
  1703. ENABLE_PCLK_PERIS, 23, CLK_IGNORE_UNUSED, 0),
  1704. GATE(CLK_PCLK_PMU_PERIS, "pclk_pmu_peris", "aclk_peris_66",
  1705. ENABLE_PCLK_PERIS, 22, CLK_IGNORE_UNUSED, 0),
  1706. GATE(CLK_PCLK_SYSREG_PERIS, "pclk_sysreg_peris", "aclk_peris_66",
  1707. ENABLE_PCLK_PERIS, 21, CLK_IGNORE_UNUSED, 0),
  1708. GATE(CLK_PCLK_CMU_TOP_APBIF, "pclk_cmu_top_apbif", "aclk_peris_66",
  1709. ENABLE_PCLK_PERIS, 20, CLK_IGNORE_UNUSED, 0),
  1710. GATE(CLK_PCLK_WDT_APOLLO, "pclk_wdt_apollo", "aclk_peris_66",
  1711. ENABLE_PCLK_PERIS, 17, CLK_IGNORE_UNUSED, 0),
  1712. GATE(CLK_PCLK_WDT_ATLAS, "pclk_wdt_atlas", "aclk_peris_66",
  1713. ENABLE_PCLK_PERIS, 16, CLK_IGNORE_UNUSED, 0),
  1714. GATE(CLK_PCLK_MCT, "pclk_mct", "aclk_peris_66",
  1715. ENABLE_PCLK_PERIS, 15, CLK_IGNORE_UNUSED, 0),
  1716. GATE(CLK_PCLK_HDMI_CEC, "pclk_hdmi_cec", "aclk_peris_66",
  1717. ENABLE_PCLK_PERIS, 14, CLK_IGNORE_UNUSED, 0),
  1718. /* ENABLE_PCLK_PERIS_SECURE_TZPC */
  1719. GATE(CLK_PCLK_TZPC12, "pclk_tzpc12", "aclk_peris_66",
  1720. ENABLE_PCLK_PERIS_SECURE_TZPC, 12, CLK_IGNORE_UNUSED, 0),
  1721. GATE(CLK_PCLK_TZPC11, "pclk_tzpc11", "aclk_peris_66",
  1722. ENABLE_PCLK_PERIS_SECURE_TZPC, 11, CLK_IGNORE_UNUSED, 0),
  1723. GATE(CLK_PCLK_TZPC10, "pclk_tzpc10", "aclk_peris_66",
  1724. ENABLE_PCLK_PERIS_SECURE_TZPC, 10, CLK_IGNORE_UNUSED, 0),
  1725. GATE(CLK_PCLK_TZPC9, "pclk_tzpc9", "aclk_peris_66",
  1726. ENABLE_PCLK_PERIS_SECURE_TZPC, 9, CLK_IGNORE_UNUSED, 0),
  1727. GATE(CLK_PCLK_TZPC8, "pclk_tzpc8", "aclk_peris_66",
  1728. ENABLE_PCLK_PERIS_SECURE_TZPC, 8, CLK_IGNORE_UNUSED, 0),
  1729. GATE(CLK_PCLK_TZPC7, "pclk_tzpc7", "aclk_peris_66",
  1730. ENABLE_PCLK_PERIS_SECURE_TZPC, 7, CLK_IGNORE_UNUSED, 0),
  1731. GATE(CLK_PCLK_TZPC6, "pclk_tzpc6", "aclk_peris_66",
  1732. ENABLE_PCLK_PERIS_SECURE_TZPC, 6, CLK_IGNORE_UNUSED, 0),
  1733. GATE(CLK_PCLK_TZPC5, "pclk_tzpc5", "aclk_peris_66",
  1734. ENABLE_PCLK_PERIS_SECURE_TZPC, 5, CLK_IGNORE_UNUSED, 0),
  1735. GATE(CLK_PCLK_TZPC4, "pclk_tzpc4", "aclk_peris_66",
  1736. ENABLE_PCLK_PERIS_SECURE_TZPC, 4, CLK_IGNORE_UNUSED, 0),
  1737. GATE(CLK_PCLK_TZPC3, "pclk_tzpc3", "aclk_peris_66",
  1738. ENABLE_PCLK_PERIS_SECURE_TZPC, 3, CLK_IGNORE_UNUSED, 0),
  1739. GATE(CLK_PCLK_TZPC2, "pclk_tzpc2", "aclk_peris_66",
  1740. ENABLE_PCLK_PERIS_SECURE_TZPC, 2, CLK_IGNORE_UNUSED, 0),
  1741. GATE(CLK_PCLK_TZPC1, "pclk_tzpc1", "aclk_peris_66",
  1742. ENABLE_PCLK_PERIS_SECURE_TZPC, 1, CLK_IGNORE_UNUSED, 0),
  1743. GATE(CLK_PCLK_TZPC0, "pclk_tzpc0", "aclk_peris_66",
  1744. ENABLE_PCLK_PERIS_SECURE_TZPC, 0, CLK_IGNORE_UNUSED, 0),
  1745. /* ENABLE_PCLK_PERIS_SECURE_SECKEY_APBIF */
  1746. GATE(CLK_PCLK_SECKEY_APBIF, "pclk_seckey_apbif", "aclk_peris_66",
  1747. ENABLE_PCLK_PERIS_SECURE_SECKEY_APBIF, 0, CLK_IGNORE_UNUSED, 0),
  1748. /* ENABLE_PCLK_PERIS_SECURE_CHIPID_APBIF */
  1749. GATE(CLK_PCLK_CHIPID_APBIF, "pclk_chipid_apbif", "aclk_peris_66",
  1750. ENABLE_PCLK_PERIS_SECURE_CHIPID_APBIF, 0, CLK_IGNORE_UNUSED, 0),
  1751. /* ENABLE_PCLK_PERIS_SECURE_TOPRTC */
  1752. GATE(CLK_PCLK_TOPRTC, "pclk_toprtc", "aclk_peris_66",
  1753. ENABLE_PCLK_PERIS_SECURE_TOPRTC, 0, 0, 0),
  1754. /* ENABLE_PCLK_PERIS_SECURE_CUSTOM_EFUSE_APBIF */
  1755. GATE(CLK_PCLK_CUSTOM_EFUSE_APBIF, "pclk_custom_efuse_apbif",
  1756. "aclk_peris_66",
  1757. ENABLE_PCLK_PERIS_SECURE_CUSTOM_EFUSE_APBIF, 0, 0, 0),
  1758. /* ENABLE_PCLK_PERIS_SECURE_ANTIRBK_CNT_APBIF */
  1759. GATE(CLK_PCLK_ANTIRBK_CNT_APBIF, "pclk_antirbk_cnt_apbif",
  1760. "aclk_peris_66",
  1761. ENABLE_PCLK_PERIS_SECURE_ANTIRBK_CNT_APBIF, 0, 0, 0),
  1762. /* ENABLE_PCLK_PERIS_SECURE_OTP_CON_APBIF */
  1763. GATE(CLK_PCLK_OTP_CON_APBIF, "pclk_otp_con_apbif",
  1764. "aclk_peris_66",
  1765. ENABLE_PCLK_PERIS_SECURE_OTP_CON_APBIF, 0, 0, 0),
  1766. /* ENABLE_SCLK_PERIS */
  1767. GATE(CLK_SCLK_ASV_TB, "sclk_asv_tb", "oscclk_efuse_common",
  1768. ENABLE_SCLK_PERIS, 10, 0, 0),
  1769. GATE(CLK_SCLK_TMU1, "sclk_tmu1", "oscclk_efuse_common",
  1770. ENABLE_SCLK_PERIS, 4, 0, 0),
  1771. GATE(CLK_SCLK_TMU0, "sclk_tmu0", "oscclk_efuse_common",
  1772. ENABLE_SCLK_PERIS, 3, 0, 0),
  1773. /* ENABLE_SCLK_PERIS_SECURE_SECKEY */
  1774. GATE(CLK_SCLK_SECKEY, "sclk_seckey", "oscclk_efuse_common",
  1775. ENABLE_SCLK_PERIS_SECURE_SECKEY, 0, CLK_IGNORE_UNUSED, 0),
  1776. /* ENABLE_SCLK_PERIS_SECURE_CHIPID */
  1777. GATE(CLK_SCLK_CHIPID, "sclk_chipid", "oscclk_efuse_common",
  1778. ENABLE_SCLK_PERIS_SECURE_CHIPID, 0, CLK_IGNORE_UNUSED, 0),
  1779. /* ENABLE_SCLK_PERIS_SECURE_TOPRTC */
  1780. GATE(CLK_SCLK_TOPRTC, "sclk_toprtc", "oscclk_efuse_common",
  1781. ENABLE_SCLK_PERIS_SECURE_TOPRTC, 0, 0, 0),
  1782. /* ENABLE_SCLK_PERIS_SECURE_CUSTOM_EFUSE */
  1783. GATE(CLK_SCLK_CUSTOM_EFUSE, "sclk_custom_efuse", "oscclk_efuse_common",
  1784. ENABLE_SCLK_PERIS_SECURE_CUSTOM_EFUSE, 0, 0, 0),
  1785. /* ENABLE_SCLK_PERIS_SECURE_ANTIRBK_CNT */
  1786. GATE(CLK_SCLK_ANTIRBK_CNT, "sclk_antirbk_cnt", "oscclk_efuse_common",
  1787. ENABLE_SCLK_PERIS_SECURE_ANTIRBK_CNT, 0, 0, 0),
  1788. /* ENABLE_SCLK_PERIS_SECURE_OTP_CON */
  1789. GATE(CLK_SCLK_OTP_CON, "sclk_otp_con", "oscclk_efuse_common",
  1790. ENABLE_SCLK_PERIS_SECURE_OTP_CON, 0, 0, 0),
  1791. };
  1792. static struct samsung_cmu_info peris_cmu_info __initdata = {
  1793. .gate_clks = peris_gate_clks,
  1794. .nr_gate_clks = ARRAY_SIZE(peris_gate_clks),
  1795. .nr_clk_ids = PERIS_NR_CLK,
  1796. .clk_regs = peris_clk_regs,
  1797. .nr_clk_regs = ARRAY_SIZE(peris_clk_regs),
  1798. };
  1799. static void __init exynos5433_cmu_peris_init(struct device_node *np)
  1800. {
  1801. samsung_cmu_register_one(np, &peris_cmu_info);
  1802. }
  1803. CLK_OF_DECLARE(exynos5433_cmu_peris, "samsung,exynos5433-cmu-peris",
  1804. exynos5433_cmu_peris_init);
  1805. /*
  1806. * Register offset definitions for CMU_FSYS
  1807. */
  1808. #define MUX_SEL_FSYS0 0x0200
  1809. #define MUX_SEL_FSYS1 0x0204
  1810. #define MUX_SEL_FSYS2 0x0208
  1811. #define MUX_SEL_FSYS3 0x020c
  1812. #define MUX_SEL_FSYS4 0x0210
  1813. #define MUX_ENABLE_FSYS0 0x0300
  1814. #define MUX_ENABLE_FSYS1 0x0304
  1815. #define MUX_ENABLE_FSYS2 0x0308
  1816. #define MUX_ENABLE_FSYS3 0x030c
  1817. #define MUX_ENABLE_FSYS4 0x0310
  1818. #define MUX_STAT_FSYS0 0x0400
  1819. #define MUX_STAT_FSYS1 0x0404
  1820. #define MUX_STAT_FSYS2 0x0408
  1821. #define MUX_STAT_FSYS3 0x040c
  1822. #define MUX_STAT_FSYS4 0x0410
  1823. #define MUX_IGNORE_FSYS2 0x0508
  1824. #define MUX_IGNORE_FSYS3 0x050c
  1825. #define ENABLE_ACLK_FSYS0 0x0800
  1826. #define ENABLE_ACLK_FSYS1 0x0804
  1827. #define ENABLE_PCLK_FSYS 0x0900
  1828. #define ENABLE_SCLK_FSYS 0x0a00
  1829. #define ENABLE_IP_FSYS0 0x0b00
  1830. #define ENABLE_IP_FSYS1 0x0b04
  1831. /* list of all parent clock list */
  1832. PNAME(mout_sclk_ufs_mphy_user_p) = { "oscclk", "sclk_ufs_mphy", };
  1833. PNAME(mout_aclk_fsys_200_user_p) = { "oscclk", "div_aclk_fsys_200", };
  1834. PNAME(mout_sclk_pcie_100_user_p) = { "oscclk", "sclk_pcie_100_fsys",};
  1835. PNAME(mout_sclk_ufsunipro_user_p) = { "oscclk", "sclk_ufsunipro_fsys",};
  1836. PNAME(mout_sclk_mmc2_user_p) = { "oscclk", "sclk_mmc2_fsys", };
  1837. PNAME(mout_sclk_mmc1_user_p) = { "oscclk", "sclk_mmc1_fsys", };
  1838. PNAME(mout_sclk_mmc0_user_p) = { "oscclk", "sclk_mmc0_fsys", };
  1839. PNAME(mout_sclk_usbhost30_user_p) = { "oscclk", "sclk_usbhost30_fsys",};
  1840. PNAME(mout_sclk_usbdrd30_user_p) = { "oscclk", "sclk_usbdrd30_fsys", };
  1841. PNAME(mout_phyclk_usbhost30_uhost30_pipe_pclk_user_p)
  1842. = { "oscclk", "phyclk_usbhost30_uhost30_pipe_pclk_phy", };
  1843. PNAME(mout_phyclk_usbhost30_uhost30_phyclock_user_p)
  1844. = { "oscclk", "phyclk_usbhost30_uhost30_phyclock_phy", };
  1845. PNAME(mout_phyclk_usbhost20_phy_hsic1_p)
  1846. = { "oscclk", "phyclk_usbhost20_phy_hsic1_phy", };
  1847. PNAME(mout_phyclk_usbhost20_phy_clk48mohci_user_p)
  1848. = { "oscclk", "phyclk_usbhost20_phy_clk48mohci_phy", };
  1849. PNAME(mout_phyclk_usbhost20_phy_phyclock_user_p)
  1850. = { "oscclk", "phyclk_usbhost20_phy_phyclock_phy", };
  1851. PNAME(mout_phyclk_usbhost20_phy_freeclk_user_p)
  1852. = { "oscclk", "phyclk_usbhost20_phy_freeclk_phy", };
  1853. PNAME(mout_phyclk_usbdrd30_udrd30_pipe_pclk_p)
  1854. = { "oscclk", "phyclk_usbdrd30_udrd30_pipe_pclk_phy", };
  1855. PNAME(mout_phyclk_usbdrd30_udrd30_phyclock_user_p)
  1856. = { "oscclk", "phyclk_usbdrd30_udrd30_phyclock_phy", };
  1857. PNAME(mout_phyclk_ufs_rx1_symbol_user_p)
  1858. = { "oscclk", "phyclk_ufs_rx1_symbol_phy", };
  1859. PNAME(mout_phyclk_ufs_rx0_symbol_user_p)
  1860. = { "oscclk", "phyclk_ufs_rx0_symbol_phy", };
  1861. PNAME(mout_phyclk_ufs_tx1_symbol_user_p)
  1862. = { "oscclk", "phyclk_ufs_tx1_symbol_phy", };
  1863. PNAME(mout_phyclk_ufs_tx0_symbol_user_p)
  1864. = { "oscclk", "phyclk_ufs_tx0_symbol_phy", };
  1865. PNAME(mout_phyclk_lli_mphy_to_ufs_user_p)
  1866. = { "oscclk", "phyclk_lli_mphy_to_ufs_phy", };
  1867. PNAME(mout_sclk_mphy_p)
  1868. = { "mout_sclk_ufs_mphy_user",
  1869. "mout_phyclk_lli_mphy_to_ufs_user", };
  1870. static unsigned long fsys_clk_regs[] __initdata = {
  1871. MUX_SEL_FSYS0,
  1872. MUX_SEL_FSYS1,
  1873. MUX_SEL_FSYS2,
  1874. MUX_SEL_FSYS3,
  1875. MUX_SEL_FSYS4,
  1876. MUX_ENABLE_FSYS0,
  1877. MUX_ENABLE_FSYS1,
  1878. MUX_ENABLE_FSYS2,
  1879. MUX_ENABLE_FSYS3,
  1880. MUX_ENABLE_FSYS4,
  1881. MUX_STAT_FSYS0,
  1882. MUX_STAT_FSYS1,
  1883. MUX_STAT_FSYS2,
  1884. MUX_STAT_FSYS3,
  1885. MUX_STAT_FSYS4,
  1886. MUX_IGNORE_FSYS2,
  1887. MUX_IGNORE_FSYS3,
  1888. ENABLE_ACLK_FSYS0,
  1889. ENABLE_ACLK_FSYS1,
  1890. ENABLE_PCLK_FSYS,
  1891. ENABLE_SCLK_FSYS,
  1892. ENABLE_IP_FSYS0,
  1893. ENABLE_IP_FSYS1,
  1894. };
  1895. static struct samsung_fixed_rate_clock fsys_fixed_clks[] __initdata = {
  1896. /* PHY clocks from USBDRD30_PHY */
  1897. FRATE(CLK_PHYCLK_USBDRD30_UDRD30_PHYCLOCK_PHY,
  1898. "phyclk_usbdrd30_udrd30_phyclock_phy", NULL,
  1899. CLK_IS_ROOT, 60000000),
  1900. FRATE(CLK_PHYCLK_USBDRD30_UDRD30_PIPE_PCLK_PHY,
  1901. "phyclk_usbdrd30_udrd30_pipe_pclk_phy", NULL,
  1902. CLK_IS_ROOT, 125000000),
  1903. /* PHY clocks from USBHOST30_PHY */
  1904. FRATE(CLK_PHYCLK_USBHOST30_UHOST30_PHYCLOCK_PHY,
  1905. "phyclk_usbhost30_uhost30_phyclock_phy", NULL,
  1906. CLK_IS_ROOT, 60000000),
  1907. FRATE(CLK_PHYCLK_USBHOST30_UHOST30_PIPE_PCLK_PHY,
  1908. "phyclk_usbhost30_uhost30_pipe_pclk_phy", NULL,
  1909. CLK_IS_ROOT, 125000000),
  1910. /* PHY clocks from USBHOST20_PHY */
  1911. FRATE(CLK_PHYCLK_USBHOST20_PHY_FREECLK_PHY,
  1912. "phyclk_usbhost20_phy_freeclk_phy", NULL, CLK_IS_ROOT,
  1913. 60000000),
  1914. FRATE(CLK_PHYCLK_USBHOST20_PHY_PHYCLOCK_PHY,
  1915. "phyclk_usbhost20_phy_phyclock_phy", NULL, CLK_IS_ROOT,
  1916. 60000000),
  1917. FRATE(CLK_PHYCLK_USBHOST20_PHY_CLK48MOHCI_PHY,
  1918. "phyclk_usbhost20_phy_clk48mohci_phy", NULL,
  1919. CLK_IS_ROOT, 48000000),
  1920. FRATE(CLK_PHYCLK_USBHOST20_PHY_HSIC1_PHY,
  1921. "phyclk_usbhost20_phy_hsic1_phy", NULL, CLK_IS_ROOT,
  1922. 60000000),
  1923. /* PHY clocks from UFS_PHY */
  1924. FRATE(CLK_PHYCLK_UFS_TX0_SYMBOL_PHY, "phyclk_ufs_tx0_symbol_phy",
  1925. NULL, CLK_IS_ROOT, 300000000),
  1926. FRATE(CLK_PHYCLK_UFS_RX0_SYMBOL_PHY, "phyclk_ufs_rx0_symbol_phy",
  1927. NULL, CLK_IS_ROOT, 300000000),
  1928. FRATE(CLK_PHYCLK_UFS_TX1_SYMBOL_PHY, "phyclk_ufs_tx1_symbol_phy",
  1929. NULL, CLK_IS_ROOT, 300000000),
  1930. FRATE(CLK_PHYCLK_UFS_RX1_SYMBOL_PHY, "phyclk_ufs_rx1_symbol_phy",
  1931. NULL, CLK_IS_ROOT, 300000000),
  1932. /* PHY clocks from LLI_PHY */
  1933. FRATE(CLK_PHYCLK_LLI_MPHY_TO_UFS_PHY, "phyclk_lli_mphy_to_ufs_phy",
  1934. NULL, CLK_IS_ROOT, 26000000),
  1935. };
  1936. static struct samsung_mux_clock fsys_mux_clks[] __initdata = {
  1937. /* MUX_SEL_FSYS0 */
  1938. MUX(CLK_MOUT_SCLK_UFS_MPHY_USER, "mout_sclk_ufs_mphy_user",
  1939. mout_sclk_ufs_mphy_user_p, MUX_SEL_FSYS0, 4, 1),
  1940. MUX(CLK_MOUT_ACLK_FSYS_200_USER, "mout_aclk_fsys_200_user",
  1941. mout_aclk_fsys_200_user_p, MUX_SEL_FSYS0, 0, 1),
  1942. /* MUX_SEL_FSYS1 */
  1943. MUX(CLK_MOUT_SCLK_PCIE_100_USER, "mout_sclk_pcie_100_user",
  1944. mout_sclk_pcie_100_user_p, MUX_SEL_FSYS1, 28, 1),
  1945. MUX(CLK_MOUT_SCLK_UFSUNIPRO_USER, "mout_sclk_ufsunipro_user",
  1946. mout_sclk_ufsunipro_user_p, MUX_SEL_FSYS1, 24, 1),
  1947. MUX(CLK_MOUT_SCLK_MMC2_USER, "mout_sclk_mmc2_user",
  1948. mout_sclk_mmc2_user_p, MUX_SEL_FSYS1, 20, 1),
  1949. MUX(CLK_MOUT_SCLK_MMC1_USER, "mout_sclk_mmc1_user",
  1950. mout_sclk_mmc1_user_p, MUX_SEL_FSYS1, 16, 1),
  1951. MUX(CLK_MOUT_SCLK_MMC0_USER, "mout_sclk_mmc0_user",
  1952. mout_sclk_mmc0_user_p, MUX_SEL_FSYS1, 12, 1),
  1953. MUX(CLK_MOUT_SCLK_USBHOST30_USER, "mout_sclk_usbhost30_user",
  1954. mout_sclk_usbhost30_user_p, MUX_SEL_FSYS1, 4, 1),
  1955. MUX(CLK_MOUT_SCLK_USBDRD30_USER, "mout_sclk_usbdrd30_user",
  1956. mout_sclk_usbdrd30_user_p, MUX_SEL_FSYS1, 0, 1),
  1957. /* MUX_SEL_FSYS2 */
  1958. MUX(CLK_MOUT_PHYCLK_USBHOST30_UHOST30_PIPE_PCLK_USER,
  1959. "mout_phyclk_usbhost30_uhost30_pipe_pclk_user",
  1960. mout_phyclk_usbhost30_uhost30_pipe_pclk_user_p,
  1961. MUX_SEL_FSYS2, 28, 1),
  1962. MUX(CLK_MOUT_PHYCLK_USBHOST30_UHOST30_PHYCLOCK_USER,
  1963. "mout_phyclk_usbhost30_uhost30_phyclock_user",
  1964. mout_phyclk_usbhost30_uhost30_phyclock_user_p,
  1965. MUX_SEL_FSYS2, 24, 1),
  1966. MUX(CLK_MOUT_PHYCLK_USBHOST20_PHY_HSIC1_USER,
  1967. "mout_phyclk_usbhost20_phy_hsic1",
  1968. mout_phyclk_usbhost20_phy_hsic1_p,
  1969. MUX_SEL_FSYS2, 20, 1),
  1970. MUX(CLK_MOUT_PHYCLK_USBHOST20_PHY_CLK48MOHCI_USER,
  1971. "mout_phyclk_usbhost20_phy_clk48mohci_user",
  1972. mout_phyclk_usbhost20_phy_clk48mohci_user_p,
  1973. MUX_SEL_FSYS2, 16, 1),
  1974. MUX(CLK_MOUT_PHYCLK_USBHOST20_PHY_PHYCLOCK_USER,
  1975. "mout_phyclk_usbhost20_phy_phyclock_user",
  1976. mout_phyclk_usbhost20_phy_phyclock_user_p,
  1977. MUX_SEL_FSYS2, 12, 1),
  1978. MUX(CLK_MOUT_PHYCLK_USBHOST20_PHY_PHY_FREECLK_USER,
  1979. "mout_phyclk_usbhost20_phy_freeclk_user",
  1980. mout_phyclk_usbhost20_phy_freeclk_user_p,
  1981. MUX_SEL_FSYS2, 8, 1),
  1982. MUX(CLK_MOUT_PHYCLK_USBDRD30_UDRD30_PIPE_PCLK_USER,
  1983. "mout_phyclk_usbdrd30_udrd30_pipe_pclk_user",
  1984. mout_phyclk_usbdrd30_udrd30_pipe_pclk_p,
  1985. MUX_SEL_FSYS2, 4, 1),
  1986. MUX(CLK_MOUT_PHYCLK_USBDRD30_UDRD30_PHYCLOCK_USER,
  1987. "mout_phyclk_usbdrd30_udrd30_phyclock_user",
  1988. mout_phyclk_usbdrd30_udrd30_phyclock_user_p,
  1989. MUX_SEL_FSYS2, 0, 1),
  1990. /* MUX_SEL_FSYS3 */
  1991. MUX(CLK_MOUT_PHYCLK_UFS_RX1_SYMBOL_USER,
  1992. "mout_phyclk_ufs_rx1_symbol_user",
  1993. mout_phyclk_ufs_rx1_symbol_user_p,
  1994. MUX_SEL_FSYS3, 16, 1),
  1995. MUX(CLK_MOUT_PHYCLK_UFS_RX0_SYMBOL_USER,
  1996. "mout_phyclk_ufs_rx0_symbol_user",
  1997. mout_phyclk_ufs_rx0_symbol_user_p,
  1998. MUX_SEL_FSYS3, 12, 1),
  1999. MUX(CLK_MOUT_PHYCLK_UFS_TX1_SYMBOL_USER,
  2000. "mout_phyclk_ufs_tx1_symbol_user",
  2001. mout_phyclk_ufs_tx1_symbol_user_p,
  2002. MUX_SEL_FSYS3, 8, 1),
  2003. MUX(CLK_MOUT_PHYCLK_UFS_TX0_SYMBOL_USER,
  2004. "mout_phyclk_ufs_tx0_symbol_user",
  2005. mout_phyclk_ufs_tx0_symbol_user_p,
  2006. MUX_SEL_FSYS3, 4, 1),
  2007. MUX(CLK_MOUT_PHYCLK_LLI_MPHY_TO_UFS_USER,
  2008. "mout_phyclk_lli_mphy_to_ufs_user",
  2009. mout_phyclk_lli_mphy_to_ufs_user_p,
  2010. MUX_SEL_FSYS3, 0, 1),
  2011. /* MUX_SEL_FSYS4 */
  2012. MUX(CLK_MOUT_SCLK_MPHY, "mout_sclk_mphy", mout_sclk_mphy_p,
  2013. MUX_SEL_FSYS4, 0, 1),
  2014. };
  2015. static struct samsung_gate_clock fsys_gate_clks[] __initdata = {
  2016. /* ENABLE_ACLK_FSYS0 */
  2017. GATE(CLK_ACLK_PCIE, "aclk_pcie", "mout_aclk_fsys_200_user",
  2018. ENABLE_ACLK_FSYS0, 13, CLK_IGNORE_UNUSED, 0),
  2019. GATE(CLK_ACLK_PDMA1, "aclk_pdma1", "mout_aclk_fsys_200_user",
  2020. ENABLE_ACLK_FSYS0, 11, CLK_IGNORE_UNUSED, 0),
  2021. GATE(CLK_ACLK_TSI, "aclk_tsi", "mout_aclk_fsys_200_user",
  2022. ENABLE_ACLK_FSYS0, 10, CLK_IGNORE_UNUSED, 0),
  2023. GATE(CLK_ACLK_MMC2, "aclk_mmc2", "mout_aclk_fsys_200_user",
  2024. ENABLE_ACLK_FSYS0, 8, CLK_IGNORE_UNUSED, 0),
  2025. GATE(CLK_ACLK_MMC1, "aclk_mmc1", "mout_aclk_fsys_200_user",
  2026. ENABLE_ACLK_FSYS0, 7, CLK_IGNORE_UNUSED, 0),
  2027. GATE(CLK_ACLK_MMC0, "aclk_mmc0", "mout_aclk_fsys_200_user",
  2028. ENABLE_ACLK_FSYS0, 6, CLK_IGNORE_UNUSED, 0),
  2029. GATE(CLK_ACLK_UFS, "aclk_ufs", "mout_aclk_fsys_200_user",
  2030. ENABLE_ACLK_FSYS0, 5, CLK_IGNORE_UNUSED, 0),
  2031. GATE(CLK_ACLK_USBHOST20, "aclk_usbhost20", "mout_aclk_fsys_200_user",
  2032. ENABLE_ACLK_FSYS0, 3, CLK_IGNORE_UNUSED, 0),
  2033. GATE(CLK_ACLK_USBHOST30, "aclk_usbhost30", "mout_aclk_fsys_200_user",
  2034. ENABLE_ACLK_FSYS0, 2, CLK_IGNORE_UNUSED, 0),
  2035. GATE(CLK_ACLK_USBDRD30, "aclk_usbdrd30", "mout_aclk_fsys_200_user",
  2036. ENABLE_ACLK_FSYS0, 1, CLK_IGNORE_UNUSED, 0),
  2037. GATE(CLK_ACLK_PDMA0, "aclk_pdma0", "mout_aclk_fsys_200_user",
  2038. ENABLE_ACLK_FSYS0, 0, CLK_IGNORE_UNUSED, 0),
  2039. /* ENABLE_ACLK_FSYS1 */
  2040. GATE(CLK_ACLK_XIU_FSYSPX, "aclk_xiu_fsyspx", "mout_aclk_fsys_200_user",
  2041. ENABLE_ACLK_FSYS1, 27, CLK_IGNORE_UNUSED, 0),
  2042. GATE(CLK_ACLK_AHB_USBLINKH1, "aclk_ahb_usblinkh1",
  2043. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2044. 26, CLK_IGNORE_UNUSED, 0),
  2045. GATE(CLK_ACLK_SMMU_PDMA1, "aclk_smmu_pdma1", "mout_aclk_fsys_200_user",
  2046. ENABLE_ACLK_FSYS1, 25, CLK_IGNORE_UNUSED, 0),
  2047. GATE(CLK_ACLK_BTS_PCIE, "aclk_bts_pcie", "mout_aclk_fsys_200_user",
  2048. ENABLE_ACLK_FSYS1, 24, 0, 0),
  2049. GATE(CLK_ACLK_AXIUS_PDMA1, "aclk_axius_pdma1",
  2050. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2051. 22, CLK_IGNORE_UNUSED, 0),
  2052. GATE(CLK_ACLK_SMMU_PDMA0, "aclk_smmu_pdma0", "mout_aclk_fsys_200_user",
  2053. ENABLE_ACLK_FSYS1, 17, CLK_IGNORE_UNUSED, 0),
  2054. GATE(CLK_ACLK_BTS_UFS, "aclk_bts_ufs", "mout_aclk_fsys_200_user",
  2055. ENABLE_ACLK_FSYS1, 14, CLK_IGNORE_UNUSED, 0),
  2056. GATE(CLK_ACLK_BTS_USBHOST30, "aclk_bts_usbhost30",
  2057. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2058. 13, 0, 0),
  2059. GATE(CLK_ACLK_BTS_USBDRD30, "aclk_bts_usbdrd30",
  2060. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2061. 12, 0, 0),
  2062. GATE(CLK_ACLK_AXIUS_PDMA0, "aclk_axius_pdma0",
  2063. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2064. 11, CLK_IGNORE_UNUSED, 0),
  2065. GATE(CLK_ACLK_AXIUS_USBHS, "aclk_axius_usbhs",
  2066. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2067. 10, CLK_IGNORE_UNUSED, 0),
  2068. GATE(CLK_ACLK_AXIUS_FSYSSX, "aclk_axius_fsyssx",
  2069. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2070. 9, CLK_IGNORE_UNUSED, 0),
  2071. GATE(CLK_ACLK_AHB2APB_FSYSP, "aclk_ahb2apb_fsysp",
  2072. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2073. 8, CLK_IGNORE_UNUSED, 0),
  2074. GATE(CLK_ACLK_AHB2AXI_USBHS, "aclk_ahb2axi_usbhs",
  2075. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2076. 7, CLK_IGNORE_UNUSED, 0),
  2077. GATE(CLK_ACLK_AHB_USBLINKH0, "aclk_ahb_usblinkh0",
  2078. "mout_aclk_fsys_200_user", ENABLE_ACLK_FSYS1,
  2079. 6, CLK_IGNORE_UNUSED, 0),
  2080. GATE(CLK_ACLK_AHB_USBHS, "aclk_ahb_usbhs", "mout_aclk_fsys_200_user",
  2081. ENABLE_ACLK_FSYS1, 5, CLK_IGNORE_UNUSED, 0),
  2082. GATE(CLK_ACLK_AHB_FSYSH, "aclk_ahb_fsysh", "mout_aclk_fsys_200_user",
  2083. ENABLE_ACLK_FSYS1, 4, CLK_IGNORE_UNUSED, 0),
  2084. GATE(CLK_ACLK_XIU_FSYSX, "aclk_xiu_fsysx", "mout_aclk_fsys_200_user",
  2085. ENABLE_ACLK_FSYS1, 3, CLK_IGNORE_UNUSED, 0),
  2086. GATE(CLK_ACLK_XIU_FSYSSX, "aclk_xiu_fsyssx", "mout_aclk_fsys_200_user",
  2087. ENABLE_ACLK_FSYS1, 2, CLK_IGNORE_UNUSED, 0),
  2088. GATE(CLK_ACLK_FSYSNP_200, "aclk_fsysnp_200", "mout_aclk_fsys_200_user",
  2089. ENABLE_ACLK_FSYS1, 1, CLK_IGNORE_UNUSED, 0),
  2090. GATE(CLK_ACLK_FSYSND_200, "aclk_fsysnd_200", "mout_aclk_fsys_200_user",
  2091. ENABLE_ACLK_FSYS1, 0, CLK_IGNORE_UNUSED, 0),
  2092. /* ENABLE_PCLK_FSYS */
  2093. GATE(CLK_PCLK_PCIE_CTRL, "pclk_pcie_ctrl", "mout_aclk_fsys_200_user",
  2094. ENABLE_PCLK_FSYS, 17, 0, 0),
  2095. GATE(CLK_PCLK_SMMU_PDMA1, "pclk_smmu_pdma1", "mout_aclk_fsys_200_user",
  2096. ENABLE_PCLK_FSYS, 16, CLK_IGNORE_UNUSED, 0),
  2097. GATE(CLK_PCLK_PCIE_PHY, "pclk_pcie_phy", "mout_aclk_fsys_200_user",
  2098. ENABLE_PCLK_FSYS, 14, 0, 0),
  2099. GATE(CLK_PCLK_BTS_PCIE, "pclk_bts_pcie", "mout_aclk_fsys_200_user",
  2100. ENABLE_PCLK_FSYS, 13, 0, 0),
  2101. GATE(CLK_PCLK_SMMU_PDMA0, "pclk_smmu_pdma0", "mout_aclk_fsys_200_user",
  2102. ENABLE_PCLK_FSYS, 8, CLK_IGNORE_UNUSED, 0),
  2103. GATE(CLK_PCLK_BTS_UFS, "pclk_bts_ufs", "mout_aclk_fsys_200_user",
  2104. ENABLE_PCLK_FSYS, 5, 0, 0),
  2105. GATE(CLK_PCLK_BTS_USBHOST30, "pclk_bts_usbhost30",
  2106. "mout_aclk_fsys_200_user", ENABLE_PCLK_FSYS, 4, 0, 0),
  2107. GATE(CLK_PCLK_BTS_USBDRD30, "pclk_bts_usbdrd30",
  2108. "mout_aclk_fsys_200_user", ENABLE_PCLK_FSYS, 3, 0, 0),
  2109. GATE(CLK_PCLK_GPIO_FSYS, "pclk_gpio_fsys", "mout_aclk_fsys_200_user",
  2110. ENABLE_PCLK_FSYS, 2, CLK_IGNORE_UNUSED, 0),
  2111. GATE(CLK_PCLK_PMU_FSYS, "pclk_pmu_fsys", "mout_aclk_fsys_200_user",
  2112. ENABLE_PCLK_FSYS, 1, CLK_IGNORE_UNUSED, 0),
  2113. GATE(CLK_PCLK_SYSREG_FSYS, "pclk_sysreg_fsys",
  2114. "mout_aclk_fsys_200_user", ENABLE_PCLK_FSYS,
  2115. 0, CLK_IGNORE_UNUSED, 0),
  2116. /* ENABLE_SCLK_FSYS */
  2117. GATE(CLK_SCLK_PCIE_100, "sclk_pcie_100", "mout_sclk_pcie_100_user",
  2118. ENABLE_SCLK_FSYS, 21, 0, 0),
  2119. GATE(CLK_PHYCLK_USBHOST30_UHOST30_PIPE_PCLK,
  2120. "phyclk_usbhost30_uhost30_pipe_pclk",
  2121. "mout_phyclk_usbhost30_uhost30_pipe_pclk_user",
  2122. ENABLE_SCLK_FSYS, 18, 0, 0),
  2123. GATE(CLK_PHYCLK_USBHOST30_UHOST30_PHYCLOCK,
  2124. "phyclk_usbhost30_uhost30_phyclock",
  2125. "mout_phyclk_usbhost30_uhost30_phyclock_user",
  2126. ENABLE_SCLK_FSYS, 17, 0, 0),
  2127. GATE(CLK_PHYCLK_UFS_RX1_SYMBOL, "phyclk_ufs_rx1_symbol",
  2128. "mout_phyclk_ufs_rx1_symbol_user", ENABLE_SCLK_FSYS,
  2129. 16, 0, 0),
  2130. GATE(CLK_PHYCLK_UFS_RX0_SYMBOL, "phyclk_ufs_rx0_symbol",
  2131. "mout_phyclk_ufs_rx0_symbol_user", ENABLE_SCLK_FSYS,
  2132. 15, 0, 0),
  2133. GATE(CLK_PHYCLK_UFS_TX1_SYMBOL, "phyclk_ufs_tx1_symbol",
  2134. "mout_phyclk_ufs_tx1_symbol_user", ENABLE_SCLK_FSYS,
  2135. 14, 0, 0),
  2136. GATE(CLK_PHYCLK_UFS_TX0_SYMBOL, "phyclk_ufs_tx0_symbol",
  2137. "mout_phyclk_ufs_tx0_symbol_user", ENABLE_SCLK_FSYS,
  2138. 13, 0, 0),
  2139. GATE(CLK_PHYCLK_USBHOST20_PHY_HSIC1, "phyclk_usbhost20_phy_hsic1",
  2140. "mout_phyclk_usbhost20_phy_hsic1", ENABLE_SCLK_FSYS,
  2141. 12, 0, 0),
  2142. GATE(CLK_PHYCLK_USBHOST20_PHY_CLK48MOHCI,
  2143. "phyclk_usbhost20_phy_clk48mohci",
  2144. "mout_phyclk_usbhost20_phy_clk48mohci_user",
  2145. ENABLE_SCLK_FSYS, 11, 0, 0),
  2146. GATE(CLK_PHYCLK_USBHOST20_PHY_PHYCLOCK,
  2147. "phyclk_usbhost20_phy_phyclock",
  2148. "mout_phyclk_usbhost20_phy_phyclock_user",
  2149. ENABLE_SCLK_FSYS, 10, 0, 0),
  2150. GATE(CLK_PHYCLK_USBHOST20_PHY_FREECLK,
  2151. "phyclk_usbhost20_phy_freeclk",
  2152. "mout_phyclk_usbhost20_phy_freeclk_user",
  2153. ENABLE_SCLK_FSYS, 9, 0, 0),
  2154. GATE(CLK_PHYCLK_USBDRD30_UDRD30_PIPE_PCLK,
  2155. "phyclk_usbdrd30_udrd30_pipe_pclk",
  2156. "mout_phyclk_usbdrd30_udrd30_pipe_pclk_user",
  2157. ENABLE_SCLK_FSYS, 8, 0, 0),
  2158. GATE(CLK_PHYCLK_USBDRD30_UDRD30_PHYCLOCK,
  2159. "phyclk_usbdrd30_udrd30_phyclock",
  2160. "mout_phyclk_usbdrd30_udrd30_phyclock_user",
  2161. ENABLE_SCLK_FSYS, 7, 0, 0),
  2162. GATE(CLK_SCLK_MPHY, "sclk_mphy", "mout_sclk_mphy",
  2163. ENABLE_SCLK_FSYS, 6, 0, 0),
  2164. GATE(CLK_SCLK_UFSUNIPRO, "sclk_ufsunipro", "mout_sclk_ufsunipro_user",
  2165. ENABLE_SCLK_FSYS, 5, 0, 0),
  2166. GATE(CLK_SCLK_MMC2, "sclk_mmc2", "mout_sclk_mmc2_user",
  2167. ENABLE_SCLK_FSYS, 4, CLK_SET_RATE_PARENT, 0),
  2168. GATE(CLK_SCLK_MMC1, "sclk_mmc1", "mout_sclk_mmc1_user",
  2169. ENABLE_SCLK_FSYS, 3, CLK_SET_RATE_PARENT, 0),
  2170. GATE(CLK_SCLK_MMC0, "sclk_mmc0", "mout_sclk_mmc0_user",
  2171. ENABLE_SCLK_FSYS, 2, CLK_SET_RATE_PARENT, 0),
  2172. GATE(CLK_SCLK_USBHOST30, "sclk_usbhost30", "mout_sclk_usbhost30_user",
  2173. ENABLE_SCLK_FSYS, 1, 0, 0),
  2174. GATE(CLK_SCLK_USBDRD30, "sclk_usbdrd30", "mout_sclk_usbdrd30_user",
  2175. ENABLE_SCLK_FSYS, 0, 0, 0),
  2176. /* ENABLE_IP_FSYS0 */
  2177. GATE(CLK_PDMA1, "pdma1", "aclk_pdma1", ENABLE_IP_FSYS0, 15, 0, 0),
  2178. GATE(CLK_PDMA0, "pdma0", "aclk_pdma0", ENABLE_IP_FSYS0, 0, 0, 0),
  2179. };
  2180. static struct samsung_cmu_info fsys_cmu_info __initdata = {
  2181. .mux_clks = fsys_mux_clks,
  2182. .nr_mux_clks = ARRAY_SIZE(fsys_mux_clks),
  2183. .gate_clks = fsys_gate_clks,
  2184. .nr_gate_clks = ARRAY_SIZE(fsys_gate_clks),
  2185. .fixed_clks = fsys_fixed_clks,
  2186. .nr_fixed_clks = ARRAY_SIZE(fsys_fixed_clks),
  2187. .nr_clk_ids = FSYS_NR_CLK,
  2188. .clk_regs = fsys_clk_regs,
  2189. .nr_clk_regs = ARRAY_SIZE(fsys_clk_regs),
  2190. };
  2191. static void __init exynos5433_cmu_fsys_init(struct device_node *np)
  2192. {
  2193. samsung_cmu_register_one(np, &fsys_cmu_info);
  2194. }
  2195. CLK_OF_DECLARE(exynos5433_cmu_fsys, "samsung,exynos5433-cmu-fsys",
  2196. exynos5433_cmu_fsys_init);
  2197. /*
  2198. * Register offset definitions for CMU_G2D
  2199. */
  2200. #define MUX_SEL_G2D0 0x0200
  2201. #define MUX_SEL_ENABLE_G2D0 0x0300
  2202. #define MUX_SEL_STAT_G2D0 0x0400
  2203. #define DIV_G2D 0x0600
  2204. #define DIV_STAT_G2D 0x0700
  2205. #define DIV_ENABLE_ACLK_G2D 0x0800
  2206. #define DIV_ENABLE_ACLK_G2D_SECURE_SMMU_G2D 0x0804
  2207. #define DIV_ENABLE_PCLK_G2D 0x0900
  2208. #define DIV_ENABLE_PCLK_G2D_SECURE_SMMU_G2D 0x0904
  2209. #define DIV_ENABLE_IP_G2D0 0x0b00
  2210. #define DIV_ENABLE_IP_G2D1 0x0b04
  2211. #define DIV_ENABLE_IP_G2D_SECURE_SMMU_G2D 0x0b08
  2212. static unsigned long g2d_clk_regs[] __initdata = {
  2213. MUX_SEL_G2D0,
  2214. MUX_SEL_ENABLE_G2D0,
  2215. MUX_SEL_STAT_G2D0,
  2216. DIV_G2D,
  2217. DIV_STAT_G2D,
  2218. DIV_ENABLE_ACLK_G2D,
  2219. DIV_ENABLE_ACLK_G2D_SECURE_SMMU_G2D,
  2220. DIV_ENABLE_PCLK_G2D,
  2221. DIV_ENABLE_PCLK_G2D_SECURE_SMMU_G2D,
  2222. DIV_ENABLE_IP_G2D0,
  2223. DIV_ENABLE_IP_G2D1,
  2224. DIV_ENABLE_IP_G2D_SECURE_SMMU_G2D,
  2225. };
  2226. /* list of all parent clock list */
  2227. PNAME(mout_aclk_g2d_266_user_p) = { "oscclk", "aclk_g2d_266", };
  2228. PNAME(mout_aclk_g2d_400_user_p) = { "oscclk", "aclk_g2d_400", };
  2229. static struct samsung_mux_clock g2d_mux_clks[] __initdata = {
  2230. /* MUX_SEL_G2D0 */
  2231. MUX(CLK_MUX_ACLK_G2D_266_USER, "mout_aclk_g2d_266_user",
  2232. mout_aclk_g2d_266_user_p, MUX_SEL_G2D0, 4, 1),
  2233. MUX(CLK_MUX_ACLK_G2D_400_USER, "mout_aclk_g2d_400_user",
  2234. mout_aclk_g2d_400_user_p, MUX_SEL_G2D0, 0, 1),
  2235. };
  2236. static struct samsung_div_clock g2d_div_clks[] __initdata = {
  2237. /* DIV_G2D */
  2238. DIV(CLK_DIV_PCLK_G2D, "div_pclk_g2d", "mout_aclk_g2d_266_user",
  2239. DIV_G2D, 0, 2),
  2240. };
  2241. static struct samsung_gate_clock g2d_gate_clks[] __initdata = {
  2242. /* DIV_ENABLE_ACLK_G2D */
  2243. GATE(CLK_ACLK_SMMU_MDMA1, "aclk_smmu_mdma1", "mout_aclk_g2d_266_user",
  2244. DIV_ENABLE_ACLK_G2D, 12, 0, 0),
  2245. GATE(CLK_ACLK_BTS_MDMA1, "aclk_bts_mdam1", "mout_aclk_g2d_266_user",
  2246. DIV_ENABLE_ACLK_G2D, 11, 0, 0),
  2247. GATE(CLK_ACLK_BTS_G2D, "aclk_bts_g2d", "mout_aclk_g2d_400_user",
  2248. DIV_ENABLE_ACLK_G2D, 10, 0, 0),
  2249. GATE(CLK_ACLK_ALB_G2D, "aclk_alb_g2d", "mout_aclk_g2d_400_user",
  2250. DIV_ENABLE_ACLK_G2D, 9, 0, 0),
  2251. GATE(CLK_ACLK_AXIUS_G2DX, "aclk_axius_g2dx", "mout_aclk_g2d_400_user",
  2252. DIV_ENABLE_ACLK_G2D, 8, 0, 0),
  2253. GATE(CLK_ACLK_ASYNCAXI_SYSX, "aclk_asyncaxi_sysx",
  2254. "mout_aclk_g2d_400_user", DIV_ENABLE_ACLK_G2D,
  2255. 7, 0, 0),
  2256. GATE(CLK_ACLK_AHB2APB_G2D1P, "aclk_ahb2apb_g2d1p", "div_pclk_g2d",
  2257. DIV_ENABLE_ACLK_G2D, 6, CLK_IGNORE_UNUSED, 0),
  2258. GATE(CLK_ACLK_AHB2APB_G2D0P, "aclk_ahb2apb_g2d0p", "div_pclk_g2d",
  2259. DIV_ENABLE_ACLK_G2D, 5, CLK_IGNORE_UNUSED, 0),
  2260. GATE(CLK_ACLK_XIU_G2DX, "aclk_xiu_g2dx", "mout_aclk_g2d_400_user",
  2261. DIV_ENABLE_ACLK_G2D, 4, CLK_IGNORE_UNUSED, 0),
  2262. GATE(CLK_ACLK_G2DNP_133, "aclk_g2dnp_133", "div_pclk_g2d",
  2263. DIV_ENABLE_ACLK_G2D, 3, CLK_IGNORE_UNUSED, 0),
  2264. GATE(CLK_ACLK_G2DND_400, "aclk_g2dnd_400", "mout_aclk_g2d_400_user",
  2265. DIV_ENABLE_ACLK_G2D, 2, CLK_IGNORE_UNUSED, 0),
  2266. GATE(CLK_ACLK_MDMA1, "aclk_mdma1", "mout_aclk_g2d_266_user",
  2267. DIV_ENABLE_ACLK_G2D, 1, 0, 0),
  2268. GATE(CLK_ACLK_G2D, "aclk_g2d", "mout_aclk_g2d_400_user",
  2269. DIV_ENABLE_ACLK_G2D, 0, 0, 0),
  2270. /* DIV_ENABLE_ACLK_G2D_SECURE_SMMU_G2D */
  2271. GATE(CLK_ACLK_SMMU_G2D, "aclk_smmu_g2d", "mout_aclk_g2d_400_user",
  2272. DIV_ENABLE_ACLK_G2D_SECURE_SMMU_G2D, 0, 0, 0),
  2273. /* DIV_ENABLE_PCLK_G2D */
  2274. GATE(CLK_PCLK_SMMU_MDMA1, "pclk_smmu_mdma1", "div_pclk_g2d",
  2275. DIV_ENABLE_PCLK_G2D, 7, 0, 0),
  2276. GATE(CLK_PCLK_BTS_MDMA1, "pclk_bts_mdam1", "div_pclk_g2d",
  2277. DIV_ENABLE_PCLK_G2D, 6, 0, 0),
  2278. GATE(CLK_PCLK_BTS_G2D, "pclk_bts_g2d", "div_pclk_g2d",
  2279. DIV_ENABLE_PCLK_G2D, 5, 0, 0),
  2280. GATE(CLK_PCLK_ALB_G2D, "pclk_alb_g2d", "div_pclk_g2d",
  2281. DIV_ENABLE_PCLK_G2D, 4, 0, 0),
  2282. GATE(CLK_PCLK_ASYNCAXI_SYSX, "pclk_asyncaxi_sysx", "div_pclk_g2d",
  2283. DIV_ENABLE_PCLK_G2D, 3, 0, 0),
  2284. GATE(CLK_PCLK_PMU_G2D, "pclk_pmu_g2d", "div_pclk_g2d",
  2285. DIV_ENABLE_PCLK_G2D, 2, CLK_IGNORE_UNUSED, 0),
  2286. GATE(CLK_PCLK_SYSREG_G2D, "pclk_sysreg_g2d", "div_pclk_g2d",
  2287. DIV_ENABLE_PCLK_G2D, 1, CLK_IGNORE_UNUSED, 0),
  2288. GATE(CLK_PCLK_G2D, "pclk_g2d", "div_pclk_g2d", DIV_ENABLE_PCLK_G2D,
  2289. 0, 0, 0),
  2290. /* DIV_ENABLE_PCLK_G2D_SECURE_SMMU_G2D */
  2291. GATE(CLK_PCLK_SMMU_G2D, "pclk_smmu_g2d", "div_pclk_g2d",
  2292. DIV_ENABLE_PCLK_G2D_SECURE_SMMU_G2D, 0, 0, 0),
  2293. };
  2294. static struct samsung_cmu_info g2d_cmu_info __initdata = {
  2295. .mux_clks = g2d_mux_clks,
  2296. .nr_mux_clks = ARRAY_SIZE(g2d_mux_clks),
  2297. .div_clks = g2d_div_clks,
  2298. .nr_div_clks = ARRAY_SIZE(g2d_div_clks),
  2299. .gate_clks = g2d_gate_clks,
  2300. .nr_gate_clks = ARRAY_SIZE(g2d_gate_clks),
  2301. .nr_clk_ids = G2D_NR_CLK,
  2302. .clk_regs = g2d_clk_regs,
  2303. .nr_clk_regs = ARRAY_SIZE(g2d_clk_regs),
  2304. };
  2305. static void __init exynos5433_cmu_g2d_init(struct device_node *np)
  2306. {
  2307. samsung_cmu_register_one(np, &g2d_cmu_info);
  2308. }
  2309. CLK_OF_DECLARE(exynos5433_cmu_g2d, "samsung,exynos5433-cmu-g2d",
  2310. exynos5433_cmu_g2d_init);
  2311. /*
  2312. * Register offset definitions for CMU_DISP
  2313. */
  2314. #define DISP_PLL_LOCK 0x0000
  2315. #define DISP_PLL_CON0 0x0100
  2316. #define DISP_PLL_CON1 0x0104
  2317. #define DISP_PLL_FREQ_DET 0x0108
  2318. #define MUX_SEL_DISP0 0x0200
  2319. #define MUX_SEL_DISP1 0x0204
  2320. #define MUX_SEL_DISP2 0x0208
  2321. #define MUX_SEL_DISP3 0x020c
  2322. #define MUX_SEL_DISP4 0x0210
  2323. #define MUX_ENABLE_DISP0 0x0300
  2324. #define MUX_ENABLE_DISP1 0x0304
  2325. #define MUX_ENABLE_DISP2 0x0308
  2326. #define MUX_ENABLE_DISP3 0x030c
  2327. #define MUX_ENABLE_DISP4 0x0310
  2328. #define MUX_STAT_DISP0 0x0400
  2329. #define MUX_STAT_DISP1 0x0404
  2330. #define MUX_STAT_DISP2 0x0408
  2331. #define MUX_STAT_DISP3 0x040c
  2332. #define MUX_STAT_DISP4 0x0410
  2333. #define MUX_IGNORE_DISP2 0x0508
  2334. #define DIV_DISP 0x0600
  2335. #define DIV_DISP_PLL_FREQ_DET 0x0604
  2336. #define DIV_STAT_DISP 0x0700
  2337. #define DIV_STAT_DISP_PLL_FREQ_DET 0x0704
  2338. #define ENABLE_ACLK_DISP0 0x0800
  2339. #define ENABLE_ACLK_DISP1 0x0804
  2340. #define ENABLE_PCLK_DISP 0x0900
  2341. #define ENABLE_SCLK_DISP 0x0a00
  2342. #define ENABLE_IP_DISP0 0x0b00
  2343. #define ENABLE_IP_DISP1 0x0b04
  2344. #define CLKOUT_CMU_DISP 0x0c00
  2345. #define CLKOUT_CMU_DISP_DIV_STAT 0x0c04
  2346. static unsigned long disp_clk_regs[] __initdata = {
  2347. DISP_PLL_LOCK,
  2348. DISP_PLL_CON0,
  2349. DISP_PLL_CON1,
  2350. DISP_PLL_FREQ_DET,
  2351. MUX_SEL_DISP0,
  2352. MUX_SEL_DISP1,
  2353. MUX_SEL_DISP2,
  2354. MUX_SEL_DISP3,
  2355. MUX_SEL_DISP4,
  2356. MUX_ENABLE_DISP0,
  2357. MUX_ENABLE_DISP1,
  2358. MUX_ENABLE_DISP2,
  2359. MUX_ENABLE_DISP3,
  2360. MUX_ENABLE_DISP4,
  2361. MUX_STAT_DISP0,
  2362. MUX_STAT_DISP1,
  2363. MUX_STAT_DISP2,
  2364. MUX_STAT_DISP3,
  2365. MUX_STAT_DISP4,
  2366. MUX_IGNORE_DISP2,
  2367. DIV_DISP,
  2368. DIV_DISP_PLL_FREQ_DET,
  2369. DIV_STAT_DISP,
  2370. DIV_STAT_DISP_PLL_FREQ_DET,
  2371. ENABLE_ACLK_DISP0,
  2372. ENABLE_ACLK_DISP1,
  2373. ENABLE_PCLK_DISP,
  2374. ENABLE_SCLK_DISP,
  2375. ENABLE_IP_DISP0,
  2376. ENABLE_IP_DISP1,
  2377. CLKOUT_CMU_DISP,
  2378. CLKOUT_CMU_DISP_DIV_STAT,
  2379. };
  2380. /* list of all parent clock list */
  2381. PNAME(mout_disp_pll_p) = { "oscclk", "fout_disp_pll", };
  2382. PNAME(mout_sclk_dsim1_user_p) = { "oscclk", "sclk_dsim1_disp", };
  2383. PNAME(mout_sclk_dsim0_user_p) = { "oscclk", "sclk_dsim0_disp", };
  2384. PNAME(mout_sclk_dsd_user_p) = { "oscclk", "sclk_dsd_disp", };
  2385. PNAME(mout_sclk_decon_tv_eclk_user_p) = { "oscclk",
  2386. "sclk_decon_tv_eclk_disp", };
  2387. PNAME(mout_sclk_decon_vclk_user_p) = { "oscclk",
  2388. "sclk_decon_vclk_disp", };
  2389. PNAME(mout_sclk_decon_eclk_user_p) = { "oscclk",
  2390. "sclk_decon_eclk_disp", };
  2391. PNAME(mout_sclk_decon_tv_vlkc_user_p) = { "oscclk",
  2392. "sclk_decon_tv_vclk_disp", };
  2393. PNAME(mout_aclk_disp_333_user_p) = { "oscclk", "aclk_disp_333", };
  2394. PNAME(mout_phyclk_mipidphy1_bitclkdiv8_user_p) = { "oscclk",
  2395. "phyclk_mipidphy1_bitclkdiv8_phy", };
  2396. PNAME(mout_phyclk_mipidphy1_rxclkesc0_user_p) = { "oscclk",
  2397. "phyclk_mipidphy1_rxclkesc0_phy", };
  2398. PNAME(mout_phyclk_mipidphy0_bitclkdiv8_user_p) = { "oscclk",
  2399. "phyclk_mipidphy0_bitclkdiv8_phy", };
  2400. PNAME(mout_phyclk_mipidphy0_rxclkesc0_user_p) = { "oscclk",
  2401. "phyclk_mipidphy0_rxclkesc0_phy", };
  2402. PNAME(mout_phyclk_hdmiphy_tmds_clko_user_p) = { "oscclk",
  2403. "phyclk_hdmiphy_tmds_clko_phy", };
  2404. PNAME(mout_phyclk_hdmiphy_pixel_clko_user_p) = { "oscclk",
  2405. "phyclk_hdmiphy_pixel_clko_phy", };
  2406. PNAME(mout_sclk_dsim0_p) = { "mout_disp_pll",
  2407. "mout_sclk_dsim0_user", };
  2408. PNAME(mout_sclk_decon_tv_eclk_p) = { "mout_disp_pll",
  2409. "mout_sclk_decon_tv_eclk_user", };
  2410. PNAME(mout_sclk_decon_vclk_p) = { "mout_disp_pll",
  2411. "mout_sclk_decon_vclk_user", };
  2412. PNAME(mout_sclk_decon_eclk_p) = { "mout_disp_pll",
  2413. "mout_sclk_decon_eclk_user", };
  2414. PNAME(mout_sclk_dsim1_b_disp_p) = { "mout_sclk_dsim1_a_disp",
  2415. "mout_sclk_dsim1_user", };
  2416. PNAME(mout_sclk_decon_tv_vclk_c_disp_p) = {
  2417. "mout_phyclk_hdmiphy_pixel_clko_user",
  2418. "mout_sclk_decon_tv_vclk_b_disp", };
  2419. PNAME(mout_sclk_decon_tv_vclk_b_disp_p) = { "mout_sclk_decon_tv_vclk_a_disp",
  2420. "mout_sclk_decon_tv_vclk_user", };
  2421. static struct samsung_pll_clock disp_pll_clks[] __initdata = {
  2422. PLL(pll_35xx, CLK_FOUT_DISP_PLL, "fout_disp_pll", "oscclk",
  2423. DISP_PLL_LOCK, DISP_PLL_CON0, exynos5443_pll_rates),
  2424. };
  2425. static struct samsung_fixed_factor_clock disp_fixed_factor_clks[] __initdata = {
  2426. /*
  2427. * sclk_rgb_{vclk|tv_vclk} is half clock of sclk_decon_{vclk|tv_vclk}.
  2428. * The divider has fixed value (2) between sclk_rgb_{vclk|tv_vclk}
  2429. * and sclk_decon_{vclk|tv_vclk}.
  2430. */
  2431. FFACTOR(CLK_SCLK_RGB_VCLK, "sclk_rgb_vclk", "sclk_decon_vclk",
  2432. 1, 2, 0),
  2433. FFACTOR(CLK_SCLK_RGB_TV_VCLK, "sclk_rgb_tv_vclk", "sclk_decon_tv_vclk",
  2434. 1, 2, 0),
  2435. };
  2436. static struct samsung_fixed_rate_clock disp_fixed_clks[] __initdata = {
  2437. /* PHY clocks from MIPI_DPHY1 */
  2438. FRATE(0, "phyclk_mipidphy1_bitclkdiv8_phy", NULL, CLK_IS_ROOT,
  2439. 188000000),
  2440. FRATE(0, "phyclk_mipidphy1_rxclkesc0_phy", NULL, CLK_IS_ROOT,
  2441. 100000000),
  2442. /* PHY clocks from MIPI_DPHY0 */
  2443. FRATE(0, "phyclk_mipidphy0_bitclkdiv8_phy", NULL, CLK_IS_ROOT,
  2444. 188000000),
  2445. FRATE(0, "phyclk_mipidphy0_rxclkesc0_phy", NULL, CLK_IS_ROOT,
  2446. 100000000),
  2447. /* PHY clocks from HDMI_PHY */
  2448. FRATE(0, "phyclk_hdmiphy_tmds_clko_phy", NULL, CLK_IS_ROOT, 300000000),
  2449. FRATE(0, "phyclk_hdmiphy_pixel_clko_phy", NULL, CLK_IS_ROOT, 166000000),
  2450. };
  2451. static struct samsung_mux_clock disp_mux_clks[] __initdata = {
  2452. /* MUX_SEL_DISP0 */
  2453. MUX(CLK_MOUT_DISP_PLL, "mout_disp_pll", mout_disp_pll_p, MUX_SEL_DISP0,
  2454. 0, 1),
  2455. /* MUX_SEL_DISP1 */
  2456. MUX(CLK_MOUT_SCLK_DSIM1_USER, "mout_sclk_dsim1_user",
  2457. mout_sclk_dsim1_user_p, MUX_SEL_DISP1, 28, 1),
  2458. MUX(CLK_MOUT_SCLK_DSIM0_USER, "mout_sclk_dsim0_user",
  2459. mout_sclk_dsim0_user_p, MUX_SEL_DISP1, 24, 1),
  2460. MUX(CLK_MOUT_SCLK_DSD_USER, "mout_sclk_dsd_user", mout_sclk_dsd_user_p,
  2461. MUX_SEL_DISP1, 20, 1),
  2462. MUX(CLK_MOUT_SCLK_DECON_TV_ECLK_USER, "mout_sclk_decon_tv_eclk_user",
  2463. mout_sclk_decon_tv_eclk_user_p, MUX_SEL_DISP1, 16, 1),
  2464. MUX(CLK_MOUT_SCLK_DECON_VCLK_USER, "mout_sclk_decon_vclk_user",
  2465. mout_sclk_decon_vclk_user_p, MUX_SEL_DISP1, 12, 1),
  2466. MUX(CLK_MOUT_SCLK_DECON_ECLK_USER, "mout_sclk_decon_eclk_user",
  2467. mout_sclk_decon_eclk_user_p, MUX_SEL_DISP1, 8, 1),
  2468. MUX(CLK_MOUT_SCLK_DECON_TV_VCLK_USER, "mout_sclk_decon_tv_vclk_user",
  2469. mout_sclk_decon_tv_vlkc_user_p, MUX_SEL_DISP1, 4, 1),
  2470. MUX(CLK_MOUT_ACLK_DISP_333_USER, "mout_aclk_disp_333_user",
  2471. mout_aclk_disp_333_user_p, MUX_SEL_DISP1, 0, 1),
  2472. /* MUX_SEL_DISP2 */
  2473. MUX(CLK_MOUT_PHYCLK_MIPIDPHY1_BITCLKDIV8_USER,
  2474. "mout_phyclk_mipidphy1_bitclkdiv8_user",
  2475. mout_phyclk_mipidphy1_bitclkdiv8_user_p, MUX_SEL_DISP2,
  2476. 20, 1),
  2477. MUX(CLK_MOUT_PHYCLK_MIPIDPHY1_RXCLKESC0_USER,
  2478. "mout_phyclk_mipidphy1_rxclkesc0_user",
  2479. mout_phyclk_mipidphy1_rxclkesc0_user_p, MUX_SEL_DISP2,
  2480. 16, 1),
  2481. MUX(CLK_MOUT_PHYCLK_MIPIDPHY0_BITCLKDIV8_USER,
  2482. "mout_phyclk_mipidphy0_bitclkdiv8_user",
  2483. mout_phyclk_mipidphy0_bitclkdiv8_user_p, MUX_SEL_DISP2,
  2484. 12, 1),
  2485. MUX(CLK_MOUT_PHYCLK_MIPIDPHY0_RXCLKESC0_USER,
  2486. "mout_phyclk_mipidphy0_rxclkesc0_user",
  2487. mout_phyclk_mipidphy0_rxclkesc0_user_p, MUX_SEL_DISP2,
  2488. 8, 1),
  2489. MUX(CLK_MOUT_PHYCLK_HDMIPHY_TMDS_CLKO_USER,
  2490. "mout_phyclk_hdmiphy_tmds_clko_user",
  2491. mout_phyclk_hdmiphy_tmds_clko_user_p, MUX_SEL_DISP2,
  2492. 4, 1),
  2493. MUX(CLK_MOUT_PHYCLK_HDMIPHY_PIXEL_CLKO_USER,
  2494. "mout_phyclk_hdmiphy_pixel_clko_user",
  2495. mout_phyclk_hdmiphy_pixel_clko_user_p, MUX_SEL_DISP2,
  2496. 0, 1),
  2497. /* MUX_SEL_DISP3 */
  2498. MUX(CLK_MOUT_SCLK_DSIM0, "mout_sclk_dsim0", mout_sclk_dsim0_p,
  2499. MUX_SEL_DISP3, 12, 1),
  2500. MUX(CLK_MOUT_SCLK_DECON_TV_ECLK, "mout_sclk_decon_tv_eclk",
  2501. mout_sclk_decon_tv_eclk_p, MUX_SEL_DISP3, 8, 1),
  2502. MUX(CLK_MOUT_SCLK_DECON_VCLK, "mout_sclk_decon_vclk",
  2503. mout_sclk_decon_vclk_p, MUX_SEL_DISP3, 4, 1),
  2504. MUX(CLK_MOUT_SCLK_DECON_ECLK, "mout_sclk_decon_eclk",
  2505. mout_sclk_decon_eclk_p, MUX_SEL_DISP3, 0, 1),
  2506. /* MUX_SEL_DISP4 */
  2507. MUX(CLK_MOUT_SCLK_DSIM1_B_DISP, "mout_sclk_dsim1_b_disp",
  2508. mout_sclk_dsim1_b_disp_p, MUX_SEL_DISP4, 16, 1),
  2509. MUX(CLK_MOUT_SCLK_DSIM1_A_DISP, "mout_sclk_dsim1_a_disp",
  2510. mout_sclk_dsim0_p, MUX_SEL_DISP4, 12, 1),
  2511. MUX(CLK_MOUT_SCLK_DECON_TV_VCLK_C_DISP,
  2512. "mout_sclk_decon_tv_vclk_c_disp",
  2513. mout_sclk_decon_tv_vclk_c_disp_p, MUX_SEL_DISP4, 8, 1),
  2514. MUX(CLK_MOUT_SCLK_DECON_TV_VCLK_B_DISP,
  2515. "mout_sclk_decon_tv_vclk_b_disp",
  2516. mout_sclk_decon_tv_vclk_b_disp_p, MUX_SEL_DISP4, 4, 1),
  2517. MUX(CLK_MOUT_SCLK_DECON_TV_VCLK_A_DISP,
  2518. "mout_sclk_decon_tv_vclk_a_disp",
  2519. mout_sclk_decon_vclk_p, MUX_SEL_DISP4, 0, 1),
  2520. };
  2521. static struct samsung_div_clock disp_div_clks[] __initdata = {
  2522. /* DIV_DISP */
  2523. DIV(CLK_DIV_SCLK_DSIM1_DISP, "div_sclk_dsim1_disp",
  2524. "mout_sclk_dsim1_b_disp", DIV_DISP, 24, 3),
  2525. DIV(CLK_DIV_SCLK_DECON_TV_VCLK_DISP, "div_sclk_decon_tv_vclk_disp",
  2526. "mout_sclk_decon_tv_vclk_c_disp", DIV_DISP, 20, 3),
  2527. DIV(CLK_DIV_SCLK_DSIM0_DISP, "div_sclk_dsim0_disp", "mout_sclk_dsim0",
  2528. DIV_DISP, 16, 3),
  2529. DIV(CLK_DIV_SCLK_DECON_TV_ECLK_DISP, "div_sclk_decon_tv_eclk_disp",
  2530. "mout_sclk_decon_tv_eclk", DIV_DISP, 12, 3),
  2531. DIV(CLK_DIV_SCLK_DECON_VCLK_DISP, "div_sclk_decon_vclk_disp",
  2532. "mout_sclk_decon_vclk", DIV_DISP, 8, 3),
  2533. DIV(CLK_DIV_SCLK_DECON_ECLK_DISP, "div_sclk_decon_eclk_disp",
  2534. "mout_sclk_decon_eclk", DIV_DISP, 4, 3),
  2535. DIV(CLK_DIV_PCLK_DISP, "div_pclk_disp", "mout_aclk_disp_333_user",
  2536. DIV_DISP, 0, 2),
  2537. };
  2538. static struct samsung_gate_clock disp_gate_clks[] __initdata = {
  2539. /* ENABLE_ACLK_DISP0 */
  2540. GATE(CLK_ACLK_DECON_TV, "aclk_decon_tv", "mout_aclk_disp_333_user",
  2541. ENABLE_ACLK_DISP0, 2, 0, 0),
  2542. GATE(CLK_ACLK_DECON, "aclk_decon", "mout_aclk_disp_333_user",
  2543. ENABLE_ACLK_DISP0, 0, 0, 0),
  2544. /* ENABLE_ACLK_DISP1 */
  2545. GATE(CLK_ACLK_SMMU_TV1X, "aclk_smmu_tv1x", "mout_aclk_disp_333_user",
  2546. ENABLE_ACLK_DISP1, 25, 0, 0),
  2547. GATE(CLK_ACLK_SMMU_TV0X, "aclk_smmu_tv0x", "mout_aclk_disp_333_user",
  2548. ENABLE_ACLK_DISP1, 24, 0, 0),
  2549. GATE(CLK_ACLK_SMMU_DECON1X, "aclk_smmu_decon1x",
  2550. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 23, 0, 0),
  2551. GATE(CLK_ACLK_SMMU_DECON0X, "aclk_smmu_decon0x",
  2552. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 22, 0, 0),
  2553. GATE(CLK_ACLK_BTS_DECON_TV_M3, "aclk_bts_decon_tv_m3",
  2554. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 21, 0, 0),
  2555. GATE(CLK_ACLK_BTS_DECON_TV_M2, "aclk_bts_decon_tv_m2",
  2556. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 20, 0, 0),
  2557. GATE(CLK_ACLK_BTS_DECON_TV_M1, "aclk_bts_decon_tv_m1",
  2558. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 19, 0, 0),
  2559. GATE(CLK_ACLK_BTS_DECON_TV_M0, "aclk-bts_decon_tv_m0",
  2560. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 18, 0, 0),
  2561. GATE(CLK_ACLK_BTS_DECON_NM4, "aclk_bts_decon_nm4",
  2562. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 17, 0, 0),
  2563. GATE(CLK_ACLK_BTS_DECON_NM3, "aclk_bts_decon_nm3",
  2564. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 16, 0, 0),
  2565. GATE(CLK_ACLK_BTS_DECON_NM2, "aclk_bts_decon_nm2",
  2566. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 15, 0, 0),
  2567. GATE(CLK_ACLK_BTS_DECON_NM1, "aclk_bts_decon_nm1",
  2568. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 14, 0, 0),
  2569. GATE(CLK_ACLK_BTS_DECON_NM0, "aclk_bts_decon_nm0",
  2570. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 13, 0, 0),
  2571. GATE(CLK_ACLK_AHB2APB_DISPSFR2P, "aclk_ahb2apb_dispsfr2p",
  2572. "div_pclk_disp", ENABLE_ACLK_DISP1,
  2573. 12, CLK_IGNORE_UNUSED, 0),
  2574. GATE(CLK_ACLK_AHB2APB_DISPSFR1P, "aclk_ahb2apb_dispsfr1p",
  2575. "div_pclk_disp", ENABLE_ACLK_DISP1,
  2576. 11, CLK_IGNORE_UNUSED, 0),
  2577. GATE(CLK_ACLK_AHB2APB_DISPSFR0P, "aclk_ahb2apb_dispsfr0p",
  2578. "div_pclk_disp", ENABLE_ACLK_DISP1,
  2579. 10, CLK_IGNORE_UNUSED, 0),
  2580. GATE(CLK_ACLK_AHB_DISPH, "aclk_ahb_disph", "div_pclk_disp",
  2581. ENABLE_ACLK_DISP1, 8, CLK_IGNORE_UNUSED, 0),
  2582. GATE(CLK_ACLK_XIU_TV1X, "aclk_xiu_tv1x", "mout_aclk_disp_333_user",
  2583. ENABLE_ACLK_DISP1, 7, 0, 0),
  2584. GATE(CLK_ACLK_XIU_TV0X, "aclk_xiu_tv0x", "mout_aclk_disp_333_user",
  2585. ENABLE_ACLK_DISP1, 6, 0, 0),
  2586. GATE(CLK_ACLK_XIU_DECON1X, "aclk_xiu_decon1x",
  2587. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 5, 0, 0),
  2588. GATE(CLK_ACLK_XIU_DECON0X, "aclk_xiu_decon0x",
  2589. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 4, 0, 0),
  2590. GATE(CLK_ACLK_XIU_DISP1X, "aclk_xiu_disp1x", "mout_aclk_disp_333_user",
  2591. ENABLE_ACLK_DISP1, 3, CLK_IGNORE_UNUSED, 0),
  2592. GATE(CLK_ACLK_XIU_DISPNP_100, "aclk_xiu_dispnp_100", "div_pclk_disp",
  2593. ENABLE_ACLK_DISP1, 2, CLK_IGNORE_UNUSED, 0),
  2594. GATE(CLK_ACLK_DISP1ND_333, "aclk_disp1nd_333",
  2595. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1, 1,
  2596. CLK_IGNORE_UNUSED, 0),
  2597. GATE(CLK_ACLK_DISP0ND_333, "aclk_disp0nd_333",
  2598. "mout_aclk_disp_333_user", ENABLE_ACLK_DISP1,
  2599. 0, CLK_IGNORE_UNUSED, 0),
  2600. /* ENABLE_PCLK_DISP */
  2601. GATE(CLK_PCLK_SMMU_TV1X, "pclk_smmu_tv1x", "div_pclk_disp",
  2602. ENABLE_PCLK_DISP, 23, 0, 0),
  2603. GATE(CLK_PCLK_SMMU_TV0X, "pclk_smmu_tv0x", "div_pclk_disp",
  2604. ENABLE_PCLK_DISP, 22, 0, 0),
  2605. GATE(CLK_PCLK_SMMU_DECON1X, "pclk_smmu_decon1x", "div_pclk_disp",
  2606. ENABLE_PCLK_DISP, 21, 0, 0),
  2607. GATE(CLK_PCLK_SMMU_DECON0X, "pclk_smmu_decon0x", "div_pclk_disp",
  2608. ENABLE_PCLK_DISP, 20, 0, 0),
  2609. GATE(CLK_PCLK_BTS_DECON_TV_M3, "pclk_bts_decon_tv_m3", "div_pclk_disp",
  2610. ENABLE_PCLK_DISP, 19, 0, 0),
  2611. GATE(CLK_PCLK_BTS_DECON_TV_M2, "pclk_bts_decon_tv_m2", "div_pclk_disp",
  2612. ENABLE_PCLK_DISP, 18, 0, 0),
  2613. GATE(CLK_PCLK_BTS_DECON_TV_M1, "pclk_bts_decon_tv_m1", "div_pclk_disp",
  2614. ENABLE_PCLK_DISP, 17, 0, 0),
  2615. GATE(CLK_PCLK_BTS_DECON_TV_M0, "pclk_bts_decon_tv_m0", "div_pclk_disp",
  2616. ENABLE_PCLK_DISP, 16, 0, 0),
  2617. GATE(CLK_PCLK_BTS_DECONM4, "pclk_bts_deconm4", "div_pclk_disp",
  2618. ENABLE_PCLK_DISP, 15, 0, 0),
  2619. GATE(CLK_PCLK_BTS_DECONM3, "pclk_bts_deconm3", "div_pclk_disp",
  2620. ENABLE_PCLK_DISP, 14, 0, 0),
  2621. GATE(CLK_PCLK_BTS_DECONM2, "pclk_bts_deconm2", "div_pclk_disp",
  2622. ENABLE_PCLK_DISP, 13, 0, 0),
  2623. GATE(CLK_PCLK_BTS_DECONM1, "pclk_bts_deconm1", "div_pclk_disp",
  2624. ENABLE_PCLK_DISP, 12, 0, 0),
  2625. GATE(CLK_PCLK_BTS_DECONM0, "pclk_bts_deconm0", "div_pclk_disp",
  2626. ENABLE_PCLK_DISP, 11, 0, 0),
  2627. GATE(CLK_PCLK_MIC1, "pclk_mic1", "div_pclk_disp",
  2628. ENABLE_PCLK_DISP, 10, 0, 0),
  2629. GATE(CLK_PCLK_PMU_DISP, "pclk_pmu_disp", "div_pclk_disp",
  2630. ENABLE_PCLK_DISP, 9, CLK_IGNORE_UNUSED, 0),
  2631. GATE(CLK_PCLK_SYSREG_DISP, "pclk_sysreg_disp", "div_pclk_disp",
  2632. ENABLE_PCLK_DISP, 8, CLK_IGNORE_UNUSED, 0),
  2633. GATE(CLK_PCLK_HDMIPHY, "pclk_hdmiphy", "div_pclk_disp",
  2634. ENABLE_PCLK_DISP, 7, 0, 0),
  2635. GATE(CLK_PCLK_HDMI, "pclk_hdmi", "div_pclk_disp",
  2636. ENABLE_PCLK_DISP, 6, 0, 0),
  2637. GATE(CLK_PCLK_MIC0, "pclk_mic0", "div_pclk_disp",
  2638. ENABLE_PCLK_DISP, 5, 0, 0),
  2639. GATE(CLK_PCLK_DSIM1, "pclk_dsim1", "div_pclk_disp",
  2640. ENABLE_PCLK_DISP, 3, 0, 0),
  2641. GATE(CLK_PCLK_DSIM0, "pclk_dsim0", "div_pclk_disp",
  2642. ENABLE_PCLK_DISP, 2, 0, 0),
  2643. GATE(CLK_PCLK_DECON_TV, "pclk_decon_tv", "div_pclk_disp",
  2644. ENABLE_PCLK_DISP, 1, 0, 0),
  2645. /* ENABLE_SCLK_DISP */
  2646. GATE(CLK_PHYCLK_MIPIDPHY1_BITCLKDIV8, "phyclk_mipidphy1_bitclkdiv8",
  2647. "mout_phyclk_mipidphy1_bitclkdiv8_user",
  2648. ENABLE_SCLK_DISP, 26, 0, 0),
  2649. GATE(CLK_PHYCLK_MIPIDPHY1_RXCLKESC0, "phyclk_mipidphy1_rxclkesc0",
  2650. "mout_phyclk_mipidphy1_rxclkesc0_user",
  2651. ENABLE_SCLK_DISP, 25, 0, 0),
  2652. GATE(CLK_SCLK_RGB_TV_VCLK_TO_DSIM1, "sclk_rgb_tv_vclk_to_dsim1",
  2653. "sclk_rgb_tv_vclk", ENABLE_SCLK_DISP, 24, 0, 0),
  2654. GATE(CLK_SCLK_RGB_TV_VCLK_TO_MIC1, "sclk_rgb_tv_vclk_to_mic1",
  2655. "sclk_rgb_tv_vclk", ENABLE_SCLK_DISP, 23, 0, 0),
  2656. GATE(CLK_SCLK_DSIM1, "sclk_dsim1", "div_sclk_dsim1_disp",
  2657. ENABLE_SCLK_DISP, 22, 0, 0),
  2658. GATE(CLK_SCLK_DECON_TV_VCLK, "sclk_decon_tv_vclk",
  2659. "div_sclk_decon_tv_vclk_disp",
  2660. ENABLE_SCLK_DISP, 21, 0, 0),
  2661. GATE(CLK_PHYCLK_MIPIDPHY0_BITCLKDIV8, "phyclk_mipidphy0_bitclkdiv8",
  2662. "mout_phyclk_mipidphy0_bitclkdiv8_user",
  2663. ENABLE_SCLK_DISP, 15, 0, 0),
  2664. GATE(CLK_PHYCLK_MIPIDPHY0_RXCLKESC0, "phyclk_mipidphy0_rxclkesc0",
  2665. "mout_phyclk_mipidphy0_rxclkesc0_user",
  2666. ENABLE_SCLK_DISP, 14, 0, 0),
  2667. GATE(CLK_PHYCLK_HDMIPHY_TMDS_CLKO, "phyclk_hdmiphy_tmds_clko",
  2668. "mout_phyclk_hdmiphy_tmds_clko_user",
  2669. ENABLE_SCLK_DISP, 13, 0, 0),
  2670. GATE(CLK_PHYCLK_HDMI_PIXEL, "phyclk_hdmi_pixel",
  2671. "sclk_rgb_tv_vclk", ENABLE_SCLK_DISP, 12, 0, 0),
  2672. GATE(CLK_SCLK_RGB_VCLK_TO_SMIES, "sclk_rgb_vclk_to_smies",
  2673. "sclk_rgb_vclk", ENABLE_SCLK_DISP, 11, 0, 0),
  2674. GATE(CLK_SCLK_RGB_VCLK_TO_DSIM0, "sclk_rgb_vclk_to_dsim0",
  2675. "sclk_rgb_vclk", ENABLE_SCLK_DISP, 9, 0, 0),
  2676. GATE(CLK_SCLK_RGB_VCLK_TO_MIC0, "sclk_rgb_vclk_to_mic0",
  2677. "sclk_rgb_vclk", ENABLE_SCLK_DISP, 8, 0, 0),
  2678. GATE(CLK_SCLK_DSD, "sclk_dsd", "mout_sclk_dsd_user",
  2679. ENABLE_SCLK_DISP, 7, 0, 0),
  2680. GATE(CLK_SCLK_HDMI_SPDIF, "sclk_hdmi_spdif", "sclk_hdmi_spdif_disp",
  2681. ENABLE_SCLK_DISP, 6, 0, 0),
  2682. GATE(CLK_SCLK_DSIM0, "sclk_dsim0", "div_sclk_dsim0_disp",
  2683. ENABLE_SCLK_DISP, 5, 0, 0),
  2684. GATE(CLK_SCLK_DECON_TV_ECLK, "sclk_decon_tv_eclk",
  2685. "div_sclk_decon_tv_eclk_disp",
  2686. ENABLE_SCLK_DISP, 4, 0, 0),
  2687. GATE(CLK_SCLK_DECON_VCLK, "sclk_decon_vclk",
  2688. "div_sclk_decon_vclk_disp", ENABLE_SCLK_DISP, 3, 0, 0),
  2689. GATE(CLK_SCLK_DECON_ECLK, "sclk_decon_eclk",
  2690. "div_sclk_decon_eclk_disp", ENABLE_SCLK_DISP, 2, 0, 0),
  2691. };
  2692. static struct samsung_cmu_info disp_cmu_info __initdata = {
  2693. .pll_clks = disp_pll_clks,
  2694. .nr_pll_clks = ARRAY_SIZE(disp_pll_clks),
  2695. .mux_clks = disp_mux_clks,
  2696. .nr_mux_clks = ARRAY_SIZE(disp_mux_clks),
  2697. .div_clks = disp_div_clks,
  2698. .nr_div_clks = ARRAY_SIZE(disp_div_clks),
  2699. .gate_clks = disp_gate_clks,
  2700. .nr_gate_clks = ARRAY_SIZE(disp_gate_clks),
  2701. .fixed_clks = disp_fixed_clks,
  2702. .nr_fixed_clks = ARRAY_SIZE(disp_fixed_clks),
  2703. .fixed_factor_clks = disp_fixed_factor_clks,
  2704. .nr_fixed_factor_clks = ARRAY_SIZE(disp_fixed_factor_clks),
  2705. .nr_clk_ids = DISP_NR_CLK,
  2706. .clk_regs = disp_clk_regs,
  2707. .nr_clk_regs = ARRAY_SIZE(disp_clk_regs),
  2708. };
  2709. static void __init exynos5433_cmu_disp_init(struct device_node *np)
  2710. {
  2711. samsung_cmu_register_one(np, &disp_cmu_info);
  2712. }
  2713. CLK_OF_DECLARE(exynos5433_cmu_disp, "samsung,exynos5433-cmu-disp",
  2714. exynos5433_cmu_disp_init);
  2715. /*
  2716. * Register offset definitions for CMU_AUD
  2717. */
  2718. #define MUX_SEL_AUD0 0x0200
  2719. #define MUX_SEL_AUD1 0x0204
  2720. #define MUX_ENABLE_AUD0 0x0300
  2721. #define MUX_ENABLE_AUD1 0x0304
  2722. #define MUX_STAT_AUD0 0x0400
  2723. #define DIV_AUD0 0x0600
  2724. #define DIV_AUD1 0x0604
  2725. #define DIV_STAT_AUD0 0x0700
  2726. #define DIV_STAT_AUD1 0x0704
  2727. #define ENABLE_ACLK_AUD 0x0800
  2728. #define ENABLE_PCLK_AUD 0x0900
  2729. #define ENABLE_SCLK_AUD0 0x0a00
  2730. #define ENABLE_SCLK_AUD1 0x0a04
  2731. #define ENABLE_IP_AUD0 0x0b00
  2732. #define ENABLE_IP_AUD1 0x0b04
  2733. static unsigned long aud_clk_regs[] __initdata = {
  2734. MUX_SEL_AUD0,
  2735. MUX_SEL_AUD1,
  2736. MUX_ENABLE_AUD0,
  2737. MUX_ENABLE_AUD1,
  2738. MUX_STAT_AUD0,
  2739. DIV_AUD0,
  2740. DIV_AUD1,
  2741. DIV_STAT_AUD0,
  2742. DIV_STAT_AUD1,
  2743. ENABLE_ACLK_AUD,
  2744. ENABLE_PCLK_AUD,
  2745. ENABLE_SCLK_AUD0,
  2746. ENABLE_SCLK_AUD1,
  2747. ENABLE_IP_AUD0,
  2748. ENABLE_IP_AUD1,
  2749. };
  2750. /* list of all parent clock list */
  2751. PNAME(mout_aud_pll_user_aud_p) = { "oscclk", "fout_aud_pll", };
  2752. PNAME(mout_sclk_aud_pcm_p) = { "mout_aud_pll_user", "ioclk_audiocdclk0",};
  2753. static struct samsung_fixed_rate_clock aud_fixed_clks[] __initdata = {
  2754. FRATE(0, "ioclk_jtag_tclk", NULL, CLK_IS_ROOT, 33000000),
  2755. FRATE(0, "ioclk_slimbus_clk", NULL, CLK_IS_ROOT, 25000000),
  2756. FRATE(0, "ioclk_i2s_bclk", NULL, CLK_IS_ROOT, 50000000),
  2757. };
  2758. static struct samsung_mux_clock aud_mux_clks[] __initdata = {
  2759. /* MUX_SEL_AUD0 */
  2760. MUX(CLK_MOUT_AUD_PLL_USER, "mout_aud_pll_user",
  2761. mout_aud_pll_user_aud_p, MUX_SEL_AUD0, 0, 1),
  2762. /* MUX_SEL_AUD1 */
  2763. MUX(CLK_MOUT_SCLK_AUD_PCM, "mout_sclk_aud_pcm", mout_sclk_aud_pcm_p,
  2764. MUX_SEL_AUD1, 8, 1),
  2765. MUX(CLK_MOUT_SCLK_AUD_I2S, "mout_sclk_aud_i2s", mout_sclk_aud_pcm_p,
  2766. MUX_SEL_AUD1, 0, 1),
  2767. };
  2768. static struct samsung_div_clock aud_div_clks[] __initdata = {
  2769. /* DIV_AUD0 */
  2770. DIV(CLK_DIV_ATCLK_AUD, "div_atclk_aud", "div_aud_ca5", DIV_AUD0,
  2771. 12, 4),
  2772. DIV(CLK_DIV_PCLK_DBG_AUD, "div_pclk_dbg_aud", "div_aud_ca5", DIV_AUD0,
  2773. 8, 4),
  2774. DIV(CLK_DIV_ACLK_AUD, "div_aclk_aud", "div_aud_ca5", DIV_AUD0,
  2775. 4, 4),
  2776. DIV(CLK_DIV_AUD_CA5, "div_aud_ca5", "mout_aud_pll_user", DIV_AUD0,
  2777. 0, 4),
  2778. /* DIV_AUD1 */
  2779. DIV(CLK_DIV_SCLK_AUD_SLIMBUS, "div_sclk_aud_slimbus",
  2780. "mout_aud_pll_user", DIV_AUD1, 16, 5),
  2781. DIV(CLK_DIV_SCLK_AUD_UART, "div_sclk_aud_uart", "mout_aud_pll_user",
  2782. DIV_AUD1, 12, 4),
  2783. DIV(CLK_DIV_SCLK_AUD_PCM, "div_sclk_aud_pcm", "mout_sclk_aud_pcm",
  2784. DIV_AUD1, 4, 8),
  2785. DIV(CLK_DIV_SCLK_AUD_I2S, "div_sclk_aud_i2s", "mout_sclk_aud_i2s",
  2786. DIV_AUD1, 0, 4),
  2787. };
  2788. static struct samsung_gate_clock aud_gate_clks[] __initdata = {
  2789. /* ENABLE_ACLK_AUD */
  2790. GATE(CLK_ACLK_INTR_CTRL, "aclk_intr_ctrl", "div_aclk_aud",
  2791. ENABLE_ACLK_AUD, 12, 0, 0),
  2792. GATE(CLK_ACLK_SMMU_LPASSX, "aclk_smmu_lpassx", "div_aclk_aud",
  2793. ENABLE_ACLK_AUD, 7, 0, 0),
  2794. GATE(CLK_ACLK_XIU_LPASSX, "aclk_xiu_lpassx", "div_aclk_aud",
  2795. ENABLE_ACLK_AUD, 0, 4, 0),
  2796. GATE(CLK_ACLK_AUDNP_133, "aclk_audnp_133", "div_aclk_aud",
  2797. ENABLE_ACLK_AUD, 0, 3, 0),
  2798. GATE(CLK_ACLK_AUDND_133, "aclk_audnd_133", "div_aclk_aud",
  2799. ENABLE_ACLK_AUD, 0, 2, 0),
  2800. GATE(CLK_ACLK_SRAMC, "aclk_sramc", "div_aclk_aud", ENABLE_ACLK_AUD,
  2801. 0, 1, 0),
  2802. GATE(CLK_ACLK_DMAC, "aclk_dmac", "div_aclk_aud", ENABLE_ACLK_AUD,
  2803. 0, CLK_IGNORE_UNUSED, 0),
  2804. /* ENABLE_PCLK_AUD */
  2805. GATE(CLK_PCLK_WDT1, "pclk_wdt1", "div_aclk_aud", ENABLE_PCLK_AUD,
  2806. 13, 0, 0),
  2807. GATE(CLK_PCLK_WDT0, "pclk_wdt0", "div_aclk_aud", ENABLE_PCLK_AUD,
  2808. 12, 0, 0),
  2809. GATE(CLK_PCLK_SFR1, "pclk_sfr1", "div_aclk_aud", ENABLE_PCLK_AUD,
  2810. 11, 0, 0),
  2811. GATE(CLK_PCLK_SMMU_LPASSX, "pclk_smmu_lpassx", "div_aclk_aud",
  2812. ENABLE_PCLK_AUD, 10, 0, 0),
  2813. GATE(CLK_PCLK_GPIO_AUD, "pclk_gpio_aud", "div_aclk_aud",
  2814. ENABLE_PCLK_AUD, 9, CLK_IGNORE_UNUSED, 0),
  2815. GATE(CLK_PCLK_PMU_AUD, "pclk_pmu_aud", "div_aclk_aud",
  2816. ENABLE_PCLK_AUD, 8, CLK_IGNORE_UNUSED, 0),
  2817. GATE(CLK_PCLK_SYSREG_AUD, "pclk_sysreg_aud", "div_aclk_aud",
  2818. ENABLE_PCLK_AUD, 7, CLK_IGNORE_UNUSED, 0),
  2819. GATE(CLK_PCLK_AUD_SLIMBUS, "pclk_aud_slimbus", "div_aclk_aud",
  2820. ENABLE_PCLK_AUD, 6, 0, 0),
  2821. GATE(CLK_PCLK_AUD_UART, "pclk_aud_uart", "div_aclk_aud",
  2822. ENABLE_PCLK_AUD, 5, 0, 0),
  2823. GATE(CLK_PCLK_AUD_PCM, "pclk_aud_pcm", "div_aclk_aud",
  2824. ENABLE_PCLK_AUD, 4, 0, 0),
  2825. GATE(CLK_PCLK_AUD_I2S, "pclk_aud_i2s", "div_aclk_aud",
  2826. ENABLE_PCLK_AUD, 3, 0, 0),
  2827. GATE(CLK_PCLK_TIMER, "pclk_timer", "div_aclk_aud", ENABLE_PCLK_AUD,
  2828. 2, 0, 0),
  2829. GATE(CLK_PCLK_SFR0_CTRL, "pclk_sfr0_ctrl", "div_aclk_aud",
  2830. ENABLE_PCLK_AUD, 0, 0, 0),
  2831. /* ENABLE_SCLK_AUD0 */
  2832. GATE(CLK_ATCLK_AUD, "atclk_aud", "div_atclk_aud", ENABLE_SCLK_AUD0,
  2833. 2, 0, 0),
  2834. GATE(CLK_PCLK_DBG_AUD, "pclk_dbg_aud", "div_pclk_dbg_aud",
  2835. ENABLE_SCLK_AUD0, 1, 0, 0),
  2836. GATE(CLK_SCLK_AUD_CA5, "sclk_aud_ca5", "div_aud_ca5", ENABLE_SCLK_AUD0,
  2837. 0, 0, 0),
  2838. /* ENABLE_SCLK_AUD1 */
  2839. GATE(CLK_SCLK_JTAG_TCK, "sclk_jtag_tck", "ioclk_jtag_tclk",
  2840. ENABLE_SCLK_AUD1, 6, 0, 0),
  2841. GATE(CLK_SCLK_SLIMBUS_CLKIN, "sclk_slimbus_clkin", "ioclk_slimbus_clk",
  2842. ENABLE_SCLK_AUD1, 5, 0, 0),
  2843. GATE(CLK_SCLK_AUD_SLIMBUS, "sclk_aud_slimbus", "div_sclk_aud_slimbus",
  2844. ENABLE_SCLK_AUD1, 4, 0, 0),
  2845. GATE(CLK_SCLK_AUD_UART, "sclk_aud_uart", "div_sclk_aud_uart",
  2846. ENABLE_SCLK_AUD1, 3, 0, 0),
  2847. GATE(CLK_SCLK_AUD_PCM, "sclk_aud_pcm", "div_sclk_aud_pcm",
  2848. ENABLE_SCLK_AUD1, 2, 0, 0),
  2849. GATE(CLK_SCLK_I2S_BCLK, "sclk_i2s_bclk", "ioclk_i2s_bclk",
  2850. ENABLE_SCLK_AUD1, 1, CLK_IGNORE_UNUSED, 0),
  2851. GATE(CLK_SCLK_AUD_I2S, "sclk_aud_i2s", "div_sclk_aud_i2s",
  2852. ENABLE_SCLK_AUD1, 0, CLK_IGNORE_UNUSED, 0),
  2853. };
  2854. static struct samsung_cmu_info aud_cmu_info __initdata = {
  2855. .mux_clks = aud_mux_clks,
  2856. .nr_mux_clks = ARRAY_SIZE(aud_mux_clks),
  2857. .div_clks = aud_div_clks,
  2858. .nr_div_clks = ARRAY_SIZE(aud_div_clks),
  2859. .gate_clks = aud_gate_clks,
  2860. .nr_gate_clks = ARRAY_SIZE(aud_gate_clks),
  2861. .fixed_clks = aud_fixed_clks,
  2862. .nr_fixed_clks = ARRAY_SIZE(aud_fixed_clks),
  2863. .nr_clk_ids = AUD_NR_CLK,
  2864. .clk_regs = aud_clk_regs,
  2865. .nr_clk_regs = ARRAY_SIZE(aud_clk_regs),
  2866. };
  2867. static void __init exynos5433_cmu_aud_init(struct device_node *np)
  2868. {
  2869. samsung_cmu_register_one(np, &aud_cmu_info);
  2870. }
  2871. CLK_OF_DECLARE(exynos5433_cmu_aud, "samsung,exynos5433-cmu-aud",
  2872. exynos5433_cmu_aud_init);
  2873. /*
  2874. * Register offset definitions for CMU_BUS{0|1|2}
  2875. */
  2876. #define DIV_BUS 0x0600
  2877. #define DIV_STAT_BUS 0x0700
  2878. #define ENABLE_ACLK_BUS 0x0800
  2879. #define ENABLE_PCLK_BUS 0x0900
  2880. #define ENABLE_IP_BUS0 0x0b00
  2881. #define ENABLE_IP_BUS1 0x0b04
  2882. #define MUX_SEL_BUS2 0x0200 /* Only for CMU_BUS2 */
  2883. #define MUX_ENABLE_BUS2 0x0300 /* Only for CMU_BUS2 */
  2884. #define MUX_STAT_BUS2 0x0400 /* Only for CMU_BUS2 */
  2885. /* list of all parent clock list */
  2886. PNAME(mout_aclk_bus2_400_p) = { "oscclk", "aclk_bus2_400", };
  2887. #define CMU_BUS_COMMON_CLK_REGS \
  2888. DIV_BUS, \
  2889. DIV_STAT_BUS, \
  2890. ENABLE_ACLK_BUS, \
  2891. ENABLE_PCLK_BUS, \
  2892. ENABLE_IP_BUS0, \
  2893. ENABLE_IP_BUS1
  2894. static unsigned long bus01_clk_regs[] __initdata = {
  2895. CMU_BUS_COMMON_CLK_REGS,
  2896. };
  2897. static unsigned long bus2_clk_regs[] __initdata = {
  2898. MUX_SEL_BUS2,
  2899. MUX_ENABLE_BUS2,
  2900. MUX_STAT_BUS2,
  2901. CMU_BUS_COMMON_CLK_REGS,
  2902. };
  2903. static struct samsung_div_clock bus0_div_clks[] __initdata = {
  2904. /* DIV_BUS0 */
  2905. DIV(CLK_DIV_PCLK_BUS_133, "div_pclk_bus0_133", "aclk_bus0_400",
  2906. DIV_BUS, 0, 3),
  2907. };
  2908. /* CMU_BUS0 clocks */
  2909. static struct samsung_gate_clock bus0_gate_clks[] __initdata = {
  2910. /* ENABLE_ACLK_BUS0 */
  2911. GATE(CLK_ACLK_AHB2APB_BUSP, "aclk_ahb2apb_bus0p", "div_pclk_bus0_133",
  2912. ENABLE_ACLK_BUS, 4, CLK_IGNORE_UNUSED, 0),
  2913. GATE(CLK_ACLK_BUSNP_133, "aclk_bus0np_133", "div_pclk_bus0_133",
  2914. ENABLE_ACLK_BUS, 2, CLK_IGNORE_UNUSED, 0),
  2915. GATE(CLK_ACLK_BUSND_400, "aclk_bus0nd_400", "aclk_bus0_400",
  2916. ENABLE_ACLK_BUS, 0, CLK_IGNORE_UNUSED, 0),
  2917. /* ENABLE_PCLK_BUS0 */
  2918. GATE(CLK_PCLK_BUSSRVND_133, "pclk_bus0srvnd_133", "div_pclk_bus0_133",
  2919. ENABLE_PCLK_BUS, 2, 0, 0),
  2920. GATE(CLK_PCLK_PMU_BUS, "pclk_pmu_bus0", "div_pclk_bus0_133",
  2921. ENABLE_PCLK_BUS, 1, CLK_IGNORE_UNUSED, 0),
  2922. GATE(CLK_PCLK_SYSREG_BUS, "pclk_sysreg_bus0", "div_pclk_bus0_133",
  2923. ENABLE_PCLK_BUS, 0, CLK_IGNORE_UNUSED, 0),
  2924. };
  2925. /* CMU_BUS1 clocks */
  2926. static struct samsung_div_clock bus1_div_clks[] __initdata = {
  2927. /* DIV_BUS1 */
  2928. DIV(CLK_DIV_PCLK_BUS_133, "div_pclk_bus1_133", "aclk_bus1_400",
  2929. DIV_BUS, 0, 3),
  2930. };
  2931. static struct samsung_gate_clock bus1_gate_clks[] __initdata = {
  2932. /* ENABLE_ACLK_BUS1 */
  2933. GATE(CLK_ACLK_AHB2APB_BUSP, "aclk_ahb2apb_bus1p", "div_pclk_bus1_133",
  2934. ENABLE_ACLK_BUS, 4, CLK_IGNORE_UNUSED, 0),
  2935. GATE(CLK_ACLK_BUSNP_133, "aclk_bus1np_133", "div_pclk_bus1_133",
  2936. ENABLE_ACLK_BUS, 2, CLK_IGNORE_UNUSED, 0),
  2937. GATE(CLK_ACLK_BUSND_400, "aclk_bus1nd_400", "aclk_bus1_400",
  2938. ENABLE_ACLK_BUS, 0, CLK_IGNORE_UNUSED, 0),
  2939. /* ENABLE_PCLK_BUS1 */
  2940. GATE(CLK_PCLK_BUSSRVND_133, "pclk_bus1srvnd_133", "div_pclk_bus1_133",
  2941. ENABLE_PCLK_BUS, 2, 0, 0),
  2942. GATE(CLK_PCLK_PMU_BUS, "pclk_pmu_bus1", "div_pclk_bus1_133",
  2943. ENABLE_PCLK_BUS, 1, CLK_IGNORE_UNUSED, 0),
  2944. GATE(CLK_PCLK_SYSREG_BUS, "pclk_sysreg_bus1", "div_pclk_bus1_133",
  2945. ENABLE_PCLK_BUS, 0, CLK_IGNORE_UNUSED, 0),
  2946. };
  2947. /* CMU_BUS2 clocks */
  2948. static struct samsung_mux_clock bus2_mux_clks[] __initdata = {
  2949. /* MUX_SEL_BUS2 */
  2950. MUX(CLK_MOUT_ACLK_BUS2_400_USER, "mout_aclk_bus2_400_user",
  2951. mout_aclk_bus2_400_p, MUX_SEL_BUS2, 0, 1),
  2952. };
  2953. static struct samsung_div_clock bus2_div_clks[] __initdata = {
  2954. /* DIV_BUS2 */
  2955. DIV(CLK_DIV_PCLK_BUS_133, "div_pclk_bus2_133",
  2956. "mout_aclk_bus2_400_user", DIV_BUS, 0, 3),
  2957. };
  2958. static struct samsung_gate_clock bus2_gate_clks[] __initdata = {
  2959. /* ENABLE_ACLK_BUS2 */
  2960. GATE(CLK_ACLK_AHB2APB_BUSP, "aclk_ahb2apb_bus2p", "div_pclk_bus2_133",
  2961. ENABLE_ACLK_BUS, 3, CLK_IGNORE_UNUSED, 0),
  2962. GATE(CLK_ACLK_BUSNP_133, "aclk_bus2np_133", "div_pclk_bus2_133",
  2963. ENABLE_ACLK_BUS, 2, CLK_IGNORE_UNUSED, 0),
  2964. GATE(CLK_ACLK_BUS2BEND_400, "aclk_bus2bend_400",
  2965. "mout_aclk_bus2_400_user", ENABLE_ACLK_BUS,
  2966. 1, CLK_IGNORE_UNUSED, 0),
  2967. GATE(CLK_ACLK_BUS2RTND_400, "aclk_bus2rtnd_400",
  2968. "mout_aclk_bus2_400_user", ENABLE_ACLK_BUS,
  2969. 0, CLK_IGNORE_UNUSED, 0),
  2970. /* ENABLE_PCLK_BUS2 */
  2971. GATE(CLK_PCLK_BUSSRVND_133, "pclk_bus2srvnd_133", "div_pclk_bus2_133",
  2972. ENABLE_PCLK_BUS, 2, 0, 0),
  2973. GATE(CLK_PCLK_PMU_BUS, "pclk_pmu_bus2", "div_pclk_bus2_133",
  2974. ENABLE_PCLK_BUS, 1, CLK_IGNORE_UNUSED, 0),
  2975. GATE(CLK_PCLK_SYSREG_BUS, "pclk_sysreg_bus2", "div_pclk_bus2_133",
  2976. ENABLE_PCLK_BUS, 0, CLK_IGNORE_UNUSED, 0),
  2977. };
  2978. #define CMU_BUS_INFO_CLKS(id) \
  2979. .div_clks = bus##id##_div_clks, \
  2980. .nr_div_clks = ARRAY_SIZE(bus##id##_div_clks), \
  2981. .gate_clks = bus##id##_gate_clks, \
  2982. .nr_gate_clks = ARRAY_SIZE(bus##id##_gate_clks), \
  2983. .nr_clk_ids = BUSx_NR_CLK
  2984. static struct samsung_cmu_info bus0_cmu_info __initdata = {
  2985. CMU_BUS_INFO_CLKS(0),
  2986. .clk_regs = bus01_clk_regs,
  2987. .nr_clk_regs = ARRAY_SIZE(bus01_clk_regs),
  2988. };
  2989. static struct samsung_cmu_info bus1_cmu_info __initdata = {
  2990. CMU_BUS_INFO_CLKS(1),
  2991. .clk_regs = bus01_clk_regs,
  2992. .nr_clk_regs = ARRAY_SIZE(bus01_clk_regs),
  2993. };
  2994. static struct samsung_cmu_info bus2_cmu_info __initdata = {
  2995. CMU_BUS_INFO_CLKS(2),
  2996. .mux_clks = bus2_mux_clks,
  2997. .nr_mux_clks = ARRAY_SIZE(bus2_mux_clks),
  2998. .clk_regs = bus2_clk_regs,
  2999. .nr_clk_regs = ARRAY_SIZE(bus2_clk_regs),
  3000. };
  3001. #define exynos5433_cmu_bus_init(id) \
  3002. static void __init exynos5433_cmu_bus##id##_init(struct device_node *np)\
  3003. { \
  3004. samsung_cmu_register_one(np, &bus##id##_cmu_info); \
  3005. } \
  3006. CLK_OF_DECLARE(exynos5433_cmu_bus##id, \
  3007. "samsung,exynos5433-cmu-bus"#id, \
  3008. exynos5433_cmu_bus##id##_init)
  3009. exynos5433_cmu_bus_init(0);
  3010. exynos5433_cmu_bus_init(1);
  3011. exynos5433_cmu_bus_init(2);
  3012. /*
  3013. * Register offset definitions for CMU_G3D
  3014. */
  3015. #define G3D_PLL_LOCK 0x0000
  3016. #define G3D_PLL_CON0 0x0100
  3017. #define G3D_PLL_CON1 0x0104
  3018. #define G3D_PLL_FREQ_DET 0x010c
  3019. #define MUX_SEL_G3D 0x0200
  3020. #define MUX_ENABLE_G3D 0x0300
  3021. #define MUX_STAT_G3D 0x0400
  3022. #define DIV_G3D 0x0600
  3023. #define DIV_G3D_PLL_FREQ_DET 0x0604
  3024. #define DIV_STAT_G3D 0x0700
  3025. #define DIV_STAT_G3D_PLL_FREQ_DET 0x0704
  3026. #define ENABLE_ACLK_G3D 0x0800
  3027. #define ENABLE_PCLK_G3D 0x0900
  3028. #define ENABLE_SCLK_G3D 0x0a00
  3029. #define ENABLE_IP_G3D0 0x0b00
  3030. #define ENABLE_IP_G3D1 0x0b04
  3031. #define CLKOUT_CMU_G3D 0x0c00
  3032. #define CLKOUT_CMU_G3D_DIV_STAT 0x0c04
  3033. #define CLK_STOPCTRL 0x1000
  3034. static unsigned long g3d_clk_regs[] __initdata = {
  3035. G3D_PLL_LOCK,
  3036. G3D_PLL_CON0,
  3037. G3D_PLL_CON1,
  3038. G3D_PLL_FREQ_DET,
  3039. MUX_SEL_G3D,
  3040. MUX_ENABLE_G3D,
  3041. MUX_STAT_G3D,
  3042. DIV_G3D,
  3043. DIV_G3D_PLL_FREQ_DET,
  3044. DIV_STAT_G3D,
  3045. DIV_STAT_G3D_PLL_FREQ_DET,
  3046. ENABLE_ACLK_G3D,
  3047. ENABLE_PCLK_G3D,
  3048. ENABLE_SCLK_G3D,
  3049. ENABLE_IP_G3D0,
  3050. ENABLE_IP_G3D1,
  3051. CLKOUT_CMU_G3D,
  3052. CLKOUT_CMU_G3D_DIV_STAT,
  3053. CLK_STOPCTRL,
  3054. };
  3055. /* list of all parent clock list */
  3056. PNAME(mout_aclk_g3d_400_p) = { "mout_g3d_pll", "aclk_g3d_400", };
  3057. PNAME(mout_g3d_pll_p) = { "oscclk", "fout_g3d_pll", };
  3058. static struct samsung_pll_clock g3d_pll_clks[] __initdata = {
  3059. PLL(pll_35xx, CLK_FOUT_G3D_PLL, "fout_g3d_pll", "oscclk",
  3060. G3D_PLL_LOCK, G3D_PLL_CON0, exynos5443_pll_rates),
  3061. };
  3062. static struct samsung_mux_clock g3d_mux_clks[] __initdata = {
  3063. /* MUX_SEL_G3D */
  3064. MUX_F(CLK_MOUT_ACLK_G3D_400, "mout_aclk_g3d_400", mout_aclk_g3d_400_p,
  3065. MUX_SEL_G3D, 8, 1, CLK_SET_RATE_PARENT, 0),
  3066. MUX_F(CLK_MOUT_G3D_PLL, "mout_g3d_pll", mout_g3d_pll_p,
  3067. MUX_SEL_G3D, 0, 1, CLK_SET_RATE_PARENT, 0),
  3068. };
  3069. static struct samsung_div_clock g3d_div_clks[] __initdata = {
  3070. /* DIV_G3D */
  3071. DIV(CLK_DIV_SCLK_HPM_G3D, "div_sclk_hpm_g3d", "mout_g3d_pll", DIV_G3D,
  3072. 8, 2),
  3073. DIV(CLK_DIV_PCLK_G3D, "div_pclk_g3d", "div_aclk_g3d", DIV_G3D,
  3074. 4, 3),
  3075. DIV_F(CLK_DIV_ACLK_G3D, "div_aclk_g3d", "mout_aclk_g3d_400", DIV_G3D,
  3076. 0, 3, CLK_SET_RATE_PARENT, 0),
  3077. };
  3078. static struct samsung_gate_clock g3d_gate_clks[] __initdata = {
  3079. /* ENABLE_ACLK_G3D */
  3080. GATE(CLK_ACLK_BTS_G3D1, "aclk_bts_g3d1", "div_aclk_g3d",
  3081. ENABLE_ACLK_G3D, 7, 0, 0),
  3082. GATE(CLK_ACLK_BTS_G3D0, "aclk_bts_g3d0", "div_aclk_g3d",
  3083. ENABLE_ACLK_G3D, 6, 0, 0),
  3084. GATE(CLK_ACLK_ASYNCAPBS_G3D, "aclk_asyncapbs_g3d", "div_pclk_g3d",
  3085. ENABLE_ACLK_G3D, 5, CLK_IGNORE_UNUSED, 0),
  3086. GATE(CLK_ACLK_ASYNCAPBM_G3D, "aclk_asyncapbm_g3d", "div_aclk_g3d",
  3087. ENABLE_ACLK_G3D, 4, CLK_IGNORE_UNUSED, 0),
  3088. GATE(CLK_ACLK_AHB2APB_G3DP, "aclk_ahb2apb_g3dp", "div_pclk_g3d",
  3089. ENABLE_ACLK_G3D, 3, CLK_IGNORE_UNUSED, 0),
  3090. GATE(CLK_ACLK_G3DNP_150, "aclk_g3dnp_150", "div_pclk_g3d",
  3091. ENABLE_ACLK_G3D, 2, CLK_IGNORE_UNUSED, 0),
  3092. GATE(CLK_ACLK_G3DND_600, "aclk_g3dnd_600", "div_aclk_g3d",
  3093. ENABLE_ACLK_G3D, 1, CLK_IGNORE_UNUSED, 0),
  3094. GATE(CLK_ACLK_G3D, "aclk_g3d", "div_aclk_g3d",
  3095. ENABLE_ACLK_G3D, 0, CLK_SET_RATE_PARENT, 0),
  3096. /* ENABLE_PCLK_G3D */
  3097. GATE(CLK_PCLK_BTS_G3D1, "pclk_bts_g3d1", "div_pclk_g3d",
  3098. ENABLE_PCLK_G3D, 3, 0, 0),
  3099. GATE(CLK_PCLK_BTS_G3D0, "pclk_bts_g3d0", "div_pclk_g3d",
  3100. ENABLE_PCLK_G3D, 2, 0, 0),
  3101. GATE(CLK_PCLK_PMU_G3D, "pclk_pmu_g3d", "div_pclk_g3d",
  3102. ENABLE_PCLK_G3D, 1, CLK_IGNORE_UNUSED, 0),
  3103. GATE(CLK_PCLK_SYSREG_G3D, "pclk_sysreg_g3d", "div_pclk_g3d",
  3104. ENABLE_PCLK_G3D, 0, CLK_IGNORE_UNUSED, 0),
  3105. /* ENABLE_SCLK_G3D */
  3106. GATE(CLK_SCLK_HPM_G3D, "sclk_hpm_g3d", "div_sclk_hpm_g3d",
  3107. ENABLE_SCLK_G3D, 0, 0, 0),
  3108. };
  3109. static struct samsung_cmu_info g3d_cmu_info __initdata = {
  3110. .pll_clks = g3d_pll_clks,
  3111. .nr_pll_clks = ARRAY_SIZE(g3d_pll_clks),
  3112. .mux_clks = g3d_mux_clks,
  3113. .nr_mux_clks = ARRAY_SIZE(g3d_mux_clks),
  3114. .div_clks = g3d_div_clks,
  3115. .nr_div_clks = ARRAY_SIZE(g3d_div_clks),
  3116. .gate_clks = g3d_gate_clks,
  3117. .nr_gate_clks = ARRAY_SIZE(g3d_gate_clks),
  3118. .nr_clk_ids = G3D_NR_CLK,
  3119. .clk_regs = g3d_clk_regs,
  3120. .nr_clk_regs = ARRAY_SIZE(g3d_clk_regs),
  3121. };
  3122. static void __init exynos5433_cmu_g3d_init(struct device_node *np)
  3123. {
  3124. samsung_cmu_register_one(np, &g3d_cmu_info);
  3125. }
  3126. CLK_OF_DECLARE(exynos5433_cmu_g3d, "samsung,exynos5433-cmu-g3d",
  3127. exynos5433_cmu_g3d_init);
  3128. /*
  3129. * Register offset definitions for CMU_GSCL
  3130. */
  3131. #define MUX_SEL_GSCL 0x0200
  3132. #define MUX_ENABLE_GSCL 0x0300
  3133. #define MUX_STAT_GSCL 0x0400
  3134. #define ENABLE_ACLK_GSCL 0x0800
  3135. #define ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL0 0x0804
  3136. #define ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL1 0x0808
  3137. #define ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL2 0x080c
  3138. #define ENABLE_PCLK_GSCL 0x0900
  3139. #define ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL0 0x0904
  3140. #define ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL1 0x0908
  3141. #define ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL2 0x090c
  3142. #define ENABLE_IP_GSCL0 0x0b00
  3143. #define ENABLE_IP_GSCL1 0x0b04
  3144. #define ENABLE_IP_GSCL_SECURE_SMMU_GSCL0 0x0b08
  3145. #define ENABLE_IP_GSCL_SECURE_SMMU_GSCL1 0x0b0c
  3146. #define ENABLE_IP_GSCL_SECURE_SMMU_GSCL2 0x0b10
  3147. static unsigned long gscl_clk_regs[] __initdata = {
  3148. MUX_SEL_GSCL,
  3149. MUX_ENABLE_GSCL,
  3150. MUX_STAT_GSCL,
  3151. ENABLE_ACLK_GSCL,
  3152. ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL0,
  3153. ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL1,
  3154. ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL2,
  3155. ENABLE_PCLK_GSCL,
  3156. ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL0,
  3157. ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL1,
  3158. ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL2,
  3159. ENABLE_IP_GSCL0,
  3160. ENABLE_IP_GSCL1,
  3161. ENABLE_IP_GSCL_SECURE_SMMU_GSCL0,
  3162. ENABLE_IP_GSCL_SECURE_SMMU_GSCL1,
  3163. ENABLE_IP_GSCL_SECURE_SMMU_GSCL2,
  3164. };
  3165. /* list of all parent clock list */
  3166. PNAME(aclk_gscl_111_user_p) = { "oscclk", "aclk_gscl_111", };
  3167. PNAME(aclk_gscl_333_user_p) = { "oscclk", "aclk_gscl_333", };
  3168. static struct samsung_mux_clock gscl_mux_clks[] __initdata = {
  3169. /* MUX_SEL_GSCL */
  3170. MUX(CLK_MOUT_ACLK_GSCL_111_USER, "mout_aclk_gscl_111_user",
  3171. aclk_gscl_111_user_p, MUX_SEL_GSCL, 4, 1),
  3172. MUX(CLK_MOUT_ACLK_GSCL_333_USER, "mout_aclk_gscl_333_user",
  3173. aclk_gscl_333_user_p, MUX_SEL_GSCL, 0, 1),
  3174. };
  3175. static struct samsung_gate_clock gscl_gate_clks[] __initdata = {
  3176. /* ENABLE_ACLK_GSCL */
  3177. GATE(CLK_ACLK_BTS_GSCL2, "aclk_bts_gscl2", "mout_aclk_gscl_333_user",
  3178. ENABLE_ACLK_GSCL, 11, 0, 0),
  3179. GATE(CLK_ACLK_BTS_GSCL1, "aclk_bts_gscl1", "mout_aclk_gscl_333_user",
  3180. ENABLE_ACLK_GSCL, 10, 0, 0),
  3181. GATE(CLK_ACLK_BTS_GSCL0, "aclk_bts_gscl0", "mout_aclk_gscl_333_user",
  3182. ENABLE_ACLK_GSCL, 9, 0, 0),
  3183. GATE(CLK_ACLK_AHB2APB_GSCLP, "aclk_ahb2apb_gsclp",
  3184. "mout_aclk_gscl_111_user", ENABLE_ACLK_GSCL,
  3185. 8, CLK_IGNORE_UNUSED, 0),
  3186. GATE(CLK_ACLK_XIU_GSCLX, "aclk_xiu_gsclx", "mout_aclk_gscl_333_user",
  3187. ENABLE_ACLK_GSCL, 7, 0, 0),
  3188. GATE(CLK_ACLK_GSCLNP_111, "aclk_gsclnp_111", "mout_aclk_gscl_111_user",
  3189. ENABLE_ACLK_GSCL, 6, CLK_IGNORE_UNUSED, 0),
  3190. GATE(CLK_ACLK_GSCLRTND_333, "aclk_gsclrtnd_333",
  3191. "mout_aclk_gscl_333_user", ENABLE_ACLK_GSCL, 5, 0, 0),
  3192. GATE(CLK_ACLK_GSCLBEND_333, "aclk_gsclbend_333",
  3193. "mout_aclk_gscl_333_user", ENABLE_ACLK_GSCL, 4, 0, 0),
  3194. GATE(CLK_ACLK_GSD, "aclk_gsd", "mout_aclk_gscl_333_user",
  3195. ENABLE_ACLK_GSCL, 3, 0, 0),
  3196. GATE(CLK_ACLK_GSCL2, "aclk_gscl2", "mout_aclk_gscl_333_user",
  3197. ENABLE_ACLK_GSCL, 2, 0, 0),
  3198. GATE(CLK_ACLK_GSCL1, "aclk_gscl1", "mout_aclk_gscl_333_user",
  3199. ENABLE_ACLK_GSCL, 1, 0, 0),
  3200. GATE(CLK_ACLK_GSCL0, "aclk_gscl0", "mout_aclk_gscl_333_user",
  3201. ENABLE_ACLK_GSCL, 0, 0, 0),
  3202. /* ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL0 */
  3203. GATE(CLK_ACLK_SMMU_GSCL0, "aclk_smmu_gscl0", "mout_aclk_gscl_333_user",
  3204. ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL0, 0, 0, 0),
  3205. /* ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL1 */
  3206. GATE(CLK_ACLK_SMMU_GSCL1, "aclk_smmu_gscl1", "mout_aclk_gscl_333_user",
  3207. ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL1, 0, 0, 0),
  3208. /* ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL2 */
  3209. GATE(CLK_ACLK_SMMU_GSCL2, "aclk_smmu_gscl2", "mout_aclk_gscl_333_user",
  3210. ENABLE_ACLK_GSCL_SECURE_SMMU_GSCL2, 0, 0, 0),
  3211. /* ENABLE_PCLK_GSCL */
  3212. GATE(CLK_PCLK_BTS_GSCL2, "pclk_bts_gscl2", "mout_aclk_gscl_111_user",
  3213. ENABLE_PCLK_GSCL, 7, 0, 0),
  3214. GATE(CLK_PCLK_BTS_GSCL1, "pclk_bts_gscl1", "mout_aclk_gscl_111_user",
  3215. ENABLE_PCLK_GSCL, 6, 0, 0),
  3216. GATE(CLK_PCLK_BTS_GSCL0, "pclk_bts_gscl0", "mout_aclk_gscl_111_user",
  3217. ENABLE_PCLK_GSCL, 5, 0, 0),
  3218. GATE(CLK_PCLK_PMU_GSCL, "pclk_pmu_gscl", "mout_aclk_gscl_111_user",
  3219. ENABLE_PCLK_GSCL, 4, CLK_IGNORE_UNUSED, 0),
  3220. GATE(CLK_PCLK_SYSREG_GSCL, "pclk_sysreg_gscl",
  3221. "mout_aclk_gscl_111_user", ENABLE_PCLK_GSCL,
  3222. 3, CLK_IGNORE_UNUSED, 0),
  3223. GATE(CLK_PCLK_GSCL2, "pclk_gscl2", "mout_aclk_gscl_111_user",
  3224. ENABLE_PCLK_GSCL, 2, 0, 0),
  3225. GATE(CLK_PCLK_GSCL1, "pclk_gscl1", "mout_aclk_gscl_111_user",
  3226. ENABLE_PCLK_GSCL, 1, 0, 0),
  3227. GATE(CLK_PCLK_GSCL0, "pclk_gscl0", "mout_aclk_gscl_111_user",
  3228. ENABLE_PCLK_GSCL, 0, 0, 0),
  3229. /* ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL0 */
  3230. GATE(CLK_PCLK_SMMU_GSCL0, "pclk_smmu_gscl0", "mout_aclk_gscl_111_user",
  3231. ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL0, 0, 0, 0),
  3232. /* ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL1 */
  3233. GATE(CLK_PCLK_SMMU_GSCL1, "pclk_smmu_gscl1", "mout_aclk_gscl_111_user",
  3234. ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL0, 0, 0, 0),
  3235. /* ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL2 */
  3236. GATE(CLK_PCLK_SMMU_GSCL2, "pclk_smmu_gscl2", "mout_aclk_gscl_111_user",
  3237. ENABLE_PCLK_GSCL_SECURE_SMMU_GSCL0, 0, 0, 0),
  3238. };
  3239. static struct samsung_cmu_info gscl_cmu_info __initdata = {
  3240. .mux_clks = gscl_mux_clks,
  3241. .nr_mux_clks = ARRAY_SIZE(gscl_mux_clks),
  3242. .gate_clks = gscl_gate_clks,
  3243. .nr_gate_clks = ARRAY_SIZE(gscl_gate_clks),
  3244. .nr_clk_ids = GSCL_NR_CLK,
  3245. .clk_regs = gscl_clk_regs,
  3246. .nr_clk_regs = ARRAY_SIZE(gscl_clk_regs),
  3247. };
  3248. static void __init exynos5433_cmu_gscl_init(struct device_node *np)
  3249. {
  3250. samsung_cmu_register_one(np, &gscl_cmu_info);
  3251. }
  3252. CLK_OF_DECLARE(exynos5433_cmu_gscl, "samsung,exynos5433-cmu-gscl",
  3253. exynos5433_cmu_gscl_init);
  3254. /*
  3255. * Register offset definitions for CMU_APOLLO
  3256. */
  3257. #define APOLLO_PLL_LOCK 0x0000
  3258. #define APOLLO_PLL_CON0 0x0100
  3259. #define APOLLO_PLL_CON1 0x0104
  3260. #define APOLLO_PLL_FREQ_DET 0x010c
  3261. #define MUX_SEL_APOLLO0 0x0200
  3262. #define MUX_SEL_APOLLO1 0x0204
  3263. #define MUX_SEL_APOLLO2 0x0208
  3264. #define MUX_ENABLE_APOLLO0 0x0300
  3265. #define MUX_ENABLE_APOLLO1 0x0304
  3266. #define MUX_ENABLE_APOLLO2 0x0308
  3267. #define MUX_STAT_APOLLO0 0x0400
  3268. #define MUX_STAT_APOLLO1 0x0404
  3269. #define MUX_STAT_APOLLO2 0x0408
  3270. #define DIV_APOLLO0 0x0600
  3271. #define DIV_APOLLO1 0x0604
  3272. #define DIV_APOLLO_PLL_FREQ_DET 0x0608
  3273. #define DIV_STAT_APOLLO0 0x0700
  3274. #define DIV_STAT_APOLLO1 0x0704
  3275. #define DIV_STAT_APOLLO_PLL_FREQ_DET 0x0708
  3276. #define ENABLE_ACLK_APOLLO 0x0800
  3277. #define ENABLE_PCLK_APOLLO 0x0900
  3278. #define ENABLE_SCLK_APOLLO 0x0a00
  3279. #define ENABLE_IP_APOLLO0 0x0b00
  3280. #define ENABLE_IP_APOLLO1 0x0b04
  3281. #define CLKOUT_CMU_APOLLO 0x0c00
  3282. #define CLKOUT_CMU_APOLLO_DIV_STAT 0x0c04
  3283. #define ARMCLK_STOPCTRL 0x1000
  3284. #define APOLLO_PWR_CTRL 0x1020
  3285. #define APOLLO_PWR_CTRL2 0x1024
  3286. #define APOLLO_INTR_SPREAD_ENABLE 0x1080
  3287. #define APOLLO_INTR_SPREAD_USE_STANDBYWFI 0x1084
  3288. #define APOLLO_INTR_SPREAD_BLOCKING_DURATION 0x1088
  3289. static unsigned long apollo_clk_regs[] __initdata = {
  3290. APOLLO_PLL_LOCK,
  3291. APOLLO_PLL_CON0,
  3292. APOLLO_PLL_CON1,
  3293. APOLLO_PLL_FREQ_DET,
  3294. MUX_SEL_APOLLO0,
  3295. MUX_SEL_APOLLO1,
  3296. MUX_SEL_APOLLO2,
  3297. MUX_ENABLE_APOLLO0,
  3298. MUX_ENABLE_APOLLO1,
  3299. MUX_ENABLE_APOLLO2,
  3300. MUX_STAT_APOLLO0,
  3301. MUX_STAT_APOLLO1,
  3302. MUX_STAT_APOLLO2,
  3303. DIV_APOLLO0,
  3304. DIV_APOLLO1,
  3305. DIV_APOLLO_PLL_FREQ_DET,
  3306. DIV_STAT_APOLLO0,
  3307. DIV_STAT_APOLLO1,
  3308. DIV_STAT_APOLLO_PLL_FREQ_DET,
  3309. ENABLE_ACLK_APOLLO,
  3310. ENABLE_PCLK_APOLLO,
  3311. ENABLE_SCLK_APOLLO,
  3312. ENABLE_IP_APOLLO0,
  3313. ENABLE_IP_APOLLO1,
  3314. CLKOUT_CMU_APOLLO,
  3315. CLKOUT_CMU_APOLLO_DIV_STAT,
  3316. ARMCLK_STOPCTRL,
  3317. APOLLO_PWR_CTRL,
  3318. APOLLO_PWR_CTRL2,
  3319. APOLLO_INTR_SPREAD_ENABLE,
  3320. APOLLO_INTR_SPREAD_USE_STANDBYWFI,
  3321. APOLLO_INTR_SPREAD_BLOCKING_DURATION,
  3322. };
  3323. /* list of all parent clock list */
  3324. PNAME(mout_apollo_pll_p) = { "oscclk", "fout_apollo_pll", };
  3325. PNAME(mout_bus_pll_apollo_user_p) = { "oscclk", "sclk_bus_pll_apollo", };
  3326. PNAME(mout_apollo_p) = { "mout_apollo_pll",
  3327. "mout_bus_pll_apollo_user", };
  3328. static struct samsung_pll_clock apollo_pll_clks[] __initdata = {
  3329. PLL(pll_35xx, CLK_FOUT_APOLLO_PLL, "fout_apollo_pll", "oscclk",
  3330. APOLLO_PLL_LOCK, APOLLO_PLL_CON0, exynos5443_pll_rates),
  3331. };
  3332. static struct samsung_mux_clock apollo_mux_clks[] __initdata = {
  3333. /* MUX_SEL_APOLLO0 */
  3334. MUX_F(CLK_MOUT_APOLLO_PLL, "mout_apollo_pll", mout_apollo_pll_p,
  3335. MUX_SEL_APOLLO0, 0, 1, CLK_SET_RATE_PARENT, 0),
  3336. /* MUX_SEL_APOLLO1 */
  3337. MUX(CLK_MOUT_BUS_PLL_APOLLO_USER, "mout_bus_pll_apollo_user",
  3338. mout_bus_pll_apollo_user_p, MUX_SEL_APOLLO1, 0, 1),
  3339. /* MUX_SEL_APOLLO2 */
  3340. MUX_F(CLK_MOUT_APOLLO, "mout_apollo", mout_apollo_p, MUX_SEL_APOLLO2,
  3341. 0, 1, CLK_SET_RATE_PARENT, 0),
  3342. };
  3343. static struct samsung_div_clock apollo_div_clks[] __initdata = {
  3344. /* DIV_APOLLO0 */
  3345. DIV_F(CLK_DIV_CNTCLK_APOLLO, "div_cntclk_apollo", "div_apollo2",
  3346. DIV_APOLLO0, 24, 3, CLK_GET_RATE_NOCACHE,
  3347. CLK_DIVIDER_READ_ONLY),
  3348. DIV_F(CLK_DIV_PCLK_DBG_APOLLO, "div_pclk_dbg_apollo", "div_apollo2",
  3349. DIV_APOLLO0, 20, 3, CLK_GET_RATE_NOCACHE,
  3350. CLK_DIVIDER_READ_ONLY),
  3351. DIV_F(CLK_DIV_ATCLK_APOLLO, "div_atclk_apollo", "div_apollo2",
  3352. DIV_APOLLO0, 16, 3, CLK_GET_RATE_NOCACHE,
  3353. CLK_DIVIDER_READ_ONLY),
  3354. DIV_F(CLK_DIV_PCLK_APOLLO, "div_pclk_apollo", "div_apollo2",
  3355. DIV_APOLLO0, 12, 3, CLK_GET_RATE_NOCACHE,
  3356. CLK_DIVIDER_READ_ONLY),
  3357. DIV_F(CLK_DIV_ACLK_APOLLO, "div_aclk_apollo", "div_apollo2",
  3358. DIV_APOLLO0, 8, 3, CLK_GET_RATE_NOCACHE,
  3359. CLK_DIVIDER_READ_ONLY),
  3360. DIV_F(CLK_DIV_APOLLO2, "div_apollo2", "div_apollo1",
  3361. DIV_APOLLO0, 4, 3, CLK_SET_RATE_PARENT, 0),
  3362. DIV_F(CLK_DIV_APOLLO1, "div_apollo1", "mout_apollo",
  3363. DIV_APOLLO0, 0, 3, CLK_SET_RATE_PARENT, 0),
  3364. /* DIV_APOLLO1 */
  3365. DIV_F(CLK_DIV_SCLK_HPM_APOLLO, "div_sclk_hpm_apollo", "mout_apollo",
  3366. DIV_APOLLO1, 4, 3, CLK_GET_RATE_NOCACHE,
  3367. CLK_DIVIDER_READ_ONLY),
  3368. DIV_F(CLK_DIV_APOLLO_PLL, "div_apollo_pll", "mout_apollo",
  3369. DIV_APOLLO1, 0, 3, CLK_GET_RATE_NOCACHE,
  3370. CLK_DIVIDER_READ_ONLY),
  3371. };
  3372. static struct samsung_gate_clock apollo_gate_clks[] __initdata = {
  3373. /* ENABLE_ACLK_APOLLO */
  3374. GATE(CLK_ACLK_ASATBSLV_APOLLO_3_CSSYS, "aclk_asatbslv_apollo_3_cssys",
  3375. "div_atclk_apollo", ENABLE_ACLK_APOLLO,
  3376. 6, CLK_IGNORE_UNUSED, 0),
  3377. GATE(CLK_ACLK_ASATBSLV_APOLLO_2_CSSYS, "aclk_asatbslv_apollo_2_cssys",
  3378. "div_atclk_apollo", ENABLE_ACLK_APOLLO,
  3379. 5, CLK_IGNORE_UNUSED, 0),
  3380. GATE(CLK_ACLK_ASATBSLV_APOLLO_1_CSSYS, "aclk_asatbslv_apollo_1_cssys",
  3381. "div_atclk_apollo", ENABLE_ACLK_APOLLO,
  3382. 4, CLK_IGNORE_UNUSED, 0),
  3383. GATE(CLK_ACLK_ASATBSLV_APOLLO_0_CSSYS, "aclk_asatbslv_apollo_0_cssys",
  3384. "div_atclk_apollo", ENABLE_ACLK_APOLLO,
  3385. 3, CLK_IGNORE_UNUSED, 0),
  3386. GATE(CLK_ACLK_ASYNCACES_APOLLO_CCI, "aclk_asyncaces_apollo_cci",
  3387. "div_aclk_apollo", ENABLE_ACLK_APOLLO,
  3388. 2, CLK_IGNORE_UNUSED, 0),
  3389. GATE(CLK_ACLK_AHB2APB_APOLLOP, "aclk_ahb2apb_apollop",
  3390. "div_pclk_apollo", ENABLE_ACLK_APOLLO,
  3391. 1, CLK_IGNORE_UNUSED, 0),
  3392. GATE(CLK_ACLK_APOLLONP_200, "aclk_apollonp_200",
  3393. "div_pclk_apollo", ENABLE_ACLK_APOLLO,
  3394. 0, CLK_IGNORE_UNUSED, 0),
  3395. /* ENABLE_PCLK_APOLLO */
  3396. GATE(CLK_PCLK_ASAPBMST_CSSYS_APOLLO, "pclk_asapbmst_cssys_apollo",
  3397. "div_pclk_dbg_apollo", ENABLE_PCLK_APOLLO,
  3398. 2, CLK_IGNORE_UNUSED, 0),
  3399. GATE(CLK_PCLK_PMU_APOLLO, "pclk_pmu_apollo", "div_pclk_apollo",
  3400. ENABLE_PCLK_APOLLO, 1, CLK_IGNORE_UNUSED, 0),
  3401. GATE(CLK_PCLK_SYSREG_APOLLO, "pclk_sysreg_apollo",
  3402. "div_pclk_apollo", ENABLE_PCLK_APOLLO,
  3403. 0, CLK_IGNORE_UNUSED, 0),
  3404. /* ENABLE_SCLK_APOLLO */
  3405. GATE(CLK_CNTCLK_APOLLO, "cntclk_apollo", "div_cntclk_apollo",
  3406. ENABLE_SCLK_APOLLO, 3, CLK_IGNORE_UNUSED, 0),
  3407. GATE(CLK_SCLK_HPM_APOLLO, "sclk_hpm_apollo", "div_sclk_hpm_apollo",
  3408. ENABLE_SCLK_APOLLO, 1, CLK_IGNORE_UNUSED, 0),
  3409. GATE(CLK_SCLK_APOLLO, "sclk_apollo", "div_apollo2",
  3410. ENABLE_SCLK_APOLLO, 0,
  3411. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  3412. };
  3413. static struct samsung_cmu_info apollo_cmu_info __initdata = {
  3414. .pll_clks = apollo_pll_clks,
  3415. .nr_pll_clks = ARRAY_SIZE(apollo_pll_clks),
  3416. .mux_clks = apollo_mux_clks,
  3417. .nr_mux_clks = ARRAY_SIZE(apollo_mux_clks),
  3418. .div_clks = apollo_div_clks,
  3419. .nr_div_clks = ARRAY_SIZE(apollo_div_clks),
  3420. .gate_clks = apollo_gate_clks,
  3421. .nr_gate_clks = ARRAY_SIZE(apollo_gate_clks),
  3422. .nr_clk_ids = APOLLO_NR_CLK,
  3423. .clk_regs = apollo_clk_regs,
  3424. .nr_clk_regs = ARRAY_SIZE(apollo_clk_regs),
  3425. };
  3426. static void __init exynos5433_cmu_apollo_init(struct device_node *np)
  3427. {
  3428. samsung_cmu_register_one(np, &apollo_cmu_info);
  3429. }
  3430. CLK_OF_DECLARE(exynos5433_cmu_apollo, "samsung,exynos5433-cmu-apollo",
  3431. exynos5433_cmu_apollo_init);
  3432. /*
  3433. * Register offset definitions for CMU_ATLAS
  3434. */
  3435. #define ATLAS_PLL_LOCK 0x0000
  3436. #define ATLAS_PLL_CON0 0x0100
  3437. #define ATLAS_PLL_CON1 0x0104
  3438. #define ATLAS_PLL_FREQ_DET 0x010c
  3439. #define MUX_SEL_ATLAS0 0x0200
  3440. #define MUX_SEL_ATLAS1 0x0204
  3441. #define MUX_SEL_ATLAS2 0x0208
  3442. #define MUX_ENABLE_ATLAS0 0x0300
  3443. #define MUX_ENABLE_ATLAS1 0x0304
  3444. #define MUX_ENABLE_ATLAS2 0x0308
  3445. #define MUX_STAT_ATLAS0 0x0400
  3446. #define MUX_STAT_ATLAS1 0x0404
  3447. #define MUX_STAT_ATLAS2 0x0408
  3448. #define DIV_ATLAS0 0x0600
  3449. #define DIV_ATLAS1 0x0604
  3450. #define DIV_ATLAS_PLL_FREQ_DET 0x0608
  3451. #define DIV_STAT_ATLAS0 0x0700
  3452. #define DIV_STAT_ATLAS1 0x0704
  3453. #define DIV_STAT_ATLAS_PLL_FREQ_DET 0x0708
  3454. #define ENABLE_ACLK_ATLAS 0x0800
  3455. #define ENABLE_PCLK_ATLAS 0x0900
  3456. #define ENABLE_SCLK_ATLAS 0x0a00
  3457. #define ENABLE_IP_ATLAS0 0x0b00
  3458. #define ENABLE_IP_ATLAS1 0x0b04
  3459. #define CLKOUT_CMU_ATLAS 0x0c00
  3460. #define CLKOUT_CMU_ATLAS_DIV_STAT 0x0c04
  3461. #define ARMCLK_STOPCTRL 0x1000
  3462. #define ATLAS_PWR_CTRL 0x1020
  3463. #define ATLAS_PWR_CTRL2 0x1024
  3464. #define ATLAS_INTR_SPREAD_ENABLE 0x1080
  3465. #define ATLAS_INTR_SPREAD_USE_STANDBYWFI 0x1084
  3466. #define ATLAS_INTR_SPREAD_BLOCKING_DURATION 0x1088
  3467. static unsigned long atlas_clk_regs[] __initdata = {
  3468. ATLAS_PLL_LOCK,
  3469. ATLAS_PLL_CON0,
  3470. ATLAS_PLL_CON1,
  3471. ATLAS_PLL_FREQ_DET,
  3472. MUX_SEL_ATLAS0,
  3473. MUX_SEL_ATLAS1,
  3474. MUX_SEL_ATLAS2,
  3475. MUX_ENABLE_ATLAS0,
  3476. MUX_ENABLE_ATLAS1,
  3477. MUX_ENABLE_ATLAS2,
  3478. MUX_STAT_ATLAS0,
  3479. MUX_STAT_ATLAS1,
  3480. MUX_STAT_ATLAS2,
  3481. DIV_ATLAS0,
  3482. DIV_ATLAS1,
  3483. DIV_ATLAS_PLL_FREQ_DET,
  3484. DIV_STAT_ATLAS0,
  3485. DIV_STAT_ATLAS1,
  3486. DIV_STAT_ATLAS_PLL_FREQ_DET,
  3487. ENABLE_ACLK_ATLAS,
  3488. ENABLE_PCLK_ATLAS,
  3489. ENABLE_SCLK_ATLAS,
  3490. ENABLE_IP_ATLAS0,
  3491. ENABLE_IP_ATLAS1,
  3492. CLKOUT_CMU_ATLAS,
  3493. CLKOUT_CMU_ATLAS_DIV_STAT,
  3494. ARMCLK_STOPCTRL,
  3495. ATLAS_PWR_CTRL,
  3496. ATLAS_PWR_CTRL2,
  3497. ATLAS_INTR_SPREAD_ENABLE,
  3498. ATLAS_INTR_SPREAD_USE_STANDBYWFI,
  3499. ATLAS_INTR_SPREAD_BLOCKING_DURATION,
  3500. };
  3501. /* list of all parent clock list */
  3502. PNAME(mout_atlas_pll_p) = { "oscclk", "fout_atlas_pll", };
  3503. PNAME(mout_bus_pll_atlas_user_p) = { "oscclk", "sclk_bus_pll_atlas", };
  3504. PNAME(mout_atlas_p) = { "mout_atlas_pll",
  3505. "mout_bus_pll_atlas_user", };
  3506. static struct samsung_pll_clock atlas_pll_clks[] __initdata = {
  3507. PLL(pll_35xx, CLK_FOUT_ATLAS_PLL, "fout_atlas_pll", "oscclk",
  3508. ATLAS_PLL_LOCK, ATLAS_PLL_CON0, exynos5443_pll_rates),
  3509. };
  3510. static struct samsung_mux_clock atlas_mux_clks[] __initdata = {
  3511. /* MUX_SEL_ATLAS0 */
  3512. MUX_F(CLK_MOUT_ATLAS_PLL, "mout_atlas_pll", mout_atlas_pll_p,
  3513. MUX_SEL_ATLAS0, 0, 1, CLK_SET_RATE_PARENT, 0),
  3514. /* MUX_SEL_ATLAS1 */
  3515. MUX(CLK_MOUT_BUS_PLL_ATLAS_USER, "mout_bus_pll_atlas_user",
  3516. mout_bus_pll_atlas_user_p, MUX_SEL_ATLAS1, 0, 1),
  3517. /* MUX_SEL_ATLAS2 */
  3518. MUX_F(CLK_MOUT_ATLAS, "mout_atlas", mout_atlas_p, MUX_SEL_ATLAS2,
  3519. 0, 1, CLK_SET_RATE_PARENT, 0),
  3520. };
  3521. static struct samsung_div_clock atlas_div_clks[] __initdata = {
  3522. /* DIV_ATLAS0 */
  3523. DIV_F(CLK_DIV_CNTCLK_ATLAS, "div_cntclk_atlas", "div_atlas2",
  3524. DIV_ATLAS0, 24, 3, CLK_GET_RATE_NOCACHE,
  3525. CLK_DIVIDER_READ_ONLY),
  3526. DIV_F(CLK_DIV_PCLK_DBG_ATLAS, "div_pclk_dbg_atlas", "div_atclk_atlas",
  3527. DIV_ATLAS0, 20, 3, CLK_GET_RATE_NOCACHE,
  3528. CLK_DIVIDER_READ_ONLY),
  3529. DIV_F(CLK_DIV_ATCLK_ATLASO, "div_atclk_atlas", "div_atlas2",
  3530. DIV_ATLAS0, 16, 3, CLK_GET_RATE_NOCACHE,
  3531. CLK_DIVIDER_READ_ONLY),
  3532. DIV_F(CLK_DIV_PCLK_ATLAS, "div_pclk_atlas", "div_atlas2",
  3533. DIV_ATLAS0, 12, 3, CLK_GET_RATE_NOCACHE,
  3534. CLK_DIVIDER_READ_ONLY),
  3535. DIV_F(CLK_DIV_ACLK_ATLAS, "div_aclk_atlas", "div_atlas2",
  3536. DIV_ATLAS0, 8, 3, CLK_GET_RATE_NOCACHE,
  3537. CLK_DIVIDER_READ_ONLY),
  3538. DIV_F(CLK_DIV_ATLAS2, "div_atlas2", "div_atlas1",
  3539. DIV_ATLAS0, 4, 3, CLK_SET_RATE_PARENT, 0),
  3540. DIV_F(CLK_DIV_ATLAS1, "div_atlas1", "mout_atlas",
  3541. DIV_ATLAS0, 0, 3, CLK_SET_RATE_PARENT, 0),
  3542. /* DIV_ATLAS1 */
  3543. DIV_F(CLK_DIV_SCLK_HPM_ATLAS, "div_sclk_hpm_atlas", "mout_atlas",
  3544. DIV_ATLAS1, 4, 3, CLK_GET_RATE_NOCACHE,
  3545. CLK_DIVIDER_READ_ONLY),
  3546. DIV_F(CLK_DIV_ATLAS_PLL, "div_atlas_pll", "mout_atlas",
  3547. DIV_ATLAS1, 0, 3, CLK_GET_RATE_NOCACHE,
  3548. CLK_DIVIDER_READ_ONLY),
  3549. };
  3550. static struct samsung_gate_clock atlas_gate_clks[] __initdata = {
  3551. /* ENABLE_ACLK_ATLAS */
  3552. GATE(CLK_ACLK_ATB_AUD_CSSYS, "aclk_atb_aud_cssys",
  3553. "div_atclk_atlas", ENABLE_ACLK_ATLAS,
  3554. 9, CLK_IGNORE_UNUSED, 0),
  3555. GATE(CLK_ACLK_ATB_APOLLO3_CSSYS, "aclk_atb_apollo3_cssys",
  3556. "div_atclk_atlas", ENABLE_ACLK_ATLAS,
  3557. 8, CLK_IGNORE_UNUSED, 0),
  3558. GATE(CLK_ACLK_ATB_APOLLO2_CSSYS, "aclk_atb_apollo2_cssys",
  3559. "div_atclk_atlas", ENABLE_ACLK_ATLAS,
  3560. 7, CLK_IGNORE_UNUSED, 0),
  3561. GATE(CLK_ACLK_ATB_APOLLO1_CSSYS, "aclk_atb_apollo1_cssys",
  3562. "div_atclk_atlas", ENABLE_ACLK_ATLAS,
  3563. 6, CLK_IGNORE_UNUSED, 0),
  3564. GATE(CLK_ACLK_ATB_APOLLO0_CSSYS, "aclk_atb_apollo0_cssys",
  3565. "div_atclk_atlas", ENABLE_ACLK_ATLAS,
  3566. 5, CLK_IGNORE_UNUSED, 0),
  3567. GATE(CLK_ACLK_ASYNCAHBS_CSSYS_SSS, "aclk_asyncahbs_cssys_sss",
  3568. "div_atclk_atlas", ENABLE_ACLK_ATLAS,
  3569. 4, CLK_IGNORE_UNUSED, 0),
  3570. GATE(CLK_ACLK_ASYNCAXIS_CSSYS_CCIX, "aclk_asyncaxis_cssys_ccix",
  3571. "div_pclk_dbg_atlas", ENABLE_ACLK_ATLAS,
  3572. 3, CLK_IGNORE_UNUSED, 0),
  3573. GATE(CLK_ACLK_ASYNCACES_ATLAS_CCI, "aclk_asyncaces_atlas_cci",
  3574. "div_aclk_atlas", ENABLE_ACLK_ATLAS,
  3575. 2, CLK_IGNORE_UNUSED, 0),
  3576. GATE(CLK_ACLK_AHB2APB_ATLASP, "aclk_ahb2apb_atlasp", "div_pclk_atlas",
  3577. ENABLE_ACLK_ATLAS, 1, CLK_IGNORE_UNUSED, 0),
  3578. GATE(CLK_ACLK_ATLASNP_200, "aclk_atlasnp_200", "div_pclk_atlas",
  3579. ENABLE_ACLK_ATLAS, 0, CLK_IGNORE_UNUSED, 0),
  3580. /* ENABLE_PCLK_ATLAS */
  3581. GATE(CLK_PCLK_ASYNCAPB_AUD_CSSYS, "pclk_asyncapb_aud_cssys",
  3582. "div_pclk_dbg_atlas", ENABLE_PCLK_ATLAS,
  3583. 5, CLK_IGNORE_UNUSED, 0),
  3584. GATE(CLK_PCLK_ASYNCAPB_ISP_CSSYS, "pclk_asyncapb_isp_cssys",
  3585. "div_pclk_dbg_atlas", ENABLE_PCLK_ATLAS,
  3586. 4, CLK_IGNORE_UNUSED, 0),
  3587. GATE(CLK_PCLK_ASYNCAPB_APOLLO_CSSYS, "pclk_asyncapb_apollo_cssys",
  3588. "div_pclk_dbg_atlas", ENABLE_PCLK_ATLAS,
  3589. 3, CLK_IGNORE_UNUSED, 0),
  3590. GATE(CLK_PCLK_PMU_ATLAS, "pclk_pmu_atlas", "div_pclk_atlas",
  3591. ENABLE_PCLK_ATLAS, 2, CLK_IGNORE_UNUSED, 0),
  3592. GATE(CLK_PCLK_SYSREG_ATLAS, "pclk_sysreg_atlas", "div_pclk_atlas",
  3593. ENABLE_PCLK_ATLAS, 1, CLK_IGNORE_UNUSED, 0),
  3594. GATE(CLK_PCLK_SECJTAG, "pclk_secjtag", "div_pclk_dbg_atlas",
  3595. ENABLE_PCLK_ATLAS, 0, CLK_IGNORE_UNUSED, 0),
  3596. /* ENABLE_SCLK_ATLAS */
  3597. GATE(CLK_CNTCLK_ATLAS, "cntclk_atlas", "div_cntclk_atlas",
  3598. ENABLE_SCLK_ATLAS, 10, CLK_IGNORE_UNUSED, 0),
  3599. GATE(CLK_SCLK_HPM_ATLAS, "sclk_hpm_atlas", "div_sclk_hpm_atlas",
  3600. ENABLE_SCLK_ATLAS, 7, CLK_IGNORE_UNUSED, 0),
  3601. GATE(CLK_TRACECLK, "traceclk", "div_atclk_atlas",
  3602. ENABLE_SCLK_ATLAS, 6, CLK_IGNORE_UNUSED, 0),
  3603. GATE(CLK_CTMCLK, "ctmclk", "div_atclk_atlas",
  3604. ENABLE_SCLK_ATLAS, 5, CLK_IGNORE_UNUSED, 0),
  3605. GATE(CLK_HCLK_CSSYS, "hclk_cssys", "div_atclk_atlas",
  3606. ENABLE_SCLK_ATLAS, 4, CLK_IGNORE_UNUSED, 0),
  3607. GATE(CLK_PCLK_DBG_CSSYS, "pclk_dbg_cssys", "div_pclk_dbg_atlas",
  3608. ENABLE_SCLK_ATLAS, 3, CLK_IGNORE_UNUSED, 0),
  3609. GATE(CLK_PCLK_DBG, "pclk_dbg", "div_pclk_dbg_atlas",
  3610. ENABLE_SCLK_ATLAS, 2, CLK_IGNORE_UNUSED, 0),
  3611. GATE(CLK_ATCLK, "atclk", "div_atclk_atlas",
  3612. ENABLE_SCLK_ATLAS, 1, CLK_IGNORE_UNUSED, 0),
  3613. GATE(CLK_SCLK_ATLAS, "sclk_atlas", "div_atlas2",
  3614. ENABLE_SCLK_ATLAS, 0,
  3615. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  3616. };
  3617. static struct samsung_cmu_info atlas_cmu_info __initdata = {
  3618. .pll_clks = atlas_pll_clks,
  3619. .nr_pll_clks = ARRAY_SIZE(atlas_pll_clks),
  3620. .mux_clks = atlas_mux_clks,
  3621. .nr_mux_clks = ARRAY_SIZE(atlas_mux_clks),
  3622. .div_clks = atlas_div_clks,
  3623. .nr_div_clks = ARRAY_SIZE(atlas_div_clks),
  3624. .gate_clks = atlas_gate_clks,
  3625. .nr_gate_clks = ARRAY_SIZE(atlas_gate_clks),
  3626. .nr_clk_ids = ATLAS_NR_CLK,
  3627. .clk_regs = atlas_clk_regs,
  3628. .nr_clk_regs = ARRAY_SIZE(atlas_clk_regs),
  3629. };
  3630. static void __init exynos5433_cmu_atlas_init(struct device_node *np)
  3631. {
  3632. samsung_cmu_register_one(np, &atlas_cmu_info);
  3633. }
  3634. CLK_OF_DECLARE(exynos5433_cmu_atlas, "samsung,exynos5433-cmu-atlas",
  3635. exynos5433_cmu_atlas_init);
  3636. /*
  3637. * Register offset definitions for CMU_MSCL
  3638. */
  3639. #define MUX_SEL_MSCL0 0x0200
  3640. #define MUX_SEL_MSCL1 0x0204
  3641. #define MUX_ENABLE_MSCL0 0x0300
  3642. #define MUX_ENABLE_MSCL1 0x0304
  3643. #define MUX_STAT_MSCL0 0x0400
  3644. #define MUX_STAT_MSCL1 0x0404
  3645. #define DIV_MSCL 0x0600
  3646. #define DIV_STAT_MSCL 0x0700
  3647. #define ENABLE_ACLK_MSCL 0x0800
  3648. #define ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER0 0x0804
  3649. #define ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER1 0x0808
  3650. #define ENABLE_ACLK_MSCL_SECURE_SMMU_JPEG 0x080c
  3651. #define ENABLE_PCLK_MSCL 0x0900
  3652. #define ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER0 0x0904
  3653. #define ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER1 0x0908
  3654. #define ENABLE_PCLK_MSCL_SECURE_SMMU_JPEG 0x090c
  3655. #define ENABLE_SCLK_MSCL 0x0a00
  3656. #define ENABLE_IP_MSCL0 0x0b00
  3657. #define ENABLE_IP_MSCL1 0x0b04
  3658. #define ENABLE_IP_MSCL_SECURE_SMMU_M2MSCALER0 0x0b08
  3659. #define ENABLE_IP_MSCL_SECURE_SMMU_M2MSCALER1 0x0b0c
  3660. #define ENABLE_IP_MSCL_SECURE_SMMU_JPEG 0x0b10
  3661. static unsigned long mscl_clk_regs[] __initdata = {
  3662. MUX_SEL_MSCL0,
  3663. MUX_SEL_MSCL1,
  3664. MUX_ENABLE_MSCL0,
  3665. MUX_ENABLE_MSCL1,
  3666. MUX_STAT_MSCL0,
  3667. MUX_STAT_MSCL1,
  3668. DIV_MSCL,
  3669. DIV_STAT_MSCL,
  3670. ENABLE_ACLK_MSCL,
  3671. ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER0,
  3672. ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER1,
  3673. ENABLE_ACLK_MSCL_SECURE_SMMU_JPEG,
  3674. ENABLE_PCLK_MSCL,
  3675. ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER0,
  3676. ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER1,
  3677. ENABLE_PCLK_MSCL_SECURE_SMMU_JPEG,
  3678. ENABLE_SCLK_MSCL,
  3679. ENABLE_IP_MSCL0,
  3680. ENABLE_IP_MSCL1,
  3681. ENABLE_IP_MSCL_SECURE_SMMU_M2MSCALER0,
  3682. ENABLE_IP_MSCL_SECURE_SMMU_M2MSCALER1,
  3683. ENABLE_IP_MSCL_SECURE_SMMU_JPEG,
  3684. };
  3685. /* list of all parent clock list */
  3686. PNAME(mout_sclk_jpeg_user_p) = { "oscclk", "sclk_jpeg_mscl", };
  3687. PNAME(mout_aclk_mscl_400_user_p) = { "oscclk", "aclk_mscl_400", };
  3688. PNAME(mout_sclk_jpeg_p) = { "mout_sclk_jpeg_user",
  3689. "mout_aclk_mscl_400_user", };
  3690. static struct samsung_mux_clock mscl_mux_clks[] __initdata = {
  3691. /* MUX_SEL_MSCL0 */
  3692. MUX(CLK_MOUT_SCLK_JPEG_USER, "mout_sclk_jpeg_user",
  3693. mout_sclk_jpeg_user_p, MUX_SEL_MSCL0, 4, 1),
  3694. MUX(CLK_MOUT_ACLK_MSCL_400_USER, "mout_aclk_mscl_400_user",
  3695. mout_aclk_mscl_400_user_p, MUX_SEL_MSCL0, 0, 1),
  3696. /* MUX_SEL_MSCL1 */
  3697. MUX(CLK_MOUT_SCLK_JPEG, "mout_sclk_jpeg", mout_sclk_jpeg_p,
  3698. MUX_SEL_MSCL1, 0, 1),
  3699. };
  3700. static struct samsung_div_clock mscl_div_clks[] __initdata = {
  3701. /* DIV_MSCL */
  3702. DIV(CLK_DIV_PCLK_MSCL, "div_pclk_mscl", "mout_aclk_mscl_400_user",
  3703. DIV_MSCL, 0, 3),
  3704. };
  3705. static struct samsung_gate_clock mscl_gate_clks[] __initdata = {
  3706. /* ENABLE_ACLK_MSCL */
  3707. GATE(CLK_ACLK_BTS_JPEG, "aclk_bts_jpeg", "mout_aclk_mscl_400_user",
  3708. ENABLE_ACLK_MSCL, 9, 0, 0),
  3709. GATE(CLK_ACLK_BTS_M2MSCALER1, "aclk_bts_m2mscaler1",
  3710. "mout_aclk_mscl_400_user", ENABLE_ACLK_MSCL, 8, 0, 0),
  3711. GATE(CLK_ACLK_BTS_M2MSCALER0, "aclk_bts_m2mscaler0",
  3712. "mout_aclk_mscl_400_user", ENABLE_ACLK_MSCL, 7, 0, 0),
  3713. GATE(CLK_ACLK_AHB2APB_MSCL0P, "aclk_abh2apb_mscl0p", "div_pclk_mscl",
  3714. ENABLE_ACLK_MSCL, 6, CLK_IGNORE_UNUSED, 0),
  3715. GATE(CLK_ACLK_XIU_MSCLX, "aclk_xiu_msclx", "mout_aclk_mscl_400_user",
  3716. ENABLE_ACLK_MSCL, 5, CLK_IGNORE_UNUSED, 0),
  3717. GATE(CLK_ACLK_MSCLNP_100, "aclk_msclnp_100", "div_pclk_mscl",
  3718. ENABLE_ACLK_MSCL, 4, CLK_IGNORE_UNUSED, 0),
  3719. GATE(CLK_ACLK_MSCLND_400, "aclk_msclnd_400", "mout_aclk_mscl_400_user",
  3720. ENABLE_ACLK_MSCL, 3, CLK_IGNORE_UNUSED, 0),
  3721. GATE(CLK_ACLK_JPEG, "aclk_jpeg", "mout_aclk_mscl_400_user",
  3722. ENABLE_ACLK_MSCL, 2, 0, 0),
  3723. GATE(CLK_ACLK_M2MSCALER1, "aclk_m2mscaler1", "mout_aclk_mscl_400_user",
  3724. ENABLE_ACLK_MSCL, 1, 0, 0),
  3725. GATE(CLK_ACLK_M2MSCALER0, "aclk_m2mscaler0", "mout_aclk_mscl_400_user",
  3726. ENABLE_ACLK_MSCL, 0, 0, 0),
  3727. /* ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER0 */
  3728. GATE(CLK_ACLK_SMMU_M2MSCALER0, "aclk_smmu_m2mscaler0",
  3729. "mout_aclk_mscl_400_user",
  3730. ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER0,
  3731. 0, CLK_IGNORE_UNUSED, 0),
  3732. /* ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER1 */
  3733. GATE(CLK_ACLK_SMMU_M2MSCALER1, "aclk_smmu_m2mscaler1",
  3734. "mout_aclk_mscl_400_user",
  3735. ENABLE_ACLK_MSCL_SECURE_SMMU_M2MSCALER1,
  3736. 0, CLK_IGNORE_UNUSED, 0),
  3737. /* ENABLE_ACLK_MSCL_SECURE_SMMU_JPEG */
  3738. GATE(CLK_ACLK_SMMU_JPEG, "aclk_smmu_jpeg", "mout_aclk_mscl_400_user",
  3739. ENABLE_ACLK_MSCL_SECURE_SMMU_JPEG,
  3740. 0, CLK_IGNORE_UNUSED, 0),
  3741. /* ENABLE_PCLK_MSCL */
  3742. GATE(CLK_PCLK_BTS_JPEG, "pclk_bts_jpeg", "div_pclk_mscl",
  3743. ENABLE_PCLK_MSCL, 7, 0, 0),
  3744. GATE(CLK_PCLK_BTS_M2MSCALER1, "pclk_bts_m2mscaler1", "div_pclk_mscl",
  3745. ENABLE_PCLK_MSCL, 6, 0, 0),
  3746. GATE(CLK_PCLK_BTS_M2MSCALER0, "pclk_bts_m2mscaler0", "div_pclk_mscl",
  3747. ENABLE_PCLK_MSCL, 5, 0, 0),
  3748. GATE(CLK_PCLK_PMU_MSCL, "pclk_pmu_mscl", "div_pclk_mscl",
  3749. ENABLE_PCLK_MSCL, 4, CLK_IGNORE_UNUSED, 0),
  3750. GATE(CLK_PCLK_SYSREG_MSCL, "pclk_sysreg_mscl", "div_pclk_mscl",
  3751. ENABLE_PCLK_MSCL, 3, CLK_IGNORE_UNUSED, 0),
  3752. GATE(CLK_PCLK_JPEG, "pclk_jpeg", "div_pclk_mscl",
  3753. ENABLE_PCLK_MSCL, 2, 0, 0),
  3754. GATE(CLK_PCLK_M2MSCALER1, "pclk_m2mscaler1", "div_pclk_mscl",
  3755. ENABLE_PCLK_MSCL, 1, 0, 0),
  3756. GATE(CLK_PCLK_M2MSCALER0, "pclk_m2mscaler0", "div_pclk_mscl",
  3757. ENABLE_PCLK_MSCL, 0, 0, 0),
  3758. /* ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER0 */
  3759. GATE(CLK_PCLK_SMMU_M2MSCALER0, "pclk_smmu_m2mscaler0", "div_pclk_mscl",
  3760. ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER0,
  3761. 0, CLK_IGNORE_UNUSED, 0),
  3762. /* ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER1 */
  3763. GATE(CLK_PCLK_SMMU_M2MSCALER1, "pclk_smmu_m2mscaler1", "div_pclk_mscl",
  3764. ENABLE_PCLK_MSCL_SECURE_SMMU_M2MSCALER1,
  3765. 0, CLK_IGNORE_UNUSED, 0),
  3766. /* ENABLE_PCLK_MSCL_SECURE_SMMU_JPEG */
  3767. GATE(CLK_PCLK_SMMU_JPEG, "pclk_smmu_jpeg", "div_pclk_mscl",
  3768. ENABLE_PCLK_MSCL_SECURE_SMMU_JPEG,
  3769. 0, CLK_IGNORE_UNUSED, 0),
  3770. /* ENABLE_SCLK_MSCL */
  3771. GATE(CLK_SCLK_JPEG, "sclk_jpeg", "mout_sclk_jpeg", ENABLE_SCLK_MSCL, 0,
  3772. CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0),
  3773. };
  3774. static struct samsung_cmu_info mscl_cmu_info __initdata = {
  3775. .mux_clks = mscl_mux_clks,
  3776. .nr_mux_clks = ARRAY_SIZE(mscl_mux_clks),
  3777. .div_clks = mscl_div_clks,
  3778. .nr_div_clks = ARRAY_SIZE(mscl_div_clks),
  3779. .gate_clks = mscl_gate_clks,
  3780. .nr_gate_clks = ARRAY_SIZE(mscl_gate_clks),
  3781. .nr_clk_ids = MSCL_NR_CLK,
  3782. .clk_regs = mscl_clk_regs,
  3783. .nr_clk_regs = ARRAY_SIZE(mscl_clk_regs),
  3784. };
  3785. static void __init exynos5433_cmu_mscl_init(struct device_node *np)
  3786. {
  3787. samsung_cmu_register_one(np, &mscl_cmu_info);
  3788. }
  3789. CLK_OF_DECLARE(exynos5433_cmu_mscl, "samsung,exynos5433-cmu-mscl",
  3790. exynos5433_cmu_mscl_init);
  3791. /*
  3792. * Register offset definitions for CMU_MFC
  3793. */
  3794. #define MUX_SEL_MFC 0x0200
  3795. #define MUX_ENABLE_MFC 0x0300
  3796. #define MUX_STAT_MFC 0x0400
  3797. #define DIV_MFC 0x0600
  3798. #define DIV_STAT_MFC 0x0700
  3799. #define ENABLE_ACLK_MFC 0x0800
  3800. #define ENABLE_ACLK_MFC_SECURE_SMMU_MFC 0x0804
  3801. #define ENABLE_PCLK_MFC 0x0900
  3802. #define ENABLE_PCLK_MFC_SECURE_SMMU_MFC 0x0904
  3803. #define ENABLE_IP_MFC0 0x0b00
  3804. #define ENABLE_IP_MFC1 0x0b04
  3805. #define ENABLE_IP_MFC_SECURE_SMMU_MFC 0x0b08
  3806. static unsigned long mfc_clk_regs[] __initdata = {
  3807. MUX_SEL_MFC,
  3808. MUX_ENABLE_MFC,
  3809. MUX_STAT_MFC,
  3810. DIV_MFC,
  3811. DIV_STAT_MFC,
  3812. ENABLE_ACLK_MFC,
  3813. ENABLE_ACLK_MFC_SECURE_SMMU_MFC,
  3814. ENABLE_PCLK_MFC,
  3815. ENABLE_PCLK_MFC_SECURE_SMMU_MFC,
  3816. ENABLE_IP_MFC0,
  3817. ENABLE_IP_MFC1,
  3818. ENABLE_IP_MFC_SECURE_SMMU_MFC,
  3819. };
  3820. PNAME(mout_aclk_mfc_400_user_p) = { "oscclk", "aclk_mfc_400", };
  3821. static struct samsung_mux_clock mfc_mux_clks[] __initdata = {
  3822. /* MUX_SEL_MFC */
  3823. MUX(CLK_MOUT_ACLK_MFC_400_USER, "mout_aclk_mfc_400_user",
  3824. mout_aclk_mfc_400_user_p, MUX_SEL_MFC, 0, 0),
  3825. };
  3826. static struct samsung_div_clock mfc_div_clks[] __initdata = {
  3827. /* DIV_MFC */
  3828. DIV(CLK_DIV_PCLK_MFC, "div_pclk_mfc", "mout_aclk_mfc_400_user",
  3829. DIV_MFC, 0, 2),
  3830. };
  3831. static struct samsung_gate_clock mfc_gate_clks[] __initdata = {
  3832. /* ENABLE_ACLK_MFC */
  3833. GATE(CLK_ACLK_BTS_MFC_1, "aclk_bts_mfc_1", "mout_aclk_mfc_400_user",
  3834. ENABLE_ACLK_MFC, 6, 0, 0),
  3835. GATE(CLK_ACLK_BTS_MFC_0, "aclk_bts_mfc_0", "mout_aclk_mfc_400_user",
  3836. ENABLE_ACLK_MFC, 5, 0, 0),
  3837. GATE(CLK_ACLK_AHB2APB_MFCP, "aclk_ahb2apb_mfcp", "div_pclk_mfc",
  3838. ENABLE_ACLK_MFC, 4, CLK_IGNORE_UNUSED, 0),
  3839. GATE(CLK_ACLK_XIU_MFCX, "aclk_xiu_mfcx", "mout_aclk_mfc_400_user",
  3840. ENABLE_ACLK_MFC, 3, CLK_IGNORE_UNUSED, 0),
  3841. GATE(CLK_ACLK_MFCNP_100, "aclk_mfcnp_100", "div_pclk_mfc",
  3842. ENABLE_ACLK_MFC, 2, CLK_IGNORE_UNUSED, 0),
  3843. GATE(CLK_ACLK_MFCND_400, "aclk_mfcnd_400", "mout_aclk_mfc_400_user",
  3844. ENABLE_ACLK_MFC, 1, CLK_IGNORE_UNUSED, 0),
  3845. GATE(CLK_ACLK_MFC, "aclk_mfc", "mout_aclk_mfc_400_user",
  3846. ENABLE_ACLK_MFC, 0, 0, 0),
  3847. /* ENABLE_ACLK_MFC_SECURE_SMMU_MFC */
  3848. GATE(CLK_ACLK_SMMU_MFC_1, "aclk_smmu_mfc_1", "mout_aclk_mfc_400_user",
  3849. ENABLE_ACLK_MFC_SECURE_SMMU_MFC,
  3850. 1, CLK_IGNORE_UNUSED, 0),
  3851. GATE(CLK_ACLK_SMMU_MFC_0, "aclk_smmu_mfc_0", "mout_aclk_mfc_400_user",
  3852. ENABLE_ACLK_MFC_SECURE_SMMU_MFC,
  3853. 0, CLK_IGNORE_UNUSED, 0),
  3854. /* ENABLE_PCLK_MFC */
  3855. GATE(CLK_PCLK_BTS_MFC_1, "pclk_bts_mfc_1", "div_pclk_mfc",
  3856. ENABLE_PCLK_MFC, 4, 0, 0),
  3857. GATE(CLK_PCLK_BTS_MFC_0, "pclk_bts_mfc_0", "div_pclk_mfc",
  3858. ENABLE_PCLK_MFC, 3, 0, 0),
  3859. GATE(CLK_PCLK_PMU_MFC, "pclk_pmu_mfc", "div_pclk_mfc",
  3860. ENABLE_PCLK_MFC, 2, CLK_IGNORE_UNUSED, 0),
  3861. GATE(CLK_PCLK_SYSREG_MFC, "pclk_sysreg_mfc", "div_pclk_mfc",
  3862. ENABLE_PCLK_MFC, 1, CLK_IGNORE_UNUSED, 0),
  3863. GATE(CLK_PCLK_MFC, "pclk_mfc", "div_pclk_mfc",
  3864. ENABLE_PCLK_MFC, 4, CLK_IGNORE_UNUSED, 0),
  3865. /* ENABLE_PCLK_MFC_SECURE_SMMU_MFC */
  3866. GATE(CLK_PCLK_SMMU_MFC_1, "pclk_smmu_mfc_1", "div_pclk_mfc",
  3867. ENABLE_PCLK_MFC_SECURE_SMMU_MFC,
  3868. 1, CLK_IGNORE_UNUSED, 0),
  3869. GATE(CLK_PCLK_SMMU_MFC_0, "pclk_smmu_mfc_0", "div_pclk_mfc",
  3870. ENABLE_PCLK_MFC_SECURE_SMMU_MFC,
  3871. 0, CLK_IGNORE_UNUSED, 0),
  3872. };
  3873. static struct samsung_cmu_info mfc_cmu_info __initdata = {
  3874. .mux_clks = mfc_mux_clks,
  3875. .nr_mux_clks = ARRAY_SIZE(mfc_mux_clks),
  3876. .div_clks = mfc_div_clks,
  3877. .nr_div_clks = ARRAY_SIZE(mfc_div_clks),
  3878. .gate_clks = mfc_gate_clks,
  3879. .nr_gate_clks = ARRAY_SIZE(mfc_gate_clks),
  3880. .nr_clk_ids = MFC_NR_CLK,
  3881. .clk_regs = mfc_clk_regs,
  3882. .nr_clk_regs = ARRAY_SIZE(mfc_clk_regs),
  3883. };
  3884. static void __init exynos5433_cmu_mfc_init(struct device_node *np)
  3885. {
  3886. samsung_cmu_register_one(np, &mfc_cmu_info);
  3887. }
  3888. CLK_OF_DECLARE(exynos5433_cmu_mfc, "samsung,exynos5433-cmu-mfc",
  3889. exynos5433_cmu_mfc_init);
  3890. /*
  3891. * Register offset definitions for CMU_HEVC
  3892. */
  3893. #define MUX_SEL_HEVC 0x0200
  3894. #define MUX_ENABLE_HEVC 0x0300
  3895. #define MUX_STAT_HEVC 0x0400
  3896. #define DIV_HEVC 0x0600
  3897. #define DIV_STAT_HEVC 0x0700
  3898. #define ENABLE_ACLK_HEVC 0x0800
  3899. #define ENABLE_ACLK_HEVC_SECURE_SMMU_HEVC 0x0804
  3900. #define ENABLE_PCLK_HEVC 0x0900
  3901. #define ENABLE_PCLK_HEVC_SECURE_SMMU_HEVC 0x0904
  3902. #define ENABLE_IP_HEVC0 0x0b00
  3903. #define ENABLE_IP_HEVC1 0x0b04
  3904. #define ENABLE_IP_HEVC_SECURE_SMMU_HEVC 0x0b08
  3905. static unsigned long hevc_clk_regs[] __initdata = {
  3906. MUX_SEL_HEVC,
  3907. MUX_ENABLE_HEVC,
  3908. MUX_STAT_HEVC,
  3909. DIV_HEVC,
  3910. DIV_STAT_HEVC,
  3911. ENABLE_ACLK_HEVC,
  3912. ENABLE_ACLK_HEVC_SECURE_SMMU_HEVC,
  3913. ENABLE_PCLK_HEVC,
  3914. ENABLE_PCLK_HEVC_SECURE_SMMU_HEVC,
  3915. ENABLE_IP_HEVC0,
  3916. ENABLE_IP_HEVC1,
  3917. ENABLE_IP_HEVC_SECURE_SMMU_HEVC,
  3918. };
  3919. PNAME(mout_aclk_hevc_400_user_p) = { "oscclk", "aclk_hevc_400", };
  3920. static struct samsung_mux_clock hevc_mux_clks[] __initdata = {
  3921. /* MUX_SEL_HEVC */
  3922. MUX(CLK_MOUT_ACLK_HEVC_400_USER, "mout_aclk_hevc_400_user",
  3923. mout_aclk_hevc_400_user_p, MUX_SEL_HEVC, 0, 0),
  3924. };
  3925. static struct samsung_div_clock hevc_div_clks[] __initdata = {
  3926. /* DIV_HEVC */
  3927. DIV(CLK_DIV_PCLK_HEVC, "div_pclk_hevc", "mout_aclk_hevc_400_user",
  3928. DIV_HEVC, 0, 2),
  3929. };
  3930. static struct samsung_gate_clock hevc_gate_clks[] __initdata = {
  3931. /* ENABLE_ACLK_HEVC */
  3932. GATE(CLK_ACLK_BTS_HEVC_1, "aclk_bts_hevc_1", "mout_aclk_hevc_400_user",
  3933. ENABLE_ACLK_HEVC, 6, 0, 0),
  3934. GATE(CLK_ACLK_BTS_HEVC_0, "aclk_bts_hevc_0", "mout_aclk_hevc_400_user",
  3935. ENABLE_ACLK_HEVC, 5, 0, 0),
  3936. GATE(CLK_ACLK_AHB2APB_HEVCP, "aclk_ahb2apb_hevcp", "div_pclk_hevc",
  3937. ENABLE_ACLK_HEVC, 4, CLK_IGNORE_UNUSED, 0),
  3938. GATE(CLK_ACLK_XIU_HEVCX, "aclk_xiu_hevcx", "mout_aclk_hevc_400_user",
  3939. ENABLE_ACLK_HEVC, 3, CLK_IGNORE_UNUSED, 0),
  3940. GATE(CLK_ACLK_HEVCNP_100, "aclk_hevcnp_100", "div_pclk_hevc",
  3941. ENABLE_ACLK_HEVC, 2, CLK_IGNORE_UNUSED, 0),
  3942. GATE(CLK_ACLK_HEVCND_400, "aclk_hevcnd_400", "mout_aclk_hevc_400_user",
  3943. ENABLE_ACLK_HEVC, 1, CLK_IGNORE_UNUSED, 0),
  3944. GATE(CLK_ACLK_HEVC, "aclk_hevc", "mout_aclk_hevc_400_user",
  3945. ENABLE_ACLK_HEVC, 0, 0, 0),
  3946. /* ENABLE_ACLK_HEVC_SECURE_SMMU_HEVC */
  3947. GATE(CLK_ACLK_SMMU_HEVC_1, "aclk_smmu_hevc_1",
  3948. "mout_aclk_hevc_400_user",
  3949. ENABLE_ACLK_HEVC_SECURE_SMMU_HEVC,
  3950. 1, CLK_IGNORE_UNUSED, 0),
  3951. GATE(CLK_ACLK_SMMU_HEVC_0, "aclk_smmu_hevc_0",
  3952. "mout_aclk_hevc_400_user",
  3953. ENABLE_ACLK_HEVC_SECURE_SMMU_HEVC,
  3954. 0, CLK_IGNORE_UNUSED, 0),
  3955. /* ENABLE_PCLK_HEVC */
  3956. GATE(CLK_PCLK_BTS_HEVC_1, "pclk_bts_hevc_1", "div_pclk_hevc",
  3957. ENABLE_PCLK_HEVC, 4, 0, 0),
  3958. GATE(CLK_PCLK_BTS_HEVC_0, "pclk_bts_hevc_0", "div_pclk_hevc",
  3959. ENABLE_PCLK_HEVC, 3, 0, 0),
  3960. GATE(CLK_PCLK_PMU_HEVC, "pclk_pmu_hevc", "div_pclk_hevc",
  3961. ENABLE_PCLK_HEVC, 2, CLK_IGNORE_UNUSED, 0),
  3962. GATE(CLK_PCLK_SYSREG_HEVC, "pclk_sysreg_hevc", "div_pclk_hevc",
  3963. ENABLE_PCLK_HEVC, 1, CLK_IGNORE_UNUSED, 0),
  3964. GATE(CLK_PCLK_HEVC, "pclk_hevc", "div_pclk_hevc",
  3965. ENABLE_PCLK_HEVC, 4, CLK_IGNORE_UNUSED, 0),
  3966. /* ENABLE_PCLK_HEVC_SECURE_SMMU_HEVC */
  3967. GATE(CLK_PCLK_SMMU_HEVC_1, "pclk_smmu_hevc_1", "div_pclk_hevc",
  3968. ENABLE_PCLK_HEVC_SECURE_SMMU_HEVC,
  3969. 1, CLK_IGNORE_UNUSED, 0),
  3970. GATE(CLK_PCLK_SMMU_HEVC_0, "pclk_smmu_hevc_0", "div_pclk_hevc",
  3971. ENABLE_PCLK_HEVC_SECURE_SMMU_HEVC,
  3972. 0, CLK_IGNORE_UNUSED, 0),
  3973. };
  3974. static struct samsung_cmu_info hevc_cmu_info __initdata = {
  3975. .mux_clks = hevc_mux_clks,
  3976. .nr_mux_clks = ARRAY_SIZE(hevc_mux_clks),
  3977. .div_clks = hevc_div_clks,
  3978. .nr_div_clks = ARRAY_SIZE(hevc_div_clks),
  3979. .gate_clks = hevc_gate_clks,
  3980. .nr_gate_clks = ARRAY_SIZE(hevc_gate_clks),
  3981. .nr_clk_ids = HEVC_NR_CLK,
  3982. .clk_regs = hevc_clk_regs,
  3983. .nr_clk_regs = ARRAY_SIZE(hevc_clk_regs),
  3984. };
  3985. static void __init exynos5433_cmu_hevc_init(struct device_node *np)
  3986. {
  3987. samsung_cmu_register_one(np, &hevc_cmu_info);
  3988. }
  3989. CLK_OF_DECLARE(exynos5433_cmu_hevc, "samsung,exynos5433-cmu-hevc",
  3990. exynos5433_cmu_hevc_init);
  3991. /*
  3992. * Register offset definitions for CMU_ISP
  3993. */
  3994. #define MUX_SEL_ISP 0x0200
  3995. #define MUX_ENABLE_ISP 0x0300
  3996. #define MUX_STAT_ISP 0x0400
  3997. #define DIV_ISP 0x0600
  3998. #define DIV_STAT_ISP 0x0700
  3999. #define ENABLE_ACLK_ISP0 0x0800
  4000. #define ENABLE_ACLK_ISP1 0x0804
  4001. #define ENABLE_ACLK_ISP2 0x0808
  4002. #define ENABLE_PCLK_ISP 0x0900
  4003. #define ENABLE_SCLK_ISP 0x0a00
  4004. #define ENABLE_IP_ISP0 0x0b00
  4005. #define ENABLE_IP_ISP1 0x0b04
  4006. #define ENABLE_IP_ISP2 0x0b08
  4007. #define ENABLE_IP_ISP3 0x0b0c
  4008. static unsigned long isp_clk_regs[] __initdata = {
  4009. MUX_SEL_ISP,
  4010. MUX_ENABLE_ISP,
  4011. MUX_STAT_ISP,
  4012. DIV_ISP,
  4013. DIV_STAT_ISP,
  4014. ENABLE_ACLK_ISP0,
  4015. ENABLE_ACLK_ISP1,
  4016. ENABLE_ACLK_ISP2,
  4017. ENABLE_PCLK_ISP,
  4018. ENABLE_SCLK_ISP,
  4019. ENABLE_IP_ISP0,
  4020. ENABLE_IP_ISP1,
  4021. ENABLE_IP_ISP2,
  4022. ENABLE_IP_ISP3,
  4023. };
  4024. PNAME(mout_aclk_isp_dis_400_user_p) = { "oscclk", "aclk_isp_dis_400", };
  4025. PNAME(mout_aclk_isp_400_user_p) = { "oscclk", "aclk_isp_400", };
  4026. static struct samsung_mux_clock isp_mux_clks[] __initdata = {
  4027. /* MUX_SEL_ISP */
  4028. MUX(CLK_MOUT_ACLK_ISP_DIS_400_USER, "mout_aclk_isp_dis_400_user",
  4029. mout_aclk_isp_dis_400_user_p, MUX_SEL_ISP, 4, 0),
  4030. MUX(CLK_MOUT_ACLK_ISP_400_USER, "mout_aclk_isp_400_user",
  4031. mout_aclk_isp_400_user_p, MUX_SEL_ISP, 0, 0),
  4032. };
  4033. static struct samsung_div_clock isp_div_clks[] __initdata = {
  4034. /* DIV_ISP */
  4035. DIV(CLK_DIV_PCLK_ISP_DIS, "div_pclk_isp_dis",
  4036. "mout_aclk_isp_dis_400_user", DIV_ISP, 12, 3),
  4037. DIV(CLK_DIV_PCLK_ISP, "div_pclk_isp", "mout_aclk_isp_400_user",
  4038. DIV_ISP, 8, 3),
  4039. DIV(CLK_DIV_ACLK_ISP_D_200, "div_aclk_isp_d_200",
  4040. "mout_aclk_isp_400_user", DIV_ISP, 4, 3),
  4041. DIV(CLK_DIV_ACLK_ISP_C_200, "div_aclk_isp_c_200",
  4042. "mout_aclk_isp_400_user", DIV_ISP, 0, 3),
  4043. };
  4044. static struct samsung_gate_clock isp_gate_clks[] __initdata = {
  4045. /* ENABLE_ACLK_ISP0 */
  4046. GATE(CLK_ACLK_ISP_D_GLUE, "aclk_isp_d_glue", "mout_aclk_isp_400_user",
  4047. ENABLE_ACLK_ISP0, 6, CLK_IGNORE_UNUSED, 0),
  4048. GATE(CLK_ACLK_SCALERP, "aclk_scalerp", "mout_aclk_isp_400_user",
  4049. ENABLE_ACLK_ISP0, 5, 0, 0),
  4050. GATE(CLK_ACLK_3DNR, "aclk_3dnr", "mout_aclk_isp_400_user",
  4051. ENABLE_ACLK_ISP0, 4, 0, 0),
  4052. GATE(CLK_ACLK_DIS, "aclk_dis", "mout_aclk_isp_dis_400_user",
  4053. ENABLE_ACLK_ISP0, 3, 0, 0),
  4054. GATE(CLK_ACLK_SCALERC, "aclk_scalerc", "mout_aclk_isp_400_user",
  4055. ENABLE_ACLK_ISP0, 2, 0, 0),
  4056. GATE(CLK_ACLK_DRC, "aclk_drc", "mout_aclk_isp_400_user",
  4057. ENABLE_ACLK_ISP0, 1, 0, 0),
  4058. GATE(CLK_ACLK_ISP, "aclk_isp", "mout_aclk_isp_400_user",
  4059. ENABLE_ACLK_ISP0, 0, 0, 0),
  4060. /* ENABLE_ACLK_ISP1 */
  4061. GATE(CLK_ACLK_AXIUS_SCALERP, "aclk_axius_scalerp",
  4062. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP1,
  4063. 17, CLK_IGNORE_UNUSED, 0),
  4064. GATE(CLK_ACLK_AXIUS_SCALERC, "aclk_axius_scalerc",
  4065. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP1,
  4066. 16, CLK_IGNORE_UNUSED, 0),
  4067. GATE(CLK_ACLK_AXIUS_DRC, "aclk_axius_drc",
  4068. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP1,
  4069. 15, CLK_IGNORE_UNUSED, 0),
  4070. GATE(CLK_ACLK_ASYNCAHBM_ISP2P, "aclk_asyncahbm_isp2p",
  4071. "div_pclk_isp", ENABLE_ACLK_ISP1,
  4072. 14, CLK_IGNORE_UNUSED, 0),
  4073. GATE(CLK_ACLK_ASYNCAHBM_ISP1P, "aclk_asyncahbm_isp1p",
  4074. "div_pclk_isp", ENABLE_ACLK_ISP1,
  4075. 13, CLK_IGNORE_UNUSED, 0),
  4076. GATE(CLK_ACLK_ASYNCAXIS_DIS1, "aclk_asyncaxis_dis1",
  4077. "mout_aclk_isp_dis_400_user", ENABLE_ACLK_ISP1,
  4078. 12, CLK_IGNORE_UNUSED, 0),
  4079. GATE(CLK_ACLK_ASYNCAXIS_DIS0, "aclk_asyncaxis_dis0",
  4080. "mout_aclk_isp_dis_400_user", ENABLE_ACLK_ISP1,
  4081. 11, CLK_IGNORE_UNUSED, 0),
  4082. GATE(CLK_ACLK_ASYNCAXIM_DIS1, "aclk_asyncaxim_dis1",
  4083. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP1,
  4084. 10, CLK_IGNORE_UNUSED, 0),
  4085. GATE(CLK_ACLK_ASYNCAXIM_DIS0, "aclk_asyncaxim_dis0",
  4086. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP1,
  4087. 9, CLK_IGNORE_UNUSED, 0),
  4088. GATE(CLK_ACLK_ASYNCAXIM_ISP2P, "aclk_asyncaxim_isp2p",
  4089. "div_aclk_isp_d_200", ENABLE_ACLK_ISP1,
  4090. 8, CLK_IGNORE_UNUSED, 0),
  4091. GATE(CLK_ACLK_ASYNCAXIM_ISP1P, "aclk_asyncaxim_isp1p",
  4092. "div_aclk_isp_c_200", ENABLE_ACLK_ISP1,
  4093. 7, CLK_IGNORE_UNUSED, 0),
  4094. GATE(CLK_ACLK_AHB2APB_ISP2P, "aclk_ahb2apb_isp2p", "div_pclk_isp",
  4095. ENABLE_ACLK_ISP1, 6, CLK_IGNORE_UNUSED, 0),
  4096. GATE(CLK_ACLK_AHB2APB_ISP1P, "aclk_ahb2apb_isp1p", "div_pclk_isp",
  4097. ENABLE_ACLK_ISP1, 5, CLK_IGNORE_UNUSED, 0),
  4098. GATE(CLK_ACLK_AXI2APB_ISP2P, "aclk_axi2apb_isp2p",
  4099. "div_aclk_isp_d_200", ENABLE_ACLK_ISP1,
  4100. 4, CLK_IGNORE_UNUSED, 0),
  4101. GATE(CLK_ACLK_AXI2APB_ISP1P, "aclk_axi2apb_isp1p",
  4102. "div_aclk_isp_c_200", ENABLE_ACLK_ISP1,
  4103. 3, CLK_IGNORE_UNUSED, 0),
  4104. GATE(CLK_ACLK_XIU_ISPEX1, "aclk_xiu_ispex1", "mout_aclk_isp_400_user",
  4105. ENABLE_ACLK_ISP1, 2, CLK_IGNORE_UNUSED, 0),
  4106. GATE(CLK_ACLK_XIU_ISPEX0, "aclk_xiu_ispex0", "mout_aclk_isp_400_user",
  4107. ENABLE_ACLK_ISP1, 1, CLK_IGNORE_UNUSED, 0),
  4108. GATE(CLK_ACLK_ISPND_400, "aclk_ispnd_400", "mout_aclk_isp_400_user",
  4109. ENABLE_ACLK_ISP1, 1, CLK_IGNORE_UNUSED, 0),
  4110. /* ENABLE_ACLK_ISP2 */
  4111. GATE(CLK_ACLK_SMMU_SCALERP, "aclk_smmu_scalerp",
  4112. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP2,
  4113. 13, CLK_IGNORE_UNUSED, 0),
  4114. GATE(CLK_ACLK_SMMU_3DNR, "aclk_smmu_3dnr", "mout_aclk_isp_400_user",
  4115. ENABLE_ACLK_ISP2, 12, CLK_IGNORE_UNUSED, 0),
  4116. GATE(CLK_ACLK_SMMU_DIS1, "aclk_smmu_dis1", "mout_aclk_isp_400_user",
  4117. ENABLE_ACLK_ISP2, 11, CLK_IGNORE_UNUSED, 0),
  4118. GATE(CLK_ACLK_SMMU_DIS0, "aclk_smmu_dis0", "mout_aclk_isp_400_user",
  4119. ENABLE_ACLK_ISP2, 10, CLK_IGNORE_UNUSED, 0),
  4120. GATE(CLK_ACLK_SMMU_SCALERC, "aclk_smmu_scalerc",
  4121. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP2,
  4122. 9, CLK_IGNORE_UNUSED, 0),
  4123. GATE(CLK_ACLK_SMMU_DRC, "aclk_smmu_drc", "mout_aclk_isp_400_user",
  4124. ENABLE_ACLK_ISP2, 8, CLK_IGNORE_UNUSED, 0),
  4125. GATE(CLK_ACLK_SMMU_ISP, "aclk_smmu_isp", "mout_aclk_isp_400_user",
  4126. ENABLE_ACLK_ISP2, 7, CLK_IGNORE_UNUSED, 0),
  4127. GATE(CLK_ACLK_BTS_SCALERP, "aclk_bts_scalerp",
  4128. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP2,
  4129. 6, CLK_IGNORE_UNUSED, 0),
  4130. GATE(CLK_ACLK_BTS_3DR, "aclk_bts_3dnr", "mout_aclk_isp_400_user",
  4131. ENABLE_ACLK_ISP2, 5, CLK_IGNORE_UNUSED, 0),
  4132. GATE(CLK_ACLK_BTS_DIS1, "aclk_bts_dis1", "mout_aclk_isp_400_user",
  4133. ENABLE_ACLK_ISP2, 4, CLK_IGNORE_UNUSED, 0),
  4134. GATE(CLK_ACLK_BTS_DIS0, "aclk_bts_dis0", "mout_aclk_isp_400_user",
  4135. ENABLE_ACLK_ISP2, 3, CLK_IGNORE_UNUSED, 0),
  4136. GATE(CLK_ACLK_BTS_SCALERC, "aclk_bts_scalerc",
  4137. "mout_aclk_isp_400_user", ENABLE_ACLK_ISP2,
  4138. 2, CLK_IGNORE_UNUSED, 0),
  4139. GATE(CLK_ACLK_BTS_DRC, "aclk_bts_drc", "mout_aclk_isp_400_user",
  4140. ENABLE_ACLK_ISP2, 1, CLK_IGNORE_UNUSED, 0),
  4141. GATE(CLK_ACLK_BTS_ISP, "aclk_bts_isp", "mout_aclk_isp_400_user",
  4142. ENABLE_ACLK_ISP2, 0, CLK_IGNORE_UNUSED, 0),
  4143. /* ENABLE_PCLK_ISP */
  4144. GATE(CLK_PCLK_SMMU_SCALERP, "pclk_smmu_scalerp", "div_aclk_isp_d_200",
  4145. ENABLE_PCLK_ISP, 25, CLK_IGNORE_UNUSED, 0),
  4146. GATE(CLK_PCLK_SMMU_3DNR, "pclk_smmu_3dnr", "div_aclk_isp_d_200",
  4147. ENABLE_PCLK_ISP, 24, CLK_IGNORE_UNUSED, 0),
  4148. GATE(CLK_PCLK_SMMU_DIS1, "pclk_smmu_dis1", "div_aclk_isp_d_200",
  4149. ENABLE_PCLK_ISP, 23, CLK_IGNORE_UNUSED, 0),
  4150. GATE(CLK_PCLK_SMMU_DIS0, "pclk_smmu_dis0", "div_aclk_isp_d_200",
  4151. ENABLE_PCLK_ISP, 22, CLK_IGNORE_UNUSED, 0),
  4152. GATE(CLK_PCLK_SMMU_SCALERC, "pclk_smmu_scalerc", "div_aclk_isp_c_200",
  4153. ENABLE_PCLK_ISP, 21, CLK_IGNORE_UNUSED, 0),
  4154. GATE(CLK_PCLK_SMMU_DRC, "pclk_smmu_drc", "div_aclk_isp_c_200",
  4155. ENABLE_PCLK_ISP, 20, CLK_IGNORE_UNUSED, 0),
  4156. GATE(CLK_PCLK_SMMU_ISP, "pclk_smmu_isp", "div_aclk_isp_c_200",
  4157. ENABLE_PCLK_ISP, 19, CLK_IGNORE_UNUSED, 0),
  4158. GATE(CLK_PCLK_BTS_SCALERP, "pclk_bts_scalerp", "div_pclk_isp",
  4159. ENABLE_PCLK_ISP, 18, CLK_IGNORE_UNUSED, 0),
  4160. GATE(CLK_PCLK_BTS_3DNR, "pclk_bts_3dnr", "div_pclk_isp",
  4161. ENABLE_PCLK_ISP, 17, CLK_IGNORE_UNUSED, 0),
  4162. GATE(CLK_PCLK_BTS_DIS1, "pclk_bts_dis1", "div_pclk_isp",
  4163. ENABLE_PCLK_ISP, 16, CLK_IGNORE_UNUSED, 0),
  4164. GATE(CLK_PCLK_BTS_DIS0, "pclk_bts_dis0", "div_pclk_isp",
  4165. ENABLE_PCLK_ISP, 15, CLK_IGNORE_UNUSED, 0),
  4166. GATE(CLK_PCLK_BTS_SCALERC, "pclk_bts_scalerc", "div_pclk_isp",
  4167. ENABLE_PCLK_ISP, 14, CLK_IGNORE_UNUSED, 0),
  4168. GATE(CLK_PCLK_BTS_DRC, "pclk_bts_drc", "div_pclk_isp",
  4169. ENABLE_PCLK_ISP, 13, CLK_IGNORE_UNUSED, 0),
  4170. GATE(CLK_PCLK_BTS_ISP, "pclk_bts_isp", "div_pclk_isp",
  4171. ENABLE_PCLK_ISP, 12, CLK_IGNORE_UNUSED, 0),
  4172. GATE(CLK_PCLK_ASYNCAXI_DIS1, "pclk_asyncaxi_dis1", "div_pclk_isp",
  4173. ENABLE_PCLK_ISP, 11, CLK_IGNORE_UNUSED, 0),
  4174. GATE(CLK_PCLK_ASYNCAXI_DIS0, "pclk_asyncaxi_dis0", "div_pclk_isp",
  4175. ENABLE_PCLK_ISP, 10, CLK_IGNORE_UNUSED, 0),
  4176. GATE(CLK_PCLK_PMU_ISP, "pclk_pmu_isp", "div_pclk_isp",
  4177. ENABLE_PCLK_ISP, 9, CLK_IGNORE_UNUSED, 0),
  4178. GATE(CLK_PCLK_SYSREG_ISP, "pclk_sysreg_isp", "div_pclk_isp",
  4179. ENABLE_PCLK_ISP, 8, CLK_IGNORE_UNUSED, 0),
  4180. GATE(CLK_PCLK_CMU_ISP_LOCAL, "pclk_cmu_isp_local",
  4181. "div_aclk_isp_c_200", ENABLE_PCLK_ISP,
  4182. 7, CLK_IGNORE_UNUSED, 0),
  4183. GATE(CLK_PCLK_SCALERP, "pclk_scalerp", "div_aclk_isp_d_200",
  4184. ENABLE_PCLK_ISP, 6, CLK_IGNORE_UNUSED, 0),
  4185. GATE(CLK_PCLK_3DNR, "pclk_3dnr", "div_aclk_isp_d_200",
  4186. ENABLE_PCLK_ISP, 5, CLK_IGNORE_UNUSED, 0),
  4187. GATE(CLK_PCLK_DIS_CORE, "pclk_dis_core", "div_pclk_isp_dis",
  4188. ENABLE_PCLK_ISP, 4, CLK_IGNORE_UNUSED, 0),
  4189. GATE(CLK_PCLK_DIS, "pclk_dis", "div_aclk_isp_d_200",
  4190. ENABLE_PCLK_ISP, 3, CLK_IGNORE_UNUSED, 0),
  4191. GATE(CLK_PCLK_SCALERC, "pclk_scalerc", "div_aclk_isp_c_200",
  4192. ENABLE_PCLK_ISP, 2, CLK_IGNORE_UNUSED, 0),
  4193. GATE(CLK_PCLK_DRC, "pclk_drc", "div_aclk_isp_c_200",
  4194. ENABLE_PCLK_ISP, 1, CLK_IGNORE_UNUSED, 0),
  4195. GATE(CLK_PCLK_ISP, "pclk_isp", "div_aclk_isp_c_200",
  4196. ENABLE_PCLK_ISP, 0, CLK_IGNORE_UNUSED, 0),
  4197. /* ENABLE_SCLK_ISP */
  4198. GATE(CLK_SCLK_PIXELASYNCS_DIS, "sclk_pixelasyncs_dis",
  4199. "mout_aclk_isp_dis_400_user", ENABLE_SCLK_ISP,
  4200. 5, CLK_IGNORE_UNUSED, 0),
  4201. GATE(CLK_SCLK_PIXELASYNCM_DIS, "sclk_pixelasyncm_dis",
  4202. "mout_aclk_isp_dis_400_user", ENABLE_SCLK_ISP,
  4203. 4, CLK_IGNORE_UNUSED, 0),
  4204. GATE(CLK_SCLK_PIXELASYNCS_SCALERP, "sclk_pixelasyncs_scalerp",
  4205. "mout_aclk_isp_400_user", ENABLE_SCLK_ISP,
  4206. 3, CLK_IGNORE_UNUSED, 0),
  4207. GATE(CLK_SCLK_PIXELASYNCM_ISPD, "sclk_pixelasyncm_ispd",
  4208. "mout_aclk_isp_400_user", ENABLE_SCLK_ISP,
  4209. 2, CLK_IGNORE_UNUSED, 0),
  4210. GATE(CLK_SCLK_PIXELASYNCS_ISPC, "sclk_pixelasyncs_ispc",
  4211. "mout_aclk_isp_400_user", ENABLE_SCLK_ISP,
  4212. 1, CLK_IGNORE_UNUSED, 0),
  4213. GATE(CLK_SCLK_PIXELASYNCM_ISPC, "sclk_pixelasyncm_ispc",
  4214. "mout_aclk_isp_400_user", ENABLE_SCLK_ISP,
  4215. 0, CLK_IGNORE_UNUSED, 0),
  4216. };
  4217. static struct samsung_cmu_info isp_cmu_info __initdata = {
  4218. .mux_clks = isp_mux_clks,
  4219. .nr_mux_clks = ARRAY_SIZE(isp_mux_clks),
  4220. .div_clks = isp_div_clks,
  4221. .nr_div_clks = ARRAY_SIZE(isp_div_clks),
  4222. .gate_clks = isp_gate_clks,
  4223. .nr_gate_clks = ARRAY_SIZE(isp_gate_clks),
  4224. .nr_clk_ids = ISP_NR_CLK,
  4225. .clk_regs = isp_clk_regs,
  4226. .nr_clk_regs = ARRAY_SIZE(isp_clk_regs),
  4227. };
  4228. static void __init exynos5433_cmu_isp_init(struct device_node *np)
  4229. {
  4230. samsung_cmu_register_one(np, &isp_cmu_info);
  4231. }
  4232. CLK_OF_DECLARE(exynos5433_cmu_isp, "samsung,exynos5433-cmu-isp",
  4233. exynos5433_cmu_isp_init);
  4234. /*
  4235. * Register offset definitions for CMU_CAM0
  4236. */
  4237. #define MUX_SEL_CAM00 0x0200
  4238. #define MUX_SEL_CAM01 0x0204
  4239. #define MUX_SEL_CAM02 0x0208
  4240. #define MUX_SEL_CAM03 0x020c
  4241. #define MUX_SEL_CAM04 0x0210
  4242. #define MUX_ENABLE_CAM00 0x0300
  4243. #define MUX_ENABLE_CAM01 0x0304
  4244. #define MUX_ENABLE_CAM02 0x0308
  4245. #define MUX_ENABLE_CAM03 0x030c
  4246. #define MUX_ENABLE_CAM04 0x0310
  4247. #define MUX_STAT_CAM00 0x0400
  4248. #define MUX_STAT_CAM01 0x0404
  4249. #define MUX_STAT_CAM02 0x0408
  4250. #define MUX_STAT_CAM03 0x040c
  4251. #define MUX_STAT_CAM04 0x0410
  4252. #define MUX_IGNORE_CAM01 0x0504
  4253. #define DIV_CAM00 0x0600
  4254. #define DIV_CAM01 0x0604
  4255. #define DIV_CAM02 0x0608
  4256. #define DIV_CAM03 0x060c
  4257. #define DIV_STAT_CAM00 0x0700
  4258. #define DIV_STAT_CAM01 0x0704
  4259. #define DIV_STAT_CAM02 0x0708
  4260. #define DIV_STAT_CAM03 0x070c
  4261. #define ENABLE_ACLK_CAM00 0X0800
  4262. #define ENABLE_ACLK_CAM01 0X0804
  4263. #define ENABLE_ACLK_CAM02 0X0808
  4264. #define ENABLE_PCLK_CAM0 0X0900
  4265. #define ENABLE_SCLK_CAM0 0X0a00
  4266. #define ENABLE_IP_CAM00 0X0b00
  4267. #define ENABLE_IP_CAM01 0X0b04
  4268. #define ENABLE_IP_CAM02 0X0b08
  4269. #define ENABLE_IP_CAM03 0X0b0C
  4270. static unsigned long cam0_clk_regs[] __initdata = {
  4271. MUX_SEL_CAM00,
  4272. MUX_SEL_CAM01,
  4273. MUX_SEL_CAM02,
  4274. MUX_SEL_CAM03,
  4275. MUX_SEL_CAM04,
  4276. MUX_ENABLE_CAM00,
  4277. MUX_ENABLE_CAM01,
  4278. MUX_ENABLE_CAM02,
  4279. MUX_ENABLE_CAM03,
  4280. MUX_ENABLE_CAM04,
  4281. MUX_STAT_CAM00,
  4282. MUX_STAT_CAM01,
  4283. MUX_STAT_CAM02,
  4284. MUX_STAT_CAM03,
  4285. MUX_STAT_CAM04,
  4286. MUX_IGNORE_CAM01,
  4287. DIV_CAM00,
  4288. DIV_CAM01,
  4289. DIV_CAM02,
  4290. DIV_CAM03,
  4291. DIV_STAT_CAM00,
  4292. DIV_STAT_CAM01,
  4293. DIV_STAT_CAM02,
  4294. DIV_STAT_CAM03,
  4295. ENABLE_ACLK_CAM00,
  4296. ENABLE_ACLK_CAM01,
  4297. ENABLE_ACLK_CAM02,
  4298. ENABLE_PCLK_CAM0,
  4299. ENABLE_SCLK_CAM0,
  4300. ENABLE_IP_CAM00,
  4301. ENABLE_IP_CAM01,
  4302. ENABLE_IP_CAM02,
  4303. ENABLE_IP_CAM03,
  4304. };
  4305. PNAME(mout_aclk_cam0_333_user_p) = { "oscclk", "aclk_cam0_333", };
  4306. PNAME(mout_aclk_cam0_400_user_p) = { "oscclk", "aclk_cam0_400", };
  4307. PNAME(mout_aclk_cam0_552_user_p) = { "oscclk", "aclk_cam0_552", };
  4308. PNAME(mout_phyclk_rxbyteclkhs0_s4_user_p) = { "oscclk",
  4309. "phyclk_rxbyteclkhs0_s4_phy", };
  4310. PNAME(mout_phyclk_rxbyteclkhs0_s2a_user_p) = { "oscclk",
  4311. "phyclk_rxbyteclkhs0_s2a_phy", };
  4312. PNAME(mout_aclk_lite_d_b_p) = { "mout_aclk_lite_d_a",
  4313. "mout_aclk_cam0_333_user", };
  4314. PNAME(mout_aclk_lite_d_a_p) = { "mout_aclk_cam0_552_user",
  4315. "mout_aclk_cam0_400_user", };
  4316. PNAME(mout_aclk_lite_b_b_p) = { "mout_aclk_lite_b_a",
  4317. "mout_aclk_cam0_333_user", };
  4318. PNAME(mout_aclk_lite_b_a_p) = { "mout_aclk_cam0_552_user",
  4319. "mout_aclk_cam0_400_user", };
  4320. PNAME(mout_aclk_lite_a_b_p) = { "mout_aclk_lite_a_a",
  4321. "mout_aclk_cam0_333_user", };
  4322. PNAME(mout_aclk_lite_a_a_p) = { "mout_aclk_cam0_552_user",
  4323. "mout_aclk_cam0_400_user", };
  4324. PNAME(mout_aclk_cam0_400_p) = { "mout_aclk_cam0_400_user",
  4325. "mout_aclk_cam0_333_user", };
  4326. PNAME(mout_aclk_csis1_b_p) = { "mout_aclk_csis1_a",
  4327. "mout_aclk_cam0_333_user" };
  4328. PNAME(mout_aclk_csis1_a_p) = { "mout_aclk_cam0_552_user",
  4329. "mout_aclk_cam0_400_user", };
  4330. PNAME(mout_aclk_csis0_b_p) = { "mout_aclk_csis0_a",
  4331. "mout_aclk_cam0_333_user", };
  4332. PNAME(mout_aclk_csis0_a_p) = { "mout_aclk_cam0_552_user",
  4333. "mout_aclk-cam0_400_user", };
  4334. PNAME(mout_aclk_3aa1_b_p) = { "mout_aclk_3aa1_a",
  4335. "mout_aclk_cam0_333_user", };
  4336. PNAME(mout_aclk_3aa1_a_p) = { "mout_aclk_cam0_552_user",
  4337. "mout_aclk_cam0_400_user", };
  4338. PNAME(mout_aclk_3aa0_b_p) = { "mout_aclk_3aa0_a",
  4339. "mout_aclk_cam0_333_user", };
  4340. PNAME(mout_aclk_3aa0_a_p) = { "mout_aclk_cam0_552_user",
  4341. "mout_aclk_cam0_400_user", };
  4342. PNAME(mout_sclk_lite_freecnt_c_p) = { "mout_sclk_lite_freecnt_b",
  4343. "div_pclk_lite_d", };
  4344. PNAME(mout_sclk_lite_freecnt_b_p) = { "mout_sclk_lite_freecnt_a",
  4345. "div_pclk_pixelasync_lite_c", };
  4346. PNAME(mout_sclk_lite_freecnt_a_p) = { "div_pclk_lite_a",
  4347. "div_pclk_lite_b", };
  4348. PNAME(mout_sclk_pixelasync_lite_c_b_p) = { "mout_sclk_pixelasync_lite_c_a",
  4349. "mout_aclk_cam0_333_user", };
  4350. PNAME(mout_sclk_pixelasync_lite_c_a_p) = { "mout_aclk_cam0_552_user",
  4351. "mout_aclk_cam0_400_user", };
  4352. PNAME(mout_sclk_pixelasync_lite_c_init_b_p) = {
  4353. "mout_sclk_pixelasync_lite_c_init_a",
  4354. "mout_aclk_cam0_400_user", };
  4355. PNAME(mout_sclk_pixelasync_lite_c_init_a_p) = {
  4356. "mout_aclk_cam0_552_user",
  4357. "mout_aclk_cam0_400_user", };
  4358. static struct samsung_fixed_rate_clock cam0_fixed_clks[] __initdata = {
  4359. FRATE(CLK_PHYCLK_RXBYTEECLKHS0_S4_PHY, "phyclk_rxbyteclkhs0_s4_phy",
  4360. NULL, CLK_IS_ROOT, 100000000),
  4361. FRATE(CLK_PHYCLK_RXBYTEECLKHS0_S2A_PHY, "phyclk_rxbyteclkhs0_s2a_phy",
  4362. NULL, CLK_IS_ROOT, 100000000),
  4363. };
  4364. static struct samsung_mux_clock cam0_mux_clks[] __initdata = {
  4365. /* MUX_SEL_CAM00 */
  4366. MUX(CLK_MOUT_ACLK_CAM0_333_USER, "mout_aclk_cam0_333_user",
  4367. mout_aclk_cam0_333_user_p, MUX_SEL_CAM00, 8, 1),
  4368. MUX(CLK_MOUT_ACLK_CAM0_400_USER, "mout_aclk_cam0_400_user",
  4369. mout_aclk_cam0_400_user_p, MUX_SEL_CAM00, 4, 1),
  4370. MUX(CLK_MOUT_ACLK_CAM0_552_USER, "mout_aclk_cam0_552_user",
  4371. mout_aclk_cam0_552_user_p, MUX_SEL_CAM00, 0, 1),
  4372. /* MUX_SEL_CAM01 */
  4373. MUX(CLK_MOUT_PHYCLK_RXBYTECLKHS0_S4_USER,
  4374. "mout_phyclk_rxbyteclkhs0_s4_user",
  4375. mout_phyclk_rxbyteclkhs0_s4_user_p,
  4376. MUX_SEL_CAM01, 4, 1),
  4377. MUX(CLK_MOUT_PHYCLK_RXBYTECLKHS0_S2A_USER,
  4378. "mout_phyclk_rxbyteclkhs0_s2a_user",
  4379. mout_phyclk_rxbyteclkhs0_s2a_user_p,
  4380. MUX_SEL_CAM01, 0, 1),
  4381. /* MUX_SEL_CAM02 */
  4382. MUX(CLK_MOUT_ACLK_LITE_D_B, "mout_aclk_lite_d_b", mout_aclk_lite_d_b_p,
  4383. MUX_SEL_CAM02, 24, 1),
  4384. MUX(CLK_MOUT_ACLK_LITE_D_A, "mout_aclk_lite_d_a", mout_aclk_lite_d_a_p,
  4385. MUX_SEL_CAM02, 20, 1),
  4386. MUX(CLK_MOUT_ACLK_LITE_B_B, "mout_aclk_lite_b_b", mout_aclk_lite_b_b_p,
  4387. MUX_SEL_CAM02, 16, 1),
  4388. MUX(CLK_MOUT_ACLK_LITE_B_A, "mout_aclk_lite_b_a", mout_aclk_lite_b_a_p,
  4389. MUX_SEL_CAM02, 12, 1),
  4390. MUX(CLK_MOUT_ACLK_LITE_A_B, "mout_aclk_lite_a_b", mout_aclk_lite_a_b_p,
  4391. MUX_SEL_CAM02, 8, 1),
  4392. MUX(CLK_MOUT_ACLK_LITE_A_A, "mout_aclk_lite_a_a", mout_aclk_lite_a_a_p,
  4393. MUX_SEL_CAM02, 4, 1),
  4394. MUX(CLK_MOUT_ACLK_CAM0_400, "mout_aclk_cam0_400", mout_aclk_cam0_400_p,
  4395. MUX_SEL_CAM02, 0, 1),
  4396. /* MUX_SEL_CAM03 */
  4397. MUX(CLK_MOUT_ACLK_CSIS1_B, "mout_aclk_csis1_b", mout_aclk_csis1_b_p,
  4398. MUX_SEL_CAM03, 28, 1),
  4399. MUX(CLK_MOUT_ACLK_CSIS1_A, "mout_aclk_csis1_a", mout_aclk_csis1_a_p,
  4400. MUX_SEL_CAM03, 24, 1),
  4401. MUX(CLK_MOUT_ACLK_CSIS0_B, "mout_aclk_csis0_b", mout_aclk_csis0_b_p,
  4402. MUX_SEL_CAM03, 20, 1),
  4403. MUX(CLK_MOUT_ACLK_CSIS0_A, "mout_aclk_csis0_a", mout_aclk_csis0_a_p,
  4404. MUX_SEL_CAM03, 16, 1),
  4405. MUX(CLK_MOUT_ACLK_3AA1_B, "mout_aclk_3aa1_b", mout_aclk_3aa1_b_p,
  4406. MUX_SEL_CAM03, 12, 1),
  4407. MUX(CLK_MOUT_ACLK_3AA1_A, "mout_aclk_3aa1_a", mout_aclk_3aa1_a_p,
  4408. MUX_SEL_CAM03, 8, 1),
  4409. MUX(CLK_MOUT_ACLK_3AA0_B, "mout_aclk_3aa0_b", mout_aclk_3aa0_b_p,
  4410. MUX_SEL_CAM03, 4, 1),
  4411. MUX(CLK_MOUT_ACLK_3AA0_A, "mout_aclk_3aa0_a", mout_aclk_3aa0_a_p,
  4412. MUX_SEL_CAM03, 0, 1),
  4413. /* MUX_SEL_CAM04 */
  4414. MUX(CLK_MOUT_SCLK_LITE_FREECNT_C, "mout_sclk_lite_freecnt_c",
  4415. mout_sclk_lite_freecnt_c_p, MUX_SEL_CAM04, 24, 1),
  4416. MUX(CLK_MOUT_SCLK_LITE_FREECNT_B, "mout_sclk_lite_freecnt_b",
  4417. mout_sclk_lite_freecnt_b_p, MUX_SEL_CAM04, 24, 1),
  4418. MUX(CLK_MOUT_SCLK_LITE_FREECNT_A, "mout_sclk_lite_freecnt_a",
  4419. mout_sclk_lite_freecnt_a_p, MUX_SEL_CAM04, 24, 1),
  4420. MUX(CLK_MOUT_SCLK_PIXELASYNC_LITE_C_B, "mout_sclk_pixelasync_lite_c_b",
  4421. mout_sclk_pixelasync_lite_c_b_p, MUX_SEL_CAM04, 24, 1),
  4422. MUX(CLK_MOUT_SCLK_PIXELASYNC_LITE_C_A, "mout_sclk_pixelasync_lite_c_a",
  4423. mout_sclk_pixelasync_lite_c_a_p, MUX_SEL_CAM04, 24, 1),
  4424. MUX(CLK_MOUT_SCLK_PIXELASYNC_LITE_C_INIT_B,
  4425. "mout_sclk_pixelasync_lite_c_init_b",
  4426. mout_sclk_pixelasync_lite_c_init_b_p,
  4427. MUX_SEL_CAM04, 24, 1),
  4428. MUX(CLK_MOUT_SCLK_PIXELASYNC_LITE_C_INIT_A,
  4429. "mout_sclk_pixelasync_lite_c_init_a",
  4430. mout_sclk_pixelasync_lite_c_init_a_p,
  4431. MUX_SEL_CAM04, 24, 1),
  4432. };
  4433. static struct samsung_div_clock cam0_div_clks[] __initdata = {
  4434. /* DIV_CAM00 */
  4435. DIV(CLK_DIV_PCLK_CAM0_50, "div_pclk_cam0_50", "div_aclk_cam0_200",
  4436. DIV_CAM00, 8, 2),
  4437. DIV(CLK_DIV_ACLK_CAM0_200, "div_aclk_cam0_200", "mout_aclk_cam0_400",
  4438. DIV_CAM00, 4, 3),
  4439. DIV(CLK_DIV_ACLK_CAM0_BUS_400, "div_aclk_cam0_bus_400",
  4440. "mout_aclk_cam0_400", DIV_CAM00, 0, 3),
  4441. /* DIV_CAM01 */
  4442. DIV(CLK_DIV_PCLK_LITE_D, "div_pclk_lite_d", "div_aclk_lite_d",
  4443. DIV_CAM01, 20, 2),
  4444. DIV(CLK_DIV_ACLK_LITE_D, "div_aclk_lite_d", "mout_aclk_lite_d_b",
  4445. DIV_CAM01, 16, 3),
  4446. DIV(CLK_DIV_PCLK_LITE_B, "div_pclk_lite_b", "div_aclk_lite_b",
  4447. DIV_CAM01, 12, 2),
  4448. DIV(CLK_DIV_ACLK_LITE_B, "div_aclk_lite_b", "mout_aclk_lite_b_b",
  4449. DIV_CAM01, 8, 3),
  4450. DIV(CLK_DIV_PCLK_LITE_A, "div_pclk_lite_a", "div_aclk_lite_a",
  4451. DIV_CAM01, 4, 2),
  4452. DIV(CLK_DIV_ACLK_LITE_A, "div_aclk_lite_a", "mout_aclk_lite_a_b",
  4453. DIV_CAM01, 0, 3),
  4454. /* DIV_CAM02 */
  4455. DIV(CLK_DIV_ACLK_CSIS1, "div_aclk_csis1", "mout_aclk_csis1_b",
  4456. DIV_CAM02, 20, 3),
  4457. DIV(CLK_DIV_ACLK_CSIS0, "div_aclk_csis0", "mout_aclk_csis0_b",
  4458. DIV_CAM02, 16, 3),
  4459. DIV(CLK_DIV_PCLK_3AA1, "div_pclk_3aa1", "div_aclk_3aa1",
  4460. DIV_CAM02, 12, 2),
  4461. DIV(CLK_DIV_ACLK_3AA1, "div_aclk_3aa1", "mout_aclk_3aa1_b",
  4462. DIV_CAM02, 8, 3),
  4463. DIV(CLK_DIV_PCLK_3AA0, "div_pclk_3aa0", "div_aclk_3aa0",
  4464. DIV_CAM02, 4, 2),
  4465. DIV(CLK_DIV_ACLK_3AA0, "div_aclk_3aa0", "mout_aclk_3aa0_b",
  4466. DIV_CAM02, 0, 3),
  4467. /* DIV_CAM03 */
  4468. DIV(CLK_DIV_SCLK_PIXELASYNC_LITE_C, "div_sclk_pixelasync_lite_c",
  4469. "mout_sclk_pixelasync_lite_c_b", DIV_CAM03, 8, 3),
  4470. DIV(CLK_DIV_PCLK_PIXELASYNC_LITE_C, "div_pclk_pixelasync_lite_c",
  4471. "div_sclk_pixelasync_lite_c_init", DIV_CAM03, 4, 2),
  4472. DIV(CLK_DIV_SCLK_PIXELASYNC_LITE_C_INIT,
  4473. "div_sclk_pixelasync_lite_c_init",
  4474. "mout_sclk_pixelasync_lite_c_init_b", DIV_CAM03, 0, 3),
  4475. };
  4476. static struct samsung_gate_clock cam0_gate_clks[] __initdata = {
  4477. /* ENABLE_ACLK_CAM00 */
  4478. GATE(CLK_ACLK_CSIS1, "aclk_csis1", "div_aclk_csis1", ENABLE_ACLK_CAM00,
  4479. 6, 0, 0),
  4480. GATE(CLK_ACLK_CSIS0, "aclk_csis0", "div_aclk_csis0", ENABLE_ACLK_CAM00,
  4481. 5, 0, 0),
  4482. GATE(CLK_ACLK_3AA1, "aclk_3aa1", "div_aclk_3aa1", ENABLE_ACLK_CAM00,
  4483. 4, 0, 0),
  4484. GATE(CLK_ACLK_3AA0, "aclk_3aa0", "div_aclk_3aa0", ENABLE_ACLK_CAM00,
  4485. 3, 0, 0),
  4486. GATE(CLK_ACLK_LITE_D, "aclk_lite_d", "div_aclk_lite_d",
  4487. ENABLE_ACLK_CAM00, 2, 0, 0),
  4488. GATE(CLK_ACLK_LITE_B, "aclk_lite_b", "div_aclk_lite_b",
  4489. ENABLE_ACLK_CAM00, 1, 0, 0),
  4490. GATE(CLK_ACLK_LITE_A, "aclk_lite_a", "div_aclk_lite_a",
  4491. ENABLE_ACLK_CAM00, 0, 0, 0),
  4492. /* ENABLE_ACLK_CAM01 */
  4493. GATE(CLK_ACLK_AHBSYNCDN, "aclk_ahbsyncdn", "div_aclk_cam0_200",
  4494. ENABLE_ACLK_CAM01, 31, CLK_IGNORE_UNUSED, 0),
  4495. GATE(CLK_ACLK_AXIUS_LITE_D, "aclk_axius_lite_d", "div_aclk_cam0_bus_400",
  4496. ENABLE_ACLK_CAM01, 30, CLK_IGNORE_UNUSED, 0),
  4497. GATE(CLK_ACLK_AXIUS_LITE_B, "aclk_axius_lite_b", "div_aclk_cam0_bus_400",
  4498. ENABLE_ACLK_CAM01, 29, CLK_IGNORE_UNUSED, 0),
  4499. GATE(CLK_ACLK_AXIUS_LITE_A, "aclk_axius_lite_a", "div_aclk_cam0_bus_400",
  4500. ENABLE_ACLK_CAM01, 28, CLK_IGNORE_UNUSED, 0),
  4501. GATE(CLK_ACLK_ASYNCAPBM_3AA1, "aclk_asyncapbm_3aa1", "div_pclk_3aa1",
  4502. ENABLE_ACLK_CAM01, 27, CLK_IGNORE_UNUSED, 0),
  4503. GATE(CLK_ACLK_ASYNCAPBS_3AA1, "aclk_asyncapbs_3aa1", "div_aclk_3aa1",
  4504. ENABLE_ACLK_CAM01, 26, CLK_IGNORE_UNUSED, 0),
  4505. GATE(CLK_ACLK_ASYNCAPBM_3AA0, "aclk_asyncapbm_3aa0", "div_pclk_3aa0",
  4506. ENABLE_ACLK_CAM01, 25, CLK_IGNORE_UNUSED, 0),
  4507. GATE(CLK_ACLK_ASYNCAPBS_3AA0, "aclk_asyncapbs_3aa0", "div_aclk_3aa0",
  4508. ENABLE_ACLK_CAM01, 24, CLK_IGNORE_UNUSED, 0),
  4509. GATE(CLK_ACLK_ASYNCAPBM_LITE_D, "aclk_asyncapbm_lite_d",
  4510. "div_pclk_lite_d", ENABLE_ACLK_CAM01,
  4511. 23, CLK_IGNORE_UNUSED, 0),
  4512. GATE(CLK_ACLK_ASYNCAPBS_LITE_D, "aclk_asyncapbs_lite_d",
  4513. "div_aclk_cam0_200", ENABLE_ACLK_CAM01,
  4514. 22, CLK_IGNORE_UNUSED, 0),
  4515. GATE(CLK_ACLK_ASYNCAPBM_LITE_B, "aclk_asyncapbm_lite_b",
  4516. "div_pclk_lite_b", ENABLE_ACLK_CAM01,
  4517. 21, CLK_IGNORE_UNUSED, 0),
  4518. GATE(CLK_ACLK_ASYNCAPBS_LITE_B, "aclk_asyncapbs_lite_b",
  4519. "div_aclk_cam0_200", ENABLE_ACLK_CAM01,
  4520. 20, CLK_IGNORE_UNUSED, 0),
  4521. GATE(CLK_ACLK_ASYNCAPBM_LITE_A, "aclk_asyncapbm_lite_a",
  4522. "div_pclk_lite_a", ENABLE_ACLK_CAM01,
  4523. 19, CLK_IGNORE_UNUSED, 0),
  4524. GATE(CLK_ACLK_ASYNCAPBS_LITE_A, "aclk_asyncapbs_lite_a",
  4525. "div_aclk_cam0_200", ENABLE_ACLK_CAM01,
  4526. 18, CLK_IGNORE_UNUSED, 0),
  4527. GATE(CLK_ACLK_ASYNCAXIM_ISP0P, "aclk_asyncaxim_isp0p",
  4528. "div_aclk_cam0_200", ENABLE_ACLK_CAM01,
  4529. 17, CLK_IGNORE_UNUSED, 0),
  4530. GATE(CLK_ACLK_ASYNCAXIM_3AA1, "aclk_asyncaxim_3aa1",
  4531. "div_aclk_cam0_bus_400", ENABLE_ACLK_CAM01,
  4532. 16, CLK_IGNORE_UNUSED, 0),
  4533. GATE(CLK_ACLK_ASYNCAXIS_3AA1, "aclk_asyncaxis_3aa1",
  4534. "div_aclk_3aa1", ENABLE_ACLK_CAM01,
  4535. 15, CLK_IGNORE_UNUSED, 0),
  4536. GATE(CLK_ACLK_ASYNCAXIM_3AA0, "aclk_asyncaxim_3aa0",
  4537. "div_aclk_cam0_bus_400", ENABLE_ACLK_CAM01,
  4538. 14, CLK_IGNORE_UNUSED, 0),
  4539. GATE(CLK_ACLK_ASYNCAXIS_3AA0, "aclk_asyncaxis_3aa0",
  4540. "div_aclk_3aa0", ENABLE_ACLK_CAM01,
  4541. 13, CLK_IGNORE_UNUSED, 0),
  4542. GATE(CLK_ACLK_ASYNCAXIM_LITE_D, "aclk_asyncaxim_lite_d",
  4543. "div_aclk_cam0_bus_400", ENABLE_ACLK_CAM01,
  4544. 12, CLK_IGNORE_UNUSED, 0),
  4545. GATE(CLK_ACLK_ASYNCAXIS_LITE_D, "aclk_asyncaxis_lite_d",
  4546. "div_aclk_lite_d", ENABLE_ACLK_CAM01,
  4547. 11, CLK_IGNORE_UNUSED, 0),
  4548. GATE(CLK_ACLK_ASYNCAXIM_LITE_B, "aclk_asyncaxim_lite_b",
  4549. "div_aclk_cam0_bus_400", ENABLE_ACLK_CAM01,
  4550. 10, CLK_IGNORE_UNUSED, 0),
  4551. GATE(CLK_ACLK_ASYNCAXIS_LITE_B, "aclk_asyncaxis_lite_b",
  4552. "div_aclk_lite_b", ENABLE_ACLK_CAM01,
  4553. 9, CLK_IGNORE_UNUSED, 0),
  4554. GATE(CLK_ACLK_ASYNCAXIM_LITE_A, "aclk_asyncaxim_lite_a",
  4555. "div_aclk_cam0_bus_400", ENABLE_ACLK_CAM01,
  4556. 8, CLK_IGNORE_UNUSED, 0),
  4557. GATE(CLK_ACLK_ASYNCAXIS_LITE_A, "aclk_asyncaxis_lite_a",
  4558. "div_aclk_lite_a", ENABLE_ACLK_CAM01,
  4559. 7, CLK_IGNORE_UNUSED, 0),
  4560. GATE(CLK_ACLK_AHB2APB_ISPSFRP, "aclk_ahb2apb_ispsfrp",
  4561. "div_pclk_cam0_50", ENABLE_ACLK_CAM01,
  4562. 6, CLK_IGNORE_UNUSED, 0),
  4563. GATE(CLK_ACLK_AXI2APB_ISP0P, "aclk_axi2apb_isp0p", "div_aclk_cam0_200",
  4564. ENABLE_ACLK_CAM01, 5, CLK_IGNORE_UNUSED, 0),
  4565. GATE(CLK_ACLK_AXI2AHB_ISP0P, "aclk_axi2ahb_isp0p", "div_aclk_cam0_200",
  4566. ENABLE_ACLK_CAM01, 4, CLK_IGNORE_UNUSED, 0),
  4567. GATE(CLK_ACLK_XIU_IS0X, "aclk_xiu_is0x", "div_aclk_cam0_200",
  4568. ENABLE_ACLK_CAM01, 3, CLK_IGNORE_UNUSED, 0),
  4569. GATE(CLK_ACLK_XIU_ISP0EX, "aclk_xiu_isp0ex", "div_aclk_cam0_bus_400",
  4570. ENABLE_ACLK_CAM01, 2, CLK_IGNORE_UNUSED, 0),
  4571. GATE(CLK_ACLK_CAM0NP_276, "aclk_cam0np_276", "div_aclk_cam0_200",
  4572. ENABLE_ACLK_CAM01, 1, CLK_IGNORE_UNUSED, 0),
  4573. GATE(CLK_ACLK_CAM0ND_400, "aclk_cam0nd_400", "div_aclk_cam0_bus_400",
  4574. ENABLE_ACLK_CAM01, 0, CLK_IGNORE_UNUSED, 0),
  4575. /* ENABLE_ACLK_CAM02 */
  4576. GATE(CLK_ACLK_SMMU_3AA1, "aclk_smmu_3aa1", "div_aclk_cam0_bus_400",
  4577. ENABLE_ACLK_CAM02, 9, CLK_IGNORE_UNUSED, 0),
  4578. GATE(CLK_ACLK_SMMU_3AA0, "aclk_smmu_3aa0", "div_aclk_cam0_bus_400",
  4579. ENABLE_ACLK_CAM02, 8, CLK_IGNORE_UNUSED, 0),
  4580. GATE(CLK_ACLK_SMMU_LITE_D, "aclk_smmu_lite_d", "div_aclk_cam0_bus_400",
  4581. ENABLE_ACLK_CAM02, 7, CLK_IGNORE_UNUSED, 0),
  4582. GATE(CLK_ACLK_SMMU_LITE_B, "aclk_smmu_lite_b", "div_aclk_cam0_bus_400",
  4583. ENABLE_ACLK_CAM02, 6, CLK_IGNORE_UNUSED, 0),
  4584. GATE(CLK_ACLK_SMMU_LITE_A, "aclk_smmu_lite_a", "div_aclk_cam0_bus_400",
  4585. ENABLE_ACLK_CAM02, 5, CLK_IGNORE_UNUSED, 0),
  4586. GATE(CLK_ACLK_BTS_3AA1, "aclk_bts_3aa1", "div_aclk_cam0_bus_400",
  4587. ENABLE_ACLK_CAM02, 4, CLK_IGNORE_UNUSED, 0),
  4588. GATE(CLK_ACLK_BTS_3AA0, "aclk_bts_3aa0", "div_aclk_cam0_bus_400",
  4589. ENABLE_ACLK_CAM02, 3, CLK_IGNORE_UNUSED, 0),
  4590. GATE(CLK_ACLK_BTS_LITE_D, "aclk_bts_lite_d", "div_aclk_cam0_bus_400",
  4591. ENABLE_ACLK_CAM02, 2, CLK_IGNORE_UNUSED, 0),
  4592. GATE(CLK_ACLK_BTS_LITE_B, "aclk_bts_lite_b", "div_aclk_cam0_bus_400",
  4593. ENABLE_ACLK_CAM02, 1, CLK_IGNORE_UNUSED, 0),
  4594. GATE(CLK_ACLK_BTS_LITE_A, "aclk_bts_lite_a", "div_aclk_cam0_bus_400",
  4595. ENABLE_ACLK_CAM02, 0, CLK_IGNORE_UNUSED, 0),
  4596. /* ENABLE_PCLK_CAM0 */
  4597. GATE(CLK_PCLK_SMMU_3AA1, "pclk_smmu_3aa1", "div_aclk_cam0_200",
  4598. ENABLE_PCLK_CAM0, 25, CLK_IGNORE_UNUSED, 0),
  4599. GATE(CLK_PCLK_SMMU_3AA0, "pclk_smmu_3aa0", "div_aclk_cam0_200",
  4600. ENABLE_PCLK_CAM0, 24, CLK_IGNORE_UNUSED, 0),
  4601. GATE(CLK_PCLK_SMMU_LITE_D, "pclk_smmu_lite_d", "div_aclk_cam0_200",
  4602. ENABLE_PCLK_CAM0, 23, CLK_IGNORE_UNUSED, 0),
  4603. GATE(CLK_PCLK_SMMU_LITE_B, "pclk_smmu_lite_b", "div_aclk_cam0_200",
  4604. ENABLE_PCLK_CAM0, 22, CLK_IGNORE_UNUSED, 0),
  4605. GATE(CLK_PCLK_SMMU_LITE_A, "pclk_smmu_lite_a", "div_aclk_cam0_200",
  4606. ENABLE_PCLK_CAM0, 21, CLK_IGNORE_UNUSED, 0),
  4607. GATE(CLK_PCLK_BTS_3AA1, "pclk_bts_3aa1", "div_pclk_cam0_50",
  4608. ENABLE_PCLK_CAM0, 20, CLK_IGNORE_UNUSED, 0),
  4609. GATE(CLK_PCLK_BTS_3AA0, "pclk_bts_3aa0", "div_pclk_cam0_50",
  4610. ENABLE_PCLK_CAM0, 19, CLK_IGNORE_UNUSED, 0),
  4611. GATE(CLK_PCLK_BTS_LITE_D, "pclk_bts_lite_d", "div_pclk_cam0_50",
  4612. ENABLE_PCLK_CAM0, 18, CLK_IGNORE_UNUSED, 0),
  4613. GATE(CLK_PCLK_BTS_LITE_B, "pclk_bts_lite_b", "div_pclk_cam0_50",
  4614. ENABLE_PCLK_CAM0, 17, CLK_IGNORE_UNUSED, 0),
  4615. GATE(CLK_PCLK_BTS_LITE_A, "pclk_bts_lite_a", "div_pclk_cam0_50",
  4616. ENABLE_PCLK_CAM0, 16, CLK_IGNORE_UNUSED, 0),
  4617. GATE(CLK_PCLK_ASYNCAXI_CAM1, "pclk_asyncaxi_cam1", "div_pclk_cam0_50",
  4618. ENABLE_PCLK_CAM0, 15, CLK_IGNORE_UNUSED, 0),
  4619. GATE(CLK_PCLK_ASYNCAXI_3AA1, "pclk_asyncaxi_3aa1", "div_pclk_cam0_50",
  4620. ENABLE_PCLK_CAM0, 14, CLK_IGNORE_UNUSED, 0),
  4621. GATE(CLK_PCLK_ASYNCAXI_3AA0, "pclk_asyncaxi_3aa0", "div_pclk_cam0_50",
  4622. ENABLE_PCLK_CAM0, 13, CLK_IGNORE_UNUSED, 0),
  4623. GATE(CLK_PCLK_ASYNCAXI_LITE_D, "pclk_asyncaxi_lite_d",
  4624. "div_pclk_cam0_50", ENABLE_PCLK_CAM0,
  4625. 12, CLK_IGNORE_UNUSED, 0),
  4626. GATE(CLK_PCLK_ASYNCAXI_LITE_B, "pclk_asyncaxi_lite_b",
  4627. "div_pclk_cam0_50", ENABLE_PCLK_CAM0,
  4628. 11, CLK_IGNORE_UNUSED, 0),
  4629. GATE(CLK_PCLK_ASYNCAXI_LITE_A, "pclk_asyncaxi_lite_a",
  4630. "div_pclk_cam0_50", ENABLE_PCLK_CAM0,
  4631. 10, CLK_IGNORE_UNUSED, 0),
  4632. GATE(CLK_PCLK_PMU_CAM0, "pclk_pmu_cam0", "div_pclk_cam0_50",
  4633. ENABLE_PCLK_CAM0, 9, CLK_IGNORE_UNUSED, 0),
  4634. GATE(CLK_PCLK_SYSREG_CAM0, "pclk_sysreg_cam0", "div_pclk_cam0_50",
  4635. ENABLE_PCLK_CAM0, 8, CLK_IGNORE_UNUSED, 0),
  4636. GATE(CLK_PCLK_CMU_CAM0_LOCAL, "pclk_cmu_cam0_local",
  4637. "div_aclk_cam0_200", ENABLE_PCLK_CAM0,
  4638. 7, CLK_IGNORE_UNUSED, 0),
  4639. GATE(CLK_PCLK_CSIS1, "pclk_csis1", "div_aclk_cam0_200",
  4640. ENABLE_PCLK_CAM0, 6, CLK_IGNORE_UNUSED, 0),
  4641. GATE(CLK_PCLK_CSIS0, "pclk_csis0", "div_aclk_cam0_200",
  4642. ENABLE_PCLK_CAM0, 5, CLK_IGNORE_UNUSED, 0),
  4643. GATE(CLK_PCLK_3AA1, "pclk_3aa1", "div_pclk_3aa1",
  4644. ENABLE_PCLK_CAM0, 4, CLK_IGNORE_UNUSED, 0),
  4645. GATE(CLK_PCLK_3AA0, "pclk_3aa0", "div_pclk_3aa0",
  4646. ENABLE_PCLK_CAM0, 3, CLK_IGNORE_UNUSED, 0),
  4647. GATE(CLK_PCLK_LITE_D, "pclk_lite_d", "div_pclk_lite_d",
  4648. ENABLE_PCLK_CAM0, 2, CLK_IGNORE_UNUSED, 0),
  4649. GATE(CLK_PCLK_LITE_B, "pclk_lite_b", "div_pclk_lite_b",
  4650. ENABLE_PCLK_CAM0, 1, CLK_IGNORE_UNUSED, 0),
  4651. GATE(CLK_PCLK_LITE_A, "pclk_lite_a", "div_pclk_lite_a",
  4652. ENABLE_PCLK_CAM0, 0, CLK_IGNORE_UNUSED, 0),
  4653. /* ENABLE_SCLK_CAM0 */
  4654. GATE(CLK_PHYCLK_RXBYTECLKHS0_S4, "phyclk_rxbyteclkhs0_s4",
  4655. "mout_phyclk_rxbyteclkhs0_s4_user",
  4656. ENABLE_SCLK_CAM0, 8, 0, 0),
  4657. GATE(CLK_PHYCLK_RXBYTECLKHS0_S2A, "phyclk_rxbyteclkhs0_s2a",
  4658. "mout_phyclk_rxbyteclkhs0_s2a_user",
  4659. ENABLE_SCLK_CAM0, 7, 0, 0),
  4660. GATE(CLK_SCLK_LITE_FREECNT, "sclk_lite_freecnt",
  4661. "mout_sclk_lite_freecnt_c", ENABLE_SCLK_CAM0, 6, 0, 0),
  4662. GATE(CLK_SCLK_PIXELASYNCM_3AA1, "sclk_pixelasycm_3aa1",
  4663. "div_aclk_3aa1", ENABLE_SCLK_CAM0, 5, 0, 0),
  4664. GATE(CLK_SCLK_PIXELASYNCM_3AA0, "sclk_pixelasycm_3aa0",
  4665. "div_aclk_3aa0", ENABLE_SCLK_CAM0, 4, 0, 0),
  4666. GATE(CLK_SCLK_PIXELASYNCS_3AA0, "sclk_pixelasycs_3aa0",
  4667. "div_aclk_3aa0", ENABLE_SCLK_CAM0, 3, 0, 0),
  4668. GATE(CLK_SCLK_PIXELASYNCM_LITE_C, "sclk_pixelasyncm_lite_c",
  4669. "div_sclk_pixelasync_lite_c",
  4670. ENABLE_SCLK_CAM0, 2, 0, 0),
  4671. GATE(CLK_SCLK_PIXELASYNCM_LITE_C_INIT, "sclk_pixelasyncm_lite_c_init",
  4672. "div_sclk_pixelasync_lite_c_init",
  4673. ENABLE_SCLK_CAM0, 1, 0, 0),
  4674. GATE(CLK_SCLK_PIXELASYNCS_LITE_C_INIT, "sclk_pixelasyncs_lite_c_init",
  4675. "div_sclk_pixelasync_lite_c",
  4676. ENABLE_SCLK_CAM0, 0, 0, 0),
  4677. };
  4678. static struct samsung_cmu_info cam0_cmu_info __initdata = {
  4679. .mux_clks = cam0_mux_clks,
  4680. .nr_mux_clks = ARRAY_SIZE(cam0_mux_clks),
  4681. .div_clks = cam0_div_clks,
  4682. .nr_div_clks = ARRAY_SIZE(cam0_div_clks),
  4683. .gate_clks = cam0_gate_clks,
  4684. .nr_gate_clks = ARRAY_SIZE(cam0_gate_clks),
  4685. .fixed_clks = cam0_fixed_clks,
  4686. .nr_fixed_clks = ARRAY_SIZE(cam0_fixed_clks),
  4687. .nr_clk_ids = CAM0_NR_CLK,
  4688. .clk_regs = cam0_clk_regs,
  4689. .nr_clk_regs = ARRAY_SIZE(cam0_clk_regs),
  4690. };
  4691. static void __init exynos5433_cmu_cam0_init(struct device_node *np)
  4692. {
  4693. samsung_cmu_register_one(np, &cam0_cmu_info);
  4694. }
  4695. CLK_OF_DECLARE(exynos5433_cmu_cam0, "samsung,exynos5433-cmu-cam0",
  4696. exynos5433_cmu_cam0_init);
  4697. /*
  4698. * Register offset definitions for CMU_CAM1
  4699. */
  4700. #define MUX_SEL_CAM10 0x0200
  4701. #define MUX_SEL_CAM11 0x0204
  4702. #define MUX_SEL_CAM12 0x0208
  4703. #define MUX_ENABLE_CAM10 0x0300
  4704. #define MUX_ENABLE_CAM11 0x0304
  4705. #define MUX_ENABLE_CAM12 0x0308
  4706. #define MUX_STAT_CAM10 0x0400
  4707. #define MUX_STAT_CAM11 0x0404
  4708. #define MUX_STAT_CAM12 0x0408
  4709. #define MUX_IGNORE_CAM11 0x0504
  4710. #define DIV_CAM10 0x0600
  4711. #define DIV_CAM11 0x0604
  4712. #define DIV_STAT_CAM10 0x0700
  4713. #define DIV_STAT_CAM11 0x0704
  4714. #define ENABLE_ACLK_CAM10 0X0800
  4715. #define ENABLE_ACLK_CAM11 0X0804
  4716. #define ENABLE_ACLK_CAM12 0X0808
  4717. #define ENABLE_PCLK_CAM1 0X0900
  4718. #define ENABLE_SCLK_CAM1 0X0a00
  4719. #define ENABLE_IP_CAM10 0X0b00
  4720. #define ENABLE_IP_CAM11 0X0b04
  4721. #define ENABLE_IP_CAM12 0X0b08
  4722. static unsigned long cam1_clk_regs[] __initdata = {
  4723. MUX_SEL_CAM10,
  4724. MUX_SEL_CAM11,
  4725. MUX_SEL_CAM12,
  4726. MUX_ENABLE_CAM10,
  4727. MUX_ENABLE_CAM11,
  4728. MUX_ENABLE_CAM12,
  4729. MUX_STAT_CAM10,
  4730. MUX_STAT_CAM11,
  4731. MUX_STAT_CAM12,
  4732. MUX_IGNORE_CAM11,
  4733. DIV_CAM10,
  4734. DIV_CAM11,
  4735. DIV_STAT_CAM10,
  4736. DIV_STAT_CAM11,
  4737. ENABLE_ACLK_CAM10,
  4738. ENABLE_ACLK_CAM11,
  4739. ENABLE_ACLK_CAM12,
  4740. ENABLE_PCLK_CAM1,
  4741. ENABLE_SCLK_CAM1,
  4742. ENABLE_IP_CAM10,
  4743. ENABLE_IP_CAM11,
  4744. ENABLE_IP_CAM12,
  4745. };
  4746. PNAME(mout_sclk_isp_uart_user_p) = { "oscclk", "sclk_isp_uart_cam1", };
  4747. PNAME(mout_sclk_isp_spi1_user_p) = { "oscclk", "sclk_isp_spi1_cam1", };
  4748. PNAME(mout_sclk_isp_spi0_user_p) = { "oscclk", "sclk_isp_spi0_cam1", };
  4749. PNAME(mout_aclk_cam1_333_user_p) = { "oscclk", "aclk_cam1_333", };
  4750. PNAME(mout_aclk_cam1_400_user_p) = { "oscclk", "aclk_cam1_400", };
  4751. PNAME(mout_aclk_cam1_552_user_p) = { "oscclk", "aclk_cam1_552", };
  4752. PNAME(mout_phyclk_rxbyteclkhs0_s2b_user_p) = { "oscclk",
  4753. "phyclk_rxbyteclkhs0_s2b_phy", };
  4754. PNAME(mout_aclk_csis2_b_p) = { "mout_aclk_csis2_a",
  4755. "mout_aclk_cam1_333_user", };
  4756. PNAME(mout_aclk_csis2_a_p) = { "mout_aclk_cam1_552_user",
  4757. "mout_aclk_cam1_400_user", };
  4758. PNAME(mout_aclk_fd_b_p) = { "mout_aclk_fd_a",
  4759. "mout_aclk_cam1_333_user", };
  4760. PNAME(mout_aclk_fd_a_p) = { "mout_aclk_cam1_552_user",
  4761. "mout_aclk_cam1_400_user", };
  4762. PNAME(mout_aclk_lite_c_b_p) = { "mout_aclk_lite_c_a",
  4763. "mout_aclk_cam1_333_user", };
  4764. PNAME(mout_aclk_lite_c_a_p) = { "mout_aclk_cam1_552_user",
  4765. "mout_aclk_cam1_400_user", };
  4766. static struct samsung_fixed_rate_clock cam1_fixed_clks[] __initdata = {
  4767. FRATE(CLK_PHYCLK_RXBYTEECLKHS0_S2B, "phyclk_rxbyteclkhs0_s2b_phy", NULL,
  4768. CLK_IS_ROOT, 100000000),
  4769. };
  4770. static struct samsung_mux_clock cam1_mux_clks[] __initdata = {
  4771. /* MUX_SEL_CAM10 */
  4772. MUX(CLK_MOUT_SCLK_ISP_UART_USER, "mout_sclk_isp_uart_user",
  4773. mout_sclk_isp_uart_user_p, MUX_SEL_CAM10, 20, 1),
  4774. MUX(CLK_MOUT_SCLK_ISP_SPI1_USER, "mout_sclk_isp_spi1_user",
  4775. mout_sclk_isp_spi1_user_p, MUX_SEL_CAM10, 16, 1),
  4776. MUX(CLK_MOUT_SCLK_ISP_SPI0_USER, "mout_sclk_isp_spi0_user",
  4777. mout_sclk_isp_spi0_user_p, MUX_SEL_CAM10, 12, 1),
  4778. MUX(CLK_MOUT_ACLK_CAM1_333_USER, "mout_aclk_cam1_333_user",
  4779. mout_aclk_cam1_333_user_p, MUX_SEL_CAM10, 8, 1),
  4780. MUX(CLK_MOUT_ACLK_CAM1_400_USER, "mout_aclk_cam1_400_user",
  4781. mout_aclk_cam1_400_user_p, MUX_SEL_CAM01, 4, 1),
  4782. MUX(CLK_MOUT_ACLK_CAM1_552_USER, "mout_aclk_cam1_552_user",
  4783. mout_aclk_cam1_552_user_p, MUX_SEL_CAM01, 0, 1),
  4784. /* MUX_SEL_CAM11 */
  4785. MUX(CLK_MOUT_PHYCLK_RXBYTECLKHS0_S2B_USER,
  4786. "mout_phyclk_rxbyteclkhs0_s2b_user",
  4787. mout_phyclk_rxbyteclkhs0_s2b_user_p,
  4788. MUX_SEL_CAM11, 0, 1),
  4789. /* MUX_SEL_CAM12 */
  4790. MUX(CLK_MOUT_ACLK_CSIS2_B, "mout_aclk_csis2_b", mout_aclk_csis2_b_p,
  4791. MUX_SEL_CAM12, 20, 1),
  4792. MUX(CLK_MOUT_ACLK_CSIS2_A, "mout_aclk_csis2_a", mout_aclk_csis2_a_p,
  4793. MUX_SEL_CAM12, 16, 1),
  4794. MUX(CLK_MOUT_ACLK_FD_B, "mout_aclk_fd_b", mout_aclk_fd_b_p,
  4795. MUX_SEL_CAM12, 12, 1),
  4796. MUX(CLK_MOUT_ACLK_FD_A, "mout_aclk_fd_a", mout_aclk_fd_a_p,
  4797. MUX_SEL_CAM12, 8, 1),
  4798. MUX(CLK_MOUT_ACLK_LITE_C_B, "mout_aclk_lite_c_b", mout_aclk_lite_c_b_p,
  4799. MUX_SEL_CAM12, 4, 1),
  4800. MUX(CLK_MOUT_ACLK_LITE_C_A, "mout_aclk_lite_c_a", mout_aclk_lite_c_a_p,
  4801. MUX_SEL_CAM12, 0, 1),
  4802. };
  4803. static struct samsung_div_clock cam1_div_clks[] __initdata = {
  4804. /* DIV_CAM10 */
  4805. DIV(CLK_DIV_SCLK_ISP_WPWM, "div_sclk_isp_wpwm",
  4806. "div_pclk_cam1_83", DIV_CAM10, 16, 2),
  4807. DIV(CLK_DIV_PCLK_CAM1_83, "div_pclk_cam1_83",
  4808. "mout_aclk_cam1_333_user", DIV_CAM10, 12, 2),
  4809. DIV(CLK_DIV_PCLK_CAM1_166, "div_pclk_cam1_166",
  4810. "mout_aclk_cam1_333_user", DIV_CAM10, 8, 2),
  4811. DIV(CLK_DIV_PCLK_DBG_CAM1, "div_pclk_dbg_cam1",
  4812. "mout_aclk_cam1_552_user", DIV_CAM10, 4, 3),
  4813. DIV(CLK_DIV_ATCLK_CAM1, "div_atclk_cam1", "mout_aclk_cam1_552_user",
  4814. DIV_CAM10, 0, 3),
  4815. /* DIV_CAM11 */
  4816. DIV(CLK_DIV_ACLK_CSIS2, "div_aclk_csis2", "mout_aclk_csis2_b",
  4817. DIV_CAM11, 16, 3),
  4818. DIV(CLK_DIV_PCLK_FD, "div_pclk_fd", "div_aclk_fd", DIV_CAM11, 12, 2),
  4819. DIV(CLK_DIV_ACLK_FD, "div_aclk_fd", "mout_aclk_fd_b", DIV_CAM11, 8, 3),
  4820. DIV(CLK_DIV_PCLK_LITE_C, "div_pclk_lite_c", "div_aclk_lite_c",
  4821. DIV_CAM11, 4, 2),
  4822. DIV(CLK_DIV_ACLK_LITE_C, "div_aclk_lite_c", "mout_aclk_lite_c_b",
  4823. DIV_CAM11, 0, 3),
  4824. };
  4825. static struct samsung_gate_clock cam1_gate_clks[] __initdata = {
  4826. /* ENABLE_ACLK_CAM10 */
  4827. GATE(CLK_ACLK_ISP_GIC, "aclk_isp_gic", "mout_aclk_cam1_333_user",
  4828. ENABLE_ACLK_CAM10, 4, 0, 0),
  4829. GATE(CLK_ACLK_FD, "aclk_fd", "div_aclk_fd",
  4830. ENABLE_ACLK_CAM10, 3, 0, 0),
  4831. GATE(CLK_ACLK_LITE_C, "aclk_lite_c", "div_aclk_lite_c",
  4832. ENABLE_ACLK_CAM10, 1, 0, 0),
  4833. GATE(CLK_ACLK_CSIS2, "aclk_csis2", "div_aclk_csis2",
  4834. ENABLE_ACLK_CAM10, 0, 0, 0),
  4835. /* ENABLE_ACLK_CAM11 */
  4836. GATE(CLK_ACLK_ASYNCAPBM_FD, "aclk_asyncapbm_fd", "div_pclk_fd",
  4837. ENABLE_ACLK_CAM11, 29, CLK_IGNORE_UNUSED, 0),
  4838. GATE(CLK_ACLK_ASYNCAPBS_FD, "aclk_asyncapbs_fd", "div_pclk_cam1_166",
  4839. ENABLE_ACLK_CAM11, 28, CLK_IGNORE_UNUSED, 0),
  4840. GATE(CLK_ACLK_ASYNCAPBM_LITE_C, "aclk_asyncapbm_lite_c",
  4841. "div_pclk_lite_c", ENABLE_ACLK_CAM11,
  4842. 27, CLK_IGNORE_UNUSED, 0),
  4843. GATE(CLK_ACLK_ASYNCAPBS_LITE_C, "aclk_asyncapbs_lite_c",
  4844. "div_pclk_cam1_166", ENABLE_ACLK_CAM11,
  4845. 26, CLK_IGNORE_UNUSED, 0),
  4846. GATE(CLK_ACLK_ASYNCAHBS_SFRISP2H2, "aclk_asyncahbs_sfrisp2h2",
  4847. "div_pclk_cam1_83", ENABLE_ACLK_CAM11,
  4848. 25, CLK_IGNORE_UNUSED, 0),
  4849. GATE(CLK_ACLK_ASYNCAHBS_SFRISP2H1, "aclk_asyncahbs_sfrisp2h1",
  4850. "div_pclk_cam1_83", ENABLE_ACLK_CAM11,
  4851. 24, CLK_IGNORE_UNUSED, 0),
  4852. GATE(CLK_ACLK_ASYNCAXIM_CA5, "aclk_asyncaxim_ca5",
  4853. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM11,
  4854. 23, CLK_IGNORE_UNUSED, 0),
  4855. GATE(CLK_ACLK_ASYNCAXIS_CA5, "aclk_asyncaxis_ca5",
  4856. "mout_aclk_cam1_552_user", ENABLE_ACLK_CAM11,
  4857. 22, CLK_IGNORE_UNUSED, 0),
  4858. GATE(CLK_ACLK_ASYNCAXIS_ISPX2, "aclk_asyncaxis_ispx2",
  4859. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM11,
  4860. 21, CLK_IGNORE_UNUSED, 0),
  4861. GATE(CLK_ACLK_ASYNCAXIS_ISPX1, "aclk_asyncaxis_ispx1",
  4862. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM11,
  4863. 20, CLK_IGNORE_UNUSED, 0),
  4864. GATE(CLK_ACLK_ASYNCAXIS_ISPX0, "aclk_asyncaxis_ispx0",
  4865. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM11,
  4866. 19, CLK_IGNORE_UNUSED, 0),
  4867. GATE(CLK_ACLK_ASYNCAXIM_ISPEX, "aclk_asyncaxim_ispex",
  4868. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM11,
  4869. 18, CLK_IGNORE_UNUSED, 0),
  4870. GATE(CLK_ACLK_ASYNCAXIM_ISP3P, "aclk_asyncaxim_isp3p",
  4871. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM11,
  4872. 17, CLK_IGNORE_UNUSED, 0),
  4873. GATE(CLK_ACLK_ASYNCAXIS_ISP3P, "aclk_asyncaxis_isp3p",
  4874. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM11,
  4875. 16, CLK_IGNORE_UNUSED, 0),
  4876. GATE(CLK_ACLK_ASYNCAXIM_FD, "aclk_asyncaxim_fd",
  4877. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM11,
  4878. 15, CLK_IGNORE_UNUSED, 0),
  4879. GATE(CLK_ACLK_ASYNCAXIS_FD, "aclk_asyncaxis_fd", "div_aclk_fd",
  4880. ENABLE_ACLK_CAM11, 14, CLK_IGNORE_UNUSED, 0),
  4881. GATE(CLK_ACLK_ASYNCAXIM_LITE_C, "aclk_asyncaxim_lite_c",
  4882. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM11,
  4883. 13, CLK_IGNORE_UNUSED, 0),
  4884. GATE(CLK_ACLK_ASYNCAXIS_LITE_C, "aclk_asyncaxis_lite_c",
  4885. "div_aclk_lite_c", ENABLE_ACLK_CAM11,
  4886. 12, CLK_IGNORE_UNUSED, 0),
  4887. GATE(CLK_ACLK_AHB2APB_ISP5P, "aclk_ahb2apb_isp5p", "div_pclk_cam1_83",
  4888. ENABLE_ACLK_CAM11, 11, CLK_IGNORE_UNUSED, 0),
  4889. GATE(CLK_ACLK_AHB2APB_ISP3P, "aclk_ahb2apb_isp3p", "div_pclk_cam1_83",
  4890. ENABLE_ACLK_CAM11, 10, CLK_IGNORE_UNUSED, 0),
  4891. GATE(CLK_ACLK_AXI2APB_ISP3P, "aclk_axi2apb_isp3p",
  4892. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM11,
  4893. 9, CLK_IGNORE_UNUSED, 0),
  4894. GATE(CLK_ACLK_AHB_SFRISP2H, "aclk_ahb_sfrisp2h", "div_pclk_cam1_83",
  4895. ENABLE_ACLK_CAM11, 8, CLK_IGNORE_UNUSED, 0),
  4896. GATE(CLK_ACLK_AXI_ISP_HX_R, "aclk_axi_isp_hx_r", "div_pclk_cam1_166",
  4897. ENABLE_ACLK_CAM11, 7, CLK_IGNORE_UNUSED, 0),
  4898. GATE(CLK_ACLK_AXI_ISP_CX_R, "aclk_axi_isp_cx_r", "div_pclk_cam1_166",
  4899. ENABLE_ACLK_CAM11, 6, CLK_IGNORE_UNUSED, 0),
  4900. GATE(CLK_ACLK_AXI_ISP_HX, "aclk_axi_isp_hx", "mout_aclk_cam1_333_user",
  4901. ENABLE_ACLK_CAM11, 5, CLK_IGNORE_UNUSED, 0),
  4902. GATE(CLK_ACLK_AXI_ISP_CX, "aclk_axi_isp_cx", "mout_aclk_cam1_333_user",
  4903. ENABLE_ACLK_CAM11, 4, CLK_IGNORE_UNUSED, 0),
  4904. GATE(CLK_ACLK_XIU_ISPX, "aclk_xiu_ispx", "mout_aclk_cam1_333_user",
  4905. ENABLE_ACLK_CAM11, 3, CLK_IGNORE_UNUSED, 0),
  4906. GATE(CLK_ACLK_XIU_ISPEX, "aclk_xiu_ispex", "mout_aclk_cam1_400_user",
  4907. ENABLE_ACLK_CAM11, 2, CLK_IGNORE_UNUSED, 0),
  4908. GATE(CLK_ACLK_CAM1NP_333, "aclk_cam1np_333", "mout_aclk_cam1_333_user",
  4909. ENABLE_ACLK_CAM11, 1, CLK_IGNORE_UNUSED, 0),
  4910. GATE(CLK_ACLK_CAM1ND_400, "aclk_cam1nd_400", "mout_aclk_cam1_400_user",
  4911. ENABLE_ACLK_CAM11, 0, CLK_IGNORE_UNUSED, 0),
  4912. /* ENABLE_ACLK_CAM12 */
  4913. GATE(CLK_ACLK_SMMU_ISPCPU, "aclk_smmu_ispcpu",
  4914. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM12,
  4915. 10, CLK_IGNORE_UNUSED, 0),
  4916. GATE(CLK_ACLK_SMMU_FD, "aclk_smmu_fd", "mout_aclk_cam1_400_user",
  4917. ENABLE_ACLK_CAM12, 9, CLK_IGNORE_UNUSED, 0),
  4918. GATE(CLK_ACLK_SMMU_LITE_C, "aclk_smmu_lite_c",
  4919. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM12,
  4920. 8, CLK_IGNORE_UNUSED, 0),
  4921. GATE(CLK_ACLK_BTS_ISP3P, "aclk_bts_isp3p", "mout_aclk_cam1_400_user",
  4922. ENABLE_ACLK_CAM12, 7, CLK_IGNORE_UNUSED, 0),
  4923. GATE(CLK_ACLK_BTS_FD, "aclk_bts_fd", "mout_aclk_cam1_400_user",
  4924. ENABLE_ACLK_CAM12, 6, CLK_IGNORE_UNUSED, 0),
  4925. GATE(CLK_ACLK_BTS_LITE_C, "aclk_bts_lite_c", "mout_aclk_cam1_400_user",
  4926. ENABLE_ACLK_CAM12, 5, CLK_IGNORE_UNUSED, 0),
  4927. GATE(CLK_ACLK_AHBDN_SFRISP2H, "aclk_ahbdn_sfrisp2h",
  4928. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM12,
  4929. 4, CLK_IGNORE_UNUSED, 0),
  4930. GATE(CLK_ACLK_AHBDN_ISP5P, "aclk_aclk-shbdn_isp5p",
  4931. "mout_aclk_cam1_333_user", ENABLE_ACLK_CAM12,
  4932. 3, CLK_IGNORE_UNUSED, 0),
  4933. GATE(CLK_ACLK_AXIUS_ISP3P, "aclk_axius_isp3p",
  4934. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM12,
  4935. 2, CLK_IGNORE_UNUSED, 0),
  4936. GATE(CLK_ACLK_AXIUS_FD, "aclk_axius_fd", "mout_aclk_cam1_400_user",
  4937. ENABLE_ACLK_CAM12, 1, CLK_IGNORE_UNUSED, 0),
  4938. GATE(CLK_ACLK_AXIUS_LITE_C, "aclk_axius_lite_c",
  4939. "mout_aclk_cam1_400_user", ENABLE_ACLK_CAM12,
  4940. 0, CLK_IGNORE_UNUSED, 0),
  4941. /* ENABLE_PCLK_CAM1 */
  4942. GATE(CLK_PCLK_SMMU_ISPCPU, "pclk_smmu_ispcpu", "div_pclk_cam1_166",
  4943. ENABLE_PCLK_CAM1, 27, CLK_IGNORE_UNUSED, 0),
  4944. GATE(CLK_PCLK_SMMU_FD, "pclk_smmu_fd", "div_pclk_cam1_166",
  4945. ENABLE_PCLK_CAM1, 26, CLK_IGNORE_UNUSED, 0),
  4946. GATE(CLK_PCLK_SMMU_LITE_C, "pclk_smmu_lite_c", "div_pclk_cam1_166",
  4947. ENABLE_PCLK_CAM1, 25, CLK_IGNORE_UNUSED, 0),
  4948. GATE(CLK_PCLK_BTS_ISP3P, "pclk_bts_isp3p", "div_pclk_cam1_83",
  4949. ENABLE_PCLK_CAM1, 24, CLK_IGNORE_UNUSED, 0),
  4950. GATE(CLK_PCLK_BTS_FD, "pclk_bts_fd", "div_pclk_cam1_83",
  4951. ENABLE_PCLK_CAM1, 23, CLK_IGNORE_UNUSED, 0),
  4952. GATE(CLK_PCLK_BTS_LITE_C, "pclk_bts_lite_c", "div_pclk_cam1_83",
  4953. ENABLE_PCLK_CAM1, 22, CLK_IGNORE_UNUSED, 0),
  4954. GATE(CLK_PCLK_ASYNCAXIM_CA5, "pclk_asyncaxim_ca5", "div_pclk_cam1_166",
  4955. ENABLE_PCLK_CAM1, 21, CLK_IGNORE_UNUSED, 0),
  4956. GATE(CLK_PCLK_ASYNCAXIM_ISPEX, "pclk_asyncaxim_ispex",
  4957. "div_pclk_cam1_83", ENABLE_PCLK_CAM1,
  4958. 20, CLK_IGNORE_UNUSED, 0),
  4959. GATE(CLK_PCLK_ASYNCAXIM_ISP3P, "pclk_asyncaxim_isp3p",
  4960. "div_pclk_cam1_83", ENABLE_PCLK_CAM1,
  4961. 19, CLK_IGNORE_UNUSED, 0),
  4962. GATE(CLK_PCLK_ASYNCAXIM_FD, "pclk_asyncaxim_fd", "div_pclk_cam1_83",
  4963. ENABLE_PCLK_CAM1, 18, CLK_IGNORE_UNUSED, 0),
  4964. GATE(CLK_PCLK_ASYNCAXIM_LITE_C, "pclk_asyncaxim_lite_c",
  4965. "div_pclk_cam1_83", ENABLE_PCLK_CAM1,
  4966. 17, CLK_IGNORE_UNUSED, 0),
  4967. GATE(CLK_PCLK_PMU_CAM1, "pclk_pmu_cam1", "div_pclk_cam1_83",
  4968. ENABLE_PCLK_CAM1, 16, CLK_IGNORE_UNUSED, 0),
  4969. GATE(CLK_PCLK_SYSREG_CAM1, "pclk_sysreg_cam1", "div_pclk_cam1_83",
  4970. ENABLE_PCLK_CAM1, 15, CLK_IGNORE_UNUSED, 0),
  4971. GATE(CLK_PCLK_CMU_CAM1_LOCAL, "pclk_cmu_cam1_local",
  4972. "div_pclk_cam1_166", ENABLE_PCLK_CAM1,
  4973. 14, CLK_IGNORE_UNUSED, 0),
  4974. GATE(CLK_PCLK_ISP_MCTADC, "pclk_isp_mctadc", "div_pclk_cam1_83",
  4975. ENABLE_PCLK_CAM1, 13, CLK_IGNORE_UNUSED, 0),
  4976. GATE(CLK_PCLK_ISP_WDT, "pclk_isp_wdt", "div_pclk_cam1_83",
  4977. ENABLE_PCLK_CAM1, 12, CLK_IGNORE_UNUSED, 0),
  4978. GATE(CLK_PCLK_ISP_PWM, "pclk_isp_pwm", "div_pclk_cam1_83",
  4979. ENABLE_PCLK_CAM1, 11, CLK_IGNORE_UNUSED, 0),
  4980. GATE(CLK_PCLK_ISP_UART, "pclk_isp_uart", "div_pclk_cam1_83",
  4981. ENABLE_PCLK_CAM1, 10, CLK_IGNORE_UNUSED, 0),
  4982. GATE(CLK_PCLK_ISP_MCUCTL, "pclk_isp_mcuctl", "div_pclk_cam1_83",
  4983. ENABLE_PCLK_CAM1, 9, CLK_IGNORE_UNUSED, 0),
  4984. GATE(CLK_PCLK_ISP_SPI1, "pclk_isp_spi1", "div_pclk_cam1_83",
  4985. ENABLE_PCLK_CAM1, 8, CLK_IGNORE_UNUSED, 0),
  4986. GATE(CLK_PCLK_ISP_SPI0, "pclk_isp_spi0", "div_pclk_cam1_83",
  4987. ENABLE_PCLK_CAM1, 7, CLK_IGNORE_UNUSED, 0),
  4988. GATE(CLK_PCLK_ISP_I2C2, "pclk_isp_i2c2", "div_pclk_cam1_83",
  4989. ENABLE_PCLK_CAM1, 6, CLK_IGNORE_UNUSED, 0),
  4990. GATE(CLK_PCLK_ISP_I2C1, "pclk_isp_i2c1", "div_pclk_cam1_83",
  4991. ENABLE_PCLK_CAM1, 5, CLK_IGNORE_UNUSED, 0),
  4992. GATE(CLK_PCLK_ISP_I2C0, "pclk_isp_i2c0", "div_pclk_cam1_83",
  4993. ENABLE_PCLK_CAM1, 4, CLK_IGNORE_UNUSED, 0),
  4994. GATE(CLK_PCLK_ISP_MPWM, "pclk_isp_wpwm", "div_pclk_cam1_83",
  4995. ENABLE_PCLK_CAM1, 3, CLK_IGNORE_UNUSED, 0),
  4996. GATE(CLK_PCLK_FD, "pclk_fd", "div_pclk_fd",
  4997. ENABLE_PCLK_CAM1, 3, CLK_IGNORE_UNUSED, 0),
  4998. GATE(CLK_PCLK_LITE_C, "pclk_lite_c", "div_pclk_lite_c",
  4999. ENABLE_PCLK_CAM1, 1, CLK_IGNORE_UNUSED, 0),
  5000. GATE(CLK_PCLK_CSIS2, "pclk_csis2", "div_pclk_cam1_166",
  5001. ENABLE_PCLK_CAM1, 0, CLK_IGNORE_UNUSED, 0),
  5002. /* ENABLE_SCLK_CAM1 */
  5003. GATE(CLK_SCLK_ISP_I2C2, "sclk_isp_i2c2", "oscclk", ENABLE_SCLK_CAM1,
  5004. 15, 0, 0),
  5005. GATE(CLK_SCLK_ISP_I2C1, "sclk_isp_i2c1", "oscclk", ENABLE_SCLK_CAM1,
  5006. 14, 0, 0),
  5007. GATE(CLK_SCLK_ISP_I2C0, "sclk_isp_i2c0", "oscclk", ENABLE_SCLK_CAM1,
  5008. 13, 0, 0),
  5009. GATE(CLK_SCLK_ISP_PWM, "sclk_isp_pwm", "oscclk", ENABLE_SCLK_CAM1,
  5010. 12, 0, 0),
  5011. GATE(CLK_PHYCLK_RXBYTECLKHS0_S2B, "phyclk_rxbyteclkhs0_s2b",
  5012. "mout_phyclk_rxbyteclkhs0_s2b_user",
  5013. ENABLE_SCLK_CAM1, 11, 0, 0),
  5014. GATE(CLK_SCLK_LITE_C_FREECNT, "sclk_lite_c_freecnt", "div_pclk_lite_c",
  5015. ENABLE_SCLK_CAM1, 10, 0, 0),
  5016. GATE(CLK_SCLK_PIXELASYNCM_FD, "sclk_pixelasyncm_fd", "div_aclk_fd",
  5017. ENABLE_SCLK_CAM1, 9, 0, 0),
  5018. GATE(CLK_SCLK_ISP_MCTADC, "sclk_isp_mctadc", "sclk_isp_mctadc_cam1",
  5019. ENABLE_SCLK_CAM1, 7, 0, 0),
  5020. GATE(CLK_SCLK_ISP_UART, "sclk_isp_uart", "mout_sclk_isp_uart_user",
  5021. ENABLE_SCLK_CAM1, 6, 0, 0),
  5022. GATE(CLK_SCLK_ISP_SPI1, "sclk_isp_spi1", "mout_sclk_isp_spi1_user",
  5023. ENABLE_SCLK_CAM1, 5, 0, 0),
  5024. GATE(CLK_SCLK_ISP_SPI0, "sclk_isp_spi0", "mout_sclk_isp_spi0_user",
  5025. ENABLE_SCLK_CAM1, 4, 0, 0),
  5026. GATE(CLK_SCLK_ISP_MPWM, "sclk_isp_wpwm", "div_sclk_isp_wpwm",
  5027. ENABLE_SCLK_CAM1, 3, 0, 0),
  5028. GATE(CLK_PCLK_DBG_ISP, "sclk_dbg_isp", "div_pclk_dbg_cam1",
  5029. ENABLE_SCLK_CAM1, 2, 0, 0),
  5030. GATE(CLK_ATCLK_ISP, "atclk_isp", "div_atclk_cam1",
  5031. ENABLE_SCLK_CAM1, 1, 0, 0),
  5032. GATE(CLK_SCLK_ISP_CA5, "sclk_isp_ca5", "mout_aclk_cam1_552_user",
  5033. ENABLE_SCLK_CAM1, 0, 0, 0),
  5034. };
  5035. static struct samsung_cmu_info cam1_cmu_info __initdata = {
  5036. .mux_clks = cam1_mux_clks,
  5037. .nr_mux_clks = ARRAY_SIZE(cam1_mux_clks),
  5038. .div_clks = cam1_div_clks,
  5039. .nr_div_clks = ARRAY_SIZE(cam1_div_clks),
  5040. .gate_clks = cam1_gate_clks,
  5041. .nr_gate_clks = ARRAY_SIZE(cam1_gate_clks),
  5042. .fixed_clks = cam1_fixed_clks,
  5043. .nr_fixed_clks = ARRAY_SIZE(cam1_fixed_clks),
  5044. .nr_clk_ids = CAM1_NR_CLK,
  5045. .clk_regs = cam1_clk_regs,
  5046. .nr_clk_regs = ARRAY_SIZE(cam1_clk_regs),
  5047. };
  5048. static void __init exynos5433_cmu_cam1_init(struct device_node *np)
  5049. {
  5050. samsung_cmu_register_one(np, &cam1_cmu_info);
  5051. }
  5052. CLK_OF_DECLARE(exynos5433_cmu_cam1, "samsung,exynos5433-cmu-cam1",
  5053. exynos5433_cmu_cam1_init);