Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a058cbc1 authored by Sascha Hauer's avatar Sascha Hauer
Browse files

mxc pwm: add mx25 support

parent 6134b2cb
Loading
Loading
Loading
Loading
+13 −4
Original line number Original line Diff line number Diff line
@@ -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)




@@ -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);
@@ -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