71ac22d
From 65ff02dff67bf26a9c27d9aa11a30eaf3d28469e Mon Sep 17 00:00:00 2001
71ac22d
From: Josh Boyer <jwboyer@redhat.com>
71ac22d
Date: Wed, 5 Oct 2011 11:29:57 -0400
71ac22d
Subject: [PATCH] mmc: Always check for lower base frequency quirk for Ricoh
71ac22d
 1180:e823
71ac22d
71ac22d
Commit 15bed0f2f added a quirk for the e823 Ricoh card reader to lower the
71ac22d
base frequency.  However, the quirk first checks to see if the proprietary
71ac22d
MMC controller is disabled, and returns if so.  On some devices, such as the
71ac22d
Lenovo X220, the MMC controller is already disabled by firmware it seems,
71ac22d
but the frequency change is still needed so sdhci-pci can talk to the cards.
71ac22d
Since the MMC controller is disabled, the frequency fixup was never being run
71ac22d
on these machines.
71ac22d
71ac22d
This moves the e823 check above the MMC controller check so that it always
71ac22d
gets run.
71ac22d
71ac22d
This fixes https://bugzilla.redhat.com/show_bug.cgi?id=722509
71ac22d
71ac22d
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
71ac22d
---
71ac22d
 drivers/pci/quirks.c |   28 ++++++++++++++--------------
71ac22d
 1 files changed, 14 insertions(+), 14 deletions(-)
71ac22d
71ac22d
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
71ac22d
index 1196f61..cec4629 100644
71ac22d
--- a/drivers/pci/quirks.c
71ac22d
+++ b/drivers/pci/quirks.c
71ac22d
@@ -2745,20 +2745,6 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
71ac22d
 	/* disable must be done via function #0 */
71ac22d
 	if (PCI_FUNC(dev->devfn))
71ac22d
 		return;
71ac22d
-
71ac22d
-	pci_read_config_byte(dev, 0xCB, &disable);
71ac22d
-
71ac22d
-	if (disable & 0x02)
71ac22d
-		return;
71ac22d
-
71ac22d
-	pci_read_config_byte(dev, 0xCA, &write_enable);
71ac22d
-	pci_write_config_byte(dev, 0xCA, 0x57);
71ac22d
-	pci_write_config_byte(dev, 0xCB, disable | 0x02);
71ac22d
-	pci_write_config_byte(dev, 0xCA, write_enable);
71ac22d
-
71ac22d
-	dev_notice(&dev->dev, "proprietary Ricoh MMC controller disabled (via firewire function)\n");
71ac22d
-	dev_notice(&dev->dev, "MMC cards are now supported by standard SDHCI controller\n");
71ac22d
-
71ac22d
 	/*
71ac22d
 	 * RICOH 0xe823 SD/MMC card reader fails to recognize
71ac22d
 	 * certain types of SD/MMC cards. Lowering the SD base
71ac22d
@@ -2781,6 +2767,20 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)
71ac22d
 
71ac22d
 		dev_notice(&dev->dev, "MMC controller base frequency changed to 50Mhz.\n");
71ac22d
 	}
71ac22d
+
71ac22d
+	pci_read_config_byte(dev, 0xCB, &disable);
71ac22d
+
71ac22d
+	if (disable & 0x02)
71ac22d
+		return;
71ac22d
+
71ac22d
+	pci_read_config_byte(dev, 0xCA, &write_enable);
71ac22d
+	pci_write_config_byte(dev, 0xCA, 0x57);
71ac22d
+	pci_write_config_byte(dev, 0xCB, disable | 0x02);
71ac22d
+	pci_write_config_byte(dev, 0xCA, write_enable);
71ac22d
+
71ac22d
+	dev_notice(&dev->dev, "proprietary Ricoh MMC controller disabled (via firewire function)\n");
71ac22d
+	dev_notice(&dev->dev, "MMC cards are now supported by standard SDHCI controller\n");
71ac22d
+
71ac22d
 }
71ac22d
 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
71ac22d
 DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832);
71ac22d
-- 
71ac22d
1.7.6.4
71ac22d