|
@@ -3,6 +3,7 @@
|
|
|
*
|
|
|
* Authors: Peter Guo <peter.guo@bayhubtech.com>
|
|
|
* Adam Lee <adam.lee@canonical.com>
|
|
|
+ * Ernest Zhang <ernest.zhang@bayhubtech.com>
|
|
|
*
|
|
|
* This software is licensed under the terms of the GNU General Public
|
|
|
* License version 2, as published by the Free Software Foundation, and
|
|
@@ -39,6 +40,7 @@
|
|
|
#define O2_SD_MISC_CTRL4 0xFC
|
|
|
#define O2_SD_TUNING_CTRL 0x300
|
|
|
#define O2_SD_PLL_SETTING 0x304
|
|
|
+#define O2_SD_MISC_SETTING 0x308
|
|
|
#define O2_SD_CLK_SETTING 0x328
|
|
|
#define O2_SD_CAP_REG2 0x330
|
|
|
#define O2_SD_CAP_REG0 0x334
|
|
@@ -184,6 +186,7 @@ int sdhci_pci_o2_probe_slot(struct sdhci_pci_slot *slot)
|
|
|
struct sdhci_pci_chip *chip;
|
|
|
struct sdhci_host *host;
|
|
|
u32 reg;
|
|
|
+ int ret;
|
|
|
|
|
|
chip = slot->chip;
|
|
|
host = slot->host;
|
|
@@ -197,6 +200,21 @@ int sdhci_pci_o2_probe_slot(struct sdhci_pci_slot *slot)
|
|
|
if (reg & 0x1)
|
|
|
host->quirks |= SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12;
|
|
|
|
|
|
+ if (chip->pdev->device == PCI_DEVICE_ID_O2_SEABIRD0) {
|
|
|
+ ret = pci_read_config_dword(chip->pdev,
|
|
|
+ O2_SD_MISC_SETTING, ®);
|
|
|
+ if (ret)
|
|
|
+ return -EIO;
|
|
|
+ if (reg & (1 << 4)) {
|
|
|
+ pr_info("%s: emmc 1.8v flag is set, force 1.8v signaling voltage\n",
|
|
|
+ mmc_hostname(host->mmc));
|
|
|
+ host->flags &= ~SDHCI_SIGNALING_330;
|
|
|
+ host->flags |= SDHCI_SIGNALING_180;
|
|
|
+ host->mmc->caps2 |= MMC_CAP2_NO_SD;
|
|
|
+ host->mmc->caps2 |= MMC_CAP2_NO_SDIO;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (chip->pdev->device != PCI_DEVICE_ID_O2_FUJIN2)
|
|
|
break;
|
|
|
/* set dll watch dog timer */
|