devices-msm8x60.c 73 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187
  1. /* Copyright (c) 2010-2013, The Linux Foundation. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. *
  12. */
  13. #include <linux/kernel.h>
  14. #include <linux/platform_device.h>
  15. #include <linux/regulator/machine.h>
  16. #include <linux/regulator/consumer.h>
  17. #include <linux/msm_ion.h>
  18. #include <mach/irqs.h>
  19. #include <mach/dma.h>
  20. #include <asm/mach/mmc.h>
  21. #include <asm/clkdev.h>
  22. #include <mach/kgsl.h>
  23. #include <linux/msm_rotator.h>
  24. #include <mach/msm_hsusb.h>
  25. #include "footswitch.h"
  26. #include "clock.h"
  27. #include "clock-rpm.h"
  28. #include "clock-voter.h"
  29. #include "devices.h"
  30. #include "devices-msm8x60.h"
  31. #include <linux/dma-mapping.h>
  32. #include <linux/irq.h>
  33. #include <linux/clk.h>
  34. #include <asm/hardware/gic.h>
  35. #include <asm/mach-types.h>
  36. #include <asm/clkdev.h>
  37. #include <mach/msm_serial_hs_lite.h>
  38. #include <mach/msm_bus.h>
  39. #include <mach/msm_bus_board.h>
  40. #include <mach/socinfo.h>
  41. #include <mach/msm_memtypes.h>
  42. #include <mach/msm_tsif.h>
  43. #include <mach/scm-io.h>
  44. #ifdef CONFIG_MSM_DSPS
  45. #include <mach/msm_dsps.h>
  46. #endif
  47. #include <linux/gpio.h>
  48. #include <linux/delay.h>
  49. #include <mach/mdm.h>
  50. #include <mach/rpm.h>
  51. #include <mach/board.h>
  52. #include <sound/apr_audio.h>
  53. #include "rpm_log.h"
  54. #include "rpm_stats.h"
  55. #include <mach/mpm.h>
  56. #include "msm_watchdog.h"
  57. #include <mach/iommu_domains.h>
  58. /* Address of GSBI blocks */
  59. #define MSM_GSBI1_PHYS 0x16000000
  60. #define MSM_GSBI2_PHYS 0x16100000
  61. #define MSM_GSBI3_PHYS 0x16200000
  62. #define MSM_GSBI4_PHYS 0x16300000
  63. #define MSM_GSBI5_PHYS 0x16400000
  64. #define MSM_GSBI6_PHYS 0x16500000
  65. #define MSM_GSBI7_PHYS 0x16600000
  66. #define MSM_GSBI8_PHYS 0x19800000
  67. #define MSM_GSBI9_PHYS 0x19900000
  68. #define MSM_GSBI10_PHYS 0x19A00000
  69. #define MSM_GSBI11_PHYS 0x19B00000
  70. #define MSM_GSBI12_PHYS 0x19C00000
  71. /* GSBI QUPe devices */
  72. #define MSM_GSBI1_QUP_PHYS 0x16080000
  73. #define MSM_GSBI2_QUP_PHYS 0x16180000
  74. #define MSM_GSBI3_QUP_PHYS 0x16280000
  75. #define MSM_GSBI4_QUP_PHYS 0x16380000
  76. #define MSM_GSBI5_QUP_PHYS 0x16480000
  77. #define MSM_GSBI6_QUP_PHYS 0x16580000
  78. #define MSM_GSBI7_QUP_PHYS 0x16680000
  79. #define MSM_GSBI8_QUP_PHYS 0x19880000
  80. #define MSM_GSBI9_QUP_PHYS 0x19980000
  81. #define MSM_GSBI10_QUP_PHYS 0x19A80000
  82. #define MSM_GSBI11_QUP_PHYS 0x19B80000
  83. #define MSM_GSBI12_QUP_PHYS 0x19C80000
  84. /* GSBI UART devices */
  85. #define MSM_UART1DM_PHYS (MSM_GSBI6_PHYS + 0x40000)
  86. #define INT_UART1DM_IRQ GSBI6_UARTDM_IRQ
  87. #define INT_UART2DM_IRQ GSBI12_UARTDM_IRQ
  88. #define MSM_UART2DM_PHYS 0x19C40000
  89. #define MSM_UART3DM_PHYS (MSM_GSBI3_PHYS + 0x40000)
  90. #define INT_UART3DM_IRQ GSBI3_UARTDM_IRQ
  91. #define TCSR_BASE_PHYS 0x16b00000
  92. /* PRNG device */
  93. #define MSM_PRNG_PHYS 0x16C00000
  94. #define MSM_UART9DM_PHYS (MSM_GSBI9_PHYS + 0x40000)
  95. #define INT_UART9DM_IRQ GSBI9_UARTDM_IRQ
  96. static struct resource msm_gpio_resources[] = {
  97. {
  98. .start = TLMM_MSM_SUMMARY_IRQ,
  99. .end = TLMM_MSM_SUMMARY_IRQ,
  100. .flags = IORESOURCE_IRQ,
  101. },
  102. };
  103. static struct msm_gpio_pdata msm8660_gpio_pdata = {
  104. .ngpio = 173,
  105. .direct_connect_irqs = 10,
  106. };
  107. struct platform_device msm_gpio_device = {
  108. .name = "msmgpio",
  109. .id = -1,
  110. .num_resources = ARRAY_SIZE(msm_gpio_resources),
  111. .resource = msm_gpio_resources,
  112. .dev.platform_data = &msm8660_gpio_pdata,
  113. };
  114. static void charm_ap2mdm_kpdpwr_on(void)
  115. {
  116. gpio_direction_output(AP2MDM_PMIC_RESET_N, 0);
  117. gpio_direction_output(AP2MDM_KPDPWR_N, 1);
  118. }
  119. static void charm_ap2mdm_kpdpwr_off(void)
  120. {
  121. int i;
  122. gpio_direction_output(AP2MDM_ERRFATAL, 1);
  123. for (i = 20; i > 0; i--) {
  124. if (gpio_get_value(MDM2AP_STATUS) == 0)
  125. break;
  126. msleep(100);
  127. }
  128. gpio_direction_output(AP2MDM_ERRFATAL, 0);
  129. if (i == 0) {
  130. pr_err("%s: MDM2AP_STATUS never went low. Doing a hard reset \
  131. of the charm modem.\n", __func__);
  132. gpio_direction_output(AP2MDM_PMIC_RESET_N, 1);
  133. /*
  134. * Currently, there is a debounce timer on the charm PMIC. It is
  135. * necessary to hold the AP2MDM_PMIC_RESET low for ~3.5 seconds
  136. * for the reset to fully take place. Sleep here to ensure the
  137. * reset has occured before the function exits.
  138. */
  139. msleep(4000);
  140. gpio_direction_output(AP2MDM_PMIC_RESET_N, 0);
  141. }
  142. }
  143. static struct resource charm_resources[] = {
  144. /* MDM2AP_ERRFATAL */
  145. {
  146. .start = MSM_GPIO_TO_INT(MDM2AP_ERRFATAL),
  147. .end = MSM_GPIO_TO_INT(MDM2AP_ERRFATAL),
  148. .flags = IORESOURCE_IRQ,
  149. },
  150. /* MDM2AP_STATUS */
  151. {
  152. .start = MSM_GPIO_TO_INT(MDM2AP_STATUS),
  153. .end = MSM_GPIO_TO_INT(MDM2AP_STATUS),
  154. .flags = IORESOURCE_IRQ,
  155. }
  156. };
  157. static struct charm_platform_data mdm_platform_data = {
  158. .charm_modem_on = charm_ap2mdm_kpdpwr_on,
  159. .charm_modem_off = charm_ap2mdm_kpdpwr_off,
  160. };
  161. struct platform_device msm_charm_modem = {
  162. .name = "charm_modem",
  163. .id = -1,
  164. .num_resources = ARRAY_SIZE(charm_resources),
  165. .resource = charm_resources,
  166. .dev = {
  167. .platform_data = &mdm_platform_data,
  168. },
  169. };
  170. struct platform_device msm8x60_device_acpuclk = {
  171. .name = "acpuclk-8x60",
  172. .id = -1,
  173. };
  174. #ifdef CONFIG_MSM_DSPS
  175. #define GSBI12_DEV (&msm_dsps_device.dev)
  176. #else
  177. #define GSBI12_DEV (&msm_gsbi12_qup_i2c_device.dev)
  178. #endif
  179. void __init msm8x60_init_irq(void)
  180. {
  181. struct msm_mpm_device_data *data = NULL;
  182. #ifdef CONFIG_MSM_MPM
  183. data = &msm8660_mpm_dev_data;
  184. #endif
  185. msm_mpm_irq_extn_init(data);
  186. gic_init(0, GIC_PPI_START, MSM_QGIC_DIST_BASE, (void *)MSM_QGIC_CPU_BASE);
  187. }
  188. #define MSM_LPASS_QDSP6SS_PHYS 0x28800000
  189. #define MSM_LPASS_QDSP6SS_WDOG_PHYS 0x28882000
  190. #define MSM_LPASS_QDSP6SS_IM_PHYS 0x288A0000
  191. static struct resource msm_8660_q6_resources[] = {
  192. {
  193. .start = MSM_LPASS_QDSP6SS_PHYS,
  194. .end = MSM_LPASS_QDSP6SS_PHYS + SZ_256 - 1,
  195. .flags = IORESOURCE_MEM,
  196. },
  197. {
  198. .start = MSM_LPASS_QDSP6SS_IM_PHYS,
  199. .end = MSM_LPASS_QDSP6SS_IM_PHYS + SZ_4K - 1,
  200. .flags = IORESOURCE_MEM,
  201. },
  202. {
  203. .start = MSM_LPASS_QDSP6SS_WDOG_PHYS,
  204. .end = MSM_LPASS_QDSP6SS_WDOG_PHYS + SZ_4K - 1,
  205. .flags = IORESOURCE_MEM,
  206. },
  207. {
  208. .start = 0x00900000,
  209. .end = 0x00900000 + SZ_16K - 1,
  210. .flags = IORESOURCE_MEM,
  211. },
  212. {
  213. .start = LPASS_Q6SS_WDOG_EXPIRED,
  214. .end = LPASS_Q6SS_WDOG_EXPIRED,
  215. .flags = IORESOURCE_IRQ,
  216. },
  217. };
  218. struct platform_device msm_pil_q6v3 = {
  219. .name = "pil_qdsp6v3",
  220. .id = -1,
  221. .num_resources = ARRAY_SIZE(msm_8660_q6_resources),
  222. .resource = msm_8660_q6_resources,
  223. };
  224. #define MSM_MSS_REGS_PHYS 0x10200000
  225. #define MSM_MSS_WDOG_PHYS 0x10020000
  226. static struct resource msm_8660_modem_resources[] = {
  227. {
  228. .start = MSM_MSS_REGS_PHYS,
  229. .end = MSM_MSS_REGS_PHYS + SZ_256 - 1,
  230. .flags = IORESOURCE_MEM,
  231. },
  232. {
  233. .start = MSM_MSS_WDOG_PHYS,
  234. .end = MSM_MSS_WDOG_PHYS + SZ_4K - 1,
  235. .flags = IORESOURCE_MEM,
  236. },
  237. {
  238. .start = 0x00900000,
  239. .end = 0x00900000 + SZ_16K - 1,
  240. .flags = IORESOURCE_MEM,
  241. },
  242. {
  243. .start = MARM_WDOG_EXPIRED,
  244. .end = MARM_WDOG_EXPIRED,
  245. .flags = IORESOURCE_IRQ,
  246. },
  247. };
  248. struct platform_device msm_pil_modem = {
  249. .name = "pil_modem",
  250. .id = -1,
  251. .num_resources = ARRAY_SIZE(msm_8660_modem_resources),
  252. .resource = msm_8660_modem_resources,
  253. };
  254. struct platform_device msm_pil_tzapps = {
  255. .name = "pil_tzapps",
  256. .id = -1,
  257. };
  258. static struct resource msm_pil_dsps_resources[] = {
  259. {
  260. .start = 0x00900000,
  261. .end = 0x00900000 + SZ_16K - 1,
  262. .flags = IORESOURCE_MEM,
  263. },
  264. };
  265. struct platform_device msm_pil_dsps = {
  266. .name = "pil_dsps",
  267. .id = -1,
  268. .resource = msm_pil_dsps_resources,
  269. .num_resources = ARRAY_SIZE(msm_pil_dsps_resources),
  270. .dev.platform_data = "dsps",
  271. };
  272. struct platform_device msm_pil_vidc = {
  273. .name = "pil_vidc",
  274. .id = -1,
  275. };
  276. static struct resource msm_uart1_dm_resources[] = {
  277. {
  278. .start = MSM_UART1DM_PHYS,
  279. .end = MSM_UART1DM_PHYS + PAGE_SIZE - 1,
  280. .flags = IORESOURCE_MEM,
  281. },
  282. {
  283. .start = INT_UART1DM_IRQ,
  284. .end = INT_UART1DM_IRQ,
  285. .flags = IORESOURCE_IRQ,
  286. },
  287. {
  288. /* GSBI6 is UARTDM1 */
  289. .start = MSM_GSBI6_PHYS,
  290. .end = MSM_GSBI6_PHYS + 4 - 1,
  291. .name = "gsbi_resource",
  292. .flags = IORESOURCE_MEM,
  293. },
  294. {
  295. .start = DMOV_HSUART1_TX_CHAN,
  296. .end = DMOV_HSUART1_RX_CHAN,
  297. .name = "uartdm_channels",
  298. .flags = IORESOURCE_DMA,
  299. },
  300. {
  301. .start = DMOV_HSUART1_TX_CRCI,
  302. .end = DMOV_HSUART1_RX_CRCI,
  303. .name = "uartdm_crci",
  304. .flags = IORESOURCE_DMA,
  305. },
  306. };
  307. static u64 msm_uart_dm1_dma_mask = DMA_BIT_MASK(32);
  308. struct platform_device msm_device_uart_dm1 = {
  309. .name = "msm_serial_hs",
  310. .id = 0,
  311. .num_resources = ARRAY_SIZE(msm_uart1_dm_resources),
  312. .resource = msm_uart1_dm_resources,
  313. .dev = {
  314. .dma_mask = &msm_uart_dm1_dma_mask,
  315. .coherent_dma_mask = DMA_BIT_MASK(32),
  316. },
  317. };
  318. static struct resource msm_uart3_dm_resources[] = {
  319. {
  320. .start = MSM_UART3DM_PHYS,
  321. .end = MSM_UART3DM_PHYS + PAGE_SIZE - 1,
  322. .name = "uartdm_resource",
  323. .flags = IORESOURCE_MEM,
  324. },
  325. {
  326. .start = INT_UART3DM_IRQ,
  327. .end = INT_UART3DM_IRQ,
  328. .flags = IORESOURCE_IRQ,
  329. },
  330. {
  331. .start = MSM_GSBI3_PHYS,
  332. .end = MSM_GSBI3_PHYS + PAGE_SIZE - 1,
  333. .name = "gsbi_resource",
  334. .flags = IORESOURCE_MEM,
  335. },
  336. };
  337. struct platform_device msm_device_uart_dm3 = {
  338. .name = "msm_serial_hsl",
  339. .id = 2,
  340. .num_resources = ARRAY_SIZE(msm_uart3_dm_resources),
  341. .resource = msm_uart3_dm_resources,
  342. };
  343. static struct resource msm_uart12_dm_resources[] = {
  344. {
  345. .start = MSM_UART2DM_PHYS,
  346. .end = MSM_UART2DM_PHYS + PAGE_SIZE - 1,
  347. .name = "uartdm_resource",
  348. .flags = IORESOURCE_MEM,
  349. },
  350. {
  351. .start = INT_UART2DM_IRQ,
  352. .end = INT_UART2DM_IRQ,
  353. .flags = IORESOURCE_IRQ,
  354. },
  355. {
  356. /* GSBI 12 is UARTDM2 */
  357. .start = MSM_GSBI12_PHYS,
  358. .end = MSM_GSBI12_PHYS + PAGE_SIZE - 1,
  359. .name = "gsbi_resource",
  360. .flags = IORESOURCE_MEM,
  361. },
  362. };
  363. struct platform_device msm_device_uart_dm12 = {
  364. .name = "msm_serial_hsl",
  365. .id = 0,
  366. .num_resources = ARRAY_SIZE(msm_uart12_dm_resources),
  367. .resource = msm_uart12_dm_resources,
  368. };
  369. #ifdef CONFIG_MSM_GSBI9_UART
  370. static struct msm_serial_hslite_platform_data uart_gsbi9_pdata = {
  371. .config_gpio = 1,
  372. .uart_tx_gpio = 67,
  373. .uart_rx_gpio = 66,
  374. .line = 1,
  375. .set_uart_clk_zero = true,
  376. };
  377. static struct resource msm_uart_gsbi9_resources[] = {
  378. {
  379. .start = MSM_UART9DM_PHYS,
  380. .end = MSM_UART9DM_PHYS + PAGE_SIZE - 1,
  381. .name = "uartdm_resource",
  382. .flags = IORESOURCE_MEM,
  383. },
  384. {
  385. .start = INT_UART9DM_IRQ,
  386. .end = INT_UART9DM_IRQ,
  387. .flags = IORESOURCE_IRQ,
  388. },
  389. {
  390. /* GSBI 9 is UART_GSBI9 */
  391. .start = MSM_GSBI9_PHYS,
  392. .end = MSM_GSBI9_PHYS + PAGE_SIZE - 1,
  393. .name = "gsbi_resource",
  394. .flags = IORESOURCE_MEM,
  395. },
  396. };
  397. struct platform_device *msm_device_uart_gsbi9;
  398. struct platform_device *msm_add_gsbi9_uart(void)
  399. {
  400. return platform_device_register_resndata(NULL, "msm_serial_hsl",
  401. 1, msm_uart_gsbi9_resources,
  402. ARRAY_SIZE(msm_uart_gsbi9_resources),
  403. &uart_gsbi9_pdata,
  404. sizeof(uart_gsbi9_pdata));
  405. }
  406. #endif
  407. static struct resource gsbi3_qup_i2c_resources[] = {
  408. {
  409. .name = "qup_phys_addr",
  410. .start = MSM_GSBI3_QUP_PHYS,
  411. .end = MSM_GSBI3_QUP_PHYS + SZ_4K - 1,
  412. .flags = IORESOURCE_MEM,
  413. },
  414. {
  415. .name = "gsbi_qup_i2c_addr",
  416. .start = MSM_GSBI3_PHYS,
  417. .end = MSM_GSBI3_PHYS + 4 - 1,
  418. .flags = IORESOURCE_MEM,
  419. },
  420. {
  421. .name = "qup_err_intr",
  422. .start = GSBI3_QUP_IRQ,
  423. .end = GSBI3_QUP_IRQ,
  424. .flags = IORESOURCE_IRQ,
  425. },
  426. {
  427. .name = "i2c_clk",
  428. .start = 44,
  429. .end = 44,
  430. .flags = IORESOURCE_IO,
  431. },
  432. {
  433. .name = "i2c_sda",
  434. .start = 43,
  435. .end = 43,
  436. .flags = IORESOURCE_IO,
  437. },
  438. };
  439. static struct resource gsbi4_qup_i2c_resources[] = {
  440. {
  441. .name = "qup_phys_addr",
  442. .start = MSM_GSBI4_QUP_PHYS,
  443. .end = MSM_GSBI4_QUP_PHYS + SZ_4K - 1,
  444. .flags = IORESOURCE_MEM,
  445. },
  446. {
  447. .name = "gsbi_qup_i2c_addr",
  448. .start = MSM_GSBI4_PHYS,
  449. .end = MSM_GSBI4_PHYS + 4 - 1,
  450. .flags = IORESOURCE_MEM,
  451. },
  452. {
  453. .name = "qup_err_intr",
  454. .start = GSBI4_QUP_IRQ,
  455. .end = GSBI4_QUP_IRQ,
  456. .flags = IORESOURCE_IRQ,
  457. },
  458. };
  459. static struct resource gsbi7_qup_i2c_resources[] = {
  460. {
  461. .name = "qup_phys_addr",
  462. .start = MSM_GSBI7_QUP_PHYS,
  463. .end = MSM_GSBI7_QUP_PHYS + SZ_4K - 1,
  464. .flags = IORESOURCE_MEM,
  465. },
  466. {
  467. .name = "gsbi_qup_i2c_addr",
  468. .start = MSM_GSBI7_PHYS,
  469. .end = MSM_GSBI7_PHYS + 4 - 1,
  470. .flags = IORESOURCE_MEM,
  471. },
  472. {
  473. .name = "qup_err_intr",
  474. .start = GSBI7_QUP_IRQ,
  475. .end = GSBI7_QUP_IRQ,
  476. .flags = IORESOURCE_IRQ,
  477. },
  478. {
  479. .name = "i2c_clk",
  480. .start = 60,
  481. .end = 60,
  482. .flags = IORESOURCE_IO,
  483. },
  484. {
  485. .name = "i2c_sda",
  486. .start = 59,
  487. .end = 59,
  488. .flags = IORESOURCE_IO,
  489. },
  490. };
  491. static struct resource gsbi8_qup_i2c_resources[] = {
  492. {
  493. .name = "qup_phys_addr",
  494. .start = MSM_GSBI8_QUP_PHYS,
  495. .end = MSM_GSBI8_QUP_PHYS + SZ_4K - 1,
  496. .flags = IORESOURCE_MEM,
  497. },
  498. {
  499. .name = "gsbi_qup_i2c_addr",
  500. .start = MSM_GSBI8_PHYS,
  501. .end = MSM_GSBI8_PHYS + 4 - 1,
  502. .flags = IORESOURCE_MEM,
  503. },
  504. {
  505. .name = "qup_err_intr",
  506. .start = GSBI8_QUP_IRQ,
  507. .end = GSBI8_QUP_IRQ,
  508. .flags = IORESOURCE_IRQ,
  509. },
  510. };
  511. static struct resource gsbi9_qup_i2c_resources[] = {
  512. {
  513. .name = "qup_phys_addr",
  514. .start = MSM_GSBI9_QUP_PHYS,
  515. .end = MSM_GSBI9_QUP_PHYS + SZ_4K - 1,
  516. .flags = IORESOURCE_MEM,
  517. },
  518. {
  519. .name = "gsbi_qup_i2c_addr",
  520. .start = MSM_GSBI9_PHYS,
  521. .end = MSM_GSBI9_PHYS + 4 - 1,
  522. .flags = IORESOURCE_MEM,
  523. },
  524. {
  525. .name = "qup_err_intr",
  526. .start = GSBI9_QUP_IRQ,
  527. .end = GSBI9_QUP_IRQ,
  528. .flags = IORESOURCE_IRQ,
  529. },
  530. };
  531. static struct resource gsbi12_qup_i2c_resources[] = {
  532. {
  533. .name = "qup_phys_addr",
  534. .start = MSM_GSBI12_QUP_PHYS,
  535. .end = MSM_GSBI12_QUP_PHYS + SZ_4K - 1,
  536. .flags = IORESOURCE_MEM,
  537. },
  538. {
  539. .name = "gsbi_qup_i2c_addr",
  540. .start = MSM_GSBI12_PHYS,
  541. .end = MSM_GSBI12_PHYS + 4 - 1,
  542. .flags = IORESOURCE_MEM,
  543. },
  544. {
  545. .name = "qup_err_intr",
  546. .start = GSBI12_QUP_IRQ,
  547. .end = GSBI12_QUP_IRQ,
  548. .flags = IORESOURCE_IRQ,
  549. },
  550. };
  551. #ifdef CONFIG_MSM_BUS_SCALING
  552. static struct msm_bus_vectors grp3d_init_vectors[] = {
  553. {
  554. .src = MSM_BUS_MASTER_GRAPHICS_3D,
  555. .dst = MSM_BUS_SLAVE_EBI_CH0,
  556. .ab = 0,
  557. .ib = 0,
  558. },
  559. };
  560. static struct msm_bus_vectors grp3d_low_vectors[] = {
  561. {
  562. .src = MSM_BUS_MASTER_GRAPHICS_3D,
  563. .dst = MSM_BUS_SLAVE_EBI_CH0,
  564. .ab = 0,
  565. .ib = KGSL_CONVERT_TO_MBPS(990),
  566. },
  567. };
  568. static struct msm_bus_vectors grp3d_nominal_low_vectors[] = {
  569. {
  570. .src = MSM_BUS_MASTER_GRAPHICS_3D,
  571. .dst = MSM_BUS_SLAVE_EBI_CH0,
  572. .ab = 0,
  573. .ib = KGSL_CONVERT_TO_MBPS(1300),
  574. },
  575. };
  576. static struct msm_bus_vectors grp3d_nominal_high_vectors[] = {
  577. {
  578. .src = MSM_BUS_MASTER_GRAPHICS_3D,
  579. .dst = MSM_BUS_SLAVE_EBI_CH0,
  580. .ab = 0,
  581. .ib = KGSL_CONVERT_TO_MBPS(2008),
  582. },
  583. };
  584. static struct msm_bus_vectors grp3d_max_vectors[] = {
  585. {
  586. .src = MSM_BUS_MASTER_GRAPHICS_3D,
  587. .dst = MSM_BUS_SLAVE_EBI_CH0,
  588. .ab = 0,
  589. .ib = KGSL_CONVERT_TO_MBPS(2484),
  590. },
  591. };
  592. static struct msm_bus_paths grp3d_bus_scale_usecases[] = {
  593. {
  594. ARRAY_SIZE(grp3d_init_vectors),
  595. grp3d_init_vectors,
  596. },
  597. {
  598. ARRAY_SIZE(grp3d_low_vectors),
  599. grp3d_low_vectors,
  600. },
  601. {
  602. ARRAY_SIZE(grp3d_nominal_low_vectors),
  603. grp3d_nominal_low_vectors,
  604. },
  605. {
  606. ARRAY_SIZE(grp3d_nominal_high_vectors),
  607. grp3d_nominal_high_vectors,
  608. },
  609. {
  610. ARRAY_SIZE(grp3d_max_vectors),
  611. grp3d_max_vectors,
  612. },
  613. };
  614. static struct msm_bus_scale_pdata grp3d_bus_scale_pdata = {
  615. grp3d_bus_scale_usecases,
  616. ARRAY_SIZE(grp3d_bus_scale_usecases),
  617. .name = "grp3d",
  618. };
  619. static struct msm_bus_vectors grp2d0_init_vectors[] = {
  620. {
  621. .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
  622. .dst = MSM_BUS_SLAVE_EBI_CH0,
  623. .ab = 0,
  624. .ib = 0,
  625. },
  626. };
  627. static struct msm_bus_vectors grp2d0_max_vectors[] = {
  628. {
  629. .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
  630. .dst = MSM_BUS_SLAVE_EBI_CH0,
  631. .ab = 0,
  632. .ib = KGSL_CONVERT_TO_MBPS(990),
  633. },
  634. };
  635. static struct msm_bus_paths grp2d0_bus_scale_usecases[] = {
  636. {
  637. ARRAY_SIZE(grp2d0_init_vectors),
  638. grp2d0_init_vectors,
  639. },
  640. {
  641. ARRAY_SIZE(grp2d0_max_vectors),
  642. grp2d0_max_vectors,
  643. },
  644. };
  645. static struct msm_bus_scale_pdata grp2d0_bus_scale_pdata = {
  646. grp2d0_bus_scale_usecases,
  647. ARRAY_SIZE(grp2d0_bus_scale_usecases),
  648. .name = "grp2d0",
  649. };
  650. static struct msm_bus_vectors grp2d1_init_vectors[] = {
  651. {
  652. .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
  653. .dst = MSM_BUS_SLAVE_EBI_CH0,
  654. .ab = 0,
  655. .ib = 0,
  656. },
  657. };
  658. static struct msm_bus_vectors grp2d1_max_vectors[] = {
  659. {
  660. .src = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
  661. .dst = MSM_BUS_SLAVE_EBI_CH0,
  662. .ab = 0,
  663. .ib = KGSL_CONVERT_TO_MBPS(990),
  664. },
  665. };
  666. static struct msm_bus_paths grp2d1_bus_scale_usecases[] = {
  667. {
  668. ARRAY_SIZE(grp2d1_init_vectors),
  669. grp2d1_init_vectors,
  670. },
  671. {
  672. ARRAY_SIZE(grp2d1_max_vectors),
  673. grp2d1_max_vectors,
  674. },
  675. };
  676. static struct msm_bus_scale_pdata grp2d1_bus_scale_pdata = {
  677. grp2d1_bus_scale_usecases,
  678. ARRAY_SIZE(grp2d1_bus_scale_usecases),
  679. .name = "grp2d1",
  680. };
  681. #endif
  682. #ifdef CONFIG_HW_RANDOM_MSM
  683. static struct resource rng_resources = {
  684. .flags = IORESOURCE_MEM,
  685. .start = MSM_PRNG_PHYS,
  686. .end = MSM_PRNG_PHYS + SZ_512 - 1,
  687. };
  688. struct platform_device msm_device_rng = {
  689. .name = "msm_rng",
  690. .id = 0,
  691. .num_resources = 1,
  692. .resource = &rng_resources,
  693. };
  694. #endif
  695. static struct resource kgsl_3d0_resources[] = {
  696. {
  697. .name = KGSL_3D0_REG_MEMORY,
  698. .start = 0x04300000, /* GFX3D address */
  699. .end = 0x0431ffff,
  700. .flags = IORESOURCE_MEM,
  701. },
  702. {
  703. .name = KGSL_3D0_IRQ,
  704. .start = GFX3D_IRQ,
  705. .end = GFX3D_IRQ,
  706. .flags = IORESOURCE_IRQ,
  707. },
  708. };
  709. static struct kgsl_device_platform_data kgsl_3d0_pdata = {
  710. .pwrlevel = {
  711. {
  712. .gpu_freq = 266667000,
  713. .bus_freq = 4,
  714. .io_fraction = 0,
  715. },
  716. {
  717. .gpu_freq = 228571000,
  718. .bus_freq = 3,
  719. .io_fraction = 33,
  720. },
  721. {
  722. .gpu_freq = 200000000,
  723. .bus_freq = 2,
  724. .io_fraction = 100,
  725. },
  726. {
  727. .gpu_freq = 177778000,
  728. .bus_freq = 1,
  729. .io_fraction = 100,
  730. },
  731. {
  732. .gpu_freq = 27000000,
  733. .bus_freq = 0,
  734. },
  735. },
  736. .init_level = 0,
  737. .num_levels = 5,
  738. .set_grp_async = NULL,
  739. .idle_timeout = HZ/5,
  740. .clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE | KGSL_CLK_MEM_IFACE,
  741. #ifdef CONFIG_MSM_BUS_SCALING
  742. .bus_scale_table = &grp3d_bus_scale_pdata,
  743. #endif
  744. };
  745. struct platform_device msm_kgsl_3d0 = {
  746. .name = "kgsl-3d0",
  747. .id = 0,
  748. .num_resources = ARRAY_SIZE(kgsl_3d0_resources),
  749. .resource = kgsl_3d0_resources,
  750. .dev = {
  751. .platform_data = &kgsl_3d0_pdata,
  752. },
  753. };
  754. static struct resource kgsl_2d0_resources[] = {
  755. {
  756. .name = KGSL_2D0_REG_MEMORY,
  757. .start = 0x04100000, /* Z180 base address */
  758. .end = 0x04100FFF,
  759. .flags = IORESOURCE_MEM,
  760. },
  761. {
  762. .name = KGSL_2D0_IRQ,
  763. .start = GFX2D0_IRQ,
  764. .end = GFX2D0_IRQ,
  765. .flags = IORESOURCE_IRQ,
  766. },
  767. };
  768. static struct kgsl_device_platform_data kgsl_2d0_pdata = {
  769. .pwrlevel = {
  770. {
  771. .gpu_freq = 200000000,
  772. .bus_freq = 1,
  773. },
  774. {
  775. .gpu_freq = 200000000,
  776. .bus_freq = 0,
  777. },
  778. },
  779. .init_level = 0,
  780. .num_levels = 2,
  781. .set_grp_async = NULL,
  782. .idle_timeout = HZ/10,
  783. .clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE,
  784. #ifdef CONFIG_MSM_BUS_SCALING
  785. .bus_scale_table = &grp2d0_bus_scale_pdata,
  786. #endif
  787. };
  788. struct platform_device msm_kgsl_2d0 = {
  789. .name = "kgsl-2d0",
  790. .id = 0,
  791. .num_resources = ARRAY_SIZE(kgsl_2d0_resources),
  792. .resource = kgsl_2d0_resources,
  793. .dev = {
  794. .platform_data = &kgsl_2d0_pdata,
  795. },
  796. };
  797. static struct resource kgsl_2d1_resources[] = {
  798. {
  799. .name = KGSL_2D1_REG_MEMORY,
  800. .start = 0x04200000, /* Z180 device 1 base address */
  801. .end = 0x04200FFF,
  802. .flags = IORESOURCE_MEM,
  803. },
  804. {
  805. .name = KGSL_2D1_IRQ,
  806. .start = GFX2D1_IRQ,
  807. .end = GFX2D1_IRQ,
  808. .flags = IORESOURCE_IRQ,
  809. },
  810. };
  811. static struct kgsl_device_platform_data kgsl_2d1_pdata = {
  812. .pwrlevel = {
  813. {
  814. .gpu_freq = 200000000,
  815. .bus_freq = 1,
  816. },
  817. {
  818. .gpu_freq = 200000000,
  819. .bus_freq = 0,
  820. },
  821. },
  822. .init_level = 0,
  823. .num_levels = 2,
  824. .set_grp_async = NULL,
  825. .idle_timeout = HZ/10,
  826. .clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE,
  827. #ifdef CONFIG_MSM_BUS_SCALING
  828. .bus_scale_table = &grp2d1_bus_scale_pdata,
  829. #endif
  830. };
  831. struct platform_device msm_kgsl_2d1 = {
  832. .name = "kgsl-2d1",
  833. .id = 1,
  834. .num_resources = ARRAY_SIZE(kgsl_2d1_resources),
  835. .resource = kgsl_2d1_resources,
  836. .dev = {
  837. .platform_data = &kgsl_2d1_pdata,
  838. },
  839. };
  840. /*
  841. * this a software workaround for not having two distinct board
  842. * files for 8660v1 and 8660v2. 8660v1 has a faulty 2d clock, and
  843. * this workaround detects the cpu version to tell if the kernel is on a
  844. * 8660v1, and should disable the 2d core. it is called from the board file
  845. */
  846. void __init msm8x60_check_2d_hardware(void)
  847. {
  848. if ((SOCINFO_VERSION_MAJOR(socinfo_get_version()) == 1) &&
  849. (SOCINFO_VERSION_MINOR(socinfo_get_version()) == 0)) {
  850. printk(KERN_WARNING "kgsl: 2D cores disabled on 8660v1\n");
  851. kgsl_2d0_pdata.clk_map = 0;
  852. }
  853. }
  854. /* Use GSBI3 QUP for /dev/i2c-0 */
  855. struct platform_device msm_gsbi3_qup_i2c_device = {
  856. .name = "qup_i2c",
  857. .id = MSM_GSBI3_QUP_I2C_BUS_ID,
  858. .num_resources = ARRAY_SIZE(gsbi3_qup_i2c_resources),
  859. .resource = gsbi3_qup_i2c_resources,
  860. };
  861. /* Use GSBI4 QUP for /dev/i2c-1 */
  862. struct platform_device msm_gsbi4_qup_i2c_device = {
  863. .name = "qup_i2c",
  864. .id = MSM_GSBI4_QUP_I2C_BUS_ID,
  865. .num_resources = ARRAY_SIZE(gsbi4_qup_i2c_resources),
  866. .resource = gsbi4_qup_i2c_resources,
  867. };
  868. /* Use GSBI8 QUP for /dev/i2c-3 */
  869. struct platform_device msm_gsbi8_qup_i2c_device = {
  870. .name = "qup_i2c",
  871. .id = MSM_GSBI8_QUP_I2C_BUS_ID,
  872. .num_resources = ARRAY_SIZE(gsbi8_qup_i2c_resources),
  873. .resource = gsbi8_qup_i2c_resources,
  874. };
  875. /* Use GSBI9 QUP for /dev/i2c-2 */
  876. struct platform_device msm_gsbi9_qup_i2c_device = {
  877. .name = "qup_i2c",
  878. .id = MSM_GSBI9_QUP_I2C_BUS_ID,
  879. .num_resources = ARRAY_SIZE(gsbi9_qup_i2c_resources),
  880. .resource = gsbi9_qup_i2c_resources,
  881. };
  882. /* Use GSBI7 QUP for /dev/i2c-4 (Marimba) */
  883. struct platform_device msm_gsbi7_qup_i2c_device = {
  884. .name = "qup_i2c",
  885. .id = MSM_GSBI7_QUP_I2C_BUS_ID,
  886. .num_resources = ARRAY_SIZE(gsbi7_qup_i2c_resources),
  887. .resource = gsbi7_qup_i2c_resources,
  888. };
  889. /* Use GSBI12 QUP for /dev/i2c-5 (Sensors) */
  890. struct platform_device msm_gsbi12_qup_i2c_device = {
  891. .name = "qup_i2c",
  892. .id = MSM_GSBI12_QUP_I2C_BUS_ID,
  893. .num_resources = ARRAY_SIZE(gsbi12_qup_i2c_resources),
  894. .resource = gsbi12_qup_i2c_resources,
  895. };
  896. #ifdef CONFIG_MSM_SSBI
  897. #define MSM_SSBI_PMIC1_PHYS 0x00500000
  898. static struct resource resources_ssbi_pmic1_resource[] = {
  899. {
  900. .start = MSM_SSBI_PMIC1_PHYS,
  901. .end = MSM_SSBI_PMIC1_PHYS + SZ_4K - 1,
  902. .flags = IORESOURCE_MEM,
  903. },
  904. };
  905. struct platform_device msm_device_ssbi_pmic1 = {
  906. .name = "msm_ssbi",
  907. .id = 0,
  908. .resource = resources_ssbi_pmic1_resource,
  909. .num_resources = ARRAY_SIZE(resources_ssbi_pmic1_resource),
  910. };
  911. #define MSM_SSBI2_PMIC2B_PHYS 0x00C00000
  912. static struct resource resources_ssbi_pmic2_resource[] = {
  913. {
  914. .start = MSM_SSBI2_PMIC2B_PHYS,
  915. .end = MSM_SSBI2_PMIC2B_PHYS + SZ_4K - 1,
  916. .flags = IORESOURCE_MEM,
  917. },
  918. };
  919. struct platform_device msm_device_ssbi_pmic2 = {
  920. .name = "msm_ssbi",
  921. .id = 1,
  922. .resource = resources_ssbi_pmic2_resource,
  923. .num_resources = ARRAY_SIZE(resources_ssbi_pmic2_resource),
  924. };
  925. #endif
  926. #ifdef CONFIG_I2C_SSBI
  927. /* CODEC SSBI on /dev/i2c-8 */
  928. #define MSM_SSBI3_PHYS 0x18700000
  929. static struct resource msm_ssbi3_resources[] = {
  930. {
  931. .name = "ssbi_base",
  932. .start = MSM_SSBI3_PHYS,
  933. .end = MSM_SSBI3_PHYS + SZ_4K - 1,
  934. .flags = IORESOURCE_MEM,
  935. },
  936. };
  937. struct platform_device msm_device_ssbi3 = {
  938. .name = "i2c_ssbi",
  939. .id = MSM_SSBI3_I2C_BUS_ID,
  940. .num_resources = ARRAY_SIZE(msm_ssbi3_resources),
  941. .resource = msm_ssbi3_resources,
  942. };
  943. #endif /* CONFIG_I2C_SSBI */
  944. static struct resource gsbi1_qup_spi_resources[] = {
  945. {
  946. .name = "spi_base",
  947. .start = MSM_GSBI1_QUP_PHYS,
  948. .end = MSM_GSBI1_QUP_PHYS + SZ_4K - 1,
  949. .flags = IORESOURCE_MEM,
  950. },
  951. {
  952. .name = "gsbi_base",
  953. .start = MSM_GSBI1_PHYS,
  954. .end = MSM_GSBI1_PHYS + 4 - 1,
  955. .flags = IORESOURCE_MEM,
  956. },
  957. {
  958. .name = "spi_irq_in",
  959. .start = GSBI1_QUP_IRQ,
  960. .end = GSBI1_QUP_IRQ,
  961. .flags = IORESOURCE_IRQ,
  962. },
  963. {
  964. .name = "spidm_channels",
  965. .start = 5,
  966. .end = 6,
  967. .flags = IORESOURCE_DMA,
  968. },
  969. {
  970. .name = "spidm_crci",
  971. .start = 8,
  972. .end = 7,
  973. .flags = IORESOURCE_DMA,
  974. },
  975. {
  976. .name = "spi_clk",
  977. .start = 36,
  978. .end = 36,
  979. .flags = IORESOURCE_IO,
  980. },
  981. {
  982. .name = "spi_miso",
  983. .start = 34,
  984. .end = 34,
  985. .flags = IORESOURCE_IO,
  986. },
  987. {
  988. .name = "spi_mosi",
  989. .start = 33,
  990. .end = 33,
  991. .flags = IORESOURCE_IO,
  992. },
  993. {
  994. .name = "spi_cs",
  995. .start = 35,
  996. .end = 35,
  997. .flags = IORESOURCE_IO,
  998. },
  999. };
  1000. /* Use GSBI1 QUP for SPI-0 */
  1001. struct platform_device msm_gsbi1_qup_spi_device = {
  1002. .name = "spi_qsd",
  1003. .id = 0,
  1004. .num_resources = ARRAY_SIZE(gsbi1_qup_spi_resources),
  1005. .resource = gsbi1_qup_spi_resources,
  1006. };
  1007. static struct resource gsbi10_qup_spi_resources[] = {
  1008. {
  1009. .name = "spi_base",
  1010. .start = MSM_GSBI10_QUP_PHYS,
  1011. .end = MSM_GSBI10_QUP_PHYS + SZ_4K - 1,
  1012. .flags = IORESOURCE_MEM,
  1013. },
  1014. {
  1015. .name = "gsbi_base",
  1016. .start = MSM_GSBI10_PHYS,
  1017. .end = MSM_GSBI10_PHYS + 4 - 1,
  1018. .flags = IORESOURCE_MEM,
  1019. },
  1020. {
  1021. .name = "spi_irq_in",
  1022. .start = GSBI10_QUP_IRQ,
  1023. .end = GSBI10_QUP_IRQ,
  1024. .flags = IORESOURCE_IRQ,
  1025. },
  1026. {
  1027. .name = "spi_clk",
  1028. .start = 73,
  1029. .end = 73,
  1030. .flags = IORESOURCE_IO,
  1031. },
  1032. {
  1033. .name = "spi_cs",
  1034. .start = 72,
  1035. .end = 72,
  1036. .flags = IORESOURCE_IO,
  1037. },
  1038. {
  1039. .name = "spi_mosi",
  1040. .start = 70,
  1041. .end = 70,
  1042. .flags = IORESOURCE_IO,
  1043. },
  1044. };
  1045. /* Use GSBI10 QUP for SPI-1 */
  1046. struct platform_device msm_gsbi10_qup_spi_device = {
  1047. .name = "spi_qsd",
  1048. .id = 1,
  1049. .num_resources = ARRAY_SIZE(gsbi10_qup_spi_resources),
  1050. .resource = gsbi10_qup_spi_resources,
  1051. };
  1052. #define MSM_SDC1_BASE 0x12400000
  1053. #define MSM_SDC1_DML_BASE (MSM_SDC1_BASE + 0x800)
  1054. #define MSM_SDC1_BAM_BASE (MSM_SDC1_BASE + 0x2000)
  1055. #define MSM_SDC2_BASE 0x12140000
  1056. #define MSM_SDC2_DML_BASE (MSM_SDC2_BASE + 0x800)
  1057. #define MSM_SDC2_BAM_BASE (MSM_SDC2_BASE + 0x2000)
  1058. #define MSM_SDC3_BASE 0x12180000
  1059. #define MSM_SDC3_DML_BASE (MSM_SDC3_BASE + 0x800)
  1060. #define MSM_SDC3_BAM_BASE (MSM_SDC3_BASE + 0x2000)
  1061. #define MSM_SDC4_BASE 0x121C0000
  1062. #define MSM_SDC4_DML_BASE (MSM_SDC4_BASE + 0x800)
  1063. #define MSM_SDC4_BAM_BASE (MSM_SDC4_BASE + 0x2000)
  1064. #define MSM_SDC5_BASE 0x12200000
  1065. #define MSM_SDC5_DML_BASE (MSM_SDC5_BASE + 0x800)
  1066. #define MSM_SDC5_BAM_BASE (MSM_SDC5_BASE + 0x2000)
  1067. static struct resource resources_sdc1[] = {
  1068. {
  1069. .name = "core_mem",
  1070. .start = MSM_SDC1_BASE,
  1071. .end = MSM_SDC1_DML_BASE - 1,
  1072. .flags = IORESOURCE_MEM,
  1073. },
  1074. {
  1075. .name = "core_irq",
  1076. .start = SDC1_IRQ_0,
  1077. .end = SDC1_IRQ_0,
  1078. .flags = IORESOURCE_IRQ,
  1079. },
  1080. #ifdef CONFIG_MMC_MSM_SPS_SUPPORT
  1081. {
  1082. .name = "dml_mem",
  1083. .start = MSM_SDC1_DML_BASE,
  1084. .end = MSM_SDC1_BAM_BASE - 1,
  1085. .flags = IORESOURCE_MEM,
  1086. },
  1087. {
  1088. .name = "bam_mem",
  1089. .start = MSM_SDC1_BAM_BASE,
  1090. .end = MSM_SDC1_BAM_BASE + (2 * SZ_4K) - 1,
  1091. .flags = IORESOURCE_MEM,
  1092. },
  1093. {
  1094. .name = "bam_irq",
  1095. .start = SDC1_BAM_IRQ,
  1096. .end = SDC1_BAM_IRQ,
  1097. .flags = IORESOURCE_IRQ,
  1098. },
  1099. #else
  1100. {
  1101. .name = "dma_chnl",
  1102. .start = DMOV_SDC1_CHAN,
  1103. .end = DMOV_SDC1_CHAN,
  1104. .flags = IORESOURCE_DMA,
  1105. },
  1106. {
  1107. .name = "dma_crci",
  1108. .start = DMOV_SDC1_CRCI,
  1109. .end = DMOV_SDC1_CRCI,
  1110. .flags = IORESOURCE_DMA,
  1111. }
  1112. #endif /* CONFIG_MMC_MSM_SPS_SUPPORT */
  1113. };
  1114. static struct resource resources_sdc2[] = {
  1115. {
  1116. .name = "core_mem",
  1117. .start = MSM_SDC2_BASE,
  1118. .end = MSM_SDC2_DML_BASE - 1,
  1119. .flags = IORESOURCE_MEM,
  1120. },
  1121. {
  1122. .name = "core_irq",
  1123. .start = SDC2_IRQ_0,
  1124. .end = SDC2_IRQ_0,
  1125. .flags = IORESOURCE_IRQ,
  1126. },
  1127. #ifdef CONFIG_MMC_MSM_SPS_SUPPORT
  1128. {
  1129. .name = "dml_mem",
  1130. .start = MSM_SDC2_DML_BASE,
  1131. .end = MSM_SDC2_BAM_BASE - 1,
  1132. .flags = IORESOURCE_MEM,
  1133. },
  1134. {
  1135. .name = "bam_mem",
  1136. .start = MSM_SDC2_BAM_BASE,
  1137. .end = MSM_SDC2_BAM_BASE + (2 * SZ_4K) - 1,
  1138. .flags = IORESOURCE_MEM,
  1139. },
  1140. {
  1141. .name = "bam_irq",
  1142. .start = SDC2_BAM_IRQ,
  1143. .end = SDC2_BAM_IRQ,
  1144. .flags = IORESOURCE_IRQ,
  1145. },
  1146. #else
  1147. {
  1148. .name = "dma_chnl",
  1149. .start = DMOV_SDC2_CHAN,
  1150. .end = DMOV_SDC2_CHAN,
  1151. .flags = IORESOURCE_DMA,
  1152. },
  1153. {
  1154. .name = "dma_crci",
  1155. .start = DMOV_SDC2_CRCI,
  1156. .end = DMOV_SDC2_CRCI,
  1157. .flags = IORESOURCE_DMA,
  1158. }
  1159. #endif /* CONFIG_MMC_MSM_SPS_SUPPORT */
  1160. };
  1161. static struct resource resources_sdc3[] = {
  1162. {
  1163. .name = "core_mem",
  1164. .start = MSM_SDC3_BASE,
  1165. .end = MSM_SDC3_DML_BASE - 1,
  1166. .flags = IORESOURCE_MEM,
  1167. },
  1168. {
  1169. .name = "core_irq",
  1170. .start = SDC3_IRQ_0,
  1171. .end = SDC3_IRQ_0,
  1172. .flags = IORESOURCE_IRQ,
  1173. },
  1174. #ifdef CONFIG_MMC_MSM_SPS_SUPPORT
  1175. {
  1176. .name = "dml_mem",
  1177. .start = MSM_SDC3_DML_BASE,
  1178. .end = MSM_SDC3_BAM_BASE - 1,
  1179. .flags = IORESOURCE_MEM,
  1180. },
  1181. {
  1182. .name = "bam_mem",
  1183. .start = MSM_SDC3_BAM_BASE,
  1184. .end = MSM_SDC3_BAM_BASE + (2 * SZ_4K) - 1,
  1185. .flags = IORESOURCE_MEM,
  1186. },
  1187. {
  1188. .name = "bam_irq",
  1189. .start = SDC3_BAM_IRQ,
  1190. .end = SDC3_BAM_IRQ,
  1191. .flags = IORESOURCE_IRQ,
  1192. },
  1193. #else
  1194. {
  1195. .name = "dma_chnl",
  1196. .start = DMOV_SDC3_CHAN,
  1197. .end = DMOV_SDC3_CHAN,
  1198. .flags = IORESOURCE_DMA,
  1199. },
  1200. {
  1201. .name = "dma_crci",
  1202. .start = DMOV_SDC3_CRCI,
  1203. .end = DMOV_SDC3_CRCI,
  1204. .flags = IORESOURCE_DMA,
  1205. },
  1206. #endif /* CONFIG_MMC_MSM_SPS_SUPPORT */
  1207. };
  1208. static struct resource resources_sdc4[] = {
  1209. {
  1210. .name = "core_mem",
  1211. .start = MSM_SDC4_BASE,
  1212. .end = MSM_SDC4_DML_BASE - 1,
  1213. .flags = IORESOURCE_MEM,
  1214. },
  1215. {
  1216. .name = "core_irq",
  1217. .start = SDC4_IRQ_0,
  1218. .end = SDC4_IRQ_0,
  1219. .flags = IORESOURCE_IRQ,
  1220. },
  1221. #ifdef CONFIG_MMC_MSM_SPS_SUPPORT
  1222. {
  1223. .name = "dml_mem",
  1224. .start = MSM_SDC4_DML_BASE,
  1225. .end = MSM_SDC4_BAM_BASE - 1,
  1226. .flags = IORESOURCE_MEM,
  1227. },
  1228. {
  1229. .name = "bam_mem",
  1230. .start = MSM_SDC4_BAM_BASE,
  1231. .end = MSM_SDC4_BAM_BASE + (2 * SZ_4K) - 1,
  1232. .flags = IORESOURCE_MEM,
  1233. },
  1234. {
  1235. .name = "bam_irq",
  1236. .start = SDC4_BAM_IRQ,
  1237. .end = SDC4_BAM_IRQ,
  1238. .flags = IORESOURCE_IRQ,
  1239. },
  1240. #else
  1241. {
  1242. .name = "dma_chnl",
  1243. .start = DMOV_SDC4_CHAN,
  1244. .end = DMOV_SDC4_CHAN,
  1245. .flags = IORESOURCE_DMA,
  1246. },
  1247. {
  1248. .name = "dma_crci",
  1249. .start = DMOV_SDC4_CRCI,
  1250. .end = DMOV_SDC4_CRCI,
  1251. .flags = IORESOURCE_DMA,
  1252. },
  1253. #endif /* CONFIG_MMC_MSM_SPS_SUPPORT */
  1254. };
  1255. static struct resource resources_sdc5[] = {
  1256. {
  1257. .name = "core_mem",
  1258. .start = MSM_SDC5_BASE,
  1259. .end = MSM_SDC5_DML_BASE - 1,
  1260. .flags = IORESOURCE_MEM,
  1261. },
  1262. {
  1263. .name = "core_irq",
  1264. .start = SDC5_IRQ_0,
  1265. .end = SDC5_IRQ_0,
  1266. .flags = IORESOURCE_IRQ,
  1267. },
  1268. #ifdef CONFIG_MMC_MSM_SPS_SUPPORT
  1269. {
  1270. .name = "dml_mem",
  1271. .start = MSM_SDC5_DML_BASE,
  1272. .end = MSM_SDC5_BAM_BASE - 1,
  1273. .flags = IORESOURCE_MEM,
  1274. },
  1275. {
  1276. .name = "bam_mem",
  1277. .start = MSM_SDC5_BAM_BASE,
  1278. .end = MSM_SDC5_BAM_BASE + (2 * SZ_4K) - 1,
  1279. .flags = IORESOURCE_MEM,
  1280. },
  1281. {
  1282. .name = "bam_irq",
  1283. .start = SDC5_BAM_IRQ,
  1284. .end = SDC5_BAM_IRQ,
  1285. .flags = IORESOURCE_IRQ,
  1286. },
  1287. #else
  1288. {
  1289. .name = "dma_chnl",
  1290. .start = DMOV_SDC5_CHAN,
  1291. .end = DMOV_SDC5_CHAN,
  1292. .flags = IORESOURCE_DMA,
  1293. },
  1294. {
  1295. .name = "dma_crci",
  1296. .start = DMOV_SDC5_CRCI,
  1297. .end = DMOV_SDC5_CRCI,
  1298. .flags = IORESOURCE_DMA,
  1299. },
  1300. #endif /* CONFIG_MMC_MSM_SPS_SUPPORT */
  1301. };
  1302. struct platform_device msm_device_sdc1 = {
  1303. .name = "msm_sdcc",
  1304. .id = 1,
  1305. .num_resources = ARRAY_SIZE(resources_sdc1),
  1306. .resource = resources_sdc1,
  1307. .dev = {
  1308. .coherent_dma_mask = 0xffffffff,
  1309. },
  1310. };
  1311. struct platform_device msm_device_sdc2 = {
  1312. .name = "msm_sdcc",
  1313. .id = 2,
  1314. .num_resources = ARRAY_SIZE(resources_sdc2),
  1315. .resource = resources_sdc2,
  1316. .dev = {
  1317. .coherent_dma_mask = 0xffffffff,
  1318. },
  1319. };
  1320. struct platform_device msm_device_sdc3 = {
  1321. .name = "msm_sdcc",
  1322. .id = 3,
  1323. .num_resources = ARRAY_SIZE(resources_sdc3),
  1324. .resource = resources_sdc3,
  1325. .dev = {
  1326. .coherent_dma_mask = 0xffffffff,
  1327. },
  1328. };
  1329. struct platform_device msm_device_sdc4 = {
  1330. .name = "msm_sdcc",
  1331. .id = 4,
  1332. .num_resources = ARRAY_SIZE(resources_sdc4),
  1333. .resource = resources_sdc4,
  1334. .dev = {
  1335. .coherent_dma_mask = 0xffffffff,
  1336. },
  1337. };
  1338. struct platform_device msm_device_sdc5 = {
  1339. .name = "msm_sdcc",
  1340. .id = 5,
  1341. .num_resources = ARRAY_SIZE(resources_sdc5),
  1342. .resource = resources_sdc5,
  1343. .dev = {
  1344. .coherent_dma_mask = 0xffffffff,
  1345. },
  1346. };
  1347. static struct platform_device *msm_sdcc_devices[] __initdata = {
  1348. &msm_device_sdc1,
  1349. &msm_device_sdc2,
  1350. &msm_device_sdc3,
  1351. &msm_device_sdc4,
  1352. &msm_device_sdc5,
  1353. };
  1354. int __init msm_add_sdcc(unsigned int controller, struct mmc_platform_data *plat)
  1355. {
  1356. struct platform_device *pdev;
  1357. if (controller < 1 || controller > 5)
  1358. return -EINVAL;
  1359. pdev = msm_sdcc_devices[controller-1];
  1360. pdev->dev.platform_data = plat;
  1361. return platform_device_register(pdev);
  1362. }
  1363. #ifdef CONFIG_MSM_CAMERA_V4L2
  1364. static struct resource msm_csic0_resources[] = {
  1365. {
  1366. .name = "csic",
  1367. .start = 0x04800000,
  1368. .end = 0x04800000 + 0x00000400 - 1,
  1369. .flags = IORESOURCE_MEM,
  1370. },
  1371. {
  1372. .name = "csic",
  1373. .start = CSI_0_IRQ,
  1374. .end = CSI_0_IRQ,
  1375. .flags = IORESOURCE_IRQ,
  1376. },
  1377. };
  1378. static struct resource msm_csic1_resources[] = {
  1379. {
  1380. .name = "csic",
  1381. .start = 0x04900000,
  1382. .end = 0x04900000 + 0x00000400 - 1,
  1383. .flags = IORESOURCE_MEM,
  1384. },
  1385. {
  1386. .name = "csic",
  1387. .start = CSI_1_IRQ,
  1388. .end = CSI_1_IRQ,
  1389. .flags = IORESOURCE_IRQ,
  1390. },
  1391. };
  1392. struct resource msm_vfe_resources[] = {
  1393. {
  1394. .name = "msm_vfe",
  1395. .start = 0x04500000,
  1396. .end = 0x04500000 + SZ_1M - 1,
  1397. .flags = IORESOURCE_MEM,
  1398. },
  1399. {
  1400. .name = "msm_vfe",
  1401. .start = VFE_IRQ,
  1402. .end = VFE_IRQ,
  1403. .flags = IORESOURCE_IRQ,
  1404. },
  1405. };
  1406. static struct resource msm_vpe_resources[] = {
  1407. {
  1408. .name = "vpe",
  1409. .start = 0x05300000,
  1410. .end = 0x05300000 + SZ_1M - 1,
  1411. .flags = IORESOURCE_MEM,
  1412. },
  1413. {
  1414. .name = "vpe",
  1415. .start = INT_VPE,
  1416. .end = INT_VPE,
  1417. .flags = IORESOURCE_IRQ,
  1418. },
  1419. };
  1420. struct platform_device msm_device_csic0 = {
  1421. .name = "msm_csic",
  1422. .id = 0,
  1423. .resource = msm_csic0_resources,
  1424. .num_resources = ARRAY_SIZE(msm_csic0_resources),
  1425. };
  1426. struct platform_device msm_device_csic1 = {
  1427. .name = "msm_csic",
  1428. .id = 1,
  1429. .resource = msm_csic1_resources,
  1430. .num_resources = ARRAY_SIZE(msm_csic1_resources),
  1431. };
  1432. struct platform_device msm_device_vfe = {
  1433. .name = "msm_vfe",
  1434. .id = 0,
  1435. .resource = msm_vfe_resources,
  1436. .num_resources = ARRAY_SIZE(msm_vfe_resources),
  1437. };
  1438. struct platform_device msm_device_vpe = {
  1439. .name = "msm_vpe",
  1440. .id = 0,
  1441. .resource = msm_vpe_resources,
  1442. .num_resources = ARRAY_SIZE(msm_vpe_resources),
  1443. };
  1444. #endif
  1445. #define MIPI_DSI_HW_BASE 0x04700000
  1446. #define ROTATOR_HW_BASE 0x04E00000
  1447. #define TVENC_HW_BASE 0x04F00000
  1448. #define MDP_HW_BASE 0x05100000
  1449. static struct resource msm_mipi_dsi_resources[] = {
  1450. {
  1451. .name = "mipi_dsi",
  1452. .start = MIPI_DSI_HW_BASE,
  1453. .end = MIPI_DSI_HW_BASE + 0x000F0000 - 1,
  1454. .flags = IORESOURCE_MEM,
  1455. },
  1456. {
  1457. .start = DSI_IRQ,
  1458. .end = DSI_IRQ,
  1459. .flags = IORESOURCE_IRQ,
  1460. },
  1461. };
  1462. static struct platform_device msm_mipi_dsi_device = {
  1463. .name = "mipi_dsi",
  1464. .id = 1,
  1465. .num_resources = ARRAY_SIZE(msm_mipi_dsi_resources),
  1466. .resource = msm_mipi_dsi_resources,
  1467. };
  1468. static struct resource msm_mdp_resources[] = {
  1469. {
  1470. .name = "mdp",
  1471. .start = MDP_HW_BASE,
  1472. .end = MDP_HW_BASE + 0x000F0000 - 1,
  1473. .flags = IORESOURCE_MEM,
  1474. },
  1475. {
  1476. .start = INT_MDP,
  1477. .end = INT_MDP,
  1478. .flags = IORESOURCE_IRQ,
  1479. },
  1480. };
  1481. static struct platform_device msm_mdp_device = {
  1482. .name = "mdp",
  1483. .id = 0,
  1484. .num_resources = ARRAY_SIZE(msm_mdp_resources),
  1485. .resource = msm_mdp_resources,
  1486. };
  1487. #ifdef CONFIG_MSM_ROTATOR
  1488. static struct resource resources_msm_rotator[] = {
  1489. {
  1490. .start = 0x04E00000,
  1491. .end = 0x04F00000 - 1,
  1492. .flags = IORESOURCE_MEM,
  1493. },
  1494. {
  1495. .start = ROT_IRQ,
  1496. .end = ROT_IRQ,
  1497. .flags = IORESOURCE_IRQ,
  1498. },
  1499. };
  1500. static struct msm_rot_clocks rotator_clocks[] = {
  1501. {
  1502. .clk_name = "core_clk",
  1503. .clk_type = ROTATOR_CORE_CLK,
  1504. .clk_rate = 160 * 1000 * 1000,
  1505. },
  1506. {
  1507. .clk_name = "iface_clk",
  1508. .clk_type = ROTATOR_PCLK,
  1509. .clk_rate = 0,
  1510. },
  1511. };
  1512. static struct msm_rotator_platform_data rotator_pdata = {
  1513. .number_of_clocks = ARRAY_SIZE(rotator_clocks),
  1514. .hardware_version_number = 0x01010307,
  1515. .rotator_clks = rotator_clocks,
  1516. #ifdef CONFIG_MSM_BUS_SCALING
  1517. .bus_scale_table = &rotator_bus_scale_pdata,
  1518. #endif
  1519. .rot_iommu_split_domain = 0,
  1520. };
  1521. struct platform_device msm_rotator_device = {
  1522. .name = "msm_rotator",
  1523. .id = 0,
  1524. .num_resources = ARRAY_SIZE(resources_msm_rotator),
  1525. .resource = resources_msm_rotator,
  1526. .dev = {
  1527. .platform_data = &rotator_pdata,
  1528. },
  1529. };
  1530. #endif
  1531. /* Sensors DSPS platform data */
  1532. #ifdef CONFIG_MSM_DSPS
  1533. #define PPSS_REG_PHYS_BASE 0x12080000
  1534. #define PPSS_PAUSE_REG 0x1804
  1535. #define MHZ (1000*1000)
  1536. #define TCSR_GSBI_IRQ_MUX_SEL 0x0044
  1537. #define GSBI_IRQ_MUX_SEL_MASK 0xF
  1538. #define GSBI_IRQ_MUX_SEL_DSPS 0xB
  1539. static void dsps_init1(struct msm_dsps_platform_data *data)
  1540. {
  1541. int val;
  1542. /* route GSBI12 interrutps to DSPS */
  1543. val = secure_readl(MSM_TCSR_BASE + TCSR_GSBI_IRQ_MUX_SEL);
  1544. val &= ~GSBI_IRQ_MUX_SEL_MASK;
  1545. val |= GSBI_IRQ_MUX_SEL_DSPS;
  1546. secure_writel(val, MSM_TCSR_BASE + TCSR_GSBI_IRQ_MUX_SEL);
  1547. }
  1548. static struct dsps_clk_info dsps_clks[] = {
  1549. {
  1550. .name = "iface_clk",
  1551. .rate = 0, /* no rate just on/off */
  1552. },
  1553. {
  1554. .name = "mem_clk",
  1555. .rate = 0, /* no rate just on/off */
  1556. },
  1557. {
  1558. .name = "gsbi_qup_clk",
  1559. .rate = 24 * MHZ, /* See clk_tbl_gsbi_qup[] */
  1560. },
  1561. {
  1562. .name = "dfab_dsps_clk",
  1563. .rate = 64 * MHZ, /* Same rate as USB. */
  1564. }
  1565. };
  1566. static struct dsps_regulator_info dsps_regs[] = {
  1567. {
  1568. .name = "8058_l5",
  1569. .volt = 2850000, /* in uV */
  1570. },
  1571. {
  1572. .name = "8058_s3",
  1573. .volt = 1800000, /* in uV */
  1574. }
  1575. };
  1576. /*
  1577. * Note: GPIOs field is intialized in run-time at the function
  1578. * msm8x60_init_dsps().
  1579. */
  1580. struct msm_dsps_platform_data msm_dsps_pdata = {
  1581. .clks = dsps_clks,
  1582. .clks_num = ARRAY_SIZE(dsps_clks),
  1583. .gpios = NULL,
  1584. .gpios_num = 0,
  1585. .regs = dsps_regs,
  1586. .regs_num = ARRAY_SIZE(dsps_regs),
  1587. .init = dsps_init1,
  1588. .ppss_pause_reg = PPSS_PAUSE_REG,
  1589. .signature = DSPS_SIGNATURE,
  1590. };
  1591. static struct resource msm_dsps_resources[] = {
  1592. {
  1593. .start = PPSS_REG_PHYS_BASE,
  1594. .end = PPSS_REG_PHYS_BASE + SZ_8K - 1,
  1595. .name = "ppss_reg",
  1596. .flags = IORESOURCE_MEM,
  1597. },
  1598. };
  1599. struct platform_device msm_dsps_device = {
  1600. .name = "msm_dsps",
  1601. .id = 0,
  1602. .num_resources = ARRAY_SIZE(msm_dsps_resources),
  1603. .resource = msm_dsps_resources,
  1604. .dev.platform_data = &msm_dsps_pdata,
  1605. };
  1606. #endif /* CONFIG_MSM_DSPS */
  1607. #ifdef CONFIG_FB_MSM_TVOUT
  1608. static struct resource msm_tvenc_resources[] = {
  1609. {
  1610. .name = "tvenc",
  1611. .start = TVENC_HW_BASE,
  1612. .end = TVENC_HW_BASE + PAGE_SIZE - 1,
  1613. .flags = IORESOURCE_MEM,
  1614. }
  1615. };
  1616. static struct resource tvout_device_resources[] = {
  1617. {
  1618. .name = "tvout_device_irq",
  1619. .start = TV_ENC_IRQ,
  1620. .end = TV_ENC_IRQ,
  1621. .flags = IORESOURCE_IRQ,
  1622. },
  1623. };
  1624. #endif
  1625. static void __init msm_register_device(struct platform_device *pdev, void *data)
  1626. {
  1627. int ret;
  1628. pdev->dev.platform_data = data;
  1629. ret = platform_device_register(pdev);
  1630. if (ret)
  1631. dev_err(&pdev->dev,
  1632. "%s: platform_device_register() failed = %d\n",
  1633. __func__, ret);
  1634. }
  1635. struct platform_device msm_lcdc_device = {
  1636. .name = "lcdc",
  1637. .id = 0,
  1638. };
  1639. #ifdef CONFIG_FB_MSM_TVOUT
  1640. static struct platform_device msm_tvenc_device = {
  1641. .name = "tvenc",
  1642. .id = 0,
  1643. .num_resources = ARRAY_SIZE(msm_tvenc_resources),
  1644. .resource = msm_tvenc_resources,
  1645. };
  1646. static struct platform_device msm_tvout_device = {
  1647. .name = "tvout_device",
  1648. .id = 0,
  1649. .num_resources = ARRAY_SIZE(tvout_device_resources),
  1650. .resource = tvout_device_resources,
  1651. };
  1652. #endif
  1653. #ifdef CONFIG_MSM_BUS_SCALING
  1654. static struct platform_device msm_dtv_device = {
  1655. .name = "dtv",
  1656. .id = 0,
  1657. };
  1658. #endif
  1659. void __init msm_fb_register_device(char *name, void *data)
  1660. {
  1661. if (!strncmp(name, "mdp", 3))
  1662. msm_register_device(&msm_mdp_device, data);
  1663. else if (!strncmp(name, "lcdc", 4))
  1664. msm_register_device(&msm_lcdc_device, data);
  1665. else if (!strncmp(name, "mipi_dsi", 8))
  1666. msm_register_device(&msm_mipi_dsi_device, data);
  1667. #ifdef CONFIG_FB_MSM_TVOUT
  1668. else if (!strncmp(name, "tvenc", 5))
  1669. msm_register_device(&msm_tvenc_device, data);
  1670. else if (!strncmp(name, "tvout_device", 12))
  1671. msm_register_device(&msm_tvout_device, data);
  1672. #endif
  1673. #ifdef CONFIG_MSM_BUS_SCALING
  1674. else if (!strncmp(name, "dtv", 3))
  1675. msm_register_device(&msm_dtv_device, data);
  1676. #endif
  1677. else
  1678. printk(KERN_ERR "%s: unknown device! %s\n", __func__, name);
  1679. }
  1680. static struct resource resources_otg[] = {
  1681. {
  1682. .start = 0x12500000,
  1683. .end = 0x12500000 + SZ_1K - 1,
  1684. .flags = IORESOURCE_MEM,
  1685. },
  1686. {
  1687. .start = USB1_HS_IRQ,
  1688. .end = USB1_HS_IRQ,
  1689. .flags = IORESOURCE_IRQ,
  1690. },
  1691. };
  1692. struct platform_device msm_device_otg = {
  1693. .name = "msm_otg",
  1694. .id = -1,
  1695. .num_resources = ARRAY_SIZE(resources_otg),
  1696. .resource = resources_otg,
  1697. };
  1698. static u64 dma_mask = 0xffffffffULL;
  1699. struct platform_device msm_device_gadget_peripheral = {
  1700. .name = "msm_hsusb",
  1701. .id = -1,
  1702. .dev = {
  1703. .dma_mask = &dma_mask,
  1704. .coherent_dma_mask = 0xffffffffULL,
  1705. },
  1706. };
  1707. #ifdef CONFIG_USB_EHCI_MSM_72K
  1708. static struct resource resources_hsusb_host[] = {
  1709. {
  1710. .start = 0x12500000,
  1711. .end = 0x12500000 + SZ_1K - 1,
  1712. .flags = IORESOURCE_MEM,
  1713. },
  1714. {
  1715. .start = USB1_HS_IRQ,
  1716. .end = USB1_HS_IRQ,
  1717. .flags = IORESOURCE_IRQ,
  1718. },
  1719. };
  1720. struct platform_device msm_device_hsusb_host = {
  1721. .name = "msm_hsusb_host",
  1722. .id = 0,
  1723. .num_resources = ARRAY_SIZE(resources_hsusb_host),
  1724. .resource = resources_hsusb_host,
  1725. .dev = {
  1726. .dma_mask = &dma_mask,
  1727. .coherent_dma_mask = 0xffffffffULL,
  1728. },
  1729. };
  1730. static struct platform_device *msm_host_devices[] = {
  1731. &msm_device_hsusb_host,
  1732. };
  1733. int msm_add_host(unsigned int host, struct msm_usb_host_platform_data *plat)
  1734. {
  1735. struct platform_device *pdev;
  1736. pdev = msm_host_devices[host];
  1737. if (!pdev)
  1738. return -ENODEV;
  1739. pdev->dev.platform_data = plat;
  1740. return platform_device_register(pdev);
  1741. }
  1742. #endif
  1743. #define MSM_TSIF0_PHYS (0x18200000)
  1744. #define MSM_TSIF1_PHYS (0x18201000)
  1745. #define MSM_TSIF_SIZE (0x200)
  1746. #define TCSR_ADM_0_A_CRCI_MUX_SEL 0x0070
  1747. #define TSIF_0_CLK GPIO_CFG(93, 1, GPIO_CFG_INPUT, \
  1748. GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
  1749. #define TSIF_0_EN GPIO_CFG(94, 1, GPIO_CFG_INPUT, \
  1750. GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
  1751. #define TSIF_0_DATA GPIO_CFG(95, 1, GPIO_CFG_INPUT, \
  1752. GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
  1753. #define TSIF_0_SYNC GPIO_CFG(96, 1, GPIO_CFG_INPUT, \
  1754. GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
  1755. #define TSIF_1_CLK GPIO_CFG(97, 1, GPIO_CFG_INPUT, \
  1756. GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
  1757. #define TSIF_1_EN GPIO_CFG(98, 1, GPIO_CFG_INPUT, \
  1758. GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
  1759. #define TSIF_1_DATA GPIO_CFG(99, 1, GPIO_CFG_INPUT, \
  1760. GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
  1761. #define TSIF_1_SYNC GPIO_CFG(100, 1, GPIO_CFG_INPUT, \
  1762. GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)
  1763. static const struct msm_gpio tsif0_gpios[] = {
  1764. { .gpio_cfg = TSIF_0_CLK, .label = "tsif_clk", },
  1765. { .gpio_cfg = TSIF_0_EN, .label = "tsif_en", },
  1766. { .gpio_cfg = TSIF_0_DATA, .label = "tsif_data", },
  1767. { .gpio_cfg = TSIF_0_SYNC, .label = "tsif_sync", },
  1768. };
  1769. static const struct msm_gpio tsif1_gpios[] = {
  1770. { .gpio_cfg = TSIF_1_CLK, .label = "tsif_clk", },
  1771. { .gpio_cfg = TSIF_1_EN, .label = "tsif_en", },
  1772. { .gpio_cfg = TSIF_1_DATA, .label = "tsif_data", },
  1773. { .gpio_cfg = TSIF_1_SYNC, .label = "tsif_sync", },
  1774. };
  1775. static void tsif_release(struct device *dev)
  1776. {
  1777. }
  1778. static void tsif_init1(struct msm_tsif_platform_data *data)
  1779. {
  1780. int val;
  1781. /* configure mux to use correct tsif instance */
  1782. val = secure_readl(MSM_TCSR_BASE + TCSR_ADM_0_A_CRCI_MUX_SEL);
  1783. val |= 0x80000000;
  1784. secure_writel(val, MSM_TCSR_BASE + TCSR_ADM_0_A_CRCI_MUX_SEL);
  1785. }
  1786. struct msm_tsif_platform_data tsif1_platform_data = {
  1787. .num_gpios = ARRAY_SIZE(tsif1_gpios),
  1788. .gpios = tsif1_gpios,
  1789. .tsif_pclk = "iface_clk",
  1790. .tsif_ref_clk = "ref_clk",
  1791. .init = tsif_init1
  1792. };
  1793. struct resource tsif1_resources[] = {
  1794. [0] = {
  1795. .flags = IORESOURCE_IRQ,
  1796. .start = TSIF2_IRQ,
  1797. .end = TSIF2_IRQ,
  1798. },
  1799. [1] = {
  1800. .flags = IORESOURCE_MEM,
  1801. .start = MSM_TSIF1_PHYS,
  1802. .end = MSM_TSIF1_PHYS + MSM_TSIF_SIZE - 1,
  1803. },
  1804. [2] = {
  1805. .flags = IORESOURCE_DMA,
  1806. .start = DMOV_TSIF_CHAN,
  1807. .end = DMOV_TSIF_CRCI,
  1808. },
  1809. };
  1810. static void tsif_init0(struct msm_tsif_platform_data *data)
  1811. {
  1812. int val;
  1813. /* configure mux to use correct tsif instance */
  1814. val = secure_readl(MSM_TCSR_BASE + TCSR_ADM_0_A_CRCI_MUX_SEL);
  1815. val &= 0x7FFFFFFF;
  1816. secure_writel(val, MSM_TCSR_BASE + TCSR_ADM_0_A_CRCI_MUX_SEL);
  1817. }
  1818. struct msm_tsif_platform_data tsif0_platform_data = {
  1819. .num_gpios = ARRAY_SIZE(tsif0_gpios),
  1820. .gpios = tsif0_gpios,
  1821. .tsif_pclk = "iface_clk",
  1822. .tsif_ref_clk = "ref_clk",
  1823. .init = tsif_init0
  1824. };
  1825. struct resource tsif0_resources[] = {
  1826. [0] = {
  1827. .flags = IORESOURCE_IRQ,
  1828. .start = TSIF1_IRQ,
  1829. .end = TSIF1_IRQ,
  1830. },
  1831. [1] = {
  1832. .flags = IORESOURCE_MEM,
  1833. .start = MSM_TSIF0_PHYS,
  1834. .end = MSM_TSIF0_PHYS + MSM_TSIF_SIZE - 1,
  1835. },
  1836. [2] = {
  1837. .flags = IORESOURCE_DMA,
  1838. .start = DMOV_TSIF_CHAN,
  1839. .end = DMOV_TSIF_CRCI,
  1840. },
  1841. };
  1842. struct platform_device msm_device_tsif[2] = {
  1843. {
  1844. .name = "msm_tsif",
  1845. .id = 0,
  1846. .num_resources = ARRAY_SIZE(tsif0_resources),
  1847. .resource = tsif0_resources,
  1848. .dev = {
  1849. .release = tsif_release,
  1850. .platform_data = &tsif0_platform_data
  1851. },
  1852. },
  1853. {
  1854. .name = "msm_tsif",
  1855. .id = 1,
  1856. .num_resources = ARRAY_SIZE(tsif1_resources),
  1857. .resource = tsif1_resources,
  1858. .dev = {
  1859. .release = tsif_release,
  1860. .platform_data = &tsif1_platform_data
  1861. },
  1862. }
  1863. };
  1864. struct platform_device msm_device_smd = {
  1865. .name = "msm_smd",
  1866. .id = -1,
  1867. };
  1868. static struct msm_watchdog_pdata msm_watchdog_pdata = {
  1869. .pet_time = 10000,
  1870. .bark_time = 11000,
  1871. .has_secure = true,
  1872. .base = MSM_TMR0_BASE + WDT0_OFFSET,
  1873. };
  1874. static struct resource msm_watchdog_resources[] = {
  1875. {
  1876. .start = WDT0_ACCSCSSNBARK_INT,
  1877. .end = WDT0_ACCSCSSNBARK_INT,
  1878. .flags = IORESOURCE_IRQ,
  1879. },
  1880. };
  1881. struct platform_device msm8660_device_watchdog = {
  1882. .name = "msm_watchdog",
  1883. .id = -1,
  1884. .dev = {
  1885. .platform_data = &msm_watchdog_pdata,
  1886. },
  1887. .num_resources = ARRAY_SIZE(msm_watchdog_resources),
  1888. .resource = msm_watchdog_resources,
  1889. };
  1890. static struct resource msm_dmov_resource_adm0[] = {
  1891. {
  1892. .start = INT_ADM0_AARM,
  1893. .flags = IORESOURCE_IRQ,
  1894. },
  1895. {
  1896. .start = 0x18320000,
  1897. .end = 0x18320000 + SZ_1M - 1,
  1898. .flags = IORESOURCE_MEM,
  1899. },
  1900. };
  1901. static struct resource msm_dmov_resource_adm1[] = {
  1902. {
  1903. .start = INT_ADM1_AARM,
  1904. .flags = IORESOURCE_IRQ,
  1905. },
  1906. {
  1907. .start = 0x18420000,
  1908. .end = 0x18420000 + SZ_1M - 1,
  1909. .flags = IORESOURCE_MEM,
  1910. },
  1911. };
  1912. static struct msm_dmov_pdata msm_dmov_pdata_adm0 = {
  1913. .sd = 1,
  1914. .sd_size = 0x800,
  1915. };
  1916. static struct msm_dmov_pdata msm_dmov_pdata_adm1 = {
  1917. .sd = 1,
  1918. .sd_size = 0x800,
  1919. };
  1920. struct platform_device msm_device_dmov_adm0 = {
  1921. .name = "msm_dmov",
  1922. .id = 0,
  1923. .resource = msm_dmov_resource_adm0,
  1924. .num_resources = ARRAY_SIZE(msm_dmov_resource_adm0),
  1925. .dev = {
  1926. .platform_data = &msm_dmov_pdata_adm0,
  1927. },
  1928. };
  1929. struct platform_device msm_device_dmov_adm1 = {
  1930. .name = "msm_dmov",
  1931. .id = 1,
  1932. .resource = msm_dmov_resource_adm1,
  1933. .num_resources = ARRAY_SIZE(msm_dmov_resource_adm1),
  1934. .dev = {
  1935. .platform_data = &msm_dmov_pdata_adm1,
  1936. },
  1937. };
  1938. /* MSM Video core device */
  1939. #ifdef CONFIG_MSM_BUS_SCALING
  1940. static struct msm_bus_vectors vidc_init_vectors[] = {
  1941. {
  1942. .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
  1943. .dst = MSM_BUS_SLAVE_SMI,
  1944. .ab = 0,
  1945. .ib = 0,
  1946. },
  1947. {
  1948. .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
  1949. .dst = MSM_BUS_SLAVE_SMI,
  1950. .ab = 0,
  1951. .ib = 0,
  1952. },
  1953. {
  1954. .src = MSM_BUS_MASTER_AMPSS_M0,
  1955. .dst = MSM_BUS_SLAVE_EBI_CH0,
  1956. .ab = 0,
  1957. .ib = 0,
  1958. },
  1959. {
  1960. .src = MSM_BUS_MASTER_AMPSS_M0,
  1961. .dst = MSM_BUS_SLAVE_SMI,
  1962. .ab = 0,
  1963. .ib = 0,
  1964. },
  1965. };
  1966. static struct msm_bus_vectors vidc_venc_vga_vectors[] = {
  1967. {
  1968. .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
  1969. .dst = MSM_BUS_SLAVE_SMI,
  1970. .ab = 54525952,
  1971. .ib = 436207616,
  1972. },
  1973. {
  1974. .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
  1975. .dst = MSM_BUS_SLAVE_SMI,
  1976. .ab = 72351744,
  1977. .ib = 289406976,
  1978. },
  1979. {
  1980. .src = MSM_BUS_MASTER_AMPSS_M0,
  1981. .dst = MSM_BUS_SLAVE_EBI_CH0,
  1982. .ab = 500000,
  1983. .ib = 1000000,
  1984. },
  1985. {
  1986. .src = MSM_BUS_MASTER_AMPSS_M0,
  1987. .dst = MSM_BUS_SLAVE_SMI,
  1988. .ab = 500000,
  1989. .ib = 1000000,
  1990. },
  1991. };
  1992. static struct msm_bus_vectors vidc_vdec_vga_vectors[] = {
  1993. {
  1994. .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
  1995. .dst = MSM_BUS_SLAVE_SMI,
  1996. .ab = 40894464,
  1997. .ib = 327155712,
  1998. },
  1999. {
  2000. .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
  2001. .dst = MSM_BUS_SLAVE_SMI,
  2002. .ab = 48234496,
  2003. .ib = 192937984,
  2004. },
  2005. {
  2006. .src = MSM_BUS_MASTER_AMPSS_M0,
  2007. .dst = MSM_BUS_SLAVE_EBI_CH0,
  2008. .ab = 500000,
  2009. .ib = 2000000,
  2010. },
  2011. {
  2012. .src = MSM_BUS_MASTER_AMPSS_M0,
  2013. .dst = MSM_BUS_SLAVE_SMI,
  2014. .ab = 500000,
  2015. .ib = 2000000,
  2016. },
  2017. };
  2018. static struct msm_bus_vectors vidc_venc_720p_vectors[] = {
  2019. {
  2020. .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
  2021. .dst = MSM_BUS_SLAVE_SMI,
  2022. .ab = 163577856,
  2023. .ib = 1308622848,
  2024. },
  2025. {
  2026. .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
  2027. .dst = MSM_BUS_SLAVE_SMI,
  2028. .ab = 219152384,
  2029. .ib = 876609536,
  2030. },
  2031. {
  2032. .src = MSM_BUS_MASTER_AMPSS_M0,
  2033. .dst = MSM_BUS_SLAVE_EBI_CH0,
  2034. .ab = 1750000,
  2035. .ib = 3500000,
  2036. },
  2037. {
  2038. .src = MSM_BUS_MASTER_AMPSS_M0,
  2039. .dst = MSM_BUS_SLAVE_SMI,
  2040. .ab = 1750000,
  2041. .ib = 3500000,
  2042. },
  2043. };
  2044. static struct msm_bus_vectors vidc_vdec_720p_vectors[] = {
  2045. {
  2046. .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
  2047. .dst = MSM_BUS_SLAVE_SMI,
  2048. .ab = 121634816,
  2049. .ib = 973078528,
  2050. },
  2051. {
  2052. .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
  2053. .dst = MSM_BUS_SLAVE_SMI,
  2054. .ab = 155189248,
  2055. .ib = 620756992,
  2056. },
  2057. {
  2058. .src = MSM_BUS_MASTER_AMPSS_M0,
  2059. .dst = MSM_BUS_SLAVE_EBI_CH0,
  2060. .ab = 1750000,
  2061. .ib = 7000000,
  2062. },
  2063. {
  2064. .src = MSM_BUS_MASTER_AMPSS_M0,
  2065. .dst = MSM_BUS_SLAVE_SMI,
  2066. .ab = 1750000,
  2067. .ib = 7000000,
  2068. },
  2069. };
  2070. static struct msm_bus_vectors vidc_venc_1080p_vectors[] = {
  2071. {
  2072. .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
  2073. .dst = MSM_BUS_SLAVE_SMI,
  2074. .ab = 372244480,
  2075. .ib = 1861222400,
  2076. },
  2077. {
  2078. .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
  2079. .dst = MSM_BUS_SLAVE_SMI,
  2080. .ab = 501219328,
  2081. .ib = 2004877312,
  2082. },
  2083. {
  2084. .src = MSM_BUS_MASTER_AMPSS_M0,
  2085. .dst = MSM_BUS_SLAVE_EBI_CH0,
  2086. .ab = 2500000,
  2087. .ib = 5000000,
  2088. },
  2089. {
  2090. .src = MSM_BUS_MASTER_AMPSS_M0,
  2091. .dst = MSM_BUS_SLAVE_SMI,
  2092. .ab = 2500000,
  2093. .ib = 5000000,
  2094. },
  2095. };
  2096. static struct msm_bus_vectors vidc_vdec_1080p_vectors[] = {
  2097. {
  2098. .src = MSM_BUS_MASTER_HD_CODEC_PORT0,
  2099. .dst = MSM_BUS_SLAVE_SMI,
  2100. .ab = 222298112,
  2101. .ib = 1778384896,
  2102. },
  2103. {
  2104. .src = MSM_BUS_MASTER_HD_CODEC_PORT1,
  2105. .dst = MSM_BUS_SLAVE_SMI,
  2106. .ab = 330301440,
  2107. .ib = 1321205760,
  2108. },
  2109. {
  2110. .src = MSM_BUS_MASTER_AMPSS_M0,
  2111. .dst = MSM_BUS_SLAVE_EBI_CH0,
  2112. .ab = 2500000,
  2113. .ib = 700000000,
  2114. },
  2115. {
  2116. .src = MSM_BUS_MASTER_AMPSS_M0,
  2117. .dst = MSM_BUS_SLAVE_SMI,
  2118. .ab = 2500000,
  2119. .ib = 10000000,
  2120. },
  2121. };
  2122. static struct msm_bus_paths vidc_bus_client_config[] = {
  2123. {
  2124. ARRAY_SIZE(vidc_init_vectors),
  2125. vidc_init_vectors,
  2126. },
  2127. {
  2128. ARRAY_SIZE(vidc_venc_vga_vectors),
  2129. vidc_venc_vga_vectors,
  2130. },
  2131. {
  2132. ARRAY_SIZE(vidc_vdec_vga_vectors),
  2133. vidc_vdec_vga_vectors,
  2134. },
  2135. {
  2136. ARRAY_SIZE(vidc_venc_720p_vectors),
  2137. vidc_venc_720p_vectors,
  2138. },
  2139. {
  2140. ARRAY_SIZE(vidc_vdec_720p_vectors),
  2141. vidc_vdec_720p_vectors,
  2142. },
  2143. {
  2144. ARRAY_SIZE(vidc_venc_1080p_vectors),
  2145. vidc_venc_1080p_vectors,
  2146. },
  2147. {
  2148. ARRAY_SIZE(vidc_vdec_1080p_vectors),
  2149. vidc_vdec_1080p_vectors,
  2150. },
  2151. };
  2152. static struct msm_bus_scale_pdata vidc_bus_client_data = {
  2153. vidc_bus_client_config,
  2154. ARRAY_SIZE(vidc_bus_client_config),
  2155. .name = "vidc",
  2156. };
  2157. #endif
  2158. #define MSM_VIDC_BASE_PHYS 0x04400000
  2159. #define MSM_VIDC_BASE_SIZE 0x00100000
  2160. static struct resource msm_device_vidc_resources[] = {
  2161. {
  2162. .start = MSM_VIDC_BASE_PHYS,
  2163. .end = MSM_VIDC_BASE_PHYS + MSM_VIDC_BASE_SIZE - 1,
  2164. .flags = IORESOURCE_MEM,
  2165. },
  2166. {
  2167. .start = VCODEC_IRQ,
  2168. .end = VCODEC_IRQ,
  2169. .flags = IORESOURCE_IRQ,
  2170. },
  2171. };
  2172. struct msm_vidc_platform_data vidc_platform_data = {
  2173. #ifdef CONFIG_MSM_BUS_SCALING
  2174. .vidc_bus_client_pdata = &vidc_bus_client_data,
  2175. #endif
  2176. #ifdef CONFIG_MSM_VIDC_CONTENT_PROTECTION
  2177. .cp_enabled = 1,
  2178. #else
  2179. .cp_enabled = 0,
  2180. #endif
  2181. #ifdef CONFIG_MSM_MULTIMEDIA_USE_ION
  2182. .memtype = ION_CP_MM_HEAP_ID,
  2183. .enable_ion = 1,
  2184. .secure_wb_heap = 1,
  2185. #else
  2186. .memtype = MEMTYPE_SMI_KERNEL,
  2187. .enable_ion = 0,
  2188. .secure_wb_heap = 0,
  2189. #endif
  2190. .disable_dmx = 0,
  2191. .disable_fullhd = 0,
  2192. .cont_mode_dpb_count = 8,
  2193. .disable_turbo = 1,
  2194. .fw_addr = 0x38000000,
  2195. };
  2196. struct platform_device msm_device_vidc = {
  2197. .name = "msm_vidc",
  2198. .id = 0,
  2199. .num_resources = ARRAY_SIZE(msm_device_vidc_resources),
  2200. .resource = msm_device_vidc_resources,
  2201. .dev = {
  2202. .platform_data = &vidc_platform_data,
  2203. },
  2204. };
  2205. #if defined(CONFIG_MSM_RPM_LOG) || defined(CONFIG_MSM_RPM_LOG_MODULE)
  2206. static struct msm_rpm_log_platform_data msm_rpm_log_pdata = {
  2207. .phys_addr_base = 0x00106000,
  2208. .reg_offsets = {
  2209. [MSM_RPM_LOG_PAGE_INDICES] = 0x00000C80,
  2210. [MSM_RPM_LOG_PAGE_BUFFER] = 0x00000CA0,
  2211. },
  2212. .phys_size = SZ_8K,
  2213. .log_len = 4096, /* log's buffer length in bytes */
  2214. .log_len_mask = (4096 >> 2) - 1, /* length mask in units of u32 */
  2215. };
  2216. struct platform_device msm8660_rpm_log_device = {
  2217. .name = "msm_rpm_log",
  2218. .id = -1,
  2219. .dev = {
  2220. .platform_data = &msm_rpm_log_pdata,
  2221. },
  2222. };
  2223. #endif
  2224. #if defined(CONFIG_MSM_RPM_STATS_LOG)
  2225. static struct msm_rpmstats_platform_data msm_rpm_stat_pdata = {
  2226. .phys_addr_base = 0x00107E04,
  2227. .phys_size = SZ_8K,
  2228. };
  2229. struct platform_device msm8660_rpm_stat_device = {
  2230. .name = "msm_rpm_stat",
  2231. .id = -1,
  2232. .dev = {
  2233. .platform_data = &msm_rpm_stat_pdata,
  2234. },
  2235. };
  2236. #endif
  2237. #define SHARED_IMEM_TZ_BASE 0x2a05f720
  2238. static struct resource tzlog_resources[] = {
  2239. {
  2240. .start = SHARED_IMEM_TZ_BASE,
  2241. .end = SHARED_IMEM_TZ_BASE + SZ_4K - 1,
  2242. .flags = IORESOURCE_MEM,
  2243. },
  2244. };
  2245. struct platform_device msm_device_tz_log = {
  2246. .name = "tz_log",
  2247. .id = 0,
  2248. .num_resources = ARRAY_SIZE(tzlog_resources),
  2249. .resource = tzlog_resources,
  2250. };
  2251. #ifdef CONFIG_MSM_MPM
  2252. static uint16_t msm_mpm_irqs_m2a[MSM_MPM_NR_MPM_IRQS] __initdata = {
  2253. [1] = MSM_GPIO_TO_INT(61),
  2254. [4] = MSM_GPIO_TO_INT(87),
  2255. [5] = MSM_GPIO_TO_INT(88),
  2256. [6] = MSM_GPIO_TO_INT(89),
  2257. [7] = MSM_GPIO_TO_INT(90),
  2258. [8] = MSM_GPIO_TO_INT(91),
  2259. [9] = MSM_GPIO_TO_INT(34),
  2260. [10] = MSM_GPIO_TO_INT(38),
  2261. [11] = MSM_GPIO_TO_INT(42),
  2262. [12] = MSM_GPIO_TO_INT(46),
  2263. [13] = MSM_GPIO_TO_INT(50),
  2264. [14] = MSM_GPIO_TO_INT(54),
  2265. [15] = MSM_GPIO_TO_INT(58),
  2266. [16] = MSM_GPIO_TO_INT(63),
  2267. [17] = MSM_GPIO_TO_INT(160),
  2268. [18] = MSM_GPIO_TO_INT(162),
  2269. [19] = MSM_GPIO_TO_INT(144),
  2270. [20] = MSM_GPIO_TO_INT(146),
  2271. [25] = USB1_HS_IRQ,
  2272. [26] = TV_ENC_IRQ,
  2273. [27] = HDMI_IRQ,
  2274. [29] = MSM_GPIO_TO_INT(123),
  2275. [30] = MSM_GPIO_TO_INT(172),
  2276. [31] = MSM_GPIO_TO_INT(99),
  2277. [32] = MSM_GPIO_TO_INT(96),
  2278. [33] = MSM_GPIO_TO_INT(67),
  2279. [34] = MSM_GPIO_TO_INT(71),
  2280. [35] = MSM_GPIO_TO_INT(105),
  2281. [36] = MSM_GPIO_TO_INT(117),
  2282. [37] = MSM_GPIO_TO_INT(29),
  2283. [38] = MSM_GPIO_TO_INT(30),
  2284. [39] = MSM_GPIO_TO_INT(31),
  2285. [40] = MSM_GPIO_TO_INT(37),
  2286. [41] = MSM_GPIO_TO_INT(40),
  2287. [42] = MSM_GPIO_TO_INT(41),
  2288. [43] = MSM_GPIO_TO_INT(45),
  2289. [44] = MSM_GPIO_TO_INT(51),
  2290. [45] = MSM_GPIO_TO_INT(52),
  2291. [46] = MSM_GPIO_TO_INT(57),
  2292. [47] = MSM_GPIO_TO_INT(73),
  2293. [48] = MSM_GPIO_TO_INT(93),
  2294. [49] = MSM_GPIO_TO_INT(94),
  2295. [50] = MSM_GPIO_TO_INT(103),
  2296. [51] = MSM_GPIO_TO_INT(104),
  2297. [52] = MSM_GPIO_TO_INT(106),
  2298. [53] = MSM_GPIO_TO_INT(115),
  2299. [54] = MSM_GPIO_TO_INT(124),
  2300. [55] = MSM_GPIO_TO_INT(125),
  2301. [56] = MSM_GPIO_TO_INT(126),
  2302. [57] = MSM_GPIO_TO_INT(127),
  2303. [58] = MSM_GPIO_TO_INT(128),
  2304. [59] = MSM_GPIO_TO_INT(129),
  2305. };
  2306. static uint16_t msm_mpm_bypassed_apps_irqs[] __initdata = {
  2307. TLMM_MSM_SUMMARY_IRQ,
  2308. RPM_SCSS_CPU0_GP_HIGH_IRQ,
  2309. RPM_SCSS_CPU0_GP_MEDIUM_IRQ,
  2310. RPM_SCSS_CPU0_GP_LOW_IRQ,
  2311. RPM_SCSS_CPU0_WAKE_UP_IRQ,
  2312. RPM_SCSS_CPU1_GP_HIGH_IRQ,
  2313. RPM_SCSS_CPU1_GP_MEDIUM_IRQ,
  2314. RPM_SCSS_CPU1_GP_LOW_IRQ,
  2315. RPM_SCSS_CPU1_WAKE_UP_IRQ,
  2316. MARM_SCSS_GP_IRQ_0,
  2317. MARM_SCSS_GP_IRQ_1,
  2318. MARM_SCSS_GP_IRQ_2,
  2319. MARM_SCSS_GP_IRQ_3,
  2320. MARM_SCSS_GP_IRQ_4,
  2321. MARM_SCSS_GP_IRQ_5,
  2322. MARM_SCSS_GP_IRQ_6,
  2323. MARM_SCSS_GP_IRQ_7,
  2324. MARM_SCSS_GP_IRQ_8,
  2325. MARM_SCSS_GP_IRQ_9,
  2326. LPASS_SCSS_GP_LOW_IRQ,
  2327. LPASS_SCSS_GP_MEDIUM_IRQ,
  2328. LPASS_SCSS_GP_HIGH_IRQ,
  2329. SDC4_IRQ_0,
  2330. SPS_MTI_31,
  2331. };
  2332. struct msm_mpm_device_data msm8660_mpm_dev_data __initdata = {
  2333. .irqs_m2a = msm_mpm_irqs_m2a,
  2334. .irqs_m2a_size = ARRAY_SIZE(msm_mpm_irqs_m2a),
  2335. .bypassed_apps_irqs = msm_mpm_bypassed_apps_irqs,
  2336. .bypassed_apps_irqs_size = ARRAY_SIZE(msm_mpm_bypassed_apps_irqs),
  2337. .mpm_request_reg_base = MSM_RPM_BASE + 0x9d8,
  2338. .mpm_status_reg_base = MSM_RPM_BASE + 0xdf8,
  2339. .mpm_apps_ipc_reg = MSM_GCC_BASE + 0x008,
  2340. .mpm_apps_ipc_val = BIT(1),
  2341. .mpm_ipc_irq = RPM_SCSS_CPU0_GP_MEDIUM_IRQ,
  2342. };
  2343. #endif
  2344. #ifdef CONFIG_MSM_BUS_SCALING
  2345. struct platform_device msm_bus_sys_fabric = {
  2346. .name = "msm_bus_fabric",
  2347. .id = MSM_BUS_FAB_SYSTEM,
  2348. };
  2349. struct platform_device msm_bus_apps_fabric = {
  2350. .name = "msm_bus_fabric",
  2351. .id = MSM_BUS_FAB_APPSS,
  2352. };
  2353. struct platform_device msm_bus_mm_fabric = {
  2354. .name = "msm_bus_fabric",
  2355. .id = MSM_BUS_FAB_MMSS,
  2356. };
  2357. struct platform_device msm_bus_sys_fpb = {
  2358. .name = "msm_bus_fabric",
  2359. .id = MSM_BUS_FAB_SYSTEM_FPB,
  2360. };
  2361. struct platform_device msm_bus_cpss_fpb = {
  2362. .name = "msm_bus_fabric",
  2363. .id = MSM_BUS_FAB_CPSS_FPB,
  2364. };
  2365. #endif
  2366. #ifdef CONFIG_SND_SOC_MSM8660_APQ
  2367. struct platform_device msm_pcm = {
  2368. .name = "msm-pcm-dsp",
  2369. .id = -1,
  2370. };
  2371. struct platform_device msm_pcm_routing = {
  2372. .name = "msm-pcm-routing",
  2373. .id = -1,
  2374. };
  2375. struct platform_device msm_cpudai0 = {
  2376. .name = "msm-dai-q6",
  2377. .id = PRIMARY_I2S_RX,
  2378. };
  2379. struct platform_device msm_cpudai1 = {
  2380. .name = "msm-dai-q6",
  2381. .id = PRIMARY_I2S_TX,
  2382. };
  2383. struct platform_device msm_cpudai_hdmi_rx = {
  2384. .name = "msm-dai-q6",
  2385. .id = HDMI_RX,
  2386. };
  2387. struct platform_device msm_cpudai_bt_rx = {
  2388. .name = "msm-dai-q6",
  2389. .id = INT_BT_SCO_RX,
  2390. };
  2391. struct platform_device msm_cpudai_bt_tx = {
  2392. .name = "msm-dai-q6",
  2393. .id = INT_BT_SCO_TX,
  2394. };
  2395. struct platform_device msm_cpudai_fm_rx = {
  2396. .name = "msm-dai-q6",
  2397. .id = INT_FM_RX,
  2398. };
  2399. struct platform_device msm_cpudai_fm_tx = {
  2400. .name = "msm-dai-q6",
  2401. .id = INT_FM_TX,
  2402. };
  2403. struct platform_device msm_cpu_fe = {
  2404. .name = "msm-dai-fe",
  2405. .id = -1,
  2406. };
  2407. struct platform_device msm_stub_codec = {
  2408. .name = "msm-stub-codec",
  2409. .id = 1,
  2410. };
  2411. struct platform_device msm_voice = {
  2412. .name = "msm-pcm-voice",
  2413. .id = -1,
  2414. };
  2415. struct platform_device msm_voip = {
  2416. .name = "msm-voip-dsp",
  2417. .id = -1,
  2418. };
  2419. struct platform_device msm_lpa_pcm = {
  2420. .name = "msm-pcm-lpa",
  2421. .id = -1,
  2422. };
  2423. struct platform_device msm_pcm_hostless = {
  2424. .name = "msm-pcm-hostless",
  2425. .id = -1,
  2426. };
  2427. #endif
  2428. struct platform_device asoc_msm_pcm = {
  2429. .name = "msm-dsp-audio",
  2430. .id = 0,
  2431. };
  2432. struct platform_device asoc_msm_dai0 = {
  2433. .name = "msm-codec-dai",
  2434. .id = 0,
  2435. };
  2436. struct platform_device asoc_msm_dai1 = {
  2437. .name = "msm-cpu-dai",
  2438. .id = 0,
  2439. };
  2440. #if defined (CONFIG_MSM_8x60_VOIP)
  2441. struct platform_device asoc_msm_mvs = {
  2442. .name = "msm-mvs-audio",
  2443. .id = 0,
  2444. };
  2445. struct platform_device asoc_mvs_dai0 = {
  2446. .name = "mvs-codec-dai",
  2447. .id = 0,
  2448. };
  2449. struct platform_device asoc_mvs_dai1 = {
  2450. .name = "mvs-cpu-dai",
  2451. .id = 0,
  2452. };
  2453. #endif
  2454. static struct fs_driver_data gfx2d0_fs_data = {
  2455. .clks = (struct fs_clk_data[]){
  2456. { .name = "core_clk" },
  2457. { .name = "iface_clk" },
  2458. { 0 }
  2459. },
  2460. .bus_port0 = MSM_BUS_MASTER_GRAPHICS_2D_CORE0,
  2461. };
  2462. static struct fs_driver_data gfx2d1_fs_data = {
  2463. .clks = (struct fs_clk_data[]){
  2464. { .name = "core_clk" },
  2465. { .name = "iface_clk" },
  2466. { 0 }
  2467. },
  2468. .bus_port0 = MSM_BUS_MASTER_GRAPHICS_2D_CORE1,
  2469. };
  2470. static struct fs_driver_data gfx3d_fs_data = {
  2471. .clks = (struct fs_clk_data[]){
  2472. { .name = "core_clk", .reset_rate = 27000000 },
  2473. { .name = "iface_clk" },
  2474. { 0 }
  2475. },
  2476. .bus_port0 = MSM_BUS_MASTER_GRAPHICS_3D,
  2477. };
  2478. static struct fs_driver_data ijpeg_fs_data = {
  2479. .clks = (struct fs_clk_data[]){
  2480. { .name = "core_clk" },
  2481. { .name = "iface_clk" },
  2482. { .name = "bus_clk" },
  2483. { 0 }
  2484. },
  2485. .bus_port0 = MSM_BUS_MASTER_JPEG_ENC,
  2486. };
  2487. static struct fs_driver_data mdp_fs_data = {
  2488. .clks = (struct fs_clk_data[]){
  2489. { .name = "core_clk" },
  2490. { .name = "iface_clk" },
  2491. { .name = "bus_clk" },
  2492. { .name = "vsync_clk" },
  2493. { .name = "tv_src_clk" },
  2494. { .name = "tv_clk" },
  2495. { .name = "pixel_mdp_clk" },
  2496. { .name = "pixel_lcdc_clk" },
  2497. { 0 }
  2498. },
  2499. .bus_port0 = MSM_BUS_MASTER_MDP_PORT0,
  2500. .bus_port1 = MSM_BUS_MASTER_MDP_PORT1,
  2501. };
  2502. static struct fs_driver_data rot_fs_data = {
  2503. .clks = (struct fs_clk_data[]){
  2504. { .name = "core_clk" },
  2505. { .name = "iface_clk" },
  2506. { .name = "bus_clk" },
  2507. { 0 }
  2508. },
  2509. .bus_port0 = MSM_BUS_MASTER_ROTATOR,
  2510. };
  2511. static struct fs_driver_data ved_fs_data = {
  2512. .clks = (struct fs_clk_data[]){
  2513. { .name = "core_clk" },
  2514. { .name = "iface_clk" },
  2515. { .name = "bus_clk" },
  2516. { 0 }
  2517. },
  2518. .bus_port0 = MSM_BUS_MASTER_HD_CODEC_PORT0,
  2519. .bus_port1 = MSM_BUS_MASTER_HD_CODEC_PORT1,
  2520. };
  2521. static struct fs_driver_data vfe_fs_data = {
  2522. .clks = (struct fs_clk_data[]){
  2523. { .name = "core_clk" },
  2524. { .name = "iface_clk" },
  2525. { .name = "bus_clk" },
  2526. { 0 }
  2527. },
  2528. .bus_port0 = MSM_BUS_MASTER_VFE,
  2529. };
  2530. static struct fs_driver_data vpe_fs_data = {
  2531. .clks = (struct fs_clk_data[]){
  2532. { .name = "core_clk" },
  2533. { .name = "iface_clk" },
  2534. { .name = "bus_clk" },
  2535. { 0 }
  2536. },
  2537. .bus_port0 = MSM_BUS_MASTER_VPE,
  2538. };
  2539. struct platform_device *msm8660_footswitch[] __initdata = {
  2540. FS_8X60(FS_IJPEG, "vdd", "msm_gemini.0", &ijpeg_fs_data),
  2541. FS_8X60(FS_MDP, "vdd", "mdp.0", &mdp_fs_data),
  2542. FS_8X60(FS_ROT, "vdd", "msm_rotator.0", &rot_fs_data),
  2543. FS_8X60(FS_VED, "vdd", "msm_vidc.0", &ved_fs_data),
  2544. FS_8X60(FS_VFE, "vdd", "msm_vfe.0", &vfe_fs_data),
  2545. FS_8X60(FS_VPE, "vdd", "msm_vpe.0", &vpe_fs_data),
  2546. FS_8X60(FS_GFX3D, "vdd", "kgsl-3d0.0", &gfx3d_fs_data),
  2547. FS_8X60(FS_GFX2D0, "vdd", "kgsl-2d0.0", &gfx2d0_fs_data),
  2548. FS_8X60(FS_GFX2D1, "vdd", "kgsl-2d1.1", &gfx2d1_fs_data),
  2549. };
  2550. unsigned msm8660_num_footswitch __initdata = ARRAY_SIZE(msm8660_footswitch);
  2551. struct msm_rpm_platform_data msm8660_rpm_data __initdata = {
  2552. .reg_base_addrs = {
  2553. [MSM_RPM_PAGE_STATUS] = MSM_RPM_BASE,
  2554. [MSM_RPM_PAGE_CTRL] = MSM_RPM_BASE + 0x400,
  2555. [MSM_RPM_PAGE_REQ] = MSM_RPM_BASE + 0x600,
  2556. [MSM_RPM_PAGE_ACK] = MSM_RPM_BASE + 0xa00,
  2557. },
  2558. .irq_ack = RPM_SCSS_CPU0_GP_HIGH_IRQ,
  2559. .irq_err = RPM_SCSS_CPU0_GP_LOW_IRQ,
  2560. .irq_wakeup = RPM_SCSS_CPU0_WAKE_UP_IRQ,
  2561. .ipc_rpm_reg = MSM_GCC_BASE + 0x008,
  2562. .ipc_rpm_val = 4,
  2563. .target_id = {
  2564. MSM_RPM_MAP(8660, NOTIFICATION_CONFIGURED_0, NOTIFICATION, 8),
  2565. MSM_RPM_MAP(8660, NOTIFICATION_REGISTERED_0, NOTIFICATION, 8),
  2566. MSM_RPM_MAP(8660, INVALIDATE_0, INVALIDATE, 8),
  2567. MSM_RPM_MAP(8660, TRIGGER_TIMED_TO, TRIGGER_TIMED, 1),
  2568. MSM_RPM_MAP(8660, TRIGGER_TIMED_SCLK_COUNT, TRIGGER_TIMED, 1),
  2569. MSM_RPM_MAP(8660, TRIGGER_SET_FROM, TRIGGER_SET, 1),
  2570. MSM_RPM_MAP(8660, TRIGGER_SET_TO, TRIGGER_SET, 1),
  2571. MSM_RPM_MAP(8660, TRIGGER_SET_TRIGGER, TRIGGER_SET, 1),
  2572. MSM_RPM_MAP(8660, TRIGGER_CLEAR_FROM, TRIGGER_CLEAR, 1),
  2573. MSM_RPM_MAP(8660, TRIGGER_CLEAR_TO, TRIGGER_CLEAR, 1),
  2574. MSM_RPM_MAP(8660, TRIGGER_CLEAR_TRIGGER, TRIGGER_CLEAR, 1),
  2575. MSM_RPM_MAP(8660, CXO_CLK, CXO_CLK, 1),
  2576. MSM_RPM_MAP(8660, PXO_CLK, PXO_CLK, 1),
  2577. MSM_RPM_MAP(8660, PLL_4, PLL_4, 1),
  2578. MSM_RPM_MAP(8660, APPS_FABRIC_CLK, APPS_FABRIC_CLK, 1),
  2579. MSM_RPM_MAP(8660, SYSTEM_FABRIC_CLK, SYSTEM_FABRIC_CLK, 1),
  2580. MSM_RPM_MAP(8660, MM_FABRIC_CLK, MM_FABRIC_CLK, 1),
  2581. MSM_RPM_MAP(8660, DAYTONA_FABRIC_CLK, DAYTONA_FABRIC_CLK, 1),
  2582. MSM_RPM_MAP(8660, SFPB_CLK, SFPB_CLK, 1),
  2583. MSM_RPM_MAP(8660, CFPB_CLK, CFPB_CLK, 1),
  2584. MSM_RPM_MAP(8660, MMFPB_CLK, MMFPB_CLK, 1),
  2585. MSM_RPM_MAP(8660, SMI_CLK, SMI_CLK, 1),
  2586. MSM_RPM_MAP(8660, EBI1_CLK, EBI1_CLK, 1),
  2587. MSM_RPM_MAP(8660, APPS_L2_CACHE_CTL, APPS_L2_CACHE_CTL, 1),
  2588. MSM_RPM_MAP(8660, APPS_FABRIC_HALT_0, APPS_FABRIC_HALT, 2),
  2589. MSM_RPM_MAP(8660, APPS_FABRIC_CLOCK_MODE_0,
  2590. APPS_FABRIC_CLOCK_MODE, 3),
  2591. MSM_RPM_MAP(8660, APPS_FABRIC_ARB_0, APPS_FABRIC_ARB, 6),
  2592. MSM_RPM_MAP(8660, SYSTEM_FABRIC_HALT_0, SYSTEM_FABRIC_HALT, 2),
  2593. MSM_RPM_MAP(8660, SYSTEM_FABRIC_CLOCK_MODE_0,
  2594. SYSTEM_FABRIC_CLOCK_MODE, 3),
  2595. MSM_RPM_MAP(8660, SYSTEM_FABRIC_ARB_0, SYSTEM_FABRIC_ARB, 22),
  2596. MSM_RPM_MAP(8660, MM_FABRIC_HALT_0, MM_FABRIC_HALT, 2),
  2597. MSM_RPM_MAP(8660, MM_FABRIC_CLOCK_MODE_0,
  2598. MM_FABRIC_CLOCK_MODE, 3),
  2599. MSM_RPM_MAP(8660, MM_FABRIC_ARB_0, MM_FABRIC_ARB, 23),
  2600. MSM_RPM_MAP(8660, SMPS0B_0, SMPS0B, 2),
  2601. MSM_RPM_MAP(8660, SMPS1B_0, SMPS1B, 2),
  2602. MSM_RPM_MAP(8660, SMPS2B_0, SMPS2B, 2),
  2603. MSM_RPM_MAP(8660, SMPS3B_0, SMPS3B, 2),
  2604. MSM_RPM_MAP(8660, SMPS4B_0, SMPS4B, 2),
  2605. MSM_RPM_MAP(8660, LDO0B_0, LDO0B, 2),
  2606. MSM_RPM_MAP(8660, LDO1B_0, LDO1B, 2),
  2607. MSM_RPM_MAP(8660, LDO2B_0, LDO2B, 2),
  2608. MSM_RPM_MAP(8660, LDO3B_0, LDO3B, 2),
  2609. MSM_RPM_MAP(8660, LDO4B_0, LDO4B, 2),
  2610. MSM_RPM_MAP(8660, LDO5B_0, LDO5B, 2),
  2611. MSM_RPM_MAP(8660, LDO6B_0, LDO6B, 2),
  2612. MSM_RPM_MAP(8660, LVS0B, LVS0B, 1),
  2613. MSM_RPM_MAP(8660, LVS1B, LVS1B, 1),
  2614. MSM_RPM_MAP(8660, LVS2B, LVS2B, 1),
  2615. MSM_RPM_MAP(8660, LVS3B, LVS3B, 1),
  2616. MSM_RPM_MAP(8660, MVS, MVS, 1),
  2617. MSM_RPM_MAP(8660, SMPS0_0, SMPS0, 2),
  2618. MSM_RPM_MAP(8660, SMPS1_0, SMPS1, 2),
  2619. MSM_RPM_MAP(8660, SMPS2_0, SMPS2, 2),
  2620. MSM_RPM_MAP(8660, SMPS3_0, SMPS3, 2),
  2621. MSM_RPM_MAP(8660, SMPS4_0, SMPS4, 2),
  2622. MSM_RPM_MAP(8660, LDO0_0, LDO0, 2),
  2623. MSM_RPM_MAP(8660, LDO1_0, LDO1, 2),
  2624. MSM_RPM_MAP(8660, LDO2_0, LDO2, 2),
  2625. MSM_RPM_MAP(8660, LDO3_0, LDO3, 2),
  2626. MSM_RPM_MAP(8660, LDO4_0, LDO4, 2),
  2627. MSM_RPM_MAP(8660, LDO5_0, LDO5, 2),
  2628. MSM_RPM_MAP(8660, LDO6_0, LDO6, 2),
  2629. MSM_RPM_MAP(8660, LDO7_0, LDO7, 2),
  2630. MSM_RPM_MAP(8660, LDO8_0, LDO8, 2),
  2631. MSM_RPM_MAP(8660, LDO9_0, LDO9, 2),
  2632. MSM_RPM_MAP(8660, LDO10_0, LDO10, 2),
  2633. MSM_RPM_MAP(8660, LDO11_0, LDO11, 2),
  2634. MSM_RPM_MAP(8660, LDO12_0, LDO12, 2),
  2635. MSM_RPM_MAP(8660, LDO13_0, LDO13, 2),
  2636. MSM_RPM_MAP(8660, LDO14_0, LDO14, 2),
  2637. MSM_RPM_MAP(8660, LDO15_0, LDO15, 2),
  2638. MSM_RPM_MAP(8660, LDO16_0, LDO16, 2),
  2639. MSM_RPM_MAP(8660, LDO17_0, LDO17, 2),
  2640. MSM_RPM_MAP(8660, LDO18_0, LDO18, 2),
  2641. MSM_RPM_MAP(8660, LDO19_0, LDO19, 2),
  2642. MSM_RPM_MAP(8660, LDO20_0, LDO20, 2),
  2643. MSM_RPM_MAP(8660, LDO21_0, LDO21, 2),
  2644. MSM_RPM_MAP(8660, LDO22_0, LDO22, 2),
  2645. MSM_RPM_MAP(8660, LDO23_0, LDO23, 2),
  2646. MSM_RPM_MAP(8660, LDO24_0, LDO24, 2),
  2647. MSM_RPM_MAP(8660, LDO25_0, LDO25, 2),
  2648. MSM_RPM_MAP(8660, LVS0, LVS0, 1),
  2649. MSM_RPM_MAP(8660, LVS1, LVS1, 1),
  2650. MSM_RPM_MAP(8660, NCP_0, NCP, 2),
  2651. MSM_RPM_MAP(8660, CXO_BUFFERS, CXO_BUFFERS, 1),
  2652. },
  2653. .target_status = {
  2654. MSM_RPM_STATUS_ID_MAP(8660, VERSION_MAJOR),
  2655. MSM_RPM_STATUS_ID_MAP(8660, VERSION_MINOR),
  2656. MSM_RPM_STATUS_ID_MAP(8660, VERSION_BUILD),
  2657. MSM_RPM_STATUS_ID_MAP(8660, SUPPORTED_RESOURCES_0),
  2658. MSM_RPM_STATUS_ID_MAP(8660, SUPPORTED_RESOURCES_1),
  2659. MSM_RPM_STATUS_ID_MAP(8660, SUPPORTED_RESOURCES_2),
  2660. MSM_RPM_STATUS_ID_MAP(8660, SEQUENCE),
  2661. MSM_RPM_STATUS_ID_MAP(8660, CXO_CLK),
  2662. MSM_RPM_STATUS_ID_MAP(8660, PXO_CLK),
  2663. MSM_RPM_STATUS_ID_MAP(8660, PLL_4),
  2664. MSM_RPM_STATUS_ID_MAP(8660, APPS_FABRIC_CLK),
  2665. MSM_RPM_STATUS_ID_MAP(8660, SYSTEM_FABRIC_CLK),
  2666. MSM_RPM_STATUS_ID_MAP(8660, MM_FABRIC_CLK),
  2667. MSM_RPM_STATUS_ID_MAP(8660, DAYTONA_FABRIC_CLK),
  2668. MSM_RPM_STATUS_ID_MAP(8660, SFPB_CLK),
  2669. MSM_RPM_STATUS_ID_MAP(8660, CFPB_CLK),
  2670. MSM_RPM_STATUS_ID_MAP(8660, MMFPB_CLK),
  2671. MSM_RPM_STATUS_ID_MAP(8660, SMI_CLK),
  2672. MSM_RPM_STATUS_ID_MAP(8660, EBI1_CLK),
  2673. MSM_RPM_STATUS_ID_MAP(8660, APPS_L2_CACHE_CTL),
  2674. MSM_RPM_STATUS_ID_MAP(8660, APPS_FABRIC_HALT),
  2675. MSM_RPM_STATUS_ID_MAP(8660, APPS_FABRIC_CLOCK_MODE),
  2676. MSM_RPM_STATUS_ID_MAP(8660, APPS_FABRIC_ARB),
  2677. MSM_RPM_STATUS_ID_MAP(8660, SYSTEM_FABRIC_HALT),
  2678. MSM_RPM_STATUS_ID_MAP(8660, SYSTEM_FABRIC_CLOCK_MODE),
  2679. MSM_RPM_STATUS_ID_MAP(8660, SYSTEM_FABRIC_ARB),
  2680. MSM_RPM_STATUS_ID_MAP(8660, MM_FABRIC_HALT),
  2681. MSM_RPM_STATUS_ID_MAP(8660, MM_FABRIC_CLOCK_MODE),
  2682. MSM_RPM_STATUS_ID_MAP(8660, MM_FABRIC_ARB),
  2683. MSM_RPM_STATUS_ID_MAP(8660, SMPS0B_0),
  2684. MSM_RPM_STATUS_ID_MAP(8660, SMPS0B_1),
  2685. MSM_RPM_STATUS_ID_MAP(8660, SMPS1B_0),
  2686. MSM_RPM_STATUS_ID_MAP(8660, SMPS1B_1),
  2687. MSM_RPM_STATUS_ID_MAP(8660, SMPS2B_0),
  2688. MSM_RPM_STATUS_ID_MAP(8660, SMPS2B_1),
  2689. MSM_RPM_STATUS_ID_MAP(8660, SMPS3B_0),
  2690. MSM_RPM_STATUS_ID_MAP(8660, SMPS3B_1),
  2691. MSM_RPM_STATUS_ID_MAP(8660, SMPS4B_0),
  2692. MSM_RPM_STATUS_ID_MAP(8660, SMPS4B_1),
  2693. MSM_RPM_STATUS_ID_MAP(8660, LDO0B_0),
  2694. MSM_RPM_STATUS_ID_MAP(8660, LDO0B_1),
  2695. MSM_RPM_STATUS_ID_MAP(8660, LDO1B_0),
  2696. MSM_RPM_STATUS_ID_MAP(8660, LDO1B_1),
  2697. MSM_RPM_STATUS_ID_MAP(8660, LDO2B_0),
  2698. MSM_RPM_STATUS_ID_MAP(8660, LDO2B_1),
  2699. MSM_RPM_STATUS_ID_MAP(8660, LDO3B_0),
  2700. MSM_RPM_STATUS_ID_MAP(8660, LDO3B_1),
  2701. MSM_RPM_STATUS_ID_MAP(8660, LDO4B_0),
  2702. MSM_RPM_STATUS_ID_MAP(8660, LDO4B_1),
  2703. MSM_RPM_STATUS_ID_MAP(8660, LDO5B_0),
  2704. MSM_RPM_STATUS_ID_MAP(8660, LDO5B_1),
  2705. MSM_RPM_STATUS_ID_MAP(8660, LDO6B_0),
  2706. MSM_RPM_STATUS_ID_MAP(8660, LDO6B_1),
  2707. MSM_RPM_STATUS_ID_MAP(8660, LVS0B),
  2708. MSM_RPM_STATUS_ID_MAP(8660, LVS1B),
  2709. MSM_RPM_STATUS_ID_MAP(8660, LVS2B),
  2710. MSM_RPM_STATUS_ID_MAP(8660, LVS3B),
  2711. MSM_RPM_STATUS_ID_MAP(8660, MVS),
  2712. MSM_RPM_STATUS_ID_MAP(8660, SMPS0_0),
  2713. MSM_RPM_STATUS_ID_MAP(8660, SMPS0_1),
  2714. MSM_RPM_STATUS_ID_MAP(8660, SMPS1_0),
  2715. MSM_RPM_STATUS_ID_MAP(8660, SMPS1_1),
  2716. MSM_RPM_STATUS_ID_MAP(8660, SMPS2_0),
  2717. MSM_RPM_STATUS_ID_MAP(8660, SMPS2_1),
  2718. MSM_RPM_STATUS_ID_MAP(8660, SMPS3_0),
  2719. MSM_RPM_STATUS_ID_MAP(8660, SMPS3_1),
  2720. MSM_RPM_STATUS_ID_MAP(8660, SMPS4_0),
  2721. MSM_RPM_STATUS_ID_MAP(8660, SMPS4_1),
  2722. MSM_RPM_STATUS_ID_MAP(8660, LDO0_0),
  2723. MSM_RPM_STATUS_ID_MAP(8660, LDO0_1),
  2724. MSM_RPM_STATUS_ID_MAP(8660, LDO1_0),
  2725. MSM_RPM_STATUS_ID_MAP(8660, LDO1_1),
  2726. MSM_RPM_STATUS_ID_MAP(8660, LDO2_0),
  2727. MSM_RPM_STATUS_ID_MAP(8660, LDO2_1),
  2728. MSM_RPM_STATUS_ID_MAP(8660, LDO3_0),
  2729. MSM_RPM_STATUS_ID_MAP(8660, LDO3_1),
  2730. MSM_RPM_STATUS_ID_MAP(8660, LDO4_0),
  2731. MSM_RPM_STATUS_ID_MAP(8660, LDO4_1),
  2732. MSM_RPM_STATUS_ID_MAP(8660, LDO5_0),
  2733. MSM_RPM_STATUS_ID_MAP(8660, LDO5_1),
  2734. MSM_RPM_STATUS_ID_MAP(8660, LDO6_0),
  2735. MSM_RPM_STATUS_ID_MAP(8660, LDO6_1),
  2736. MSM_RPM_STATUS_ID_MAP(8660, LDO7_0),
  2737. MSM_RPM_STATUS_ID_MAP(8660, LDO7_1),
  2738. MSM_RPM_STATUS_ID_MAP(8660, LDO8_0),
  2739. MSM_RPM_STATUS_ID_MAP(8660, LDO8_1),
  2740. MSM_RPM_STATUS_ID_MAP(8660, LDO9_0),
  2741. MSM_RPM_STATUS_ID_MAP(8660, LDO9_1),
  2742. MSM_RPM_STATUS_ID_MAP(8660, LDO10_0),
  2743. MSM_RPM_STATUS_ID_MAP(8660, LDO10_1),
  2744. MSM_RPM_STATUS_ID_MAP(8660, LDO11_0),
  2745. MSM_RPM_STATUS_ID_MAP(8660, LDO11_1),
  2746. MSM_RPM_STATUS_ID_MAP(8660, LDO12_0),
  2747. MSM_RPM_STATUS_ID_MAP(8660, LDO12_1),
  2748. MSM_RPM_STATUS_ID_MAP(8660, LDO13_0),
  2749. MSM_RPM_STATUS_ID_MAP(8660, LDO13_1),
  2750. MSM_RPM_STATUS_ID_MAP(8660, LDO14_0),
  2751. MSM_RPM_STATUS_ID_MAP(8660, LDO14_1),
  2752. MSM_RPM_STATUS_ID_MAP(8660, LDO15_0),
  2753. MSM_RPM_STATUS_ID_MAP(8660, LDO15_1),
  2754. MSM_RPM_STATUS_ID_MAP(8660, LDO16_0),
  2755. MSM_RPM_STATUS_ID_MAP(8660, LDO16_1),
  2756. MSM_RPM_STATUS_ID_MAP(8660, LDO17_0),
  2757. MSM_RPM_STATUS_ID_MAP(8660, LDO17_1),
  2758. MSM_RPM_STATUS_ID_MAP(8660, LDO18_0),
  2759. MSM_RPM_STATUS_ID_MAP(8660, LDO18_1),
  2760. MSM_RPM_STATUS_ID_MAP(8660, LDO19_0),
  2761. MSM_RPM_STATUS_ID_MAP(8660, LDO19_1),
  2762. MSM_RPM_STATUS_ID_MAP(8660, LDO20_0),
  2763. MSM_RPM_STATUS_ID_MAP(8660, LDO20_1),
  2764. MSM_RPM_STATUS_ID_MAP(8660, LDO21_0),
  2765. MSM_RPM_STATUS_ID_MAP(8660, LDO21_1),
  2766. MSM_RPM_STATUS_ID_MAP(8660, LDO22_0),
  2767. MSM_RPM_STATUS_ID_MAP(8660, LDO22_1),
  2768. MSM_RPM_STATUS_ID_MAP(8660, LDO23_0),
  2769. MSM_RPM_STATUS_ID_MAP(8660, LDO23_1),
  2770. MSM_RPM_STATUS_ID_MAP(8660, LDO24_0),
  2771. MSM_RPM_STATUS_ID_MAP(8660, LDO24_1),
  2772. MSM_RPM_STATUS_ID_MAP(8660, LDO25_0),
  2773. MSM_RPM_STATUS_ID_MAP(8660, LDO25_1),
  2774. MSM_RPM_STATUS_ID_MAP(8660, LVS0),
  2775. MSM_RPM_STATUS_ID_MAP(8660, LVS1),
  2776. MSM_RPM_STATUS_ID_MAP(8660, NCP_0),
  2777. MSM_RPM_STATUS_ID_MAP(8660, NCP_1),
  2778. MSM_RPM_STATUS_ID_MAP(8660, CXO_BUFFERS),
  2779. },
  2780. .target_ctrl_id = {
  2781. MSM_RPM_CTRL_MAP(8660, VERSION_MAJOR),
  2782. MSM_RPM_CTRL_MAP(8660, VERSION_MINOR),
  2783. MSM_RPM_CTRL_MAP(8660, VERSION_BUILD),
  2784. MSM_RPM_CTRL_MAP(8660, REQ_CTX_0),
  2785. MSM_RPM_CTRL_MAP(8660, REQ_SEL_0),
  2786. MSM_RPM_CTRL_MAP(8660, ACK_CTX_0),
  2787. MSM_RPM_CTRL_MAP(8660, ACK_SEL_0),
  2788. },
  2789. .sel_invalidate = MSM_RPM_8660_SEL_INVALIDATE,
  2790. .sel_notification = MSM_RPM_8660_SEL_NOTIFICATION,
  2791. .sel_last = MSM_RPM_8660_SEL_LAST,
  2792. .ver = {2, 0, 0},
  2793. };
  2794. struct platform_device msm8660_rpm_device = {
  2795. .name = "msm_rpm",
  2796. .id = -1,
  2797. };
  2798. struct msm_iommu_domain_name msm8660_iommu_ctx_names[] = {
  2799. /* Camera */
  2800. {
  2801. .name = "ijpeg_src",
  2802. .domain = CAMERA_DOMAIN,
  2803. },
  2804. /* Camera */
  2805. {
  2806. .name = "ijpeg_dst",
  2807. .domain = CAMERA_DOMAIN,
  2808. },
  2809. /* Camera */
  2810. {
  2811. .name = "jpegd_src",
  2812. .domain = CAMERA_DOMAIN,
  2813. },
  2814. /* Camera */
  2815. {
  2816. .name = "jpegd_dst",
  2817. .domain = CAMERA_DOMAIN,
  2818. },
  2819. /* Rotator */
  2820. {
  2821. .name = "rot_src",
  2822. .domain = ROTATOR_SRC_DOMAIN,
  2823. },
  2824. /* Rotator */
  2825. {
  2826. .name = "rot_dst",
  2827. .domain = ROTATOR_SRC_DOMAIN,
  2828. },
  2829. /* Video */
  2830. {
  2831. .name = "vcodec_a_mm1",
  2832. .domain = VIDEO_DOMAIN,
  2833. },
  2834. /* Video */
  2835. {
  2836. .name = "vcodec_b_mm2",
  2837. .domain = VIDEO_DOMAIN,
  2838. },
  2839. /* Video */
  2840. {
  2841. .name = "vcodec_a_stream",
  2842. .domain = VIDEO_DOMAIN,
  2843. },
  2844. };
  2845. static struct mem_pool msm8660_video_pools[] = {
  2846. /*
  2847. * Video hardware has the following requirements:
  2848. * 1. All video addresses used by the video hardware must be at a higher
  2849. * address than video firmware address.
  2850. * 2. Video hardware can only access a range of 256MB from the base of
  2851. * the video firmware.
  2852. */
  2853. [VIDEO_FIRMWARE_POOL] =
  2854. /* Low addresses, intended for video firmware */
  2855. {
  2856. .paddr = SZ_128K,
  2857. .size = SZ_16M - SZ_128K,
  2858. },
  2859. [VIDEO_MAIN_POOL] =
  2860. /* Main video pool */
  2861. {
  2862. .paddr = SZ_16M,
  2863. .size = SZ_256M - SZ_16M,
  2864. },
  2865. [GEN_POOL] =
  2866. /* Remaining address space up to 2G */
  2867. {
  2868. .paddr = SZ_256M,
  2869. .size = SZ_2G - SZ_256M,
  2870. },
  2871. };
  2872. static struct mem_pool msm8660_camera_pools[] = {
  2873. [GEN_POOL] =
  2874. /* One address space for camera */
  2875. {
  2876. .paddr = SZ_128K,
  2877. .size = SZ_2G - SZ_128K,
  2878. },
  2879. };
  2880. static struct mem_pool msm8660_display_pools[] = {
  2881. [GEN_POOL] =
  2882. /* One address space for display */
  2883. {
  2884. .paddr = SZ_128K,
  2885. .size = SZ_2G - SZ_128K,
  2886. },
  2887. };
  2888. static struct mem_pool msm8660_rotator_pools[] = {
  2889. [GEN_POOL] =
  2890. /* One address space for rotator */
  2891. {
  2892. .paddr = SZ_128K,
  2893. .size = SZ_2G - SZ_128K,
  2894. },
  2895. };
  2896. static struct msm_iommu_domain msm8660_iommu_domains[] = {
  2897. [VIDEO_DOMAIN] = {
  2898. .iova_pools = msm8660_video_pools,
  2899. .npools = ARRAY_SIZE(msm8660_video_pools),
  2900. },
  2901. [CAMERA_DOMAIN] = {
  2902. .iova_pools = msm8660_camera_pools,
  2903. .npools = ARRAY_SIZE(msm8660_camera_pools),
  2904. },
  2905. [DISPLAY_READ_DOMAIN] = {
  2906. .iova_pools = msm8660_display_pools,
  2907. .npools = ARRAY_SIZE(msm8660_display_pools),
  2908. },
  2909. [ROTATOR_SRC_DOMAIN] = {
  2910. .iova_pools = msm8660_rotator_pools,
  2911. .npools = ARRAY_SIZE(msm8660_rotator_pools),
  2912. },
  2913. };
  2914. struct iommu_domains_pdata msm8660_iommu_domain_pdata = {
  2915. .domains = msm8660_iommu_domains,
  2916. .ndomains = ARRAY_SIZE(msm8660_iommu_domains),
  2917. .domain_names = msm8660_iommu_ctx_names,
  2918. .nnames = ARRAY_SIZE(msm8660_iommu_ctx_names),
  2919. .domain_alloc_flags = 0,
  2920. };
  2921. struct platform_device msm8660_iommu_domain_device = {
  2922. .name = "iommu_domains",
  2923. .id = -1,
  2924. .dev = {
  2925. .platform_data = &msm8660_iommu_domain_pdata,
  2926. }
  2927. };
  2928. struct platform_device msm8660_pm_8x60 = {
  2929. .name = "pm-8x60",
  2930. .id = -1,
  2931. };