brintos

brintos / linux-shallow public Read only

0
0
Text · 63.6 KiB · 6c343b4 Raw
1705 lines · c
1// SPDX-License-Identifier: GPL-2.02// Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.3// Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.4 5#define pr_fmt(fmt) "%s: " fmt, __func__6 7#include <linux/err.h>8#include <linux/kernel.h>9#include <linux/module.h>10#include <linux/of.h>11#include <linux/platform_device.h>12#include <linux/slab.h>13#include <linux/string.h>14#include <linux/regulator/driver.h>15#include <linux/regulator/machine.h>16#include <linux/regulator/of_regulator.h>17 18#include <soc/qcom/cmd-db.h>19#include <soc/qcom/rpmh.h>20 21#include <dt-bindings/regulator/qcom,rpmh-regulator.h>22 23/**24 * enum rpmh_regulator_type - supported RPMh accelerator types25 * @VRM:	RPMh VRM accelerator which supports voting on enable, voltage,26 *		and mode of LDO, SMPS, and BOB type PMIC regulators.27 * @XOB:	RPMh XOB accelerator which supports voting on the enable state28 *		of PMIC regulators.29 */30enum rpmh_regulator_type {31	VRM,32	XOB,33};34 35#define RPMH_REGULATOR_REG_VRM_VOLTAGE		0x036#define RPMH_REGULATOR_REG_ENABLE		0x437#define RPMH_REGULATOR_REG_VRM_MODE		0x838 39#define PMIC4_LDO_MODE_RETENTION		440#define PMIC4_LDO_MODE_LPM			541#define PMIC4_LDO_MODE_HPM			742 43#define PMIC4_SMPS_MODE_RETENTION		444#define PMIC4_SMPS_MODE_PFM			545#define PMIC4_SMPS_MODE_AUTO			646#define PMIC4_SMPS_MODE_PWM			747 48#define PMIC4_BOB_MODE_PASS			049#define PMIC4_BOB_MODE_PFM			150#define PMIC4_BOB_MODE_AUTO			251#define PMIC4_BOB_MODE_PWM			352 53#define PMIC5_LDO_MODE_RETENTION		354#define PMIC5_LDO_MODE_LPM			455#define PMIC5_LDO_MODE_HPM			756 57#define PMIC5_SMPS_MODE_RETENTION		358#define PMIC5_SMPS_MODE_PFM			459#define PMIC5_SMPS_MODE_AUTO			660#define PMIC5_SMPS_MODE_PWM			761 62#define PMIC5_BOB_MODE_PASS			263#define PMIC5_BOB_MODE_PFM			464#define PMIC5_BOB_MODE_AUTO			665#define PMIC5_BOB_MODE_PWM			766 67/**68 * struct rpmh_vreg_hw_data - RPMh regulator hardware configurations69 * @regulator_type:		RPMh accelerator type used to manage this70 *				regulator71 * @ops:			Pointer to regulator ops callback structure72 * @voltage_ranges:		The possible ranges of voltages supported by this73 * 				PMIC regulator type74 * @n_linear_ranges:		Number of entries in voltage_ranges75 * @n_voltages:			The number of unique voltage set points defined76 *				by voltage_ranges77 * @hpm_min_load_uA:		Minimum load current in microamps that requires78 *				high power mode (HPM) operation.  This is used79 *				for LDO hardware type regulators only.80 * @pmic_mode_map:		Array indexed by regulator framework mode81 *				containing PMIC hardware modes.  Must be large82 *				enough to index all framework modes supported83 *				by this regulator hardware type.84 * @of_map_mode:		Maps an RPMH_REGULATOR_MODE_* mode value defined85 *				in device tree to a regulator framework mode86 */87struct rpmh_vreg_hw_data {88	enum rpmh_regulator_type		regulator_type;89	const struct regulator_ops		*ops;90	const struct linear_range		*voltage_ranges;91	int					n_linear_ranges;92	int					n_voltages;93	int					hpm_min_load_uA;94	const int				*pmic_mode_map;95	unsigned int			      (*of_map_mode)(unsigned int mode);96};97 98/**99 * struct rpmh_vreg - individual RPMh regulator data structure encapsulating a100 *		single regulator device101 * @dev:			Device pointer for the top-level PMIC RPMh102 *				regulator parent device.  This is used as a103 *				handle in RPMh write requests.104 * @addr:			Base address of the regulator resource within105 *				an RPMh accelerator106 * @rdesc:			Regulator descriptor107 * @hw_data:			PMIC regulator configuration data for this RPMh108 *				regulator109 * @always_wait_for_ack:	Boolean flag indicating if a request must always110 *				wait for an ACK from RPMh before continuing even111 *				if it corresponds to a strictly lower power112 *				state (e.g. enabled --> disabled).113 * @enabled:			Flag indicating if the regulator is enabled or114 *				not115 * @bypassed:			Boolean indicating if the regulator is in116 *				bypass (pass-through) mode or not.  This is117 *				only used by BOB rpmh-regulator resources.118 * @voltage_selector:		Selector used for get_voltage_sel() and119 *				set_voltage_sel() callbacks120 * @mode:			RPMh VRM regulator current framework mode121 */122struct rpmh_vreg {123	struct device			*dev;124	u32				addr;125	struct regulator_desc		rdesc;126	const struct rpmh_vreg_hw_data	*hw_data;127	bool				always_wait_for_ack;128 129	int				enabled;130	bool				bypassed;131	int				voltage_selector;132	unsigned int			mode;133};134 135/**136 * struct rpmh_vreg_init_data - initialization data for an RPMh regulator137 * @name:			Name for the regulator which also corresponds138 *				to the device tree subnode name of the regulator139 * @resource_name:		RPMh regulator resource name format string.140 *				This must include exactly one field: '%s' which141 *				is filled at run-time with the PMIC ID provided142 *				by device tree property qcom,pmic-id.  Example:143 *				"ldo%s1" for RPMh resource "ldoa1".144 * @supply_name:		Parent supply regulator name145 * @hw_data:			Configuration data for this PMIC regulator type146 */147struct rpmh_vreg_init_data {148	const char			*name;149	const char			*resource_name;150	const char			*supply_name;151	const struct rpmh_vreg_hw_data	*hw_data;152};153 154/**155 * rpmh_regulator_send_request() - send the request to RPMh156 * @vreg:		Pointer to the RPMh regulator157 * @cmd:		Pointer to the RPMh command to send158 * @wait_for_ack:	Boolean indicating if execution must wait until the159 *			request has been acknowledged as complete160 *161 * Return: 0 on success, or a negative error number on failure162 */163static int rpmh_regulator_send_request(struct rpmh_vreg *vreg,164			struct tcs_cmd *cmd, bool wait_for_ack)165{166	int ret;167 168	if (wait_for_ack || vreg->always_wait_for_ack)169		ret = rpmh_write(vreg->dev, RPMH_ACTIVE_ONLY_STATE, cmd, 1);170	else171		ret = rpmh_write_async(vreg->dev, RPMH_ACTIVE_ONLY_STATE, cmd,172					1);173 174	return ret;175}176 177static int _rpmh_regulator_vrm_set_voltage_sel(struct regulator_dev *rdev,178				unsigned int selector, bool wait_for_ack)179{180	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);181	struct tcs_cmd cmd = {182		.addr = vreg->addr + RPMH_REGULATOR_REG_VRM_VOLTAGE,183	};184	int ret;185 186	/* VRM voltage control register is set with voltage in millivolts. */187	cmd.data = DIV_ROUND_UP(regulator_list_voltage_linear_range(rdev,188							selector), 1000);189 190	ret = rpmh_regulator_send_request(vreg, &cmd, wait_for_ack);191	if (!ret)192		vreg->voltage_selector = selector;193 194	return ret;195}196 197static int rpmh_regulator_vrm_set_voltage_sel(struct regulator_dev *rdev,198					unsigned int selector)199{200	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);201 202	if (vreg->enabled == -EINVAL) {203		/*204		 * Cache the voltage and send it later when the regulator is205		 * enabled or disabled.206		 */207		vreg->voltage_selector = selector;208		return 0;209	}210 211	return _rpmh_regulator_vrm_set_voltage_sel(rdev, selector,212					selector > vreg->voltage_selector);213}214 215static int rpmh_regulator_vrm_get_voltage_sel(struct regulator_dev *rdev)216{217	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);218 219	return vreg->voltage_selector;220}221 222static int rpmh_regulator_is_enabled(struct regulator_dev *rdev)223{224	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);225 226	return vreg->enabled;227}228 229static int rpmh_regulator_set_enable_state(struct regulator_dev *rdev,230					bool enable)231{232	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);233	struct tcs_cmd cmd = {234		.addr = vreg->addr + RPMH_REGULATOR_REG_ENABLE,235		.data = enable,236	};237	int ret;238 239	if (vreg->enabled == -EINVAL &&240	    vreg->voltage_selector != -ENOTRECOVERABLE) {241		ret = _rpmh_regulator_vrm_set_voltage_sel(rdev,242						vreg->voltage_selector, true);243		if (ret < 0)244			return ret;245	}246 247	ret = rpmh_regulator_send_request(vreg, &cmd, enable);248	if (!ret)249		vreg->enabled = enable;250 251	return ret;252}253 254static int rpmh_regulator_enable(struct regulator_dev *rdev)255{256	return rpmh_regulator_set_enable_state(rdev, true);257}258 259static int rpmh_regulator_disable(struct regulator_dev *rdev)260{261	return rpmh_regulator_set_enable_state(rdev, false);262}263 264static int rpmh_regulator_vrm_set_mode_bypass(struct rpmh_vreg *vreg,265					unsigned int mode, bool bypassed)266{267	struct tcs_cmd cmd = {268		.addr = vreg->addr + RPMH_REGULATOR_REG_VRM_MODE,269	};270	int pmic_mode;271 272	if (mode > REGULATOR_MODE_STANDBY)273		return -EINVAL;274 275	pmic_mode = vreg->hw_data->pmic_mode_map[mode];276	if (pmic_mode < 0)277		return pmic_mode;278 279	if (bypassed)280		cmd.data = PMIC4_BOB_MODE_PASS;281	else282		cmd.data = pmic_mode;283 284	return rpmh_regulator_send_request(vreg, &cmd, true);285}286 287static int rpmh_regulator_vrm_set_mode(struct regulator_dev *rdev,288					unsigned int mode)289{290	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);291	int ret;292 293	if (mode == vreg->mode)294		return 0;295 296	ret = rpmh_regulator_vrm_set_mode_bypass(vreg, mode, vreg->bypassed);297	if (!ret)298		vreg->mode = mode;299 300	return ret;301}302 303static unsigned int rpmh_regulator_vrm_get_mode(struct regulator_dev *rdev)304{305	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);306 307	return vreg->mode;308}309 310/**311 * rpmh_regulator_vrm_get_optimum_mode() - get the mode based on the  load312 * @rdev:		Regulator device pointer for the rpmh-regulator313 * @input_uV:		Input voltage314 * @output_uV:		Output voltage315 * @load_uA:		Aggregated load current in microamps316 *317 * This function is used in the regulator_ops for VRM type RPMh regulator318 * devices.319 *320 * Return: 0 on success, or a negative error number on failure321 */322static unsigned int rpmh_regulator_vrm_get_optimum_mode(323	struct regulator_dev *rdev, int input_uV, int output_uV, int load_uA)324{325	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);326 327	if (load_uA >= vreg->hw_data->hpm_min_load_uA)328		return REGULATOR_MODE_NORMAL;329	else330		return REGULATOR_MODE_IDLE;331}332 333static int rpmh_regulator_vrm_set_bypass(struct regulator_dev *rdev,334				bool enable)335{336	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);337	int ret;338 339	if (vreg->bypassed == enable)340		return 0;341 342	ret = rpmh_regulator_vrm_set_mode_bypass(vreg, vreg->mode, enable);343	if (!ret)344		vreg->bypassed = enable;345 346	return ret;347}348 349static int rpmh_regulator_vrm_get_bypass(struct regulator_dev *rdev,350				bool *enable)351{352	struct rpmh_vreg *vreg = rdev_get_drvdata(rdev);353 354	*enable = vreg->bypassed;355 356	return 0;357}358 359static const struct regulator_ops rpmh_regulator_vrm_ops = {360	.enable			= rpmh_regulator_enable,361	.disable		= rpmh_regulator_disable,362	.is_enabled		= rpmh_regulator_is_enabled,363	.set_voltage_sel	= rpmh_regulator_vrm_set_voltage_sel,364	.get_voltage_sel	= rpmh_regulator_vrm_get_voltage_sel,365	.list_voltage		= regulator_list_voltage_linear_range,366	.set_mode		= rpmh_regulator_vrm_set_mode,367	.get_mode		= rpmh_regulator_vrm_get_mode,368};369 370static const struct regulator_ops rpmh_regulator_vrm_drms_ops = {371	.enable			= rpmh_regulator_enable,372	.disable		= rpmh_regulator_disable,373	.is_enabled		= rpmh_regulator_is_enabled,374	.set_voltage_sel	= rpmh_regulator_vrm_set_voltage_sel,375	.get_voltage_sel	= rpmh_regulator_vrm_get_voltage_sel,376	.list_voltage		= regulator_list_voltage_linear_range,377	.set_mode		= rpmh_regulator_vrm_set_mode,378	.get_mode		= rpmh_regulator_vrm_get_mode,379	.get_optimum_mode	= rpmh_regulator_vrm_get_optimum_mode,380};381 382static const struct regulator_ops rpmh_regulator_vrm_bypass_ops = {383	.enable			= rpmh_regulator_enable,384	.disable		= rpmh_regulator_disable,385	.is_enabled		= rpmh_regulator_is_enabled,386	.set_voltage_sel	= rpmh_regulator_vrm_set_voltage_sel,387	.get_voltage_sel	= rpmh_regulator_vrm_get_voltage_sel,388	.list_voltage		= regulator_list_voltage_linear_range,389	.set_mode		= rpmh_regulator_vrm_set_mode,390	.get_mode		= rpmh_regulator_vrm_get_mode,391	.set_bypass		= rpmh_regulator_vrm_set_bypass,392	.get_bypass		= rpmh_regulator_vrm_get_bypass,393};394 395static const struct regulator_ops rpmh_regulator_xob_ops = {396	.enable			= rpmh_regulator_enable,397	.disable		= rpmh_regulator_disable,398	.is_enabled		= rpmh_regulator_is_enabled,399};400 401/**402 * rpmh_regulator_init_vreg() - initialize all attributes of an rpmh-regulator403 * @vreg:		Pointer to the individual rpmh-regulator resource404 * @dev:			Pointer to the top level rpmh-regulator PMIC device405 * @node:		Pointer to the individual rpmh-regulator resource406 *			device node407 * @pmic_id:		String used to identify the top level rpmh-regulator408 *			PMIC device on the board409 * @pmic_rpmh_data:	Pointer to a null-terminated array of rpmh-regulator410 *			resources defined for the top level PMIC device411 *412 * Return: 0 on success, or a negative error number on failure413 */414static int rpmh_regulator_init_vreg(struct rpmh_vreg *vreg, struct device *dev,415			struct device_node *node, const char *pmic_id,416			const struct rpmh_vreg_init_data *pmic_rpmh_data)417{418	struct regulator_config reg_config = {};419	char rpmh_resource_name[20] = "";420	const struct rpmh_vreg_init_data *rpmh_data;421	struct regulator_init_data *init_data;422	struct regulator_dev *rdev;423	int ret;424 425	vreg->dev = dev;426 427	for (rpmh_data = pmic_rpmh_data; rpmh_data->name; rpmh_data++)428		if (of_node_name_eq(node, rpmh_data->name))429			break;430 431	if (!rpmh_data->name) {432		dev_err(dev, "Unknown regulator %pOFn\n", node);433		return -EINVAL;434	}435 436	scnprintf(rpmh_resource_name, sizeof(rpmh_resource_name),437		rpmh_data->resource_name, pmic_id);438 439	vreg->addr = cmd_db_read_addr(rpmh_resource_name);440	if (!vreg->addr) {441		dev_err(dev, "%pOFn: could not find RPMh address for resource %s\n",442			node, rpmh_resource_name);443		return -ENODEV;444	}445 446	vreg->rdesc.name = rpmh_data->name;447	vreg->rdesc.supply_name = rpmh_data->supply_name;448	vreg->hw_data = rpmh_data->hw_data;449 450	vreg->enabled = -EINVAL;451	vreg->voltage_selector = -ENOTRECOVERABLE;452	vreg->mode = REGULATOR_MODE_INVALID;453 454	if (rpmh_data->hw_data->n_voltages) {455		vreg->rdesc.linear_ranges = rpmh_data->hw_data->voltage_ranges;456		vreg->rdesc.n_linear_ranges = rpmh_data->hw_data->n_linear_ranges;457		vreg->rdesc.n_voltages = rpmh_data->hw_data->n_voltages;458	}459 460	vreg->always_wait_for_ack = of_property_read_bool(node,461						"qcom,always-wait-for-ack");462 463	vreg->rdesc.owner	= THIS_MODULE;464	vreg->rdesc.type	= REGULATOR_VOLTAGE;465	vreg->rdesc.ops		= vreg->hw_data->ops;466	vreg->rdesc.of_map_mode	= vreg->hw_data->of_map_mode;467 468	init_data = of_get_regulator_init_data(dev, node, &vreg->rdesc);469	if (!init_data)470		return -ENOMEM;471 472	if (rpmh_data->hw_data->regulator_type == XOB &&473	    init_data->constraints.min_uV &&474	    init_data->constraints.min_uV == init_data->constraints.max_uV) {475		vreg->rdesc.fixed_uV = init_data->constraints.min_uV;476		vreg->rdesc.n_voltages = 1;477	}478 479	reg_config.dev		= dev;480	reg_config.init_data	= init_data;481	reg_config.of_node	= node;482	reg_config.driver_data	= vreg;483 484	rdev = devm_regulator_register(dev, &vreg->rdesc, &reg_config);485	if (IS_ERR(rdev)) {486		ret = PTR_ERR(rdev);487		dev_err(dev, "%pOFn: devm_regulator_register() failed, ret=%d\n",488			node, ret);489		return ret;490	}491 492	dev_dbg(dev, "%pOFn regulator registered for RPMh resource %s @ 0x%05X\n",493		node, rpmh_resource_name, vreg->addr);494 495	return 0;496}497 498static const int pmic_mode_map_pmic4_ldo[REGULATOR_MODE_STANDBY + 1] = {499	[REGULATOR_MODE_INVALID] = -EINVAL,500	[REGULATOR_MODE_STANDBY] = PMIC4_LDO_MODE_RETENTION,501	[REGULATOR_MODE_IDLE]    = PMIC4_LDO_MODE_LPM,502	[REGULATOR_MODE_NORMAL]  = PMIC4_LDO_MODE_HPM,503	[REGULATOR_MODE_FAST]    = -EINVAL,504};505 506static const int pmic_mode_map_pmic5_ldo[REGULATOR_MODE_STANDBY + 1] = {507	[REGULATOR_MODE_INVALID] = -EINVAL,508	[REGULATOR_MODE_STANDBY] = PMIC5_LDO_MODE_RETENTION,509	[REGULATOR_MODE_IDLE]    = PMIC5_LDO_MODE_LPM,510	[REGULATOR_MODE_NORMAL]  = PMIC5_LDO_MODE_HPM,511	[REGULATOR_MODE_FAST]    = -EINVAL,512};513 514static const int pmic_mode_map_pmic5_ldo_hpm[REGULATOR_MODE_STANDBY + 1] = {515	[REGULATOR_MODE_INVALID] = -EINVAL,516	[REGULATOR_MODE_STANDBY] = -EINVAL,517	[REGULATOR_MODE_IDLE]    = -EINVAL,518	[REGULATOR_MODE_NORMAL]  = PMIC5_LDO_MODE_HPM,519	[REGULATOR_MODE_FAST]    = -EINVAL,520};521 522static unsigned int rpmh_regulator_pmic4_ldo_of_map_mode(unsigned int rpmh_mode)523{524	unsigned int mode;525 526	switch (rpmh_mode) {527	case RPMH_REGULATOR_MODE_HPM:528		mode = REGULATOR_MODE_NORMAL;529		break;530	case RPMH_REGULATOR_MODE_LPM:531		mode = REGULATOR_MODE_IDLE;532		break;533	case RPMH_REGULATOR_MODE_RET:534		mode = REGULATOR_MODE_STANDBY;535		break;536	default:537		mode = REGULATOR_MODE_INVALID;538		break;539	}540 541	return mode;542}543 544static const int pmic_mode_map_pmic4_smps[REGULATOR_MODE_STANDBY + 1] = {545	[REGULATOR_MODE_INVALID] = -EINVAL,546	[REGULATOR_MODE_STANDBY] = PMIC4_SMPS_MODE_RETENTION,547	[REGULATOR_MODE_IDLE]    = PMIC4_SMPS_MODE_PFM,548	[REGULATOR_MODE_NORMAL]  = PMIC4_SMPS_MODE_AUTO,549	[REGULATOR_MODE_FAST]    = PMIC4_SMPS_MODE_PWM,550};551 552static const int pmic_mode_map_pmic5_smps[REGULATOR_MODE_STANDBY + 1] = {553	[REGULATOR_MODE_INVALID] = -EINVAL,554	[REGULATOR_MODE_STANDBY] = PMIC5_SMPS_MODE_RETENTION,555	[REGULATOR_MODE_IDLE]    = PMIC5_SMPS_MODE_PFM,556	[REGULATOR_MODE_NORMAL]  = PMIC5_SMPS_MODE_AUTO,557	[REGULATOR_MODE_FAST]    = PMIC5_SMPS_MODE_PWM,558};559 560static unsigned int561rpmh_regulator_pmic4_smps_of_map_mode(unsigned int rpmh_mode)562{563	unsigned int mode;564 565	switch (rpmh_mode) {566	case RPMH_REGULATOR_MODE_HPM:567		mode = REGULATOR_MODE_FAST;568		break;569	case RPMH_REGULATOR_MODE_AUTO:570		mode = REGULATOR_MODE_NORMAL;571		break;572	case RPMH_REGULATOR_MODE_LPM:573		mode = REGULATOR_MODE_IDLE;574		break;575	case RPMH_REGULATOR_MODE_RET:576		mode = REGULATOR_MODE_STANDBY;577		break;578	default:579		mode = REGULATOR_MODE_INVALID;580		break;581	}582 583	return mode;584}585 586static const int pmic_mode_map_pmic4_bob[REGULATOR_MODE_STANDBY + 1] = {587	[REGULATOR_MODE_INVALID] = -EINVAL,588	[REGULATOR_MODE_STANDBY] = -EINVAL,589	[REGULATOR_MODE_IDLE]    = PMIC4_BOB_MODE_PFM,590	[REGULATOR_MODE_NORMAL]  = PMIC4_BOB_MODE_AUTO,591	[REGULATOR_MODE_FAST]    = PMIC4_BOB_MODE_PWM,592};593 594static const int pmic_mode_map_pmic5_bob[REGULATOR_MODE_STANDBY + 1] = {595	[REGULATOR_MODE_INVALID] = -EINVAL,596	[REGULATOR_MODE_STANDBY] = -EINVAL,597	[REGULATOR_MODE_IDLE]    = PMIC5_BOB_MODE_PFM,598	[REGULATOR_MODE_NORMAL]  = PMIC5_BOB_MODE_AUTO,599	[REGULATOR_MODE_FAST]    = PMIC5_BOB_MODE_PWM,600};601 602static unsigned int rpmh_regulator_pmic4_bob_of_map_mode(unsigned int rpmh_mode)603{604	unsigned int mode;605 606	switch (rpmh_mode) {607	case RPMH_REGULATOR_MODE_HPM:608		mode = REGULATOR_MODE_FAST;609		break;610	case RPMH_REGULATOR_MODE_AUTO:611		mode = REGULATOR_MODE_NORMAL;612		break;613	case RPMH_REGULATOR_MODE_LPM:614		mode = REGULATOR_MODE_IDLE;615		break;616	default:617		mode = REGULATOR_MODE_INVALID;618		break;619	}620 621	return mode;622}623 624static const struct rpmh_vreg_hw_data pmic4_pldo = {625	.regulator_type = VRM,626	.ops = &rpmh_regulator_vrm_drms_ops,627	.voltage_ranges = (struct linear_range[]) {628		REGULATOR_LINEAR_RANGE(1664000, 0, 255, 8000),629	},630	.n_linear_ranges = 1,631	.n_voltages = 256,632	.hpm_min_load_uA = 10000,633	.pmic_mode_map = pmic_mode_map_pmic4_ldo,634	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,635};636 637static const struct rpmh_vreg_hw_data pmic4_pldo_lv = {638	.regulator_type = VRM,639	.ops = &rpmh_regulator_vrm_drms_ops,640	.voltage_ranges = (struct linear_range[]) {641	       REGULATOR_LINEAR_RANGE(1256000, 0, 127, 8000),642	},643	.n_linear_ranges = 1,644	.n_voltages = 128,645	.hpm_min_load_uA = 10000,646	.pmic_mode_map = pmic_mode_map_pmic4_ldo,647	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,648};649 650static const struct rpmh_vreg_hw_data pmic4_nldo = {651	.regulator_type = VRM,652	.ops = &rpmh_regulator_vrm_drms_ops,653	.voltage_ranges = (struct linear_range[]) {654		REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000),655	},656	.n_linear_ranges = 1,657	.n_voltages = 128,658	.hpm_min_load_uA = 30000,659	.pmic_mode_map = pmic_mode_map_pmic4_ldo,660	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,661};662 663static const struct rpmh_vreg_hw_data pmic4_hfsmps3 = {664	.regulator_type = VRM,665	.ops = &rpmh_regulator_vrm_ops,666	.voltage_ranges = (struct linear_range[]) {667		REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),668	},669	.n_linear_ranges = 1,670	.n_voltages = 216,671	.pmic_mode_map = pmic_mode_map_pmic4_smps,672	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,673};674 675static const struct rpmh_vreg_hw_data pmic4_ftsmps426 = {676	.regulator_type = VRM,677	.ops = &rpmh_regulator_vrm_ops,678	.voltage_ranges = (struct linear_range[]) {679		REGULATOR_LINEAR_RANGE(320000, 0, 258, 4000),680	},681	.n_linear_ranges = 1,682	.n_voltages = 259,683	.pmic_mode_map = pmic_mode_map_pmic4_smps,684	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,685};686 687static const struct rpmh_vreg_hw_data pmic4_bob = {688	.regulator_type = VRM,689	.ops = &rpmh_regulator_vrm_bypass_ops,690	.voltage_ranges = (struct linear_range[]) {691		REGULATOR_LINEAR_RANGE(1824000, 0, 83, 32000),692	},693	.n_linear_ranges = 1,694	.n_voltages = 84,695	.pmic_mode_map = pmic_mode_map_pmic4_bob,696	.of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode,697};698 699static const struct rpmh_vreg_hw_data pmic4_lvs = {700	.regulator_type = XOB,701	.ops = &rpmh_regulator_xob_ops,702	/* LVS hardware does not support voltage or mode configuration. */703};704 705static const struct rpmh_vreg_hw_data pmic5_pldo = {706	.regulator_type = VRM,707	.ops = &rpmh_regulator_vrm_drms_ops,708	.voltage_ranges = (struct linear_range[]) {709		REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000),710	},711	.n_linear_ranges = 1,712	.n_voltages = 256,713	.hpm_min_load_uA = 10000,714	.pmic_mode_map = pmic_mode_map_pmic5_ldo,715	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,716};717 718static const struct rpmh_vreg_hw_data pmic5_pldo_lv = {719	.regulator_type = VRM,720	.ops = &rpmh_regulator_vrm_drms_ops,721	.voltage_ranges = (struct linear_range[]) {722		REGULATOR_LINEAR_RANGE(1504000, 0, 62, 8000),723	},724	.n_linear_ranges = 1,725	.n_voltages = 63,726	.hpm_min_load_uA = 10000,727	.pmic_mode_map = pmic_mode_map_pmic5_ldo,728	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,729};730 731static const struct rpmh_vreg_hw_data pmic5_pldo515_mv = {732	.regulator_type = VRM,733	.ops = &rpmh_regulator_vrm_drms_ops,734	.voltage_ranges = (struct linear_range[]) {735		REGULATOR_LINEAR_RANGE(1800000, 0, 187, 8000),736	},737	.n_linear_ranges = 1,738	.n_voltages = 188,739	.hpm_min_load_uA = 10000,740	.pmic_mode_map = pmic_mode_map_pmic5_ldo,741	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,742};743 744static const struct rpmh_vreg_hw_data pmic5_pldo502 = {745	.regulator_type = VRM,746	.ops = &rpmh_regulator_vrm_ops,747	.voltage_ranges = (struct linear_range[]) {748		REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000),749	},750	.n_linear_ranges = 1,751	.n_voltages = 256,752	.pmic_mode_map = pmic_mode_map_pmic5_ldo_hpm,753	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,754};755 756static const struct rpmh_vreg_hw_data pmic5_pldo502ln = {757	.regulator_type = VRM,758	.ops = &rpmh_regulator_vrm_ops,759	.voltage_ranges = (struct linear_range[]) {760		REGULATOR_LINEAR_RANGE(1800000, 0,  2,  200000),761		REGULATOR_LINEAR_RANGE(2608000, 3,  28, 16000),762		REGULATOR_LINEAR_RANGE(3104000, 29, 30, 96000),763		REGULATOR_LINEAR_RANGE(3312000, 31, 31, 0),764	},765	.n_linear_ranges = 4,766	.n_voltages = 32,767	.pmic_mode_map = pmic_mode_map_pmic5_ldo_hpm,768	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,769};770 771static const struct rpmh_vreg_hw_data pmic5_nldo = {772	.regulator_type = VRM,773	.ops = &rpmh_regulator_vrm_drms_ops,774	.voltage_ranges = (struct linear_range[]) {775		REGULATOR_LINEAR_RANGE(320000, 0, 123, 8000),776	},777	.n_linear_ranges = 1,778	.n_voltages = 124,779	.hpm_min_load_uA = 30000,780	.pmic_mode_map = pmic_mode_map_pmic5_ldo,781	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,782};783 784static const struct rpmh_vreg_hw_data pmic5_nldo515 = {785	.regulator_type = VRM,786	.ops = &rpmh_regulator_vrm_drms_ops,787	.voltage_ranges = (struct linear_range[]) {788		REGULATOR_LINEAR_RANGE(320000, 0, 210, 8000),789	},790	.n_linear_ranges = 1,791	.n_voltages = 211,792	.hpm_min_load_uA = 30000,793	.pmic_mode_map = pmic_mode_map_pmic5_ldo,794	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,795};796 797static const struct rpmh_vreg_hw_data pmic5_nldo502 = {798	.regulator_type = VRM,799	.ops = &rpmh_regulator_vrm_drms_ops,800	.voltage_ranges = (struct linear_range[]) {801		REGULATOR_LINEAR_RANGE(528000, 0, 127, 8000),802	},803	.n_linear_ranges = 1,804	.n_voltages = 128,805	.hpm_min_load_uA = 30000,806	.pmic_mode_map = pmic_mode_map_pmic5_ldo,807	.of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode,808};809 810static const struct rpmh_vreg_hw_data pmic5_hfsmps510 = {811	.regulator_type = VRM,812	.ops = &rpmh_regulator_vrm_ops,813	.voltage_ranges = (struct linear_range[]) {814		REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),815	},816	.n_linear_ranges = 1,817	.n_voltages = 216,818	.pmic_mode_map = pmic_mode_map_pmic5_smps,819	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,820};821 822static const struct rpmh_vreg_hw_data pmic5_ftsmps510 = {823	.regulator_type = VRM,824	.ops = &rpmh_regulator_vrm_ops,825	.voltage_ranges = (struct linear_range[]) {826		REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000),827	},828	.n_linear_ranges = 1,829	.n_voltages = 264,830	.pmic_mode_map = pmic_mode_map_pmic5_smps,831	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,832};833 834static const struct rpmh_vreg_hw_data pmic5_ftsmps520 = {835	.regulator_type = VRM,836	.ops = &rpmh_regulator_vrm_ops,837	.voltage_ranges = (struct linear_range[]) {838		REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000),839	},840	.n_linear_ranges = 1,841	.n_voltages = 264,842	.pmic_mode_map = pmic_mode_map_pmic5_smps,843	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,844};845 846static const struct rpmh_vreg_hw_data pmic5_ftsmps525_lv = {847	.regulator_type = VRM,848	.ops = &rpmh_regulator_vrm_ops,849	.voltage_ranges = (struct linear_range[]) {850		REGULATOR_LINEAR_RANGE(300000, 0, 267, 4000),851	},852	.n_linear_ranges = 1,853	.n_voltages = 268,854	.pmic_mode_map = pmic_mode_map_pmic5_smps,855	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,856};857 858static const struct rpmh_vreg_hw_data pmic5_ftsmps525_mv = {859	.regulator_type = VRM,860	.ops = &rpmh_regulator_vrm_ops,861	.voltage_ranges = (struct linear_range[]) {862		REGULATOR_LINEAR_RANGE(600000, 0, 267, 8000),863	},864	.n_linear_ranges = 1,865	.n_voltages = 268,866	.pmic_mode_map = pmic_mode_map_pmic5_smps,867	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,868};869 870static const struct rpmh_vreg_hw_data pmic5_ftsmps527 = {871	.regulator_type = VRM,872	.ops = &rpmh_regulator_vrm_ops,873	.voltage_ranges = (struct linear_range[]) {874		REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000),875	},876	.n_linear_ranges = 1,877	.n_voltages = 215,878	.pmic_mode_map = pmic_mode_map_pmic5_smps,879	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,880};881 882static const struct rpmh_vreg_hw_data pmic5_hfsmps515 = {883	.regulator_type = VRM,884	.ops = &rpmh_regulator_vrm_ops,885	.voltage_ranges = (struct linear_range[]) {886		REGULATOR_LINEAR_RANGE(320000, 0, 235, 16000),887	},888	.n_linear_ranges = 1,889	.n_voltages = 236,890	.pmic_mode_map = pmic_mode_map_pmic5_smps,891	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,892};893 894static const struct rpmh_vreg_hw_data pmic5_hfsmps515_1 = {895	.regulator_type = VRM,896	.ops = &rpmh_regulator_vrm_ops,897	.voltage_ranges = (struct linear_range[]) {898		REGULATOR_LINEAR_RANGE(900000, 0, 4, 16000),899	},900	.n_linear_ranges = 1,901	.n_voltages = 5,902	.pmic_mode_map = pmic_mode_map_pmic5_smps,903	.of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode,904};905 906static const struct rpmh_vreg_hw_data pmic5_bob = {907	.regulator_type = VRM,908	.ops = &rpmh_regulator_vrm_bypass_ops,909	.voltage_ranges = (struct linear_range[]) {910		REGULATOR_LINEAR_RANGE(3000000, 0, 31, 32000),911	},912	.n_linear_ranges = 1,913	.n_voltages = 32,914	.pmic_mode_map = pmic_mode_map_pmic5_bob,915	.of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode,916};917 918#define RPMH_VREG(_name, _resource_name, _hw_data, _supply_name) \919{ \920	.name		= _name, \921	.resource_name	= _resource_name, \922	.hw_data	= _hw_data, \923	.supply_name	= _supply_name, \924}925 926static const struct rpmh_vreg_init_data pm8998_vreg_data[] = {927	RPMH_VREG("smps1",  "smp%s1",  &pmic4_ftsmps426, "vdd-s1"),928	RPMH_VREG("smps2",  "smp%s2",  &pmic4_ftsmps426, "vdd-s2"),929	RPMH_VREG("smps3",  "smp%s3",  &pmic4_hfsmps3,   "vdd-s3"),930	RPMH_VREG("smps4",  "smp%s4",  &pmic4_hfsmps3,   "vdd-s4"),931	RPMH_VREG("smps5",  "smp%s5",  &pmic4_hfsmps3,   "vdd-s5"),932	RPMH_VREG("smps6",  "smp%s6",  &pmic4_ftsmps426, "vdd-s6"),933	RPMH_VREG("smps7",  "smp%s7",  &pmic4_ftsmps426, "vdd-s7"),934	RPMH_VREG("smps8",  "smp%s8",  &pmic4_ftsmps426, "vdd-s8"),935	RPMH_VREG("smps9",  "smp%s9",  &pmic4_ftsmps426, "vdd-s9"),936	RPMH_VREG("smps10", "smp%s10", &pmic4_ftsmps426, "vdd-s10"),937	RPMH_VREG("smps11", "smp%s11", &pmic4_ftsmps426, "vdd-s11"),938	RPMH_VREG("smps12", "smp%s12", &pmic4_ftsmps426, "vdd-s12"),939	RPMH_VREG("smps13", "smp%s13", &pmic4_ftsmps426, "vdd-s13"),940	RPMH_VREG("ldo1",   "ldo%s1",  &pmic4_nldo,      "vdd-l1-l27"),941	RPMH_VREG("ldo2",   "ldo%s2",  &pmic4_nldo,      "vdd-l2-l8-l17"),942	RPMH_VREG("ldo3",   "ldo%s3",  &pmic4_nldo,      "vdd-l3-l11"),943	RPMH_VREG("ldo4",   "ldo%s4",  &pmic4_nldo,      "vdd-l4-l5"),944	RPMH_VREG("ldo5",   "ldo%s5",  &pmic4_nldo,      "vdd-l4-l5"),945	RPMH_VREG("ldo6",   "ldo%s6",  &pmic4_pldo,      "vdd-l6"),946	RPMH_VREG("ldo7",   "ldo%s7",  &pmic4_pldo_lv,   "vdd-l7-l12-l14-l15"),947	RPMH_VREG("ldo8",   "ldo%s8",  &pmic4_nldo,      "vdd-l2-l8-l17"),948	RPMH_VREG("ldo9",   "ldo%s9",  &pmic4_pldo,      "vdd-l9"),949	RPMH_VREG("ldo10",  "ldo%s10", &pmic4_pldo,      "vdd-l10-l23-l25"),950	RPMH_VREG("ldo11",  "ldo%s11", &pmic4_nldo,      "vdd-l3-l11"),951	RPMH_VREG("ldo12",  "ldo%s12", &pmic4_pldo_lv,   "vdd-l7-l12-l14-l15"),952	RPMH_VREG("ldo13",  "ldo%s13", &pmic4_pldo,      "vdd-l13-l19-l21"),953	RPMH_VREG("ldo14",  "ldo%s14", &pmic4_pldo_lv,   "vdd-l7-l12-l14-l15"),954	RPMH_VREG("ldo15",  "ldo%s15", &pmic4_pldo_lv,   "vdd-l7-l12-l14-l15"),955	RPMH_VREG("ldo16",  "ldo%s16", &pmic4_pldo,      "vdd-l16-l28"),956	RPMH_VREG("ldo17",  "ldo%s17", &pmic4_nldo,      "vdd-l2-l8-l17"),957	RPMH_VREG("ldo18",  "ldo%s18", &pmic4_pldo,      "vdd-l18-l22"),958	RPMH_VREG("ldo19",  "ldo%s19", &pmic4_pldo,      "vdd-l13-l19-l21"),959	RPMH_VREG("ldo20",  "ldo%s20", &pmic4_pldo,      "vdd-l20-l24"),960	RPMH_VREG("ldo21",  "ldo%s21", &pmic4_pldo,      "vdd-l13-l19-l21"),961	RPMH_VREG("ldo22",  "ldo%s22", &pmic4_pldo,      "vdd-l18-l22"),962	RPMH_VREG("ldo23",  "ldo%s23", &pmic4_pldo,      "vdd-l10-l23-l25"),963	RPMH_VREG("ldo24",  "ldo%s24", &pmic4_pldo,      "vdd-l20-l24"),964	RPMH_VREG("ldo25",  "ldo%s25", &pmic4_pldo,      "vdd-l10-l23-l25"),965	RPMH_VREG("ldo26",  "ldo%s26", &pmic4_nldo,      "vdd-l26"),966	RPMH_VREG("ldo27",  "ldo%s27", &pmic4_nldo,      "vdd-l1-l27"),967	RPMH_VREG("ldo28",  "ldo%s28", &pmic4_pldo,      "vdd-l16-l28"),968	RPMH_VREG("lvs1",   "vs%s1",   &pmic4_lvs,       "vin-lvs-1-2"),969	RPMH_VREG("lvs2",   "vs%s2",   &pmic4_lvs,       "vin-lvs-1-2"),970	{}971};972 973static const struct rpmh_vreg_init_data pmg1110_vreg_data[] = {974	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510,  "vdd-s1"),975	{}976};977 978static const struct rpmh_vreg_init_data pmi8998_vreg_data[] = {979	RPMH_VREG("bob",    "bob%s1",  &pmic4_bob,       "vdd-bob"),980	{}981};982 983static const struct rpmh_vreg_init_data pm8005_vreg_data[] = {984	RPMH_VREG("smps1",  "smp%s1",  &pmic4_ftsmps426, "vdd-s1"),985	RPMH_VREG("smps2",  "smp%s2",  &pmic4_ftsmps426, "vdd-s2"),986	RPMH_VREG("smps3",  "smp%s3",  &pmic4_ftsmps426, "vdd-s3"),987	RPMH_VREG("smps4",  "smp%s4",  &pmic4_ftsmps426, "vdd-s4"),988	{}989};990 991static const struct rpmh_vreg_init_data pm8150_vreg_data[] = {992	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510, "vdd-s1"),993	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps510, "vdd-s2"),994	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps510, "vdd-s3"),995	RPMH_VREG("smps4",  "smp%s4",  &pmic5_hfsmps510,   "vdd-s4"),996	RPMH_VREG("smps5",  "smp%s5",  &pmic5_hfsmps510,   "vdd-s5"),997	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps510, "vdd-s6"),998	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps510, "vdd-s7"),999	RPMH_VREG("smps8",  "smp%s8",  &pmic5_ftsmps510, "vdd-s8"),1000	RPMH_VREG("smps9",  "smp%s9",  &pmic5_ftsmps510, "vdd-s9"),1001	RPMH_VREG("smps10", "smp%s10", &pmic5_ftsmps510, "vdd-s10"),1002	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1-l8-l11"),1003	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_pldo,      "vdd-l2-l10"),1004	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),1005	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),1006	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),1007	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_nldo,      "vdd-l6-l9"),1008	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      "vdd-l7-l12-l14-l15"),1009	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_nldo,      "vdd-l1-l8-l11"),1010	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_nldo,      "vdd-l6-l9"),1011	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_pldo,      "vdd-l2-l10"),1012	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_nldo,      "vdd-l1-l8-l11"),1013	RPMH_VREG("ldo12",  "ldo%s12", &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),1014	RPMH_VREG("ldo13",  "ldo%s13", &pmic5_pldo,      "vdd-l13-l16-l17"),1015	RPMH_VREG("ldo14",  "ldo%s14", &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),1016	RPMH_VREG("ldo15",  "ldo%s15", &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),1017	RPMH_VREG("ldo16",  "ldo%s16", &pmic5_pldo,      "vdd-l13-l16-l17"),1018	RPMH_VREG("ldo17",  "ldo%s17", &pmic5_pldo,      "vdd-l13-l16-l17"),1019	RPMH_VREG("ldo18",  "ldo%s18", &pmic5_nldo,      "vdd-l3-l4-l5-l18"),1020	{}1021};1022 1023static const struct rpmh_vreg_init_data pm8150l_vreg_data[] = {1024	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510, "vdd-s1"),1025	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps510, "vdd-s2"),1026	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps510, "vdd-s3"),1027	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps510, "vdd-s4"),1028	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps510, "vdd-s5"),1029	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps510, "vdd-s6"),1030	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps510, "vdd-s7"),1031	RPMH_VREG("smps8",  "smp%s8",  &pmic5_hfsmps510, "vdd-s8"),1032	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_pldo_lv,   "vdd-l1-l8"),1033	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo,      "vdd-l2-l3"),1034	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l2-l3"),1035	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_pldo,      "vdd-l4-l5-l6"),1036	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,      "vdd-l4-l5-l6"),1037	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_pldo,      "vdd-l4-l5-l6"),1038	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      "vdd-l7-l11"),1039	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_pldo_lv,   "vdd-l1-l8"),1040	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_pldo,      "vdd-l9-l10"),1041	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_pldo,      "vdd-l9-l10"),1042	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_pldo,      "vdd-l7-l11"),1043	RPMH_VREG("bob",    "bob%s1",  &pmic5_bob,       "vdd-bob"),1044	{}1045};1046 1047static const struct rpmh_vreg_init_data pmm8155au_vreg_data[] = {1048	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510, "vdd-s1"),1049	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps510, "vdd-s2"),1050	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps510, "vdd-s3"),1051	RPMH_VREG("smps4",  "smp%s4",  &pmic5_hfsmps510, "vdd-s4"),1052	RPMH_VREG("smps5",  "smp%s5",  &pmic5_hfsmps510, "vdd-s5"),1053	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps510, "vdd-s6"),1054	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps510, "vdd-s7"),1055	RPMH_VREG("smps8",  "smp%s8",  &pmic5_ftsmps510, "vdd-s8"),1056	RPMH_VREG("smps9",  "smp%s9",  &pmic5_ftsmps510, "vdd-s9"),1057	RPMH_VREG("smps10", "smp%s10", &pmic5_ftsmps510, "vdd-s10"),1058	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1-l8-l11"),1059	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_pldo,      "vdd-l2-l10"),1060	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),1061	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),1062	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_nldo,      "vdd-l3-l4-l5-l18"),1063	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_nldo,      "vdd-l6-l9"),1064	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),1065	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_nldo,      "vdd-l1-l8-l11"),1066	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_nldo,      "vdd-l6-l9"),1067	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_pldo,      "vdd-l2-l10"),1068	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_nldo,      "vdd-l1-l8-l11"),1069	RPMH_VREG("ldo12",  "ldo%s12", &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),1070	RPMH_VREG("ldo13",  "ldo%s13", &pmic5_pldo,      "vdd-l13-l16-l17"),1071	RPMH_VREG("ldo14",  "ldo%s14", &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),1072	RPMH_VREG("ldo15",  "ldo%s15", &pmic5_pldo_lv,   "vdd-l7-l12-l14-l15"),1073	RPMH_VREG("ldo16",  "ldo%s16", &pmic5_pldo,      "vdd-l13-l16-l17"),1074	RPMH_VREG("ldo17",  "ldo%s17", &pmic5_pldo,      "vdd-l13-l16-l17"),1075	RPMH_VREG("ldo18",  "ldo%s18", &pmic5_nldo,      "vdd-l3-l4-l5-l18"),1076	{}1077};1078 1079static const struct rpmh_vreg_init_data pmm8654au_vreg_data[] = {1080	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps527,  "vdd-s1"),1081	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps527,  "vdd-s2"),1082	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps527,  "vdd-s3"),1083	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps527,  "vdd-s4"),1084	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps527,  "vdd-s5"),1085	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps527,  "vdd-s6"),1086	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps527,  "vdd-s7"),1087	RPMH_VREG("smps8",  "smp%s8",  &pmic5_ftsmps527,  "vdd-s8"),1088	RPMH_VREG("smps9",  "smp%s9",  &pmic5_ftsmps527,  "vdd-s9"),1089	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo515,    "vdd-s9"),1090	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo515,    "vdd-l2-l3"),1091	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo515,    "vdd-l2-l3"),1092	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo515,    "vdd-s9"),1093	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_nldo515,    "vdd-s9"),1094	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_nldo515,    "vdd-l6-l7"),1095	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_nldo515,    "vdd-l6-l7"),1096	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_pldo515_mv, "vdd-l8-l9"),1097	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_pldo,       "vdd-l8-l9"),1098	{}1099};1100 1101static const struct rpmh_vreg_init_data pm8350_vreg_data[] = {1102	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510, "vdd-s1"),1103	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps510, "vdd-s2"),1104	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps510, "vdd-s3"),1105	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps510, "vdd-s4"),1106	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps510, "vdd-s5"),1107	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps510, "vdd-s6"),1108	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps510, "vdd-s7"),1109	RPMH_VREG("smps8",  "smp%s8",  &pmic5_ftsmps510, "vdd-s8"),1110	RPMH_VREG("smps9",  "smp%s9",  &pmic5_ftsmps510, "vdd-s9"),1111	RPMH_VREG("smps10", "smp%s10", &pmic5_hfsmps510, "vdd-s10"),1112	RPMH_VREG("smps11", "smp%s11", &pmic5_hfsmps510, "vdd-s11"),1113	RPMH_VREG("smps12", "smp%s12", &pmic5_hfsmps510, "vdd-s12"),1114	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1-l4"),1115	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_pldo,      "vdd-l2-l7"),1116	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3-l5"),1117	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      "vdd-l1-l4"),1118	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_nldo,      "vdd-l3-l5"),1119	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_nldo,      "vdd-l6-l9-l10"),1120	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      "vdd-l2-l7"),1121	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_nldo,      "vdd-l8"),1122	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_nldo,      "vdd-l6-l9-l10"),1123	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_nldo,      "vdd-l6-l9-l10"),1124	{}1125};1126 1127static const struct rpmh_vreg_init_data pm8350c_vreg_data[] = {1128	RPMH_VREG("smps1",  "smp%s1",  &pmic5_hfsmps515, "vdd-s1"),1129	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps510, "vdd-s2"),1130	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps510, "vdd-s3"),1131	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps510, "vdd-s4"),1132	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps510, "vdd-s5"),1133	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps510, "vdd-s6"),1134	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps510, "vdd-s7"),1135	RPMH_VREG("smps8",  "smp%s8",  &pmic5_ftsmps510, "vdd-s8"),1136	RPMH_VREG("smps9",  "smp%s9",  &pmic5_ftsmps510, "vdd-s9"),1137	RPMH_VREG("smps10", "smp%s10", &pmic5_ftsmps510, "vdd-s10"),1138	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_pldo_lv,   "vdd-l1-l12"),1139	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_pldo_lv,   "vdd-l2-l8"),1140	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_pldo,      "vdd-l3-l4-l5-l7-l13"),1141	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_pldo,      "vdd-l3-l4-l5-l7-l13"),1142	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,      "vdd-l3-l4-l5-l7-l13"),1143	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_pldo,      "vdd-l6-l9-l11"),1144	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      "vdd-l3-l4-l5-l7-l13"),1145	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_pldo_lv,   "vdd-l2-l8"),1146	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_pldo,      "vdd-l6-l9-l11"),1147	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_nldo,      "vdd-l10"),1148	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_pldo,      "vdd-l6-l9-l11"),1149	RPMH_VREG("ldo12",  "ldo%s12", &pmic5_pldo_lv,   "vdd-l1-l12"),1150	RPMH_VREG("ldo13",  "ldo%s13", &pmic5_pldo,      "vdd-l3-l4-l5-l7-l13"),1151	RPMH_VREG("bob",    "bob%s1",  &pmic5_bob,       "vdd-bob"),1152	{}1153};1154 1155static const struct rpmh_vreg_init_data pm8450_vreg_data[] = {1156	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps520, "vdd-s1"),1157	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps520, "vdd-s2"),1158	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps520, "vdd-s3"),1159	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps520, "vdd-s4"),1160	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps520, "vdd-s5"),1161	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps520, "vdd-s6"),1162	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1"),1163	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo,      "vdd-l2"),1164	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3"),1165	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_pldo_lv,   "vdd-l4"),1166	{}1167};1168 1169static const struct rpmh_vreg_init_data pm8550_vreg_data[] = {1170	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo515,    "vdd-l1-l4-l10"),1171	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_pldo,    "vdd-l2-l13-l14"),1172	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo515,    "vdd-l3"),1173	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo515,    "vdd-l1-l4-l10"),1174	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,    "vdd-l5-l16"),1175	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_pldo, "vdd-l6-l7"),1176	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo, "vdd-l6-l7"),1177	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_pldo, "vdd-l8-l9"),1178	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_pldo,    "vdd-l8-l9"),1179	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_nldo515,    "vdd-l1-l4-l10"),1180	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_nldo515,    "vdd-l11"),1181	RPMH_VREG("ldo12",  "ldo%s12", &pmic5_nldo515,    "vdd-l12"),1182	RPMH_VREG("ldo13",  "ldo%s13", &pmic5_pldo,    "vdd-l2-l13-l14"),1183	RPMH_VREG("ldo14",  "ldo%s14", &pmic5_pldo,    "vdd-l2-l13-l14"),1184	RPMH_VREG("ldo15",  "ldo%s15", &pmic5_nldo515,    "vdd-l15"),1185	RPMH_VREG("ldo16",  "ldo%s16", &pmic5_pldo,    "vdd-l5-l16"),1186	RPMH_VREG("ldo17",  "ldo%s17", &pmic5_pldo,    "vdd-l17"),1187	RPMH_VREG("bob1",   "bob%s1",  &pmic5_bob,     "vdd-bob1"),1188	RPMH_VREG("bob2",   "bob%s2",  &pmic5_bob,     "vdd-bob2"),1189	{}1190};1191 1192static const struct rpmh_vreg_init_data pm8550vs_vreg_data[] = {1193	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps525_lv, "vdd-s1"),1194	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps525_lv, "vdd-s2"),1195	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps525_lv, "vdd-s3"),1196	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps525_lv, "vdd-s4"),1197	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps525_lv, "vdd-s5"),1198	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps525_mv, "vdd-s6"),1199	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo515,   "vdd-l1"),1200	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo515,   "vdd-l2"),1201	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo515,   "vdd-l3"),1202	{}1203};1204 1205static const struct rpmh_vreg_init_data pm8550ve_vreg_data[] = {1206	RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps525_lv, "vdd-s1"),1207	RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps525_lv, "vdd-s2"),1208	RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps525_lv, "vdd-s3"),1209	RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps525_mv, "vdd-s4"),1210	RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps525_lv, "vdd-s5"),1211	RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps525_lv, "vdd-s6"),1212	RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps525_lv, "vdd-s7"),1213	RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps525_lv, "vdd-s8"),1214	RPMH_VREG("ldo1",  "ldo%s1", &pmic5_nldo515,   "vdd-l1"),1215	RPMH_VREG("ldo2",  "ldo%s2", &pmic5_nldo515,   "vdd-l2"),1216	RPMH_VREG("ldo3",  "ldo%s3", &pmic5_nldo515,   "vdd-l3"),1217	{}1218};1219 1220static const struct rpmh_vreg_init_data pmc8380_vreg_data[] = {1221	RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps525_lv, "vdd-s1"),1222	RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps525_lv, "vdd-s2"),1223	RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps525_lv, "vdd-s3"),1224	RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps525_mv, "vdd-s4"),1225	RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps525_lv, "vdd-s5"),1226	RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps525_lv, "vdd-s6"),1227	RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps525_lv, "vdd-s7"),1228	RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps525_lv, "vdd-s8"),1229	RPMH_VREG("ldo1",  "ldo%s1", &pmic5_nldo515,   "vdd-l1"),1230	RPMH_VREG("ldo2",  "ldo%s2", &pmic5_nldo515,   "vdd-l2"),1231	RPMH_VREG("ldo3",  "ldo%s3", &pmic5_nldo515,   "vdd-l3"),1232	{}1233};1234 1235static const struct rpmh_vreg_init_data pm8009_vreg_data[] = {1236	RPMH_VREG("smps1",  "smp%s1",  &pmic5_hfsmps510, "vdd-s1"),1237	RPMH_VREG("smps2",  "smp%s2",  &pmic5_hfsmps515, "vdd-s2"),1238	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1"),1239	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo,      "vdd-l2"),1240	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3"),1241	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      "vdd-l4"),1242	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,      "vdd-l5-l6"),1243	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_pldo,      "vdd-l5-l6"),1244	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo_lv,   "vdd-l7"),1245	{}1246};1247 1248static const struct rpmh_vreg_init_data pm8009_1_vreg_data[] = {1249	RPMH_VREG("smps1",  "smp%s1",  &pmic5_hfsmps510, "vdd-s1"),1250	RPMH_VREG("smps2",  "smp%s2",  &pmic5_hfsmps515_1, "vdd-s2"),1251	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1"),1252	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo,      "vdd-l2"),1253	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3"),1254	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      "vdd-l4"),1255	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,      "vdd-l5-l6"),1256	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_pldo,      "vdd-l5-l6"),1257	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo_lv,   "vdd-l7"),1258	{}1259};1260 1261static const struct rpmh_vreg_init_data pm8010_vreg_data[] = {1262	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo502,   "vdd-l1-l2"),1263	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo502,   "vdd-l1-l2"),1264	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_pldo502ln, "vdd-l3-l4"),1265	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_pldo502ln, "vdd-l3-l4"),1266	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo502,   "vdd-l5"),1267	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_pldo502ln, "vdd-l6"),1268	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo502,   "vdd-l7"),1269};1270 1271static const struct rpmh_vreg_init_data pm6150_vreg_data[] = {1272	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510, "vdd-s1"),1273	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps510, "vdd-s2"),1274	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps510, "vdd-s3"),1275	RPMH_VREG("smps4",  "smp%s4",  &pmic5_hfsmps510, "vdd-s4"),1276	RPMH_VREG("smps5",  "smp%s5",  &pmic5_hfsmps510, "vdd-s5"),1277	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1"),1278	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo,      "vdd-l2-l3"),1279	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l2-l3"),1280	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      "vdd-l4-l7-l8"),1281	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,   "vdd-l5-l16-l17-l18-l19"),1282	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_nldo,      "vdd-l6"),1283	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_nldo,      "vdd-l4-l7-l8"),1284	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_nldo,      "vdd-l4-l7-l8"),1285	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_nldo,      "vdd-l9"),1286	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_pldo_lv,   "vdd-l10-l14-l15"),1287	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_pldo_lv,   "vdd-l11-l12-l13"),1288	RPMH_VREG("ldo12",  "ldo%s12", &pmic5_pldo_lv,   "vdd-l11-l12-l13"),1289	RPMH_VREG("ldo13",  "ldo%s13", &pmic5_pldo_lv,   "vdd-l11-l12-l13"),1290	RPMH_VREG("ldo14",  "ldo%s14", &pmic5_pldo_lv,   "vdd-l10-l14-l15"),1291	RPMH_VREG("ldo15",  "ldo%s15", &pmic5_pldo_lv,   "vdd-l10-l14-l15"),1292	RPMH_VREG("ldo16",  "ldo%s16", &pmic5_pldo,   "vdd-l5-l16-l17-l18-l19"),1293	RPMH_VREG("ldo17",  "ldo%s17", &pmic5_pldo,   "vdd-l5-l16-l17-l18-l19"),1294	RPMH_VREG("ldo18",  "ldo%s18", &pmic5_pldo,   "vdd-l5-l16-l17-l18-l19"),1295	RPMH_VREG("ldo19",  "ldo%s19", &pmic5_pldo,   "vdd-l5-l16-l17-l18-l19"),1296	{}1297};1298 1299static const struct rpmh_vreg_init_data pm6150l_vreg_data[] = {1300	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510, "vdd-s1"),1301	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps510, "vdd-s2"),1302	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps510, "vdd-s3"),1303	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps510, "vdd-s4"),1304	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps510, "vdd-s5"),1305	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps510, "vdd-s6"),1306	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps510, "vdd-s7"),1307	RPMH_VREG("smps8",  "smp%s8",  &pmic5_hfsmps510, "vdd-s8"),1308	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_pldo_lv,   "vdd-l1-l8"),1309	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo,      "vdd-l2-l3"),1310	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l2-l3"),1311	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_pldo,      "vdd-l4-l5-l6"),1312	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,      "vdd-l4-l5-l6"),1313	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_pldo,      "vdd-l4-l5-l6"),1314	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      "vdd-l7-l11"),1315	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_pldo,      "vdd-l1-l8"),1316	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_pldo,      "vdd-l9-l10"),1317	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_pldo,      "vdd-l9-l10"),1318	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_pldo,      "vdd-l7-l11"),1319	RPMH_VREG("bob",    "bob%s1",  &pmic5_bob,       "vdd-bob"),1320	{}1321};1322 1323static const struct rpmh_vreg_init_data pm6350_vreg_data[] = {1324	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps510, NULL),1325	RPMH_VREG("smps2",  "smp%s2",  &pmic5_hfsmps510, NULL),1326	/* smps3 - smps5 not configured */1327	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      NULL),1328	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_pldo,      NULL),1329	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_pldo,      NULL),1330	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      NULL),1331	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_pldo,      NULL),1332	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_pldo,      NULL),1333	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      NULL),1334	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_pldo,      NULL),1335	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_pldo,      NULL),1336	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_pldo,      NULL),1337	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_pldo,      NULL),1338	RPMH_VREG("ldo12",  "ldo%s12", &pmic5_pldo,      NULL),1339	RPMH_VREG("ldo13",  "ldo%s13", &pmic5_nldo,      NULL),1340	RPMH_VREG("ldo14",  "ldo%s14", &pmic5_pldo,      NULL),1341	RPMH_VREG("ldo15",  "ldo%s15", &pmic5_nldo,      NULL),1342	RPMH_VREG("ldo16",  "ldo%s16", &pmic5_nldo,      NULL),1343	/* ldo17 not configured */1344	RPMH_VREG("ldo18",  "ldo%s18", &pmic5_nldo,      NULL),1345	RPMH_VREG("ldo19",  "ldo%s19", &pmic5_nldo,      NULL),1346	RPMH_VREG("ldo20",  "ldo%s20", &pmic5_nldo,      NULL),1347	RPMH_VREG("ldo21",  "ldo%s21", &pmic5_nldo,      NULL),1348	RPMH_VREG("ldo22",  "ldo%s22", &pmic5_nldo,      NULL),1349};1350 1351static const struct rpmh_vreg_init_data pmx55_vreg_data[] = {1352	RPMH_VREG("smps1",   "smp%s1",    &pmic5_ftsmps510, "vdd-s1"),1353	RPMH_VREG("smps2",   "smp%s2",    &pmic5_hfsmps510, "vdd-s2"),1354	RPMH_VREG("smps3",   "smp%s3",    &pmic5_hfsmps510, "vdd-s3"),1355	RPMH_VREG("smps4",   "smp%s4",    &pmic5_hfsmps510, "vdd-s4"),1356	RPMH_VREG("smps5",   "smp%s5",    &pmic5_hfsmps510, "vdd-s5"),1357	RPMH_VREG("smps6",   "smp%s6",    &pmic5_ftsmps510, "vdd-s6"),1358	RPMH_VREG("smps7",   "smp%s7",    &pmic5_hfsmps510, "vdd-s7"),1359	RPMH_VREG("ldo1",    "ldo%s1",    &pmic5_nldo,      "vdd-l1-l2"),1360	RPMH_VREG("ldo2",    "ldo%s2",    &pmic5_nldo,      "vdd-l1-l2"),1361	RPMH_VREG("ldo3",    "ldo%s3",    &pmic5_nldo,      "vdd-l3-l9"),1362	RPMH_VREG("ldo4",    "ldo%s4",    &pmic5_nldo,      "vdd-l4-l12"),1363	RPMH_VREG("ldo5",    "ldo%s5",    &pmic5_pldo,      "vdd-l5-l6"),1364	RPMH_VREG("ldo6",    "ldo%s6",    &pmic5_pldo,      "vdd-l5-l6"),1365	RPMH_VREG("ldo7",    "ldo%s7",    &pmic5_nldo,      "vdd-l7-l8"),1366	RPMH_VREG("ldo8",    "ldo%s8",    &pmic5_nldo,      "vdd-l7-l8"),1367	RPMH_VREG("ldo9",    "ldo%s9",    &pmic5_nldo,      "vdd-l3-l9"),1368	RPMH_VREG("ldo10",   "ldo%s10",   &pmic5_pldo,      "vdd-l10-l11-l13"),1369	RPMH_VREG("ldo11",   "ldo%s11",   &pmic5_pldo,      "vdd-l10-l11-l13"),1370	RPMH_VREG("ldo12",   "ldo%s12",   &pmic5_nldo,      "vdd-l4-l12"),1371	RPMH_VREG("ldo13",   "ldo%s13",   &pmic5_pldo,      "vdd-l10-l11-l13"),1372	RPMH_VREG("ldo14",   "ldo%s14",   &pmic5_nldo,      "vdd-l14"),1373	RPMH_VREG("ldo15",   "ldo%s15",   &pmic5_nldo,      "vdd-l15"),1374	RPMH_VREG("ldo16",   "ldo%s16",   &pmic5_pldo,      "vdd-l16"),1375	{}1376};1377 1378static const struct rpmh_vreg_init_data pmx65_vreg_data[] = {1379	RPMH_VREG("smps1",   "smp%s1",    &pmic5_ftsmps510, "vdd-s1"),1380	RPMH_VREG("smps2",   "smp%s2",    &pmic5_hfsmps510, "vdd-s2"),1381	RPMH_VREG("smps3",   "smp%s3",    &pmic5_hfsmps510, "vdd-s3"),1382	RPMH_VREG("smps4",   "smp%s4",    &pmic5_hfsmps510, "vdd-s4"),1383	RPMH_VREG("smps5",   "smp%s5",    &pmic5_hfsmps510, "vdd-s5"),1384	RPMH_VREG("smps6",   "smp%s6",    &pmic5_ftsmps510, "vdd-s6"),1385	RPMH_VREG("smps7",   "smp%s7",    &pmic5_hfsmps510, "vdd-s7"),1386	RPMH_VREG("smps8",   "smp%s8",    &pmic5_hfsmps510, "vdd-s8"),1387	RPMH_VREG("ldo1",    "ldo%s1",    &pmic5_nldo,      "vdd-l1"),1388	RPMH_VREG("ldo2",    "ldo%s2",    &pmic5_nldo,      "vdd-l2-l18"),1389	RPMH_VREG("ldo3",    "ldo%s3",    &pmic5_nldo,      "vdd-l3"),1390	RPMH_VREG("ldo4",    "ldo%s4",    &pmic5_nldo,      "vdd-l4"),1391	RPMH_VREG("ldo5",    "ldo%s5",    &pmic5_pldo,      "vdd-l5-l6-l16"),1392	RPMH_VREG("ldo6",    "ldo%s6",    &pmic5_pldo,      "vdd-l5-l6-l16"),1393	RPMH_VREG("ldo7",    "ldo%s7",    &pmic5_nldo,      "vdd-l7"),1394	RPMH_VREG("ldo8",    "ldo%s8",    &pmic5_nldo,      "vdd-l8-l9"),1395	RPMH_VREG("ldo9",    "ldo%s9",    &pmic5_nldo,      "vdd-l8-l9"),1396	RPMH_VREG("ldo10",   "ldo%s10",   &pmic5_pldo,      "vdd-l10"),1397	RPMH_VREG("ldo11",   "ldo%s11",   &pmic5_pldo,      "vdd-l11-l13"),1398	RPMH_VREG("ldo12",   "ldo%s12",   &pmic5_nldo,      "vdd-l12"),1399	RPMH_VREG("ldo13",   "ldo%s13",   &pmic5_pldo,      "vdd-l11-l13"),1400	RPMH_VREG("ldo14",   "ldo%s14",   &pmic5_nldo,      "vdd-l14"),1401	RPMH_VREG("ldo15",   "ldo%s15",   &pmic5_nldo,      "vdd-l15"),1402	RPMH_VREG("ldo16",   "ldo%s16",   &pmic5_pldo,      "vdd-l5-l6-l16"),1403	RPMH_VREG("ldo17",   "ldo%s17",   &pmic5_nldo,      "vdd-l17"),1404	/* ldo18 not configured */1405	RPMH_VREG("ldo19",   "ldo%s19",   &pmic5_nldo,      "vdd-l19"),1406	RPMH_VREG("ldo20",   "ldo%s20",   &pmic5_nldo,      "vdd-l20"),1407	RPMH_VREG("ldo21",   "ldo%s21",   &pmic5_nldo,      "vdd-l21"),1408	{}1409};1410 1411static const struct rpmh_vreg_init_data pmx75_vreg_data[] = {1412	RPMH_VREG("smps1",   "smp%s1",    &pmic5_ftsmps525_lv, "vdd-s1"),1413	RPMH_VREG("smps2",   "smp%s2",    &pmic5_ftsmps525_lv, "vdd-s2"),1414	RPMH_VREG("smps3",   "smp%s3",    &pmic5_ftsmps525_lv, "vdd-s3"),1415	RPMH_VREG("smps4",   "smp%s4",    &pmic5_ftsmps525_mv, "vdd-s4"),1416	RPMH_VREG("smps5",   "smp%s5",    &pmic5_ftsmps525_lv, "vdd-s5"),1417	RPMH_VREG("smps6",   "smp%s6",    &pmic5_ftsmps525_lv, "vdd-s6"),1418	RPMH_VREG("smps7",   "smp%s7",    &pmic5_ftsmps525_lv, "vdd-s7"),1419	RPMH_VREG("smps8",   "smp%s8",    &pmic5_ftsmps525_lv, "vdd-s8"),1420	RPMH_VREG("smps9",   "smp%s9",    &pmic5_ftsmps525_lv, "vdd-s9"),1421	RPMH_VREG("smps10",  "smp%s10",   &pmic5_ftsmps525_lv, "vdd-s10"),1422	RPMH_VREG("ldo1",    "ldo%s1",    &pmic5_nldo515,   "vdd-l1"),1423	RPMH_VREG("ldo2",    "ldo%s2",    &pmic5_nldo515,   "vdd-l2-18"),1424	RPMH_VREG("ldo3",    "ldo%s3",    &pmic5_nldo515,   "vdd-l3"),1425	RPMH_VREG("ldo4",    "ldo%s4",    &pmic5_nldo515,   "vdd-l4-l16"),1426	RPMH_VREG("ldo5",    "ldo%s5",    &pmic5_pldo_lv,   "vdd-l5-l6"),1427	RPMH_VREG("ldo6",    "ldo%s6",    &pmic5_pldo_lv,   "vdd-l5-l6"),1428	RPMH_VREG("ldo7",    "ldo%s7",    &pmic5_nldo515,   "vdd-l7"),1429	RPMH_VREG("ldo8",    "ldo%s8",    &pmic5_nldo515,   "vdd-l8-l9"),1430	RPMH_VREG("ldo9",    "ldo%s9",    &pmic5_nldo515,   "vdd-l8-l9"),1431	RPMH_VREG("ldo10",   "ldo%s10",   &pmic5_pldo,      "vdd-l10"),1432	RPMH_VREG("ldo11",   "ldo%s11",   &pmic5_pldo,      "vdd-l11-l13"),1433	RPMH_VREG("ldo12",   "ldo%s12",   &pmic5_nldo515,   "vdd-l12"),1434	RPMH_VREG("ldo13",   "ldo%s13",   &pmic5_pldo,      "vdd-l11-l13"),1435	RPMH_VREG("ldo14",   "ldo%s14",   &pmic5_nldo515,   "vdd-l14"),1436	RPMH_VREG("ldo15",   "ldo%s15",   &pmic5_nldo515,   "vdd-l15"),1437	RPMH_VREG("ldo16",   "ldo%s16",   &pmic5_nldo515,   "vdd-l4-l16"),1438	RPMH_VREG("ldo17",   "ldo%s17",   &pmic5_nldo515,   "vdd-l17"),1439	/* ldo18 not configured */1440	RPMH_VREG("ldo19",   "ldo%s19",   &pmic5_nldo515,   "vdd-l19"),1441	RPMH_VREG("ldo20",   "ldo%s20",   &pmic5_nldo515,   "vdd-l20-l21"),1442	RPMH_VREG("ldo21",   "ldo%s21",   &pmic5_nldo515,   "vdd-l20-l21"),1443};1444 1445static const struct rpmh_vreg_init_data pm7325_vreg_data[] = {1446	RPMH_VREG("smps1",  "smp%s1",  &pmic5_hfsmps510, "vdd-s1"),1447	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps520, "vdd-s2"),1448	RPMH_VREG("smps3",  "smp%s3",  &pmic5_ftsmps520, "vdd-s3"),1449	RPMH_VREG("smps4",  "smp%s4",  &pmic5_ftsmps520, "vdd-s4"),1450	RPMH_VREG("smps5",  "smp%s5",  &pmic5_ftsmps520, "vdd-s5"),1451	RPMH_VREG("smps6",  "smp%s6",  &pmic5_ftsmps520, "vdd-s6"),1452	RPMH_VREG("smps7",  "smp%s7",  &pmic5_ftsmps520, "vdd-s7"),1453	RPMH_VREG("smps8",  "smp%s8",  &pmic5_hfsmps510, "vdd-s8"),1454	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1-l4-l12-l15"),1455	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_pldo,      "vdd-l2-l7"),1456	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3"),1457	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_nldo,      "vdd-l1-l4-l12-l15"),1458	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_nldo,      "vdd-l5"),1459	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_nldo,      "vdd-l6-l9-l10"),1460	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      "vdd-l2-l7"),1461	RPMH_VREG("ldo8",   "ldo%s8",  &pmic5_nldo,      "vdd-l8"),1462	RPMH_VREG("ldo9",   "ldo%s9",  &pmic5_nldo,      "vdd-l6-l9-l10"),1463	RPMH_VREG("ldo10",  "ldo%s10", &pmic5_nldo,      "vdd-l6-l9-l10"),1464	RPMH_VREG("ldo11",  "ldo%s11", &pmic5_pldo_lv,   "vdd-l11-l17-l18-l19"),1465	RPMH_VREG("ldo12",  "ldo%s12", &pmic5_nldo,      "vdd-l1-l4-l12-l15"),1466	RPMH_VREG("ldo13",  "ldo%s13", &pmic5_nldo,      "vdd-l13"),1467	RPMH_VREG("ldo14",  "ldo%s14", &pmic5_nldo,      "vdd-l14-l16"),1468	RPMH_VREG("ldo15",  "ldo%s15", &pmic5_nldo,      "vdd-l1-l4-l12-l15"),1469	RPMH_VREG("ldo16",  "ldo%s16", &pmic5_nldo,      "vdd-l14-l16"),1470	RPMH_VREG("ldo17",  "ldo%s17", &pmic5_pldo_lv,   "vdd-l11-l17-l18-l19"),1471	RPMH_VREG("ldo18",  "ldo%s18", &pmic5_pldo_lv,   "vdd-l11-l17-l18-l19"),1472	RPMH_VREG("ldo19",  "ldo%s19", &pmic5_pldo_lv,   "vdd-l11-l17-l18-l19"),1473	{}1474};1475 1476static const struct rpmh_vreg_init_data pmr735a_vreg_data[] = {1477	RPMH_VREG("smps1",  "smp%s1",  &pmic5_ftsmps520, "vdd-s1"),1478	RPMH_VREG("smps2",  "smp%s2",  &pmic5_ftsmps520, "vdd-s2"),1479	RPMH_VREG("smps3",  "smp%s3",  &pmic5_hfsmps515, "vdd-s3"),1480	RPMH_VREG("ldo1",   "ldo%s1",  &pmic5_nldo,      "vdd-l1-l2"),1481	RPMH_VREG("ldo2",   "ldo%s2",  &pmic5_nldo,      "vdd-l1-l2"),1482	RPMH_VREG("ldo3",   "ldo%s3",  &pmic5_nldo,      "vdd-l3"),1483	RPMH_VREG("ldo4",   "ldo%s4",  &pmic5_pldo_lv,   "vdd-l4"),1484	RPMH_VREG("ldo5",   "ldo%s5",  &pmic5_nldo,      "vdd-l5-l6"),1485	RPMH_VREG("ldo6",   "ldo%s6",  &pmic5_nldo,      "vdd-l5-l6"),1486	RPMH_VREG("ldo7",   "ldo%s7",  &pmic5_pldo,      "vdd-l7-bob"),1487	{}1488};1489 1490static const struct rpmh_vreg_init_data pm660_vreg_data[] = {1491	RPMH_VREG("smps1",  "smp%s1",  &pmic4_ftsmps426, "vdd-s1"),1492	RPMH_VREG("smps2",  "smp%s2",  &pmic4_ftsmps426, "vdd-s2"),1493	RPMH_VREG("smps3",  "smp%s3",  &pmic4_ftsmps426, "vdd-s3"),1494	RPMH_VREG("smps4",  "smp%s4",  &pmic4_hfsmps3,   "vdd-s4"),1495	RPMH_VREG("smps5",  "smp%s5",  &pmic4_hfsmps3,   "vdd-s5"),1496	RPMH_VREG("smps6",  "smp%s6",  &pmic4_hfsmps3,   "vdd-s6"),1497	RPMH_VREG("ldo1",   "ldo%s1",  &pmic4_nldo,      "vdd-l1-l6-l7"),1498	RPMH_VREG("ldo2",   "ldo%s2",  &pmic4_nldo,      "vdd-l2-l3"),1499	RPMH_VREG("ldo3",   "ldo%s3",  &pmic4_nldo,      "vdd-l2-l3"),1500	/* ldo4 is inaccessible on PM660 */1501	RPMH_VREG("ldo5",   "ldo%s5",  &pmic4_nldo,      "vdd-l5"),1502	RPMH_VREG("ldo6",   "ldo%s6",  &pmic4_nldo,      "vdd-l1-l6-l7"),1503	RPMH_VREG("ldo7",   "ldo%s7",  &pmic4_nldo,      "vdd-l1-l6-l7"),1504	RPMH_VREG("ldo8",   "ldo%s8",  &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),1505	RPMH_VREG("ldo9",   "ldo%s9",  &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),1506	RPMH_VREG("ldo10",  "ldo%s10", &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),1507	RPMH_VREG("ldo11",  "ldo%s11", &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),1508	RPMH_VREG("ldo12",  "ldo%s12", &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),1509	RPMH_VREG("ldo13",  "ldo%s13", &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),1510	RPMH_VREG("ldo14",  "ldo%s14", &pmic4_pldo_lv,   "vdd-l8-l9-l10-l11-l12-l13-l14"),1511	RPMH_VREG("ldo15",  "ldo%s15", &pmic4_pldo,      "vdd-l15-l16-l17-l18-l19"),1512	RPMH_VREG("ldo16",  "ldo%s16", &pmic4_pldo,      "vdd-l15-l16-l17-l18-l19"),1513	RPMH_VREG("ldo17",  "ldo%s17", &pmic4_pldo,      "vdd-l15-l16-l17-l18-l19"),1514	RPMH_VREG("ldo18",  "ldo%s18", &pmic4_pldo,      "vdd-l15-l16-l17-l18-l19"),1515	RPMH_VREG("ldo19",  "ldo%s19", &pmic4_pldo,      "vdd-l15-l16-l17-l18-l19"),1516	{}1517};1518 1519static const struct rpmh_vreg_init_data pm660l_vreg_data[] = {1520	RPMH_VREG("smps1",  "smp%s1",  &pmic4_ftsmps426, "vdd-s1"),1521	RPMH_VREG("smps2",  "smp%s2",  &pmic4_ftsmps426, "vdd-s2"),1522	RPMH_VREG("smps3",  "smp%s3",  &pmic4_ftsmps426, "vdd-s3-s4"),1523	RPMH_VREG("smps5",  "smp%s5",  &pmic4_ftsmps426, "vdd-s5"),1524	RPMH_VREG("ldo1",   "ldo%s1",  &pmic4_nldo,      "vdd-l1-l9-l10"),1525	RPMH_VREG("ldo2",   "ldo%s2",  &pmic4_pldo,      "vdd-l2"),1526	RPMH_VREG("ldo3",   "ldo%s3",  &pmic4_pldo,      "vdd-l3-l5-l7-l8"),1527	RPMH_VREG("ldo4",   "ldo%s4",  &pmic4_pldo,      "vdd-l4-l6"),1528	RPMH_VREG("ldo5",   "ldo%s5",  &pmic4_pldo,      "vdd-l3-l5-l7-l8"),1529	RPMH_VREG("ldo6",   "ldo%s6",  &pmic4_pldo,      "vdd-l4-l6"),1530	RPMH_VREG("ldo7",   "ldo%s7",  &pmic4_pldo,      "vdd-l3-l5-l7-l8"),1531	RPMH_VREG("ldo8",   "ldo%s8",  &pmic4_pldo,      "vdd-l3-l5-l7-l8"),1532	RPMH_VREG("bob",    "bob%s1",  &pmic4_bob,       "vdd-bob"),1533	{}1534};1535 1536static int rpmh_regulator_probe(struct platform_device *pdev)1537{1538	struct device *dev = &pdev->dev;1539	const struct rpmh_vreg_init_data *vreg_data;1540	struct rpmh_vreg *vreg;1541	const char *pmic_id;1542	int ret;1543 1544	vreg_data = of_device_get_match_data(dev);1545	if (!vreg_data)1546		return -ENODEV;1547 1548	ret = of_property_read_string(dev->of_node, "qcom,pmic-id", &pmic_id);1549	if (ret < 0) {1550		dev_err(dev, "qcom,pmic-id missing in DT node\n");1551		return ret;1552	}1553 1554	for_each_available_child_of_node_scoped(dev->of_node, node) {1555		vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL);1556		if (!vreg)1557			return -ENOMEM;1558 1559		ret = rpmh_regulator_init_vreg(vreg, dev, node, pmic_id,1560						vreg_data);1561		if (ret < 0)1562			return ret;1563	}1564 1565	return 0;1566}1567 1568static const struct of_device_id __maybe_unused rpmh_regulator_match_table[] = {1569	{1570		.compatible = "qcom,pm8005-rpmh-regulators",1571		.data = pm8005_vreg_data,1572	},1573	{1574		.compatible = "qcom,pm8009-rpmh-regulators",1575		.data = pm8009_vreg_data,1576	},1577	{1578		.compatible = "qcom,pm8009-1-rpmh-regulators",1579		.data = pm8009_1_vreg_data,1580	},1581	{1582		.compatible = "qcom,pm8010-rpmh-regulators",1583		.data = pm8010_vreg_data,1584	},1585	{1586		.compatible = "qcom,pm8150-rpmh-regulators",1587		.data = pm8150_vreg_data,1588	},1589	{1590		.compatible = "qcom,pm8150l-rpmh-regulators",1591		.data = pm8150l_vreg_data,1592	},1593	{1594		.compatible = "qcom,pm8350-rpmh-regulators",1595		.data = pm8350_vreg_data,1596	},1597	{1598		.compatible = "qcom,pm8350c-rpmh-regulators",1599		.data = pm8350c_vreg_data,1600	},1601	{1602		.compatible = "qcom,pm8450-rpmh-regulators",1603		.data = pm8450_vreg_data,1604	},1605	{1606		.compatible = "qcom,pm8550-rpmh-regulators",1607		.data = pm8550_vreg_data,1608	},1609	{1610		.compatible = "qcom,pm8550ve-rpmh-regulators",1611		.data = pm8550ve_vreg_data,1612	},1613	{1614		.compatible = "qcom,pm8550vs-rpmh-regulators",1615		.data = pm8550vs_vreg_data,1616	},1617	{1618		.compatible = "qcom,pm8998-rpmh-regulators",1619		.data = pm8998_vreg_data,1620	},1621	{1622		.compatible = "qcom,pmg1110-rpmh-regulators",1623		.data = pmg1110_vreg_data,1624	},1625	{1626		.compatible = "qcom,pmi8998-rpmh-regulators",1627		.data = pmi8998_vreg_data,1628	},1629	{1630		.compatible = "qcom,pm6150-rpmh-regulators",1631		.data = pm6150_vreg_data,1632	},1633	{1634		.compatible = "qcom,pm6150l-rpmh-regulators",1635		.data = pm6150l_vreg_data,1636	},1637	{1638		.compatible = "qcom,pm6350-rpmh-regulators",1639		.data = pm6350_vreg_data,1640	},1641	{1642		.compatible = "qcom,pmc8180-rpmh-regulators",1643		.data = pm8150_vreg_data,1644	},1645	{1646		.compatible = "qcom,pmc8180c-rpmh-regulators",1647		.data = pm8150l_vreg_data,1648	},1649	{1650		.compatible = "qcom,pmc8380-rpmh-regulators",1651		.data = pmc8380_vreg_data,1652	},1653	{1654		.compatible = "qcom,pmm8155au-rpmh-regulators",1655		.data = pmm8155au_vreg_data,1656	},1657	{1658		.compatible = "qcom,pmm8654au-rpmh-regulators",1659		.data = pmm8654au_vreg_data,1660	},1661	{1662		.compatible = "qcom,pmx55-rpmh-regulators",1663		.data = pmx55_vreg_data,1664	},1665	{1666		.compatible = "qcom,pmx65-rpmh-regulators",1667		.data = pmx65_vreg_data,1668	},1669	{1670		.compatible = "qcom,pmx75-rpmh-regulators",1671		.data = pmx75_vreg_data,1672	},1673	{1674		.compatible = "qcom,pm7325-rpmh-regulators",1675		.data = pm7325_vreg_data,1676	},1677	{1678		.compatible = "qcom,pmr735a-rpmh-regulators",1679		.data = pmr735a_vreg_data,1680	},1681	{1682		.compatible = "qcom,pm660-rpmh-regulators",1683		.data = pm660_vreg_data,1684	},1685	{1686		.compatible = "qcom,pm660l-rpmh-regulators",1687		.data = pm660l_vreg_data,1688	},1689	{}1690};1691MODULE_DEVICE_TABLE(of, rpmh_regulator_match_table);1692 1693static struct platform_driver rpmh_regulator_driver = {1694	.driver = {1695		.name = "qcom-rpmh-regulator",1696		.probe_type = PROBE_PREFER_ASYNCHRONOUS,1697		.of_match_table	= of_match_ptr(rpmh_regulator_match_table),1698	},1699	.probe = rpmh_regulator_probe,1700};1701module_platform_driver(rpmh_regulator_driver);1702 1703MODULE_DESCRIPTION("Qualcomm RPMh regulator driver");1704MODULE_LICENSE("GPL v2");1705