Lines Matching defs:host

25 static int xenon_enable_internal_clk(struct sdhci_host *host)
30 reg = sdhci_readl(host, SDHCI_CLOCK_CONTROL);
32 sdhci_writel(host, reg, SDHCI_CLOCK_CONTROL);
38 reg = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
42 dev_err(mmc_dev(host->mmc), "Internal clock never stabilised.\n");
52 static void xenon_set_sdclk_off_idle(struct sdhci_host *host,
58 reg = sdhci_readl(host, XENON_SYS_OP_CTRL);
66 sdhci_writel(host, reg, XENON_SYS_OP_CTRL);
70 static void xenon_set_acg(struct sdhci_host *host, bool enable)
74 reg = sdhci_readl(host, XENON_SYS_OP_CTRL);
79 sdhci_writel(host, reg, XENON_SYS_OP_CTRL);
83 static void xenon_enable_sdhc(struct sdhci_host *host,
88 reg = sdhci_readl(host, XENON_SYS_OP_CTRL);
90 sdhci_writel(host, reg, XENON_SYS_OP_CTRL);
92 host->mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY;
97 host->mmc->caps &= ~MMC_CAP_BUS_WIDTH_TEST;
101 static void xenon_disable_sdhc(struct sdhci_host *host,
106 reg = sdhci_readl(host, XENON_SYS_OP_CTRL);
108 sdhci_writel(host, reg, XENON_SYS_OP_CTRL);
112 static void xenon_enable_sdhc_parallel_tran(struct sdhci_host *host,
117 reg = sdhci_readl(host, XENON_SYS_EXT_OP_CTRL);
119 sdhci_writel(host, reg, XENON_SYS_EXT_OP_CTRL);
123 static void xenon_mask_cmd_conflict_err(struct sdhci_host *host)
127 reg = sdhci_readl(host, XENON_SYS_EXT_OP_CTRL);
129 sdhci_writel(host, reg, XENON_SYS_EXT_OP_CTRL);
132 static void xenon_retune_setup(struct sdhci_host *host)
134 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
139 reg = sdhci_readl(host, XENON_SLOT_RETUNING_REQ_CTRL);
141 sdhci_writel(host, reg, XENON_SLOT_RETUNING_REQ_CTRL);
144 reg = sdhci_readl(host, SDHCI_SIGNAL_ENABLE);
146 sdhci_writel(host, reg, SDHCI_SIGNAL_ENABLE);
147 reg = sdhci_readl(host, SDHCI_INT_ENABLE);
149 sdhci_writel(host, reg, SDHCI_INT_ENABLE);
152 host->tuning_mode = SDHCI_TUNING_MODE_1;
154 host->tuning_count = 1 << (priv->tuning_count - 1);
161 static void xenon_reset_exit(struct sdhci_host *host,
169 xenon_retune_setup(host);
176 xenon_set_acg(host, false);
178 xenon_set_sdclk_off_idle(host, sdhc_id, false);
180 xenon_mask_cmd_conflict_err(host);
183 static void xenon_reset(struct sdhci_host *host, u8 mask)
185 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
188 sdhci_reset(host, mask);
189 xenon_reset_exit(host, priv->sdhc_id, mask);
196 static void xenon_set_uhs_signaling(struct sdhci_host *host,
201 ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
202 /* Select Bus Speed Mode for host */
219 sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2);
222 static void xenon_set_power(struct sdhci_host *host, unsigned char mode,
225 struct mmc_host *mmc = host->mmc;
226 u8 pwr = host->pwr;
228 sdhci_set_power_noreg(host, mode, vdd);
230 if (host->pwr == pwr)
233 if (host->pwr == 0)
240 static void xenon_voltage_switch(struct sdhci_host *host)
246 static unsigned int xenon_get_max_clock(struct sdhci_host *host)
248 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
251 return sdhci_pltfm_clk_get_max_clock(host);
278 struct sdhci_host *host = mmc_priv(mmc);
279 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
293 host->preset_enabled = false;
294 host->quirks2 |= SDHCI_QUIRK2_PRESET_VALUE_BROKEN;
295 host->flags &= ~SDHCI_PV_ENABLED;
297 reg = sdhci_readw(host, SDHCI_HOST_CONTROL2);
299 sdhci_writew(host, reg, SDHCI_HOST_CONTROL2);
301 host->quirks2 &= ~SDHCI_QUIRK2_PRESET_VALUE_BROKEN;
305 xenon_phy_adj(host, ios);
307 if (host->clock > XENON_DEFAULT_SDCLK_FREQ)
308 xenon_set_sdclk_off_idle(host, priv->sdhc_id, true);
314 struct sdhci_host *host = mmc_priv(mmc);
326 xenon_enable_internal_clk(host);
328 xenon_soc_pad_ctrl(host, ios->signal_voltage);
347 struct sdhci_host *host = mmc_priv(mmc);
348 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
357 struct sdhci_host *host = mmc_priv(mmc);
359 if (host->timing == MMC_TIMING_UHS_DDR50 ||
360 host->timing == MMC_TIMING_MMC_DDR52)
368 if (host->tuning_mode != SDHCI_TUNING_MODE_1)
369 xenon_retune_setup(host);
376 struct sdhci_host *host = mmc_priv(mmc);
377 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
389 reg = sdhci_readl(host, XENON_SYS_CFG_INFO);
391 sdhci_writel(host, reg, XENON_SYS_CFG_INFO);
394 reg = sdhci_readl(host, XENON_SYS_CFG_INFO);
396 sdhci_writel(host, reg, XENON_SYS_CFG_INFO);
400 static void xenon_replace_mmc_host_ops(struct sdhci_host *host)
402 host->mmc_host_ops.set_ios = xenon_set_ios;
403 host->mmc_host_ops.start_signal_voltage_switch =
405 host->mmc_host_ops.init_card = xenon_init_card;
406 host->mmc_host_ops.execute_tuning = xenon_execute_tuning;
407 host->mmc_host_ops.enable_sdio_irq = xenon_enable_sdio_irq;
419 struct sdhci_host *host = platform_get_drvdata(pdev);
420 struct mmc_host *mmc = host->mmc;
421 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
428 host->quirks2 |= SDHCI_QUIRK2_BROKEN_HS200;
432 nr_sdhc = sdhci_readl(host, XENON_SYS_CFG_INFO);
453 return xenon_phy_parse_params(dev, host);
456 static int xenon_sdhc_prepare(struct sdhci_host *host)
458 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
463 xenon_enable_sdhc(host, sdhc_id);
466 xenon_set_acg(host, true);
469 xenon_enable_sdhc_parallel_tran(host, sdhc_id);
472 xenon_set_sdclk_off_idle(host, sdhc_id, false);
474 xenon_mask_cmd_conflict_err(host);
479 static void xenon_sdhc_unprepare(struct sdhci_host *host)
481 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
486 xenon_disable_sdhc(host, sdhc_id);
493 struct sdhci_host *host;
497 host = sdhci_pltfm_init(pdev, &sdhci_xenon_pdata,
499 if (IS_ERR(host))
500 return PTR_ERR(host);
502 pltfm_host = sdhci_priv(host);
511 xenon_replace_mmc_host_ops(host);
536 err = mmc_of_parse(host->mmc);
542 xenon_set_acg(host, false);
549 err = xenon_sdhc_prepare(host);
560 err = sdhci_add_host(host);
571 xenon_sdhc_unprepare(host);
583 struct sdhci_host *host = platform_get_drvdata(pdev);
584 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
591 sdhci_remove_host(host, 0);
593 xenon_sdhc_unprepare(host);
603 struct sdhci_host *host = dev_get_drvdata(dev);
604 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
618 struct sdhci_host *host = dev_get_drvdata(dev);
619 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
623 ret = sdhci_runtime_suspend_host(host);
627 if (host->tuning_mode != SDHCI_TUNING_MODE_3)
628 mmc_retune_needed(host->mmc);
642 struct sdhci_host *host = dev_get_drvdata(dev);
643 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
654 ret = xenon_sdhc_prepare(host);
660 ret = sdhci_runtime_resume_host(host, 0);