Lines Matching full:host

38 	struct dwmci_host host;  member
47 static void exynos_dwmci_clksel(struct dwmci_host *host) in exynos_dwmci_clksel() argument
51 container_of(host, struct dwmci_exynos_priv_data, host); in exynos_dwmci_clksel()
53 struct dwmci_exynos_priv_data *priv = host->priv; in exynos_dwmci_clksel()
55 dwmci_writel(host, DWMCI_CLKSEL, priv->sdr_timing); in exynos_dwmci_clksel()
58 unsigned int exynos_dwmci_get_clk(struct dwmci_host *host, uint freq) in exynos_dwmci_get_clk() argument
69 clk_div = ((dwmci_readl(host, DWMCI_CLKSEL) >> DWMCI_DIVRATIO_BIT) in exynos_dwmci_get_clk()
71 sclk = get_mmc_clk(host->dev_index); in exynos_dwmci_get_clk()
75 * When clock unit is broken, need to set "host->div" in exynos_dwmci_get_clk()
77 return sclk / clk_div / (host->div + 1); in exynos_dwmci_get_clk()
80 static void exynos_dwmci_board_init(struct dwmci_host *host) in exynos_dwmci_board_init() argument
82 struct dwmci_exynos_priv_data *priv = host->priv; in exynos_dwmci_board_init()
84 if (host->quirks & DWMCI_QUIRK_DISABLE_SMU) { in exynos_dwmci_board_init()
85 dwmci_writel(host, EMMCP_MPSBEGIN0, 0); in exynos_dwmci_board_init()
86 dwmci_writel(host, EMMCP_SEND0, 0); in exynos_dwmci_board_init()
87 dwmci_writel(host, EMMCP_CTRL0, in exynos_dwmci_board_init()
96 exynos_dwmci_clksel(host); in exynos_dwmci_board_init()
99 static int exynos_dwmci_core_init(struct dwmci_host *host) in exynos_dwmci_core_init() argument
104 if (host->bus_hz) in exynos_dwmci_core_init()
105 freq = host->bus_hz; in exynos_dwmci_core_init()
110 sclk = get_mmc_clk(host->dev_index); in exynos_dwmci_core_init()
113 set_mmc_clk(host->dev_index, div); in exynos_dwmci_core_init()
115 host->name = "EXYNOS DWMMC"; in exynos_dwmci_core_init()
117 host->quirks = DWMCI_QUIRK_DISABLE_SMU; in exynos_dwmci_core_init()
119 host->board_init = exynos_dwmci_board_init; in exynos_dwmci_core_init()
121 host->caps = MMC_MODE_DDR_52MHz; in exynos_dwmci_core_init()
122 host->clksel = exynos_dwmci_clksel; in exynos_dwmci_core_init()
123 host->get_mmc_clk = exynos_dwmci_get_clk; in exynos_dwmci_core_init()
127 if (add_dwmci(host, DWMMC_MAX_FREQ, DWMMC_MIN_FREQ)) { in exynos_dwmci_core_init()
128 printf("DWMMC%d registration failed\n", host->dev_index); in exynos_dwmci_core_init()
138 static int do_dwmci_init(struct dwmci_host *host) in do_dwmci_init() argument
142 flag = host->buswidth == 8 ? PINMUX_FLAG_8BIT_MODE : PINMUX_FLAG_NONE; in do_dwmci_init()
143 err = exynos_pinmux_config(host->dev_id, flag); in do_dwmci_init()
145 printf("DWMMC%d not configure\n", host->dev_index); in do_dwmci_init()
149 return exynos_dwmci_core_init(host); in do_dwmci_init()
153 struct dwmci_host *host, in exynos_dwmci_get_config() argument
160 host->dev_id = pinmux_decode_periph_id(blob, node); in exynos_dwmci_get_config()
162 host->dev_index = fdtdec_get_int(blob, node, "index", host->dev_id); in exynos_dwmci_get_config()
163 if (host->dev_index == host->dev_id) in exynos_dwmci_get_config()
164 host->dev_index = host->dev_id - PERIPH_ID_SDMMC0; in exynos_dwmci_get_config()
166 if (host->dev_index > 4) { in exynos_dwmci_get_config()
167 printf("DWMMC%d: Can't get the dev index\n", host->dev_index); in exynos_dwmci_get_config()
172 host->buswidth = fdtdec_get_int(blob, node, "samsung,bus-width", 4); in exynos_dwmci_get_config()
177 printf("DWMMC%d: Can't get base address\n", host->dev_index); in exynos_dwmci_get_config()
180 host->ioaddr = (void *)base; in exynos_dwmci_get_config()
186 host->dev_index); in exynos_dwmci_get_config()
196 if (host->dev_index == 0) in exynos_dwmci_get_config()
198 else if (host->dev_index == 2) in exynos_dwmci_get_config()
202 host->fifoth_val = fdtdec_get_int(blob, node, "fifoth_val", 0); in exynos_dwmci_get_config()
203 host->bus_hz = fdtdec_get_int(blob, node, "bus_hz", 0); in exynos_dwmci_get_config()
204 host->div = fdtdec_get_int(blob, node, "div", 0); in exynos_dwmci_get_config()
213 struct dwmci_host *host; in exynos_dwmci_process_node() local
220 host = &dwmci_host[i]; in exynos_dwmci_process_node()
228 err = exynos_dwmci_get_config(blob, node, host, priv); in exynos_dwmci_process_node()
234 host->priv = priv; in exynos_dwmci_process_node()
236 do_dwmci_init(host); in exynos_dwmci_process_node()
269 struct dwmci_host *host = &priv->host; in exynos_dwmmc_probe() local
272 err = exynos_dwmci_get_config(gd->fdt_blob, dev_of_offset(dev), host, in exynos_dwmmc_probe()
276 err = do_dwmci_init(host); in exynos_dwmmc_probe()
280 dwmci_setup_cfg(&plat->cfg, host, DWMMC_MAX_FREQ, DWMMC_MIN_FREQ); in exynos_dwmmc_probe()
281 host->mmc = &plat->mmc; in exynos_dwmmc_probe()
282 host->mmc->priv = &priv->host; in exynos_dwmmc_probe()
283 host->priv = dev; in exynos_dwmmc_probe()
284 upriv->mmc = host->mmc; in exynos_dwmmc_probe()