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]

 



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.
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.

>
> 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