Lines Matching refs:host

19 #include <linux/mmc/host.h>
61 static int sdhci_bcm_kona_sd_reset(struct sdhci_host *host)
69 /* reset the host using the top level reset */
70 val = sdhci_readl(host, KONA_SDHOST_CORECTRL);
72 sdhci_writel(host, val, KONA_SDHOST_CORECTRL);
74 while (!(sdhci_readl(host, KONA_SDHOST_CORECTRL) & KONA_SDHOST_RESET)) {
76 pr_err("Error: sd host is stuck in reset!!!\n");
81 /* bring the host out of reset */
82 val = sdhci_readl(host, KONA_SDHOST_CORECTRL);
92 sdhci_writel(host, val, KONA_SDHOST_CORECTRL);
97 static void sdhci_bcm_kona_sd_init(struct sdhci_host *host)
102 val = sdhci_readl(host, KONA_SDHOST_COREIMR);
104 sdhci_writel(host, val, KONA_SDHOST_COREIMR);
106 /* Enable the AHB clock gating module to the host */
107 val = sdhci_readl(host, KONA_SDHOST_CORECTRL);
117 sdhci_writel(host, val, KONA_SDHOST_CORECTRL);
126 static int sdhci_bcm_kona_sd_card_emulate(struct sdhci_host *host, int insert)
128 struct sdhci_pltfm_host *pltfm_priv = sdhci_priv(host);
141 val = sdhci_readl(host, KONA_SDHOST_CORESTAT);
146 ret = mmc_gpio_get_ro(host->mmc);
152 sdhci_writel(host, val, KONA_SDHOST_CORESTAT);
155 sdhci_writel(host, val, KONA_SDHOST_CORESTAT);
165 static void sdhci_bcm_kona_card_event(struct sdhci_host *host)
167 if (mmc_gpio_get_cd(host->mmc) > 0) {
168 dev_dbg(mmc_dev(host->mmc),
170 sdhci_bcm_kona_sd_card_emulate(host, 1);
172 dev_dbg(mmc_dev(host->mmc),
174 sdhci_bcm_kona_sd_card_emulate(host, 0);
182 static unsigned int sdhci_bcm_kona_get_max_clk(struct sdhci_host *host)
185 struct sdhci_pltfm_host *pltfm_priv = sdhci_priv(host);
188 return host->mmc->f_max;
191 static unsigned int sdhci_bcm_kona_get_timeout_clock(struct sdhci_host *host)
193 return sdhci_bcm_kona_get_max_clk(host);
196 static void sdhci_bcm_kona_init_74_clocks(struct sdhci_host *host,
240 struct sdhci_host *host;
245 host = sdhci_pltfm_init(pdev, &sdhci_pltfm_data_kona,
247 if (IS_ERR(host))
248 return PTR_ERR(host);
250 dev_dbg(dev, "%s: inited. IOADDR=%p\n", __func__, host->ioaddr);
252 pltfm_priv = sdhci_priv(host);
257 mmc_of_parse(host->mmc);
259 if (!host->mmc->f_max) {
273 if (clk_set_rate(kona_dev->external_clk, host->mmc->f_max) != 0) {
284 (host->mmc->caps & MMC_CAP_NONREMOVABLE) ? 'Y' : 'N');
286 (mmc_gpio_get_cd(host->mmc) != -ENOSYS) ? 'Y' : 'N',
287 (mmc_gpio_get_ro(host->mmc) != -ENOSYS) ? 'Y' : 'N');
289 if (host->mmc->caps & MMC_CAP_NONREMOVABLE)
290 host->quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION;
293 (host->mmc->caps | MMC_CAP_8_BIT_DATA) ? 'Y' : 'N');
295 ret = sdhci_bcm_kona_sd_reset(host);
299 sdhci_bcm_kona_sd_init(host);
301 ret = sdhci_add_host(host);
308 if (host->mmc->caps & MMC_CAP_NONREMOVABLE) {
309 ret = sdhci_bcm_kona_sd_card_emulate(host, 1);
321 if (mmc_gpio_get_cd(host->mmc) > 0)
322 sdhci_bcm_kona_sd_card_emulate(host, 1);
328 sdhci_remove_host(host, 0);
331 sdhci_bcm_kona_sd_reset(host);
345 struct sdhci_host *host = platform_get_drvdata(pdev);
346 struct sdhci_pltfm_host *pltfm_priv = sdhci_priv(host);
348 int dead = (readl(host->ioaddr + SDHCI_INT_STATUS) == 0xffffffff);
350 sdhci_remove_host(host, dead);