18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (c) 2015, Sony Mobile Communications AB. 48c2ecf20Sopenharmony_ci * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#include <linux/module.h> 88c2ecf20Sopenharmony_ci#include <linux/of.h> 98c2ecf20Sopenharmony_ci#include <linux/of_device.h> 108c2ecf20Sopenharmony_ci#include <linux/platform_device.h> 118c2ecf20Sopenharmony_ci#include <linux/regulator/driver.h> 128c2ecf20Sopenharmony_ci#include <linux/regulator/of_regulator.h> 138c2ecf20Sopenharmony_ci#include <linux/soc/qcom/smd-rpm.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_cistruct qcom_rpm_reg { 168c2ecf20Sopenharmony_ci struct device *dev; 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci struct qcom_smd_rpm *rpm; 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci u32 type; 218c2ecf20Sopenharmony_ci u32 id; 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci struct regulator_desc desc; 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ci int is_enabled; 268c2ecf20Sopenharmony_ci int uV; 278c2ecf20Sopenharmony_ci u32 load; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci unsigned int enabled_updated:1; 308c2ecf20Sopenharmony_ci unsigned int uv_updated:1; 318c2ecf20Sopenharmony_ci unsigned int load_updated:1; 328c2ecf20Sopenharmony_ci}; 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_cistruct rpm_regulator_req { 358c2ecf20Sopenharmony_ci __le32 key; 368c2ecf20Sopenharmony_ci __le32 nbytes; 378c2ecf20Sopenharmony_ci __le32 value; 388c2ecf20Sopenharmony_ci}; 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci#define RPM_KEY_SWEN 0x6e657773 /* "swen" */ 418c2ecf20Sopenharmony_ci#define RPM_KEY_UV 0x00007675 /* "uv" */ 428c2ecf20Sopenharmony_ci#define RPM_KEY_MA 0x0000616d /* "ma" */ 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_cistatic int rpm_reg_write_active(struct qcom_rpm_reg *vreg) 458c2ecf20Sopenharmony_ci{ 468c2ecf20Sopenharmony_ci struct rpm_regulator_req req[3]; 478c2ecf20Sopenharmony_ci int reqlen = 0; 488c2ecf20Sopenharmony_ci int ret; 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci if (vreg->enabled_updated) { 518c2ecf20Sopenharmony_ci req[reqlen].key = cpu_to_le32(RPM_KEY_SWEN); 528c2ecf20Sopenharmony_ci req[reqlen].nbytes = cpu_to_le32(sizeof(u32)); 538c2ecf20Sopenharmony_ci req[reqlen].value = cpu_to_le32(vreg->is_enabled); 548c2ecf20Sopenharmony_ci reqlen++; 558c2ecf20Sopenharmony_ci } 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci if (vreg->uv_updated && vreg->is_enabled) { 588c2ecf20Sopenharmony_ci req[reqlen].key = cpu_to_le32(RPM_KEY_UV); 598c2ecf20Sopenharmony_ci req[reqlen].nbytes = cpu_to_le32(sizeof(u32)); 608c2ecf20Sopenharmony_ci req[reqlen].value = cpu_to_le32(vreg->uV); 618c2ecf20Sopenharmony_ci reqlen++; 628c2ecf20Sopenharmony_ci } 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci if (vreg->load_updated && vreg->is_enabled) { 658c2ecf20Sopenharmony_ci req[reqlen].key = cpu_to_le32(RPM_KEY_MA); 668c2ecf20Sopenharmony_ci req[reqlen].nbytes = cpu_to_le32(sizeof(u32)); 678c2ecf20Sopenharmony_ci req[reqlen].value = cpu_to_le32(vreg->load / 1000); 688c2ecf20Sopenharmony_ci reqlen++; 698c2ecf20Sopenharmony_ci } 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ci if (!reqlen) 728c2ecf20Sopenharmony_ci return 0; 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ci ret = qcom_rpm_smd_write(vreg->rpm, QCOM_SMD_RPM_ACTIVE_STATE, 758c2ecf20Sopenharmony_ci vreg->type, vreg->id, 768c2ecf20Sopenharmony_ci req, sizeof(req[0]) * reqlen); 778c2ecf20Sopenharmony_ci if (!ret) { 788c2ecf20Sopenharmony_ci vreg->enabled_updated = 0; 798c2ecf20Sopenharmony_ci vreg->uv_updated = 0; 808c2ecf20Sopenharmony_ci vreg->load_updated = 0; 818c2ecf20Sopenharmony_ci } 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ci return ret; 848c2ecf20Sopenharmony_ci} 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_cistatic int rpm_reg_enable(struct regulator_dev *rdev) 878c2ecf20Sopenharmony_ci{ 888c2ecf20Sopenharmony_ci struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev); 898c2ecf20Sopenharmony_ci int ret; 908c2ecf20Sopenharmony_ci 918c2ecf20Sopenharmony_ci vreg->is_enabled = 1; 928c2ecf20Sopenharmony_ci vreg->enabled_updated = 1; 938c2ecf20Sopenharmony_ci 948c2ecf20Sopenharmony_ci ret = rpm_reg_write_active(vreg); 958c2ecf20Sopenharmony_ci if (ret) 968c2ecf20Sopenharmony_ci vreg->is_enabled = 0; 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_ci return ret; 998c2ecf20Sopenharmony_ci} 1008c2ecf20Sopenharmony_ci 1018c2ecf20Sopenharmony_cistatic int rpm_reg_is_enabled(struct regulator_dev *rdev) 1028c2ecf20Sopenharmony_ci{ 1038c2ecf20Sopenharmony_ci struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev); 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_ci return vreg->is_enabled; 1068c2ecf20Sopenharmony_ci} 1078c2ecf20Sopenharmony_ci 1088c2ecf20Sopenharmony_cistatic int rpm_reg_disable(struct regulator_dev *rdev) 1098c2ecf20Sopenharmony_ci{ 1108c2ecf20Sopenharmony_ci struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev); 1118c2ecf20Sopenharmony_ci int ret; 1128c2ecf20Sopenharmony_ci 1138c2ecf20Sopenharmony_ci vreg->is_enabled = 0; 1148c2ecf20Sopenharmony_ci vreg->enabled_updated = 1; 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_ci ret = rpm_reg_write_active(vreg); 1178c2ecf20Sopenharmony_ci if (ret) 1188c2ecf20Sopenharmony_ci vreg->is_enabled = 1; 1198c2ecf20Sopenharmony_ci 1208c2ecf20Sopenharmony_ci return ret; 1218c2ecf20Sopenharmony_ci} 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_cistatic int rpm_reg_get_voltage(struct regulator_dev *rdev) 1248c2ecf20Sopenharmony_ci{ 1258c2ecf20Sopenharmony_ci struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev); 1268c2ecf20Sopenharmony_ci 1278c2ecf20Sopenharmony_ci return vreg->uV; 1288c2ecf20Sopenharmony_ci} 1298c2ecf20Sopenharmony_ci 1308c2ecf20Sopenharmony_cistatic int rpm_reg_set_voltage(struct regulator_dev *rdev, 1318c2ecf20Sopenharmony_ci int min_uV, 1328c2ecf20Sopenharmony_ci int max_uV, 1338c2ecf20Sopenharmony_ci unsigned *selector) 1348c2ecf20Sopenharmony_ci{ 1358c2ecf20Sopenharmony_ci struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev); 1368c2ecf20Sopenharmony_ci int ret; 1378c2ecf20Sopenharmony_ci int old_uV = vreg->uV; 1388c2ecf20Sopenharmony_ci 1398c2ecf20Sopenharmony_ci vreg->uV = min_uV; 1408c2ecf20Sopenharmony_ci vreg->uv_updated = 1; 1418c2ecf20Sopenharmony_ci 1428c2ecf20Sopenharmony_ci ret = rpm_reg_write_active(vreg); 1438c2ecf20Sopenharmony_ci if (ret) 1448c2ecf20Sopenharmony_ci vreg->uV = old_uV; 1458c2ecf20Sopenharmony_ci 1468c2ecf20Sopenharmony_ci return ret; 1478c2ecf20Sopenharmony_ci} 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_cistatic int rpm_reg_set_load(struct regulator_dev *rdev, int load_uA) 1508c2ecf20Sopenharmony_ci{ 1518c2ecf20Sopenharmony_ci struct qcom_rpm_reg *vreg = rdev_get_drvdata(rdev); 1528c2ecf20Sopenharmony_ci u32 old_load = vreg->load; 1538c2ecf20Sopenharmony_ci int ret; 1548c2ecf20Sopenharmony_ci 1558c2ecf20Sopenharmony_ci vreg->load = load_uA; 1568c2ecf20Sopenharmony_ci vreg->load_updated = 1; 1578c2ecf20Sopenharmony_ci ret = rpm_reg_write_active(vreg); 1588c2ecf20Sopenharmony_ci if (ret) 1598c2ecf20Sopenharmony_ci vreg->load = old_load; 1608c2ecf20Sopenharmony_ci 1618c2ecf20Sopenharmony_ci return ret; 1628c2ecf20Sopenharmony_ci} 1638c2ecf20Sopenharmony_ci 1648c2ecf20Sopenharmony_cistatic const struct regulator_ops rpm_smps_ldo_ops = { 1658c2ecf20Sopenharmony_ci .enable = rpm_reg_enable, 1668c2ecf20Sopenharmony_ci .disable = rpm_reg_disable, 1678c2ecf20Sopenharmony_ci .is_enabled = rpm_reg_is_enabled, 1688c2ecf20Sopenharmony_ci .list_voltage = regulator_list_voltage_linear_range, 1698c2ecf20Sopenharmony_ci 1708c2ecf20Sopenharmony_ci .get_voltage = rpm_reg_get_voltage, 1718c2ecf20Sopenharmony_ci .set_voltage = rpm_reg_set_voltage, 1728c2ecf20Sopenharmony_ci 1738c2ecf20Sopenharmony_ci .set_load = rpm_reg_set_load, 1748c2ecf20Sopenharmony_ci}; 1758c2ecf20Sopenharmony_ci 1768c2ecf20Sopenharmony_cistatic const struct regulator_ops rpm_smps_ldo_ops_fixed = { 1778c2ecf20Sopenharmony_ci .enable = rpm_reg_enable, 1788c2ecf20Sopenharmony_ci .disable = rpm_reg_disable, 1798c2ecf20Sopenharmony_ci .is_enabled = rpm_reg_is_enabled, 1808c2ecf20Sopenharmony_ci 1818c2ecf20Sopenharmony_ci .get_voltage = rpm_reg_get_voltage, 1828c2ecf20Sopenharmony_ci .set_voltage = rpm_reg_set_voltage, 1838c2ecf20Sopenharmony_ci 1848c2ecf20Sopenharmony_ci .set_load = rpm_reg_set_load, 1858c2ecf20Sopenharmony_ci}; 1868c2ecf20Sopenharmony_ci 1878c2ecf20Sopenharmony_cistatic const struct regulator_ops rpm_switch_ops = { 1888c2ecf20Sopenharmony_ci .enable = rpm_reg_enable, 1898c2ecf20Sopenharmony_ci .disable = rpm_reg_disable, 1908c2ecf20Sopenharmony_ci .is_enabled = rpm_reg_is_enabled, 1918c2ecf20Sopenharmony_ci}; 1928c2ecf20Sopenharmony_ci 1938c2ecf20Sopenharmony_cistatic const struct regulator_ops rpm_bob_ops = { 1948c2ecf20Sopenharmony_ci .enable = rpm_reg_enable, 1958c2ecf20Sopenharmony_ci .disable = rpm_reg_disable, 1968c2ecf20Sopenharmony_ci .is_enabled = rpm_reg_is_enabled, 1978c2ecf20Sopenharmony_ci 1988c2ecf20Sopenharmony_ci .get_voltage = rpm_reg_get_voltage, 1998c2ecf20Sopenharmony_ci .set_voltage = rpm_reg_set_voltage, 2008c2ecf20Sopenharmony_ci}; 2018c2ecf20Sopenharmony_ci 2028c2ecf20Sopenharmony_cistatic const struct regulator_ops rpm_mp5496_ops = { 2038c2ecf20Sopenharmony_ci .enable = rpm_reg_enable, 2048c2ecf20Sopenharmony_ci .disable = rpm_reg_disable, 2058c2ecf20Sopenharmony_ci .is_enabled = rpm_reg_is_enabled, 2068c2ecf20Sopenharmony_ci .list_voltage = regulator_list_voltage_linear_range, 2078c2ecf20Sopenharmony_ci 2088c2ecf20Sopenharmony_ci .set_voltage = rpm_reg_set_voltage, 2098c2ecf20Sopenharmony_ci}; 2108c2ecf20Sopenharmony_ci 2118c2ecf20Sopenharmony_cistatic const struct regulator_desc pma8084_hfsmps = { 2128c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 2138c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(375000, 0, 95, 12500), 2148c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1550000, 96, 158, 25000), 2158c2ecf20Sopenharmony_ci }, 2168c2ecf20Sopenharmony_ci .n_linear_ranges = 2, 2178c2ecf20Sopenharmony_ci .n_voltages = 159, 2188c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 2198c2ecf20Sopenharmony_ci}; 2208c2ecf20Sopenharmony_ci 2218c2ecf20Sopenharmony_cistatic const struct regulator_desc pma8084_ftsmps = { 2228c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 2238c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(350000, 0, 184, 5000), 2248c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1280000, 185, 261, 10000), 2258c2ecf20Sopenharmony_ci }, 2268c2ecf20Sopenharmony_ci .n_linear_ranges = 2, 2278c2ecf20Sopenharmony_ci .n_voltages = 262, 2288c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 2298c2ecf20Sopenharmony_ci}; 2308c2ecf20Sopenharmony_ci 2318c2ecf20Sopenharmony_cistatic const struct regulator_desc pma8084_pldo = { 2328c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 2338c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE( 750000, 0, 63, 12500), 2348c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1550000, 64, 126, 25000), 2358c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(3100000, 127, 163, 50000), 2368c2ecf20Sopenharmony_ci }, 2378c2ecf20Sopenharmony_ci .n_linear_ranges = 3, 2388c2ecf20Sopenharmony_ci .n_voltages = 164, 2398c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 2408c2ecf20Sopenharmony_ci}; 2418c2ecf20Sopenharmony_ci 2428c2ecf20Sopenharmony_cistatic const struct regulator_desc pma8084_nldo = { 2438c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 2448c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(750000, 0, 63, 12500), 2458c2ecf20Sopenharmony_ci }, 2468c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 2478c2ecf20Sopenharmony_ci .n_voltages = 64, 2488c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 2498c2ecf20Sopenharmony_ci}; 2508c2ecf20Sopenharmony_ci 2518c2ecf20Sopenharmony_cistatic const struct regulator_desc pma8084_switch = { 2528c2ecf20Sopenharmony_ci .ops = &rpm_switch_ops, 2538c2ecf20Sopenharmony_ci}; 2548c2ecf20Sopenharmony_ci 2558c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8x41_hfsmps = { 2568c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 2578c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE( 375000, 0, 95, 12500), 2588c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1575000, 96, 158, 25000), 2598c2ecf20Sopenharmony_ci }, 2608c2ecf20Sopenharmony_ci .n_linear_ranges = 2, 2618c2ecf20Sopenharmony_ci .n_voltages = 159, 2628c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 2638c2ecf20Sopenharmony_ci}; 2648c2ecf20Sopenharmony_ci 2658c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8841_ftsmps = { 2668c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 2678c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(350000, 0, 184, 5000), 2688c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1280000, 185, 261, 10000), 2698c2ecf20Sopenharmony_ci }, 2708c2ecf20Sopenharmony_ci .n_linear_ranges = 2, 2718c2ecf20Sopenharmony_ci .n_voltages = 262, 2728c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 2738c2ecf20Sopenharmony_ci}; 2748c2ecf20Sopenharmony_ci 2758c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8941_boost = { 2768c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 2778c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(4000000, 0, 30, 50000), 2788c2ecf20Sopenharmony_ci }, 2798c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 2808c2ecf20Sopenharmony_ci .n_voltages = 31, 2818c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 2828c2ecf20Sopenharmony_ci}; 2838c2ecf20Sopenharmony_ci 2848c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8941_pldo = { 2858c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 2868c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE( 750000, 0, 63, 12500), 2878c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1550000, 64, 126, 25000), 2888c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(3100000, 127, 163, 50000), 2898c2ecf20Sopenharmony_ci }, 2908c2ecf20Sopenharmony_ci .n_linear_ranges = 3, 2918c2ecf20Sopenharmony_ci .n_voltages = 164, 2928c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 2938c2ecf20Sopenharmony_ci}; 2948c2ecf20Sopenharmony_ci 2958c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8941_nldo = { 2968c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 2978c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(750000, 0, 63, 12500), 2988c2ecf20Sopenharmony_ci }, 2998c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 3008c2ecf20Sopenharmony_ci .n_voltages = 64, 3018c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 3028c2ecf20Sopenharmony_ci}; 3038c2ecf20Sopenharmony_ci 3048c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8941_lnldo = { 3058c2ecf20Sopenharmony_ci .fixed_uV = 1740000, 3068c2ecf20Sopenharmony_ci .n_voltages = 1, 3078c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops_fixed, 3088c2ecf20Sopenharmony_ci}; 3098c2ecf20Sopenharmony_ci 3108c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8941_switch = { 3118c2ecf20Sopenharmony_ci .ops = &rpm_switch_ops, 3128c2ecf20Sopenharmony_ci}; 3138c2ecf20Sopenharmony_ci 3148c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8916_pldo = { 3158c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 3168c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1750000, 0, 127, 12500), 3178c2ecf20Sopenharmony_ci }, 3188c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 3198c2ecf20Sopenharmony_ci .n_voltages = 128, 3208c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 3218c2ecf20Sopenharmony_ci}; 3228c2ecf20Sopenharmony_ci 3238c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8916_nldo = { 3248c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 3258c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(375000, 0, 93, 12500), 3268c2ecf20Sopenharmony_ci }, 3278c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 3288c2ecf20Sopenharmony_ci .n_voltages = 94, 3298c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 3308c2ecf20Sopenharmony_ci}; 3318c2ecf20Sopenharmony_ci 3328c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8916_buck_lvo_smps = { 3338c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 3348c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(375000, 0, 95, 12500), 3358c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(750000, 96, 127, 25000), 3368c2ecf20Sopenharmony_ci }, 3378c2ecf20Sopenharmony_ci .n_linear_ranges = 2, 3388c2ecf20Sopenharmony_ci .n_voltages = 128, 3398c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 3408c2ecf20Sopenharmony_ci}; 3418c2ecf20Sopenharmony_ci 3428c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8916_buck_hvo_smps = { 3438c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 3448c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1550000, 0, 31, 25000), 3458c2ecf20Sopenharmony_ci }, 3468c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 3478c2ecf20Sopenharmony_ci .n_voltages = 32, 3488c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 3498c2ecf20Sopenharmony_ci}; 3508c2ecf20Sopenharmony_ci 3518c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8950_hfsmps = { 3528c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 3538c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(375000, 0, 95, 12500), 3548c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1550000, 96, 127, 25000), 3558c2ecf20Sopenharmony_ci }, 3568c2ecf20Sopenharmony_ci .n_linear_ranges = 2, 3578c2ecf20Sopenharmony_ci .n_voltages = 128, 3588c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 3598c2ecf20Sopenharmony_ci}; 3608c2ecf20Sopenharmony_ci 3618c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8950_ftsmps2p5 = { 3628c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 3638c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(80000, 0, 255, 5000), 3648c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(160000, 256, 460, 10000), 3658c2ecf20Sopenharmony_ci }, 3668c2ecf20Sopenharmony_ci .n_linear_ranges = 2, 3678c2ecf20Sopenharmony_ci .n_voltages = 461, 3688c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 3698c2ecf20Sopenharmony_ci}; 3708c2ecf20Sopenharmony_ci 3718c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8950_ult_nldo = { 3728c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 3738c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(375000, 0, 202, 12500), 3748c2ecf20Sopenharmony_ci }, 3758c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 3768c2ecf20Sopenharmony_ci .n_voltages = 203, 3778c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 3788c2ecf20Sopenharmony_ci}; 3798c2ecf20Sopenharmony_ci 3808c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8950_ult_pldo = { 3818c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 3828c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1750000, 0, 127, 12500), 3838c2ecf20Sopenharmony_ci }, 3848c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 3858c2ecf20Sopenharmony_ci .n_voltages = 128, 3868c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 3878c2ecf20Sopenharmony_ci}; 3888c2ecf20Sopenharmony_ci 3898c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8950_pldo_lv = { 3908c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 3918c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1500000, 0, 16, 25000), 3928c2ecf20Sopenharmony_ci }, 3938c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 3948c2ecf20Sopenharmony_ci .n_voltages = 17, 3958c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 3968c2ecf20Sopenharmony_ci}; 3978c2ecf20Sopenharmony_ci 3988c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8950_pldo = { 3998c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 4008c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(975000, 0, 164, 12500), 4018c2ecf20Sopenharmony_ci }, 4028c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 4038c2ecf20Sopenharmony_ci .n_voltages = 165, 4048c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 4058c2ecf20Sopenharmony_ci}; 4068c2ecf20Sopenharmony_ci 4078c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8953_lnldo = { 4088c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 4098c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1380000, 8, 15, 120000), 4108c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(690000, 0, 7, 60000), 4118c2ecf20Sopenharmony_ci }, 4128c2ecf20Sopenharmony_ci .n_linear_ranges = 2, 4138c2ecf20Sopenharmony_ci .n_voltages = 16, 4148c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 4158c2ecf20Sopenharmony_ci}; 4168c2ecf20Sopenharmony_ci 4178c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8953_ult_nldo = { 4188c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 4198c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(375000, 0, 93, 12500), 4208c2ecf20Sopenharmony_ci }, 4218c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 4228c2ecf20Sopenharmony_ci .n_voltages = 94, 4238c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 4248c2ecf20Sopenharmony_ci}; 4258c2ecf20Sopenharmony_ci 4268c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8994_hfsmps = { 4278c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 4288c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE( 375000, 0, 95, 12500), 4298c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1550000, 96, 158, 25000), 4308c2ecf20Sopenharmony_ci }, 4318c2ecf20Sopenharmony_ci .n_linear_ranges = 2, 4328c2ecf20Sopenharmony_ci .n_voltages = 159, 4338c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 4348c2ecf20Sopenharmony_ci}; 4358c2ecf20Sopenharmony_ci 4368c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8994_ftsmps = { 4378c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 4388c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(350000, 0, 199, 5000), 4398c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(700000, 200, 349, 10000), 4408c2ecf20Sopenharmony_ci }, 4418c2ecf20Sopenharmony_ci .n_linear_ranges = 2, 4428c2ecf20Sopenharmony_ci .n_voltages = 350, 4438c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 4448c2ecf20Sopenharmony_ci}; 4458c2ecf20Sopenharmony_ci 4468c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8994_nldo = { 4478c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 4488c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(750000, 0, 63, 12500), 4498c2ecf20Sopenharmony_ci }, 4508c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 4518c2ecf20Sopenharmony_ci .n_voltages = 64, 4528c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 4538c2ecf20Sopenharmony_ci}; 4548c2ecf20Sopenharmony_ci 4558c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8994_pldo = { 4568c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 4578c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE( 750000, 0, 63, 12500), 4588c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1550000, 64, 126, 25000), 4598c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(3100000, 127, 163, 50000), 4608c2ecf20Sopenharmony_ci }, 4618c2ecf20Sopenharmony_ci .n_linear_ranges = 3, 4628c2ecf20Sopenharmony_ci .n_voltages = 164, 4638c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 4648c2ecf20Sopenharmony_ci}; 4658c2ecf20Sopenharmony_ci 4668c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8994_switch = { 4678c2ecf20Sopenharmony_ci .ops = &rpm_switch_ops, 4688c2ecf20Sopenharmony_ci}; 4698c2ecf20Sopenharmony_ci 4708c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8994_lnldo = { 4718c2ecf20Sopenharmony_ci .fixed_uV = 1740000, 4728c2ecf20Sopenharmony_ci .n_voltages = 1, 4738c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops_fixed, 4748c2ecf20Sopenharmony_ci}; 4758c2ecf20Sopenharmony_ci 4768c2ecf20Sopenharmony_cistatic const struct regulator_desc pmi8994_ftsmps = { 4778c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 4788c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(350000, 0, 199, 5000), 4798c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(700000, 200, 349, 10000), 4808c2ecf20Sopenharmony_ci }, 4818c2ecf20Sopenharmony_ci .n_linear_ranges = 2, 4828c2ecf20Sopenharmony_ci .n_voltages = 350, 4838c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 4848c2ecf20Sopenharmony_ci}; 4858c2ecf20Sopenharmony_ci 4868c2ecf20Sopenharmony_cistatic const struct regulator_desc pmi8994_hfsmps = { 4878c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 4888c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(350000, 0, 80, 12500), 4898c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(700000, 81, 141, 25000), 4908c2ecf20Sopenharmony_ci }, 4918c2ecf20Sopenharmony_ci .n_linear_ranges = 2, 4928c2ecf20Sopenharmony_ci .n_voltages = 142, 4938c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 4948c2ecf20Sopenharmony_ci}; 4958c2ecf20Sopenharmony_ci 4968c2ecf20Sopenharmony_cistatic const struct regulator_desc pmi8994_bby = { 4978c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 4988c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(3000000, 0, 44, 50000), 4998c2ecf20Sopenharmony_ci }, 5008c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 5018c2ecf20Sopenharmony_ci .n_voltages = 45, 5028c2ecf20Sopenharmony_ci .ops = &rpm_bob_ops, 5038c2ecf20Sopenharmony_ci}; 5048c2ecf20Sopenharmony_ci 5058c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8998_ftsmps = { 5068c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 5078c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(320000, 0, 258, 4000), 5088c2ecf20Sopenharmony_ci }, 5098c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 5108c2ecf20Sopenharmony_ci .n_voltages = 259, 5118c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 5128c2ecf20Sopenharmony_ci}; 5138c2ecf20Sopenharmony_ci 5148c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8998_hfsmps = { 5158c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 5168c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), 5178c2ecf20Sopenharmony_ci }, 5188c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 5198c2ecf20Sopenharmony_ci .n_voltages = 216, 5208c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 5218c2ecf20Sopenharmony_ci}; 5228c2ecf20Sopenharmony_ci 5238c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8998_nldo = { 5248c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 5258c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000), 5268c2ecf20Sopenharmony_ci }, 5278c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 5288c2ecf20Sopenharmony_ci .n_voltages = 128, 5298c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 5308c2ecf20Sopenharmony_ci}; 5318c2ecf20Sopenharmony_ci 5328c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8998_pldo = { 5338c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 5348c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1664000, 0, 255, 8000), 5358c2ecf20Sopenharmony_ci }, 5368c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 5378c2ecf20Sopenharmony_ci .n_voltages = 256, 5388c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 5398c2ecf20Sopenharmony_ci}; 5408c2ecf20Sopenharmony_ci 5418c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8998_pldo_lv = { 5428c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 5438c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1256000, 0, 127, 8000), 5448c2ecf20Sopenharmony_ci }, 5458c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 5468c2ecf20Sopenharmony_ci .n_voltages = 128, 5478c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 5488c2ecf20Sopenharmony_ci}; 5498c2ecf20Sopenharmony_ci 5508c2ecf20Sopenharmony_cistatic const struct regulator_desc pm8998_switch = { 5518c2ecf20Sopenharmony_ci .ops = &rpm_switch_ops, 5528c2ecf20Sopenharmony_ci}; 5538c2ecf20Sopenharmony_ci 5548c2ecf20Sopenharmony_cistatic const struct regulator_desc pmi8998_bob = { 5558c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 5568c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1824000, 0, 83, 32000), 5578c2ecf20Sopenharmony_ci }, 5588c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 5598c2ecf20Sopenharmony_ci .n_voltages = 84, 5608c2ecf20Sopenharmony_ci .ops = &rpm_bob_ops, 5618c2ecf20Sopenharmony_ci}; 5628c2ecf20Sopenharmony_ci 5638c2ecf20Sopenharmony_cistatic const struct regulator_desc pm660_ftsmps = { 5648c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 5658c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(355000, 0, 199, 5000), 5668c2ecf20Sopenharmony_ci }, 5678c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 5688c2ecf20Sopenharmony_ci .n_voltages = 200, 5698c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 5708c2ecf20Sopenharmony_ci}; 5718c2ecf20Sopenharmony_ci 5728c2ecf20Sopenharmony_cistatic const struct regulator_desc pm660_hfsmps = { 5738c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 5748c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(320000, 0, 216, 8000), 5758c2ecf20Sopenharmony_ci }, 5768c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 5778c2ecf20Sopenharmony_ci .n_voltages = 217, 5788c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 5798c2ecf20Sopenharmony_ci}; 5808c2ecf20Sopenharmony_ci 5818c2ecf20Sopenharmony_cistatic const struct regulator_desc pm660_ht_nldo = { 5828c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 5838c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(312000, 0, 124, 8000), 5848c2ecf20Sopenharmony_ci }, 5858c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 5868c2ecf20Sopenharmony_ci .n_voltages = 125, 5878c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 5888c2ecf20Sopenharmony_ci}; 5898c2ecf20Sopenharmony_ci 5908c2ecf20Sopenharmony_cistatic const struct regulator_desc pm660_ht_lvpldo = { 5918c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 5928c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1504000, 0, 62, 8000), 5938c2ecf20Sopenharmony_ci }, 5948c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 5958c2ecf20Sopenharmony_ci .n_voltages = 63, 5968c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 5978c2ecf20Sopenharmony_ci}; 5988c2ecf20Sopenharmony_ci 5998c2ecf20Sopenharmony_cistatic const struct regulator_desc pm660_nldo660 = { 6008c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 6018c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(320000, 0, 123, 8000), 6028c2ecf20Sopenharmony_ci }, 6038c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 6048c2ecf20Sopenharmony_ci .n_voltages = 124, 6058c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 6068c2ecf20Sopenharmony_ci}; 6078c2ecf20Sopenharmony_ci 6088c2ecf20Sopenharmony_cistatic const struct regulator_desc pm660_pldo660 = { 6098c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 6108c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000), 6118c2ecf20Sopenharmony_ci }, 6128c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 6138c2ecf20Sopenharmony_ci .n_voltages = 256, 6148c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 6158c2ecf20Sopenharmony_ci}; 6168c2ecf20Sopenharmony_ci 6178c2ecf20Sopenharmony_cistatic const struct regulator_desc pm660l_bob = { 6188c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 6198c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1800000, 0, 84, 32000), 6208c2ecf20Sopenharmony_ci }, 6218c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 6228c2ecf20Sopenharmony_ci .n_voltages = 85, 6238c2ecf20Sopenharmony_ci .ops = &rpm_bob_ops, 6248c2ecf20Sopenharmony_ci}; 6258c2ecf20Sopenharmony_ci 6268c2ecf20Sopenharmony_cistatic const struct regulator_desc pms405_hfsmps3 = { 6278c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 6288c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), 6298c2ecf20Sopenharmony_ci }, 6308c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 6318c2ecf20Sopenharmony_ci .n_voltages = 216, 6328c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 6338c2ecf20Sopenharmony_ci}; 6348c2ecf20Sopenharmony_ci 6358c2ecf20Sopenharmony_cistatic const struct regulator_desc pms405_nldo300 = { 6368c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 6378c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000), 6388c2ecf20Sopenharmony_ci }, 6398c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 6408c2ecf20Sopenharmony_ci .n_voltages = 128, 6418c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 6428c2ecf20Sopenharmony_ci}; 6438c2ecf20Sopenharmony_ci 6448c2ecf20Sopenharmony_cistatic const struct regulator_desc pms405_nldo1200 = { 6458c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 6468c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000), 6478c2ecf20Sopenharmony_ci }, 6488c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 6498c2ecf20Sopenharmony_ci .n_voltages = 128, 6508c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 6518c2ecf20Sopenharmony_ci}; 6528c2ecf20Sopenharmony_ci 6538c2ecf20Sopenharmony_cistatic const struct regulator_desc pms405_pldo50 = { 6548c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 6558c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1664000, 0, 128, 16000), 6568c2ecf20Sopenharmony_ci }, 6578c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 6588c2ecf20Sopenharmony_ci .n_voltages = 129, 6598c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 6608c2ecf20Sopenharmony_ci}; 6618c2ecf20Sopenharmony_ci 6628c2ecf20Sopenharmony_cistatic const struct regulator_desc pms405_pldo150 = { 6638c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 6648c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1664000, 0, 128, 16000), 6658c2ecf20Sopenharmony_ci }, 6668c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 6678c2ecf20Sopenharmony_ci .n_voltages = 129, 6688c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 6698c2ecf20Sopenharmony_ci}; 6708c2ecf20Sopenharmony_ci 6718c2ecf20Sopenharmony_cistatic const struct regulator_desc pms405_pldo600 = { 6728c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 6738c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1256000, 0, 98, 8000), 6748c2ecf20Sopenharmony_ci }, 6758c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 6768c2ecf20Sopenharmony_ci .n_voltages = 99, 6778c2ecf20Sopenharmony_ci .ops = &rpm_smps_ldo_ops, 6788c2ecf20Sopenharmony_ci}; 6798c2ecf20Sopenharmony_ci 6808c2ecf20Sopenharmony_cistatic const struct regulator_desc mp5496_smpa2 = { 6818c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 6828c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(725000, 0, 27, 12500), 6838c2ecf20Sopenharmony_ci }, 6848c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 6858c2ecf20Sopenharmony_ci .n_voltages = 28, 6868c2ecf20Sopenharmony_ci .ops = &rpm_mp5496_ops, 6878c2ecf20Sopenharmony_ci}; 6888c2ecf20Sopenharmony_ci 6898c2ecf20Sopenharmony_cistatic const struct regulator_desc mp5496_ldoa2 = { 6908c2ecf20Sopenharmony_ci .linear_ranges = (struct linear_range[]) { 6918c2ecf20Sopenharmony_ci REGULATOR_LINEAR_RANGE(1800000, 0, 60, 25000), 6928c2ecf20Sopenharmony_ci }, 6938c2ecf20Sopenharmony_ci .n_linear_ranges = 1, 6948c2ecf20Sopenharmony_ci .n_voltages = 61, 6958c2ecf20Sopenharmony_ci .ops = &rpm_mp5496_ops, 6968c2ecf20Sopenharmony_ci}; 6978c2ecf20Sopenharmony_ci 6988c2ecf20Sopenharmony_cistruct rpm_regulator_data { 6998c2ecf20Sopenharmony_ci const char *name; 7008c2ecf20Sopenharmony_ci u32 type; 7018c2ecf20Sopenharmony_ci u32 id; 7028c2ecf20Sopenharmony_ci const struct regulator_desc *desc; 7038c2ecf20Sopenharmony_ci const char *supply; 7048c2ecf20Sopenharmony_ci}; 7058c2ecf20Sopenharmony_ci 7068c2ecf20Sopenharmony_cistatic const struct rpm_regulator_data rpm_mp5496_regulators[] = { 7078c2ecf20Sopenharmony_ci { "s2", QCOM_SMD_RPM_SMPA, 2, &mp5496_smpa2, "s2" }, 7088c2ecf20Sopenharmony_ci { "l2", QCOM_SMD_RPM_LDOA, 2, &mp5496_ldoa2, "l2" }, 7098c2ecf20Sopenharmony_ci {} 7108c2ecf20Sopenharmony_ci}; 7118c2ecf20Sopenharmony_ci 7128c2ecf20Sopenharmony_cistatic const struct rpm_regulator_data rpm_pm8841_regulators[] = { 7138c2ecf20Sopenharmony_ci { "s1", QCOM_SMD_RPM_SMPB, 1, &pm8x41_hfsmps, "vdd_s1" }, 7148c2ecf20Sopenharmony_ci { "s2", QCOM_SMD_RPM_SMPB, 2, &pm8841_ftsmps, "vdd_s2" }, 7158c2ecf20Sopenharmony_ci { "s3", QCOM_SMD_RPM_SMPB, 3, &pm8x41_hfsmps, "vdd_s3" }, 7168c2ecf20Sopenharmony_ci { "s4", QCOM_SMD_RPM_SMPB, 4, &pm8841_ftsmps, "vdd_s4" }, 7178c2ecf20Sopenharmony_ci { "s5", QCOM_SMD_RPM_SMPB, 5, &pm8841_ftsmps, "vdd_s5" }, 7188c2ecf20Sopenharmony_ci { "s6", QCOM_SMD_RPM_SMPB, 6, &pm8841_ftsmps, "vdd_s6" }, 7198c2ecf20Sopenharmony_ci { "s7", QCOM_SMD_RPM_SMPB, 7, &pm8841_ftsmps, "vdd_s7" }, 7208c2ecf20Sopenharmony_ci { "s8", QCOM_SMD_RPM_SMPB, 8, &pm8841_ftsmps, "vdd_s8" }, 7218c2ecf20Sopenharmony_ci {} 7228c2ecf20Sopenharmony_ci}; 7238c2ecf20Sopenharmony_ci 7248c2ecf20Sopenharmony_cistatic const struct rpm_regulator_data rpm_pm8916_regulators[] = { 7258c2ecf20Sopenharmony_ci { "s1", QCOM_SMD_RPM_SMPA, 1, &pm8916_buck_lvo_smps, "vdd_s1" }, 7268c2ecf20Sopenharmony_ci { "s2", QCOM_SMD_RPM_SMPA, 2, &pm8916_buck_lvo_smps, "vdd_s2" }, 7278c2ecf20Sopenharmony_ci { "s3", QCOM_SMD_RPM_SMPA, 3, &pm8916_buck_lvo_smps, "vdd_s3" }, 7288c2ecf20Sopenharmony_ci { "s4", QCOM_SMD_RPM_SMPA, 4, &pm8916_buck_hvo_smps, "vdd_s4" }, 7298c2ecf20Sopenharmony_ci { "l1", QCOM_SMD_RPM_LDOA, 1, &pm8916_nldo, "vdd_l1_l2_l3" }, 7308c2ecf20Sopenharmony_ci { "l2", QCOM_SMD_RPM_LDOA, 2, &pm8916_nldo, "vdd_l1_l2_l3" }, 7318c2ecf20Sopenharmony_ci { "l3", QCOM_SMD_RPM_LDOA, 3, &pm8916_nldo, "vdd_l1_l2_l3" }, 7328c2ecf20Sopenharmony_ci { "l4", QCOM_SMD_RPM_LDOA, 4, &pm8916_pldo, "vdd_l4_l5_l6" }, 7338c2ecf20Sopenharmony_ci { "l5", QCOM_SMD_RPM_LDOA, 5, &pm8916_pldo, "vdd_l4_l5_l6" }, 7348c2ecf20Sopenharmony_ci { "l6", QCOM_SMD_RPM_LDOA, 6, &pm8916_pldo, "vdd_l4_l5_l6" }, 7358c2ecf20Sopenharmony_ci { "l7", QCOM_SMD_RPM_LDOA, 7, &pm8916_pldo, "vdd_l7" }, 7368c2ecf20Sopenharmony_ci { "l8", QCOM_SMD_RPM_LDOA, 8, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18" }, 7378c2ecf20Sopenharmony_ci { "l9", QCOM_SMD_RPM_LDOA, 9, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18" }, 7388c2ecf20Sopenharmony_ci { "l10", QCOM_SMD_RPM_LDOA, 10, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"}, 7398c2ecf20Sopenharmony_ci { "l11", QCOM_SMD_RPM_LDOA, 11, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"}, 7408c2ecf20Sopenharmony_ci { "l12", QCOM_SMD_RPM_LDOA, 12, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"}, 7418c2ecf20Sopenharmony_ci { "l13", QCOM_SMD_RPM_LDOA, 13, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"}, 7428c2ecf20Sopenharmony_ci { "l14", QCOM_SMD_RPM_LDOA, 14, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"}, 7438c2ecf20Sopenharmony_ci { "l15", QCOM_SMD_RPM_LDOA, 15, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"}, 7448c2ecf20Sopenharmony_ci { "l16", QCOM_SMD_RPM_LDOA, 16, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"}, 7458c2ecf20Sopenharmony_ci { "l17", QCOM_SMD_RPM_LDOA, 17, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"}, 7468c2ecf20Sopenharmony_ci { "l18", QCOM_SMD_RPM_LDOA, 18, &pm8916_pldo, "vdd_l8_l9_l10_l11_l12_l13_l14_l15_l16_l17_l18"}, 7478c2ecf20Sopenharmony_ci {} 7488c2ecf20Sopenharmony_ci}; 7498c2ecf20Sopenharmony_ci 7508c2ecf20Sopenharmony_cistatic const struct rpm_regulator_data rpm_pm8941_regulators[] = { 7518c2ecf20Sopenharmony_ci { "s1", QCOM_SMD_RPM_SMPA, 1, &pm8x41_hfsmps, "vdd_s1" }, 7528c2ecf20Sopenharmony_ci { "s2", QCOM_SMD_RPM_SMPA, 2, &pm8x41_hfsmps, "vdd_s2" }, 7538c2ecf20Sopenharmony_ci { "s3", QCOM_SMD_RPM_SMPA, 3, &pm8x41_hfsmps, "vdd_s3" }, 7548c2ecf20Sopenharmony_ci { "s4", QCOM_SMD_RPM_BOOST, 1, &pm8941_boost }, 7558c2ecf20Sopenharmony_ci 7568c2ecf20Sopenharmony_ci { "l1", QCOM_SMD_RPM_LDOA, 1, &pm8941_nldo, "vdd_l1_l3" }, 7578c2ecf20Sopenharmony_ci { "l2", QCOM_SMD_RPM_LDOA, 2, &pm8941_nldo, "vdd_l2_lvs1_2_3" }, 7588c2ecf20Sopenharmony_ci { "l3", QCOM_SMD_RPM_LDOA, 3, &pm8941_nldo, "vdd_l1_l3" }, 7598c2ecf20Sopenharmony_ci { "l4", QCOM_SMD_RPM_LDOA, 4, &pm8941_nldo, "vdd_l4_l11" }, 7608c2ecf20Sopenharmony_ci { "l5", QCOM_SMD_RPM_LDOA, 5, &pm8941_lnldo, "vdd_l5_l7" }, 7618c2ecf20Sopenharmony_ci { "l6", QCOM_SMD_RPM_LDOA, 6, &pm8941_pldo, "vdd_l6_l12_l14_l15" }, 7628c2ecf20Sopenharmony_ci { "l7", QCOM_SMD_RPM_LDOA, 7, &pm8941_lnldo, "vdd_l5_l7" }, 7638c2ecf20Sopenharmony_ci { "l8", QCOM_SMD_RPM_LDOA, 8, &pm8941_pldo, "vdd_l8_l16_l18_l19" }, 7648c2ecf20Sopenharmony_ci { "l9", QCOM_SMD_RPM_LDOA, 9, &pm8941_pldo, "vdd_l9_l10_l17_l22" }, 7658c2ecf20Sopenharmony_ci { "l10", QCOM_SMD_RPM_LDOA, 10, &pm8941_pldo, "vdd_l9_l10_l17_l22" }, 7668c2ecf20Sopenharmony_ci { "l11", QCOM_SMD_RPM_LDOA, 11, &pm8941_nldo, "vdd_l4_l11" }, 7678c2ecf20Sopenharmony_ci { "l12", QCOM_SMD_RPM_LDOA, 12, &pm8941_pldo, "vdd_l6_l12_l14_l15" }, 7688c2ecf20Sopenharmony_ci { "l13", QCOM_SMD_RPM_LDOA, 13, &pm8941_pldo, "vdd_l13_l20_l23_l24" }, 7698c2ecf20Sopenharmony_ci { "l14", QCOM_SMD_RPM_LDOA, 14, &pm8941_pldo, "vdd_l6_l12_l14_l15" }, 7708c2ecf20Sopenharmony_ci { "l15", QCOM_SMD_RPM_LDOA, 15, &pm8941_pldo, "vdd_l6_l12_l14_l15" }, 7718c2ecf20Sopenharmony_ci { "l16", QCOM_SMD_RPM_LDOA, 16, &pm8941_pldo, "vdd_l8_l16_l18_l19" }, 7728c2ecf20Sopenharmony_ci { "l17", QCOM_SMD_RPM_LDOA, 17, &pm8941_pldo, "vdd_l9_l10_l17_l22" }, 7738c2ecf20Sopenharmony_ci { "l18", QCOM_SMD_RPM_LDOA, 18, &pm8941_pldo, "vdd_l8_l16_l18_l19" }, 7748c2ecf20Sopenharmony_ci { "l19", QCOM_SMD_RPM_LDOA, 19, &pm8941_pldo, "vdd_l8_l16_l18_l19" }, 7758c2ecf20Sopenharmony_ci { "l20", QCOM_SMD_RPM_LDOA, 20, &pm8941_pldo, "vdd_l13_l20_l23_l24" }, 7768c2ecf20Sopenharmony_ci { "l21", QCOM_SMD_RPM_LDOA, 21, &pm8941_pldo, "vdd_l21" }, 7778c2ecf20Sopenharmony_ci { "l22", QCOM_SMD_RPM_LDOA, 22, &pm8941_pldo, "vdd_l9_l10_l17_l22" }, 7788c2ecf20Sopenharmony_ci { "l23", QCOM_SMD_RPM_LDOA, 23, &pm8941_pldo, "vdd_l13_l20_l23_l24" }, 7798c2ecf20Sopenharmony_ci { "l24", QCOM_SMD_RPM_LDOA, 24, &pm8941_pldo, "vdd_l13_l20_l23_l24" }, 7808c2ecf20Sopenharmony_ci 7818c2ecf20Sopenharmony_ci { "lvs1", QCOM_SMD_RPM_VSA, 1, &pm8941_switch, "vdd_l2_lvs1_2_3" }, 7828c2ecf20Sopenharmony_ci { "lvs2", QCOM_SMD_RPM_VSA, 2, &pm8941_switch, "vdd_l2_lvs1_2_3" }, 7838c2ecf20Sopenharmony_ci { "lvs3", QCOM_SMD_RPM_VSA, 3, &pm8941_switch, "vdd_l2_lvs1_2_3" }, 7848c2ecf20Sopenharmony_ci 7858c2ecf20Sopenharmony_ci { "5vs1", QCOM_SMD_RPM_VSA, 4, &pm8941_switch, "vin_5vs" }, 7868c2ecf20Sopenharmony_ci { "5vs2", QCOM_SMD_RPM_VSA, 5, &pm8941_switch, "vin_5vs" }, 7878c2ecf20Sopenharmony_ci 7888c2ecf20Sopenharmony_ci {} 7898c2ecf20Sopenharmony_ci}; 7908c2ecf20Sopenharmony_ci 7918c2ecf20Sopenharmony_cistatic const struct rpm_regulator_data rpm_pma8084_regulators[] = { 7928c2ecf20Sopenharmony_ci { "s1", QCOM_SMD_RPM_SMPA, 1, &pma8084_ftsmps, "vdd_s1" }, 7938c2ecf20Sopenharmony_ci { "s2", QCOM_SMD_RPM_SMPA, 2, &pma8084_ftsmps, "vdd_s2" }, 7948c2ecf20Sopenharmony_ci { "s3", QCOM_SMD_RPM_SMPA, 3, &pma8084_hfsmps, "vdd_s3" }, 7958c2ecf20Sopenharmony_ci { "s4", QCOM_SMD_RPM_SMPA, 4, &pma8084_hfsmps, "vdd_s4" }, 7968c2ecf20Sopenharmony_ci { "s5", QCOM_SMD_RPM_SMPA, 5, &pma8084_hfsmps, "vdd_s5" }, 7978c2ecf20Sopenharmony_ci { "s6", QCOM_SMD_RPM_SMPA, 6, &pma8084_ftsmps, "vdd_s6" }, 7988c2ecf20Sopenharmony_ci { "s7", QCOM_SMD_RPM_SMPA, 7, &pma8084_ftsmps, "vdd_s7" }, 7998c2ecf20Sopenharmony_ci { "s8", QCOM_SMD_RPM_SMPA, 8, &pma8084_ftsmps, "vdd_s8" }, 8008c2ecf20Sopenharmony_ci { "s9", QCOM_SMD_RPM_SMPA, 9, &pma8084_ftsmps, "vdd_s9" }, 8018c2ecf20Sopenharmony_ci { "s10", QCOM_SMD_RPM_SMPA, 10, &pma8084_ftsmps, "vdd_s10" }, 8028c2ecf20Sopenharmony_ci { "s11", QCOM_SMD_RPM_SMPA, 11, &pma8084_ftsmps, "vdd_s11" }, 8038c2ecf20Sopenharmony_ci { "s12", QCOM_SMD_RPM_SMPA, 12, &pma8084_ftsmps, "vdd_s12" }, 8048c2ecf20Sopenharmony_ci 8058c2ecf20Sopenharmony_ci { "l1", QCOM_SMD_RPM_LDOA, 1, &pma8084_nldo, "vdd_l1_l11" }, 8068c2ecf20Sopenharmony_ci { "l2", QCOM_SMD_RPM_LDOA, 2, &pma8084_nldo, "vdd_l2_l3_l4_l27" }, 8078c2ecf20Sopenharmony_ci { "l3", QCOM_SMD_RPM_LDOA, 3, &pma8084_nldo, "vdd_l2_l3_l4_l27" }, 8088c2ecf20Sopenharmony_ci { "l4", QCOM_SMD_RPM_LDOA, 4, &pma8084_nldo, "vdd_l2_l3_l4_l27" }, 8098c2ecf20Sopenharmony_ci { "l5", QCOM_SMD_RPM_LDOA, 5, &pma8084_pldo, "vdd_l5_l7" }, 8108c2ecf20Sopenharmony_ci { "l6", QCOM_SMD_RPM_LDOA, 6, &pma8084_pldo, "vdd_l6_l12_l14_l15_l26" }, 8118c2ecf20Sopenharmony_ci { "l7", QCOM_SMD_RPM_LDOA, 7, &pma8084_pldo, "vdd_l5_l7" }, 8128c2ecf20Sopenharmony_ci { "l8", QCOM_SMD_RPM_LDOA, 8, &pma8084_pldo, "vdd_l8" }, 8138c2ecf20Sopenharmony_ci { "l9", QCOM_SMD_RPM_LDOA, 9, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" }, 8148c2ecf20Sopenharmony_ci { "l10", QCOM_SMD_RPM_LDOA, 10, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" }, 8158c2ecf20Sopenharmony_ci { "l11", QCOM_SMD_RPM_LDOA, 11, &pma8084_nldo, "vdd_l1_l11" }, 8168c2ecf20Sopenharmony_ci { "l12", QCOM_SMD_RPM_LDOA, 12, &pma8084_pldo, "vdd_l6_l12_l14_l15_l26" }, 8178c2ecf20Sopenharmony_ci { "l13", QCOM_SMD_RPM_LDOA, 13, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" }, 8188c2ecf20Sopenharmony_ci { "l14", QCOM_SMD_RPM_LDOA, 14, &pma8084_pldo, "vdd_l6_l12_l14_l15_l26" }, 8198c2ecf20Sopenharmony_ci { "l15", QCOM_SMD_RPM_LDOA, 15, &pma8084_pldo, "vdd_l6_l12_l14_l15_l26" }, 8208c2ecf20Sopenharmony_ci { "l16", QCOM_SMD_RPM_LDOA, 16, &pma8084_pldo, "vdd_l16_l25" }, 8218c2ecf20Sopenharmony_ci { "l17", QCOM_SMD_RPM_LDOA, 17, &pma8084_pldo, "vdd_l17" }, 8228c2ecf20Sopenharmony_ci { "l18", QCOM_SMD_RPM_LDOA, 18, &pma8084_pldo, "vdd_l18" }, 8238c2ecf20Sopenharmony_ci { "l19", QCOM_SMD_RPM_LDOA, 19, &pma8084_pldo, "vdd_l19" }, 8248c2ecf20Sopenharmony_ci { "l20", QCOM_SMD_RPM_LDOA, 20, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" }, 8258c2ecf20Sopenharmony_ci { "l21", QCOM_SMD_RPM_LDOA, 21, &pma8084_pldo, "vdd_l21" }, 8268c2ecf20Sopenharmony_ci { "l22", QCOM_SMD_RPM_LDOA, 22, &pma8084_pldo, "vdd_l22" }, 8278c2ecf20Sopenharmony_ci { "l23", QCOM_SMD_RPM_LDOA, 23, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" }, 8288c2ecf20Sopenharmony_ci { "l24", QCOM_SMD_RPM_LDOA, 24, &pma8084_pldo, "vdd_l9_l10_l13_l20_l23_l24" }, 8298c2ecf20Sopenharmony_ci { "l25", QCOM_SMD_RPM_LDOA, 25, &pma8084_pldo, "vdd_l16_l25" }, 8308c2ecf20Sopenharmony_ci { "l26", QCOM_SMD_RPM_LDOA, 26, &pma8084_pldo, "vdd_l6_l12_l14_l15_l26" }, 8318c2ecf20Sopenharmony_ci { "l27", QCOM_SMD_RPM_LDOA, 27, &pma8084_nldo, "vdd_l2_l3_l4_l27" }, 8328c2ecf20Sopenharmony_ci 8338c2ecf20Sopenharmony_ci { "lvs1", QCOM_SMD_RPM_VSA, 1, &pma8084_switch }, 8348c2ecf20Sopenharmony_ci { "lvs2", QCOM_SMD_RPM_VSA, 2, &pma8084_switch }, 8358c2ecf20Sopenharmony_ci { "lvs3", QCOM_SMD_RPM_VSA, 3, &pma8084_switch }, 8368c2ecf20Sopenharmony_ci { "lvs4", QCOM_SMD_RPM_VSA, 4, &pma8084_switch }, 8378c2ecf20Sopenharmony_ci { "5vs1", QCOM_SMD_RPM_VSA, 5, &pma8084_switch }, 8388c2ecf20Sopenharmony_ci 8398c2ecf20Sopenharmony_ci {} 8408c2ecf20Sopenharmony_ci}; 8418c2ecf20Sopenharmony_ci 8428c2ecf20Sopenharmony_cistatic const struct rpm_regulator_data rpm_pm8950_regulators[] = { 8438c2ecf20Sopenharmony_ci { "s1", QCOM_SMD_RPM_SMPA, 1, &pm8950_hfsmps, "vdd_s1" }, 8448c2ecf20Sopenharmony_ci { "s2", QCOM_SMD_RPM_SMPA, 2, &pm8950_hfsmps, "vdd_s2" }, 8458c2ecf20Sopenharmony_ci { "s3", QCOM_SMD_RPM_SMPA, 3, &pm8950_hfsmps, "vdd_s3" }, 8468c2ecf20Sopenharmony_ci { "s4", QCOM_SMD_RPM_SMPA, 4, &pm8950_hfsmps, "vdd_s4" }, 8478c2ecf20Sopenharmony_ci /* S5 is managed via SPMI. */ 8488c2ecf20Sopenharmony_ci { "s6", QCOM_SMD_RPM_SMPA, 6, &pm8950_hfsmps, "vdd_s6" }, 8498c2ecf20Sopenharmony_ci 8508c2ecf20Sopenharmony_ci { "l1", QCOM_SMD_RPM_LDOA, 1, &pm8950_ult_nldo, "vdd_l1_l19" }, 8518c2ecf20Sopenharmony_ci { "l2", QCOM_SMD_RPM_LDOA, 2, &pm8950_ult_nldo, "vdd_l2_l23" }, 8528c2ecf20Sopenharmony_ci { "l3", QCOM_SMD_RPM_LDOA, 3, &pm8950_ult_nldo, "vdd_l3" }, 8538c2ecf20Sopenharmony_ci /* L4 seems not to exist. */ 8548c2ecf20Sopenharmony_ci { "l5", QCOM_SMD_RPM_LDOA, 5, &pm8950_pldo_lv, "vdd_l5_l6_l7_l16" }, 8558c2ecf20Sopenharmony_ci { "l6", QCOM_SMD_RPM_LDOA, 6, &pm8950_pldo_lv, "vdd_l5_l6_l7_l16" }, 8568c2ecf20Sopenharmony_ci { "l7", QCOM_SMD_RPM_LDOA, 7, &pm8950_pldo_lv, "vdd_l5_l6_l7_l16" }, 8578c2ecf20Sopenharmony_ci { "l8", QCOM_SMD_RPM_LDOA, 8, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" }, 8588c2ecf20Sopenharmony_ci { "l9", QCOM_SMD_RPM_LDOA, 9, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" }, 8598c2ecf20Sopenharmony_ci { "l10", QCOM_SMD_RPM_LDOA, 10, &pm8950_ult_nldo, "vdd_l9_l10_l13_l14_l15_l18"}, 8608c2ecf20Sopenharmony_ci { "l11", QCOM_SMD_RPM_LDOA, 11, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" }, 8618c2ecf20Sopenharmony_ci { "l12", QCOM_SMD_RPM_LDOA, 12, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" }, 8628c2ecf20Sopenharmony_ci { "l13", QCOM_SMD_RPM_LDOA, 13, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" }, 8638c2ecf20Sopenharmony_ci { "l14", QCOM_SMD_RPM_LDOA, 14, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" }, 8648c2ecf20Sopenharmony_ci { "l15", QCOM_SMD_RPM_LDOA, 15, &pm8950_ult_pldo, "vdd_l9_l10_l13_l14_l15_l18" }, 8658c2ecf20Sopenharmony_ci { "l16", QCOM_SMD_RPM_LDOA, 16, &pm8950_ult_pldo, "vdd_l5_l6_l7_l16" }, 8668c2ecf20Sopenharmony_ci { "l17", QCOM_SMD_RPM_LDOA, 17, &pm8950_ult_pldo, "vdd_l8_l11_l12_l17_l22" }, 8678c2ecf20Sopenharmony_ci /* L18 seems not to exist. */ 8688c2ecf20Sopenharmony_ci { "l19", QCOM_SMD_RPM_LDOA, 19, &pm8950_pldo, "vdd_l1_l19" }, 8698c2ecf20Sopenharmony_ci /* L20 & L21 seem not to exist. */ 8708c2ecf20Sopenharmony_ci { "l22", QCOM_SMD_RPM_LDOA, 22, &pm8950_pldo, "vdd_l8_l11_l12_l17_l22" }, 8718c2ecf20Sopenharmony_ci { "l23", QCOM_SMD_RPM_LDOA, 23, &pm8950_pldo, "vdd_l2_l23" }, 8728c2ecf20Sopenharmony_ci {} 8738c2ecf20Sopenharmony_ci}; 8748c2ecf20Sopenharmony_ci 8758c2ecf20Sopenharmony_cistatic const struct rpm_regulator_data rpm_pm8953_regulators[] = { 8768c2ecf20Sopenharmony_ci { "s1", QCOM_SMD_RPM_SMPA, 1, &pm8998_hfsmps, "vdd_s1" }, 8778c2ecf20Sopenharmony_ci { "s2", QCOM_SMD_RPM_SMPA, 2, &pm8998_hfsmps, "vdd_s2" }, 8788c2ecf20Sopenharmony_ci { "s3", QCOM_SMD_RPM_SMPA, 3, &pm8998_hfsmps, "vdd_s3" }, 8798c2ecf20Sopenharmony_ci { "s4", QCOM_SMD_RPM_SMPA, 4, &pm8998_hfsmps, "vdd_s4" }, 8808c2ecf20Sopenharmony_ci { "s5", QCOM_SMD_RPM_SMPA, 5, &pm8950_ftsmps2p5, "vdd_s5" }, 8818c2ecf20Sopenharmony_ci { "s6", QCOM_SMD_RPM_SMPA, 6, &pm8950_ftsmps2p5, "vdd_s6" }, 8828c2ecf20Sopenharmony_ci { "s7", QCOM_SMD_RPM_SMPA, 7, &pm8998_hfsmps, "vdd_s7" }, 8838c2ecf20Sopenharmony_ci 8848c2ecf20Sopenharmony_ci { "l1", QCOM_SMD_RPM_LDOA, 1, &pm8953_ult_nldo, "vdd_l1" }, 8858c2ecf20Sopenharmony_ci { "l2", QCOM_SMD_RPM_LDOA, 2, &pm8953_ult_nldo, "vdd_l2_l3" }, 8868c2ecf20Sopenharmony_ci { "l3", QCOM_SMD_RPM_LDOA, 3, &pm8953_ult_nldo, "vdd_l2_l3" }, 8878c2ecf20Sopenharmony_ci { "l4", QCOM_SMD_RPM_LDOA, 4, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" }, 8888c2ecf20Sopenharmony_ci { "l5", QCOM_SMD_RPM_LDOA, 5, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" }, 8898c2ecf20Sopenharmony_ci { "l6", QCOM_SMD_RPM_LDOA, 6, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" }, 8908c2ecf20Sopenharmony_ci { "l7", QCOM_SMD_RPM_LDOA, 7, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" }, 8918c2ecf20Sopenharmony_ci { "l8", QCOM_SMD_RPM_LDOA, 8, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" }, 8928c2ecf20Sopenharmony_ci { "l9", QCOM_SMD_RPM_LDOA, 9, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" }, 8938c2ecf20Sopenharmony_ci { "l10", QCOM_SMD_RPM_LDOA, 10, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" }, 8948c2ecf20Sopenharmony_ci { "l11", QCOM_SMD_RPM_LDOA, 11, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" }, 8958c2ecf20Sopenharmony_ci { "l12", QCOM_SMD_RPM_LDOA, 12, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" }, 8968c2ecf20Sopenharmony_ci { "l13", QCOM_SMD_RPM_LDOA, 13, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" }, 8978c2ecf20Sopenharmony_ci { "l14", QCOM_SMD_RPM_LDOA, 14, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" }, 8988c2ecf20Sopenharmony_ci { "l15", QCOM_SMD_RPM_LDOA, 15, &pm8950_ult_pldo, "vdd_l8_l11_l12_l13_l14_l15" }, 8998c2ecf20Sopenharmony_ci { "l16", QCOM_SMD_RPM_LDOA, 16, &pm8950_ult_pldo, "vdd_l4_l5_l6_l7_l16_l19" }, 9008c2ecf20Sopenharmony_ci { "l17", QCOM_SMD_RPM_LDOA, 17, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" }, 9018c2ecf20Sopenharmony_ci { "l18", QCOM_SMD_RPM_LDOA, 18, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" }, 9028c2ecf20Sopenharmony_ci { "l19", QCOM_SMD_RPM_LDOA, 19, &pm8953_ult_nldo, "vdd_l4_l5_l6_l7_l16_l19" }, 9038c2ecf20Sopenharmony_ci { "l20", QCOM_SMD_RPM_LDOA, 20, &pm8953_lnldo, "vdd_l20" }, 9048c2ecf20Sopenharmony_ci { "l21", QCOM_SMD_RPM_LDOA, 21, &pm8953_lnldo, "vdd_l21" }, 9058c2ecf20Sopenharmony_ci { "l22", QCOM_SMD_RPM_LDOA, 22, &pm8950_ult_pldo, "vdd_l9_l10_l17_l18_l22" }, 9068c2ecf20Sopenharmony_ci { "l23", QCOM_SMD_RPM_LDOA, 23, &pm8953_ult_nldo, "vdd_l23" }, 9078c2ecf20Sopenharmony_ci {} 9088c2ecf20Sopenharmony_ci}; 9098c2ecf20Sopenharmony_ci 9108c2ecf20Sopenharmony_cistatic const struct rpm_regulator_data rpm_pm8994_regulators[] = { 9118c2ecf20Sopenharmony_ci { "s1", QCOM_SMD_RPM_SMPA, 1, &pm8994_ftsmps, "vdd_s1" }, 9128c2ecf20Sopenharmony_ci { "s2", QCOM_SMD_RPM_SMPA, 2, &pm8994_ftsmps, "vdd_s2" }, 9138c2ecf20Sopenharmony_ci { "s3", QCOM_SMD_RPM_SMPA, 3, &pm8994_hfsmps, "vdd_s3" }, 9148c2ecf20Sopenharmony_ci { "s4", QCOM_SMD_RPM_SMPA, 4, &pm8994_hfsmps, "vdd_s4" }, 9158c2ecf20Sopenharmony_ci { "s5", QCOM_SMD_RPM_SMPA, 5, &pm8994_hfsmps, "vdd_s5" }, 9168c2ecf20Sopenharmony_ci { "s6", QCOM_SMD_RPM_SMPA, 6, &pm8994_ftsmps, "vdd_s6" }, 9178c2ecf20Sopenharmony_ci { "s7", QCOM_SMD_RPM_SMPA, 7, &pm8994_hfsmps, "vdd_s7" }, 9188c2ecf20Sopenharmony_ci { "s8", QCOM_SMD_RPM_SMPA, 8, &pm8994_ftsmps, "vdd_s8" }, 9198c2ecf20Sopenharmony_ci { "s9", QCOM_SMD_RPM_SMPA, 9, &pm8994_ftsmps, "vdd_s9" }, 9208c2ecf20Sopenharmony_ci { "s10", QCOM_SMD_RPM_SMPA, 10, &pm8994_ftsmps, "vdd_s10" }, 9218c2ecf20Sopenharmony_ci { "s11", QCOM_SMD_RPM_SMPA, 11, &pm8994_ftsmps, "vdd_s11" }, 9228c2ecf20Sopenharmony_ci { "s12", QCOM_SMD_RPM_SMPA, 12, &pm8994_ftsmps, "vdd_s12" }, 9238c2ecf20Sopenharmony_ci { "l1", QCOM_SMD_RPM_LDOA, 1, &pm8994_nldo, "vdd_l1" }, 9248c2ecf20Sopenharmony_ci { "l2", QCOM_SMD_RPM_LDOA, 2, &pm8994_nldo, "vdd_l2_l26_l28" }, 9258c2ecf20Sopenharmony_ci { "l3", QCOM_SMD_RPM_LDOA, 3, &pm8994_nldo, "vdd_l3_l11" }, 9268c2ecf20Sopenharmony_ci { "l4", QCOM_SMD_RPM_LDOA, 4, &pm8994_nldo, "vdd_l4_l27_l31" }, 9278c2ecf20Sopenharmony_ci { "l5", QCOM_SMD_RPM_LDOA, 5, &pm8994_lnldo, "vdd_l5_l7" }, 9288c2ecf20Sopenharmony_ci { "l6", QCOM_SMD_RPM_LDOA, 6, &pm8994_pldo, "vdd_l6_l12_l32" }, 9298c2ecf20Sopenharmony_ci { "l7", QCOM_SMD_RPM_LDOA, 7, &pm8994_lnldo, "vdd_l5_l7" }, 9308c2ecf20Sopenharmony_ci { "l8", QCOM_SMD_RPM_LDOA, 8, &pm8994_pldo, "vdd_l8_l16_l30" }, 9318c2ecf20Sopenharmony_ci { "l9", QCOM_SMD_RPM_LDOA, 9, &pm8994_pldo, "vdd_l9_l10_l18_l22" }, 9328c2ecf20Sopenharmony_ci { "l10", QCOM_SMD_RPM_LDOA, 10, &pm8994_pldo, "vdd_l9_l10_l18_l22" }, 9338c2ecf20Sopenharmony_ci { "l11", QCOM_SMD_RPM_LDOA, 11, &pm8994_nldo, "vdd_l3_l11" }, 9348c2ecf20Sopenharmony_ci { "l12", QCOM_SMD_RPM_LDOA, 12, &pm8994_pldo, "vdd_l6_l12_l32" }, 9358c2ecf20Sopenharmony_ci { "l13", QCOM_SMD_RPM_LDOA, 13, &pm8994_pldo, "vdd_l13_l19_l23_l24" }, 9368c2ecf20Sopenharmony_ci { "l14", QCOM_SMD_RPM_LDOA, 14, &pm8994_pldo, "vdd_l14_l15" }, 9378c2ecf20Sopenharmony_ci { "l15", QCOM_SMD_RPM_LDOA, 15, &pm8994_pldo, "vdd_l14_l15" }, 9388c2ecf20Sopenharmony_ci { "l16", QCOM_SMD_RPM_LDOA, 16, &pm8994_pldo, "vdd_l8_l16_l30" }, 9398c2ecf20Sopenharmony_ci { "l17", QCOM_SMD_RPM_LDOA, 17, &pm8994_pldo, "vdd_l17_l29" }, 9408c2ecf20Sopenharmony_ci { "l18", QCOM_SMD_RPM_LDOA, 18, &pm8994_pldo, "vdd_l9_l10_l18_l22" }, 9418c2ecf20Sopenharmony_ci { "l19", QCOM_SMD_RPM_LDOA, 19, &pm8994_pldo, "vdd_l13_l19_l23_l24" }, 9428c2ecf20Sopenharmony_ci { "l20", QCOM_SMD_RPM_LDOA, 20, &pm8994_pldo, "vdd_l20_l21" }, 9438c2ecf20Sopenharmony_ci { "l21", QCOM_SMD_RPM_LDOA, 21, &pm8994_pldo, "vdd_l20_l21" }, 9448c2ecf20Sopenharmony_ci { "l22", QCOM_SMD_RPM_LDOA, 22, &pm8994_pldo, "vdd_l9_l10_l18_l22" }, 9458c2ecf20Sopenharmony_ci { "l23", QCOM_SMD_RPM_LDOA, 23, &pm8994_pldo, "vdd_l13_l19_l23_l24" }, 9468c2ecf20Sopenharmony_ci { "l24", QCOM_SMD_RPM_LDOA, 24, &pm8994_pldo, "vdd_l13_l19_l23_l24" }, 9478c2ecf20Sopenharmony_ci { "l25", QCOM_SMD_RPM_LDOA, 25, &pm8994_pldo, "vdd_l25" }, 9488c2ecf20Sopenharmony_ci { "l26", QCOM_SMD_RPM_LDOA, 26, &pm8994_nldo, "vdd_l2_l26_l28" }, 9498c2ecf20Sopenharmony_ci { "l27", QCOM_SMD_RPM_LDOA, 27, &pm8994_nldo, "vdd_l4_l27_l31" }, 9508c2ecf20Sopenharmony_ci { "l28", QCOM_SMD_RPM_LDOA, 28, &pm8994_nldo, "vdd_l2_l26_l28" }, 9518c2ecf20Sopenharmony_ci { "l29", QCOM_SMD_RPM_LDOA, 29, &pm8994_pldo, "vdd_l17_l29" }, 9528c2ecf20Sopenharmony_ci { "l30", QCOM_SMD_RPM_LDOA, 30, &pm8994_pldo, "vdd_l8_l16_l30" }, 9538c2ecf20Sopenharmony_ci { "l31", QCOM_SMD_RPM_LDOA, 31, &pm8994_nldo, "vdd_l4_l27_l31" }, 9548c2ecf20Sopenharmony_ci { "l32", QCOM_SMD_RPM_LDOA, 32, &pm8994_pldo, "vdd_l6_l12_l32" }, 9558c2ecf20Sopenharmony_ci { "lvs1", QCOM_SMD_RPM_VSA, 1, &pm8994_switch, "vdd_lvs1_2" }, 9568c2ecf20Sopenharmony_ci { "lvs2", QCOM_SMD_RPM_VSA, 2, &pm8994_switch, "vdd_lvs1_2" }, 9578c2ecf20Sopenharmony_ci 9588c2ecf20Sopenharmony_ci {} 9598c2ecf20Sopenharmony_ci}; 9608c2ecf20Sopenharmony_ci 9618c2ecf20Sopenharmony_cistatic const struct rpm_regulator_data rpm_pmi8994_regulators[] = { 9628c2ecf20Sopenharmony_ci { "s1", QCOM_SMD_RPM_SMPB, 1, &pmi8994_ftsmps, "vdd_s1" }, 9638c2ecf20Sopenharmony_ci { "s2", QCOM_SMD_RPM_SMPB, 2, &pmi8994_hfsmps, "vdd_s2" }, 9648c2ecf20Sopenharmony_ci { "s3", QCOM_SMD_RPM_SMPB, 3, &pmi8994_hfsmps, "vdd_s3" }, 9658c2ecf20Sopenharmony_ci { "boost-bypass", QCOM_SMD_RPM_BBYB, 1, &pmi8994_bby, "vdd_bst_byp" }, 9668c2ecf20Sopenharmony_ci {} 9678c2ecf20Sopenharmony_ci}; 9688c2ecf20Sopenharmony_ci 9698c2ecf20Sopenharmony_cistatic const struct rpm_regulator_data rpm_pm8998_regulators[] = { 9708c2ecf20Sopenharmony_ci { "s1", QCOM_SMD_RPM_SMPA, 1, &pm8998_ftsmps, "vdd_s1" }, 9718c2ecf20Sopenharmony_ci { "s2", QCOM_SMD_RPM_SMPA, 2, &pm8998_ftsmps, "vdd_s2" }, 9728c2ecf20Sopenharmony_ci { "s3", QCOM_SMD_RPM_SMPA, 3, &pm8998_hfsmps, "vdd_s3" }, 9738c2ecf20Sopenharmony_ci { "s4", QCOM_SMD_RPM_SMPA, 4, &pm8998_hfsmps, "vdd_s4" }, 9748c2ecf20Sopenharmony_ci { "s5", QCOM_SMD_RPM_SMPA, 5, &pm8998_hfsmps, "vdd_s5" }, 9758c2ecf20Sopenharmony_ci { "s6", QCOM_SMD_RPM_SMPA, 6, &pm8998_ftsmps, "vdd_s6" }, 9768c2ecf20Sopenharmony_ci { "s7", QCOM_SMD_RPM_SMPA, 7, &pm8998_ftsmps, "vdd_s7" }, 9778c2ecf20Sopenharmony_ci { "s8", QCOM_SMD_RPM_SMPA, 8, &pm8998_ftsmps, "vdd_s8" }, 9788c2ecf20Sopenharmony_ci { "s9", QCOM_SMD_RPM_SMPA, 9, &pm8998_ftsmps, "vdd_s9" }, 9798c2ecf20Sopenharmony_ci { "s10", QCOM_SMD_RPM_SMPA, 10, &pm8998_ftsmps, "vdd_s10" }, 9808c2ecf20Sopenharmony_ci { "s11", QCOM_SMD_RPM_SMPA, 11, &pm8998_ftsmps, "vdd_s11" }, 9818c2ecf20Sopenharmony_ci { "s12", QCOM_SMD_RPM_SMPA, 12, &pm8998_ftsmps, "vdd_s12" }, 9828c2ecf20Sopenharmony_ci { "s13", QCOM_SMD_RPM_SMPA, 13, &pm8998_ftsmps, "vdd_s13" }, 9838c2ecf20Sopenharmony_ci { "l1", QCOM_SMD_RPM_LDOA, 1, &pm8998_nldo, "vdd_l1_l27" }, 9848c2ecf20Sopenharmony_ci { "l2", QCOM_SMD_RPM_LDOA, 2, &pm8998_nldo, "vdd_l2_l8_l17" }, 9858c2ecf20Sopenharmony_ci { "l3", QCOM_SMD_RPM_LDOA, 3, &pm8998_nldo, "vdd_l3_l11" }, 9868c2ecf20Sopenharmony_ci { "l4", QCOM_SMD_RPM_LDOA, 4, &pm8998_nldo, "vdd_l4_l5" }, 9878c2ecf20Sopenharmony_ci { "l5", QCOM_SMD_RPM_LDOA, 5, &pm8998_nldo, "vdd_l4_l5" }, 9888c2ecf20Sopenharmony_ci { "l6", QCOM_SMD_RPM_LDOA, 6, &pm8998_pldo, "vdd_l6" }, 9898c2ecf20Sopenharmony_ci { "l7", QCOM_SMD_RPM_LDOA, 7, &pm8998_pldo_lv, "vdd_l7_l12_l14_l15" }, 9908c2ecf20Sopenharmony_ci { "l8", QCOM_SMD_RPM_LDOA, 8, &pm8998_nldo, "vdd_l2_l8_l17" }, 9918c2ecf20Sopenharmony_ci { "l9", QCOM_SMD_RPM_LDOA, 9, &pm8998_pldo, "vdd_l9" }, 9928c2ecf20Sopenharmony_ci { "l10", QCOM_SMD_RPM_LDOA, 10, &pm8998_pldo, "vdd_l10_l23_l25" }, 9938c2ecf20Sopenharmony_ci { "l11", QCOM_SMD_RPM_LDOA, 11, &pm8998_nldo, "vdd_l3_l11" }, 9948c2ecf20Sopenharmony_ci { "l12", QCOM_SMD_RPM_LDOA, 12, &pm8998_pldo_lv, "vdd_l7_l12_l14_l15" }, 9958c2ecf20Sopenharmony_ci { "l13", QCOM_SMD_RPM_LDOA, 13, &pm8998_pldo, "vdd_l13_l19_l21" }, 9968c2ecf20Sopenharmony_ci { "l14", QCOM_SMD_RPM_LDOA, 14, &pm8998_pldo_lv, "vdd_l7_l12_l14_l15" }, 9978c2ecf20Sopenharmony_ci { "l15", QCOM_SMD_RPM_LDOA, 15, &pm8998_pldo_lv, "vdd_l7_l12_l14_l15" }, 9988c2ecf20Sopenharmony_ci { "l16", QCOM_SMD_RPM_LDOA, 16, &pm8998_pldo, "vdd_l16_l28" }, 9998c2ecf20Sopenharmony_ci { "l17", QCOM_SMD_RPM_LDOA, 17, &pm8998_nldo, "vdd_l2_l8_l17" }, 10008c2ecf20Sopenharmony_ci { "l18", QCOM_SMD_RPM_LDOA, 18, &pm8998_pldo, "vdd_l18_l22" }, 10018c2ecf20Sopenharmony_ci { "l19", QCOM_SMD_RPM_LDOA, 19, &pm8998_pldo, "vdd_l13_l19_l21" }, 10028c2ecf20Sopenharmony_ci { "l20", QCOM_SMD_RPM_LDOA, 20, &pm8998_pldo, "vdd_l20_l24" }, 10038c2ecf20Sopenharmony_ci { "l21", QCOM_SMD_RPM_LDOA, 21, &pm8998_pldo, "vdd_l13_l19_l21" }, 10048c2ecf20Sopenharmony_ci { "l22", QCOM_SMD_RPM_LDOA, 22, &pm8998_pldo, "vdd_l18_l22" }, 10058c2ecf20Sopenharmony_ci { "l23", QCOM_SMD_RPM_LDOA, 23, &pm8998_pldo, "vdd_l10_l23_l25" }, 10068c2ecf20Sopenharmony_ci { "l24", QCOM_SMD_RPM_LDOA, 24, &pm8998_pldo, "vdd_l20_l24" }, 10078c2ecf20Sopenharmony_ci { "l25", QCOM_SMD_RPM_LDOA, 25, &pm8998_pldo, "vdd_l10_l23_l25" }, 10088c2ecf20Sopenharmony_ci { "l26", QCOM_SMD_RPM_LDOA, 26, &pm8998_nldo, "vdd_l26" }, 10098c2ecf20Sopenharmony_ci { "l27", QCOM_SMD_RPM_LDOA, 27, &pm8998_nldo, "vdd_l1_l27" }, 10108c2ecf20Sopenharmony_ci { "l28", QCOM_SMD_RPM_LDOA, 28, &pm8998_pldo, "vdd_l16_l28" }, 10118c2ecf20Sopenharmony_ci { "lvs1", QCOM_SMD_RPM_VSA, 1, &pm8998_switch, "vdd_lvs1_lvs2" }, 10128c2ecf20Sopenharmony_ci { "lvs2", QCOM_SMD_RPM_VSA, 2, &pm8998_switch, "vdd_lvs1_lvs2" }, 10138c2ecf20Sopenharmony_ci {} 10148c2ecf20Sopenharmony_ci}; 10158c2ecf20Sopenharmony_ci 10168c2ecf20Sopenharmony_cistatic const struct rpm_regulator_data rpm_pmi8998_regulators[] = { 10178c2ecf20Sopenharmony_ci { "bob", QCOM_SMD_RPM_BOBB, 1, &pmi8998_bob, "vdd_bob" }, 10188c2ecf20Sopenharmony_ci {} 10198c2ecf20Sopenharmony_ci}; 10208c2ecf20Sopenharmony_ci 10218c2ecf20Sopenharmony_cistatic const struct rpm_regulator_data rpm_pm660_regulators[] = { 10228c2ecf20Sopenharmony_ci { "s1", QCOM_SMD_RPM_SMPA, 1, &pm660_ftsmps, "vdd_s1" }, 10238c2ecf20Sopenharmony_ci { "s2", QCOM_SMD_RPM_SMPA, 2, &pm660_ftsmps, "vdd_s2" }, 10248c2ecf20Sopenharmony_ci { "s3", QCOM_SMD_RPM_SMPA, 3, &pm660_ftsmps, "vdd_s3" }, 10258c2ecf20Sopenharmony_ci { "s4", QCOM_SMD_RPM_SMPA, 4, &pm660_hfsmps, "vdd_s4" }, 10268c2ecf20Sopenharmony_ci { "s5", QCOM_SMD_RPM_SMPA, 5, &pm660_hfsmps, "vdd_s5" }, 10278c2ecf20Sopenharmony_ci { "s6", QCOM_SMD_RPM_SMPA, 6, &pm660_hfsmps, "vdd_s6" }, 10288c2ecf20Sopenharmony_ci { "l1", QCOM_SMD_RPM_LDOA, 1, &pm660_nldo660, "vdd_l1_l6_l7" }, 10298c2ecf20Sopenharmony_ci { "l2", QCOM_SMD_RPM_LDOA, 2, &pm660_ht_nldo, "vdd_l2_l3" }, 10308c2ecf20Sopenharmony_ci { "l3", QCOM_SMD_RPM_LDOA, 3, &pm660_nldo660, "vdd_l2_l3" }, 10318c2ecf20Sopenharmony_ci /* l4 is unaccessible on PM660 */ 10328c2ecf20Sopenharmony_ci { "l5", QCOM_SMD_RPM_LDOA, 5, &pm660_ht_nldo, "vdd_l5" }, 10338c2ecf20Sopenharmony_ci { "l6", QCOM_SMD_RPM_LDOA, 6, &pm660_ht_nldo, "vdd_l1_l6_l7" }, 10348c2ecf20Sopenharmony_ci { "l7", QCOM_SMD_RPM_LDOA, 7, &pm660_ht_nldo, "vdd_l1_l6_l7" }, 10358c2ecf20Sopenharmony_ci { "l8", QCOM_SMD_RPM_LDOA, 8, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" }, 10368c2ecf20Sopenharmony_ci { "l9", QCOM_SMD_RPM_LDOA, 9, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" }, 10378c2ecf20Sopenharmony_ci { "l10", QCOM_SMD_RPM_LDOA, 10, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" }, 10388c2ecf20Sopenharmony_ci { "l11", QCOM_SMD_RPM_LDOA, 11, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" }, 10398c2ecf20Sopenharmony_ci { "l12", QCOM_SMD_RPM_LDOA, 12, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" }, 10408c2ecf20Sopenharmony_ci { "l13", QCOM_SMD_RPM_LDOA, 13, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" }, 10418c2ecf20Sopenharmony_ci { "l14", QCOM_SMD_RPM_LDOA, 14, &pm660_ht_lvpldo, "vdd_l8_l9_l10_l11_l12_l13_l14" }, 10428c2ecf20Sopenharmony_ci { "l15", QCOM_SMD_RPM_LDOA, 15, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" }, 10438c2ecf20Sopenharmony_ci { "l16", QCOM_SMD_RPM_LDOA, 16, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" }, 10448c2ecf20Sopenharmony_ci { "l17", QCOM_SMD_RPM_LDOA, 17, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" }, 10458c2ecf20Sopenharmony_ci { "l18", QCOM_SMD_RPM_LDOA, 18, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" }, 10468c2ecf20Sopenharmony_ci { "l19", QCOM_SMD_RPM_LDOA, 19, &pm660_pldo660, "vdd_l15_l16_l17_l18_l19" }, 10478c2ecf20Sopenharmony_ci { } 10488c2ecf20Sopenharmony_ci}; 10498c2ecf20Sopenharmony_ci 10508c2ecf20Sopenharmony_cistatic const struct rpm_regulator_data rpm_pm660l_regulators[] = { 10518c2ecf20Sopenharmony_ci { "s1", QCOM_SMD_RPM_SMPB, 1, &pm660_ftsmps, "vdd_s1" }, 10528c2ecf20Sopenharmony_ci { "s2", QCOM_SMD_RPM_SMPB, 2, &pm660_ftsmps, "vdd_s2" }, 10538c2ecf20Sopenharmony_ci { "s3", QCOM_SMD_RPM_RWCX, 0, &pm660_ftsmps, "vdd_s3_s4" }, 10548c2ecf20Sopenharmony_ci { "s5", QCOM_SMD_RPM_RWMX, 0, &pm660_ftsmps, "vdd_s5" }, 10558c2ecf20Sopenharmony_ci { "l1", QCOM_SMD_RPM_LDOB, 1, &pm660_nldo660, "vdd_l1_l9_l10" }, 10568c2ecf20Sopenharmony_ci { "l2", QCOM_SMD_RPM_LDOB, 2, &pm660_pldo660, "vdd_l2" }, 10578c2ecf20Sopenharmony_ci { "l3", QCOM_SMD_RPM_LDOB, 3, &pm660_pldo660, "vdd_l3_l5_l7_l8" }, 10588c2ecf20Sopenharmony_ci { "l4", QCOM_SMD_RPM_LDOB, 4, &pm660_pldo660, "vdd_l4_l6" }, 10598c2ecf20Sopenharmony_ci { "l5", QCOM_SMD_RPM_LDOB, 5, &pm660_pldo660, "vdd_l3_l5_l7_l8" }, 10608c2ecf20Sopenharmony_ci { "l6", QCOM_SMD_RPM_LDOB, 6, &pm660_pldo660, "vdd_l4_l6" }, 10618c2ecf20Sopenharmony_ci { "l7", QCOM_SMD_RPM_LDOB, 7, &pm660_pldo660, "vdd_l3_l5_l7_l8" }, 10628c2ecf20Sopenharmony_ci { "l8", QCOM_SMD_RPM_LDOB, 8, &pm660_pldo660, "vdd_l3_l5_l7_l8" }, 10638c2ecf20Sopenharmony_ci { "l9", QCOM_SMD_RPM_RWLC, 0, &pm660_ht_nldo, "vdd_l1_l9_l10" }, 10648c2ecf20Sopenharmony_ci { "l10", QCOM_SMD_RPM_RWLM, 0, &pm660_ht_nldo, "vdd_l1_l9_l10" }, 10658c2ecf20Sopenharmony_ci { "bob", QCOM_SMD_RPM_BOBB, 1, &pm660l_bob, "vdd_bob", }, 10668c2ecf20Sopenharmony_ci { } 10678c2ecf20Sopenharmony_ci}; 10688c2ecf20Sopenharmony_ci 10698c2ecf20Sopenharmony_cistatic const struct rpm_regulator_data rpm_pms405_regulators[] = { 10708c2ecf20Sopenharmony_ci { "s1", QCOM_SMD_RPM_SMPA, 1, &pms405_hfsmps3, "vdd_s1" }, 10718c2ecf20Sopenharmony_ci { "s2", QCOM_SMD_RPM_SMPA, 2, &pms405_hfsmps3, "vdd_s2" }, 10728c2ecf20Sopenharmony_ci { "s3", QCOM_SMD_RPM_SMPA, 3, &pms405_hfsmps3, "vdd_s3" }, 10738c2ecf20Sopenharmony_ci { "s4", QCOM_SMD_RPM_SMPA, 4, &pms405_hfsmps3, "vdd_s4" }, 10748c2ecf20Sopenharmony_ci { "s5", QCOM_SMD_RPM_SMPA, 5, &pms405_hfsmps3, "vdd_s5" }, 10758c2ecf20Sopenharmony_ci { "l1", QCOM_SMD_RPM_LDOA, 1, &pms405_nldo1200, "vdd_l1_l2" }, 10768c2ecf20Sopenharmony_ci { "l2", QCOM_SMD_RPM_LDOA, 2, &pms405_nldo1200, "vdd_l1_l2" }, 10778c2ecf20Sopenharmony_ci { "l3", QCOM_SMD_RPM_LDOA, 3, &pms405_nldo1200, "vdd_l3_l8" }, 10788c2ecf20Sopenharmony_ci { "l4", QCOM_SMD_RPM_LDOA, 4, &pms405_nldo300, "vdd_l4" }, 10798c2ecf20Sopenharmony_ci { "l5", QCOM_SMD_RPM_LDOA, 5, &pms405_pldo600, "vdd_l5_l6" }, 10808c2ecf20Sopenharmony_ci { "l6", QCOM_SMD_RPM_LDOA, 6, &pms405_pldo600, "vdd_l5_l6" }, 10818c2ecf20Sopenharmony_ci { "l7", QCOM_SMD_RPM_LDOA, 7, &pms405_pldo150, "vdd_l7" }, 10828c2ecf20Sopenharmony_ci { "l8", QCOM_SMD_RPM_LDOA, 8, &pms405_nldo1200, "vdd_l3_l8" }, 10838c2ecf20Sopenharmony_ci { "l9", QCOM_SMD_RPM_LDOA, 9, &pms405_nldo1200, "vdd_l9" }, 10848c2ecf20Sopenharmony_ci { "l10", QCOM_SMD_RPM_LDOA, 10, &pms405_pldo50, "vdd_l10_l11_l12_l13" }, 10858c2ecf20Sopenharmony_ci { "l11", QCOM_SMD_RPM_LDOA, 11, &pms405_pldo150, "vdd_l10_l11_l12_l13" }, 10868c2ecf20Sopenharmony_ci { "l12", QCOM_SMD_RPM_LDOA, 12, &pms405_pldo150, "vdd_l10_l11_l12_l13" }, 10878c2ecf20Sopenharmony_ci { "l13", QCOM_SMD_RPM_LDOA, 13, &pms405_pldo150, "vdd_l10_l11_l12_l13" }, 10888c2ecf20Sopenharmony_ci {} 10898c2ecf20Sopenharmony_ci}; 10908c2ecf20Sopenharmony_ci 10918c2ecf20Sopenharmony_cistatic const struct of_device_id rpm_of_match[] = { 10928c2ecf20Sopenharmony_ci { .compatible = "qcom,rpm-mp5496-regulators", .data = &rpm_mp5496_regulators }, 10938c2ecf20Sopenharmony_ci { .compatible = "qcom,rpm-pm8841-regulators", .data = &rpm_pm8841_regulators }, 10948c2ecf20Sopenharmony_ci { .compatible = "qcom,rpm-pm8916-regulators", .data = &rpm_pm8916_regulators }, 10958c2ecf20Sopenharmony_ci { .compatible = "qcom,rpm-pm8941-regulators", .data = &rpm_pm8941_regulators }, 10968c2ecf20Sopenharmony_ci { .compatible = "qcom,rpm-pm8950-regulators", .data = &rpm_pm8950_regulators }, 10978c2ecf20Sopenharmony_ci { .compatible = "qcom,rpm-pm8953-regulators", .data = &rpm_pm8953_regulators }, 10988c2ecf20Sopenharmony_ci { .compatible = "qcom,rpm-pm8994-regulators", .data = &rpm_pm8994_regulators }, 10998c2ecf20Sopenharmony_ci { .compatible = "qcom,rpm-pm8998-regulators", .data = &rpm_pm8998_regulators }, 11008c2ecf20Sopenharmony_ci { .compatible = "qcom,rpm-pm660-regulators", .data = &rpm_pm660_regulators }, 11018c2ecf20Sopenharmony_ci { .compatible = "qcom,rpm-pm660l-regulators", .data = &rpm_pm660l_regulators }, 11028c2ecf20Sopenharmony_ci { .compatible = "qcom,rpm-pma8084-regulators", .data = &rpm_pma8084_regulators }, 11038c2ecf20Sopenharmony_ci { .compatible = "qcom,rpm-pmi8994-regulators", .data = &rpm_pmi8994_regulators }, 11048c2ecf20Sopenharmony_ci { .compatible = "qcom,rpm-pmi8998-regulators", .data = &rpm_pmi8998_regulators }, 11058c2ecf20Sopenharmony_ci { .compatible = "qcom,rpm-pms405-regulators", .data = &rpm_pms405_regulators }, 11068c2ecf20Sopenharmony_ci {} 11078c2ecf20Sopenharmony_ci}; 11088c2ecf20Sopenharmony_ciMODULE_DEVICE_TABLE(of, rpm_of_match); 11098c2ecf20Sopenharmony_ci 11108c2ecf20Sopenharmony_ci/** 11118c2ecf20Sopenharmony_ci * rpm_regulator_init_vreg() - initialize all attributes of a qcom_smd-regulator 11128c2ecf20Sopenharmony_ci * @vreg: Pointer to the individual qcom_smd-regulator resource 11138c2ecf20Sopenharmony_ci * @dev: Pointer to the top level qcom_smd-regulator PMIC device 11148c2ecf20Sopenharmony_ci * @node: Pointer to the individual qcom_smd-regulator resource 11158c2ecf20Sopenharmony_ci * device node 11168c2ecf20Sopenharmony_ci * @rpm: Pointer to the rpm bus node 11178c2ecf20Sopenharmony_ci * @pmic_rpm_data: Pointer to a null-terminated array of qcom_smd-regulator 11188c2ecf20Sopenharmony_ci * resources defined for the top level PMIC device 11198c2ecf20Sopenharmony_ci * 11208c2ecf20Sopenharmony_ci * Return: 0 on success, errno on failure 11218c2ecf20Sopenharmony_ci */ 11228c2ecf20Sopenharmony_cistatic int rpm_regulator_init_vreg(struct qcom_rpm_reg *vreg, struct device *dev, 11238c2ecf20Sopenharmony_ci struct device_node *node, struct qcom_smd_rpm *rpm, 11248c2ecf20Sopenharmony_ci const struct rpm_regulator_data *pmic_rpm_data) 11258c2ecf20Sopenharmony_ci{ 11268c2ecf20Sopenharmony_ci struct regulator_config config = {}; 11278c2ecf20Sopenharmony_ci const struct rpm_regulator_data *rpm_data; 11288c2ecf20Sopenharmony_ci struct regulator_dev *rdev; 11298c2ecf20Sopenharmony_ci int ret; 11308c2ecf20Sopenharmony_ci 11318c2ecf20Sopenharmony_ci for (rpm_data = pmic_rpm_data; rpm_data->name; rpm_data++) 11328c2ecf20Sopenharmony_ci if (of_node_name_eq(node, rpm_data->name)) 11338c2ecf20Sopenharmony_ci break; 11348c2ecf20Sopenharmony_ci 11358c2ecf20Sopenharmony_ci if (!rpm_data->name) { 11368c2ecf20Sopenharmony_ci dev_err(dev, "Unknown regulator %pOFn\n", node); 11378c2ecf20Sopenharmony_ci return -EINVAL; 11388c2ecf20Sopenharmony_ci } 11398c2ecf20Sopenharmony_ci 11408c2ecf20Sopenharmony_ci vreg->dev = dev; 11418c2ecf20Sopenharmony_ci vreg->rpm = rpm; 11428c2ecf20Sopenharmony_ci vreg->type = rpm_data->type; 11438c2ecf20Sopenharmony_ci vreg->id = rpm_data->id; 11448c2ecf20Sopenharmony_ci 11458c2ecf20Sopenharmony_ci memcpy(&vreg->desc, rpm_data->desc, sizeof(vreg->desc)); 11468c2ecf20Sopenharmony_ci vreg->desc.name = rpm_data->name; 11478c2ecf20Sopenharmony_ci vreg->desc.supply_name = rpm_data->supply; 11488c2ecf20Sopenharmony_ci vreg->desc.owner = THIS_MODULE; 11498c2ecf20Sopenharmony_ci vreg->desc.type = REGULATOR_VOLTAGE; 11508c2ecf20Sopenharmony_ci vreg->desc.of_match = rpm_data->name; 11518c2ecf20Sopenharmony_ci 11528c2ecf20Sopenharmony_ci config.dev = dev; 11538c2ecf20Sopenharmony_ci config.of_node = node; 11548c2ecf20Sopenharmony_ci config.driver_data = vreg; 11558c2ecf20Sopenharmony_ci 11568c2ecf20Sopenharmony_ci rdev = devm_regulator_register(dev, &vreg->desc, &config); 11578c2ecf20Sopenharmony_ci if (IS_ERR(rdev)) { 11588c2ecf20Sopenharmony_ci ret = PTR_ERR(rdev); 11598c2ecf20Sopenharmony_ci dev_err(dev, "%pOFn: devm_regulator_register() failed, ret=%d\n", node, ret); 11608c2ecf20Sopenharmony_ci return ret; 11618c2ecf20Sopenharmony_ci } 11628c2ecf20Sopenharmony_ci 11638c2ecf20Sopenharmony_ci return 0; 11648c2ecf20Sopenharmony_ci} 11658c2ecf20Sopenharmony_ci 11668c2ecf20Sopenharmony_cistatic int rpm_reg_probe(struct platform_device *pdev) 11678c2ecf20Sopenharmony_ci{ 11688c2ecf20Sopenharmony_ci struct device *dev = &pdev->dev; 11698c2ecf20Sopenharmony_ci const struct rpm_regulator_data *vreg_data; 11708c2ecf20Sopenharmony_ci struct device_node *node; 11718c2ecf20Sopenharmony_ci struct qcom_rpm_reg *vreg; 11728c2ecf20Sopenharmony_ci struct qcom_smd_rpm *rpm; 11738c2ecf20Sopenharmony_ci int ret; 11748c2ecf20Sopenharmony_ci 11758c2ecf20Sopenharmony_ci rpm = dev_get_drvdata(pdev->dev.parent); 11768c2ecf20Sopenharmony_ci if (!rpm) { 11778c2ecf20Sopenharmony_ci dev_err(&pdev->dev, "Unable to retrieve handle to rpm\n"); 11788c2ecf20Sopenharmony_ci return -ENODEV; 11798c2ecf20Sopenharmony_ci } 11808c2ecf20Sopenharmony_ci 11818c2ecf20Sopenharmony_ci vreg_data = of_device_get_match_data(dev); 11828c2ecf20Sopenharmony_ci if (!vreg_data) 11838c2ecf20Sopenharmony_ci return -ENODEV; 11848c2ecf20Sopenharmony_ci 11858c2ecf20Sopenharmony_ci for_each_available_child_of_node(dev->of_node, node) { 11868c2ecf20Sopenharmony_ci vreg = devm_kzalloc(&pdev->dev, sizeof(*vreg), GFP_KERNEL); 11878c2ecf20Sopenharmony_ci if (!vreg) { 11888c2ecf20Sopenharmony_ci of_node_put(node); 11898c2ecf20Sopenharmony_ci return -ENOMEM; 11908c2ecf20Sopenharmony_ci } 11918c2ecf20Sopenharmony_ci 11928c2ecf20Sopenharmony_ci ret = rpm_regulator_init_vreg(vreg, dev, node, rpm, vreg_data); 11938c2ecf20Sopenharmony_ci 11948c2ecf20Sopenharmony_ci if (ret < 0) { 11958c2ecf20Sopenharmony_ci of_node_put(node); 11968c2ecf20Sopenharmony_ci return ret; 11978c2ecf20Sopenharmony_ci } 11988c2ecf20Sopenharmony_ci } 11998c2ecf20Sopenharmony_ci 12008c2ecf20Sopenharmony_ci return 0; 12018c2ecf20Sopenharmony_ci} 12028c2ecf20Sopenharmony_ci 12038c2ecf20Sopenharmony_cistatic struct platform_driver rpm_reg_driver = { 12048c2ecf20Sopenharmony_ci .probe = rpm_reg_probe, 12058c2ecf20Sopenharmony_ci .driver = { 12068c2ecf20Sopenharmony_ci .name = "qcom_rpm_smd_regulator", 12078c2ecf20Sopenharmony_ci .of_match_table = rpm_of_match, 12088c2ecf20Sopenharmony_ci }, 12098c2ecf20Sopenharmony_ci}; 12108c2ecf20Sopenharmony_ci 12118c2ecf20Sopenharmony_cistatic int __init rpm_reg_init(void) 12128c2ecf20Sopenharmony_ci{ 12138c2ecf20Sopenharmony_ci return platform_driver_register(&rpm_reg_driver); 12148c2ecf20Sopenharmony_ci} 12158c2ecf20Sopenharmony_cisubsys_initcall(rpm_reg_init); 12168c2ecf20Sopenharmony_ci 12178c2ecf20Sopenharmony_cistatic void __exit rpm_reg_exit(void) 12188c2ecf20Sopenharmony_ci{ 12198c2ecf20Sopenharmony_ci platform_driver_unregister(&rpm_reg_driver); 12208c2ecf20Sopenharmony_ci} 12218c2ecf20Sopenharmony_cimodule_exit(rpm_reg_exit) 12228c2ecf20Sopenharmony_ci 12238c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("Qualcomm RPM regulator driver"); 12248c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL v2"); 1225