#define  ESDHC_VENDOR_SPEC_VSELECT     (1 << 1)
 #define  ESDHC_VENDOR_SPEC_FRC_SDCLK_ON        (1 << 8)
 #define ESDHC_WTMK_LVL                 0x44
+#define  ESDHC_WTMK_DEFAULT_VAL                0x10401040
 #define ESDHC_MIX_CTRL                 0x48
 #define  ESDHC_MIX_CTRL_DDREN          (1 << 3)
 #define  ESDHC_MIX_CTRL_AC23EN         (1 << 7)
         * to something insane.  Change it back here.
         */
        if (esdhc_is_usdhc(imx_data)) {
-               writel(0x10401040, host->ioaddr + ESDHC_WTMK_LVL);
+               writel(ESDHC_WTMK_DEFAULT_VAL, host->ioaddr + ESDHC_WTMK_LVL);
 
                host->quirks2 |= SDHCI_QUIRK2_PRESET_VALUE_BROKEN;
                host->mmc->caps |= MMC_CAP_1_8V_DDR;
 
 static int sdhci_esdhc_resume(struct device *dev)
 {
+       struct sdhci_host *host = dev_get_drvdata(dev);
+       struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+       struct pltfm_imx_data *imx_data = sdhci_pltfm_priv(pltfm_host);
+
+       /* restore watermark setting in case it's lost in low power mode */
+       if (esdhc_is_usdhc(imx_data))
+               writel(ESDHC_WTMK_DEFAULT_VAL, host->ioaddr + ESDHC_WTMK_LVL);
+
        return sdhci_pltfm_resume(dev);
 }