linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] pwm: lpc32xx - Fix the PWM polarity
@ 2012-11-05 16:48 Alban Bedel
  2012-11-05 21:03 ` Thierry Reding
  0 siblings, 1 reply; 13+ messages in thread
From: Alban Bedel @ 2012-11-05 16:48 UTC (permalink / raw)
  To: Thierry Reding; +Cc: linux-kernel, Alban Bedel

Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de>
---
 drivers/pwm/pwm-lpc32xx.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/drivers/pwm/pwm-lpc32xx.c b/drivers/pwm/pwm-lpc32xx.c
index adb87f0..a2704b8 100644
--- a/drivers/pwm/pwm-lpc32xx.c
+++ b/drivers/pwm/pwm-lpc32xx.c
@@ -51,7 +51,11 @@ static int lpc32xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
 
 	c = 256 * duty_ns;
 	do_div(c, period_ns);
-	duty_cycles = c;
+	if (c > 255)
+		c = 255;
+	if (c < 1)
+		c = 1;
+	duty_cycles = 256 - c;
 
 	writel(PWM_ENABLE | PWM_RELOADV(period_cycles) | PWM_DUTY(duty_cycles),
 		lpc32xx->base + (pwm->hwpwm << 2));
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH] pwm: lpc32xx - Fix the PWM polarity
  2012-11-05 16:48 [PATCH] pwm: lpc32xx - Fix the PWM polarity Alban Bedel
@ 2012-11-05 21:03 ` Thierry Reding
  2012-11-06  9:36   ` Roland Stigge
  0 siblings, 1 reply; 13+ messages in thread
From: Thierry Reding @ 2012-11-05 21:03 UTC (permalink / raw)
  To: Alban Bedel; +Cc: linux-kernel, Roland Stigge, Alexandre Pereira da Silva

[-- Attachment #1: Type: text/plain, Size: 936 bytes --]

Cc'ing Roland and Alexandre. What do you guys think?

On Mon, Nov 05, 2012 at 05:48:45PM +0100, Alban Bedel wrote:
> Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de>
> ---
>  drivers/pwm/pwm-lpc32xx.c |    6 +++++-
>  1 files changed, 5 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/pwm/pwm-lpc32xx.c b/drivers/pwm/pwm-lpc32xx.c
> index adb87f0..a2704b8 100644
> --- a/drivers/pwm/pwm-lpc32xx.c
> +++ b/drivers/pwm/pwm-lpc32xx.c
> @@ -51,7 +51,11 @@ static int lpc32xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
>  
>  	c = 256 * duty_ns;
>  	do_div(c, period_ns);
> -	duty_cycles = c;
> +	if (c > 255)
> +		c = 255;
> +	if (c < 1)
> +		c = 1;
> +	duty_cycles = 256 - c;
>  
>  	writel(PWM_ENABLE | PWM_RELOADV(period_cycles) | PWM_DUTY(duty_cycles),
>  		lpc32xx->base + (pwm->hwpwm << 2));

Shouldn't duty_cycles rather be 255 - c, such that it can still be 0?

Thierry

[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] pwm: lpc32xx - Fix the PWM polarity
  2012-11-05 21:03 ` Thierry Reding
@ 2012-11-06  9:36   ` Roland Stigge
       [not found]     ` <CAAAP30HwBzYFpy942UyiQX2SkzV4naBbhwichp201bvfEm2mxA@mail.gmail.com>
  0 siblings, 1 reply; 13+ messages in thread
From: Roland Stigge @ 2012-11-06  9:36 UTC (permalink / raw)
  To: Thierry Reding; +Cc: Alban Bedel, linux-kernel, Alexandre Pereira da Silva

