1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2022, 2023 Linaro Limited 4 */ 5 6 #include <linux/clk-provider.h> 7 #include <linux/err.h> 8 #include <linux/kernel.h> 9 #include <linux/module.h> 10 #include <linux/platform_device.h> 11 #include <linux/regmap.h> 12 13 #include <dt-bindings/clock/qcom,sm6115-lpasscc.h> 14 15 #include "common.h" 16 #include "reset.h" 17 18 static const struct qcom_reset_map lpass_audiocc_sm6115_resets[] = { 19 [LPASS_AUDIO_SWR_RX_CGCR] = { .reg = 0x98, .bit = 1, .udelay = 500 }, 20 }; 21 22 static struct regmap_config lpass_audiocc_sm6115_regmap_config = { 23 .reg_bits = 32, 24 .reg_stride = 4, 25 .val_bits = 32, 26 .name = "lpass-audio-csr", 27 .max_register = 0x1000, 28 }; 29 30 static const struct qcom_cc_desc lpass_audiocc_sm6115_reset_desc = { 31 .config = &lpass_audiocc_sm6115_regmap_config, 32 .resets = lpass_audiocc_sm6115_resets, 33 .num_resets = ARRAY_SIZE(lpass_audiocc_sm6115_resets), 34 }; 35 36 static const struct qcom_reset_map lpasscc_sm6115_resets[] = { 37 [LPASS_SWR_TX_CONFIG_CGCR] = { .reg = 0x100, .bit = 1, .udelay = 500 }, 38 }; 39 40 static struct regmap_config lpasscc_sm6115_regmap_config = { 41 .reg_bits = 32, 42 .reg_stride = 4, 43 .val_bits = 32, 44 .name = "lpass-tcsr", 45 .max_register = 0x1000, 46 }; 47 48 static const struct qcom_cc_desc lpasscc_sm6115_reset_desc = { 49 .config = &lpasscc_sm6115_regmap_config, 50 .resets = lpasscc_sm6115_resets, 51 .num_resets = ARRAY_SIZE(lpasscc_sm6115_resets), 52 }; 53 54 static const struct of_device_id lpasscc_sm6115_match_table[] = { 55 { 56 .compatible = "qcom,sm6115-lpassaudiocc", 57 .data = &lpass_audiocc_sm6115_reset_desc, 58 }, { 59 .compatible = "qcom,sm6115-lpasscc", 60 .data = &lpasscc_sm6115_reset_desc, 61 }, 62 { }, 63 }; 64 MODULE_DEVICE_TABLE(of, lpasscc_sm6115_match_table); 65 66 static int lpasscc_sm6115_probe(struct platform_device *pdev) 67 { 68 const struct qcom_cc_desc *desc = of_device_get_match_data(&pdev->dev); 69 70 return qcom_cc_probe_by_index(pdev, 0, desc); 71 } 72 73 static struct platform_driver lpasscc_sm6115_driver = { 74 .probe = lpasscc_sm6115_probe, 75 .driver = { 76 .name = "lpasscc-sm6115", 77 .of_match_table = lpasscc_sm6115_match_table, 78 }, 79 }; 80 81 module_platform_driver(lpasscc_sm6115_driver); 82 83 MODULE_DESCRIPTION("QTI LPASSCC SM6115 Driver"); 84 MODULE_LICENSE("GPL"); 85