qcom_spmi-regulator.c 78 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
  4. */
  5. #include <linux/module.h>
  6. #include <linux/delay.h>
  7. #include <linux/devm-helpers.h>
  8. #include <linux/err.h>
  9. #include <linux/kernel.h>
  10. #include <linux/interrupt.h>
  11. #include <linux/bitops.h>
  12. #include <linux/slab.h>
  13. #include <linux/of.h>
  14. #include <linux/of_device.h>
  15. #include <linux/platform_device.h>
  16. #include <linux/ktime.h>
  17. #include <linux/regulator/driver.h>
  18. #include <linux/regmap.h>
  19. #include <linux/list.h>
  20. #include <linux/mfd/syscon.h>
  21. #include <linux/io.h>
  22. /* Pin control enable input pins. */
  23. #define SPMI_REGULATOR_PIN_CTRL_ENABLE_NONE 0x00
  24. #define SPMI_REGULATOR_PIN_CTRL_ENABLE_EN0 0x01
  25. #define SPMI_REGULATOR_PIN_CTRL_ENABLE_EN1 0x02
  26. #define SPMI_REGULATOR_PIN_CTRL_ENABLE_EN2 0x04
  27. #define SPMI_REGULATOR_PIN_CTRL_ENABLE_EN3 0x08
  28. #define SPMI_REGULATOR_PIN_CTRL_ENABLE_HW_DEFAULT 0x10
  29. /* Pin control high power mode input pins. */
  30. #define SPMI_REGULATOR_PIN_CTRL_HPM_NONE 0x00
  31. #define SPMI_REGULATOR_PIN_CTRL_HPM_EN0 0x01
  32. #define SPMI_REGULATOR_PIN_CTRL_HPM_EN1 0x02
  33. #define SPMI_REGULATOR_PIN_CTRL_HPM_EN2 0x04
  34. #define SPMI_REGULATOR_PIN_CTRL_HPM_EN3 0x08
  35. #define SPMI_REGULATOR_PIN_CTRL_HPM_SLEEP_B 0x10
  36. #define SPMI_REGULATOR_PIN_CTRL_HPM_HW_DEFAULT 0x20
  37. /*
  38. * Used with enable parameters to specify that hardware default register values
  39. * should be left unaltered.
  40. */
  41. #define SPMI_REGULATOR_USE_HW_DEFAULT 2
  42. /* Soft start strength of a voltage switch type regulator */
  43. enum spmi_vs_soft_start_str {
  44. SPMI_VS_SOFT_START_STR_0P05_UA = 0,
  45. SPMI_VS_SOFT_START_STR_0P25_UA,
  46. SPMI_VS_SOFT_START_STR_0P55_UA,
  47. SPMI_VS_SOFT_START_STR_0P75_UA,
  48. SPMI_VS_SOFT_START_STR_HW_DEFAULT,
  49. };
  50. /**
  51. * struct spmi_regulator_init_data - spmi-regulator initialization data
  52. * @pin_ctrl_enable: Bit mask specifying which hardware pins should be
  53. * used to enable the regulator, if any
  54. * Value should be an ORing of
  55. * SPMI_REGULATOR_PIN_CTRL_ENABLE_* constants. If
  56. * the bit specified by
  57. * SPMI_REGULATOR_PIN_CTRL_ENABLE_HW_DEFAULT is
  58. * set, then pin control enable hardware registers
  59. * will not be modified.
  60. * @pin_ctrl_hpm: Bit mask specifying which hardware pins should be
  61. * used to force the regulator into high power
  62. * mode, if any
  63. * Value should be an ORing of
  64. * SPMI_REGULATOR_PIN_CTRL_HPM_* constants. If
  65. * the bit specified by
  66. * SPMI_REGULATOR_PIN_CTRL_HPM_HW_DEFAULT is
  67. * set, then pin control mode hardware registers
  68. * will not be modified.
  69. * @vs_soft_start_strength: This parameter sets the soft start strength for
  70. * voltage switch type regulators. Its value
  71. * should be one of SPMI_VS_SOFT_START_STR_*. If
  72. * its value is SPMI_VS_SOFT_START_STR_HW_DEFAULT,
  73. * then the soft start strength will be left at its
  74. * default hardware value.
  75. */
  76. struct spmi_regulator_init_data {
  77. unsigned pin_ctrl_enable;
  78. unsigned pin_ctrl_hpm;
  79. enum spmi_vs_soft_start_str vs_soft_start_strength;
  80. };
  81. /* These types correspond to unique register layouts. */
  82. enum spmi_regulator_logical_type {
  83. SPMI_REGULATOR_LOGICAL_TYPE_SMPS,
  84. SPMI_REGULATOR_LOGICAL_TYPE_LDO,
  85. SPMI_REGULATOR_LOGICAL_TYPE_VS,
  86. SPMI_REGULATOR_LOGICAL_TYPE_BOOST,
  87. SPMI_REGULATOR_LOGICAL_TYPE_FTSMPS,
  88. SPMI_REGULATOR_LOGICAL_TYPE_BOOST_BYP,
  89. SPMI_REGULATOR_LOGICAL_TYPE_LN_LDO,
  90. SPMI_REGULATOR_LOGICAL_TYPE_ULT_LO_SMPS,
  91. SPMI_REGULATOR_LOGICAL_TYPE_ULT_HO_SMPS,
  92. SPMI_REGULATOR_LOGICAL_TYPE_ULT_LDO,
  93. SPMI_REGULATOR_LOGICAL_TYPE_FTSMPS426,
  94. SPMI_REGULATOR_LOGICAL_TYPE_HFS430,
  95. SPMI_REGULATOR_LOGICAL_TYPE_FTSMPS3,
  96. SPMI_REGULATOR_LOGICAL_TYPE_LDO_510,
  97. SPMI_REGULATOR_LOGICAL_TYPE_HFSMPS,
  98. };
  99. enum spmi_regulator_type {
  100. SPMI_REGULATOR_TYPE_BUCK = 0x03,
  101. SPMI_REGULATOR_TYPE_LDO = 0x04,
  102. SPMI_REGULATOR_TYPE_VS = 0x05,
  103. SPMI_REGULATOR_TYPE_BOOST = 0x1b,
  104. SPMI_REGULATOR_TYPE_FTS = 0x1c,
  105. SPMI_REGULATOR_TYPE_BOOST_BYP = 0x1f,
  106. SPMI_REGULATOR_TYPE_ULT_LDO = 0x21,
  107. SPMI_REGULATOR_TYPE_ULT_BUCK = 0x22,
  108. };
  109. enum spmi_regulator_subtype {
  110. SPMI_REGULATOR_SUBTYPE_GP_CTL = 0x08,
  111. SPMI_REGULATOR_SUBTYPE_RF_CTL = 0x09,
  112. SPMI_REGULATOR_SUBTYPE_N50 = 0x01,
  113. SPMI_REGULATOR_SUBTYPE_N150 = 0x02,
  114. SPMI_REGULATOR_SUBTYPE_N300 = 0x03,
  115. SPMI_REGULATOR_SUBTYPE_N600 = 0x04,
  116. SPMI_REGULATOR_SUBTYPE_N1200 = 0x05,
  117. SPMI_REGULATOR_SUBTYPE_N600_ST = 0x06,
  118. SPMI_REGULATOR_SUBTYPE_N1200_ST = 0x07,
  119. SPMI_REGULATOR_SUBTYPE_N900_ST = 0x14,
  120. SPMI_REGULATOR_SUBTYPE_N300_ST = 0x15,
  121. SPMI_REGULATOR_SUBTYPE_P50 = 0x08,
  122. SPMI_REGULATOR_SUBTYPE_P150 = 0x09,
  123. SPMI_REGULATOR_SUBTYPE_P300 = 0x0a,
  124. SPMI_REGULATOR_SUBTYPE_P600 = 0x0b,
  125. SPMI_REGULATOR_SUBTYPE_P1200 = 0x0c,
  126. SPMI_REGULATOR_SUBTYPE_LN = 0x10,
  127. SPMI_REGULATOR_SUBTYPE_LV_P50 = 0x28,
  128. SPMI_REGULATOR_SUBTYPE_LV_P150 = 0x29,
  129. SPMI_REGULATOR_SUBTYPE_LV_P300 = 0x2a,
  130. SPMI_REGULATOR_SUBTYPE_LV_P600 = 0x2b,
  131. SPMI_REGULATOR_SUBTYPE_LV_P1200 = 0x2c,
  132. SPMI_REGULATOR_SUBTYPE_LV_P450 = 0x2d,
  133. SPMI_REGULATOR_SUBTYPE_HT_N300_ST = 0x30,
  134. SPMI_REGULATOR_SUBTYPE_HT_N600_ST = 0x31,
  135. SPMI_REGULATOR_SUBTYPE_HT_N1200_ST = 0x32,
  136. SPMI_REGULATOR_SUBTYPE_HT_LVP150 = 0x3b,
  137. SPMI_REGULATOR_SUBTYPE_HT_LVP300 = 0x3c,
  138. SPMI_REGULATOR_SUBTYPE_L660_N300_ST = 0x42,
  139. SPMI_REGULATOR_SUBTYPE_L660_N600_ST = 0x43,
  140. SPMI_REGULATOR_SUBTYPE_L660_P50 = 0x46,
  141. SPMI_REGULATOR_SUBTYPE_L660_P150 = 0x47,
  142. SPMI_REGULATOR_SUBTYPE_L660_P600 = 0x49,
  143. SPMI_REGULATOR_SUBTYPE_L660_LVP150 = 0x4d,
  144. SPMI_REGULATOR_SUBTYPE_L660_LVP600 = 0x4f,
  145. SPMI_REGULATOR_SUBTYPE_LV100 = 0x01,
  146. SPMI_REGULATOR_SUBTYPE_LV300 = 0x02,
  147. SPMI_REGULATOR_SUBTYPE_MV300 = 0x08,
  148. SPMI_REGULATOR_SUBTYPE_MV500 = 0x09,
  149. SPMI_REGULATOR_SUBTYPE_HDMI = 0x10,
  150. SPMI_REGULATOR_SUBTYPE_OTG = 0x11,
  151. SPMI_REGULATOR_SUBTYPE_5V_BOOST = 0x01,
  152. SPMI_REGULATOR_SUBTYPE_FTS_CTL = 0x08,
  153. SPMI_REGULATOR_SUBTYPE_FTS2p5_CTL = 0x09,
  154. SPMI_REGULATOR_SUBTYPE_FTS426_CTL = 0x0a,
  155. SPMI_REGULATOR_SUBTYPE_BB_2A = 0x01,
  156. SPMI_REGULATOR_SUBTYPE_ULT_HF_CTL1 = 0x0d,
  157. SPMI_REGULATOR_SUBTYPE_ULT_HF_CTL2 = 0x0e,
  158. SPMI_REGULATOR_SUBTYPE_ULT_HF_CTL3 = 0x0f,
  159. SPMI_REGULATOR_SUBTYPE_ULT_HF_CTL4 = 0x10,
  160. SPMI_REGULATOR_SUBTYPE_HFS430 = 0x0a,
  161. SPMI_REGULATOR_SUBTYPE_HT_P150 = 0x35,
  162. SPMI_REGULATOR_SUBTYPE_HT_P600 = 0x3d,
  163. SPMI_REGULATOR_SUBTYPE_HFSMPS_510 = 0x0a,
  164. SPMI_REGULATOR_SUBTYPE_FTSMPS_510 = 0x0b,
  165. SPMI_REGULATOR_SUBTYPE_LV_P150_510 = 0x71,
  166. SPMI_REGULATOR_SUBTYPE_LV_P300_510 = 0x72,
  167. SPMI_REGULATOR_SUBTYPE_LV_P600_510 = 0x73,
  168. SPMI_REGULATOR_SUBTYPE_N300_510 = 0x6a,
  169. SPMI_REGULATOR_SUBTYPE_N600_510 = 0x6b,
  170. SPMI_REGULATOR_SUBTYPE_N1200_510 = 0x6c,
  171. SPMI_REGULATOR_SUBTYPE_MV_P50_510 = 0x7a,
  172. SPMI_REGULATOR_SUBTYPE_MV_P150_510 = 0x7b,
  173. SPMI_REGULATOR_SUBTYPE_MV_P600_510 = 0x7d,
  174. };
  175. enum spmi_common_regulator_registers {
  176. SPMI_COMMON_REG_DIG_MAJOR_REV = 0x01,
  177. SPMI_COMMON_REG_TYPE = 0x04,
  178. SPMI_COMMON_REG_SUBTYPE = 0x05,
  179. SPMI_COMMON_REG_VOLTAGE_RANGE = 0x40,
  180. SPMI_COMMON_REG_VOLTAGE_SET = 0x41,
  181. SPMI_COMMON_REG_MODE = 0x45,
  182. SPMI_COMMON_REG_ENABLE = 0x46,
  183. SPMI_COMMON_REG_PULL_DOWN = 0x48,
  184. SPMI_COMMON_REG_SOFT_START = 0x4c,
  185. SPMI_COMMON_REG_STEP_CTRL = 0x61,
  186. };
  187. /*
  188. * Second common register layout used by newer devices starting with ftsmps426
  189. * Note that some of the registers from the first common layout remain
  190. * unchanged and their definition is not duplicated.
  191. */
  192. enum spmi_ftsmps426_regulator_registers {
  193. SPMI_FTSMPS426_REG_VOLTAGE_LSB = 0x40,
  194. SPMI_FTSMPS426_REG_VOLTAGE_MSB = 0x41,
  195. SPMI_FTSMPS426_REG_VOLTAGE_ULS_LSB = 0x68,
  196. SPMI_FTSMPS426_REG_VOLTAGE_ULS_MSB = 0x69,
  197. };
  198. /*
  199. * Third common register layout
  200. */
  201. enum spmi_hfsmps_regulator_registers {
  202. SPMI_HFSMPS_REG_STEP_CTRL = 0x3c,
  203. SPMI_HFSMPS_REG_PULL_DOWN = 0xa0,
  204. };
  205. enum spmi_vs_registers {
  206. SPMI_VS_REG_OCP = 0x4a,
  207. SPMI_VS_REG_SOFT_START = 0x4c,
  208. };
  209. enum spmi_boost_registers {
  210. SPMI_BOOST_REG_CURRENT_LIMIT = 0x4a,
  211. };
  212. enum spmi_boost_byp_registers {
  213. SPMI_BOOST_BYP_REG_CURRENT_LIMIT = 0x4b,
  214. };
  215. enum spmi_saw3_registers {
  216. SAW3_SECURE = 0x00,
  217. SAW3_ID = 0x04,
  218. SAW3_SPM_STS = 0x0C,
  219. SAW3_AVS_STS = 0x10,
  220. SAW3_PMIC_STS = 0x14,
  221. SAW3_RST = 0x18,
  222. SAW3_VCTL = 0x1C,
  223. SAW3_AVS_CTL = 0x20,
  224. SAW3_AVS_LIMIT = 0x24,
  225. SAW3_AVS_DLY = 0x28,
  226. SAW3_AVS_HYSTERESIS = 0x2C,
  227. SAW3_SPM_STS2 = 0x38,
  228. SAW3_SPM_PMIC_DATA_3 = 0x4C,
  229. SAW3_VERSION = 0xFD0,
  230. };
  231. /* Used for indexing into ctrl_reg. These are offets from 0x40 */
  232. enum spmi_common_control_register_index {
  233. SPMI_COMMON_IDX_VOLTAGE_RANGE = 0,
  234. SPMI_COMMON_IDX_VOLTAGE_SET = 1,
  235. SPMI_COMMON_IDX_MODE = 5,
  236. SPMI_COMMON_IDX_ENABLE = 6,
  237. };
  238. /* Common regulator control register layout */
  239. #define SPMI_COMMON_ENABLE_MASK 0x80
  240. #define SPMI_COMMON_ENABLE 0x80
  241. #define SPMI_COMMON_DISABLE 0x00
  242. #define SPMI_COMMON_ENABLE_FOLLOW_HW_EN3_MASK 0x08
  243. #define SPMI_COMMON_ENABLE_FOLLOW_HW_EN2_MASK 0x04
  244. #define SPMI_COMMON_ENABLE_FOLLOW_HW_EN1_MASK 0x02
  245. #define SPMI_COMMON_ENABLE_FOLLOW_HW_EN0_MASK 0x01
  246. #define SPMI_COMMON_ENABLE_FOLLOW_ALL_MASK 0x0f
  247. /* Common regulator mode register layout */
  248. #define SPMI_COMMON_MODE_HPM_MASK 0x80
  249. #define SPMI_COMMON_MODE_AUTO_MASK 0x40
  250. #define SPMI_COMMON_MODE_BYPASS_MASK 0x20
  251. #define SPMI_COMMON_MODE_FOLLOW_AWAKE_MASK 0x10
  252. #define SPMI_COMMON_MODE_FOLLOW_HW_EN3_MASK 0x08
  253. #define SPMI_COMMON_MODE_FOLLOW_HW_EN2_MASK 0x04
  254. #define SPMI_COMMON_MODE_FOLLOW_HW_EN1_MASK 0x02
  255. #define SPMI_COMMON_MODE_FOLLOW_HW_EN0_MASK 0x01
  256. #define SPMI_COMMON_MODE_FOLLOW_ALL_MASK 0x1f
  257. #define SPMI_FTSMPS426_MODE_BYPASS_MASK 3
  258. #define SPMI_FTSMPS426_MODE_RETENTION_MASK 4
  259. #define SPMI_FTSMPS426_MODE_LPM_MASK 5
  260. #define SPMI_FTSMPS426_MODE_AUTO_MASK 6
  261. #define SPMI_FTSMPS426_MODE_HPM_MASK 7
  262. #define SPMI_FTSMPS426_MODE_MASK 0x07
  263. /* Third common regulator mode register values */
  264. #define SPMI_HFSMPS_MODE_BYPASS_MASK 2
  265. #define SPMI_HFSMPS_MODE_RETENTION_MASK 3
  266. #define SPMI_HFSMPS_MODE_LPM_MASK 4
  267. #define SPMI_HFSMPS_MODE_AUTO_MASK 6
  268. #define SPMI_HFSMPS_MODE_HPM_MASK 7
  269. #define SPMI_HFSMPS_MODE_MASK 0x07
  270. /* Common regulator pull down control register layout */
  271. #define SPMI_COMMON_PULL_DOWN_ENABLE_MASK 0x80
  272. /* LDO regulator current limit control register layout */
  273. #define SPMI_LDO_CURRENT_LIMIT_ENABLE_MASK 0x80
  274. /* LDO regulator soft start control register layout */
  275. #define SPMI_LDO_SOFT_START_ENABLE_MASK 0x80
  276. /* VS regulator over current protection control register layout */
  277. #define SPMI_VS_OCP_OVERRIDE 0x01
  278. #define SPMI_VS_OCP_NO_OVERRIDE 0x00
  279. /* VS regulator soft start control register layout */
  280. #define SPMI_VS_SOFT_START_ENABLE_MASK 0x80
  281. #define SPMI_VS_SOFT_START_SEL_MASK 0x03
  282. /* Boost regulator current limit control register layout */
  283. #define SPMI_BOOST_CURRENT_LIMIT_ENABLE_MASK 0x80
  284. #define SPMI_BOOST_CURRENT_LIMIT_MASK 0x07
  285. #define SPMI_VS_OCP_DEFAULT_MAX_RETRIES 10
  286. #define SPMI_VS_OCP_DEFAULT_RETRY_DELAY_MS 30
  287. #define SPMI_VS_OCP_FALL_DELAY_US 90
  288. #define SPMI_VS_OCP_FAULT_DELAY_US 20000
  289. #define SPMI_FTSMPS_STEP_CTRL_STEP_MASK 0x18
  290. #define SPMI_FTSMPS_STEP_CTRL_STEP_SHIFT 3
  291. #define SPMI_FTSMPS_STEP_CTRL_DELAY_MASK 0x07
  292. #define SPMI_FTSMPS_STEP_CTRL_DELAY_SHIFT 0
  293. /* Clock rate in kHz of the FTSMPS regulator reference clock. */
  294. #define SPMI_FTSMPS_CLOCK_RATE 19200
  295. /* Minimum voltage stepper delay for each step. */
  296. #define SPMI_FTSMPS_STEP_DELAY 8
  297. #define SPMI_DEFAULT_STEP_DELAY 20
  298. /*
  299. * The ratio SPMI_FTSMPS_STEP_MARGIN_NUM/SPMI_FTSMPS_STEP_MARGIN_DEN is used to
  300. * adjust the step rate in order to account for oscillator variance.
  301. */
  302. #define SPMI_FTSMPS_STEP_MARGIN_NUM 4
  303. #define SPMI_FTSMPS_STEP_MARGIN_DEN 5
  304. /* slew_rate has units of uV/us. */
  305. #define SPMI_HFSMPS_SLEW_RATE_38p4 38400
  306. #define SPMI_FTSMPS426_STEP_CTRL_DELAY_MASK 0x03
  307. #define SPMI_FTSMPS426_STEP_CTRL_DELAY_SHIFT 0
  308. /* Clock rate in kHz of the FTSMPS426 regulator reference clock. */
  309. #define SPMI_FTSMPS426_CLOCK_RATE 4800
  310. #define SPMI_HFS430_CLOCK_RATE 1600
  311. /* Minimum voltage stepper delay for each step. */
  312. #define SPMI_FTSMPS426_STEP_DELAY 2
  313. /*
  314. * The ratio SPMI_FTSMPS426_STEP_MARGIN_NUM/SPMI_FTSMPS426_STEP_MARGIN_DEN is
  315. * used to adjust the step rate in order to account for oscillator variance.
  316. */
  317. #define SPMI_FTSMPS426_STEP_MARGIN_NUM 10
  318. #define SPMI_FTSMPS426_STEP_MARGIN_DEN 11
  319. /* VSET value to decide the range of ULT SMPS */
  320. #define ULT_SMPS_RANGE_SPLIT 0x60
  321. /**
  322. * struct spmi_voltage_range - regulator set point voltage mapping description
  323. * @min_uV: Minimum programmable output voltage resulting from
  324. * set point register value 0x00
  325. * @max_uV: Maximum programmable output voltage
  326. * @step_uV: Output voltage increase resulting from the set point
  327. * register value increasing by 1
  328. * @set_point_min_uV: Minimum allowed voltage
  329. * @set_point_max_uV: Maximum allowed voltage. This may be tweaked in order
  330. * to pick which range should be used in the case of
  331. * overlapping set points.
  332. * @n_voltages: Number of preferred voltage set points present in this
  333. * range
  334. * @range_sel: Voltage range register value corresponding to this range
  335. *
  336. * The following relationships must be true for the values used in this struct:
  337. * (max_uV - min_uV) % step_uV == 0
  338. * (set_point_min_uV - min_uV) % step_uV == 0*
  339. * (set_point_max_uV - min_uV) % step_uV == 0*
  340. * n_voltages = (set_point_max_uV - set_point_min_uV) / step_uV + 1
  341. *
  342. * *Note, set_point_min_uV == set_point_max_uV == 0 is allowed in order to
  343. * specify that the voltage range has meaning, but is not preferred.
  344. */
  345. struct spmi_voltage_range {
  346. int min_uV;
  347. int max_uV;
  348. int step_uV;
  349. int set_point_min_uV;
  350. int set_point_max_uV;
  351. unsigned n_voltages;
  352. u8 range_sel;
  353. };
  354. /*
  355. * The ranges specified in the spmi_voltage_set_points struct must be listed
  356. * so that range[i].set_point_max_uV < range[i+1].set_point_min_uV.
  357. */
  358. struct spmi_voltage_set_points {
  359. struct spmi_voltage_range *range;
  360. int count;
  361. unsigned n_voltages;
  362. };
  363. struct spmi_regulator {
  364. struct regulator_desc desc;
  365. struct device *dev;
  366. struct delayed_work ocp_work;
  367. struct regmap *regmap;
  368. struct spmi_voltage_set_points *set_points;
  369. enum spmi_regulator_logical_type logical_type;
  370. int ocp_irq;
  371. int ocp_count;
  372. int ocp_max_retries;
  373. int ocp_retry_delay_ms;
  374. int hpm_min_load;
  375. int slew_rate;
  376. ktime_t vs_enable_time;
  377. u16 base;
  378. struct list_head node;
  379. };
  380. struct spmi_regulator_mapping {
  381. enum spmi_regulator_type type;
  382. enum spmi_regulator_subtype subtype;
  383. enum spmi_regulator_logical_type logical_type;
  384. u32 revision_min;
  385. u32 revision_max;
  386. const struct regulator_ops *ops;
  387. struct spmi_voltage_set_points *set_points;
  388. int hpm_min_load;
  389. };
  390. struct spmi_regulator_data {
  391. const char *name;
  392. u16 base;
  393. const char *supply;
  394. const char *ocp;
  395. u16 force_type;
  396. };
  397. #define SPMI_VREG(_type, _subtype, _dig_major_min, _dig_major_max, \
  398. _logical_type, _ops_val, _set_points_val, _hpm_min_load) \
  399. { \
  400. .type = SPMI_REGULATOR_TYPE_##_type, \
  401. .subtype = SPMI_REGULATOR_SUBTYPE_##_subtype, \
  402. .revision_min = _dig_major_min, \
  403. .revision_max = _dig_major_max, \
  404. .logical_type = SPMI_REGULATOR_LOGICAL_TYPE_##_logical_type, \
  405. .ops = &spmi_##_ops_val##_ops, \
  406. .set_points = &_set_points_val##_set_points, \
  407. .hpm_min_load = _hpm_min_load, \
  408. }
  409. #define SPMI_VREG_VS(_subtype, _dig_major_min, _dig_major_max) \
  410. { \
  411. .type = SPMI_REGULATOR_TYPE_VS, \
  412. .subtype = SPMI_REGULATOR_SUBTYPE_##_subtype, \
  413. .revision_min = _dig_major_min, \
  414. .revision_max = _dig_major_max, \
  415. .logical_type = SPMI_REGULATOR_LOGICAL_TYPE_VS, \
  416. .ops = &spmi_vs_ops, \
  417. }
  418. #define SPMI_VOLTAGE_RANGE(_range_sel, _min_uV, _set_point_min_uV, \
  419. _set_point_max_uV, _max_uV, _step_uV) \
  420. { \
  421. .min_uV = _min_uV, \
  422. .max_uV = _max_uV, \
  423. .set_point_min_uV = _set_point_min_uV, \
  424. .set_point_max_uV = _set_point_max_uV, \
  425. .step_uV = _step_uV, \
  426. .range_sel = _range_sel, \
  427. }
  428. #define DEFINE_SPMI_SET_POINTS(name) \
  429. struct spmi_voltage_set_points name##_set_points = { \
  430. .range = name##_ranges, \
  431. .count = ARRAY_SIZE(name##_ranges), \
  432. }
  433. /*
  434. * These tables contain the physically available PMIC regulator voltage setpoint
  435. * ranges. Where two ranges overlap in hardware, one of the ranges is trimmed
  436. * to ensure that the setpoints available to software are monotonically
  437. * increasing and unique. The set_voltage callback functions expect these
  438. * properties to hold.
  439. */
  440. static struct spmi_voltage_range pldo_ranges[] = {
  441. SPMI_VOLTAGE_RANGE(2, 750000, 750000, 1537500, 1537500, 12500),
  442. SPMI_VOLTAGE_RANGE(3, 1500000, 1550000, 3075000, 3075000, 25000),
  443. SPMI_VOLTAGE_RANGE(4, 1750000, 3100000, 4900000, 4900000, 50000),
  444. };
  445. static struct spmi_voltage_range nldo1_ranges[] = {
  446. SPMI_VOLTAGE_RANGE(2, 750000, 750000, 1537500, 1537500, 12500),
  447. };
  448. static struct spmi_voltage_range nldo2_ranges[] = {
  449. SPMI_VOLTAGE_RANGE(0, 375000, 0, 0, 1537500, 12500),
  450. SPMI_VOLTAGE_RANGE(1, 375000, 375000, 768750, 768750, 6250),
  451. SPMI_VOLTAGE_RANGE(2, 750000, 775000, 1537500, 1537500, 12500),
  452. };
  453. static struct spmi_voltage_range nldo3_ranges[] = {
  454. SPMI_VOLTAGE_RANGE(0, 375000, 375000, 1537500, 1537500, 12500),
  455. SPMI_VOLTAGE_RANGE(1, 375000, 0, 0, 1537500, 12500),
  456. SPMI_VOLTAGE_RANGE(2, 750000, 0, 0, 1537500, 12500),
  457. };
  458. static struct spmi_voltage_range ln_ldo_ranges[] = {
  459. SPMI_VOLTAGE_RANGE(1, 690000, 690000, 1110000, 1110000, 60000),
  460. SPMI_VOLTAGE_RANGE(0, 1380000, 1380000, 2220000, 2220000, 120000),
  461. };
  462. static struct spmi_voltage_range smps_ranges[] = {
  463. SPMI_VOLTAGE_RANGE(0, 375000, 375000, 1562500, 1562500, 12500),
  464. SPMI_VOLTAGE_RANGE(1, 1550000, 1575000, 3125000, 3125000, 25000),
  465. };
  466. static struct spmi_voltage_range ftsmps_ranges[] = {
  467. SPMI_VOLTAGE_RANGE(0, 0, 350000, 1275000, 1275000, 5000),
  468. SPMI_VOLTAGE_RANGE(1, 0, 1280000, 2040000, 2040000, 10000),
  469. };
  470. static struct spmi_voltage_range ftsmps2p5_ranges[] = {
  471. SPMI_VOLTAGE_RANGE(0, 80000, 350000, 1355000, 1355000, 5000),
  472. SPMI_VOLTAGE_RANGE(1, 160000, 1360000, 2200000, 2200000, 10000),
  473. };
  474. static struct spmi_voltage_range ftsmps426_ranges[] = {
  475. SPMI_VOLTAGE_RANGE(0, 0, 320000, 1352000, 1352000, 4000),
  476. };
  477. static struct spmi_voltage_range boost_ranges[] = {
  478. SPMI_VOLTAGE_RANGE(0, 4000000, 4000000, 5550000, 5550000, 50000),
  479. };
  480. static struct spmi_voltage_range boost_byp_ranges[] = {
  481. SPMI_VOLTAGE_RANGE(0, 2500000, 2500000, 5200000, 5650000, 50000),
  482. };
  483. static struct spmi_voltage_range ult_lo_smps_ranges[] = {
  484. SPMI_VOLTAGE_RANGE(0, 375000, 375000, 1562500, 1562500, 12500),
  485. SPMI_VOLTAGE_RANGE(1, 750000, 0, 0, 1525000, 25000),
  486. };
  487. static struct spmi_voltage_range ult_ho_smps_ranges[] = {
  488. SPMI_VOLTAGE_RANGE(0, 1550000, 1550000, 2325000, 2325000, 25000),
  489. };
  490. static struct spmi_voltage_range ult_nldo_ranges[] = {
  491. SPMI_VOLTAGE_RANGE(0, 375000, 375000, 1537500, 1537500, 12500),
  492. };
  493. static struct spmi_voltage_range ult_pldo_ranges[] = {
  494. SPMI_VOLTAGE_RANGE(0, 1750000, 1750000, 3337500, 3337500, 12500),
  495. };
  496. static struct spmi_voltage_range pldo660_ranges[] = {
  497. SPMI_VOLTAGE_RANGE(0, 1504000, 1504000, 3544000, 3544000, 8000),
  498. };
  499. static struct spmi_voltage_range nldo660_ranges[] = {
  500. SPMI_VOLTAGE_RANGE(0, 320000, 320000, 1304000, 1304000, 8000),
  501. };
  502. static struct spmi_voltage_range ht_lvpldo_ranges[] = {
  503. SPMI_VOLTAGE_RANGE(0, 1504000, 1504000, 2000000, 2000000, 8000),
  504. };
  505. static struct spmi_voltage_range ht_nldo_ranges[] = {
  506. SPMI_VOLTAGE_RANGE(0, 312000, 312000, 1304000, 1304000, 8000),
  507. };
  508. static struct spmi_voltage_range hfs430_ranges[] = {
  509. SPMI_VOLTAGE_RANGE(0, 320000, 320000, 2040000, 2040000, 8000),
  510. };
  511. static struct spmi_voltage_range ht_p150_ranges[] = {
  512. SPMI_VOLTAGE_RANGE(0, 1616000, 1616000, 3304000, 3304000, 8000),
  513. };
  514. static struct spmi_voltage_range ht_p600_ranges[] = {
  515. SPMI_VOLTAGE_RANGE(0, 1704000, 1704000, 1896000, 1896000, 8000),
  516. };
  517. static struct spmi_voltage_range nldo_510_ranges[] = {
  518. SPMI_VOLTAGE_RANGE(0, 320000, 320000, 1304000, 1304000, 8000),
  519. };
  520. static struct spmi_voltage_range ftsmps510_ranges[] = {
  521. SPMI_VOLTAGE_RANGE(0, 300000, 300000, 1372000, 1372000, 4000),
  522. };
  523. static DEFINE_SPMI_SET_POINTS(pldo);
  524. static DEFINE_SPMI_SET_POINTS(nldo1);
  525. static DEFINE_SPMI_SET_POINTS(nldo2);
  526. static DEFINE_SPMI_SET_POINTS(nldo3);
  527. static DEFINE_SPMI_SET_POINTS(ln_ldo);
  528. static DEFINE_SPMI_SET_POINTS(smps);
  529. static DEFINE_SPMI_SET_POINTS(ftsmps);
  530. static DEFINE_SPMI_SET_POINTS(ftsmps2p5);
  531. static DEFINE_SPMI_SET_POINTS(ftsmps426);
  532. static DEFINE_SPMI_SET_POINTS(boost);
  533. static DEFINE_SPMI_SET_POINTS(boost_byp);
  534. static DEFINE_SPMI_SET_POINTS(ult_lo_smps);
  535. static DEFINE_SPMI_SET_POINTS(ult_ho_smps);
  536. static DEFINE_SPMI_SET_POINTS(ult_nldo);
  537. static DEFINE_SPMI_SET_POINTS(ult_pldo);
  538. static DEFINE_SPMI_SET_POINTS(pldo660);
  539. static DEFINE_SPMI_SET_POINTS(nldo660);
  540. static DEFINE_SPMI_SET_POINTS(ht_lvpldo);
  541. static DEFINE_SPMI_SET_POINTS(ht_nldo);
  542. static DEFINE_SPMI_SET_POINTS(hfs430);
  543. static DEFINE_SPMI_SET_POINTS(ht_p150);
  544. static DEFINE_SPMI_SET_POINTS(ht_p600);
  545. static DEFINE_SPMI_SET_POINTS(nldo_510);
  546. static DEFINE_SPMI_SET_POINTS(ftsmps510);
  547. static inline int spmi_vreg_read(struct spmi_regulator *vreg, u16 addr, u8 *buf,
  548. int len)
  549. {
  550. return regmap_bulk_read(vreg->regmap, vreg->base + addr, buf, len);
  551. }
  552. static inline int spmi_vreg_write(struct spmi_regulator *vreg, u16 addr,
  553. u8 *buf, int len)
  554. {
  555. return regmap_bulk_write(vreg->regmap, vreg->base + addr, buf, len);
  556. }
  557. static int spmi_vreg_update_bits(struct spmi_regulator *vreg, u16 addr, u8 val,
  558. u8 mask)
  559. {
  560. return regmap_update_bits(vreg->regmap, vreg->base + addr, mask, val);
  561. }
  562. static int spmi_regulator_vs_enable(struct regulator_dev *rdev)
  563. {
  564. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  565. if (vreg->ocp_irq) {
  566. vreg->ocp_count = 0;
  567. vreg->vs_enable_time = ktime_get();
  568. }
  569. return regulator_enable_regmap(rdev);
  570. }
  571. static int spmi_regulator_vs_ocp(struct regulator_dev *rdev, int lim_uA,
  572. int severity, bool enable)
  573. {
  574. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  575. u8 reg = SPMI_VS_OCP_OVERRIDE;
  576. if (lim_uA || !enable || severity != REGULATOR_SEVERITY_PROT)
  577. return -EINVAL;
  578. return spmi_vreg_write(vreg, SPMI_VS_REG_OCP, &reg, 1);
  579. }
  580. static int spmi_regulator_select_voltage(struct spmi_regulator *vreg,
  581. int min_uV, int max_uV)
  582. {
  583. const struct spmi_voltage_range *range;
  584. int uV = min_uV;
  585. int lim_min_uV, lim_max_uV, i, range_id, range_max_uV;
  586. int selector, voltage_sel;
  587. /* Check if request voltage is outside of physically settable range. */
  588. lim_min_uV = vreg->set_points->range[0].set_point_min_uV;
  589. lim_max_uV =
  590. vreg->set_points->range[vreg->set_points->count - 1].set_point_max_uV;
  591. if (uV < lim_min_uV && max_uV >= lim_min_uV)
  592. uV = lim_min_uV;
  593. if (uV < lim_min_uV || uV > lim_max_uV) {
  594. dev_err(vreg->dev,
  595. "request v=[%d, %d] is outside possible v=[%d, %d]\n",
  596. min_uV, max_uV, lim_min_uV, lim_max_uV);
  597. return -EINVAL;
  598. }
  599. /* Find the range which uV is inside of. */
  600. for (i = vreg->set_points->count - 1; i > 0; i--) {
  601. range_max_uV = vreg->set_points->range[i - 1].set_point_max_uV;
  602. if (uV > range_max_uV && range_max_uV > 0)
  603. break;
  604. }
  605. range_id = i;
  606. range = &vreg->set_points->range[range_id];
  607. /*
  608. * Force uV to be an allowed set point by applying a ceiling function to
  609. * the uV value.
  610. */
  611. voltage_sel = DIV_ROUND_UP(uV - range->min_uV, range->step_uV);
  612. uV = voltage_sel * range->step_uV + range->min_uV;
  613. if (uV > max_uV) {
  614. dev_err(vreg->dev,
  615. "request v=[%d, %d] cannot be met by any set point; "
  616. "next set point: %d\n",
  617. min_uV, max_uV, uV);
  618. return -EINVAL;
  619. }
  620. selector = 0;
  621. for (i = 0; i < range_id; i++)
  622. selector += vreg->set_points->range[i].n_voltages;
  623. selector += (uV - range->set_point_min_uV) / range->step_uV;
  624. return selector;
  625. }
  626. static int spmi_sw_selector_to_hw(struct spmi_regulator *vreg,
  627. unsigned selector, u8 *range_sel,
  628. u8 *voltage_sel)
  629. {
  630. const struct spmi_voltage_range *range, *end;
  631. unsigned offset;
  632. range = vreg->set_points->range;
  633. end = range + vreg->set_points->count;
  634. for (; range < end; range++) {
  635. if (selector < range->n_voltages) {
  636. /*
  637. * hardware selectors between set point min and real
  638. * min are invalid so we ignore them
  639. */
  640. offset = range->set_point_min_uV - range->min_uV;
  641. offset /= range->step_uV;
  642. *voltage_sel = selector + offset;
  643. *range_sel = range->range_sel;
  644. return 0;
  645. }
  646. selector -= range->n_voltages;
  647. }
  648. return -EINVAL;
  649. }
  650. static int spmi_hw_selector_to_sw(struct spmi_regulator *vreg, u8 hw_sel,
  651. const struct spmi_voltage_range *range)
  652. {
  653. unsigned sw_sel = 0;
  654. unsigned offset, max_hw_sel;
  655. const struct spmi_voltage_range *r = vreg->set_points->range;
  656. const struct spmi_voltage_range *end = r + vreg->set_points->count;
  657. for (; r < end; r++) {
  658. if (r == range && range->n_voltages) {
  659. /*
  660. * hardware selectors between set point min and real
  661. * min and between set point max and real max are
  662. * invalid so we return an error if they're
  663. * programmed into the hardware
  664. */
  665. offset = range->set_point_min_uV - range->min_uV;
  666. offset /= range->step_uV;
  667. if (hw_sel < offset)
  668. return -EINVAL;
  669. max_hw_sel = range->set_point_max_uV - range->min_uV;
  670. max_hw_sel /= range->step_uV;
  671. if (hw_sel > max_hw_sel)
  672. return -EINVAL;
  673. return sw_sel + hw_sel - offset;
  674. }
  675. sw_sel += r->n_voltages;
  676. }
  677. return -EINVAL;
  678. }
  679. static const struct spmi_voltage_range *
  680. spmi_regulator_find_range(struct spmi_regulator *vreg)
  681. {
  682. u8 range_sel;
  683. const struct spmi_voltage_range *range, *end;
  684. range = vreg->set_points->range;
  685. end = range + vreg->set_points->count;
  686. spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, &range_sel, 1);
  687. for (; range < end; range++)
  688. if (range->range_sel == range_sel)
  689. return range;
  690. return NULL;
  691. }
  692. static int spmi_regulator_select_voltage_same_range(struct spmi_regulator *vreg,
  693. int min_uV, int max_uV)
  694. {
  695. const struct spmi_voltage_range *range;
  696. int uV = min_uV;
  697. int i, selector;
  698. range = spmi_regulator_find_range(vreg);
  699. if (!range)
  700. goto different_range;
  701. if (uV < range->min_uV && max_uV >= range->min_uV)
  702. uV = range->min_uV;
  703. if (uV < range->min_uV || uV > range->max_uV) {
  704. /* Current range doesn't support the requested voltage. */
  705. goto different_range;
  706. }
  707. /*
  708. * Force uV to be an allowed set point by applying a ceiling function to
  709. * the uV value.
  710. */
  711. uV = DIV_ROUND_UP(uV - range->min_uV, range->step_uV);
  712. uV = uV * range->step_uV + range->min_uV;
  713. if (uV > max_uV) {
  714. /*
  715. * No set point in the current voltage range is within the
  716. * requested min_uV to max_uV range.
  717. */
  718. goto different_range;
  719. }
  720. selector = 0;
  721. for (i = 0; i < vreg->set_points->count; i++) {
  722. if (uV >= vreg->set_points->range[i].set_point_min_uV
  723. && uV <= vreg->set_points->range[i].set_point_max_uV) {
  724. selector +=
  725. (uV - vreg->set_points->range[i].set_point_min_uV)
  726. / vreg->set_points->range[i].step_uV;
  727. break;
  728. }
  729. selector += vreg->set_points->range[i].n_voltages;
  730. }
  731. if (selector >= vreg->set_points->n_voltages)
  732. goto different_range;
  733. return selector;
  734. different_range:
  735. return spmi_regulator_select_voltage(vreg, min_uV, max_uV);
  736. }
  737. static int spmi_regulator_common_map_voltage(struct regulator_dev *rdev,
  738. int min_uV, int max_uV)
  739. {
  740. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  741. /*
  742. * Favor staying in the current voltage range if possible. This avoids
  743. * voltage spikes that occur when changing the voltage range.
  744. */
  745. return spmi_regulator_select_voltage_same_range(vreg, min_uV, max_uV);
  746. }
  747. static int
  748. spmi_regulator_common_set_voltage(struct regulator_dev *rdev, unsigned selector)
  749. {
  750. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  751. int ret;
  752. u8 buf[2];
  753. u8 range_sel, voltage_sel;
  754. ret = spmi_sw_selector_to_hw(vreg, selector, &range_sel, &voltage_sel);
  755. if (ret)
  756. return ret;
  757. buf[0] = range_sel;
  758. buf[1] = voltage_sel;
  759. return spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, buf, 2);
  760. }
  761. static int spmi_regulator_common_list_voltage(struct regulator_dev *rdev,
  762. unsigned selector);
  763. static int spmi_regulator_ftsmps426_set_voltage(struct regulator_dev *rdev,
  764. unsigned selector)
  765. {
  766. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  767. u8 buf[2];
  768. int mV;
  769. mV = spmi_regulator_common_list_voltage(rdev, selector) / 1000;
  770. buf[0] = mV & 0xff;
  771. buf[1] = mV >> 8;
  772. return spmi_vreg_write(vreg, SPMI_FTSMPS426_REG_VOLTAGE_LSB, buf, 2);
  773. }
  774. static int spmi_regulator_set_voltage_time_sel(struct regulator_dev *rdev,
  775. unsigned int old_selector, unsigned int new_selector)
  776. {
  777. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  778. int diff_uV;
  779. diff_uV = abs(spmi_regulator_common_list_voltage(rdev, new_selector) -
  780. spmi_regulator_common_list_voltage(rdev, old_selector));
  781. return DIV_ROUND_UP(diff_uV, vreg->slew_rate);
  782. }
  783. static int spmi_regulator_common_get_voltage(struct regulator_dev *rdev)
  784. {
  785. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  786. const struct spmi_voltage_range *range;
  787. u8 voltage_sel;
  788. spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &voltage_sel, 1);
  789. range = spmi_regulator_find_range(vreg);
  790. if (!range)
  791. return -EINVAL;
  792. return spmi_hw_selector_to_sw(vreg, voltage_sel, range);
  793. }
  794. static int spmi_regulator_ftsmps426_get_voltage(struct regulator_dev *rdev)
  795. {
  796. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  797. const struct spmi_voltage_range *range;
  798. u8 buf[2];
  799. int uV;
  800. spmi_vreg_read(vreg, SPMI_FTSMPS426_REG_VOLTAGE_LSB, buf, 2);
  801. uV = (((unsigned int)buf[1] << 8) | (unsigned int)buf[0]) * 1000;
  802. range = vreg->set_points->range;
  803. return (uV - range->set_point_min_uV) / range->step_uV;
  804. }
  805. static int spmi_regulator_single_map_voltage(struct regulator_dev *rdev,
  806. int min_uV, int max_uV)
  807. {
  808. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  809. return spmi_regulator_select_voltage(vreg, min_uV, max_uV);
  810. }
  811. static int spmi_regulator_single_range_set_voltage(struct regulator_dev *rdev,
  812. unsigned selector)
  813. {
  814. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  815. u8 sel = selector;
  816. /*
  817. * Certain types of regulators do not have a range select register so
  818. * only voltage set register needs to be written.
  819. */
  820. return spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &sel, 1);
  821. }
  822. static int spmi_regulator_single_range_get_voltage(struct regulator_dev *rdev)
  823. {
  824. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  825. u8 selector;
  826. int ret;
  827. ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &selector, 1);
  828. if (ret)
  829. return ret;
  830. return selector;
  831. }
  832. static int spmi_regulator_ult_lo_smps_set_voltage(struct regulator_dev *rdev,
  833. unsigned selector)
  834. {
  835. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  836. int ret;
  837. u8 range_sel, voltage_sel;
  838. ret = spmi_sw_selector_to_hw(vreg, selector, &range_sel, &voltage_sel);
  839. if (ret)
  840. return ret;
  841. /*
  842. * Calculate VSET based on range
  843. * In case of range 0: voltage_sel is a 7 bit value, can be written
  844. * witout any modification.
  845. * In case of range 1: voltage_sel is a 5 bit value, bits[7-5] set to
  846. * [011].
  847. */
  848. if (range_sel == 1)
  849. voltage_sel |= ULT_SMPS_RANGE_SPLIT;
  850. return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_VOLTAGE_SET,
  851. voltage_sel, 0xff);
  852. }
  853. static int spmi_regulator_ult_lo_smps_get_voltage(struct regulator_dev *rdev)
  854. {
  855. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  856. const struct spmi_voltage_range *range;
  857. u8 voltage_sel;
  858. spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &voltage_sel, 1);
  859. range = spmi_regulator_find_range(vreg);
  860. if (!range)
  861. return -EINVAL;
  862. if (range->range_sel == 1)
  863. voltage_sel &= ~ULT_SMPS_RANGE_SPLIT;
  864. return spmi_hw_selector_to_sw(vreg, voltage_sel, range);
  865. }
  866. static int spmi_regulator_common_list_voltage(struct regulator_dev *rdev,
  867. unsigned selector)
  868. {
  869. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  870. int uV = 0;
  871. int i;
  872. if (selector >= vreg->set_points->n_voltages)
  873. return 0;
  874. for (i = 0; i < vreg->set_points->count; i++) {
  875. if (selector < vreg->set_points->range[i].n_voltages) {
  876. uV = selector * vreg->set_points->range[i].step_uV
  877. + vreg->set_points->range[i].set_point_min_uV;
  878. break;
  879. }
  880. selector -= vreg->set_points->range[i].n_voltages;
  881. }
  882. return uV;
  883. }
  884. static int
  885. spmi_regulator_common_set_bypass(struct regulator_dev *rdev, bool enable)
  886. {
  887. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  888. u8 mask = SPMI_COMMON_MODE_BYPASS_MASK;
  889. u8 val = 0;
  890. if (enable)
  891. val = mask;
  892. return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask);
  893. }
  894. static int
  895. spmi_regulator_common_get_bypass(struct regulator_dev *rdev, bool *enable)
  896. {
  897. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  898. u8 val;
  899. int ret;
  900. ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, &val, 1);
  901. *enable = val & SPMI_COMMON_MODE_BYPASS_MASK;
  902. return ret;
  903. }
  904. static unsigned int spmi_regulator_common_get_mode(struct regulator_dev *rdev)
  905. {
  906. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  907. u8 reg;
  908. spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, &reg, 1);
  909. reg &= SPMI_COMMON_MODE_HPM_MASK | SPMI_COMMON_MODE_AUTO_MASK;
  910. switch (reg) {
  911. case SPMI_COMMON_MODE_HPM_MASK:
  912. return REGULATOR_MODE_NORMAL;
  913. case SPMI_COMMON_MODE_AUTO_MASK:
  914. return REGULATOR_MODE_FAST;
  915. default:
  916. return REGULATOR_MODE_IDLE;
  917. }
  918. }
  919. static unsigned int spmi_regulator_ftsmps426_get_mode(struct regulator_dev *rdev)
  920. {
  921. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  922. u8 reg;
  923. spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, &reg, 1);
  924. switch (reg) {
  925. case SPMI_FTSMPS426_MODE_HPM_MASK:
  926. return REGULATOR_MODE_NORMAL;
  927. case SPMI_FTSMPS426_MODE_AUTO_MASK:
  928. return REGULATOR_MODE_FAST;
  929. default:
  930. return REGULATOR_MODE_IDLE;
  931. }
  932. }
  933. static unsigned int spmi_regulator_hfsmps_get_mode(struct regulator_dev *rdev)
  934. {
  935. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  936. u8 reg;
  937. spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, &reg, 1);
  938. switch (reg) {
  939. case SPMI_HFSMPS_MODE_HPM_MASK:
  940. return REGULATOR_MODE_NORMAL;
  941. case SPMI_HFSMPS_MODE_AUTO_MASK:
  942. return REGULATOR_MODE_FAST;
  943. default:
  944. return REGULATOR_MODE_IDLE;
  945. }
  946. }
  947. static int
  948. spmi_regulator_common_set_mode(struct regulator_dev *rdev, unsigned int mode)
  949. {
  950. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  951. u8 mask = SPMI_COMMON_MODE_HPM_MASK | SPMI_COMMON_MODE_AUTO_MASK;
  952. u8 val;
  953. switch (mode) {
  954. case REGULATOR_MODE_NORMAL:
  955. val = SPMI_COMMON_MODE_HPM_MASK;
  956. break;
  957. case REGULATOR_MODE_FAST:
  958. val = SPMI_COMMON_MODE_AUTO_MASK;
  959. break;
  960. default:
  961. val = 0;
  962. break;
  963. }
  964. return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask);
  965. }
  966. static int
  967. spmi_regulator_ftsmps426_set_mode(struct regulator_dev *rdev, unsigned int mode)
  968. {
  969. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  970. u8 mask = SPMI_FTSMPS426_MODE_MASK;
  971. u8 val;
  972. switch (mode) {
  973. case REGULATOR_MODE_NORMAL:
  974. val = SPMI_FTSMPS426_MODE_HPM_MASK;
  975. break;
  976. case REGULATOR_MODE_FAST:
  977. val = SPMI_FTSMPS426_MODE_AUTO_MASK;
  978. break;
  979. case REGULATOR_MODE_IDLE:
  980. val = SPMI_FTSMPS426_MODE_LPM_MASK;
  981. break;
  982. default:
  983. return -EINVAL;
  984. }
  985. return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask);
  986. }
  987. static int
  988. spmi_regulator_hfsmps_set_mode(struct regulator_dev *rdev, unsigned int mode)
  989. {
  990. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  991. u8 mask = SPMI_HFSMPS_MODE_MASK;
  992. u8 val;
  993. switch (mode) {
  994. case REGULATOR_MODE_NORMAL:
  995. val = SPMI_HFSMPS_MODE_HPM_MASK;
  996. break;
  997. case REGULATOR_MODE_FAST:
  998. val = SPMI_HFSMPS_MODE_AUTO_MASK;
  999. break;
  1000. case REGULATOR_MODE_IDLE:
  1001. val = vreg->logical_type ==
  1002. SPMI_REGULATOR_LOGICAL_TYPE_FTSMPS3 ?
  1003. SPMI_HFSMPS_MODE_RETENTION_MASK :
  1004. SPMI_HFSMPS_MODE_LPM_MASK;
  1005. break;
  1006. default:
  1007. return -EINVAL;
  1008. }
  1009. return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask);
  1010. }
  1011. static int
  1012. spmi_regulator_common_set_load(struct regulator_dev *rdev, int load_uA)
  1013. {
  1014. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  1015. unsigned int mode;
  1016. if (load_uA >= vreg->hpm_min_load)
  1017. mode = REGULATOR_MODE_NORMAL;
  1018. else
  1019. mode = REGULATOR_MODE_IDLE;
  1020. return spmi_regulator_common_set_mode(rdev, mode);
  1021. }
  1022. static int spmi_regulator_common_set_pull_down(struct regulator_dev *rdev)
  1023. {
  1024. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  1025. unsigned int mask = SPMI_COMMON_PULL_DOWN_ENABLE_MASK;
  1026. return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_PULL_DOWN,
  1027. mask, mask);
  1028. }
  1029. static int spmi_regulator_hfsmps_set_pull_down(struct regulator_dev *rdev)
  1030. {
  1031. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  1032. unsigned int mask = SPMI_COMMON_PULL_DOWN_ENABLE_MASK;
  1033. return spmi_vreg_update_bits(vreg, SPMI_HFSMPS_REG_PULL_DOWN,
  1034. mask, mask);
  1035. }
  1036. static int spmi_regulator_common_set_soft_start(struct regulator_dev *rdev)
  1037. {
  1038. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  1039. unsigned int mask = SPMI_LDO_SOFT_START_ENABLE_MASK;
  1040. return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_SOFT_START,
  1041. mask, mask);
  1042. }
  1043. static int spmi_regulator_set_ilim(struct regulator_dev *rdev, int ilim_uA)
  1044. {
  1045. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  1046. enum spmi_regulator_logical_type type = vreg->logical_type;
  1047. unsigned int current_reg;
  1048. u8 reg;
  1049. u8 mask = SPMI_BOOST_CURRENT_LIMIT_MASK |
  1050. SPMI_BOOST_CURRENT_LIMIT_ENABLE_MASK;
  1051. int max = (SPMI_BOOST_CURRENT_LIMIT_MASK + 1) * 500;
  1052. if (type == SPMI_REGULATOR_LOGICAL_TYPE_BOOST)
  1053. current_reg = SPMI_BOOST_REG_CURRENT_LIMIT;
  1054. else
  1055. current_reg = SPMI_BOOST_BYP_REG_CURRENT_LIMIT;
  1056. if (ilim_uA > max || ilim_uA <= 0)
  1057. return -EINVAL;
  1058. reg = (ilim_uA - 1) / 500;
  1059. reg |= SPMI_BOOST_CURRENT_LIMIT_ENABLE_MASK;
  1060. return spmi_vreg_update_bits(vreg, current_reg, reg, mask);
  1061. }
  1062. static int spmi_regulator_vs_clear_ocp(struct spmi_regulator *vreg)
  1063. {
  1064. int ret;
  1065. ret = spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE,
  1066. SPMI_COMMON_DISABLE, SPMI_COMMON_ENABLE_MASK);
  1067. vreg->vs_enable_time = ktime_get();
  1068. ret = spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE,
  1069. SPMI_COMMON_ENABLE, SPMI_COMMON_ENABLE_MASK);
  1070. return ret;
  1071. }
  1072. static void spmi_regulator_vs_ocp_work(struct work_struct *work)
  1073. {
  1074. struct delayed_work *dwork = to_delayed_work(work);
  1075. struct spmi_regulator *vreg
  1076. = container_of(dwork, struct spmi_regulator, ocp_work);
  1077. spmi_regulator_vs_clear_ocp(vreg);
  1078. }
  1079. static irqreturn_t spmi_regulator_vs_ocp_isr(int irq, void *data)
  1080. {
  1081. struct spmi_regulator *vreg = data;
  1082. ktime_t ocp_irq_time;
  1083. s64 ocp_trigger_delay_us;
  1084. ocp_irq_time = ktime_get();
  1085. ocp_trigger_delay_us = ktime_us_delta(ocp_irq_time,
  1086. vreg->vs_enable_time);
  1087. /*
  1088. * Reset the OCP count if there is a large delay between switch enable
  1089. * and when OCP triggers. This is indicative of a hotplug event as
  1090. * opposed to a fault.
  1091. */
  1092. if (ocp_trigger_delay_us > SPMI_VS_OCP_FAULT_DELAY_US)
  1093. vreg->ocp_count = 0;
  1094. /* Wait for switch output to settle back to 0 V after OCP triggered. */
  1095. udelay(SPMI_VS_OCP_FALL_DELAY_US);
  1096. vreg->ocp_count++;
  1097. if (vreg->ocp_count == 1) {
  1098. /* Immediately clear the over current condition. */
  1099. spmi_regulator_vs_clear_ocp(vreg);
  1100. } else if (vreg->ocp_count <= vreg->ocp_max_retries) {
  1101. /* Schedule the over current clear task to run later. */
  1102. schedule_delayed_work(&vreg->ocp_work,
  1103. msecs_to_jiffies(vreg->ocp_retry_delay_ms) + 1);
  1104. } else {
  1105. dev_err(vreg->dev,
  1106. "OCP triggered %d times; no further retries\n",
  1107. vreg->ocp_count);
  1108. }
  1109. return IRQ_HANDLED;
  1110. }
  1111. #define SAW3_VCTL_DATA_MASK 0xFF
  1112. #define SAW3_VCTL_CLEAR_MASK 0x700FF
  1113. #define SAW3_AVS_CTL_EN_MASK 0x1
  1114. #define SAW3_AVS_CTL_TGGL_MASK 0x8000000
  1115. #define SAW3_AVS_CTL_CLEAR_MASK 0x7efc00
  1116. static struct regmap *saw_regmap;
  1117. static void spmi_saw_set_vdd(void *data)
  1118. {
  1119. u32 vctl, data3, avs_ctl, pmic_sts;
  1120. bool avs_enabled = false;
  1121. unsigned long timeout;
  1122. u8 voltage_sel = *(u8 *)data;
  1123. regmap_read(saw_regmap, SAW3_AVS_CTL, &avs_ctl);
  1124. regmap_read(saw_regmap, SAW3_VCTL, &vctl);
  1125. regmap_read(saw_regmap, SAW3_SPM_PMIC_DATA_3, &data3);
  1126. /* select the band */
  1127. vctl &= ~SAW3_VCTL_CLEAR_MASK;
  1128. vctl |= (u32)voltage_sel;
  1129. data3 &= ~SAW3_VCTL_CLEAR_MASK;
  1130. data3 |= (u32)voltage_sel;
  1131. /* If AVS is enabled, switch it off during the voltage change */
  1132. avs_enabled = SAW3_AVS_CTL_EN_MASK & avs_ctl;
  1133. if (avs_enabled) {
  1134. avs_ctl &= ~SAW3_AVS_CTL_TGGL_MASK;
  1135. regmap_write(saw_regmap, SAW3_AVS_CTL, avs_ctl);
  1136. }
  1137. regmap_write(saw_regmap, SAW3_RST, 1);
  1138. regmap_write(saw_regmap, SAW3_VCTL, vctl);
  1139. regmap_write(saw_regmap, SAW3_SPM_PMIC_DATA_3, data3);
  1140. timeout = jiffies + usecs_to_jiffies(100);
  1141. do {
  1142. regmap_read(saw_regmap, SAW3_PMIC_STS, &pmic_sts);
  1143. pmic_sts &= SAW3_VCTL_DATA_MASK;
  1144. if (pmic_sts == (u32)voltage_sel)
  1145. break;
  1146. cpu_relax();
  1147. } while (time_before(jiffies, timeout));
  1148. /* After successful voltage change, switch the AVS back on */
  1149. if (avs_enabled) {
  1150. pmic_sts &= 0x3f;
  1151. avs_ctl &= ~SAW3_AVS_CTL_CLEAR_MASK;
  1152. avs_ctl |= ((pmic_sts - 4) << 10);
  1153. avs_ctl |= (pmic_sts << 17);
  1154. avs_ctl |= SAW3_AVS_CTL_TGGL_MASK;
  1155. regmap_write(saw_regmap, SAW3_AVS_CTL, avs_ctl);
  1156. }
  1157. }
  1158. static int
  1159. spmi_regulator_saw_set_voltage(struct regulator_dev *rdev, unsigned selector)
  1160. {
  1161. struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
  1162. int ret;
  1163. u8 range_sel, voltage_sel;
  1164. ret = spmi_sw_selector_to_hw(vreg, selector, &range_sel, &voltage_sel);
  1165. if (ret)
  1166. return ret;
  1167. if (0 != range_sel) {
  1168. dev_dbg(&rdev->dev, "range_sel = %02X voltage_sel = %02X", \
  1169. range_sel, voltage_sel);
  1170. return -EINVAL;
  1171. }
  1172. /* Always do the SAW register writes on the first CPU */
  1173. return smp_call_function_single(0, spmi_saw_set_vdd, \
  1174. &voltage_sel, true);
  1175. }
  1176. static struct regulator_ops spmi_saw_ops = {};
  1177. static const struct regulator_ops spmi_smps_ops = {
  1178. .enable = regulator_enable_regmap,
  1179. .disable = regulator_disable_regmap,
  1180. .is_enabled = regulator_is_enabled_regmap,
  1181. .set_voltage_sel = spmi_regulator_common_set_voltage,
  1182. .set_voltage_time_sel = spmi_regulator_set_voltage_time_sel,
  1183. .get_voltage_sel = spmi_regulator_common_get_voltage,
  1184. .map_voltage = spmi_regulator_common_map_voltage,
  1185. .list_voltage = spmi_regulator_common_list_voltage,
  1186. .set_mode = spmi_regulator_common_set_mode,
  1187. .get_mode = spmi_regulator_common_get_mode,
  1188. .set_load = spmi_regulator_common_set_load,
  1189. .set_pull_down = spmi_regulator_common_set_pull_down,
  1190. };
  1191. static const struct regulator_ops spmi_ldo_ops = {
  1192. .enable = regulator_enable_regmap,
  1193. .disable = regulator_disable_regmap,
  1194. .is_enabled = regulator_is_enabled_regmap,
  1195. .set_voltage_sel = spmi_regulator_common_set_voltage,
  1196. .get_voltage_sel = spmi_regulator_common_get_voltage,
  1197. .map_voltage = spmi_regulator_common_map_voltage,
  1198. .list_voltage = spmi_regulator_common_list_voltage,
  1199. .set_mode = spmi_regulator_common_set_mode,
  1200. .get_mode = spmi_regulator_common_get_mode,
  1201. .set_load = spmi_regulator_common_set_load,
  1202. .set_bypass = spmi_regulator_common_set_bypass,
  1203. .get_bypass = spmi_regulator_common_get_bypass,
  1204. .set_pull_down = spmi_regulator_common_set_pull_down,
  1205. .set_soft_start = spmi_regulator_common_set_soft_start,
  1206. };
  1207. static const struct regulator_ops spmi_ln_ldo_ops = {
  1208. .enable = regulator_enable_regmap,
  1209. .disable = regulator_disable_regmap,
  1210. .is_enabled = regulator_is_enabled_regmap,
  1211. .set_voltage_sel = spmi_regulator_common_set_voltage,
  1212. .get_voltage_sel = spmi_regulator_common_get_voltage,
  1213. .map_voltage = spmi_regulator_common_map_voltage,
  1214. .list_voltage = spmi_regulator_common_list_voltage,
  1215. .set_bypass = spmi_regulator_common_set_bypass,
  1216. .get_bypass = spmi_regulator_common_get_bypass,
  1217. };
  1218. static const struct regulator_ops spmi_vs_ops = {
  1219. .enable = spmi_regulator_vs_enable,
  1220. .disable = regulator_disable_regmap,
  1221. .is_enabled = regulator_is_enabled_regmap,
  1222. .set_pull_down = spmi_regulator_common_set_pull_down,
  1223. .set_soft_start = spmi_regulator_common_set_soft_start,
  1224. .set_over_current_protection = spmi_regulator_vs_ocp,
  1225. .set_mode = spmi_regulator_common_set_mode,
  1226. .get_mode = spmi_regulator_common_get_mode,
  1227. };
  1228. static const struct regulator_ops spmi_boost_ops = {
  1229. .enable = regulator_enable_regmap,
  1230. .disable = regulator_disable_regmap,
  1231. .is_enabled = regulator_is_enabled_regmap,
  1232. .set_voltage_sel = spmi_regulator_single_range_set_voltage,
  1233. .get_voltage_sel = spmi_regulator_single_range_get_voltage,
  1234. .map_voltage = spmi_regulator_single_map_voltage,
  1235. .list_voltage = spmi_regulator_common_list_voltage,
  1236. .set_input_current_limit = spmi_regulator_set_ilim,
  1237. };
  1238. static const struct regulator_ops spmi_ftsmps_ops = {
  1239. .enable = regulator_enable_regmap,
  1240. .disable = regulator_disable_regmap,
  1241. .is_enabled = regulator_is_enabled_regmap,
  1242. .set_voltage_sel = spmi_regulator_common_set_voltage,
  1243. .set_voltage_time_sel = spmi_regulator_set_voltage_time_sel,
  1244. .get_voltage_sel = spmi_regulator_common_get_voltage,
  1245. .map_voltage = spmi_regulator_common_map_voltage,
  1246. .list_voltage = spmi_regulator_common_list_voltage,
  1247. .set_mode = spmi_regulator_common_set_mode,
  1248. .get_mode = spmi_regulator_common_get_mode,
  1249. .set_load = spmi_regulator_common_set_load,
  1250. .set_pull_down = spmi_regulator_common_set_pull_down,
  1251. };
  1252. static const struct regulator_ops spmi_ult_lo_smps_ops = {
  1253. .enable = regulator_enable_regmap,
  1254. .disable = regulator_disable_regmap,
  1255. .is_enabled = regulator_is_enabled_regmap,
  1256. .set_voltage_sel = spmi_regulator_ult_lo_smps_set_voltage,
  1257. .set_voltage_time_sel = spmi_regulator_set_voltage_time_sel,
  1258. .get_voltage_sel = spmi_regulator_ult_lo_smps_get_voltage,
  1259. .list_voltage = spmi_regulator_common_list_voltage,
  1260. .set_mode = spmi_regulator_common_set_mode,
  1261. .get_mode = spmi_regulator_common_get_mode,
  1262. .set_load = spmi_regulator_common_set_load,
  1263. .set_pull_down = spmi_regulator_common_set_pull_down,
  1264. };
  1265. static const struct regulator_ops spmi_ult_ho_smps_ops = {
  1266. .enable = regulator_enable_regmap,
  1267. .disable = regulator_disable_regmap,
  1268. .is_enabled = regulator_is_enabled_regmap,
  1269. .set_voltage_sel = spmi_regulator_single_range_set_voltage,
  1270. .set_voltage_time_sel = spmi_regulator_set_voltage_time_sel,
  1271. .get_voltage_sel = spmi_regulator_single_range_get_voltage,
  1272. .map_voltage = spmi_regulator_single_map_voltage,
  1273. .list_voltage = spmi_regulator_common_list_voltage,
  1274. .set_mode = spmi_regulator_common_set_mode,
  1275. .get_mode = spmi_regulator_common_get_mode,
  1276. .set_load = spmi_regulator_common_set_load,
  1277. .set_pull_down = spmi_regulator_common_set_pull_down,
  1278. };
  1279. static const struct regulator_ops spmi_ult_ldo_ops = {
  1280. .enable = regulator_enable_regmap,
  1281. .disable = regulator_disable_regmap,
  1282. .is_enabled = regulator_is_enabled_regmap,
  1283. .set_voltage_sel = spmi_regulator_single_range_set_voltage,
  1284. .get_voltage_sel = spmi_regulator_single_range_get_voltage,
  1285. .map_voltage = spmi_regulator_single_map_voltage,
  1286. .list_voltage = spmi_regulator_common_list_voltage,
  1287. .set_mode = spmi_regulator_common_set_mode,
  1288. .get_mode = spmi_regulator_common_get_mode,
  1289. .set_load = spmi_regulator_common_set_load,
  1290. .set_bypass = spmi_regulator_common_set_bypass,
  1291. .get_bypass = spmi_regulator_common_get_bypass,
  1292. .set_pull_down = spmi_regulator_common_set_pull_down,
  1293. .set_soft_start = spmi_regulator_common_set_soft_start,
  1294. };
  1295. static const struct regulator_ops spmi_ftsmps426_ops = {
  1296. .enable = regulator_enable_regmap,
  1297. .disable = regulator_disable_regmap,
  1298. .is_enabled = regulator_is_enabled_regmap,
  1299. .set_voltage_sel = spmi_regulator_ftsmps426_set_voltage,
  1300. .set_voltage_time_sel = spmi_regulator_set_voltage_time_sel,
  1301. .get_voltage_sel = spmi_regulator_ftsmps426_get_voltage,
  1302. .map_voltage = spmi_regulator_single_map_voltage,
  1303. .list_voltage = spmi_regulator_common_list_voltage,
  1304. .set_mode = spmi_regulator_ftsmps426_set_mode,
  1305. .get_mode = spmi_regulator_ftsmps426_get_mode,
  1306. .set_load = spmi_regulator_common_set_load,
  1307. .set_pull_down = spmi_regulator_common_set_pull_down,
  1308. };
  1309. static const struct regulator_ops spmi_hfs430_ops = {
  1310. .enable = regulator_enable_regmap,
  1311. .disable = regulator_disable_regmap,
  1312. .is_enabled = regulator_is_enabled_regmap,
  1313. .set_voltage_sel = spmi_regulator_ftsmps426_set_voltage,
  1314. .set_voltage_time_sel = spmi_regulator_set_voltage_time_sel,
  1315. .get_voltage_sel = spmi_regulator_ftsmps426_get_voltage,
  1316. .map_voltage = spmi_regulator_single_map_voltage,
  1317. .list_voltage = spmi_regulator_common_list_voltage,
  1318. .set_mode = spmi_regulator_ftsmps426_set_mode,
  1319. .get_mode = spmi_regulator_ftsmps426_get_mode,
  1320. };
  1321. static const struct regulator_ops spmi_hfsmps_ops = {
  1322. .enable = regulator_enable_regmap,
  1323. .disable = regulator_disable_regmap,
  1324. .is_enabled = regulator_is_enabled_regmap,
  1325. .set_voltage_sel = spmi_regulator_ftsmps426_set_voltage,
  1326. .set_voltage_time_sel = spmi_regulator_set_voltage_time_sel,
  1327. .get_voltage_sel = spmi_regulator_ftsmps426_get_voltage,
  1328. .map_voltage = spmi_regulator_single_map_voltage,
  1329. .list_voltage = spmi_regulator_common_list_voltage,
  1330. .set_mode = spmi_regulator_hfsmps_set_mode,
  1331. .get_mode = spmi_regulator_hfsmps_get_mode,
  1332. .set_load = spmi_regulator_common_set_load,
  1333. .set_pull_down = spmi_regulator_hfsmps_set_pull_down,
  1334. };
  1335. /* Maximum possible digital major revision value */
  1336. #define INF 0xFF
  1337. static const struct spmi_regulator_mapping supported_regulators[] = {
  1338. /* type subtype dig_min dig_max ltype ops setpoints hpm_min */
  1339. SPMI_VREG(LDO, HT_P600, 0, INF, HFS430, hfs430, ht_p600, 10000),
  1340. SPMI_VREG(LDO, HT_P150, 0, INF, HFS430, hfs430, ht_p150, 10000),
  1341. SPMI_VREG(BUCK, GP_CTL, 0, INF, SMPS, smps, smps, 100000),
  1342. SPMI_VREG(BUCK, HFS430, 0, 3, HFS430, hfs430, hfs430, 10000),
  1343. SPMI_VREG(BUCK, HFSMPS_510, 4, INF, HFSMPS, hfsmps, hfs430, 100000),
  1344. SPMI_VREG(LDO, N300, 0, INF, LDO, ldo, nldo1, 10000),
  1345. SPMI_VREG(LDO, N600, 0, 0, LDO, ldo, nldo2, 10000),
  1346. SPMI_VREG(LDO, N1200, 0, 0, LDO, ldo, nldo2, 10000),
  1347. SPMI_VREG(LDO, N600, 1, INF, LDO, ldo, nldo3, 10000),
  1348. SPMI_VREG(LDO, N1200, 1, INF, LDO, ldo, nldo3, 10000),
  1349. SPMI_VREG(LDO, N600_ST, 0, 0, LDO, ldo, nldo2, 10000),
  1350. SPMI_VREG(LDO, N1200_ST, 0, 0, LDO, ldo, nldo2, 10000),
  1351. SPMI_VREG(LDO, N600_ST, 1, INF, LDO, ldo, nldo3, 10000),
  1352. SPMI_VREG(LDO, N1200_ST, 1, INF, LDO, ldo, nldo3, 10000),
  1353. SPMI_VREG(LDO, P50, 0, INF, LDO, ldo, pldo, 5000),
  1354. SPMI_VREG(LDO, P150, 0, INF, LDO, ldo, pldo, 10000),
  1355. SPMI_VREG(LDO, P300, 0, INF, LDO, ldo, pldo, 10000),
  1356. SPMI_VREG(LDO, P600, 0, INF, LDO, ldo, pldo, 10000),
  1357. SPMI_VREG(LDO, P1200, 0, INF, LDO, ldo, pldo, 10000),
  1358. SPMI_VREG(LDO, LN, 0, INF, LN_LDO, ln_ldo, ln_ldo, 0),
  1359. SPMI_VREG(LDO, LV_P50, 0, INF, LDO, ldo, pldo, 5000),
  1360. SPMI_VREG(LDO, LV_P150, 0, INF, LDO, ldo, pldo, 10000),
  1361. SPMI_VREG(LDO, LV_P300, 0, INF, LDO, ldo, pldo, 10000),
  1362. SPMI_VREG(LDO, LV_P600, 0, INF, LDO, ldo, pldo, 10000),
  1363. SPMI_VREG(LDO, LV_P1200, 0, INF, LDO, ldo, pldo, 10000),
  1364. SPMI_VREG(LDO, HT_N300_ST, 0, INF, FTSMPS426, ftsmps426,
  1365. ht_nldo, 30000),
  1366. SPMI_VREG(LDO, HT_N600_ST, 0, INF, FTSMPS426, ftsmps426,
  1367. ht_nldo, 30000),
  1368. SPMI_VREG(LDO, HT_N1200_ST, 0, INF, FTSMPS426, ftsmps426,
  1369. ht_nldo, 30000),
  1370. SPMI_VREG(LDO, HT_LVP150, 0, INF, FTSMPS426, ftsmps426,
  1371. ht_lvpldo, 10000),
  1372. SPMI_VREG(LDO, HT_LVP300, 0, INF, FTSMPS426, ftsmps426,
  1373. ht_lvpldo, 10000),
  1374. SPMI_VREG(LDO, L660_N300_ST, 0, INF, FTSMPS426, ftsmps426,
  1375. nldo660, 10000),
  1376. SPMI_VREG(LDO, L660_N600_ST, 0, INF, FTSMPS426, ftsmps426,
  1377. nldo660, 10000),
  1378. SPMI_VREG(LDO, L660_P50, 0, INF, FTSMPS426, ftsmps426,
  1379. pldo660, 10000),
  1380. SPMI_VREG(LDO, L660_P150, 0, INF, FTSMPS426, ftsmps426,
  1381. pldo660, 10000),
  1382. SPMI_VREG(LDO, L660_P600, 0, INF, FTSMPS426, ftsmps426,
  1383. pldo660, 10000),
  1384. SPMI_VREG(LDO, L660_LVP150, 0, INF, FTSMPS426, ftsmps426,
  1385. ht_lvpldo, 10000),
  1386. SPMI_VREG(LDO, L660_LVP600, 0, INF, FTSMPS426, ftsmps426,
  1387. ht_lvpldo, 10000),
  1388. SPMI_VREG_VS(LV100, 0, INF),
  1389. SPMI_VREG_VS(LV300, 0, INF),
  1390. SPMI_VREG_VS(MV300, 0, INF),
  1391. SPMI_VREG_VS(MV500, 0, INF),
  1392. SPMI_VREG_VS(HDMI, 0, INF),
  1393. SPMI_VREG_VS(OTG, 0, INF),
  1394. SPMI_VREG(BOOST, 5V_BOOST, 0, INF, BOOST, boost, boost, 0),
  1395. SPMI_VREG(FTS, FTS_CTL, 0, INF, FTSMPS, ftsmps, ftsmps, 100000),
  1396. SPMI_VREG(FTS, FTS2p5_CTL, 0, INF, FTSMPS, ftsmps, ftsmps2p5, 100000),
  1397. SPMI_VREG(FTS, FTS426_CTL, 0, INF, FTSMPS426, ftsmps426, ftsmps426, 100000),
  1398. SPMI_VREG(BOOST_BYP, BB_2A, 0, INF, BOOST_BYP, boost, boost_byp, 0),
  1399. SPMI_VREG(ULT_BUCK, ULT_HF_CTL1, 0, INF, ULT_LO_SMPS, ult_lo_smps,
  1400. ult_lo_smps, 100000),
  1401. SPMI_VREG(ULT_BUCK, ULT_HF_CTL2, 0, INF, ULT_LO_SMPS, ult_lo_smps,
  1402. ult_lo_smps, 100000),
  1403. SPMI_VREG(ULT_BUCK, ULT_HF_CTL3, 0, INF, ULT_LO_SMPS, ult_lo_smps,
  1404. ult_lo_smps, 100000),
  1405. SPMI_VREG(ULT_BUCK, ULT_HF_CTL4, 0, INF, ULT_HO_SMPS, ult_ho_smps,
  1406. ult_ho_smps, 100000),
  1407. SPMI_VREG(ULT_LDO, N300_ST, 0, INF, ULT_LDO, ult_ldo, ult_nldo, 10000),
  1408. SPMI_VREG(ULT_LDO, N600_ST, 0, INF, ULT_LDO, ult_ldo, ult_nldo, 10000),
  1409. SPMI_VREG(ULT_LDO, N900_ST, 0, INF, ULT_LDO, ult_ldo, ult_nldo, 10000),
  1410. SPMI_VREG(ULT_LDO, N1200_ST, 0, INF, ULT_LDO, ult_ldo, ult_nldo, 10000),
  1411. SPMI_VREG(ULT_LDO, LV_P50, 0, INF, ULT_LDO, ult_ldo, ult_pldo, 10000),
  1412. SPMI_VREG(ULT_LDO, LV_P150, 0, INF, ULT_LDO, ult_ldo, ult_pldo, 10000),
  1413. SPMI_VREG(ULT_LDO, LV_P300, 0, INF, ULT_LDO, ult_ldo, ult_pldo, 10000),
  1414. SPMI_VREG(ULT_LDO, LV_P450, 0, INF, ULT_LDO, ult_ldo, ult_pldo, 10000),
  1415. SPMI_VREG(ULT_LDO, P600, 0, INF, ULT_LDO, ult_ldo, ult_pldo, 10000),
  1416. SPMI_VREG(ULT_LDO, P300, 0, INF, ULT_LDO, ult_ldo, ult_pldo, 10000),
  1417. SPMI_VREG(ULT_LDO, P150, 0, INF, ULT_LDO, ult_ldo, ult_pldo, 10000),
  1418. SPMI_VREG(ULT_LDO, P50, 0, INF, ULT_LDO, ult_ldo, ult_pldo, 5000),
  1419. SPMI_VREG(LDO, LV_P150_510, 0, INF, LDO_510, hfsmps, ht_lvpldo, 10000),
  1420. SPMI_VREG(LDO, LV_P300_510, 0, INF, LDO_510, hfsmps, ht_lvpldo, 10000),
  1421. SPMI_VREG(LDO, LV_P600_510, 0, INF, LDO_510, hfsmps, ht_lvpldo, 10000),
  1422. SPMI_VREG(LDO, MV_P50_510, 0, INF, LDO_510, hfsmps, pldo660, 10000),
  1423. SPMI_VREG(LDO, MV_P150_510, 0, INF, LDO_510, hfsmps, pldo660, 10000),
  1424. SPMI_VREG(LDO, MV_P600_510, 0, INF, LDO_510, hfsmps, pldo660, 10000),
  1425. SPMI_VREG(LDO, N300_510, 0, INF, LDO_510, hfsmps, nldo_510, 10000),
  1426. SPMI_VREG(LDO, N600_510, 0, INF, LDO_510, hfsmps, nldo_510, 10000),
  1427. SPMI_VREG(LDO, N1200_510, 0, INF, LDO_510, hfsmps, nldo_510, 10000),
  1428. SPMI_VREG(FTS, FTSMPS_510, 0, INF, FTSMPS3, hfsmps, ftsmps510, 100000),
  1429. };
  1430. static void spmi_calculate_num_voltages(struct spmi_voltage_set_points *points)
  1431. {
  1432. unsigned int n;
  1433. struct spmi_voltage_range *range = points->range;
  1434. for (; range < points->range + points->count; range++) {
  1435. n = 0;
  1436. if (range->set_point_max_uV) {
  1437. n = range->set_point_max_uV - range->set_point_min_uV;
  1438. n = (n / range->step_uV) + 1;
  1439. }
  1440. range->n_voltages = n;
  1441. points->n_voltages += n;
  1442. }
  1443. }
  1444. static int spmi_regulator_match(struct spmi_regulator *vreg, u16 force_type)
  1445. {
  1446. const struct spmi_regulator_mapping *mapping;
  1447. int ret, i;
  1448. u32 dig_major_rev;
  1449. u8 version[SPMI_COMMON_REG_SUBTYPE - SPMI_COMMON_REG_DIG_MAJOR_REV + 1];
  1450. u8 type, subtype;
  1451. ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_DIG_MAJOR_REV, version,
  1452. ARRAY_SIZE(version));
  1453. if (ret) {
  1454. dev_dbg(vreg->dev, "could not read version registers\n");
  1455. return ret;
  1456. }
  1457. dig_major_rev = version[SPMI_COMMON_REG_DIG_MAJOR_REV
  1458. - SPMI_COMMON_REG_DIG_MAJOR_REV];
  1459. if (!force_type) {
  1460. type = version[SPMI_COMMON_REG_TYPE -
  1461. SPMI_COMMON_REG_DIG_MAJOR_REV];
  1462. subtype = version[SPMI_COMMON_REG_SUBTYPE -
  1463. SPMI_COMMON_REG_DIG_MAJOR_REV];
  1464. } else {
  1465. type = force_type >> 8;
  1466. subtype = force_type;
  1467. }
  1468. for (i = 0; i < ARRAY_SIZE(supported_regulators); i++) {
  1469. mapping = &supported_regulators[i];
  1470. if (mapping->type == type && mapping->subtype == subtype
  1471. && mapping->revision_min <= dig_major_rev
  1472. && mapping->revision_max >= dig_major_rev)
  1473. goto found;
  1474. }
  1475. dev_err(vreg->dev,
  1476. "unsupported regulator: name=%s type=0x%02X, subtype=0x%02X, dig major rev=0x%02X\n",
  1477. vreg->desc.name, type, subtype, dig_major_rev);
  1478. return -ENODEV;
  1479. found:
  1480. vreg->logical_type = mapping->logical_type;
  1481. vreg->set_points = mapping->set_points;
  1482. vreg->hpm_min_load = mapping->hpm_min_load;
  1483. vreg->desc.ops = mapping->ops;
  1484. if (mapping->set_points) {
  1485. if (!mapping->set_points->n_voltages)
  1486. spmi_calculate_num_voltages(mapping->set_points);
  1487. vreg->desc.n_voltages = mapping->set_points->n_voltages;
  1488. }
  1489. return 0;
  1490. }
  1491. static int spmi_regulator_init_slew_rate(struct spmi_regulator *vreg)
  1492. {
  1493. int ret;
  1494. u8 reg = 0;
  1495. int step, delay, slew_rate, step_delay;
  1496. const struct spmi_voltage_range *range;
  1497. ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_STEP_CTRL, &reg, 1);
  1498. if (ret) {
  1499. dev_err(vreg->dev, "spmi read failed, ret=%d\n", ret);
  1500. return ret;
  1501. }
  1502. range = spmi_regulator_find_range(vreg);
  1503. if (!range)
  1504. return -EINVAL;
  1505. switch (vreg->logical_type) {
  1506. case SPMI_REGULATOR_LOGICAL_TYPE_FTSMPS:
  1507. step_delay = SPMI_FTSMPS_STEP_DELAY;
  1508. break;
  1509. default:
  1510. step_delay = SPMI_DEFAULT_STEP_DELAY;
  1511. break;
  1512. }
  1513. step = reg & SPMI_FTSMPS_STEP_CTRL_STEP_MASK;
  1514. step >>= SPMI_FTSMPS_STEP_CTRL_STEP_SHIFT;
  1515. delay = reg & SPMI_FTSMPS_STEP_CTRL_DELAY_MASK;
  1516. delay >>= SPMI_FTSMPS_STEP_CTRL_DELAY_SHIFT;
  1517. /* slew_rate has units of uV/us */
  1518. slew_rate = SPMI_FTSMPS_CLOCK_RATE * range->step_uV * (1 << step);
  1519. slew_rate /= 1000 * (step_delay << delay);
  1520. slew_rate *= SPMI_FTSMPS_STEP_MARGIN_NUM;
  1521. slew_rate /= SPMI_FTSMPS_STEP_MARGIN_DEN;
  1522. /* Ensure that the slew rate is greater than 0 */
  1523. vreg->slew_rate = max(slew_rate, 1);
  1524. return ret;
  1525. }
  1526. static int spmi_regulator_init_slew_rate_ftsmps426(struct spmi_regulator *vreg,
  1527. int clock_rate)
  1528. {
  1529. int ret;
  1530. u8 reg = 0;
  1531. int delay, slew_rate;
  1532. const struct spmi_voltage_range *range = &vreg->set_points->range[0];
  1533. ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_STEP_CTRL, &reg, 1);
  1534. if (ret) {
  1535. dev_err(vreg->dev, "spmi read failed, ret=%d\n", ret);
  1536. return ret;
  1537. }
  1538. delay = reg & SPMI_FTSMPS426_STEP_CTRL_DELAY_MASK;
  1539. delay >>= SPMI_FTSMPS426_STEP_CTRL_DELAY_SHIFT;
  1540. /* slew_rate has units of uV/us */
  1541. slew_rate = clock_rate * range->step_uV;
  1542. slew_rate /= 1000 * (SPMI_FTSMPS426_STEP_DELAY << delay);
  1543. slew_rate *= SPMI_FTSMPS426_STEP_MARGIN_NUM;
  1544. slew_rate /= SPMI_FTSMPS426_STEP_MARGIN_DEN;
  1545. /* Ensure that the slew rate is greater than 0 */
  1546. vreg->slew_rate = max(slew_rate, 1);
  1547. return ret;
  1548. }
  1549. static int spmi_regulator_init_slew_rate_hfsmps(struct spmi_regulator *vreg)
  1550. {
  1551. int ret;
  1552. u8 reg = 0;
  1553. int delay;
  1554. ret = spmi_vreg_read(vreg, SPMI_HFSMPS_REG_STEP_CTRL, &reg, 1);
  1555. if (ret) {
  1556. dev_err(vreg->dev, "spmi read failed, ret=%d\n", ret);
  1557. return ret;
  1558. }
  1559. delay = reg & SPMI_FTSMPS426_STEP_CTRL_DELAY_MASK;
  1560. delay >>= SPMI_FTSMPS426_STEP_CTRL_DELAY_SHIFT;
  1561. vreg->slew_rate = SPMI_HFSMPS_SLEW_RATE_38p4 >> delay;
  1562. return ret;
  1563. }
  1564. static int spmi_regulator_init_registers(struct spmi_regulator *vreg,
  1565. const struct spmi_regulator_init_data *data)
  1566. {
  1567. int ret;
  1568. enum spmi_regulator_logical_type type;
  1569. u8 ctrl_reg[8], reg, mask;
  1570. type = vreg->logical_type;
  1571. ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, ctrl_reg, 8);
  1572. if (ret)
  1573. return ret;
  1574. /* Set up enable pin control. */
  1575. if (!(data->pin_ctrl_enable & SPMI_REGULATOR_PIN_CTRL_ENABLE_HW_DEFAULT)) {
  1576. switch (type) {
  1577. case SPMI_REGULATOR_LOGICAL_TYPE_SMPS:
  1578. case SPMI_REGULATOR_LOGICAL_TYPE_LDO:
  1579. case SPMI_REGULATOR_LOGICAL_TYPE_VS:
  1580. ctrl_reg[SPMI_COMMON_IDX_ENABLE] &=
  1581. ~SPMI_COMMON_ENABLE_FOLLOW_ALL_MASK;
  1582. ctrl_reg[SPMI_COMMON_IDX_ENABLE] |=
  1583. data->pin_ctrl_enable & SPMI_COMMON_ENABLE_FOLLOW_ALL_MASK;
  1584. break;
  1585. default:
  1586. break;
  1587. }
  1588. }
  1589. /* Set up mode pin control. */
  1590. if (!(data->pin_ctrl_hpm & SPMI_REGULATOR_PIN_CTRL_HPM_HW_DEFAULT)) {
  1591. switch (type) {
  1592. case SPMI_REGULATOR_LOGICAL_TYPE_SMPS:
  1593. case SPMI_REGULATOR_LOGICAL_TYPE_LDO:
  1594. ctrl_reg[SPMI_COMMON_IDX_MODE] &=
  1595. ~SPMI_COMMON_MODE_FOLLOW_ALL_MASK;
  1596. ctrl_reg[SPMI_COMMON_IDX_MODE] |=
  1597. data->pin_ctrl_hpm & SPMI_COMMON_MODE_FOLLOW_ALL_MASK;
  1598. break;
  1599. case SPMI_REGULATOR_LOGICAL_TYPE_VS:
  1600. case SPMI_REGULATOR_LOGICAL_TYPE_ULT_LO_SMPS:
  1601. case SPMI_REGULATOR_LOGICAL_TYPE_ULT_HO_SMPS:
  1602. case SPMI_REGULATOR_LOGICAL_TYPE_ULT_LDO:
  1603. ctrl_reg[SPMI_COMMON_IDX_MODE] &=
  1604. ~SPMI_COMMON_MODE_FOLLOW_AWAKE_MASK;
  1605. ctrl_reg[SPMI_COMMON_IDX_MODE] |=
  1606. data->pin_ctrl_hpm & SPMI_COMMON_MODE_FOLLOW_AWAKE_MASK;
  1607. break;
  1608. default:
  1609. break;
  1610. }
  1611. }
  1612. /* Write back any control register values that were modified. */
  1613. ret = spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, ctrl_reg, 8);
  1614. if (ret)
  1615. return ret;
  1616. /* Set soft start strength and over current protection for VS. */
  1617. if (type == SPMI_REGULATOR_LOGICAL_TYPE_VS) {
  1618. if (data->vs_soft_start_strength
  1619. != SPMI_VS_SOFT_START_STR_HW_DEFAULT) {
  1620. reg = data->vs_soft_start_strength
  1621. & SPMI_VS_SOFT_START_SEL_MASK;
  1622. mask = SPMI_VS_SOFT_START_SEL_MASK;
  1623. return spmi_vreg_update_bits(vreg,
  1624. SPMI_VS_REG_SOFT_START,
  1625. reg, mask);
  1626. }
  1627. }
  1628. return 0;
  1629. }
  1630. static void spmi_regulator_get_dt_config(struct spmi_regulator *vreg,
  1631. struct device_node *node, struct spmi_regulator_init_data *data)
  1632. {
  1633. /*
  1634. * Initialize configuration parameters to use hardware default in case
  1635. * no value is specified via device tree.
  1636. */
  1637. data->pin_ctrl_enable = SPMI_REGULATOR_PIN_CTRL_ENABLE_HW_DEFAULT;
  1638. data->pin_ctrl_hpm = SPMI_REGULATOR_PIN_CTRL_HPM_HW_DEFAULT;
  1639. data->vs_soft_start_strength = SPMI_VS_SOFT_START_STR_HW_DEFAULT;
  1640. /* These bindings are optional, so it is okay if they aren't found. */
  1641. of_property_read_u32(node, "qcom,ocp-max-retries",
  1642. &vreg->ocp_max_retries);
  1643. of_property_read_u32(node, "qcom,ocp-retry-delay",
  1644. &vreg->ocp_retry_delay_ms);
  1645. of_property_read_u32(node, "qcom,pin-ctrl-enable",
  1646. &data->pin_ctrl_enable);
  1647. of_property_read_u32(node, "qcom,pin-ctrl-hpm", &data->pin_ctrl_hpm);
  1648. of_property_read_u32(node, "qcom,vs-soft-start-strength",
  1649. &data->vs_soft_start_strength);
  1650. }
  1651. static unsigned int spmi_regulator_of_map_mode(unsigned int mode)
  1652. {
  1653. if (mode == 1)
  1654. return REGULATOR_MODE_NORMAL;
  1655. if (mode == 2)
  1656. return REGULATOR_MODE_FAST;
  1657. return REGULATOR_MODE_IDLE;
  1658. }
  1659. static int spmi_regulator_of_parse(struct device_node *node,
  1660. const struct regulator_desc *desc,
  1661. struct regulator_config *config)
  1662. {
  1663. struct spmi_regulator_init_data data = { };
  1664. struct spmi_regulator *vreg = config->driver_data;
  1665. struct device *dev = config->dev;
  1666. int ret;
  1667. spmi_regulator_get_dt_config(vreg, node, &data);
  1668. if (!vreg->ocp_max_retries)
  1669. vreg->ocp_max_retries = SPMI_VS_OCP_DEFAULT_MAX_RETRIES;
  1670. if (!vreg->ocp_retry_delay_ms)
  1671. vreg->ocp_retry_delay_ms = SPMI_VS_OCP_DEFAULT_RETRY_DELAY_MS;
  1672. ret = spmi_regulator_init_registers(vreg, &data);
  1673. if (ret) {
  1674. dev_err(dev, "common initialization failed, ret=%d\n", ret);
  1675. return ret;
  1676. }
  1677. switch (vreg->logical_type) {
  1678. case SPMI_REGULATOR_LOGICAL_TYPE_FTSMPS:
  1679. case SPMI_REGULATOR_LOGICAL_TYPE_ULT_LO_SMPS:
  1680. case SPMI_REGULATOR_LOGICAL_TYPE_ULT_HO_SMPS:
  1681. case SPMI_REGULATOR_LOGICAL_TYPE_SMPS:
  1682. ret = spmi_regulator_init_slew_rate(vreg);
  1683. if (ret)
  1684. return ret;
  1685. break;
  1686. case SPMI_REGULATOR_LOGICAL_TYPE_FTSMPS426:
  1687. ret = spmi_regulator_init_slew_rate_ftsmps426(vreg,
  1688. SPMI_FTSMPS426_CLOCK_RATE);
  1689. if (ret)
  1690. return ret;
  1691. break;
  1692. case SPMI_REGULATOR_LOGICAL_TYPE_HFS430:
  1693. ret = spmi_regulator_init_slew_rate_ftsmps426(vreg,
  1694. SPMI_HFS430_CLOCK_RATE);
  1695. if (ret)
  1696. return ret;
  1697. break;
  1698. case SPMI_REGULATOR_LOGICAL_TYPE_HFSMPS:
  1699. case SPMI_REGULATOR_LOGICAL_TYPE_FTSMPS3:
  1700. ret = spmi_regulator_init_slew_rate_hfsmps(vreg);
  1701. if (ret)
  1702. return ret;
  1703. break;
  1704. default:
  1705. break;
  1706. }
  1707. if (vreg->logical_type != SPMI_REGULATOR_LOGICAL_TYPE_VS)
  1708. vreg->ocp_irq = 0;
  1709. if (vreg->ocp_irq) {
  1710. ret = devm_request_irq(dev, vreg->ocp_irq,
  1711. spmi_regulator_vs_ocp_isr, IRQF_TRIGGER_RISING, "ocp",
  1712. vreg);
  1713. if (ret < 0) {
  1714. dev_err(dev, "failed to request irq %d, ret=%d\n",
  1715. vreg->ocp_irq, ret);
  1716. return ret;
  1717. }
  1718. ret = devm_delayed_work_autocancel(dev, &vreg->ocp_work,
  1719. spmi_regulator_vs_ocp_work);
  1720. if (ret)
  1721. return ret;
  1722. }
  1723. return 0;
  1724. }
  1725. static const struct spmi_regulator_data pm6125_regulators[] = {
  1726. { "s1", 0x1400, "vdd_s1" },
  1727. { "s2", 0x1700, "vdd_s2" },
  1728. { "s3", 0x1a00, "vdd_s3" },
  1729. { "s4", 0x1d00, "vdd_s4" },
  1730. { "s5", 0x2000, "vdd_s5" },
  1731. { "s6", 0x2300, "vdd_s6" },
  1732. { "s7", 0x2600, "vdd_s7" },
  1733. { "s8", 0x2900, "vdd_s8" },
  1734. { "l1", 0x4000, "vdd_l1_l7_l17_l18" },
  1735. { "l2", 0x4100, "vdd_l2_l3_l4" },
  1736. { "l3", 0x4200, "vdd_l2_l3_l4" },
  1737. { "l4", 0x4300, "vdd_l2_l3_l4" },
  1738. { "l5", 0x4400, "vdd_l5_l15_l19_l20_l21_l22" },
  1739. { "l6", 0x4500, "vdd_l6_l8" },
  1740. { "l7", 0x4600, "vdd_l1_l7_l17_l18" },
  1741. { "l8", 0x4700, "vdd_l6_l8" },
  1742. { "l9", 0x4800, "vdd_l9_l11" },
  1743. { "l10", 0x4900, "vdd_l10_l13_l14" },
  1744. { "l11", 0x4a00, "vdd_l9_l11" },
  1745. { "l12", 0x4b00, "vdd_l12_l16" },
  1746. { "l13", 0x4c00, "vdd_l10_l13_l14" },
  1747. { "l14", 0x4d00, "vdd_l10_l13_l14" },
  1748. { "l15", 0x4e00, "vdd_l5_l15_l19_l20_l21_l22" },
  1749. { "l16", 0x4f00, "vdd_l12_l16" },
  1750. { "l17", 0x5000, "vdd_l1_l7_l17_l18" },
  1751. { "l18", 0x5100, "vdd_l1_l7_l17_l18" },
  1752. { "l19", 0x5200, "vdd_l5_l15_l19_l20_l21_l22" },
  1753. { "l20", 0x5300, "vdd_l5_l15_l19_l20_l21_l22" },
  1754. { "l21", 0x5400, "vdd_l5_l15_l19_l20_l21_l22" },
  1755. { "l22", 0x5500, "vdd_l5_l15_l19_l20_l21_l22" },
  1756. { "l23", 0x5600, "vdd_l23_l24" },
  1757. { "l24", 0x5700, "vdd_l23_l24" },
  1758. };
  1759. static const struct spmi_regulator_data pm660_regulators[] = {
  1760. { "s1", 0x1400, "vdd_s1", },
  1761. { "s2", 0x1700, "vdd_s2", },
  1762. { "s3", 0x1a00, "vdd_s3", },
  1763. { "s4", 0x1d00, "vdd_s3", },
  1764. { "s5", 0x2000, "vdd_s5", },
  1765. { "s6", 0x2300, "vdd_s6", },
  1766. { "l1", 0x4000, "vdd_l1_l6_l7", },
  1767. { "l2", 0x4100, "vdd_l2_l3", },
  1768. { "l3", 0x4200, "vdd_l2_l3", },
  1769. /* l4 is unaccessible on PM660 */
  1770. { "l5", 0x4400, "vdd_l5", },
  1771. { "l6", 0x4500, "vdd_l1_l6_l7", },
  1772. { "l7", 0x4600, "vdd_l1_l6_l7", },
  1773. { "l8", 0x4700, "vdd_l8_l9_l10_l11_l12_l13_l14", },
  1774. { "l9", 0x4800, "vdd_l8_l9_l10_l11_l12_l13_l14", },
  1775. { "l10", 0x4900, "vdd_l8_l9_l10_l11_l12_l13_l14", },
  1776. { "l11", 0x4a00, "vdd_l8_l9_l10_l11_l12_l13_l14", },
  1777. { "l12", 0x4b00, "vdd_l8_l9_l10_l11_l12_l13_l14", },
  1778. { "l13", 0x4c00, "vdd_l8_l9_l10_l11_l12_l13_l14", },
  1779. { "l14", 0x4d00, "vdd_l8_l9_l10_l11_l12_l13_l14", },
  1780. { "l15", 0x4e00, "vdd_l15_l16_l17_l18_l19", },
  1781. { "l16", 0x4f00, "vdd_l15_l16_l17_l18_l19", },
  1782. { "l17", 0x5000, "vdd_l15_l16_l17_l18_l19", },
  1783. { "l18", 0x5100, "vdd_l15_l16_l17_l18_l19", },
  1784. { "l19", 0x5200, "vdd_l15_l16_l17_l18_l19", },
  1785. { }
  1786. };
  1787. static const struct spmi_regulator_data pm660l_regulators[] = {
  1788. { "s1", 0x1400, "vdd_s1", },
  1789. { "s2", 0x1700, "vdd_s2", },
  1790. { "s3", 0x1a00, "vdd_s3", },
  1791. { "s4", 0x1d00, "vdd_s4", },
  1792. { "s5", 0x2000, "vdd_s5", },
  1793. { "l1", 0x4000, "vdd_l1_l9_l10", },
  1794. { "l2", 0x4100, "vdd_l2", },
  1795. { "l3", 0x4200, "vdd_l3_l5_l7_l8", },
  1796. { "l4", 0x4300, "vdd_l4_l6", },
  1797. { "l5", 0x4400, "vdd_l3_l5_l7_l8", },
  1798. { "l6", 0x4500, "vdd_l4_l6", },
  1799. { "l7", 0x4600, "vdd_l3_l5_l7_l8", },
  1800. { "l8", 0x4700, "vdd_l3_l5_l7_l8", },
  1801. { "l9", 0x4800, "vdd_l1_l9_l10", },
  1802. { "l10", 0x4900, "vdd_l1_l9_l10", },
  1803. { }
  1804. };
  1805. static const struct spmi_regulator_data pm8004_regulators[] = {
  1806. { "s2", 0x1700, "vdd_s2", },
  1807. { "s5", 0x2000, "vdd_s5", },
  1808. { }
  1809. };
  1810. static const struct spmi_regulator_data pm8005_regulators[] = {
  1811. { "s1", 0x1400, "vdd_s1", },
  1812. { "s2", 0x1700, "vdd_s2", },
  1813. { "s3", 0x1a00, "vdd_s3", },
  1814. { "s4", 0x1d00, "vdd_s4", },
  1815. { }
  1816. };
  1817. static const struct spmi_regulator_data pm8226_regulators[] = {
  1818. { "s1", 0x1400, "vdd_s1", },
  1819. { "s2", 0x1700, "vdd_s2", },
  1820. { "s3", 0x1a00, "vdd_s3", },
  1821. { "s4", 0x1d00, "vdd_s4", },
  1822. { "s5", 0x2000, "vdd_s5", },
  1823. { "l1", 0x4000, "vdd_l1_l2_l4_l5", },
  1824. { "l2", 0x4100, "vdd_l1_l2_l4_l5", },
  1825. { "l3", 0x4200, "vdd_l3_l24_l26", },
  1826. { "l4", 0x4300, "vdd_l1_l2_l4_l5", },
  1827. { "l5", 0x4400, "vdd_l1_l2_l4_l5", },
  1828. { "l6", 0x4500, "vdd_l6_l7_l8_l9_l27", },
  1829. { "l7", 0x4600, "vdd_l6_l7_l8_l9_l27", },
  1830. { "l8", 0x4700, "vdd_l6_l7_l8_l9_l27", },
  1831. { "l9", 0x4800, "vdd_l6_l7_l8_l9_l27", },
  1832. { "l10", 0x4900, "vdd_l10_l11_l13", },
  1833. { "l11", 0x4a00, "vdd_l10_l11_l13", },
  1834. { "l12", 0x4b00, "vdd_l12_l14", },
  1835. { "l13", 0x4c00, "vdd_l10_l11_l13", },
  1836. { "l14", 0x4d00, "vdd_l12_l14", },
  1837. { "l15", 0x4e00, "vdd_l15_l16_l17_l18", },
  1838. { "l16", 0x4f00, "vdd_l15_l16_l17_l18", },
  1839. { "l17", 0x5000, "vdd_l15_l16_l17_l18", },
  1840. { "l18", 0x5100, "vdd_l15_l16_l17_l18", },
  1841. { "l19", 0x5200, "vdd_l19_l20_l21_l22_l23_l28", },
  1842. { "l20", 0x5300, "vdd_l19_l20_l21_l22_l23_l28", },
  1843. { "l21", 0x5400, "vdd_l19_l20_l21_l22_l23_l28", },
  1844. { "l22", 0x5500, "vdd_l19_l20_l21_l22_l23_l28", },
  1845. { "l23", 0x5600, "vdd_l19_l20_l21_l22_l23_l28", },
  1846. { "l24", 0x5700, "vdd_l3_l24_l26", },
  1847. { "l25", 0x5800, "vdd_l25", },
  1848. { "l26", 0x5900, "vdd_l3_l24_l26", },
  1849. { "l27", 0x5a00, "vdd_l6_l7_l8_l9_l27", },
  1850. { "l28", 0x5b00, "vdd_l19_l20_l21_l22_l23_l28", },
  1851. { "lvs1", 0x8000, "vdd_lvs1", },
  1852. { }
  1853. };
  1854. static const struct spmi_regulator_data pm8841_regulators[] = {
  1855. { "s1", 0x1400, "vdd_s1", },
  1856. { "s2", 0x1700, "vdd_s2", NULL, 0x1c08 },
  1857. { "s3", 0x1a00, "vdd_s3", },
  1858. { "s4", 0x1d00, "vdd_s4", NULL, 0x1c08 },
  1859. { "s5", 0x2000, "vdd_s5", NULL, 0x1c08 },
  1860. { "s6", 0x2300, "vdd_s6", NULL, 0x1c08 },
  1861. { "s7", 0x2600, "vdd_s7", NULL, 0x1c08 },
  1862. { "s8", 0x2900, "vdd_s8", NULL, 0x1c08 },
  1863. { }
  1864. };
  1865. static const struct spmi_regulator_data pm8916_regulators[] = {
  1866. { "s1", 0x1400, "vdd_s1", },
  1867. { "s2", 0x1700, "vdd_s2", },
  1868. { "s3", 0x1a00, "vdd_s3", },
  1869. { "s4", 0x1d00, "vdd_s4", },
  1870. { "l1", 0x4000, "vdd_l1_l3", },
  1871. { "l2", 0x4100, "vdd_l2", },
  1872. { "l3", 0x4200, "vdd_l1_l3", },
  1873. { "l4", 0x4300, "vdd_l4_l5_l6", },
  1874. { "l5", 0x4400, "vdd_l4_l5_l6", },
  1875. { "l6", 0x4500, "vdd_l4_l5_l6", },
  1876. { "l7", 0x4600, "vdd_l7", },
  1877. { "l8", 0x4700, "vdd_l8_l11_l14_l15_l16", },
  1878. { "l9", 0x4800, "vdd_l9_l10_l12_l13_l17_l18", },
  1879. { "l10", 0x4900, "vdd_l9_l10_l12_l13_l17_l18", },
  1880. { "l11", 0x4a00, "vdd_l8_l11_l14_l15_l16", },
  1881. { "l12", 0x4b00, "vdd_l9_l10_l12_l13_l17_l18", },
  1882. { "l13", 0x4c00, "vdd_l9_l10_l12_l13_l17_l18", },
  1883. { "l14", 0x4d00, "vdd_l8_l11_l14_l15_l16", },
  1884. { "l15", 0x4e00, "vdd_l8_l11_l14_l15_l16", },
  1885. { "l16", 0x4f00, "vdd_l8_l11_l14_l15_l16", },
  1886. { "l17", 0x5000, "vdd_l9_l10_l12_l13_l17_l18", },
  1887. { "l18", 0x5100, "vdd_l9_l10_l12_l13_l17_l18", },
  1888. { }
  1889. };
  1890. static const struct spmi_regulator_data pm8941_regulators[] = {
  1891. { "s1", 0x1400, "vdd_s1", },
  1892. { "s2", 0x1700, "vdd_s2", },
  1893. { "s3", 0x1a00, "vdd_s3", },
  1894. { "s4", 0xa000, },
  1895. { "l1", 0x4000, "vdd_l1_l3", },
  1896. { "l2", 0x4100, "vdd_l2_lvs_1_2_3", },
  1897. { "l3", 0x4200, "vdd_l1_l3", },
  1898. { "l4", 0x4300, "vdd_l4_l11", },
  1899. { "l5", 0x4400, "vdd_l5_l7", NULL, 0x0410 },
  1900. { "l6", 0x4500, "vdd_l6_l12_l14_l15", },
  1901. { "l7", 0x4600, "vdd_l5_l7", NULL, 0x0410 },
  1902. { "l8", 0x4700, "vdd_l8_l16_l18_19", },
  1903. { "l9", 0x4800, "vdd_l9_l10_l17_l22", },
  1904. { "l10", 0x4900, "vdd_l9_l10_l17_l22", },
  1905. { "l11", 0x4a00, "vdd_l4_l11", },
  1906. { "l12", 0x4b00, "vdd_l6_l12_l14_l15", },
  1907. { "l13", 0x4c00, "vdd_l13_l20_l23_l24", },
  1908. { "l14", 0x4d00, "vdd_l6_l12_l14_l15", },
  1909. { "l15", 0x4e00, "vdd_l6_l12_l14_l15", },
  1910. { "l16", 0x4f00, "vdd_l8_l16_l18_19", },
  1911. { "l17", 0x5000, "vdd_l9_l10_l17_l22", },
  1912. { "l18", 0x5100, "vdd_l8_l16_l18_19", },
  1913. { "l19", 0x5200, "vdd_l8_l16_l18_19", },
  1914. { "l20", 0x5300, "vdd_l13_l20_l23_l24", },
  1915. { "l21", 0x5400, "vdd_l21", },
  1916. { "l22", 0x5500, "vdd_l9_l10_l17_l22", },
  1917. { "l23", 0x5600, "vdd_l13_l20_l23_l24", },
  1918. { "l24", 0x5700, "vdd_l13_l20_l23_l24", },
  1919. { "lvs1", 0x8000, "vdd_l2_lvs_1_2_3", },
  1920. { "lvs2", 0x8100, "vdd_l2_lvs_1_2_3", },
  1921. { "lvs3", 0x8200, "vdd_l2_lvs_1_2_3", },
  1922. { "5vs1", 0x8300, "vin_5vs", "ocp-5vs1", },
  1923. { "5vs2", 0x8400, "vin_5vs", "ocp-5vs2", },
  1924. { }
  1925. };
  1926. static const struct spmi_regulator_data pm8950_regulators[] = {
  1927. { "s1", 0x1400, "vdd_s1", },
  1928. { "s2", 0x1700, "vdd_s2", },
  1929. { "s3", 0x1a00, "vdd_s3", },
  1930. { "s4", 0x1d00, "vdd_s4", },
  1931. { "s5", 0x2000, "vdd_s5", },
  1932. { "s6", 0x2300, "vdd_s6", },
  1933. { "l1", 0x4000, "vdd_l1_l19", },
  1934. { "l2", 0x4100, "vdd_l2_l23", },
  1935. { "l3", 0x4200, "vdd_l3", },
  1936. { "l4", 0x4300, "vdd_l4_l5_l6_l7_l16", },
  1937. { "l5", 0x4400, "vdd_l4_l5_l6_l7_l16", },
  1938. { "l6", 0x4500, "vdd_l4_l5_l6_l7_l16", },
  1939. { "l7", 0x4600, "vdd_l4_l5_l6_l7_l16", },
  1940. { "l8", 0x4700, "vdd_l8_l11_l12_l17_l22", },
  1941. { "l9", 0x4800, "vdd_l9_l10_l13_l14_l15_l18", },
  1942. { "l10", 0x4900, "vdd_l9_l10_l13_l14_l15_l18", },
  1943. { "l11", 0x4a00, "vdd_l8_l11_l12_l17_l22", },
  1944. { "l12", 0x4b00, "vdd_l8_l11_l12_l17_l22", },
  1945. { "l13", 0x4c00, "vdd_l9_l10_l13_l14_l15_l18", },
  1946. { "l14", 0x4d00, "vdd_l9_l10_l13_l14_l15_l18", },
  1947. { "l15", 0x4e00, "vdd_l9_l10_l13_l14_l15_l18", },
  1948. { "l16", 0x4f00, "vdd_l4_l5_l6_l7_l16", },
  1949. { "l17", 0x5000, "vdd_l8_l11_l12_l17_l22", },
  1950. { "l18", 0x5100, "vdd_l9_l10_l13_l14_l15_l18", },
  1951. { "l19", 0x5200, "vdd_l1_l19", },
  1952. { "l20", 0x5300, "vdd_l20", },
  1953. { "l21", 0x5400, "vdd_l21", },
  1954. { "l22", 0x5500, "vdd_l8_l11_l12_l17_l22", },
  1955. { "l23", 0x5600, "vdd_l2_l23", },
  1956. { }
  1957. };
  1958. static const struct spmi_regulator_data pm8994_regulators[] = {
  1959. { "s1", 0x1400, "vdd_s1", },
  1960. { "s2", 0x1700, "vdd_s2", },
  1961. { "s3", 0x1a00, "vdd_s3", },
  1962. { "s4", 0x1d00, "vdd_s4", },
  1963. { "s5", 0x2000, "vdd_s5", },
  1964. { "s6", 0x2300, "vdd_s6", },
  1965. { "s7", 0x2600, "vdd_s7", },
  1966. { "s8", 0x2900, "vdd_s8", },
  1967. { "s9", 0x2c00, "vdd_s9", },
  1968. { "s10", 0x2f00, "vdd_s10", },
  1969. { "s11", 0x3200, "vdd_s11", },
  1970. { "s12", 0x3500, "vdd_s12", },
  1971. { "l1", 0x4000, "vdd_l1", },
  1972. { "l2", 0x4100, "vdd_l2_l26_l28", },
  1973. { "l3", 0x4200, "vdd_l3_l11", },
  1974. { "l4", 0x4300, "vdd_l4_l27_l31", },
  1975. { "l5", 0x4400, "vdd_l5_l7", },
  1976. { "l6", 0x4500, "vdd_l6_l12_l32", },
  1977. { "l7", 0x4600, "vdd_l5_l7", },
  1978. { "l8", 0x4700, "vdd_l8_l16_l30", },
  1979. { "l9", 0x4800, "vdd_l9_l10_l18_l22", },
  1980. { "l10", 0x4900, "vdd_l9_l10_l18_l22", },
  1981. { "l11", 0x4a00, "vdd_l3_l11", },
  1982. { "l12", 0x4b00, "vdd_l6_l12_l32", },
  1983. { "l13", 0x4c00, "vdd_l13_l19_l23_l24", },
  1984. { "l14", 0x4d00, "vdd_l14_l15", },
  1985. { "l15", 0x4e00, "vdd_l14_l15", },
  1986. { "l16", 0x4f00, "vdd_l8_l16_l30", },
  1987. { "l17", 0x5000, "vdd_l17_l29", },
  1988. { "l18", 0x5100, "vdd_l9_l10_l18_l22", },
  1989. { "l19", 0x5200, "vdd_l13_l19_l23_l24", },
  1990. { "l20", 0x5300, "vdd_l20_l21", },
  1991. { "l21", 0x5400, "vdd_l20_l21", },
  1992. { "l22", 0x5500, "vdd_l9_l10_l18_l22", },
  1993. { "l23", 0x5600, "vdd_l13_l19_l23_l24", },
  1994. { "l24", 0x5700, "vdd_l13_l19_l23_l24", },
  1995. { "l25", 0x5800, "vdd_l25", },
  1996. { "l26", 0x5900, "vdd_l2_l26_l28", },
  1997. { "l27", 0x5a00, "vdd_l4_l27_l31", },
  1998. { "l28", 0x5b00, "vdd_l2_l26_l28", },
  1999. { "l29", 0x5c00, "vdd_l17_l29", },
  2000. { "l30", 0x5d00, "vdd_l8_l16_l30", },
  2001. { "l31", 0x5e00, "vdd_l4_l27_l31", },
  2002. { "l32", 0x5f00, "vdd_l6_l12_l32", },
  2003. { "lvs1", 0x8000, "vdd_lvs_1_2", },
  2004. { "lvs2", 0x8100, "vdd_lvs_1_2", },
  2005. { }
  2006. };
  2007. static const struct spmi_regulator_data pmi8994_regulators[] = {
  2008. { "s1", 0x1400, "vdd_s1", },
  2009. { "s2", 0x1700, "vdd_s2", },
  2010. { "s3", 0x1a00, "vdd_s3", },
  2011. { "l1", 0x4000, "vdd_l1", },
  2012. { }
  2013. };
  2014. static const struct spmi_regulator_data pmp8074_regulators[] = {
  2015. { "s1", 0x1400, "vdd_s1"},
  2016. { "s2", 0x1700, "vdd_s2"},
  2017. { "s3", 0x1a00, "vdd_s3"},
  2018. { "s4", 0x1d00, "vdd_s4"},
  2019. { "s5", 0x2000, "vdd_s5"},
  2020. { "l1", 0x4000, "vdd_l1_l2"},
  2021. { "l2", 0x4100, "vdd_l1_l2"},
  2022. { "l3", 0x4200, "vdd_l3_l8"},
  2023. { "l4", 0x4300, "vdd_l4"},
  2024. { "l5", 0x4400, "vdd_l5_l6_l15"},
  2025. { "l6", 0x4500, "vdd_l5_l6_l15"},
  2026. { "l7", 0x4600, "vdd_l7"},
  2027. { "l8", 0x4700, "vdd_l3_l8"},
  2028. { "l9", 0x4800, "vdd_l9"},
  2029. /* l10 is currently unsupported HT_P50 */
  2030. { "l11", 0x4a00, "vdd_l10_l11_l12_l13"},
  2031. { "l12", 0x4b00, "vdd_l10_l11_l12_l13"},
  2032. { "l13", 0x4c00, "vdd_l10_l11_l12_l13"},
  2033. { }
  2034. };
  2035. static const struct spmi_regulator_data pms405_regulators[] = {
  2036. { "s3", 0x1a00, "vdd_s3"},
  2037. { }
  2038. };
  2039. static const struct of_device_id qcom_spmi_regulator_match[] = {
  2040. { .compatible = "qcom,pm6125-regulators", .data = &pm6125_regulators },
  2041. { .compatible = "qcom,pm660-regulators", .data = &pm660_regulators },
  2042. { .compatible = "qcom,pm660l-regulators", .data = &pm660l_regulators },
  2043. { .compatible = "qcom,pm8004-regulators", .data = &pm8004_regulators },
  2044. { .compatible = "qcom,pm8005-regulators", .data = &pm8005_regulators },
  2045. { .compatible = "qcom,pm8226-regulators", .data = &pm8226_regulators },
  2046. { .compatible = "qcom,pm8841-regulators", .data = &pm8841_regulators },
  2047. { .compatible = "qcom,pm8916-regulators", .data = &pm8916_regulators },
  2048. { .compatible = "qcom,pm8941-regulators", .data = &pm8941_regulators },
  2049. { .compatible = "qcom,pm8950-regulators", .data = &pm8950_regulators },
  2050. { .compatible = "qcom,pm8994-regulators", .data = &pm8994_regulators },
  2051. { .compatible = "qcom,pmi8994-regulators", .data = &pmi8994_regulators },
  2052. { .compatible = "qcom,pmp8074-regulators", .data = &pmp8074_regulators },
  2053. { .compatible = "qcom,pms405-regulators", .data = &pms405_regulators },
  2054. { }
  2055. };
  2056. MODULE_DEVICE_TABLE(of, qcom_spmi_regulator_match);
  2057. static int qcom_spmi_regulator_probe(struct platform_device *pdev)
  2058. {
  2059. const struct spmi_regulator_data *reg;
  2060. const struct spmi_voltage_range *range;
  2061. const struct of_device_id *match;
  2062. struct regulator_config config = { };
  2063. struct regulator_dev *rdev;
  2064. struct spmi_regulator *vreg;
  2065. struct regmap *regmap;
  2066. const char *name;
  2067. struct device *dev = &pdev->dev;
  2068. struct device_node *node = pdev->dev.of_node;
  2069. struct device_node *syscon, *reg_node;
  2070. struct property *reg_prop;
  2071. int ret, lenp;
  2072. struct list_head *vreg_list;
  2073. vreg_list = devm_kzalloc(dev, sizeof(*vreg_list), GFP_KERNEL);
  2074. if (!vreg_list)
  2075. return -ENOMEM;
  2076. INIT_LIST_HEAD(vreg_list);
  2077. platform_set_drvdata(pdev, vreg_list);
  2078. regmap = dev_get_regmap(dev->parent, NULL);
  2079. if (!regmap)
  2080. return -ENODEV;
  2081. match = of_match_device(qcom_spmi_regulator_match, &pdev->dev);
  2082. if (!match)
  2083. return -ENODEV;
  2084. if (of_find_property(node, "qcom,saw-reg", &lenp)) {
  2085. syscon = of_parse_phandle(node, "qcom,saw-reg", 0);
  2086. saw_regmap = syscon_node_to_regmap(syscon);
  2087. of_node_put(syscon);
  2088. if (IS_ERR(saw_regmap))
  2089. dev_err(dev, "ERROR reading SAW regmap\n");
  2090. }
  2091. for (reg = match->data; reg->name; reg++) {
  2092. if (saw_regmap) {
  2093. reg_node = of_get_child_by_name(node, reg->name);
  2094. reg_prop = of_find_property(reg_node, "qcom,saw-slave",
  2095. &lenp);
  2096. of_node_put(reg_node);
  2097. if (reg_prop)
  2098. continue;
  2099. }
  2100. vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL);
  2101. if (!vreg)
  2102. return -ENOMEM;
  2103. vreg->dev = dev;
  2104. vreg->base = reg->base;
  2105. vreg->regmap = regmap;
  2106. if (reg->ocp) {
  2107. vreg->ocp_irq = platform_get_irq_byname(pdev, reg->ocp);
  2108. if (vreg->ocp_irq < 0)
  2109. return vreg->ocp_irq;
  2110. }
  2111. vreg->desc.id = -1;
  2112. vreg->desc.owner = THIS_MODULE;
  2113. vreg->desc.type = REGULATOR_VOLTAGE;
  2114. vreg->desc.enable_reg = reg->base + SPMI_COMMON_REG_ENABLE;
  2115. vreg->desc.enable_mask = SPMI_COMMON_ENABLE_MASK;
  2116. vreg->desc.enable_val = SPMI_COMMON_ENABLE;
  2117. vreg->desc.name = name = reg->name;
  2118. vreg->desc.supply_name = reg->supply;
  2119. vreg->desc.of_match = reg->name;
  2120. vreg->desc.of_parse_cb = spmi_regulator_of_parse;
  2121. vreg->desc.of_map_mode = spmi_regulator_of_map_mode;
  2122. ret = spmi_regulator_match(vreg, reg->force_type);
  2123. if (ret)
  2124. continue;
  2125. if (saw_regmap) {
  2126. reg_node = of_get_child_by_name(node, reg->name);
  2127. reg_prop = of_find_property(reg_node, "qcom,saw-leader",
  2128. &lenp);
  2129. of_node_put(reg_node);
  2130. if (reg_prop) {
  2131. spmi_saw_ops = *(vreg->desc.ops);
  2132. spmi_saw_ops.set_voltage_sel =
  2133. spmi_regulator_saw_set_voltage;
  2134. vreg->desc.ops = &spmi_saw_ops;
  2135. }
  2136. }
  2137. if (vreg->set_points && vreg->set_points->count == 1) {
  2138. /* since there is only one range */
  2139. range = vreg->set_points->range;
  2140. vreg->desc.uV_step = range->step_uV;
  2141. }
  2142. config.dev = dev;
  2143. config.driver_data = vreg;
  2144. config.regmap = regmap;
  2145. rdev = devm_regulator_register(dev, &vreg->desc, &config);
  2146. if (IS_ERR(rdev)) {
  2147. dev_err(dev, "failed to register %s\n", name);
  2148. return PTR_ERR(rdev);
  2149. }
  2150. INIT_LIST_HEAD(&vreg->node);
  2151. list_add(&vreg->node, vreg_list);
  2152. }
  2153. return 0;
  2154. }
  2155. static struct platform_driver qcom_spmi_regulator_driver = {
  2156. .driver = {
  2157. .name = "qcom-spmi-regulator",
  2158. .of_match_table = qcom_spmi_regulator_match,
  2159. },
  2160. .probe = qcom_spmi_regulator_probe,
  2161. };
  2162. module_platform_driver(qcom_spmi_regulator_driver);
  2163. MODULE_DESCRIPTION("Qualcomm SPMI PMIC regulator driver");
  2164. MODULE_LICENSE("GPL v2");
  2165. MODULE_ALIAS("platform:qcom-spmi-regulator");