diff options
author | dissent1 <be.dissent+github@gmail.com> | 2016-11-03 18:07:31 +0300 |
---|---|---|
committer | John Crispin <john@phrozen.org> | 2016-11-16 10:59:30 +0100 |
commit | 07d0c1b947e6bbda527ee47458aa3964359d5644 (patch) | |
tree | 45aa9e06aa6c307e1a9d3db17845ac70d59d8178 /target/linux/ipq806x/patches-4.4/003-mv-cxo-pxo-xo-into-DT.patch | |
parent | 506dc815b9fc6869402c6a0157a1bdf27a89b9a3 (diff) | |
download | upstream-07d0c1b947e6bbda527ee47458aa3964359d5644.tar.gz upstream-07d0c1b947e6bbda527ee47458aa3964359d5644.tar.bz2 upstream-07d0c1b947e6bbda527ee47458aa3964359d5644.zip |
ipq806x: add support for RPM clock controller
The patch #179 for RPM has initially been made for apq806x board. It has been modified to support ipq806x instead of apq8064.
Signed-off-by: Pavel Kubelun <be.dissent@gmail.com>
Diffstat (limited to 'target/linux/ipq806x/patches-4.4/003-mv-cxo-pxo-xo-into-DT.patch')
-rw-r--r-- | target/linux/ipq806x/patches-4.4/003-mv-cxo-pxo-xo-into-DT.patch | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/target/linux/ipq806x/patches-4.4/003-mv-cxo-pxo-xo-into-DT.patch b/target/linux/ipq806x/patches-4.4/003-mv-cxo-pxo-xo-into-DT.patch new file mode 100644 index 0000000000..60505e100b --- /dev/null +++ b/target/linux/ipq806x/patches-4.4/003-mv-cxo-pxo-xo-into-DT.patch @@ -0,0 +1,183 @@ +From a085f877a882b465fce74188c9d8efd12bd5acd4 Mon Sep 17 00:00:00 2001 +From: Stephen Boyd <sboyd@codeaurora.org> +Date: Mon, 26 Oct 2015 18:10:09 -0700 +Subject: 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> +--- + drivers/clk/qcom/gcc-apq8084.c | 16 +++++++--------- + drivers/clk/qcom/gcc-ipq806x.c | 14 ++++++-------- + drivers/clk/qcom/gcc-msm8660.c | 15 +++++++-------- + drivers/clk/qcom/gcc-msm8960.c | 14 ++++++-------- + drivers/clk/qcom/gcc-msm8974.c | 17 +++++++---------- + 5 files changed, 33 insertions(+), 43 deletions(-) + +diff --git a/drivers/clk/qcom/gcc-apq8084.c b/drivers/clk/qcom/gcc-apq8084.c +index 1567c3a..070037a 100644 +--- a/drivers/clk/qcom/gcc-apq8084.c ++++ b/drivers/clk/qcom/gcc-apq8084.c +@@ -3607,18 +3607,16 @@ MODULE_DEVICE_TABLE(of, gcc_apq8084_match_table); + + static int gcc_apq8084_probe(struct platform_device *pdev) + { +- struct clk *clk; ++ int ret; + struct device *dev = &pdev->dev; + +- /* Temporary until RPM clocks supported */ +- clk = clk_register_fixed_rate(dev, "xo", NULL, CLK_IS_ROOT, 19200000); +- if (IS_ERR(clk)) +- return PTR_ERR(clk); ++ ret = qcom_cc_register_board_clk(dev, "xo_board", "xo", 19200000); ++ if (ret) ++ return ret; + +- clk = clk_register_fixed_rate(dev, "sleep_clk_src", NULL, +- CLK_IS_ROOT, 32768); +- if (IS_ERR(clk)) +- return PTR_ERR(clk); ++ ret = qcom_cc_register_sleep_clk(dev); ++ if (ret) ++ return ret; + + return qcom_cc_probe(pdev, &gcc_apq8084_desc); + } +diff --git a/drivers/clk/qcom/gcc-ipq806x.c b/drivers/clk/qcom/gcc-ipq806x.c +index 16fc64c..dd5402b 100644 +--- a/drivers/clk/qcom/gcc-ipq806x.c ++++ b/drivers/clk/qcom/gcc-ipq806x.c +@@ -3023,19 +3023,17 @@ MODULE_DEVICE_TABLE(of, gcc_ipq806x_match_table); + + static int gcc_ipq806x_probe(struct platform_device *pdev) + { +- struct clk *clk; + struct device *dev = &pdev->dev; + struct regmap *regmap; + int ret; + +- /* Temporary until RPM clocks supported */ +- clk = clk_register_fixed_rate(dev, "cxo", NULL, CLK_IS_ROOT, 25000000); +- if (IS_ERR(clk)) +- return PTR_ERR(clk); ++ ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 25000000); ++ if (ret) ++ return ret; + +- clk = clk_register_fixed_rate(dev, "pxo", NULL, CLK_IS_ROOT, 25000000); +- if (IS_ERR(clk)) +- return PTR_ERR(clk); ++ ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 25000000); ++ if (ret) ++ return ret; + + ret = qcom_cc_probe(pdev, &gcc_ipq806x_desc); + if (ret) +diff --git a/drivers/clk/qcom/gcc-msm8660.c b/drivers/clk/qcom/gcc-msm8660.c +index f110bb5..ad41303 100644 +--- a/drivers/clk/qcom/gcc-msm8660.c ++++ b/drivers/clk/qcom/gcc-msm8660.c +@@ -2720,17 +2720,16 @@ MODULE_DEVICE_TABLE(of, gcc_msm8660_match_table); + + static int gcc_msm8660_probe(struct platform_device *pdev) + { +- struct clk *clk; ++ int ret; + struct device *dev = &pdev->dev; + +- /* Temporary until RPM clocks supported */ +- clk = clk_register_fixed_rate(dev, "cxo", NULL, CLK_IS_ROOT, 19200000); +- if (IS_ERR(clk)) +- return PTR_ERR(clk); ++ ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000); ++ if (ret) ++ return ret; + +- clk = clk_register_fixed_rate(dev, "pxo", NULL, CLK_IS_ROOT, 27000000); +- if (IS_ERR(clk)) +- return PTR_ERR(clk); ++ ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000); ++ if (ret) ++ return ret; + + return qcom_cc_probe(pdev, &gcc_msm8660_desc); + } +diff --git a/drivers/clk/qcom/gcc-msm8960.c b/drivers/clk/qcom/gcc-msm8960.c +index 66c18bc..983dd7d 100644 +--- a/drivers/clk/qcom/gcc-msm8960.c ++++ b/drivers/clk/qcom/gcc-msm8960.c +@@ -3503,7 +3503,6 @@ MODULE_DEVICE_TABLE(of, gcc_msm8960_match_table); + + static int gcc_msm8960_probe(struct platform_device *pdev) + { +- struct clk *clk; + struct device *dev = &pdev->dev; + const struct of_device_id *match; + struct platform_device *tsens; +@@ -3513,14 +3512,13 @@ static int gcc_msm8960_probe(struct platform_device *pdev) + if (!match) + return -EINVAL; + +- /* Temporary until RPM clocks supported */ +- clk = clk_register_fixed_rate(dev, "cxo", NULL, CLK_IS_ROOT, 19200000); +- if (IS_ERR(clk)) +- return PTR_ERR(clk); ++ ret = qcom_cc_register_board_clk(dev, "cxo_board", "cxo", 19200000); ++ if (ret) ++ return ret; + +- clk = clk_register_fixed_rate(dev, "pxo", NULL, CLK_IS_ROOT, 27000000); +- if (IS_ERR(clk)) +- return PTR_ERR(clk); ++ ret = qcom_cc_register_board_clk(dev, "pxo_board", "pxo", 27000000); ++ if (ret) ++ return ret; + + ret = qcom_cc_probe(pdev, match->data); + if (ret) +diff --git a/drivers/clk/qcom/gcc-msm8974.c b/drivers/clk/qcom/gcc-msm8974.c +index 28abb8f..335952d 100644 +--- a/drivers/clk/qcom/gcc-msm8974.c ++++ b/drivers/clk/qcom/gcc-msm8974.c +@@ -2717,7 +2717,7 @@ static void msm8974_pro_clock_override(void) + + static int gcc_msm8974_probe(struct platform_device *pdev) + { +- struct clk *clk; ++ int ret; + struct device *dev = &pdev->dev; + bool pro; + const struct of_device_id *id; +@@ -2730,16 +2730,13 @@ static int gcc_msm8974_probe(struct platform_device *pdev) + if (pro) + msm8974_pro_clock_override(); + +- /* Temporary until RPM clocks supported */ +- clk = clk_register_fixed_rate(dev, "xo", NULL, CLK_IS_ROOT, 19200000); +- if (IS_ERR(clk)) +- return PTR_ERR(clk); ++ ret = qcom_cc_register_board_clk(dev, "xo_board", "xo", 19200000); ++ if (ret) ++ return ret; + +- /* Should move to DT node? */ +- clk = clk_register_fixed_rate(dev, "sleep_clk_src", NULL, +- CLK_IS_ROOT, 32768); +- if (IS_ERR(clk)) +- return PTR_ERR(clk); ++ ret = qcom_cc_register_sleep_clk(dev); ++ if (ret) ++ return ret; + + return qcom_cc_probe(pdev, &gcc_msm8974_desc); + } +-- +cgit v0.12 |