brintos

brintos / linux-shallow public Read only

0
0
Text · 56.1 KiB · 28e7ce6 Raw
1493 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Copyright (c) 2015, Sony Mobile Communications AB.4 * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.5 */6 7#include <linux/module.h>8#include <linux/of.h>9#include <linux/platform_device.h>10#include <linux/regulator/driver.h>11#include <linux/regulator/of_regulator.h>12#include <linux/soc/qcom/smd-rpm.h>13 14struct qcom_smd_rpm *smd_vreg_rpm;15 16struct qcom_rpm_reg {17	struct device *dev;18	u32 type;19	u32 id;20 21	struct regulator_desc desc;22 23	int is_enabled;24	int uV;25	u32 load;26 27	unsigned int enabled_updated:1;28	unsigned int uv_updated:1;29	unsigned int load_updated:1;30};31 32struct rpm_regulator_req {33	__le32 key;34	__le32 nbytes;35	__le32 value;36};37 38#define RPM_KEY_SWEN	0x6e657773 /* "swen" */39#define RPM_KEY_UV	0x00007675 /* "uv" */40#define RPM_KEY_MA	0x0000616d /* "ma" */41 42static int rpm_reg_write_active(struct qcom_rpm_reg *vreg)43{44	struct rpm_regulator_req req[3];45	int reqlen = 0;46	int ret;47 48	if (vreg->enabled_updated) {49		req[reqlen].key = cpu_to_le32(RPM_KEY_SWEN);50		req[reqlen].nbytes = cpu_to_le32(sizeof(u32));51		req[reqlen].value = cpu_to_le32(vreg->is_enabled);52		reqlen++;53	}54 55	if (vreg->uv_updated && vreg->is_enabled) {56		req[reqlen].key = cpu_to_le32(RPM_KEY_UV);57		req[reqlen].nbytes = cpu_to_le32(sizeof(u32));58		req[reqlen].value = cpu_to_le32(vreg->uV);59		reqlen++;60	}61 62	if (vreg->load_updated && vreg->is_enabled) {63		req[reqlen].key = cpu_to_le32(RPM_KEY_MA);64		req[reqlen].nbytes = cpu_to_le32(sizeof(u32));65		req[reqlen].value = cpu_to_le32(vreg->load / 1000);66		reqlen++;67	}68 69	if (!reqlen)70		return 0;71 72	ret = qcom_rpm_smd_write(smd_vreg_rpm, QCOM_SMD_RPM_ACTIVE_STATE,73				 vreg->type, vreg->id,74				 req, sizeof(req[0]) * reqlen);75	if (!ret) {76		vreg->enabled_updated = 0;77		vreg->uv_updated = 0;78		vreg->load_updated = 0;79	}80 81	return ret;82}83 84static int rpm_reg_enable(struct regulator_dev *rdev)85{86	struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev);87	int ret;88 89	vreg->is_enabled = 1;90	vreg->enabled_updated = 1;91 92	ret = rpm_reg_write_active(vreg);93	if (ret)94		vreg->is_enabled = 0;95 96	return ret;97}98 99static int rpm_reg_is_enabled(struct regulator_dev *rdev)100{101	struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev);102 103	return vreg->is_enabled;104}105 106static int rpm_reg_disable(struct regulator_dev *rdev)107{108	struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev);109	int ret;110 111	vreg->is_enabled = 0;112	vreg->enabled_updated = 1;113 114	ret = rpm_reg_write_active(vreg);115	if (ret)116		vreg->is_enabled = 1;117 118	return ret;119}120 121static int rpm_reg_get_voltage(struct regulator_dev *rdev)122{123	struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev);124 125	return vreg->uV;126}127 128static int rpm_reg_set_voltage(struct regulator_dev *rdev,129			       int min_uV,130			       int max_uV,131			       unsigned *selector)132{133	struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev);134	int ret;135	int old_uV = vreg->uV;136 137	vreg->uV = min_uV;138	vreg->uv_updated = 1;139 140	ret = rpm_reg_write_active(vreg);141	if (ret)142		vreg->uV = old_uV;143 144	return ret;145}146 147static int rpm_reg_set_load(struct regulator_dev *rdev, int load_uA)148{149	struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev);150	u32 old_load = vreg->load;151	int ret;152 153	vreg->load = load_uA;154	vreg->load_updated = 1;155	ret = rpm_reg_write_active(vreg);156	if (ret)157		vreg->load = old_load;158 159	return ret;160}161 162static const struct regulator_ops rpm_smps_ldo_ops = {163	.enable = rpm_reg_enable,164	.disable = rpm_reg_disable,165	.is_enabled = rpm_reg_is_enabled,166	.list_voltage = regulator_list_voltage_linear_range,167 168	.get_voltage = rpm_reg_get_voltage,169	.set_voltage = rpm_reg_set_voltage,170 171	.set_load = rpm_reg_set_load,172};173 174static const struct regulator_ops rpm_smps_ldo_ops_fixed = {175	.enable = rpm_reg_enable,176	.disable = rpm_reg_disable,177	.is_enabled = rpm_reg_is_enabled,178 179	.get_voltage = rpm_reg_get_voltage,180	.set_voltage = rpm_reg_set_voltage,181 182	.set_load = rpm_reg_set_load,183};184 185static const struct regulator_ops rpm_switch_ops = {186	.enable = rpm_reg_enable,187	.disable = rpm_reg_disable,188	.is_enabled = rpm_reg_is_enabled,189};190 191static const struct regulator_ops rpm_bob_ops = {192	.enable = rpm_reg_enable,193	.disable = rpm_reg_disable,194	.is_enabled = rpm_reg_is_enabled,195 196	.get_voltage = rpm_reg_get_voltage,197	.set_voltage = rpm_reg_set_voltage,198};199 200static const struct regulator_ops rpm_mp5496_ops = {201	.enable = rpm_reg_enable,202	.disable = rpm_reg_disable,203	.is_enabled = rpm_reg_is_enabled,204	.list_voltage = regulator_list_voltage_linear_range,205 206	.get_voltage = rpm_reg_get_voltage,207	.set_voltage = rpm_reg_set_voltage,208};209 210static const struct regulator_desc pma8084_hfsmps = {211	.linear_ranges = (struct linear_range[]) {212		REGULATOR_LINEAR_RANGE(375000,  0,  95, 12500),213		REGULATOR_LINEAR_RANGE(1550000, 96, 158, 25000),214	},215	.n_linear_ranges = 2,216	.n_voltages = 159,217	.ops = &rpm_smps_ldo_ops,218};219 220static const struct regulator_desc pma8084_ftsmps = {221	.linear_ranges = (struct linear_range[]) {222		REGULATOR_LINEAR_RANGE(350000,  0, 184, 5000),223		REGULATOR_LINEAR_RANGE(1280000, 185, 261, 10000),224	},225	.n_linear_ranges = 2,226	.n_voltages = 262,227	.ops = &rpm_smps_ldo_ops,228};229 230static const struct regulator_desc pma8084_pldo = {231	.linear_ranges = (struct linear_range[]) {232		REGULATOR_LINEAR_RANGE( 750000,  0,  63, 12500),233		REGULATOR_LINEAR_RANGE(1550000, 64, 126, 25000),234		REGULATOR_LINEAR_RANGE(3100000, 127, 163, 50000),235	},236	.n_linear_ranges = 3,237	.n_voltages = 164,238	.ops = &rpm_smps_ldo_ops,239};240 241static const struct regulator_desc pma8084_nldo = {242	.linear_ranges = (struct linear_range[]) {243		REGULATOR_LINEAR_RANGE(750000, 0, 63, 12500),244	},245	.n_linear_ranges = 1,246	.n_voltages = 64,247	.ops = &rpm_smps_ldo_ops,248};249 250static const struct regulator_desc pma8084_switch = {251	.ops = &rpm_switch_ops,252};253 254static const struct regulator_desc pm8226_hfsmps = {255	.linear_ranges = (struct linear_range[]) {256		REGULATOR_LINEAR_RANGE(375000,   0,  95, 12500),257		REGULATOR_LINEAR_RANGE(1575000, 96, 158, 25000),258	},259	.n_linear_ranges = 2,260	.n_voltages = 159,261	.ops = &rpm_smps_ldo_ops,262};263 264static const struct regulator_desc pm8226_ftsmps = {265	.linear_ranges = (struct linear_range[]) {266		REGULATOR_LINEAR_RANGE(350000,    0, 184,  5000),267		REGULATOR_LINEAR_RANGE(1280000, 185, 261, 10000),268	},269	.n_linear_ranges = 2,270	.n_voltages = 262,271	.ops = &rpm_smps_ldo_ops,272};273 274static const struct regulator_desc pm8226_pldo = {275	.linear_ranges = (struct linear_range[]) {276		REGULATOR_LINEAR_RANGE(750000,    0,  63, 12500),277		REGULATOR_LINEAR_RANGE(1550000,  64, 126, 25000),278		REGULATOR_LINEAR_RANGE(3100000, 127, 163, 50000),279	},280	.n_linear_ranges = 3,281	.n_voltages = 164,282	.ops = &rpm_smps_ldo_ops,283};284 285static const struct regulator_desc pm8226_nldo = {286	.linear_ranges = (struct linear_range[]) {287		REGULATOR_LINEAR_RANGE(750000, 0, 63, 12500),288	},289	.n_linear_ranges = 1,290	.n_voltages = 64,291	.ops = &rpm_smps_ldo_ops,292};293 294static const struct regulator_desc pm8226_switch = {295	.ops = &rpm_switch_ops,296};297 298static const struct regulator_desc pm8x41_hfsmps = {299	.linear_ranges = (struct linear_range[]) {300		REGULATOR_LINEAR_RANGE( 375000,  0,  95, 12500),301		REGULATOR_LINEAR_RANGE(1575000, 96, 158, 25000),302	},303	.n_linear_ranges = 2,304	.n_voltages = 159,305	.ops = &rpm_smps_ldo_ops,306};307 308static const struct regulator_desc pm8841_ftsmps = {309	.linear_ranges = (struct linear_range[]) {310		REGULATOR_LINEAR_RANGE(350000,  0, 184, 5000),311		REGULATOR_LINEAR_RANGE(1280000, 185, 261, 10000),312	},313	.n_linear_ranges = 2,314	.n_voltages = 262,315	.ops = &rpm_smps_ldo_ops,316};317 318static const struct regulator_desc pm8941_boost = {319	.linear_ranges = (struct linear_range[]) {320		REGULATOR_LINEAR_RANGE(4000000, 0, 30, 50000),321	},322	.n_linear_ranges = 1,323	.n_voltages = 31,324	.ops = &rpm_smps_ldo_ops,325};326 327static const struct regulator_desc pm8941_pldo = {328	.linear_ranges = (struct linear_range[]) {329		REGULATOR_LINEAR_RANGE( 750000,  0,  63, 12500),330		REGULATOR_LINEAR_RANGE(1550000, 64, 126, 25000),331		REGULATOR_LINEAR_RANGE(3100000, 127, 163, 50000),332	},333	.n_linear_ranges = 3,334	.n_voltages = 164,335	.ops = &rpm_smps_ldo_ops,336};337 338static const struct regulator_desc pm8941_nldo = {339	.linear_ranges = (struct linear_range[]) {340		REGULATOR_LINEAR_RANGE(750000, 0, 63, 12500),341	},342	.n_linear_ranges = 1,343	.n_voltages = 64,344	.ops = &rpm_smps_ldo_ops,345};346 347static const struct regulator_desc pm8941_lnldo = {348	.fixed_uV = 1740000,349	.n_voltages = 1,350	.ops = &rpm_smps_ldo_ops_fixed,351};352 353static const struct regulator_desc pm8941_switch = {354	.ops = &rpm_switch_ops,355};356 357static const struct regulator_desc pm8916_pldo = {358	.linear_ranges = (struct linear_range[]) {359		REGULATOR_LINEAR_RANGE(1750000, 0, 127, 12500),360	},361	.n_linear_ranges = 1,362	.n_voltages = 128,363	.ops = &rpm_smps_ldo_ops,364};365 366static const struct regulator_desc pm8916_nldo = {367	.linear_ranges = (struct linear_range[]) {368		REGULATOR_LINEAR_RANGE(375000, 0, 93, 12500),369	},370	.n_linear_ranges = 1,371	.n_voltages = 94,372	.ops = &rpm_smps_ldo_ops,373};374 375static const struct regulator_desc pm8916_buck_lvo_smps = {376	.linear_ranges = (struct linear_range[]) {377		REGULATOR_LINEAR_RANGE(375000, 0, 95, 12500),378		REGULATOR_LINEAR_RANGE(750000, 96, 127, 25000),379	},380	.n_linear_ranges = 2,381	.n_voltages = 128,382	.ops = &rpm_smps_ldo_ops,383};384 385static const struct regulator_desc pm8916_buck_hvo_smps = {386	.linear_ranges = (struct linear_range[]) {387		REGULATOR_LINEAR_RANGE(1550000, 0, 31, 25000),388	},389	.n_linear_ranges = 1,390	.n_voltages = 32,391	.ops = &rpm_smps_ldo_ops,392};393 394static const struct regulator_desc pm8950_hfsmps = {395	.linear_ranges = (struct linear_range[]) {396		REGULATOR_LINEAR_RANGE(375000, 0, 95, 12500),397		REGULATOR_LINEAR_RANGE(1550000, 96, 127, 25000),398	},399	.n_linear_ranges = 2,400	.n_voltages = 128,401	.ops = &rpm_smps_ldo_ops,402};403 404static const struct regulator_desc pm8950_ftsmps2p5 = {405	.linear_ranges = (struct linear_range[]) {406		REGULATOR_LINEAR_RANGE(80000, 0, 255, 5000),407		REGULATOR_LINEAR_RANGE(160000, 256, 460, 10000),408	},409	.n_linear_ranges = 2,410	.n_voltages = 461,411	.ops = &rpm_smps_ldo_ops,412};413 414static const struct regulator_desc pm8950_ult_nldo = {415	.linear_ranges = (struct linear_range[]) {416		REGULATOR_LINEAR_RANGE(375000, 0, 202, 12500),417	},418	.n_linear_ranges = 1,419	.n_voltages = 203,420	.ops = &rpm_smps_ldo_ops,421};422 423static const struct regulator_desc pm8950_ult_pldo = {424	.linear_ranges = (struct linear_range[]) {425		REGULATOR_LINEAR_RANGE(1750000, 0, 127, 12500),426	},427	.n_linear_ranges = 1,428	.n_voltages = 128,429	.ops = &rpm_smps_ldo_ops,430};431 432static const struct regulator_desc pm8950_pldo_lv = {433	.linear_ranges = (struct linear_range[]) {434		REGULATOR_LINEAR_RANGE(1500000, 0, 16, 25000),435	},436	.n_linear_ranges = 1,437	.n_voltages = 17,438	.ops = &rpm_smps_ldo_ops,439};440 441static const struct regulator_desc pm8950_pldo = {442	.linear_ranges = (struct linear_range[]) {443		REGULATOR_LINEAR_RANGE(975000, 0, 164, 12500),444	},445	.n_linear_ranges = 1,446	.n_voltages = 165,447	.ops = &rpm_smps_ldo_ops,448};449 450static const struct regulator_desc pm8953_lnldo = {451	.linear_ranges = (struct linear_range[]) {452		REGULATOR_LINEAR_RANGE(690000, 0, 7, 60000),453		REGULATOR_LINEAR_RANGE(1380000, 8, 15, 120000),454	},455	.n_linear_ranges = 2,456	.n_voltages = 16,457	.ops = &rpm_smps_ldo_ops,458};459 460static const struct regulator_desc pm8953_ult_nldo = {461	.linear_ranges = (struct linear_range[]) {462		REGULATOR_LINEAR_RANGE(375000, 0, 93, 12500),463	},464	.n_linear_ranges = 1,465	.n_voltages = 94,466	.ops = &rpm_smps_ldo_ops,467};468 469static const struct regulator_desc pm8994_hfsmps = {470	.linear_ranges = (struct linear_range[]) {471		REGULATOR_LINEAR_RANGE( 375000,  0,  95, 12500),472		REGULATOR_LINEAR_RANGE(1550000, 96, 158, 25000),473	},474	.n_linear_ranges = 2,475	.n_voltages = 159,476	.ops = &rpm_smps_ldo_ops,477};478 479static const struct regulator_desc pm8994_ftsmps = {480	.linear_ranges = (struct linear_range[]) {481		REGULATOR_LINEAR_RANGE(350000,  0, 199, 5000),482		REGULATOR_LINEAR_RANGE(700000, 200, 349, 10000),483	},484	.n_linear_ranges = 2,485	.n_voltages = 350,486	.ops = &rpm_smps_ldo_ops,487};488 489static const struct regulator_desc pm8994_nldo = {490	.linear_ranges = (struct linear_range[]) {491		REGULATOR_LINEAR_RANGE(750000, 0, 63, 12500),492	},493	.n_linear_ranges = 1,494	.n_voltages = 64,495	.ops = &rpm_smps_ldo_ops,496};497 498static const struct regulator_desc pm8994_pldo = {499	.linear_ranges = (struct linear_range[]) {500		REGULATOR_LINEAR_RANGE( 750000,  0,  63, 12500),501		REGULATOR_LINEAR_RANGE(1550000, 64, 126, 25000),502		REGULATOR_LINEAR_RANGE(3100000, 127, 163, 50000),503	},504	.n_linear_ranges = 3,505	.n_voltages = 164,506	.ops = &rpm_smps_ldo_ops,507};508 509static const struct regulator_desc pm8994_switch = {510	.ops = &rpm_switch_ops,511};512 513static const struct regulator_desc pm8994_lnldo = {514	.fixed_uV = 1740000,515	.n_voltages = 1,516	.ops = &rpm_smps_ldo_ops_fixed,517};518 519static const struct regulator_desc pmi8994_ftsmps = {520	.linear_ranges = (struct linear_range[]) {521		REGULATOR_LINEAR_RANGE(350000,  0, 199, 5000),522		REGULATOR_LINEAR_RANGE(700000, 200, 349, 10000),523	},524	.n_linear_ranges = 2,525	.n_voltages = 350,526	.ops = &rpm_smps_ldo_ops,527};528 529static const struct regulator_desc pmi8994_hfsmps = {530	.linear_ranges = (struct linear_range[]) {531		REGULATOR_LINEAR_RANGE(350000,  0,  80, 12500),532		REGULATOR_LINEAR_RANGE(700000, 81, 141, 25000),533	},534	.n_linear_ranges = 2,535	.n_voltages = 142,536	.ops = &rpm_smps_ldo_ops,537};538 539static const struct regulator_desc pmi8994_bby = {540	.linear_ranges = (struct linear_range[]) {541		REGULATOR_LINEAR_RANGE(3000000, 0, 44, 50000),542	},543	.n_linear_ranges = 1,544	.n_voltages = 45,545	.ops = &rpm_bob_ops,546};547 548static const struct regulator_desc pm8998_ftsmps = {549	.linear_ranges = (struct linear_range[]) {550		REGULATOR_LINEAR_RANGE(320000, 0, 258, 4000),551	},552	.n_linear_ranges = 1,553	.n_voltages = 259,554	.ops = &rpm_smps_ldo_ops,555};556 557static const struct regulator_desc pm8998_hfsmps = {558	.linear_ranges = (struct linear_range[]) {559		REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),560	},561	.n_linear_ranges = 1,562	.n_voltages = 216,563	.ops = &rpm_smps_ldo_ops,564};565 566static const struct regulator_desc pm8998_nldo = {567	.linear_ranges = (struct linear_range[]) {568		REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000),569	},570	.n_linear_ranges = 1,571	.n_voltages = 128,572	.ops = &rpm_smps_ldo_ops,573};574 575static const struct regulator_desc pm8998_pldo = {576	.linear_ranges = (struct linear_range[]) {577		REGULATOR_LINEAR_RANGE(1664000, 0, 255, 8000),578	},579	.n_linear_ranges = 1,580	.n_voltages = 256,581	.ops = &rpm_smps_ldo_ops,582};583 584static const struct regulator_desc pm8998_pldo_lv = {585	.linear_ranges = (struct linear_range[]) {586		REGULATOR_LINEAR_RANGE(1256000, 0, 127, 8000),587	},588	.n_linear_ranges = 1,589	.n_voltages = 128,590	.ops = &rpm_smps_ldo_ops,591};592 593static const struct regulator_desc pm8998_switch = {594	.ops = &rpm_switch_ops,595};596 597static const struct regulator_desc pmi8998_bob = {598	.linear_ranges = (struct linear_range[]) {599		REGULATOR_LINEAR_RANGE(1824000, 0, 83, 32000),600	},601	.n_linear_ranges = 1,602	.n_voltages = 84,603	.ops = &rpm_bob_ops,604};605 606static const struct regulator_desc pm660_ftsmps = {607	.linear_ranges = (struct linear_range[]) {608		REGULATOR_LINEAR_RANGE(355000, 0, 199, 5000),609	},610	.n_linear_ranges = 1,611	.n_voltages = 200,612	.ops = &rpm_smps_ldo_ops,613};614 615static const struct regulator_desc pm660_hfsmps = {616	.linear_ranges = (struct linear_range[]) {617		REGULATOR_LINEAR_RANGE(320000, 0, 216, 8000),618	},619	.n_linear_ranges = 1,620	.n_voltages = 217,621	.ops = &rpm_smps_ldo_ops,622};623 624static const struct regulator_desc pm660_ht_nldo = {625	.linear_ranges = (struct linear_range[]) {626		REGULATOR_LINEAR_RANGE(312000, 0, 124, 8000),627	},628	.n_linear_ranges = 1,629	.n_voltages = 125,630	.ops = &rpm_smps_ldo_ops,631};632 633static const struct regulator_desc pm660_ht_lvpldo = {634	.linear_ranges = (struct linear_range[]) {635		REGULATOR_LINEAR_RANGE(1504000, 0, 62, 8000),636	},637	.n_linear_ranges = 1,638	.n_voltages = 63,639	.ops = &rpm_smps_ldo_ops,640};641 642static const struct regulator_desc pm660_nldo660 = {643	.linear_ranges = (struct linear_range[]) {644		REGULATOR_LINEAR_RANGE(320000, 0, 123, 8000),645	},646	.n_linear_ranges = 1,647	.n_voltages = 124,648	.ops = &rpm_smps_ldo_ops,649};650 651static const struct regulator_desc pm660_pldo660 = {652	.linear_ranges = (struct linear_range[]) {653		REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000),654	},655	.n_linear_ranges = 1,656	.n_voltages = 256,657	.ops = &rpm_smps_ldo_ops,658};659 660static const struct regulator_desc pm660l_bob = {661	.linear_ranges = (struct linear_range[]) {662		REGULATOR_LINEAR_RANGE(1800000, 0, 84, 32000),663	},664	.n_linear_ranges = 1,665	.n_voltages = 85,666	.ops = &rpm_bob_ops,667};668 669static const struct regulator_desc pm6125_ftsmps = {670	.linear_ranges = (struct linear_range[]) {671		REGULATOR_LINEAR_RANGE(300000, 0, 268, 4000),672	},673	.n_linear_ranges = 1,674	.n_voltages = 269,675	.ops = &rpm_smps_ldo_ops,676};677 678static const struct regulator_desc pmic5_ftsmps520 = {679	.linear_ranges = (struct linear_range[]) {680		REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000),681	},682	.n_linear_ranges = 1,683	.n_voltages = 264,684	.ops = &rpm_smps_ldo_ops,685};686 687static const struct regulator_desc pmic5_hfsmps515 = {688	.linear_ranges = (struct linear_range[]) {689		REGULATOR_LINEAR_RANGE(320000, 0, 235, 16000),690	},691	.n_linear_ranges = 1,692	.n_voltages = 236,693	.ops = &rpm_smps_ldo_ops,694};695 696static const struct regulator_desc pms405_hfsmps3 = {697	.linear_ranges = (struct linear_range[]) {698		REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),699	},700	.n_linear_ranges = 1,701	.n_voltages = 216,702	.ops = &rpm_smps_ldo_ops,703};704 705static const struct regulator_desc pms405_nldo300 = {706	.linear_ranges = (struct linear_range[]) {707		REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000),708	},709	.n_linear_ranges = 1,710	.n_voltages = 128,711	.ops = &rpm_smps_ldo_ops,712};713 714static const struct regulator_desc pms405_nldo1200 = {715	.linear_ranges = (struct linear_range[]) {716		REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000),717	},718	.n_linear_ranges = 1,719	.n_voltages = 128,720	.ops = &rpm_smps_ldo_ops,721};722 723static const struct regulator_desc pms405_pldo50 = {724	.linear_ranges = (struct linear_range[]) {725		REGULATOR_LINEAR_RANGE(1664000, 0, 128, 16000),726	},727	.n_linear_ranges = 1,728	.n_voltages = 129,729	.ops = &rpm_smps_ldo_ops,730};731 732static const struct regulator_desc pms405_pldo150 = {733	.linear_ranges = (struct linear_range[]) {734		REGULATOR_LINEAR_RANGE(1664000, 0, 128, 16000),735	},736	.n_linear_ranges = 1,737	.n_voltages = 129,738	.ops = &rpm_smps_ldo_ops,739};740 741static const struct regulator_desc pms405_pldo600 = {742	.linear_ranges = (struct linear_range[]) {743		REGULATOR_LINEAR_RANGE(1256000, 0, 98, 8000),744	},745	.n_linear_ranges = 1,746	.n_voltages = 99,747	.ops = &rpm_smps_ldo_ops,748};749 750static const struct regulator_desc mp5496_smps = {751	.linear_ranges = (struct linear_range[]) {752		REGULATOR_LINEAR_RANGE(600000, 0, 127, 12500),753	},754	.n_linear_ranges = 1,755	.n_voltages = 128,756	.ops = &rpm_mp5496_ops,757};758 759static const struct regulator_desc mp5496_ldoa2 = {760	.linear_ranges = (struct linear_range[]) {761		REGULATOR_LINEAR_RANGE(800000, 0, 127, 25000),762	},763	.n_linear_ranges = 1,764	.n_voltages = 128,765	.ops = &rpm_mp5496_ops,766};767 768static const struct regulator_desc pm2250_lvftsmps = {769	.linear_ranges = (struct linear_range[]) {770		REGULATOR_LINEAR_RANGE(320000, 0, 269, 4000),771	},772	.n_linear_ranges = 1,773	.n_voltages = 270,774	.ops = &rpm_smps_ldo_ops,775};776 777static const struct regulator_desc pm2250_ftsmps = {778	.linear_ranges = (struct linear_range[]) {779		REGULATOR_LINEAR_RANGE(640000, 0, 269, 8000),780	},781	.n_linear_ranges = 1,782	.n_voltages = 270,783	.ops = &rpm_smps_ldo_ops,784};785 786struct rpm_regulator_data {787	const char *name;788	u32 type;789	u32 id;790	const struct regulator_desc *desc;791	const char *supply;792};793 794static const struct rpm_regulator_data rpm_mp5496_regulators[] = {795	{ "s1", QCOM_SMD_RPM_SMPA, 1, &mp5496_smps, "s1" },796	{ "s2", QCOM_SMD_RPM_SMPA, 2, &mp5496_smps, "s2" },797	{ "l2", QCOM_SMD_RPM_LDOA, 2, &mp5496_ldoa2, "l2" },798	{ "l5", QCOM_SMD_RPM_LDOA, 5, &mp5496_ldoa2, "l5" },799	{}800};801 802static const struct rpm_regulator_data rpm_pm2250_regulators[] = {803	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm2250_lvftsmps, "vdd_s1" },804	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm2250_lvftsmps, "vdd_s2" },805	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm2250_lvftsmps, "vdd_s3" },806	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm2250_ftsmps, "vdd_s4" },807	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },808	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },809	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },810	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm660_pldo660, "vdd_l4_l17_l18_l19_l20_l21_l22" },811	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },812	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },813	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },814	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },815	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },816	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },817	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },818	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm660_nldo660, "vdd_l1_l2_l3_l5_l6_l7_l8_l9_l10_l11_l12" },819	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm660_ht_lvpldo, "vdd_l13_l14_l15_l16" },820	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm660_ht_lvpldo, "vdd_l13_l14_l15_l16" },821	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm660_ht_lvpldo, "vdd_l13_l14_l15_l16" },822	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm660_ht_lvpldo, "vdd_l13_l14_l15_l16" },823	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm660_pldo660, "vdd_l4_l17_l18_l19_l20_l21_l22" },824	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm660_pldo660, "vdd_l4_l17_l18_l19_l20_l21_l22" },825	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm660_pldo660, "vdd_l4_l17_l18_l19_l20_l21_l22" },826	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pm660_pldo660, "vdd_l4_l17_l18_l19_l20_l21_l22" },827	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pm660_pldo660, "vdd_l4_l17_l18_l19_l20_l21_l22" },828	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm660_pldo660, "vdd_l4_l17_l18_l19_l20_l21_l22" },829	{}830};831 832static const struct rpm_regulator_data rpm_pm6125_regulators[] = {833	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm6125_ftsmps, "vdd_s1" },834	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm6125_ftsmps, "vdd_s2" },835	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm6125_ftsmps, "vdd_s3" },836	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm6125_ftsmps, "vdd_s4" },837	{ "s5", QCOM_SMD_RPM_SMPA, 5, &pm8998_hfsmps, "vdd_s5" },838	{ "s6", QCOM_SMD_RPM_SMPA, 6, &pm8998_hfsmps, "vdd_s6" },839	{ "s7", QCOM_SMD_RPM_SMPA, 7, &pm8998_hfsmps, "vdd_s7" },840	{ "s8", QCOM_SMD_RPM_SMPA, 8, &pm6125_ftsmps, "vdd_s8" },841	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm660_nldo660, "vdd_l1_l7_l17_l18" },842	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm660_nldo660, "vdd_l2_l3_l4" },843	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm660_nldo660, "vdd_l2_l3_l4" },844	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm660_nldo660, "vdd_l2_l3_l4" },845	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm660_pldo660, "vdd_l5_l15_l19_l20_l21_l22" },846	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm660_nldo660, "vdd_l6_l8" },847	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm660_nldo660, "vdd_l1_l7_l17_l18" },848	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm660_nldo660, "vdd_l6_l8" },849	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm660_ht_lvpldo, "vdd_l9_l11" },850	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm660_ht_lvpldo, "vdd_l10_l13_l14" },851	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm660_ht_lvpldo, "vdd_l9_l11" },852	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm660_ht_lvpldo, "vdd_l12_l16" },853	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm660_ht_lvpldo, "vdd_l10_l13_l14" },854	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm660_ht_lvpldo, "vdd_l10_l13_l14" },855	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm660_pldo660, "vdd_l5_l15_l19_l20_l21_l22" },856	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm660_ht_lvpldo, "vdd_l12_l16" },857	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm660_nldo660, "vdd_l1_l7_l17_l18" },858	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm660_nldo660, "vdd_l1_l7_l17_l18" },859	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm660_pldo660, "vdd_l5_l15_l19_l20_l21_l22" },860	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pm660_pldo660, "vdd_l5_l15_l19_l20_l21_l22" },861	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pm660_pldo660, "vdd_l5_l15_l19_l20_l21_l22" },862	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm660_pldo660, "vdd_l5_l15_l19_l20_l21_l22" },863	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pm660_pldo660, "vdd_l23_l24" },864	{ "l24", QCOM_SMD_RPM_LDOA, 24, &pm660_pldo660, "vdd_l23_l24" },865	{ }866};867 868static const struct rpm_regulator_data rpm_pm660_regulators[] = {869	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm660_ftsmps, "vdd_s1" },870	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm660_ftsmps, "vdd_s2" },871	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm660_ftsmps, "vdd_s3" },872	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm660_hfsmps, "vdd_s4" },873	{ "s5", QCOM_SMD_RPM_SMPA, 5, &pm660_hfsmps, "vdd_s5" },874	{ "s6", QCOM_SMD_RPM_SMPA, 6, &pm660_hfsmps, "vdd_s6" },875	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm660_nldo660, "vdd_l1_l6_l7" },876	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm660_ht_nldo, "vdd_l2_l3" },877	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm660_nldo660, "vdd_l2_l3" },878	/* l4 is unaccessible on PM660 */879	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm660_ht_nldo, "vdd_l5" },880	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm660_ht_nldo, "vdd_l1_l6_l7" },881	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm660_ht_nldo, "vdd_l1_l6_l7" },882	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" },883	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" },884	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" },885	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" },886	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" },887	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" },888	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" },889	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" },890	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" },891	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" },892	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" },893	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" },894	{ }895};896 897static const struct rpm_regulator_data rpm_pm660l_regulators[] = {898	{ "s1", QCOM_SMD_RPM_SMPB, 1, &pm660_ftsmps, "vdd_s1" },899	{ "s2", QCOM_SMD_RPM_SMPB, 2, &pm660_ftsmps, "vdd_s2" },900	{ "s3", QCOM_SMD_RPM_RWCX, 0, &pm660_ftsmps, "vdd_s3_s4" },901	{ "s5", QCOM_SMD_RPM_RWMX, 0, &pm660_ftsmps, "vdd_s5" },902	{ "l1", QCOM_SMD_RPM_LDOB, 1, &pm660_nldo660, "vdd_l1_l9_l10" },903	{ "l2", QCOM_SMD_RPM_LDOB, 2, &pm660_pldo660, "vdd_l2" },904	{ "l3", QCOM_SMD_RPM_LDOB, 3, &pm660_pldo660, "vdd_l3_l5_l7_l8" },905	{ "l4", QCOM_SMD_RPM_LDOB, 4, &pm660_pldo660, "vdd_l4_l6" },906	{ "l5", QCOM_SMD_RPM_LDOB, 5, &pm660_pldo660, "vdd_l3_l5_l7_l8" },907	{ "l6", QCOM_SMD_RPM_LDOB, 6, &pm660_pldo660, "vdd_l4_l6" },908	{ "l7", QCOM_SMD_RPM_LDOB, 7, &pm660_pldo660, "vdd_l3_l5_l7_l8" },909	{ "l8", QCOM_SMD_RPM_LDOB, 8, &pm660_pldo660, "vdd_l3_l5_l7_l8" },910	{ "l9", QCOM_SMD_RPM_RWLC, 0, &pm660_ht_nldo, "vdd_l1_l9_l10" },911	{ "l10", QCOM_SMD_RPM_RWLM, 0, &pm660_ht_nldo, "vdd_l1_l9_l10" },912	{ "bob", QCOM_SMD_RPM_BOBB, 1, &pm660l_bob, "vdd_bob", },913	{ }914};915 916static const struct rpm_regulator_data rpm_pm8226_regulators[] = {917	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm8226_hfsmps, "vdd_s1" },918	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm8226_ftsmps, "vdd_s2" },919	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm8226_hfsmps, "vdd_s3" },920	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm8226_hfsmps, "vdd_s4" },921	{ "s5", QCOM_SMD_RPM_SMPA, 5, &pm8226_hfsmps, "vdd_s5" },922	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm8226_nldo, "vdd_l1_l2_l4_l5" },923	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm8226_nldo, "vdd_l1_l2_l4_l5" },924	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm8226_nldo, "vdd_l3_l24_l26" },925	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm8226_nldo, "vdd_l1_l2_l4_l5" },926	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm8226_nldo, "vdd_l1_l2_l4_l5" },927	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm8226_pldo, "vdd_l6_l7_l8_l9_l27" },928	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm8226_pldo, "vdd_l6_l7_l8_l9_l27" },929	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm8226_pldo, "vdd_l6_l7_l8_l9_l27" },930	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm8226_pldo, "vdd_l6_l7_l8_l9_l27" },931	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8226_pldo, "vdd_l10_l11_l13" },932	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8226_pldo, "vdd_l10_l11_l13" },933	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8226_pldo, "vdd_l12_l14" },934	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8226_pldo, "vdd_l10_l11_l13" },935	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8226_pldo, "vdd_l12_l14" },936	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8226_pldo, "vdd_l15_l16_l17_l18" },937	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm8226_pldo, "vdd_l15_l16_l17_l18" },938	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8226_pldo, "vdd_l15_l16_l17_l18" },939	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm8226_pldo, "vdd_l15_l16_l17_l18" },940	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm8226_pldo, "vdd_l19_l20_l21_l22_l23_l28" },941	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pm8226_pldo, "vdd_l19_l20_l21_l22_l23_l28" },942	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pm8226_pldo, "vdd_l19_l20_l21_l22_l23_l28" },943	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm8226_pldo, "vdd_l19_l20_l21_l22_l23_l28" },944	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pm8226_pldo, "vdd_l19_l20_l21_l22_l23_l28" },945	{ "l24", QCOM_SMD_RPM_LDOA, 24, &pm8226_nldo, "vdd_l3_l24_l26" },946	{ "l25", QCOM_SMD_RPM_LDOA, 25, &pm8226_pldo, "vdd_l25" },947	{ "l26", QCOM_SMD_RPM_LDOA, 26, &pm8226_nldo, "vdd_l3_l24_l26" },948	{ "l27", QCOM_SMD_RPM_LDOA, 27, &pm8226_pldo, "vdd_l6_l7_l8_l9_l27" },949	{ "l28", QCOM_SMD_RPM_LDOA, 28, &pm8226_pldo, "vdd_l19_l20_l21_l22_l23_l28" },950	{ "lvs1", QCOM_SMD_RPM_VSA, 1, &pm8226_switch, "vdd_lvs1" },951	{}952};953 954static const struct rpm_regulator_data rpm_pm8841_regulators[] = {955	{ "s1", QCOM_SMD_RPM_SMPB, 1, &pm8x41_hfsmps, "vdd_s1" },956	{ "s2", QCOM_SMD_RPM_SMPB, 2, &pm8841_ftsmps, "vdd_s2" },957	{ "s3", QCOM_SMD_RPM_SMPB, 3, &pm8x41_hfsmps, "vdd_s3" },958	{ "s4", QCOM_SMD_RPM_SMPB, 4, &pm8841_ftsmps, "vdd_s4" },959	{ "s5", QCOM_SMD_RPM_SMPB, 5, &pm8841_ftsmps, "vdd_s5" },960	{ "s6", QCOM_SMD_RPM_SMPB, 6, &pm8841_ftsmps, "vdd_s6" },961	{ "s7", QCOM_SMD_RPM_SMPB, 7, &pm8841_ftsmps, "vdd_s7" },962	{ "s8", QCOM_SMD_RPM_SMPB, 8, &pm8841_ftsmps, "vdd_s8" },963	{}964};965 966static const struct rpm_regulator_data rpm_pm8909_regulators[] = {967	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm8916_buck_lvo_smps, "vdd_s1" },968	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm8916_buck_hvo_smps, "vdd_s2" },969	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm8916_nldo, "vdd_l1" },970	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm8916_nldo, "vdd_l2_l5" },971	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm8916_nldo, "vdd_l3_l6_l10" },972	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm8916_pldo, "vdd_l4_l7" },973	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm8226_pldo, "vdd_l2_l5" },974	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm8226_pldo, "vdd_l3_l6_l10" },975	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm8226_pldo, "vdd_l4_l7" },976	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm8916_pldo, "vdd_l8_l11_l15_l18" },977	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm8916_pldo, "vdd_l9_l12_l14_l17" },978	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8916_nldo, "vdd_l3_l6_l10" },979	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8226_pldo, "vdd_l8_l11_l15_l18" },980	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8916_pldo, "vdd_l9_l12_l14_l17" },981	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8916_pldo, "vdd_l13" },982	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8916_pldo, "vdd_l9_l12_l14_l17" },983	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8916_pldo, "vdd_l8_l11_l15_l18" },984	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8916_pldo, "vdd_l9_l12_l14_l17" },985	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm8916_pldo, "vdd_l8_l11_l15_l18" },986	{}987};988 989static const struct rpm_regulator_data rpm_pm8916_regulators[] = {990	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm8916_buck_lvo_smps, "vdd_s1" },991	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm8916_buck_lvo_smps, "vdd_s2" },992	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm8916_buck_lvo_smps, "vdd_s3" },993	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm8916_buck_hvo_smps, "vdd_s4" },994	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm8916_nldo, "vdd_l1_l2_l3" },995	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm8916_nldo, "vdd_l1_l2_l3" },996	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm8916_nldo, "vdd_l1_l2_l3" },997	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm8916_pldo, "vdd_l4_l5_l6" },998	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm8916_pldo, "vdd_l4_l5_l6" },999	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm8916_pldo, "vdd_l4_l5_l6" },1000	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm8916_pldo, "vdd_l7" },1001	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18" },1002	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18" },1003	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},1004	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},1005	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},1006	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},1007	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},1008	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},1009	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},1010	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},1011	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"},1012	{}1013};1014 1015static const struct rpm_regulator_data rpm_pm8937_regulators[] = {1016	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm8994_hfsmps, "vdd_s1" },1017	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm8994_hfsmps, "vdd_s2" },1018	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm8994_hfsmps, "vdd_s3" },1019	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm8994_hfsmps, "vdd_s4" },1020	/* S5 - S6 are managed by SPMI */1021 1022	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm8953_ult_nldo, "vdd_l1_l19" },1023	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm8953_ult_nldo, "vdd_l2_l23" },1024	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm8953_ult_nldo, "vdd_l3" },1025	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16" },1026	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16" },1027	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16" },1028	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16" },1029	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" },1030	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" },1031	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18"},1032	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" },1033	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" },1034	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" },1035	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" },1036	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" },1037	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16" },1038	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" },1039	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" },1040	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm8953_ult_nldo, "vdd_l1_l19" },1041	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pm8953_lnldo, "vdd_l20_l21" },1042	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pm8953_lnldo, "vdd_l20_l21" },1043	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" },1044	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pm8994_nldo, "vdd_l2_l23" },1045	{}1046};1047 1048static const struct rpm_regulator_data rpm_pm8941_regulators[] = {1049	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm8x41_hfsmps, "vdd_s1" },1050	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm8x41_hfsmps, "vdd_s2" },1051	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm8x41_hfsmps, "vdd_s3" },1052	{ "s4", QCOM_SMD_RPM_BOOST, 1, &pm8941_boost },1053 1054	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm8941_nldo, "vdd_l1_l3" },1055	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm8941_nldo, "vdd_l2_lvs1_2_3" },1056	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm8941_nldo, "vdd_l1_l3" },1057	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm8941_nldo, "vdd_l4_l11" },1058	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm8941_lnldo, "vdd_l5_l7" },1059	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm8941_pldo, "vdd_l6_l12_l14_l15" },1060	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm8941_lnldo, "vdd_l5_l7" },1061	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm8941_pldo, "vdd_l8_l16_l18_l19" },1062	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm8941_pldo, "vdd_l9_l10_l17_l22" },1063	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8941_pldo, "vdd_l9_l10_l17_l22" },1064	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8941_nldo, "vdd_l4_l11" },1065	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8941_pldo, "vdd_l6_l12_l14_l15" },1066	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8941_pldo, "vdd_l13_l20_l23_l24" },1067	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8941_pldo, "vdd_l6_l12_l14_l15" },1068	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8941_pldo, "vdd_l6_l12_l14_l15" },1069	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm8941_pldo, "vdd_l8_l16_l18_l19" },1070	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8941_pldo, "vdd_l9_l10_l17_l22" },1071	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm8941_pldo, "vdd_l8_l16_l18_l19" },1072	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm8941_pldo, "vdd_l8_l16_l18_l19" },1073	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pm8941_pldo, "vdd_l13_l20_l23_l24" },1074	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pm8941_pldo, "vdd_l21" },1075	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm8941_pldo, "vdd_l9_l10_l17_l22" },1076	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pm8941_pldo, "vdd_l13_l20_l23_l24" },1077	{ "l24", QCOM_SMD_RPM_LDOA, 24, &pm8941_pldo, "vdd_l13_l20_l23_l24" },1078 1079	{ "lvs1", QCOM_SMD_RPM_VSA, 1, &pm8941_switch, "vdd_l2_lvs1_2_3" },1080	{ "lvs2", QCOM_SMD_RPM_VSA, 2, &pm8941_switch, "vdd_l2_lvs1_2_3" },1081	{ "lvs3", QCOM_SMD_RPM_VSA, 3, &pm8941_switch, "vdd_l2_lvs1_2_3" },1082 1083	{ "5vs1", QCOM_SMD_RPM_VSA, 4, &pm8941_switch, "vin_5vs" },1084	{ "5vs2", QCOM_SMD_RPM_VSA, 5, &pm8941_switch, "vin_5vs" },1085 1086	{}1087};1088 1089static const struct rpm_regulator_data rpm_pm8950_regulators[] = {1090	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm8950_hfsmps, "vdd_s1" },1091	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm8950_hfsmps, "vdd_s2" },1092	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm8950_hfsmps, "vdd_s3" },1093	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm8950_hfsmps, "vdd_s4" },1094	/* S5 is managed via SPMI. */1095	{ "s6", QCOM_SMD_RPM_SMPA, 6, &pm8950_hfsmps, "vdd_s6" },1096 1097	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm8950_ult_nldo, "vdd_l1_l19" },1098	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm8950_ult_nldo, "vdd_l2_l23" },1099	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm8950_ult_nldo, "vdd_l3" },1100	/* L4 seems not to exist. */1101	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm8950_pldo_lv, "vdd_l5_l6_l7_l16" },1102	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm8950_pldo_lv, "vdd_l5_l6_l7_l16" },1103	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm8950_pldo_lv, "vdd_l5_l6_l7_l16" },1104	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" },1105	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" },1106	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8950_ult_nldo, "vdd_l9_l10_l13_l14_l15_l18"},1107	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" },1108	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" },1109	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" },1110	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" },1111	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" },1112	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm8950_ult_pldo, "vdd_l5_l6_l7_l16" },1113	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" },1114	/* L18 seems not to exist. */1115	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm8950_pldo, "vdd_l1_l19" },1116	/* L20 & L21 seem not to exist. */1117	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm8950_pldo, "vdd_l8_l11_l12_l17_l22" },1118	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pm8950_pldo, "vdd_l2_l23" },1119	{}1120};1121 1122static const struct rpm_regulator_data rpm_pm8953_regulators[] = {1123	{  "s1", QCOM_SMD_RPM_SMPA,  1, &pm8998_hfsmps, "vdd_s1" },1124	{  "s2", QCOM_SMD_RPM_SMPA,  2, &pm8998_hfsmps, "vdd_s2" },1125	{  "s3", QCOM_SMD_RPM_SMPA,  3, &pm8998_hfsmps, "vdd_s3" },1126	{  "s4", QCOM_SMD_RPM_SMPA,  4, &pm8998_hfsmps, "vdd_s4" },1127	{  "s5", QCOM_SMD_RPM_SMPA,  5, &pm8950_ftsmps2p5, "vdd_s5" },1128	{  "s6", QCOM_SMD_RPM_SMPA,  6, &pm8950_ftsmps2p5, "vdd_s6" },1129	{  "s7", QCOM_SMD_RPM_SMPA,  7, &pm8998_hfsmps, "vdd_s7" },1130 1131	{  "l1", QCOM_SMD_RPM_LDOA,  1, &pm8953_ult_nldo, "vdd_l1" },1132	{  "l2", QCOM_SMD_RPM_LDOA,  2, &pm8953_ult_nldo, "vdd_l2_l3" },1133	{  "l3", QCOM_SMD_RPM_LDOA,  3, &pm8953_ult_nldo, "vdd_l2_l3" },1134	{  "l4", QCOM_SMD_RPM_LDOA,  4, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" },1135	{  "l5", QCOM_SMD_RPM_LDOA,  5, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" },1136	{  "l6", QCOM_SMD_RPM_LDOA,  6, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" },1137	{  "l7", QCOM_SMD_RPM_LDOA,  7, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" },1138	{  "l8", QCOM_SMD_RPM_LDOA,  8, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" },1139	{  "l9", QCOM_SMD_RPM_LDOA,  9, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" },1140	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" },1141	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" },1142	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" },1143	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" },1144	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" },1145	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" },1146	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" },1147	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" },1148	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" },1149	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm8953_ult_nldo, "vdd_l4_l5_l6_l7_l16_l19" },1150	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pm8953_lnldo,    "vdd_l20" },1151	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pm8953_lnldo,    "vdd_l21" },1152	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" },1153	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pm8953_ult_nldo, "vdd_l23" },1154	{}1155};1156 1157static const struct rpm_regulator_data rpm_pm8994_regulators[] = {1158	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm8994_ftsmps, "vdd_s1" },1159	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm8994_ftsmps, "vdd_s2" },1160	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm8994_hfsmps, "vdd_s3" },1161	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm8994_hfsmps, "vdd_s4" },1162	{ "s5", QCOM_SMD_RPM_SMPA, 5, &pm8994_hfsmps, "vdd_s5" },1163	{ "s6", QCOM_SMD_RPM_SMPA, 6, &pm8994_ftsmps, "vdd_s6" },1164	{ "s7", QCOM_SMD_RPM_SMPA, 7, &pm8994_hfsmps, "vdd_s7" },1165	{ "s8", QCOM_SMD_RPM_SMPA, 8, &pm8994_ftsmps, "vdd_s8" },1166	{ "s9", QCOM_SMD_RPM_SMPA, 9, &pm8994_ftsmps, "vdd_s9" },1167	{ "s10", QCOM_SMD_RPM_SMPA, 10, &pm8994_ftsmps, "vdd_s10" },1168	{ "s11", QCOM_SMD_RPM_SMPA, 11, &pm8994_ftsmps, "vdd_s11" },1169	{ "s12", QCOM_SMD_RPM_SMPA, 12, &pm8994_ftsmps, "vdd_s12" },1170	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm8994_nldo, "vdd_l1" },1171	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm8994_nldo, "vdd_l2_l26_l28" },1172	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm8994_nldo, "vdd_l3_l11" },1173	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm8994_nldo, "vdd_l4_l27_l31" },1174	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm8994_lnldo, "vdd_l5_l7" },1175	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm8994_pldo, "vdd_l6_l12_l32" },1176	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm8994_lnldo, "vdd_l5_l7" },1177	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm8994_pldo, "vdd_l8_l16_l30" },1178	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm8994_pldo, "vdd_l9_l10_l18_l22" },1179	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8994_pldo, "vdd_l9_l10_l18_l22" },1180	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8994_nldo, "vdd_l3_l11" },1181	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8994_pldo, "vdd_l6_l12_l32" },1182	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8994_pldo, "vdd_l13_l19_l23_l24" },1183	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8994_pldo, "vdd_l14_l15" },1184	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8994_pldo, "vdd_l14_l15" },1185	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm8994_pldo, "vdd_l8_l16_l30" },1186	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8994_pldo, "vdd_l17_l29" },1187	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm8994_pldo, "vdd_l9_l10_l18_l22" },1188	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm8994_pldo, "vdd_l13_l19_l23_l24" },1189	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pm8994_pldo, "vdd_l20_l21" },1190	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pm8994_pldo, "vdd_l20_l21" },1191	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm8994_pldo, "vdd_l9_l10_l18_l22" },1192	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pm8994_pldo, "vdd_l13_l19_l23_l24" },1193	{ "l24", QCOM_SMD_RPM_LDOA, 24, &pm8994_pldo, "vdd_l13_l19_l23_l24" },1194	{ "l25", QCOM_SMD_RPM_LDOA, 25, &pm8994_pldo, "vdd_l25" },1195	{ "l26", QCOM_SMD_RPM_LDOA, 26, &pm8994_nldo, "vdd_l2_l26_l28" },1196	{ "l27", QCOM_SMD_RPM_LDOA, 27, &pm8994_nldo, "vdd_l4_l27_l31" },1197	{ "l28", QCOM_SMD_RPM_LDOA, 28, &pm8994_nldo, "vdd_l2_l26_l28" },1198	{ "l29", QCOM_SMD_RPM_LDOA, 29, &pm8994_pldo, "vdd_l17_l29" },1199	{ "l30", QCOM_SMD_RPM_LDOA, 30, &pm8994_pldo, "vdd_l8_l16_l30" },1200	{ "l31", QCOM_SMD_RPM_LDOA, 31, &pm8994_nldo, "vdd_l4_l27_l31" },1201	{ "l32", QCOM_SMD_RPM_LDOA, 32, &pm8994_pldo, "vdd_l6_l12_l32" },1202	{ "lvs1", QCOM_SMD_RPM_VSA, 1, &pm8994_switch, "vdd_lvs1_2" },1203	{ "lvs2", QCOM_SMD_RPM_VSA, 2, &pm8994_switch, "vdd_lvs1_2" },1204 1205	{}1206};1207 1208static const struct rpm_regulator_data rpm_pm8998_regulators[] = {1209	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pm8998_ftsmps, "vdd_s1" },1210	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pm8998_ftsmps, "vdd_s2" },1211	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pm8998_hfsmps, "vdd_s3" },1212	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pm8998_hfsmps, "vdd_s4" },1213	{ "s5", QCOM_SMD_RPM_SMPA, 5, &pm8998_hfsmps, "vdd_s5" },1214	{ "s6", QCOM_SMD_RPM_SMPA, 6, &pm8998_ftsmps, "vdd_s6" },1215	{ "s7", QCOM_SMD_RPM_SMPA, 7, &pm8998_ftsmps, "vdd_s7" },1216	{ "s8", QCOM_SMD_RPM_SMPA, 8, &pm8998_ftsmps, "vdd_s8" },1217	{ "s9", QCOM_SMD_RPM_SMPA, 9, &pm8998_ftsmps, "vdd_s9" },1218	{ "s10", QCOM_SMD_RPM_SMPA, 10, &pm8998_ftsmps, "vdd_s10" },1219	{ "s11", QCOM_SMD_RPM_SMPA, 11, &pm8998_ftsmps, "vdd_s11" },1220	{ "s12", QCOM_SMD_RPM_SMPA, 12, &pm8998_ftsmps, "vdd_s12" },1221	{ "s13", QCOM_SMD_RPM_SMPA, 13, &pm8998_ftsmps, "vdd_s13" },1222	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pm8998_nldo, "vdd_l1_l27" },1223	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pm8998_nldo, "vdd_l2_l8_l17" },1224	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pm8998_nldo, "vdd_l3_l11" },1225	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pm8998_nldo, "vdd_l4_l5" },1226	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pm8998_nldo, "vdd_l4_l5" },1227	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pm8998_pldo, "vdd_l6" },1228	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pm8998_pldo_lv, "vdd_l7_l12_l14_l15" },1229	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pm8998_nldo, "vdd_l2_l8_l17" },1230	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pm8998_pldo, "vdd_l9" },1231	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pm8998_pldo, "vdd_l10_l23_l25" },1232	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pm8998_nldo, "vdd_l3_l11" },1233	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pm8998_pldo_lv, "vdd_l7_l12_l14_l15" },1234	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pm8998_pldo, "vdd_l13_l19_l21" },1235	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pm8998_pldo_lv, "vdd_l7_l12_l14_l15" },1236	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pm8998_pldo_lv, "vdd_l7_l12_l14_l15" },1237	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pm8998_pldo, "vdd_l16_l28" },1238	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pm8998_nldo, "vdd_l2_l8_l17" },1239	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pm8998_pldo, "vdd_l18_l22" },1240	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pm8998_pldo, "vdd_l13_l19_l21" },1241	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pm8998_pldo, "vdd_l20_l24" },1242	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pm8998_pldo, "vdd_l13_l19_l21" },1243	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pm8998_pldo, "vdd_l18_l22" },1244	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pm8998_pldo, "vdd_l10_l23_l25" },1245	{ "l24", QCOM_SMD_RPM_LDOA, 24, &pm8998_pldo, "vdd_l20_l24" },1246	{ "l25", QCOM_SMD_RPM_LDOA, 25, &pm8998_pldo, "vdd_l10_l23_l25" },1247	{ "l26", QCOM_SMD_RPM_LDOA, 26, &pm8998_nldo, "vdd_l26" },1248	{ "l27", QCOM_SMD_RPM_LDOA, 27, &pm8998_nldo, "vdd_l1_l27" },1249	{ "l28", QCOM_SMD_RPM_LDOA, 28, &pm8998_pldo, "vdd_l16_l28" },1250	{ "lvs1", QCOM_SMD_RPM_VSA, 1, &pm8998_switch, "vdd_lvs1_lvs2" },1251	{ "lvs2", QCOM_SMD_RPM_VSA, 2, &pm8998_switch, "vdd_lvs1_lvs2" },1252	{}1253};1254 1255static const struct rpm_regulator_data rpm_pma8084_regulators[] = {1256	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pma8084_ftsmps, "vdd_s1" },1257	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pma8084_ftsmps, "vdd_s2" },1258	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pma8084_hfsmps, "vdd_s3" },1259	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pma8084_hfsmps, "vdd_s4" },1260	{ "s5", QCOM_SMD_RPM_SMPA, 5, &pma8084_hfsmps, "vdd_s5" },1261	{ "s6", QCOM_SMD_RPM_SMPA, 6, &pma8084_ftsmps, "vdd_s6" },1262	{ "s7", QCOM_SMD_RPM_SMPA, 7, &pma8084_ftsmps, "vdd_s7" },1263	{ "s8", QCOM_SMD_RPM_SMPA, 8, &pma8084_ftsmps, "vdd_s8" },1264	{ "s9", QCOM_SMD_RPM_SMPA, 9, &pma8084_ftsmps, "vdd_s9" },1265	{ "s10", QCOM_SMD_RPM_SMPA, 10, &pma8084_ftsmps, "vdd_s10" },1266	{ "s11", QCOM_SMD_RPM_SMPA, 11, &pma8084_ftsmps, "vdd_s11" },1267	{ "s12", QCOM_SMD_RPM_SMPA, 12, &pma8084_ftsmps, "vdd_s12" },1268 1269	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pma8084_nldo, "vdd_l1_l11" },1270	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pma8084_nldo, "vdd_l2_l3_l4_l27" },1271	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pma8084_nldo, "vdd_l2_l3_l4_l27" },1272	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pma8084_nldo, "vdd_l2_l3_l4_l27" },1273	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pma8084_pldo, "vdd_l5_l7" },1274	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pma8084_pldo, "vdd_l6_l12_l14_l15_l26" },1275	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pma8084_pldo, "vdd_l5_l7" },1276	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pma8084_pldo, "vdd_l8" },1277	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" },1278	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" },1279	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pma8084_nldo, "vdd_l1_l11" },1280	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pma8084_pldo, "vdd_l6_l12_l14_l15_l26" },1281	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" },1282	{ "l14", QCOM_SMD_RPM_LDOA, 14, &pma8084_pldo, "vdd_l6_l12_l14_l15_l26" },1283	{ "l15", QCOM_SMD_RPM_LDOA, 15, &pma8084_pldo, "vdd_l6_l12_l14_l15_l26" },1284	{ "l16", QCOM_SMD_RPM_LDOA, 16, &pma8084_pldo, "vdd_l16_l25" },1285	{ "l17", QCOM_SMD_RPM_LDOA, 17, &pma8084_pldo, "vdd_l17" },1286	{ "l18", QCOM_SMD_RPM_LDOA, 18, &pma8084_pldo, "vdd_l18" },1287	{ "l19", QCOM_SMD_RPM_LDOA, 19, &pma8084_pldo, "vdd_l19" },1288	{ "l20", QCOM_SMD_RPM_LDOA, 20, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" },1289	{ "l21", QCOM_SMD_RPM_LDOA, 21, &pma8084_pldo, "vdd_l21" },1290	{ "l22", QCOM_SMD_RPM_LDOA, 22, &pma8084_pldo, "vdd_l22" },1291	{ "l23", QCOM_SMD_RPM_LDOA, 23, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" },1292	{ "l24", QCOM_SMD_RPM_LDOA, 24, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" },1293	{ "l25", QCOM_SMD_RPM_LDOA, 25, &pma8084_pldo, "vdd_l16_l25" },1294	{ "l26", QCOM_SMD_RPM_LDOA, 26, &pma8084_pldo, "vdd_l6_l12_l14_l15_l26" },1295	{ "l27", QCOM_SMD_RPM_LDOA, 27, &pma8084_nldo, "vdd_l2_l3_l4_l27" },1296 1297	{ "lvs1", QCOM_SMD_RPM_VSA, 1, &pma8084_switch },1298	{ "lvs2", QCOM_SMD_RPM_VSA, 2, &pma8084_switch },1299	{ "lvs3", QCOM_SMD_RPM_VSA, 3, &pma8084_switch },1300	{ "lvs4", QCOM_SMD_RPM_VSA, 4, &pma8084_switch },1301	{ "5vs1", QCOM_SMD_RPM_VSA, 5, &pma8084_switch },1302 1303	{}1304};1305 1306static const struct rpm_regulator_data rpm_pmi8994_regulators[] = {1307	{ "s1", QCOM_SMD_RPM_SMPB, 1, &pmi8994_ftsmps, "vdd_s1" },1308	{ "s2", QCOM_SMD_RPM_SMPB, 2, &pmi8994_hfsmps, "vdd_s2" },1309	{ "s3", QCOM_SMD_RPM_SMPB, 3, &pmi8994_hfsmps, "vdd_s3" },1310	{ "boost-bypass", QCOM_SMD_RPM_BBYB, 1, &pmi8994_bby, "vdd_bst_byp" },1311	{}1312};1313 1314static const struct rpm_regulator_data rpm_pmi8998_regulators[] = {1315	{ "bob", QCOM_SMD_RPM_BOBB, 1, &pmi8998_bob, "vdd_bob" },1316	{}1317};1318 1319static const struct rpm_regulator_data rpm_pmr735a_regulators[] = {1320	{ "s1", QCOM_SMD_RPM_SMPE, 1, &pmic5_ftsmps520, "vdd_s1"},1321	{ "s2", QCOM_SMD_RPM_SMPE, 2, &pmic5_ftsmps520, "vdd_s2"},1322	{ "s3", QCOM_SMD_RPM_SMPE, 3, &pmic5_hfsmps515, "vdd_s3"},1323	{ "l1", QCOM_SMD_RPM_LDOE, 1, &pm660_nldo660, "vdd_l1_l2"},1324	{ "l2", QCOM_SMD_RPM_LDOE, 2, &pm660_nldo660, "vdd_l1_l2"},1325	{ "l3", QCOM_SMD_RPM_LDOE, 3, &pm660_nldo660, "vdd_l3"},1326	{ "l4", QCOM_SMD_RPM_LDOE, 4, &pm660_ht_lvpldo, "vdd_l4"},1327	{ "l5", QCOM_SMD_RPM_LDOE, 5, &pm660_nldo660, "vdd_l5_l6"},1328	{ "l6", QCOM_SMD_RPM_LDOE, 6, &pm660_nldo660, "vdd_l5_l6"},1329	{ "l7", QCOM_SMD_RPM_LDOE, 7, &pm660_pldo660, "vdd_l7_bob"},1330	{}1331};1332 1333static const struct rpm_regulator_data rpm_pms405_regulators[] = {1334	{ "s1", QCOM_SMD_RPM_SMPA, 1, &pms405_hfsmps3, "vdd_s1" },1335	{ "s2", QCOM_SMD_RPM_SMPA, 2, &pms405_hfsmps3, "vdd_s2" },1336	{ "s3", QCOM_SMD_RPM_SMPA, 3, &pms405_hfsmps3, "vdd_s3" },1337	{ "s4", QCOM_SMD_RPM_SMPA, 4, &pms405_hfsmps3, "vdd_s4" },1338	{ "s5", QCOM_SMD_RPM_SMPA, 5, &pms405_hfsmps3, "vdd_s5" },1339	{ "l1", QCOM_SMD_RPM_LDOA, 1, &pms405_nldo1200, "vdd_l1_l2" },1340	{ "l2", QCOM_SMD_RPM_LDOA, 2, &pms405_nldo1200, "vdd_l1_l2" },1341	{ "l3", QCOM_SMD_RPM_LDOA, 3, &pms405_nldo1200, "vdd_l3_l8" },1342	{ "l4", QCOM_SMD_RPM_LDOA, 4, &pms405_nldo300, "vdd_l4" },1343	{ "l5", QCOM_SMD_RPM_LDOA, 5, &pms405_pldo600, "vdd_l5_l6" },1344	{ "l6", QCOM_SMD_RPM_LDOA, 6, &pms405_pldo600, "vdd_l5_l6" },1345	{ "l7", QCOM_SMD_RPM_LDOA, 7, &pms405_pldo150, "vdd_l7" },1346	{ "l8", QCOM_SMD_RPM_LDOA, 8, &pms405_nldo1200, "vdd_l3_l8" },1347	{ "l9", QCOM_SMD_RPM_LDOA, 9, &pms405_nldo1200, "vdd_l9" },1348	{ "l10", QCOM_SMD_RPM_LDOA, 10, &pms405_pldo50, "vdd_l10_l11_l12_l13" },1349	{ "l11", QCOM_SMD_RPM_LDOA, 11, &pms405_pldo150, "vdd_l10_l11_l12_l13" },1350	{ "l12", QCOM_SMD_RPM_LDOA, 12, &pms405_pldo150, "vdd_l10_l11_l12_l13" },1351	{ "l13", QCOM_SMD_RPM_LDOA, 13, &pms405_pldo150, "vdd_l10_l11_l12_l13" },1352	{}1353};1354 1355static const struct of_device_id rpm_of_match[] = {1356	{ .compatible = "qcom,rpm-mp5496-regulators", .data = &rpm_mp5496_regulators },1357	{ .compatible = "qcom,rpm-pm2250-regulators", .data = &rpm_pm2250_regulators },1358	{ .compatible = "qcom,rpm-pm6125-regulators", .data = &rpm_pm6125_regulators },1359	{ .compatible = "qcom,rpm-pm660-regulators", .data = &rpm_pm660_regulators },1360	{ .compatible = "qcom,rpm-pm660l-regulators", .data = &rpm_pm660l_regulators },1361	{ .compatible = "qcom,rpm-pm8226-regulators", .data = &rpm_pm8226_regulators },1362	{ .compatible = "qcom,rpm-pm8841-regulators", .data = &rpm_pm8841_regulators },1363	{ .compatible = "qcom,rpm-pm8909-regulators", .data = &rpm_pm8909_regulators },1364	{ .compatible = "qcom,rpm-pm8916-regulators", .data = &rpm_pm8916_regulators },1365	{ .compatible = "qcom,rpm-pm8937-regulators", .data = &rpm_pm8937_regulators },1366	{ .compatible = "qcom,rpm-pm8941-regulators", .data = &rpm_pm8941_regulators },1367	{ .compatible = "qcom,rpm-pm8950-regulators", .data = &rpm_pm8950_regulators },1368	{ .compatible = "qcom,rpm-pm8953-regulators", .data = &rpm_pm8953_regulators },1369	{ .compatible = "qcom,rpm-pm8994-regulators", .data = &rpm_pm8994_regulators },1370	{ .compatible = "qcom,rpm-pm8998-regulators", .data = &rpm_pm8998_regulators },1371	{ .compatible = "qcom,rpm-pma8084-regulators", .data = &rpm_pma8084_regulators },1372	{ .compatible = "qcom,rpm-pmi8994-regulators", .data = &rpm_pmi8994_regulators },1373	{ .compatible = "qcom,rpm-pmi8998-regulators", .data = &rpm_pmi8998_regulators },1374	{ .compatible = "qcom,rpm-pmr735a-regulators", .data = &rpm_pmr735a_regulators },1375	{ .compatible = "qcom,rpm-pms405-regulators", .data = &rpm_pms405_regulators },1376	{}1377};1378MODULE_DEVICE_TABLE(of, rpm_of_match);1379 1380/**1381 * rpm_regulator_init_vreg() - initialize all attributes of a qcom_smd-regulator1382 * @vreg:		Pointer to the individual qcom_smd-regulator resource1383 * @dev:		Pointer to the top level qcom_smd-regulator PMIC device1384 * @node:		Pointer to the individual qcom_smd-regulator resource1385 *			device node1386 * @pmic_rpm_data:	Pointer to a null-terminated array of qcom_smd-regulator1387 *			resources defined for the top level PMIC device1388 *1389 * Return: 0 on success, or a negative error number on failure1390 */1391static int rpm_regulator_init_vreg(struct qcom_rpm_reg *vreg, struct device *dev,1392				   struct device_node *node,1393				   const struct rpm_regulator_data *pmic_rpm_data)1394{1395	struct regulator_config config = {};1396	const struct rpm_regulator_data *rpm_data;1397	struct regulator_dev *rdev;1398	int ret;1399 1400	for (rpm_data = pmic_rpm_data; rpm_data->name; rpm_data++)1401		if (of_node_name_eq(node, rpm_data->name))1402			break;1403 1404	if (!rpm_data->name) {1405		dev_err(dev, "Unknown regulator %pOFn\n", node);1406		return -EINVAL;1407	}1408 1409	vreg->dev	= dev;1410	vreg->type	= rpm_data->type;1411	vreg->id	= rpm_data->id;1412 1413	memcpy(&vreg->desc, rpm_data->desc, sizeof(vreg->desc));1414	vreg->desc.name = rpm_data->name;1415	vreg->desc.supply_name = rpm_data->supply;1416	vreg->desc.owner = THIS_MODULE;1417	vreg->desc.type = REGULATOR_VOLTAGE;1418	vreg->desc.of_match = rpm_data->name;1419 1420	config.dev		= dev;1421	config.of_node		= node;1422	config.driver_data	= vreg;1423 1424	rdev = devm_regulator_register(dev, &vreg->desc, &config);1425	if (IS_ERR(rdev)) {1426		ret = PTR_ERR(rdev);1427		dev_err(dev, "%pOFn: devm_regulator_register() failed, ret=%d\n", node, ret);1428		return ret;1429	}1430 1431	return 0;1432}1433 1434static int rpm_reg_probe(struct platform_device *pdev)1435{1436	struct device *dev = &pdev->dev;1437	const struct rpm_regulator_data *vreg_data;1438	struct qcom_rpm_reg *vreg;1439	struct qcom_smd_rpm *rpm;1440	int ret;1441 1442	rpm = dev_get_drvdata(pdev->dev.parent);1443	if (!rpm) {1444		dev_err(&pdev->dev, "Unable to retrieve handle to rpm\n");1445		return -ENODEV;1446	}1447 1448	if (smd_vreg_rpm && rpm != smd_vreg_rpm)1449		return dev_err_probe(dev, -EINVAL, "RPM mismatch\n");1450 1451	smd_vreg_rpm = rpm;1452 1453	vreg_data = of_device_get_match_data(dev);1454	if (!vreg_data)1455		return -ENODEV;1456 1457	for_each_available_child_of_node_scoped(dev->of_node, node) {1458		vreg = devm_kzalloc(&pdev->dev, sizeof(*vreg), GFP_KERNEL);1459		if (!vreg)1460			return -ENOMEM;1461 1462		ret = rpm_regulator_init_vreg(vreg, dev, node, vreg_data);1463		if (ret < 0)1464			return ret;1465	}1466 1467	return 0;1468}1469 1470static struct platform_driver rpm_reg_driver = {1471	.probe = rpm_reg_probe,1472	.driver = {1473		.name  = "qcom_rpm_smd_regulator",1474		.probe_type = PROBE_PREFER_ASYNCHRONOUS,1475		.of_match_table = rpm_of_match,1476	},1477};1478 1479static int __init rpm_reg_init(void)1480{1481	return platform_driver_register(&rpm_reg_driver);1482}1483subsys_initcall(rpm_reg_init);1484 1485static void __exit rpm_reg_exit(void)1486{1487	platform_driver_unregister(&rpm_reg_driver);1488}1489module_exit(rpm_reg_exit)1490 1491MODULE_DESCRIPTION("Qualcomm RPM regulator driver");1492MODULE_LICENSE("GPL v2");1493