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:

committed by
Jaehoon Chung

parent
14ef4c7be5
commit
6f5bb9913c
@@ -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);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user