Lines Matching +full:- +full:uses +full:- +full:gpio +full:- +full:dvs
1 // SPDX-License-Identifier: GPL-2.0
8 #include <linux/gpio/consumer.h>
29 const struct pc9450_dvs_config dvs;
56 .max_register = PCA9450_MAX_REGISTER - 1,
62 * BUCK1RAM[1:0] BUCK1 DVS ramp rate setting
106 if (pca9450->sd_vsel_fixed_low)
109 if (pca9450->sd_vsel_gpio && !gpiod_get_value(pca9450->sd_vsel_gpio))
112 return rdev->desc->vsel_reg;
120 ret = regmap_read(rdev->regmap, pca9450_ldo5_get_reg_voltage_sel(rdev), &val);
124 val &= rdev->desc->vsel_mask;
125 val >>= ffs(rdev->desc->vsel_mask) - 1;
134 sel <<= ffs(rdev->desc->vsel_mask) - 1;
136 ret = regmap_update_bits(rdev->regmap, pca9450_ldo5_get_reg_voltage_sel(rdev),
137 rdev->desc->vsel_mask, sel);
141 if (rdev->desc->apply_bit)
142 ret = regmap_update_bits(rdev->regmap, rdev->desc->apply_reg,
143 rdev->desc->apply_bit,
144 rdev->desc->apply_bit);
224 if (ret == -EINVAL)
229 for (i = 0; i < desc->n_voltages; i++) {
234 i <<= ffs(desc->vsel_mask) - 1;
244 /* Enable DVS control through PMIC_STBY_REQ for this BUCK */
245 ret = regmap_update_bits(regmap, regulator->desc.enable_reg,
257 const struct pc9450_dvs_config *dvs = &data->dvs;
265 prop = "nxp,dvs-run-voltage";
266 reg = dvs->run_reg;
267 mask = dvs->run_mask;
270 prop = "nxp,dvs-standby-voltage";
271 reg = dvs->standby_reg;
272 mask = dvs->standby_mask;
275 return -EINVAL;
278 ret = buck_set_dvs(desc, np, cfg->regmap, prop, reg, mask);
310 .dvs = {
340 .dvs = {
370 .dvs = {
554 .dvs = {
584 .dvs = {
763 .dvs = {
792 .dvs = {
933 struct regmap *regmap = pca9450->regmap;
939 dev_err(pca9450->dev,
945 dev_warn(pca9450->dev, "PWRON interrupt.\n");
948 dev_warn(pca9450->dev, "WDOGB interrupt.\n");
951 dev_warn(pca9450->dev, "VRFLT1 interrupt.\n");
954 dev_warn(pca9450->dev, "VRFLT2 interrupt.\n");
957 dev_warn(pca9450->dev, "LOWVSYS interrupt.\n");
960 dev_warn(pca9450->dev, "IRQ_THERM_105 interrupt.\n");
963 dev_warn(pca9450->dev, "IRQ_THERM_125 interrupt.\n");
971 of_device_get_match_data(&i2c->dev);
980 pca9450 = devm_kzalloc(&i2c->dev, sizeof(struct pca9450), GFP_KERNEL);
982 return -ENOMEM;
987 pca9450->rcnt = ARRAY_SIZE(pca9450a_regulators);
991 pca9450->rcnt = ARRAY_SIZE(pca9450bc_regulators);
996 pca9450->rcnt = ARRAY_SIZE(pca9451a_regulators);
999 dev_err(&i2c->dev, "Unknown device type");
1000 return -EINVAL;
1003 pca9450->irq = i2c->irq;
1004 pca9450->type = type;
1005 pca9450->dev = &i2c->dev;
1007 dev_set_drvdata(&i2c->dev, pca9450);
1009 pca9450->regmap = devm_regmap_init_i2c(i2c,
1011 if (IS_ERR(pca9450->regmap))
1012 return dev_err_probe(&i2c->dev, PTR_ERR(pca9450->regmap),
1015 ret = regmap_read(pca9450->regmap, PCA9450_REG_DEV_ID, &device_id);
1017 return dev_err_probe(&i2c->dev, ret, "Read device id error\n");
1024 return dev_err_probe(&i2c->dev, -EINVAL,
1027 for (i = 0; i < pca9450->rcnt; i++) {
1033 desc = &r->desc;
1035 if (type == PCA9450_TYPE_PCA9451A && !strcmp(desc->name, "ldo3"))
1038 config.regmap = pca9450->regmap;
1039 config.dev = pca9450->dev;
1042 rdev = devm_regulator_register(pca9450->dev, desc, &config);
1044 return dev_err_probe(pca9450->dev, PTR_ERR(rdev),
1045 "Failed to register regulator(%s)\n", desc->name);
1047 if (!strcmp(desc->name, "ldo5"))
1051 if (pca9450->irq) {
1052 ret = devm_request_threaded_irq(pca9450->dev, pca9450->irq, NULL,
1055 "pca9450-irq", pca9450);
1057 return dev_err_probe(pca9450->dev, ret, "Failed to request IRQ: %d\n",
1058 pca9450->irq);
1061 ret = regmap_update_bits(pca9450->regmap, PCA9450_REG_INT1_MSK,
1066 return dev_err_probe(&i2c->dev, ret, "Unmask irq error\n");
1069 /* Clear PRESET_EN bit in BUCK123_DVS to use DVS registers */
1070 ret = regmap_clear_bits(pca9450->regmap, PCA9450_REG_BUCK123_DVS,
1073 return dev_err_probe(&i2c->dev, ret, "Failed to clear PRESET_EN bit\n");
1075 if (of_property_read_bool(i2c->dev.of_node, "nxp,wdog_b-warm-reset"))
1081 ret = regmap_update_bits(pca9450->regmap, PCA9450_REG_RESET_CTRL,
1084 return dev_err_probe(&i2c->dev, ret, "Failed to set WDOG_B reset behavior\n");
1086 if (of_property_read_bool(i2c->dev.of_node, "nxp,i2c-lt-enable")) {
1088 ret = regmap_update_bits(pca9450->regmap, PCA9450_REG_CONFIG2,
1091 return dev_err_probe(&i2c->dev, ret,
1098 * to the VSELECT signal, so we can use the GPIO that is internally routed
1101 pca9450->sd_vsel_gpio = gpiod_get_optional(&ldo5->dev, "sd-vsel", GPIOD_IN);
1102 if (IS_ERR(pca9450->sd_vsel_gpio)) {
1103 dev_err(&i2c->dev, "Failed to get SD_VSEL GPIO\n");
1107 pca9450->sd_vsel_fixed_low =
1108 of_property_read_bool(ldo5->dev.of_node, "nxp,sd-vsel-fixed-low");
1110 dev_info(&i2c->dev, "%s probed.\n",
1144 .name = "nxp-pca9450",