Skip to contentSkip to conversation

pwm: imx: Port "pwm: imx: support output polarity inversion" to Linux v4.7

PATCH New Lukasz Majewski 2 participants 4 messages Sep 11, 2016 – Sep 30, 2016

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 pwm: imx: Port "pwm: imx: support output polarity inversion" to Linux v4.7

This patch ports "pwm: imx: support output polarity inversion" patch set written by Lothar Wassmann (v6 from 10.2014).

It is used to control backlight of panels via inverted PWM signal.

The "inversion" of PWM output is not an issue at such devices, since separate GPIO pin is responsible for enabling and disabling the panel's backlight.

This patch should be put on top of:

https://patchwork.kernel.org/patch/5065841/
https://patchwork.kernel.org/patch/5065821/
https://patchwork.kernel.org/patch/5065811/

---
 drivers/pwm/pwm-imx.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)
drivers/pwm/pwm-imx.c +14 -6
index 471a99e..c37d223 100644
@@ -181,7 +181,7 @@ static int imx_pwm_config_v2(struct pwm_chip *chip,
 	if (enable)
 		cr |= MX3_PWMCR_EN;
 
-	if (pwm->polarity == PWM_POLARITY_INVERSED)
+	if (pwm->args.polarity == PWM_POLARITY_INVERSED)
 		cr |= MX3_PWMCR_POUTC;
 
 	writel(cr, imx->mmio_base + MX3_PWMCR);
@@ -201,11 +201,6 @@ static void imx_pwm_set_enable_v2(struct pwm_chip *chip, bool enable)
 	else
 		val &= ~MX3_PWMCR_EN;
 
-	if (chip->pwms[0].polarity == PWM_POLARITY_INVERSED)
-		val |= MX3_PWMCR_POUTC;
-	else
-		val &= ~MX3_PWMCR_POUTC;
-
 	writel(val, imx->mmio_base + MX3_PWMCR);
 }
 
@@ -253,6 +248,19 @@ static int imx_pwm_set_polarity(struct pwm_chip *chip, struct pwm_device *pwm,
 				enum pwm_polarity polarity)
 {
 	struct imx_chip *imx = to_imx_chip(chip);
+	u32 val;
+
+	if (polarity == pwm->args.polarity)
+		return 0;
+
+	val = readl(imx->mmio_base + MX3_PWMCR);
+
+	if (polarity == PWM_POLARITY_INVERSED)
+		val |= MX3_PWMCR_POUTC;
+	else
+		val &= ~MX3_PWMCR_POUTC;
+
+	writel(val, imx->mmio_base + MX3_PWMCR);
 
 	dev_dbg(imx->chip.dev, "%s: polarity set to %s\n", __func__,
 		polarity == PWM_POLARITY_INVERSED ? "inverted" : "normal");
Signature · 1 line
2.1.4
#1 lore raw

PATCH 1/1 pwm: imx: Port "pwm: imx: support output polarity inversion" to Linux v4.7

Dear Lothar, Stefan,

Quoted 3 lines

This patch ports "pwm: imx: support output polarity inversion" patch set written by Lothar Wassmann (v6 from 10.2014).

I've read the e-mail from Stefan regarding missing support for pwm-imx polarity inversion feature.

I also would like to see it in ML. Hence, my patch. Lothar, please feel free to squash it to your patches when you (I hope :-) ) will prepare v7 of this feature.

I hope that this would help.

Best regards,
?ukasz Majewski

Quoted 63 lines

It is used to control backlight of panels via inverted PWM signal.

The "inversion" of PWM output is not an issue at such devices, since separate GPIO pin is responsible for enabling and disabling the panel's backlight.

This patch should be put on top of:

https://patchwork.kernel.org/patch/5065841/
https://patchwork.kernel.org/patch/5065821/
https://patchwork.kernel.org/patch/5065811/

---
 drivers/pwm/pwm-imx.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)
