Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932993AbdDGK1X (ORCPT ); Fri, 7 Apr 2017 06:27:23 -0400 Received: from hqemgate15.nvidia.com ([216.228.121.64]:5271 "EHLO hqemgate15.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932910AbdDGK1Q (ORCPT ); Fri, 7 Apr 2017 06:27:16 -0400 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Fri, 07 Apr 2017 03:27:15 -0700 Subject: Re: [PATCH V3 4/4] pwm: tegra: Add support to configure pin state in suspends/resume To: Laxman Dewangan , , References: <1491557642-15940-1-git-send-email-ldewangan@nvidia.com> <1491557642-15940-5-git-send-email-ldewangan@nvidia.com> CC: , , , , From: Jon Hunter Message-ID: Date: Fri, 7 Apr 2017 11:27:03 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <1491557642-15940-5-git-send-email-ldewangan@nvidia.com> X-Originating-IP: [10.21.132.162] X-ClientProxiedBy: DRUKMAIL101.nvidia.com (10.25.59.19) To UKMAIL101.nvidia.com (10.26.138.13) Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2313 Lines: 82 On 07/04/17 10:34, Laxman Dewangan wrote: > In some of NVIDIA Tegra's platform, PWM controller is used to > control the PWM controlled regulators. PWM signal is connected to > the VID pin of the regulator where duty cycle of PWM signal decide > the voltage level of the regulator output. > > When system enters suspend, some PWM client/slave regulator devices > require the PWM output to be tristated. > > Add support to configure the pin state via pinctrl frameworks in > suspend and active state of the system. > > Signed-off-by: Laxman Dewangan > > --- > Changes from v1: > - Use standard pinctrl names for sleep and active state. > - Use API pinctrl_pm_select_*() > > Changes from V2: > - Use returns of pinctrl_pm_select_*() > - Rephrase commit message. > --- > drivers/pwm/pwm-tegra.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/drivers/pwm/pwm-tegra.c b/drivers/pwm/pwm-tegra.c > index 21518be..9c7f180 100644 > --- a/drivers/pwm/pwm-tegra.c > +++ b/drivers/pwm/pwm-tegra.c > @@ -29,6 +29,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -255,6 +256,18 @@ static int tegra_pwm_remove(struct platform_device *pdev) > return pwmchip_remove(&pc->chip); > } > > +#ifdef CONFIG_PM_SLEEP > +static int tegra_pwm_suspend(struct device *dev) > +{ > + return pinctrl_pm_select_sleep_state(dev); > +} > + > +static int tegra_pwm_resume(struct device *dev) > +{ > + return pinctrl_pm_select_default_state(dev); > +} > +#endif > + > static const struct tegra_pwm_soc tegra20_pwm_soc = { > .num_channels = 4, > }; > @@ -271,10 +284,15 @@ static const struct of_device_id tegra_pwm_of_match[] = { > > MODULE_DEVICE_TABLE(of, tegra_pwm_of_match); > > +static const struct dev_pm_ops tegra_pwm_pm_ops = { > + SET_SYSTEM_SLEEP_PM_OPS(tegra_pwm_suspend, tegra_pwm_resume) > +}; > + > static struct platform_driver tegra_pwm_driver = { > .driver = { > .name = "tegra-pwm", > .of_match_table = tegra_pwm_of_match, > + .pm = &tegra_pwm_pm_ops, > }, > .probe = tegra_pwm_probe, > .remove = tegra_pwm_remove, Acked-by: Jon Hunter Cheers Jon -- nvpublic