MMC: OMAP: Clean up omap set_ios and make MMC_POWER_ON work
PATCH 3/3 MMC: OMAP: Clean up omap set_ios and make MMC_POWER_ON work
Move divisor calculation into a separate function and re-arrange the init order to make MMC_POWER_ON work.
Signed-off-by Tony Lindgren <[email protected]>
drivers/mmc/omap.c +26 -21
@@ -937,33 +937,41 @@ static void mmc_omap_power(struct mmc_om } } -static void mmc_omap_set_ios (struct mmc_host *mmc,struct mmc_ios *ios) +static int mmc_omap_calc_divisor (struct mmc_host *mmc,struct mmc_ios *ios) {struct mmc_omap_host *host =mmc_priv (mmc); +int func_clk_rate =clk_get_rate (host->fclk);int dsor; -int realclock, i; - - realclock = ios->clock;if (ios->clock ==0 ) - dsor =0 ; -else { -int func_clk_rate =clk_get_rate (host->fclk); - - dsor = func_clk_rate / realclock; -if (dsor <1 ) - dsor =1 ; +return 0 ; -if (func_clk_rate / dsor > realclock) - dsor++; + dsor = func_clk_rate / ios->clock; +if (dsor <1 ) + dsor =1 ; -if (dsor >250 ) - dsor =250 ; +if (func_clk_rate / dsor > ios->clock) dsor++; -if (ios->bus_width ==MMC_BUS_WIDTH_4 ) - dsor |=1 <<15 ; - } +if (dsor >250 ) + dsor =250 ; + dsor++; + +if (ios->bus_width ==MMC_BUS_WIDTH_4 ) + dsor |=1 <<15 ; + +return dsor; +} + +static void mmc_omap_set_ios (struct mmc_host *mmc,struct mmc_ios *ios) +{ +struct mmc_omap_host *host =mmc_priv (mmc); +int dsor; +int i; + + dsor =mmc_omap_calc_divisor (mmc, ios); + host->bus_mode = ios->bus_mode; + host->hw_bus_mode = host->bus_mode;switch (ios->power_mode) {case MMC_POWER_OFF :
@@ -978,9 +986,6 @@ static void mmc_omap_set_ios(struct mmc_break ; } - host->bus_mode = ios->bus_mode; - host->hw_bus_mode = host->bus_mode; -clk_enable (host->fclk);/* On insanely high arm_per frequencies something sometimes