drivers/pwm/pwm-imx.c +1 -1
index 471a99e..c37d223 100644
@@ -181,7 +181,7 @@ static int imx_pwm_config_v2(struct pwm_chip
 *chip, if (enable)
 		cr |= MX3_PWMCR_EN;
 
-	if (pwm->polarity == PWM_POLARITY_INVERSED)
+	if (pwm->args.polarity == PWM_POLARITY_INVERSED)
 		cr |= MX3_PWMCR_POUTC;
 
 	writel(cr, imx->mmio_base + MX3_PWMCR);
@@ -201,11 +201,6 @@ static void imx_pwm_set_enable_v2(struct

pwm_chip *chip, bool enable) else

drivers/pwm/pwm-imx.c +13 -5
 		val &= ~MX3_PWMCR_EN;
 
-	if (chip->pwms[0].polarity == PWM_POLARITY_INVERSED)
-		val |= MX3_PWMCR_POUTC;
-	else
-		val &= ~MX3_PWMCR_POUTC;
-
 	writel(val, imx->mmio_base + MX3_PWMCR);
 }
@@ -253,6 +248,19 @@ static int imx_pwm_set_polarity(struct pwm_chip
 *chip, struct pwm_device *pwm, enum pwm_polarity polarity)
 {
 	struct imx_chip *imx = to_imx_chip(chip);
+	u32 val;
+
+	if (polarity == pwm->args.polarity)
+		return 0;
+
+	val = readl(imx->mmio_base + MX3_PWMCR);
+
+	if (polarity == PWM_POLARITY_INVERSED)
+		val |= MX3_PWMCR_POUTC;
+	else
+		val &= ~MX3_PWMCR_POUTC;
+
+	writel(val, imx->mmio_base + MX3_PWMCR);
 
 	dev_dbg(imx->chip.dev, "%s: polarity set to %s\n", __func__,
 		polarity == PWM_POLARITY_INVERSED ? "inverted" :
Quoted 1 line

"normal");

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160911/01d39f48/attachment-0001.sig>

#2 lore raw

PATCH 1/1 pwm: imx: Port "pwm: imx: support output polarity inversion" to Linux v4.7

Dear all,

Quoted 6 lines

Dear Lothar, Stefan,

Quoted 3 lines

This patch ports "pwm: imx: support output polarity inversion" patch set written by Lothar Wassmann (v6 from 10.2014).

Quoted 8 lines

I've read the e-mail from Stefan regarding missing support for pwm-imx polarity inversion feature.

I also would like to see it in ML. Hence, my patch. Lothar, please feel free to squash it to your patches when you (I hope :-) ) will prepare v7 of this feature.

I hope that this would help.

Was there any decision about those patches?

Would they be included to main line anytime soon?

Best regards,
?ukasz Majewski

Quoted 65 lines

Best regards,
?ukasz Majewski

Quoted 61 lines

It is used to control backlight of panels via inverted PWM signal.

The "inversion" of PWM output is not an issue at such devices, since separate GPIO pin is responsible for enabling and disabling the panel's backlight.

This patch should be put on top of:

https://patchwork.kernel.org/patch/5065841/
https://patchwork.kernel.org/patch/5065821/
https://patchwork.kernel.org/patch/5065811/

---
 drivers/pwm/pwm-imx.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)
drivers/pwm/pwm-imx.c +1 -1
index 471a99e..c37d223 100644
@@ -181,7 +181,7 @@ static int imx_pwm_config_v2(struct pwm_chip
 *chip, if (enable)
 		cr |= MX3_PWMCR_EN;
 
-	if (pwm->polarity == PWM_POLARITY_INVERSED)
+	if (pwm->args.polarity == PWM_POLARITY_INVERSED)
 		cr |= MX3_PWMCR_POUTC;
 
 	writel(cr, imx->mmio_base + MX3_PWMCR);
@@ -201,11 +201,6 @@ static void imx_pwm_set_enable_v2(struct

pwm_chip *chip, bool enable) else

drivers/pwm/pwm-imx.c +13 -5
 		val &= ~MX3_PWMCR_EN;
 
-	if (chip->pwms[0].polarity == PWM_POLARITY_INVERSED)
-		val |= MX3_PWMCR_POUTC;
-	else
-		val &= ~MX3_PWMCR_POUTC;
-
 	writel(val, imx->mmio_base + MX3_PWMCR);
 }
