lkml.org 
[lkml]   [2020]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 062/264] regulator: resolve supply after creating regulator
    Date
    From: Michał Mirosław <mirq-linux@rere.qmqm.pl>

    [ Upstream commit aea6cb99703e17019e025aa71643b4d3e0a24413 ]

    When creating a new regulator its supply cannot create the sysfs link
    because the device is not yet published. Remove early supply resolving
    since it will be done later anyway. This makes the following error
    disappear and the symlinks get created instead.

    DCDC_REG1: supplied by VSYS
    VSYS: could not add device link regulator.3 err -2

    Note: It doesn't fix the problem for bypassed regulators, though.

    Fixes: 45389c47526d ("regulator: core: Add early supply resolution for regulators")
    Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
    Link: https://lore.kernel.org/r/ba09e0a8617ffeeb25cb4affffe6f3149319cef8.1601155770.git.mirq-linux@rere.qmqm.pl
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/regulator/core.c | 21 +++++++++++++--------
    1 file changed, 13 insertions(+), 8 deletions(-)

    diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
    index 37e6270749eef..c290c89421314 100644
    --- a/drivers/regulator/core.c
    +++ b/drivers/regulator/core.c
    @@ -4363,15 +4363,20 @@ regulator_register(const struct regulator_desc *regulator_desc,
    else if (regulator_desc->supply_name)
    rdev->supply_name = regulator_desc->supply_name;

    - /*
    - * Attempt to resolve the regulator supply, if specified,
    - * but don't return an error if we fail because we will try
    - * to resolve it again later as more regulators are added.
    - */
    - if (regulator_resolve_supply(rdev))
    - rdev_dbg(rdev, "unable to resolve supply\n");
    -
    ret = set_machine_constraints(rdev, constraints);
    + if (ret == -EPROBE_DEFER) {
    + /* Regulator might be in bypass mode and so needs its supply
    + * to set the constraints */
    + /* FIXME: this currently triggers a chicken-and-egg problem
    + * when creating -SUPPLY symlink in sysfs to a regulator
    + * that is just being created */
    + ret = regulator_resolve_supply(rdev);
    + if (!ret)
    + ret = set_machine_constraints(rdev, constraints);
    + else
    + rdev_dbg(rdev, "unable to resolve supply early: %pe\n",
    + ERR_PTR(ret));
    + }
    if (ret < 0)
    goto wash;

    --
    2.25.1


    \
     
     \ /
      Last update: 2020-10-27 15:22    [W:4.064 / U:0.620 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site