Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'mmc-fixes-for-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc

Pull MMC fixes from Chris Ball:
"Two small regression fixes:

- sdhci-s3c: Fix runtime PM regression against 3.7-rc1
- sh-mmcif: Fix oops against 3.6"

* tag 'mmc-fixes-for-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc:
mmc: sh-mmcif: avoid oops on spurious interrupts (second try)
Revert misapplied "mmc: sh-mmcif: avoid oops on spurious interrupts"
mmc: sdhci-s3c: fix missing clock for gpio card-detect

+9 -6
+7
drivers/mmc/host/sdhci-s3c.c
··· 373 373 static void sdhci_s3c_notify_change(struct platform_device *dev, int state) 374 374 { 375 375 struct sdhci_host *host = platform_get_drvdata(dev); 376 + struct sdhci_s3c *sc = sdhci_priv(host); 376 377 unsigned long flags; 377 378 378 379 if (host) { 379 380 spin_lock_irqsave(&host->lock, flags); 380 381 if (state) { 381 382 dev_dbg(&dev->dev, "card inserted.\n"); 383 + #ifdef CONFIG_PM_RUNTIME 384 + clk_prepare_enable(sc->clk_io); 385 + #endif 382 386 host->flags &= ~SDHCI_DEVICE_DEAD; 383 387 host->quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION; 384 388 } else { 385 389 dev_dbg(&dev->dev, "card removed.\n"); 386 390 host->flags |= SDHCI_DEVICE_DEAD; 387 391 host->quirks &= ~SDHCI_QUIRK_BROKEN_CARD_DETECTION; 392 + #ifdef CONFIG_PM_RUNTIME 393 + clk_disable_unprepare(sc->clk_io); 394 + #endif 388 395 } 389 396 tasklet_schedule(&host->card_tasklet); 390 397 spin_unlock_irqrestore(&host->lock, flags);
+2 -6
drivers/mmc/host/sh_mmcif.c
··· 1104 1104 { 1105 1105 struct sh_mmcif_host *host = dev_id; 1106 1106 struct mmc_request *mrq = host->mrq; 1107 - struct mmc_data *data = mrq->data; 1108 1107 1109 1108 cancel_delayed_work_sync(&host->timeout_work); 1110 1109 ··· 1151 1152 case MMCIF_WAIT_FOR_READ_END: 1152 1153 case MMCIF_WAIT_FOR_WRITE_END: 1153 1154 if (host->sd_error) 1154 - data->error = sh_mmcif_error_manage(host); 1155 + mrq->data->error = sh_mmcif_error_manage(host); 1155 1156 break; 1156 1157 default: 1157 1158 BUG(); 1158 1159 } 1159 1160 1160 1161 if (host->wait_for != MMCIF_WAIT_FOR_STOP) { 1162 + struct mmc_data *data = mrq->data; 1161 1163 if (!mrq->cmd->error && data && !data->error) 1162 1164 data->bytes_xfered = 1163 1165 data->blocks * data->blksz; ··· 1230 1230 if (err) { 1231 1231 host->sd_error = true; 1232 1232 dev_dbg(&host->pd->dev, "int err state = %08x\n", state); 1233 - } 1234 - if (host->state == STATE_IDLE) { 1235 - dev_info(&host->pd->dev, "Spurious IRQ status 0x%x", state); 1236 - return IRQ_HANDLED; 1237 1233 } 1238 1234 if (state & ~(INT_CMD12RBE | INT_CMD12CRE)) { 1239 1235 if (!host->dma_active)