s5p_mmc: support 8-bit bus width

This Patch do support 8-bit bus width for s5p
So we add parameter for bus_width (in s5p_mmc_init(), s5p_mmc_initialize())
If want to use 8-bit bus width, only change (0, 8) instead of (0, 4).

 Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
 Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
 Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
This commit is contained in:
Jaehoon Chung 2010-09-27 15:43:52 +09:00 committed by Minkyu Kang
parent b485556be5
commit 1727e21698
3 changed files with 16 additions and 7 deletions

View File

@ -65,7 +65,7 @@ struct mmc_host {
unsigned int clock; /* Current clock (MHz) */
};
int s5p_mmc_init(int dev_index);
int s5p_mmc_init(int dev_index, int bus_width);
#endif /* __ASSEMBLY__ */
#endif

View File

@ -87,6 +87,6 @@ int board_mmc_init(bd_t *bis)
gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X);
}
return s5p_mmc_init(0);
return s5p_mmc_init(0, 4);
}
#endif

View File

@ -352,11 +352,16 @@ static void mmc_set_ios(struct mmc *mmc)
ctrl = readb(&host->reg->hostctl);
/*
* WIDE8[5]
* 0 = Depend on WIDE4
* 1 = 8-bit mode
* WIDE4[1]
* 1 = 4-bit mode
* 0 = 1-bit mode
*/
if (mmc->bus_width == 4)
if (mmc->bus_width == 8)
ctrl |= (1 << 5);
else if (mmc->bus_width == 4)
ctrl |= (1 << 1);
else
ctrl &= ~(1 << 1);
@ -437,7 +442,7 @@ static int mmc_core_init(struct mmc *mmc)
return 0;
}
static int s5p_mmc_initialize(int dev_index)
static int s5p_mmc_initialize(int dev_index, int bus_width)
{
struct mmc *mmc;
@ -450,7 +455,11 @@ static int s5p_mmc_initialize(int dev_index)
mmc->init = mmc_core_init;
mmc->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
mmc->host_caps = MMC_MODE_4BIT | MMC_MODE_HS_52MHz | MMC_MODE_HS;
if (bus_width == 8)
mmc->host_caps = MMC_MODE_8BIT;
else
mmc->host_caps = MMC_MODE_4BIT;
mmc->host_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
mmc->f_min = 400000;
mmc->f_max = 52000000;
@ -462,7 +471,7 @@ static int s5p_mmc_initialize(int dev_index)
return 0;
}
int s5p_mmc_init(int dev_index)
int s5p_mmc_init(int dev_index, int bus_width)
{
return s5p_mmc_initialize(dev_index);
return s5p_mmc_initialize(dev_index, bus_width);
}