Lines Matching +full:use +full:- +full:vsel +full:- +full:dvs
1 // SPDX-License-Identifier: GPL-2.0
30 const struct pc9450_dvs_config dvs; member
56 .max_register = PCA9450_MAX_REGISTER - 1,
62 * BUCK1RAM[1:0] BUCK1 DVS ramp rate setting
161 if (ret == -EINVAL) in buck_set_dvs()
166 for (i = 0; i < desc->n_voltages; i++) { in buck_set_dvs()
171 i <<= ffs(desc->vsel_mask) - 1; in buck_set_dvs()
186 const struct pc9450_dvs_config *dvs = &data->dvs; in pca9450_set_dvs_levels() local
194 prop = "nxp,dvs-run-voltage"; in pca9450_set_dvs_levels()
195 reg = dvs->run_reg; in pca9450_set_dvs_levels()
196 mask = dvs->run_mask; in pca9450_set_dvs_levels()
199 prop = "nxp,dvs-standby-voltage"; in pca9450_set_dvs_levels()
200 reg = dvs->standby_reg; in pca9450_set_dvs_levels()
201 mask = dvs->standby_mask; in pca9450_set_dvs_levels()
204 return -EINVAL; in pca9450_set_dvs_levels()
207 ret = buck_set_dvs(desc, np, cfg->regmap, prop, reg, mask); in pca9450_set_dvs_levels()
238 .dvs = {
267 .dvs = {
296 .dvs = {
476 .dvs = {
505 .dvs = {
661 struct regmap *regmap = pca9450->regmap; in pca9450_irq_handler()
667 dev_err(pca9450->dev, in pca9450_irq_handler()
673 dev_warn(pca9450->dev, "PWRON interrupt.\n"); in pca9450_irq_handler()
676 dev_warn(pca9450->dev, "WDOGB interrupt.\n"); in pca9450_irq_handler()
679 dev_warn(pca9450->dev, "VRFLT1 interrupt.\n"); in pca9450_irq_handler()
682 dev_warn(pca9450->dev, "VRFLT2 interrupt.\n"); in pca9450_irq_handler()
685 dev_warn(pca9450->dev, "LOWVSYS interrupt.\n"); in pca9450_irq_handler()
688 dev_warn(pca9450->dev, "IRQ_THERM_105 interrupt.\n"); in pca9450_irq_handler()
691 dev_warn(pca9450->dev, "IRQ_THERM_125 interrupt.\n"); in pca9450_irq_handler()
700 of_device_get_match_data(&i2c->dev); in pca9450_i2c_probe()
707 if (!i2c->irq) { in pca9450_i2c_probe()
708 dev_err(&i2c->dev, "No IRQ configured?\n"); in pca9450_i2c_probe()
709 return -EINVAL; in pca9450_i2c_probe()
712 pca9450 = devm_kzalloc(&i2c->dev, sizeof(struct pca9450), GFP_KERNEL); in pca9450_i2c_probe()
714 return -ENOMEM; in pca9450_i2c_probe()
719 pca9450->rcnt = ARRAY_SIZE(pca9450a_regulators); in pca9450_i2c_probe()
723 pca9450->rcnt = ARRAY_SIZE(pca9450bc_regulators); in pca9450_i2c_probe()
726 dev_err(&i2c->dev, "Unknown device type"); in pca9450_i2c_probe()
727 return -EINVAL; in pca9450_i2c_probe()
730 pca9450->irq = i2c->irq; in pca9450_i2c_probe()
731 pca9450->type = type; in pca9450_i2c_probe()
732 pca9450->dev = &i2c->dev; in pca9450_i2c_probe()
734 dev_set_drvdata(&i2c->dev, pca9450); in pca9450_i2c_probe()
736 pca9450->regmap = devm_regmap_init_i2c(i2c, in pca9450_i2c_probe()
738 if (IS_ERR(pca9450->regmap)) { in pca9450_i2c_probe()
739 dev_err(&i2c->dev, "regmap initialization failed\n"); in pca9450_i2c_probe()
740 return PTR_ERR(pca9450->regmap); in pca9450_i2c_probe()
743 ret = regmap_read(pca9450->regmap, PCA9450_REG_DEV_ID, &device_id); in pca9450_i2c_probe()
745 dev_err(&i2c->dev, "Read device id error\n"); in pca9450_i2c_probe()
752 dev_err(&i2c->dev, "Device id(%x) mismatched\n", in pca9450_i2c_probe()
754 return -EINVAL; in pca9450_i2c_probe()
757 for (i = 0; i < pca9450->rcnt; i++) { in pca9450_i2c_probe()
763 desc = &r->desc; in pca9450_i2c_probe()
765 config.regmap = pca9450->regmap; in pca9450_i2c_probe()
766 config.dev = pca9450->dev; in pca9450_i2c_probe()
768 rdev = devm_regulator_register(pca9450->dev, desc, &config); in pca9450_i2c_probe()
771 dev_err(pca9450->dev, in pca9450_i2c_probe()
773 desc->name, ret); in pca9450_i2c_probe()
778 ret = devm_request_threaded_irq(pca9450->dev, pca9450->irq, NULL, in pca9450_i2c_probe()
781 "pca9450-irq", pca9450); in pca9450_i2c_probe()
783 dev_err(pca9450->dev, "Failed to request IRQ: %d\n", in pca9450_i2c_probe()
784 pca9450->irq); in pca9450_i2c_probe()
788 ret = regmap_update_bits(pca9450->regmap, PCA9450_REG_INT1_MSK, in pca9450_i2c_probe()
793 dev_err(&i2c->dev, "Unmask irq error\n"); in pca9450_i2c_probe()
797 /* Clear PRESET_EN bit in BUCK123_DVS to use DVS registers */ in pca9450_i2c_probe()
798 ret = regmap_clear_bits(pca9450->regmap, PCA9450_REG_BUCK123_DVS, in pca9450_i2c_probe()
801 dev_err(&i2c->dev, "Failed to clear PRESET_EN bit: %d\n", ret); in pca9450_i2c_probe()
806 ret = regmap_update_bits(pca9450->regmap, PCA9450_REG_RESET_CTRL, in pca9450_i2c_probe()
809 dev_err(&i2c->dev, "Failed to set WDOG_B reset behavior\n"); in pca9450_i2c_probe()
818 pca9450->sd_vsel_gpio = gpiod_get_optional(pca9450->dev, "sd-vsel", GPIOD_OUT_HIGH); in pca9450_i2c_probe()
820 if (IS_ERR(pca9450->sd_vsel_gpio)) { in pca9450_i2c_probe()
821 dev_err(&i2c->dev, "Failed to get SD_VSEL GPIO\n"); in pca9450_i2c_probe()
822 return PTR_ERR(pca9450->sd_vsel_gpio); in pca9450_i2c_probe()
825 dev_info(&i2c->dev, "%s probed.\n", in pca9450_i2c_probe()
850 .name = "nxp-pca9450",