diff options
| author | Rabin Vincent <rabin.vincent@stericsson.com> | 2011-05-11 09:32:06 +0530 |
|---|---|---|
| committer | Ulf Hansson <ulf.hansson@stericsson.com> | 2011-09-19 15:15:22 +0200 |
| commit | e8267ca0f32d34cb225a298f7af4c969ba80a288 (patch) | |
| tree | 3b43fc88e2a3ad7a7adb7934019a67bd4087a557 | |
| parent | be9e65e616962c6fe4ad12b2538e9a246a64ced4 (diff) | |
clock-db5500: add CLKOUT0/1 support
ST-Ericsson Linux next: -
ST-Ericsson ID: WP257121
ST-Ericsson FOSS-OUT ID: Trivial
Change-Id: I2f3fb2def64ea70d1009ad257f2fa38bdbb17a94
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/22827
Reviewed-by: QATEST
Reviewed-by: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
| -rw-r--r-- | arch/arm/mach-ux500/clock-db5500.c | 68 |
1 files changed, 32 insertions, 36 deletions
diff --git a/arch/arm/mach-ux500/clock-db5500.c b/arch/arm/mach-ux500/clock-db5500.c index 7a50007ddad..23612a2613d 100644 --- a/arch/arm/mach-ux500/clock-db5500.c +++ b/arch/arm/mach-ux500/clock-db5500.c @@ -26,8 +26,9 @@ #include <mach/prcmu-fw-api.h> #include "clock.h" -#include "pins-db8500.h" +#include "pins-db5500.h" #include "prcmu-db5500.h" +#include "prcmu-regs-db5500.h" static DEFINE_MUTEX(sysclk_mutex); static DEFINE_MUTEX(ab_ulpclk_mutex); @@ -194,53 +195,57 @@ static struct clkops audioclk_ops = { .set_parent = audioclk_set_parent, }; -/* Primary camera clock operations */ +static pin_cfg_t clkout0_pins[] = { + GPIO161_CLKOUT_0 | PIN_OUTPUT_LOW, +}; + +static pin_cfg_t clkout1_pins[] = { + GPIO162_CLKOUT_1 | PIN_OUTPUT_LOW, +}; + static int clkout0_enable(struct clk *clk) { - int r; + unsigned int val = readl(_PRCMU_BASE + PRCM_CLKOCR); - r = prcmu_config_clkout(0, PRCMU_CLKSRC_SYSCLK, 4); - if (r) - return r; - return nmk_config_pin(GPIO227_CLKOUT1, false); + val &= ~PRCM_CLKOCR_CLKOUT0_MASK; + val |= PRCM_CLKOCR_CLKOUT0_REF_CLK; + + writel(val, _PRCMU_BASE + PRCM_CLKOCR); + + return nmk_config_pins(clkout0_pins, ARRAY_SIZE(clkout0_pins)); } static void clkout0_disable(struct clk *clk) { int r; - r = nmk_config_pin(GPIO227_GPIO, false); - if (r) - goto disable_failed; - r = prcmu_config_clkout(0, PRCMU_CLKSRC_SYSCLK, 0); + r = nmk_config_pins_sleep(clkout0_pins, ARRAY_SIZE(clkout0_pins)); if (!r) return; -disable_failed: + pr_err("clock: failed to disable %s.\n", clk->name); } -/* Touch screen/secondary camera clock operations. */ static int clkout1_enable(struct clk *clk) { - int r; + unsigned int val = readl(_PRCMU_BASE + PRCM_CLKOCR); - r = prcmu_config_clkout(1, PRCMU_CLKSRC_SYSCLK, 4); - if (r) - return r; - return nmk_config_pin(GPIO228_CLKOUT2, false); + val &= ~PRCM_CLKOCR_CLKOUT1_MASK; + val |= PRCM_CLKOCR_CLKOUT1_REF_CLK; + + writel(val, _PRCMU_BASE + PRCM_CLKOCR); + + return nmk_config_pins(clkout1_pins, ARRAY_SIZE(clkout0_pins)); } static void clkout1_disable(struct clk *clk) { int r; - r = nmk_config_pin(GPIO228_GPIO, false); - if (r) - goto disable_failed; - r = prcmu_config_clkout(1, PRCMU_CLKSRC_SYSCLK, 0); + r = nmk_config_pins_sleep(clkout1_pins, ARRAY_SIZE(clkout1_pins)); if (!r) return; -disable_failed: + pr_err("clock: failed to disable %s.\n", clk->name); } @@ -308,7 +313,7 @@ static struct clk ulp38m4 = { static struct clk sysclk = { .name = "sysclk", .ops = &sysclk_ops, - .rate = 38400000, + .rate = 26000000, .mutex = &sysclk_mutex, }; @@ -356,7 +361,6 @@ static struct clk clkout0 = { .name = "clkout0", .ops = &clkout0_ops, .parent = &sysclk, - .rate = 9600000, .mutex = &sysclk_mutex, }; @@ -364,7 +368,6 @@ static struct clk clkout1 = { .name = "clkout1", .ops = &clkout1_ops, .parent = &sysclk, - .rate = 9600000, .mutex = &sysclk_mutex, }; @@ -674,10 +677,8 @@ static struct clk_lookup db5500_prcc_clocks[] = { CLK_LOOKUP(clk_msp1, "MSP_I2S.1", NULL), }; -static struct clk_lookup u8500_v2_prcmu_clocks[] = { - CLK_LOOKUP(clkout0, "pri-cam", NULL), - CLK_LOOKUP(clkout1, "3-005c", NULL), - CLK_LOOKUP(clkout1, "3-005d", NULL), +static struct clk_lookup db5500_clkouts[] = { + CLK_LOOKUP(clkout1, "pri-cam", NULL), CLK_LOOKUP(clkout1, "sec-cam", NULL), }; @@ -740,10 +741,6 @@ int __init db5500_clk_init(void) { sysclk_ops.enable = NULL; sysclk_ops.disable = NULL; - clkout0_ops.enable = NULL; - clkout0_ops.disable = NULL; - clkout1_ops.enable = NULL; - clkout1_ops.disable = NULL; prcmu_clk_ops.enable = db5500_prcmu_clk_enable; prcmu_clk_ops.disable = db5500_prcmu_clk_disable; @@ -762,12 +759,11 @@ int __init db5500_clk_init(void) clks_register(db5500_prcmu_clocks, ARRAY_SIZE(db5500_prcmu_clocks)); clks_register(db5500_prcc_clocks, ARRAY_SIZE(db5500_prcc_clocks)); + clks_register(db5500_clkouts, ARRAY_SIZE(db5500_clkouts)); if (cpu_is_u8500v2()) { clks_register(u8500_v2_sysclks, ARRAY_SIZE(u8500_v2_sysclks)); - clks_register(u8500_v2_prcmu_clocks, - ARRAY_SIZE(u8500_v2_prcmu_clocks)); } db5500_boot_clk_enable(); |
