[PATCH v2 3/6] mci: sdhci: add set_uhs_signaling callback
Steffen Trumtrar
s.trumtrar at pengutronix.de
Mon Mar 9 05:04:35 PDT 2026
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 371d3e4a4b..f7172347e1 100644
--- a/drivers/mci/sdhci.c
+++ b/drivers/mci/sdhci.c
@@ -471,7 +471,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 int timing)
{
u16 ctrl_2;
@@ -997,7 +997,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 e7c56d59f4..8d21febd7a 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 int 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 667829c489..7d903dec05 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 *host, unsigned int timing);
};
/** host information */
--
2.52.0
More information about the barebox
mailing list