All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/6] clk: exynos-audss: convert to platform device
@ 2013-09-20 21:13 ` Andrew Bresticker
  0 siblings, 0 replies; 122+ messages in thread
From: Andrew Bresticker @ 2013-09-20 21:13 UTC (permalink / raw)
  To: linux-samsung-soc
  Cc: Rob Herring, Pawel Moll, Mark Rutland, Stephen Warren,
	Ian Campbell, Rob Landley, Kukjin Kim, Russell King,
	Mike Turquette, Grant Likely, Sachin Kamat, Jiri Kosina,
	Rahul Sharma, Leela Krishna Amudala, Stephen Boyd, Tomasz Figa,
	Tushar Behera, Yadwinder Singh Brar, Doug Anderson,
	Padmavathi Venna, devicetree, linux-doc, linux-arm-kernel,
	linux-kernel, Andrew Bresticker

The Exynos AudioSS clock controller will later be modified to allow
input clocks to be specified via device-tree in order to support
multiple Exynos SoCs.  This will introduce a dependency on the core
SoC clock controller being initialized first so that the AudioSS driver
can look up its input clocks, but the order in which clock providers
are probed in of_clk_init() is not guaranteed.  Since deferred probing
is not supported in of_clk_init() and the AudioSS block is not the core
controller, we can initialize it later as a platform device.

Signed-off-by: Andrew Bresticker <abrestic@chromium.org>
---
 drivers/clk/samsung/clk-exynos-audss.c | 71 +++++++++++++++++++++++++++-------
 1 file changed, 58 insertions(+), 13 deletions(-)

diff --git a/drivers/clk/samsung/clk-exynos-audss.c b/drivers/clk/samsung/clk-exynos-audss.c
index 39b40aa..7571e88 100644
--- a/drivers/clk/samsung/clk-exynos-audss.c
+++ b/drivers/clk/samsung/clk-exynos-audss.c
@@ -14,6 +14,8 @@
 #include <linux/clk-provider.h>
 #include <linux/of_address.h>
 #include <linux/syscore_ops.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
 
 #include <dt-bindings/clk/exynos-audss-clk.h>
 
@@ -62,24 +64,29 @@ static struct syscore_ops exynos_audss_clk_syscore_ops = {
 #endif /* CONFIG_PM_SLEEP */
 
 /* register exynos_audss clocks */
-static void __init exynos_audss_clk_init(struct device_node *np)
+static int exynos_audss_clk_probe(struct platform_device *pdev)
 {
-	reg_base = of_iomap(np, 0);
-	if (!reg_base) {
-		pr_err("%s: failed to map audss registers\n", __func__);
-		return;
+	struct resource *res;
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	reg_base = devm_ioremap_resource(&pdev->dev, res);
+	if (IS_ERR(reg_base)) {
+		dev_err(&pdev->dev, "failed to map audss registers\n");
+		return PTR_ERR(reg_base);
 	}
 
-	clk_table = kzalloc(sizeof(struct clk *) * EXYNOS_AUDSS_MAX_CLKS,
+	clk_table = devm_kzalloc(&pdev->dev,
+				sizeof(struct clk *) * EXYNOS_AUDSS_MAX_CLKS,
 				GFP_KERNEL);
 	if (!clk_table) {
-		pr_err("%s: could not allocate clk lookup table\n", __func__);
-		return;
+		dev_err(&pdev->dev, "could not allocate clk lookup table\n");
+		return -ENOMEM;
 	}
 
 	clk_data.clks = clk_table;
 	clk_data.clk_num = EXYNOS_AUDSS_MAX_CLKS;
-	of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
+	of_clk_add_provider(pdev->dev.of_node, of_clk_src_onecell_get,
+				&clk_data);
 
 	clk_table[EXYNOS_MOUT_AUDSS] = clk_register_mux(NULL, "mout_audss",
 				mout_audss_p, ARRAY_SIZE(mout_audss_p),
@@ -128,8 +135,46 @@ static void __init exynos_audss_clk_init(struct device_node *np)
 #endif
 
 	pr_info("Exynos: Audss: clock setup completed\n");
+
+	return 0;
+}
+
+static int exynos_audss_clk_remove(struct platform_device *pdev)
+{
+	of_clk_del_provider(pdev->dev.of_node);
+
+	return 0;
 }
-CLK_OF_DECLARE(exynos4210_audss_clk, "samsung,exynos4210-audss-clock",
-		exynos_audss_clk_init);
-CLK_OF_DECLARE(exynos5250_audss_clk, "samsung,exynos5250-audss-clock",
-		exynos_audss_clk_init);
+
+static const struct of_device_id exynos_audss_clk_of_match[] = {
+	{ .compatible = "samsung,exynos4210-audss-clock", },
+	{ .compatible = "samsung,exynos5250-audss-clock", },
+	{},
+};
+
+static struct platform_driver exynos_audss_clk_driver = {
+	.driver	= {
+		.name = "exynos-audss-clk",
+		.owner = THIS_MODULE,
+		.of_match_table = exynos_audss_clk_of_match,
+	},
+	.probe = exynos_audss_clk_probe,
+	.remove = exynos_audss_clk_remove,
+};
+
+static int __init exynos_audss_clk_init(void)
+{
+	return platform_driver_register(&exynos_audss_clk_driver);
+}
+core_initcall(exynos_audss_clk_init);
+
+static void __init exynos_audss_clk_exit(void)
+{
+	platform_driver_unregister(&exynos_audss_clk_driver);
+}
+module_exit(exynos_audss_clk_exit);
+
+MODULE_AUTHOR("Padmavathi Venna <padma.v@samsung.com>");
+MODULE_DESCRIPTION("Exynos AudioSS Clock Controller");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:exynos-audss-clk");
-- 
1.8.4


^ permalink raw reply related	[flat|nested] 122+ messages in thread

end of thread, other threads:[~2014-01-04  2:47 UTC | newest]

Thread overview: 122+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-09-20 21:13 [PATCH 1/6] clk: exynos-audss: convert to platform device Andrew Bresticker
2013-09-20 21:13 ` Andrew Bresticker
2013-09-20 21:13 ` Andrew Bresticker
2013-09-20 21:13 ` [PATCH 2/6] clk: exynos-audss: allow input clocks to be specified in device tree Andrew Bresticker
2013-09-20 21:13   ` Andrew Bresticker
2013-09-20 21:13   ` Andrew Bresticker
2013-09-21 15:12   ` Tomasz Figa
2013-09-21 15:12     ` Tomasz Figa
2013-09-21 15:12     ` Tomasz Figa
2013-09-20 21:13 ` [PATCH 3/6] clk: exynos5250: add clock ID for div_pcm0 Andrew Bresticker
2013-09-20 21:13   ` Andrew Bresticker
2013-09-20 21:13   ` Andrew Bresticker
2013-09-21 15:19   ` Tomasz Figa
2013-09-21 15:19     ` Tomasz Figa
2013-09-21 15:19     ` Tomasz Figa
2013-09-20 21:13 ` [PATCH 4/6] ARM: dts: exynos5250: add sclk_pcm_in to audss clock controller Andrew Bresticker
2013-09-20 21:13   ` Andrew Bresticker
2013-09-20 21:13   ` Andrew Bresticker
2013-09-21 15:13   ` Tomasz Figa
2013-09-21 15:13     ` Tomasz Figa
2013-09-21 15:13     ` Tomasz Figa
2013-09-20 21:13 ` [PATCH 5/6] clk: exynos-audss: add support for Exynos 5420 Andrew Bresticker
2013-09-20 21:13   ` Andrew Bresticker
2013-09-20 21:13   ` Andrew Bresticker
2013-09-21 15:17   ` Tomasz Figa
2013-09-21 15:17     ` Tomasz Figa
2013-09-21 15:17     ` Tomasz Figa
2013-09-20 21:13 ` [PATCH 6/6] ARM: dts: exynos5420: add sclk_pcm_in to audss clock controller Andrew Bresticker
2013-09-20 21:13   ` Andrew Bresticker
2013-09-20 21:13   ` Andrew Bresticker
2013-09-21 15:18   ` Tomasz Figa
2013-09-21 15:18     ` Tomasz Figa
2013-09-21 15:18     ` Tomasz Figa
2013-09-21 12:50 ` [PATCH 1/6] clk: exynos-audss: convert to platform device Tomasz Figa
2013-09-21 12:50   ` Tomasz Figa
2013-09-21 12:50   ` Tomasz Figa
2013-09-23 21:25   ` Andrew Bresticker
2013-09-23 21:25     ` Andrew Bresticker
2013-09-23 21:30     ` Tomasz Figa
2013-09-23 21:30       ` Tomasz Figa
2013-09-23 21:36       ` Andrew Bresticker
2013-09-23 21:36         ` Andrew Bresticker
2013-09-23 22:50     ` Sylwester Nawrocki
2013-09-23 22:50       ` Sylwester Nawrocki
2013-09-23 22:50       ` Sylwester Nawrocki
2013-09-24  0:21 ` [PATCH V2 " Andrew Bresticker
2013-09-24  0:21   ` Andrew Bresticker
2013-09-24  0:21   ` [PATCH V2 2/6] clk: exynos-audss: allow input clocks to be specified in device tree Andrew Bresticker
2013-09-24  0:21     ` Andrew Bresticker
2013-09-24  0:21   ` [PATCH V2 3/6] clk: exynos5250: add clock ID for div_pcm0 Andrew Bresticker
2013-09-24  0:21     ` Andrew Bresticker
2013-09-24  0:21   ` [PATCH V2 4/6] ARM: dts: exynos5250: add input clocks to audss clock controller Andrew Bresticker
2013-09-24  0:21     ` Andrew Bresticker
2013-09-24  0:21   ` [PATCH V2 5/6] clk: exynos-audss: add support for Exynos 5420 Andrew Bresticker
2013-09-24  0:21     ` Andrew Bresticker
2013-09-24  0:21     ` Andrew Bresticker
2013-09-24  0:21   ` [PATCH V2 6/6] ARM: dts: exynos5420: add input clocks to audss clock controller Andrew Bresticker
2013-09-24  0:21     ` Andrew Bresticker
2013-09-24  9:20   ` [PATCH V2 1/6] clk: exynos-audss: convert to platform device Tomasz Figa
2013-09-24  9:20     ` Tomasz Figa
2013-09-24  9:20     ` Tomasz Figa
2013-09-24  9:47     ` Sylwester Nawrocki
2013-09-24  9:47       ` Sylwester Nawrocki
2013-09-24  9:35   ` Sylwester Nawrocki
2013-09-24  9:35     ` Sylwester Nawrocki
2013-09-24  9:35     ` Sylwester Nawrocki
2013-09-24 18:06   ` [PATCH V3 " Andrew Bresticker
2013-09-24 18:06     ` Andrew Bresticker
2013-09-24 18:06     ` [PATCH V3 2/6] clk: exynos-audss: allow input clocks to be specified in device tree Andrew Bresticker
2013-09-24 18:06       ` Andrew Bresticker
2013-09-24 18:06       ` Andrew Bresticker
2013-09-24 18:06     ` [PATCH V3 3/6] clk: exynos5250: add clock ID for div_pcm0 Andrew Bresticker
2013-09-24 18:06       ` Andrew Bresticker
2013-09-24 18:06       ` Andrew Bresticker
2013-09-24 18:06     ` [PATCH V3 4/6] ARM: dts: exynos5250: add input clocks to audss clock controller Andrew Bresticker
2013-09-24 18:06       ` Andrew Bresticker
2013-09-24 18:06     ` [PATCH V3 5/6] clk: exynos-audss: add support for Exynos 5420 Andrew Bresticker
2013-09-24 18:06       ` Andrew Bresticker
2013-09-24 18:06     ` [PATCH V3 6/6] ARM: dts: exynos5420: add input clocks to audss clock controller Andrew Bresticker
2013-09-24 18:06       ` Andrew Bresticker
2013-09-24 18:06       ` Andrew Bresticker
2013-09-24 19:17     ` [PATCH V3 1/6] clk: exynos-audss: convert to platform device Tomasz Figa
2013-09-24 19:17       ` Tomasz Figa
2013-09-24 19:17       ` Tomasz Figa
2013-09-24 21:15     ` Sylwester Nawrocki
2013-09-24 21:15       ` Sylwester Nawrocki
2013-09-24 21:15       ` Sylwester Nawrocki
2013-09-24 22:12       ` Andrew Bresticker
2013-09-24 22:12         ` Andrew Bresticker
2013-09-24 22:12         ` Andrew Bresticker
     [not found]         ` <CAL1qeaEpu=YRasZpSvrCTNwC6OGWZgECjwDSFgkAN07eWObmrg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-09-24 22:31           ` Sylwester Nawrocki
2013-09-24 22:16     ` Stephen Boyd
2013-09-24 22:16       ` Stephen Boyd
2013-09-24 22:16       ` Stephen Boyd
2013-09-25 21:12     ` [PATCH V4 " Andrew Bresticker
2013-09-25 21:12       ` Andrew Bresticker
2013-09-25 21:12       ` [PATCH V4 2/6] clk: exynos-audss: allow input clocks to be specified in device tree Andrew Bresticker
2013-09-25 21:12         ` Andrew Bresticker
2013-09-25 21:12       ` [PATCH V4 3/6] clk: exynos5250: add clock ID for div_pcm0 Andrew Bresticker
2013-09-25 21:12         ` Andrew Bresticker
2013-09-25 21:12       ` [PATCH V4 4/6] ARM: dts: exynos5250: add input clocks to audss clock controller Andrew Bresticker
2013-09-25 21:12         ` Andrew Bresticker
2013-09-25 21:12       ` [PATCH V4 5/6] clk: exynos-audss: add support for Exynos 5420 Andrew Bresticker
2013-09-25 21:12         ` Andrew Bresticker
2013-09-25 21:12       ` [PATCH V4 6/6] ARM: dts: exynos5420: add input clocks to audss clock controller Andrew Bresticker
2013-09-25 21:12         ` Andrew Bresticker
2013-10-08 16:53       ` [PATCH V4 1/6] clk: exynos-audss: convert to platform device Andrew Bresticker
2013-10-08 16:53         ` Andrew Bresticker
2013-10-08 16:53         ` Andrew Bresticker
2013-11-26  6:29         ` Padma Venkat
2013-11-26  6:29           ` Padma Venkat
2013-11-27 18:41           ` Mike Turquette
2013-11-27 18:41             ` Mike Turquette
2013-12-01 22:43             ` Kukjin Kim
2013-12-01 22:43               ` Kukjin Kim
2014-01-02 15:20               ` Tomasz Figa
2014-01-02 15:20                 ` Tomasz Figa
2014-01-04  2:47                 ` kgene
2014-01-04  2:47                   ` kgene at kernel.org
2013-11-27 18:40       ` Mike Turquette
2013-11-27 18:40         ` Mike Turquette
2013-11-27 18:40         ` Mike Turquette

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.