]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ARM: msm: Make proc_comm clock control into a platform driver
authorStephen Boyd <sboyd@codeaurora.org>
Tue, 4 Jun 2013 19:25:37 +0000 (12:25 -0700)
committerDavid Brown <davidb@codeaurora.org>
Wed, 12 Jun 2013 21:43:31 +0000 (14:43 -0700)
To move closer to the generic struct clock framework move the
proc_comm based clock code to a platform driver. The data
describing the struct clks still live in the devices-$ARCH file,
but the clock initialization is done at driver binding time.

Cc: Saravana Kannan <skannan@codeaurora.org>
Reviewed-by: Pankaj Jangra <jangra.pankaj9@gmail.com>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: David Brown <davidb@codeaurora.org>
13 files changed:
arch/arm/mach-msm/board-halibut.c
arch/arm/mach-msm/board-msm7x30.c
arch/arm/mach-msm/board-qsd8x50.c
arch/arm/mach-msm/board-trout.c
arch/arm/mach-msm/clock-pcom.c
arch/arm/mach-msm/clock-pcom.h
arch/arm/mach-msm/clock.c
arch/arm/mach-msm/clock.h
arch/arm/mach-msm/devices-msm7x00.c
arch/arm/mach-msm/devices-msm7x30.c
arch/arm/mach-msm/devices-qsd8x50.c
arch/arm/mach-msm/devices.h
arch/arm/mach-msm/include/mach/board.h

