
HI Alper,
On 2022/3/16 01:46, Alper Nebi Yasak wrote:
Delegate setting the Enhanced Strobe configuration to individual drivers if they set a function for it. Return -ENOTSUPP if they do not, like what the MMC uclass does.
Signed-off-by: Alper Nebi Yasak alpernebiyasak@gmail.com Reviewed-by: Jaehoon Chung jh80.chung@samsung.com
Reviewed-by: Kever Yang kever.yang@rock-chips.com
Thanks, - Kever
(no changes since v4)
Changes in v4:
- Add comment for SDHCI set_enhanced_strobe() operation
Changes in v2:
Add tag: "Reviewed-by: Jaehoon Chung jh80.chung@samsung.com"
drivers/mmc/sdhci.c | 18 ++++++++++++++++++ include/sdhci.h | 12 ++++++++++++ 2 files changed, 30 insertions(+)
diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c index 766e4a6b0c5e..bf989a594f7e 100644 --- a/drivers/mmc/sdhci.c +++ b/drivers/mmc/sdhci.c @@ -513,6 +513,7 @@ void sdhci_set_uhs_timing(struct sdhci_host *host) reg |= SDHCI_CTRL_UHS_SDR104; break; case MMC_HS_400:
- case MMC_HS_400_ES: reg |= SDHCI_CTRL_HS400; break; default:
@@ -666,6 +667,7 @@ static int sdhci_set_ios(struct mmc *mmc) mmc->selected_mode == MMC_DDR_52 || mmc->selected_mode == MMC_HS_200 || mmc->selected_mode == MMC_HS_400 ||
mmc->selected_mode == UHS_SDR25 || mmc->selected_mode == UHS_SDR50 || mmc->selected_mode == UHS_SDR104 ||mmc->selected_mode == MMC_HS_400_ES ||
@@ -799,6 +801,19 @@ static int sdhci_wait_dat0(struct udevice *dev, int state, return -ETIMEDOUT; }
+#if CONFIG_IS_ENABLED(MMC_HS400_ES_SUPPORT) +static int sdhci_set_enhanced_strobe(struct udevice *dev) +{
- struct mmc *mmc = mmc_get_mmc_dev(dev);
- struct sdhci_host *host = mmc->priv;
- if (host->ops && host->ops->set_enhanced_strobe)
return host->ops->set_enhanced_strobe(host);
- return -ENOTSUPP;
+} +#endif
- const struct dm_mmc_ops sdhci_ops = { .send_cmd = sdhci_send_command, .set_ios = sdhci_set_ios,
@@ -808,6 +823,9 @@ const struct dm_mmc_ops sdhci_ops = { .execute_tuning = sdhci_execute_tuning, #endif .wait_dat0 = sdhci_wait_dat0, +#if CONFIG_IS_ENABLED(MMC_HS400_ES_SUPPORT)
- .set_enhanced_strobe = sdhci_set_enhanced_strobe,
+#endif }; #else static const struct mmc_ops sdhci_ops = { diff --git a/include/sdhci.h b/include/sdhci.h index c8d69f5a63f7..88f1917480b6 100644 --- a/include/sdhci.h +++ b/include/sdhci.h @@ -272,6 +272,18 @@ struct sdhci_ops { int (*platform_execute_tuning)(struct mmc *host, u8 opcode); int (*set_delay)(struct sdhci_host *host); int (*deferred_probe)(struct sdhci_host *host);
/**
* set_enhanced_strobe() - Set HS400 Enhanced Strobe config
*
* This is called after setting the card speed and mode to
* HS400 ES, and should set any host-specific configuration
* necessary for it.
*
* @host: SDHCI host structure
* Return: 0 if successful, -ve on error
*/
int (*set_enhanced_strobe)(struct sdhci_host *host); };
#define ADMA_MAX_LEN 65532