All of lore.kernel.org
 help / color / mirror / Atom feed
From: Billy Tsai <billy_tsai@aspeedtech.com>
To: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Cc: "lee.jones@linaro.org" <lee.jones@linaro.org>,
	"robh+dt@kernel.org" <robh+dt@kernel.org>,
	"joel@jms.id.au" <joel@jms.id.au>,
	"andrew@aj.id.au" <andrew@aj.id.au>,
	"thierry.reding@gmail.com" <thierry.reding@gmail.com>,
	"p.zabel@pengutronix.de" <p.zabel@pengutronix.de>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	"linux-aspeed@lists.ozlabs.org" <linux-aspeed@lists.ozlabs.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-pwm@vger.kernel.org" <linux-pwm@vger.kernel.org>,
	BMC-SW <BMC-SW@aspeedtech.com>
Subject: Re: [v9 2/2] pwm: Add Aspeed ast2600 PWM support
Date: Mon, 26 Jul 2021 05:14:09 +0000	[thread overview]
Message-ID: <80C715D4-5B8A-4FC9-AD60-106F682DC929@aspeedtech.com> (raw)
In-Reply-To: <20210723201250.x4ki5ackfznmn4aw@pengutronix.de>

Hi Uwe

On 2021/7/24, 4:13 AM, "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de> wrote:

    >   On Fri, Jul 23, 2021 at 04:23:23AM +0000, Billy Tsai wrote:
    >   > On 2021/7/23, 3:17 AM, "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de> wrote:
    >   > 
    >   >     On Wed, Jul 21, 2021 at 10:52:21AM +0000, Billy Tsai wrote:
    >   >     >> Hi Uwe,
    >   >     >> 
    >   >     >>     On 2021/7/16, 6:13 PM, "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de> wrote:
    >   >     >> 
    >   >     >>         On Fri, Jul 16, 2021 at 09:22:22AM +0000, Billy Tsai wrote:
    >   >     >>         >> On 2021/7/16, 3:10 PM, "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de> wrote:
    >   >     >>         >> 
    >   >     >>         >>     On Fri, Jul 16, 2021 at 01:48:20AM +0000, Billy Tsai wrote:
    >   >     >>         >>     >> On 2021/7/15, 11:06 PM, "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>> wrote:
    >   >     >>         >>     >>     > Another is: The PWM doesn't support duty_cycle 0, on such a request the
    >   >     >>         >>     >>     > PWM is disabled which results in a constant inactive level.
    >   >     >>         >>     >> 
    >   >     >>         >>     >>     > (This is correct, is it? Or does it yield a constant 0 level?)
    >   >     >>         >>     >> 
    >   >     >>         >>     >> Our pwm can support duty_cycle 0 by unset CLK_ENABLE.
    >   >     >>         >> 
    >   >     >>         >>     > This has a slightly different semantic though. Some consumer might
    >   >     >>         >>     > expect that the following sequence:
    >   >     >>         >> 
    >   >     >>         >>     >	pwm_apply(mypwm, { .period = 10000, .duty_cycle = 10000, .enabled = true })
    >   >     >>         >>     >	pwm_apply(mypwm, { .period = 10000, .duty_cycle = 0, .enabled = true })
    >   >     >>         >>     >	pwm_apply(mypwm, { .period = 10000, .duty_cycle = 10000, .enabled = true })
    >   >     >>         >> 
    >   >     >>         >>     > results in the output being low for an integer multiple of 10 µs. This
    >   >     >>         >>     > isn't given with setting CLK_ENABLE to zero, is it? (I didn't recheck,
    >   >     >>         >>     > if the PWM doesn't complete periods on reconfiguration this doesn't
    >   >     >>         >>     > matter much though.)
    >   >     >>         >> Thanks for the explanation.
    >   >     >>         >> Our hardware actually can only support duty from 1/256 to 256/256.
    >   >     >>         >> For this situation I can do possible solution:
    >   >     >>         >> We can though change polarity to meet this requirement. Inverse the pin and use
    >   >     >>         >> duty_cycle 100. 
    >   >     >>         >> But I think this is not a good solution for this problem right?
    >   >     >> 
    >   >     >>         > If this doesn't result in more glitches that would be fine for me.
    >   >     >>         > (Assuming it is documented good enough in the code to be
    >   >     >>         > understandable.)
    >   >     >> 
    >   >     >>     > The polarity of our pwm controller will affect the duty cycle range:
    >   >     >>     > PWM_POLARITY_INVERSED : Support duty_cycle from 0% to 99%
    >   >     >>     > PWM_POLARITY_NORMAL: Support duty_cycle from 1% to 100%
    >   >     >>     > Dynamic change polarity will result in more glitches. Thus, this will become
    >   >     >>     > a trade-off between 100% and 0% duty_cycle support for user to use our pwm device.
    >   >     >>     > I will document it and send next patch.
    >   >     >> 
    >   >     >> For handling the situation that the user want to set the duty cycle to 0%, the driver can:
    >   >     >> 1. Just return the error.
    >   >     >> 2. Use the minimum duty cycle value.
    >   >     >> I don't know which solution will be the better way or others.
    >   >     >> I would be grateful if you can give me some suggestion about this problem.
    >   > 
    >   >     > I thought if you disable the PWM it emits the inactive level? Then this
    >   >     > is the best you can do if duty_cycle = 0 is requested.
    >   > 
    >   > Thanks for your quick reply.
    >   > When duty_cycle = 0 is requested my driver currently will emit the inactive level.
    >   > So, the next patch I need to do is to add the comment about this?

    >   Not sure I got the complete picture now. The things I consider important
    >   are:

    >    - If your hardware cannot emit a 100% or 0% relative duty cycle, note
    >      this in the Limitations section

    >    - Assuming your PWM emits the inactive level when disabled (that is 0
    >      for PWM_POLARITY_NORMAL and 1 for PWM_POLARITY_INVERSED) this is the
    >      best that can be done when a 0% relative duty cycle is requested
    >      (assuming the hardware cannot implement that in a normal way).

