On Tue, Dec 05, 2017 at 04:56:00PM -0200, Fabio Estevam wrote: > Hi Thierry, > > On Tue, Dec 5, 2017 at 6:47 AM, Thierry Reding wrote: > > > It looks like this would also keep other PWMs enabled in suspend. If for > > example you hooked up a fan to this PWM this change would make it so > > that the fan would remain on during suspend. That doesn't sound > > desirable to me. > > It is expected that the PWM fan driver would disable the fan upon > entering into suspend. > > The old vendor driver also sets the STOPEN bit unconditionally: > http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/tree/arch/arm/plat-mxc/pwm.c?h=imx_2.6.35_11.09.01#n97 > > > > > On v2, I see this reply from you: > > > > Please note that on imx6qdl-cuboxi the pwm is active low. > > What I meant to say is that a logic level 0 turns on the LED. That's the same thing. > > I also see that imx6q-cubox-i uses the "fsl,imx27-pwm" compatible > > version of this controller and that supports polarity inversion. I think > > the correct thing to do here is to mark the PWM as inverted (according > > to the DTS file it is actually the pwmleds node that has an active-low > > property). If you invert the PWM you could add extra code to the PWM > > driver to deal with this properly and set STOPEN only for inverted PWM > > signals. > > Polarity is correct: > > echo 0 > brightness --> turns off the LED > echo 248 > brightness ---> turns on the LED with the maximum brightness > > It is only the behaviour during suspend which is not correct (LCD turns on). This does indicate all the more that you're trying to invert the polarity in the user driver. If you look at the driver code it will simply invert the duty cycle for active-low LEDs. That matches the symptoms that you describe: when you set zero brightness you will in fact get full duty cycle and hence the LED turns off. However, this does no longer work if the PWM signal is truly inverted, since the "off" state of the PWM signal will actually be "on". > Tried your suggestion of changing the polarity and it does not work > and breaks the usage during normal mode (non low power). How does it break? Note that you have to change the polarity of the PWM signal (in the pwms property) and then remove the "active-low" property from the leds device tree node to avoid double inversion. Thierry