From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161089AbcFCUjJ (ORCPT ); Fri, 3 Jun 2016 16:39:09 -0400 Received: from mail-pf0-f175.google.com ([209.85.192.175]:35826 "EHLO mail-pf0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1422697AbcFCUiw (ORCPT ); Fri, 3 Jun 2016 16:38:52 -0400 Date: Fri, 3 Jun 2016 13:38:48 -0700 From: Brian Norris To: Boris Brezillon Cc: Thierry Reding , linux-pwm@vger.kernel.org, Mark Brown , Liam Girdwood , Heiko Stuebner , linux-rockchip@lists.infradead.org, Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Milo Kim , Doug Anderson , Caesar Wang , Stephen Barber , Ajit Pal Singh , Srinivas Kandagatla , Maxime Coquelin , Patrice Chotard , kernel@stlinux.com Subject: Re: [PATCH 08/14] pwm: sti: Avoid glitches on already running PWMs Message-ID: <20160603203848.GF124478@google.com> References: <1464942192-25967-1-git-send-email-boris.brezillon@free-electrons.com> <1464942192-25967-9-git-send-email-boris.brezillon@free-electrons.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1464942192-25967-9-git-send-email-boris.brezillon@free-electrons.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jun 03, 2016 at 10:23:06AM +0200, Boris Brezillon wrote: > The current logic will disable the PWM clk even if a PWM was left > enabled by the bootloader (because it's controlling a critical device > like a regulator for example). > Keep the PWM clk enabled if at least one PWM is enabled to avoid any > glitches. > > Signed-off-by: Boris Brezillon > --- > drivers/pwm/pwm-sti.c | 17 +++++++++++++++-- > 1 file changed, 15 insertions(+), 2 deletions(-) > > diff --git a/drivers/pwm/pwm-sti.c b/drivers/pwm/pwm-sti.c > index 6300d3e..8232c5b 100644 > --- a/drivers/pwm/pwm-sti.c > +++ b/drivers/pwm/pwm-sti.c > @@ -340,7 +340,7 @@ static int sti_pwm_probe(struct platform_device *pdev) > struct sti_pwm_compat_data *cdata; > struct sti_pwm_chip *pc; > struct resource *res; > - int ret; > + int i, ret; > > pc = devm_kzalloc(dev, sizeof(*pc), GFP_KERNEL); > if (!pc) > @@ -391,7 +391,7 @@ static int sti_pwm_probe(struct platform_device *pdev) > return -EINVAL; > } > > - ret = clk_prepare(pc->clk); > + ret = clk_prepare_enable(pc->clk); > if (ret) { > dev_err(dev, "failed to prepare clock\n"); > return ret; > @@ -409,6 +409,19 @@ static int sti_pwm_probe(struct platform_device *pdev) > return ret; > } > > + /* > + * Keep the PWM clk enabled if some PWMs appear to be up and > + * running. > + */ > + for (i = 0; i < pc->chip.npwm; i++) { > + struct pwm_state state; > + > + pwm_get_state(&pc->chip.pwms[i], &state); > + if (state.enabled) Similar to pwm-rockchip: you could just do if (pwm_is_enabled(...)). Brian > + clk_enable(pc->clk); > + } > + clk_disable(pc->clk); > + > platform_set_drvdata(pdev, pc); > > return 0; > -- > 2.7.4 >