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