Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

regulator: bd71828: Don't overwrite runtime voltages

Some of the regulators on the BD71828 have common voltage setting for
RUN/SUSPEND/IDLE/LPSR states. The enable control can be set for each
state though.

The driver allows setting the voltage values for these states via
device-tree. As a side effect, setting the voltages for
SUSPEND/IDLE/LPSR will also change the RUN level voltage which is not
desired and can break the system.

The comment in code reflects this behaviour, but it is likely to not
make people any happier. The right thing to do is to allow setting the
enable/disable state at SUSPEND/IDLE/LPSR via device-tree, but to
disallow setting state specific voltages for those regulators.

BUCK1 is a bit different. It only shares the SUSPEND and LPSR state
voltages. The former behaviour of allowing to silently overwrite the
SUSPEND state voltage by LPSR state voltage is also changed here so that
the SUSPEND voltage is prioritized over LPSR voltage.

Prevent setting PMIC state specific voltages for regulators which do not
support it.

Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com>
Fixes: 522498f8cb8c ("regulator: bd71828: Basic support for ROHM bd71828 PMIC regulators")
Link: https://msgid.link/r/e1883ae1e3ae5668f1030455d4750923561f3d68.1715848512.git.mazziesaccount@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Matti Vaittinen and committed by
Mark Brown
0f9f7c63 4e70b26c

