@@ -107,6 +107,13 @@ static unsigned int esdhc_pltfm_get_max_blk_size(struct sdhci_host *host)
return 2;
}
+static unsigned int esdhc_pltfm_get_max_blk_count(struct sdhci_host *host)
+{
+ /* Fix errata ENGcm07207 which is present on i.MX25 and i.MX35 */
+
+ return (cpu_is_mx25() || cpu_is_mx35()) ? 1 : 65535;
+}
+
static int esdhc_pltfm_init(struct sdhci_host *host, struct sdhci_pltfm_data *pdata)
{
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
@@ -123,10 +130,6 @@ static int esdhc_pltfm_init(struct sdhci_host *host, struct sdhci_pltfm_data *pd
if (cpu_is_mx35() || cpu_is_mx51())
host->quirks |= SDHCI_QUIRK_BROKEN_TIMEOUT_VAL;
- /* Fix errata ENGcm07207 which is present on i.MX25 and i.MX35 */
- if (cpu_is_mx25() || cpu_is_mx35())
- host->quirks |= SDHCI_QUIRK_NO_MULTIBLOCK;
-
return 0;
}
@@ -146,6 +149,7 @@ static struct sdhci_ops sdhci_esdhc_ops = {
.get_max_clock = esdhc_pltfm_get_max_clock,
.get_min_clock = esdhc_pltfm_get_min_clock,
.get_max_blk_size = esdhc_pltfm_get_max_blk_size,
+ .get_max_blk_count = esdhc_pltfm_get_max_blk_count,
};
struct sdhci_pltfm_data sdhci_esdhc_imx_pdata = {
@@ -1979,7 +1979,10 @@ int sdhci_add_host(struct sdhci_host *host)
/*
* Maximum block count.
*/
- mmc->max_blk_count = (host->quirks & SDHCI_QUIRK_NO_MULTIBLOCK) ? 1 : 65535;
+ if (host->ops->get_max_blk_count)
+ mmc->max_blk_count = host->ops->get_max_blk_count(host);
+ else
+ mmc->max_blk_count = 65535;
/*
* Init tasklets.
@@ -218,6 +218,7 @@ struct sdhci_ops {
unsigned int (*get_min_clock)(struct sdhci_host *host);
unsigned int (*get_timeout_clock)(struct sdhci_host *host);
unsigned int (*get_max_blk_size)(struct sdhci_host *host);
+ unsigned int (*get_max_blk_count)(struct sdhci_host *host);
int (*platform_8bit_width)(struct sdhci_host *host,
int width);
void (*platform_send_init_74_clocks)(struct sdhci_host *host,
@@ -65,8 +65,8 @@ struct sdhci_host {
#define SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET (1<<19)
/* Reclaimed */
#define SDHCI_QUIRK_UNUSED_20 (1<<20)
-/* Controller cannot do multi-block transfers */
-#define SDHCI_QUIRK_NO_MULTIBLOCK (1<<21)
+/* Reclaimed */
+#define SDHCI_QUIRK_UNUSED_21 (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 */