On Mon, Nov 8, 2010 at 4:17 AM, Wolfram Sang <[email protected]> wrote:
>> > This isn't a quirk, this is platform_data, no?
>>
>> Never sure of the difference between a quirk and platform data.
>> example: Broken card detect is a quirk but maybe some slots on the board
>> work and some do not
>
> A quirk is something which needs to be handled in a special case because
> some controllers do not adhere to the SDHC standard. An 8 bit bus seems
> to be in the 3.0 standard, so it is not a quirk :) Does the standard say
> anything about how the actual bus width should be handled?
>
> That said, you are right that quirks have been abused to cover board
> issues. Another reason to clean them up ;)
>
> Regards,
>
> Wolfram
>
> --
> Pengutronix e.K. | Wolfram Sang |
> Industrial Linux Solutions | http://www.pengutronix.de/ |
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
>
> iEYEARECAAYFAkzXwEIACgkQD27XaX1/VRuQ8QCeN1ueDODn5jbt9MS49MCJcQXS
> BccAn0VnBmmBbLRFvBf/wo4zStAXUGV0
> =VwO1
> -----END PGP SIGNATURE-----
>
>
Highly concern of abuse of QUIRK, currently the highest bit is
(1<<29), while the quirks is u32.
Could we remove some quirk, such as SDHCI_QUIRK_FORCE_1_BIT_DATA,
which only used to transfer info to caps.
We could simply update mmc->caps after sdhci_add_host.
arch/arm/plat-pxa/include/plat/sdhci.h | 2 ++
drivers/mmc/host/sdhci-pxa.c | 5 +++++
drivers/mmc/host/sdhci.c | 3 ---
include/linux/mmc/sdhci.h | 2 --
4 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/arch/arm/plat-pxa/include/plat/sdhci.h
b/arch/arm/plat-pxa/include/plat/sdhci.h
index e49c5b6..661dc48 100644
--- a/arch/arm/plat-pxa/include/plat/sdhci.h
+++ b/arch/arm/plat-pxa/include/plat/sdhci.h
@@ -16,6 +16,8 @@
/* pxa specific flag */
/* Require clock free running */
#define PXA_FLAG_DISABLE_CLOCK_GATING (1<<0)
+#define PXA_FLAG_FORCE_1_BIT_DATA (1<<2)
+#define PXA_FLAG_CAN_DO_8_BIT_DATA (1<<3)
/*
* struct pxa_sdhci_platdata() - Platform device data for PXA SDHCI
diff --git a/drivers/mmc/host/sdhci-pxa.c b/drivers/mmc/host/sdhci-pxa.c
index fc406ac..3d63a37 100644
--- a/drivers/mmc/host/sdhci-pxa.c
+++ b/drivers/mmc/host/sdhci-pxa.c
@@ -147,6 +147,11 @@ static int __devinit sdhci_pxa_probe(struct
platform_device *pdev)
goto out;
}
+ if (pxa->pdata->flags & PXA_FLAG_FORCE_1_BIT_DATA)
+ host->mmc->caps &= ~(MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA);
+ if (pxa->pdata->flags & PXA_FLAG_CAN_DO_8_BIT_DATA)
+ host->mmc->caps |= MMC_CAP_8_BIT_DATA;
+
if (pxa->pdata->max_speed)
host->mmc->f_max = pxa->pdata->max_speed;
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 154cbf8..2628ec2 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1858,9 +1858,6 @@ int sdhci_add_host(struct sdhci_host *host)
mmc->f_max = host->max_clk;
mmc->caps |= MMC_CAP_SDIO_IRQ;
- if (!(host->quirks & SDHCI_QUIRK_FORCE_1_BIT_DATA))
- mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA;
-
if (caps & SDHCI_CAN_DO_HISPD)
mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED;
diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h
index 1fdc673..ede02a4 100644
--- a/include/linux/mmc/sdhci.h
+++ b/include/linux/mmc/sdhci.h
@@ -67,8 +67,6 @@ struct sdhci_host {
#define SDHCI_QUIRK_FORCE_BLK_SZ_2048 (1<<20)
/* Controller cannot do multi-block transfers */
#define SDHCI_QUIRK_NO_MULTIBLOCK (1<<21)
-/* Controller can only handle 1-bit data transfers */
-#define SDHCI_QUIRK_FORCE_1_BIT_DATA (1<<22)
/* Controller needs 10ms delay between applying power and clock */
#define SDHCI_QUIRK_DELAY_AFTER_POWER (1<<23)
/* Controller uses SDCLK instead of TMCLK for data timeouts */
--
1.7.0.4
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html