aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ipq806x/patches-4.4/003-mv-cxo-pxo-xo-into-DT.patch
diff options
context:
space:
mode:
authordissent1 <be.dissent+github@gmail.com>2016-11-03 18:07:31 +0300
committerJohn Crispin <john@phrozen.org>2016-11-16 10:59:30 +0100
commit07d0c1b947e6bbda527ee47458aa3964359d5644 (patch)
tree45aa9e06aa6c307e1a9d3db17845ac70d59d8178 /target/linux/ipq806x/patches-4.4/003-mv-cxo-pxo-xo-into-DT.patch
parent506dc815b9fc6869402c6a0157a1bdf27a89b9a3 (diff)
downloadupstream-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.patch183
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