On 05/11/12 22:03, Thierry Reding wrote:
> Cc'ing Roland and Alexandre. What do you guys think?
> 
> On Mon, Nov 05, 2012 at 05:48:45PM +0100, Alban Bedel wrote:
>> Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de> --- 
>> drivers/pwm/pwm-lpc32xx.c |    6 +++++- 1 files changed, 5
>> insertions(+), 1 deletions(-)
>> 
>> diff --git a/drivers/pwm/pwm-lpc32xx.c
>> b/drivers/pwm/pwm-lpc32xx.c index adb87f0..a2704b8 100644 ---
>> a/drivers/pwm/pwm-lpc32xx.c +++ b/drivers/pwm/pwm-lpc32xx.c @@
>> -51,7 +51,11 @@ static int lpc32xx_pwm_config(struct pwm_chip
>> *chip, struct pwm_device *pwm,
>> 
>> c = 256 * duty_ns; do_div(c, period_ns); -	duty_cycles = c; +	if
>> (c > 255) +		c = 255; +	if (c < 1) +		c = 1; +	duty_cycles = 256
>> - c;
>> 
>> writel(PWM_ENABLE | PWM_RELOADV(period_cycles) |
>> PWM_DUTY(duty_cycles), lpc32xx->base + (pwm->hwpwm << 2));
> 
> Shouldn't duty_cycles rather be 255 - c, such that it can still be
> 0?
> 
> Thierry

According to the Manual: [Low]/[High] = [PWM_DUTY] / [256-PWM_DUTY],
i.e., the PWM polarity inversion looks good.

However, as Thierry pointed out, the valid range 0..255 should be
maintained differently, maybe:

if (c > 255)
	c = 255;
duty_cycles = 255 - c;

?

Thanks,

Roland

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] pwm: lpc32xx - Fix the PWM polarity
       [not found]     ` <CAAAP30HwBzYFpy942UyiQX2SkzV4naBbhwichp201bvfEm2mxA@mail.gmail.com>
@ 2012-11-06 17:19       ` Alban Bedel
  2012-11-07 15:25         ` Alban Bedel
  0 siblings, 1 reply; 13+ messages in thread
From: Alban Bedel @ 2012-11-06 17:19 UTC (permalink / raw)
  To: Alexandre Pereira da Silva
  Cc: Roland Stigge, Thierry Reding, LKML, Alban Bedel

On Tue, 6 Nov 2012 07:47:22 -0200
Alexandre Pereira da Silva <aletes.xgr@gmail.com> wrote:

> Can you test the 0 and 255 values on actual hardware and see the effective
> values?

0   ->   0%
1   ->  99%
128 ->  50%
255 ->   1%

So yes 0 mean 256.

> It may be handled as the RELOADV where 0 really means 256. If so, you can
> use the same logic I used originally on the frequency division.

I'll look at this and submit a new patch.

Alban

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH] pwm: lpc32xx - Fix the PWM polarity
  2012-11-06 17:19       ` Alban Bedel
@ 2012-11-07 15:25         ` Alban Bedel
  2012-11-07 15:58           ` Alexandre Pereira da Silva
  2012-11-08  9:51           ` Roland Stigge
  0 siblings, 2 replies; 13+ messages in thread
From: Alban Bedel @ 2012-11-07 15:25 UTC (permalink / raw)
  To: Thierry Reding
  Cc: LKML, Roland Stigge, Alexandre Pereira da Silva, Alban Bedel

Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de>
---
 drivers/pwm/pwm-lpc32xx.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/drivers/pwm/pwm-lpc32xx.c b/drivers/pwm/pwm-lpc32xx.c
index adb87f0..0dc278d 100644
--- a/drivers/pwm/pwm-lpc32xx.c
+++ b/drivers/pwm/pwm-lpc32xx.c
@@ -51,7 +51,11 @@ static int lpc32xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
 
 	c = 256 * duty_ns;
 	do_div(c, period_ns);
-	duty_cycles = c;
+	if (c == 0)
+		c = 256;
+	if (c > 255)
+		c = 255;
+	duty_cycles = 256 - c;
 
 	writel(PWM_ENABLE | PWM_RELOADV(period_cycles) | PWM_DUTY(duty_cycles),
 		lpc32xx->base + (pwm->hwpwm << 2));
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH] pwm: lpc32xx - Fix the PWM polarity
  2012-11-07 15:25         ` Alban Bedel
@ 2012-11-07 15:58           ` Alexandre Pereira da Silva
  2012-11-08  9:51           ` Roland Stigge
  1 sibling, 0 replies; 13+ messages in thread
From: Alexandre Pereira da Silva @ 2012-11-07 15:58 UTC (permalink / raw)
  To: Alban Bedel; +Cc: Thierry Reding, LKML, Roland Stigge

On Wed, Nov 7, 2012 at 1:25 PM, Alban Bedel
<alban.bedel@avionic-design.de> wrote:
> Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de>

Acked-by: Alexandre Pereira da Silva <aletes.xgr@gmail.com>

