static void sdhci_module_init(struct sdhci_host* host) { if(!strcmp(host->hw_name, "Spread SDIO host0")){ /* Enable SDIO0 Module */ sprd_greg_set_bits(REG_TYPE_AHB_GLOBAL, AHB_CTL0_SDIO0_EN, AHB_CTL0); /* reset sdio0 module*/ sprd_greg_set_bits(REG_TYPE_AHB_GLOBAL, SDIO0_SOFT_RESET, AHB_SOFT_RST); sprd_greg_clear_bits(REG_TYPE_AHB_GLOBAL, SDIO0_SOFT_RESET, AHB_SOFT_RST); } if(!strcmp(host->hw_name, "Spread SDIO host1")){ /* Enable SDIO1 Module */ sprd_greg_set_bits(REG_TYPE_AHB_GLOBAL, AHB_CTL0_SDIO1_EN, AHB_CTL0); /* reset sdio1 module*/ sprd_greg_set_bits(REG_TYPE_AHB_GLOBAL, SDIO1_SOFT_RESET, AHB_SOFT_RST); sprd_greg_clear_bits(REG_TYPE_AHB_GLOBAL, SDIO1_SOFT_RESET, AHB_SOFT_RST); } #ifdef CONFIG_ARCH_SC7710 if(!strcmp(host->hw_name, "Spread SDIO host2")){ /* Enable SDIO1 Module */ sprd_greg_set_bits(REG_TYPE_AHB_GLOBAL, BIT_SDIO2_EB, AHB_CTL6); /* reset sdio1 module*/ sprd_greg_set_bits(REG_TYPE_AHB_GLOBAL, BIT_SD2_SOFT_RST, AHB_SOFT2_RST); sprd_greg_clear_bits(REG_TYPE_AHB_GLOBAL, BIT_SD2_SOFT_RST, AHB_SOFT2_RST); } if(!strcmp(host->hw_name, "Spread EMMC host0")){ /* Enable SDIO1 Module */ sprd_greg_set_bits(REG_TYPE_AHB_GLOBAL, BIT_EMMC_EB, AHB_CTL6); /* reset sdio1 module*/ sprd_greg_set_bits(REG_TYPE_AHB_GLOBAL, BIT_EMMC_SOFT_RST, AHB_SOFT2_RST); sprd_greg_clear_bits(REG_TYPE_AHB_GLOBAL, BIT_EMMC_SOFT_RST, AHB_SOFT2_RST); } #endif sdhci_sprd_set_base_clock(host, SDIO_MAX_CLK); }
static void sdhci_module_init(struct sdhci_host* host) { struct sprd_host_platdata *host_pdata; host_pdata = sdhci_get_platdata(host); sci_glb_set(REG_AP_AHB_AHB_EB, host_pdata->enb_bit); sdhci_sdclk_enable(host, 0); sci_glb_set(REG_AP_AHB_AHB_RST, host_pdata->rst_bit); udelay(200); sci_glb_clr(REG_AP_AHB_AHB_RST, host_pdata->rst_bit); sdhci_sprd_set_base_clock(host); host->ops->set_clock(host, true); }
static int sdhci_pm_resume(struct device *dev) { int retval = 0; unsigned long flags; struct platform_device *pdev = container_of(dev, struct platform_device, dev); struct sdhci_host *host = platform_get_drvdata(pdev); printk("%s: %s enter\n", mmc_hostname(host->mmc), __func__); if(is_wifi_slot(host) || is_cbp_slot(host) || is_sd_slot(host)) { sdhci_sprd_set_base_clock(host); } spin_lock_irqsave(&host->lock, flags); if(host->ops->set_clock) host->ops->set_clock(host, 1); spin_unlock_irqrestore(&host->lock, flags); if(is_wifi_slot(host)) { printk("[WLAN] resume read REG_AP_CLK_AP_AHB_CFG is %x\n",__raw_readl(REG_AP_CLK_AP_AHB_CFG)); printk("[WLAN] resume read REG_AP_CLK_SDIO1_CFG is %x\n",__raw_readl(REG_AP_CLK_SDIO1_CFG)); } #ifdef CONFIG_MMC_HOST_WAKEUP_SUPPORTED if (pdev->id == 1) sdhci_host_wakeup_clear(host); #endif retval = sdhci_resume_host(host); #ifdef CONFIG_PM_RUNTIME if(pm_runtime_enabled(dev)) pm_runtime_put_autosuspend(dev); #endif if(is_wifi_slot(host)) { dhd_mmc_suspend = 0; printk("[WLAN] %s,dhd_mmc_suspend=%d\n",__func__,dhd_mmc_suspend); } printk("%s: %s leave retval %d\n", mmc_hostname(host->mmc), __func__, retval); return retval; }