[PATCH 4/5] mci: sdhci: add set_uhs_signaling callback
Steffen Trumtrar
s.trumtrar at pengutronix.de
Mon Dec 15 06:21:26 PST 2025
Allow adding a set_uhs_signaling callback in a host driver.
If the callback is not provided, just call the generic
sdhci_set_uhs_signaling function as before.
Signed-off-by: Steffen Trumtrar <s.trumtrar at pengutronix.de>
---
drivers/mci/sdhci.c | 7 +++++--
drivers/mci/sdhci.h | 1 +
include/mci.h | 1 +
3 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/drivers/mci/sdhci.c b/drivers/mci/sdhci.c
index cfdfdbba8d..e24575d541 100644
--- a/drivers/mci/sdhci.c
+++ b/drivers/mci/sdhci.c
@@ -473,7 +473,7 @@ void sdhci_set_bus_width(struct sdhci *host, int width)
sdhci_write8(host, SDHCI_HOST_CONTROL, ctrl);
}
-static void sdhci_set_uhs_signaling(struct sdhci *host, unsigned timing)
+void sdhci_set_uhs_signaling(struct sdhci *host, unsigned timing)
{
u16 ctrl_2;
@@ -999,7 +999,10 @@ void sdhci_set_clock(struct sdhci *host, unsigned int clock, unsigned int input_
host->mci->ios.clock = 0;
- sdhci_set_uhs_signaling(host, host->mci->ios.timing);
+ if (host->mci->ops.set_uhs_signaling)
+ host->mci->ops.set_uhs_signaling(host->mci, host->mci->ios.timing);
+ else
+ sdhci_set_uhs_signaling(host, host->mci->ios.timing);
sdhci_wait_idle_data(host, NULL);
diff --git a/drivers/mci/sdhci.h b/drivers/mci/sdhci.h
index 6b3849e5f7..9c70eae111 100644
--- a/drivers/mci/sdhci.h
+++ b/drivers/mci/sdhci.h
@@ -344,6 +344,7 @@ static inline void sdhci_write8(struct sdhci *host, int reg, u32 val)
}
#define SDHCI_NO_DMA DMA_ERROR_CODE
+void sdhci_set_uhs_signaling(struct sdhci *host, unsigned timing);
int sdhci_execute_tuning(struct sdhci *sdhci, u32 opcode);
int sdhci_wait_idle_data(struct sdhci *host, struct mci_cmd *cmd);
int sdhci_wait_idle(struct sdhci *host, struct mci_cmd *cmd, struct mci_data *data);
diff --git a/include/mci.h b/include/mci.h
index e54f6eba8d..c4faf11054 100644
--- a/include/mci.h
+++ b/include/mci.h
@@ -583,6 +583,7 @@ struct mci_ops {
int (*card_write_protected)(struct mci_host *);
/* The tuning command opcode value is different for SD and eMMC cards */
int (*execute_tuning)(struct mci_host *, u32);
+ void (*set_uhs_signaling)(struct mci_host *, unsigned int);
};
/** host information */
--
2.51.0
More information about the barebox
mailing list