1*a5c9c3baSSrinivas Kandagatla // SPDX-License-Identifier: GPL-2.0-only
2*a5c9c3baSSrinivas Kandagatla /*
3*a5c9c3baSSrinivas Kandagatla  * Copyright (c) 2022, Linaro Limited
4*a5c9c3baSSrinivas Kandagatla  */
5*a5c9c3baSSrinivas Kandagatla 
6*a5c9c3baSSrinivas Kandagatla #include <linux/clk-provider.h>
7*a5c9c3baSSrinivas Kandagatla #include <linux/err.h>
8*a5c9c3baSSrinivas Kandagatla #include <linux/kernel.h>
9*a5c9c3baSSrinivas Kandagatla #include <linux/module.h>
10*a5c9c3baSSrinivas Kandagatla #include <linux/of_device.h>
11*a5c9c3baSSrinivas Kandagatla #include <linux/regmap.h>
12*a5c9c3baSSrinivas Kandagatla 
13*a5c9c3baSSrinivas Kandagatla #include <dt-bindings/clock/qcom,sc8280xp-lpasscc.h>
14*a5c9c3baSSrinivas Kandagatla 
15*a5c9c3baSSrinivas Kandagatla #include "common.h"
16*a5c9c3baSSrinivas Kandagatla #include "reset.h"
17*a5c9c3baSSrinivas Kandagatla 
18*a5c9c3baSSrinivas Kandagatla static const struct qcom_reset_map lpasscc_sc8280xp_resets[] = {
19*a5c9c3baSSrinivas Kandagatla 	[LPASS_AUDIO_SWR_TX_CGCR] = { 0xc010, 1 },
20*a5c9c3baSSrinivas Kandagatla };
21*a5c9c3baSSrinivas Kandagatla 
22*a5c9c3baSSrinivas Kandagatla static struct regmap_config lpasscc_sc8280xp_regmap_config = {
23*a5c9c3baSSrinivas Kandagatla 	.reg_bits = 32,
24*a5c9c3baSSrinivas Kandagatla 	.reg_stride = 4,
25*a5c9c3baSSrinivas Kandagatla 	.val_bits = 32,
26*a5c9c3baSSrinivas Kandagatla 	.name = "lpass-tcsr",
27*a5c9c3baSSrinivas Kandagatla 	.max_register = 0x12000,
28*a5c9c3baSSrinivas Kandagatla };
29*a5c9c3baSSrinivas Kandagatla 
30*a5c9c3baSSrinivas Kandagatla static const struct qcom_cc_desc lpasscc_sc8280xp_reset_desc = {
31*a5c9c3baSSrinivas Kandagatla 	.config = &lpasscc_sc8280xp_regmap_config,
32*a5c9c3baSSrinivas Kandagatla 	.resets = lpasscc_sc8280xp_resets,
33*a5c9c3baSSrinivas Kandagatla 	.num_resets = ARRAY_SIZE(lpasscc_sc8280xp_resets),
34*a5c9c3baSSrinivas Kandagatla };
35*a5c9c3baSSrinivas Kandagatla 
36*a5c9c3baSSrinivas Kandagatla static const struct of_device_id lpasscc_sc8280xp_match_table[] = {
37*a5c9c3baSSrinivas Kandagatla 	{
38*a5c9c3baSSrinivas Kandagatla 		.compatible = "qcom,sc8280xp-lpasscc",
39*a5c9c3baSSrinivas Kandagatla 		.data = &lpasscc_sc8280xp_reset_desc,
40*a5c9c3baSSrinivas Kandagatla 	},
41*a5c9c3baSSrinivas Kandagatla 	{ }
42*a5c9c3baSSrinivas Kandagatla };
43*a5c9c3baSSrinivas Kandagatla MODULE_DEVICE_TABLE(of, lpasscc_sc8280xp_match_table);
44*a5c9c3baSSrinivas Kandagatla 
45*a5c9c3baSSrinivas Kandagatla static int lpasscc_sc8280xp_probe(struct platform_device *pdev)
46*a5c9c3baSSrinivas Kandagatla {
47*a5c9c3baSSrinivas Kandagatla 	const struct qcom_cc_desc *desc = of_device_get_match_data(&pdev->dev);
48*a5c9c3baSSrinivas Kandagatla 
49*a5c9c3baSSrinivas Kandagatla 	return qcom_cc_probe_by_index(pdev, 0, desc);
50*a5c9c3baSSrinivas Kandagatla }
51*a5c9c3baSSrinivas Kandagatla 
52*a5c9c3baSSrinivas Kandagatla static struct platform_driver lpasscc_sc8280xp_driver = {
53*a5c9c3baSSrinivas Kandagatla 	.probe = lpasscc_sc8280xp_probe,
54*a5c9c3baSSrinivas Kandagatla 	.driver = {
55*a5c9c3baSSrinivas Kandagatla 		.name = "lpasscc-sc8280xp",
56*a5c9c3baSSrinivas Kandagatla 		.of_match_table = lpasscc_sc8280xp_match_table,
57*a5c9c3baSSrinivas Kandagatla 	},
58*a5c9c3baSSrinivas Kandagatla };
59*a5c9c3baSSrinivas Kandagatla 
60*a5c9c3baSSrinivas Kandagatla module_platform_driver(lpasscc_sc8280xp_driver);
61*a5c9c3baSSrinivas Kandagatla 
62*a5c9c3baSSrinivas Kandagatla MODULE_AUTHOR("Srinivas Kandagatla <srinivas.kandagatla@linaro.org>");
63*a5c9c3baSSrinivas Kandagatla MODULE_DESCRIPTION("QTI LPASSCC SC8280XP Driver");
64*a5c9c3baSSrinivas Kandagatla MODULE_LICENSE("GPL");
65