diff options
-rw-r--r-- | drivers/pci/quirks.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 02145e9697a9..1196f61a4ab6 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -2758,6 +2758,29 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev) | |||
2758 | 2758 | ||
2759 | dev_notice(&dev->dev, "proprietary Ricoh MMC controller disabled (via firewire function)\n"); | 2759 | dev_notice(&dev->dev, "proprietary Ricoh MMC controller disabled (via firewire function)\n"); |
2760 | dev_notice(&dev->dev, "MMC cards are now supported by standard SDHCI controller\n"); | 2760 | dev_notice(&dev->dev, "MMC cards are now supported by standard SDHCI controller\n"); |
2761 | |||
2762 | /* | ||
2763 | * RICOH 0xe823 SD/MMC card reader fails to recognize | ||
2764 | * certain types of SD/MMC cards. Lowering the SD base | ||
2765 | * clock frequency from 200Mhz to 50Mhz fixes this issue. | ||
2766 | * | ||
2767 | * 0x150 - SD2.0 mode enable for changing base clock | ||
2768 | * frequency to 50Mhz | ||
2769 | * 0xe1 - Base clock frequency | ||
2770 | * 0x32 - 50Mhz new clock frequency | ||
2771 | * 0xf9 - Key register for 0x150 | ||
2772 | * 0xfc - key register for 0xe1 | ||
2773 | */ | ||
2774 | if (dev->device == PCI_DEVICE_ID_RICOH_R5CE823) { | ||
2775 | pci_write_config_byte(dev, 0xf9, 0xfc); | ||
2776 | pci_write_config_byte(dev, 0x150, 0x10); | ||
2777 | pci_write_config_byte(dev, 0xf9, 0x00); | ||
2778 | pci_write_config_byte(dev, 0xfc, 0x01); | ||
2779 | pci_write_config_byte(dev, 0xe1, 0x32); | ||
2780 | pci_write_config_byte(dev, 0xfc, 0x00); | ||
2781 | |||
2782 | dev_notice(&dev->dev, "MMC controller base frequency changed to 50Mhz.\n"); | ||
2783 | } | ||
2761 | } | 2784 | } |
2762 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832); | 2785 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832); |
2763 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832); | 2786 | DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5C832, ricoh_mmc_fixup_r5c832); |