[PATCH v4 1/1] pwm: imx27: workaround of the pwm output bug when decrease the duty cycle
Marek Vasut
marex at denx.de
Mon Sep 9 13:19:59 PDT 2024
On 9/9/24 9:38 PM, Frank Li wrote:
[...]
> + * Use __raw_writel() to minimize the interval between two writes to
> + * the SAR register to increase the fastest pwm frequency supported.
> + *
> + * When the PWM period is longer than 2us(or <500KHz), this workaround
> + * can solve this problem. No software workaround is available If PMW
PWM , typo
> + * period is shorter than IO write.
> + */
> + c = clkrate * 1500;
> + do_div(c, NSEC_PER_SEC);
> +
> + local_irq_save(flags);
> + val = FIELD_GET(MX3_PWMSR_FIFOAV, readl_relaxed(imx->mmio_base + MX3_PWMSR));
> + if (duty_cycles < imx->duty_cycle && val < MX3_PWMSR_FIFOAV_2WORDS) {
> + val = readl_relaxed(imx->mmio_base + MX3_PWMCNR);
> + if ((val + c >= duty_cycles && val < imx->duty_cycle) ||
> + /*
> + * If counter is close to period, controller may roll over
> + * when next IO write.
> + */
> + val + c >= period_cycles)
> + writel_relaxed(imx->duty_cycle, reg_sar);
Maybe use imx->mmio_base + MX3_PWMSAR instead of reg_sar here, to be
consistent with imx->mmio_base + MX3_PWMSR above ?
> + }
> + writel_relaxed(duty_cycles, reg_sar);
Same here
> + local_irq_restore(flags);
> +
> writel(period_cycles, imx->mmio_base + MX3_PWMPR);
[...]
Looks good otherwise, thanks !
More information about the linux-arm-kernel
mailing list