Lines Matching defs:host
24 static int xenon_enable_internal_clk(struct sdhci_host *host)
29 reg = sdhci_readl(host, SDHCI_CLOCK_CONTROL);
31 sdhci_writel(host, reg, SDHCI_CLOCK_CONTROL);
37 reg = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
41 dev_err(mmc_dev(host->mmc), "Internal clock never stabilised.\n");
51 static void xenon_set_sdclk_off_idle(struct sdhci_host *host,
57 reg = sdhci_readl(host, XENON_SYS_OP_CTRL);
65 sdhci_writel(host, reg, XENON_SYS_OP_CTRL);
69 static void xenon_set_acg(struct sdhci_host *host, bool enable)
73 reg = sdhci_readl(host, XENON_SYS_OP_CTRL);
78 sdhci_writel(host, reg, XENON_SYS_OP_CTRL);
82 static void xenon_enable_sdhc(struct sdhci_host *host,
87 reg = sdhci_readl(host, XENON_SYS_OP_CTRL);
89 sdhci_writel(host, reg, XENON_SYS_OP_CTRL);
91 host->mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY;
96 host->mmc->caps &= ~MMC_CAP_BUS_WIDTH_TEST;
100 static void xenon_disable_sdhc(struct sdhci_host *host,
105 reg = sdhci_readl(host, XENON_SYS_OP_CTRL);
107 sdhci_writel(host, reg, XENON_SYS_OP_CTRL);
111 static void xenon_enable_sdhc_parallel_tran(struct sdhci_host *host,
116 reg = sdhci_readl(host, XENON_SYS_EXT_OP_CTRL);
118 sdhci_writel(host, reg, XENON_SYS_EXT_OP_CTRL);
122 static void xenon_mask_cmd_conflict_err(struct sdhci_host *host)
126 reg = sdhci_readl(host, XENON_SYS_EXT_OP_CTRL);
128 sdhci_writel(host, reg, XENON_SYS_EXT_OP_CTRL);
131 static void xenon_retune_setup(struct sdhci_host *host)
133 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
138 reg = sdhci_readl(host, XENON_SLOT_RETUNING_REQ_CTRL);
140 sdhci_writel(host, reg, XENON_SLOT_RETUNING_REQ_CTRL);
143 reg = sdhci_readl(host, SDHCI_SIGNAL_ENABLE);
145 sdhci_writel(host, reg, SDHCI_SIGNAL_ENABLE);
146 reg = sdhci_readl(host, SDHCI_INT_ENABLE);
148 sdhci_writel(host, reg, SDHCI_INT_ENABLE);
151 host->tuning_mode = SDHCI_TUNING_MODE_1;
153 host->tuning_count = 1 << (priv->tuning_count - 1);
160 static void xenon_reset_exit(struct sdhci_host *host,
168 xenon_retune_setup(host);
175 xenon_set_acg(host, false);
177 xenon_set_sdclk_off_idle(host, sdhc_id, false);
179 xenon_mask_cmd_conflict_err(host);
182 static void xenon_reset(struct sdhci_host *host, u8 mask)
184 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
187 sdhci_reset(host, mask);
188 xenon_reset_exit(host, priv->sdhc_id, mask);
195 static void xenon_set_uhs_signaling(struct sdhci_host *host,
200 ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
201 /* Select Bus Speed Mode for host */
218 sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2);
221 static void xenon_set_power(struct sdhci_host *host, unsigned char mode,
224 struct mmc_host *mmc = host->mmc;
225 u8 pwr = host->pwr;
227 sdhci_set_power_noreg(host, mode, vdd);
229 if (host->pwr == pwr)
232 if (host->pwr == 0)
239 static void xenon_voltage_switch(struct sdhci_host *host)
267 struct sdhci_host *host = mmc_priv(mmc);
268 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
282 host->preset_enabled = false;
283 host->quirks2 |= SDHCI_QUIRK2_PRESET_VALUE_BROKEN;
284 host->flags &= ~SDHCI_PV_ENABLED;
286 reg = sdhci_readw(host, SDHCI_HOST_CONTROL2);
288 sdhci_writew(host, reg, SDHCI_HOST_CONTROL2);
290 host->quirks2 &= ~SDHCI_QUIRK2_PRESET_VALUE_BROKEN;
294 xenon_phy_adj(host, ios);
296 if (host->clock > XENON_DEFAULT_SDCLK_FREQ)
297 xenon_set_sdclk_off_idle(host, priv->sdhc_id, true);
303 struct sdhci_host *host = mmc_priv(mmc);
315 xenon_enable_internal_clk(host);
317 xenon_soc_pad_ctrl(host, ios->signal_voltage);
336 struct sdhci_host *host = mmc_priv(mmc);
337 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
346 struct sdhci_host *host = mmc_priv(mmc);
348 if (host->timing == MMC_TIMING_UHS_DDR50 ||
349 host->timing == MMC_TIMING_MMC_DDR52)
357 if (host->tuning_mode != SDHCI_TUNING_MODE_1)
358 xenon_retune_setup(host);
365 struct sdhci_host *host = mmc_priv(mmc);
366 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
378 reg = sdhci_readl(host, XENON_SYS_CFG_INFO);
380 sdhci_writel(host, reg, XENON_SYS_CFG_INFO);
383 reg = sdhci_readl(host, XENON_SYS_CFG_INFO);
385 sdhci_writel(host, reg, XENON_SYS_CFG_INFO);
389 static void xenon_replace_mmc_host_ops(struct sdhci_host *host)
391 host->mmc_host_ops.set_ios = xenon_set_ios;
392 host->mmc_host_ops.start_signal_voltage_switch =
394 host->mmc_host_ops.init_card = xenon_init_card;
395 host->mmc_host_ops.execute_tuning = xenon_execute_tuning;
396 host->mmc_host_ops.enable_sdio_irq = xenon_enable_sdio_irq;
408 struct sdhci_host *host = platform_get_drvdata(pdev);
409 struct mmc_host *mmc = host->mmc;
410 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
417 host->quirks2 |= SDHCI_QUIRK2_BROKEN_HS200;
421 nr_sdhc = sdhci_readl(host, XENON_SYS_CFG_INFO);
442 return xenon_phy_parse_dt(np, host);
445 static int xenon_sdhc_prepare(struct sdhci_host *host)
447 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
452 xenon_enable_sdhc(host, sdhc_id);
455 xenon_set_acg(host, true);
458 xenon_enable_sdhc_parallel_tran(host, sdhc_id);
461 xenon_set_sdclk_off_idle(host, sdhc_id, false);
463 xenon_mask_cmd_conflict_err(host);
468 static void xenon_sdhc_unprepare(struct sdhci_host *host)
470 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
475 xenon_disable_sdhc(host, sdhc_id);
481 struct sdhci_host *host;
485 host = sdhci_pltfm_init(pdev, &sdhci_xenon_pdata,
487 if (IS_ERR(host))
488 return PTR_ERR(host);
490 pltfm_host = sdhci_priv(host);
497 xenon_replace_mmc_host_ops(host);
520 err = mmc_of_parse(host->mmc);
526 xenon_set_acg(host, false);
533 err = xenon_sdhc_prepare(host);
544 err = sdhci_add_host(host);
555 xenon_sdhc_unprepare(host);
567 struct sdhci_host *host = platform_get_drvdata(pdev);
568 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
575 sdhci_remove_host(host, 0);
577 xenon_sdhc_unprepare(host);
589 struct sdhci_host *host = dev_get_drvdata(dev);
590 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
604 struct sdhci_host *host = dev_get_drvdata(dev);
605 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
609 ret = sdhci_runtime_suspend_host(host);
613 if (host->tuning_mode != SDHCI_TUNING_MODE_3)
614 mmc_retune_needed(host->mmc);
628 struct sdhci_host *host = dev_get_drvdata(dev);
629 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
640 ret = xenon_sdhc_prepare(host);
646 ret = sdhci_runtime_resume_host(host, 0);