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