> ---
>  drivers/pwm/pwm-lpc32xx.c |    6 +++++-
>  1 files changed, 5 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/pwm/pwm-lpc32xx.c b/drivers/pwm/pwm-lpc32xx.c
> index adb87f0..0dc278d 100644
> --- a/drivers/pwm/pwm-lpc32xx.c
> +++ b/drivers/pwm/pwm-lpc32xx.c
> @@ -51,7 +51,11 @@ static int lpc32xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
>
>         c = 256 * duty_ns;
>         do_div(c, period_ns);
> -       duty_cycles = c;
> +       if (c == 0)
> +               c = 256;
> +       if (c > 255)
> +               c = 255;
> +       duty_cycles = 256 - c;
>
>         writel(PWM_ENABLE | PWM_RELOADV(period_cycles) | PWM_DUTY(duty_cycles),
>                 lpc32xx->base + (pwm->hwpwm << 2));
> --
> 1.7.0.4
>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] pwm: lpc32xx - Fix the PWM polarity
  2012-11-07 15:25         ` Alban Bedel
  2012-11-07 15:58           ` Alexandre Pereira da Silva
@ 2012-11-08  9:51           ` Roland Stigge
  2012-11-08 10:33             ` Alban Bedel
  1 sibling, 1 reply; 13+ messages in thread
From: Roland Stigge @ 2012-11-08  9:51 UTC (permalink / raw)
  To: Alban Bedel; +Cc: Thierry Reding, LKML, Alexandre Pereira da Silva

On 07/11/12 16:25, Alban Bedel wrote:
> Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de>
> ---
>  drivers/pwm/pwm-lpc32xx.c |    6 +++++-
>  1 files changed, 5 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/pwm/pwm-lpc32xx.c b/drivers/pwm/pwm-lpc32xx.c
> index adb87f0..0dc278d 100644
> --- a/drivers/pwm/pwm-lpc32xx.c
> +++ b/drivers/pwm/pwm-lpc32xx.c
> @@ -51,7 +51,11 @@ static int lpc32xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
>  
>  	c = 256 * duty_ns;
>  	do_div(c, period_ns);
> -	duty_cycles = c;
> +	if (c == 0)
> +		c = 256;
> +	if (c > 255)
> +		c = 255;
> +	duty_cycles = 256 - c;

Except for the range check (for the original c > 255), this results in:

	duty_cycles = 256 - c

except for (c == 0) where

	duty_cycles = 1

which actually is

	duty_cycles = (256 - c) - 255

(think with the original c)

i.e. nearly a polarity inversion in the case of (c == 0).

Why is the case (c == 0) so special here? Maybe you can document this,
if it is really intended?

>  
>  	writel(PWM_ENABLE | PWM_RELOADV(period_cycles) | PWM_DUTY(duty_cycles),
>  		lpc32xx->base + (pwm->hwpwm << 2));


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] pwm: lpc32xx - Fix the PWM polarity
  2012-11-08  9:51           ` Roland Stigge
@ 2012-11-08 10:33             ` Alban Bedel
  2012-11-08 10:44               ` Roland Stigge
  0 siblings, 1 reply; 13+ messages in thread
From: Alban Bedel @ 2012-11-08 10:33 UTC (permalink / raw)
  To: Roland Stigge; +Cc: Thierry Reding, LKML, Alexandre Pereira da Silva

On Thu, 08 Nov 2012 10:51:35 +0100
Roland Stigge <stigge@antcom.de> wrote:

> On 07/11/12 16:25, Alban Bedel wrote:
> > Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de>
> > ---
> >  drivers/pwm/pwm-lpc32xx.c |    6 +++++-
> >  1 files changed, 5 insertions(+), 1 deletions(-)
> > 
> > diff --git a/drivers/pwm/pwm-lpc32xx.c b/drivers/pwm/pwm-lpc32xx.c
> > index adb87f0..0dc278d 100644
> > --- a/drivers/pwm/pwm-lpc32xx.c
> > +++ b/drivers/pwm/pwm-lpc32xx.c
> > @@ -51,7 +51,11 @@ static int lpc32xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
> >  
> >  	c = 256 * duty_ns;
> >  	do_div(c, period_ns);
> > -	duty_cycles = c;
> > +	if (c == 0)
> > +		c = 256;
> > +	if (c > 255)
> > +		c = 255;
> > +	duty_cycles = 256 - c;
> 
> Except for the range check (for the original c > 255), this results in:
> 
> 	duty_cycles = 256 - c
> 
> except for (c == 0) where
> 
> 	duty_cycles = 1

No it lead to duty_cycles = 0

> which actually is
> 
> 	duty_cycles = (256 - c) - 255
> 
> (think with the original c)
> 
> i.e. nearly a polarity inversion in the case of (c == 0).
> 
> Why is the case (c == 0) so special here? Maybe you can document this,
> if it is really intended?

It is intended, the formular for duty value in the register is:

duty = (256 - 256*duty_ns/period_ns) % 256

But the code avoid the modulo by clamping '256*duty_ns/period_ns' to 1-256.

Perhaps something like:

if (c > 255)
	c = 255;
duty_cycles = (256 - c) % 256;

would be easier to understand.

Alban

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] pwm: lpc32xx - Fix the PWM polarity
  2012-11-08 10:33             ` Alban Bedel
