| 1 | --- a/drivers/mmc/core/sd.c |
| 2 | +++ b/drivers/mmc/core/sd.c |
| 3 | @@ -389,6 +389,15 @@ int mmc_sd_switch_hs(struct mmc_card *ca |
| 4 | return -ENOMEM; |
| 5 | } |
| 6 | |
| 7 | + /* |
| 8 | + * Some SDHC cards, notably those with a Sandisk SD controller |
| 9 | + * (also found in Kingston products) need a bit of slack |
| 10 | + * before successfully handling the SWITCH command. So far, |
| 11 | + * cards identifying themselves as "SD04G" and "SD08G" are |
| 12 | + * affected |
| 13 | + */ |
| 14 | + udelay(1000); |
| 15 | + |
| 16 | err = mmc_sd_switch(card, 1, 0, 1, status); |
| 17 | if (err) |
| 18 | goto out; |
| 19 | --- a/drivers/mmc/core/core.c |
| 20 | +++ b/drivers/mmc/core/core.c |
| 21 | @@ -529,9 +529,9 @@ void mmc_set_data_timeout(struct mmc_dat |
| 22 | * The limit is really 250 ms, but that is |
| 23 | * insufficient for some crappy cards. |
| 24 | */ |
| 25 | - limit_us = 300000; |
| 26 | + limit_us = 500000; |
| 27 | else |
| 28 | - limit_us = 100000; |
| 29 | + limit_us = 200000; |
| 30 | |
| 31 | /* |
| 32 | * SDHC cards always use these fixed values. |
| 33 | |