Lines Matching refs:host
39 struct dwmci_host host; member
48 static void exynos_dwmci_clksel(struct dwmci_host *host) in exynos_dwmci_clksel() argument
50 struct dwmci_exynos_priv_data *priv = host->priv; in exynos_dwmci_clksel()
52 dwmci_writel(host, DWMCI_CLKSEL, priv->sdr_timing); in exynos_dwmci_clksel()
55 unsigned int exynos_dwmci_get_clk(struct dwmci_host *host, uint freq) in exynos_dwmci_get_clk() argument
66 clk_div = ((dwmci_readl(host, DWMCI_CLKSEL) >> DWMCI_DIVRATIO_BIT) in exynos_dwmci_get_clk()
68 sclk = get_mmc_clk(host->dev_index); in exynos_dwmci_get_clk()
74 return sclk / clk_div / (host->div + 1); in exynos_dwmci_get_clk()
77 static void exynos_dwmci_board_init(struct dwmci_host *host) in exynos_dwmci_board_init() argument
79 struct dwmci_exynos_priv_data *priv = host->priv; in exynos_dwmci_board_init()
81 if (host->quirks & DWMCI_QUIRK_DISABLE_SMU) { in exynos_dwmci_board_init()
82 dwmci_writel(host, EMMCP_MPSBEGIN0, 0); in exynos_dwmci_board_init()
83 dwmci_writel(host, EMMCP_SEND0, 0); in exynos_dwmci_board_init()
84 dwmci_writel(host, EMMCP_CTRL0, in exynos_dwmci_board_init()
93 exynos_dwmci_clksel(host); in exynos_dwmci_board_init()
96 static int exynos_dwmci_core_init(struct dwmci_host *host) in exynos_dwmci_core_init() argument
101 if (host->bus_hz) in exynos_dwmci_core_init()
102 freq = host->bus_hz; in exynos_dwmci_core_init()
107 sclk = get_mmc_clk(host->dev_index); in exynos_dwmci_core_init()
110 set_mmc_clk(host->dev_index, div); in exynos_dwmci_core_init()
112 host->name = "EXYNOS DWMMC"; in exynos_dwmci_core_init()
114 host->quirks = DWMCI_QUIRK_DISABLE_SMU; in exynos_dwmci_core_init()
116 host->board_init = exynos_dwmci_board_init; in exynos_dwmci_core_init()
118 host->caps = MMC_MODE_DDR_52MHz; in exynos_dwmci_core_init()
119 host->clksel = exynos_dwmci_clksel; in exynos_dwmci_core_init()
120 host->get_mmc_clk = exynos_dwmci_get_clk; in exynos_dwmci_core_init()
124 if (add_dwmci(host, DWMMC_MAX_FREQ, DWMMC_MIN_FREQ)) { in exynos_dwmci_core_init()
125 printf("DWMMC%d registration failed\n", host->dev_index); in exynos_dwmci_core_init()
135 static int do_dwmci_init(struct dwmci_host *host) in do_dwmci_init() argument
139 flag = host->buswidth == 8 ? PINMUX_FLAG_8BIT_MODE : PINMUX_FLAG_NONE; in do_dwmci_init()
140 err = exynos_pinmux_config(host->dev_id, flag); in do_dwmci_init()
142 printf("DWMMC%d not configure\n", host->dev_index); in do_dwmci_init()
146 return exynos_dwmci_core_init(host); in do_dwmci_init()
150 struct dwmci_host *host) in exynos_dwmci_get_config() argument
163 host->dev_id = pinmux_decode_periph_id(blob, node); in exynos_dwmci_get_config()
165 host->dev_index = fdtdec_get_int(blob, node, "index", host->dev_id); in exynos_dwmci_get_config()
166 if (host->dev_index == host->dev_id) in exynos_dwmci_get_config()
167 host->dev_index = host->dev_id - PERIPH_ID_SDMMC0; in exynos_dwmci_get_config()
169 if (host->dev_index > 4) { in exynos_dwmci_get_config()
170 printf("DWMMC%d: Can't get the dev index\n", host->dev_index); in exynos_dwmci_get_config()
175 host->buswidth = fdtdec_get_int(blob, node, "samsung,bus-width", 4); in exynos_dwmci_get_config()
180 printf("DWMMC%d: Can't get base address\n", host->dev_index); in exynos_dwmci_get_config()
183 host->ioaddr = (void *)base; in exynos_dwmci_get_config()
189 host->dev_index); in exynos_dwmci_get_config()
199 if (host->dev_index == 0) in exynos_dwmci_get_config()
201 else if (host->dev_index == 2) in exynos_dwmci_get_config()
205 host->fifoth_val = fdtdec_get_int(blob, node, "fifoth_val", 0); in exynos_dwmci_get_config()
206 host->bus_hz = fdtdec_get_int(blob, node, "bus_hz", 0); in exynos_dwmci_get_config()
207 host->div = fdtdec_get_int(blob, node, "div", 0); in exynos_dwmci_get_config()
209 host->priv = priv; in exynos_dwmci_get_config()
217 struct dwmci_host *host; in exynos_dwmci_process_node() local
224 host = &dwmci_host[i]; in exynos_dwmci_process_node()
225 err = exynos_dwmci_get_config(blob, node, host); in exynos_dwmci_process_node()
231 do_dwmci_init(host); in exynos_dwmci_process_node()
264 struct dwmci_host *host = &priv->host; in exynos_dwmmc_probe() local
267 err = exynos_dwmci_get_config(gd->fdt_blob, dev_of_offset(dev), host); in exynos_dwmmc_probe()
270 err = do_dwmci_init(host); in exynos_dwmmc_probe()
274 dwmci_setup_cfg(&plat->cfg, host, DWMMC_MAX_FREQ, DWMMC_MIN_FREQ); in exynos_dwmmc_probe()
275 host->mmc = &plat->mmc; in exynos_dwmmc_probe()
276 host->mmc->priv = &priv->host; in exynos_dwmmc_probe()
277 host->priv = dev; in exynos_dwmmc_probe()
278 upriv->mmc = host->mmc; in exynos_dwmmc_probe()