@ 2012-11-08 10:44               ` Roland Stigge
  2012-11-08 11:23                 ` Alban Bedel
  0 siblings, 1 reply; 13+ messages in thread
From: Roland Stigge @ 2012-11-08 10:44 UTC (permalink / raw)
  To: Alban Bedel; +Cc: Thierry Reding, LKML, Alexandre Pereira da Silva

On 08/11/12 11:33, Alban Bedel wrote:
> On Thu, 08 Nov 2012 10:51:35 +0100
> Roland Stigge <stigge@antcom.de> wrote:
> 
>> On 07/11/12 16:25, Alban Bedel wrote:
>>> Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de>
>>> ---
>>>  drivers/pwm/pwm-lpc32xx.c |    6 +++++-
>>>  1 files changed, 5 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/drivers/pwm/pwm-lpc32xx.c b/drivers/pwm/pwm-lpc32xx.c
>>> index adb87f0..0dc278d 100644
>>> --- a/drivers/pwm/pwm-lpc32xx.c
>>> +++ b/drivers/pwm/pwm-lpc32xx.c
>>> @@ -51,7 +51,11 @@ static int lpc32xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
>>>  
>>>  	c = 256 * duty_ns;
>>>  	do_div(c, period_ns);
>>> -	duty_cycles = c;
>>> +	if (c == 0)
>>> +		c = 256;
>>> +	if (c > 255)
>>> +		c = 255;
>>> +	duty_cycles = 256 - c;
>>
>> Except for the range check (for the original c > 255), this results in:
>>
>> 	duty_cycles = 256 - c
>>
>> except for (c == 0) where
>>
>> 	duty_cycles = 1
> 
> No it lead to duty_cycles = 0

Let's do it step by step with the above code:

c == 0

>>> +	if (c == 0)
>>> +		c = 256;

c == 256

>>> +	if (c > 255)
>>> +		c = 255;

c == 255

>>> +	duty_cycles = 256 - c;

c == 1

See?

> 
>> which actually is
>>
>> 	duty_cycles = (256 - c) - 255
>>
>> (think with the original c)
>>
>> i.e. nearly a polarity inversion in the case of (c == 0).
>>
>> Why is the case (c == 0) so special here? Maybe you can document this,
>> if it is really intended?
> 
> It is intended, the formular for duty value in the register is:
> 
> duty = (256 - 256*duty_ns/period_ns) % 256

Where does this modulo defined? In the Manual, there is sth. like this
defined for RELOADV (tables 606+607), but not for DUTY.

Maybe I missed sth. in the manual. Link or hint appreciated!

Thanks,

Roland

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] pwm: lpc32xx - Fix the PWM polarity
  2012-11-08 10:44               ` Roland Stigge
@ 2012-11-08 11:23                 ` Alban Bedel
  2012-11-08 11:46                   ` Alban Bedel
  2012-11-08 13:12                   ` Roland Stigge
  0 siblings, 2 replies; 13+ messages in thread
From: Alban Bedel @ 2012-11-08 11:23 UTC (permalink / raw)
  To: Roland Stigge
  Cc: Thierry Reding, LKML, Alexandre Pereira da Silva, Alban Bedel

On Thu, 08 Nov 2012 11:44:48 +0100
Roland Stigge <stigge@antcom.de> wrote:

