• D
    regulator: core: Don't err if allow-set-load but no allowed-modes · 57919f4a
    Douglas Anderson 提交于
    Apparently the device trees of some boards have the property
    "regulator-allow-set-load" for some of their regulators but then they
    don't specify anything for "regulator-allowed-modes". That's not
    really legit, but...
    
    ...before commit efb0cb50 ("regulator: qcom-rpmh: Implement
    get_optimum_mode(), not set_load()") they used to get away with it, at
    least on boards using RPMH regulators. That's because when a regulator
    driver implements set_load() then the core doesn't look at
    "regulator-allowed-modes" when trying to automatically adjust things
    in response to the regulator's load. The core doesn't know what mode
    we'll end up in, so how could it validate it?
    
    Said another way: before commit efb0cb50 ("regulator: qcom-rpmh:
    Implement get_optimum_mode(), not set_load()") some boards _were_
    having the regulator mode adjusted despite listing no allowed
    modes. After commit efb0cb50 ("regulator: qcom-rpmh: Implement
    get_optimum_mode(), not set_load()") these same boards were now
    getting an error returned when trying to use their regulators, since
    simply enabling a regulator tries to update its load and that was
    failing.
    
    We don't really want to go back to the behavior from before commit
    efb0cb50 ("regulator: qcom-rpmh: Implement get_optimum_mode(), not
    set_load()"). Boards shouldn't have been changing modes if no allowed
    modes were listed. However, the behavior after commit efb0cb50
    ("regulator: qcom-rpmh: Implement get_optimum_mode(), not set_load()")
    isn't the best because now boards can't even turn their regulators on.
    
    Let's choose to detect this case and return "no error" from
    drms_uA_update(). The net-result will be _different_ behavior than we
    had before commit efb0cb50 ("regulator: qcom-rpmh: Implement
    get_optimum_mode(), not set_load()"), but this new behavior seems more
    correct. If a board truly needed the mode switched then its device
    tree should be updated to list the allowed modes.
    Reported-by: NAndrew Halaney <ahalaney@redhat.com>
    Fixes: efb0cb50 ("regulator: qcom-rpmh: Implement get_optimum_mode(), not set_load()")
    Signed-off-by: NDouglas Anderson <dianders@chromium.org>
    Tested-by: NAndrew Halaney <ahalaney@redhat.com>
    Link: https://lore.kernel.org/r/20220824142229.RFT.v2.2.I6f77860e5cd98bf5c67208fa9edda4a08847c304@changeidSigned-off-by: NMark Brown <broonie@kernel.org>
    57919f4a
core.c 158.3 KB