mmc: fix low-end gpio-debounce detection failed dpm suspend
authorlintao <lintao@rock-chips.com>
Mon, 22 Sep 2014 07:09:28 +0000 (15:09 +0800)
committerlintao <lintao@rock-chips.com>
Mon, 22 Sep 2014 07:10:08 +0000 (15:10 +0800)
drivers/mmc/host/rk_sdmmc.c

index 59d3299b9b6adce37ace25cb1503c2c0f1e8360c..310b591080ea499f19db266e8799b6693578d9b0 100755 (executable)
@@ -4091,8 +4091,17 @@ int dw_mci_suspend(struct dw_mci *host)
         /*only for sdmmc controller*/
         if (host->mmc->restrict_caps & RESTRICT_CARD_TYPE_SD) {
                 host->mmc->rescan_disable = 1;
-                if (cancel_delayed_work_sync(&host->mmc->detect))
-                       wake_unlock(&host->mmc->detect_wake_lock);
+                if (!(cpu_is_rk312x() || cpu_is_rk3036())) {
+                        if (cancel_delayed_work_sync(&host->mmc->detect))
+                               wake_unlock(&host->mmc->detect_wake_lock);
+                } else {
+                        /* we find dpm suspend timeout for mmc cancel this work sync way,
+                           actually just workaround this for low end platform with
+                           gpio-debounce detect method.
+                        */
+                        if (cancel_delayed_work(&host->mmc->detect))
+                                wake_unlock(&host->mmc->detect_wake_lock);
+                }
 
                 disable_irq(host->irq);
                 if (pinctrl_select_state(host->pinctrl, host->pins_idle) < 0)