• Jisheng Zhang's avatar
    mmc: sdhci: restore behavior when setting VDD via external regulator · 918f4cbd
    Jisheng Zhang authored
    After commit 52221610 ("mmc: sdhci: Improve external VDD regulator
    support"), for the VDD is supplied via external regulators, we ignore
    the code to convert a VDD voltage request into one of the standard
    SDHCI voltage levels, then program it in the SDHCI_POWER_CONTROL. This
    brings two issues:
    
    1. SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON quirk isn't handled properly any
    more.
    
    2. What's more, once SDHCI_POWER_ON bit is set, some controllers such
    as the sdhci-pxav3 used in marvell berlin SoCs require the voltage
    levels programming in the SDHCI_POWER_CONTROL register, even the VDD
    is supplied by external regulator. So the host in marvell berlin SoCs
    still works fine after the commit. However, commit 3cbc6123 ("mmc:
    sdhci: Set SDHCI_POWER_ON with external vmmc") sets the SDHCI_POWER_ON
    bit, this would make the host in marvell berlin SoCs won't work any
    more with external vmmc.
    
    This patch restores the behavior when setting VDD through external
    regulator by moving the call of mmc_regulator_set_ocr() to the end
    of sdhci_set_power() function.
    
    After this patch, the sdcard on Marvell Berlin SoC boards work again.
    Signed-off-by: default avatarJisheng Zhang <jszhang@marvell.com>
    Fixes: 52221610 ("mmc: sdhci: Improve external VDD ...")
    Reviewed-by: default avatarLudovic Desroches <ludovic.desroches@atmel.com>
    Tested-by: default avatarLudovic Desroches <ludovic.desroches@atmel.com>
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    918f4cbd
sdhci.c 91 KB