> -----Original Message-----
> From: Hein_Tibosch [mailto:[email protected]]
> Sent: Wednesday, December 07, 2011 11:37 AM
> To: Huang Changming-R66093
> Cc: [email protected]; [email protected]; Chris Ball
> Subject: Re: [PATCH 2/5 v2] MMC/core: Add f_min to mmc_power_on()
> 
> Hi Jerry,
> On 12/7/2011 10:23 AM, Huang Changming-R66093 wrote:
> >
> >> -----Original Message-----
> >> From: Hein_Tibosch [mailto:[email protected]]
> >> Sent: Tuesday, December 06, 2011 8:13 PM
> >> To: Huang Changming-R66093
> >> Cc: [email protected]; Huang Changming-R66093; Chris Ball
> >> Subject: Re: [PATCH 2/5 v2] MMC/core: Add f_min to mmc_power_on()
> >>
> >> <cut>
> >>> diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index
> >>> a08e6b1..2d40c04 100644
> >>> --- a/drivers/mmc/core/core.c
> >>> +++ b/drivers/mmc/core/core.c
> >>> @@ -1253,7 +1253,10 @@ static void mmc_power_up(struct mmc_host *host)
> >>>    */
> >>>   mmc_delay(10);
> >>>
> >>> - host->ios.clock = host->f_init;
> >>> + if (host->f_init)
> >>> +         host->ios.clock = host->f_init;
> >>> + else
> >>> +         host->ios.clock = host->f_min;
> >> Are you sure f_min can have a value of zero?
> >> It should have been set mmc_rescan_try_freq(), when trying a list of
> >> frequencies: 400000, 300000, 200000, 100000
> >>
> > But, mmc_power_up is called not only by mmc_rescan_try_freq, so the
> value of f_init may be zero.
> 
> Ok, I see: mmc_power_up() used to be called only after
> mmc_rescan_try_freq(), but now you want to call it earlier, because
> get_cd() *might* need it, even if get_cd is not defined...
> 
> Still I wonder whether it's good to power-up each and every card:
> 
> +     mmc_power_up(host);
>       if (host->ops->get_cd && host->ops->get_cd(host) == 0)
>               goto out;
> +     mmc_power_off(host);
> 
> before initialization starts. Remember earlier complaints that f_min is
> extremely low on some platforms and therefor f_init was introduced.
You can view the v3 patch I posted, only when get_cd is defined, this function 
is called. 
Some controller may use GPIO to detect the card preset or absent, card can be 
detected without power on. But the other controller has the pin to detect the 
card, so we need the power on to update the register.

Function mmc_power_restore_host and mmc_resume_host have called mmc_power_up, 
these two function are used for PM.
If the controller support get_cd and there is not card present, 
mmc_rescan_try_freq  can't be called, then the f_init can't be initized. If 
SDHC enter sleep and resume, mmc_power_up will be called by the two function I 
mentioned. In this case, the f_init can be zero.
So my code first check if the f_init is zero, if yes, f_min will be used. F_min 
is always initialized during the SDHC controller. 

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to