Hi Dinh, According to DesignWare Spec, we need to check which bus-mode use. You can refer to "https://patchwork.kernel.org/patch/1379521/". I know that hold_reg didn't use always, although hold_reg is set. Best Regards, Jaehoon Chung On 12/14/2012 05:03 AM, dinguyen@xxxxxxxxxx wrote: > From: Dinh Nguyen <dinguyen@xxxxxxxxxx> > > Add code to read value of the use_hold_reg in the cmd register so that > the cmdflags can be correct. > > Signed-off-by: Dinh Nguyen <dinguyen@xxxxxxxxxx> > --- > drivers/mmc/host/dw_mmc.c | 6 ++++++ > drivers/mmc/host/dw_mmc.h | 1 + > include/linux/mmc/dw_mmc.h | 3 +++ > 3 files changed, 10 insertions(+) > > diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c > index 323c502..490490b 100644 > --- a/drivers/mmc/host/dw_mmc.c > +++ b/drivers/mmc/host/dw_mmc.c > @@ -265,6 +265,9 @@ static u32 dw_mci_prepare_command(struct mmc_host *mmc, struct mmc_command *cmd) > if (drv_data && drv_data->prepare_command) > drv_data->prepare_command(slot->host, &cmdr); > > + if (slot->host->use_hold_reg) > + cmdr |= SDMMC_CMD_USE_HOLD_REG; > + > return cmdr; > } > > @@ -2183,6 +2186,9 @@ int dw_mci_probe(struct dw_mci *host) > host->data_shift = 2; > } > > + /* Get the USE_HOLD_REG */ > + host->use_hold_reg = mci_readl(host, CMD) & SDMMC_CMD_USE_HOLD_REG; > + > /* Reset all blocks */ > if (!mci_wait_reset(host->dev, host)) > return -ENODEV; > diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h > index 53b8fd9..6172900 100644 > --- a/drivers/mmc/host/dw_mmc.h > +++ b/drivers/mmc/host/dw_mmc.h > @@ -111,6 +111,7 @@ > #define SDMMC_INT_ERROR 0xbfc2 > /* Command register defines */ > #define SDMMC_CMD_START BIT(31) > +#define SDMMC_CMD_USE_HOLD_REG BIT(29) > #define SDMMC_CMD_CCS_EXP BIT(23) > #define SDMMC_CMD_CEATA_RD BIT(22) > #define SDMMC_CMD_UPD_CLK BIT(21) > diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h > index 34be4f4..36cab8a 100644 > --- a/include/linux/mmc/dw_mmc.h > +++ b/include/linux/mmc/dw_mmc.h > @@ -187,6 +187,9 @@ struct dw_mci { > struct regulator *vmmc; /* Power regulator */ > unsigned long irq_flags; /* IRQ flags */ > int irq; > + > + /* Set to one for SDR12 and SDR25 */ > + unsigned int use_hold_reg; > }; > > /* DMA ops for Internal/External DMAC interface */ > -- 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