Our hardware is the same as this description. 
So I didn't need to add the limitations about the duty cycle, right?
Or I need to note that the duty cycle 0% is just the inactive output that doesn't have the period concept.

    >   I hope this answered your remaining questions.

Thanks.


WARNING: multiple messages have this Message-ID (diff)
From: Billy Tsai <billy_tsai@aspeedtech.com>
To: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Cc: "lee.jones@linaro.org" <lee.jones@linaro.org>,
	"robh+dt@kernel.org" <robh+dt@kernel.org>,
	"joel@jms.id.au" <joel@jms.id.au>,
	"andrew@aj.id.au" <andrew@aj.id.au>,
	"thierry.reding@gmail.com" <thierry.reding@gmail.com>,
	"p.zabel@pengutronix.de" <p.zabel@pengutronix.de>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	"linux-aspeed@lists.ozlabs.org" <linux-aspeed@lists.ozlabs.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-pwm@vger.kernel.org" <linux-pwm@vger.kernel.org>,
	BMC-SW <BMC-SW@aspeedtech.com>
Subject: Re: [v9 2/2] pwm: Add Aspeed ast2600 PWM support
Date: Mon, 26 Jul 2021 05:14:09 +0000	[thread overview]
Message-ID: <80C715D4-5B8A-4FC9-AD60-106F682DC929@aspeedtech.com> (raw)
In-Reply-To: <20210723201250.x4ki5ackfznmn4aw@pengutronix.de>

Hi Uwe

On 2021/7/24, 4:13 AM, "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de> wrote:

    >   On Fri, Jul 23, 2021 at 04:23:23AM +0000, Billy Tsai wrote:
    >   > On 2021/7/23, 3:17 AM, "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de> wrote:
    >   > 
    >   >     On Wed, Jul 21, 2021 at 10:52:21AM +0000, Billy Tsai wrote:
    >   >     >> Hi Uwe,
    >   >     >> 
    >   >     >>     On 2021/7/16, 6:13 PM, "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de> wrote:
    >   >     >> 
    >   >     >>         On Fri, Jul 16, 2021 at 09:22:22AM +0000, Billy Tsai wrote:
    >   >     >>         >> On 2021/7/16, 3:10 PM, "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de> wrote:
    >   >     >>         >> 
    >   >     >>         >>     On Fri, Jul 16, 2021 at 01:48:20AM +0000, Billy Tsai wrote:
    >   >     >>         >>     >> On 2021/7/15, 11:06 PM, "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>> wrote:
    >   >     >>         >>     >>     > Another is: The PWM doesn't support duty_cycle 0, on such a request the
    >   >     >>         >>     >>     > PWM is disabled which results in a constant inactive level.
    >   >     >>         >>     >> 
    >   >     >>         >>     >>     > (This is correct, is it? Or does it yield a constant 0 level?)
    >   >     >>         >>     >> 
    >   >     >>         >>     >> Our pwm can support duty_cycle 0 by unset CLK_ENABLE.
    >   >     >>         >> 
    >   >     >>         >>     > This has a slightly different semantic though. Some consumer might
    >   >     >>         >>     > expect that the following sequence:
    >   >     >>         >> 
    >   >     >>         >>     >	pwm_apply(mypwm, { .period = 10000, .duty_cycle = 10000, .enabled = true })
    >   >     >>         >>     >	pwm_apply(mypwm, { .period = 10000, .duty_cycle = 0, .enabled = true })
    >   >     >>         >>     >	pwm_apply(mypwm, { .period = 10000, .duty_cycle = 10000, .enabled = true })
    >   >     >>         >> 
    >   >     >>         >>     > results in the output being low for an integer multiple of 10 µs. This
    >   >     >>         >>     > isn't given with setting CLK_ENABLE to zero, is it? (I didn't recheck,
    >   >     >>         >>     > if the PWM doesn't complete periods on reconfiguration this doesn't
    >   >     >>         >>     > matter much though.)
    >   >     >>         >> Thanks for the explanation.
    >   >     >>         >> Our hardware actually can only support duty from 1/256 to 256/256.
    >   >     >>         >> For this situation I can do possible solution:
    >   >     >>         >> We can though change polarity to meet this requirement. Inverse the pin and use
    >   >     >>         >> duty_cycle 100. 
    >   >     >>         >> But I think this is not a good solution for this problem right?
    >   >     >> 
    >   >     >>         > If this doesn't result in more glitches that would be fine for me.
    >   >     >>         > (Assuming it is documented good enough in the code to be
    >   >     >>         > understandable.)
    >   >     >> 
    >   >     >>     > The polarity of our pwm controller will affect the duty cycle range:
    >   >     >>     > PWM_POLARITY_INVERSED : Support duty_cycle from 0% to 99%
    >   >     >>     > PWM_POLARITY_NORMAL: Support duty_cycle from 1% to 100%
    >   >     >>     > Dynamic change polarity will result in more glitches. Thus, this will become
    >   >     >>     > a trade-off between 100% and 0% duty_cycle support for user to use our pwm device.
    >   >     >>     > I will document it and send next patch.
    >   >     >> 
    >   >     >> For handling the situation that the user want to set the duty cycle to 0%, the driver can:
    >   >     >> 1. Just return the error.
    >   >     >> 2. Use the minimum duty cycle value.
    >   >     >> I don't know which solution will be the better way or others.
    >   >     >> I would be grateful if you can give me some suggestion about this problem.
    >   > 
    >   >     > I thought if you disable the PWM it emits the inactive level? Then this
    >   >     > is the best you can do if duty_cycle = 0 is requested.
    >   > 
    >   > Thanks for your quick reply.
    >   > When duty_cycle = 0 is requested my driver currently will emit the inactive level.
    >   > So, the next patch I need to do is to add the comment about this?

    >   Not sure I got the complete picture now. The things I consider important
    >   are:

    >    - If your hardware cannot emit a 100% or 0% relative duty cycle, note
    >      this in the Limitations section

    >    - Assuming your PWM emits the inactive level when disabled (that is 0
    >      for PWM_POLARITY_NORMAL and 1 for PWM_POLARITY_INVERSED) this is the
    >      best that can be done when a 0% relative duty cycle is requested
    >      (assuming the hardware cannot implement that in a normal way).

Our hardware is the same as this description. 
So I didn't need to add the limitations about the duty cycle, right?
Or I need to note that the duty cycle 0% is just the inactive output that doesn't have the period concept.

    >   I hope this answered your remaining questions.

Thanks.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2021-07-26  5:14 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-09  6:52 [v9 0/2] Support pwm driver for aspeed ast26xx Billy Tsai
2021-07-09  6:52 ` Billy Tsai
2021-07-09  6:52 ` [v9 1/2] dt-bindings: Add bindings for aspeed pwm-tach Billy Tsai
2021-07-09  6:52   ` Billy Tsai
2021-07-13 22:14   ` Rob Herring
2021-07-13 22:14     ` Rob Herring
2021-07-14  4:02     ` Billy Tsai
2021-07-14  4:02       ` Billy Tsai
2021-10-04  1:46       ` Billy Tsai
2021-10-04  1:46         ` Billy Tsai
2021-07-09  6:52 ` [v9 2/2] pwm: Add Aspeed ast2600 PWM support Billy Tsai
2021-07-09  6:52   ` Billy Tsai
2021-07-15 15:05   ` Uwe Kleine-König
2021-07-15 15:05     ` Uwe Kleine-König
2021-07-16  1:48     ` Billy Tsai
2021-07-16  1:48       ` Billy Tsai
2021-07-16  7:09       ` Uwe Kleine-König
2021-07-16  7:09         ` Uwe Kleine-König
2021-07-16  9:22         ` Billy Tsai
2021-07-16  9:22           ` Billy Tsai
2021-07-16 10:13           ` Uwe Kleine-König
2021-07-16 10:13             ` Uwe Kleine-König
2021-07-16 10:56             ` Billy Tsai
2021-07-16 10:56               ` Billy Tsai
2021-07-21 10:52               ` Billy Tsai
2021-07-21 10:52                 ` Billy Tsai
2021-07-21 12:48                 ` Uwe Kleine-König
2021-07-21 12:48                   ` Uwe Kleine-König
2021-07-23  4:23                   ` Billy Tsai
2021-07-23  4:23                     ` Billy Tsai
2021-07-23 20:12                     ` Uwe Kleine-König
2021-07-23 20:12                       ` Uwe Kleine-König
2021-07-26  5:14                       ` Billy Tsai [this message]
2021-07-26  5:14                         ` Billy Tsai

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=80C715D4-5B8A-4FC9-AD60-106F682DC929@aspeedtech.com \
    --to=billy_tsai@aspeedtech.com \
    --cc=BMC-SW@aspeedtech.com \
    --cc=andrew@aj.id.au \
    --cc=devicetree@vger.kernel.org \
    --cc=joel@jms.id.au \
    --cc=lee.jones@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-aspeed@lists.ozlabs.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pwm@vger.kernel.org \
    --cc=p.zabel@pengutronix.de \
    --cc=robh+dt@kernel.org \
    --cc=thierry.reding@gmail.com \
    --cc=u.kleine-koenig@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.