diff options
| author | Andy Lutomirski <luto@amacapital.net> | 2012-12-01 12:37:20 -0800 | 
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-01-11 09:03:49 -0800 | 
| commit | e64130678871755b43019a3ee191d6548d9862ca (patch) | |
| tree | 9dd9709ec1367a822df2187ed570448d883bcfb2 /drivers/pci | |
| parent | decbd08d03e98e88f5c1f3b602ee02935c6c6ee4 (diff) | |
| download | kernel_samsung_espresso10-e64130678871755b43019a3ee191d6548d9862ca.zip kernel_samsung_espresso10-e64130678871755b43019a3ee191d6548d9862ca.tar.gz kernel_samsung_espresso10-e64130678871755b43019a3ee191d6548d9862ca.tar.bz2  | |
PCI: Reduce Ricoh 0xe822 SD card reader base clock frequency to 50MHz
commit 812089e01b9f65f90fc8fc670d8cce72a0e01fbb upstream.
Otherwise it fails like this on cards like the Transcend 16GB SDHC card:
    mmc0: new SDHC card at address b368
    mmcblk0: mmc0:b368 SDC   15.0 GiB
    mmcblk0: error -110 sending status command, retrying
    mmcblk0: error -84 transferring data, sector 0, nr 8, cmd response 0x900, card status 0xb0
Tested on my Lenovo x200 laptop.
[bhelgaas: changelog]
Signed-off-by: Andy Lutomirski <luto@amacapital.net>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Chris Ball <cjb@laptop.org>
CC: Manoj Iyer <manoj.iyer@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/pci')
| -rw-r--r-- | drivers/pci/quirks.c | 7 | 
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index a6b07dd..a9b1249 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -2746,7 +2746,7 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)  	if (PCI_FUNC(dev->devfn))  		return;  	/* -	 * RICOH 0xe823 SD/MMC card reader fails to recognize +	 * RICOH 0xe822 and 0xe823 SD/MMC card readers fail to recognize  	 * certain types of SD/MMC cards. Lowering the SD base  	 * clock frequency from 200Mhz to 50Mhz fixes this issue.  	 * @@ -2757,7 +2757,8 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)  	 * 0xf9  - Key register for 0x150  	 * 0xfc  - key register for 0xe1  	 */ -	if (dev->device == PCI_DEVICE_ID_RICOH_R5CE823) { +	if (dev->device == PCI_DEVICE_ID_RICOH_R5CE822 || +	    dev->device == PCI_DEVICE_ID_RICOH_R5CE823) {  		pci_write_config_byte(dev, 0xf9, 0xfc);  		pci_write_config_byte(dev, 0x150, 0x10);  		pci_write_config_byte(dev, 0xf9, 0x00); @@ -2784,6 +2785,8 @@ static void ricoh_mmc_fixup_r5c832(struct pci_dev *dev)  }  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); +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE822, ricoh_mmc_fixup_r5c832); +DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE822, ricoh_mmc_fixup_r5c832);  DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE823, ricoh_mmc_fixup_r5c832);  DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_RICOH, PCI_DEVICE_ID_RICOH_R5CE823, ricoh_mmc_fixup_r5c832);  #endif /*CONFIG_MMC_RICOH_MMC*/  | 
