Re: [PATCH] ARM: dts: omap3-gta04: reduce panel backlight PWM frequency to 83Hz

From: Matthijs van Duin
Date: Fri Sep 09 2016 - 23:17:47 EST


On Mon, Sep 05, 2016 at 11:16:38AM +0200, H. Nikolaus Schaller wrote:
> This helps to get 100% intensity closer to "always on".
>
> It compensates for an effect of dmtimer which at 100% still emits short
> "off" impulses and the startup-time of the DC/DC converter makes
> backlight intensity not reach full scale. The lower the PWM frequency
> is, the smaller is this effect.

Sounds to me like you're working around something that should be fixed
in the pwm-omap-dmtimer driver instead?

Looking at the (baremetal) dmtimer pwm code I wrote ages ago, which
supports fully off to fully on, I do seem to be handling both endpoints
in a special way. A rough conversion of my code into C:

// period in timer cycles
void pwm_init( volatile struct dmtimer *timer, u32 period, bool invert )
{
assert( period >= 2 );
timer->if_ctrl = 2; // reset timer, configure as non-posted
timer->reload = -period;
timer->trigger = 0;
timer->config = 0x1043 | invert << 7; // pwm initially disabled
}

// value in timer cycles, 0 <= value <= period
void pwm_set( volatile struct dmtimer *timer, u32 value )
{
if( value == 0 ) {
timer->config &= ~0x800; // disable pwm
return;
}
u32 period = -timer->reload;
if( value >= period )
timer->match = 0;
else
timer->match = value - period - 1;
timer->config |= 0x800; // enable pwm
}

At the time I used a scope to check the exact behaviour of dmtimer pwm
on a dm814x. My notes mention (when pwm enabled):
match < reload output on continuous
match == reload output on 1 cycle, off period-1 cycles
match == -2 output on period-1 cycles, off 1 cycle
match == -1 output freezes

Hope this helps

Matthijs