From: Steve Chen <[email protected]>
Simplify code to calculate MMC/SD memory clock divide.
In the original code, much of the logic were dedicated to rounding
up the memory clock divide (mmc_push_pull). The code can be simplified
by rounding up in the algorithm itself.
Original code has
cpu_arm_clk
mmc_push_pull = ------------------- - 1
2 * mmc_req_freq
We can round up by doing
cpu_arm_clk + 2 * mmc_req_freq - 1
mmc_push_pull = ------------------------------------ - 1
2 * mmc_req_freq
Since
2 * mmc_req_freq
1 = -------------------
2 * mmc_req_freq
The algorithm becomes
cpu_arm_clk + 2 * mmc_req_freq - 1 - 2 * mmc_req_freq
mmc_push_pull = ------------------------------------------------------
2 * mmc_req_freq
or simply
cpu_arm_clk - 1
mmc_push_pull = ------------------
2 * mmc_req_freq
Signed-off-by: Steve Chen <[email protected]>
---
drivers/mmc/host/davinci_mmc.c | 21 ++++-----------------
1 files changed, 4 insertions(+), 17 deletions(-)
diff --git a/drivers/mmc/host/davinci_mmc.c b/drivers/mmc/host/davinci_mmc.c
index 9b23802..dab8db1 100644
--- a/drivers/mmc/host/davinci_mmc.c
+++ b/drivers/mmc/host/davinci_mmc.c
@@ -719,24 +719,11 @@ static void mmc_davinci_request(struct mmc_host *mmc,
struct mmc_request *req)
mmc_davinci_start_command(host, req->cmd);
}
-static unsigned int calculate_freq_for_card(struct mmc_davinci_host *host,
- unsigned int mmc_req_freq)
+static inline
+unsigned int calculate_freq_for_card(struct mmc_davinci_host *host,
+ unsigned int mmc_req_freq)
{
- unsigned int mmc_freq = 0, cpu_arm_clk = 0, mmc_push_pull = 0;
-
- cpu_arm_clk = host->mmc_input_clk;
- if (cpu_arm_clk > (2 * mmc_req_freq))
- mmc_push_pull = ((unsigned int)cpu_arm_clk
- / (2 * mmc_req_freq)) - 1;
- else
- mmc_push_pull = 0;
-
- mmc_freq = (unsigned int)cpu_arm_clk / (2 * (mmc_push_pull + 1));
-
- if (mmc_freq > mmc_req_freq)
- mmc_push_pull = mmc_push_pull + 1;
-
- return mmc_push_pull;
+ return (host->mmc_input_clk - 1) / (mmc_req_freq * 2);
}
static void mmc_davinci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source