rpm-smd-regulator.c 59 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2012-2015, 2018-2021, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #define pr_fmt(fmt) "%s: " fmt, __func__
  7. #include <linux/module.h>
  8. #include <linux/err.h>
  9. #include <linux/kernel.h>
  10. #include <linux/init.h>
  11. #include <linux/slab.h>
  12. #include <linux/spinlock.h>
  13. #include <linux/string.h>
  14. #include <linux/of.h>
  15. #include <linux/of_device.h>
  16. #include <linux/platform_device.h>
  17. #include <linux/regulator/driver.h>
  18. #include <linux/regulator/debug-regulator.h>
  19. #include <linux/regulator/machine.h>
  20. #include <linux/regulator/of_regulator.h>
  21. #include <linux/regulator/rpm-smd-regulator.h>
  22. #include <linux/regulator/proxy-consumer.h>
  23. #include <dt-bindings/regulator/qcom,rpm-smd-regulator.h>
  24. #include <soc/qcom/rpm-smd.h>
  25. #include <linux/debugfs.h>
  26. #include <linux/limits.h>
  27. /* Debug Definitions */
  28. enum {
  29. RPM_VREG_DEBUG_REQUEST = BIT(0),
  30. RPM_VREG_DEBUG_FULL_REQUEST = BIT(1),
  31. RPM_VREG_DEBUG_DUPLICATE = BIT(2),
  32. };
  33. static int rpm_vreg_debug_mask;
  34. #ifdef CONFIG_DEBUG_FS
  35. static bool is_debugfs_created;
  36. #endif
  37. #define vreg_err(req, fmt, ...) \
  38. pr_err("%s: " fmt, req->rdesc.name, ##__VA_ARGS__)
  39. /* RPM regulator request types */
  40. enum rpm_regulator_type {
  41. RPM_REGULATOR_TYPE_LDO,
  42. RPM_REGULATOR_TYPE_SMPS,
  43. RPM_REGULATOR_TYPE_VS,
  44. RPM_REGULATOR_TYPE_NCP,
  45. RPM_REGULATOR_TYPE_BOB,
  46. RPM_REGULATOR_TYPE_MAX,
  47. };
  48. /* Supported PMIC regulator LDO and BOB types */
  49. enum rpm_regulator_hw_type {
  50. RPM_REGULATOR_HW_TYPE_UNKNOWN,
  51. RPM_REGULATOR_HW_TYPE_PMIC4_LDO,
  52. RPM_REGULATOR_HW_TYPE_PMIC5_LDO,
  53. RPM_REGULATOR_HW_TYPE_PMIC4_BOB,
  54. RPM_REGULATOR_HW_TYPE_PMIC5_BOB,
  55. RPM_REGULATOR_HW_TYPE_MAX,
  56. };
  57. /* RPM resource parameters */
  58. enum rpm_regulator_param_index {
  59. RPM_REGULATOR_PARAM_ENABLE,
  60. RPM_REGULATOR_PARAM_VOLTAGE,
  61. RPM_REGULATOR_PARAM_CURRENT,
  62. RPM_REGULATOR_PARAM_MODE_LDO,
  63. RPM_REGULATOR_PARAM_MODE_SMPS,
  64. RPM_REGULATOR_PARAM_PIN_CTRL_ENABLE,
  65. RPM_REGULATOR_PARAM_PIN_CTRL_MODE,
  66. RPM_REGULATOR_PARAM_FREQUENCY,
  67. RPM_REGULATOR_PARAM_HEAD_ROOM,
  68. RPM_REGULATOR_PARAM_QUIET_MODE,
  69. RPM_REGULATOR_PARAM_FREQ_REASON,
  70. RPM_REGULATOR_PARAM_CORNER,
  71. RPM_REGULATOR_PARAM_BYPASS,
  72. RPM_REGULATOR_PARAM_FLOOR_CORNER,
  73. RPM_REGULATOR_PARAM_LEVEL,
  74. RPM_REGULATOR_PARAM_FLOOR_LEVEL,
  75. RPM_REGULATOR_PARAM_MODE_BOB,
  76. RPM_REGULATOR_PARAM_PIN_CTRL_VOLTAGE1,
  77. RPM_REGULATOR_PARAM_PIN_CTRL_VOLTAGE2,
  78. RPM_REGULATOR_PARAM_PIN_CTRL_VOLTAGE3,
  79. RPM_REGULATOR_PARAM_MAX,
  80. };
  81. enum rpm_regulator_bob_mode_pmic4 {
  82. RPM_REGULATOR_PMIC4_BOB_MODE_PASS = 0,
  83. RPM_REGULATOR_PMIC4_BOB_MODE_PFM = 1,
  84. RPM_REGULATOR_PMIC4_BOB_MODE_AUTO = 2,
  85. RPM_REGULATOR_PMIC4_BOB_MODE_PWM = 3,
  86. };
  87. enum rpm_regulator_bob_mode_pmic5 {
  88. RPM_REGULATOR_PMIC5_BOB_MODE_PASS = 2,
  89. RPM_REGULATOR_PMIC5_BOB_MODE_PFM = 4,
  90. RPM_REGULATOR_PMIC5_BOB_MODE_AUTO = 6,
  91. RPM_REGULATOR_PMIC5_BOB_MODE_PWM = 7,
  92. };
  93. #define RPM_SET_CONFIG_ACTIVE BIT(0)
  94. #define RPM_SET_CONFIG_SLEEP BIT(1)
  95. #define RPM_SET_CONFIG_BOTH (RPM_SET_CONFIG_ACTIVE \
  96. | RPM_SET_CONFIG_SLEEP)
  97. struct rpm_regulator_param {
  98. char *name;
  99. char *property_name;
  100. u32 key;
  101. u32 min;
  102. u32 max;
  103. u32 supported_regulator_types;
  104. };
  105. #define PARAM(_idx, _support_ldo, _support_smps, _support_vs, _support_ncp, \
  106. _support_bob, _name, _min, _max, _property_name) \
  107. [RPM_REGULATOR_PARAM_##_idx] = { \
  108. .name = _name, \
  109. .property_name = _property_name, \
  110. .min = _min, \
  111. .max = _max, \
  112. .supported_regulator_types = \
  113. _support_ldo << RPM_REGULATOR_TYPE_LDO | \
  114. _support_smps << RPM_REGULATOR_TYPE_SMPS | \
  115. _support_vs << RPM_REGULATOR_TYPE_VS | \
  116. _support_ncp << RPM_REGULATOR_TYPE_NCP | \
  117. _support_bob << RPM_REGULATOR_TYPE_BOB, \
  118. }
  119. static struct rpm_regulator_param params[RPM_REGULATOR_PARAM_MAX] = {
  120. /* ID LDO SMPS VS NCP BOB name min max property-name */
  121. PARAM(ENABLE, 1, 1, 1, 1, 1, "swen", 0, 1, "qcom,init-enable"),
  122. PARAM(VOLTAGE, 1, 1, 0, 1, 1, "uv", 0, 0x7FFFFFF, "qcom,init-voltage"),
  123. PARAM(CURRENT, 0, 1, 0, 0, 0, "ma", 0, 0x1FFF, "qcom,init-current"),
  124. PARAM(MODE_LDO, 1, 0, 0, 0, 0, "lsmd", 0, 4, "qcom,init-ldo-mode"),
  125. PARAM(MODE_SMPS, 0, 1, 0, 0, 0, "ssmd", 0, 2, "qcom,init-smps-mode"),
  126. PARAM(PIN_CTRL_ENABLE, 1, 1, 1, 0, 0, "pcen", 0, 0xF, "qcom,init-pin-ctrl-enable"),
  127. PARAM(PIN_CTRL_MODE, 0, 1, 1, 0, 0, "pcmd", 0, 0x1F, "qcom,init-pin-ctrl-mode"),
  128. PARAM(FREQUENCY, 0, 1, 0, 1, 0, "freq", 0, 31, "qcom,init-frequency"),
  129. PARAM(HEAD_ROOM, 0, 0, 0, 1, 0, "hr", 0, 0x7FFFFFFF, "qcom,init-head-room"),
  130. PARAM(QUIET_MODE, 0, 1, 0, 0, 0, "qm", 0, 2, "qcom,init-quiet-mode"),
  131. PARAM(FREQ_REASON, 0, 1, 0, 1, 0, "resn", 0, 8, "qcom,init-freq-reason"),
  132. PARAM(CORNER, 0, 1, 0, 0, 0, "corn", 0, 6, "qcom,init-voltage-corner"),
  133. PARAM(BYPASS, 0, 0, 0, 0, 0, "bypa", 0, 1, "qcom,init-disallow-bypass"),
  134. PARAM(FLOOR_CORNER, 0, 1, 0, 0, 0, "vfc", 0, 6, "qcom,init-voltage-floor-corner"),
  135. PARAM(LEVEL, 0, 1, 0, 0, 0, "vlvl", 0, 0xFFFF, "qcom,init-voltage-level"),
  136. PARAM(FLOOR_LEVEL, 0, 1, 0, 0, 0, "vfl", 0, 0xFFFF, "qcom,init-voltage-floor-level"),
  137. PARAM(MODE_BOB, 0, 0, 0, 0, 1, "bobm", 0, 4, "qcom,init-bob-mode"),
  138. PARAM(PIN_CTRL_VOLTAGE1, 0, 0, 0, 0, 1, "pcv1", 0, 0x7FFFFFF, "qcom,init-pin-ctrl-voltage1"),
  139. PARAM(PIN_CTRL_VOLTAGE2, 0, 0, 0, 0, 1, "pcv2", 0, 0x7FFFFFF, "qcom,init-pin-ctrl-voltage2"),
  140. PARAM(PIN_CTRL_VOLTAGE3, 0, 0, 0, 0, 1, "pcv3", 0, 0x7FFFFFF, "qcom,init-pin-ctrl-voltage3"),
  141. };
  142. /* Indices for use with pin control enable via enable/disable feature. */
  143. #define RPM_VREG_PIN_CTRL_STATE_DISABLE 0
  144. #define RPM_VREG_PIN_CTRL_STATE_ENABLE 1
  145. #define RPM_VREG_PIN_CTRL_STATE_COUNT 2
  146. struct rpm_vreg_request {
  147. u32 param[RPM_REGULATOR_PARAM_MAX];
  148. u32 valid;
  149. u32 modified;
  150. };
  151. struct rpm_reg_mode_info {
  152. u32 mode;
  153. int min_load_ua;
  154. };
  155. struct rpm_vreg {
  156. struct rpm_vreg_request aggr_req_active;
  157. struct rpm_vreg_request aggr_req_sleep;
  158. struct list_head reg_list;
  159. const char *resource_name;
  160. u32 resource_id;
  161. bool allow_atomic;
  162. int regulator_type;
  163. int hpm_min_load;
  164. struct rpm_reg_mode_info *mode;
  165. int mode_count;
  166. int enable_time;
  167. spinlock_t slock;
  168. struct mutex mlock;
  169. unsigned long flags;
  170. bool sleep_request_sent;
  171. bool wait_for_ack_active;
  172. bool wait_for_ack_sleep;
  173. bool always_wait_for_ack;
  174. bool apps_only;
  175. struct msm_rpm_request *handle_active;
  176. struct msm_rpm_request *handle_sleep;
  177. enum rpm_regulator_hw_type regulator_hw_type;
  178. };
  179. struct rpm_regulator {
  180. struct regulator_desc rdesc;
  181. struct regulator_dev *rdev;
  182. struct rpm_vreg *rpm_vreg;
  183. struct dentry *dfs_root;
  184. struct list_head list;
  185. bool set_active;
  186. bool set_sleep;
  187. bool always_send_voltage;
  188. bool always_send_current;
  189. bool use_pin_ctrl_for_enable;
  190. struct rpm_vreg_request req;
  191. int system_load;
  192. int min_uV;
  193. int max_uV;
  194. u32 pin_ctrl_mask[RPM_VREG_PIN_CTRL_STATE_COUNT];
  195. enum rpm_regulator_param_index voltage_index;
  196. int voltage_offset;
  197. };
  198. /*
  199. * This voltage in uV is returned by get_voltage functions when there is no way
  200. * to determine the current voltage level. It is needed because the regulator
  201. * framework treats a 0 uV voltage as an error.
  202. */
  203. #define VOLTAGE_UNKNOWN 1
  204. /*
  205. * Regulator requests sent in the active set take effect immediately. Requests
  206. * sent in the sleep set take effect when the Apps processor transitions into
  207. * RPM assisted power collapse. For any given regulator, if an active set
  208. * request is present, but not a sleep set request, then the active set request
  209. * is used at all times, even when the Apps processor is power collapsed.
  210. *
  211. * The rpm-regulator-smd takes advantage of this default usage of the active set
  212. * request by only sending a sleep set request if it differs from the
  213. * corresponding active set request.
  214. */
  215. #define RPM_SET_ACTIVE MSM_RPM_CTX_ACTIVE_SET
  216. #define RPM_SET_SLEEP MSM_RPM_CTX_SLEEP_SET
  217. static u32 rpm_vreg_string_to_int(const u8 *str)
  218. {
  219. int i, len;
  220. u32 output = 0;
  221. len = strnlen(str, sizeof(u32));
  222. for (i = 0; i < len; i++)
  223. output |= str[i] << (i * 8);
  224. return output;
  225. }
  226. static inline void rpm_vreg_lock(struct rpm_vreg *rpm_vreg)
  227. {
  228. if (rpm_vreg->allow_atomic)
  229. spin_lock_irqsave(&rpm_vreg->slock, rpm_vreg->flags);
  230. else
  231. mutex_lock(&rpm_vreg->mlock);
  232. }
  233. static inline void rpm_vreg_unlock(struct rpm_vreg *rpm_vreg)
  234. {
  235. if (rpm_vreg->allow_atomic)
  236. spin_unlock_irqrestore(&rpm_vreg->slock, rpm_vreg->flags);
  237. else
  238. mutex_unlock(&rpm_vreg->mlock);
  239. }
  240. static inline bool rpm_vreg_active_or_sleep_enabled(struct rpm_vreg *rpm_vreg)
  241. {
  242. return (rpm_vreg->aggr_req_active.param[RPM_REGULATOR_PARAM_ENABLE]
  243. && (rpm_vreg->aggr_req_active.valid
  244. & BIT(RPM_REGULATOR_PARAM_ENABLE)))
  245. || ((rpm_vreg->aggr_req_sleep.param[RPM_REGULATOR_PARAM_ENABLE])
  246. && (rpm_vreg->aggr_req_sleep.valid
  247. & BIT(RPM_REGULATOR_PARAM_ENABLE)));
  248. }
  249. static inline bool rpm_vreg_shared_active_or_sleep_enabled_valid
  250. (struct rpm_vreg *rpm_vreg)
  251. {
  252. return !rpm_vreg->apps_only &&
  253. ((rpm_vreg->aggr_req_active.valid
  254. & BIT(RPM_REGULATOR_PARAM_ENABLE))
  255. || (rpm_vreg->aggr_req_sleep.valid
  256. & BIT(RPM_REGULATOR_PARAM_ENABLE)));
  257. }
  258. static const u32 power_level_params =
  259. BIT(RPM_REGULATOR_PARAM_ENABLE) |
  260. BIT(RPM_REGULATOR_PARAM_VOLTAGE) |
  261. BIT(RPM_REGULATOR_PARAM_CURRENT) |
  262. BIT(RPM_REGULATOR_PARAM_CORNER) |
  263. BIT(RPM_REGULATOR_PARAM_BYPASS) |
  264. BIT(RPM_REGULATOR_PARAM_FLOOR_CORNER) |
  265. BIT(RPM_REGULATOR_PARAM_LEVEL) |
  266. BIT(RPM_REGULATOR_PARAM_FLOOR_LEVEL);
  267. static bool rpm_vreg_ack_required(struct rpm_vreg *rpm_vreg, u32 set,
  268. const u32 *prev_param, const u32 *param,
  269. u32 prev_valid, u32 modified)
  270. {
  271. u32 mask;
  272. int i;
  273. if (rpm_vreg->always_wait_for_ack
  274. || (set == RPM_SET_ACTIVE && rpm_vreg->wait_for_ack_active)
  275. || (set == RPM_SET_SLEEP && rpm_vreg->wait_for_ack_sleep))
  276. return true;
  277. for (i = 0; i < RPM_REGULATOR_PARAM_MAX; i++) {
  278. mask = BIT(i);
  279. if (modified & mask) {
  280. if ((prev_valid & mask) && (power_level_params & mask)
  281. && (param[i] <= prev_param[i]))
  282. continue;
  283. else
  284. return true;
  285. }
  286. }
  287. return false;
  288. }
  289. static void rpm_vreg_check_param_max(struct rpm_regulator *regulator, int index,
  290. u32 new_max)
  291. {
  292. struct rpm_vreg *rpm_vreg = regulator->rpm_vreg;
  293. if (regulator->set_active
  294. && (rpm_vreg->aggr_req_active.valid & BIT(index))
  295. && rpm_vreg->aggr_req_active.param[index] > new_max)
  296. rpm_vreg->wait_for_ack_active = true;
  297. if (regulator->set_sleep
  298. && (rpm_vreg->aggr_req_sleep.valid & BIT(index))
  299. && rpm_vreg->aggr_req_sleep.param[index] > new_max)
  300. rpm_vreg->wait_for_ack_sleep = true;
  301. }
  302. /*
  303. * This is used when voting for LPM or HPM by subtracting or adding to the
  304. * hpm_min_load of a regulator. It has units of uA.
  305. */
  306. #define LOAD_THRESHOLD_STEP 1000
  307. static inline int rpm_vreg_hpm_min_uA(struct rpm_vreg *rpm_vreg)
  308. {
  309. return rpm_vreg->hpm_min_load;
  310. }
  311. static inline int rpm_vreg_lpm_max_uA(struct rpm_vreg *rpm_vreg)
  312. {
  313. return rpm_vreg->hpm_min_load - LOAD_THRESHOLD_STEP;
  314. }
  315. #define MICRO_TO_MILLI(uV) ((uV) / 1000)
  316. #define MILLI_TO_MICRO(uV) ((uV) * 1000)
  317. #define DEBUG_PRINT_BUFFER_SIZE 512
  318. #define REQ_SENT 0
  319. #define REQ_PREV 1
  320. #define REQ_CACHED 2
  321. #define REQ_TYPES 3
  322. static void rpm_regulator_req(struct rpm_regulator *regulator, int set,
  323. bool sent)
  324. {
  325. char buf[DEBUG_PRINT_BUFFER_SIZE];
  326. size_t buflen = DEBUG_PRINT_BUFFER_SIZE;
  327. struct rpm_vreg *rpm_vreg = regulator->rpm_vreg;
  328. struct rpm_vreg_request *aggr;
  329. bool first;
  330. u32 mask[REQ_TYPES] = {0, 0, 0};
  331. const char *req_names[REQ_TYPES] = {"sent", "prev", "cached"};
  332. int pos = 0;
  333. int i, j;
  334. aggr = (set == RPM_SET_ACTIVE)
  335. ? &rpm_vreg->aggr_req_active : &rpm_vreg->aggr_req_sleep;
  336. if (rpm_vreg_debug_mask & RPM_VREG_DEBUG_DUPLICATE) {
  337. mask[REQ_SENT] = aggr->modified;
  338. mask[REQ_PREV] = aggr->valid & ~aggr->modified;
  339. } else if (sent
  340. && (rpm_vreg_debug_mask & RPM_VREG_DEBUG_FULL_REQUEST)) {
  341. mask[REQ_SENT] = aggr->modified;
  342. mask[REQ_PREV] = aggr->valid & ~aggr->modified;
  343. } else if (sent && (rpm_vreg_debug_mask & RPM_VREG_DEBUG_REQUEST)) {
  344. mask[REQ_SENT] = aggr->modified;
  345. }
  346. if (!(mask[REQ_SENT] | mask[REQ_PREV]))
  347. return;
  348. if (set == RPM_SET_SLEEP && !rpm_vreg->sleep_request_sent) {
  349. mask[REQ_CACHED] = mask[REQ_SENT] | mask[REQ_PREV];
  350. mask[REQ_SENT] = 0;
  351. mask[REQ_PREV] = 0;
  352. }
  353. pos += scnprintf(buf + pos, buflen - pos, "%s%s: ",
  354. KERN_INFO, __func__);
  355. pos += scnprintf(buf + pos, buflen - pos, "%s %u (%s): s=%s",
  356. rpm_vreg->resource_name, rpm_vreg->resource_id,
  357. regulator->rdesc.name,
  358. (set == RPM_SET_ACTIVE ? "act" : "slp"));
  359. for (i = 0; i < REQ_TYPES; i++) {
  360. if (mask[i])
  361. pos += scnprintf(buf + pos, buflen - pos, "; %s: ",
  362. req_names[i]);
  363. first = true;
  364. for (j = 0; j < RPM_REGULATOR_PARAM_MAX; j++) {
  365. if (mask[i] & BIT(j)) {
  366. pos += scnprintf(buf + pos, buflen - pos,
  367. "%s%s=%u", (first ? "" : ", "),
  368. params[j].name, aggr->param[j]);
  369. first = false;
  370. }
  371. }
  372. }
  373. pos += scnprintf(buf + pos, buflen - pos, "\n");
  374. pr_info("%s\n", buf);
  375. }
  376. #define RPM_VREG_SET_PARAM(_regulator, _param, _val) \
  377. { \
  378. (_regulator)->req.param[RPM_REGULATOR_PARAM_##_param] = _val; \
  379. (_regulator)->req.modified |= BIT(RPM_REGULATOR_PARAM_##_param); \
  380. } \
  381. static int rpm_vreg_add_kvp_to_request(struct rpm_vreg *rpm_vreg,
  382. const u32 *param, int idx, u32 set)
  383. {
  384. struct msm_rpm_request *handle;
  385. handle = (set == RPM_SET_ACTIVE ? rpm_vreg->handle_active
  386. : rpm_vreg->handle_sleep);
  387. if (rpm_vreg->allow_atomic)
  388. return msm_rpm_add_kvp_data_noirq(handle, params[idx].key,
  389. (u8 *)&param[idx], 4);
  390. else
  391. return msm_rpm_add_kvp_data(handle, params[idx].key,
  392. (u8 *)&param[idx], 4);
  393. }
  394. static void rpm_vreg_check_modified_requests(const u32 *prev_param,
  395. const u32 *param, u32 prev_valid, u32 *modified)
  396. {
  397. u32 value_changed = 0;
  398. int i;
  399. for (i = 0; i < RPM_REGULATOR_PARAM_MAX; i++) {
  400. if (param[i] != prev_param[i])
  401. value_changed |= BIT(i);
  402. }
  403. /*
  404. * Only keep bits that are for changed parameters or previously
  405. * invalid parameters.
  406. */
  407. *modified &= value_changed | ~prev_valid;
  408. }
  409. static int rpm_vreg_add_modified_requests(struct rpm_regulator *regulator,
  410. u32 set, const u32 *param, u32 modified)
  411. {
  412. struct rpm_vreg *rpm_vreg = regulator->rpm_vreg;
  413. int rc = 0;
  414. int i;
  415. for (i = 0; i < RPM_REGULATOR_PARAM_MAX; i++) {
  416. /* Only send requests for modified parameters. */
  417. if (modified & BIT(i)) {
  418. rc = rpm_vreg_add_kvp_to_request(rpm_vreg, param, i,
  419. set);
  420. if (rc) {
  421. vreg_err(regulator,
  422. "add KVP failed: %s %u; %s, rc=%d\n",
  423. rpm_vreg->resource_name,
  424. rpm_vreg->resource_id, params[i].name,
  425. rc);
  426. return rc;
  427. }
  428. }
  429. }
  430. return rc;
  431. }
  432. static int rpm_vreg_send_request(struct rpm_regulator *regulator, u32 set,
  433. bool wait_for_ack)
  434. {
  435. struct rpm_vreg *rpm_vreg = regulator->rpm_vreg;
  436. struct msm_rpm_request *handle
  437. = (set == RPM_SET_ACTIVE ? rpm_vreg->handle_active
  438. : rpm_vreg->handle_sleep);
  439. int rc = 0;
  440. void *temp;
  441. if (unlikely(rpm_vreg->allow_atomic)) {
  442. rc = msm_rpm_wait_for_ack_noirq(msm_rpm_send_request_noirq(
  443. handle));
  444. } else if (wait_for_ack) {
  445. rc = msm_rpm_wait_for_ack(msm_rpm_send_request(handle));
  446. } else {
  447. temp = msm_rpm_send_request_noack(handle);
  448. if (IS_ERR(temp))
  449. rc = PTR_ERR(temp);
  450. }
  451. if (rc)
  452. vreg_err(regulator,
  453. "msm rpm send failed: %s %u; set=%s, rc=%d\n",
  454. rpm_vreg->resource_name,
  455. rpm_vreg->resource_id,
  456. (set == RPM_SET_ACTIVE ? "act" : "slp"), rc);
  457. return rc;
  458. }
  459. #define RPM_VREG_AGGR_MIN(_idx, _param_aggr, _param_reg) \
  460. { \
  461. _param_aggr[RPM_REGULATOR_PARAM_##_idx] \
  462. = min(_param_aggr[RPM_REGULATOR_PARAM_##_idx], \
  463. _param_reg[RPM_REGULATOR_PARAM_##_idx]); \
  464. }
  465. #define RPM_VREG_AGGR_MAX(_idx, _param_aggr, _param_reg) \
  466. { \
  467. _param_aggr[RPM_REGULATOR_PARAM_##_idx] \
  468. = max(_param_aggr[RPM_REGULATOR_PARAM_##_idx], \
  469. _param_reg[RPM_REGULATOR_PARAM_##_idx]); \
  470. }
  471. #define RPM_VREG_AGGR_SUM(_idx, _param_aggr, _param_reg) \
  472. { \
  473. _param_aggr[RPM_REGULATOR_PARAM_##_idx] \
  474. += _param_reg[RPM_REGULATOR_PARAM_##_idx]; \
  475. }
  476. #define RPM_VREG_AGGR_OR(_idx, _param_aggr, _param_reg) \
  477. { \
  478. _param_aggr[RPM_REGULATOR_PARAM_##_idx] \
  479. |= _param_reg[RPM_REGULATOR_PARAM_##_idx]; \
  480. }
  481. /*
  482. * Aggregation is performed on each parameter based on the way that the RPM
  483. * aggregates that type internally between RPM masters.
  484. */
  485. static void rpm_vreg_aggregate_params(u32 *param_aggr, const u32 *param_reg)
  486. {
  487. RPM_VREG_AGGR_MAX(ENABLE, param_aggr, param_reg);
  488. RPM_VREG_AGGR_MAX(VOLTAGE, param_aggr, param_reg);
  489. RPM_VREG_AGGR_SUM(CURRENT, param_aggr, param_reg);
  490. RPM_VREG_AGGR_MAX(MODE_LDO, param_aggr, param_reg);
  491. RPM_VREG_AGGR_MAX(MODE_SMPS, param_aggr, param_reg);
  492. RPM_VREG_AGGR_OR(PIN_CTRL_ENABLE, param_aggr, param_reg);
  493. RPM_VREG_AGGR_OR(PIN_CTRL_MODE, param_aggr, param_reg);
  494. RPM_VREG_AGGR_MIN(FREQUENCY, param_aggr, param_reg);
  495. RPM_VREG_AGGR_MAX(HEAD_ROOM, param_aggr, param_reg);
  496. RPM_VREG_AGGR_MAX(QUIET_MODE, param_aggr, param_reg);
  497. RPM_VREG_AGGR_MAX(FREQ_REASON, param_aggr, param_reg);
  498. RPM_VREG_AGGR_MAX(CORNER, param_aggr, param_reg);
  499. RPM_VREG_AGGR_MAX(BYPASS, param_aggr, param_reg);
  500. RPM_VREG_AGGR_MAX(FLOOR_CORNER, param_aggr, param_reg);
  501. RPM_VREG_AGGR_MAX(LEVEL, param_aggr, param_reg);
  502. RPM_VREG_AGGR_MAX(FLOOR_LEVEL, param_aggr, param_reg);
  503. RPM_VREG_AGGR_MAX(MODE_BOB, param_aggr, param_reg);
  504. RPM_VREG_AGGR_MAX(PIN_CTRL_VOLTAGE1, param_aggr, param_reg);
  505. RPM_VREG_AGGR_MAX(PIN_CTRL_VOLTAGE2, param_aggr, param_reg);
  506. RPM_VREG_AGGR_MAX(PIN_CTRL_VOLTAGE3, param_aggr, param_reg);
  507. }
  508. static int rpm_vreg_aggregate_requests(struct rpm_regulator *regulator)
  509. {
  510. struct rpm_vreg *rpm_vreg = regulator->rpm_vreg;
  511. u32 param_active[RPM_REGULATOR_PARAM_MAX];
  512. u32 param_sleep[RPM_REGULATOR_PARAM_MAX];
  513. u32 modified_active, modified_sleep;
  514. struct rpm_regulator *reg;
  515. bool sleep_set_differs = false;
  516. bool send_active = false;
  517. bool send_sleep = false;
  518. bool wait_for_ack;
  519. int rc = 0;
  520. int i;
  521. memset(param_active, 0, sizeof(param_active));
  522. memset(param_sleep, 0, sizeof(param_sleep));
  523. modified_active = rpm_vreg->aggr_req_active.modified;
  524. modified_sleep = rpm_vreg->aggr_req_sleep.modified;
  525. /*
  526. * Aggregate all of the requests for this regulator in both active
  527. * and sleep sets.
  528. */
  529. list_for_each_entry(reg, &rpm_vreg->reg_list, list) {
  530. if (reg->set_active) {
  531. rpm_vreg_aggregate_params(param_active, reg->req.param);
  532. modified_active |= reg->req.modified;
  533. }
  534. if (reg->set_sleep) {
  535. rpm_vreg_aggregate_params(param_sleep, reg->req.param);
  536. modified_sleep |= reg->req.modified;
  537. }
  538. }
  539. /*
  540. * Check if the aggregated sleep set parameter values differ from the
  541. * aggregated active set parameter values.
  542. */
  543. if (!rpm_vreg->sleep_request_sent) {
  544. for (i = 0; i < RPM_REGULATOR_PARAM_MAX; i++) {
  545. if ((param_active[i] != param_sleep[i])
  546. && (modified_sleep & BIT(i))) {
  547. sleep_set_differs = true;
  548. break;
  549. }
  550. }
  551. }
  552. /* Add KVPs to the active set RPM request if they have new values. */
  553. rpm_vreg_check_modified_requests(rpm_vreg->aggr_req_active.param,
  554. param_active, rpm_vreg->aggr_req_active.valid,
  555. &modified_active);
  556. rc = rpm_vreg_add_modified_requests(regulator, RPM_SET_ACTIVE,
  557. param_active, modified_active);
  558. if (rc)
  559. return rc;
  560. send_active = modified_active;
  561. /*
  562. * Sleep set configurations are only sent if they differ from the
  563. * active set values. This is because the active set values will take
  564. * effect during rpm assisted power collapse in the absence of sleep set
  565. * values.
  566. *
  567. * However, once a sleep set request is sent for a given regulator,
  568. * additional sleep set requests must be sent in the future even if they
  569. * match the corresponding active set requests.
  570. */
  571. if (rpm_vreg->sleep_request_sent || sleep_set_differs) {
  572. /* Add KVPs to the sleep set RPM request if they are new. */
  573. rpm_vreg_check_modified_requests(rpm_vreg->aggr_req_sleep.param,
  574. param_sleep, rpm_vreg->aggr_req_sleep.valid,
  575. &modified_sleep);
  576. rc = rpm_vreg_add_modified_requests(regulator, RPM_SET_SLEEP,
  577. param_sleep, modified_sleep);
  578. if (rc)
  579. return rc;
  580. send_sleep = modified_sleep;
  581. }
  582. /* Send active set request to the RPM if it contains new KVPs. */
  583. if (send_active) {
  584. wait_for_ack = rpm_vreg_ack_required(rpm_vreg, RPM_SET_ACTIVE,
  585. rpm_vreg->aggr_req_active.param,
  586. param_active,
  587. rpm_vreg->aggr_req_active.valid,
  588. modified_active);
  589. rc = rpm_vreg_send_request(regulator, RPM_SET_ACTIVE,
  590. wait_for_ack);
  591. if (rc)
  592. return rc;
  593. rpm_vreg->aggr_req_active.valid |= modified_active;
  594. rpm_vreg->wait_for_ack_active = false;
  595. }
  596. /* Store the results of the aggregation. */
  597. rpm_vreg->aggr_req_active.modified = modified_active;
  598. memcpy(rpm_vreg->aggr_req_active.param, param_active,
  599. sizeof(param_active));
  600. /* Handle debug printing of the active set request. */
  601. rpm_regulator_req(regulator, RPM_SET_ACTIVE, send_active);
  602. if (send_active)
  603. rpm_vreg->aggr_req_active.modified = 0;
  604. /* Send sleep set request to the RPM if it contains new KVPs. */
  605. if (send_sleep) {
  606. wait_for_ack = rpm_vreg_ack_required(rpm_vreg, RPM_SET_SLEEP,
  607. rpm_vreg->aggr_req_sleep.param,
  608. param_sleep,
  609. rpm_vreg->aggr_req_sleep.valid,
  610. modified_sleep);
  611. rc = rpm_vreg_send_request(regulator, RPM_SET_SLEEP,
  612. wait_for_ack);
  613. if (rc)
  614. return rc;
  615. rpm_vreg->sleep_request_sent = true;
  616. rpm_vreg->aggr_req_sleep.valid |= modified_sleep;
  617. rpm_vreg->wait_for_ack_sleep = false;
  618. }
  619. /* Store the results of the aggregation. */
  620. rpm_vreg->aggr_req_sleep.modified = modified_sleep;
  621. memcpy(rpm_vreg->aggr_req_sleep.param, param_sleep,
  622. sizeof(param_sleep));
  623. /* Handle debug printing of the sleep set request. */
  624. rpm_regulator_req(regulator, RPM_SET_SLEEP, send_sleep);
  625. if (send_sleep)
  626. rpm_vreg->aggr_req_sleep.modified = 0;
  627. /*
  628. * Loop over all requests for this regulator to update the valid and
  629. * modified values for use in future aggregation.
  630. */
  631. list_for_each_entry(reg, &rpm_vreg->reg_list, list) {
  632. reg->req.valid |= reg->req.modified;
  633. reg->req.modified = 0;
  634. }
  635. return rc;
  636. }
  637. static int rpm_vreg_is_enabled(struct regulator_dev *rdev)
  638. {
  639. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  640. if (likely(!reg->use_pin_ctrl_for_enable))
  641. return reg->req.param[RPM_REGULATOR_PARAM_ENABLE];
  642. else
  643. return reg->req.param[RPM_REGULATOR_PARAM_PIN_CTRL_ENABLE]
  644. == reg->pin_ctrl_mask[RPM_VREG_PIN_CTRL_STATE_ENABLE];
  645. }
  646. static int rpm_vreg_enable(struct regulator_dev *rdev)
  647. {
  648. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  649. int rc;
  650. u32 prev_enable;
  651. rpm_vreg_lock(reg->rpm_vreg);
  652. if (likely(!reg->use_pin_ctrl_for_enable)) {
  653. /* Enable using swen KVP. */
  654. prev_enable = reg->req.param[RPM_REGULATOR_PARAM_ENABLE];
  655. RPM_VREG_SET_PARAM(reg, ENABLE, 1);
  656. rc = rpm_vreg_aggregate_requests(reg);
  657. if (rc) {
  658. vreg_err(reg, "enable failed, rc=%d\n", rc);
  659. RPM_VREG_SET_PARAM(reg, ENABLE, prev_enable);
  660. }
  661. } else {
  662. /* Enable using pcen KVP. */
  663. prev_enable
  664. = reg->req.param[RPM_REGULATOR_PARAM_PIN_CTRL_ENABLE];
  665. RPM_VREG_SET_PARAM(reg, PIN_CTRL_ENABLE,
  666. reg->pin_ctrl_mask[RPM_VREG_PIN_CTRL_STATE_ENABLE]);
  667. rc = rpm_vreg_aggregate_requests(reg);
  668. if (rc) {
  669. vreg_err(reg, "enable failed, rc=%d\n", rc);
  670. RPM_VREG_SET_PARAM(reg, PIN_CTRL_ENABLE, prev_enable);
  671. }
  672. }
  673. rpm_vreg_unlock(reg->rpm_vreg);
  674. return rc;
  675. }
  676. static int rpm_vreg_disable(struct regulator_dev *rdev)
  677. {
  678. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  679. int rc;
  680. u32 prev_enable;
  681. rpm_vreg_lock(reg->rpm_vreg);
  682. if (likely(!reg->use_pin_ctrl_for_enable)) {
  683. /* Disable using swen KVP. */
  684. prev_enable = reg->req.param[RPM_REGULATOR_PARAM_ENABLE];
  685. RPM_VREG_SET_PARAM(reg, ENABLE, 0);
  686. rc = rpm_vreg_aggregate_requests(reg);
  687. if (rc) {
  688. vreg_err(reg, "disable failed, rc=%d\n", rc);
  689. RPM_VREG_SET_PARAM(reg, ENABLE, prev_enable);
  690. }
  691. } else {
  692. /* Disable using pcen KVP. */
  693. prev_enable
  694. = reg->req.param[RPM_REGULATOR_PARAM_PIN_CTRL_ENABLE];
  695. RPM_VREG_SET_PARAM(reg, PIN_CTRL_ENABLE,
  696. reg->pin_ctrl_mask[RPM_VREG_PIN_CTRL_STATE_DISABLE]);
  697. rc = rpm_vreg_aggregate_requests(reg);
  698. if (rc) {
  699. vreg_err(reg, "disable failed, rc=%d\n", rc);
  700. RPM_VREG_SET_PARAM(reg, PIN_CTRL_ENABLE, prev_enable);
  701. }
  702. }
  703. rpm_vreg_unlock(reg->rpm_vreg);
  704. return rc;
  705. }
  706. #define RPM_VREG_SET_VOLTAGE(_regulator, _val) \
  707. { \
  708. (_regulator)->req.param[(_regulator)->voltage_index] = _val; \
  709. (_regulator)->req.modified |= BIT((_regulator)->voltage_index); \
  710. } \
  711. static int rpm_vreg_set_voltage(struct regulator_dev *rdev, int min_uV,
  712. int max_uV, unsigned int *selector)
  713. {
  714. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  715. int rc = 0;
  716. int voltage;
  717. u32 prev_voltage;
  718. voltage = min_uV - reg->voltage_offset;
  719. if (voltage < params[reg->voltage_index].min
  720. || voltage > params[reg->voltage_index].max) {
  721. vreg_err(reg, "voltage=%d for key=%s is not within allowed range: [%u, %u]\n",
  722. voltage, params[reg->voltage_index].name,
  723. params[reg->voltage_index].min,
  724. params[reg->voltage_index].max);
  725. return -EINVAL;
  726. }
  727. rpm_vreg_lock(reg->rpm_vreg);
  728. prev_voltage = reg->req.param[reg->voltage_index];
  729. RPM_VREG_SET_VOLTAGE(reg, voltage);
  730. rpm_vreg_check_param_max(reg, reg->voltage_index,
  731. max_uV - reg->voltage_offset);
  732. /*
  733. * Only send a new voltage if the regulator is currently enabled or
  734. * if the regulator has been configured to always send voltage updates.
  735. */
  736. if (reg->always_send_voltage
  737. || rpm_vreg_active_or_sleep_enabled(reg->rpm_vreg)
  738. || rpm_vreg_shared_active_or_sleep_enabled_valid(reg->rpm_vreg))
  739. rc = rpm_vreg_aggregate_requests(reg);
  740. if (rc) {
  741. vreg_err(reg, "set voltage for key=%s failed, rc=%d\n",
  742. params[reg->voltage_index].name, rc);
  743. RPM_VREG_SET_VOLTAGE(reg, prev_voltage);
  744. }
  745. rpm_vreg_unlock(reg->rpm_vreg);
  746. return rc;
  747. }
  748. static int rpm_vreg_get_voltage(struct regulator_dev *rdev)
  749. {
  750. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  751. int uV;
  752. uV = reg->req.param[reg->voltage_index] + reg->voltage_offset;
  753. if (uV == 0)
  754. uV = VOLTAGE_UNKNOWN;
  755. return uV;
  756. }
  757. #define REGULATOR_MODE_PMIC4_LDO_LPM 0
  758. #define REGULATOR_MODE_PMIC4_LDO_HPM 1
  759. #define REGULATOR_MODE_PMIC5_LDO_RM 3
  760. #define REGULATOR_MODE_PMIC5_LDO_LPM 4
  761. #define REGULATOR_MODE_PMIC5_LDO_HPM 7
  762. static int _rpm_vreg_ldo_set_mode(struct regulator_dev *rdev, unsigned int mode)
  763. {
  764. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  765. u32 hw_mode;
  766. int rc = 0;
  767. switch (mode) {
  768. case REGULATOR_MODE_NORMAL:
  769. switch (reg->rpm_vreg->regulator_hw_type) {
  770. case RPM_REGULATOR_HW_TYPE_PMIC4_LDO:
  771. hw_mode = REGULATOR_MODE_PMIC4_LDO_HPM;
  772. break;
  773. case RPM_REGULATOR_HW_TYPE_PMIC5_LDO:
  774. hw_mode = REGULATOR_MODE_PMIC5_LDO_HPM;
  775. break;
  776. default:
  777. vreg_err(reg, "unsupported ldo hw type: %d\n",
  778. reg->rpm_vreg->regulator_hw_type);
  779. return -EINVAL;
  780. }
  781. break;
  782. case REGULATOR_MODE_IDLE:
  783. switch (reg->rpm_vreg->regulator_hw_type) {
  784. case RPM_REGULATOR_HW_TYPE_PMIC4_LDO:
  785. hw_mode = REGULATOR_MODE_PMIC4_LDO_LPM;
  786. break;
  787. case RPM_REGULATOR_HW_TYPE_PMIC5_LDO:
  788. hw_mode = REGULATOR_MODE_PMIC5_LDO_LPM;
  789. break;
  790. default:
  791. vreg_err(reg, "unsupported ldo hw type: %d\n",
  792. reg->rpm_vreg->regulator_hw_type);
  793. return -EINVAL;
  794. }
  795. break;
  796. case REGULATOR_MODE_STANDBY:
  797. switch (reg->rpm_vreg->regulator_hw_type) {
  798. case RPM_REGULATOR_HW_TYPE_PMIC5_LDO:
  799. hw_mode = REGULATOR_MODE_PMIC5_LDO_RM;
  800. /* This mode must be supported explicitly */
  801. if (!reg->rpm_vreg->mode_count) {
  802. vreg_err(reg, "unsupported mode: %u\n", mode);
  803. return -EINVAL;
  804. }
  805. break;
  806. default:
  807. vreg_err(reg, "unsupported ldo hw type: %d\n",
  808. reg->rpm_vreg->regulator_hw_type);
  809. return -EINVAL;
  810. }
  811. break;
  812. default:
  813. vreg_err(reg, "invalid mode: %u\n", mode);
  814. return -EINVAL;
  815. }
  816. RPM_VREG_SET_PARAM(reg, MODE_LDO, hw_mode);
  817. /*
  818. * Only send the mode if the regulator is currently enabled or if the
  819. * regulator has been configured to always send current updates.
  820. */
  821. if (reg->always_send_current
  822. || rpm_vreg_active_or_sleep_enabled(reg->rpm_vreg)
  823. || rpm_vreg_shared_active_or_sleep_enabled_valid(reg->rpm_vreg))
  824. rc = rpm_vreg_aggregate_requests(reg);
  825. if (rc)
  826. vreg_err(reg, "set mode failed, rc=%d\n", rc);
  827. return rc;
  828. }
  829. static int rpm_vreg_ldo_set_mode(struct regulator_dev *rdev, unsigned int mode)
  830. {
  831. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  832. int i, rc = 0;
  833. if (reg->rpm_vreg->mode_count && reg->rpm_vreg->regulator_hw_type ==
  834. RPM_REGULATOR_HW_TYPE_PMIC5_LDO) {
  835. /* Confirm requested mode is among those supported for PMIC5 LDO*/
  836. for (i = 0; i < reg->rpm_vreg->mode_count; i++)
  837. if (reg->rpm_vreg->mode[i].mode == mode)
  838. break;
  839. if (i == reg->rpm_vreg->mode_count) {
  840. vreg_err(reg, "unsupported LDO mode: %u\n", mode);
  841. return -EINVAL;
  842. }
  843. }
  844. rpm_vreg_lock(reg->rpm_vreg);
  845. rc = _rpm_vreg_ldo_set_mode(rdev, mode);
  846. rpm_vreg_unlock(reg->rpm_vreg);
  847. return rc;
  848. }
  849. static unsigned int rpm_vreg_ldo_get_mode(struct regulator_dev *rdev)
  850. {
  851. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  852. u32 hw_mode;
  853. hw_mode = reg->req.param[RPM_REGULATOR_PARAM_MODE_LDO];
  854. switch (hw_mode) {
  855. case REGULATOR_MODE_PMIC4_LDO_HPM:
  856. case REGULATOR_MODE_PMIC5_LDO_HPM:
  857. return REGULATOR_MODE_NORMAL;
  858. case REGULATOR_MODE_PMIC5_LDO_RM:
  859. return REGULATOR_MODE_STANDBY;
  860. case REGULATOR_MODE_PMIC4_LDO_LPM:
  861. case REGULATOR_MODE_PMIC5_LDO_LPM:
  862. default:
  863. return REGULATOR_MODE_IDLE;
  864. }
  865. }
  866. static int rpm_vreg_ldo_set_load(struct regulator_dev *rdev, int load_uA)
  867. {
  868. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  869. unsigned int mode;
  870. int rc = 0, i;
  871. rpm_vreg_lock(reg->rpm_vreg);
  872. /* Supported modes are retention, LPM and HPM. */
  873. if (reg->rpm_vreg->mode_count && reg->rpm_vreg->regulator_hw_type ==
  874. RPM_REGULATOR_HW_TYPE_PMIC5_LDO) {
  875. /* Confirm requested mode is among those supported for PMIC5 LDO*/
  876. for (i = reg->rpm_vreg->mode_count - 1; i > 0; i--)
  877. if (reg->rpm_vreg->mode[i].min_load_ua <= load_uA + reg->system_load)
  878. break;
  879. mode = reg->rpm_vreg->mode[i].mode;
  880. } else {
  881. mode = (load_uA + reg->system_load >= reg->rpm_vreg->hpm_min_load)
  882. ? REGULATOR_MODE_NORMAL : REGULATOR_MODE_IDLE;
  883. }
  884. rc = _rpm_vreg_ldo_set_mode(rdev, mode);
  885. rpm_vreg_unlock(reg->rpm_vreg);
  886. return rc;
  887. }
  888. static int rpm_vreg_set_mode(struct regulator_dev *rdev, unsigned int mode)
  889. {
  890. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  891. int rc = 0;
  892. u32 prev_current;
  893. int prev_uA;
  894. rpm_vreg_lock(reg->rpm_vreg);
  895. prev_current = reg->req.param[RPM_REGULATOR_PARAM_CURRENT];
  896. prev_uA = MILLI_TO_MICRO(prev_current);
  897. if (mode == REGULATOR_MODE_NORMAL) {
  898. /* Make sure that request current is in HPM range. */
  899. if (prev_uA < rpm_vreg_hpm_min_uA(reg->rpm_vreg))
  900. RPM_VREG_SET_PARAM(reg, CURRENT,
  901. MICRO_TO_MILLI(rpm_vreg_hpm_min_uA(reg->rpm_vreg)));
  902. } else if (REGULATOR_MODE_IDLE) {
  903. /* Make sure that request current is in LPM range. */
  904. if (prev_uA > rpm_vreg_lpm_max_uA(reg->rpm_vreg))
  905. RPM_VREG_SET_PARAM(reg, CURRENT,
  906. MICRO_TO_MILLI(rpm_vreg_lpm_max_uA(reg->rpm_vreg)));
  907. } else {
  908. vreg_err(reg, "invalid mode: %u\n", mode);
  909. rpm_vreg_unlock(reg->rpm_vreg);
  910. return -EINVAL;
  911. }
  912. /*
  913. * Only send a new load current value if the regulator is currently
  914. * enabled or if the regulator has been configured to always send
  915. * current updates.
  916. */
  917. if (reg->always_send_current
  918. || rpm_vreg_active_or_sleep_enabled(reg->rpm_vreg)
  919. || rpm_vreg_shared_active_or_sleep_enabled_valid(reg->rpm_vreg))
  920. rc = rpm_vreg_aggregate_requests(reg);
  921. if (rc) {
  922. vreg_err(reg, "set mode failed, rc=%d\n", rc);
  923. RPM_VREG_SET_PARAM(reg, CURRENT, prev_current);
  924. }
  925. rpm_vreg_unlock(reg->rpm_vreg);
  926. return rc;
  927. }
  928. static unsigned int rpm_vreg_get_mode(struct regulator_dev *rdev)
  929. {
  930. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  931. return (reg->req.param[RPM_REGULATOR_PARAM_CURRENT]
  932. >= MICRO_TO_MILLI(reg->rpm_vreg->hpm_min_load))
  933. ? REGULATOR_MODE_NORMAL : REGULATOR_MODE_IDLE;
  934. }
  935. static unsigned int rpm_vreg_get_optimum_mode(struct regulator_dev *rdev,
  936. int input_uV, int output_uV, int load_uA)
  937. {
  938. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  939. u32 load_mA;
  940. load_uA += reg->system_load;
  941. load_mA = MICRO_TO_MILLI(load_uA);
  942. if (load_mA > params[RPM_REGULATOR_PARAM_CURRENT].max)
  943. load_mA = params[RPM_REGULATOR_PARAM_CURRENT].max;
  944. rpm_vreg_lock(reg->rpm_vreg);
  945. RPM_VREG_SET_PARAM(reg, CURRENT, load_mA);
  946. rpm_vreg_unlock(reg->rpm_vreg);
  947. return (load_uA >= reg->rpm_vreg->hpm_min_load)
  948. ? REGULATOR_MODE_NORMAL : REGULATOR_MODE_IDLE;
  949. }
  950. static int rpm_vreg_set_bob_mode(struct regulator_dev *rdev, unsigned int mode)
  951. {
  952. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  953. int rc;
  954. u32 hw_mode, hw_type, prev_mode;
  955. rpm_vreg_lock(reg->rpm_vreg);
  956. prev_mode = reg->req.param[RPM_REGULATOR_PARAM_MODE_BOB];
  957. hw_type = reg->rpm_vreg->regulator_hw_type;
  958. if (hw_type == RPM_REGULATOR_HW_TYPE_PMIC4_BOB) {
  959. switch (mode) {
  960. case REGULATOR_MODE_FAST:
  961. hw_mode = RPM_REGULATOR_PMIC4_BOB_MODE_PWM;
  962. break;
  963. case REGULATOR_MODE_NORMAL:
  964. hw_mode = RPM_REGULATOR_PMIC4_BOB_MODE_AUTO;
  965. break;
  966. case REGULATOR_MODE_IDLE:
  967. hw_mode = RPM_REGULATOR_PMIC4_BOB_MODE_PFM;
  968. break;
  969. case REGULATOR_MODE_STANDBY:
  970. hw_mode = RPM_REGULATOR_PMIC4_BOB_MODE_PASS;
  971. break;
  972. default:
  973. vreg_err(reg, "invalid mode: %u\n", mode);
  974. rpm_vreg_unlock(reg->rpm_vreg);
  975. return -EINVAL;
  976. }
  977. } else if (hw_type == RPM_REGULATOR_HW_TYPE_PMIC5_BOB) {
  978. switch (mode) {
  979. case REGULATOR_MODE_FAST:
  980. hw_mode = RPM_REGULATOR_PMIC5_BOB_MODE_PWM;
  981. break;
  982. case REGULATOR_MODE_NORMAL:
  983. hw_mode = RPM_REGULATOR_PMIC5_BOB_MODE_AUTO;
  984. break;
  985. case REGULATOR_MODE_IDLE:
  986. hw_mode = RPM_REGULATOR_PMIC5_BOB_MODE_PFM;
  987. break;
  988. case REGULATOR_MODE_STANDBY:
  989. hw_mode = RPM_REGULATOR_PMIC5_BOB_MODE_PASS;
  990. break;
  991. default:
  992. vreg_err(reg, "invalid mode: %u\n", mode);
  993. rpm_vreg_unlock(reg->rpm_vreg);
  994. return -EINVAL;
  995. }
  996. } else {
  997. vreg_err(reg, "unsupported bob hw type: %d\n",
  998. reg->rpm_vreg->regulator_hw_type);
  999. rpm_vreg_unlock(reg->rpm_vreg);
  1000. return -EINVAL;
  1001. }
  1002. RPM_VREG_SET_PARAM(reg, MODE_BOB, hw_mode);
  1003. rc = rpm_vreg_aggregate_requests(reg);
  1004. if (rc) {
  1005. vreg_err(reg, "set BoB mode failed, rc=%d\n", rc);
  1006. RPM_VREG_SET_PARAM(reg, MODE_BOB, prev_mode);
  1007. }
  1008. rpm_vreg_unlock(reg->rpm_vreg);
  1009. return rc;
  1010. }
  1011. static unsigned int rpm_vreg_get_bob_mode(struct regulator_dev *rdev)
  1012. {
  1013. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  1014. unsigned int mode = REGULATOR_MODE_NORMAL;
  1015. u32 hw_type = reg->rpm_vreg->regulator_hw_type;
  1016. if (hw_type == RPM_REGULATOR_HW_TYPE_PMIC4_BOB) {
  1017. switch (reg->req.param[RPM_REGULATOR_PARAM_MODE_BOB]) {
  1018. case RPM_REGULATOR_PMIC4_BOB_MODE_PWM:
  1019. mode = REGULATOR_MODE_FAST;
  1020. break;
  1021. case RPM_REGULATOR_PMIC4_BOB_MODE_AUTO:
  1022. mode = REGULATOR_MODE_NORMAL;
  1023. break;
  1024. case RPM_REGULATOR_PMIC4_BOB_MODE_PFM:
  1025. mode = REGULATOR_MODE_IDLE;
  1026. break;
  1027. case RPM_REGULATOR_PMIC4_BOB_MODE_PASS:
  1028. mode = REGULATOR_MODE_STANDBY;
  1029. break;
  1030. default:
  1031. vreg_err(reg, "BoB mode unknown\n");
  1032. }
  1033. } else if (hw_type == RPM_REGULATOR_HW_TYPE_PMIC5_BOB) {
  1034. switch (reg->req.param[RPM_REGULATOR_PARAM_MODE_BOB]) {
  1035. case RPM_REGULATOR_PMIC5_BOB_MODE_PWM:
  1036. mode = REGULATOR_MODE_FAST;
  1037. break;
  1038. case RPM_REGULATOR_PMIC5_BOB_MODE_AUTO:
  1039. mode = REGULATOR_MODE_NORMAL;
  1040. break;
  1041. case RPM_REGULATOR_PMIC5_BOB_MODE_PFM:
  1042. mode = REGULATOR_MODE_IDLE;
  1043. break;
  1044. case RPM_REGULATOR_PMIC5_BOB_MODE_PASS:
  1045. mode = REGULATOR_MODE_STANDBY;
  1046. break;
  1047. default:
  1048. vreg_err(reg, "BoB mode unknown\n");
  1049. }
  1050. }
  1051. return mode;
  1052. }
  1053. #define RPM_SMD_REGULATOR_MAX_MODES 5
  1054. static const int bob_supported_modes[RPM_SMD_REGULATOR_MAX_MODES] = {
  1055. [RPM_SMD_REGULATOR_MODE_PASS] = REGULATOR_MODE_STANDBY,
  1056. [RPM_SMD_REGULATOR_MODE_RET] = REGULATOR_MODE_INVALID,
  1057. [RPM_SMD_REGULATOR_MODE_LPM] = REGULATOR_MODE_IDLE,
  1058. [RPM_SMD_REGULATOR_MODE_AUTO] = REGULATOR_MODE_NORMAL,
  1059. [RPM_SMD_REGULATOR_MODE_HPM] = REGULATOR_MODE_FAST,
  1060. };
  1061. static const int ldo5_supported_modes[RPM_SMD_REGULATOR_MAX_MODES] = {
  1062. [RPM_SMD_REGULATOR_MODE_PASS] = REGULATOR_MODE_INVALID,
  1063. [RPM_SMD_REGULATOR_MODE_RET] = REGULATOR_MODE_STANDBY,
  1064. [RPM_SMD_REGULATOR_MODE_LPM] = REGULATOR_MODE_IDLE,
  1065. [RPM_SMD_REGULATOR_MODE_AUTO] = REGULATOR_MODE_INVALID,
  1066. [RPM_SMD_REGULATOR_MODE_HPM] = REGULATOR_MODE_NORMAL,
  1067. };
  1068. static int rpm_vreg_bob_set_load(struct regulator_dev *rdev, int load_ua)
  1069. {
  1070. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  1071. int rc = 0, i;
  1072. unsigned int mode;
  1073. if (!reg->rpm_vreg->mode_count) {
  1074. pr_err("No loads supported for BOB\n");
  1075. return -EINVAL;
  1076. }
  1077. for (i = reg->rpm_vreg->mode_count - 1; i > 0; i--)
  1078. if (reg->rpm_vreg->mode[i].min_load_ua <= load_ua + reg->system_load)
  1079. break;
  1080. mode = reg->rpm_vreg->mode[i].mode;
  1081. rc = rpm_vreg_set_bob_mode(rdev, mode);
  1082. return rc;
  1083. }
  1084. static u32 rpm_vreg_get_hw_mode(struct rpm_regulator *reg, unsigned int mode)
  1085. {
  1086. u32 hw_mode = U32_MAX, hw_type = reg->rpm_vreg->regulator_hw_type;
  1087. switch (mode) {
  1088. case RPM_SMD_REGULATOR_MODE_PASS:
  1089. switch (hw_type) {
  1090. case RPM_REGULATOR_HW_TYPE_PMIC4_BOB:
  1091. hw_mode = RPM_REGULATOR_PMIC4_BOB_MODE_PASS;
  1092. break;
  1093. case RPM_REGULATOR_HW_TYPE_PMIC5_BOB:
  1094. hw_mode = RPM_REGULATOR_PMIC5_BOB_MODE_PASS;
  1095. break;
  1096. case RPM_REGULATOR_HW_TYPE_PMIC4_LDO:
  1097. case RPM_REGULATOR_HW_TYPE_PMIC5_LDO:
  1098. default:
  1099. break;
  1100. }
  1101. break;
  1102. case RPM_SMD_REGULATOR_MODE_RET:
  1103. switch (hw_type) {
  1104. case RPM_REGULATOR_HW_TYPE_PMIC5_LDO:
  1105. hw_mode = REGULATOR_MODE_PMIC5_LDO_RM;
  1106. break;
  1107. case RPM_REGULATOR_HW_TYPE_PMIC4_LDO:
  1108. case RPM_REGULATOR_HW_TYPE_PMIC4_BOB:
  1109. case RPM_REGULATOR_HW_TYPE_PMIC5_BOB:
  1110. default:
  1111. break;
  1112. }
  1113. break;
  1114. case RPM_SMD_REGULATOR_MODE_LPM:
  1115. switch (hw_type) {
  1116. case RPM_REGULATOR_HW_TYPE_PMIC4_BOB:
  1117. hw_mode = RPM_REGULATOR_PMIC4_BOB_MODE_PFM;
  1118. break;
  1119. case RPM_REGULATOR_HW_TYPE_PMIC5_BOB:
  1120. hw_mode = RPM_REGULATOR_PMIC5_BOB_MODE_PFM;
  1121. break;
  1122. case RPM_REGULATOR_HW_TYPE_PMIC4_LDO:
  1123. hw_mode = REGULATOR_MODE_PMIC4_LDO_LPM;
  1124. break;
  1125. case RPM_REGULATOR_HW_TYPE_PMIC5_LDO:
  1126. hw_mode = REGULATOR_MODE_PMIC5_LDO_LPM;
  1127. break;
  1128. default:
  1129. break;
  1130. }
  1131. break;
  1132. case RPM_SMD_REGULATOR_MODE_AUTO:
  1133. switch (hw_type) {
  1134. case RPM_REGULATOR_HW_TYPE_PMIC4_BOB:
  1135. hw_mode = RPM_REGULATOR_PMIC4_BOB_MODE_AUTO;
  1136. break;
  1137. case RPM_REGULATOR_HW_TYPE_PMIC5_BOB:
  1138. hw_mode = RPM_REGULATOR_PMIC5_BOB_MODE_AUTO;
  1139. break;
  1140. case RPM_REGULATOR_HW_TYPE_PMIC4_LDO:
  1141. case RPM_REGULATOR_HW_TYPE_PMIC5_LDO:
  1142. default:
  1143. break;
  1144. }
  1145. break;
  1146. case RPM_SMD_REGULATOR_MODE_HPM:
  1147. switch (hw_type) {
  1148. case RPM_REGULATOR_HW_TYPE_PMIC4_BOB:
  1149. hw_mode = RPM_REGULATOR_PMIC4_BOB_MODE_PWM;
  1150. break;
  1151. case RPM_REGULATOR_HW_TYPE_PMIC5_BOB:
  1152. hw_mode = RPM_REGULATOR_PMIC5_BOB_MODE_PWM;
  1153. break;
  1154. case RPM_REGULATOR_HW_TYPE_PMIC4_LDO:
  1155. hw_mode = REGULATOR_MODE_PMIC4_LDO_HPM;
  1156. break;
  1157. case RPM_REGULATOR_HW_TYPE_PMIC5_LDO:
  1158. hw_mode = REGULATOR_MODE_PMIC5_LDO_HPM;
  1159. break;
  1160. default:
  1161. break;
  1162. }
  1163. break;
  1164. default:
  1165. break;
  1166. }
  1167. if (hw_mode == U32_MAX)
  1168. vreg_err(reg, "Mode %d not supported for regulator type:%d\n", mode, hw_type);
  1169. return hw_mode;
  1170. }
  1171. static int rpm_vreg_enable_time(struct regulator_dev *rdev)
  1172. {
  1173. struct rpm_regulator *reg = rdev_get_drvdata(rdev);
  1174. return reg->rpm_vreg->enable_time;
  1175. }
  1176. static int rpm_vreg_send_defaults(struct rpm_regulator *reg)
  1177. {
  1178. int rc;
  1179. rpm_vreg_lock(reg->rpm_vreg);
  1180. rc = rpm_vreg_aggregate_requests(reg);
  1181. if (rc)
  1182. vreg_err(reg, "RPM request failed, rc=%d", rc);
  1183. rpm_vreg_unlock(reg->rpm_vreg);
  1184. return rc;
  1185. }
  1186. static int rpm_vreg_configure_pin_control_enable(struct rpm_regulator *reg,
  1187. struct device_node *node)
  1188. {
  1189. struct rpm_regulator_param *pcen_param =
  1190. &params[RPM_REGULATOR_PARAM_PIN_CTRL_ENABLE];
  1191. int rc, i;
  1192. if (!of_find_property(node, "qcom,enable-with-pin-ctrl", NULL))
  1193. return 0;
  1194. if (pcen_param->supported_regulator_types
  1195. & BIT(reg->rpm_vreg->regulator_type)) {
  1196. rc = of_property_read_u32_array(node,
  1197. "qcom,enable-with-pin-ctrl", reg->pin_ctrl_mask,
  1198. RPM_VREG_PIN_CTRL_STATE_COUNT);
  1199. if (rc) {
  1200. vreg_err(reg, "could not read qcom,enable-with-pin-ctrl, rc=%d\n",
  1201. rc);
  1202. return rc;
  1203. }
  1204. /* Verify that the mask values are valid. */
  1205. for (i = 0; i < RPM_VREG_PIN_CTRL_STATE_COUNT; i++) {
  1206. if (reg->pin_ctrl_mask[i] < pcen_param->min
  1207. || reg->pin_ctrl_mask[i] > pcen_param->max) {
  1208. vreg_err(reg, "device tree property: qcom,enable-with-pin-ctrl[%d]=%u is outside allowed range [%u, %u]\n",
  1209. i, reg->pin_ctrl_mask[i],
  1210. pcen_param->min, pcen_param->max);
  1211. return -EINVAL;
  1212. }
  1213. }
  1214. reg->use_pin_ctrl_for_enable = true;
  1215. } else {
  1216. pr_warn("%s: regulator type=%d does not support device tree property: qcom,enable-with-pin-ctrl\n",
  1217. reg->rdesc.name, reg->rpm_vreg->regulator_type);
  1218. }
  1219. return 0;
  1220. }
  1221. static const struct regulator_ops ldo_ops = {
  1222. .enable = rpm_vreg_enable,
  1223. .disable = rpm_vreg_disable,
  1224. .is_enabled = rpm_vreg_is_enabled,
  1225. .set_voltage = rpm_vreg_set_voltage,
  1226. .get_voltage = rpm_vreg_get_voltage,
  1227. .set_load = rpm_vreg_ldo_set_load,
  1228. .set_mode = rpm_vreg_ldo_set_mode,
  1229. .get_mode = rpm_vreg_ldo_get_mode,
  1230. .enable_time = rpm_vreg_enable_time,
  1231. };
  1232. static const struct regulator_ops smps_ops = {
  1233. .enable = rpm_vreg_enable,
  1234. .disable = rpm_vreg_disable,
  1235. .is_enabled = rpm_vreg_is_enabled,
  1236. .set_voltage = rpm_vreg_set_voltage,
  1237. .get_voltage = rpm_vreg_get_voltage,
  1238. .set_mode = rpm_vreg_set_mode,
  1239. .get_mode = rpm_vreg_get_mode,
  1240. .get_optimum_mode = rpm_vreg_get_optimum_mode,
  1241. .enable_time = rpm_vreg_enable_time,
  1242. };
  1243. static const struct regulator_ops switch_ops = {
  1244. .enable = rpm_vreg_enable,
  1245. .disable = rpm_vreg_disable,
  1246. .is_enabled = rpm_vreg_is_enabled,
  1247. .enable_time = rpm_vreg_enable_time,
  1248. };
  1249. static const struct regulator_ops ncp_ops = {
  1250. .enable = rpm_vreg_enable,
  1251. .disable = rpm_vreg_disable,
  1252. .is_enabled = rpm_vreg_is_enabled,
  1253. .set_voltage = rpm_vreg_set_voltage,
  1254. .get_voltage = rpm_vreg_get_voltage,
  1255. .enable_time = rpm_vreg_enable_time,
  1256. };
  1257. static const struct regulator_ops bob_ops = {
  1258. .enable = rpm_vreg_enable,
  1259. .disable = rpm_vreg_disable,
  1260. .is_enabled = rpm_vreg_is_enabled,
  1261. .set_voltage = rpm_vreg_set_voltage,
  1262. .get_voltage = rpm_vreg_get_voltage,
  1263. .set_load = rpm_vreg_bob_set_load,
  1264. .set_mode = rpm_vreg_set_bob_mode,
  1265. .get_mode = rpm_vreg_get_bob_mode,
  1266. .enable_time = rpm_vreg_enable_time,
  1267. };
  1268. static const struct regulator_ops *vreg_ops[] = {
  1269. [RPM_REGULATOR_TYPE_LDO] = &ldo_ops,
  1270. [RPM_REGULATOR_TYPE_SMPS] = &smps_ops,
  1271. [RPM_REGULATOR_TYPE_VS] = &switch_ops,
  1272. [RPM_REGULATOR_TYPE_NCP] = &ncp_ops,
  1273. [RPM_REGULATOR_TYPE_BOB] = &bob_ops,
  1274. };
  1275. static int rpm_vreg_device_remove(struct platform_device *pdev)
  1276. {
  1277. struct device *dev = &pdev->dev;
  1278. struct rpm_regulator *reg;
  1279. struct rpm_vreg *rpm_vreg;
  1280. reg = platform_get_drvdata(pdev);
  1281. if (reg) {
  1282. rpm_vreg = reg->rpm_vreg;
  1283. rpm_vreg_lock(rpm_vreg);
  1284. regulator_unregister(reg->rdev);
  1285. devm_regulator_proxy_consumer_unregister(pdev->dev.parent);
  1286. list_del(&reg->list);
  1287. kfree(reg);
  1288. rpm_vreg_unlock(rpm_vreg);
  1289. } else {
  1290. dev_err(dev, "%s: drvdata missing\n", __func__);
  1291. return -EINVAL;
  1292. }
  1293. platform_set_drvdata(pdev, NULL);
  1294. return 0;
  1295. }
  1296. static int rpm_vreg_resource_remove(struct platform_device *pdev)
  1297. {
  1298. struct device *dev = &pdev->dev;
  1299. struct rpm_regulator *reg, *reg_temp;
  1300. struct rpm_vreg *rpm_vreg;
  1301. rpm_vreg = platform_get_drvdata(pdev);
  1302. if (rpm_vreg) {
  1303. rpm_vreg_lock(rpm_vreg);
  1304. list_for_each_entry_safe(reg, reg_temp, &rpm_vreg->reg_list,
  1305. list) {
  1306. /* Only touch data for private consumers. */
  1307. if (reg->rdev->desc == NULL) {
  1308. list_del(&reg->list);
  1309. kfree(reg->rdev);
  1310. kfree(reg);
  1311. } else {
  1312. dev_err(dev, "%s: not all child devices have been removed\n",
  1313. __func__);
  1314. }
  1315. }
  1316. rpm_vreg_unlock(rpm_vreg);
  1317. msm_rpm_free_request(rpm_vreg->handle_active);
  1318. msm_rpm_free_request(rpm_vreg->handle_sleep);
  1319. kfree(rpm_vreg);
  1320. } else {
  1321. dev_err(dev, "%s: drvdata missing\n", __func__);
  1322. return -EINVAL;
  1323. }
  1324. platform_set_drvdata(pdev, NULL);
  1325. return 0;
  1326. }
  1327. static int rpm_vreg_set_smps_ldo_voltage_index(struct device *dev,
  1328. struct rpm_regulator *reg)
  1329. {
  1330. struct device_node *node = dev->of_node;
  1331. int chosen = 0;
  1332. if (of_property_read_bool(node, "qcom,use-voltage-corner")) {
  1333. reg->voltage_index = RPM_REGULATOR_PARAM_CORNER;
  1334. reg->voltage_offset = RPM_REGULATOR_CORNER_NONE;
  1335. chosen++;
  1336. }
  1337. if (of_property_read_bool(node, "qcom,use-voltage-floor-corner")) {
  1338. reg->voltage_index = RPM_REGULATOR_PARAM_FLOOR_CORNER;
  1339. reg->voltage_offset = RPM_REGULATOR_CORNER_NONE;
  1340. chosen++;
  1341. }
  1342. if (of_property_read_bool(node, "qcom,use-voltage-level")) {
  1343. reg->voltage_index = RPM_REGULATOR_PARAM_LEVEL;
  1344. chosen++;
  1345. }
  1346. if (of_property_read_bool(node, "qcom,use-voltage-floor-level")) {
  1347. reg->voltage_index = RPM_REGULATOR_PARAM_FLOOR_LEVEL;
  1348. chosen++;
  1349. }
  1350. if (chosen > 1) {
  1351. dev_err(dev, "only one qcom,use-voltage-* may be specified\n");
  1352. return -EINVAL;
  1353. }
  1354. return 0;
  1355. }
  1356. static int rpm_vreg_set_bob_voltage_index(struct device *dev,
  1357. struct rpm_regulator *reg)
  1358. {
  1359. struct device_node *node = dev->of_node;
  1360. int chosen = 0;
  1361. if (of_property_read_bool(node, "qcom,use-pin-ctrl-voltage1")) {
  1362. reg->voltage_index = RPM_REGULATOR_PARAM_PIN_CTRL_VOLTAGE1;
  1363. chosen++;
  1364. }
  1365. if (of_property_read_bool(node, "qcom,use-pin-ctrl-voltage2")) {
  1366. reg->voltage_index = RPM_REGULATOR_PARAM_PIN_CTRL_VOLTAGE2;
  1367. chosen++;
  1368. }
  1369. if (of_property_read_bool(node, "qcom,use-pin-ctrl-voltage3")) {
  1370. reg->voltage_index = RPM_REGULATOR_PARAM_PIN_CTRL_VOLTAGE3;
  1371. chosen++;
  1372. }
  1373. if (chosen > 1) {
  1374. dev_err(dev, "only one qcom,use-pin-ctrl-voltage* may be specified\n");
  1375. return -EINVAL;
  1376. }
  1377. return 0;
  1378. }
  1379. static int rpm_vreg_device_set_voltage_index(struct device *dev,
  1380. struct rpm_regulator *reg, int type)
  1381. {
  1382. int rc = 0;
  1383. reg->voltage_index = RPM_REGULATOR_PARAM_VOLTAGE;
  1384. switch (type) {
  1385. case RPM_REGULATOR_TYPE_SMPS:
  1386. case RPM_REGULATOR_TYPE_LDO:
  1387. rc = rpm_vreg_set_smps_ldo_voltage_index(dev, reg);
  1388. break;
  1389. case RPM_REGULATOR_TYPE_BOB:
  1390. rc = rpm_vreg_set_bob_voltage_index(dev, reg);
  1391. break;
  1392. }
  1393. return rc;
  1394. }
  1395. #ifdef CONFIG_DEBUG_FS
  1396. static void rpm_vreg_create_debugfs(struct rpm_regulator *reg)
  1397. {
  1398. if (!is_debugfs_created) {
  1399. reg->dfs_root = debugfs_create_dir("rpm_vreg_debugfs", NULL);
  1400. if (IS_ERR_OR_NULL(reg->dfs_root)) {
  1401. pr_err("Failed to create debugfs directory rc=%ld\n",
  1402. (long)reg->dfs_root);
  1403. return;
  1404. }
  1405. debugfs_create_u32("debug_mask", 0600, reg->dfs_root,
  1406. &rpm_vreg_debug_mask);
  1407. is_debugfs_created = true;
  1408. }
  1409. }
  1410. #endif
  1411. /*
  1412. * This probe is called for child rpm-regulator devices which have
  1413. * properties which are required to configure individual regulator
  1414. * framework regulators for a given RPM regulator resource.
  1415. */
  1416. static int rpm_vreg_device_probe(struct platform_device *pdev)
  1417. {
  1418. struct device *dev = &pdev->dev;
  1419. struct device_node *node = dev->of_node;
  1420. struct regulator_init_data *init_data;
  1421. struct rpm_vreg *rpm_vreg;
  1422. struct rpm_regulator *reg;
  1423. struct regulator_config reg_config = {};
  1424. int rc = 0;
  1425. int i, regulator_type;
  1426. u32 val;
  1427. if (pdev->dev.parent == NULL) {
  1428. dev_err(dev, "%s: parent device missing\n", __func__);
  1429. return -ENODEV;
  1430. }
  1431. rpm_vreg = dev_get_drvdata(pdev->dev.parent);
  1432. if (rpm_vreg == NULL) {
  1433. dev_err(dev, "%s: rpm_vreg not found in parent device\n",
  1434. __func__);
  1435. return -ENODEV;
  1436. }
  1437. reg = kzalloc(sizeof(*reg), GFP_KERNEL);
  1438. if (reg == NULL)
  1439. return -ENOMEM;
  1440. regulator_type = rpm_vreg->regulator_type;
  1441. reg->rpm_vreg = rpm_vreg;
  1442. reg->rdesc.owner = THIS_MODULE;
  1443. reg->rdesc.type = REGULATOR_VOLTAGE;
  1444. reg->rdesc.ops = vreg_ops[regulator_type];
  1445. rc = rpm_vreg_device_set_voltage_index(dev, reg, regulator_type);
  1446. if (rc)
  1447. goto fail_free_reg;
  1448. reg->always_send_voltage
  1449. = of_property_read_bool(node, "qcom,always-send-voltage");
  1450. reg->always_send_current
  1451. = of_property_read_bool(node, "qcom,always-send-current");
  1452. if (regulator_type == RPM_REGULATOR_TYPE_VS)
  1453. reg->rdesc.n_voltages = 0;
  1454. else
  1455. reg->rdesc.n_voltages = 2;
  1456. rc = of_property_read_u32(node, "qcom,set", &val);
  1457. if (rc) {
  1458. dev_err(dev, "%s: sleep set and/or active set must be configured via qcom,set property, rc=%d\n",
  1459. __func__, rc);
  1460. goto fail_free_reg;
  1461. } else if (!(val & RPM_SET_CONFIG_BOTH)) {
  1462. dev_err(dev, "%s: qcom,set=%u property is invalid\n", __func__,
  1463. val);
  1464. rc = -EINVAL;
  1465. goto fail_free_reg;
  1466. }
  1467. reg->set_active = !!(val & RPM_SET_CONFIG_ACTIVE);
  1468. reg->set_sleep = !!(val & RPM_SET_CONFIG_SLEEP);
  1469. rc = of_property_read_u32(node, "qcom,min-dropout-voltage",
  1470. &val);
  1471. if (!rc)
  1472. reg->rdesc.min_dropout_uV = val;
  1473. init_data = of_get_regulator_init_data(dev, node, &reg->rdesc);
  1474. if (init_data == NULL) {
  1475. dev_err(dev, "%s: failed to populate regulator_init_data\n",
  1476. __func__);
  1477. rc = -ENOMEM;
  1478. goto fail_free_reg;
  1479. }
  1480. if (init_data->constraints.name == NULL) {
  1481. dev_err(dev, "%s: regulator name not specified\n", __func__);
  1482. rc = -EINVAL;
  1483. goto fail_free_reg;
  1484. }
  1485. init_data->constraints.input_uV = init_data->constraints.max_uV;
  1486. if (of_get_property(node, "parent-supply", NULL))
  1487. init_data->supply_regulator = "parent";
  1488. /*
  1489. * Fill in ops and mode masks based on callbacks specified for
  1490. * this type of regulator.
  1491. */
  1492. if (reg->rdesc.ops->enable)
  1493. init_data->constraints.valid_ops_mask
  1494. |= REGULATOR_CHANGE_STATUS;
  1495. if (reg->rdesc.ops->get_voltage)
  1496. init_data->constraints.valid_ops_mask
  1497. |= REGULATOR_CHANGE_VOLTAGE;
  1498. if (reg->rdesc.ops->get_mode) {
  1499. init_data->constraints.valid_ops_mask
  1500. |= REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_DRMS;
  1501. init_data->constraints.valid_modes_mask
  1502. |= REGULATOR_MODE_NORMAL | REGULATOR_MODE_IDLE |
  1503. REGULATOR_MODE_FAST | REGULATOR_MODE_STANDBY;
  1504. }
  1505. reg->rdesc.name = init_data->constraints.name;
  1506. reg->min_uV = init_data->constraints.min_uV;
  1507. reg->max_uV = init_data->constraints.max_uV;
  1508. /* Initialize the param array based on optional properties. */
  1509. for (i = 0; i < RPM_REGULATOR_PARAM_MAX; i++) {
  1510. rc = of_property_read_u32(node, params[i].property_name, &val);
  1511. if (rc == 0) {
  1512. if (params[i].supported_regulator_types
  1513. & BIT(regulator_type)) {
  1514. if (val < params[i].min
  1515. || val > params[i].max) {
  1516. pr_warn("%s: device tree property: %s=%u is outsided allowed range [%u, %u]\n",
  1517. reg->rdesc.name,
  1518. params[i].property_name, val,
  1519. params[i].min, params[i].max);
  1520. continue;
  1521. }
  1522. if (i == RPM_REGULATOR_PARAM_MODE_LDO ||
  1523. i == RPM_REGULATOR_PARAM_MODE_BOB) {
  1524. val = rpm_vreg_get_hw_mode(reg, val);
  1525. if (val == U32_MAX)
  1526. continue;
  1527. }
  1528. reg->req.param[i] = val;
  1529. reg->req.modified |= BIT(i);
  1530. } else {
  1531. pr_warn("%s: regulator type=%d does not support device tree property: %s\n",
  1532. reg->rdesc.name, regulator_type,
  1533. params[i].property_name);
  1534. }
  1535. }
  1536. }
  1537. of_property_read_u32(node, "qcom,system-load", &reg->system_load);
  1538. rc = rpm_vreg_configure_pin_control_enable(reg, node);
  1539. if (rc) {
  1540. vreg_err(reg, "could not configure pin control enable, rc=%d\n",
  1541. rc);
  1542. goto fail_free_reg;
  1543. }
  1544. rpm_vreg_lock(rpm_vreg);
  1545. list_add(&reg->list, &rpm_vreg->reg_list);
  1546. rpm_vreg_unlock(rpm_vreg);
  1547. if (of_property_read_bool(node, "qcom,send-defaults")) {
  1548. rc = rpm_vreg_send_defaults(reg);
  1549. if (rc) {
  1550. vreg_err(reg, "could not send defaults, rc=%d\n", rc);
  1551. goto fail_remove_from_list;
  1552. }
  1553. }
  1554. reg_config.dev = dev;
  1555. reg_config.init_data = init_data;
  1556. reg_config.of_node = node;
  1557. reg_config.driver_data = reg;
  1558. reg->rdev = devm_regulator_register(dev, &reg->rdesc, &reg_config);
  1559. if (IS_ERR(reg->rdev)) {
  1560. rc = PTR_ERR(reg->rdev);
  1561. reg->rdev = NULL;
  1562. pr_err("regulator_register failed: %s, rc=%d\n",
  1563. reg->rdesc.name, rc);
  1564. goto fail_remove_from_list;
  1565. }
  1566. rc = devm_regulator_proxy_consumer_register(dev, node);
  1567. if (rc)
  1568. vreg_err(reg, "failed to register proxy consumer, rc=%d\n", rc);
  1569. platform_set_drvdata(pdev, reg);
  1570. rpm_vreg_create_debugfs(reg);
  1571. rc = devm_regulator_debug_register(dev, reg->rdev);
  1572. if (rc)
  1573. pr_err("Failed to register debug regulator, rc=%d\n", rc);
  1574. pr_debug("successfully probed: %s\n", reg->rdesc.name);
  1575. return 0;
  1576. fail_remove_from_list:
  1577. rpm_vreg_lock(rpm_vreg);
  1578. list_del(&reg->list);
  1579. rpm_vreg_unlock(rpm_vreg);
  1580. fail_free_reg:
  1581. kfree(reg);
  1582. return rc;
  1583. }
  1584. int init_thresholds(struct device_node *node, struct device *dev,
  1585. struct rpm_vreg *rpm_vreg, int len)
  1586. {
  1587. int rc, i;
  1588. u32 *buf;
  1589. const int *supported_modes;
  1590. const char *prop = "qcom,supported-modes";
  1591. switch (rpm_vreg->regulator_hw_type) {
  1592. case RPM_REGULATOR_HW_TYPE_PMIC4_BOB:
  1593. case RPM_REGULATOR_HW_TYPE_PMIC5_BOB:
  1594. supported_modes = bob_supported_modes;
  1595. break;
  1596. case RPM_REGULATOR_HW_TYPE_PMIC5_LDO:
  1597. supported_modes = ldo5_supported_modes;
  1598. break;
  1599. default:
  1600. dev_err(dev, "Multiple modes unsupported for regulator hw type: %d\n",
  1601. rpm_vreg->regulator_hw_type);
  1602. return -EINVAL;
  1603. }
  1604. len /= sizeof(u32);
  1605. rpm_vreg->mode = devm_kcalloc(dev, len,
  1606. sizeof(*rpm_vreg->mode), GFP_KERNEL);
  1607. if (!rpm_vreg->mode)
  1608. return -ENOMEM;
  1609. rpm_vreg->mode_count = len;
  1610. buf = kcalloc(len, sizeof(*buf), GFP_KERNEL);
  1611. if (!buf)
  1612. return -ENOMEM;
  1613. rc = of_property_read_u32_array(node, prop, buf, len);
  1614. if (rc) {
  1615. pr_err("unable to read %s, rc=%d\n",
  1616. prop, rc);
  1617. return rc;
  1618. }
  1619. for (i = 0; i < len; i++) {
  1620. if (buf[i] < RPM_SMD_REGULATOR_MODE_PASS ||
  1621. buf[i] > RPM_SMD_REGULATOR_MODE_HPM) {
  1622. dev_err(dev, "element %d of %s = %u is invalid for BOB\n",
  1623. i, prop, buf[i]);
  1624. return -EINVAL;
  1625. }
  1626. rpm_vreg->mode[i].mode = supported_modes[buf[i]];
  1627. if (i > 0 && buf[i] <= buf[i - 1]) {
  1628. dev_err(dev, "%s elements are not in ascending order\n",
  1629. prop);
  1630. return -EINVAL;
  1631. }
  1632. }
  1633. prop = "qcom,mode-threshold-currents";
  1634. rc = of_property_read_u32_array(node, prop, buf, len);
  1635. if (rc) {
  1636. dev_err(dev, "unable to read %s, rc=%d\n",
  1637. prop, rc);
  1638. return rc;
  1639. }
  1640. for (i = 0; i < len; i++) {
  1641. rpm_vreg->mode[i].min_load_ua = buf[i];
  1642. if (i > 0 && rpm_vreg->mode[i].min_load_ua
  1643. <= rpm_vreg->mode[i - 1].min_load_ua) {
  1644. dev_err(dev, "%s elements are not in ascending order\n",
  1645. prop);
  1646. return -EINVAL;
  1647. }
  1648. }
  1649. return 0;
  1650. }
  1651. /*
  1652. * This probe is called for parent rpm-regulator devices which have
  1653. * properties which are required to identify a given RPM resource.
  1654. */
  1655. static int rpm_vreg_resource_probe(struct platform_device *pdev)
  1656. {
  1657. struct device *dev = &pdev->dev;
  1658. struct device_node *node = dev->of_node;
  1659. struct rpm_vreg *rpm_vreg;
  1660. const char *type = "";
  1661. const char *prop;
  1662. int val = 0;
  1663. u32 resource_type;
  1664. int rc, len;
  1665. /* Create new rpm_vreg entry. */
  1666. rpm_vreg = kzalloc(sizeof(*rpm_vreg), GFP_KERNEL);
  1667. if (rpm_vreg == NULL)
  1668. return -ENOMEM;
  1669. /* Required device tree properties: */
  1670. rc = of_property_read_string(node, "qcom,resource-name",
  1671. &rpm_vreg->resource_name);
  1672. if (rc) {
  1673. dev_err(dev, "%s: qcom,resource-name missing in DT node\n",
  1674. __func__);
  1675. goto fail_free_vreg;
  1676. }
  1677. resource_type = rpm_vreg_string_to_int(rpm_vreg->resource_name);
  1678. rc = of_property_read_u32(node, "qcom,resource-id",
  1679. &rpm_vreg->resource_id);
  1680. if (rc) {
  1681. dev_err(dev, "%s: qcom,resource-id missing in DT node\n",
  1682. __func__);
  1683. goto fail_free_vreg;
  1684. }
  1685. rc = of_property_read_u32(node, "qcom,regulator-type",
  1686. &rpm_vreg->regulator_type);
  1687. if (rc) {
  1688. dev_err(dev, "%s: qcom,regulator-type missing in DT node\n",
  1689. __func__);
  1690. goto fail_free_vreg;
  1691. }
  1692. if ((rpm_vreg->regulator_type < 0)
  1693. || (rpm_vreg->regulator_type >= RPM_REGULATOR_TYPE_MAX)) {
  1694. dev_err(dev, "%s: invalid regulator type: %d\n", __func__,
  1695. rpm_vreg->regulator_type);
  1696. rc = -EINVAL;
  1697. goto fail_free_vreg;
  1698. }
  1699. if (rpm_vreg->regulator_type == RPM_REGULATOR_TYPE_LDO) {
  1700. prop = "qcom,regulator-hw-type";
  1701. rpm_vreg->regulator_hw_type = RPM_REGULATOR_HW_TYPE_UNKNOWN;
  1702. rc = of_property_read_string(node, prop, &type);
  1703. if (rc) {
  1704. dev_err(dev, "%s is missing in DT node rc=%d\n",
  1705. prop, rc);
  1706. goto fail_free_vreg;
  1707. }
  1708. if (!strcmp(type, "pmic4-ldo")) {
  1709. rpm_vreg->regulator_hw_type
  1710. = RPM_REGULATOR_HW_TYPE_PMIC4_LDO;
  1711. } else if (!strcmp(type, "pmic5-ldo")) {
  1712. rpm_vreg->regulator_hw_type
  1713. = RPM_REGULATOR_HW_TYPE_PMIC5_LDO;
  1714. } else {
  1715. dev_err(dev, "unknown %s = %s\n",
  1716. prop, type);
  1717. goto fail_free_vreg;
  1718. }
  1719. }
  1720. if (rpm_vreg->regulator_type == RPM_REGULATOR_TYPE_BOB) {
  1721. prop = "qcom,regulator-hw-type";
  1722. rpm_vreg->regulator_hw_type = RPM_REGULATOR_HW_TYPE_UNKNOWN;
  1723. rc = of_property_read_string(node, prop, &type);
  1724. if (rc) {
  1725. dev_err(dev, "%s is missing in DT node rc=%d\n",
  1726. prop, rc);
  1727. goto fail_free_vreg;
  1728. }
  1729. if (!strcmp(type, "pmic4-bob")) {
  1730. rpm_vreg->regulator_hw_type
  1731. = RPM_REGULATOR_HW_TYPE_PMIC4_BOB;
  1732. } else if (!strcmp(type, "pmic5-bob")) {
  1733. rpm_vreg->regulator_hw_type
  1734. = RPM_REGULATOR_HW_TYPE_PMIC5_BOB;
  1735. } else {
  1736. dev_err(dev, "unknown %s = %s\n",
  1737. prop, type);
  1738. goto fail_free_vreg;
  1739. }
  1740. }
  1741. /* Optional device tree properties: */
  1742. of_property_read_u32(node, "qcom,allow-atomic", &val);
  1743. rpm_vreg->allow_atomic = !!val;
  1744. of_property_read_u32(node, "qcom,enable-time", &rpm_vreg->enable_time);
  1745. of_property_read_u32(node, "qcom,hpm-min-load",
  1746. &rpm_vreg->hpm_min_load);
  1747. rpm_vreg->apps_only = of_property_read_bool(node, "qcom,apps-only");
  1748. rpm_vreg->always_wait_for_ack
  1749. = of_property_read_bool(node, "qcom,always-wait-for-ack");
  1750. if (of_find_property(node, "qcom,supported-modes", &len)) {
  1751. rc = init_thresholds(node, dev, rpm_vreg, len);
  1752. if (rc < 0)
  1753. goto fail_free_vreg;
  1754. }
  1755. rpm_vreg->handle_active = msm_rpm_create_request(RPM_SET_ACTIVE,
  1756. resource_type, rpm_vreg->resource_id, RPM_REGULATOR_PARAM_MAX);
  1757. if (rpm_vreg->handle_active == NULL
  1758. || IS_ERR(rpm_vreg->handle_active)) {
  1759. rc = PTR_ERR(rpm_vreg->handle_active);
  1760. if (rc != -EPROBE_DEFER)
  1761. dev_err(dev, "%s: failed to create active RPM handle, rc=%d\n",
  1762. __func__, rc);
  1763. goto fail_free_vreg;
  1764. }
  1765. rpm_vreg->handle_sleep = msm_rpm_create_request(RPM_SET_SLEEP,
  1766. resource_type, rpm_vreg->resource_id, RPM_REGULATOR_PARAM_MAX);
  1767. if (rpm_vreg->handle_sleep == NULL || IS_ERR(rpm_vreg->handle_sleep)) {
  1768. rc = PTR_ERR(rpm_vreg->handle_sleep);
  1769. if (rc != -EPROBE_DEFER)
  1770. dev_err(dev, "%s: failed to create sleep RPM handle, rc=%d\n",
  1771. __func__, rc);
  1772. goto fail_free_handle_active;
  1773. }
  1774. INIT_LIST_HEAD(&rpm_vreg->reg_list);
  1775. if (rpm_vreg->allow_atomic)
  1776. spin_lock_init(&rpm_vreg->slock);
  1777. else
  1778. mutex_init(&rpm_vreg->mlock);
  1779. platform_set_drvdata(pdev, rpm_vreg);
  1780. rc = of_platform_populate(node, NULL, NULL, dev);
  1781. if (rc) {
  1782. dev_err(dev, "%s: failed to add child nodes, rc=%d\n", __func__,
  1783. rc);
  1784. goto fail_unset_drvdata;
  1785. }
  1786. pr_debug("successfully probed: %s (%08X) %u\n", rpm_vreg->resource_name,
  1787. resource_type, rpm_vreg->resource_id);
  1788. return rc;
  1789. fail_unset_drvdata:
  1790. platform_set_drvdata(pdev, NULL);
  1791. msm_rpm_free_request(rpm_vreg->handle_sleep);
  1792. fail_free_handle_active:
  1793. msm_rpm_free_request(rpm_vreg->handle_active);
  1794. fail_free_vreg:
  1795. kfree(rpm_vreg);
  1796. return rc;
  1797. }
  1798. static const struct of_device_id rpm_vreg_match_table_device[] = {
  1799. { .compatible = "qcom,rpm-smd-regulator", },
  1800. {}
  1801. };
  1802. static const struct of_device_id rpm_vreg_match_table_resource[] = {
  1803. { .compatible = "qcom,rpm-smd-regulator-resource", },
  1804. {}
  1805. };
  1806. static struct platform_driver rpm_vreg_device_driver = {
  1807. .probe = rpm_vreg_device_probe,
  1808. .remove = rpm_vreg_device_remove,
  1809. .driver = {
  1810. .name = "qcom,rpm-smd-regulator",
  1811. .of_match_table = rpm_vreg_match_table_device,
  1812. .sync_state = regulator_proxy_consumer_sync_state,
  1813. },
  1814. };
  1815. static struct platform_driver rpm_vreg_resource_driver = {
  1816. .probe = rpm_vreg_resource_probe,
  1817. .remove = rpm_vreg_resource_remove,
  1818. .driver = {
  1819. .name = "qcom,rpm-smd-regulator-resource",
  1820. .of_match_table = rpm_vreg_match_table_resource,
  1821. },
  1822. };
  1823. /**
  1824. * rpm_smd_regulator_driver_init() - initialize the RPM SMD regulator drivers
  1825. *
  1826. * This function registers the RPM SMD regulator platform drivers.
  1827. *
  1828. * Returns 0 on success or errno on failure.
  1829. */
  1830. static int __init rpm_smd_regulator_driver_init(void)
  1831. {
  1832. static bool initialized;
  1833. int i, rc;
  1834. if (initialized)
  1835. return 0;
  1836. initialized = true;
  1837. /* Store parameter string names as integers */
  1838. for (i = 0; i < RPM_REGULATOR_PARAM_MAX; i++)
  1839. params[i].key = rpm_vreg_string_to_int(params[i].name);
  1840. rc = platform_driver_register(&rpm_vreg_device_driver);
  1841. if (rc)
  1842. return rc;
  1843. return platform_driver_register(&rpm_vreg_resource_driver);
  1844. }
  1845. static void __exit rpm_vreg_exit(void)
  1846. {
  1847. platform_driver_unregister(&rpm_vreg_device_driver);
  1848. platform_driver_unregister(&rpm_vreg_resource_driver);
  1849. }
  1850. arch_initcall(rpm_smd_regulator_driver_init);
  1851. module_exit(rpm_vreg_exit);
  1852. MODULE_LICENSE("GPL v2");
  1853. MODULE_DESCRIPTION("MSM RPM SMD regulator driver");