diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/Kconfig | 1 | ||||
-rw-r--r-- | arch/arm/mach-pnx4008/clock.c | 66 | ||||
-rw-r--r-- | arch/arm/mach-pnx4008/clock.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-pnx4008/include/mach/clkdev.h | 7 |
4 files changed, 43 insertions, 33 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 4c33ca82f9b1..fb2a51b0ec15 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -554,6 +554,7 @@ config ARCH_PNX4008 | |||
554 | bool "Philips Nexperia PNX4008 Mobile" | 554 | bool "Philips Nexperia PNX4008 Mobile" |
555 | select CPU_ARM926T | 555 | select CPU_ARM926T |
556 | select HAVE_CLK | 556 | select HAVE_CLK |
557 | select COMMON_CLKDEV | ||
557 | help | 558 | help |
558 | This enables support for Philips PNX4008 mobile platform. | 559 | This enables support for Philips PNX4008 mobile platform. |
559 | 560 | ||
diff --git a/arch/arm/mach-pnx4008/clock.c b/arch/arm/mach-pnx4008/clock.c index 898c0e88acbc..6f5d2e502654 100644 --- a/arch/arm/mach-pnx4008/clock.c +++ b/arch/arm/mach-pnx4008/clock.c | |||
@@ -22,8 +22,9 @@ | |||
22 | #include <linux/delay.h> | 22 | #include <linux/delay.h> |
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | 24 | ||
25 | #include <mach/hardware.h> | 25 | #include <asm/clkdev.h> |
26 | 26 | ||
27 | #include <mach/hardware.h> | ||
27 | #include <mach/clock.h> | 28 | #include <mach/clock.h> |
28 | #include "clock.h" | 29 | #include "clock.h" |
29 | 30 | ||
@@ -747,7 +748,7 @@ static struct clk wdt_ck = { | |||
747 | /* These clocks are visible outside this module | 748 | /* These clocks are visible outside this module |
748 | * and can be initialized | 749 | * and can be initialized |
749 | */ | 750 | */ |
750 | static struct clk *onchip_clks[] = { | 751 | static struct clk *onchip_clks[] __initdata = { |
751 | &ck_13MHz, | 752 | &ck_13MHz, |
752 | &ck_pll1, | 753 | &ck_pll1, |
753 | &ck_pll4, | 754 | &ck_pll4, |
@@ -777,6 +778,36 @@ static struct clk *onchip_clks[] = { | |||
777 | &wdt_ck, | 778 | &wdt_ck, |
778 | }; | 779 | }; |
779 | 780 | ||
781 | static struct clk_lookup onchip_clkreg[] = { | ||
782 | { .clk = &ck_13MHz, .con_id = "ck_13MHz" }, | ||
783 | { .clk = &ck_pll1, .con_id = "ck_pll1" }, | ||
784 | { .clk = &ck_pll4, .con_id = "ck_pll4" }, | ||
785 | { .clk = &ck_pll5, .con_id = "ck_pll5" }, | ||
786 | { .clk = &ck_pll3, .con_id = "ck_pll3" }, | ||
787 | { .clk = &vfp9_ck, .con_id = "vfp9_ck" }, | ||
788 | { .clk = &m2hclk_ck, .con_id = "m2hclk_ck" }, | ||
789 | { .clk = &hclk_ck, .con_id = "hclk_ck" }, | ||
790 | { .clk = &dma_ck, .con_id = "dma_ck" }, | ||
791 | { .clk = &flash_ck, .con_id = "flash_ck" }, | ||
792 | { .clk = &dum_ck, .con_id = "dum_ck" }, | ||
793 | { .clk = &keyscan_ck, .con_id = "keyscan_ck" }, | ||
794 | { .clk = &pwm1_ck, .con_id = "pwm1_ck" }, | ||
795 | { .clk = &pwm2_ck, .con_id = "pwm2_ck" }, | ||
796 | { .clk = &jpeg_ck, .con_id = "jpeg_ck" }, | ||
797 | { .clk = &ms_ck, .con_id = "ms_ck" }, | ||
798 | { .clk = &touch_ck, .con_id = "touch_ck" }, | ||
799 | { .clk = &i2c0_ck, .con_id = "i2c0_ck" }, | ||
800 | { .clk = &i2c1_ck, .con_id = "i2c1_ck" }, | ||
801 | { .clk = &i2c2_ck, .con_id = "i2c2_ck" }, | ||
802 | { .clk = &spi0_ck, .con_id = "spi0_ck" }, | ||
803 | { .clk = &spi1_ck, .con_id = "spi1_ck" }, | ||
804 | { .clk = &uart3_ck, .con_id = "uart3_ck" }, | ||
805 | { .clk = &uart4_ck, .con_id = "uart4_ck" }, | ||
806 | { .clk = &uart5_ck, .con_id = "uart5_ck" }, | ||
807 | { .clk = &uart6_ck, .con_id = "uart6_ck" }, | ||
808 | { .clk = &wdt_ck, .con_id = "wdt_ck" }, | ||
809 | }; | ||
810 | |||
780 | static int local_clk_enable(struct clk *clk) | 811 | static int local_clk_enable(struct clk *clk) |
781 | { | 812 | { |
782 | int ret = 0; | 813 | int ret = 0; |
@@ -866,35 +897,6 @@ out: | |||
866 | 897 | ||
867 | EXPORT_SYMBOL(clk_set_rate); | 898 | EXPORT_SYMBOL(clk_set_rate); |
868 | 899 | ||
869 | struct clk *clk_get(struct device *dev, const char *id) | ||
870 | { | ||
871 | struct clk *clk = ERR_PTR(-ENOENT); | ||
872 | struct clk **clkp; | ||
873 | |||
874 | clock_lock(); | ||
875 | for (clkp = onchip_clks; clkp < onchip_clks + ARRAY_SIZE(onchip_clks); | ||
876 | clkp++) { | ||
877 | if (strcmp(id, (*clkp)->name) == 0 | ||
878 | && try_module_get((*clkp)->owner)) { | ||
879 | clk = (*clkp); | ||
880 | break; | ||
881 | } | ||
882 | } | ||
883 | clock_unlock(); | ||
884 | |||
885 | return clk; | ||
886 | } | ||
887 | EXPORT_SYMBOL(clk_get); | ||
888 | |||
889 | void clk_put(struct clk *clk) | ||
890 | { | ||
891 | clock_lock(); | ||
892 | if (clk && !IS_ERR(clk)) | ||
893 | module_put(clk->owner); | ||
894 | clock_unlock(); | ||
895 | } | ||
896 | EXPORT_SYMBOL(clk_put); | ||
897 | |||
898 | unsigned long clk_get_rate(struct clk *clk) | 900 | unsigned long clk_get_rate(struct clk *clk) |
899 | { | 901 | { |
900 | unsigned long ret; | 902 | unsigned long ret; |
@@ -987,6 +989,8 @@ static int __init clk_init(void) | |||
987 | /* Disable autoclocking */ | 989 | /* Disable autoclocking */ |
988 | __raw_writeb(0xff, AUTOCLK_CTRL); | 990 | __raw_writeb(0xff, AUTOCLK_CTRL); |
989 | 991 | ||
992 | clkdev_add_table(onchip_clkreg, ARRAY_SIZE(onchip_clkreg)); | ||
993 | |||
990 | return 0; | 994 | return 0; |
991 | } | 995 | } |
992 | 996 | ||
diff --git a/arch/arm/mach-pnx4008/clock.h b/arch/arm/mach-pnx4008/clock.h index cd58f372cfd0..933e18133b96 100644 --- a/arch/arm/mach-pnx4008/clock.h +++ b/arch/arm/mach-pnx4008/clock.h | |||
@@ -14,8 +14,6 @@ | |||
14 | #define __ARCH_ARM_PNX4008_CLOCK_H__ | 14 | #define __ARCH_ARM_PNX4008_CLOCK_H__ |
15 | 15 | ||
16 | struct clk { | 16 | struct clk { |
17 | struct list_head node; | ||
18 | struct module *owner; | ||
19 | const char *name; | 17 | const char *name; |
20 | struct clk *parent; | 18 | struct clk *parent; |
21 | struct clk *propagate_next; | 19 | struct clk *propagate_next; |
diff --git a/arch/arm/mach-pnx4008/include/mach/clkdev.h b/arch/arm/mach-pnx4008/include/mach/clkdev.h new file mode 100644 index 000000000000..04b37a89801c --- /dev/null +++ b/arch/arm/mach-pnx4008/include/mach/clkdev.h | |||
@@ -0,0 +1,7 @@ | |||
1 | #ifndef __ASM_MACH_CLKDEV_H | ||
2 | #define __ASM_MACH_CLKDEV_H | ||
3 | |||
4 | #define __clk_get(clk) ({ 1; }) | ||
5 | #define __clk_put(clk) do { } while (0) | ||
6 | |||
7 | #endif | ||