diff --git a/kernel.spec b/kernel.spec index ad5441478..1e91b763f 100644 --- a/kernel.spec +++ b/kernel.spec @@ -833,6 +833,11 @@ Patch13636: skge-quirk-to-4gb-dma.patch Patch13637: dmar-disable-when-ricoh-multifunction.patch +Patch13640: mmc-SDHCI_INT_DATA_MASK-typo-error.patch +Patch13641: mmc-add-ricoh-e822-pci-id.patch +Patch13642: mmc-make-sdhci-work-with-ricoh-mmc-controller.patch +Patch13643: sdhci-8-bit-data-transfer-width-support.patch + %endif BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root @@ -1578,6 +1583,11 @@ ApplyPatch skge-quirk-to-4gb-dma.patch # rhbz#605888 ApplyPatch dmar-disable-when-ricoh-multifunction.patch +ApplyPatch mmc-SDHCI_INT_DATA_MASK-typo-error.patch +ApplyPatch sdhci-8-bit-data-transfer-width-support.patch +ApplyPatch mmc-make-sdhci-work-with-ricoh-mmc-controller.patch +ApplyPatch mmc-add-ricoh-e822-pci-id.patch + # END OF PATCH APPLICATIONS %endif @@ -2199,6 +2209,10 @@ fi %changelog +* Mon Oct 18 2010 Kyle McMartin +- Add Ricoh e822 support. (rhbz#596475) Thanks to sgruszka@ for + sending the patches in. + * Mon Oct 18 2010 Kyle McMartin 2.6.34.7-60 - Quirk to disable DMAR with Ricoh card reader/firewire. (rhbz#605888) diff --git a/mmc-SDHCI_INT_DATA_MASK-typo-error.patch b/mmc-SDHCI_INT_DATA_MASK-typo-error.patch new file mode 100644 index 000000000..fcc442b91 --- /dev/null +++ b/mmc-SDHCI_INT_DATA_MASK-typo-error.patch @@ -0,0 +1,39 @@ +From kernel-bounces@lists.fedoraproject.org Thu Sep 9 09:22:50 2010 +From: Stanislaw Gruszka +Subject: [PATCH 1/4] mmc: SDHCI_INT_DATA_MASK typo error +Date: Thu, 9 Sep 2010 15:22:16 +0200 + +From: Zhangfei Gao + +Upstream a751a7d69fe91e4640884ae02fe44ddceb7f4cd8 commit. + +Signed-off-by: Zhangfei Gao +Reviewed-by: Matt Fleming +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +--- + drivers/mmc/host/sdhci.h | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h +index 842f46f..9ba4268 100644 +--- a/drivers/mmc/host/sdhci.h ++++ b/drivers/mmc/host/sdhci.h +@@ -127,7 +127,7 @@ + #define SDHCI_INT_DATA_MASK (SDHCI_INT_DATA_END | SDHCI_INT_DMA_END | \ + SDHCI_INT_DATA_AVAIL | SDHCI_INT_SPACE_AVAIL | \ + SDHCI_INT_DATA_TIMEOUT | SDHCI_INT_DATA_CRC | \ +- SDHCI_INT_DATA_END_BIT | SDHCI_ADMA_ERROR) ++ SDHCI_INT_DATA_END_BIT | SDHCI_INT_ADMA_ERROR) + #define SDHCI_INT_ALL_MASK ((unsigned int)-1) + + #define SDHCI_ACMD12_ERR 0x3C +-- +1.7.1 + +_______________________________________________ +kernel mailing list +kernel@lists.fedoraproject.org +https://admin.fedoraproject.org/mailman/listinfo/kernel + diff --git a/mmc-add-ricoh-e822-pci-id.patch b/mmc-add-ricoh-e822-pci-id.patch new file mode 100644 index 000000000..8293123b9 --- /dev/null +++ b/mmc-add-ricoh-e822-pci-id.patch @@ -0,0 +1,46 @@ +From kernel-bounces@lists.fedoraproject.org Thu Sep 9 09:22:43 2010 +From: Stanislaw Gruszka +Subject: [PATCH 4/4] mmc: add ricoh e822 pci id +Date: Thu, 9 Sep 2010 15:22:19 +0200 + +From: Pablo Castillo + +Upstream 568133ebda39f7507759a744fa9cf4d5097bad2f commit. + +Signed-off-by: Pablo Castillo +Signed-off-by: Stanislaw Gruszka +Tested-by: Gregg Lebovitz +Cc: Maxim Levitsky +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +--- + drivers/mmc/host/sdhci-pci.c | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c +index 3f2fdde..c4c759d 100644 +--- a/drivers/mmc/host/sdhci-pci.c ++++ b/drivers/mmc/host/sdhci-pci.c +@@ -415,6 +415,14 @@ static const struct pci_device_id pci_ids[] __devinitdata = { + }, + + { ++ .vendor = PCI_VENDOR_ID_RICOH, ++ .device = 0xe822, ++ .subvendor = PCI_ANY_ID, ++ .subdevice = PCI_ANY_ID, ++ .driver_data = (kernel_ulong_t)&sdhci_ricoh_mmc, ++ }, ++ ++ { + .vendor = PCI_VENDOR_ID_ENE, + .device = PCI_DEVICE_ID_ENE_CB712_SD, + .subvendor = PCI_ANY_ID, +-- +1.7.1 + +_______________________________________________ +kernel mailing list +kernel@lists.fedoraproject.org +https://admin.fedoraproject.org/mailman/listinfo/kernel + diff --git a/mmc-make-sdhci-work-with-ricoh-mmc-controller.patch b/mmc-make-sdhci-work-with-ricoh-mmc-controller.patch new file mode 100644 index 000000000..9f4de3288 --- /dev/null +++ b/mmc-make-sdhci-work-with-ricoh-mmc-controller.patch @@ -0,0 +1,151 @@ +From kernel-bounces@lists.fedoraproject.org Thu Sep 9 09:22:35 2010 +From: Stanislaw Gruszka +Subject: [PATCH 3/4] mmc: make sdhci work with ricoh mmc controller +Date: Thu, 9 Sep 2010 15:22:18 +0200 + +From: Maxim Levitsky + +Upstream ccc92c23240cdf952ef7cc39ba563910dcbc9cbe commit. + +The current way of disabling it is not well tested by vendor and has all +kinds of bugs that show up on resume from ram/disk. A very good example +is a dead SDHCI controller. + +Old way of disabling is still supported by continuing to use +CONFIG_MMC_RICOH_MMC. + +Based on 'http://list.drzeus.cx/pipermail/sdhci-devel/2007-December/002085.html' +Therefore most of the credit for this goes to Andrew de Quincey + +Signed-off-by: Maxim Levitsky +Cc: Andrew de Quincey +Acked-by: Philip Langdale +Cc: "Rafael J. Wysocki" +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +--- + drivers/mmc/host/sdhci-pci.c | 41 +++++++++++++++++++++++++++++++++++++++++ + drivers/mmc/host/sdhci.c | 3 ++- + drivers/mmc/host/sdhci.h | 5 +++++ + 3 files changed, 48 insertions(+), 1 deletions(-) + +diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c +index 6701af6..3f2fdde 100644 +--- a/drivers/mmc/host/sdhci-pci.c ++++ b/drivers/mmc/host/sdhci-pci.c +@@ -17,6 +17,7 @@ + #include + #include + #include ++#include + + #include + +@@ -84,7 +85,30 @@ static int ricoh_probe(struct sdhci_pci_chip *chip) + if (chip->pdev->subsystem_vendor == PCI_VENDOR_ID_SAMSUNG || + chip->pdev->subsystem_vendor == PCI_VENDOR_ID_SONY) + chip->quirks |= SDHCI_QUIRK_NO_CARD_NO_RESET; ++ return 0; ++} ++ ++static int ricoh_mmc_probe_slot(struct sdhci_pci_slot *slot) ++{ ++ slot->host->caps = ++ ((0x21 << SDHCI_TIMEOUT_CLK_SHIFT) ++ & SDHCI_TIMEOUT_CLK_MASK) | ++ ++ ((0x21 << SDHCI_CLOCK_BASE_SHIFT) ++ & SDHCI_CLOCK_BASE_MASK) | + ++ SDHCI_TIMEOUT_CLK_UNIT | ++ SDHCI_CAN_VDD_330 | ++ SDHCI_CAN_DO_SDMA; ++ return 0; ++} ++ ++static int ricoh_mmc_resume(struct sdhci_pci_chip *chip) ++{ ++ /* Apply a delay to allow controller to settle */ ++ /* Otherwise it becomes confused if card state changed ++ during suspend */ ++ msleep(500); + return 0; + } + +@@ -95,6 +119,15 @@ static const struct sdhci_pci_fixes sdhci_ricoh = { + SDHCI_QUIRK_CLOCK_BEFORE_RESET, + }; + ++static const struct sdhci_pci_fixes sdhci_ricoh_mmc = { ++ .probe_slot = ricoh_mmc_probe_slot, ++ .resume = ricoh_mmc_resume, ++ .quirks = SDHCI_QUIRK_32BIT_DMA_ADDR | ++ SDHCI_QUIRK_CLOCK_BEFORE_RESET | ++ SDHCI_QUIRK_NO_CARD_NO_RESET | ++ SDHCI_QUIRK_MISSING_CAPS ++}; ++ + static const struct sdhci_pci_fixes sdhci_ene_712 = { + .quirks = SDHCI_QUIRK_SINGLE_POWER_WRITE | + SDHCI_QUIRK_BROKEN_DMA, +@@ -374,6 +407,14 @@ static const struct pci_device_id pci_ids[] __devinitdata = { + }, + + { ++ .vendor = PCI_VENDOR_ID_RICOH, ++ .device = 0x843, ++ .subvendor = PCI_ANY_ID, ++ .subdevice = PCI_ANY_ID, ++ .driver_data = (kernel_ulong_t)&sdhci_ricoh_mmc, ++ }, ++ ++ { + .vendor = PCI_VENDOR_ID_ENE, + .device = PCI_DEVICE_ID_ENE_CB712_SD, + .subvendor = PCI_ANY_ID, +diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c +index dae42aa..f44f8ca 100644 +--- a/drivers/mmc/host/sdhci.c ++++ b/drivers/mmc/host/sdhci.c +@@ -1682,7 +1682,8 @@ int sdhci_add_host(struct sdhci_host *host) + host->version); + } + +- caps = sdhci_readl(host, SDHCI_CAPABILITIES); ++ caps = (host->quirks & SDHCI_QUIRK_MISSING_CAPS) ? host->caps : ++ sdhci_readl(host, SDHCI_CAPABILITIES); + + if (host->quirks & SDHCI_QUIRK_FORCE_DMA) + host->flags |= SDHCI_USE_SDMA; +diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h +index 6bd46e5..e830c60 100644 +--- a/drivers/mmc/host/sdhci.h ++++ b/drivers/mmc/host/sdhci.h +@@ -238,6 +238,9 @@ struct sdhci_host { + /* Controller uses SDCLK instead of TMCLK for data timeouts */ + #define SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK (1<<24) + ++/* Controller is missing device caps. Use caps provided by host */ ++#define SDHCI_QUIRK_MISSING_CAPS (1<<27) ++ + int irq; /* Device IRQ */ + void __iomem * ioaddr; /* Mapped address */ + +@@ -289,6 +292,8 @@ struct sdhci_host { + + struct timer_list timer; /* Timer for timeouts */ + ++ unsigned int caps; /* Alternative capabilities */ ++ + unsigned long private[0] ____cacheline_aligned; + }; + +-- +1.7.1 + +_______________________________________________ +kernel mailing list +kernel@lists.fedoraproject.org +https://admin.fedoraproject.org/mailman/listinfo/kernel + diff --git a/sdhci-8-bit-data-transfer-width-support.patch b/sdhci-8-bit-data-transfer-width-support.patch new file mode 100644 index 000000000..83171cbaf --- /dev/null +++ b/sdhci-8-bit-data-transfer-width-support.patch @@ -0,0 +1,57 @@ +From kernel-bounces@lists.fedoraproject.org Thu Sep 9 09:22:34 2010 +From: Stanislaw Gruszka +Subject: [PATCH 2/4] sdhci: 8-bit data transfer width support +Date: Thu, 9 Sep 2010 15:22:17 +0200 + +From: Kyungmin Park + +Upstream ae6d6c92212e94b12ab9365c23fb73acc2c3c2e7 commit. + +Some host controllers such as s5pc110 support the WIDE8 feature. + +Signed-off-by: Kyungmin Park +Cc: Grant Likely +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +--- + drivers/mmc/host/sdhci.c | 5 +++++ + drivers/mmc/host/sdhci.h | 1 + + 2 files changed, 6 insertions(+), 0 deletions(-) + +diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c +index 9d4fdfa..dae42aa 100644 +--- a/drivers/mmc/host/sdhci.c ++++ b/drivers/mmc/host/sdhci.c +@@ -1149,6 +1149,11 @@ static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) + + ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL); + ++ if (ios->bus_width == MMC_BUS_WIDTH_8) ++ ctrl |= SDHCI_CTRL_8BITBUS; ++ else ++ ctrl &= ~SDHCI_CTRL_8BITBUS; ++ + if (ios->bus_width == MMC_BUS_WIDTH_4) + ctrl |= SDHCI_CTRL_4BITBUS; + else +diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h +index 9ba4268..6bd46e5 100644 +--- a/drivers/mmc/host/sdhci.h ++++ b/drivers/mmc/host/sdhci.h +@@ -72,6 +72,7 @@ + #define SDHCI_CTRL_ADMA1 0x08 + #define SDHCI_CTRL_ADMA32 0x10 + #define SDHCI_CTRL_ADMA64 0x18 ++#define SDHCI_CTRL_8BITBUS 0x20 + + #define SDHCI_POWER_CONTROL 0x29 + #define SDHCI_POWER_ON 0x01 +-- +1.7.1 + +_______________________________________________ +kernel mailing list +kernel@lists.fedoraproject.org +https://admin.fedoraproject.org/mailman/listinfo/kernel +