Commit 54b7026f authored by AngeloGioacchino Del Regno's avatar AngeloGioacchino Del Regno Committed by Stephen Boyd
Browse files

clk: mediatek: mt8135-apmixedsys: Convert to platform_driver and module



Convert apmixedsys clocks to be a platform driver; while at it, also
add necessary error handling to the probe function, add a remove
callback and provide a MODULE_DESCRIPTION().

This driver is now compatible with an eventual module build.

Signed-off-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: default avatarChen-Yu Tsai <wenst@chromium.org>
Link: https://lore.kernel.org/r/20230306140543.1813621-53-angelogioacchino.delregno@collabora.com


Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
parent f4f9a9c0
Loading
Loading
Loading
Loading
+48 −5
Original line number Original line Diff line number Diff line
@@ -47,16 +47,59 @@ static const struct mtk_pll_data plls[] = {
	PLL(CLK_APMIXED_VDECPLL, "vdecpll", 0x304, 0x31c, 0x80000000, 0, 21, 0x2b0, 6, 0x0, 0x308, 0),
	PLL(CLK_APMIXED_VDECPLL, "vdecpll", 0x304, 0x31c, 0x80000000, 0, 21, 0x2b0, 6, 0x0, 0x308, 0),
};
};


static void __init mtk_apmixedsys_init(struct device_node *node)
static int clk_mt8135_apmixed_probe(struct platform_device *pdev)
{
{
	struct clk_hw_onecell_data *clk_data;
	struct clk_hw_onecell_data *clk_data;
	struct device_node *node = pdev->dev.of_node;
	int ret;


	clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
	clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
	if (!clk_data)
	if (!clk_data)
		return;
		return -ENOMEM;


	mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
	ret = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
	if (ret)
		return ret;

	ret = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
	if (ret)
		goto unregister_plls;

	return 0;

unregister_plls:
	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);

	return ret;
}

static int clk_mt8135_apmixed_remove(struct platform_device *pdev)
{
	struct device_node *node = pdev->dev.of_node;
	struct clk_hw_onecell_data *clk_data = platform_get_drvdata(pdev);

	of_clk_del_provider(node);
	mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
	mtk_free_clk_data(clk_data);

	return 0;
}
}
CLK_OF_DECLARE(mtk_apmixedsys, "mediatek,mt8135-apmixedsys",

		mtk_apmixedsys_init);
static const struct of_device_id of_match_clk_mt8135_apmixed[] = {
	{ .compatible = "mediatek,mt8135-apmixedsys" },
	{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, of_match_clk_mt8135_apmixed);

static struct platform_driver clk_mt8135_apmixed_drv = {
	.probe = clk_mt8135_apmixed_probe,
	.remove = clk_mt8135_apmixed_remove,
	.driver = {
		.name = "clk-mt8135-apmixed",
		.of_match_table = of_match_clk_mt8135_apmixed,
	},
};
module_platform_driver(clk_mt8135_apmixed_drv)

MODULE_DESCRIPTION("MediaTek MT8135 apmixedsys clocks driver");
MODULE_LICENSE("GPL");
MODULE_LICENSE("GPL");