• Adrian Hunter's avatar
    mmc: sdhci: Fix voltage switch delay · c981cdfb
    Adrian Hunter authored
    Commit 20b92a30 ("mmc: sdhci: update signal voltage switch code")
    removed voltage switch delays from sdhci because mmc core had been
    enhanced to support them. However that assumed that sdhci_set_ios()
    did a single clock change, which it did not, and so the delays in mmc
    core, which should have come after the first clock change, were not
    effective.
    
    Fix by avoiding re-configuring UHS and preset settings when the clock
    is turning on and the settings have not changed. That then also avoids
    the associated clock changes, so that then sdhci_set_ios() does a single
    clock change when voltage switching, and the mmc core delays become
    effective.
    
    To do that has meant keeping track of driver strength (host->drv_type),
    and cases of reinitialization (host->reinit_uhs).
    
    Note also, the 'turning_on_clk' restriction should not be necessary
    but is done to minimize the impact of the change on stable kernels.
    
    Fixes: 20b92a30 ("mmc: sdhci: update signal voltage switch code")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
    Link: https://lore.kernel.org/r/20221128133259.38305-2-adrian.hunter@intel.comSigned-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    c981cdfb
sdhci.c 129 KB