> On 08/11/12 11:33, Alban Bedel wrote:
> > On Thu, 08 Nov 2012 10:51:35 +0100
> > Roland Stigge <stigge@antcom.de> wrote:
> > 
> >> On 07/11/12 16:25, Alban Bedel wrote:
> >>> Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de>
> >>> ---
> >>>  drivers/pwm/pwm-lpc32xx.c |    6 +++++-
> >>>  1 files changed, 5 insertions(+), 1 deletions(-)
> >>>
> >>> diff --git a/drivers/pwm/pwm-lpc32xx.c b/drivers/pwm/pwm-lpc32xx.c
> >>> index adb87f0..0dc278d 100644
> >>> --- a/drivers/pwm/pwm-lpc32xx.c
> >>> +++ b/drivers/pwm/pwm-lpc32xx.c
> >>> @@ -51,7 +51,11 @@ static int lpc32xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
> >>>  
> >>>  	c = 256 * duty_ns;
> >>>  	do_div(c, period_ns);
> >>> -	duty_cycles = c;
> >>> +	if (c == 0)
> >>> +		c = 256;
> >>> +	if (c > 255)
> >>> +		c = 255;
> >>> +	duty_cycles = 256 - c;
> >>
> >> Except for the range check (for the original c > 255), this results in:
> >>
> >> 	duty_cycles = 256 - c
> >>
> >> except for (c == 0) where
> >>
> >> 	duty_cycles = 1
> > 
> > No it lead to duty_cycles = 0
> 
> Let's do it step by step with the above code:
> 
> c == 0
> 
> >>> +	if (c == 0)
> >>> +		c = 256;
> 
> c == 256
> 
> >>> +	if (c > 255)
> >>> +		c = 255;
> 
> c == 255
> 
> >>> +	duty_cycles = 256 - c;
> 
> c == 1
> 
> See?

Right, my bad.
 
> > 
> >> which actually is
> >>
> >> 	duty_cycles = (256 - c) - 255
> >>
> >> (think with the original c)
> >>
> >> i.e. nearly a polarity inversion in the case of (c == 0).
> >>
> >> Why is the case (c == 0) so special here? Maybe you can document this,
> >> if it is really intended?
> > 
> > It is intended, the formular for duty value in the register is:
> > 
> > duty = (256 - 256*duty_ns/period_ns) % 256
> 
> Where does this modulo defined? In the Manual, there is sth. like this
> defined for RELOADV (tables 606+607), but not for DUTY.
> 
> Maybe I missed sth. in the manual. Link or hint appreciated!

The manual doesn't mention this explicitly but you can see that without
the modulo when duty_ns==0 DUTY would be 256, but the register is only
8 bits wide (ie. modulo 256). I made a few test and looked at the PWM
output on a scope they confirm this:

 DUTY     HIGH LEVEL
  1         99.9%
  25        90.0%
  128       50.0%
  220       10.0%
  255        0.1%
  0          0.0%

I'll resubmit the patch with the clamping in the correct order.

