Lines Matching full:smi
16 #include <soc/mediatek/smi.h>
47 /* SMI COMMON */
84 struct mtk_smi smi; member
92 static int mtk_smi_clk_enable(const struct mtk_smi *smi) in mtk_smi_clk_enable() argument
96 ret = clk_prepare_enable(smi->clk_apb); in mtk_smi_clk_enable()
100 ret = clk_prepare_enable(smi->clk_smi); in mtk_smi_clk_enable()
104 ret = clk_prepare_enable(smi->clk_gals0); in mtk_smi_clk_enable()
108 ret = clk_prepare_enable(smi->clk_gals1); in mtk_smi_clk_enable()
115 clk_disable_unprepare(smi->clk_gals0); in mtk_smi_clk_enable()
117 clk_disable_unprepare(smi->clk_smi); in mtk_smi_clk_enable()
119 clk_disable_unprepare(smi->clk_apb); in mtk_smi_clk_enable()
123 static void mtk_smi_clk_disable(const struct mtk_smi *smi) in mtk_smi_clk_disable() argument
125 clk_disable_unprepare(smi->clk_gals1); in mtk_smi_clk_disable()
126 clk_disable_unprepare(smi->clk_gals0); in mtk_smi_clk_disable()
127 clk_disable_unprepare(smi->clk_smi); in mtk_smi_clk_disable()
128 clk_disable_unprepare(smi->clk_apb); in mtk_smi_clk_disable()
273 .compatible = "mediatek,mt8167-smi-larb",
277 .compatible = "mediatek,mt8173-smi-larb",
281 .compatible = "mediatek,mt2701-smi-larb",
285 .compatible = "mediatek,mt2712-smi-larb",
289 .compatible = "mediatek,mt6779-smi-larb",
293 .compatible = "mediatek,mt8183-smi-larb",
317 larb->smi.clk_apb = devm_clk_get(dev, "apb"); in mtk_smi_larb_probe()
318 if (IS_ERR(larb->smi.clk_apb)) in mtk_smi_larb_probe()
319 return PTR_ERR(larb->smi.clk_apb); in mtk_smi_larb_probe()
321 larb->smi.clk_smi = devm_clk_get(dev, "smi"); in mtk_smi_larb_probe()
322 if (IS_ERR(larb->smi.clk_smi)) in mtk_smi_larb_probe()
323 return PTR_ERR(larb->smi.clk_smi); in mtk_smi_larb_probe()
327 larb->smi.clk_gals0 = devm_clk_get(dev, "gals"); in mtk_smi_larb_probe()
328 if (PTR_ERR(larb->smi.clk_gals0) == -ENOENT) in mtk_smi_larb_probe()
329 larb->smi.clk_gals0 = NULL; in mtk_smi_larb_probe()
330 else if (IS_ERR(larb->smi.clk_gals0)) in mtk_smi_larb_probe()
331 return PTR_ERR(larb->smi.clk_gals0); in mtk_smi_larb_probe()
333 larb->smi.dev = dev; in mtk_smi_larb_probe()
335 smi_node = of_parse_phandle(dev->of_node, "mediatek,smi", 0); in mtk_smi_larb_probe()
368 /* Power on smi-common. */ in mtk_smi_larb_resume()
371 dev_err(dev, "Failed to pm get for smi-common(%d).\n", ret); in mtk_smi_larb_resume()
375 ret = mtk_smi_clk_enable(&larb->smi); in mtk_smi_larb_resume()
392 mtk_smi_clk_disable(&larb->smi); in mtk_smi_larb_suspend()
407 .name = "mtk-smi-larb",
437 .compatible = "mediatek,mt8173-smi-common",
441 .compatible = "mediatek,mt8167-smi-common",
445 .compatible = "mediatek,mt2701-smi-common",
449 .compatible = "mediatek,mt2712-smi-common",
453 .compatible = "mediatek,mt6779-smi-common",
457 .compatible = "mediatek,mt8183-smi-common",
480 common->clk_smi = devm_clk_get(dev, "smi"); in mtk_smi_common_probe()
495 * for mtk smi gen 1, we need to get the ao(always on) base to config in mtk_smi_common_probe()
496 * m4u port, and we need to enable the aync clock for transform the smi in mtk_smi_common_probe()
497 * clock into emi clock domain, but for mtk smi gen2, there's no smi ao in mtk_smi_common_probe()
565 .name = "mtk-smi-common",
577 pr_err("Failed to register SMI driver\n"); in mtk_smi_init()
583 pr_err("Failed to register SMI-LARB driver\n"); in mtk_smi_init()