The MMC core uses mmc->clk_disable to request that the card clock is
stopped, but the PL180 driver leaves SDI_CLKCR_CLKEN unchanged. This can
leave inactive hosts driving their card clocks.

Honor clk_disable when programming the clock control register.

Acked-by: Peng Fan <[email protected]>
Signed-off-by: Linus Walleij <[email protected]>
---
 drivers/mmc/arm_pl180_mmci.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/mmc/arm_pl180_mmci.c b/drivers/mmc/arm_pl180_mmci.c
index af21b814641e..28eb367f2e0a 100644
--- a/drivers/mmc/arm_pl180_mmci.c
+++ b/drivers/mmc/arm_pl180_mmci.c
@@ -294,6 +294,10 @@ static int  host_set_ios(struct mmc *dev)
        u32 sdi_clkcr;
 
        sdi_clkcr = readl(&host->base->clock);
+       if (dev->clk_disable)
+               sdi_clkcr &= ~SDI_CLKCR_CLKEN;
+       else
+               sdi_clkcr |= SDI_CLKCR_CLKEN;
 
        /* Ramp up the clock rate */
        if (dev->clock) {

-- 
2.55.0

Reply via email to