Hello Michal, just to state it more explicitly, I think the following patch (not even compile tested) is much preferable over your approach: diff --git a/drivers/pwm/pwm-imx.c b/drivers/pwm/pwm-imx.c index 1d5242c9cde0..af88644b5efb 100644 --- a/drivers/pwm/pwm-imx.c +++ b/drivers/pwm/pwm-imx.c @@ -216,7 +216,14 @@ static int imx_pwm_apply_v2(struct pwm_chip *chip, struct pwm_device *pwm, cr |= MX3_PWMCR_POUTC; writel(cr, imx->mmio_base + MX3_PWMCR); - } else if (cstate.enabled) { + } else if (cstate.enabled && state->polarity == PWM_POLARITY_NORMAL) { + /* + * When disabled in hardware the output pin goes to 0 + * independant of the polarity setting. The expectation of some + * people however is that after disabling the pin goes to the + * inactive level which isn't given for an inversed pwm, so + * only disable for normal polarity. + */ writel(0, imx->mmio_base + MX3_PWMCR); clk_disable_unprepare(imx->clk_per); I think it solves most if not all problems you want to address with the pinctrl stuff. Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | http://www.pengutronix.de/ |