Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: qcom: Move cxo/pxo/xo into dt files

Put these clocks into the dt files instead of registering them
from C code. This provides a few benefits. It allows us to
specify the frequency of these clocks at the board level instead
of hard-coding them in the driver. It allows us to insert an RPM
clock in between the consumers of the crystals and the actual
clock. And finally, it helps us transition the GCC driver to use
RPM clocks when that configuration is enabled.

Cc: Georgi Djakov <georgi.djakov@linaro.org>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>

+33 -43
+7 -9
drivers/clk/qcom/gcc-apq8084.c
··· 3607 3607 3608 3608 static int gcc_apq8084_probe(struct platform_device *pdev) 3609 3609 { 3610 - struct clk *clk; 3610 + int ret; 3611 3611 struct device *dev = &pdev->dev; 3612 3612 3613 - /* Temporary until RPM clocks supported */ 3614 - clk = clk_register_fixed_rate(dev, "xo", NULL, CLK_IS_ROOT, 19200000); 3615 - if (IS_ERR(clk)) 3616 - return PTR_ERR(clk); 3613 + ret = qcom_cc_register_board_clk(dev, "xo_board", "xo", 19200000); 3614 + if (ret) 3615 + return ret; 3617 3616 3618 - clk = clk_register_fixed_rate(dev, "sleep_clk_src", NULL, 3619 - CLK_IS_ROOT, 32768); 3620 - if (IS_ERR(clk)) 3621 - return PTR_ERR(clk); 3617 + ret = qcom_cc_register_sleep_clk(dev); 3618 + if (ret) 3619 + return ret; 3622 3620 3623 3621 return qcom_cc_probe(pdev, &gcc_apq8084_desc); 3624 3622 }
+6 -8
drivers/clk/qcom/gcc-ipq806x.c
··· 3023 3023 3024 3024 static int gcc_ipq806x_probe(struct platform_device *pdev) 3025 3025 { 3026 - struct clk *clk; 3027 3026 struct device *dev = &pdev->dev; 3028 3027 struct regmap *regmap; 3029 3028 int ret; 3030 3029 3031 - /* Temporary until RPM clocks supported */ 3032 - clk = clk_register_fixed_rate(dev, "cxo", NULL, CLK_IS_ROOT, 25000000); 3033 - if (IS_ERR(clk)) 3034 - return PTR_ERR(clk); 3030 + ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000); 3031 + if (ret) 3032 + return ret; 3035 3033 3036 - clk = clk_register_fixed_rate(dev, "pxo", NULL, CLK_IS_ROOT, 25000000); 3037 - if (IS_ERR(clk)) 3038 - return PTR_ERR(clk); 3034 + ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000); 3035 + if (ret) 3036 + return ret; 3039 3037 3040 3038 ret = qcom_cc_probe(pdev, &gcc_ipq806x_desc); 3041 3039 if (ret)
+7 -8
drivers/clk/qcom/gcc-msm8660.c
··· 2720 2720 2721 2721 static int gcc_msm8660_probe(struct platform_device *pdev) 2722 2722 { 2723 - struct clk *clk; 2723 + int ret; 2724 2724 struct device *dev = &pdev->dev; 2725 2725 2726 - /* Temporary until RPM clocks supported */ 2727 - clk = clk_register_fixed_rate(dev, "cxo", NULL, CLK_IS_ROOT, 19200000); 2728 - if (IS_ERR(clk)) 2729 - return PTR_ERR(clk); 2726 + ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000); 2727 + if (ret) 2728 + return ret; 2730 2729 2731 - clk = clk_register_fixed_rate(dev, "pxo", NULL, CLK_IS_ROOT, 27000000); 2732 - if (IS_ERR(clk)) 2733 - return PTR_ERR(clk); 2730 + ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000); 2731 + if (ret) 2732 + return ret; 2734 2733 2735 2734 return qcom_cc_probe(pdev, &gcc_msm8660_desc); 2736 2735 }
+6 -8
drivers/clk/qcom/gcc-msm8960.c
··· 3503 3503 3504 3504 static int gcc_msm8960_probe(struct platform_device *pdev) 3505 3505 { 3506 - struct clk *clk; 3507 3506 struct device *dev = &pdev->dev; 3508 3507 const struct of_device_id *match; 3509 3508 struct platform_device *tsens; ··· 3512 3513 if (!match) 3513 3514 return -EINVAL; 3514 3515 3515 - /* Temporary until RPM clocks supported */ 3516 - clk = clk_register_fixed_rate(dev, "cxo", NULL, CLK_IS_ROOT, 19200000); 3517 - if (IS_ERR(clk)) 3518 - return PTR_ERR(clk); 3516 + ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000); 3517 + if (ret) 3518 + return ret; 3519 3519 3520 - clk = clk_register_fixed_rate(dev, "pxo", NULL, CLK_IS_ROOT, 27000000); 3521 - if (IS_ERR(clk)) 3522 - return PTR_ERR(clk); 3520 + ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000); 3521 + if (ret) 3522 + return ret; 3523 3523 3524 3524 ret = qcom_cc_probe(pdev, match->data); 3525 3525 if (ret)
+7 -10
drivers/clk/qcom/gcc-msm8974.c
··· 2717 2717 2718 2718 static int gcc_msm8974_probe(struct platform_device *pdev) 2719 2719 { 2720 - struct clk *clk; 2720 + int ret; 2721 2721 struct device *dev = &pdev->dev; 2722 2722 bool pro; 2723 2723 const struct of_device_id *id; ··· 2730 2730 if (pro) 2731 2731 msm8974_pro_clock_override(); 2732 2732 2733 - /* Temporary until RPM clocks supported */ 2734 - clk = clk_register_fixed_rate(dev, "xo", NULL, CLK_IS_ROOT, 19200000); 2735 - if (IS_ERR(clk)) 2736 - return PTR_ERR(clk); 2733 + ret = qcom_cc_register_board_clk(dev, "xo_board", "xo", 19200000); 2734 + if (ret) 2735 + return ret; 2737 2736 2738 - /* Should move to DT node? */ 2739 - clk = clk_register_fixed_rate(dev, "sleep_clk_src", NULL, 2740 - CLK_IS_ROOT, 32768); 2741 - if (IS_ERR(clk)) 2742 - return PTR_ERR(clk); 2737 + ret = qcom_cc_register_sleep_clk(dev); 2738 + if (ret) 2739 + return ret; 2743 2740 2744 2741 return qcom_cc_probe(pdev, &gcc_msm8974_desc); 2745 2742 }