Linux PWM subsystem development
 help / color / mirror / Atom feed
From: Jitao Shi <jitao.shi@mediatek.com>
To: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Cc: Thierry Reding <thierry.reding@gmail.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	linux-pwm@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org,
	srv_heupstream@mediatek.com, yingjoe.chen@mediatek.com,
	eddie.huang@mediatek.com, cawa.cheng@mediatek.com,
	bibby.hsieh@mediatek.com, ck.hu@mediatek.com, stonea168@163.com,
	huijuan.xie@mediatek.com
Subject: Re: [PATCH v4 1/3] pwm: mtk-disp: adjust the clocks to avoid them mismatch
Date: Fri, 11 Jun 2021 10:03:44 +0800	[thread overview]
Message-ID: <1623377024.24490.6.camel@mszsdaap41> (raw)
In-Reply-To: <20210606211146.eczg3skaor2jqtxi@pengutronix.de>

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

Hi,

Thanks for your review.

On Sun, 2021-06-06 at 23:11 +0200, Uwe Kleine-König wrote:

> Hello,
> 
> you missed to address Lee and me for your patch series. I just happend
> to stumble over this series by a fluke.
> 
> On Thu, Jun 03, 2021 at 06:05:29PM +0800, Jitao Shi wrote:
> > The clk_main and clk_mm clocks are still on when system enter
> > suspend. That will casue the power consumption.
> > 
> > The clocks call the clk_prepare() in probe(), but the clk_unprepare()
> > is called in remove(), it isn't called when system suspend.
> 
> The English could be improved here. Something like:
> 
> 	The clks "main" and "mm" are prepared in .probe() (and
> 	unprepared in .remove()). This results in the clocks being on
> 	during suspend which results in unnecessarily increased power
> 	consumption.
> 
> > Remove the clcok opterations from probe() and remove.
> 
> s/clcok/clock/, s/e\./e()/
> 

I'll fix them next verison.


> > Add the clk_prepare_enable() in config().
> > Add the clk_disable_unprepare() in disable().
> > 
> > Signed-off-by: Jitao Shi <jitao.shi@mediatek.com>
> > ---
> >  drivers/pwm/pwm-mtk-disp.c | 81 ++++++++++++++++----------------------
> >  1 file changed, 33 insertions(+), 48 deletions(-)
> > 
> > diff --git a/drivers/pwm/pwm-mtk-disp.c b/drivers/pwm/pwm-mtk-disp.c
> > index 9b3ba401a3db..b5771e2c54b8 100644
> > --- a/drivers/pwm/pwm-mtk-disp.c
> > +++ b/drivers/pwm/pwm-mtk-disp.c
> > @@ -47,6 +47,7 @@ struct mtk_disp_pwm {
> >  	struct clk *clk_main;
> >  	struct clk *clk_mm;
> >  	void __iomem *base;
> > +	bool enabled;
> >  };
> >  
> >  static inline struct mtk_disp_pwm *to_mtk_disp_pwm(struct pwm_chip *chip)
> > @@ -74,6 +75,22 @@ static int mtk_disp_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
> >  	u64 div, rate;
> >  	int err;
> >  
> > +	if (!mdp->enabled) {
> > +		err = clk_prepare_enable(mdp->clk_main);
> > +		if (err < 0) {
> > +			dev_err(chip->dev, "Can't enable mdp->clk_main: %d\n",
> > +				err);
> > +			return err;
> 
> Please use %pe to get symbolic error names which are better
> understandable.
> 

I'll fix them next verison.


> > +		}
> > +		err = clk_prepare_enable(mdp->clk_mm);
> > +		if (err < 0) {
> > +			dev_err(chip->dev, "Can't enable mdp->clk_mm: %d\n",
> > +				err);
> > +			clk_disable_unprepare(mdp->clk_main);
> > +			return err;
> > +		}
> > +	}
> > +
> >  	/*
> >  	 * Find period, high_width and clk_div to suit duty_ns and period_ns.
> >  	 * Calculate proper div value to keep period value in the bound.
> > @@ -87,9 +104,15 @@ static int mtk_disp_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
> >  	rate = clk_get_rate(mdp->clk_main);
> >  	clk_div = div_u64(rate * period_ns, NSEC_PER_SEC) >>
> >  			  PWM_PERIOD_BIT_WIDTH;
> > -	if (clk_div > PWM_CLKDIV_MAX)
> > +	if (clk_div > PWM_CLKDIV_MAX) {
> > +		dev_err(chip->dev, "clock rate is too high: rate = %d Hz\n",
> > +			rate);
> 
> Adding an error message here is orthogonal to this patch. Either drop it
> or mention it in the commit log please.
> 


I'll fix them next verison.


> > +		if (!mdp->enabled) {
> > +			clk_disable_unprepare(mdp->clk_mm);
> > +			clk_disable_unprepare(mdp->clk_main);
> > +		}
> >  		return -EINVAL;
> > -
> > +	}
> >  	div = NSEC_PER_SEC * (clk_div + 1);
> >  	period = div64_u64(rate * period_ns, div);
> >  	if (period > 0)
> > [...]
> > @@ -135,18 +145,9 @@ static int mtk_disp_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
> >  	struct mtk_disp_pwm *mdp = to_mtk_disp_pwm(chip);
> >  	int err;
> >  
> > -	err = clk_enable(mdp->clk_main);
> > -	if (err < 0)
> > -		return err;
> > -
> > -	err = clk_enable(mdp->clk_mm);
> > -	if (err < 0) {
> > -		clk_disable(mdp->clk_main);
> > -		return err;
> > -	}
> > -
> >  	mtk_disp_pwm_update_bits(mdp, DISP_PWM_EN, mdp->data->enable_mask,
> >  				 mdp->data->enable_mask);
> > +	mdp->enabled = true;
> 
> The modification to .enable() looks wrong. After the PWM was disabled
> the clocks are off, so .enable() must reenable them, doesn't it?
> 


I'll fix them next verison.


> >  	return 0;
> >  }
> 
> Best regards
> Uwe
> 



[-- Attachment #2: Type: text/html, Size: 7532 bytes --]

  reply	other threads:[~2021-06-11  2:03 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-03 10:05 [PATCH v4 0/3] fix the clock on/off mismatch and switch pwm api to atomic API Jitao Shi
2021-06-03 10:05 ` [PATCH v4 1/3] pwm: mtk-disp: adjust the clocks to avoid them mismatch Jitao Shi
2021-06-06 21:11   ` Uwe Kleine-König
2021-06-11  2:03     ` Jitao Shi [this message]
2021-06-03 10:05 ` [PATCH v4 2/3] pwm: mtk-disp: move the commit to clock enabled Jitao Shi
2021-06-06 21:14   ` Uwe Kleine-König
2021-06-11  2:29     ` Jitao Shi
2021-06-03 10:05 ` [PATCH v4 3/3] pwm: mtk-disp: Switch to atomic API Jitao Shi
2021-06-06 21:22   ` Uwe Kleine-König
2021-06-11  2:37     ` Jitao Shi

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=1623377024.24490.6.camel@mszsdaap41 \
    --to=jitao.shi@mediatek.com \
    --cc=bibby.hsieh@mediatek.com \
    --cc=cawa.cheng@mediatek.com \
    --cc=ck.hu@mediatek.com \
    --cc=eddie.huang@mediatek.com \
    --cc=huijuan.xie@mediatek.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-pwm@vger.kernel.org \
    --cc=matthias.bgg@gmail.com \
    --cc=srv_heupstream@mediatek.com \
    --cc=stonea168@163.com \
    --cc=thierry.reding@gmail.com \
    --cc=u.kleine-koenig@pengutronix.de \
    --cc=yingjoe.chen@mediatek.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox