Commit 11dfb970 authored by Patrice Chotard's avatar Patrice Chotard Committed by Ulf Hansson

mmc: mmci: Don't pretend all variants to have OPENDRAIN bit

This patch prepares for supporting STM32 variant which doesn't
have opendrain bit in MMCIPOWER register.
ST others variant (u300, nomadik and ux500) uses MCI_OD bit whereas
others variants uses MCI_ROD bit.
Signed-off-by: default avatarPatrice Chotard <patrice.chotard@st.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 7f7b5503
...@@ -85,6 +85,7 @@ static unsigned int fmax = 515633; ...@@ -85,6 +85,7 @@ static unsigned int fmax = 515633;
* @mmcimask1: true if variant have a MMCIMASK1 register. * @mmcimask1: true if variant have a MMCIMASK1 register.
* @start_err: bitmask identifying the STARTBITERR bit inside MMCISTATUS * @start_err: bitmask identifying the STARTBITERR bit inside MMCISTATUS
* register. * register.
* @opendrain: bitmask identifying the OPENDRAIN bit inside MMCIPOWER register
*/ */
struct variant_data { struct variant_data {
unsigned int clkreg; unsigned int clkreg;
...@@ -116,6 +117,7 @@ struct variant_data { ...@@ -116,6 +117,7 @@ struct variant_data {
bool reversed_irq_handling; bool reversed_irq_handling;
bool mmcimask1; bool mmcimask1;
u32 start_err; u32 start_err;
u32 opendrain;
}; };
static struct variant_data variant_arm = { static struct variant_data variant_arm = {
...@@ -127,6 +129,7 @@ static struct variant_data variant_arm = { ...@@ -127,6 +129,7 @@ static struct variant_data variant_arm = {
.reversed_irq_handling = true, .reversed_irq_handling = true,
.mmcimask1 = true, .mmcimask1 = true,
.start_err = MCI_STARTBITERR, .start_err = MCI_STARTBITERR,
.opendrain = MCI_ROD,
}; };
static struct variant_data variant_arm_extended_fifo = { static struct variant_data variant_arm_extended_fifo = {
...@@ -137,6 +140,7 @@ static struct variant_data variant_arm_extended_fifo = { ...@@ -137,6 +140,7 @@ static struct variant_data variant_arm_extended_fifo = {
.f_max = 100000000, .f_max = 100000000,
.mmcimask1 = true, .mmcimask1 = true,
.start_err = MCI_STARTBITERR, .start_err = MCI_STARTBITERR,
.opendrain = MCI_ROD,
}; };
static struct variant_data variant_arm_extended_fifo_hwfc = { static struct variant_data variant_arm_extended_fifo_hwfc = {
...@@ -148,6 +152,7 @@ static struct variant_data variant_arm_extended_fifo_hwfc = { ...@@ -148,6 +152,7 @@ static struct variant_data variant_arm_extended_fifo_hwfc = {
.f_max = 100000000, .f_max = 100000000,
.mmcimask1 = true, .mmcimask1 = true,
.start_err = MCI_STARTBITERR, .start_err = MCI_STARTBITERR,
.opendrain = MCI_ROD,
}; };
static struct variant_data variant_u300 = { static struct variant_data variant_u300 = {
...@@ -165,6 +170,7 @@ static struct variant_data variant_u300 = { ...@@ -165,6 +170,7 @@ static struct variant_data variant_u300 = {
.pwrreg_nopower = true, .pwrreg_nopower = true,
.mmcimask1 = true, .mmcimask1 = true,
.start_err = MCI_STARTBITERR, .start_err = MCI_STARTBITERR,
.opendrain = MCI_OD,
}; };
static struct variant_data variant_nomadik = { static struct variant_data variant_nomadik = {
...@@ -183,6 +189,7 @@ static struct variant_data variant_nomadik = { ...@@ -183,6 +189,7 @@ static struct variant_data variant_nomadik = {
.pwrreg_nopower = true, .pwrreg_nopower = true,
.mmcimask1 = true, .mmcimask1 = true,
.start_err = MCI_STARTBITERR, .start_err = MCI_STARTBITERR,
.opendrain = MCI_OD,
}; };
static struct variant_data variant_ux500 = { static struct variant_data variant_ux500 = {
...@@ -207,6 +214,7 @@ static struct variant_data variant_ux500 = { ...@@ -207,6 +214,7 @@ static struct variant_data variant_ux500 = {
.pwrreg_nopower = true, .pwrreg_nopower = true,
.mmcimask1 = true, .mmcimask1 = true,
.start_err = MCI_STARTBITERR, .start_err = MCI_STARTBITERR,
.opendrain = MCI_OD,
}; };
static struct variant_data variant_ux500v2 = { static struct variant_data variant_ux500v2 = {
...@@ -233,6 +241,7 @@ static struct variant_data variant_ux500v2 = { ...@@ -233,6 +241,7 @@ static struct variant_data variant_ux500v2 = {
.pwrreg_nopower = true, .pwrreg_nopower = true,
.mmcimask1 = true, .mmcimask1 = true,
.start_err = MCI_STARTBITERR, .start_err = MCI_STARTBITERR,
.opendrain = MCI_OD,
}; };
static struct variant_data variant_qcom = { static struct variant_data variant_qcom = {
...@@ -253,6 +262,7 @@ static struct variant_data variant_qcom = { ...@@ -253,6 +262,7 @@ static struct variant_data variant_qcom = {
.qcom_dml = true, .qcom_dml = true,
.mmcimask1 = true, .mmcimask1 = true,
.start_err = MCI_STARTBITERR, .start_err = MCI_STARTBITERR,
.opendrain = MCI_ROD,
}; };
/* Busy detection for the ST Micro variant */ /* Busy detection for the ST Micro variant */
...@@ -1455,17 +1465,8 @@ static void mmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) ...@@ -1455,17 +1465,8 @@ static void mmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
~MCI_ST_DATA2DIREN); ~MCI_ST_DATA2DIREN);
} }
if (ios->bus_mode == MMC_BUSMODE_OPENDRAIN) { if (ios->bus_mode == MMC_BUSMODE_OPENDRAIN && variant->opendrain)
if (host->hw_designer != AMBA_VENDOR_ST) pwr |= variant->opendrain;
pwr |= MCI_ROD;
else {
/*
* The ST Micro variant use the ROD bit for something
* else and only has OD (Open Drain).
*/
pwr |= MCI_OD;
}
}
/* /*
* If clock = 0 and the variant requires the MMCIPOWER to be used for * If clock = 0 and the variant requires the MMCIPOWER to be used for
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment