diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2009-06-19 05:08:07 -0400 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2009-08-14 06:40:41 -0400 |
commit | a058cbc17901108de9179dccdb29dff0e00c79fe (patch) | |
tree | a919e241d680470448ae73a28dc0a48a4f523319 /arch/arm/plat-mxc/pwm.c | |
parent | 6134b2cbb0e24f897fd1063745638397809fca29 (diff) |
mxc pwm: add mx25 support
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/plat-mxc/pwm.c')
-rw-r--r-- | arch/arm/plat-mxc/pwm.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/arch/arm/plat-mxc/pwm.c b/arch/arm/plat-mxc/pwm.c index 42dd17b89ff3..5cdbd605ac05 100644 --- a/arch/arm/plat-mxc/pwm.c +++ b/arch/arm/plat-mxc/pwm.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #define MX3_PWMPR 0x10 /* PWM Period Register */ | 32 | #define MX3_PWMPR 0x10 /* PWM Period Register */ |
33 | #define MX3_PWMCR_PRESCALER(x) (((x - 1) & 0xFFF) << 4) | 33 | #define MX3_PWMCR_PRESCALER(x) (((x - 1) & 0xFFF) << 4) |
34 | #define MX3_PWMCR_CLKSRC_IPG_HIGH (2 << 16) | 34 | #define MX3_PWMCR_CLKSRC_IPG_HIGH (2 << 16) |
35 | #define MX3_PWMCR_CLKSRC_IPG (1 << 16) | ||
35 | #define MX3_PWMCR_EN (1 << 0) | 36 | #define MX3_PWMCR_EN (1 << 0) |
36 | 37 | ||
37 | 38 | ||
@@ -55,9 +56,11 @@ int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) | |||
55 | if (pwm == NULL || period_ns == 0 || duty_ns > period_ns) | 56 | if (pwm == NULL || period_ns == 0 || duty_ns > period_ns) |
56 | return -EINVAL; | 57 | return -EINVAL; |
57 | 58 | ||
58 | if (cpu_is_mx27() || cpu_is_mx3()) { | 59 | if (cpu_is_mx27() || cpu_is_mx3() || cpu_is_mx25()) { |
59 | unsigned long long c; | 60 | unsigned long long c; |
60 | unsigned long period_cycles, duty_cycles, prescale; | 61 | unsigned long period_cycles, duty_cycles, prescale; |
62 | u32 cr; | ||
63 | |||
61 | c = clk_get_rate(pwm->clk); | 64 | c = clk_get_rate(pwm->clk); |
62 | c = c * period_ns; | 65 | c = c * period_ns; |
63 | do_div(c, 1000000000); | 66 | do_div(c, 1000000000); |
@@ -72,9 +75,15 @@ int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) | |||
72 | 75 | ||
73 | writel(duty_cycles, pwm->mmio_base + MX3_PWMSAR); | 76 | writel(duty_cycles, pwm->mmio_base + MX3_PWMSAR); |
74 | writel(period_cycles, pwm->mmio_base + MX3_PWMPR); | 77 | writel(period_cycles, pwm->mmio_base + MX3_PWMPR); |
75 | writel(MX3_PWMCR_PRESCALER(prescale) | | 78 | |
76 | MX3_PWMCR_CLKSRC_IPG_HIGH | MX3_PWMCR_EN, | 79 | cr = MX3_PWMCR_PRESCALER(prescale) | MX3_PWMCR_EN; |
77 | pwm->mmio_base + MX3_PWMCR); | 80 | |
81 | if (cpu_is_mx25()) | ||
82 | cr |= MX3_PWMCR_CLKSRC_IPG; | ||
83 | else | ||
84 | cr |= MX3_PWMCR_CLKSRC_IPG_HIGH; | ||
85 | |||
86 | writel(cr, pwm->mmio_base + MX3_PWMCR); | ||
78 | } else if (cpu_is_mx1() || cpu_is_mx21()) { | 87 | } else if (cpu_is_mx1() || cpu_is_mx21()) { |
79 | /* The PWM subsystem allows for exact frequencies. However, | 88 | /* The PWM subsystem allows for exact frequencies. However, |
80 | * I cannot connect a scope on my device to the PWM line and | 89 | * I cannot connect a scope on my device to the PWM line and |