Re: [PATCH v7] mmc: support BKOPS feature for eMMC

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

 



Hello Jaehoon,

On Fri, January 20, 2012 8:48 am, Jaehoon Chung wrote:
...
> diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c
> index 4d41fa9..109d0f0 100644
> --- a/drivers/mmc/core/mmc_ops.c
> +++ b/drivers/mmc/core/mmc_ops.c
> @@ -392,13 +392,22 @@ int mmc_switch(struct mmc_card *card, u8 set, u8
> index, u8 value,
>  		  (index << 16) |
>  		  (value << 8) |
>  		  set;
> -	cmd.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC;
> +	cmd.flags = MMC_CMD_AC;
> +	if (index == EXT_CSD_BKOPS_START &&
> +	    card->ext_csd.raw_bkops_status < EXT_CSD_BKOPS_LEVEL_2)
> +		cmd.flags |= MMC_RSP_SPI_R1 | MMC_RSP_R1;
> +	else
> +		cmd.flags |= MMC_RSP_SPI_R1B | MMC_RSP_R1B;

It is not good to use conditional on 'index', because this function
(mmc_switch)
is generic and in case you want functionality like here "in some cases cmd
 should not wait for PROG_DONE" it is better to use different approach:

1. Use internal function with additional parameter wait_for_prog_done:

int __mmc_switch(struct mmc_card *card, u8 set, u8 index,
                 unsigned int timeout_ms, u8 wait_for_prog_done)
{
...
    if(wait_for_prog_done)
      cmd.flags |= MMC_RSP_SPI_R1B | MMC_RSP_R1B;
    else
      cmd.flags |= MMC_RSP_SPI_R1 | MMC_RSP_R1;
...
}

2. implement mmc_switch through __mmc_switch()
   int mmc_switch(struct mmc_card *card, u8 set, u8 index,
                                   unsigned int timeout_ms)
   {
     return __mmc_switch(card, set, index, timeout_ms, 0);
   }
3. when you need to start bkops, use: __mmc_switch(card, set, index,
timeout_ms, 1);

Does it make sense?

-- 
Konstantin Dorfman
Consultant for Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum


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