diff options
| -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 | ||
