Re: [PATCH v4 13/15] mmc eMMC signal voltage does not use CMD11

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



resend

On May 11, 2011, at 8:01 AM, Philip Rakity wrote:

> 
> On May 11, 2011, at 2:19 AM, zhangfei gao wrote:
> 
>> On Thu, May 5, 2011 at 2:49 AM, Arindam Nath <arindam.nath@xxxxxxx> wrote:
>>> eMMC chips do not use CMD11 when changing voltage.  Add extra
>>> argument to call to indicate if CMD11 needs to be sent.
>> 
>> mmc_set_signal_voltage or start_signal_voltage_switch may not support
>> emmc, not only cmd11, but also start_signal_voltage_switch is wrote
>> according to sd phys spec.
> 
> the callback may go to a different driver then sdhci.c  
> 
>> JESD84-A441 A8.1 describes how to support dual voltage of emmc,
>> however it only support to 1.8v.
>> Still not find emmc card which could support 1.2v.
> 
> eMMC 
> vcc -- 3.3v  then vccq can be 3.3 or 1.8 or 1.2v
> vcc -- 1.8v then vccq can be 1.8v or 1.2v
> 
> 1.2 v vccq support is indicated in the CARD TYPE [196]
> 
> a standard SD host controller does not support 1.2v vccq but folks could extend the standard.
> 
> eMMC is not expected to be voltage switched.  The expectation is the board designer will
> fix the voltages and no changes are needed. 
> 
> vccq is independent of vcc. see section 12.5.3.
> 
> 
>> 
>>> 
>>> Signed-off-by: Philip Rakity <prakity@xxxxxxxxxxx>
>>> Reviewed-by: Arindam Nath <arindam.nath@xxxxxxx>
>>> ---
>>> drivers/mmc/core/core.c |    4 ++--
>>> drivers/mmc/core/core.h |    3 ++-
>>> drivers/mmc/core/sd.c   |    4 ++--
>>> 3 files changed, 6 insertions(+), 5 deletions(-)
>>> 
>>> diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
>>> index 78a9b51..74b4409 100644
>>> --- a/drivers/mmc/core/core.c
>>> +++ b/drivers/mmc/core/core.c
>>> @@ -942,7 +942,7 @@ u32 mmc_select_voltage(struct mmc_host *host, u32 ocr)
>>>       return ocr;
>>> }
>>> 
>>> -int mmc_set_signal_voltage(struct mmc_host *host, int signal_voltage)
>>> +int mmc_set_signal_voltage(struct mmc_host *host, int signal_voltage, int cmd11)
>>> {
>>>       struct mmc_command cmd;
>>>       int err = 0;
>>> @@ -953,7 +953,7 @@ int mmc_set_signal_voltage(struct mmc_host *host, int signal_voltage)
>>>        * Send CMD11 only if the request is to switch the card to
>>>        * 1.8V signalling.
>>>        */
>>> -       if (signal_voltage == MMC_SIGNAL_VOLTAGE_180) {
>>> +       if ((signal_voltage != MMC_SIGNAL_VOLTAGE_330) && cmd11) {
>>>               memset(&cmd, 0, sizeof(struct mmc_command));
>>> 
>>>               cmd.opcode = SD_SWITCH_VOLTAGE;
>>> diff --git a/drivers/mmc/core/core.h b/drivers/mmc/core/core.h
>>> index 93f3397..3c11e17 100644
>>> --- a/drivers/mmc/core/core.h
>>> +++ b/drivers/mmc/core/core.h
>>> @@ -41,7 +41,8 @@ void mmc_set_bus_width(struct mmc_host *host, unsigned int width);
>>> void mmc_set_bus_width_ddr(struct mmc_host *host, unsigned int width,
>>>                          unsigned int ddr);
>>> u32 mmc_select_voltage(struct mmc_host *host, u32 ocr);
>>> -int mmc_set_signal_voltage(struct mmc_host *host, int signal_voltage);
>>> +int mmc_set_signal_voltage(struct mmc_host *host, int signal_voltage,
>>> +                          int cmd11);
>>> void mmc_set_timing(struct mmc_host *host, unsigned int timing);
>>> void mmc_set_driver_type(struct mmc_host *host, unsigned int drv_type);
>>> 
>>> diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
>>> index 851c8fc..d2a05ab 100644
>>> --- a/drivers/mmc/core/sd.c
>>> +++ b/drivers/mmc/core/sd.c
>>> @@ -731,7 +731,7 @@ try_again:
>>>        */
>>>       if (!mmc_host_is_spi(host) && rocr &&
>>>          ((*rocr & 0x41000000) == 0x41000000)) {
>>> -               err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180);
>>> +               err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180, 1);
>>>               if (err) {
>>>                       ocr &= ~SD_OCR_S18R;
>>>                       goto try_again;
>>> @@ -1104,7 +1104,7 @@ int mmc_attach_sd(struct mmc_host *host)
>>>       WARN_ON(!host->claimed);
>>> 
>>>       /* Make sure we are at 3.3V signalling voltage */
>>> -       err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330);
>>> +       err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, 0);
>>>       if (err)
>>>               return err;
>>> 
>>> --
>>> 1.7.1
>>> 
>>> 
> 

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


[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux