|
|
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 |
|