^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) // Copyright (C) 2019 ROHM Semiconductors
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) // bd71828-regulator.c ROHM BD71828GW-DS1 regulator driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) //
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include <linux/delay.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #include <linux/err.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <linux/gpio.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <linux/interrupt.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/mfd/rohm-bd71828.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/of.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <linux/platform_device.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <linux/regmap.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <linux/regulator/driver.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <linux/regulator/machine.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include <linux/regulator/of_regulator.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) struct reg_init {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) unsigned int reg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) unsigned int mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) unsigned int val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) struct bd71828_regulator_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) struct regulator_desc desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) const struct rohm_dvs_config dvs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) const struct reg_init *reg_inits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) int reg_init_amnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) static const struct reg_init buck1_inits[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) * DVS Buck voltages can be changed by register values or via GPIO.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) * Use register accesses by default.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) .reg = BD71828_REG_PS_CTRL_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) .mask = BD71828_MASK_DVS_BUCK1_CTRL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) .val = BD71828_DVS_BUCK1_CTRL_I2C,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) static const struct reg_init buck2_inits[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) .reg = BD71828_REG_PS_CTRL_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) .mask = BD71828_MASK_DVS_BUCK2_CTRL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) .val = BD71828_DVS_BUCK2_CTRL_I2C,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) static const struct reg_init buck6_inits[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) .reg = BD71828_REG_PS_CTRL_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) .mask = BD71828_MASK_DVS_BUCK6_CTRL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) .val = BD71828_DVS_BUCK6_CTRL_I2C,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) static const struct reg_init buck7_inits[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) .reg = BD71828_REG_PS_CTRL_1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) .mask = BD71828_MASK_DVS_BUCK7_CTRL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) .val = BD71828_DVS_BUCK7_CTRL_I2C,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) static const struct linear_range bd71828_buck1267_volts[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) REGULATOR_LINEAR_RANGE(500000, 0x00, 0xef, 6250),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) REGULATOR_LINEAR_RANGE(2000000, 0xf0, 0xff, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) static const struct linear_range bd71828_buck3_volts[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) REGULATOR_LINEAR_RANGE(1200000, 0x00, 0x0f, 50000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) REGULATOR_LINEAR_RANGE(2000000, 0x10, 0x1f, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) static const struct linear_range bd71828_buck4_volts[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) REGULATOR_LINEAR_RANGE(1000000, 0x00, 0x1f, 25000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) REGULATOR_LINEAR_RANGE(1800000, 0x20, 0x3f, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) static const struct linear_range bd71828_buck5_volts[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) REGULATOR_LINEAR_RANGE(2500000, 0x00, 0x0f, 50000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) REGULATOR_LINEAR_RANGE(3300000, 0x10, 0x1f, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) static const struct linear_range bd71828_ldo_volts[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) REGULATOR_LINEAR_RANGE(800000, 0x00, 0x31, 50000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) REGULATOR_LINEAR_RANGE(3300000, 0x32, 0x3f, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) static int bd71828_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) unsigned int val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) switch (ramp_delay) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) case 1 ... 2500:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) val = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) case 2501 ... 5000:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) val = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) case 5001 ... 10000:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) val = 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) case 10001 ... 20000:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) val = 3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) val = 3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) dev_err(&rdev->dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) "ramp_delay: %d not supported, setting 20mV/uS",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) ramp_delay);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) * On BD71828 the ramp delay level control reg is at offset +2 to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) * enable reg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg + 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) BD71828_MASK_RAMP_DELAY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) val << (ffs(BD71828_MASK_RAMP_DELAY) - 1));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) static int buck_set_hw_dvs_levels(struct device_node *np,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) const struct regulator_desc *desc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) struct regulator_config *cfg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) struct bd71828_regulator_data *data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) data = container_of(desc, struct bd71828_regulator_data, desc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) return rohm_regulator_set_dvs_levels(&data->dvs, np, desc, cfg->regmap);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) static int ldo6_parse_dt(struct device_node *np,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) const struct regulator_desc *desc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) struct regulator_config *cfg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) int ret, i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) uint32_t uv = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) unsigned int en;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) struct regmap *regmap = cfg->regmap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) static const char * const props[] = { "rohm,dvs-run-voltage",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) "rohm,dvs-idle-voltage",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) "rohm,dvs-suspend-voltage",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) "rohm,dvs-lpsr-voltage" };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) unsigned int mask[] = { BD71828_MASK_RUN_EN, BD71828_MASK_IDLE_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) BD71828_MASK_SUSP_EN, BD71828_MASK_LPSR_EN };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) for (i = 0; i < ARRAY_SIZE(props); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) ret = of_property_read_u32(np, props[i], &uv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) if (ret) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) if (ret != -EINVAL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) if (uv)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) en = 0xffffffff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) en = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) ret = regmap_update_bits(regmap, desc->enable_reg, mask[i], en);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) if (ret)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) static const struct regulator_ops bd71828_buck_ops = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) .enable = regulator_enable_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) .disable = regulator_disable_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) .is_enabled = regulator_is_enabled_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) .list_voltage = regulator_list_voltage_linear_range,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) .set_voltage_sel = regulator_set_voltage_sel_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) .get_voltage_sel = regulator_get_voltage_sel_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) static const struct regulator_ops bd71828_dvs_buck_ops = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) .enable = regulator_enable_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) .disable = regulator_disable_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) .is_enabled = regulator_is_enabled_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) .list_voltage = regulator_list_voltage_linear_range,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) .set_voltage_sel = regulator_set_voltage_sel_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) .get_voltage_sel = regulator_get_voltage_sel_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) .set_voltage_time_sel = regulator_set_voltage_time_sel,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) .set_ramp_delay = bd71828_set_ramp_delay,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) static const struct regulator_ops bd71828_ldo_ops = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) .enable = regulator_enable_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) .disable = regulator_disable_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) .is_enabled = regulator_is_enabled_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) .list_voltage = regulator_list_voltage_linear_range,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) .set_voltage_sel = regulator_set_voltage_sel_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) .get_voltage_sel = regulator_get_voltage_sel_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) static const struct regulator_ops bd71828_ldo6_ops = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) .enable = regulator_enable_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) .disable = regulator_disable_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) .is_enabled = regulator_is_enabled_regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) static const struct bd71828_regulator_data bd71828_rdata[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) .name = "buck1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) .of_match = of_match_ptr("BUCK1"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) .regulators_node = of_match_ptr("regulators"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) .id = BD71828_BUCK1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) .ops = &bd71828_dvs_buck_ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) .type = REGULATOR_VOLTAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) .linear_ranges = bd71828_buck1267_volts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) .n_linear_ranges = ARRAY_SIZE(bd71828_buck1267_volts),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) .n_voltages = BD71828_BUCK1267_VOLTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) .enable_reg = BD71828_REG_BUCK1_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) .enable_mask = BD71828_MASK_RUN_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) .vsel_reg = BD71828_REG_BUCK1_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) .vsel_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) .owner = THIS_MODULE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) .of_parse_cb = buck_set_hw_dvs_levels,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) .dvs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) .level_map = ROHM_DVS_LEVEL_RUN | ROHM_DVS_LEVEL_IDLE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) ROHM_DVS_LEVEL_SUSPEND |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) ROHM_DVS_LEVEL_LPSR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) .run_reg = BD71828_REG_BUCK1_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) .run_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) .idle_reg = BD71828_REG_BUCK1_IDLE_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) .idle_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) .idle_on_mask = BD71828_MASK_IDLE_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) .suspend_reg = BD71828_REG_BUCK1_SUSP_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) .suspend_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) .suspend_on_mask = BD71828_MASK_SUSP_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) .lpsr_on_mask = BD71828_MASK_LPSR_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) * LPSR voltage is same as SUSPEND voltage. Allow
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) * setting it so that regulator can be set enabled at
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) * LPSR state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) .lpsr_reg = BD71828_REG_BUCK1_SUSP_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) .lpsr_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) .reg_inits = buck1_inits,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) .reg_init_amnt = ARRAY_SIZE(buck1_inits),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) .name = "buck2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) .of_match = of_match_ptr("BUCK2"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) .regulators_node = of_match_ptr("regulators"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) .id = BD71828_BUCK2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) .ops = &bd71828_dvs_buck_ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) .type = REGULATOR_VOLTAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) .linear_ranges = bd71828_buck1267_volts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) .n_linear_ranges = ARRAY_SIZE(bd71828_buck1267_volts),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) .n_voltages = BD71828_BUCK1267_VOLTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) .enable_reg = BD71828_REG_BUCK2_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) .enable_mask = BD71828_MASK_RUN_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) .vsel_reg = BD71828_REG_BUCK2_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) .vsel_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) .owner = THIS_MODULE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) .of_parse_cb = buck_set_hw_dvs_levels,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) .dvs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) .level_map = ROHM_DVS_LEVEL_RUN | ROHM_DVS_LEVEL_IDLE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) ROHM_DVS_LEVEL_SUSPEND |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) ROHM_DVS_LEVEL_LPSR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) .run_reg = BD71828_REG_BUCK2_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) .run_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) .idle_reg = BD71828_REG_BUCK2_IDLE_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) .idle_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) .idle_on_mask = BD71828_MASK_IDLE_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) .suspend_reg = BD71828_REG_BUCK2_SUSP_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) .suspend_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) .suspend_on_mask = BD71828_MASK_SUSP_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) .lpsr_on_mask = BD71828_MASK_LPSR_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) .lpsr_reg = BD71828_REG_BUCK2_SUSP_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) .lpsr_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) .reg_inits = buck2_inits,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) .reg_init_amnt = ARRAY_SIZE(buck2_inits),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) .name = "buck3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) .of_match = of_match_ptr("BUCK3"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) .regulators_node = of_match_ptr("regulators"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) .id = BD71828_BUCK3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) .ops = &bd71828_buck_ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) .type = REGULATOR_VOLTAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) .linear_ranges = bd71828_buck3_volts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) .n_linear_ranges = ARRAY_SIZE(bd71828_buck3_volts),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) .n_voltages = BD71828_BUCK3_VOLTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) .enable_reg = BD71828_REG_BUCK3_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) .enable_mask = BD71828_MASK_RUN_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) .vsel_reg = BD71828_REG_BUCK3_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) .vsel_mask = BD71828_MASK_BUCK3_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) .owner = THIS_MODULE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) .of_parse_cb = buck_set_hw_dvs_levels,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) .dvs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) * BUCK3 only supports single voltage for all states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) * voltage can be individually enabled for each state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) * though => allow setting all states to support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) * enabling power rail on different states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) .level_map = ROHM_DVS_LEVEL_RUN | ROHM_DVS_LEVEL_IDLE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) ROHM_DVS_LEVEL_SUSPEND |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) ROHM_DVS_LEVEL_LPSR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) .run_reg = BD71828_REG_BUCK3_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) .idle_reg = BD71828_REG_BUCK3_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) .suspend_reg = BD71828_REG_BUCK3_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) .lpsr_reg = BD71828_REG_BUCK3_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) .run_mask = BD71828_MASK_BUCK3_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) .idle_mask = BD71828_MASK_BUCK3_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) .suspend_mask = BD71828_MASK_BUCK3_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) .lpsr_mask = BD71828_MASK_BUCK3_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) .idle_on_mask = BD71828_MASK_IDLE_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) .suspend_on_mask = BD71828_MASK_SUSP_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) .lpsr_on_mask = BD71828_MASK_LPSR_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) .name = "buck4",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) .of_match = of_match_ptr("BUCK4"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) .regulators_node = of_match_ptr("regulators"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) .id = BD71828_BUCK4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) .ops = &bd71828_buck_ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) .type = REGULATOR_VOLTAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) .linear_ranges = bd71828_buck4_volts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) .n_linear_ranges = ARRAY_SIZE(bd71828_buck4_volts),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) .n_voltages = BD71828_BUCK4_VOLTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) .enable_reg = BD71828_REG_BUCK4_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) .enable_mask = BD71828_MASK_RUN_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) .vsel_reg = BD71828_REG_BUCK4_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) .vsel_mask = BD71828_MASK_BUCK4_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) .owner = THIS_MODULE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) .of_parse_cb = buck_set_hw_dvs_levels,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) .dvs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) * BUCK4 only supports single voltage for all states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) * voltage can be individually enabled for each state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) * though => allow setting all states to support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) * enabling power rail on different states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) .level_map = ROHM_DVS_LEVEL_RUN | ROHM_DVS_LEVEL_IDLE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) ROHM_DVS_LEVEL_SUSPEND |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) ROHM_DVS_LEVEL_LPSR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) .run_reg = BD71828_REG_BUCK4_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) .idle_reg = BD71828_REG_BUCK4_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) .suspend_reg = BD71828_REG_BUCK4_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) .lpsr_reg = BD71828_REG_BUCK4_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) .run_mask = BD71828_MASK_BUCK4_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) .idle_mask = BD71828_MASK_BUCK4_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) .suspend_mask = BD71828_MASK_BUCK4_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) .lpsr_mask = BD71828_MASK_BUCK4_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) .idle_on_mask = BD71828_MASK_IDLE_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) .suspend_on_mask = BD71828_MASK_SUSP_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) .lpsr_on_mask = BD71828_MASK_LPSR_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) .name = "buck5",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) .of_match = of_match_ptr("BUCK5"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) .regulators_node = of_match_ptr("regulators"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) .id = BD71828_BUCK5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) .ops = &bd71828_buck_ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) .type = REGULATOR_VOLTAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) .linear_ranges = bd71828_buck5_volts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) .n_linear_ranges = ARRAY_SIZE(bd71828_buck5_volts),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) .n_voltages = BD71828_BUCK5_VOLTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) .enable_reg = BD71828_REG_BUCK5_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) .enable_mask = BD71828_MASK_RUN_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) .vsel_reg = BD71828_REG_BUCK5_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) .vsel_mask = BD71828_MASK_BUCK5_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) .owner = THIS_MODULE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) .of_parse_cb = buck_set_hw_dvs_levels,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) .dvs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) * BUCK5 only supports single voltage for all states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) * voltage can be individually enabled for each state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) * though => allow setting all states to support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) * enabling power rail on different states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) .level_map = ROHM_DVS_LEVEL_RUN | ROHM_DVS_LEVEL_IDLE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) ROHM_DVS_LEVEL_SUSPEND |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) ROHM_DVS_LEVEL_LPSR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) .run_reg = BD71828_REG_BUCK5_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) .idle_reg = BD71828_REG_BUCK5_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) .suspend_reg = BD71828_REG_BUCK5_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) .lpsr_reg = BD71828_REG_BUCK5_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) .run_mask = BD71828_MASK_BUCK5_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) .idle_mask = BD71828_MASK_BUCK5_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) .suspend_mask = BD71828_MASK_BUCK5_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) .lpsr_mask = BD71828_MASK_BUCK5_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) .idle_on_mask = BD71828_MASK_IDLE_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) .suspend_on_mask = BD71828_MASK_SUSP_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) .lpsr_on_mask = BD71828_MASK_LPSR_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) .name = "buck6",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) .of_match = of_match_ptr("BUCK6"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) .regulators_node = of_match_ptr("regulators"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) .id = BD71828_BUCK6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) .ops = &bd71828_dvs_buck_ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) .type = REGULATOR_VOLTAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) .linear_ranges = bd71828_buck1267_volts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) .n_linear_ranges = ARRAY_SIZE(bd71828_buck1267_volts),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) .n_voltages = BD71828_BUCK1267_VOLTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) .enable_reg = BD71828_REG_BUCK6_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) .enable_mask = BD71828_MASK_RUN_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) .vsel_reg = BD71828_REG_BUCK6_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) .vsel_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) .owner = THIS_MODULE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) .of_parse_cb = buck_set_hw_dvs_levels,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) .dvs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) .level_map = ROHM_DVS_LEVEL_RUN | ROHM_DVS_LEVEL_IDLE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) ROHM_DVS_LEVEL_SUSPEND |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) ROHM_DVS_LEVEL_LPSR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) .run_reg = BD71828_REG_BUCK6_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) .run_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) .idle_reg = BD71828_REG_BUCK6_IDLE_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) .idle_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) .idle_on_mask = BD71828_MASK_IDLE_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) .suspend_reg = BD71828_REG_BUCK6_SUSP_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) .suspend_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) .suspend_on_mask = BD71828_MASK_SUSP_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) .lpsr_on_mask = BD71828_MASK_LPSR_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) .lpsr_reg = BD71828_REG_BUCK6_SUSP_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) .lpsr_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) .reg_inits = buck6_inits,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) .reg_init_amnt = ARRAY_SIZE(buck6_inits),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) .name = "buck7",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) .of_match = of_match_ptr("BUCK7"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) .regulators_node = of_match_ptr("regulators"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) .id = BD71828_BUCK7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) .ops = &bd71828_dvs_buck_ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) .type = REGULATOR_VOLTAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) .linear_ranges = bd71828_buck1267_volts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) .n_linear_ranges = ARRAY_SIZE(bd71828_buck1267_volts),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) .n_voltages = BD71828_BUCK1267_VOLTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) .enable_reg = BD71828_REG_BUCK7_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) .enable_mask = BD71828_MASK_RUN_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) .vsel_reg = BD71828_REG_BUCK7_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) .vsel_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) .owner = THIS_MODULE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) .of_parse_cb = buck_set_hw_dvs_levels,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) .dvs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) .level_map = ROHM_DVS_LEVEL_RUN | ROHM_DVS_LEVEL_IDLE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) ROHM_DVS_LEVEL_SUSPEND |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) ROHM_DVS_LEVEL_LPSR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) .run_reg = BD71828_REG_BUCK7_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) .run_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) .idle_reg = BD71828_REG_BUCK7_IDLE_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) .idle_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) .idle_on_mask = BD71828_MASK_IDLE_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) .suspend_reg = BD71828_REG_BUCK7_SUSP_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) .suspend_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) .suspend_on_mask = BD71828_MASK_SUSP_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) .lpsr_on_mask = BD71828_MASK_LPSR_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) .lpsr_reg = BD71828_REG_BUCK7_SUSP_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) .lpsr_mask = BD71828_MASK_BUCK1267_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) .reg_inits = buck7_inits,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) .reg_init_amnt = ARRAY_SIZE(buck7_inits),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) .name = "ldo1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) .of_match = of_match_ptr("LDO1"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) .regulators_node = of_match_ptr("regulators"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) .id = BD71828_LDO1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) .ops = &bd71828_ldo_ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) .type = REGULATOR_VOLTAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) .linear_ranges = bd71828_ldo_volts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) .n_linear_ranges = ARRAY_SIZE(bd71828_ldo_volts),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) .n_voltages = BD71828_LDO_VOLTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) .enable_reg = BD71828_REG_LDO1_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) .enable_mask = BD71828_MASK_RUN_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) .vsel_reg = BD71828_REG_LDO1_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) .vsel_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) .owner = THIS_MODULE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) .of_parse_cb = buck_set_hw_dvs_levels,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) .dvs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) * LDO1 only supports single voltage for all states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) * voltage can be individually enabled for each state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) * though => allow setting all states to support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) * enabling power rail on different states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) .level_map = ROHM_DVS_LEVEL_RUN | ROHM_DVS_LEVEL_IDLE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) ROHM_DVS_LEVEL_SUSPEND |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) ROHM_DVS_LEVEL_LPSR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) .run_reg = BD71828_REG_LDO1_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) .idle_reg = BD71828_REG_LDO1_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) .suspend_reg = BD71828_REG_LDO1_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) .lpsr_reg = BD71828_REG_LDO1_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) .run_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) .idle_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) .suspend_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) .lpsr_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) .idle_on_mask = BD71828_MASK_IDLE_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) .suspend_on_mask = BD71828_MASK_SUSP_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) .lpsr_on_mask = BD71828_MASK_LPSR_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) .name = "ldo2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) .of_match = of_match_ptr("LDO2"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) .regulators_node = of_match_ptr("regulators"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) .id = BD71828_LDO2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) .ops = &bd71828_ldo_ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) .type = REGULATOR_VOLTAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) .linear_ranges = bd71828_ldo_volts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) .n_linear_ranges = ARRAY_SIZE(bd71828_ldo_volts),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) .n_voltages = BD71828_LDO_VOLTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) .enable_reg = BD71828_REG_LDO2_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) .enable_mask = BD71828_MASK_RUN_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) .vsel_reg = BD71828_REG_LDO2_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) .vsel_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) .owner = THIS_MODULE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) .of_parse_cb = buck_set_hw_dvs_levels,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) .dvs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) * LDO2 only supports single voltage for all states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) * voltage can be individually enabled for each state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) * though => allow setting all states to support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) * enabling power rail on different states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) .level_map = ROHM_DVS_LEVEL_RUN | ROHM_DVS_LEVEL_IDLE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) ROHM_DVS_LEVEL_SUSPEND |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) ROHM_DVS_LEVEL_LPSR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) .run_reg = BD71828_REG_LDO2_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) .idle_reg = BD71828_REG_LDO2_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) .suspend_reg = BD71828_REG_LDO2_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) .lpsr_reg = BD71828_REG_LDO2_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) .run_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) .idle_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) .suspend_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) .lpsr_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) .idle_on_mask = BD71828_MASK_IDLE_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) .suspend_on_mask = BD71828_MASK_SUSP_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) .lpsr_on_mask = BD71828_MASK_LPSR_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) .name = "ldo3",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) .of_match = of_match_ptr("LDO3"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) .regulators_node = of_match_ptr("regulators"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) .id = BD71828_LDO3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) .ops = &bd71828_ldo_ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) .type = REGULATOR_VOLTAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) .linear_ranges = bd71828_ldo_volts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) .n_linear_ranges = ARRAY_SIZE(bd71828_ldo_volts),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) .n_voltages = BD71828_LDO_VOLTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) .enable_reg = BD71828_REG_LDO3_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) .enable_mask = BD71828_MASK_RUN_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) .vsel_reg = BD71828_REG_LDO3_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) .vsel_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) .owner = THIS_MODULE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) .of_parse_cb = buck_set_hw_dvs_levels,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) .dvs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) * LDO3 only supports single voltage for all states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) * voltage can be individually enabled for each state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) * though => allow setting all states to support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) * enabling power rail on different states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) .level_map = ROHM_DVS_LEVEL_RUN | ROHM_DVS_LEVEL_IDLE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) ROHM_DVS_LEVEL_SUSPEND |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) ROHM_DVS_LEVEL_LPSR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) .run_reg = BD71828_REG_LDO3_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) .idle_reg = BD71828_REG_LDO3_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) .suspend_reg = BD71828_REG_LDO3_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) .lpsr_reg = BD71828_REG_LDO3_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) .run_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) .idle_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) .suspend_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) .lpsr_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) .idle_on_mask = BD71828_MASK_IDLE_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) .suspend_on_mask = BD71828_MASK_SUSP_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) .lpsr_on_mask = BD71828_MASK_LPSR_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) .name = "ldo4",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) .of_match = of_match_ptr("LDO4"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) .regulators_node = of_match_ptr("regulators"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) .id = BD71828_LDO4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) .ops = &bd71828_ldo_ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) .type = REGULATOR_VOLTAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) .linear_ranges = bd71828_ldo_volts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) .n_linear_ranges = ARRAY_SIZE(bd71828_ldo_volts),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) .n_voltages = BD71828_LDO_VOLTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) .enable_reg = BD71828_REG_LDO4_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) .enable_mask = BD71828_MASK_RUN_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) .vsel_reg = BD71828_REG_LDO4_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) .vsel_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) .owner = THIS_MODULE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) .of_parse_cb = buck_set_hw_dvs_levels,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) .dvs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) * LDO1 only supports single voltage for all states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) * voltage can be individually enabled for each state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) * though => allow setting all states to support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) * enabling power rail on different states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) .level_map = ROHM_DVS_LEVEL_RUN | ROHM_DVS_LEVEL_IDLE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) ROHM_DVS_LEVEL_SUSPEND |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) ROHM_DVS_LEVEL_LPSR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) .run_reg = BD71828_REG_LDO4_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) .idle_reg = BD71828_REG_LDO4_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) .suspend_reg = BD71828_REG_LDO4_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) .lpsr_reg = BD71828_REG_LDO4_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) .run_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) .idle_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) .suspend_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) .lpsr_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) .idle_on_mask = BD71828_MASK_IDLE_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) .suspend_on_mask = BD71828_MASK_SUSP_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) .lpsr_on_mask = BD71828_MASK_LPSR_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) .name = "ldo5",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) .of_match = of_match_ptr("LDO5"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) .regulators_node = of_match_ptr("regulators"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) .id = BD71828_LDO5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) .ops = &bd71828_ldo_ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) .type = REGULATOR_VOLTAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) .linear_ranges = bd71828_ldo_volts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) .n_linear_ranges = ARRAY_SIZE(bd71828_ldo_volts),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) .n_voltages = BD71828_LDO_VOLTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) .enable_reg = BD71828_REG_LDO5_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) .enable_mask = BD71828_MASK_RUN_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) .vsel_reg = BD71828_REG_LDO5_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) .vsel_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) .of_parse_cb = buck_set_hw_dvs_levels,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) .owner = THIS_MODULE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) * LDO5 is special. It can choose vsel settings to be configured
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) * from 2 different registers (by GPIO).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) * This driver supports only configuration where
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) * BD71828_REG_LDO5_VOLT_L is used.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) .dvs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) .level_map = ROHM_DVS_LEVEL_RUN | ROHM_DVS_LEVEL_IDLE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) ROHM_DVS_LEVEL_SUSPEND |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) ROHM_DVS_LEVEL_LPSR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) .run_reg = BD71828_REG_LDO5_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) .idle_reg = BD71828_REG_LDO5_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) .suspend_reg = BD71828_REG_LDO5_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) .lpsr_reg = BD71828_REG_LDO5_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) .run_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) .idle_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) .suspend_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) .lpsr_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) .idle_on_mask = BD71828_MASK_IDLE_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) .suspend_on_mask = BD71828_MASK_SUSP_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) .lpsr_on_mask = BD71828_MASK_LPSR_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) .name = "ldo6",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) .of_match = of_match_ptr("LDO6"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) .regulators_node = of_match_ptr("regulators"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) .id = BD71828_LDO6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) .ops = &bd71828_ldo6_ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) .type = REGULATOR_VOLTAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) .fixed_uV = BD71828_LDO_6_VOLTAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) .n_voltages = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) .enable_reg = BD71828_REG_LDO6_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) .enable_mask = BD71828_MASK_RUN_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) .owner = THIS_MODULE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) * LDO6 only supports enable/disable for all states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) * Voltage for LDO6 is fixed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) .of_parse_cb = ldo6_parse_dt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) }, {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) .desc = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) /* SNVS LDO in data-sheet */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) .name = "ldo7",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) .of_match = of_match_ptr("LDO7"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) .regulators_node = of_match_ptr("regulators"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) .id = BD71828_LDO_SNVS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) .ops = &bd71828_ldo_ops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) .type = REGULATOR_VOLTAGE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) .linear_ranges = bd71828_ldo_volts,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) .n_linear_ranges = ARRAY_SIZE(bd71828_ldo_volts),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) .n_voltages = BD71828_LDO_VOLTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) .enable_reg = BD71828_REG_LDO7_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) .enable_mask = BD71828_MASK_RUN_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) .vsel_reg = BD71828_REG_LDO7_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) .vsel_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) .owner = THIS_MODULE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) .of_parse_cb = buck_set_hw_dvs_levels,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) .dvs = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) * LDO7 only supports single voltage for all states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) * voltage can be individually enabled for each state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) * though => allow setting all states to support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) * enabling power rail on different states.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) .level_map = ROHM_DVS_LEVEL_RUN | ROHM_DVS_LEVEL_IDLE |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) ROHM_DVS_LEVEL_SUSPEND |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) ROHM_DVS_LEVEL_LPSR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) .run_reg = BD71828_REG_LDO7_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) .idle_reg = BD71828_REG_LDO7_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) .suspend_reg = BD71828_REG_LDO7_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) .lpsr_reg = BD71828_REG_LDO7_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) .run_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) .idle_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) .suspend_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) .lpsr_mask = BD71828_MASK_LDO_VOLT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) .idle_on_mask = BD71828_MASK_IDLE_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) .suspend_on_mask = BD71828_MASK_SUSP_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) .lpsr_on_mask = BD71828_MASK_LPSR_EN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) static int bd71828_probe(struct platform_device *pdev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) struct rohm_regmap_dev *bd71828;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) int i, j, ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) struct regulator_config config = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) .dev = pdev->dev.parent,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) bd71828 = dev_get_drvdata(pdev->dev.parent);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) if (!bd71828) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) dev_err(&pdev->dev, "No MFD driver data\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) config.regmap = bd71828->regmap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) for (i = 0; i < ARRAY_SIZE(bd71828_rdata); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) struct regulator_dev *rdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) const struct bd71828_regulator_data *rd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) rd = &bd71828_rdata[i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) rdev = devm_regulator_register(&pdev->dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) &rd->desc, &config);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) if (IS_ERR(rdev)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) dev_err(&pdev->dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) "failed to register %s regulator\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) rd->desc.name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) return PTR_ERR(rdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) for (j = 0; j < rd->reg_init_amnt; j++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) ret = regmap_update_bits(bd71828->regmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) rd->reg_inits[j].reg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) rd->reg_inits[j].mask,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) rd->reg_inits[j].val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) if (ret) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) dev_err(&pdev->dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) "regulator %s init failed\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) rd->desc.name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) static struct platform_driver bd71828_regulator = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) .driver = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) .name = "bd71828-pmic"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) .probe = bd71828_probe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) module_platform_driver(bd71828_regulator);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) MODULE_AUTHOR("Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) MODULE_DESCRIPTION("BD71828 voltage regulator driver");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) MODULE_LICENSE("GPL");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) MODULE_ALIAS("platform:bd71828-pmic");