Loading drivers/mmc/core/mmc.c +3 −3 Original line number Diff line number Diff line Loading @@ -1212,13 +1212,13 @@ static int mmc_select_hs400(struct mmc_card *card) mmc_set_timing(host, MMC_TIMING_MMC_HS400); mmc_set_bus_speed(card); if (host->ops->hs400_complete) host->ops->hs400_complete(host); err = mmc_switch_status(card); if (err) goto out_err; if (host->ops->hs400_complete) host->ops->hs400_complete(host); return 0; out_err: Loading drivers/mmc/host/mtk-sd.c +22 −17 Original line number Diff line number Diff line Loading @@ -1023,6 +1023,8 @@ static void msdc_request_done(struct msdc_host *host, struct mmc_request *mrq) msdc_track_cmd_data(host, mrq->cmd, mrq->data); if (mrq->data) msdc_unprepare_data(host, mrq); if (host->error) msdc_reset_hw(host); mmc_request_done(host->mmc, mrq); } Loading Loading @@ -1375,24 +1377,25 @@ static void msdc_request_timeout(struct work_struct *work) } } static void __msdc_enable_sdio_irq(struct mmc_host *mmc, int enb) static void __msdc_enable_sdio_irq(struct msdc_host *host, int enb) { unsigned long flags; struct msdc_host *host = mmc_priv(mmc); spin_lock_irqsave(&host->lock, flags); if (enb) if (enb) { sdr_set_bits(host->base + MSDC_INTEN, MSDC_INTEN_SDIOIRQ); else sdr_set_bits(host->base + SDC_CFG, SDC_CFG_SDIOIDE); } else { sdr_clr_bits(host->base + MSDC_INTEN, MSDC_INTEN_SDIOIRQ); spin_unlock_irqrestore(&host->lock, flags); sdr_clr_bits(host->base + SDC_CFG, SDC_CFG_SDIOIDE); } } static void msdc_enable_sdio_irq(struct mmc_host *mmc, int enb) { unsigned long flags; struct msdc_host *host = mmc_priv(mmc); __msdc_enable_sdio_irq(mmc, enb); spin_lock_irqsave(&host->lock, flags); __msdc_enable_sdio_irq(host, enb); spin_unlock_irqrestore(&host->lock, flags); if (enb) pm_runtime_get_noresume(host->dev); Loading @@ -1414,6 +1417,8 @@ static irqreturn_t msdc_irq(int irq, void *dev_id) spin_lock_irqsave(&host->lock, flags); events = readl(host->base + MSDC_INT); event_mask = readl(host->base + MSDC_INTEN); if ((events & event_mask) & MSDC_INT_SDIOIRQ) __msdc_enable_sdio_irq(host, 0); /* clear interrupts */ writel(events & event_mask, host->base + MSDC_INT); Loading @@ -1422,10 +1427,8 @@ static irqreturn_t msdc_irq(int irq, void *dev_id) data = host->data; spin_unlock_irqrestore(&host->lock, flags); if ((events & event_mask) & MSDC_INT_SDIOIRQ) { __msdc_enable_sdio_irq(host->mmc, 0); if ((events & event_mask) & MSDC_INT_SDIOIRQ) sdio_signal_irq(host->mmc); } if ((events & event_mask) & MSDC_INT_CDSC) { if (host->internal_cd) Loading Loading @@ -1564,9 +1567,6 @@ static void msdc_init_hw(struct msdc_host *host) sdr_set_bits(host->base + SDC_CFG, SDC_CFG_SDIO); /* Config SDIO device detect interrupt function */ if (host->mmc->caps & MMC_CAP_SDIO_IRQ) sdr_set_bits(host->base + SDC_CFG, SDC_CFG_SDIOIDE); else sdr_clr_bits(host->base + SDC_CFG, SDC_CFG_SDIOIDE); /* Configure to default data timeout */ Loading Loading @@ -2095,7 +2095,12 @@ static void msdc_hw_reset(struct mmc_host *mmc) static void msdc_ack_sdio_irq(struct mmc_host *mmc) { __msdc_enable_sdio_irq(mmc, 1); unsigned long flags; struct msdc_host *host = mmc_priv(mmc); spin_lock_irqsave(&host->lock, flags); __msdc_enable_sdio_irq(host, 1); spin_unlock_irqrestore(&host->lock, flags); } static int msdc_get_cd(struct mmc_host *mmc) Loading Loading
drivers/mmc/core/mmc.c +3 −3 Original line number Diff line number Diff line Loading @@ -1212,13 +1212,13 @@ static int mmc_select_hs400(struct mmc_card *card) mmc_set_timing(host, MMC_TIMING_MMC_HS400); mmc_set_bus_speed(card); if (host->ops->hs400_complete) host->ops->hs400_complete(host); err = mmc_switch_status(card); if (err) goto out_err; if (host->ops->hs400_complete) host->ops->hs400_complete(host); return 0; out_err: Loading
drivers/mmc/host/mtk-sd.c +22 −17 Original line number Diff line number Diff line Loading @@ -1023,6 +1023,8 @@ static void msdc_request_done(struct msdc_host *host, struct mmc_request *mrq) msdc_track_cmd_data(host, mrq->cmd, mrq->data); if (mrq->data) msdc_unprepare_data(host, mrq); if (host->error) msdc_reset_hw(host); mmc_request_done(host->mmc, mrq); } Loading Loading @@ -1375,24 +1377,25 @@ static void msdc_request_timeout(struct work_struct *work) } } static void __msdc_enable_sdio_irq(struct mmc_host *mmc, int enb) static void __msdc_enable_sdio_irq(struct msdc_host *host, int enb) { unsigned long flags; struct msdc_host *host = mmc_priv(mmc); spin_lock_irqsave(&host->lock, flags); if (enb) if (enb) { sdr_set_bits(host->base + MSDC_INTEN, MSDC_INTEN_SDIOIRQ); else sdr_set_bits(host->base + SDC_CFG, SDC_CFG_SDIOIDE); } else { sdr_clr_bits(host->base + MSDC_INTEN, MSDC_INTEN_SDIOIRQ); spin_unlock_irqrestore(&host->lock, flags); sdr_clr_bits(host->base + SDC_CFG, SDC_CFG_SDIOIDE); } } static void msdc_enable_sdio_irq(struct mmc_host *mmc, int enb) { unsigned long flags; struct msdc_host *host = mmc_priv(mmc); __msdc_enable_sdio_irq(mmc, enb); spin_lock_irqsave(&host->lock, flags); __msdc_enable_sdio_irq(host, enb); spin_unlock_irqrestore(&host->lock, flags); if (enb) pm_runtime_get_noresume(host->dev); Loading @@ -1414,6 +1417,8 @@ static irqreturn_t msdc_irq(int irq, void *dev_id) spin_lock_irqsave(&host->lock, flags); events = readl(host->base + MSDC_INT); event_mask = readl(host->base + MSDC_INTEN); if ((events & event_mask) & MSDC_INT_SDIOIRQ) __msdc_enable_sdio_irq(host, 0); /* clear interrupts */ writel(events & event_mask, host->base + MSDC_INT); Loading @@ -1422,10 +1427,8 @@ static irqreturn_t msdc_irq(int irq, void *dev_id) data = host->data; spin_unlock_irqrestore(&host->lock, flags); if ((events & event_mask) & MSDC_INT_SDIOIRQ) { __msdc_enable_sdio_irq(host->mmc, 0); if ((events & event_mask) & MSDC_INT_SDIOIRQ) sdio_signal_irq(host->mmc); } if ((events & event_mask) & MSDC_INT_CDSC) { if (host->internal_cd) Loading Loading @@ -1564,9 +1567,6 @@ static void msdc_init_hw(struct msdc_host *host) sdr_set_bits(host->base + SDC_CFG, SDC_CFG_SDIO); /* Config SDIO device detect interrupt function */ if (host->mmc->caps & MMC_CAP_SDIO_IRQ) sdr_set_bits(host->base + SDC_CFG, SDC_CFG_SDIOIDE); else sdr_clr_bits(host->base + SDC_CFG, SDC_CFG_SDIOIDE); /* Configure to default data timeout */ Loading Loading @@ -2095,7 +2095,12 @@ static void msdc_hw_reset(struct mmc_host *mmc) static void msdc_ack_sdio_irq(struct mmc_host *mmc) { __msdc_enable_sdio_irq(mmc, 1); unsigned long flags; struct msdc_host *host = mmc_priv(mmc); spin_lock_irqsave(&host->lock, flags); __msdc_enable_sdio_irq(host, 1); spin_unlock_irqrestore(&host->lock, flags); } static int msdc_get_cd(struct mmc_host *mmc) Loading