aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Boyd <sboyd@codeaurora.org>2016-04-20 14:44:03 -0400
committerStephen Boyd <sboyd@codeaurora.org>2016-04-20 14:44:03 -0400
commitbb4399b8a5d7d9a8bf9d28b1e78badff1b0e5a5e (patch)
treee9cf480400d3520a71dee0374f49f39901549f2d
parent0f05db651dc50c2a6f45794de2567fbf64a4df75 (diff)
parent2066390ad47b374f3d35075a32325b47d15bf735 (diff)
Merge tag 'clk-renesas-for-v4.7-tag2' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers into clk-next
clk: renesas: R-Car SYSC PM Domain Preparation - Export the CPG/MSSR and CPG/MSTP attach/detach_dev callbacks, so they can be called by the R-Car SYSC PM Domain driver. * tag 'clk-renesas-for-v4.7-tag2' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers: clk: renesas: cpg-mssr: Export cpg_mssr_{at,de}tach_dev() clk: renesas: mstp: Provide dummy attach/detach_dev callbacks clk: renesas: Provide Kconfig symbols for CPG/MSSR and CPG/MSTP support
-rw-r--r--drivers/clk/Kconfig1
-rw-r--r--drivers/clk/renesas/Kconfig16
-rw-r--r--drivers/clk/renesas/Makefile26
-rw-r--r--drivers/clk/renesas/renesas-cpg-mssr.c18
-rw-r--r--include/linux/clk/renesas.h12
5 files changed, 55 insertions, 18 deletions
diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig
index 16f7d33421d8..c45554957499 100644
--- a/drivers/clk/Kconfig
+++ b/drivers/clk/Kconfig
@@ -201,6 +201,7 @@ source "drivers/clk/bcm/Kconfig"
201source "drivers/clk/hisilicon/Kconfig" 201source "drivers/clk/hisilicon/Kconfig"
202source "drivers/clk/mvebu/Kconfig" 202source "drivers/clk/mvebu/Kconfig"
203source "drivers/clk/qcom/Kconfig" 203source "drivers/clk/qcom/Kconfig"
204source "drivers/clk/renesas/Kconfig"
204source "drivers/clk/samsung/Kconfig" 205source "drivers/clk/samsung/Kconfig"
205source "drivers/clk/tegra/Kconfig" 206source "drivers/clk/tegra/Kconfig"
206source "drivers/clk/ti/Kconfig" 207source "drivers/clk/ti/Kconfig"
diff --git a/drivers/clk/renesas/Kconfig b/drivers/clk/renesas/Kconfig
new file mode 100644
index 000000000000..2115ce410cfb
--- /dev/null
+++ b/drivers/clk/renesas/Kconfig
@@ -0,0 +1,16 @@
1config CLK_RENESAS_CPG_MSSR
2 bool
3 default y if ARCH_R8A7795
4
5config CLK_RENESAS_CPG_MSTP
6 bool
7 default y if ARCH_R7S72100
8 default y if ARCH_R8A73A4
9 default y if ARCH_R8A7740
10 default y if ARCH_R8A7778
11 default y if ARCH_R8A7779
12 default y if ARCH_R8A7790
13 default y if ARCH_R8A7791
14 default y if ARCH_R8A7793
15 default y if ARCH_R8A7794
16 default y if ARCH_SH73A0
diff --git a/drivers/clk/renesas/Makefile b/drivers/clk/renesas/Makefile
index 7e2579b30326..ead8bb843524 100644
--- a/drivers/clk/renesas/Makefile
+++ b/drivers/clk/renesas/Makefile
@@ -1,13 +1,15 @@
1obj-$(CONFIG_ARCH_EMEV2) += clk-emev2.o 1obj-$(CONFIG_ARCH_EMEV2) += clk-emev2.o
2obj-$(CONFIG_ARCH_R7S72100) += clk-rz.o clk-mstp.o 2obj-$(CONFIG_ARCH_R7S72100) += clk-rz.o
3obj-$(CONFIG_ARCH_R8A73A4) += clk-r8a73a4.o clk-mstp.o clk-div6.o 3obj-$(CONFIG_ARCH_R8A73A4) += clk-r8a73a4.o clk-div6.o
4obj-$(CONFIG_ARCH_R8A7740) += clk-r8a7740.o clk-mstp.o clk-div6.o 4obj-$(CONFIG_ARCH_R8A7740) += clk-r8a7740.o clk-div6.o
5obj-$(CONFIG_ARCH_R8A7778) += clk-r8a7778.o clk-mstp.o 5obj-$(CONFIG_ARCH_R8A7778) += clk-r8a7778.o
6obj-$(CONFIG_ARCH_R8A7779) += clk-r8a7779.o clk-mstp.o 6obj-$(CONFIG_ARCH_R8A7779) += clk-r8a7779.o
7obj-$(CONFIG_ARCH_R8A7790) += clk-rcar-gen2.o clk-mstp.o clk-div6.o 7obj-$(CONFIG_ARCH_R8A7790) += clk-rcar-gen2.o clk-div6.o
8obj-$(CONFIG_ARCH_R8A7791) += clk-rcar-gen2.o clk-mstp.o clk-div6.o 8obj-$(CONFIG_ARCH_R8A7791) += clk-rcar-gen2.o clk-div6.o
9obj-$(CONFIG_ARCH_R8A7793) += clk-rcar-gen2.o clk-mstp.o clk-div6.o 9obj-$(CONFIG_ARCH_R8A7793) += clk-rcar-gen2.o clk-div6.o
10obj-$(CONFIG_ARCH_R8A7794) += clk-rcar-gen2.o clk-mstp.o clk-div6.o 10obj-$(CONFIG_ARCH_R8A7794) += clk-rcar-gen2.o clk-div6.o
11obj-$(CONFIG_ARCH_R8A7795) += renesas-cpg-mssr.o \ 11obj-$(CONFIG_ARCH_R8A7795) += r8a7795-cpg-mssr.o
12 r8a7795-cpg-mssr.o clk-div6.o 12obj-$(CONFIG_ARCH_SH73A0) += clk-sh73a0.o clk-div6.o
13obj-$(CONFIG_ARCH_SH73A0) += clk-sh73a0.o clk-mstp.o clk-div6.o 13
14obj-$(CONFIG_CLK_RENESAS_CPG_MSSR) += renesas-cpg-mssr.o clk-div6.o
15obj-$(CONFIG_CLK_RENESAS_CPG_MSTP) += clk-mstp.o
diff --git a/drivers/clk/renesas/renesas-cpg-mssr.c b/drivers/clk/renesas/renesas-cpg-mssr.c
index 703bdb157528..1f2dc3629f0e 100644
--- a/drivers/clk/renesas/renesas-cpg-mssr.c
+++ b/drivers/clk/renesas/renesas-cpg-mssr.c
@@ -15,6 +15,7 @@
15 15
16#include <linux/clk.h> 16#include <linux/clk.h>
17#include <linux/clk-provider.h> 17#include <linux/clk-provider.h>
18#include <linux/clk/renesas.h>
18#include <linux/device.h> 19#include <linux/device.h>
19#include <linux/init.h> 20#include <linux/init.h>
20#include <linux/mod_devicetable.h> 21#include <linux/mod_devicetable.h>
@@ -388,6 +389,8 @@ struct cpg_mssr_clk_domain {
388 unsigned int core_pm_clks[0]; 389 unsigned int core_pm_clks[0];
389}; 390};
390 391
392static struct cpg_mssr_clk_domain *cpg_mssr_clk_domain;
393
391static bool cpg_mssr_is_pm_clk(const struct of_phandle_args *clkspec, 394static bool cpg_mssr_is_pm_clk(const struct of_phandle_args *clkspec,
392 struct cpg_mssr_clk_domain *pd) 395 struct cpg_mssr_clk_domain *pd)
393{ 396{
@@ -411,17 +414,20 @@ static bool cpg_mssr_is_pm_clk(const struct of_phandle_args *clkspec,
411 } 414 }
412} 415}
413 416
414static int cpg_mssr_attach_dev(struct generic_pm_domain *genpd, 417int cpg_mssr_attach_dev(struct generic_pm_domain *unused, struct device *dev)
415 struct device *dev)
416{ 418{
417 struct cpg_mssr_clk_domain *pd = 419 struct cpg_mssr_clk_domain *pd = cpg_mssr_clk_domain;
418 container_of(genpd, struct cpg_mssr_clk_domain, genpd);
419 struct device_node *np = dev->of_node; 420 struct device_node *np = dev->of_node;
420 struct of_phandle_args clkspec; 421 struct of_phandle_args clkspec;
421 struct clk *clk; 422 struct clk *clk;
422 int i = 0; 423 int i = 0;
423 int error; 424 int error;
424 425
426 if (!pd) {
427 dev_dbg(dev, "CPG/MSSR clock domain not yet available\n");
428 return -EPROBE_DEFER;
429 }
430
425 while (!of_parse_phandle_with_args(np, "clocks", "#clock-cells", i, 431 while (!of_parse_phandle_with_args(np, "clocks", "#clock-cells", i,
426 &clkspec)) { 432 &clkspec)) {
427 if (cpg_mssr_is_pm_clk(&clkspec, pd)) 433 if (cpg_mssr_is_pm_clk(&clkspec, pd))
@@ -461,8 +467,7 @@ fail_put:
461 return error; 467 return error;
462} 468}
463 469
464static void cpg_mssr_detach_dev(struct generic_pm_domain *genpd, 470void cpg_mssr_detach_dev(struct generic_pm_domain *unused, struct device *dev)
465 struct device *dev)
466{ 471{
467 if (!list_empty(&dev->power.subsys_data->clock_list)) 472 if (!list_empty(&dev->power.subsys_data->clock_list))
468 pm_clk_destroy(dev); 473 pm_clk_destroy(dev);
@@ -491,6 +496,7 @@ static int __init cpg_mssr_add_clk_domain(struct device *dev,
491 pm_genpd_init(genpd, &simple_qos_governor, false); 496 pm_genpd_init(genpd, &simple_qos_governor, false);
492 genpd->attach_dev = cpg_mssr_attach_dev; 497 genpd->attach_dev = cpg_mssr_attach_dev;
493 genpd->detach_dev = cpg_mssr_detach_dev; 498 genpd->detach_dev = cpg_mssr_detach_dev;
499 cpg_mssr_clk_domain = pd;
494 500
495 of_genpd_add_provider_simple(np, genpd); 501 of_genpd_add_provider_simple(np, genpd);
496 return 0; 502 return 0;
diff --git a/include/linux/clk/renesas.h b/include/linux/clk/renesas.h
index 095b1681daf4..ba6fa4148515 100644
--- a/include/linux/clk/renesas.h
+++ b/include/linux/clk/renesas.h
@@ -25,7 +25,19 @@ void r8a7779_clocks_init(u32 mode);
25void rcar_gen2_clocks_init(u32 mode); 25void rcar_gen2_clocks_init(u32 mode);
26 26
27void cpg_mstp_add_clk_domain(struct device_node *np); 27void cpg_mstp_add_clk_domain(struct device_node *np);
28#ifdef CONFIG_CLK_RENESAS_CPG_MSTP
28int cpg_mstp_attach_dev(struct generic_pm_domain *unused, struct device *dev); 29int cpg_mstp_attach_dev(struct generic_pm_domain *unused, struct device *dev);
29void cpg_mstp_detach_dev(struct generic_pm_domain *unused, struct device *dev); 30void cpg_mstp_detach_dev(struct generic_pm_domain *unused, struct device *dev);
31#else
32#define cpg_mstp_attach_dev NULL
33#define cpg_mstp_detach_dev NULL
34#endif
30 35
36#ifdef CONFIG_CLK_RENESAS_CPG_MSSR
37int cpg_mssr_attach_dev(struct generic_pm_domain *unused, struct device *dev);
38void cpg_mssr_detach_dev(struct generic_pm_domain *unused, struct device *dev);
39#else
40#define cpg_mssr_attach_dev NULL
41#define cpg_mssr_detach_dev NULL
42#endif
31#endif 43#endif