Lines Matching defs:host

27 static int xenon_enable_internal_clk(struct sdhci_host *host)
32 reg = sdhci_readl(host, SDHCI_CLOCK_CONTROL);
34 sdhci_writel(host, reg, SDHCI_CLOCK_CONTROL);
40 reg = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
44 dev_err(mmc_dev(host->mmc), "Internal clock never stabilised.\n");
54 static void xenon_set_sdclk_off_idle(struct sdhci_host *host,
60 reg = sdhci_readl(host, XENON_SYS_OP_CTRL);
68 sdhci_writel(host, reg, XENON_SYS_OP_CTRL);
72 static void xenon_set_acg(struct sdhci_host *host, bool enable)
76 reg = sdhci_readl(host, XENON_SYS_OP_CTRL);
81 sdhci_writel(host, reg, XENON_SYS_OP_CTRL);
85 static void xenon_enable_sdhc(struct sdhci_host *host,
90 reg = sdhci_readl(host, XENON_SYS_OP_CTRL);
92 sdhci_writel(host, reg, XENON_SYS_OP_CTRL);
94 host->mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY;
99 host->mmc->caps &= ~MMC_CAP_BUS_WIDTH_TEST;
103 static void xenon_disable_sdhc(struct sdhci_host *host,
108 reg = sdhci_readl(host, XENON_SYS_OP_CTRL);
110 sdhci_writel(host, reg, XENON_SYS_OP_CTRL);
114 static void xenon_enable_sdhc_parallel_tran(struct sdhci_host *host,
119 reg = sdhci_readl(host, XENON_SYS_EXT_OP_CTRL);
121 sdhci_writel(host, reg, XENON_SYS_EXT_OP_CTRL);
125 static void xenon_mask_cmd_conflict_err(struct sdhci_host *host)
129 reg = sdhci_readl(host, XENON_SYS_EXT_OP_CTRL);
131 sdhci_writel(host, reg, XENON_SYS_EXT_OP_CTRL);
134 static void xenon_retune_setup(struct sdhci_host *host)
136 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
141 reg = sdhci_readl(host, XENON_SLOT_RETUNING_REQ_CTRL);
143 sdhci_writel(host, reg, XENON_SLOT_RETUNING_REQ_CTRL);
146 reg = sdhci_readl(host, SDHCI_SIGNAL_ENABLE);
148 sdhci_writel(host, reg, SDHCI_SIGNAL_ENABLE);
149 reg = sdhci_readl(host, SDHCI_INT_ENABLE);
151 sdhci_writel(host, reg, SDHCI_INT_ENABLE);
154 host->tuning_mode = SDHCI_TUNING_MODE_1;
156 host->tuning_count = 1 << (priv->tuning_count - 1);
163 static void xenon_reset_exit(struct sdhci_host *host,
171 xenon_retune_setup(host);
178 xenon_set_acg(host, false);
180 xenon_set_sdclk_off_idle(host, sdhc_id, false);
182 xenon_mask_cmd_conflict_err(host);
185 static void xenon_reset(struct sdhci_host *host, u8 mask)
187 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
190 sdhci_reset(host, mask);
191 xenon_reset_exit(host, priv->sdhc_id, mask);
198 static void xenon_set_uhs_signaling(struct sdhci_host *host,
203 ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
204 /* Select Bus Speed Mode for host */
221 sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2);
224 static void xenon_set_power(struct sdhci_host *host, unsigned char mode,
227 struct mmc_host *mmc = host->mmc;
228 u8 pwr = host->pwr;
230 sdhci_set_power_noreg(host, mode, vdd);
232 if (host->pwr == pwr)
235 if (host->pwr == 0)
242 static void xenon_voltage_switch(struct sdhci_host *host)
248 static unsigned int xenon_get_max_clock(struct sdhci_host *host)
250 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
253 return sdhci_pltfm_clk_get_max_clock(host);
280 struct sdhci_host *host = mmc_priv(mmc);
281 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
295 host->preset_enabled = false;
296 host->quirks2 |= SDHCI_QUIRK2_PRESET_VALUE_BROKEN;
297 host->flags &= ~SDHCI_PV_ENABLED;
299 reg = sdhci_readw(host, SDHCI_HOST_CONTROL2);
301 sdhci_writew(host, reg, SDHCI_HOST_CONTROL2);
303 host->quirks2 &= ~SDHCI_QUIRK2_PRESET_VALUE_BROKEN;
307 xenon_phy_adj(host, ios);
309 if (host->clock > XENON_DEFAULT_SDCLK_FREQ)
310 xenon_set_sdclk_off_idle(host, priv->sdhc_id, true);
316 struct sdhci_host *host = mmc_priv(mmc);
328 xenon_enable_internal_clk(host);
330 xenon_soc_pad_ctrl(host, ios->signal_voltage);
349 struct sdhci_host *host = mmc_priv(mmc);
350 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
359 struct sdhci_host *host = mmc_priv(mmc);
361 if (host->timing == MMC_TIMING_UHS_DDR50 ||
362 host->timing == MMC_TIMING_MMC_DDR52)
370 if (host->tuning_mode != SDHCI_TUNING_MODE_1)
371 xenon_retune_setup(host);
378 struct sdhci_host *host = mmc_priv(mmc);
379 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
391 reg = sdhci_readl(host, XENON_SYS_CFG_INFO);
393 sdhci_writel(host, reg, XENON_SYS_CFG_INFO);
396 reg = sdhci_readl(host, XENON_SYS_CFG_INFO);
398 sdhci_writel(host, reg, XENON_SYS_CFG_INFO);
402 static void xenon_replace_mmc_host_ops(struct sdhci_host *host)
404 host->mmc_host_ops.set_ios = xenon_set_ios;
405 host->mmc_host_ops.start_signal_voltage_switch =
407 host->mmc_host_ops.init_card = xenon_init_card;
408 host->mmc_host_ops.execute_tuning = xenon_execute_tuning;
409 host->mmc_host_ops.enable_sdio_irq = xenon_enable_sdio_irq;
421 struct sdhci_host *host = platform_get_drvdata(pdev);
422 struct mmc_host *mmc = host->mmc;
423 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
431 host->quirks2 |= SDHCI_QUIRK2_BROKEN_HS200;
435 nr_sdhc = sdhci_readl(host, XENON_SYS_CFG_INFO);
468 host->quirks |= SDHCI_QUIRK_BROKEN_ADMA;
469 host->quirks2 |= SDHCI_QUIRK2_BROKEN_64_BIT_DMA;
473 return xenon_phy_parse_params(dev, host);
476 static int xenon_sdhc_prepare(struct sdhci_host *host)
478 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
483 xenon_enable_sdhc(host, sdhc_id);
486 xenon_set_acg(host, true);
489 xenon_enable_sdhc_parallel_tran(host, sdhc_id);
492 xenon_set_sdclk_off_idle(host, sdhc_id, false);
494 xenon_mask_cmd_conflict_err(host);
499 static void xenon_sdhc_unprepare(struct sdhci_host *host)
501 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
506 xenon_disable_sdhc(host, sdhc_id);
513 struct sdhci_host *host;
517 host = sdhci_pltfm_init(pdev, &sdhci_xenon_pdata,
519 if (IS_ERR(host))
520 return PTR_ERR(host);
522 pltfm_host = sdhci_priv(host);
531 xenon_replace_mmc_host_ops(host);
556 err = mmc_of_parse(host->mmc);
562 xenon_set_acg(host, false);
569 err = xenon_sdhc_prepare(host);
580 err = sdhci_add_host(host);
593 host->quirks2 & SDHCI_QUIRK2_BROKEN_64_BIT_DMA)
601 xenon_sdhc_unprepare(host);
613 struct sdhci_host *host = platform_get_drvdata(pdev);
614 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
621 sdhci_remove_host(host, 0);
623 xenon_sdhc_unprepare(host);
633 struct sdhci_host *host = dev_get_drvdata(dev);
634 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
648 struct sdhci_host *host = dev_get_drvdata(dev);
649 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
653 ret = sdhci_runtime_suspend_host(host);
657 if (host->tuning_mode != SDHCI_TUNING_MODE_3)
658 mmc_retune_needed(host->mmc);
672 struct sdhci_host *host = dev_get_drvdata(dev);
673 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
684 ret = xenon_sdhc_prepare(host);
690 ret = sdhci_runtime_resume_host(host, 0);