1*685ec348STaniya Das // SPDX-License-Identifier: GPL-2.0-only 2*685ec348STaniya Das /* 3*685ec348STaniya Das * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. 4*685ec348STaniya Das */ 5*685ec348STaniya Das 6*685ec348STaniya Das #include <linux/clk-provider.h> 7*685ec348STaniya Das #include <linux/mod_devicetable.h> 8*685ec348STaniya Das #include <linux/module.h> 9*685ec348STaniya Das #include <linux/of.h> 10*685ec348STaniya Das #include <linux/platform_device.h> 11*685ec348STaniya Das #include <linux/regmap.h> 12*685ec348STaniya Das 13*685ec348STaniya Das #include <dt-bindings/clock/qcom,kaanapali-gxclkctl.h> 14*685ec348STaniya Das 15*685ec348STaniya Das #include "common.h" 16*685ec348STaniya Das #include "gdsc.h" 17*685ec348STaniya Das 18*685ec348STaniya Das enum { 19*685ec348STaniya Das DT_BI_TCXO, 20*685ec348STaniya Das }; 21*685ec348STaniya Das 22*685ec348STaniya Das static struct gdsc gx_clkctl_gx_gdsc = { 23*685ec348STaniya Das .gdscr = 0x4024, 24*685ec348STaniya Das .en_rest_wait_val = 0x2, 25*685ec348STaniya Das .en_few_wait_val = 0x2, 26*685ec348STaniya Das .clk_dis_wait_val = 0xf, 27*685ec348STaniya Das .pd = { 28*685ec348STaniya Das .name = "gx_clkctl_gx_gdsc", 29*685ec348STaniya Das .power_on = gdsc_gx_do_nothing_enable, 30*685ec348STaniya Das }, 31*685ec348STaniya Das .pwrsts = PWRSTS_OFF_ON, 32*685ec348STaniya Das .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE, 33*685ec348STaniya Das }; 34*685ec348STaniya Das 35*685ec348STaniya Das static struct gdsc *gx_clkctl_gdscs[] = { 36*685ec348STaniya Das [GX_CLKCTL_GX_GDSC] = &gx_clkctl_gx_gdsc, 37*685ec348STaniya Das }; 38*685ec348STaniya Das 39*685ec348STaniya Das static const struct regmap_config gx_clkctl_regmap_config = { 40*685ec348STaniya Das .reg_bits = 32, 41*685ec348STaniya Das .reg_stride = 4, 42*685ec348STaniya Das .val_bits = 32, 43*685ec348STaniya Das .max_register = 0x4038, 44*685ec348STaniya Das .fast_io = true, 45*685ec348STaniya Das }; 46*685ec348STaniya Das 47*685ec348STaniya Das static const struct qcom_cc_desc gx_clkctl_kaanapali_desc = { 48*685ec348STaniya Das .config = &gx_clkctl_regmap_config, 49*685ec348STaniya Das .gdscs = gx_clkctl_gdscs, 50*685ec348STaniya Das .num_gdscs = ARRAY_SIZE(gx_clkctl_gdscs), 51*685ec348STaniya Das .use_rpm = true, 52*685ec348STaniya Das }; 53*685ec348STaniya Das 54*685ec348STaniya Das static const struct of_device_id gx_clkctl_kaanapali_match_table[] = { 55*685ec348STaniya Das { .compatible = "qcom,kaanapali-gxclkctl" }, 56*685ec348STaniya Das { } 57*685ec348STaniya Das }; 58*685ec348STaniya Das MODULE_DEVICE_TABLE(of, gx_clkctl_kaanapali_match_table); 59*685ec348STaniya Das 60*685ec348STaniya Das static int gx_clkctl_kaanapali_probe(struct platform_device *pdev) 61*685ec348STaniya Das { 62*685ec348STaniya Das return qcom_cc_probe(pdev, &gx_clkctl_kaanapali_desc); 63*685ec348STaniya Das } 64*685ec348STaniya Das 65*685ec348STaniya Das static struct platform_driver gx_clkctl_kaanapali_driver = { 66*685ec348STaniya Das .probe = gx_clkctl_kaanapali_probe, 67*685ec348STaniya Das .driver = { 68*685ec348STaniya Das .name = "gxclkctl-kaanapali", 69*685ec348STaniya Das .of_match_table = gx_clkctl_kaanapali_match_table, 70*685ec348STaniya Das }, 71*685ec348STaniya Das }; 72*685ec348STaniya Das 73*685ec348STaniya Das module_platform_driver(gx_clkctl_kaanapali_driver); 74*685ec348STaniya Das 75*685ec348STaniya Das MODULE_DESCRIPTION("QTI GXCLKCTL Kaanapali Driver"); 76*685ec348STaniya Das MODULE_LICENSE("GPL"); 77