diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index 07d2c2a24c66..909af2984433 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -1115,6 +1115,8 @@ void mmc_gate_clock(struct mmc_host *host) { unsigned long flags; + WARN_ON(!host->ios.clock); + spin_lock_irqsave(&host->clk_lock, flags); host->clk_old = host->ios.clock; host->ios.clock = 0; @@ -1137,7 +1139,7 @@ void mmc_ungate_clock(struct mmc_host *host) * we just ignore the call. */ if (host->clk_old) { - BUG_ON(host->ios.clock); + WARN_ON(host->ios.clock); /* This call will also set host->clk_gated to false */ __mmc_set_clock(host, host->clk_old); } diff --git a/drivers/mmc/core/quirks.c b/drivers/mmc/core/quirks.c index dd1d1e0fe322..1adfb2d84248 100644 --- a/drivers/mmc/core/quirks.c +++ b/drivers/mmc/core/quirks.c @@ -35,6 +35,14 @@ #define SDIO_DEVICE_ID_MARVELL_8797_F0 0x9128 #endif +#ifndef SDIO_VENDOR_ID_MSM +#define SDIO_VENDOR_ID_MSM 0x0070 +#endif + +#ifndef SDIO_DEVICE_ID_MSM_WCN1314 +#define SDIO_DEVICE_ID_MSM_WCN1314 0x2881 +#endif + /* * This hook just adds a quirk for all sdio devices */ @@ -54,6 +62,9 @@ static const struct mmc_fixup mmc_fixup_methods[] = { SDIO_FIXUP(SDIO_VENDOR_ID_TI, SDIO_DEVICE_ID_TI_WL1271, remove_quirk, MMC_QUIRK_BROKEN_CLK_GATING), + SDIO_FIXUP(SDIO_VENDOR_ID_MSM, SDIO_DEVICE_ID_MSM_WCN1314, + remove_quirk, MMC_QUIRK_BROKEN_CLK_GATING), + SDIO_FIXUP(SDIO_VENDOR_ID_TI, SDIO_DEVICE_ID_TI_WL1271, add_quirk, MMC_QUIRK_NONSTD_FUNC_IF),