dwc3-msm.c 96 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577
  1. /* Copyright (c) 2012-2014, 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/module.h>
  14. #include <linux/kernel.h>
  15. #include <linux/slab.h>
  16. #include <linux/platform_device.h>
  17. #include <linux/dma-mapping.h>
  18. #include <linux/pm_runtime.h>
  19. #include <linux/ratelimit.h>
  20. #include <linux/interrupt.h>
  21. #include <linux/ioport.h>
  22. #include <linux/clk.h>
  23. #include <linux/io.h>
  24. #include <linux/module.h>
  25. #include <linux/types.h>
  26. #include <linux/delay.h>
  27. #include <linux/of.h>
  28. #include <linux/of_platform.h>
  29. #include <linux/of_device.h>
  30. #include <linux/of_gpio.h>
  31. #include <linux/list.h>
  32. #include <linux/debugfs.h>
  33. #include <linux/uaccess.h>
  34. #include <linux/usb/ch9.h>
  35. #include <linux/usb/gadget.h>
  36. #include <linux/qpnp-misc.h>
  37. #include <linux/usb/msm_hsusb.h>
  38. #include <linux/usb/msm_ext_chg.h>
  39. #include <linux/regulator/consumer.h>
  40. #include <linux/pm_wakeup.h>
  41. #include <linux/power_supply.h>
  42. #include <linux/qpnp/qpnp-adc.h>
  43. #include <linux/cdev.h>
  44. #include <linux/completion.h>
  45. #include <mach/rpm-regulator.h>
  46. #include <mach/rpm-regulator-smd.h>
  47. #include <mach/msm_bus.h>
  48. #include <mach/clk.h>
  49. #include "dwc3_otg.h"
  50. #include "core.h"
  51. #include "gadget.h"
  52. #include "debug.h"
  53. #if defined(CONFIG_MACH_HLTE_CHN_CMCC) || defined(CONFIG_MACH_JSGLTE_CHN_CMCC)
  54. extern unsigned int system_rev;
  55. #endif
  56. /* ADC threshold values */
  57. static int adc_low_threshold = 700;
  58. module_param(adc_low_threshold, int, S_IRUGO | S_IWUSR);
  59. MODULE_PARM_DESC(adc_low_threshold, "ADC ID Low voltage threshold");
  60. static int adc_high_threshold = 950;
  61. module_param(adc_high_threshold, int, S_IRUGO | S_IWUSR);
  62. MODULE_PARM_DESC(adc_high_threshold, "ADC ID High voltage threshold");
  63. static int adc_meas_interval = ADC_MEAS1_INTERVAL_1S;
  64. module_param(adc_meas_interval, int, S_IRUGO | S_IWUSR);
  65. MODULE_PARM_DESC(adc_meas_interval, "ADC ID polling period");
  66. static int override_phy_init;
  67. module_param(override_phy_init, int, S_IRUGO|S_IWUSR);
  68. MODULE_PARM_DESC(override_phy_init, "Override HSPHY Init Seq");
  69. static int ss_phy_override_deemphasis;
  70. module_param(ss_phy_override_deemphasis, int, S_IRUGO|S_IWUSR);
  71. MODULE_PARM_DESC(ss_phy_override_deemphasis, "Override SSPHY demphasis value");
  72. /* Enable Proprietary charger detection */
  73. static bool prop_chg_detect;
  74. module_param(prop_chg_detect, bool, S_IRUGO | S_IWUSR);
  75. MODULE_PARM_DESC(prop_chg_detect, "Enable Proprietary charger detection");
  76. /**
  77. * USB DBM Hardware registers.
  78. *
  79. */
  80. #define DBM_BASE 0x000F8000
  81. #define DBM_EP_CFG(n) (DBM_BASE + (0x00 + 4 * (n)))
  82. #define DBM_DATA_FIFO(n) (DBM_BASE + (0x10 + 4 * (n)))
  83. #define DBM_DATA_FIFO_SIZE(n) (DBM_BASE + (0x20 + 4 * (n)))
  84. #define DBM_DATA_FIFO_EN (DBM_BASE + (0x30))
  85. #define DBM_GEVNTADR (DBM_BASE + (0x34))
  86. #define DBM_GEVNTSIZ (DBM_BASE + (0x38))
  87. #define DBM_DBG_CNFG (DBM_BASE + (0x3C))
  88. #define DBM_HW_TRB0_EP(n) (DBM_BASE + (0x40 + 4 * (n)))
  89. #define DBM_HW_TRB1_EP(n) (DBM_BASE + (0x50 + 4 * (n)))
  90. #define DBM_HW_TRB2_EP(n) (DBM_BASE + (0x60 + 4 * (n)))
  91. #define DBM_HW_TRB3_EP(n) (DBM_BASE + (0x70 + 4 * (n)))
  92. #define DBM_PIPE_CFG (DBM_BASE + (0x80))
  93. #define DBM_SOFT_RESET (DBM_BASE + (0x84))
  94. #define DBM_GEN_CFG (DBM_BASE + (0x88))
  95. /**
  96. * USB DBM Hardware registers bitmask.
  97. *
  98. */
  99. /* DBM_EP_CFG */
  100. #define DBM_EN_EP 0x00000001
  101. #define USB3_EPNUM 0x0000003E
  102. #define DBM_BAM_PIPE_NUM 0x000000C0
  103. #define DBM_PRODUCER 0x00000100
  104. #define DBM_DISABLE_WB 0x00000200
  105. #define DBM_INT_RAM_ACC 0x00000400
  106. /* DBM_DATA_FIFO_SIZE */
  107. #define DBM_DATA_FIFO_SIZE_MASK 0x0000ffff
  108. /* DBM_GEVNTSIZ */
  109. #define DBM_GEVNTSIZ_MASK 0x0000ffff
  110. /* DBM_DBG_CNFG */
  111. #define DBM_ENABLE_IOC_MASK 0x0000000f
  112. /* DBM_SOFT_RESET */
  113. #define DBM_SFT_RST_EP0 0x00000001
  114. #define DBM_SFT_RST_EP1 0x00000002
  115. #define DBM_SFT_RST_EP2 0x00000004
  116. #define DBM_SFT_RST_EP3 0x00000008
  117. #define DBM_SFT_RST_EPS_MASK 0x0000000F
  118. #define DBM_SFT_RST_MASK 0x80000000
  119. #define DBM_EN_MASK 0x00000002
  120. #define DBM_MAX_EPS 4
  121. /* DBM TRB configurations */
  122. #define DBM_TRB_BIT 0x80000000
  123. #define DBM_TRB_DATA_SRC 0x40000000
  124. #define DBM_TRB_DMA 0x20000000
  125. #define DBM_TRB_EP_NUM(ep) (ep<<24)
  126. #define USB3_PORTSC (0x430)
  127. #define PORT_PE (0x1 << 1)
  128. /**
  129. * USB QSCRATCH Hardware registers
  130. *
  131. */
  132. #define QSCRATCH_REG_OFFSET (0x000F8800)
  133. #define QSCRATCH_CTRL_REG (QSCRATCH_REG_OFFSET + 0x04)
  134. #define QSCRATCH_GENERAL_CFG (QSCRATCH_REG_OFFSET + 0x08)
  135. #define QSCRATCH_RAM1_REG (QSCRATCH_REG_OFFSET + 0x0C)
  136. #define HS_PHY_CTRL_REG (QSCRATCH_REG_OFFSET + 0x10)
  137. #define PARAMETER_OVERRIDE_X_REG (QSCRATCH_REG_OFFSET + 0x14)
  138. #define CHARGING_DET_CTRL_REG (QSCRATCH_REG_OFFSET + 0x18)
  139. #define CHARGING_DET_OUTPUT_REG (QSCRATCH_REG_OFFSET + 0x1C)
  140. #define ALT_INTERRUPT_EN_REG (QSCRATCH_REG_OFFSET + 0x20)
  141. #define HS_PHY_IRQ_STAT_REG (QSCRATCH_REG_OFFSET + 0x24)
  142. #define CGCTL_REG (QSCRATCH_REG_OFFSET + 0x28)
  143. #define SS_PHY_CTRL_REG (QSCRATCH_REG_OFFSET + 0x30)
  144. #define SS_PHY_PARAM_CTRL_1 (QSCRATCH_REG_OFFSET + 0x34)
  145. #define SS_PHY_PARAM_CTRL_2 (QSCRATCH_REG_OFFSET + 0x38)
  146. #define SS_CR_PROTOCOL_DATA_IN_REG (QSCRATCH_REG_OFFSET + 0x3C)
  147. #define SS_CR_PROTOCOL_DATA_OUT_REG (QSCRATCH_REG_OFFSET + 0x40)
  148. #define SS_CR_PROTOCOL_CAP_ADDR_REG (QSCRATCH_REG_OFFSET + 0x44)
  149. #define SS_CR_PROTOCOL_CAP_DATA_REG (QSCRATCH_REG_OFFSET + 0x48)
  150. #define SS_CR_PROTOCOL_READ_REG (QSCRATCH_REG_OFFSET + 0x4C)
  151. #define SS_CR_PROTOCOL_WRITE_REG (QSCRATCH_REG_OFFSET + 0x50)
  152. #define PWR_EVNT_IRQ_STAT_REG (QSCRATCH_REG_OFFSET + 0x58)
  153. #define PWR_EVNT_IRQ_MASK_REG (QSCRATCH_REG_OFFSET + 0x5C)
  154. struct dwc3_msm_req_complete {
  155. struct list_head list_item;
  156. struct usb_request *req;
  157. void (*orig_complete)(struct usb_ep *ep,
  158. struct usb_request *req);
  159. };
  160. struct dwc3_msm {
  161. struct device *dev;
  162. void __iomem *base;
  163. struct resource *io_res;
  164. int dbm_num_eps;
  165. u8 ep_num_mapping[DBM_MAX_EPS];
  166. const struct usb_ep_ops *original_ep_ops[DWC3_ENDPOINTS_NUM];
  167. struct list_head req_complete_list;
  168. struct clk *xo_clk;
  169. struct clk *ref_clk;
  170. struct clk *core_clk;
  171. struct clk *iface_clk;
  172. struct clk *sleep_clk;
  173. struct clk *hsphy_sleep_clk;
  174. struct clk *utmi_clk;
  175. struct regulator *hsusb_3p3;
  176. struct regulator *hsusb_1p8;
  177. struct regulator *hsusb_vddcx;
  178. struct regulator *ssusb_1p8;
  179. struct regulator *ssusb_vddcx;
  180. struct regulator *dwc3_gdsc;
  181. /* VBUS regulator if no OTG and running in host only mode */
  182. struct regulator *vbus_otg;
  183. struct dwc3_ext_xceiv ext_xceiv;
  184. bool resume_pending;
  185. atomic_t pm_suspended;
  186. atomic_t in_lpm;
  187. int hs_phy_irq;
  188. int hsphy_init_seq;
  189. int deemphasis_val;
  190. bool lpm_irq_seen;
  191. struct delayed_work resume_work;
  192. struct work_struct restart_usb_work;
  193. struct work_struct usb_block_reset_work;
  194. struct dwc3_charger charger;
  195. struct usb_phy *otg_xceiv;
  196. struct delayed_work chg_work;
  197. enum usb_chg_state chg_state;
  198. int pmic_id_irq;
  199. struct work_struct id_work;
  200. struct qpnp_adc_tm_btm_param adc_param;
  201. struct qpnp_adc_tm_chip *adc_tm_dev;
  202. struct delayed_work init_adc_work;
  203. bool id_adc_detect;
  204. struct qpnp_vadc_chip *vadc_dev;
  205. u8 dcd_retries;
  206. u32 bus_perf_client;
  207. struct msm_bus_scale_pdata *bus_scale_table;
  208. struct power_supply usb_psy;
  209. struct power_supply *ext_vbus_psy;
  210. unsigned int online;
  211. unsigned int host_mode;
  212. unsigned int voltage_max;
  213. unsigned int current_max;
  214. unsigned int vdd_no_vol_level;
  215. unsigned int vdd_low_vol_level;
  216. unsigned int vdd_high_vol_level;
  217. unsigned int tx_fifo_size;
  218. unsigned int qdss_tx_fifo_size;
  219. bool vbus_active;
  220. bool ext_inuse;
  221. enum dwc3_id_state id_state;
  222. unsigned long lpm_flags;
  223. #define MDWC3_PHY_REF_AND_CORECLK_OFF BIT(0)
  224. #define MDWC3_TCXO_SHUTDOWN BIT(1)
  225. #define MDWC3_ASYNC_IRQ_WAKE_CAPABILITY BIT(2)
  226. u32 qscratch_ctl_val;
  227. dev_t ext_chg_dev;
  228. struct cdev ext_chg_cdev;
  229. struct class *ext_chg_class;
  230. struct device *ext_chg_device;
  231. bool ext_chg_opened;
  232. bool ext_chg_active;
  233. struct completion ext_chg_wait;
  234. };
  235. #define USB_HSPHY_3P3_VOL_MIN 3050000 /* uV */
  236. #define USB_HSPHY_3P3_VOL_MAX 3300000 /* uV */
  237. #define USB_HSPHY_3P3_HPM_LOAD 16000 /* uA */
  238. #define USB_HSPHY_1P8_VOL_MIN 1800000 /* uV */
  239. #define USB_HSPHY_1P8_VOL_MAX 1800000 /* uV */
  240. #define USB_HSPHY_1P8_HPM_LOAD 19000 /* uA */
  241. #define USB_SSPHY_1P8_VOL_MIN 1800000 /* uV */
  242. #define USB_SSPHY_1P8_VOL_MAX 1800000 /* uV */
  243. #define USB_SSPHY_1P8_HPM_LOAD 23000 /* uA */
  244. static struct usb_ext_notification *usb_ext;
  245. #if defined(CONFIG_SEC_VIENNA_PROJECT) || defined(CONFIG_SEC_V2_PROJECT) \
  246. || defined(CONFIG_SEC_K_PROJECT) \
  247. || defined(CONFIG_SEC_H_PROJECT) || defined(CONFIG_SEC_F_PROJECT)
  248. int sec_qcom_usb_rdrv;
  249. EXPORT_SYMBOL(sec_qcom_usb_rdrv);
  250. #endif
  251. /**
  252. *
  253. * Read register with debug info.
  254. *
  255. * @base - DWC3 base virtual address.
  256. * @offset - register offset.
  257. *
  258. * @return u32
  259. */
  260. static inline u32 dwc3_msm_read_reg(void *base, u32 offset)
  261. {
  262. u32 val = ioread32(base + offset);
  263. return val;
  264. }
  265. /**
  266. * Read register masked field with debug info.
  267. *
  268. * @base - DWC3 base virtual address.
  269. * @offset - register offset.
  270. * @mask - register bitmask.
  271. *
  272. * @return u32
  273. */
  274. static inline u32 dwc3_msm_read_reg_field(void *base,
  275. u32 offset,
  276. const u32 mask)
  277. {
  278. u32 shift = find_first_bit((void *)&mask, 32);
  279. u32 val = ioread32(base + offset);
  280. val &= mask; /* clear other bits */
  281. val >>= shift;
  282. return val;
  283. }
  284. /**
  285. *
  286. * Write register with debug info.
  287. *
  288. * @base - DWC3 base virtual address.
  289. * @offset - register offset.
  290. * @val - value to write.
  291. *
  292. */
  293. static inline void dwc3_msm_write_reg(void *base, u32 offset, u32 val)
  294. {
  295. iowrite32(val, base + offset);
  296. }
  297. /**
  298. * Write register masked field with debug info.
  299. *
  300. * @base - DWC3 base virtual address.
  301. * @offset - register offset.
  302. * @mask - register bitmask.
  303. * @val - value to write.
  304. *
  305. */
  306. static inline void dwc3_msm_write_reg_field(void *base, u32 offset,
  307. const u32 mask, u32 val)
  308. {
  309. u32 shift = find_first_bit((void *)&mask, 32);
  310. u32 tmp = ioread32(base + offset);
  311. tmp &= ~mask; /* clear written bits */
  312. val = tmp | (val << shift);
  313. iowrite32(val, base + offset);
  314. }
  315. /**
  316. * Write register and read back masked value to confirm it is written
  317. *
  318. * @base - DWC3 base virtual address.
  319. * @offset - register offset.
  320. * @mask - register bitmask specifying what should be updated
  321. * @val - value to write.
  322. *
  323. */
  324. static inline void dwc3_msm_write_readback(void *base, u32 offset,
  325. const u32 mask, u32 val)
  326. {
  327. u32 write_val, tmp = ioread32(base + offset);
  328. tmp &= ~mask; /* retain other bits */
  329. write_val = tmp | val;
  330. iowrite32(write_val, base + offset);
  331. /* Read back to see if val was written */
  332. tmp = ioread32(base + offset);
  333. tmp &= mask; /* clear other bits */
  334. if (tmp != val)
  335. pr_err("%s: write: %x to QSCRATCH: %x FAILED\n",
  336. __func__, val, offset);
  337. }
  338. /**
  339. *
  340. * Write SSPHY register with debug info.
  341. *
  342. * @base - DWC3 base virtual address.
  343. * @addr - SSPHY address to write.
  344. * @val - value to write.
  345. *
  346. */
  347. static void dwc3_msm_ssusb_write_phycreg(void *base, u32 addr, u32 val)
  348. {
  349. iowrite32(addr, base + SS_CR_PROTOCOL_DATA_IN_REG);
  350. iowrite32(0x1, base + SS_CR_PROTOCOL_CAP_ADDR_REG);
  351. while (ioread32(base + SS_CR_PROTOCOL_CAP_ADDR_REG))
  352. cpu_relax();
  353. iowrite32(val, base + SS_CR_PROTOCOL_DATA_IN_REG);
  354. iowrite32(0x1, base + SS_CR_PROTOCOL_CAP_DATA_REG);
  355. while (ioread32(base + SS_CR_PROTOCOL_CAP_DATA_REG))
  356. cpu_relax();
  357. iowrite32(0x1, base + SS_CR_PROTOCOL_WRITE_REG);
  358. while (ioread32(base + SS_CR_PROTOCOL_WRITE_REG))
  359. cpu_relax();
  360. }
  361. /**
  362. *
  363. * Read SSPHY register with debug info.
  364. *
  365. * @base - DWC3 base virtual address.
  366. * @addr - SSPHY address to read.
  367. *
  368. */
  369. static u32 dwc3_msm_ssusb_read_phycreg(void *base, u32 addr)
  370. {
  371. bool first_read = true;
  372. iowrite32(addr, base + SS_CR_PROTOCOL_DATA_IN_REG);
  373. iowrite32(0x1, base + SS_CR_PROTOCOL_CAP_ADDR_REG);
  374. while (ioread32(base + SS_CR_PROTOCOL_CAP_ADDR_REG))
  375. cpu_relax();
  376. /*
  377. * Due to hardware bug, first read of SSPHY register might be
  378. * incorrect. Hence as workaround, SW should perform SSPHY register
  379. * read twice, but use only second read and ignore first read.
  380. */
  381. retry:
  382. iowrite32(0x1, base + SS_CR_PROTOCOL_READ_REG);
  383. while (ioread32(base + SS_CR_PROTOCOL_READ_REG))
  384. cpu_relax();
  385. if (first_read) {
  386. ioread32(base + SS_CR_PROTOCOL_DATA_OUT_REG);
  387. first_read = false;
  388. goto retry;
  389. }
  390. return ioread32(base + SS_CR_PROTOCOL_DATA_OUT_REG);
  391. }
  392. /**
  393. * Dump all QSCRATCH registers.
  394. *
  395. */
  396. static void dwc3_msm_dump_phy_info(struct dwc3_msm *mdwc)
  397. {
  398. dbg_print_reg("SSPHY_CTRL_REG", dwc3_msm_read_reg(mdwc->base,
  399. SS_PHY_CTRL_REG));
  400. dbg_print_reg("HSPHY_CTRL_REG", dwc3_msm_read_reg(mdwc->base,
  401. HS_PHY_CTRL_REG));
  402. dbg_print_reg("QSCRATCH_CTRL_REG", dwc3_msm_read_reg(mdwc->base,
  403. QSCRATCH_CTRL_REG));
  404. dbg_print_reg("QSCRATCH_GENERAL_CFG", dwc3_msm_read_reg(mdwc->base,
  405. QSCRATCH_GENERAL_CFG));
  406. dbg_print_reg("PARAMETER_OVERRIDE_X_REG", dwc3_msm_read_reg(mdwc->base,
  407. PARAMETER_OVERRIDE_X_REG));
  408. dbg_print_reg("HS_PHY_IRQ_STAT_REG", dwc3_msm_read_reg(mdwc->base,
  409. HS_PHY_IRQ_STAT_REG));
  410. dbg_print_reg("SS_PHY_PARAM_CTRL_1", dwc3_msm_read_reg(mdwc->base,
  411. SS_PHY_PARAM_CTRL_1));
  412. dbg_print_reg("SS_PHY_PARAM_CTRL_2", dwc3_msm_read_reg(mdwc->base,
  413. SS_PHY_PARAM_CTRL_2));
  414. dbg_print_reg("QSCRATCH_RAM1_REG", dwc3_msm_read_reg(mdwc->base,
  415. QSCRATCH_RAM1_REG));
  416. dbg_print_reg("PWR_EVNT_IRQ_STAT_REG", dwc3_msm_read_reg(mdwc->base,
  417. PWR_EVNT_IRQ_STAT_REG));
  418. dbg_print_reg("PWR_EVNT_IRQ_MASK_REG", dwc3_msm_read_reg(mdwc->base,
  419. PWR_EVNT_IRQ_MASK_REG));
  420. }
  421. /**
  422. * Return DBM EP number according to usb endpoint number.
  423. *
  424. */
  425. static int dwc3_msm_find_matching_dbm_ep(struct dwc3_msm *mdwc, u8 usb_ep)
  426. {
  427. int i;
  428. for (i = 0; i < mdwc->dbm_num_eps; i++)
  429. if (mdwc->ep_num_mapping[i] == usb_ep)
  430. return i;
  431. return -ENODEV; /* Not found */
  432. }
  433. /**
  434. * Return number of configured DBM endpoints.
  435. *
  436. */
  437. static int dwc3_msm_configured_dbm_ep_num(struct dwc3_msm *mdwc)
  438. {
  439. int i;
  440. int count = 0;
  441. for (i = 0; i < mdwc->dbm_num_eps; i++)
  442. if (mdwc->ep_num_mapping[i])
  443. count++;
  444. return count;
  445. }
  446. /**
  447. * Configure the DBM with the USB3 core event buffer.
  448. * This function is called by the SNPS UDC upon initialization.
  449. *
  450. * @addr - address of the event buffer.
  451. * @size - size of the event buffer.
  452. *
  453. */
  454. static int dwc3_msm_event_buffer_config(struct dwc3_msm *mdwc,
  455. u32 addr, u16 size)
  456. {
  457. dev_dbg(mdwc->dev, "%s\n", __func__);
  458. dwc3_msm_write_reg(mdwc->base, DBM_GEVNTADR, addr);
  459. dwc3_msm_write_reg_field(mdwc->base, DBM_GEVNTSIZ,
  460. DBM_GEVNTSIZ_MASK, size);
  461. return 0;
  462. }
  463. /**
  464. * Reset the DBM registers upon initialization.
  465. *
  466. */
  467. static int dwc3_msm_dbm_soft_reset(struct dwc3_msm *mdwc, int enter_reset)
  468. {
  469. dev_dbg(mdwc->dev, "%s\n", __func__);
  470. if (enter_reset) {
  471. dev_dbg(mdwc->dev, "enter DBM reset\n");
  472. dwc3_msm_write_reg_field(mdwc->base, DBM_SOFT_RESET,
  473. DBM_SFT_RST_MASK, 1);
  474. } else {
  475. dev_dbg(mdwc->dev, "exit DBM reset\n");
  476. dwc3_msm_write_reg_field(mdwc->base, DBM_SOFT_RESET,
  477. DBM_SFT_RST_MASK, 0);
  478. /*enable DBM*/
  479. dwc3_msm_write_reg_field(mdwc->base, QSCRATCH_GENERAL_CFG,
  480. DBM_EN_MASK, 0x1);
  481. }
  482. return 0;
  483. }
  484. /**
  485. * Soft reset specific DBM ep.
  486. * This function is called by the function driver upon events
  487. * such as transfer aborting, USB re-enumeration and USB
  488. * disconnection.
  489. *
  490. * @dbm_ep - DBM ep number.
  491. * @enter_reset - should we enter a reset state or get out of it.
  492. *
  493. */
  494. static int dwc3_msm_dbm_ep_soft_reset(struct dwc3_msm *mdwc,
  495. u8 dbm_ep, bool enter_reset)
  496. {
  497. dev_dbg(mdwc->dev, "%s\n", __func__);
  498. if (dbm_ep >= mdwc->dbm_num_eps) {
  499. dev_err(mdwc->dev, "%s: Invalid DBM ep index\n", __func__);
  500. return -ENODEV;
  501. }
  502. if (enter_reset) {
  503. dwc3_msm_write_reg_field(mdwc->base, DBM_SOFT_RESET,
  504. DBM_SFT_RST_EPS_MASK & 1 << dbm_ep, 1);
  505. } else {
  506. dwc3_msm_write_reg_field(mdwc->base, DBM_SOFT_RESET,
  507. DBM_SFT_RST_EPS_MASK & 1 << dbm_ep, 0);
  508. }
  509. return 0;
  510. }
  511. /**
  512. * Configure a USB DBM ep to work in BAM mode.
  513. *
  514. *
  515. * @usb_ep - USB physical EP number.
  516. * @producer - producer/consumer.
  517. * @disable_wb - disable write back to system memory.
  518. * @internal_mem - use internal USB memory for data fifo.
  519. * @ioc - enable interrupt on completion.
  520. *
  521. * @return int - DBM ep number.
  522. */
  523. static int dwc3_msm_dbm_ep_config(struct dwc3_msm *mdwc, u8 usb_ep, u8 bam_pipe,
  524. bool producer, bool disable_wb,
  525. bool internal_mem, bool ioc)
  526. {
  527. u8 dbm_ep;
  528. u32 ep_cfg;
  529. dev_dbg(mdwc->dev, "%s\n", __func__);
  530. dbm_ep = dwc3_msm_find_matching_dbm_ep(mdwc, usb_ep);
  531. if (dbm_ep < 0) {
  532. dev_err(mdwc->dev,
  533. "%s: Invalid usb ep index\n", __func__);
  534. return -ENODEV;
  535. }
  536. /* First, reset the dbm endpoint */
  537. dwc3_msm_dbm_ep_soft_reset(mdwc, dbm_ep, 0);
  538. /* Set ioc bit for dbm_ep if needed */
  539. dwc3_msm_write_reg_field(mdwc->base, DBM_DBG_CNFG,
  540. DBM_ENABLE_IOC_MASK & 1 << dbm_ep, ioc ? 1 : 0);
  541. ep_cfg = (producer ? DBM_PRODUCER : 0) |
  542. (disable_wb ? DBM_DISABLE_WB : 0) |
  543. (internal_mem ? DBM_INT_RAM_ACC : 0);
  544. dwc3_msm_write_reg_field(mdwc->base, DBM_EP_CFG(dbm_ep),
  545. DBM_PRODUCER | DBM_DISABLE_WB | DBM_INT_RAM_ACC, ep_cfg >> 8);
  546. dwc3_msm_write_reg_field(mdwc->base, DBM_EP_CFG(dbm_ep), USB3_EPNUM,
  547. usb_ep);
  548. dwc3_msm_write_reg_field(mdwc->base, DBM_EP_CFG(dbm_ep),
  549. DBM_BAM_PIPE_NUM, bam_pipe);
  550. dwc3_msm_write_reg_field(mdwc->base, DBM_PIPE_CFG, 0x000000ff,
  551. 0xe4);
  552. dwc3_msm_write_reg_field(mdwc->base, DBM_EP_CFG(dbm_ep), DBM_EN_EP,
  553. 1);
  554. return dbm_ep;
  555. }
  556. /**
  557. * Configure a USB DBM ep to work in normal mode.
  558. *
  559. * @usb_ep - USB ep number.
  560. *
  561. */
  562. static int dwc3_msm_dbm_ep_unconfig(struct dwc3_msm *mdwc, u8 usb_ep)
  563. {
  564. int dbm_ep;
  565. u32 data;
  566. dev_dbg(mdwc->dev, "%s\n", __func__);
  567. dbm_ep = dwc3_msm_find_matching_dbm_ep(mdwc, usb_ep);
  568. if (dbm_ep < 0) {
  569. dev_err(mdwc->dev, "%s: Invalid usb ep index\n", __func__);
  570. return -ENODEV;
  571. }
  572. mdwc->ep_num_mapping[dbm_ep] = 0;
  573. data = dwc3_msm_read_reg(mdwc->base, DBM_EP_CFG(dbm_ep));
  574. data &= (~0x1);
  575. dwc3_msm_write_reg(mdwc->base, DBM_EP_CFG(dbm_ep), data);
  576. /* Reset the dbm endpoint */
  577. dwc3_msm_dbm_ep_soft_reset(mdwc, dbm_ep, true);
  578. /*
  579. * 10 usec delay is required before deasserting DBM endpoint reset
  580. * according to hardware programming guide.
  581. */
  582. udelay(10);
  583. dwc3_msm_dbm_ep_soft_reset(mdwc, dbm_ep, false);
  584. return 0;
  585. }
  586. /**
  587. * Configure the DBM with the BAM's data fifo.
  588. * This function is called by the USB BAM Driver
  589. * upon initialization.
  590. *
  591. * @ep - pointer to usb endpoint.
  592. * @addr - address of data fifo.
  593. * @size - size of data fifo.
  594. *
  595. */
  596. int msm_data_fifo_config(struct usb_ep *ep, u32 addr, u32 size, u8 dst_pipe_idx)
  597. {
  598. u8 dbm_ep;
  599. struct dwc3_ep *dep = to_dwc3_ep(ep);
  600. struct dwc3 *dwc = dep->dwc;
  601. struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
  602. u8 bam_pipe = dst_pipe_idx;
  603. dev_dbg(mdwc->dev, "%s\n", __func__);
  604. dbm_ep = bam_pipe;
  605. mdwc->ep_num_mapping[dbm_ep] = dep->number;
  606. dwc3_msm_write_reg(mdwc->base, DBM_DATA_FIFO(dbm_ep), addr);
  607. dwc3_msm_write_reg_field(mdwc->base, DBM_DATA_FIFO_SIZE(dbm_ep),
  608. DBM_DATA_FIFO_SIZE_MASK, size);
  609. return 0;
  610. }
  611. /**
  612. * Cleanups for msm endpoint on request complete.
  613. *
  614. * Also call original request complete.
  615. *
  616. * @usb_ep - pointer to usb_ep instance.
  617. * @request - pointer to usb_request instance.
  618. *
  619. * @return int - 0 on success, negetive on error.
  620. */
  621. static void dwc3_msm_req_complete_func(struct usb_ep *ep,
  622. struct usb_request *request)
  623. {
  624. struct dwc3_ep *dep = to_dwc3_ep(ep);
  625. struct dwc3 *dwc = dep->dwc;
  626. struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
  627. struct dwc3_msm_req_complete *req_complete = NULL;
  628. /* Find original request complete function and remove it from list */
  629. list_for_each_entry(req_complete, &mdwc->req_complete_list, list_item) {
  630. if (req_complete->req == request)
  631. break;
  632. }
  633. if (!req_complete || req_complete->req != request) {
  634. dev_err(dep->dwc->dev, "%s: could not find the request\n",
  635. __func__);
  636. return;
  637. }
  638. list_del(&req_complete->list_item);
  639. /*
  640. * Release another one TRB to the pool since DBM queue took 2 TRBs
  641. * (normal and link), and the dwc3/gadget.c :: dwc3_gadget_giveback
  642. * released only one.
  643. */
  644. dep->busy_slot++;
  645. /* Unconfigure dbm ep */
  646. dwc3_msm_dbm_ep_unconfig(mdwc, dep->number);
  647. /*
  648. * If this is the last endpoint we unconfigured, than reset also
  649. * the event buffers.
  650. */
  651. if (0 == dwc3_msm_configured_dbm_ep_num(mdwc))
  652. dwc3_msm_event_buffer_config(mdwc, 0, 0);
  653. /*
  654. * Call original complete function, notice that dwc->lock is already
  655. * taken by the caller of this function (dwc3_gadget_giveback()).
  656. */
  657. request->complete = req_complete->orig_complete;
  658. if (request->complete)
  659. request->complete(ep, request);
  660. kfree(req_complete);
  661. }
  662. /**
  663. * Helper function.
  664. * See the header of the dwc3_msm_ep_queue function.
  665. *
  666. * @dwc3_ep - pointer to dwc3_ep instance.
  667. * @req - pointer to dwc3_request instance.
  668. *
  669. * @return int - 0 on success, negetive on error.
  670. */
  671. static int __dwc3_msm_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
  672. {
  673. struct dwc3_trb *trb;
  674. struct dwc3_trb *trb_link;
  675. struct dwc3_gadget_ep_cmd_params params;
  676. u32 cmd;
  677. int ret = 0;
  678. /* We push the request to the dep->req_queued list to indicate that
  679. * this request is issued with start transfer. The request will be out
  680. * from this list in 2 cases. The first is that the transfer will be
  681. * completed (not if the transfer is endless using a circular TRBs with
  682. * with link TRB). The second case is an option to do stop stransfer,
  683. * this can be initiated by the function driver when calling dequeue.
  684. */
  685. req->queued = true;
  686. list_add_tail(&req->list, &dep->req_queued);
  687. /* First, prepare a normal TRB, point to the fake buffer */
  688. trb = &dep->trb_pool[dep->free_slot & DWC3_TRB_MASK];
  689. dep->free_slot++;
  690. memset(trb, 0, sizeof(*trb));
  691. req->trb = trb;
  692. trb->bph = DBM_TRB_BIT | DBM_TRB_DMA | DBM_TRB_EP_NUM(dep->number);
  693. trb->size = DWC3_TRB_SIZE_LENGTH(req->request.length);
  694. trb->ctrl = DWC3_TRBCTL_NORMAL | DWC3_TRB_CTRL_HWO | DWC3_TRB_CTRL_CHN;
  695. req->trb_dma = dwc3_trb_dma_offset(dep, trb);
  696. /* Second, prepare a Link TRB that points to the first TRB*/
  697. trb_link = &dep->trb_pool[dep->free_slot & DWC3_TRB_MASK];
  698. dep->free_slot++;
  699. memset(trb_link, 0, sizeof *trb_link);
  700. trb_link->bpl = lower_32_bits(req->trb_dma);
  701. trb_link->bph = DBM_TRB_BIT |
  702. DBM_TRB_DMA | DBM_TRB_EP_NUM(dep->number);
  703. trb_link->size = 0;
  704. trb_link->ctrl = DWC3_TRBCTL_LINK_TRB | DWC3_TRB_CTRL_HWO;
  705. /*
  706. * Now start the transfer
  707. */
  708. memset(&params, 0, sizeof(params));
  709. params.param0 = 0; /* TDAddr High */
  710. params.param1 = lower_32_bits(req->trb_dma); /* DAddr Low */
  711. /* DBM requires IOC to be set */
  712. cmd = DWC3_DEPCMD_STARTTRANSFER | DWC3_DEPCMD_CMDIOC;
  713. ret = dwc3_send_gadget_ep_cmd(dep->dwc, dep->number, cmd, &params);
  714. if (ret < 0) {
  715. dev_dbg(dep->dwc->dev,
  716. "%s: failed to send STARTTRANSFER command\n",
  717. __func__);
  718. list_del(&req->list);
  719. return ret;
  720. }
  721. dep->flags |= DWC3_EP_BUSY;
  722. return ret;
  723. }
  724. /**
  725. * Queue a usb request to the DBM endpoint.
  726. * This function should be called after the endpoint
  727. * was enabled by the ep_enable.
  728. *
  729. * This function prepares special structure of TRBs which
  730. * is familier with the DBM HW, so it will possible to use
  731. * this endpoint in DBM mode.
  732. *
  733. * The TRBs prepared by this function, is one normal TRB
  734. * which point to a fake buffer, followed by a link TRB
  735. * that points to the first TRB.
  736. *
  737. * The API of this function follow the regular API of
  738. * usb_ep_queue (see usb_ep_ops in include/linuk/usb/gadget.h).
  739. *
  740. * @usb_ep - pointer to usb_ep instance.
  741. * @request - pointer to usb_request instance.
  742. * @gfp_flags - possible flags.
  743. *
  744. * @return int - 0 on success, negetive on error.
  745. */
  746. static int dwc3_msm_ep_queue(struct usb_ep *ep,
  747. struct usb_request *request, gfp_t gfp_flags)
  748. {
  749. struct dwc3_request *req = to_dwc3_request(request);
  750. struct dwc3_ep *dep = to_dwc3_ep(ep);
  751. struct dwc3 *dwc = dep->dwc;
  752. struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
  753. struct dwc3_msm_req_complete *req_complete;
  754. unsigned long flags;
  755. int ret = 0;
  756. u8 bam_pipe;
  757. bool producer;
  758. bool disable_wb;
  759. bool internal_mem;
  760. bool ioc;
  761. u8 speed;
  762. if (!(request->udc_priv & MSM_SPS_MODE)) {
  763. /* Not SPS mode, call original queue */
  764. dev_vdbg(mdwc->dev, "%s: not sps mode, use regular queue\n",
  765. __func__);
  766. return (mdwc->original_ep_ops[dep->number])->queue(ep,
  767. request,
  768. gfp_flags);
  769. }
  770. if (!dep->endpoint.desc) {
  771. dev_err(mdwc->dev,
  772. "%s: trying to queue request %pK to disabled ep %s\n",
  773. __func__, request, ep->name);
  774. return -EPERM;
  775. }
  776. if (dep->number == 0 || dep->number == 1) {
  777. dev_err(mdwc->dev,
  778. "%s: trying to queue dbm request %pK to control ep %s\n",
  779. __func__, request, ep->name);
  780. return -EPERM;
  781. }
  782. if (dep->busy_slot != dep->free_slot || !list_empty(&dep->request_list)
  783. || !list_empty(&dep->req_queued)) {
  784. dev_err(mdwc->dev,
  785. "%s: trying to queue dbm request %pK tp ep %s\n",
  786. __func__, request, ep->name);
  787. return -EPERM;
  788. } else {
  789. dep->busy_slot = 0;
  790. dep->free_slot = 0;
  791. }
  792. /*
  793. * Override req->complete function, but before doing that,
  794. * store it's original pointer in the req_complete_list.
  795. */
  796. req_complete = kzalloc(sizeof(*req_complete), GFP_KERNEL);
  797. if (!req_complete) {
  798. dev_err(mdwc->dev, "%s: not enough memory\n", __func__);
  799. return -ENOMEM;
  800. }
  801. req_complete->req = request;
  802. req_complete->orig_complete = request->complete;
  803. list_add_tail(&req_complete->list_item, &mdwc->req_complete_list);
  804. request->complete = dwc3_msm_req_complete_func;
  805. /*
  806. * Configure the DBM endpoint
  807. */
  808. bam_pipe = request->udc_priv & MSM_PIPE_ID_MASK;
  809. producer = ((request->udc_priv & MSM_PRODUCER) ? true : false);
  810. disable_wb = ((request->udc_priv & MSM_DISABLE_WB) ? true : false);
  811. internal_mem = ((request->udc_priv & MSM_INTERNAL_MEM) ? true : false);
  812. ioc = ((request->udc_priv & MSM_ETD_IOC) ? true : false);
  813. ret = dwc3_msm_dbm_ep_config(mdwc, dep->number,
  814. bam_pipe, producer,
  815. disable_wb, internal_mem, ioc);
  816. if (ret < 0) {
  817. dev_err(mdwc->dev,
  818. "error %d after calling dwc3_msm_dbm_ep_config\n",
  819. ret);
  820. return ret;
  821. }
  822. dev_vdbg(dwc->dev, "%s: queing request %pK to ep %s length %d\n",
  823. __func__, request, ep->name, request->length);
  824. /*
  825. * We must obtain the lock of the dwc3 core driver,
  826. * including disabling interrupts, so we will be sure
  827. * that we are the only ones that configure the HW device
  828. * core and ensure that we queuing the request will finish
  829. * as soon as possible so we will release back the lock.
  830. */
  831. spin_lock_irqsave(&dwc->lock, flags);
  832. ret = __dwc3_msm_ep_queue(dep, req);
  833. spin_unlock_irqrestore(&dwc->lock, flags);
  834. if (ret < 0) {
  835. dev_err(mdwc->dev,
  836. "error %d after calling __dwc3_msm_ep_queue\n", ret);
  837. return ret;
  838. }
  839. speed = dwc3_readl(dwc->regs, DWC3_DSTS) & DWC3_DSTS_CONNECTSPD;
  840. dwc3_msm_write_reg(mdwc->base, DBM_GEN_CFG, speed >> 2);
  841. return 0;
  842. }
  843. /**
  844. * Configure MSM endpoint.
  845. * This function do specific configurations
  846. * to an endpoint which need specific implementaion
  847. * in the MSM architecture.
  848. *
  849. * This function should be called by usb function/class
  850. * layer which need a support from the specific MSM HW
  851. * which wrap the USB3 core. (like DBM specific endpoints)
  852. *
  853. * @ep - a pointer to some usb_ep instance
  854. *
  855. * @return int - 0 on success, negetive on error.
  856. */
  857. int msm_ep_config(struct usb_ep *ep)
  858. {
  859. struct dwc3_ep *dep = to_dwc3_ep(ep);
  860. struct dwc3 *dwc = dep->dwc;
  861. struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
  862. struct usb_ep_ops *new_ep_ops;
  863. dwc3_msm_event_buffer_config(mdwc,
  864. dwc3_msm_read_reg(mdwc->base, DWC3_GEVNTADRLO(0)),
  865. dwc3_msm_read_reg(mdwc->base, DWC3_GEVNTSIZ(0)));
  866. /* Save original ep ops for future restore*/
  867. if (mdwc->original_ep_ops[dep->number]) {
  868. dev_err(mdwc->dev,
  869. "ep [%s,%d] already configured as msm endpoint\n",
  870. ep->name, dep->number);
  871. return -EPERM;
  872. }
  873. mdwc->original_ep_ops[dep->number] = ep->ops;
  874. /* Set new usb ops as we like */
  875. new_ep_ops = kzalloc(sizeof(struct usb_ep_ops), GFP_KERNEL);
  876. if (!new_ep_ops) {
  877. dev_err(mdwc->dev,
  878. "%s: unable to allocate mem for new usb ep ops\n",
  879. __func__);
  880. return -ENOMEM;
  881. }
  882. (*new_ep_ops) = (*ep->ops);
  883. new_ep_ops->queue = dwc3_msm_ep_queue;
  884. new_ep_ops->disable = ep->ops->disable;
  885. ep->ops = new_ep_ops;
  886. /*
  887. * Do HERE more usb endpoint configurations
  888. * which are specific to MSM.
  889. */
  890. return 0;
  891. }
  892. EXPORT_SYMBOL(msm_ep_config);
  893. /**
  894. * Un-configure MSM endpoint.
  895. * Tear down configurations done in the
  896. * dwc3_msm_ep_config function.
  897. *
  898. * @ep - a pointer to some usb_ep instance
  899. *
  900. * @return int - 0 on success, negetive on error.
  901. */
  902. int msm_ep_unconfig(struct usb_ep *ep)
  903. {
  904. struct dwc3_ep *dep = to_dwc3_ep(ep);
  905. struct dwc3 *dwc = dep->dwc;
  906. struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
  907. struct usb_ep_ops *old_ep_ops;
  908. /* Restore original ep ops */
  909. if (!mdwc->original_ep_ops[dep->number]) {
  910. dev_err(mdwc->dev,
  911. "ep [%s,%d] was not configured as msm endpoint\n",
  912. ep->name, dep->number);
  913. return -EINVAL;
  914. }
  915. old_ep_ops = (struct usb_ep_ops *)ep->ops;
  916. ep->ops = mdwc->original_ep_ops[dep->number];
  917. mdwc->original_ep_ops[dep->number] = NULL;
  918. kfree(old_ep_ops);
  919. /*
  920. * Do HERE more usb endpoint un-configurations
  921. * which are specific to MSM.
  922. */
  923. return 0;
  924. }
  925. EXPORT_SYMBOL(msm_ep_unconfig);
  926. void dwc3_tx_fifo_resize_request(struct usb_ep *ep, bool qdss_enabled)
  927. {
  928. struct dwc3_ep *dep = to_dwc3_ep(ep);
  929. struct dwc3 *dwc = dep->dwc;
  930. struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
  931. if (qdss_enabled) {
  932. dwc->tx_fifo_reduced = true;
  933. dwc->tx_fifo_size = mdwc->qdss_tx_fifo_size;
  934. } else {
  935. dwc->tx_fifo_reduced = false;
  936. dwc->tx_fifo_size = mdwc->tx_fifo_size;
  937. }
  938. }
  939. EXPORT_SYMBOL(dwc3_tx_fifo_resize_request);
  940. static void dwc3_restart_usb_work(struct work_struct *w)
  941. {
  942. struct dwc3_msm *mdwc = container_of(w, struct dwc3_msm,
  943. restart_usb_work);
  944. dev_dbg(mdwc->dev, "%s\n", __func__);
  945. if (atomic_read(&mdwc->in_lpm) || !mdwc->otg_xceiv) {
  946. dev_err(mdwc->dev, "%s failed!!!\n", __func__);
  947. return;
  948. }
  949. if (!mdwc->ext_xceiv.bsv) {
  950. dev_dbg(mdwc->dev, "%s bailing out in disconnect\n", __func__);
  951. return;
  952. }
  953. /* Reset active USB connection */
  954. mdwc->ext_xceiv.bsv = false;
  955. queue_delayed_work(system_nrt_wq, &mdwc->resume_work, 0);
  956. /* Make sure disconnect is processed before sending connect */
  957. flush_delayed_work(&mdwc->resume_work);
  958. mdwc->ext_xceiv.bsv = true;
  959. queue_delayed_work(system_nrt_wq, &mdwc->resume_work, 0);
  960. }
  961. /**
  962. * Reset USB peripheral connection
  963. * Inform OTG for Vbus LOW followed by Vbus HIGH notification.
  964. * This performs full hardware reset and re-initialization which
  965. * might be required by some DBM client driver during uninit/cleanup.
  966. */
  967. void msm_dwc3_restart_usb_session(struct usb_gadget *gadget)
  968. {
  969. struct dwc3 *dwc = container_of(gadget, struct dwc3, gadget);
  970. struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
  971. if (mdwc)
  972. return;
  973. dev_dbg(mdwc->dev, "%s\n", __func__);
  974. queue_work(system_nrt_wq, &mdwc->restart_usb_work);
  975. }
  976. EXPORT_SYMBOL(msm_dwc3_restart_usb_session);
  977. /**
  978. * msm_register_usb_ext_notification: register for event notification
  979. * @info: pointer to client usb_ext_notification structure. May be NULL.
  980. *
  981. * @return int - 0 on success, negative on error
  982. */
  983. int msm_register_usb_ext_notification(struct usb_ext_notification *info)
  984. {
  985. pr_debug("%s usb_ext: %pK\n", __func__, info);
  986. if (info) {
  987. if (usb_ext) {
  988. pr_err("%s: already registered\n", __func__);
  989. return -EEXIST;
  990. }
  991. if (!info->notify) {
  992. pr_err("%s: notify is NULL\n", __func__);
  993. return -EINVAL;
  994. }
  995. }
  996. usb_ext = info;
  997. return 0;
  998. }
  999. EXPORT_SYMBOL(msm_register_usb_ext_notification);
  1000. /* HSPHY */
  1001. static int dwc3_hsusb_config_vddcx(struct dwc3_msm *dwc, int high)
  1002. {
  1003. int min_vol, max_vol, ret;
  1004. max_vol = dwc->vdd_high_vol_level;
  1005. min_vol = high ? dwc->vdd_low_vol_level : dwc->vdd_no_vol_level;
  1006. ret = regulator_set_voltage(dwc->hsusb_vddcx, min_vol, max_vol);
  1007. if (ret) {
  1008. dev_err(dwc->dev, "unable to set voltage for HSUSB_VDDCX\n");
  1009. return ret;
  1010. }
  1011. dev_dbg(dwc->dev, "%s: min_vol:%d max_vol:%d\n", __func__,
  1012. min_vol, max_vol);
  1013. return ret;
  1014. }
  1015. static int dwc3_hsusb_ldo_init(struct dwc3_msm *dwc, int init)
  1016. {
  1017. int rc = 0;
  1018. if (!init) {
  1019. regulator_set_voltage(dwc->hsusb_1p8, 0, USB_HSPHY_1P8_VOL_MAX);
  1020. regulator_set_voltage(dwc->hsusb_3p3, 0, USB_HSPHY_3P3_VOL_MAX);
  1021. return 0;
  1022. }
  1023. dwc->hsusb_3p3 = devm_regulator_get(dwc->dev, "HSUSB_3p3");
  1024. if (IS_ERR(dwc->hsusb_3p3)) {
  1025. dev_err(dwc->dev, "unable to get hsusb 3p3\n");
  1026. return PTR_ERR(dwc->hsusb_3p3);
  1027. }
  1028. rc = regulator_set_voltage(dwc->hsusb_3p3,
  1029. USB_HSPHY_3P3_VOL_MIN, USB_HSPHY_3P3_VOL_MAX);
  1030. if (rc) {
  1031. dev_err(dwc->dev, "unable to set voltage for hsusb 3p3\n");
  1032. return rc;
  1033. }
  1034. dwc->hsusb_1p8 = devm_regulator_get(dwc->dev, "HSUSB_1p8");
  1035. if (IS_ERR(dwc->hsusb_1p8)) {
  1036. dev_err(dwc->dev, "unable to get hsusb 1p8\n");
  1037. rc = PTR_ERR(dwc->hsusb_1p8);
  1038. goto devote_3p3;
  1039. }
  1040. rc = regulator_set_voltage(dwc->hsusb_1p8,
  1041. USB_HSPHY_1P8_VOL_MIN, USB_HSPHY_1P8_VOL_MAX);
  1042. if (rc) {
  1043. dev_err(dwc->dev, "unable to set voltage for hsusb 1p8\n");
  1044. goto devote_3p3;
  1045. }
  1046. return 0;
  1047. devote_3p3:
  1048. regulator_set_voltage(dwc->hsusb_3p3, 0, USB_HSPHY_3P3_VOL_MAX);
  1049. return rc;
  1050. }
  1051. static int dwc3_hsusb_ldo_enable(struct dwc3_msm *dwc, int on)
  1052. {
  1053. int rc = 0;
  1054. #ifdef CONFIG_USB_DEBUG_DETEAILED_LOG
  1055. dev_info(dwc->dev, "%s reg (%s)\n", __func__, on ? "HPM" : "LPM");
  1056. #else
  1057. dev_dbg(dwc->dev, "reg (%s)\n", on ? "HPM" : "LPM");
  1058. #endif
  1059. if (!on)
  1060. goto disable_regulators;
  1061. rc = regulator_set_optimum_mode(dwc->hsusb_1p8, USB_HSPHY_1P8_HPM_LOAD);
  1062. if (rc < 0) {
  1063. dev_err(dwc->dev, "Unable to set HPM of regulator HSUSB_1p8\n");
  1064. return rc;
  1065. }
  1066. rc = regulator_enable(dwc->hsusb_1p8);
  1067. if (rc) {
  1068. dev_err(dwc->dev, "Unable to enable HSUSB_1p8\n");
  1069. goto put_1p8_lpm;
  1070. }
  1071. rc = regulator_set_optimum_mode(dwc->hsusb_3p3, USB_HSPHY_3P3_HPM_LOAD);
  1072. if (rc < 0) {
  1073. dev_err(dwc->dev, "Unable to set HPM of regulator HSUSB_3p3\n");
  1074. goto disable_1p8;
  1075. }
  1076. rc = regulator_enable(dwc->hsusb_3p3);
  1077. if (rc) {
  1078. dev_err(dwc->dev, "Unable to enable HSUSB_3p3\n");
  1079. goto put_3p3_lpm;
  1080. }
  1081. return 0;
  1082. disable_regulators:
  1083. rc = regulator_disable(dwc->hsusb_3p3);
  1084. if (rc)
  1085. dev_err(dwc->dev, "Unable to disable HSUSB_3p3\n");
  1086. put_3p3_lpm:
  1087. rc = regulator_set_optimum_mode(dwc->hsusb_3p3, 0);
  1088. if (rc < 0)
  1089. dev_err(dwc->dev, "Unable to set LPM of regulator HSUSB_3p3\n");
  1090. disable_1p8:
  1091. rc = regulator_disable(dwc->hsusb_1p8);
  1092. if (rc)
  1093. dev_err(dwc->dev, "Unable to disable HSUSB_1p8\n");
  1094. put_1p8_lpm:
  1095. rc = regulator_set_optimum_mode(dwc->hsusb_1p8, 0);
  1096. if (rc < 0)
  1097. dev_err(dwc->dev, "Unable to set LPM of regulator HSUSB_1p8\n");
  1098. return rc < 0 ? rc : 0;
  1099. }
  1100. /* SSPHY */
  1101. static int dwc3_ssusb_config_vddcx(struct dwc3_msm *dwc, int high)
  1102. {
  1103. int min_vol, max_vol, ret;
  1104. max_vol = dwc->vdd_high_vol_level;
  1105. min_vol = high ? dwc->vdd_low_vol_level : dwc->vdd_no_vol_level;
  1106. ret = regulator_set_voltage(dwc->ssusb_vddcx, min_vol, max_vol);
  1107. if (ret) {
  1108. dev_err(dwc->dev, "unable to set voltage for SSUSB_VDDCX\n");
  1109. return ret;
  1110. }
  1111. dev_dbg(dwc->dev, "%s: min_vol:%d max_vol:%d\n", __func__,
  1112. min_vol, max_vol);
  1113. return ret;
  1114. }
  1115. /* 3.3v supply not needed for SS PHY */
  1116. static int dwc3_ssusb_ldo_init(struct dwc3_msm *dwc, int init)
  1117. {
  1118. int rc = 0;
  1119. if (!init) {
  1120. regulator_set_voltage(dwc->ssusb_1p8, 0, USB_SSPHY_1P8_VOL_MAX);
  1121. return 0;
  1122. }
  1123. dwc->ssusb_1p8 = devm_regulator_get(dwc->dev, "SSUSB_1p8");
  1124. if (IS_ERR(dwc->ssusb_1p8)) {
  1125. dev_err(dwc->dev, "unable to get ssusb 1p8\n");
  1126. return PTR_ERR(dwc->ssusb_1p8);
  1127. }
  1128. rc = regulator_set_voltage(dwc->ssusb_1p8,
  1129. USB_SSPHY_1P8_VOL_MIN, USB_SSPHY_1P8_VOL_MAX);
  1130. if (rc)
  1131. dev_err(dwc->dev, "unable to set voltage for ssusb 1p8\n");
  1132. return rc;
  1133. }
  1134. static int dwc3_ssusb_ldo_enable(struct dwc3_msm *dwc, int on)
  1135. {
  1136. int rc = 0;
  1137. #ifdef CONFIG_USB_DEBUG_DETEAILED_LOG
  1138. dev_info(dwc->dev, "%s reg (%s)\n", __func__, on ? "HPM" : "LPM");
  1139. #else
  1140. dev_dbg(dwc->dev, "reg (%s)\n", on ? "HPM" : "LPM");
  1141. #endif
  1142. if (!on)
  1143. goto disable_regulators;
  1144. rc = regulator_set_optimum_mode(dwc->ssusb_1p8, USB_SSPHY_1P8_HPM_LOAD);
  1145. if (rc < 0) {
  1146. dev_err(dwc->dev, "Unable to set HPM of SSUSB_1p8\n");
  1147. return rc;
  1148. }
  1149. rc = regulator_enable(dwc->ssusb_1p8);
  1150. if (rc) {
  1151. dev_err(dwc->dev, "Unable to enable SSUSB_1p8\n");
  1152. goto put_1p8_lpm;
  1153. }
  1154. return 0;
  1155. disable_regulators:
  1156. rc = regulator_disable(dwc->ssusb_1p8);
  1157. if (rc)
  1158. dev_err(dwc->dev, "Unable to disable SSUSB_1p8\n");
  1159. put_1p8_lpm:
  1160. rc = regulator_set_optimum_mode(dwc->ssusb_1p8, 0);
  1161. if (rc < 0)
  1162. dev_err(dwc->dev, "Unable to set LPM of SSUSB_1p8\n");
  1163. return rc < 0 ? rc : 0;
  1164. }
  1165. /*
  1166. * Config Global Distributed Switch Controller (GDSC)
  1167. * to support controller power collapse
  1168. */
  1169. static int dwc3_msm_config_gdsc(struct dwc3_msm *mdwc, int on)
  1170. {
  1171. int ret = 0;
  1172. if (IS_ERR(mdwc->dwc3_gdsc))
  1173. return 0;
  1174. if (!mdwc->dwc3_gdsc) {
  1175. mdwc->dwc3_gdsc = devm_regulator_get(mdwc->dev,
  1176. "USB3_GDSC");
  1177. if (IS_ERR(mdwc->dwc3_gdsc))
  1178. return 0;
  1179. }
  1180. if (on) {
  1181. ret = regulator_enable(mdwc->dwc3_gdsc);
  1182. if (ret) {
  1183. dev_err(mdwc->dev, "unable to enable usb3 gdsc\n");
  1184. return ret;
  1185. }
  1186. } else {
  1187. regulator_disable(mdwc->dwc3_gdsc);
  1188. }
  1189. return 0;
  1190. }
  1191. static int dwc3_msm_link_clk_reset(struct dwc3_msm *mdwc, bool assert)
  1192. {
  1193. int ret = 0;
  1194. if (assert) {
  1195. /* Using asynchronous block reset to the hardware */
  1196. dev_dbg(mdwc->dev, "block_reset ASSERT\n");
  1197. clk_disable_unprepare(mdwc->ref_clk);
  1198. clk_disable_unprepare(mdwc->iface_clk);
  1199. clk_disable_unprepare(mdwc->core_clk);
  1200. ret = clk_reset(mdwc->core_clk, CLK_RESET_ASSERT);
  1201. if (ret)
  1202. dev_err(mdwc->dev, "dwc3 core_clk assert failed\n");
  1203. } else {
  1204. dev_dbg(mdwc->dev, "block_reset DEASSERT\n");
  1205. ret = clk_reset(mdwc->core_clk, CLK_RESET_DEASSERT);
  1206. ndelay(200);
  1207. clk_prepare_enable(mdwc->core_clk);
  1208. clk_prepare_enable(mdwc->ref_clk);
  1209. clk_prepare_enable(mdwc->iface_clk);
  1210. if (ret)
  1211. dev_err(mdwc->dev, "dwc3 core_clk deassert failed\n");
  1212. }
  1213. return ret;
  1214. }
  1215. /* Reinitialize SSPHY parameters by overriding using QSCRATCH CR interface */
  1216. static void dwc3_msm_ss_phy_reg_init(struct dwc3_msm *mdwc)
  1217. {
  1218. u32 data = 0;
  1219. /*
  1220. * WORKAROUND: There is SSPHY suspend bug due to which USB enumerates
  1221. * in HS mode instead of SS mode. Workaround it by asserting
  1222. * LANE0.TX_ALT_BLOCK.EN_ALT_BUS to enable TX to use alt bus mode
  1223. */
  1224. data = dwc3_msm_ssusb_read_phycreg(mdwc->base, 0x102D);
  1225. data |= (1 << 7);
  1226. dwc3_msm_ssusb_write_phycreg(mdwc->base, 0x102D, data);
  1227. data = dwc3_msm_ssusb_read_phycreg(mdwc->base, 0x1010);
  1228. data &= ~0xFF0;
  1229. data |= 0x20;
  1230. dwc3_msm_ssusb_write_phycreg(mdwc->base, 0x1010, data);
  1231. /*
  1232. * Fix RX Equalization setting as follows
  1233. * LANE0.RX_OVRD_IN_HI. RX_EQ_EN set to 0
  1234. * LANE0.RX_OVRD_IN_HI.RX_EQ_EN_OVRD set to 1
  1235. * LANE0.RX_OVRD_IN_HI.RX_EQ set to 3
  1236. * LANE0.RX_OVRD_IN_HI.RX_EQ_OVRD set to 1
  1237. */
  1238. data = dwc3_msm_ssusb_read_phycreg(mdwc->base, 0x1006);
  1239. data &= ~(1 << 6);
  1240. data |= (1 << 7);
  1241. data &= ~(0x7 << 8);
  1242. #if defined(CONFIG_SEC_MONDRIAN_PROJECT)
  1243. data |= (0x5 << 8);
  1244. #else
  1245. /* HLTE, Vienna customized value */
  1246. data |= (0x4 << 8);
  1247. #endif
  1248. data |= (0x1 << 11);
  1249. dwc3_msm_ssusb_write_phycreg(mdwc->base, 0x1006, data);
  1250. /*
  1251. * Set EQ and TX launch amplitudes as follows
  1252. * LANE0.TX_OVRD_DRV_LO.PREEMPH set to 22
  1253. * LANE0.TX_OVRD_DRV_LO.AMPLITUDE set to 127
  1254. * LANE0.TX_OVRD_DRV_LO.EN set to 1.
  1255. */
  1256. data = dwc3_msm_ssusb_read_phycreg(mdwc->base, 0x1002);
  1257. data &= ~0x3F80;
  1258. if (ss_phy_override_deemphasis)
  1259. mdwc->deemphasis_val = ss_phy_override_deemphasis;
  1260. if (mdwc->deemphasis_val)
  1261. data |= (mdwc->deemphasis_val << 7);
  1262. else
  1263. data |= (0x16 << 7);
  1264. data &= ~0x7F;
  1265. data |= (0x7F | (1 << 14));
  1266. dwc3_msm_ssusb_write_phycreg(mdwc->base, 0x1002, data);
  1267. /*
  1268. * Set the QSCRATCH SS_PHY_PARAM_CTRL1 parameters as follows
  1269. * TX_FULL_SWING [26:20] amplitude to 127
  1270. * TX_DEEMPH_3_5DB [13:8] to 22
  1271. * LOS_BIAS [2:0] to 0x5
  1272. */
  1273. dwc3_msm_write_readback(mdwc->base, SS_PHY_PARAM_CTRL_1,
  1274. 0x07f03f07, 0x07f01605);
  1275. }
  1276. /* Initialize QSCRATCH registers for HSPHY and SSPHY operation */
  1277. static void dwc3_msm_qscratch_reg_init(struct dwc3_msm *mdwc,
  1278. unsigned event_status)
  1279. {
  1280. if (event_status == DWC3_CONTROLLER_POST_RESET_EVENT) {
  1281. dwc3_msm_ss_phy_reg_init(mdwc);
  1282. return;
  1283. }
  1284. /* SSPHY Initialization: Use ref_clk from pads and set its parameters */
  1285. dwc3_msm_write_reg(mdwc->base, SS_PHY_CTRL_REG, 0x10210002);
  1286. msleep(30);
  1287. /* Assert SSPHY reset */
  1288. dwc3_msm_write_reg(mdwc->base, SS_PHY_CTRL_REG, 0x10210082);
  1289. usleep_range(2000, 2200);
  1290. /* De-assert SSPHY reset - power and ref_clock must be ON */
  1291. dwc3_msm_write_reg(mdwc->base, SS_PHY_CTRL_REG, 0x10210002);
  1292. usleep_range(2000, 2200);
  1293. /* Ref clock must be stable now, enable ref clock for HS mode */
  1294. dwc3_msm_write_reg(mdwc->base, SS_PHY_CTRL_REG, 0x11210102);
  1295. usleep_range(2000, 2200);
  1296. /*
  1297. * HSPHY Initialization: Enable UTMI clock and clamp enable HVINTs,
  1298. * and disable RETENTION (power-on default is ENABLED)
  1299. */
  1300. dwc3_msm_write_reg(mdwc->base, HS_PHY_CTRL_REG, 0x5220bb2);
  1301. usleep_range(2000, 2200);
  1302. /* Set XHCI_REV bit (2) to 1 - XHCI version 1.0 */
  1303. dwc3_msm_write_reg(mdwc->base, QSCRATCH_GENERAL_CFG, 0x4);
  1304. /*
  1305. * write HSPHY init value to QSCRATCH reg to set HSPHY parameters like
  1306. * VBUS valid threshold, disconnect valid threshold, DC voltage level,
  1307. * preempasis and rise/fall time.
  1308. */
  1309. if (override_phy_init)
  1310. mdwc->hsphy_init_seq = override_phy_init;
  1311. if (mdwc->hsphy_init_seq)
  1312. dwc3_msm_write_readback(mdwc->base,
  1313. PARAMETER_OVERRIDE_X_REG, 0x03FFFFFF,
  1314. mdwc->hsphy_init_seq & 0x03FFFFFF);
  1315. /*
  1316. * Enable master clock for RAMs to allow BAM to access RAMs when
  1317. * RAM clock gating is enabled via DWC3's GCTL. Otherwise issues
  1318. * are seen where RAM clocks get turned OFF in SS mode
  1319. */
  1320. dwc3_msm_write_reg(mdwc->base, CGCTL_REG,
  1321. dwc3_msm_read_reg(mdwc->base, CGCTL_REG) | 0x18);
  1322. /*
  1323. * This is required to restore the POR value after userspace
  1324. * is done with charger detection.
  1325. */
  1326. mdwc->qscratch_ctl_val =
  1327. dwc3_msm_read_reg(mdwc->base, QSCRATCH_CTRL_REG);
  1328. }
  1329. static void dwc3_msm_notify_event(struct dwc3 *dwc, unsigned event)
  1330. {
  1331. struct dwc3_msm *mdwc = dev_get_drvdata(dwc->dev->parent);
  1332. if (dwc->revision < DWC3_REVISION_230A)
  1333. return;
  1334. switch (event) {
  1335. case DWC3_CONTROLLER_ERROR_EVENT:
  1336. dev_info(mdwc->dev, "DWC3_CONTROLLER_ERROR_EVENT received\n");
  1337. dwc3_msm_dump_phy_info(mdwc);
  1338. dwc3_msm_write_reg(mdwc->base, DWC3_DEVTEN, 0);
  1339. /*
  1340. * schedule work for doing block reset for recovery from erratic
  1341. * error event.
  1342. */
  1343. queue_work(system_nrt_wq, &mdwc->usb_block_reset_work);
  1344. break;
  1345. case DWC3_CONTROLLER_RESET_EVENT:
  1346. dev_dbg(mdwc->dev, "DWC3_CONTROLLER_RESET_EVENT received\n");
  1347. dwc3_msm_qscratch_reg_init(mdwc, DWC3_CONTROLLER_RESET_EVENT);
  1348. break;
  1349. case DWC3_CONTROLLER_POST_RESET_EVENT:
  1350. dev_dbg(mdwc->dev,
  1351. "DWC3_CONTROLLER_POST_RESET_EVENT received\n");
  1352. dwc3_msm_qscratch_reg_init(mdwc,
  1353. DWC3_CONTROLLER_POST_RESET_EVENT);
  1354. dwc->tx_fifo_size = mdwc->tx_fifo_size;
  1355. break;
  1356. case DWC3_CONTROLLER_POST_INITIALIZATION_EVENT:
  1357. /* clear LANE0_PWR_PRESENT bit after initialization is done */
  1358. dwc3_msm_write_readback(mdwc->base, SS_PHY_CTRL_REG, (1 << 24),
  1359. 0x0);
  1360. default:
  1361. dev_dbg(mdwc->dev, "unknown dwc3 event\n");
  1362. break;
  1363. }
  1364. }
  1365. static void dwc3_msm_block_reset(struct dwc3_ext_xceiv *xceiv, bool core_reset)
  1366. {
  1367. struct dwc3_msm *mdwc = container_of(xceiv, struct dwc3_msm, ext_xceiv);
  1368. int ret = 0;
  1369. if (core_reset) {
  1370. ret = dwc3_msm_link_clk_reset(mdwc, 1);
  1371. if (ret)
  1372. return;
  1373. usleep_range(1000, 1200);
  1374. ret = dwc3_msm_link_clk_reset(mdwc, 0);
  1375. if (ret)
  1376. return;
  1377. usleep_range(10000, 12000);
  1378. }
  1379. /* Reset the DBM */
  1380. dwc3_msm_dbm_soft_reset(mdwc, 1);
  1381. usleep_range(1000, 1200);
  1382. dwc3_msm_dbm_soft_reset(mdwc, 0);
  1383. }
  1384. static void dwc3_block_reset_usb_work(struct work_struct *w)
  1385. {
  1386. struct dwc3_msm *mdwc = container_of(w, struct dwc3_msm,
  1387. usb_block_reset_work);
  1388. u32 reg;
  1389. dev_dbg(mdwc->dev, "%s\n", __func__);
  1390. dwc3_msm_block_reset(&mdwc->ext_xceiv, true);
  1391. reg = (DWC3_DEVTEN_EVNTOVERFLOWEN |
  1392. DWC3_DEVTEN_CMDCMPLTEN |
  1393. DWC3_DEVTEN_ERRTICERREN |
  1394. DWC3_DEVTEN_WKUPEVTEN |
  1395. DWC3_DEVTEN_ULSTCNGEN |
  1396. DWC3_DEVTEN_CONNECTDONEEN |
  1397. DWC3_DEVTEN_USBRSTEN |
  1398. DWC3_DEVTEN_DISCONNEVTEN);
  1399. dwc3_msm_write_reg(mdwc->base, DWC3_DEVTEN, reg);
  1400. }
  1401. static void dwc3_chg_enable_secondary_det(struct dwc3_msm *mdwc)
  1402. {
  1403. u32 chg_ctrl;
  1404. /* Turn off VDP_SRC */
  1405. dwc3_msm_write_reg(mdwc->base, CHARGING_DET_CTRL_REG, 0x0);
  1406. msleep(20);
  1407. /* Before proceeding make sure VDP_SRC is OFF */
  1408. chg_ctrl = dwc3_msm_read_reg(mdwc->base, CHARGING_DET_CTRL_REG);
  1409. if (chg_ctrl & 0x3F)
  1410. dev_err(mdwc->dev, "%s Unable to reset chg_det block: %x\n",
  1411. __func__, chg_ctrl);
  1412. /*
  1413. * Configure DM as current source, DP as current sink
  1414. * and enable battery charging comparators.
  1415. */
  1416. dwc3_msm_write_readback(mdwc->base, CHARGING_DET_CTRL_REG, 0x3F, 0x34);
  1417. }
  1418. static bool dwc3_chg_det_check_linestate(struct dwc3_msm *mdwc)
  1419. {
  1420. u32 chg_det;
  1421. if (!prop_chg_detect)
  1422. return false;
  1423. chg_det = dwc3_msm_read_reg(mdwc->base, CHARGING_DET_OUTPUT_REG);
  1424. return chg_det & (3 << 8);
  1425. }
  1426. static bool dwc3_chg_det_check_output(struct dwc3_msm *mdwc)
  1427. {
  1428. u32 chg_det;
  1429. bool ret = false;
  1430. chg_det = dwc3_msm_read_reg(mdwc->base, CHARGING_DET_OUTPUT_REG);
  1431. ret = chg_det & 1;
  1432. return ret;
  1433. }
  1434. static void dwc3_chg_enable_primary_det(struct dwc3_msm *mdwc)
  1435. {
  1436. /*
  1437. * Configure DP as current source, DM as current sink
  1438. * and enable battery charging comparators.
  1439. */
  1440. dwc3_msm_write_readback(mdwc->base, CHARGING_DET_CTRL_REG, 0x3F, 0x30);
  1441. }
  1442. static inline bool dwc3_chg_check_dcd(struct dwc3_msm *mdwc)
  1443. {
  1444. u32 chg_state;
  1445. bool ret = false;
  1446. chg_state = dwc3_msm_read_reg(mdwc->base, CHARGING_DET_OUTPUT_REG);
  1447. ret = chg_state & 2;
  1448. return ret;
  1449. }
  1450. static inline void dwc3_chg_disable_dcd(struct dwc3_msm *mdwc)
  1451. {
  1452. dwc3_msm_write_readback(mdwc->base, CHARGING_DET_CTRL_REG, 0x3F, 0x0);
  1453. }
  1454. static inline void dwc3_chg_enable_dcd(struct dwc3_msm *mdwc)
  1455. {
  1456. /* Data contact detection enable, DCDENB */
  1457. dwc3_msm_write_readback(mdwc->base, CHARGING_DET_CTRL_REG, 0x3F, 0x2);
  1458. }
  1459. static void dwc3_chg_block_reset(struct dwc3_msm *mdwc)
  1460. {
  1461. u32 chg_ctrl;
  1462. dwc3_msm_write_reg(mdwc->base, QSCRATCH_CTRL_REG,
  1463. mdwc->qscratch_ctl_val);
  1464. /* Clear charger detecting control bits */
  1465. dwc3_msm_write_reg(mdwc->base, CHARGING_DET_CTRL_REG, 0x0);
  1466. /* Clear alt interrupt latch and enable bits */
  1467. dwc3_msm_write_reg(mdwc->base, HS_PHY_IRQ_STAT_REG, 0xFFF);
  1468. dwc3_msm_write_reg(mdwc->base, ALT_INTERRUPT_EN_REG, 0x0);
  1469. udelay(100);
  1470. /* Before proceeding make sure charger block is RESET */
  1471. chg_ctrl = dwc3_msm_read_reg(mdwc->base, CHARGING_DET_CTRL_REG);
  1472. if (chg_ctrl & 0x3F)
  1473. dev_err(mdwc->dev, "%s Unable to reset chg_det block: %x\n",
  1474. __func__, chg_ctrl);
  1475. }
  1476. static const char *chg_to_string(enum dwc3_chg_type chg_type)
  1477. {
  1478. switch (chg_type) {
  1479. case DWC3_SDP_CHARGER: return "USB_SDP_CHARGER";
  1480. case DWC3_DCP_CHARGER: return "USB_DCP_CHARGER";
  1481. case DWC3_CDP_CHARGER: return "USB_CDP_CHARGER";
  1482. case DWC3_PROPRIETARY_CHARGER: return "USB_PROPRIETARY_CHARGER";
  1483. case DWC3_FLOATED_CHARGER: return "USB_FLOATED_CHARGER";
  1484. default: return "UNKNOWN_CHARGER";
  1485. }
  1486. }
  1487. #define DWC3_CHG_DCD_POLL_TIME (100 * HZ/1000) /* 100 msec */
  1488. #define DWC3_CHG_DCD_MAX_RETRIES 6 /* Tdcd_tmout = 6 * 100 msec */
  1489. #define DWC3_CHG_PRIMARY_DET_TIME (50 * HZ/1000) /* TVDPSRC_ON */
  1490. #define DWC3_CHG_SECONDARY_DET_TIME (50 * HZ/1000) /* TVDMSRC_ON */
  1491. static void dwc3_chg_detect_work(struct work_struct *w)
  1492. {
  1493. struct dwc3_msm *mdwc = container_of(w, struct dwc3_msm, chg_work.work);
  1494. bool is_dcd = false, tmout, vout;
  1495. static bool dcd;
  1496. unsigned long delay;
  1497. dev_dbg(mdwc->dev, "chg detection work\n");
  1498. switch (mdwc->chg_state) {
  1499. case USB_CHG_STATE_UNDEFINED:
  1500. dwc3_chg_block_reset(mdwc);
  1501. dwc3_chg_enable_dcd(mdwc);
  1502. mdwc->chg_state = USB_CHG_STATE_WAIT_FOR_DCD;
  1503. mdwc->dcd_retries = 0;
  1504. delay = DWC3_CHG_DCD_POLL_TIME;
  1505. break;
  1506. case USB_CHG_STATE_WAIT_FOR_DCD:
  1507. is_dcd = dwc3_chg_check_dcd(mdwc);
  1508. tmout = ++mdwc->dcd_retries == DWC3_CHG_DCD_MAX_RETRIES;
  1509. if (is_dcd || tmout) {
  1510. if (is_dcd)
  1511. dcd = true;
  1512. else
  1513. dcd = false;
  1514. dwc3_chg_disable_dcd(mdwc);
  1515. usleep_range(1000, 1200);
  1516. if (dwc3_chg_det_check_linestate(mdwc)) {
  1517. mdwc->charger.chg_type =
  1518. DWC3_PROPRIETARY_CHARGER;
  1519. mdwc->chg_state = USB_CHG_STATE_DETECTED;
  1520. delay = 0;
  1521. break;
  1522. }
  1523. dwc3_chg_enable_primary_det(mdwc);
  1524. delay = DWC3_CHG_PRIMARY_DET_TIME;
  1525. mdwc->chg_state = USB_CHG_STATE_DCD_DONE;
  1526. } else {
  1527. delay = DWC3_CHG_DCD_POLL_TIME;
  1528. }
  1529. break;
  1530. case USB_CHG_STATE_DCD_DONE:
  1531. vout = dwc3_chg_det_check_output(mdwc);
  1532. if (vout) {
  1533. dwc3_chg_enable_secondary_det(mdwc);
  1534. delay = DWC3_CHG_SECONDARY_DET_TIME;
  1535. mdwc->chg_state = USB_CHG_STATE_PRIMARY_DONE;
  1536. } else {
  1537. /*
  1538. * Detect floating charger only if propreitary
  1539. * charger detection is enabled.
  1540. */
  1541. if (!dcd && prop_chg_detect)
  1542. mdwc->charger.chg_type =
  1543. DWC3_FLOATED_CHARGER;
  1544. else
  1545. mdwc->charger.chg_type = DWC3_SDP_CHARGER;
  1546. mdwc->chg_state = USB_CHG_STATE_DETECTED;
  1547. delay = 0;
  1548. }
  1549. break;
  1550. case USB_CHG_STATE_PRIMARY_DONE:
  1551. vout = dwc3_chg_det_check_output(mdwc);
  1552. if (vout)
  1553. mdwc->charger.chg_type = DWC3_DCP_CHARGER;
  1554. else
  1555. mdwc->charger.chg_type = DWC3_CDP_CHARGER;
  1556. mdwc->chg_state = USB_CHG_STATE_SECONDARY_DONE;
  1557. /* fall through */
  1558. case USB_CHG_STATE_SECONDARY_DONE:
  1559. mdwc->chg_state = USB_CHG_STATE_DETECTED;
  1560. /* fall through */
  1561. case USB_CHG_STATE_DETECTED:
  1562. dwc3_chg_block_reset(mdwc);
  1563. /* Enable VDP_SRC */
  1564. if (mdwc->charger.chg_type == DWC3_DCP_CHARGER) {
  1565. dwc3_msm_write_readback(mdwc->base,
  1566. CHARGING_DET_CTRL_REG, 0x1F, 0x10);
  1567. if (mdwc->ext_chg_opened) {
  1568. init_completion(&mdwc->ext_chg_wait);
  1569. mdwc->ext_chg_active = true;
  1570. }
  1571. }
  1572. dev_dbg(mdwc->dev, "chg_type = %s\n",
  1573. chg_to_string(mdwc->charger.chg_type));
  1574. mdwc->charger.notify_detection_complete(mdwc->otg_xceiv->otg,
  1575. &mdwc->charger);
  1576. return;
  1577. default:
  1578. return;
  1579. }
  1580. queue_delayed_work(system_nrt_wq, &mdwc->chg_work, delay);
  1581. }
  1582. static void dwc3_start_chg_det(struct dwc3_charger *charger, bool start)
  1583. {
  1584. struct dwc3_msm *mdwc = container_of(charger, struct dwc3_msm, charger);
  1585. if (start == false) {
  1586. dev_dbg(mdwc->dev, "canceling charging detection work\n");
  1587. cancel_delayed_work_sync(&mdwc->chg_work);
  1588. mdwc->chg_state = USB_CHG_STATE_UNDEFINED;
  1589. charger->chg_type = DWC3_INVALID_CHARGER;
  1590. return;
  1591. }
  1592. /* Skip if charger type was already detected externally */
  1593. if (mdwc->chg_state == USB_CHG_STATE_DETECTED &&
  1594. charger->chg_type != DWC3_INVALID_CHARGER)
  1595. return;
  1596. mdwc->chg_state = USB_CHG_STATE_UNDEFINED;
  1597. charger->chg_type = DWC3_INVALID_CHARGER;
  1598. queue_delayed_work(system_nrt_wq, &mdwc->chg_work, 0);
  1599. }
  1600. static int dwc3_msm_suspend(struct dwc3_msm *mdwc)
  1601. {
  1602. int ret;
  1603. bool dcp;
  1604. bool host_bus_suspend;
  1605. bool host_ss_active;
  1606. bool host_ss_suspend;
  1607. bool device_bus_suspend;
  1608. #ifdef CONFIG_USB_DEBUG_DETEAILED_LOG
  1609. dev_info(mdwc->dev, "%s: entering lpm\n", __func__);
  1610. #else
  1611. dev_dbg(mdwc->dev, "%s: entering lpm\n", __func__);
  1612. #endif
  1613. if (atomic_read(&mdwc->in_lpm)) {
  1614. dev_info(mdwc->dev, "%s: Already suspended\n", __func__);
  1615. return 0;
  1616. }
  1617. host_ss_active = dwc3_msm_read_reg(mdwc->base, USB3_PORTSC) & PORT_PE;
  1618. if (mdwc->hs_phy_irq)
  1619. disable_irq(mdwc->hs_phy_irq);
  1620. if (cancel_delayed_work_sync(&mdwc->chg_work))
  1621. dev_dbg(mdwc->dev, "%s: chg_work was pending\n", __func__);
  1622. if (mdwc->chg_state != USB_CHG_STATE_DETECTED) {
  1623. /* charger detection wasn't complete; re-init flags */
  1624. mdwc->chg_state = USB_CHG_STATE_UNDEFINED;
  1625. mdwc->charger.chg_type = DWC3_INVALID_CHARGER;
  1626. dwc3_msm_write_readback(mdwc->base, CHARGING_DET_CTRL_REG,
  1627. 0x37, 0x0);
  1628. }
  1629. dcp = ((mdwc->charger.chg_type == DWC3_DCP_CHARGER) ||
  1630. (mdwc->charger.chg_type == DWC3_PROPRIETARY_CHARGER) ||
  1631. (mdwc->charger.chg_type == DWC3_FLOATED_CHARGER));
  1632. host_bus_suspend = mdwc->host_mode == 1;
  1633. host_ss_suspend = host_bus_suspend && host_ss_active;
  1634. device_bus_suspend = ((mdwc->charger.chg_type == DWC3_SDP_CHARGER) ||
  1635. (mdwc->charger.chg_type == DWC3_CDP_CHARGER));
  1636. if (!dcp && !host_bus_suspend)
  1637. dwc3_msm_write_reg(mdwc->base, QSCRATCH_CTRL_REG,
  1638. mdwc->qscratch_ctl_val);
  1639. /* Sequence to put SSPHY in low power state:
  1640. * 1. Clear REF_SS_PHY_EN in SS_PHY_CTRL_REG
  1641. * 2. Clear REF_USE_PAD in SS_PHY_CTRL_REG
  1642. * 3. Set TEST_POWERED_DOWN in SS_PHY_CTRL_REG to enable PHY retention
  1643. * 4. Disable SSPHY ref clk
  1644. */
  1645. if (!host_ss_suspend) {
  1646. dwc3_msm_write_readback(mdwc->base, SS_PHY_CTRL_REG, (1 << 8),
  1647. 0x0);
  1648. dwc3_msm_write_readback(mdwc->base, SS_PHY_CTRL_REG, (1 << 28),
  1649. 0x0);
  1650. dwc3_msm_write_readback(mdwc->base, SS_PHY_CTRL_REG, (1 << 26),
  1651. (1 << 26));
  1652. }
  1653. usleep_range(1000, 1200);
  1654. if (!host_ss_suspend)
  1655. clk_disable_unprepare(mdwc->ref_clk);
  1656. if (host_bus_suspend) {
  1657. #ifdef CONFIG_USB_DEBUG_DETEAILED_LOG
  1658. dev_info(mdwc->dev, "%s: host_bus_suspend\n", __func__);
  1659. #endif
  1660. /* Sequence for host bus suspend case:
  1661. * 1. Set suspend and sleep bits in GUSB2PHYCONFIG reg
  1662. * 2. Clear interrupt latch register and enable BSV, ID HV intr
  1663. * 3. Enable DP and DM HV interrupts in ALT_INTERRUPT_EN_REG
  1664. */
  1665. dwc3_msm_write_reg(mdwc->base, DWC3_GUSB2PHYCFG(0),
  1666. dwc3_msm_read_reg(mdwc->base, DWC3_GUSB2PHYCFG(0)) |
  1667. 0x00000140);
  1668. dwc3_msm_write_reg(mdwc->base, HS_PHY_IRQ_STAT_REG, 0xFFF);
  1669. if (mdwc->otg_xceiv && (!mdwc->ext_xceiv.otg_capability))
  1670. dwc3_msm_write_readback(mdwc->base, HS_PHY_CTRL_REG,
  1671. 0x18000, 0x18000);
  1672. dwc3_msm_write_reg(mdwc->base, ALT_INTERRUPT_EN_REG, 0xFC0);
  1673. udelay(5);
  1674. } else {
  1675. #ifdef CONFIG_USB_DEBUG_DETEAILED_LOG
  1676. dev_info(mdwc->dev, "%s: low power state\n", __func__);
  1677. #endif
  1678. /* Sequence to put hardware in low power state:
  1679. * 1. Set OTGDISABLE to disable OTG block in HSPHY (saves power)
  1680. * 2. Clear charger detection control fields (performed above)
  1681. * 3. SUSPEND PHY and turn OFF core clock after some delay
  1682. * 4. Clear interrupt latch register and enable BSV, ID HV intr
  1683. * 5. Enable PHY retention
  1684. */
  1685. dwc3_msm_write_readback(mdwc->base, HS_PHY_CTRL_REG, 0x1000,
  1686. 0x1000);
  1687. dwc3_msm_write_readback(mdwc->base, HS_PHY_CTRL_REG,
  1688. 0xC00000, 0x800000);
  1689. dwc3_msm_write_reg(mdwc->base, HS_PHY_IRQ_STAT_REG, 0xFFF);
  1690. if (mdwc->otg_xceiv && (!mdwc->ext_xceiv.otg_capability))
  1691. dwc3_msm_write_readback(mdwc->base, HS_PHY_CTRL_REG,
  1692. 0x18000, 0x18000);
  1693. if (!dcp)
  1694. dwc3_msm_write_readback(mdwc->base, HS_PHY_CTRL_REG,
  1695. 0x2, 0x0);
  1696. }
  1697. /* make sure above writes are completed before turning off clocks */
  1698. wmb();
  1699. /* remove vote for controller power collapse */
  1700. if (!host_bus_suspend)
  1701. dwc3_msm_config_gdsc(mdwc, 0);
  1702. if (!host_ss_suspend) {
  1703. clk_disable_unprepare(mdwc->core_clk);
  1704. mdwc->lpm_flags |= MDWC3_PHY_REF_AND_CORECLK_OFF;
  1705. }
  1706. clk_disable_unprepare(mdwc->iface_clk);
  1707. if (!host_bus_suspend)
  1708. clk_disable_unprepare(mdwc->utmi_clk);
  1709. if (!host_bus_suspend) {
  1710. /* USB PHY no more requires TCXO */
  1711. clk_disable_unprepare(mdwc->xo_clk);
  1712. mdwc->lpm_flags |= MDWC3_TCXO_SHUTDOWN;
  1713. }
  1714. if (mdwc->bus_perf_client) {
  1715. ret = msm_bus_scale_client_update_request(
  1716. mdwc->bus_perf_client, 0);
  1717. if (ret)
  1718. dev_err(mdwc->dev, "Failed to reset bus bw vote\n");
  1719. }
  1720. if (mdwc->otg_xceiv && mdwc->ext_xceiv.otg_capability && !dcp &&
  1721. !host_bus_suspend)
  1722. dwc3_hsusb_ldo_enable(mdwc, 0);
  1723. dwc3_ssusb_ldo_enable(mdwc, 0);
  1724. dwc3_ssusb_config_vddcx(mdwc, 0);
  1725. if (!host_bus_suspend && !dcp)
  1726. dwc3_hsusb_config_vddcx(mdwc, 0);
  1727. pm_relax(mdwc->dev);
  1728. atomic_set(&mdwc->in_lpm, 1);
  1729. dev_info(mdwc->dev, "DWC3 in low power mode\n");
  1730. if (mdwc->hs_phy_irq) {
  1731. /*
  1732. * with DCP or during cable disconnect, we dont require wakeup
  1733. * using HS_PHY_IRQ. Hence enable wakeup only in case of host
  1734. * bus suspend and device bus suspend.
  1735. */
  1736. if (host_bus_suspend || device_bus_suspend) {
  1737. enable_irq_wake(mdwc->hs_phy_irq);
  1738. mdwc->lpm_flags |= MDWC3_ASYNC_IRQ_WAKE_CAPABILITY;
  1739. }
  1740. enable_irq(mdwc->hs_phy_irq);
  1741. }
  1742. return 0;
  1743. }
  1744. static int dwc3_msm_resume(struct dwc3_msm *mdwc)
  1745. {
  1746. int ret;
  1747. bool dcp;
  1748. bool host_bus_suspend;
  1749. bool resume_from_core_clk_off = false;
  1750. #ifdef CONFIG_USB_DEBUG_DETEAILED_LOG
  1751. dev_info(mdwc->dev, "%s: exiting lpm\n", __func__);
  1752. #else
  1753. dev_dbg(mdwc->dev, "%s: exiting lpm\n", __func__);
  1754. #endif
  1755. if (!atomic_read(&mdwc->in_lpm)) {
  1756. dev_info(mdwc->dev, "%s: Already resumed\n", __func__);
  1757. return 0;
  1758. }
  1759. pm_stay_awake(mdwc->dev);
  1760. if (mdwc->lpm_flags & MDWC3_PHY_REF_AND_CORECLK_OFF)
  1761. resume_from_core_clk_off = true;
  1762. if (mdwc->bus_perf_client) {
  1763. ret = msm_bus_scale_client_update_request(
  1764. mdwc->bus_perf_client, 1);
  1765. if (ret)
  1766. dev_err(mdwc->dev, "Failed to vote for bus scaling\n");
  1767. }
  1768. dcp = ((mdwc->charger.chg_type == DWC3_DCP_CHARGER) ||
  1769. (mdwc->charger.chg_type == DWC3_PROPRIETARY_CHARGER) ||
  1770. (mdwc->charger.chg_type == DWC3_FLOATED_CHARGER));
  1771. host_bus_suspend = mdwc->host_mode == 1;
  1772. if (mdwc->lpm_flags & MDWC3_TCXO_SHUTDOWN) {
  1773. /* Vote for TCXO while waking up USB HSPHY */
  1774. ret = clk_prepare_enable(mdwc->xo_clk);
  1775. if (ret)
  1776. dev_err(mdwc->dev, "%s failed to vote TCXO buffer%d\n",
  1777. __func__, ret);
  1778. mdwc->lpm_flags &= ~MDWC3_TCXO_SHUTDOWN;
  1779. }
  1780. /* add vote for controller power collapse */
  1781. if (!host_bus_suspend)
  1782. dwc3_msm_config_gdsc(mdwc, 1);
  1783. if (!host_bus_suspend)
  1784. clk_prepare_enable(mdwc->utmi_clk);
  1785. if (mdwc->otg_xceiv && mdwc->ext_xceiv.otg_capability && !dcp &&
  1786. !host_bus_suspend)
  1787. dwc3_hsusb_ldo_enable(mdwc, 1);
  1788. dwc3_ssusb_ldo_enable(mdwc, 1);
  1789. dwc3_ssusb_config_vddcx(mdwc, 1);
  1790. if (!host_bus_suspend && !dcp)
  1791. dwc3_hsusb_config_vddcx(mdwc, 1);
  1792. if (mdwc->lpm_flags & MDWC3_PHY_REF_AND_CORECLK_OFF)
  1793. clk_prepare_enable(mdwc->ref_clk);
  1794. usleep_range(1000, 1200);
  1795. clk_prepare_enable(mdwc->iface_clk);
  1796. if (mdwc->lpm_flags & MDWC3_PHY_REF_AND_CORECLK_OFF) {
  1797. clk_prepare_enable(mdwc->core_clk);
  1798. mdwc->lpm_flags &= ~MDWC3_PHY_REF_AND_CORECLK_OFF;
  1799. }
  1800. if (host_bus_suspend) {
  1801. #ifdef CONFIG_USB_DEBUG_DETEAILED_LOG
  1802. dev_info(mdwc->dev, "%s: host_bus_suspend\n", __func__);
  1803. #endif
  1804. /* Disable HV interrupt */
  1805. if (mdwc->otg_xceiv && (!mdwc->ext_xceiv.otg_capability))
  1806. dwc3_msm_write_readback(mdwc->base, HS_PHY_CTRL_REG,
  1807. 0x18000, 0x0);
  1808. /* Clear interrupt latch register */
  1809. dwc3_msm_write_reg(mdwc->base, HS_PHY_IRQ_STAT_REG, 0x000);
  1810. /* Disable DP and DM HV interrupt */
  1811. dwc3_msm_write_reg(mdwc->base, ALT_INTERRUPT_EN_REG, 0x000);
  1812. } else {
  1813. #ifdef CONFIG_USB_DEBUG_DETEAILED_LOG
  1814. dev_info(mdwc->dev, "%s: low power state\n", __func__);
  1815. #endif
  1816. /* Disable HV interrupt */
  1817. if (mdwc->otg_xceiv && (!mdwc->ext_xceiv.otg_capability))
  1818. dwc3_msm_write_readback(mdwc->base, HS_PHY_CTRL_REG,
  1819. 0x18000, 0x0);
  1820. /* Disable Retention */
  1821. dwc3_msm_write_readback(mdwc->base, HS_PHY_CTRL_REG, 0x2, 0x2);
  1822. dwc3_msm_write_reg(mdwc->base, DWC3_GUSB2PHYCFG(0),
  1823. dwc3_msm_read_reg(mdwc->base, DWC3_GUSB2PHYCFG(0)) |
  1824. 0xF0000000);
  1825. /* 10usec delay required before de-asserting PHY RESET */
  1826. udelay(10);
  1827. dwc3_msm_write_reg(mdwc->base, DWC3_GUSB2PHYCFG(0),
  1828. dwc3_msm_read_reg(mdwc->base, DWC3_GUSB2PHYCFG(0)) &
  1829. 0x7FFFFFFF);
  1830. /* Bring PHY out of suspend */
  1831. dwc3_msm_write_readback(mdwc->base, HS_PHY_CTRL_REG, 0xC00000,
  1832. 0x0);
  1833. }
  1834. if (resume_from_core_clk_off) {
  1835. /* Assert SS PHY RESET */
  1836. dwc3_msm_write_readback(mdwc->base, SS_PHY_CTRL_REG, (1 << 7),
  1837. (1 << 7));
  1838. dwc3_msm_write_readback(mdwc->base, SS_PHY_CTRL_REG, (1 << 28),
  1839. (1 << 28));
  1840. dwc3_msm_write_readback(mdwc->base, SS_PHY_CTRL_REG, (1 << 8),
  1841. (1 << 8));
  1842. dwc3_msm_write_readback(mdwc->base, SS_PHY_CTRL_REG, (1 << 26),
  1843. 0x0);
  1844. /* 10usec delay required before de-asserting SS PHY RESET */
  1845. udelay(10);
  1846. dwc3_msm_write_readback(mdwc->base, SS_PHY_CTRL_REG, (1 << 7),
  1847. 0x0);
  1848. /*
  1849. * Reinitilize SSPHY parameters as SS_PHY RESET will reset
  1850. * the internal registers to default values.
  1851. */
  1852. dwc3_msm_ss_phy_reg_init(mdwc);
  1853. }
  1854. atomic_set(&mdwc->in_lpm, 0);
  1855. /* match disable_irq call from isr */
  1856. if (mdwc->lpm_irq_seen && mdwc->hs_phy_irq) {
  1857. enable_irq(mdwc->hs_phy_irq);
  1858. mdwc->lpm_irq_seen = false;
  1859. }
  1860. /* Disable wakeup capable for HS_PHY IRQ, if enabled */
  1861. if (mdwc->hs_phy_irq &&
  1862. (mdwc->lpm_flags & MDWC3_ASYNC_IRQ_WAKE_CAPABILITY)) {
  1863. disable_irq_wake(mdwc->hs_phy_irq);
  1864. mdwc->lpm_flags &= ~MDWC3_ASYNC_IRQ_WAKE_CAPABILITY;
  1865. }
  1866. dev_info(mdwc->dev, "DWC3 exited from low power mode\n");
  1867. return 0;
  1868. }
  1869. static void dwc3_wait_for_ext_chg_done(struct dwc3_msm *mdwc)
  1870. {
  1871. unsigned long t;
  1872. /*
  1873. * Defer next cable connect event till external charger
  1874. * detection is completed.
  1875. */
  1876. if (mdwc->ext_chg_active && (mdwc->ext_xceiv.bsv ||
  1877. !mdwc->ext_xceiv.id)) {
  1878. dev_dbg(mdwc->dev, "before ext chg wait\n");
  1879. t = wait_for_completion_timeout(&mdwc->ext_chg_wait,
  1880. msecs_to_jiffies(3000));
  1881. if (!t)
  1882. dev_err(mdwc->dev, "ext chg wait timeout\n");
  1883. else
  1884. dev_dbg(mdwc->dev, "ext chg wait done\n");
  1885. }
  1886. }
  1887. static void dwc3_resume_work(struct work_struct *w)
  1888. {
  1889. struct dwc3_msm *mdwc = container_of(w, struct dwc3_msm,
  1890. resume_work.work);
  1891. #ifdef CONFIG_USB_DEBUG_DETEAILED_LOG
  1892. dev_info(mdwc->dev, "%s: dwc3 resume work\n", __func__);
  1893. #else
  1894. dev_info(mdwc->dev, "%s\n", __func__);
  1895. #endif
  1896. /* handle any event that was queued while work was already running */
  1897. if (!atomic_read(&mdwc->in_lpm)) {
  1898. #ifdef CONFIG_USB_DEBUG_DETEAILED_LOG
  1899. dev_info(mdwc->dev, "%s: notifying xceiv event\n", __func__);
  1900. #else
  1901. dev_dbg(mdwc->dev, "%s: notifying xceiv event\n", __func__);
  1902. #endif
  1903. dev_info(mdwc->dev, "%s: already running\n", __func__);
  1904. if (mdwc->otg_xceiv) {
  1905. dwc3_wait_for_ext_chg_done(mdwc);
  1906. mdwc->ext_xceiv.notify_ext_events(mdwc->otg_xceiv->otg,
  1907. DWC3_EVENT_XCEIV_STATE);
  1908. }
  1909. return;
  1910. }
  1911. /* bail out if system resume in process, else initiate RESUME */
  1912. if (atomic_read(&mdwc->pm_suspended)) {
  1913. dev_info(mdwc->dev, "%s: mdwc->resume_pending true\n", __func__);
  1914. mdwc->resume_pending = true;
  1915. } else {
  1916. dev_info(mdwc->dev, "%s: pm_runtime_get_sync entered\n", __func__);
  1917. pm_runtime_get_sync(mdwc->dev);
  1918. if (mdwc->otg_xceiv)
  1919. mdwc->ext_xceiv.notify_ext_events(mdwc->otg_xceiv->otg,
  1920. DWC3_EVENT_PHY_RESUME);
  1921. pm_runtime_put_noidle(mdwc->dev);
  1922. if (mdwc->otg_xceiv && (mdwc->ext_xceiv.otg_capability)) {
  1923. dwc3_wait_for_ext_chg_done(mdwc);
  1924. mdwc->ext_xceiv.notify_ext_events(mdwc->otg_xceiv->otg,
  1925. DWC3_EVENT_XCEIV_STATE);
  1926. }
  1927. }
  1928. }
  1929. static u32 debug_id = true, debug_bsv, debug_connect;
  1930. static int dwc3_connect_show(struct seq_file *s, void *unused)
  1931. {
  1932. if (debug_connect)
  1933. seq_printf(s, "true\n");
  1934. else
  1935. seq_printf(s, "false\n");
  1936. return 0;
  1937. }
  1938. static int dwc3_connect_open(struct inode *inode, struct file *file)
  1939. {
  1940. return single_open(file, dwc3_connect_show, inode->i_private);
  1941. }
  1942. static ssize_t dwc3_connect_write(struct file *file, const char __user *ubuf,
  1943. size_t count, loff_t *ppos)
  1944. {
  1945. struct seq_file *s = file->private_data;
  1946. struct dwc3_msm *mdwc = s->private;
  1947. char buf[8];
  1948. memset(buf, 0x00, sizeof(buf));
  1949. if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
  1950. return -EFAULT;
  1951. if (!strncmp(buf, "enable", 6) || !strncmp(buf, "true", 4)) {
  1952. debug_connect = true;
  1953. } else {
  1954. debug_connect = debug_bsv = false;
  1955. debug_id = true;
  1956. }
  1957. mdwc->ext_xceiv.bsv = debug_bsv;
  1958. mdwc->ext_xceiv.id = debug_id ? DWC3_ID_FLOAT : DWC3_ID_GROUND;
  1959. if (atomic_read(&mdwc->in_lpm)) {
  1960. dev_dbg(mdwc->dev, "%s: calling resume_work\n", __func__);
  1961. dwc3_resume_work(&mdwc->resume_work.work);
  1962. } else {
  1963. dev_dbg(mdwc->dev, "%s: notifying xceiv event\n", __func__);
  1964. if (mdwc->otg_xceiv)
  1965. mdwc->ext_xceiv.notify_ext_events(mdwc->otg_xceiv->otg,
  1966. DWC3_EVENT_XCEIV_STATE);
  1967. }
  1968. return count;
  1969. }
  1970. const struct file_operations dwc3_connect_fops = {
  1971. .open = dwc3_connect_open,
  1972. .read = seq_read,
  1973. .write = dwc3_connect_write,
  1974. .llseek = seq_lseek,
  1975. .release = single_release,
  1976. };
  1977. static struct dentry *dwc3_debugfs_root;
  1978. static void dwc3_msm_debugfs_init(struct dwc3_msm *mdwc)
  1979. {
  1980. dwc3_debugfs_root = debugfs_create_dir("msm_dwc3", NULL);
  1981. if (!dwc3_debugfs_root || IS_ERR(dwc3_debugfs_root))
  1982. return;
  1983. if (!debugfs_create_bool("id", S_IRUGO | S_IWUSR, dwc3_debugfs_root,
  1984. &debug_id))
  1985. goto error;
  1986. if (!debugfs_create_bool("bsv", S_IRUGO | S_IWUSR, dwc3_debugfs_root,
  1987. &debug_bsv))
  1988. goto error;
  1989. if (!debugfs_create_file("connect", S_IRUGO | S_IWUSR,
  1990. dwc3_debugfs_root, mdwc, &dwc3_connect_fops))
  1991. goto error;
  1992. return;
  1993. error:
  1994. debugfs_remove_recursive(dwc3_debugfs_root);
  1995. }
  1996. static irqreturn_t msm_dwc3_irq(int irq, void *data)
  1997. {
  1998. #ifndef CONFIG_USB_ANDROID_SAMSUNG_COMPOSITE
  1999. struct dwc3_msm *mdwc = data;
  2000. if (atomic_read(&mdwc->in_lpm)) {
  2001. dev_dbg(mdwc->dev, "%s received in LPM\n", __func__);
  2002. mdwc->lpm_irq_seen = true;
  2003. disable_irq_nosync(irq);
  2004. queue_delayed_work(system_nrt_wq, &mdwc->resume_work, 0);
  2005. } else {
  2006. pr_info_ratelimited("%s: IRQ outside LPM\n", __func__);
  2007. }
  2008. #endif
  2009. return IRQ_HANDLED;
  2010. }
  2011. static int
  2012. get_prop_usbin_voltage_now(struct dwc3_msm *mdwc)
  2013. {
  2014. int rc = 0;
  2015. struct qpnp_vadc_result results;
  2016. if (IS_ERR_OR_NULL(mdwc->vadc_dev)) {
  2017. mdwc->vadc_dev = qpnp_get_vadc(mdwc->dev, "usbin");
  2018. if (IS_ERR(mdwc->vadc_dev))
  2019. return PTR_ERR(mdwc->vadc_dev);
  2020. }
  2021. rc = qpnp_vadc_read(mdwc->vadc_dev, USBIN, &results);
  2022. if (rc) {
  2023. pr_err("Unable to read usbin rc=%d\n", rc);
  2024. return 0;
  2025. } else {
  2026. return results.physical;
  2027. }
  2028. }
  2029. static int dwc3_msm_power_get_property_usb(struct power_supply *psy,
  2030. enum power_supply_property psp,
  2031. union power_supply_propval *val)
  2032. {
  2033. struct dwc3_msm *mdwc = container_of(psy, struct dwc3_msm,
  2034. usb_psy);
  2035. switch (psp) {
  2036. case POWER_SUPPLY_PROP_SCOPE:
  2037. val->intval = mdwc->host_mode;
  2038. break;
  2039. case POWER_SUPPLY_PROP_VOLTAGE_MAX:
  2040. val->intval = mdwc->voltage_max;
  2041. break;
  2042. case POWER_SUPPLY_PROP_CURRENT_MAX:
  2043. val->intval = mdwc->current_max;
  2044. break;
  2045. case POWER_SUPPLY_PROP_PRESENT:
  2046. val->intval = mdwc->vbus_active;
  2047. break;
  2048. case POWER_SUPPLY_PROP_ONLINE:
  2049. val->intval = mdwc->online;
  2050. break;
  2051. case POWER_SUPPLY_PROP_TYPE:
  2052. val->intval = psy->type;
  2053. break;
  2054. case POWER_SUPPLY_PROP_VOLTAGE_NOW:
  2055. val->intval = get_prop_usbin_voltage_now(mdwc);
  2056. break;
  2057. default:
  2058. return -EINVAL;
  2059. }
  2060. return 0;
  2061. }
  2062. static int dwc3_msm_power_set_property_usb(struct power_supply *psy,
  2063. enum power_supply_property psp,
  2064. const union power_supply_propval *val)
  2065. {
  2066. static bool init;
  2067. struct dwc3_msm *mdwc = container_of(psy, struct dwc3_msm,
  2068. usb_psy);
  2069. switch (psp) {
  2070. case POWER_SUPPLY_PROP_SCOPE:
  2071. mdwc->host_mode = val->intval;
  2072. break;
  2073. /* Process PMIC notification in PRESENT prop */
  2074. case POWER_SUPPLY_PROP_PRESENT:
  2075. dev_dbg(mdwc->dev, "%s: notify xceiv event\n", __func__);
  2076. dev_info(mdwc->dev, "%s: !mdwc->ext_inuse(%d), mdwc->ext_xceiv.otg_capability(%d), !init(%d)\n",
  2077. __func__, !mdwc->ext_inuse, mdwc->ext_xceiv.otg_capability, !init);
  2078. if (mdwc->otg_xceiv && !mdwc->ext_inuse &&
  2079. (mdwc->ext_xceiv.otg_capability || !init)) {
  2080. mdwc->ext_xceiv.bsv = val->intval;
  2081. /*
  2082. * set debouncing delay to 120msec. Otherwise battery
  2083. * charging CDP complaince test fails if delay > 120ms.
  2084. */
  2085. dev_info(mdwc->dev, "%s: queue_delayed_work mdwc->resume_work\n", __func__);
  2086. queue_delayed_work(system_nrt_wq,
  2087. &mdwc->resume_work, 12);
  2088. if (!init)
  2089. init = true;
  2090. }
  2091. mdwc->vbus_active = val->intval;
  2092. break;
  2093. case POWER_SUPPLY_PROP_ONLINE:
  2094. mdwc->online = val->intval;
  2095. break;
  2096. case POWER_SUPPLY_PROP_VOLTAGE_MAX:
  2097. mdwc->voltage_max = val->intval;
  2098. break;
  2099. case POWER_SUPPLY_PROP_CURRENT_MAX:
  2100. mdwc->current_max = val->intval;
  2101. break;
  2102. case POWER_SUPPLY_PROP_TYPE:
  2103. psy->type = val->intval;
  2104. break;
  2105. default:
  2106. return -EINVAL;
  2107. }
  2108. power_supply_changed(&mdwc->usb_psy);
  2109. return 0;
  2110. }
  2111. static void dwc3_msm_external_power_changed(struct power_supply *psy)
  2112. {
  2113. struct dwc3_msm *mdwc = container_of(psy, struct dwc3_msm, usb_psy);
  2114. union power_supply_propval ret = {0,};
  2115. if (!mdwc->ext_vbus_psy)
  2116. mdwc->ext_vbus_psy = power_supply_get_by_name("ext-vbus");
  2117. if (!mdwc->ext_vbus_psy) {
  2118. pr_err("%s: Unable to get ext_vbus power_supply\n", __func__);
  2119. return;
  2120. }
  2121. mdwc->ext_vbus_psy->get_property(mdwc->ext_vbus_psy,
  2122. POWER_SUPPLY_PROP_ONLINE, &ret);
  2123. if (ret.intval) {
  2124. dwc3_start_chg_det(&mdwc->charger, false);
  2125. mdwc->ext_vbus_psy->get_property(mdwc->ext_vbus_psy,
  2126. POWER_SUPPLY_PROP_CURRENT_MAX, &ret);
  2127. power_supply_set_current_limit(&mdwc->usb_psy, ret.intval);
  2128. }
  2129. power_supply_set_online(&mdwc->usb_psy, ret.intval);
  2130. power_supply_changed(&mdwc->usb_psy);
  2131. }
  2132. static int
  2133. dwc3_msm_property_is_writeable(struct power_supply *psy,
  2134. enum power_supply_property psp)
  2135. {
  2136. switch (psp) {
  2137. case POWER_SUPPLY_PROP_VOLTAGE_MAX:
  2138. return 1;
  2139. default:
  2140. break;
  2141. }
  2142. return 0;
  2143. }
  2144. static char *dwc3_msm_pm_power_supplied_to[] = {
  2145. "battery",
  2146. };
  2147. static enum power_supply_property dwc3_msm_pm_power_props_usb[] = {
  2148. POWER_SUPPLY_PROP_PRESENT,
  2149. POWER_SUPPLY_PROP_ONLINE,
  2150. POWER_SUPPLY_PROP_VOLTAGE_MAX,
  2151. POWER_SUPPLY_PROP_CURRENT_MAX,
  2152. POWER_SUPPLY_PROP_TYPE,
  2153. POWER_SUPPLY_PROP_SCOPE,
  2154. POWER_SUPPLY_PROP_VOLTAGE_NOW,
  2155. };
  2156. static void dwc3_init_adc_work(struct work_struct *w);
  2157. static void dwc3_ext_notify_online(void *ctx, int on)
  2158. {
  2159. struct dwc3_msm *mdwc = ctx;
  2160. bool notify_otg = false;
  2161. if (!mdwc) {
  2162. pr_err("%s: DWC3 driver already removed\n", __func__);
  2163. return;
  2164. }
  2165. dev_dbg(mdwc->dev, "notify %s%s\n", on ? "" : "dis", "connected");
  2166. if (!mdwc->ext_vbus_psy)
  2167. mdwc->ext_vbus_psy = power_supply_get_by_name("ext-vbus");
  2168. mdwc->ext_inuse = on;
  2169. if (on) {
  2170. /* force OTG to exit B-peripheral state */
  2171. mdwc->ext_xceiv.bsv = false;
  2172. notify_otg = true;
  2173. dwc3_start_chg_det(&mdwc->charger, false);
  2174. } else {
  2175. /* external client offline; tell OTG about cached ID/BSV */
  2176. if (mdwc->ext_xceiv.id != mdwc->id_state) {
  2177. mdwc->ext_xceiv.id = mdwc->id_state;
  2178. notify_otg = true;
  2179. }
  2180. mdwc->ext_xceiv.bsv = mdwc->vbus_active;
  2181. notify_otg |= mdwc->vbus_active;
  2182. }
  2183. if (mdwc->ext_vbus_psy)
  2184. power_supply_set_present(mdwc->ext_vbus_psy, on);
  2185. if (notify_otg)
  2186. queue_delayed_work(system_nrt_wq, &mdwc->resume_work, 0);
  2187. }
  2188. static void dwc3_id_work(struct work_struct *w)
  2189. {
  2190. struct dwc3_msm *mdwc = container_of(w, struct dwc3_msm, id_work);
  2191. int ret;
  2192. /* Give external client a chance to handle */
  2193. if (!mdwc->ext_inuse && usb_ext) {
  2194. if (mdwc->pmic_id_irq)
  2195. disable_irq(mdwc->pmic_id_irq);
  2196. ret = usb_ext->notify(usb_ext->ctxt, mdwc->id_state,
  2197. dwc3_ext_notify_online, mdwc);
  2198. dev_dbg(mdwc->dev, "%s: external handler returned %d\n",
  2199. __func__, ret);
  2200. if (mdwc->pmic_id_irq) {
  2201. unsigned long flags;
  2202. local_irq_save(flags);
  2203. /* ID may have changed while IRQ disabled; update it */
  2204. mdwc->id_state = !!irq_read_line(mdwc->pmic_id_irq);
  2205. local_irq_restore(flags);
  2206. enable_irq(mdwc->pmic_id_irq);
  2207. }
  2208. mdwc->ext_inuse = (ret == 0);
  2209. }
  2210. if (!mdwc->ext_inuse) { /* notify OTG */
  2211. mdwc->ext_xceiv.id = mdwc->id_state;
  2212. dwc3_resume_work(&mdwc->resume_work.work);
  2213. }
  2214. }
  2215. static irqreturn_t dwc3_pmic_id_irq(int irq, void *data)
  2216. {
  2217. struct dwc3_msm *mdwc = data;
  2218. enum dwc3_id_state id;
  2219. /* If we can't read ID line state for some reason, treat it as float */
  2220. id = !!irq_read_line(irq);
  2221. if (mdwc->id_state != id) {
  2222. mdwc->id_state = id;
  2223. queue_work(system_nrt_wq, &mdwc->id_work);
  2224. }
  2225. return IRQ_HANDLED;
  2226. }
  2227. static void dwc3_adc_notification(enum qpnp_tm_state state, void *ctx)
  2228. {
  2229. struct dwc3_msm *mdwc = ctx;
  2230. if (state >= ADC_TM_STATE_NUM) {
  2231. pr_err("%s: invalid notification %d\n", __func__, state);
  2232. return;
  2233. }
  2234. dev_dbg(mdwc->dev, "%s: state = %s\n", __func__,
  2235. state == ADC_TM_HIGH_STATE ? "high" : "low");
  2236. /* save ID state, but don't necessarily notify OTG */
  2237. if (state == ADC_TM_HIGH_STATE) {
  2238. mdwc->id_state = DWC3_ID_FLOAT;
  2239. mdwc->adc_param.state_request = ADC_TM_LOW_THR_ENABLE;
  2240. } else {
  2241. mdwc->id_state = DWC3_ID_GROUND;
  2242. mdwc->adc_param.state_request = ADC_TM_HIGH_THR_ENABLE;
  2243. }
  2244. dwc3_id_work(&mdwc->id_work);
  2245. /* re-arm ADC interrupt */
  2246. qpnp_adc_tm_usbid_configure(mdwc->adc_tm_dev, &mdwc->adc_param);
  2247. }
  2248. static void dwc3_init_adc_work(struct work_struct *w)
  2249. {
  2250. struct dwc3_msm *mdwc = container_of(w, struct dwc3_msm,
  2251. init_adc_work.work);
  2252. int ret;
  2253. mdwc->adc_tm_dev = qpnp_get_adc_tm(mdwc->dev, "dwc_usb3-adc_tm");
  2254. if (IS_ERR(mdwc->adc_tm_dev)) {
  2255. if (PTR_ERR(mdwc->adc_tm_dev) == -EPROBE_DEFER)
  2256. queue_delayed_work(system_nrt_wq, to_delayed_work(w),
  2257. msecs_to_jiffies(100));
  2258. else
  2259. mdwc->adc_tm_dev = NULL;
  2260. return;
  2261. }
  2262. mdwc->adc_param.low_thr = adc_low_threshold;
  2263. mdwc->adc_param.high_thr = adc_high_threshold;
  2264. mdwc->adc_param.timer_interval = adc_meas_interval;
  2265. mdwc->adc_param.state_request = ADC_TM_HIGH_LOW_THR_ENABLE;
  2266. mdwc->adc_param.btm_ctx = mdwc;
  2267. mdwc->adc_param.threshold_notification = dwc3_adc_notification;
  2268. ret = qpnp_adc_tm_usbid_configure(mdwc->adc_tm_dev, &mdwc->adc_param);
  2269. if (ret) {
  2270. dev_err(mdwc->dev, "%s: request ADC error %d\n", __func__, ret);
  2271. return;
  2272. }
  2273. mdwc->id_adc_detect = true;
  2274. }
  2275. static ssize_t adc_enable_show(struct device *dev,
  2276. struct device_attribute *attr, char *buf)
  2277. {
  2278. struct dwc3_msm *mdwc = dev_get_drvdata(dev);
  2279. if (!mdwc)
  2280. return -EINVAL;
  2281. return snprintf(buf, PAGE_SIZE, "%s\n", mdwc->id_adc_detect ?
  2282. "enabled" : "disabled");
  2283. }
  2284. static ssize_t adc_enable_store(struct device *dev,
  2285. struct device_attribute *attr, const char
  2286. *buf, size_t size)
  2287. {
  2288. struct dwc3_msm *mdwc = dev_get_drvdata(dev);
  2289. if (!mdwc)
  2290. return -EINVAL;
  2291. if (!strnicmp(buf, "enable", 6)) {
  2292. if (!mdwc->id_adc_detect)
  2293. dwc3_init_adc_work(&mdwc->init_adc_work.work);
  2294. return size;
  2295. } else if (!strnicmp(buf, "disable", 7)) {
  2296. qpnp_adc_tm_usbid_end(mdwc->adc_tm_dev);
  2297. mdwc->id_adc_detect = false;
  2298. return size;
  2299. }
  2300. return -EINVAL;
  2301. }
  2302. static DEVICE_ATTR(adc_enable, S_IRUGO | S_IWUSR, adc_enable_show,
  2303. adc_enable_store);
  2304. static int dwc3_msm_ext_chg_open(struct inode *inode, struct file *file)
  2305. {
  2306. struct dwc3_msm *mdwc =
  2307. container_of(inode->i_cdev, struct dwc3_msm, ext_chg_cdev);
  2308. pr_debug("dwc3-msm ext chg open\n");
  2309. file->private_data = mdwc;
  2310. mdwc->ext_chg_opened = true;
  2311. return 0;
  2312. }
  2313. static long
  2314. dwc3_msm_ext_chg_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
  2315. {
  2316. struct dwc3_msm *mdwc = file->private_data;
  2317. struct msm_usb_chg_info info = {0};
  2318. int ret = 0, val;
  2319. switch (cmd) {
  2320. case MSM_USB_EXT_CHG_INFO:
  2321. info.chg_block_type = USB_CHG_BLOCK_QSCRATCH;
  2322. info.page_offset = (mdwc->io_res->start +
  2323. QSCRATCH_REG_OFFSET) & ~PAGE_MASK;
  2324. /*
  2325. * The charger block register address space is only
  2326. * 512 bytes. But mmap() works on PAGE granularity.
  2327. */
  2328. info.length = PAGE_SIZE;
  2329. if (copy_to_user((void __user *)arg, &info, sizeof(info))) {
  2330. pr_err("%s: copy to user failed\n\n", __func__);
  2331. ret = -EFAULT;
  2332. }
  2333. break;
  2334. case MSM_USB_EXT_CHG_BLOCK_LPM:
  2335. if (get_user(val, (int __user *)arg)) {
  2336. pr_err("%s: get_user failed\n\n", __func__);
  2337. ret = -EFAULT;
  2338. break;
  2339. }
  2340. pr_debug("%s: LPM block request %d\n", __func__, val);
  2341. if (val) { /* block LPM */
  2342. if (mdwc->charger.chg_type == DWC3_DCP_CHARGER) {
  2343. pm_runtime_get_sync(mdwc->dev);
  2344. } else {
  2345. mdwc->ext_chg_active = false;
  2346. complete(&mdwc->ext_chg_wait);
  2347. ret = -ENODEV;
  2348. }
  2349. } else {
  2350. mdwc->ext_chg_active = false;
  2351. complete(&mdwc->ext_chg_wait);
  2352. pm_runtime_put(mdwc->dev);
  2353. }
  2354. break;
  2355. case MSM_USB_EXT_CHG_VOLTAGE_INFO:
  2356. if (get_user(val, (int __user *)arg)) {
  2357. pr_err("%s: get_user failed\n\n", __func__);
  2358. ret = -EFAULT;
  2359. break;
  2360. }
  2361. if (val == USB_REQUEST_5V)
  2362. pr_debug("%s:voting 5V voltage request\n", __func__);
  2363. else if (val == USB_REQUEST_9V)
  2364. pr_debug("%s:voting 9V voltage request\n", __func__);
  2365. break;
  2366. case MSM_USB_EXT_CHG_RESULT:
  2367. if (get_user(val, (int __user *)arg)) {
  2368. pr_err("%s: get_user failed\n\n", __func__);
  2369. ret = -EFAULT;
  2370. break;
  2371. }
  2372. if (!val)
  2373. pr_debug("%s:voltage request successful\n", __func__);
  2374. else
  2375. pr_debug("%s:voltage request failed\n", __func__);
  2376. break;
  2377. case MSM_USB_EXT_CHG_TYPE:
  2378. if (get_user(val, (int __user *)arg)) {
  2379. pr_err("%s: get_user failed\n\n", __func__);
  2380. ret = -EFAULT;
  2381. break;
  2382. }
  2383. if (val)
  2384. pr_debug("%s:charger is external charger\n", __func__);
  2385. else
  2386. pr_debug("%s:charger is not ext charger\n", __func__);
  2387. break;
  2388. default:
  2389. ret = -EINVAL;
  2390. }
  2391. return ret;
  2392. }
  2393. static int dwc3_msm_ext_chg_mmap(struct file *file, struct vm_area_struct *vma)
  2394. {
  2395. struct dwc3_msm *mdwc = file->private_data;
  2396. unsigned long vsize = vma->vm_end - vma->vm_start;
  2397. int ret;
  2398. if (vma->vm_pgoff != 0 || vsize > PAGE_SIZE)
  2399. return -EINVAL;
  2400. vma->vm_pgoff = __phys_to_pfn(mdwc->io_res->start +
  2401. QSCRATCH_REG_OFFSET);
  2402. vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
  2403. ret = io_remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
  2404. vsize, vma->vm_page_prot);
  2405. if (ret < 0)
  2406. pr_err("%s: failed with return val %d\n", __func__, ret);
  2407. return ret;
  2408. }
  2409. static int dwc3_msm_ext_chg_release(struct inode *inode, struct file *file)
  2410. {
  2411. struct dwc3_msm *mdwc = file->private_data;
  2412. pr_debug("dwc3-msm ext chg release\n");
  2413. mdwc->ext_chg_opened = false;
  2414. return 0;
  2415. }
  2416. static const struct file_operations dwc3_msm_ext_chg_fops = {
  2417. .owner = THIS_MODULE,
  2418. .open = dwc3_msm_ext_chg_open,
  2419. .unlocked_ioctl = dwc3_msm_ext_chg_ioctl,
  2420. .mmap = dwc3_msm_ext_chg_mmap,
  2421. .release = dwc3_msm_ext_chg_release,
  2422. };
  2423. static int dwc3_msm_setup_cdev(struct dwc3_msm *mdwc)
  2424. {
  2425. int ret;
  2426. ret = alloc_chrdev_region(&mdwc->ext_chg_dev, 0, 1, "usb_ext_chg");
  2427. if (ret < 0) {
  2428. pr_err("Fail to allocate usb ext char dev region\n");
  2429. return ret;
  2430. }
  2431. mdwc->ext_chg_class = class_create(THIS_MODULE, "dwc_ext_chg");
  2432. if (ret < 0) {
  2433. pr_err("Fail to create usb ext chg class\n");
  2434. goto unreg_chrdev;
  2435. }
  2436. cdev_init(&mdwc->ext_chg_cdev, &dwc3_msm_ext_chg_fops);
  2437. mdwc->ext_chg_cdev.owner = THIS_MODULE;
  2438. ret = cdev_add(&mdwc->ext_chg_cdev, mdwc->ext_chg_dev, 1);
  2439. if (ret < 0) {
  2440. pr_err("Fail to add usb ext chg cdev\n");
  2441. goto destroy_class;
  2442. }
  2443. mdwc->ext_chg_device = device_create(mdwc->ext_chg_class,
  2444. NULL, mdwc->ext_chg_dev, NULL,
  2445. "usb_ext_chg");
  2446. if (IS_ERR(mdwc->ext_chg_device)) {
  2447. pr_err("Fail to create usb ext chg device\n");
  2448. ret = PTR_ERR(mdwc->ext_chg_device);
  2449. mdwc->ext_chg_device = NULL;
  2450. goto del_cdev;
  2451. }
  2452. pr_debug("dwc3 msm ext chg cdev setup success\n");
  2453. return 0;
  2454. del_cdev:
  2455. cdev_del(&mdwc->ext_chg_cdev);
  2456. destroy_class:
  2457. class_destroy(mdwc->ext_chg_class);
  2458. unreg_chrdev:
  2459. unregister_chrdev_region(mdwc->ext_chg_dev, 1);
  2460. return ret;
  2461. }
  2462. #include "dwc3-sec.c"
  2463. static int __devinit dwc3_msm_probe(struct platform_device *pdev)
  2464. {
  2465. struct device_node *node = pdev->dev.of_node;
  2466. struct dwc3_msm *mdwc;
  2467. struct resource *res;
  2468. void __iomem *tcsr;
  2469. unsigned long flags;
  2470. int ret = 0;
  2471. int len = 0;
  2472. u32 tmp[3];
  2473. mdwc = devm_kzalloc(&pdev->dev, sizeof(*mdwc), GFP_KERNEL);
  2474. if (!mdwc) {
  2475. dev_err(&pdev->dev, "not enough memory\n");
  2476. return -ENOMEM;
  2477. }
  2478. platform_set_drvdata(pdev, mdwc);
  2479. mdwc->dev = &pdev->dev;
  2480. INIT_LIST_HEAD(&mdwc->req_complete_list);
  2481. INIT_DELAYED_WORK(&mdwc->chg_work, dwc3_chg_detect_work);
  2482. INIT_DELAYED_WORK(&mdwc->resume_work, dwc3_resume_work);
  2483. INIT_WORK(&mdwc->restart_usb_work, dwc3_restart_usb_work);
  2484. INIT_WORK(&mdwc->usb_block_reset_work, dwc3_block_reset_usb_work);
  2485. INIT_WORK(&mdwc->id_work, dwc3_id_work);
  2486. INIT_DELAYED_WORK(&mdwc->init_adc_work, dwc3_init_adc_work);
  2487. init_completion(&mdwc->ext_chg_wait);
  2488. ret = dwc3_msm_config_gdsc(mdwc, 1);
  2489. if (ret) {
  2490. dev_err(&pdev->dev, "unable to configure usb3 gdsc\n");
  2491. return ret;
  2492. }
  2493. mdwc->xo_clk = clk_get(&pdev->dev, "xo");
  2494. if (IS_ERR(mdwc->xo_clk)) {
  2495. dev_err(&pdev->dev, "%s unable to get TCXO buffer handle\n",
  2496. __func__);
  2497. ret = PTR_ERR(mdwc->xo_clk);
  2498. goto disable_dwc3_gdsc;
  2499. }
  2500. ret = clk_prepare_enable(mdwc->xo_clk);
  2501. if (ret) {
  2502. dev_err(&pdev->dev, "%s failed to vote for TCXO buffer%d\n",
  2503. __func__, ret);
  2504. goto put_xo;
  2505. }
  2506. /*
  2507. * DWC3 Core requires its CORE CLK (aka master / bus clk) to
  2508. * run at 125Mhz in SSUSB mode and >60MHZ for HSUSB mode.
  2509. */
  2510. mdwc->core_clk = devm_clk_get(&pdev->dev, "core_clk");
  2511. if (IS_ERR(mdwc->core_clk)) {
  2512. dev_err(&pdev->dev, "failed to get core_clk\n");
  2513. ret = PTR_ERR(mdwc->core_clk);
  2514. goto disable_xo;
  2515. }
  2516. clk_set_rate(mdwc->core_clk, 125000000);
  2517. clk_prepare_enable(mdwc->core_clk);
  2518. mdwc->iface_clk = devm_clk_get(&pdev->dev, "iface_clk");
  2519. if (IS_ERR(mdwc->iface_clk)) {
  2520. dev_err(&pdev->dev, "failed to get iface_clk\n");
  2521. ret = PTR_ERR(mdwc->iface_clk);
  2522. goto disable_core_clk;
  2523. }
  2524. clk_prepare_enable(mdwc->iface_clk);
  2525. mdwc->sleep_clk = devm_clk_get(&pdev->dev, "sleep_clk");
  2526. if (IS_ERR(mdwc->sleep_clk)) {
  2527. dev_err(&pdev->dev, "failed to get sleep_clk\n");
  2528. ret = PTR_ERR(mdwc->sleep_clk);
  2529. goto disable_iface_clk;
  2530. }
  2531. clk_prepare_enable(mdwc->sleep_clk);
  2532. mdwc->hsphy_sleep_clk = devm_clk_get(&pdev->dev, "sleep_a_clk");
  2533. if (IS_ERR(mdwc->hsphy_sleep_clk)) {
  2534. dev_err(&pdev->dev, "failed to get sleep_a_clk\n");
  2535. ret = PTR_ERR(mdwc->hsphy_sleep_clk);
  2536. goto disable_sleep_clk;
  2537. }
  2538. clk_prepare_enable(mdwc->hsphy_sleep_clk);
  2539. mdwc->utmi_clk = devm_clk_get(&pdev->dev, "utmi_clk");
  2540. if (IS_ERR(mdwc->utmi_clk)) {
  2541. dev_err(&pdev->dev, "failed to get utmi_clk\n");
  2542. ret = PTR_ERR(mdwc->utmi_clk);
  2543. goto disable_sleep_a_clk;
  2544. }
  2545. clk_prepare_enable(mdwc->utmi_clk);
  2546. mdwc->ref_clk = devm_clk_get(&pdev->dev, "ref_clk");
  2547. if (IS_ERR(mdwc->ref_clk)) {
  2548. dev_err(&pdev->dev, "failed to get ref_clk\n");
  2549. ret = PTR_ERR(mdwc->ref_clk);
  2550. goto disable_utmi_clk;
  2551. }
  2552. clk_prepare_enable(mdwc->ref_clk);
  2553. of_get_property(node, "qcom,vdd-voltage-level", &len);
  2554. if (len == sizeof(tmp)) {
  2555. of_property_read_u32_array(node, "qcom,vdd-voltage-level",
  2556. tmp, len/sizeof(*tmp));
  2557. mdwc->vdd_no_vol_level = tmp[0];
  2558. mdwc->vdd_low_vol_level = tmp[1];
  2559. mdwc->vdd_high_vol_level = tmp[2];
  2560. } else {
  2561. dev_err(&pdev->dev, "no qcom,vdd-voltage-level property\n");
  2562. ret = -EINVAL;
  2563. goto disable_ref_clk;
  2564. }
  2565. /* SS PHY */
  2566. /* [Vienna only] For USB 3.0 redriver enable */
  2567. /* PM8914 MPP5 enable */
  2568. #if defined(CONFIG_SEC_VIENNA_PROJECT) || defined(CONFIG_SEC_V2_PROJECT) \
  2569. || defined(CONFIG_SEC_K_PROJECT)
  2570. pr_info("Get USB 3.0 redriver GPIO address\n");
  2571. sec_qcom_usb_rdrv = of_get_named_gpio(node, "qcom,gpio_usb_rdrv_en", 0);
  2572. if (sec_qcom_usb_rdrv < 0) {
  2573. #if defined(CONFIG_SEC_K_PROJECT)
  2574. of_property_read_u32(node, "qcom,gpio_usb_rdrv_en", &sec_qcom_usb_rdrv);
  2575. if (sec_qcom_usb_rdrv < 0)
  2576. #endif
  2577. dev_err(&pdev->dev, "unable to get qcom,gpio_usb_rdrv_en\n");
  2578. }
  2579. #endif
  2580. #if defined(CONFIG_SEC_H_PROJECT) || defined(CONFIG_SEC_F_PROJECT)
  2581. sec_qcom_usb_rdrv = 129;
  2582. #if defined(CONFIG_MACH_HLTE_CHN_CMCC)
  2583. if (system_rev >= 12) {
  2584. sec_qcom_usb_rdrv = 52;
  2585. }
  2586. #endif
  2587. #endif
  2588. mdwc->ssusb_vddcx = devm_regulator_get(&pdev->dev, "ssusb_vdd_dig");
  2589. if (IS_ERR(mdwc->ssusb_vddcx)) {
  2590. dev_err(&pdev->dev, "unable to get ssusb vddcx\n");
  2591. ret = PTR_ERR(mdwc->ssusb_vddcx);
  2592. goto disable_ref_clk;
  2593. }
  2594. ret = dwc3_ssusb_config_vddcx(mdwc, 1);
  2595. if (ret) {
  2596. dev_err(&pdev->dev, "ssusb vddcx configuration failed\n");
  2597. goto disable_ref_clk;
  2598. }
  2599. ret = regulator_enable(mdwc->ssusb_vddcx);
  2600. if (ret) {
  2601. dev_err(&pdev->dev, "unable to enable the ssusb vddcx\n");
  2602. goto unconfig_ss_vddcx;
  2603. }
  2604. ret = dwc3_ssusb_ldo_init(mdwc, 1);
  2605. if (ret) {
  2606. dev_err(&pdev->dev, "ssusb vreg configuration failed\n");
  2607. goto disable_ss_vddcx;
  2608. }
  2609. ret = dwc3_ssusb_ldo_enable(mdwc, 1);
  2610. if (ret) {
  2611. dev_err(&pdev->dev, "ssusb vreg enable failed\n");
  2612. goto free_ss_ldo_init;
  2613. }
  2614. /* HS PHY */
  2615. mdwc->hsusb_vddcx = devm_regulator_get(&pdev->dev, "hsusb_vdd_dig");
  2616. if (IS_ERR(mdwc->hsusb_vddcx)) {
  2617. dev_err(&pdev->dev, "unable to get hsusb vddcx\n");
  2618. ret = PTR_ERR(mdwc->hsusb_vddcx);
  2619. goto disable_ss_ldo;
  2620. }
  2621. ret = dwc3_hsusb_config_vddcx(mdwc, 1);
  2622. if (ret) {
  2623. dev_err(&pdev->dev, "hsusb vddcx configuration failed\n");
  2624. goto disable_ss_ldo;
  2625. }
  2626. ret = regulator_enable(mdwc->hsusb_vddcx);
  2627. if (ret) {
  2628. dev_err(&pdev->dev, "unable to enable the hsusb vddcx\n");
  2629. goto unconfig_hs_vddcx;
  2630. }
  2631. ret = dwc3_hsusb_ldo_init(mdwc, 1);
  2632. if (ret) {
  2633. dev_err(&pdev->dev, "hsusb vreg configuration failed\n");
  2634. goto disable_hs_vddcx;
  2635. }
  2636. ret = dwc3_hsusb_ldo_enable(mdwc, 1);
  2637. if (ret) {
  2638. dev_err(&pdev->dev, "hsusb vreg enable failed\n");
  2639. goto free_hs_ldo_init;
  2640. }
  2641. mdwc->id_state = mdwc->ext_xceiv.id = DWC3_ID_FLOAT;
  2642. mdwc->ext_xceiv.otg_capability = of_property_read_bool(node,
  2643. "qcom,otg-capability");
  2644. mdwc->charger.charging_disabled = of_property_read_bool(node,
  2645. "qcom,charging-disabled");
  2646. mdwc->charger.skip_chg_detect = of_property_read_bool(node,
  2647. "qcom,skip-charger-detection");
  2648. /*
  2649. * DWC3 has separate IRQ line for OTG events (ID/BSV) and for
  2650. * DP and DM linestate transitions during low power mode.
  2651. */
  2652. mdwc->hs_phy_irq = platform_get_irq_byname(pdev, "hs_phy_irq");
  2653. if (mdwc->hs_phy_irq < 0) {
  2654. dev_dbg(&pdev->dev, "pget_irq for hs_phy_irq failed\n");
  2655. mdwc->hs_phy_irq = 0;
  2656. } else {
  2657. ret = devm_request_irq(&pdev->dev, mdwc->hs_phy_irq,
  2658. msm_dwc3_irq, IRQF_TRIGGER_RISING,
  2659. "msm_dwc3", mdwc);
  2660. if (ret) {
  2661. dev_err(&pdev->dev, "irqreq HSPHYINT failed\n");
  2662. goto disable_hs_ldo;
  2663. }
  2664. }
  2665. if (mdwc->ext_xceiv.otg_capability) {
  2666. mdwc->pmic_id_irq =
  2667. platform_get_irq_byname(pdev, "pmic_id_irq");
  2668. if (mdwc->pmic_id_irq > 0) {
  2669. /* check if PMIC ID IRQ is supported */
  2670. ret = qpnp_misc_irqs_available(&pdev->dev);
  2671. if (ret == -EPROBE_DEFER) {
  2672. /* qpnp hasn't probed yet; defer dwc probe */
  2673. goto disable_hs_ldo;
  2674. } else if (ret == 0) {
  2675. mdwc->pmic_id_irq = 0;
  2676. } else {
  2677. ret = devm_request_irq(&pdev->dev,
  2678. mdwc->pmic_id_irq,
  2679. dwc3_pmic_id_irq,
  2680. IRQF_TRIGGER_RISING |
  2681. IRQF_TRIGGER_FALLING,
  2682. "dwc3_msm_pmic_id",
  2683. mdwc);
  2684. if (ret) {
  2685. dev_err(&pdev->dev, "irqreq IDINT failed\n");
  2686. goto disable_hs_ldo;
  2687. }
  2688. local_irq_save(flags);
  2689. /* Update initial ID state */
  2690. mdwc->id_state =
  2691. !!irq_read_line(mdwc->pmic_id_irq);
  2692. if (mdwc->id_state == DWC3_ID_GROUND)
  2693. queue_work(system_nrt_wq,
  2694. &mdwc->id_work);
  2695. local_irq_restore(flags);
  2696. enable_irq_wake(mdwc->pmic_id_irq);
  2697. }
  2698. }
  2699. if (mdwc->pmic_id_irq <= 0) {
  2700. /* If no PMIC ID IRQ, use ADC for ID pin detection */
  2701. queue_work(system_nrt_wq, &mdwc->init_adc_work.work);
  2702. device_create_file(&pdev->dev, &dev_attr_adc_enable);
  2703. mdwc->pmic_id_irq = 0;
  2704. }
  2705. }
  2706. res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
  2707. if (!res) {
  2708. dev_dbg(&pdev->dev, "missing TCSR memory resource\n");
  2709. } else {
  2710. tcsr = devm_ioremap_nocache(&pdev->dev, res->start,
  2711. resource_size(res));
  2712. if (!tcsr) {
  2713. dev_dbg(&pdev->dev, "tcsr ioremap failed\n");
  2714. } else {
  2715. /* Enable USB3 on the primary USB port. */
  2716. writel_relaxed(0x1, tcsr);
  2717. /*
  2718. * Ensure that TCSR write is completed before
  2719. * USB registers initialization.
  2720. */
  2721. mb();
  2722. }
  2723. }
  2724. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  2725. if (!res) {
  2726. dev_err(&pdev->dev, "missing memory base resource\n");
  2727. ret = -ENODEV;
  2728. goto disable_hs_ldo;
  2729. }
  2730. mdwc->base = devm_ioremap_nocache(&pdev->dev, res->start,
  2731. resource_size(res));
  2732. if (!mdwc->base) {
  2733. dev_err(&pdev->dev, "ioremap failed\n");
  2734. ret = -ENODEV;
  2735. goto disable_hs_ldo;
  2736. }
  2737. mdwc->io_res = res; /* used to calculate chg block offset */
  2738. if (of_property_read_u32(node, "qcom,dwc-hsphy-init",
  2739. &mdwc->hsphy_init_seq))
  2740. dev_dbg(&pdev->dev, "unable to read hsphy init seq\n");
  2741. else if (!mdwc->hsphy_init_seq)
  2742. dev_warn(&pdev->dev, "incorrect hsphyinitseq.Using PORvalue\n");
  2743. if (of_property_read_u32(node, "qcom,dwc-ssphy-deemphasis-value",
  2744. &mdwc->deemphasis_val))
  2745. dev_dbg(&pdev->dev, "unable to read ssphy deemphasis value\n");
  2746. pm_runtime_set_active(mdwc->dev);
  2747. pm_runtime_enable(mdwc->dev);
  2748. if (of_property_read_u32(node, "qcom,dwc-usb3-msm-dbm-eps",
  2749. &mdwc->dbm_num_eps)) {
  2750. dev_err(&pdev->dev,
  2751. "unable to read platform data num of dbm eps\n");
  2752. mdwc->dbm_num_eps = DBM_MAX_EPS;
  2753. }
  2754. if (mdwc->dbm_num_eps > DBM_MAX_EPS) {
  2755. dev_err(&pdev->dev,
  2756. "Driver doesn't support number of DBM EPs. "
  2757. "max: %d, dbm_num_eps: %d\n",
  2758. DBM_MAX_EPS, mdwc->dbm_num_eps);
  2759. ret = -ENODEV;
  2760. goto disable_hs_ldo;
  2761. }
  2762. if (of_property_read_u32(node, "qcom,dwc-usb3-msm-tx-fifo-size",
  2763. &mdwc->tx_fifo_size))
  2764. dev_err(&pdev->dev,
  2765. "unable to read platform data tx fifo size\n");
  2766. if (of_property_read_u32(node, "qcom,dwc-usb3-msm-qdss-tx-fifo-size",
  2767. &mdwc->qdss_tx_fifo_size))
  2768. dev_err(&pdev->dev,
  2769. "unable to read platform data qdss tx fifo size\n");
  2770. dwc3_set_notifier(&dwc3_msm_notify_event);
  2771. /* usb_psy required only for vbus_notifications or charging support */
  2772. if (mdwc->ext_xceiv.otg_capability ||
  2773. !mdwc->charger.charging_disabled) {
  2774. mdwc->usb_psy.name = "dwc-usb";
  2775. mdwc->usb_psy.type = POWER_SUPPLY_TYPE_UNKNOWN;
  2776. mdwc->usb_psy.supplied_to = dwc3_msm_pm_power_supplied_to;
  2777. mdwc->usb_psy.num_supplicants = ARRAY_SIZE(
  2778. dwc3_msm_pm_power_supplied_to);
  2779. mdwc->usb_psy.properties = dwc3_msm_pm_power_props_usb;
  2780. mdwc->usb_psy.num_properties =
  2781. ARRAY_SIZE(dwc3_msm_pm_power_props_usb);
  2782. mdwc->usb_psy.get_property = dwc3_msm_power_get_property_usb;
  2783. mdwc->usb_psy.set_property = dwc3_msm_power_set_property_usb;
  2784. mdwc->usb_psy.external_power_changed =
  2785. dwc3_msm_external_power_changed;
  2786. mdwc->usb_psy.property_is_writeable =
  2787. dwc3_msm_property_is_writeable;
  2788. ret = power_supply_register(&pdev->dev, &mdwc->usb_psy);
  2789. if (ret < 0) {
  2790. dev_err(&pdev->dev,
  2791. "%s:power_supply_register usb failed\n",
  2792. __func__);
  2793. goto disable_hs_ldo;
  2794. }
  2795. }
  2796. if (node) {
  2797. ret = of_platform_populate(node, NULL, NULL, &pdev->dev);
  2798. if (ret) {
  2799. dev_err(&pdev->dev,
  2800. "failed to add create dwc3 core\n");
  2801. goto put_psupply;
  2802. }
  2803. }
  2804. mdwc->bus_scale_table = msm_bus_cl_get_pdata(pdev);
  2805. if (!mdwc->bus_scale_table) {
  2806. dev_err(&pdev->dev, "bus scaling is disabled\n");
  2807. } else {
  2808. mdwc->bus_perf_client =
  2809. msm_bus_scale_register_client(mdwc->bus_scale_table);
  2810. ret = msm_bus_scale_client_update_request(
  2811. mdwc->bus_perf_client, 1);
  2812. if (ret)
  2813. dev_err(&pdev->dev, "Failed to vote for bus scaling\n");
  2814. }
  2815. mdwc->otg_xceiv = usb_get_transceiver();
  2816. /* Register with OTG if present, ignore USB2 OTG using other PHY */
  2817. if (mdwc->otg_xceiv &&
  2818. !(mdwc->otg_xceiv->flags & ENABLE_SECONDARY_PHY)) {
  2819. pr_info("dwc3-msm: sec_otg_init is called.\n");
  2820. sec_otg_init(mdwc, mdwc->otg_xceiv);
  2821. #ifdef CONFIG_USB_HOST_NOTIFY
  2822. get_vbus_detect_gpio(mdwc, &pdev->dev);
  2823. #endif
  2824. #if defined(CONFIG_SEC_K_PROJECT)
  2825. /* set gpio to enable redriver for USB3.0 */
  2826. gpio_tlmm_config(GPIO_CFG(sec_qcom_usb_rdrv, 0, GPIO_CFG_OUTPUT,
  2827. GPIO_CFG_NO_PULL, GPIO_CFG_2MA), 1);
  2828. gpio_set_value(sec_qcom_usb_rdrv,0);
  2829. #endif
  2830. /* Skip charger detection for simulator targets */
  2831. if (!mdwc->charger.skip_chg_detect) {
  2832. mdwc->charger.start_detection = dwc3_start_chg_det;
  2833. ret = dwc3_set_charger(mdwc->otg_xceiv->otg,
  2834. &mdwc->charger);
  2835. if (ret || !mdwc->charger.notify_detection_complete) {
  2836. dev_err(&pdev->dev,
  2837. "failed to register charger: %d\n",
  2838. ret);
  2839. goto put_xcvr;
  2840. }
  2841. }
  2842. if (mdwc->ext_xceiv.otg_capability)
  2843. mdwc->ext_xceiv.ext_block_reset = dwc3_msm_block_reset;
  2844. ret = dwc3_set_ext_xceiv(mdwc->otg_xceiv->otg,
  2845. &mdwc->ext_xceiv);
  2846. if (ret || !mdwc->ext_xceiv.notify_ext_events) {
  2847. dev_err(&pdev->dev, "failed to register xceiver: %d\n",
  2848. ret);
  2849. goto put_xcvr;
  2850. }
  2851. } else {
  2852. dev_dbg(&pdev->dev, "No OTG, DWC3 running in host only mode\n");
  2853. mdwc->host_mode = 1;
  2854. mdwc->vbus_otg = devm_regulator_get(&pdev->dev, "vbus_dwc3");
  2855. if (IS_ERR(mdwc->vbus_otg)) {
  2856. dev_dbg(&pdev->dev, "Failed to get vbus regulator\n");
  2857. mdwc->vbus_otg = 0;
  2858. } else {
  2859. ret = regulator_enable(mdwc->vbus_otg);
  2860. if (ret) {
  2861. mdwc->vbus_otg = 0;
  2862. dev_err(&pdev->dev, "Failed to enable vbus_otg\n");
  2863. }
  2864. }
  2865. mdwc->otg_xceiv = NULL;
  2866. }
  2867. if (mdwc->ext_xceiv.otg_capability && mdwc->charger.start_detection) {
  2868. ret = dwc3_msm_setup_cdev(mdwc);
  2869. if (ret)
  2870. dev_err(&pdev->dev, "Fail to setup dwc3 setup cdev\n");
  2871. }
  2872. device_init_wakeup(mdwc->dev, 1);
  2873. pm_stay_awake(mdwc->dev);
  2874. dwc3_msm_debugfs_init(mdwc);
  2875. return 0;
  2876. put_xcvr:
  2877. usb_put_transceiver(mdwc->otg_xceiv);
  2878. put_psupply:
  2879. if (mdwc->usb_psy.dev)
  2880. power_supply_unregister(&mdwc->usb_psy);
  2881. disable_hs_ldo:
  2882. dwc3_hsusb_ldo_enable(mdwc, 0);
  2883. free_hs_ldo_init:
  2884. dwc3_hsusb_ldo_init(mdwc, 0);
  2885. disable_hs_vddcx:
  2886. regulator_disable(mdwc->hsusb_vddcx);
  2887. unconfig_hs_vddcx:
  2888. dwc3_hsusb_config_vddcx(mdwc, 0);
  2889. disable_ss_ldo:
  2890. dwc3_ssusb_ldo_enable(mdwc, 0);
  2891. free_ss_ldo_init:
  2892. dwc3_ssusb_ldo_init(mdwc, 0);
  2893. disable_ss_vddcx:
  2894. regulator_disable(mdwc->ssusb_vddcx);
  2895. unconfig_ss_vddcx:
  2896. dwc3_ssusb_config_vddcx(mdwc, 0);
  2897. disable_ref_clk:
  2898. clk_disable_unprepare(mdwc->ref_clk);
  2899. disable_utmi_clk:
  2900. clk_disable_unprepare(mdwc->utmi_clk);
  2901. disable_sleep_a_clk:
  2902. clk_disable_unprepare(mdwc->hsphy_sleep_clk);
  2903. disable_sleep_clk:
  2904. clk_disable_unprepare(mdwc->sleep_clk);
  2905. disable_iface_clk:
  2906. clk_disable_unprepare(mdwc->iface_clk);
  2907. disable_core_clk:
  2908. clk_disable_unprepare(mdwc->core_clk);
  2909. disable_xo:
  2910. clk_disable_unprepare(mdwc->xo_clk);
  2911. put_xo:
  2912. clk_put(mdwc->xo_clk);
  2913. disable_dwc3_gdsc:
  2914. dwc3_msm_config_gdsc(mdwc, 0);
  2915. return ret;
  2916. }
  2917. static int __devexit dwc3_msm_remove(struct platform_device *pdev)
  2918. {
  2919. struct dwc3_msm *mdwc = platform_get_drvdata(pdev);
  2920. if (!mdwc->ext_chg_device) {
  2921. device_destroy(mdwc->ext_chg_class, mdwc->ext_chg_dev);
  2922. cdev_del(&mdwc->ext_chg_cdev);
  2923. class_destroy(mdwc->ext_chg_class);
  2924. unregister_chrdev_region(mdwc->ext_chg_dev, 1);
  2925. }
  2926. if (mdwc->id_adc_detect)
  2927. qpnp_adc_tm_usbid_end(mdwc->adc_tm_dev);
  2928. if (dwc3_debugfs_root)
  2929. debugfs_remove_recursive(dwc3_debugfs_root);
  2930. if (mdwc->otg_xceiv) {
  2931. dwc3_start_chg_det(&mdwc->charger, false);
  2932. usb_put_transceiver(mdwc->otg_xceiv);
  2933. }
  2934. if (mdwc->usb_psy.dev)
  2935. power_supply_unregister(&mdwc->usb_psy);
  2936. if (mdwc->vbus_otg)
  2937. regulator_disable(mdwc->vbus_otg);
  2938. pm_runtime_disable(mdwc->dev);
  2939. device_init_wakeup(mdwc->dev, 0);
  2940. dwc3_hsusb_ldo_enable(mdwc, 0);
  2941. dwc3_hsusb_ldo_init(mdwc, 0);
  2942. regulator_disable(mdwc->hsusb_vddcx);
  2943. dwc3_hsusb_config_vddcx(mdwc, 0);
  2944. dwc3_ssusb_ldo_enable(mdwc, 0);
  2945. dwc3_ssusb_ldo_init(mdwc, 0);
  2946. regulator_disable(mdwc->ssusb_vddcx);
  2947. dwc3_ssusb_config_vddcx(mdwc, 0);
  2948. clk_disable_unprepare(mdwc->core_clk);
  2949. clk_disable_unprepare(mdwc->iface_clk);
  2950. clk_disable_unprepare(mdwc->sleep_clk);
  2951. clk_disable_unprepare(mdwc->hsphy_sleep_clk);
  2952. clk_disable_unprepare(mdwc->ref_clk);
  2953. clk_disable_unprepare(mdwc->xo_clk);
  2954. clk_put(mdwc->xo_clk);
  2955. dwc3_msm_config_gdsc(mdwc, 0);
  2956. return 0;
  2957. }
  2958. static int dwc3_msm_pm_suspend(struct device *dev)
  2959. {
  2960. int ret = 0;
  2961. struct dwc3_msm *mdwc = dev_get_drvdata(dev);
  2962. #ifdef CONFIG_USB_DEBUG_DETEAILED_LOG
  2963. dev_info(dev, "dwc3-msm PM suspend\n");
  2964. #else
  2965. dev_dbg(dev, "dwc3-msm PM suspend\n");
  2966. #endif
  2967. flush_delayed_work_sync(&mdwc->resume_work);
  2968. if (!atomic_read(&mdwc->in_lpm)) {
  2969. dev_err(mdwc->dev, "Abort PM suspend!! (USB is outside LPM)\n");
  2970. return -EBUSY;
  2971. }
  2972. ret = dwc3_msm_suspend(mdwc);
  2973. if (!ret)
  2974. atomic_set(&mdwc->pm_suspended, 1);
  2975. return ret;
  2976. }
  2977. static int dwc3_msm_pm_resume(struct device *dev)
  2978. {
  2979. int ret = 0;
  2980. struct dwc3_msm *mdwc = dev_get_drvdata(dev);
  2981. #ifdef CONFIG_USB_DEBUG_DETEAILED_LOG
  2982. dev_info(dev, "dwc3-msm PM resume\n");
  2983. #else
  2984. dev_dbg(dev, "dwc3-msm PM resume\n");
  2985. #endif
  2986. atomic_set(&mdwc->pm_suspended, 0);
  2987. if (mdwc->resume_pending) {
  2988. mdwc->resume_pending = false;
  2989. ret = dwc3_msm_resume(mdwc);
  2990. /* Update runtime PM status */
  2991. pm_runtime_disable(dev);
  2992. pm_runtime_set_active(dev);
  2993. pm_runtime_enable(dev);
  2994. /* Let OTG know about resume event and update pm_count */
  2995. if (mdwc->otg_xceiv) {
  2996. mdwc->ext_xceiv.notify_ext_events(mdwc->otg_xceiv->otg,
  2997. DWC3_EVENT_PHY_RESUME);
  2998. if (mdwc->ext_xceiv.otg_capability)
  2999. mdwc->ext_xceiv.notify_ext_events(
  3000. mdwc->otg_xceiv->otg,
  3001. DWC3_EVENT_XCEIV_STATE);
  3002. }
  3003. }
  3004. return ret;
  3005. }
  3006. static int dwc3_msm_runtime_idle(struct device *dev)
  3007. {
  3008. struct dwc3_msm *mdwc = dev_get_drvdata(dev);
  3009. #ifdef CONFIG_USB_DEBUG_DETEAILED_LOG
  3010. dev_info(dev, "DWC3-msm runtime idle\n");
  3011. #else
  3012. dev_dbg(dev, "DWC3-msm runtime idle\n");
  3013. #endif
  3014. if (mdwc->ext_chg_active) {
  3015. dev_dbg(dev, "Deferring LPM\n");
  3016. /*
  3017. * Charger detection may happen in user space.
  3018. * Delay entering LPM by 3 sec. Otherwise we
  3019. * have to exit LPM when user space begins
  3020. * charger detection.
  3021. *
  3022. * This timer will be canceled when user space
  3023. * votes against LPM by incrementing PM usage
  3024. * counter. We enter low power mode when
  3025. * PM usage counter is decremented.
  3026. */
  3027. pm_schedule_suspend(dev, 3000);
  3028. return -EAGAIN;
  3029. }
  3030. return 0;
  3031. }
  3032. static int dwc3_msm_runtime_suspend(struct device *dev)
  3033. {
  3034. struct dwc3_msm *mdwc = dev_get_drvdata(dev);
  3035. #ifdef CONFIG_USB_DEBUG_DETEAILED_LOG
  3036. dev_info(dev, "DWC3-msm runtime suspend\n");
  3037. #else
  3038. dev_dbg(dev, "DWC3-msm runtime suspend\n");
  3039. #endif
  3040. return dwc3_msm_suspend(mdwc);
  3041. }
  3042. static int dwc3_msm_runtime_resume(struct device *dev)
  3043. {
  3044. struct dwc3_msm *mdwc = dev_get_drvdata(dev);
  3045. #ifdef CONFIG_USB_DEBUG_DETEAILED_LOG
  3046. dev_info(dev, "DWC3-msm runtime resume\n");
  3047. #else
  3048. dev_dbg(dev, "DWC3-msm runtime resume\n");
  3049. #endif
  3050. return dwc3_msm_resume(mdwc);
  3051. }
  3052. static const struct dev_pm_ops dwc3_msm_dev_pm_ops = {
  3053. SET_SYSTEM_SLEEP_PM_OPS(dwc3_msm_pm_suspend, dwc3_msm_pm_resume)
  3054. SET_RUNTIME_PM_OPS(dwc3_msm_runtime_suspend, dwc3_msm_runtime_resume,
  3055. dwc3_msm_runtime_idle)
  3056. };
  3057. static const struct of_device_id of_dwc3_matach[] = {
  3058. {
  3059. .compatible = "qcom,dwc-usb3-msm",
  3060. },
  3061. { },
  3062. };
  3063. MODULE_DEVICE_TABLE(of, of_dwc3_matach);
  3064. static struct platform_driver dwc3_msm_driver = {
  3065. .probe = dwc3_msm_probe,
  3066. .remove = __devexit_p(dwc3_msm_remove),
  3067. .driver = {
  3068. .name = "msm-dwc3",
  3069. .pm = &dwc3_msm_dev_pm_ops,
  3070. .of_match_table = of_dwc3_matach,
  3071. },
  3072. };
  3073. MODULE_LICENSE("GPL v2");
  3074. MODULE_DESCRIPTION("DesignWare USB3 MSM Glue Layer");
  3075. static int __devinit dwc3_msm_init(void)
  3076. {
  3077. return platform_driver_register(&dwc3_msm_driver);
  3078. }
  3079. module_init(dwc3_msm_init);
  3080. static void __exit dwc3_msm_exit(void)
  3081. {
  3082. platform_driver_unregister(&dwc3_msm_driver);
  3083. }
  3084. module_exit(dwc3_msm_exit);