summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Lin <shawn.lin@rock-chips.com>2025-12-20 08:22:05 +0300
committerUlf Hansson <ulf.hansson@linaro.org>2026-02-23 14:06:53 +0300
commitc72be4c3066d5f8bee2c699e5c5ff6df5896f74e (patch)
tree456e84836d1cdccb5dd7603201c8ae6cf4ac22f8
parent3449b31eb18f9439dcebfd999c51c47bed148d3b (diff)
downloadlinux-c72be4c3066d5f8bee2c699e5c5ff6df5896f74e.tar.xz
mmc: dw_mmc: Introduce dw_mci_alloc_host()
This helper is used for variant drivers to allocate struct dw_mci and set struct dw_mci as private data of struct mmc_host. Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> Tested-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
-rw-r--r--drivers/mmc/host/dw_mmc.c17
-rw-r--r--drivers/mmc/host/dw_mmc.h1
2 files changed, 18 insertions, 0 deletions
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index 4ec60740b0b4..ecb32dc2a8f0 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -3258,6 +3258,23 @@ static void dw_mci_enable_cd(struct dw_mci *host)
}
}
+struct dw_mci *dw_mci_alloc_host(struct device *dev)
+{
+ struct mmc_host *mmc;
+ struct dw_mci *host;
+
+ mmc = devm_mmc_alloc_host(dev, sizeof(struct dw_mci));
+ if (!mmc)
+ return ERR_PTR(-ENOMEM);
+
+ host = mmc_priv(mmc);
+ host->mmc = mmc;
+ host->dev = dev;
+
+ return host;
+}
+EXPORT_SYMBOL(dw_mci_alloc_host);
+
int dw_mci_probe(struct dw_mci *host)
{
const struct dw_mci_drv_data *drv_data = host->drv_data;
diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h
index d5e4e6d67812..892b5451eb69 100644
--- a/drivers/mmc/host/dw_mmc.h
+++ b/drivers/mmc/host/dw_mmc.h
@@ -544,6 +544,7 @@ static inline void mci_fifo_l_writeq(void __iomem *addr, u64 value)
#define __raw_readq(__reg) (*(volatile u64 __force *)(__reg))
#endif
+extern struct dw_mci *dw_mci_alloc_host(struct device *device);
extern int dw_mci_probe(struct dw_mci *host);
extern void dw_mci_remove(struct dw_mci *host);
#ifdef CONFIG_PM