• Mark Brown's avatar
    regulator: Defer init completion for a while after late_initcall · 55576cf1
    Mark Brown authored
    The kernel has no way of knowing when we have finished instantiating
    drivers, between deferred probe and systems that build key drivers as
    modules we might be doing this long after userspace has booted. This has
    always been a bit of an issue with regulator_init_complete since it can
    power off hardware that's not had it's driver loaded which can result in
    user visible effects, the main case is powering off displays. Practically
    speaking it's not been an issue in real systems since most systems that
    use the regulator API are embedded and build in key drivers anyway but
    with Arm laptops coming on the market it's becoming more of an issue so
    let's do something about it.
    
    In the absence of any better idea just defer the powering off for 30s
    after late_initcall(), this is obviously a hack but it should mask the
    issue for now and it's no more arbitrary than late_initcall() itself.
    Ideally we'd have some heuristics to detect if we're on an affected
    system and tune or skip the delay appropriately, and there may be some
    need for a command line option to be added.
    
    Link: https://lore.kernel.org/r/20190904124250.25844-1-broonie@kernel.orgSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    Tested-by: default avatarLee Jones <lee.jones@linaro.org>
    Cc: stable@vger.kernel.org
    55576cf1
core.c 147 KB