| 1 | --- a/drivers/mmc/host/omap.c |
| 2 | +++ b/drivers/mmc/host/omap.c |
| 3 | @@ -1456,6 +1456,7 @@ static int __init mmc_omap_probe(struct |
| 4 | host->dma_ch = -1; |
| 5 | |
| 6 | host->irq = irq; |
| 7 | + host->reg_shift = (cpu_is_omap7xx() ? 1 : 2); |
| 8 | host->phys_base = host->mem_res->start; |
| 9 | host->virt_base = ioremap(res->start, res->end - res->start + 1); |
| 10 | if (!host->virt_base) |
| 11 | @@ -1495,7 +1496,9 @@ static int __init mmc_omap_probe(struct |
| 12 | } |
| 13 | } |
| 14 | |
| 15 | - host->reg_shift = (cpu_is_omap7xx() ? 1 : 2); |
| 16 | + /* Make sure the detect workqueue was run at least once. */ |
| 17 | + printk(KERN_INFO "OMAP-mmc: waiting for cards...\n"); |
| 18 | + mmc_flush_scheduled_work(); |
| 19 | |
| 20 | return 0; |
| 21 | |
| 22 | --- a/drivers/mmc/core/core.c |
| 23 | +++ b/drivers/mmc/core/core.c |
| 24 | @@ -75,12 +75,13 @@ static int mmc_schedule_delayed_work(str |
| 25 | } |
| 26 | |
| 27 | /* |
| 28 | - * Internal function. Flush all scheduled work from the MMC work queue. |
| 29 | + * Flush all scheduled work from the MMC work queue. |
| 30 | */ |
| 31 | -static void mmc_flush_scheduled_work(void) |
| 32 | +void mmc_flush_scheduled_work(void) |
| 33 | { |
| 34 | flush_workqueue(workqueue); |
| 35 | } |
| 36 | +EXPORT_SYMBOL(mmc_flush_scheduled_work); |
| 37 | |
| 38 | /** |
| 39 | * mmc_request_done - finish processing an MMC request |
| 40 | --- a/include/linux/mmc/host.h |
| 41 | +++ b/include/linux/mmc/host.h |
| 42 | @@ -325,5 +325,7 @@ static inline int mmc_card_is_powered_re |
| 43 | return host->pm_flags & MMC_PM_KEEP_POWER; |
| 44 | } |
| 45 | |
| 46 | +void mmc_flush_scheduled_work(void); |
| 47 | + |
| 48 | #endif |
| 49 | |
| 50 | |