mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +00:00
mmc: sdhci: Check and call config_dll callback functions
Check if the low level driver supports config_dll callback function and call it if it does. Call with dll disable before calling set_clock and with dll enable after it. Signed-off-by: Ashok Reddy Soma <ashok.reddy.soma@amd.com>
This commit is contained in:
parent
14ef4c7be5
commit
6f5bb9913c
2 changed files with 18 additions and 0 deletions
|
@ -396,6 +396,14 @@ int sdhci_set_clock(struct mmc *mmc, unsigned int clock)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (host->ops && host->ops->config_dll) {
|
||||||
|
ret = host->ops->config_dll(host, clock, false);
|
||||||
|
if (ret) {
|
||||||
|
printf("%s: Error while configuring dll\n", __func__);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300) {
|
if (SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300) {
|
||||||
/*
|
/*
|
||||||
* Check if the Host Controller supports Programmable Clock
|
* Check if the Host Controller supports Programmable Clock
|
||||||
|
@ -439,6 +447,14 @@ int sdhci_set_clock(struct mmc *mmc, unsigned int clock)
|
||||||
if (host->ops && host->ops->set_clock)
|
if (host->ops && host->ops->set_clock)
|
||||||
host->ops->set_clock(host, div);
|
host->ops->set_clock(host, div);
|
||||||
|
|
||||||
|
if (host->ops && host->ops->config_dll) {
|
||||||
|
ret = host->ops->config_dll(host, clock, true);
|
||||||
|
if (ret) {
|
||||||
|
printf("%s: Error while configuring dll\n", __func__);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
clk |= (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT;
|
clk |= (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT;
|
||||||
clk |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN)
|
clk |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN)
|
||||||
<< SDHCI_DIVIDER_HI_SHIFT;
|
<< SDHCI_DIVIDER_HI_SHIFT;
|
||||||
|
|
|
@ -272,6 +272,8 @@ struct sdhci_ops {
|
||||||
void (*set_clock)(struct sdhci_host *host, u32 div);
|
void (*set_clock)(struct sdhci_host *host, u32 div);
|
||||||
int (*platform_execute_tuning)(struct mmc *host, u8 opcode);
|
int (*platform_execute_tuning)(struct mmc *host, u8 opcode);
|
||||||
int (*set_delay)(struct sdhci_host *host);
|
int (*set_delay)(struct sdhci_host *host);
|
||||||
|
/* Callback function to set DLL clock configuration */
|
||||||
|
int (*config_dll)(struct sdhci_host *host, u32 clock, bool enable);
|
||||||
int (*deferred_probe)(struct sdhci_host *host);
|
int (*deferred_probe)(struct sdhci_host *host);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue