Message ID | 1334839158-23544-2-git-send-email-l.majewski@samsung.com |
---|---|
State | Superseded, archived |
Delegated to: | Andy Fleming |
Headers | show |
On Thu, Apr 19, 2012 at 8:39 PM, Lukasz Majewski <l.majewski@samsung.com> wrote: > This patch sets the MMC width according to the MMC host capabilities. > It turned out, that there are some targets (e.g. GONI), which are able > to read data from SPI only at 4 bit mode. > This patch restricts the width number according to the MMC host. > > Signed-off-by: Lukasz Majewski <l.majewski@samsung.com> > Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> > Cc: Andy Fleming <afleming@gmail.com> > --- > drivers/mmc/mmc.c | 4 +++- > include/mmc.h | 3 +++ > 2 files changed, 6 insertions(+), 1 deletions(-) > > diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c > index e70fa9f..618960e 100644 > --- a/drivers/mmc/mmc.c > +++ b/drivers/mmc/mmc.c > @@ -1199,7 +1199,9 @@ int mmc_startup(struct mmc *mmc) > else > mmc_set_clock(mmc, 25000000); > } else { > - for (width = EXT_CSD_BUS_WIDTH_8; width >= 0; width--) { > + width = ((mmc->host_caps & MMC_MODE_MASK_WIDTH_BITS) >> > + MMC_MODE_WIDTH_BITS_SHIFT); > + for (; width >= 0; width--) { > /* Set the card to use 4 bit*/ > err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, > EXT_CSD_BUS_WIDTH, width); > diff --git a/include/mmc.h b/include/mmc.h > index f52df70..ee16349 100644 > --- a/include/mmc.h > +++ b/include/mmc.h > @@ -47,6 +47,9 @@ > #define MMC_MODE_SPI 0x400 > #define MMC_MODE_HC 0x800 > > +#define MMC_MODE_MASK_WIDTH_BITS (MMC_MODE_4BIT | MMC_MODE_8BIT) > +#define MMC_MODE_WIDTH_BITS_SHIFT 8 > + > #define SD_DATA_4BIT 0x00040000 > > #define IS_SD(x) (x->version & SD_VERSION_SD) > -- > 1.7.2.3 > Acked-by: Lei Wen <leiwen@marvell.com> Thanks, Lei
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index e70fa9f..618960e 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1199,7 +1199,9 @@ int mmc_startup(struct mmc *mmc) else mmc_set_clock(mmc, 25000000); } else { - for (width = EXT_CSD_BUS_WIDTH_8; width >= 0; width--) { + width = ((mmc->host_caps & MMC_MODE_MASK_WIDTH_BITS) >> + MMC_MODE_WIDTH_BITS_SHIFT); + for (; width >= 0; width--) { /* Set the card to use 4 bit*/ err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BUS_WIDTH, width); diff --git a/include/mmc.h b/include/mmc.h index f52df70..ee16349 100644 --- a/include/mmc.h +++ b/include/mmc.h @@ -47,6 +47,9 @@ #define MMC_MODE_SPI 0x400 #define MMC_MODE_HC 0x800 +#define MMC_MODE_MASK_WIDTH_BITS (MMC_MODE_4BIT | MMC_MODE_8BIT) +#define MMC_MODE_WIDTH_BITS_SHIFT 8 + #define SD_DATA_4BIT 0x00040000 #define IS_SD(x) (x->version & SD_VERSION_SD)