Lines Matching +full:ddr +full:- +full:config
1 // SPDX-License-Identifier: GPL-2.0
3 * ROHM BD9571MWV-M regulator driver
22 /* DDR Backup Power */
23 u8 bkup_mode_cnt_keepon; /* from "rohm,ddr-backup-power" */
56 ret = regmap_read(rdev->regmap, BD9571MWV_AVS_SET_MONI, &val); in bd9571mwv_avs_get_moni_state()
72 return regmap_write_bits(rdev->regmap, BD9571MWV_AVS_VD09_VID(ret), in bd9571mwv_avs_set_voltage_sel_regmap()
73 rdev->desc->vsel_mask, sel); in bd9571mwv_avs_set_voltage_sel_regmap()
85 ret = regmap_read(rdev->regmap, BD9571MWV_AVS_VD09_VID(ret), &val); in bd9571mwv_avs_get_voltage_sel_regmap()
89 val &= rdev->desc->vsel_mask; in bd9571mwv_avs_get_voltage_sel_regmap()
90 val >>= ffs(rdev->desc->vsel_mask) - 1; in bd9571mwv_avs_get_voltage_sel_regmap()
98 return regmap_write_bits(rdev->regmap, BD9571MWV_DVFS_SETVID, in bd9571mwv_reg_set_voltage_sel_regmap()
99 rdev->desc->vsel_mask, sel); in bd9571mwv_reg_set_voltage_sel_regmap()
144 ret = regmap_read(bd->regmap, BD9571MWV_BKUP_MODE_CNT, mode); in bd9571mwv_bkup_mode_read()
146 dev_err(bd->dev, "failed to read backup mode (%d)\n", ret); in bd9571mwv_bkup_mode_read()
157 ret = regmap_write(bd->regmap, BD9571MWV_BKUP_MODE_CNT, mode); in bd9571mwv_bkup_mode_write()
159 dev_err(bd->dev, "failed to configure backup mode 0x%x (%d)\n", in bd9571mwv_bkup_mode_write()
172 return sprintf(buf, "%s\n", bdreg->bkup_mode_enabled ? "on" : "off"); in backup_mode_show()
186 ret = kstrtobool(buf, &bdreg->bkup_mode_enabled); in backup_mode_store()
190 if (!bdreg->rstbmode_level) in backup_mode_store()
194 * Configure DDR Backup Mode, to change the role of the accessory power in backup_mode_store()
195 * switch from a power switch to a wake-up switch, or vice versa in backup_mode_store()
197 ret = bd9571mwv_bkup_mode_read(bdreg->bd, &mode); in backup_mode_store()
202 if (bdreg->bkup_mode_enabled) in backup_mode_store()
203 mode |= bdreg->bkup_mode_cnt_keepon; in backup_mode_store()
205 ret = bd9571mwv_bkup_mode_write(bdreg->bd, mode); in backup_mode_store()
220 if (!bdreg->bkup_mode_enabled) in bd9571mwv_suspend()
223 /* Save DDR Backup Mode */ in bd9571mwv_suspend()
224 ret = bd9571mwv_bkup_mode_read(bdreg->bd, &mode); in bd9571mwv_suspend()
228 bdreg->bkup_mode_cnt_saved = mode; in bd9571mwv_suspend()
230 if (!bdreg->rstbmode_pulse) in bd9571mwv_suspend()
233 /* Enable DDR Backup Mode */ in bd9571mwv_suspend()
235 mode |= bdreg->bkup_mode_cnt_keepon; in bd9571mwv_suspend()
237 if (mode != bdreg->bkup_mode_cnt_saved) in bd9571mwv_suspend()
238 return bd9571mwv_bkup_mode_write(bdreg->bd, mode); in bd9571mwv_suspend()
247 if (!bdreg->bkup_mode_enabled) in bd9571mwv_resume()
250 /* Restore DDR Backup Mode */ in bd9571mwv_resume()
251 return bd9571mwv_bkup_mode_write(bdreg->bd, bdreg->bkup_mode_cnt_saved); in bd9571mwv_resume()
260 device_remove_file(&pdev->dev, &dev_attr_backup_mode); in bd9571mwv_regulator_remove()
271 struct bd9571mwv *bd = dev_get_drvdata(pdev->dev.parent); in bd9571mwv_regulator_probe()
272 struct regulator_config config = { }; in bd9571mwv_regulator_probe() local
278 bdreg = devm_kzalloc(&pdev->dev, sizeof(*bdreg), GFP_KERNEL); in bd9571mwv_regulator_probe()
280 return -ENOMEM; in bd9571mwv_regulator_probe()
282 bdreg->bd = bd; in bd9571mwv_regulator_probe()
286 config.dev = &pdev->dev; in bd9571mwv_regulator_probe()
287 config.dev->of_node = bd->dev->of_node; in bd9571mwv_regulator_probe()
288 config.driver_data = bd; in bd9571mwv_regulator_probe()
289 config.regmap = bd->regmap; in bd9571mwv_regulator_probe()
292 rdev = devm_regulator_register(&pdev->dev, ®ulators[i], in bd9571mwv_regulator_probe()
293 &config); in bd9571mwv_regulator_probe()
295 dev_err(bd->dev, "failed to register %s regulator\n", in bd9571mwv_regulator_probe()
296 pdev->name); in bd9571mwv_regulator_probe()
302 of_property_read_u32(bd->dev->of_node, "rohm,ddr-backup-power", &val); in bd9571mwv_regulator_probe()
304 dev_err(bd->dev, "invalid %s mode %u\n", in bd9571mwv_regulator_probe()
305 "rohm,ddr-backup-power", val); in bd9571mwv_regulator_probe()
306 return -EINVAL; in bd9571mwv_regulator_probe()
308 bdreg->bkup_mode_cnt_keepon = val; in bd9571mwv_regulator_probe()
310 bdreg->rstbmode_level = of_property_read_bool(bd->dev->of_node, in bd9571mwv_regulator_probe()
311 "rohm,rstbmode-level"); in bd9571mwv_regulator_probe()
312 bdreg->rstbmode_pulse = of_property_read_bool(bd->dev->of_node, in bd9571mwv_regulator_probe()
313 "rohm,rstbmode-pulse"); in bd9571mwv_regulator_probe()
314 if (bdreg->rstbmode_level && bdreg->rstbmode_pulse) { in bd9571mwv_regulator_probe()
315 dev_err(bd->dev, "only one rohm,rstbmode-* may be specified"); in bd9571mwv_regulator_probe()
316 return -EINVAL; in bd9571mwv_regulator_probe()
320 if (bdreg->bkup_mode_cnt_keepon) { in bd9571mwv_regulator_probe()
327 bdreg->bkup_mode_enabled = bdreg->rstbmode_pulse; in bd9571mwv_regulator_probe()
329 ret = device_create_file(&pdev->dev, &dev_attr_backup_mode); in bd9571mwv_regulator_probe()
339 { "bd9571mwv-regulator", },
346 .name = "bd9571mwv-regulator",