clock34xx.h 83 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011
  1. /*
  2. * OMAP3 clock framework
  3. *
  4. * Virtual clocks are introduced as a convenient tools.
  5. * They are sources for other clocks and not supposed
  6. * to be requested from drivers directly.
  7. *
  8. * Copyright (C) 2007-2008 Texas Instruments, Inc.
  9. * Copyright (C) 2007-2008 Nokia Corporation
  10. *
  11. * Written by Paul Walmsley
  12. */
  13. #ifndef __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H
  14. #define __ARCH_ARM_MACH_OMAP2_CLOCK34XX_H
  15. #include <asm/arch/control.h>
  16. #include "clock.h"
  17. #include "cm.h"
  18. #include "cm-regbits-34xx.h"
  19. #include "prm.h"
  20. #include "prm-regbits-34xx.h"
  21. static void omap3_dpll_recalc(struct clk *clk);
  22. static void omap3_clkoutx2_recalc(struct clk *clk);
  23. /*
  24. * DPLL1 supplies clock to the MPU.
  25. * DPLL2 supplies clock to the IVA2.
  26. * DPLL3 supplies CORE domain clocks.
  27. * DPLL4 supplies peripheral clocks.
  28. * DPLL5 supplies other peripheral clocks (USBHOST, USIM).
  29. */
  30. /* PRM CLOCKS */
  31. /* According to timer32k.c, this is a 32768Hz clock, not a 32000Hz clock. */
  32. static struct clk omap_32k_fck = {
  33. .name = "omap_32k_fck",
  34. .rate = 32768,
  35. .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
  36. ALWAYS_ENABLED,
  37. .recalc = &propagate_rate,
  38. };
  39. static struct clk secure_32k_fck = {
  40. .name = "secure_32k_fck",
  41. .rate = 32768,
  42. .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
  43. ALWAYS_ENABLED,
  44. .recalc = &propagate_rate,
  45. };
  46. /* Virtual source clocks for osc_sys_ck */
  47. static struct clk virt_12m_ck = {
  48. .name = "virt_12m_ck",
  49. .rate = 12000000,
  50. .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
  51. ALWAYS_ENABLED,
  52. .recalc = &propagate_rate,
  53. };
  54. static struct clk virt_13m_ck = {
  55. .name = "virt_13m_ck",
  56. .rate = 13000000,
  57. .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
  58. ALWAYS_ENABLED,
  59. .recalc = &propagate_rate,
  60. };
  61. static struct clk virt_16_8m_ck = {
  62. .name = "virt_16_8m_ck",
  63. .rate = 16800000,
  64. .flags = CLOCK_IN_OMAP3430ES2 | RATE_FIXED | RATE_PROPAGATES |
  65. ALWAYS_ENABLED,
  66. .recalc = &propagate_rate,
  67. };
  68. static struct clk virt_19_2m_ck = {
  69. .name = "virt_19_2m_ck",
  70. .rate = 19200000,
  71. .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
  72. ALWAYS_ENABLED,
  73. .recalc = &propagate_rate,
  74. };
  75. static struct clk virt_26m_ck = {
  76. .name = "virt_26m_ck",
  77. .rate = 26000000,
  78. .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
  79. ALWAYS_ENABLED,
  80. .recalc = &propagate_rate,
  81. };
  82. static struct clk virt_38_4m_ck = {
  83. .name = "virt_38_4m_ck",
  84. .rate = 38400000,
  85. .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
  86. ALWAYS_ENABLED,
  87. .recalc = &propagate_rate,
  88. };
  89. static const struct clksel_rate osc_sys_12m_rates[] = {
  90. { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
  91. { .div = 0 }
  92. };
  93. static const struct clksel_rate osc_sys_13m_rates[] = {
  94. { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
  95. { .div = 0 }
  96. };
  97. static const struct clksel_rate osc_sys_16_8m_rates[] = {
  98. { .div = 1, .val = 5, .flags = RATE_IN_3430ES2 | DEFAULT_RATE },
  99. { .div = 0 }
  100. };
  101. static const struct clksel_rate osc_sys_19_2m_rates[] = {
  102. { .div = 1, .val = 2, .flags = RATE_IN_343X | DEFAULT_RATE },
  103. { .div = 0 }
  104. };
  105. static const struct clksel_rate osc_sys_26m_rates[] = {
  106. { .div = 1, .val = 3, .flags = RATE_IN_343X | DEFAULT_RATE },
  107. { .div = 0 }
  108. };
  109. static const struct clksel_rate osc_sys_38_4m_rates[] = {
  110. { .div = 1, .val = 4, .flags = RATE_IN_343X | DEFAULT_RATE },
  111. { .div = 0 }
  112. };
  113. static const struct clksel osc_sys_clksel[] = {
  114. { .parent = &virt_12m_ck, .rates = osc_sys_12m_rates },
  115. { .parent = &virt_13m_ck, .rates = osc_sys_13m_rates },
  116. { .parent = &virt_16_8m_ck, .rates = osc_sys_16_8m_rates },
  117. { .parent = &virt_19_2m_ck, .rates = osc_sys_19_2m_rates },
  118. { .parent = &virt_26m_ck, .rates = osc_sys_26m_rates },
  119. { .parent = &virt_38_4m_ck, .rates = osc_sys_38_4m_rates },
  120. { .parent = NULL },
  121. };
  122. /* Oscillator clock */
  123. /* 12, 13, 16.8, 19.2, 26, or 38.4 MHz */
  124. static struct clk osc_sys_ck = {
  125. .name = "osc_sys_ck",
  126. .init = &omap2_init_clksel_parent,
  127. .clksel_reg = OMAP3430_PRM_CLKSEL,
  128. .clksel_mask = OMAP3430_SYS_CLKIN_SEL_MASK,
  129. .clksel = osc_sys_clksel,
  130. /* REVISIT: deal with autoextclkmode? */
  131. .flags = CLOCK_IN_OMAP343X | RATE_FIXED | RATE_PROPAGATES |
  132. ALWAYS_ENABLED,
  133. .recalc = &omap2_clksel_recalc,
  134. };
  135. static const struct clksel_rate div2_rates[] = {
  136. { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
  137. { .div = 2, .val = 2, .flags = RATE_IN_343X },
  138. { .div = 0 }
  139. };
  140. static const struct clksel sys_clksel[] = {
  141. { .parent = &osc_sys_ck, .rates = div2_rates },
  142. { .parent = NULL }
  143. };
  144. /* Latency: this clock is only enabled after PRM_CLKSETUP.SETUP_TIME */
  145. /* Feeds DPLLs - divided first by PRM_CLKSRC_CTRL.SYSCLKDIV? */
  146. static struct clk sys_ck = {
  147. .name = "sys_ck",
  148. .parent = &osc_sys_ck,
  149. .init = &omap2_init_clksel_parent,
  150. .clksel_reg = OMAP3430_PRM_CLKSRC_CTRL,
  151. .clksel_mask = OMAP_SYSCLKDIV_MASK,
  152. .clksel = sys_clksel,
  153. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
  154. .recalc = &omap2_clksel_recalc,
  155. };
  156. static struct clk sys_altclk = {
  157. .name = "sys_altclk",
  158. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
  159. .recalc = &propagate_rate,
  160. };
  161. /* Optional external clock input for some McBSPs */
  162. static struct clk mcbsp_clks = {
  163. .name = "mcbsp_clks",
  164. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
  165. .recalc = &propagate_rate,
  166. };
  167. /* PRM EXTERNAL CLOCK OUTPUT */
  168. static struct clk sys_clkout1 = {
  169. .name = "sys_clkout1",
  170. .parent = &osc_sys_ck,
  171. .enable_reg = OMAP3430_PRM_CLKOUT_CTRL,
  172. .enable_bit = OMAP3430_CLKOUT_EN_SHIFT,
  173. .flags = CLOCK_IN_OMAP343X,
  174. .recalc = &followparent_recalc,
  175. };
  176. /* DPLLS */
  177. /* CM CLOCKS */
  178. static const struct clksel_rate dpll_bypass_rates[] = {
  179. { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
  180. { .div = 0 }
  181. };
  182. static const struct clksel_rate dpll_locked_rates[] = {
  183. { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
  184. { .div = 0 }
  185. };
  186. static const struct clksel_rate div16_dpll_rates[] = {
  187. { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
  188. { .div = 2, .val = 2, .flags = RATE_IN_343X },
  189. { .div = 3, .val = 3, .flags = RATE_IN_343X },
  190. { .div = 4, .val = 4, .flags = RATE_IN_343X },
  191. { .div = 5, .val = 5, .flags = RATE_IN_343X },
  192. { .div = 6, .val = 6, .flags = RATE_IN_343X },
  193. { .div = 7, .val = 7, .flags = RATE_IN_343X },
  194. { .div = 8, .val = 8, .flags = RATE_IN_343X },
  195. { .div = 9, .val = 9, .flags = RATE_IN_343X },
  196. { .div = 10, .val = 10, .flags = RATE_IN_343X },
  197. { .div = 11, .val = 11, .flags = RATE_IN_343X },
  198. { .div = 12, .val = 12, .flags = RATE_IN_343X },
  199. { .div = 13, .val = 13, .flags = RATE_IN_343X },
  200. { .div = 14, .val = 14, .flags = RATE_IN_343X },
  201. { .div = 15, .val = 15, .flags = RATE_IN_343X },
  202. { .div = 16, .val = 16, .flags = RATE_IN_343X },
  203. { .div = 0 }
  204. };
  205. /* DPLL1 */
  206. /* MPU clock source */
  207. /* Type: DPLL */
  208. static const struct dpll_data dpll1_dd = {
  209. .mult_div1_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL),
  210. .mult_mask = OMAP3430_MPU_DPLL_MULT_MASK,
  211. .div1_mask = OMAP3430_MPU_DPLL_DIV_MASK,
  212. .control_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKEN_PLL),
  213. .enable_mask = OMAP3430_EN_MPU_DPLL_MASK,
  214. .auto_recal_bit = OMAP3430_EN_MPU_DPLL_DRIFTGUARD_SHIFT,
  215. .recal_en_bit = OMAP3430_MPU_DPLL_RECAL_EN_SHIFT,
  216. .recal_st_bit = OMAP3430_MPU_DPLL_ST_SHIFT,
  217. };
  218. static struct clk dpll1_ck = {
  219. .name = "dpll1_ck",
  220. .parent = &sys_ck,
  221. .dpll_data = &dpll1_dd,
  222. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
  223. .recalc = &omap3_dpll_recalc,
  224. };
  225. /*
  226. * This virtual clock provides the CLKOUTX2 output from the DPLL if the
  227. * DPLL isn't bypassed.
  228. */
  229. static struct clk dpll1_x2_ck = {
  230. .name = "dpll1_x2_ck",
  231. .parent = &dpll1_ck,
  232. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  233. PARENT_CONTROLS_CLOCK,
  234. .recalc = &omap3_clkoutx2_recalc,
  235. };
  236. /* On DPLL1, unlike other DPLLs, the divider is downstream from CLKOUTX2 */
  237. static const struct clksel div16_dpll1_x2m2_clksel[] = {
  238. { .parent = &dpll1_x2_ck, .rates = div16_dpll_rates },
  239. { .parent = NULL }
  240. };
  241. /*
  242. * Does not exist in the TRM - needed to separate the M2 divider from
  243. * bypass selection in mpu_ck
  244. */
  245. static struct clk dpll1_x2m2_ck = {
  246. .name = "dpll1_x2m2_ck",
  247. .parent = &dpll1_x2_ck,
  248. .init = &omap2_init_clksel_parent,
  249. .clksel_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL2_PLL),
  250. .clksel_mask = OMAP3430_MPU_DPLL_CLKOUT_DIV_MASK,
  251. .clksel = div16_dpll1_x2m2_clksel,
  252. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  253. PARENT_CONTROLS_CLOCK,
  254. .recalc = &omap2_clksel_recalc,
  255. };
  256. /* DPLL2 */
  257. /* IVA2 clock source */
  258. /* Type: DPLL */
  259. static const struct dpll_data dpll2_dd = {
  260. .mult_div1_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL),
  261. .mult_mask = OMAP3430_IVA2_DPLL_MULT_MASK,
  262. .div1_mask = OMAP3430_IVA2_DPLL_DIV_MASK,
  263. .control_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL),
  264. .enable_mask = OMAP3430_EN_IVA2_DPLL_MASK,
  265. .auto_recal_bit = OMAP3430_EN_IVA2_DPLL_DRIFTGUARD_SHIFT,
  266. .recal_en_bit = OMAP3430_PRM_IRQENABLE_MPU_IVA2_DPLL_RECAL_EN_SHIFT,
  267. .recal_st_bit = OMAP3430_PRM_IRQSTATUS_MPU_IVA2_DPLL_ST_SHIFT,
  268. };
  269. static struct clk dpll2_ck = {
  270. .name = "dpll2_ck",
  271. .parent = &sys_ck,
  272. .dpll_data = &dpll2_dd,
  273. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
  274. .recalc = &omap3_dpll_recalc,
  275. };
  276. static const struct clksel div16_dpll2_m2x2_clksel[] = {
  277. { .parent = &dpll2_ck, .rates = div16_dpll_rates },
  278. { .parent = NULL }
  279. };
  280. /*
  281. * The TRM is conflicted on whether IVA2 clock comes from DPLL2 CLKOUT
  282. * or CLKOUTX2. CLKOUT seems most plausible.
  283. */
  284. static struct clk dpll2_m2_ck = {
  285. .name = "dpll2_m2_ck",
  286. .parent = &dpll2_ck,
  287. .init = &omap2_init_clksel_parent,
  288. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD,
  289. OMAP3430_CM_CLKSEL2_PLL),
  290. .clksel_mask = OMAP3430_IVA2_DPLL_CLKOUT_DIV_MASK,
  291. .clksel = div16_dpll2_m2x2_clksel,
  292. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  293. PARENT_CONTROLS_CLOCK,
  294. .recalc = &omap2_clksel_recalc,
  295. };
  296. /* DPLL3 */
  297. /* Source clock for all interfaces and for some device fclks */
  298. /* Type: DPLL */
  299. static const struct dpll_data dpll3_dd = {
  300. .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
  301. .mult_mask = OMAP3430_CORE_DPLL_MULT_MASK,
  302. .div1_mask = OMAP3430_CORE_DPLL_DIV_MASK,
  303. .control_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
  304. .enable_mask = OMAP3430_EN_CORE_DPLL_MASK,
  305. .auto_recal_bit = OMAP3430_EN_CORE_DPLL_DRIFTGUARD_SHIFT,
  306. .recal_en_bit = OMAP3430_CORE_DPLL_RECAL_EN_SHIFT,
  307. .recal_st_bit = OMAP3430_CORE_DPLL_ST_SHIFT,
  308. };
  309. static struct clk dpll3_ck = {
  310. .name = "dpll3_ck",
  311. .parent = &sys_ck,
  312. .dpll_data = &dpll3_dd,
  313. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
  314. .recalc = &omap3_dpll_recalc,
  315. };
  316. /*
  317. * This virtual clock provides the CLKOUTX2 output from the DPLL if the
  318. * DPLL isn't bypassed
  319. */
  320. static struct clk dpll3_x2_ck = {
  321. .name = "dpll3_x2_ck",
  322. .parent = &dpll3_ck,
  323. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  324. PARENT_CONTROLS_CLOCK,
  325. .recalc = &omap3_clkoutx2_recalc,
  326. };
  327. static const struct clksel_rate div31_dpll3_rates[] = {
  328. { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
  329. { .div = 2, .val = 2, .flags = RATE_IN_343X },
  330. { .div = 3, .val = 3, .flags = RATE_IN_3430ES2 },
  331. { .div = 4, .val = 4, .flags = RATE_IN_3430ES2 },
  332. { .div = 5, .val = 5, .flags = RATE_IN_3430ES2 },
  333. { .div = 6, .val = 6, .flags = RATE_IN_3430ES2 },
  334. { .div = 7, .val = 7, .flags = RATE_IN_3430ES2 },
  335. { .div = 8, .val = 8, .flags = RATE_IN_3430ES2 },
  336. { .div = 9, .val = 9, .flags = RATE_IN_3430ES2 },
  337. { .div = 10, .val = 10, .flags = RATE_IN_3430ES2 },
  338. { .div = 11, .val = 11, .flags = RATE_IN_3430ES2 },
  339. { .div = 12, .val = 12, .flags = RATE_IN_3430ES2 },
  340. { .div = 13, .val = 13, .flags = RATE_IN_3430ES2 },
  341. { .div = 14, .val = 14, .flags = RATE_IN_3430ES2 },
  342. { .div = 15, .val = 15, .flags = RATE_IN_3430ES2 },
  343. { .div = 16, .val = 16, .flags = RATE_IN_3430ES2 },
  344. { .div = 17, .val = 17, .flags = RATE_IN_3430ES2 },
  345. { .div = 18, .val = 18, .flags = RATE_IN_3430ES2 },
  346. { .div = 19, .val = 19, .flags = RATE_IN_3430ES2 },
  347. { .div = 20, .val = 20, .flags = RATE_IN_3430ES2 },
  348. { .div = 21, .val = 21, .flags = RATE_IN_3430ES2 },
  349. { .div = 22, .val = 22, .flags = RATE_IN_3430ES2 },
  350. { .div = 23, .val = 23, .flags = RATE_IN_3430ES2 },
  351. { .div = 24, .val = 24, .flags = RATE_IN_3430ES2 },
  352. { .div = 25, .val = 25, .flags = RATE_IN_3430ES2 },
  353. { .div = 26, .val = 26, .flags = RATE_IN_3430ES2 },
  354. { .div = 27, .val = 27, .flags = RATE_IN_3430ES2 },
  355. { .div = 28, .val = 28, .flags = RATE_IN_3430ES2 },
  356. { .div = 29, .val = 29, .flags = RATE_IN_3430ES2 },
  357. { .div = 30, .val = 30, .flags = RATE_IN_3430ES2 },
  358. { .div = 31, .val = 31, .flags = RATE_IN_3430ES2 },
  359. { .div = 0 },
  360. };
  361. static const struct clksel div31_dpll3m2_clksel[] = {
  362. { .parent = &dpll3_ck, .rates = div31_dpll3_rates },
  363. { .parent = NULL }
  364. };
  365. /*
  366. * DPLL3 output M2
  367. * REVISIT: This DPLL output divider must be changed in SRAM, so until
  368. * that code is ready, this should remain a 'read-only' clksel clock.
  369. */
  370. static struct clk dpll3_m2_ck = {
  371. .name = "dpll3_m2_ck",
  372. .parent = &dpll3_ck,
  373. .init = &omap2_init_clksel_parent,
  374. .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
  375. .clksel_mask = OMAP3430_CORE_DPLL_CLKOUT_DIV_MASK,
  376. .clksel = div31_dpll3m2_clksel,
  377. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  378. PARENT_CONTROLS_CLOCK,
  379. .recalc = &omap2_clksel_recalc,
  380. };
  381. static const struct clksel core_ck_clksel[] = {
  382. { .parent = &sys_ck, .rates = dpll_bypass_rates },
  383. { .parent = &dpll3_m2_ck, .rates = dpll_locked_rates },
  384. { .parent = NULL }
  385. };
  386. static struct clk core_ck = {
  387. .name = "core_ck",
  388. .init = &omap2_init_clksel_parent,
  389. .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
  390. .clksel_mask = OMAP3430_ST_CORE_CLK,
  391. .clksel = core_ck_clksel,
  392. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  393. PARENT_CONTROLS_CLOCK,
  394. .recalc = &omap2_clksel_recalc,
  395. };
  396. static const struct clksel dpll3_m2x2_ck_clksel[] = {
  397. { .parent = &sys_ck, .rates = dpll_bypass_rates },
  398. { .parent = &dpll3_x2_ck, .rates = dpll_locked_rates },
  399. { .parent = NULL }
  400. };
  401. static struct clk dpll3_m2x2_ck = {
  402. .name = "dpll3_m2x2_ck",
  403. .init = &omap2_init_clksel_parent,
  404. .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
  405. .clksel_mask = OMAP3430_ST_CORE_CLK,
  406. .clksel = dpll3_m2x2_ck_clksel,
  407. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  408. PARENT_CONTROLS_CLOCK,
  409. .recalc = &omap2_clksel_recalc,
  410. };
  411. /* The PWRDN bit is apparently only available on 3430ES2 and above */
  412. static const struct clksel div16_dpll3_clksel[] = {
  413. { .parent = &dpll3_ck, .rates = div16_dpll_rates },
  414. { .parent = NULL }
  415. };
  416. /* This virtual clock is the source for dpll3_m3x2_ck */
  417. static struct clk dpll3_m3_ck = {
  418. .name = "dpll3_m3_ck",
  419. .parent = &dpll3_ck,
  420. .init = &omap2_init_clksel_parent,
  421. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
  422. .clksel_mask = OMAP3430_DIV_DPLL3_MASK,
  423. .clksel = div16_dpll3_clksel,
  424. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  425. PARENT_CONTROLS_CLOCK,
  426. .recalc = &omap2_clksel_recalc,
  427. };
  428. /* The PWRDN bit is apparently only available on 3430ES2 and above */
  429. static struct clk dpll3_m3x2_ck = {
  430. .name = "dpll3_m3x2_ck",
  431. .parent = &dpll3_m3_ck,
  432. .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
  433. .enable_bit = OMAP3430_PWRDN_EMU_CORE_SHIFT,
  434. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | INVERT_ENABLE,
  435. .recalc = &omap3_clkoutx2_recalc,
  436. };
  437. static const struct clksel emu_core_alwon_ck_clksel[] = {
  438. { .parent = &sys_ck, .rates = dpll_bypass_rates },
  439. { .parent = &dpll3_m3x2_ck, .rates = dpll_locked_rates },
  440. { .parent = NULL }
  441. };
  442. static struct clk emu_core_alwon_ck = {
  443. .name = "emu_core_alwon_ck",
  444. .parent = &dpll3_m3x2_ck,
  445. .init = &omap2_init_clksel_parent,
  446. .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
  447. .clksel_mask = OMAP3430_ST_CORE_CLK,
  448. .clksel = emu_core_alwon_ck_clksel,
  449. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  450. PARENT_CONTROLS_CLOCK,
  451. .recalc = &omap2_clksel_recalc,
  452. };
  453. /* DPLL4 */
  454. /* Supplies 96MHz, 54Mhz TV DAC, DSS fclk, CAM sensor clock, emul trace clk */
  455. /* Type: DPLL */
  456. static const struct dpll_data dpll4_dd = {
  457. .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL2),
  458. .mult_mask = OMAP3430_PERIPH_DPLL_MULT_MASK,
  459. .div1_mask = OMAP3430_PERIPH_DPLL_DIV_MASK,
  460. .control_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
  461. .enable_mask = OMAP3430_EN_PERIPH_DPLL_MASK,
  462. .auto_recal_bit = OMAP3430_EN_PERIPH_DPLL_DRIFTGUARD_SHIFT,
  463. .recal_en_bit = OMAP3430_PERIPH_DPLL_RECAL_EN_SHIFT,
  464. .recal_st_bit = OMAP3430_PERIPH_DPLL_ST_SHIFT,
  465. };
  466. static struct clk dpll4_ck = {
  467. .name = "dpll4_ck",
  468. .parent = &sys_ck,
  469. .dpll_data = &dpll4_dd,
  470. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
  471. .recalc = &omap3_dpll_recalc,
  472. };
  473. /*
  474. * This virtual clock provides the CLKOUTX2 output from the DPLL if the
  475. * DPLL isn't bypassed --
  476. * XXX does this serve any downstream clocks?
  477. */
  478. static struct clk dpll4_x2_ck = {
  479. .name = "dpll4_x2_ck",
  480. .parent = &dpll4_ck,
  481. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  482. PARENT_CONTROLS_CLOCK,
  483. .recalc = &omap3_clkoutx2_recalc,
  484. };
  485. static const struct clksel div16_dpll4_clksel[] = {
  486. { .parent = &dpll4_ck, .rates = div16_dpll_rates },
  487. { .parent = NULL }
  488. };
  489. /* This virtual clock is the source for dpll4_m2x2_ck */
  490. static struct clk dpll4_m2_ck = {
  491. .name = "dpll4_m2_ck",
  492. .parent = &dpll4_ck,
  493. .init = &omap2_init_clksel_parent,
  494. .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430_CM_CLKSEL3),
  495. .clksel_mask = OMAP3430_DIV_96M_MASK,
  496. .clksel = div16_dpll4_clksel,
  497. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  498. PARENT_CONTROLS_CLOCK,
  499. .recalc = &omap2_clksel_recalc,
  500. };
  501. /* The PWRDN bit is apparently only available on 3430ES2 and above */
  502. static struct clk dpll4_m2x2_ck = {
  503. .name = "dpll4_m2x2_ck",
  504. .parent = &dpll4_m2_ck,
  505. .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
  506. .enable_bit = OMAP3430_PWRDN_96M_SHIFT,
  507. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | INVERT_ENABLE,
  508. .recalc = &omap3_clkoutx2_recalc,
  509. };
  510. static const struct clksel omap_96m_alwon_fck_clksel[] = {
  511. { .parent = &sys_ck, .rates = dpll_bypass_rates },
  512. { .parent = &dpll4_m2x2_ck, .rates = dpll_locked_rates },
  513. { .parent = NULL }
  514. };
  515. static struct clk omap_96m_alwon_fck = {
  516. .name = "omap_96m_alwon_fck",
  517. .parent = &dpll4_m2x2_ck,
  518. .init = &omap2_init_clksel_parent,
  519. .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
  520. .clksel_mask = OMAP3430_ST_PERIPH_CLK,
  521. .clksel = omap_96m_alwon_fck_clksel,
  522. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  523. PARENT_CONTROLS_CLOCK,
  524. .recalc = &omap2_clksel_recalc,
  525. };
  526. static struct clk omap_96m_fck = {
  527. .name = "omap_96m_fck",
  528. .parent = &omap_96m_alwon_fck,
  529. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  530. PARENT_CONTROLS_CLOCK,
  531. .recalc = &followparent_recalc,
  532. };
  533. static const struct clksel cm_96m_fck_clksel[] = {
  534. { .parent = &sys_ck, .rates = dpll_bypass_rates },
  535. { .parent = &dpll4_m2x2_ck, .rates = dpll_locked_rates },
  536. { .parent = NULL }
  537. };
  538. static struct clk cm_96m_fck = {
  539. .name = "cm_96m_fck",
  540. .parent = &dpll4_m2x2_ck,
  541. .init = &omap2_init_clksel_parent,
  542. .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
  543. .clksel_mask = OMAP3430_ST_PERIPH_CLK,
  544. .clksel = cm_96m_fck_clksel,
  545. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  546. PARENT_CONTROLS_CLOCK,
  547. .recalc = &omap2_clksel_recalc,
  548. };
  549. /* This virtual clock is the source for dpll4_m3x2_ck */
  550. static struct clk dpll4_m3_ck = {
  551. .name = "dpll4_m3_ck",
  552. .parent = &dpll4_ck,
  553. .init = &omap2_init_clksel_parent,
  554. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL),
  555. .clksel_mask = OMAP3430_CLKSEL_TV_MASK,
  556. .clksel = div16_dpll4_clksel,
  557. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  558. PARENT_CONTROLS_CLOCK,
  559. .recalc = &omap2_clksel_recalc,
  560. };
  561. /* The PWRDN bit is apparently only available on 3430ES2 and above */
  562. static struct clk dpll4_m3x2_ck = {
  563. .name = "dpll4_m3x2_ck",
  564. .parent = &dpll4_m3_ck,
  565. .init = &omap2_init_clksel_parent,
  566. .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
  567. .enable_bit = OMAP3430_PWRDN_TV_SHIFT,
  568. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | INVERT_ENABLE,
  569. .recalc = &omap3_clkoutx2_recalc,
  570. };
  571. static const struct clksel virt_omap_54m_fck_clksel[] = {
  572. { .parent = &sys_ck, .rates = dpll_bypass_rates },
  573. { .parent = &dpll4_m3x2_ck, .rates = dpll_locked_rates },
  574. { .parent = NULL }
  575. };
  576. static struct clk virt_omap_54m_fck = {
  577. .name = "virt_omap_54m_fck",
  578. .parent = &dpll4_m3x2_ck,
  579. .init = &omap2_init_clksel_parent,
  580. .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
  581. .clksel_mask = OMAP3430_ST_PERIPH_CLK,
  582. .clksel = virt_omap_54m_fck_clksel,
  583. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  584. PARENT_CONTROLS_CLOCK,
  585. .recalc = &omap2_clksel_recalc,
  586. };
  587. static const struct clksel_rate omap_54m_d4m3x2_rates[] = {
  588. { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
  589. { .div = 0 }
  590. };
  591. static const struct clksel_rate omap_54m_alt_rates[] = {
  592. { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
  593. { .div = 0 }
  594. };
  595. static const struct clksel omap_54m_clksel[] = {
  596. { .parent = &virt_omap_54m_fck, .rates = omap_54m_d4m3x2_rates },
  597. { .parent = &sys_altclk, .rates = omap_54m_alt_rates },
  598. { .parent = NULL }
  599. };
  600. static struct clk omap_54m_fck = {
  601. .name = "omap_54m_fck",
  602. .init = &omap2_init_clksel_parent,
  603. .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
  604. .clksel_mask = OMAP3430_SOURCE_54M,
  605. .clksel = omap_54m_clksel,
  606. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  607. PARENT_CONTROLS_CLOCK,
  608. .recalc = &omap2_clksel_recalc,
  609. };
  610. static const struct clksel_rate omap_48m_96md2_rates[] = {
  611. { .div = 2, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
  612. { .div = 0 }
  613. };
  614. static const struct clksel_rate omap_48m_alt_rates[] = {
  615. { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
  616. { .div = 0 }
  617. };
  618. static const struct clksel omap_48m_clksel[] = {
  619. { .parent = &cm_96m_fck, .rates = omap_48m_96md2_rates },
  620. { .parent = &sys_altclk, .rates = omap_48m_alt_rates },
  621. { .parent = NULL }
  622. };
  623. static struct clk omap_48m_fck = {
  624. .name = "omap_48m_fck",
  625. .init = &omap2_init_clksel_parent,
  626. .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
  627. .clksel_mask = OMAP3430_SOURCE_48M,
  628. .clksel = omap_48m_clksel,
  629. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  630. PARENT_CONTROLS_CLOCK,
  631. .recalc = &omap2_clksel_recalc,
  632. };
  633. static struct clk omap_12m_fck = {
  634. .name = "omap_12m_fck",
  635. .parent = &omap_48m_fck,
  636. .fixed_div = 4,
  637. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  638. PARENT_CONTROLS_CLOCK,
  639. .recalc = &omap2_fixed_divisor_recalc,
  640. };
  641. /* This virstual clock is the source for dpll4_m4x2_ck */
  642. static struct clk dpll4_m4_ck = {
  643. .name = "dpll4_m4_ck",
  644. .parent = &dpll4_ck,
  645. .init = &omap2_init_clksel_parent,
  646. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL),
  647. .clksel_mask = OMAP3430_CLKSEL_DSS1_MASK,
  648. .clksel = div16_dpll4_clksel,
  649. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  650. PARENT_CONTROLS_CLOCK,
  651. .recalc = &omap2_clksel_recalc,
  652. };
  653. /* The PWRDN bit is apparently only available on 3430ES2 and above */
  654. static struct clk dpll4_m4x2_ck = {
  655. .name = "dpll4_m4x2_ck",
  656. .parent = &dpll4_m4_ck,
  657. .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
  658. .enable_bit = OMAP3430_PWRDN_CAM_SHIFT,
  659. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | INVERT_ENABLE,
  660. .recalc = &omap3_clkoutx2_recalc,
  661. };
  662. /* This virtual clock is the source for dpll4_m5x2_ck */
  663. static struct clk dpll4_m5_ck = {
  664. .name = "dpll4_m5_ck",
  665. .parent = &dpll4_ck,
  666. .init = &omap2_init_clksel_parent,
  667. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_CLKSEL),
  668. .clksel_mask = OMAP3430_CLKSEL_CAM_MASK,
  669. .clksel = div16_dpll4_clksel,
  670. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  671. PARENT_CONTROLS_CLOCK,
  672. .recalc = &omap2_clksel_recalc,
  673. };
  674. /* The PWRDN bit is apparently only available on 3430ES2 and above */
  675. static struct clk dpll4_m5x2_ck = {
  676. .name = "dpll4_m5x2_ck",
  677. .parent = &dpll4_m5_ck,
  678. .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
  679. .enable_bit = OMAP3430_PWRDN_CAM_SHIFT,
  680. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | INVERT_ENABLE,
  681. .recalc = &omap3_clkoutx2_recalc,
  682. };
  683. /* This virtual clock is the source for dpll4_m6x2_ck */
  684. static struct clk dpll4_m6_ck = {
  685. .name = "dpll4_m6_ck",
  686. .parent = &dpll4_ck,
  687. .init = &omap2_init_clksel_parent,
  688. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
  689. .clksel_mask = OMAP3430_DIV_DPLL4_MASK,
  690. .clksel = div16_dpll4_clksel,
  691. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  692. PARENT_CONTROLS_CLOCK,
  693. .recalc = &omap2_clksel_recalc,
  694. };
  695. /* The PWRDN bit is apparently only available on 3430ES2 and above */
  696. static struct clk dpll4_m6x2_ck = {
  697. .name = "dpll4_m6x2_ck",
  698. .parent = &dpll4_m6_ck,
  699. .init = &omap2_init_clksel_parent,
  700. .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
  701. .enable_bit = OMAP3430_PWRDN_EMU_PERIPH_SHIFT,
  702. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | INVERT_ENABLE,
  703. .recalc = &omap3_clkoutx2_recalc,
  704. };
  705. static struct clk emu_per_alwon_ck = {
  706. .name = "emu_per_alwon_ck",
  707. .parent = &dpll4_m6x2_ck,
  708. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  709. PARENT_CONTROLS_CLOCK,
  710. .recalc = &followparent_recalc,
  711. };
  712. /* DPLL5 */
  713. /* Supplies 120MHz clock, USIM source clock */
  714. /* Type: DPLL */
  715. /* 3430ES2 only */
  716. static const struct dpll_data dpll5_dd = {
  717. .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKSEL4),
  718. .mult_mask = OMAP3430ES2_PERIPH2_DPLL_MULT_MASK,
  719. .div1_mask = OMAP3430ES2_PERIPH2_DPLL_DIV_MASK,
  720. .control_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKEN2),
  721. .enable_mask = OMAP3430ES2_EN_PERIPH2_DPLL_MASK,
  722. .auto_recal_bit = OMAP3430ES2_EN_PERIPH2_DPLL_DRIFTGUARD_SHIFT,
  723. .recal_en_bit = OMAP3430ES2_SND_PERIPH_DPLL_RECAL_EN_SHIFT,
  724. .recal_st_bit = OMAP3430ES2_SND_PERIPH_DPLL_ST_SHIFT,
  725. };
  726. static struct clk dpll5_ck = {
  727. .name = "dpll5_ck",
  728. .parent = &sys_ck,
  729. .dpll_data = &dpll5_dd,
  730. .flags = CLOCK_IN_OMAP3430ES2 | RATE_PROPAGATES |
  731. ALWAYS_ENABLED,
  732. .recalc = &omap3_dpll_recalc,
  733. };
  734. static const struct clksel div16_dpll5_clksel[] = {
  735. { .parent = &dpll5_ck, .rates = div16_dpll_rates },
  736. { .parent = NULL }
  737. };
  738. static struct clk dpll5_m2_ck = {
  739. .name = "dpll5_m2_ck",
  740. .parent = &dpll5_ck,
  741. .init = &omap2_init_clksel_parent,
  742. .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKSEL5),
  743. .clksel_mask = OMAP3430ES2_DIV_120M_MASK,
  744. .clksel = div16_dpll5_clksel,
  745. .flags = CLOCK_IN_OMAP3430ES2 | RATE_PROPAGATES,
  746. .recalc = &omap2_clksel_recalc,
  747. };
  748. static const struct clksel omap_120m_fck_clksel[] = {
  749. { .parent = &sys_ck, .rates = dpll_bypass_rates },
  750. { .parent = &dpll5_m2_ck, .rates = dpll_locked_rates },
  751. { .parent = NULL }
  752. };
  753. static struct clk omap_120m_fck = {
  754. .name = "omap_120m_fck",
  755. .parent = &dpll5_m2_ck,
  756. .init = &omap2_init_clksel_parent,
  757. .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST2),
  758. .clksel_mask = OMAP3430ES2_ST_PERIPH2_CLK_MASK,
  759. .clksel = omap_120m_fck_clksel,
  760. .flags = CLOCK_IN_OMAP3430ES2 | RATE_PROPAGATES |
  761. PARENT_CONTROLS_CLOCK,
  762. .recalc = &omap2_clksel_recalc,
  763. };
  764. /* CM EXTERNAL CLOCK OUTPUTS */
  765. static const struct clksel_rate clkout2_src_core_rates[] = {
  766. { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
  767. { .div = 0 }
  768. };
  769. static const struct clksel_rate clkout2_src_sys_rates[] = {
  770. { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
  771. { .div = 0 }
  772. };
  773. static const struct clksel_rate clkout2_src_96m_rates[] = {
  774. { .div = 1, .val = 2, .flags = RATE_IN_343X | DEFAULT_RATE },
  775. { .div = 0 }
  776. };
  777. static const struct clksel_rate clkout2_src_54m_rates[] = {
  778. { .div = 1, .val = 3, .flags = RATE_IN_343X | DEFAULT_RATE },
  779. { .div = 0 }
  780. };
  781. static const struct clksel clkout2_src_clksel[] = {
  782. { .parent = &core_ck, .rates = clkout2_src_core_rates },
  783. { .parent = &sys_ck, .rates = clkout2_src_sys_rates },
  784. { .parent = &omap_96m_alwon_fck, .rates = clkout2_src_96m_rates },
  785. { .parent = &omap_54m_fck, .rates = clkout2_src_54m_rates },
  786. { .parent = NULL }
  787. };
  788. static struct clk clkout2_src_ck = {
  789. .name = "clkout2_src_ck",
  790. .init = &omap2_init_clksel_parent,
  791. .enable_reg = OMAP3430_CM_CLKOUT_CTRL,
  792. .enable_bit = OMAP3430_CLKOUT2_EN_SHIFT,
  793. .clksel_reg = OMAP3430_CM_CLKOUT_CTRL,
  794. .clksel_mask = OMAP3430_CLKOUT2SOURCE_MASK,
  795. .clksel = clkout2_src_clksel,
  796. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
  797. .recalc = &omap2_clksel_recalc,
  798. };
  799. static const struct clksel_rate sys_clkout2_rates[] = {
  800. { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
  801. { .div = 2, .val = 1, .flags = RATE_IN_343X },
  802. { .div = 4, .val = 2, .flags = RATE_IN_343X },
  803. { .div = 8, .val = 3, .flags = RATE_IN_343X },
  804. { .div = 16, .val = 4, .flags = RATE_IN_343X },
  805. { .div = 0 },
  806. };
  807. static const struct clksel sys_clkout2_clksel[] = {
  808. { .parent = &clkout2_src_ck, .rates = sys_clkout2_rates },
  809. { .parent = NULL },
  810. };
  811. static struct clk sys_clkout2 = {
  812. .name = "sys_clkout2",
  813. .init = &omap2_init_clksel_parent,
  814. .clksel_reg = OMAP3430_CM_CLKOUT_CTRL,
  815. .clksel_mask = OMAP3430_CLKOUT2_DIV_MASK,
  816. .clksel = sys_clkout2_clksel,
  817. .flags = CLOCK_IN_OMAP343X | PARENT_CONTROLS_CLOCK,
  818. .recalc = &omap2_clksel_recalc,
  819. };
  820. /* CM OUTPUT CLOCKS */
  821. static struct clk corex2_fck = {
  822. .name = "corex2_fck",
  823. .parent = &dpll3_m2x2_ck,
  824. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  825. PARENT_CONTROLS_CLOCK,
  826. .recalc = &followparent_recalc,
  827. };
  828. /* DPLL power domain clock controls */
  829. static const struct clksel div2_core_clksel[] = {
  830. { .parent = &core_ck, .rates = div2_rates },
  831. { .parent = NULL }
  832. };
  833. /*
  834. * REVISIT: Are these in DPLL power domain or CM power domain? docs
  835. * may be inconsistent here?
  836. */
  837. static struct clk dpll1_fck = {
  838. .name = "dpll1_fck",
  839. .parent = &core_ck,
  840. .init = &omap2_init_clksel_parent,
  841. .clksel_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL),
  842. .clksel_mask = OMAP3430_MPU_CLK_SRC_MASK,
  843. .clksel = div2_core_clksel,
  844. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  845. PARENT_CONTROLS_CLOCK,
  846. .recalc = &omap2_clksel_recalc,
  847. };
  848. /*
  849. * MPU clksel:
  850. * If DPLL1 is locked, mpu_ck derives from DPLL1; otherwise, mpu_ck
  851. * derives from the high-frequency bypass clock originating from DPLL3,
  852. * called 'dpll1_fck'
  853. */
  854. static const struct clksel mpu_clksel[] = {
  855. { .parent = &dpll1_fck, .rates = dpll_bypass_rates },
  856. { .parent = &dpll1_x2m2_ck, .rates = dpll_locked_rates },
  857. { .parent = NULL }
  858. };
  859. static struct clk mpu_ck = {
  860. .name = "mpu_ck",
  861. .parent = &dpll1_x2m2_ck,
  862. .init = &omap2_init_clksel_parent,
  863. .clksel_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_IDLEST_PLL),
  864. .clksel_mask = OMAP3430_ST_MPU_CLK_MASK,
  865. .clksel = mpu_clksel,
  866. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  867. PARENT_CONTROLS_CLOCK,
  868. .recalc = &omap2_clksel_recalc,
  869. };
  870. /* arm_fck is divided by two when DPLL1 locked; otherwise, passthrough mpu_ck */
  871. static const struct clksel_rate arm_fck_rates[] = {
  872. { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
  873. { .div = 2, .val = 1, .flags = RATE_IN_343X },
  874. { .div = 0 },
  875. };
  876. static const struct clksel arm_fck_clksel[] = {
  877. { .parent = &mpu_ck, .rates = arm_fck_rates },
  878. { .parent = NULL }
  879. };
  880. static struct clk arm_fck = {
  881. .name = "arm_fck",
  882. .parent = &mpu_ck,
  883. .init = &omap2_init_clksel_parent,
  884. .clksel_reg = OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_IDLEST_PLL),
  885. .clksel_mask = OMAP3430_ST_MPU_CLK_MASK,
  886. .clksel = arm_fck_clksel,
  887. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  888. PARENT_CONTROLS_CLOCK,
  889. .recalc = &omap2_clksel_recalc,
  890. };
  891. /*
  892. * REVISIT: This clock is never specifically defined in the 3430 TRM,
  893. * although it is referenced - so this is a guess
  894. */
  895. static struct clk emu_mpu_alwon_ck = {
  896. .name = "emu_mpu_alwon_ck",
  897. .parent = &mpu_ck,
  898. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  899. PARENT_CONTROLS_CLOCK,
  900. .recalc = &followparent_recalc,
  901. };
  902. static struct clk dpll2_fck = {
  903. .name = "dpll2_fck",
  904. .parent = &core_ck,
  905. .init = &omap2_init_clksel_parent,
  906. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL),
  907. .clksel_mask = OMAP3430_IVA2_CLK_SRC_MASK,
  908. .clksel = div2_core_clksel,
  909. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  910. PARENT_CONTROLS_CLOCK,
  911. .recalc = &omap2_clksel_recalc,
  912. };
  913. /*
  914. * IVA2 clksel:
  915. * If DPLL2 is locked, iva2_ck derives from DPLL2; otherwise, iva2_ck
  916. * derives from the high-frequency bypass clock originating from DPLL3,
  917. * called 'dpll2_fck'
  918. */
  919. static const struct clksel iva2_clksel[] = {
  920. { .parent = &dpll2_fck, .rates = dpll_bypass_rates },
  921. { .parent = &dpll2_m2_ck, .rates = dpll_locked_rates },
  922. { .parent = NULL }
  923. };
  924. static struct clk iva2_ck = {
  925. .name = "iva2_ck",
  926. .parent = &dpll2_m2_ck,
  927. .init = &omap2_init_clksel_parent,
  928. .enable_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, CM_FCLKEN),
  929. .enable_bit = OMAP3430_CM_FCLKEN_IVA2_EN_IVA2_SHIFT,
  930. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD,
  931. OMAP3430_CM_IDLEST_PLL),
  932. .clksel_mask = OMAP3430_ST_IVA2_CLK_MASK,
  933. .clksel = iva2_clksel,
  934. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
  935. .recalc = &omap2_clksel_recalc,
  936. };
  937. /* Common interface clocks */
  938. static struct clk l3_ick = {
  939. .name = "l3_ick",
  940. .parent = &core_ck,
  941. .init = &omap2_init_clksel_parent,
  942. .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
  943. .clksel_mask = OMAP3430_CLKSEL_L3_MASK,
  944. .clksel = div2_core_clksel,
  945. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  946. PARENT_CONTROLS_CLOCK,
  947. .recalc = &omap2_clksel_recalc,
  948. };
  949. static const struct clksel div2_l3_clksel[] = {
  950. { .parent = &l3_ick, .rates = div2_rates },
  951. { .parent = NULL }
  952. };
  953. static struct clk l4_ick = {
  954. .name = "l4_ick",
  955. .parent = &l3_ick,
  956. .init = &omap2_init_clksel_parent,
  957. .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
  958. .clksel_mask = OMAP3430_CLKSEL_L4_MASK,
  959. .clksel = div2_l3_clksel,
  960. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  961. PARENT_CONTROLS_CLOCK,
  962. .recalc = &omap2_clksel_recalc,
  963. };
  964. static const struct clksel div2_l4_clksel[] = {
  965. { .parent = &l4_ick, .rates = div2_rates },
  966. { .parent = NULL }
  967. };
  968. static struct clk rm_ick = {
  969. .name = "rm_ick",
  970. .parent = &l4_ick,
  971. .init = &omap2_init_clksel_parent,
  972. .clksel_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_CLKSEL),
  973. .clksel_mask = OMAP3430_CLKSEL_RM_MASK,
  974. .clksel = div2_l4_clksel,
  975. .flags = CLOCK_IN_OMAP343X | PARENT_CONTROLS_CLOCK,
  976. .recalc = &omap2_clksel_recalc,
  977. };
  978. /* GFX power domain */
  979. /* GFX clocks are in 3430ES1 only. 3430ES2 and later uses the SGX instead */
  980. static const struct clksel gfx_l3_clksel[] = {
  981. { .parent = &l3_ick, .rates = gfx_l3_rates },
  982. { .parent = NULL }
  983. };
  984. static struct clk gfx_l3_fck = {
  985. .name = "gfx_l3_fck",
  986. .parent = &l3_ick,
  987. .init = &omap2_init_clksel_parent,
  988. .enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_ICLKEN),
  989. .enable_bit = OMAP_EN_GFX_SHIFT,
  990. .clksel_reg = OMAP_CM_REGADDR(GFX_MOD, CM_CLKSEL),
  991. .clksel_mask = OMAP_CLKSEL_GFX_MASK,
  992. .clksel = gfx_l3_clksel,
  993. .flags = CLOCK_IN_OMAP3430ES1 | RATE_PROPAGATES,
  994. .recalc = &omap2_clksel_recalc,
  995. };
  996. static struct clk gfx_l3_ick = {
  997. .name = "gfx_l3_ick",
  998. .parent = &l3_ick,
  999. .enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_ICLKEN),
  1000. .enable_bit = OMAP_EN_GFX_SHIFT,
  1001. .flags = CLOCK_IN_OMAP3430ES1,
  1002. .recalc = &followparent_recalc,
  1003. };
  1004. static struct clk gfx_cg1_ck = {
  1005. .name = "gfx_cg1_ck",
  1006. .parent = &gfx_l3_fck, /* REVISIT: correct? */
  1007. .enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN),
  1008. .enable_bit = OMAP3430ES1_EN_2D_SHIFT,
  1009. .flags = CLOCK_IN_OMAP3430ES1,
  1010. .recalc = &followparent_recalc,
  1011. };
  1012. static struct clk gfx_cg2_ck = {
  1013. .name = "gfx_cg2_ck",
  1014. .parent = &gfx_l3_fck, /* REVISIT: correct? */
  1015. .enable_reg = OMAP_CM_REGADDR(GFX_MOD, CM_FCLKEN),
  1016. .enable_bit = OMAP3430ES1_EN_3D_SHIFT,
  1017. .flags = CLOCK_IN_OMAP3430ES1,
  1018. .recalc = &followparent_recalc,
  1019. };
  1020. /* SGX power domain - 3430ES2 only */
  1021. static const struct clksel_rate sgx_core_rates[] = {
  1022. { .div = 3, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
  1023. { .div = 4, .val = 1, .flags = RATE_IN_343X },
  1024. { .div = 6, .val = 2, .flags = RATE_IN_343X },
  1025. { .div = 0 },
  1026. };
  1027. static const struct clksel_rate sgx_96m_rates[] = {
  1028. { .div = 1, .val = 3, .flags = RATE_IN_343X | DEFAULT_RATE },
  1029. { .div = 0 },
  1030. };
  1031. static const struct clksel sgx_clksel[] = {
  1032. { .parent = &core_ck, .rates = sgx_core_rates },
  1033. { .parent = &cm_96m_fck, .rates = sgx_96m_rates },
  1034. { .parent = NULL },
  1035. };
  1036. static struct clk sgx_fck = {
  1037. .name = "sgx_fck",
  1038. .init = &omap2_init_clksel_parent,
  1039. .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_SGX_MOD, CM_FCLKEN),
  1040. .enable_bit = OMAP3430ES2_EN_SGX_SHIFT,
  1041. .clksel_reg = OMAP_CM_REGADDR(OMAP3430ES2_SGX_MOD, CM_CLKSEL),
  1042. .clksel_mask = OMAP3430ES2_CLKSEL_SGX_MASK,
  1043. .clksel = sgx_clksel,
  1044. .flags = CLOCK_IN_OMAP3430ES2,
  1045. .recalc = &omap2_clksel_recalc,
  1046. };
  1047. static struct clk sgx_ick = {
  1048. .name = "sgx_ick",
  1049. .parent = &l3_ick,
  1050. .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_SGX_MOD, CM_ICLKEN),
  1051. .enable_bit = OMAP3430ES2_EN_SGX_SHIFT,
  1052. .flags = CLOCK_IN_OMAP3430ES2,
  1053. .recalc = &followparent_recalc,
  1054. };
  1055. /* CORE power domain */
  1056. static struct clk d2d_26m_fck = {
  1057. .name = "d2d_26m_fck",
  1058. .parent = &sys_ck,
  1059. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1060. .enable_bit = OMAP3430ES1_EN_D2D_SHIFT,
  1061. .flags = CLOCK_IN_OMAP3430ES1,
  1062. .recalc = &followparent_recalc,
  1063. };
  1064. static const struct clksel omap343x_gpt_clksel[] = {
  1065. { .parent = &omap_32k_fck, .rates = gpt_32k_rates },
  1066. { .parent = &sys_ck, .rates = gpt_sys_rates },
  1067. { .parent = NULL}
  1068. };
  1069. static struct clk gpt10_fck = {
  1070. .name = "gpt10_fck",
  1071. .parent = &sys_ck,
  1072. .init = &omap2_init_clksel_parent,
  1073. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1074. .enable_bit = OMAP3430_EN_GPT10_SHIFT,
  1075. .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
  1076. .clksel_mask = OMAP3430_CLKSEL_GPT10_MASK,
  1077. .clksel = omap343x_gpt_clksel,
  1078. .flags = CLOCK_IN_OMAP343X,
  1079. .recalc = &omap2_clksel_recalc,
  1080. };
  1081. static struct clk gpt11_fck = {
  1082. .name = "gpt11_fck",
  1083. .parent = &sys_ck,
  1084. .init = &omap2_init_clksel_parent,
  1085. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1086. .enable_bit = OMAP3430_EN_GPT11_SHIFT,
  1087. .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
  1088. .clksel_mask = OMAP3430_CLKSEL_GPT11_MASK,
  1089. .clksel = omap343x_gpt_clksel,
  1090. .flags = CLOCK_IN_OMAP343X,
  1091. .recalc = &omap2_clksel_recalc,
  1092. };
  1093. static struct clk cpefuse_fck = {
  1094. .name = "cpefuse_fck",
  1095. .parent = &sys_ck,
  1096. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3),
  1097. .enable_bit = OMAP3430ES2_EN_CPEFUSE_SHIFT,
  1098. .flags = CLOCK_IN_OMAP3430ES2,
  1099. .recalc = &followparent_recalc,
  1100. };
  1101. static struct clk ts_fck = {
  1102. .name = "ts_fck",
  1103. .parent = &omap_32k_fck,
  1104. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3),
  1105. .enable_bit = OMAP3430ES2_EN_TS_SHIFT,
  1106. .flags = CLOCK_IN_OMAP3430ES2,
  1107. .recalc = &followparent_recalc,
  1108. };
  1109. static struct clk usbtll_fck = {
  1110. .name = "usbtll_fck",
  1111. .parent = &omap_120m_fck,
  1112. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3),
  1113. .enable_bit = OMAP3430ES2_EN_USBTLL_SHIFT,
  1114. .flags = CLOCK_IN_OMAP3430ES2,
  1115. .recalc = &followparent_recalc,
  1116. };
  1117. /* CORE 96M FCLK-derived clocks */
  1118. static struct clk core_96m_fck = {
  1119. .name = "core_96m_fck",
  1120. .parent = &omap_96m_fck,
  1121. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  1122. PARENT_CONTROLS_CLOCK,
  1123. .recalc = &followparent_recalc,
  1124. };
  1125. static struct clk mmchs3_fck = {
  1126. .name = "mmchs_fck",
  1127. .id = 3,
  1128. .parent = &core_96m_fck,
  1129. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1130. .enable_bit = OMAP3430ES2_EN_MMC3_SHIFT,
  1131. .flags = CLOCK_IN_OMAP3430ES2,
  1132. .recalc = &followparent_recalc,
  1133. };
  1134. static struct clk mmchs2_fck = {
  1135. .name = "mmchs_fck",
  1136. .id = 2,
  1137. .parent = &core_96m_fck,
  1138. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1139. .enable_bit = OMAP3430_EN_MMC2_SHIFT,
  1140. .flags = CLOCK_IN_OMAP343X,
  1141. .recalc = &followparent_recalc,
  1142. };
  1143. static struct clk mspro_fck = {
  1144. .name = "mspro_fck",
  1145. .parent = &core_96m_fck,
  1146. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1147. .enable_bit = OMAP3430_EN_MSPRO_SHIFT,
  1148. .flags = CLOCK_IN_OMAP343X,
  1149. .recalc = &followparent_recalc,
  1150. };
  1151. static struct clk mmchs1_fck = {
  1152. .name = "mmchs_fck",
  1153. .id = 1,
  1154. .parent = &core_96m_fck,
  1155. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1156. .enable_bit = OMAP3430_EN_MMC1_SHIFT,
  1157. .flags = CLOCK_IN_OMAP343X,
  1158. .recalc = &followparent_recalc,
  1159. };
  1160. static struct clk i2c3_fck = {
  1161. .name = "i2c_fck",
  1162. .id = 3,
  1163. .parent = &core_96m_fck,
  1164. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1165. .enable_bit = OMAP3430_EN_I2C3_SHIFT,
  1166. .flags = CLOCK_IN_OMAP343X,
  1167. .recalc = &followparent_recalc,
  1168. };
  1169. static struct clk i2c2_fck = {
  1170. .name = "i2c_fck",
  1171. .id = 2,
  1172. .parent = &core_96m_fck,
  1173. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1174. .enable_bit = OMAP3430_EN_I2C2_SHIFT,
  1175. .flags = CLOCK_IN_OMAP343X,
  1176. .recalc = &followparent_recalc,
  1177. };
  1178. static struct clk i2c1_fck = {
  1179. .name = "i2c_fck",
  1180. .id = 1,
  1181. .parent = &core_96m_fck,
  1182. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1183. .enable_bit = OMAP3430_EN_I2C1_SHIFT,
  1184. .flags = CLOCK_IN_OMAP343X,
  1185. .recalc = &followparent_recalc,
  1186. };
  1187. /*
  1188. * MCBSP 1 & 5 get their 96MHz clock from core_96m_fck;
  1189. * MCBSP 2, 3, 4 get their 96MHz clock from per_96m_fck.
  1190. */
  1191. static const struct clksel_rate common_mcbsp_96m_rates[] = {
  1192. { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
  1193. { .div = 0 }
  1194. };
  1195. static const struct clksel_rate common_mcbsp_mcbsp_rates[] = {
  1196. { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
  1197. { .div = 0 }
  1198. };
  1199. static const struct clksel mcbsp_15_clksel[] = {
  1200. { .parent = &core_96m_fck, .rates = common_mcbsp_96m_rates },
  1201. { .parent = &mcbsp_clks, .rates = common_mcbsp_mcbsp_rates },
  1202. { .parent = NULL }
  1203. };
  1204. static struct clk mcbsp5_fck = {
  1205. .name = "mcbsp5_fck",
  1206. .init = &omap2_init_clksel_parent,
  1207. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1208. .enable_bit = OMAP3430_EN_MCBSP5_SHIFT,
  1209. .clksel_reg = OMAP343X_CTRL_REGADDR(OMAP343X_CONTROL_DEVCONF1),
  1210. .clksel_mask = OMAP2_MCBSP5_CLKS_MASK,
  1211. .clksel = mcbsp_15_clksel,
  1212. .flags = CLOCK_IN_OMAP343X,
  1213. .recalc = &omap2_clksel_recalc,
  1214. };
  1215. static struct clk mcbsp1_fck = {
  1216. .name = "mcbsp1_fck",
  1217. .init = &omap2_init_clksel_parent,
  1218. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1219. .enable_bit = OMAP3430_EN_MCBSP1_SHIFT,
  1220. .clksel_reg = OMAP343X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
  1221. .clksel_mask = OMAP2_MCBSP1_CLKS_MASK,
  1222. .clksel = mcbsp_15_clksel,
  1223. .flags = CLOCK_IN_OMAP343X,
  1224. .recalc = &omap2_clksel_recalc,
  1225. };
  1226. /* CORE_48M_FCK-derived clocks */
  1227. static struct clk core_48m_fck = {
  1228. .name = "core_48m_fck",
  1229. .parent = &omap_48m_fck,
  1230. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  1231. PARENT_CONTROLS_CLOCK,
  1232. .recalc = &followparent_recalc,
  1233. };
  1234. static struct clk mcspi4_fck = {
  1235. .name = "mcspi_fck",
  1236. .id = 4,
  1237. .parent = &core_48m_fck,
  1238. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1239. .enable_bit = OMAP3430_EN_MCSPI4_SHIFT,
  1240. .flags = CLOCK_IN_OMAP343X,
  1241. .recalc = &followparent_recalc,
  1242. };
  1243. static struct clk mcspi3_fck = {
  1244. .name = "mcspi_fck",
  1245. .id = 3,
  1246. .parent = &core_48m_fck,
  1247. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1248. .enable_bit = OMAP3430_EN_MCSPI3_SHIFT,
  1249. .flags = CLOCK_IN_OMAP343X,
  1250. .recalc = &followparent_recalc,
  1251. };
  1252. static struct clk mcspi2_fck = {
  1253. .name = "mcspi_fck",
  1254. .id = 2,
  1255. .parent = &core_48m_fck,
  1256. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1257. .enable_bit = OMAP3430_EN_MCSPI2_SHIFT,
  1258. .flags = CLOCK_IN_OMAP343X,
  1259. .recalc = &followparent_recalc,
  1260. };
  1261. static struct clk mcspi1_fck = {
  1262. .name = "mcspi_fck",
  1263. .id = 1,
  1264. .parent = &core_48m_fck,
  1265. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1266. .enable_bit = OMAP3430_EN_MCSPI1_SHIFT,
  1267. .flags = CLOCK_IN_OMAP343X,
  1268. .recalc = &followparent_recalc,
  1269. };
  1270. static struct clk uart2_fck = {
  1271. .name = "uart2_fck",
  1272. .parent = &core_48m_fck,
  1273. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1274. .enable_bit = OMAP3430_EN_UART2_SHIFT,
  1275. .flags = CLOCK_IN_OMAP343X,
  1276. .recalc = &followparent_recalc,
  1277. };
  1278. static struct clk uart1_fck = {
  1279. .name = "uart1_fck",
  1280. .parent = &core_48m_fck,
  1281. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1282. .enable_bit = OMAP3430_EN_UART1_SHIFT,
  1283. .flags = CLOCK_IN_OMAP343X,
  1284. .recalc = &followparent_recalc,
  1285. };
  1286. static struct clk fshostusb_fck = {
  1287. .name = "fshostusb_fck",
  1288. .parent = &core_48m_fck,
  1289. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1290. .enable_bit = OMAP3430ES1_EN_FSHOSTUSB_SHIFT,
  1291. .flags = CLOCK_IN_OMAP3430ES1,
  1292. .recalc = &followparent_recalc,
  1293. };
  1294. /* CORE_12M_FCK based clocks */
  1295. static struct clk core_12m_fck = {
  1296. .name = "core_12m_fck",
  1297. .parent = &omap_12m_fck,
  1298. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  1299. PARENT_CONTROLS_CLOCK,
  1300. .recalc = &followparent_recalc,
  1301. };
  1302. static struct clk hdq_fck = {
  1303. .name = "hdq_fck",
  1304. .parent = &core_12m_fck,
  1305. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1306. .enable_bit = OMAP3430_EN_HDQ_SHIFT,
  1307. .flags = CLOCK_IN_OMAP343X,
  1308. .recalc = &followparent_recalc,
  1309. };
  1310. /* DPLL3-derived clock */
  1311. static const struct clksel_rate ssi_ssr_corex2_rates[] = {
  1312. { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
  1313. { .div = 2, .val = 2, .flags = RATE_IN_343X },
  1314. { .div = 3, .val = 3, .flags = RATE_IN_343X },
  1315. { .div = 4, .val = 4, .flags = RATE_IN_343X },
  1316. { .div = 6, .val = 6, .flags = RATE_IN_343X },
  1317. { .div = 8, .val = 8, .flags = RATE_IN_343X },
  1318. { .div = 0 }
  1319. };
  1320. static const struct clksel ssi_ssr_clksel[] = {
  1321. { .parent = &corex2_fck, .rates = ssi_ssr_corex2_rates },
  1322. { .parent = NULL }
  1323. };
  1324. static struct clk ssi_ssr_fck = {
  1325. .name = "ssi_ssr_fck",
  1326. .init = &omap2_init_clksel_parent,
  1327. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
  1328. .enable_bit = OMAP3430_EN_SSI_SHIFT,
  1329. .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
  1330. .clksel_mask = OMAP3430_CLKSEL_SSI_MASK,
  1331. .clksel = ssi_ssr_clksel,
  1332. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
  1333. .recalc = &omap2_clksel_recalc,
  1334. };
  1335. static struct clk ssi_sst_fck = {
  1336. .name = "ssi_sst_fck",
  1337. .parent = &ssi_ssr_fck,
  1338. .fixed_div = 2,
  1339. .flags = CLOCK_IN_OMAP343X | PARENT_CONTROLS_CLOCK,
  1340. .recalc = &omap2_fixed_divisor_recalc,
  1341. };
  1342. /* CORE_L3_ICK based clocks */
  1343. static struct clk core_l3_ick = {
  1344. .name = "core_l3_ick",
  1345. .parent = &l3_ick,
  1346. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  1347. PARENT_CONTROLS_CLOCK,
  1348. .recalc = &followparent_recalc,
  1349. };
  1350. static struct clk hsotgusb_ick = {
  1351. .name = "hsotgusb_ick",
  1352. .parent = &core_l3_ick,
  1353. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1354. .enable_bit = OMAP3430_EN_HSOTGUSB_SHIFT,
  1355. .flags = CLOCK_IN_OMAP343X,
  1356. .recalc = &followparent_recalc,
  1357. };
  1358. static struct clk sdrc_ick = {
  1359. .name = "sdrc_ick",
  1360. .parent = &core_l3_ick,
  1361. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1362. .enable_bit = OMAP3430_EN_SDRC_SHIFT,
  1363. .flags = CLOCK_IN_OMAP343X | ENABLE_ON_INIT,
  1364. .recalc = &followparent_recalc,
  1365. };
  1366. static struct clk gpmc_fck = {
  1367. .name = "gpmc_fck",
  1368. .parent = &core_l3_ick,
  1369. .flags = CLOCK_IN_OMAP343X | PARENT_CONTROLS_CLOCK |
  1370. ENABLE_ON_INIT,
  1371. .recalc = &followparent_recalc,
  1372. };
  1373. /* SECURITY_L3_ICK based clocks */
  1374. static struct clk security_l3_ick = {
  1375. .name = "security_l3_ick",
  1376. .parent = &l3_ick,
  1377. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  1378. PARENT_CONTROLS_CLOCK,
  1379. .recalc = &followparent_recalc,
  1380. };
  1381. static struct clk pka_ick = {
  1382. .name = "pka_ick",
  1383. .parent = &security_l3_ick,
  1384. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
  1385. .enable_bit = OMAP3430_EN_PKA_SHIFT,
  1386. .flags = CLOCK_IN_OMAP343X,
  1387. .recalc = &followparent_recalc,
  1388. };
  1389. /* CORE_L4_ICK based clocks */
  1390. static struct clk core_l4_ick = {
  1391. .name = "core_l4_ick",
  1392. .parent = &l4_ick,
  1393. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  1394. PARENT_CONTROLS_CLOCK,
  1395. .recalc = &followparent_recalc,
  1396. };
  1397. static struct clk usbtll_ick = {
  1398. .name = "usbtll_ick",
  1399. .parent = &core_l4_ick,
  1400. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
  1401. .enable_bit = OMAP3430ES2_EN_USBTLL_SHIFT,
  1402. .flags = CLOCK_IN_OMAP3430ES2,
  1403. .recalc = &followparent_recalc,
  1404. };
  1405. static struct clk mmchs3_ick = {
  1406. .name = "mmchs_ick",
  1407. .id = 3,
  1408. .parent = &core_l4_ick,
  1409. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1410. .enable_bit = OMAP3430ES2_EN_MMC3_SHIFT,
  1411. .flags = CLOCK_IN_OMAP3430ES2,
  1412. .recalc = &followparent_recalc,
  1413. };
  1414. /* Intersystem Communication Registers - chassis mode only */
  1415. static struct clk icr_ick = {
  1416. .name = "icr_ick",
  1417. .parent = &core_l4_ick,
  1418. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1419. .enable_bit = OMAP3430_EN_ICR_SHIFT,
  1420. .flags = CLOCK_IN_OMAP343X,
  1421. .recalc = &followparent_recalc,
  1422. };
  1423. static struct clk aes2_ick = {
  1424. .name = "aes2_ick",
  1425. .parent = &core_l4_ick,
  1426. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1427. .enable_bit = OMAP3430_EN_AES2_SHIFT,
  1428. .flags = CLOCK_IN_OMAP343X,
  1429. .recalc = &followparent_recalc,
  1430. };
  1431. static struct clk sha12_ick = {
  1432. .name = "sha12_ick",
  1433. .parent = &core_l4_ick,
  1434. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1435. .enable_bit = OMAP3430_EN_SHA12_SHIFT,
  1436. .flags = CLOCK_IN_OMAP343X,
  1437. .recalc = &followparent_recalc,
  1438. };
  1439. static struct clk des2_ick = {
  1440. .name = "des2_ick",
  1441. .parent = &core_l4_ick,
  1442. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1443. .enable_bit = OMAP3430_EN_DES2_SHIFT,
  1444. .flags = CLOCK_IN_OMAP343X,
  1445. .recalc = &followparent_recalc,
  1446. };
  1447. static struct clk mmchs2_ick = {
  1448. .name = "mmchs_ick",
  1449. .id = 2,
  1450. .parent = &core_l4_ick,
  1451. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1452. .enable_bit = OMAP3430_EN_MMC2_SHIFT,
  1453. .flags = CLOCK_IN_OMAP343X,
  1454. .recalc = &followparent_recalc,
  1455. };
  1456. static struct clk mmchs1_ick = {
  1457. .name = "mmchs_ick",
  1458. .id = 1,
  1459. .parent = &core_l4_ick,
  1460. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1461. .enable_bit = OMAP3430_EN_MMC1_SHIFT,
  1462. .flags = CLOCK_IN_OMAP343X,
  1463. .recalc = &followparent_recalc,
  1464. };
  1465. static struct clk mspro_ick = {
  1466. .name = "mspro_ick",
  1467. .parent = &core_l4_ick,
  1468. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1469. .enable_bit = OMAP3430_EN_MSPRO_SHIFT,
  1470. .flags = CLOCK_IN_OMAP343X,
  1471. .recalc = &followparent_recalc,
  1472. };
  1473. static struct clk hdq_ick = {
  1474. .name = "hdq_ick",
  1475. .parent = &core_l4_ick,
  1476. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1477. .enable_bit = OMAP3430_EN_HDQ_SHIFT,
  1478. .flags = CLOCK_IN_OMAP343X,
  1479. .recalc = &followparent_recalc,
  1480. };
  1481. static struct clk mcspi4_ick = {
  1482. .name = "mcspi_ick",
  1483. .id = 4,
  1484. .parent = &core_l4_ick,
  1485. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1486. .enable_bit = OMAP3430_EN_MCSPI4_SHIFT,
  1487. .flags = CLOCK_IN_OMAP343X,
  1488. .recalc = &followparent_recalc,
  1489. };
  1490. static struct clk mcspi3_ick = {
  1491. .name = "mcspi_ick",
  1492. .id = 3,
  1493. .parent = &core_l4_ick,
  1494. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1495. .enable_bit = OMAP3430_EN_MCSPI3_SHIFT,
  1496. .flags = CLOCK_IN_OMAP343X,
  1497. .recalc = &followparent_recalc,
  1498. };
  1499. static struct clk mcspi2_ick = {
  1500. .name = "mcspi_ick",
  1501. .id = 2,
  1502. .parent = &core_l4_ick,
  1503. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1504. .enable_bit = OMAP3430_EN_MCSPI2_SHIFT,
  1505. .flags = CLOCK_IN_OMAP343X,
  1506. .recalc = &followparent_recalc,
  1507. };
  1508. static struct clk mcspi1_ick = {
  1509. .name = "mcspi_ick",
  1510. .id = 1,
  1511. .parent = &core_l4_ick,
  1512. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1513. .enable_bit = OMAP3430_EN_MCSPI1_SHIFT,
  1514. .flags = CLOCK_IN_OMAP343X,
  1515. .recalc = &followparent_recalc,
  1516. };
  1517. static struct clk i2c3_ick = {
  1518. .name = "i2c_ick",
  1519. .id = 3,
  1520. .parent = &core_l4_ick,
  1521. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1522. .enable_bit = OMAP3430_EN_I2C3_SHIFT,
  1523. .flags = CLOCK_IN_OMAP343X,
  1524. .recalc = &followparent_recalc,
  1525. };
  1526. static struct clk i2c2_ick = {
  1527. .name = "i2c_ick",
  1528. .id = 2,
  1529. .parent = &core_l4_ick,
  1530. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1531. .enable_bit = OMAP3430_EN_I2C2_SHIFT,
  1532. .flags = CLOCK_IN_OMAP343X,
  1533. .recalc = &followparent_recalc,
  1534. };
  1535. static struct clk i2c1_ick = {
  1536. .name = "i2c_ick",
  1537. .id = 1,
  1538. .parent = &core_l4_ick,
  1539. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1540. .enable_bit = OMAP3430_EN_I2C1_SHIFT,
  1541. .flags = CLOCK_IN_OMAP343X,
  1542. .recalc = &followparent_recalc,
  1543. };
  1544. static struct clk uart2_ick = {
  1545. .name = "uart2_ick",
  1546. .parent = &core_l4_ick,
  1547. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1548. .enable_bit = OMAP3430_EN_UART2_SHIFT,
  1549. .flags = CLOCK_IN_OMAP343X,
  1550. .recalc = &followparent_recalc,
  1551. };
  1552. static struct clk uart1_ick = {
  1553. .name = "uart1_ick",
  1554. .parent = &core_l4_ick,
  1555. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1556. .enable_bit = OMAP3430_EN_UART1_SHIFT,
  1557. .flags = CLOCK_IN_OMAP343X,
  1558. .recalc = &followparent_recalc,
  1559. };
  1560. static struct clk gpt11_ick = {
  1561. .name = "gpt11_ick",
  1562. .parent = &core_l4_ick,
  1563. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1564. .enable_bit = OMAP3430_EN_GPT11_SHIFT,
  1565. .flags = CLOCK_IN_OMAP343X,
  1566. .recalc = &followparent_recalc,
  1567. };
  1568. static struct clk gpt10_ick = {
  1569. .name = "gpt10_ick",
  1570. .parent = &core_l4_ick,
  1571. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1572. .enable_bit = OMAP3430_EN_GPT10_SHIFT,
  1573. .flags = CLOCK_IN_OMAP343X,
  1574. .recalc = &followparent_recalc,
  1575. };
  1576. static struct clk mcbsp5_ick = {
  1577. .name = "mcbsp5_ick",
  1578. .parent = &core_l4_ick,
  1579. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1580. .enable_bit = OMAP3430_EN_MCBSP5_SHIFT,
  1581. .flags = CLOCK_IN_OMAP343X,
  1582. .recalc = &followparent_recalc,
  1583. };
  1584. static struct clk mcbsp1_ick = {
  1585. .name = "mcbsp1_ick",
  1586. .parent = &core_l4_ick,
  1587. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1588. .enable_bit = OMAP3430_EN_MCBSP1_SHIFT,
  1589. .flags = CLOCK_IN_OMAP343X,
  1590. .recalc = &followparent_recalc,
  1591. };
  1592. static struct clk fac_ick = {
  1593. .name = "fac_ick",
  1594. .parent = &core_l4_ick,
  1595. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1596. .enable_bit = OMAP3430ES1_EN_FAC_SHIFT,
  1597. .flags = CLOCK_IN_OMAP3430ES1,
  1598. .recalc = &followparent_recalc,
  1599. };
  1600. static struct clk mailboxes_ick = {
  1601. .name = "mailboxes_ick",
  1602. .parent = &core_l4_ick,
  1603. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1604. .enable_bit = OMAP3430_EN_MAILBOXES_SHIFT,
  1605. .flags = CLOCK_IN_OMAP343X,
  1606. .recalc = &followparent_recalc,
  1607. };
  1608. static struct clk omapctrl_ick = {
  1609. .name = "omapctrl_ick",
  1610. .parent = &core_l4_ick,
  1611. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1612. .enable_bit = OMAP3430_EN_OMAPCTRL_SHIFT,
  1613. .flags = CLOCK_IN_OMAP343X | ENABLE_ON_INIT,
  1614. .recalc = &followparent_recalc,
  1615. };
  1616. /* SSI_L4_ICK based clocks */
  1617. static struct clk ssi_l4_ick = {
  1618. .name = "ssi_l4_ick",
  1619. .parent = &l4_ick,
  1620. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  1621. PARENT_CONTROLS_CLOCK,
  1622. .recalc = &followparent_recalc,
  1623. };
  1624. static struct clk ssi_ick = {
  1625. .name = "ssi_ick",
  1626. .parent = &ssi_l4_ick,
  1627. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1628. .enable_bit = OMAP3430_EN_SSI_SHIFT,
  1629. .flags = CLOCK_IN_OMAP343X,
  1630. .recalc = &followparent_recalc,
  1631. };
  1632. /* REVISIT: Technically the TRM claims that this is CORE_CLK based,
  1633. * but l4_ick makes more sense to me */
  1634. static const struct clksel usb_l4_clksel[] = {
  1635. { .parent = &l4_ick, .rates = div2_rates },
  1636. { .parent = NULL },
  1637. };
  1638. static struct clk usb_l4_ick = {
  1639. .name = "usb_l4_ick",
  1640. .parent = &l4_ick,
  1641. .init = &omap2_init_clksel_parent,
  1642. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
  1643. .enable_bit = OMAP3430ES1_EN_FSHOSTUSB_SHIFT,
  1644. .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
  1645. .clksel_mask = OMAP3430ES1_CLKSEL_FSHOSTUSB_MASK,
  1646. .clksel = usb_l4_clksel,
  1647. .flags = CLOCK_IN_OMAP3430ES1,
  1648. .recalc = &omap2_clksel_recalc,
  1649. };
  1650. /* XXX MDM_INTC_ICK, SAD2D_ICK ?? */
  1651. /* SECURITY_L4_ICK2 based clocks */
  1652. static struct clk security_l4_ick2 = {
  1653. .name = "security_l4_ick2",
  1654. .parent = &l4_ick,
  1655. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  1656. PARENT_CONTROLS_CLOCK,
  1657. .recalc = &followparent_recalc,
  1658. };
  1659. static struct clk aes1_ick = {
  1660. .name = "aes1_ick",
  1661. .parent = &security_l4_ick2,
  1662. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
  1663. .enable_bit = OMAP3430_EN_AES1_SHIFT,
  1664. .flags = CLOCK_IN_OMAP343X,
  1665. .recalc = &followparent_recalc,
  1666. };
  1667. static struct clk rng_ick = {
  1668. .name = "rng_ick",
  1669. .parent = &security_l4_ick2,
  1670. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
  1671. .enable_bit = OMAP3430_EN_RNG_SHIFT,
  1672. .flags = CLOCK_IN_OMAP343X,
  1673. .recalc = &followparent_recalc,
  1674. };
  1675. static struct clk sha11_ick = {
  1676. .name = "sha11_ick",
  1677. .parent = &security_l4_ick2,
  1678. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
  1679. .enable_bit = OMAP3430_EN_SHA11_SHIFT,
  1680. .flags = CLOCK_IN_OMAP343X,
  1681. .recalc = &followparent_recalc,
  1682. };
  1683. static struct clk des1_ick = {
  1684. .name = "des1_ick",
  1685. .parent = &security_l4_ick2,
  1686. .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
  1687. .enable_bit = OMAP3430_EN_DES1_SHIFT,
  1688. .flags = CLOCK_IN_OMAP343X,
  1689. .recalc = &followparent_recalc,
  1690. };
  1691. /* DSS */
  1692. static const struct clksel dss1_alwon_fck_clksel[] = {
  1693. { .parent = &sys_ck, .rates = dpll_bypass_rates },
  1694. { .parent = &dpll4_m4x2_ck, .rates = dpll_locked_rates },
  1695. { .parent = NULL }
  1696. };
  1697. static struct clk dss1_alwon_fck = {
  1698. .name = "dss1_alwon_fck",
  1699. .parent = &dpll4_m4x2_ck,
  1700. .init = &omap2_init_clksel_parent,
  1701. .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN),
  1702. .enable_bit = OMAP3430_EN_DSS1_SHIFT,
  1703. .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
  1704. .clksel_mask = OMAP3430_ST_PERIPH_CLK,
  1705. .clksel = dss1_alwon_fck_clksel,
  1706. .flags = CLOCK_IN_OMAP343X,
  1707. .recalc = &omap2_clksel_recalc,
  1708. };
  1709. static struct clk dss_tv_fck = {
  1710. .name = "dss_tv_fck",
  1711. .parent = &omap_54m_fck,
  1712. .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN),
  1713. .enable_bit = OMAP3430_EN_TV_SHIFT,
  1714. .flags = CLOCK_IN_OMAP343X,
  1715. .recalc = &followparent_recalc,
  1716. };
  1717. static struct clk dss_96m_fck = {
  1718. .name = "dss_96m_fck",
  1719. .parent = &omap_96m_fck,
  1720. .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN),
  1721. .enable_bit = OMAP3430_EN_TV_SHIFT,
  1722. .flags = CLOCK_IN_OMAP343X,
  1723. .recalc = &followparent_recalc,
  1724. };
  1725. static struct clk dss2_alwon_fck = {
  1726. .name = "dss2_alwon_fck",
  1727. .parent = &sys_ck,
  1728. .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN),
  1729. .enable_bit = OMAP3430_EN_DSS2_SHIFT,
  1730. .flags = CLOCK_IN_OMAP343X,
  1731. .recalc = &followparent_recalc,
  1732. };
  1733. static struct clk dss_ick = {
  1734. /* Handles both L3 and L4 clocks */
  1735. .name = "dss_ick",
  1736. .parent = &l4_ick,
  1737. .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_ICLKEN),
  1738. .enable_bit = OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT,
  1739. .flags = CLOCK_IN_OMAP343X,
  1740. .recalc = &followparent_recalc,
  1741. };
  1742. /* CAM */
  1743. static const struct clksel cam_mclk_clksel[] = {
  1744. { .parent = &sys_ck, .rates = dpll_bypass_rates },
  1745. { .parent = &dpll4_m5x2_ck, .rates = dpll_locked_rates },
  1746. { .parent = NULL }
  1747. };
  1748. static struct clk cam_mclk = {
  1749. .name = "cam_mclk",
  1750. .parent = &dpll4_m5x2_ck,
  1751. .init = &omap2_init_clksel_parent,
  1752. .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST),
  1753. .clksel_mask = OMAP3430_ST_PERIPH_CLK,
  1754. .clksel = cam_mclk_clksel,
  1755. .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_FCLKEN),
  1756. .enable_bit = OMAP3430_EN_CAM_SHIFT,
  1757. .flags = CLOCK_IN_OMAP343X,
  1758. .recalc = &omap2_clksel_recalc,
  1759. };
  1760. static struct clk cam_l3_ick = {
  1761. .name = "cam_l3_ick",
  1762. .parent = &l3_ick,
  1763. .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_ICLKEN),
  1764. .enable_bit = OMAP3430_EN_CAM_SHIFT,
  1765. .flags = CLOCK_IN_OMAP343X,
  1766. .recalc = &followparent_recalc,
  1767. };
  1768. static struct clk cam_l4_ick = {
  1769. .name = "cam_l4_ick",
  1770. .parent = &l4_ick,
  1771. .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_ICLKEN),
  1772. .enable_bit = OMAP3430_EN_CAM_SHIFT,
  1773. .flags = CLOCK_IN_OMAP343X,
  1774. .recalc = &followparent_recalc,
  1775. };
  1776. /* USBHOST - 3430ES2 only */
  1777. static struct clk usbhost_120m_fck = {
  1778. .name = "usbhost_120m_fck",
  1779. .parent = &omap_120m_fck,
  1780. .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_FCLKEN),
  1781. .enable_bit = OMAP3430ES2_EN_USBHOST2_SHIFT,
  1782. .flags = CLOCK_IN_OMAP3430ES2,
  1783. .recalc = &followparent_recalc,
  1784. };
  1785. static struct clk usbhost_48m_fck = {
  1786. .name = "usbhost_48m_fck",
  1787. .parent = &omap_48m_fck,
  1788. .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_FCLKEN),
  1789. .enable_bit = OMAP3430ES2_EN_USBHOST1_SHIFT,
  1790. .flags = CLOCK_IN_OMAP3430ES2,
  1791. .recalc = &followparent_recalc,
  1792. };
  1793. static struct clk usbhost_l3_ick = {
  1794. .name = "usbhost_l3_ick",
  1795. .parent = &l3_ick,
  1796. .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_ICLKEN),
  1797. .enable_bit = OMAP3430ES2_EN_USBHOST_SHIFT,
  1798. .flags = CLOCK_IN_OMAP3430ES2,
  1799. .recalc = &followparent_recalc,
  1800. };
  1801. static struct clk usbhost_l4_ick = {
  1802. .name = "usbhost_l4_ick",
  1803. .parent = &l4_ick,
  1804. .enable_reg = OMAP_CM_REGADDR(OMAP3430ES2_USBHOST_MOD, CM_ICLKEN),
  1805. .enable_bit = OMAP3430ES2_EN_USBHOST_SHIFT,
  1806. .flags = CLOCK_IN_OMAP3430ES2,
  1807. .recalc = &followparent_recalc,
  1808. };
  1809. static struct clk usbhost_sar_fck = {
  1810. .name = "usbhost_sar_fck",
  1811. .parent = &osc_sys_ck,
  1812. .enable_reg = OMAP_PRM_REGADDR(OMAP3430ES2_USBHOST_MOD, PM_PWSTCTRL),
  1813. .enable_bit = OMAP3430ES2_SAVEANDRESTORE_SHIFT,
  1814. .flags = CLOCK_IN_OMAP3430ES2,
  1815. .recalc = &followparent_recalc,
  1816. };
  1817. /* WKUP */
  1818. static const struct clksel_rate usim_96m_rates[] = {
  1819. { .div = 2, .val = 3, .flags = RATE_IN_343X | DEFAULT_RATE },
  1820. { .div = 4, .val = 4, .flags = RATE_IN_343X },
  1821. { .div = 8, .val = 5, .flags = RATE_IN_343X },
  1822. { .div = 10, .val = 6, .flags = RATE_IN_343X },
  1823. { .div = 0 },
  1824. };
  1825. static const struct clksel_rate usim_120m_rates[] = {
  1826. { .div = 4, .val = 7, .flags = RATE_IN_343X | DEFAULT_RATE },
  1827. { .div = 8, .val = 8, .flags = RATE_IN_343X },
  1828. { .div = 16, .val = 9, .flags = RATE_IN_343X },
  1829. { .div = 20, .val = 10, .flags = RATE_IN_343X },
  1830. { .div = 0 },
  1831. };
  1832. static const struct clksel usim_clksel[] = {
  1833. { .parent = &omap_96m_fck, .rates = usim_96m_rates },
  1834. { .parent = &omap_120m_fck, .rates = usim_120m_rates },
  1835. { .parent = &sys_ck, .rates = div2_rates },
  1836. { .parent = NULL },
  1837. };
  1838. /* 3430ES2 only */
  1839. static struct clk usim_fck = {
  1840. .name = "usim_fck",
  1841. .init = &omap2_init_clksel_parent,
  1842. .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
  1843. .enable_bit = OMAP3430ES2_EN_USIMOCP_SHIFT,
  1844. .clksel_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_CLKSEL),
  1845. .clksel_mask = OMAP3430ES2_CLKSEL_USIMOCP_MASK,
  1846. .clksel = usim_clksel,
  1847. .flags = CLOCK_IN_OMAP3430ES2,
  1848. .recalc = &omap2_clksel_recalc,
  1849. };
  1850. static struct clk gpt1_fck = {
  1851. .name = "gpt1_fck",
  1852. .init = &omap2_init_clksel_parent,
  1853. .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
  1854. .enable_bit = OMAP3430_EN_GPT1_SHIFT,
  1855. .clksel_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_CLKSEL),
  1856. .clksel_mask = OMAP3430_CLKSEL_GPT1_MASK,
  1857. .clksel = omap343x_gpt_clksel,
  1858. .flags = CLOCK_IN_OMAP343X,
  1859. .recalc = &omap2_clksel_recalc,
  1860. };
  1861. static struct clk wkup_32k_fck = {
  1862. .name = "wkup_32k_fck",
  1863. .parent = &omap_32k_fck,
  1864. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
  1865. .recalc = &followparent_recalc,
  1866. };
  1867. static struct clk gpio1_fck = {
  1868. .name = "gpio1_fck",
  1869. .parent = &wkup_32k_fck,
  1870. .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
  1871. .enable_bit = OMAP3430_EN_GPIO1_SHIFT,
  1872. .flags = CLOCK_IN_OMAP343X,
  1873. .recalc = &followparent_recalc,
  1874. };
  1875. static struct clk wdt2_fck = {
  1876. .name = "wdt2_fck",
  1877. .parent = &wkup_32k_fck,
  1878. .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
  1879. .enable_bit = OMAP3430_EN_WDT2_SHIFT,
  1880. .flags = CLOCK_IN_OMAP343X,
  1881. .recalc = &followparent_recalc,
  1882. };
  1883. static struct clk wkup_l4_ick = {
  1884. .name = "wkup_l4_ick",
  1885. .parent = &sys_ck,
  1886. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
  1887. .recalc = &followparent_recalc,
  1888. };
  1889. /* 3430ES2 only */
  1890. /* Never specifically named in the TRM, so we have to infer a likely name */
  1891. static struct clk usim_ick = {
  1892. .name = "usim_ick",
  1893. .parent = &wkup_l4_ick,
  1894. .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
  1895. .enable_bit = OMAP3430ES2_EN_USIMOCP_SHIFT,
  1896. .flags = CLOCK_IN_OMAP3430ES2,
  1897. .recalc = &followparent_recalc,
  1898. };
  1899. static struct clk wdt2_ick = {
  1900. .name = "wdt2_ick",
  1901. .parent = &wkup_l4_ick,
  1902. .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
  1903. .enable_bit = OMAP3430_EN_WDT2_SHIFT,
  1904. .flags = CLOCK_IN_OMAP343X,
  1905. .recalc = &followparent_recalc,
  1906. };
  1907. static struct clk wdt1_ick = {
  1908. .name = "wdt1_ick",
  1909. .parent = &wkup_l4_ick,
  1910. .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
  1911. .enable_bit = OMAP3430_EN_WDT1_SHIFT,
  1912. .flags = CLOCK_IN_OMAP343X,
  1913. .recalc = &followparent_recalc,
  1914. };
  1915. static struct clk gpio1_ick = {
  1916. .name = "gpio1_ick",
  1917. .parent = &wkup_l4_ick,
  1918. .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
  1919. .enable_bit = OMAP3430_EN_GPIO1_SHIFT,
  1920. .flags = CLOCK_IN_OMAP343X,
  1921. .recalc = &followparent_recalc,
  1922. };
  1923. static struct clk omap_32ksync_ick = {
  1924. .name = "omap_32ksync_ick",
  1925. .parent = &wkup_l4_ick,
  1926. .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
  1927. .enable_bit = OMAP3430_EN_32KSYNC_SHIFT,
  1928. .flags = CLOCK_IN_OMAP343X,
  1929. .recalc = &followparent_recalc,
  1930. };
  1931. static struct clk gpt12_ick = {
  1932. .name = "gpt12_ick",
  1933. .parent = &wkup_l4_ick,
  1934. .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
  1935. .enable_bit = OMAP3430_EN_GPT12_SHIFT,
  1936. .flags = CLOCK_IN_OMAP343X,
  1937. .recalc = &followparent_recalc,
  1938. };
  1939. static struct clk gpt1_ick = {
  1940. .name = "gpt1_ick",
  1941. .parent = &wkup_l4_ick,
  1942. .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
  1943. .enable_bit = OMAP3430_EN_GPT1_SHIFT,
  1944. .flags = CLOCK_IN_OMAP343X,
  1945. .recalc = &followparent_recalc,
  1946. };
  1947. /* PER clock domain */
  1948. static struct clk per_96m_fck = {
  1949. .name = "per_96m_fck",
  1950. .parent = &omap_96m_alwon_fck,
  1951. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  1952. PARENT_CONTROLS_CLOCK,
  1953. .recalc = &followparent_recalc,
  1954. };
  1955. static struct clk per_48m_fck = {
  1956. .name = "per_48m_fck",
  1957. .parent = &omap_48m_fck,
  1958. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  1959. PARENT_CONTROLS_CLOCK,
  1960. .recalc = &followparent_recalc,
  1961. };
  1962. static struct clk uart3_fck = {
  1963. .name = "uart3_fck",
  1964. .parent = &per_48m_fck,
  1965. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  1966. .enable_bit = OMAP3430_EN_UART3_SHIFT,
  1967. .flags = CLOCK_IN_OMAP343X,
  1968. .recalc = &followparent_recalc,
  1969. };
  1970. static struct clk gpt2_fck = {
  1971. .name = "gpt2_fck",
  1972. .init = &omap2_init_clksel_parent,
  1973. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  1974. .enable_bit = OMAP3430_EN_GPT2_SHIFT,
  1975. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
  1976. .clksel_mask = OMAP3430_CLKSEL_GPT2_MASK,
  1977. .clksel = omap343x_gpt_clksel,
  1978. .flags = CLOCK_IN_OMAP343X,
  1979. .recalc = &omap2_clksel_recalc,
  1980. };
  1981. static struct clk gpt3_fck = {
  1982. .name = "gpt3_fck",
  1983. .init = &omap2_init_clksel_parent,
  1984. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  1985. .enable_bit = OMAP3430_EN_GPT3_SHIFT,
  1986. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
  1987. .clksel_mask = OMAP3430_CLKSEL_GPT3_MASK,
  1988. .clksel = omap343x_gpt_clksel,
  1989. .flags = CLOCK_IN_OMAP343X,
  1990. .recalc = &omap2_clksel_recalc,
  1991. };
  1992. static struct clk gpt4_fck = {
  1993. .name = "gpt4_fck",
  1994. .init = &omap2_init_clksel_parent,
  1995. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  1996. .enable_bit = OMAP3430_EN_GPT4_SHIFT,
  1997. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
  1998. .clksel_mask = OMAP3430_CLKSEL_GPT4_MASK,
  1999. .clksel = omap343x_gpt_clksel,
  2000. .flags = CLOCK_IN_OMAP343X,
  2001. .recalc = &omap2_clksel_recalc,
  2002. };
  2003. static struct clk gpt5_fck = {
  2004. .name = "gpt5_fck",
  2005. .init = &omap2_init_clksel_parent,
  2006. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  2007. .enable_bit = OMAP3430_EN_GPT5_SHIFT,
  2008. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
  2009. .clksel_mask = OMAP3430_CLKSEL_GPT5_MASK,
  2010. .clksel = omap343x_gpt_clksel,
  2011. .flags = CLOCK_IN_OMAP343X,
  2012. .recalc = &omap2_clksel_recalc,
  2013. };
  2014. static struct clk gpt6_fck = {
  2015. .name = "gpt6_fck",
  2016. .init = &omap2_init_clksel_parent,
  2017. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  2018. .enable_bit = OMAP3430_EN_GPT6_SHIFT,
  2019. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
  2020. .clksel_mask = OMAP3430_CLKSEL_GPT6_MASK,
  2021. .clksel = omap343x_gpt_clksel,
  2022. .flags = CLOCK_IN_OMAP343X,
  2023. .recalc = &omap2_clksel_recalc,
  2024. };
  2025. static struct clk gpt7_fck = {
  2026. .name = "gpt7_fck",
  2027. .init = &omap2_init_clksel_parent,
  2028. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  2029. .enable_bit = OMAP3430_EN_GPT7_SHIFT,
  2030. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
  2031. .clksel_mask = OMAP3430_CLKSEL_GPT7_MASK,
  2032. .clksel = omap343x_gpt_clksel,
  2033. .flags = CLOCK_IN_OMAP343X,
  2034. .recalc = &omap2_clksel_recalc,
  2035. };
  2036. static struct clk gpt8_fck = {
  2037. .name = "gpt8_fck",
  2038. .init = &omap2_init_clksel_parent,
  2039. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  2040. .enable_bit = OMAP3430_EN_GPT8_SHIFT,
  2041. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
  2042. .clksel_mask = OMAP3430_CLKSEL_GPT8_MASK,
  2043. .clksel = omap343x_gpt_clksel,
  2044. .flags = CLOCK_IN_OMAP343X,
  2045. .recalc = &omap2_clksel_recalc,
  2046. };
  2047. static struct clk gpt9_fck = {
  2048. .name = "gpt9_fck",
  2049. .init = &omap2_init_clksel_parent,
  2050. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  2051. .enable_bit = OMAP3430_EN_GPT9_SHIFT,
  2052. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_CLKSEL),
  2053. .clksel_mask = OMAP3430_CLKSEL_GPT9_MASK,
  2054. .clksel = omap343x_gpt_clksel,
  2055. .flags = CLOCK_IN_OMAP343X,
  2056. .recalc = &omap2_clksel_recalc,
  2057. };
  2058. static struct clk per_32k_alwon_fck = {
  2059. .name = "per_32k_alwon_fck",
  2060. .parent = &omap_32k_fck,
  2061. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
  2062. .recalc = &followparent_recalc,
  2063. };
  2064. static struct clk gpio6_fck = {
  2065. .name = "gpio6_fck",
  2066. .parent = &per_32k_alwon_fck,
  2067. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  2068. .enable_bit = OMAP3430_EN_GPIO6_SHIFT,
  2069. .flags = CLOCK_IN_OMAP343X,
  2070. .recalc = &followparent_recalc,
  2071. };
  2072. static struct clk gpio5_fck = {
  2073. .name = "gpio5_fck",
  2074. .parent = &per_32k_alwon_fck,
  2075. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  2076. .enable_bit = OMAP3430_EN_GPIO5_SHIFT,
  2077. .flags = CLOCK_IN_OMAP343X,
  2078. .recalc = &followparent_recalc,
  2079. };
  2080. static struct clk gpio4_fck = {
  2081. .name = "gpio4_fck",
  2082. .parent = &per_32k_alwon_fck,
  2083. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  2084. .enable_bit = OMAP3430_EN_GPIO4_SHIFT,
  2085. .flags = CLOCK_IN_OMAP343X,
  2086. .recalc = &followparent_recalc,
  2087. };
  2088. static struct clk gpio3_fck = {
  2089. .name = "gpio3_fck",
  2090. .parent = &per_32k_alwon_fck,
  2091. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  2092. .enable_bit = OMAP3430_EN_GPIO3_SHIFT,
  2093. .flags = CLOCK_IN_OMAP343X,
  2094. .recalc = &followparent_recalc,
  2095. };
  2096. static struct clk gpio2_fck = {
  2097. .name = "gpio2_fck",
  2098. .parent = &per_32k_alwon_fck,
  2099. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  2100. .enable_bit = OMAP3430_EN_GPIO2_SHIFT,
  2101. .flags = CLOCK_IN_OMAP343X,
  2102. .recalc = &followparent_recalc,
  2103. };
  2104. static struct clk wdt3_fck = {
  2105. .name = "wdt3_fck",
  2106. .parent = &per_32k_alwon_fck,
  2107. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  2108. .enable_bit = OMAP3430_EN_WDT3_SHIFT,
  2109. .flags = CLOCK_IN_OMAP343X,
  2110. .recalc = &followparent_recalc,
  2111. };
  2112. static struct clk per_l4_ick = {
  2113. .name = "per_l4_ick",
  2114. .parent = &l4_ick,
  2115. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES |
  2116. PARENT_CONTROLS_CLOCK,
  2117. .recalc = &followparent_recalc,
  2118. };
  2119. static struct clk gpio6_ick = {
  2120. .name = "gpio6_ick",
  2121. .parent = &per_l4_ick,
  2122. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2123. .enable_bit = OMAP3430_EN_GPIO6_SHIFT,
  2124. .flags = CLOCK_IN_OMAP343X,
  2125. .recalc = &followparent_recalc,
  2126. };
  2127. static struct clk gpio5_ick = {
  2128. .name = "gpio5_ick",
  2129. .parent = &per_l4_ick,
  2130. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2131. .enable_bit = OMAP3430_EN_GPIO5_SHIFT,
  2132. .flags = CLOCK_IN_OMAP343X,
  2133. .recalc = &followparent_recalc,
  2134. };
  2135. static struct clk gpio4_ick = {
  2136. .name = "gpio4_ick",
  2137. .parent = &per_l4_ick,
  2138. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2139. .enable_bit = OMAP3430_EN_GPIO4_SHIFT,
  2140. .flags = CLOCK_IN_OMAP343X,
  2141. .recalc = &followparent_recalc,
  2142. };
  2143. static struct clk gpio3_ick = {
  2144. .name = "gpio3_ick",
  2145. .parent = &per_l4_ick,
  2146. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2147. .enable_bit = OMAP3430_EN_GPIO3_SHIFT,
  2148. .flags = CLOCK_IN_OMAP343X,
  2149. .recalc = &followparent_recalc,
  2150. };
  2151. static struct clk gpio2_ick = {
  2152. .name = "gpio2_ick",
  2153. .parent = &per_l4_ick,
  2154. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2155. .enable_bit = OMAP3430_EN_GPIO2_SHIFT,
  2156. .flags = CLOCK_IN_OMAP343X,
  2157. .recalc = &followparent_recalc,
  2158. };
  2159. static struct clk wdt3_ick = {
  2160. .name = "wdt3_ick",
  2161. .parent = &per_l4_ick,
  2162. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2163. .enable_bit = OMAP3430_EN_WDT3_SHIFT,
  2164. .flags = CLOCK_IN_OMAP343X,
  2165. .recalc = &followparent_recalc,
  2166. };
  2167. static struct clk uart3_ick = {
  2168. .name = "uart3_ick",
  2169. .parent = &per_l4_ick,
  2170. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2171. .enable_bit = OMAP3430_EN_UART3_SHIFT,
  2172. .flags = CLOCK_IN_OMAP343X,
  2173. .recalc = &followparent_recalc,
  2174. };
  2175. static struct clk gpt9_ick = {
  2176. .name = "gpt9_ick",
  2177. .parent = &per_l4_ick,
  2178. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2179. .enable_bit = OMAP3430_EN_GPT9_SHIFT,
  2180. .flags = CLOCK_IN_OMAP343X,
  2181. .recalc = &followparent_recalc,
  2182. };
  2183. static struct clk gpt8_ick = {
  2184. .name = "gpt8_ick",
  2185. .parent = &per_l4_ick,
  2186. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2187. .enable_bit = OMAP3430_EN_GPT8_SHIFT,
  2188. .flags = CLOCK_IN_OMAP343X,
  2189. .recalc = &followparent_recalc,
  2190. };
  2191. static struct clk gpt7_ick = {
  2192. .name = "gpt7_ick",
  2193. .parent = &per_l4_ick,
  2194. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2195. .enable_bit = OMAP3430_EN_GPT7_SHIFT,
  2196. .flags = CLOCK_IN_OMAP343X,
  2197. .recalc = &followparent_recalc,
  2198. };
  2199. static struct clk gpt6_ick = {
  2200. .name = "gpt6_ick",
  2201. .parent = &per_l4_ick,
  2202. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2203. .enable_bit = OMAP3430_EN_GPT6_SHIFT,
  2204. .flags = CLOCK_IN_OMAP343X,
  2205. .recalc = &followparent_recalc,
  2206. };
  2207. static struct clk gpt5_ick = {
  2208. .name = "gpt5_ick",
  2209. .parent = &per_l4_ick,
  2210. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2211. .enable_bit = OMAP3430_EN_GPT5_SHIFT,
  2212. .flags = CLOCK_IN_OMAP343X,
  2213. .recalc = &followparent_recalc,
  2214. };
  2215. static struct clk gpt4_ick = {
  2216. .name = "gpt4_ick",
  2217. .parent = &per_l4_ick,
  2218. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2219. .enable_bit = OMAP3430_EN_GPT4_SHIFT,
  2220. .flags = CLOCK_IN_OMAP343X,
  2221. .recalc = &followparent_recalc,
  2222. };
  2223. static struct clk gpt3_ick = {
  2224. .name = "gpt3_ick",
  2225. .parent = &per_l4_ick,
  2226. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2227. .enable_bit = OMAP3430_EN_GPT3_SHIFT,
  2228. .flags = CLOCK_IN_OMAP343X,
  2229. .recalc = &followparent_recalc,
  2230. };
  2231. static struct clk gpt2_ick = {
  2232. .name = "gpt2_ick",
  2233. .parent = &per_l4_ick,
  2234. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2235. .enable_bit = OMAP3430_EN_GPT2_SHIFT,
  2236. .flags = CLOCK_IN_OMAP343X,
  2237. .recalc = &followparent_recalc,
  2238. };
  2239. static struct clk mcbsp2_ick = {
  2240. .name = "mcbsp2_ick",
  2241. .parent = &per_l4_ick,
  2242. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2243. .enable_bit = OMAP3430_EN_MCBSP2_SHIFT,
  2244. .flags = CLOCK_IN_OMAP343X,
  2245. .recalc = &followparent_recalc,
  2246. };
  2247. static struct clk mcbsp3_ick = {
  2248. .name = "mcbsp3_ick",
  2249. .parent = &per_l4_ick,
  2250. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2251. .enable_bit = OMAP3430_EN_MCBSP3_SHIFT,
  2252. .flags = CLOCK_IN_OMAP343X,
  2253. .recalc = &followparent_recalc,
  2254. };
  2255. static struct clk mcbsp4_ick = {
  2256. .name = "mcbsp4_ick",
  2257. .parent = &per_l4_ick,
  2258. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_ICLKEN),
  2259. .enable_bit = OMAP3430_EN_MCBSP4_SHIFT,
  2260. .flags = CLOCK_IN_OMAP343X,
  2261. .recalc = &followparent_recalc,
  2262. };
  2263. static const struct clksel mcbsp_234_clksel[] = {
  2264. { .parent = &per_96m_fck, .rates = common_mcbsp_96m_rates },
  2265. { .parent = &mcbsp_clks, .rates = common_mcbsp_mcbsp_rates },
  2266. { .parent = NULL }
  2267. };
  2268. static struct clk mcbsp2_fck = {
  2269. .name = "mcbsp2_fck",
  2270. .init = &omap2_init_clksel_parent,
  2271. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  2272. .enable_bit = OMAP3430_EN_MCBSP2_SHIFT,
  2273. .clksel_reg = OMAP343X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
  2274. .clksel_mask = OMAP2_MCBSP2_CLKS_MASK,
  2275. .clksel = mcbsp_234_clksel,
  2276. .flags = CLOCK_IN_OMAP343X,
  2277. .recalc = &omap2_clksel_recalc,
  2278. };
  2279. static struct clk mcbsp3_fck = {
  2280. .name = "mcbsp3_fck",
  2281. .init = &omap2_init_clksel_parent,
  2282. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  2283. .enable_bit = OMAP3430_EN_MCBSP3_SHIFT,
  2284. .clksel_reg = OMAP343X_CTRL_REGADDR(OMAP343X_CONTROL_DEVCONF1),
  2285. .clksel_mask = OMAP2_MCBSP3_CLKS_MASK,
  2286. .clksel = mcbsp_234_clksel,
  2287. .flags = CLOCK_IN_OMAP343X,
  2288. .recalc = &omap2_clksel_recalc,
  2289. };
  2290. static struct clk mcbsp4_fck = {
  2291. .name = "mcbsp4_fck",
  2292. .init = &omap2_init_clksel_parent,
  2293. .enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
  2294. .enable_bit = OMAP3430_EN_MCBSP4_SHIFT,
  2295. .clksel_reg = OMAP343X_CTRL_REGADDR(OMAP343X_CONTROL_DEVCONF1),
  2296. .clksel_mask = OMAP2_MCBSP4_CLKS_MASK,
  2297. .clksel = mcbsp_234_clksel,
  2298. .flags = CLOCK_IN_OMAP343X,
  2299. .recalc = &omap2_clksel_recalc,
  2300. };
  2301. /* EMU clocks */
  2302. /* More information: ARM Cortex-A8 Technical Reference Manual, sect 10.1 */
  2303. static const struct clksel_rate emu_src_sys_rates[] = {
  2304. { .div = 1, .val = 0, .flags = RATE_IN_343X | DEFAULT_RATE },
  2305. { .div = 0 },
  2306. };
  2307. static const struct clksel_rate emu_src_core_rates[] = {
  2308. { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
  2309. { .div = 0 },
  2310. };
  2311. static const struct clksel_rate emu_src_per_rates[] = {
  2312. { .div = 1, .val = 2, .flags = RATE_IN_343X | DEFAULT_RATE },
  2313. { .div = 0 },
  2314. };
  2315. static const struct clksel_rate emu_src_mpu_rates[] = {
  2316. { .div = 1, .val = 3, .flags = RATE_IN_343X | DEFAULT_RATE },
  2317. { .div = 0 },
  2318. };
  2319. static const struct clksel emu_src_clksel[] = {
  2320. { .parent = &sys_ck, .rates = emu_src_sys_rates },
  2321. { .parent = &emu_core_alwon_ck, .rates = emu_src_core_rates },
  2322. { .parent = &emu_per_alwon_ck, .rates = emu_src_per_rates },
  2323. { .parent = &emu_mpu_alwon_ck, .rates = emu_src_mpu_rates },
  2324. { .parent = NULL },
  2325. };
  2326. /*
  2327. * Like the clkout_src clocks, emu_src_clk is a virtual clock, existing only
  2328. * to switch the source of some of the EMU clocks.
  2329. * XXX Are there CLKEN bits for these EMU clks?
  2330. */
  2331. static struct clk emu_src_ck = {
  2332. .name = "emu_src_ck",
  2333. .init = &omap2_init_clksel_parent,
  2334. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
  2335. .clksel_mask = OMAP3430_MUX_CTRL_MASK,
  2336. .clksel = emu_src_clksel,
  2337. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
  2338. .recalc = &omap2_clksel_recalc,
  2339. };
  2340. static const struct clksel_rate pclk_emu_rates[] = {
  2341. { .div = 2, .val = 2, .flags = RATE_IN_343X | DEFAULT_RATE },
  2342. { .div = 3, .val = 3, .flags = RATE_IN_343X },
  2343. { .div = 4, .val = 4, .flags = RATE_IN_343X },
  2344. { .div = 6, .val = 6, .flags = RATE_IN_343X },
  2345. { .div = 0 },
  2346. };
  2347. static const struct clksel pclk_emu_clksel[] = {
  2348. { .parent = &emu_src_ck, .rates = pclk_emu_rates },
  2349. { .parent = NULL },
  2350. };
  2351. static struct clk pclk_fck = {
  2352. .name = "pclk_fck",
  2353. .init = &omap2_init_clksel_parent,
  2354. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
  2355. .clksel_mask = OMAP3430_CLKSEL_PCLK_MASK,
  2356. .clksel = pclk_emu_clksel,
  2357. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
  2358. .recalc = &omap2_clksel_recalc,
  2359. };
  2360. static const struct clksel_rate pclkx2_emu_rates[] = {
  2361. { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
  2362. { .div = 2, .val = 2, .flags = RATE_IN_343X },
  2363. { .div = 3, .val = 3, .flags = RATE_IN_343X },
  2364. { .div = 0 },
  2365. };
  2366. static const struct clksel pclkx2_emu_clksel[] = {
  2367. { .parent = &emu_src_ck, .rates = pclkx2_emu_rates },
  2368. { .parent = NULL },
  2369. };
  2370. static struct clk pclkx2_fck = {
  2371. .name = "pclkx2_fck",
  2372. .init = &omap2_init_clksel_parent,
  2373. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
  2374. .clksel_mask = OMAP3430_CLKSEL_PCLKX2_MASK,
  2375. .clksel = pclkx2_emu_clksel,
  2376. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
  2377. .recalc = &omap2_clksel_recalc,
  2378. };
  2379. static const struct clksel atclk_emu_clksel[] = {
  2380. { .parent = &emu_src_ck, .rates = div2_rates },
  2381. { .parent = NULL },
  2382. };
  2383. static struct clk atclk_fck = {
  2384. .name = "atclk_fck",
  2385. .init = &omap2_init_clksel_parent,
  2386. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
  2387. .clksel_mask = OMAP3430_CLKSEL_ATCLK_MASK,
  2388. .clksel = atclk_emu_clksel,
  2389. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
  2390. .recalc = &omap2_clksel_recalc,
  2391. };
  2392. static struct clk traceclk_src_fck = {
  2393. .name = "traceclk_src_fck",
  2394. .init = &omap2_init_clksel_parent,
  2395. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
  2396. .clksel_mask = OMAP3430_TRACE_MUX_CTRL_MASK,
  2397. .clksel = emu_src_clksel,
  2398. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES | ALWAYS_ENABLED,
  2399. .recalc = &omap2_clksel_recalc,
  2400. };
  2401. static const struct clksel_rate traceclk_rates[] = {
  2402. { .div = 1, .val = 1, .flags = RATE_IN_343X | DEFAULT_RATE },
  2403. { .div = 2, .val = 2, .flags = RATE_IN_343X },
  2404. { .div = 4, .val = 4, .flags = RATE_IN_343X },
  2405. { .div = 0 },
  2406. };
  2407. static const struct clksel traceclk_clksel[] = {
  2408. { .parent = &traceclk_src_fck, .rates = traceclk_rates },
  2409. { .parent = NULL },
  2410. };
  2411. static struct clk traceclk_fck = {
  2412. .name = "traceclk_fck",
  2413. .init = &omap2_init_clksel_parent,
  2414. .clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
  2415. .clksel_mask = OMAP3430_CLKSEL_TRACECLK_MASK,
  2416. .clksel = traceclk_clksel,
  2417. .flags = CLOCK_IN_OMAP343X | ALWAYS_ENABLED,
  2418. .recalc = &omap2_clksel_recalc,
  2419. };
  2420. /* SR clocks */
  2421. /* SmartReflex fclk (VDD1) */
  2422. static struct clk sr1_fck = {
  2423. .name = "sr1_fck",
  2424. .parent = &sys_ck,
  2425. .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
  2426. .enable_bit = OMAP3430_EN_SR1_SHIFT,
  2427. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
  2428. .recalc = &followparent_recalc,
  2429. };
  2430. /* SmartReflex fclk (VDD2) */
  2431. static struct clk sr2_fck = {
  2432. .name = "sr2_fck",
  2433. .parent = &sys_ck,
  2434. .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
  2435. .enable_bit = OMAP3430_EN_SR2_SHIFT,
  2436. .flags = CLOCK_IN_OMAP343X | RATE_PROPAGATES,
  2437. .recalc = &followparent_recalc,
  2438. };
  2439. static struct clk sr_l4_ick = {
  2440. .name = "sr_l4_ick",
  2441. .parent = &l4_ick,
  2442. .flags = CLOCK_IN_OMAP343X,
  2443. .recalc = &followparent_recalc,
  2444. };
  2445. /* SECURE_32K_FCK clocks */
  2446. static struct clk gpt12_fck = {
  2447. .name = "gpt12_fck",
  2448. .parent = &secure_32k_fck,
  2449. .flags = CLOCK_IN_OMAP343X | ALWAYS_ENABLED,
  2450. .recalc = &followparent_recalc,
  2451. };
  2452. static struct clk wdt1_fck = {
  2453. .name = "wdt1_fck",
  2454. .parent = &secure_32k_fck,
  2455. .flags = CLOCK_IN_OMAP343X | ALWAYS_ENABLED,
  2456. .recalc = &followparent_recalc,
  2457. };
  2458. static struct clk *onchip_34xx_clks[] __initdata = {
  2459. &omap_32k_fck,
  2460. &virt_12m_ck,
  2461. &virt_13m_ck,
  2462. &virt_16_8m_ck,
  2463. &virt_19_2m_ck,
  2464. &virt_26m_ck,
  2465. &virt_38_4m_ck,
  2466. &osc_sys_ck,
  2467. &sys_ck,
  2468. &sys_altclk,
  2469. &mcbsp_clks,
  2470. &sys_clkout1,
  2471. &dpll1_ck,
  2472. &dpll1_x2_ck,
  2473. &dpll1_x2m2_ck,
  2474. &dpll2_ck,
  2475. &dpll2_m2_ck,
  2476. &dpll3_ck,
  2477. &core_ck,
  2478. &dpll3_x2_ck,
  2479. &dpll3_m2_ck,
  2480. &dpll3_m2x2_ck,
  2481. &dpll3_m3_ck,
  2482. &dpll3_m3x2_ck,
  2483. &emu_core_alwon_ck,
  2484. &dpll4_ck,
  2485. &dpll4_x2_ck,
  2486. &omap_96m_alwon_fck,
  2487. &omap_96m_fck,
  2488. &cm_96m_fck,
  2489. &virt_omap_54m_fck,
  2490. &omap_54m_fck,
  2491. &omap_48m_fck,
  2492. &omap_12m_fck,
  2493. &dpll4_m2_ck,
  2494. &dpll4_m2x2_ck,
  2495. &dpll4_m3_ck,
  2496. &dpll4_m3x2_ck,
  2497. &dpll4_m4_ck,
  2498. &dpll4_m4x2_ck,
  2499. &dpll4_m5_ck,
  2500. &dpll4_m5x2_ck,
  2501. &dpll4_m6_ck,
  2502. &dpll4_m6x2_ck,
  2503. &emu_per_alwon_ck,
  2504. &dpll5_ck,
  2505. &dpll5_m2_ck,
  2506. &omap_120m_fck,
  2507. &clkout2_src_ck,
  2508. &sys_clkout2,
  2509. &corex2_fck,
  2510. &dpll1_fck,
  2511. &mpu_ck,
  2512. &arm_fck,
  2513. &emu_mpu_alwon_ck,
  2514. &dpll2_fck,
  2515. &iva2_ck,
  2516. &l3_ick,
  2517. &l4_ick,
  2518. &rm_ick,
  2519. &gfx_l3_fck,
  2520. &gfx_l3_ick,
  2521. &gfx_cg1_ck,
  2522. &gfx_cg2_ck,
  2523. &sgx_fck,
  2524. &sgx_ick,
  2525. &d2d_26m_fck,
  2526. &gpt10_fck,
  2527. &gpt11_fck,
  2528. &cpefuse_fck,
  2529. &ts_fck,
  2530. &usbtll_fck,
  2531. &core_96m_fck,
  2532. &mmchs3_fck,
  2533. &mmchs2_fck,
  2534. &mspro_fck,
  2535. &mmchs1_fck,
  2536. &i2c3_fck,
  2537. &i2c2_fck,
  2538. &i2c1_fck,
  2539. &mcbsp5_fck,
  2540. &mcbsp1_fck,
  2541. &core_48m_fck,
  2542. &mcspi4_fck,
  2543. &mcspi3_fck,
  2544. &mcspi2_fck,
  2545. &mcspi1_fck,
  2546. &uart2_fck,
  2547. &uart1_fck,
  2548. &fshostusb_fck,
  2549. &core_12m_fck,
  2550. &hdq_fck,
  2551. &ssi_ssr_fck,
  2552. &ssi_sst_fck,
  2553. &core_l3_ick,
  2554. &hsotgusb_ick,
  2555. &sdrc_ick,
  2556. &gpmc_fck,
  2557. &security_l3_ick,
  2558. &pka_ick,
  2559. &core_l4_ick,
  2560. &usbtll_ick,
  2561. &mmchs3_ick,
  2562. &icr_ick,
  2563. &aes2_ick,
  2564. &sha12_ick,
  2565. &des2_ick,
  2566. &mmchs2_ick,
  2567. &mmchs1_ick,
  2568. &mspro_ick,
  2569. &hdq_ick,
  2570. &mcspi4_ick,
  2571. &mcspi3_ick,
  2572. &mcspi2_ick,
  2573. &mcspi1_ick,
  2574. &i2c3_ick,
  2575. &i2c2_ick,
  2576. &i2c1_ick,
  2577. &uart2_ick,
  2578. &uart1_ick,
  2579. &gpt11_ick,
  2580. &gpt10_ick,
  2581. &mcbsp5_ick,
  2582. &mcbsp1_ick,
  2583. &fac_ick,
  2584. &mailboxes_ick,
  2585. &omapctrl_ick,
  2586. &ssi_l4_ick,
  2587. &ssi_ick,
  2588. &usb_l4_ick,
  2589. &security_l4_ick2,
  2590. &aes1_ick,
  2591. &rng_ick,
  2592. &sha11_ick,
  2593. &des1_ick,
  2594. &dss1_alwon_fck,
  2595. &dss_tv_fck,
  2596. &dss_96m_fck,
  2597. &dss2_alwon_fck,
  2598. &dss_ick,
  2599. &cam_mclk,
  2600. &cam_l3_ick,
  2601. &cam_l4_ick,
  2602. &usbhost_120m_fck,
  2603. &usbhost_48m_fck,
  2604. &usbhost_l3_ick,
  2605. &usbhost_l4_ick,
  2606. &usbhost_sar_fck,
  2607. &usim_fck,
  2608. &gpt1_fck,
  2609. &wkup_32k_fck,
  2610. &gpio1_fck,
  2611. &wdt2_fck,
  2612. &wkup_l4_ick,
  2613. &usim_ick,
  2614. &wdt2_ick,
  2615. &wdt1_ick,
  2616. &gpio1_ick,
  2617. &omap_32ksync_ick,
  2618. &gpt12_ick,
  2619. &gpt1_ick,
  2620. &per_96m_fck,
  2621. &per_48m_fck,
  2622. &uart3_fck,
  2623. &gpt2_fck,
  2624. &gpt3_fck,
  2625. &gpt4_fck,
  2626. &gpt5_fck,
  2627. &gpt6_fck,
  2628. &gpt7_fck,
  2629. &gpt8_fck,
  2630. &gpt9_fck,
  2631. &per_32k_alwon_fck,
  2632. &gpio6_fck,
  2633. &gpio5_fck,
  2634. &gpio4_fck,
  2635. &gpio3_fck,
  2636. &gpio2_fck,
  2637. &wdt3_fck,
  2638. &per_l4_ick,
  2639. &gpio6_ick,
  2640. &gpio5_ick,
  2641. &gpio4_ick,
  2642. &gpio3_ick,
  2643. &gpio2_ick,
  2644. &wdt3_ick,
  2645. &uart3_ick,
  2646. &gpt9_ick,
  2647. &gpt8_ick,
  2648. &gpt7_ick,
  2649. &gpt6_ick,
  2650. &gpt5_ick,
  2651. &gpt4_ick,
  2652. &gpt3_ick,
  2653. &gpt2_ick,
  2654. &mcbsp2_ick,
  2655. &mcbsp3_ick,
  2656. &mcbsp4_ick,
  2657. &mcbsp2_fck,
  2658. &mcbsp3_fck,
  2659. &mcbsp4_fck,
  2660. &emu_src_ck,
  2661. &pclk_fck,
  2662. &pclkx2_fck,
  2663. &atclk_fck,
  2664. &traceclk_src_fck,
  2665. &traceclk_fck,
  2666. &sr1_fck,
  2667. &sr2_fck,
  2668. &sr_l4_ick,
  2669. &secure_32k_fck,
  2670. &gpt12_fck,
  2671. &wdt1_fck,
  2672. };
  2673. #endif