[Linux-stm32] [PATCH v4 09/10] mmc: mmci: Break out a helper function
Linus Walleij
linus.walleij at linaro.org
Tue Jun 13 20:34:25 UTC 2023
These four lines clearing, masking and resetting the state
of the busy detect state machine is repeated five times in
the code so break this out to a small helper so things are
easier to read.
Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
---
ChangeLog v3->v4:
- No changes.
ChangeLog v2->v3:
- Rebased.
ChangeLog v1->v2:
- No changes
---
drivers/mmc/host/mmci.c | 36 ++++++++++++++++--------------------
1 file changed, 16 insertions(+), 20 deletions(-)
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index cb766b8d419d..478f71dc7f34 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -654,6 +654,17 @@ static u32 ux500v2_get_dctrl_cfg(struct mmci_host *host)
return MCI_DPSM_ENABLE | (host->data->blksz << 16);
}
+static void ux500_busy_clear_mask_done(struct mmci_host *host)
+{
+ void __iomem *base = host->base;
+
+ writel(host->variant->busy_detect_mask, base + MMCICLEAR);
+ writel(readl(base + MMCIMASK0) &
+ ~host->variant->busy_detect_mask, base + MMCIMASK0);
+ host->busy_state = MMCI_BUSY_DONE;
+ host->busy_status = 0;
+}
+
/*
* ux500_busy_complete() - this will wait until the busy status
* goes off, saving any status that occur in the meantime into
@@ -668,11 +679,7 @@ static bool ux500_busy_complete(struct mmci_host *host, u32 status, u32 err_msk)
if (status & err_msk) {
/* Stop any ongoing busy detection if an error occurs */
- writel(host->variant->busy_detect_mask, base + MMCICLEAR);
- writel(readl(base + MMCIMASK0) &
- ~host->variant->busy_detect_mask, base + MMCIMASK0);
- host->busy_state = MMCI_BUSY_DONE;
- host->busy_status = 0;
+ ux500_busy_clear_mask_done(host);
goto out_ret_state;
}
@@ -714,10 +721,7 @@ static bool ux500_busy_complete(struct mmci_host *host, u32 status, u32 err_msk)
retries--;
}
dev_dbg(mmc_dev(host->mmc), "no busy signalling in time\n");
- writel(host->variant->busy_detect_mask, base + MMCICLEAR);
- writel(readl(base + MMCIMASK0) &
- ~host->variant->busy_detect_mask, base + MMCIMASK0);
- host->busy_state = MMCI_BUSY_DONE;
+ ux500_busy_clear_mask_done(host);
break;
/*
@@ -739,11 +743,7 @@ static bool ux500_busy_complete(struct mmci_host *host, u32 status, u32 err_msk)
} else {
dev_dbg(mmc_dev(host->mmc),
"lost busy status when waiting for busy start IRQ\n");
- writel(host->variant->busy_detect_mask, base + MMCICLEAR);
- writel(readl(base + MMCIMASK0) &
- ~host->variant->busy_detect_mask, base + MMCIMASK0);
- host->busy_state = MMCI_BUSY_DONE;
- host->busy_status = 0;
+ ux500_busy_clear_mask_done(host);
}
break;
@@ -751,15 +751,11 @@ static bool ux500_busy_complete(struct mmci_host *host, u32 status, u32 err_msk)
if (status & host->variant->busy_detect_flag) {
host->busy_status |= status & (MCI_CMDSENT | MCI_CMDRESPEND);
writel(host->variant->busy_detect_mask, base + MMCICLEAR);
- host->busy_state = MMCI_BUSY_DONE;
+ ux500_busy_clear_mask_done(host);
} else {
dev_dbg(mmc_dev(host->mmc),
"lost busy status when waiting for busy end IRQ\n");
- writel(host->variant->busy_detect_mask, base + MMCICLEAR);
- writel(readl(base + MMCIMASK0) &
- ~host->variant->busy_detect_mask, base + MMCIMASK0);
- host->busy_state = MMCI_BUSY_DONE;
- host->busy_status = 0;
+ ux500_busy_clear_mask_done(host);
}
break;
--
2.40.1
More information about the Linux-stm32
mailing list