@@ -253,6 +248,19 @@ static int imx_pwm_set_polarity(struct pwm_chip
 *chip, struct pwm_device *pwm, enum pwm_polarity polarity)
 {
 	struct imx_chip *imx = to_imx_chip(chip);
+	u32 val;
+
+	if (polarity == pwm->args.polarity)
+		return 0;
+
+	val = readl(imx->mmio_base + MX3_PWMCR);
+
+	if (polarity == PWM_POLARITY_INVERSED)
+		val |= MX3_PWMCR_POUTC;
+	else
+		val &= ~MX3_PWMCR_POUTC;
+
+	writel(val, imx->mmio_base + MX3_PWMCR);
 
Quoted 4 lines
Quoted 3 lines
drivers/pwm/pwm-imx.c +0 -0
 	dev_dbg(imx->chip.dev, "%s: polarity set to %s\n",

__func__, polarity == PWM_POLARITY_INVERSED ? "inverted" :
"normal");

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160930/22860f65/attachment.sig>

#3 lore raw

PATCH 1/1 pwm: imx: Port "pwm: imx: support output polarity inversion" to Linux v4.7

Quoted 11 lines · Lukasz Majewski

Dear all,

Quoted 9 lines

Dear Lothar, Stefan,

Quoted 3 lines

This patch ports "pwm: imx: support output polarity inversion" patch set written by Lothar Wassmann (v6 from 10.2014).

I've read the e-mail from Stefan regarding missing support for pwm-imx polarity inversion feature.

Quoted 7 lines
Quoted 5 lines

I also would like to see it in ML. Hence, my patch. Lothar, please feel free to squash it to your patches when you (I hope :-) ) will prepare v7 of this feature.

I hope that this would help.

Was there any decision about those patches?

Bhuvan here at Toradex is preparing an updated patchset...

Quoted 2 lines

Would they be included to main line anytime soon?

I don't think that there were fundamental issues with the patchset, so I hope they make it once upon a time...

--
Stefan

Quoted 73 lines

Best regards,
?ukasz Majewski

Quoted 69 lines

Best regards,
?ukasz Majewski

Quoted 64 lines

It is used to control backlight of panels via inverted PWM signal.

The "inversion" of PWM output is not an issue at such devices, since separate GPIO pin is responsible for enabling and disabling the panel's backlight.

This patch should be put on top of:

https://patchwork.kernel.org/patch/5065841/
https://patchwork.kernel.org/patch/5065821/
https://patchwork.kernel.org/patch/5065811/

---
 drivers/pwm/pwm-imx.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)
drivers/pwm/pwm-imx.c +1 -1
index 471a99e..c37d223 100644
@@ -181,7 +181,7 @@ static int imx_pwm_config_v2(struct pwm_chip
 *chip, if (enable)
 		cr |= MX3_PWMCR_EN;
 
-	if (pwm->polarity == PWM_POLARITY_INVERSED)
+	if (pwm->args.polarity == PWM_POLARITY_INVERSED)
 		cr |= MX3_PWMCR_POUTC;
 
 	writel(cr, imx->mmio_base + MX3_PWMCR);
@@ -201,11 +201,6 @@ static void imx_pwm_set_enable_v2(struct

pwm_chip *chip, bool enable) else

drivers/pwm/pwm-imx.c +13 -5
 		val &= ~MX3_PWMCR_EN;
 
-	if (chip->pwms[0].polarity == PWM_POLARITY_INVERSED)
-		val |= MX3_PWMCR_POUTC;
-	else
-		val &= ~MX3_PWMCR_POUTC;
-
 	writel(val, imx->mmio_base + MX3_PWMCR);
 }
@@ -253,6 +248,19 @@ static int imx_pwm_set_polarity(struct pwm_chip
 *chip, struct pwm_device *pwm, enum pwm_polarity polarity)
 {
 	struct imx_chip *imx = to_imx_chip(chip);
+	u32 val;
+
+	if (polarity == pwm->args.polarity)
+		return 0;
+
+	val = readl(imx->mmio_base + MX3_PWMCR);
+
+	if (polarity == PWM_POLARITY_INVERSED)
+		val |= MX3_PWMCR_POUTC;
+	else
+		val &= ~MX3_PWMCR_POUTC;
+
+	writel(val, imx->mmio_base + MX3_PWMCR);
 
 	dev_dbg(imx->chip.dev, "%s: polarity set to %s\n",

__func__, polarity == PWM_POLARITY_INVERSED ? "inverted" :
"normal");