index 82eaf88d20266381778b3f4e520bce276c47e212..803651ad4f62956e1850447534deafe2c837e0de 100644 (file)
@@ -59,6 +59,7 @@ static struct platform_device smc91x_device = {
 };
 
 static struct platform_device *devices[] __initdata = {
+       &msm_clock_7x01a,
        &msm_device_gpio_7201,
        &msm_device_uart3,
        &msm_device_smd,
@@ -91,7 +92,6 @@ static void __init halibut_fixup(struct tag *tags, char **cmdline,
 static void __init halibut_map_io(void)
 {
        msm_map_common_io();
-       msm_clock_init(msm_clocks_7x01a, msm_num_clocks_7x01a);
 }
 
 static void __init halibut_init_late(void)
index 520c141acd0379f8dc2d9e740d70df2f860998d0..db3d8c0bc8a4315411c94a205c7f51265ec35d81 100644 (file)
@@ -89,6 +89,7 @@ struct msm_gpiomux_config msm_gpiomux_configs[GPIOMUX_NGPIOS] = {
 };
 
 static struct platform_device *devices[] __initdata = {
+       &msm_clock_7x30,
        &msm_device_gpio_7x30,
 #if defined(CONFIG_SERIAL_MSM) || defined(CONFIG_MSM_SERIAL_DEBUGGER)
         &msm_device_uart2,
@@ -116,7 +117,6 @@ static void __init msm7x30_init(void)
 static void __init msm7x30_map_io(void)
 {
        msm_map_msm7x30_io();
-       msm_clock_init(msm_clocks_7x30, msm_num_clocks_7x30);
 }
 
 static void __init msm7x30_init_late(void)
index 38a532d6937cc9f5186b62ead4f1b0822ae32e44..f14a73d86bc06e21243c268d87c5adfa230073dc 100644 (file)
@@ -89,6 +89,7 @@ static struct msm_otg_platform_data msm_otg_pdata = {
 };
 
 static struct platform_device *devices[] __initdata = {
+       &msm_clock_8x50,
        &msm_device_gpio_8x50,
        &msm_device_uart3,
        &msm_device_smd,
@@ -172,7 +173,6 @@ static void __init qsd8x50_init_mmc(void)
 static void __init qsd8x50_map_io(void)
 {
        msm_map_qsd8x50_io();
-       msm_clock_init(msm_clocks_8x50, msm_num_clocks_8x50);
 }
 
 static void __init qsd8x50_init_irq(void)
index 80fe1c5ff5c13413986d35bed3381ef62f2bdf9c..64a46eb4fc494cebf38bbc9a33427e57ff820cba 100644 (file)
@@ -36,6 +36,7 @@
 extern int trout_init_mmc(unsigned int);
 
 static struct platform_device *devices[] __initdata = {
+       &msm_clock_7x01a,
        &msm_device_gpio_7201,
        &msm_device_uart3,
        &msm_device_smd,
@@ -94,8 +95,6 @@ static void __init trout_map_io(void)
        /* route UART3 to the "H2W" extended usb connector */
        writeb(0x80, TROUT_CPLD_BASE + 0x00);
 #endif
-
-       msm_clock_init(msm_clocks_7x01a, msm_num_clocks_7x01a);
 }
 
 static void __init trout_init_late(void)
index bb75f8e75ce22c3c586ebaf7c44d794cff379290..632173186a6950a28949e6fad9d2478bc40e5f9b 100644 (file)
@@ -14,8 +14,9 @@
  */
 
 #include <linux/err.h>
-#include <linux/ctype.h>
-#include <linux/stddef.h>
+#include <linux/platform_device.h>
+#include <linux/module.h>
+
 #include <mach/clk.h>
 
 #include "proc_comm.h"
@@ -126,3 +127,21 @@ struct clk_ops clk_ops_pcom = {
        .round_rate = pc_clk_round_rate,
        .is_local = pc_clk_is_local,
 };
+
+static int msm_clock_pcom_probe(struct platform_device *pdev)
+{
+       const struct pcom_clk_pdata *pdata = pdev->dev.platform_data;
+       msm_clock_init(pdata->lookup, pdata->num_lookups);
+       return 0;
+}
+
+static struct platform_driver msm_clock_pcom_driver = {
+       .probe          = msm_clock_pcom_probe,
+       .driver         = {
+               .name   = "msm-clock-pcom",
+               .owner  = THIS_MODULE,
+       },
+};
+module_platform_driver(msm_clock_pcom_driver);
+
+MODULE_LICENSE("GPL v2");
index 974d0032f3a3632d736ded9ef168b431d8491001..87406a373d2bdc2a13ec8205f8a91eeb435a6ec4 100644 (file)
 struct clk_ops;
 extern struct clk_ops clk_ops_pcom;
 
+struct pcom_clk_pdata {
+       struct clk_lookup *lookup;
+       u32 num_lookups;
+};
+
 int pc_clk_reset(unsigned id, enum clk_reset_action action);
 
 #define CLK_PCOM(clk_name, clk_id, clk_dev, clk_flags) {       \
index 8d07b256d8eaae5eb1ee506cef36efbfa5d772ec..d72dd3770298ea5dfb0da525c96cf344328739b0 100644 (file)
@@ -116,7 +116,7 @@ EXPORT_SYMBOL(clk_get_parent);
  */
 static struct clk *ebi1_clk;
 
-void __init msm_clock_init(struct clk_lookup *clock_tbl, unsigned num_clocks)
+void msm_clock_init(struct clk_lookup *clock_tbl, size_t num_clocks)
 {
        unsigned n;
 
index a25ff58c2f3fa774fd8d1395f2ae1c99a0114161..cc76bfe9ba462040a2e6ed269a7a4d2d167cc868 100644 (file)
@@ -63,4 +63,7 @@ static inline int __init clock_debug_init(void) { return 0; }
 static inline int __init clock_debug_add(struct clk *clock) { return 0; }
 #endif
 
+struct clk_lookup;
+void msm_clock_init(struct clk_lookup *clock_tbl, size_t num_clocks);
+
 #endif
index 1a0a2306b115567b1d98cec2bc585cb20cf32860..9edfe68e9fe9dae77285b799219e56e940339a92 100644 (file)
@@ -425,7 +425,7 @@ struct platform_device msm_device_mdp = {
        .resource = resources_mdp,
 };
 
-struct clk_lookup msm_clocks_7x01a[] = {
+static struct clk_lookup msm_clocks_7x01a[] = {
        CLK_PCOM("adm_clk",     ADM_CLK,        NULL, 0),
        CLK_PCOM("adsp_clk",    ADSP_CLK,       NULL, 0),
        CLK_PCOM("ebi1_clk",    EBI1_CLK,       NULL, 0),
@@ -469,4 +469,12 @@ struct clk_lookup msm_clocks_7x01a[] = {
        CLK_PCOM("vfe_mdc_clk", VFE_MDC_CLK,    NULL, OFF),
 };
 
-unsigned msm_num_clocks_7x01a = ARRAY_SIZE(msm_clocks_7x01a);
+static struct pcom_clk_pdata msm_clock_7x01a_pdata = {
+       .lookup = msm_clocks_7x01a,
+       .num_lookups = ARRAY_SIZE(msm_clocks_7x01a),
+};
+
+struct platform_device msm_clock_7x01a = {
+       .name = "msm-clock-pcom",
+       .dev.platform_data = &msm_clock_7x01a_pdata,
+};
index d233c515973d153f9d092cf7ad0b6e3678508e08..e877fd67e02ad807a4323eee587e1a519ed89adb 100644 (file)
@@ -160,7 +160,7 @@ struct platform_device msm_device_hsusb_host = {
        },
 };
 
-struct clk_lookup msm_clocks_7x30[] = {
+static struct clk_lookup msm_clocks_7x30[] = {
        CLK_PCOM("adm_clk",     ADM_CLK,        NULL, 0),
        CLK_PCOM("adsp_clk",    ADSP_CLK,       NULL, 0),
        CLK_PCOM("cam_m_clk",   CAM_M_CLK,      NULL, 0),
@@ -234,5 +234,12 @@ struct clk_lookup msm_clocks_7x30[] = {
        CLK_PCOM("csi_vfe_clk", CSI0_VFE_CLK,   NULL, 0),
 };
 
-unsigned msm_num_clocks_7x30 = ARRAY_SIZE(msm_clocks_7x30);
+static struct pcom_clk_pdata msm_clock_7x30_pdata = {
+       .lookup = msm_clocks_7x30,
+       .num_lookups = ARRAY_SIZE(msm_clocks_7x30),
+};
 
+struct platform_device msm_clock_7x30 = {
+       .name = "msm-clock-pcom",
+       .dev.platform_data = &msm_clock_7x30_pdata,
+};
index 2e1b3ec9dfc7c2da5489baac857389b6942efb37..a62f647e6aed3230977bd28dc64951eefda4efb2 100644 (file)
@@ -322,7 +322,7 @@ int __init msm_add_sdcc(unsigned int controller,
        return platform_device_register(pdev);
 }
 
-struct clk_lookup msm_clocks_8x50[] = {
+static struct clk_lookup msm_clocks_8x50[] = {
        CLK_PCOM("adm_clk",     ADM_CLK,        NULL, 0),
        CLK_PCOM("ce_clk",      CE_CLK,         NULL, 0),
        CLK_PCOM("ebi1_clk",    EBI1_CLK,       NULL, CLK_MIN),
@@ -376,5 +376,12 @@ struct clk_lookup msm_clocks_8x50[] = {
        CLK_PCOM("usb_phy_clk", USB_PHY_CLK,    NULL, 0),
 };
 
-unsigned msm_num_clocks_8x50 = ARRAY_SIZE(msm_clocks_8x50);
+static struct pcom_clk_pdata msm_clock_8x50_pdata = {
+       .lookup = msm_clocks_8x50,
+       .num_lookups = ARRAY_SIZE(msm_clocks_8x50),
+};
 
+struct platform_device msm_clock_8x50 = {
+       .name = "msm-clock-pcom",
+       .dev.platform_data = &msm_clock_8x50_pdata,
+};
index da902cf5116152eac8b130343aa96ec23f3944bf..dccefad9f9b99fddac51f9af999ccc0fd8afe4d5 100644 (file)
 #ifndef __ARCH_ARM_MACH_MSM_DEVICES_H
 #define __ARCH_ARM_MACH_MSM_DEVICES_H
 
-#include <linux/clkdev.h>
-
-#include "clock.h"
-
 extern struct platform_device msm_device_gpio_7201;
 extern struct platform_device msm_device_gpio_7x30;
 extern struct platform_device msm_device_gpio_8x50;
@@ -50,13 +46,8 @@ extern struct platform_device msm_device_mddi0;
 extern struct platform_device msm_device_mddi1;
 extern struct platform_device msm_device_mdp;
 
-extern struct clk_lookup msm_clocks_7x01a[];
-extern unsigned msm_num_clocks_7x01a;
-
-extern struct clk_lookup msm_clocks_7x30[];
-extern unsigned msm_num_clocks_7x30;
-
-extern struct clk_lookup msm_clocks_8x50[];
-extern unsigned msm_num_clocks_8x50;
+extern struct platform_device msm_clock_7x01a;
+extern struct platform_device msm_clock_7x30;
+extern struct platform_device msm_clock_8x50;
 
 #endif
index 8cebedb11233b76b74e5a5738202b69378cf1111..c34e246a3e07dab6cae666d4b6f028d2f6840182 100644 (file)
 #include <linux/types.h>
 #include <linux/platform_data/mmc-msm_sdcc.h>
 
-/* platform device data structures */
-
-struct clk_lookup;
-
 /* common init routines for use by arch/arm/mach-msm/board-*.c */
 
 void __init msm_add_devices(void);
 void __init msm_init_irq(void);
 void __init msm_init_gpio(void);
-void __init msm_clock_init(struct clk_lookup *clock_tbl, unsigned num_clocks);
 int __init msm_add_sdcc(unsigned int controller,
                        struct msm_mmc_platform_data *plat,
                        unsigned int stat_irq, unsigned long stat_irq_flags);