diff options
Diffstat (limited to 'drivers/mmc/host/sh_mmcif.c')
| -rw-r--r-- | drivers/mmc/host/sh_mmcif.c | 10 | 
1 files changed, 3 insertions, 7 deletions
diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c index 11d2bc3b51d..7eaee3eeb6b 100644 --- a/drivers/mmc/host/sh_mmcif.c +++ b/drivers/mmc/host/sh_mmcif.c @@ -1104,7 +1104,6 @@ static irqreturn_t sh_mmcif_irqt(int irq, void *dev_id)  {  	struct sh_mmcif_host *host = dev_id;  	struct mmc_request *mrq = host->mrq; -	struct mmc_data *data = mrq->data;  	cancel_delayed_work_sync(&host->timeout_work); @@ -1152,13 +1151,14 @@ static irqreturn_t sh_mmcif_irqt(int irq, void *dev_id)  	case MMCIF_WAIT_FOR_READ_END:  	case MMCIF_WAIT_FOR_WRITE_END:  		if (host->sd_error) -			data->error = sh_mmcif_error_manage(host); +			mrq->data->error = sh_mmcif_error_manage(host);  		break;  	default:  		BUG();  	}  	if (host->wait_for != MMCIF_WAIT_FOR_STOP) { +		struct mmc_data *data = mrq->data;  		if (!mrq->cmd->error && data && !data->error)  			data->bytes_xfered =  				data->blocks * data->blksz; @@ -1231,10 +1231,6 @@ static irqreturn_t sh_mmcif_intr(int irq, void *dev_id)  		host->sd_error = true;  		dev_dbg(&host->pd->dev, "int err state = %08x\n", state);  	} -	if (host->state == STATE_IDLE) { -		dev_info(&host->pd->dev, "Spurious IRQ status 0x%x", state); -		return IRQ_HANDLED; -	}  	if (state & ~(INT_CMD12RBE | INT_CMD12CRE)) {  		if (!host->dma_active)  			return IRQ_WAKE_THREAD; @@ -1466,9 +1462,9 @@ static int __devexit sh_mmcif_remove(struct platform_device *pdev)  	platform_set_drvdata(pdev, NULL); +	clk_disable(host->hclk);  	mmc_free_host(host->mmc);  	pm_runtime_put_sync(&pdev->dev); -	clk_disable(host->hclk);  	pm_runtime_disable(&pdev->dev);  	return 0;  |