+2 -56
+2 -56
drivers/regulator/bd71828-regulator.c
··· 206 206 .suspend_reg = BD71828_REG_BUCK1_SUSP_VOLT, 207 207 .suspend_mask = BD71828_MASK_BUCK1267_VOLT, 208 208 .suspend_on_mask = BD71828_MASK_SUSP_EN, 209 - .lpsr_on_mask = BD71828_MASK_LPSR_EN, 210 209 /* 211 210 * LPSR voltage is same as SUSPEND voltage. Allow 212 - * setting it so that regulator can be set enabled at 213 - * LPSR state 211 + * only enabling/disabling regulator for LPSR state 214 212 */ 215 - .lpsr_reg = BD71828_REG_BUCK1_SUSP_VOLT, 216 - .lpsr_mask = BD71828_MASK_BUCK1267_VOLT, 213 + .lpsr_on_mask = BD71828_MASK_LPSR_EN, 217 214 }, 218 215 .reg_inits = buck1_inits, 219 216 .reg_init_amnt = ARRAY_SIZE(buck1_inits), ··· 285 288 ROHM_DVS_LEVEL_SUSPEND | 286 289 ROHM_DVS_LEVEL_LPSR, 287 290 .run_reg = BD71828_REG_BUCK3_VOLT, 288 - .idle_reg = BD71828_REG_BUCK3_VOLT, 289 - .suspend_reg = BD71828_REG_BUCK3_VOLT, 290 - .lpsr_reg = BD71828_REG_BUCK3_VOLT, 291 291 .run_mask = BD71828_MASK_BUCK3_VOLT, 292 - .idle_mask = BD71828_MASK_BUCK3_VOLT, 293 - .suspend_mask = BD71828_MASK_BUCK3_VOLT, 294 - .lpsr_mask = BD71828_MASK_BUCK3_VOLT, 295 292 .idle_on_mask = BD71828_MASK_IDLE_EN, 296 293 .suspend_on_mask = BD71828_MASK_SUSP_EN, 297 294 .lpsr_on_mask = BD71828_MASK_LPSR_EN, ··· 320 329 ROHM_DVS_LEVEL_SUSPEND | 321 330 ROHM_DVS_LEVEL_LPSR, 322 331 .run_reg = BD71828_REG_BUCK4_VOLT, 323 - .idle_reg = BD71828_REG_BUCK4_VOLT, 324 - .suspend_reg = BD71828_REG_BUCK4_VOLT, 325 - .lpsr_reg = BD71828_REG_BUCK4_VOLT, 326 332 .run_mask = BD71828_MASK_BUCK4_VOLT, 327 - .idle_mask = BD71828_MASK_BUCK4_VOLT, 328 - .suspend_mask = BD71828_MASK_BUCK4_VOLT, 329 - .lpsr_mask = BD71828_MASK_BUCK4_VOLT, 330 333 .idle_on_mask = BD71828_MASK_IDLE_EN, 331 334 .suspend_on_mask = BD71828_MASK_SUSP_EN, 332 335 .lpsr_on_mask = BD71828_MASK_LPSR_EN, ··· 355 370 ROHM_DVS_LEVEL_SUSPEND | 356 371 ROHM_DVS_LEVEL_LPSR, 357 372 .run_reg = BD71828_REG_BUCK5_VOLT, 358 - .idle_reg = BD71828_REG_BUCK5_VOLT, 359 - .suspend_reg = BD71828_REG_BUCK5_VOLT, 360 - .lpsr_reg = BD71828_REG_BUCK5_VOLT, 361 373 .run_mask = BD71828_MASK_BUCK5_VOLT, 362 - .idle_mask = BD71828_MASK_BUCK5_VOLT, 363 - .suspend_mask = BD71828_MASK_BUCK5_VOLT, 364 - .lpsr_mask = BD71828_MASK_BUCK5_VOLT, 365 374 .idle_on_mask = BD71828_MASK_IDLE_EN, 366 375 .suspend_on_mask = BD71828_MASK_SUSP_EN, 367 376 .lpsr_on_mask = BD71828_MASK_LPSR_EN, ··· 472 493 ROHM_DVS_LEVEL_SUSPEND | 473 494 ROHM_DVS_LEVEL_LPSR, 474 495 .run_reg = BD71828_REG_LDO1_VOLT, 475 - .idle_reg = BD71828_REG_LDO1_VOLT, 476 - .suspend_reg = BD71828_REG_LDO1_VOLT, 477 - .lpsr_reg = BD71828_REG_LDO1_VOLT, 478 496 .run_mask = BD71828_MASK_LDO_VOLT, 479 - .idle_mask = BD71828_MASK_LDO_VOLT, 480 - .suspend_mask = BD71828_MASK_LDO_VOLT, 481 - .lpsr_mask = BD71828_MASK_LDO_VOLT, 482 497 .idle_on_mask = BD71828_MASK_IDLE_EN, 483 498 .suspend_on_mask = BD71828_MASK_SUSP_EN, 484 499 .lpsr_on_mask = BD71828_MASK_LPSR_EN, ··· 506 533 ROHM_DVS_LEVEL_SUSPEND | 507 534 ROHM_DVS_LEVEL_LPSR, 508 535 .run_reg = BD71828_REG_LDO2_VOLT, 509 - .idle_reg = BD71828_REG_LDO2_VOLT, 510 - .suspend_reg = BD71828_REG_LDO2_VOLT, 511 - .lpsr_reg = BD71828_REG_LDO2_VOLT, 512 536 .run_mask = BD71828_MASK_LDO_VOLT, 513 - .idle_mask = BD71828_MASK_LDO_VOLT, 514 - .suspend_mask = BD71828_MASK_LDO_VOLT, 515 - .lpsr_mask = BD71828_MASK_LDO_VOLT, 516 537 .idle_on_mask = BD71828_MASK_IDLE_EN, 517 538 .suspend_on_mask = BD71828_MASK_SUSP_EN, 518 539 .lpsr_on_mask = BD71828_MASK_LPSR_EN, ··· 540 573 ROHM_DVS_LEVEL_SUSPEND | 541 574 ROHM_DVS_LEVEL_LPSR, 542 575 .run_reg = BD71828_REG_LDO3_VOLT, 543 - .idle_reg = BD71828_REG_LDO3_VOLT, 544 - .suspend_reg = BD71828_REG_LDO3_VOLT, 545 - .lpsr_reg = BD71828_REG_LDO3_VOLT, 546 576 .run_mask = BD71828_MASK_LDO_VOLT, 547 - .idle_mask = BD71828_MASK_LDO_VOLT, 548 - .suspend_mask = BD71828_MASK_LDO_VOLT, 549 - .lpsr_mask = BD71828_MASK_LDO_VOLT, 550 577 .idle_on_mask = BD71828_MASK_IDLE_EN, 551 578 .suspend_on_mask = BD71828_MASK_SUSP_EN, 552 579 .lpsr_on_mask = BD71828_MASK_LPSR_EN, ··· 575 614 ROHM_DVS_LEVEL_SUSPEND | 576 615 ROHM_DVS_LEVEL_LPSR, 577 616 .run_reg = BD71828_REG_LDO4_VOLT, 578 - .idle_reg = BD71828_REG_LDO4_VOLT, 579 - .suspend_reg = BD71828_REG_LDO4_VOLT, 580 - .lpsr_reg = BD71828_REG_LDO4_VOLT, 581 617 .run_mask = BD71828_MASK_LDO_VOLT, 582 - .idle_mask = BD71828_MASK_LDO_VOLT, 583 - .suspend_mask = BD71828_MASK_LDO_VOLT, 584 - .lpsr_mask = BD71828_MASK_LDO_VOLT, 585 618 .idle_on_mask = BD71828_MASK_IDLE_EN, 586 619 .suspend_on_mask = BD71828_MASK_SUSP_EN, 587 620 .lpsr_on_mask = BD71828_MASK_LPSR_EN, ··· 610 655 ROHM_DVS_LEVEL_SUSPEND | 611 656 ROHM_DVS_LEVEL_LPSR, 612 657 .run_reg = BD71828_REG_LDO5_VOLT, 613 - .idle_reg = BD71828_REG_LDO5_VOLT, 614 - .suspend_reg = BD71828_REG_LDO5_VOLT, 615 - .lpsr_reg = BD71828_REG_LDO5_VOLT, 616 658 .run_mask = BD71828_MASK_LDO_VOLT, 617 - .idle_mask = BD71828_MASK_LDO_VOLT, 618 - .suspend_mask = BD71828_MASK_LDO_VOLT, 619 - .lpsr_mask = BD71828_MASK_LDO_VOLT, 620 659 .idle_on_mask = BD71828_MASK_IDLE_EN, 621 660 .suspend_on_mask = BD71828_MASK_SUSP_EN, 622 661 .lpsr_on_mask = BD71828_MASK_LPSR_EN, ··· 669 720 .suspend_reg = BD71828_REG_LDO7_VOLT, 670 721 .lpsr_reg = BD71828_REG_LDO7_VOLT, 671 722 .run_mask = BD71828_MASK_LDO_VOLT, 672 - .idle_mask = BD71828_MASK_LDO_VOLT, 673 - .suspend_mask = BD71828_MASK_LDO_VOLT, 674 - .lpsr_mask = BD71828_MASK_LDO_VOLT, 675 723 .idle_on_mask = BD71828_MASK_IDLE_EN, 676 724 .suspend_on_mask = BD71828_MASK_SUSP_EN, 677 725 .lpsr_on_mask = BD71828_MASK_LPSR_EN,