Loading arch/arm/plat-mxc/pwm.c +13 −4 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ #define MX3_PWMPR 0x10 /* PWM Period Register */ #define MX3_PWMPR 0x10 /* PWM Period Register */ #define MX3_PWMCR_PRESCALER(x) (((x - 1) & 0xFFF) << 4) #define MX3_PWMCR_PRESCALER(x) (((x - 1) & 0xFFF) << 4) #define MX3_PWMCR_CLKSRC_IPG_HIGH (2 << 16) #define MX3_PWMCR_CLKSRC_IPG_HIGH (2 << 16) #define MX3_PWMCR_CLKSRC_IPG (1 << 16) #define MX3_PWMCR_EN (1 << 0) #define MX3_PWMCR_EN (1 << 0) Loading @@ -55,9 +56,11 @@ int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) if (pwm == NULL || period_ns == 0 || duty_ns > period_ns) if (pwm == NULL || period_ns == 0 || duty_ns > period_ns) return -EINVAL; return -EINVAL; if (cpu_is_mx27() || cpu_is_mx3()) { if (cpu_is_mx27() || cpu_is_mx3() || cpu_is_mx25()) { unsigned long long c; unsigned long long c; unsigned long period_cycles, duty_cycles, prescale; unsigned long period_cycles, duty_cycles, prescale; u32 cr; c = clk_get_rate(pwm->clk); c = clk_get_rate(pwm->clk); c = c * period_ns; c = c * period_ns; do_div(c, 1000000000); do_div(c, 1000000000); Loading @@ -72,9 +75,15 @@ int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) writel(duty_cycles, pwm->mmio_base + MX3_PWMSAR); writel(duty_cycles, pwm->mmio_base + MX3_PWMSAR); writel(period_cycles, pwm->mmio_base + MX3_PWMPR); writel(period_cycles, pwm->mmio_base + MX3_PWMPR); writel(MX3_PWMCR_PRESCALER(prescale) | MX3_PWMCR_CLKSRC_IPG_HIGH | MX3_PWMCR_EN, cr = MX3_PWMCR_PRESCALER(prescale) | MX3_PWMCR_EN; pwm->mmio_base + MX3_PWMCR); if (cpu_is_mx25()) cr |= MX3_PWMCR_CLKSRC_IPG; else cr |= MX3_PWMCR_CLKSRC_IPG_HIGH; writel(cr, pwm->mmio_base + MX3_PWMCR); } else if (cpu_is_mx1() || cpu_is_mx21()) { } else if (cpu_is_mx1() || cpu_is_mx21()) { /* The PWM subsystem allows for exact frequencies. However, /* The PWM subsystem allows for exact frequencies. However, * I cannot connect a scope on my device to the PWM line and * I cannot connect a scope on my device to the PWM line and Loading Loading
arch/arm/plat-mxc/pwm.c +13 −4 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ #define MX3_PWMPR 0x10 /* PWM Period Register */ #define MX3_PWMPR 0x10 /* PWM Period Register */ #define MX3_PWMCR_PRESCALER(x) (((x - 1) & 0xFFF) << 4) #define MX3_PWMCR_PRESCALER(x) (((x - 1) & 0xFFF) << 4) #define MX3_PWMCR_CLKSRC_IPG_HIGH (2 << 16) #define MX3_PWMCR_CLKSRC_IPG_HIGH (2 << 16) #define MX3_PWMCR_CLKSRC_IPG (1 << 16) #define MX3_PWMCR_EN (1 << 0) #define MX3_PWMCR_EN (1 << 0) Loading @@ -55,9 +56,11 @@ int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) if (pwm == NULL || period_ns == 0 || duty_ns > period_ns) if (pwm == NULL || period_ns == 0 || duty_ns > period_ns) return -EINVAL; return -EINVAL; if (cpu_is_mx27() || cpu_is_mx3()) { if (cpu_is_mx27() || cpu_is_mx3() || cpu_is_mx25()) { unsigned long long c; unsigned long long c; unsigned long period_cycles, duty_cycles, prescale; unsigned long period_cycles, duty_cycles, prescale; u32 cr; c = clk_get_rate(pwm->clk); c = clk_get_rate(pwm->clk); c = c * period_ns; c = c * period_ns; do_div(c, 1000000000); do_div(c, 1000000000); Loading @@ -72,9 +75,15 @@ int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) writel(duty_cycles, pwm->mmio_base + MX3_PWMSAR); writel(duty_cycles, pwm->mmio_base + MX3_PWMSAR); writel(period_cycles, pwm->mmio_base + MX3_PWMPR); writel(period_cycles, pwm->mmio_base + MX3_PWMPR); writel(MX3_PWMCR_PRESCALER(prescale) | MX3_PWMCR_CLKSRC_IPG_HIGH | MX3_PWMCR_EN, cr = MX3_PWMCR_PRESCALER(prescale) | MX3_PWMCR_EN; pwm->mmio_base + MX3_PWMCR); if (cpu_is_mx25()) cr |= MX3_PWMCR_CLKSRC_IPG; else cr |= MX3_PWMCR_CLKSRC_IPG_HIGH; writel(cr, pwm->mmio_base + MX3_PWMCR); } else if (cpu_is_mx1() || cpu_is_mx21()) { } else if (cpu_is_mx1() || cpu_is_mx21()) { /* The PWM subsystem allows for exact frequencies. However, /* The PWM subsystem allows for exact frequencies. However, * I cannot connect a scope on my device to the PWM line and * I cannot connect a scope on my device to the PWM line and Loading