aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/host/sdhci-pci.c
diff options
context:
space:
mode:
authorAdrian Hunter <adrian.hunter@intel.com>2011-06-29 07:23:47 -0400
committerChris Ball <cjb@laptop.org>2011-07-20 17:21:07 -0400
commit0d013bcf5c272faea1f8e7a5ef3cb2e98103d5cb (patch)
tree9b80b7b83cd753a39bb74f9eabfaf778988de29a /drivers/mmc/host/sdhci-pci.c
parent68077b0261f00e4eb2d26f066efca1edb89488a8 (diff)
mmc: sdhci-pci: allow 8-bit bus width for Intel Medfield eMMCs
Unless MMC_CAP_8_BIT_DATA is set, the bus width defaults to 4. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc/host/sdhci-pci.c')
-rw-r--r--drivers/mmc/host/sdhci-pci.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c
index e1ae855960b9..26c528648f3c 100644
--- a/drivers/mmc/host/sdhci-pci.c
+++ b/drivers/mmc/host/sdhci-pci.c
@@ -163,6 +163,12 @@ static int mrst_hc_probe(struct sdhci_pci_chip *chip)
163 return 0; 163 return 0;
164} 164}
165 165
166static int mfd_emmc_probe_slot(struct sdhci_pci_slot *slot)
167{
168 slot->host->mmc->caps |= MMC_CAP_8_BIT_DATA;
169 return 0;
170}
171
166static const struct sdhci_pci_fixes sdhci_intel_mrst_hc0 = { 172static const struct sdhci_pci_fixes sdhci_intel_mrst_hc0 = {
167 .quirks = SDHCI_QUIRK_BROKEN_ADMA | SDHCI_QUIRK_NO_HISPD_BIT, 173 .quirks = SDHCI_QUIRK_BROKEN_ADMA | SDHCI_QUIRK_NO_HISPD_BIT,
168 .probe_slot = mrst_hc_probe_slot, 174 .probe_slot = mrst_hc_probe_slot,
@@ -177,8 +183,13 @@ static const struct sdhci_pci_fixes sdhci_intel_mfd_sd = {
177 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC, 183 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
178}; 184};
179 185
180static const struct sdhci_pci_fixes sdhci_intel_mfd_emmc_sdio = { 186static const struct sdhci_pci_fixes sdhci_intel_mfd_sdio = {
187 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
188};
189
190static const struct sdhci_pci_fixes sdhci_intel_mfd_emmc = {
181 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC, 191 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
192 .probe_slot = mfd_emmc_probe_slot,
182}; 193};
183 194
184/* O2Micro extra registers */ 195/* O2Micro extra registers */
@@ -689,7 +700,7 @@ static const struct pci_device_id pci_ids[] __devinitdata = {
689 .device = PCI_DEVICE_ID_INTEL_MFD_SDIO1, 700 .device = PCI_DEVICE_ID_INTEL_MFD_SDIO1,
690 .subvendor = PCI_ANY_ID, 701 .subvendor = PCI_ANY_ID,
691 .subdevice = PCI_ANY_ID, 702 .subdevice = PCI_ANY_ID,
692 .driver_data = (kernel_ulong_t)&sdhci_intel_mfd_emmc_sdio, 703 .driver_data = (kernel_ulong_t)&sdhci_intel_mfd_sdio,
693 }, 704 },
694 705
695 { 706 {
@@ -697,7 +708,7 @@ static const struct pci_device_id pci_ids[] __devinitdata = {
697 .device = PCI_DEVICE_ID_INTEL_MFD_SDIO2, 708 .device = PCI_DEVICE_ID_INTEL_MFD_SDIO2,
698 .subvendor = PCI_ANY_ID, 709 .subvendor = PCI_ANY_ID,
699 .subdevice = PCI_ANY_ID, 710 .subdevice = PCI_ANY_ID,
700 .driver_data = (kernel_ulong_t)&sdhci_intel_mfd_emmc_sdio, 711 .driver_data = (kernel_ulong_t)&sdhci_intel_mfd_sdio,
701 }, 712 },
702 713
703 { 714 {
@@ -705,7 +716,7 @@ static const struct pci_device_id pci_ids[] __devinitdata = {
705 .device = PCI_DEVICE_ID_INTEL_MFD_EMMC0, 716 .device = PCI_DEVICE_ID_INTEL_MFD_EMMC0,
706 .subvendor = PCI_ANY_ID, 717 .subvendor = PCI_ANY_ID,
707 .subdevice = PCI_ANY_ID, 718 .subdevice = PCI_ANY_ID,
708 .driver_data = (kernel_ulong_t)&sdhci_intel_mfd_emmc_sdio, 719 .driver_data = (kernel_ulong_t)&sdhci_intel_mfd_emmc,
709 }, 720 },
710 721
711 { 722 {
@@ -713,7 +724,7 @@ static const struct pci_device_id pci_ids[] __devinitdata = {
713 .device = PCI_DEVICE_ID_INTEL_MFD_EMMC1, 724 .device = PCI_DEVICE_ID_INTEL_MFD_EMMC1,
714 .subvendor = PCI_ANY_ID, 725 .subvendor = PCI_ANY_ID,
715 .subdevice = PCI_ANY_ID, 726 .subdevice = PCI_ANY_ID,
716 .driver_data = (kernel_ulong_t)&sdhci_intel_mfd_emmc_sdio, 727 .driver_data = (kernel_ulong_t)&sdhci_intel_mfd_emmc,
717 }, 728 },
718 729
719 { 730 {