Alban

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH] pwm: lpc32xx - Fix the PWM polarity
  2012-11-08 11:23                 ` Alban Bedel
@ 2012-11-08 11:46                   ` Alban Bedel
  2012-11-08 13:12                   ` Roland Stigge
  1 sibling, 0 replies; 13+ messages in thread
From: Alban Bedel @ 2012-11-08 11:46 UTC (permalink / raw)
  To: Roland Stigge
  Cc: Thierry Reding, LKML, Alexandre Pereira da Silva, Alban Bedel

The duty cycles value goes from 1 (99% HIGH) to 256 (0% HIGH) but it
is stored modulo 256 in the register as it is only 8 bits wide.

Signed-off-by: Alban Bedel <alban.bedel@avionic-design.de>
---
 drivers/pwm/pwm-lpc32xx.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/drivers/pwm/pwm-lpc32xx.c b/drivers/pwm/pwm-lpc32xx.c
index adb87f0..2590f8d 100644
--- a/drivers/pwm/pwm-lpc32xx.c
+++ b/drivers/pwm/pwm-lpc32xx.c
@@ -51,7 +51,9 @@ static int lpc32xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
 
 	c = 256 * duty_ns;
 	do_div(c, period_ns);
-	duty_cycles = c;
+	if (c > 255)
+		c = 255;
+	duty_cycles = 256 - c;
 
 	writel(PWM_ENABLE | PWM_RELOADV(period_cycles) | PWM_DUTY(duty_cycles),
 		lpc32xx->base + (pwm->hwpwm << 2));
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH] pwm: lpc32xx - Fix the PWM polarity
  2012-11-08 11:23                 ` Alban Bedel
  2012-11-08 11:46                   ` Alban Bedel
@ 2012-11-08 13:12                   ` Roland Stigge
  2012-11-08 13:49                     ` Alexandre Pereira da Silva
  1 sibling, 1 reply; 13+ messages in thread
From: Roland Stigge @ 2012-11-08 13:12 UTC (permalink / raw)
  To: Alban Bedel; +Cc: Thierry Reding, LKML, Alexandre Pereira da Silva

On 08/11/12 12:23, Alban Bedel wrote:
>>> It is intended, the formular for duty value in the register is:
>>>
>>> duty = (256 - 256*duty_ns/period_ns) % 256
>>
>> Where does this modulo defined? In the Manual, there is sth. like this
>> defined for RELOADV (tables 606+607), but not for DUTY.
>>
>> Maybe I missed sth. in the manual. Link or hint appreciated!
> 
> The manual doesn't mention this explicitly but you can see that without
> the modulo when duty_ns==0 DUTY would be 256, but the register is only
> 8 bits wide (ie. modulo 256). I made a few test and looked at the PWM
> output on a scope they confirm this:
> 
>  DUTY     HIGH LEVEL
>   1         99.9%
>   25        90.0%
>   128       50.0%
>   220       10.0%
>   255        0.1%
>   0          0.0%
> 
> I'll resubmit the patch with the clamping in the correct order.

Thanks for measuring. With this, your resubmitted patch make much more
sense now.

Roland

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] pwm: lpc32xx - Fix the PWM polarity
  2012-11-08 13:12                   ` Roland Stigge
@ 2012-11-08 13:49                     ` Alexandre Pereira da Silva
  0 siblings, 0 replies; 13+ messages in thread
From: Alexandre Pereira da Silva @ 2012-11-08 13:49 UTC (permalink / raw)
  To: Roland Stigge; +Cc: Alban Bedel, Thierry Reding, LKML

On Thu, Nov 8, 2012 at 11:12 AM, Roland Stigge <stigge@antcom.de> wrote:
> On 08/11/12 12:23, Alban Bedel wrote:
>>>> It is intended, the formular for duty value in the register is:
>>>>
>>>> duty = (256 - 256*duty_ns/period_ns) % 256
>>>
>>> Where does this modulo defined? In the Manual, there is sth. like this
>>> defined for RELOADV (tables 606+607), but not for DUTY.
>>>
>>> Maybe I missed sth. in the manual. Link or hint appreciated!
>>
>> The manual doesn't mention this explicitly but you can see that without
>> the modulo when duty_ns==0 DUTY would be 256, but the register is only
>> 8 bits wide (ie. modulo 256). I made a few test and looked at the PWM
>> output on a scope they confirm this:
>>
>>  DUTY     HIGH LEVEL
>>   1         99.9%
>>   25        90.0%
>>   128       50.0%
>>   220       10.0%
>>   255        0.1%
>>   0          0.0%
>>
>> I'll resubmit the patch with the clamping in the correct order.
>
> Thanks for measuring. With this, your resubmitted patch make much more
> sense now.
>
> Roland

Alban,

I think you should include this measurements on the source code as
comments, for future reference.

Thanks.

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2012-11-08 13:49 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-11-05 16:48 [PATCH] pwm: lpc32xx - Fix the PWM polarity Alban Bedel
2012-11-05 21:03 ` Thierry Reding
2012-11-06  9:36   ` Roland Stigge
     [not found]     ` <CAAAP30HwBzYFpy942UyiQX2SkzV4naBbhwichp201bvfEm2mxA@mail.gmail.com>
2012-11-06 17:19       ` Alban Bedel
2012-11-07 15:25         ` Alban Bedel
2012-11-07 15:58           ` Alexandre Pereira da Silva
2012-11-08  9:51           ` Roland Stigge
2012-11-08 10:33             ` Alban Bedel
2012-11-08 10:44               ` Roland Stigge
2012-11-08 11:23                 ` Alban Bedel
2012-11-08 11:46                   ` Alban Bedel
2012-11-08 13:12                   ` Roland Stigge
2012-11-08 13:49                     ` Alexandre Pereira da Silva

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).