From patchwork Thu Jan 21 20:24:10 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 105024 Delivered-To: patch@linaro.org Received: by 10.112.130.2 with SMTP id oa2csp225391lbb; Thu, 21 Jan 2016 12:24:41 -0800 (PST) X-Received: by 10.66.120.200 with SMTP id le8mr63700717pab.61.1453407880220; Thu, 21 Jan 2016 12:24:40 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id or3si4002823pac.233.2016.01.21.12.24.39; Thu, 21 Jan 2016 12:24:40 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759662AbcAUUYa (ORCPT + 30 others); Thu, 21 Jan 2016 15:24:30 -0500 Received: from mezzanine.sirena.org.uk ([106.187.55.193]:38977 "EHLO mezzanine.sirena.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753417AbcAUUYY (ORCPT ); Thu, 21 Jan 2016 15:24:24 -0500 Received: from debutante.sirena.org.uk ([2a01:348:6:8808:fab::3] helo=debutante) by mezzanine.sirena.org.uk with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1aMLmF-0004bd-HS; Thu, 21 Jan 2016 20:24:19 +0000 Received: from broonie by debutante with local (Exim 4.86) (envelope-from ) id 1aMLmC-00026N-IW; Thu, 21 Jan 2016 20:24:16 +0000 From: Mark Brown To: Paul Kocialkowski Cc: Liam Girdwood , linux-kernel@vger.kernel.org, Mark Brown Date: Thu, 21 Jan 2016 20:24:10 +0000 Message-Id: <1453407851-8039-1-git-send-email-broonie@kernel.org> X-Mailer: git-send-email 2.7.0.rc3 X-SA-Exim-Connect-IP: 2a01:348:6:8808:fab::3 X-SA-Exim-Mail-From: broonie@sirena.org.uk X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on mezzanine.sirena.org.uk X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 Subject: [PATCH 1/2] regulator: core: Use a bitfield for continuous_voltage_range X-SA-Exim-Version: 4.2.1 (built Mon, 26 Dec 2011 16:24:06 +0000) X-SA-Exim-Scanned: Yes (on mezzanine.sirena.org.uk) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Using a bitfield enables the compiler to lay out the structure more efficiently when we have other boolean flags since multiple values can be included in a single byte. Signed-off-by: Mark Brown --- include/linux/regulator/driver.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.7.0.rc3 diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h index 16ac9e108806..3ac0f306f033 100644 --- a/include/linux/regulator/driver.h +++ b/include/linux/regulator/driver.h @@ -281,7 +281,7 @@ struct regulator_desc { const struct regulator_desc *, struct regulator_config *); int id; - bool continuous_voltage_range; + unsigned int continuous_voltage_range:1; unsigned n_voltages; const struct regulator_ops *ops; int irq; From patchwork Thu Jan 21 20:24:11 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 105023 Delivered-To: patch@linaro.org Received: by 10.112.130.2 with SMTP id oa2csp225417lbb; Thu, 21 Jan 2016 12:24:43 -0800 (PST) X-Received: by 10.66.149.7 with SMTP id tw7mr63981710pab.72.1453407880629; Thu, 21 Jan 2016 12:24:40 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id or3si4002823pac.233.2016.01.21.12.24.40; Thu, 21 Jan 2016 12:24:40 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759975AbcAUUYe (ORCPT + 30 others); Thu, 21 Jan 2016 15:24:34 -0500 Received: from mezzanine.sirena.org.uk ([106.187.55.193]:38978 "EHLO mezzanine.sirena.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753414AbcAUUYY (ORCPT ); Thu, 21 Jan 2016 15:24:24 -0500 Received: from debutante.sirena.org.uk ([2a01:348:6:8808:fab::3] helo=debutante) by mezzanine.sirena.org.uk with esmtpsa (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1aMLmG-0004be-85; Thu, 21 Jan 2016 20:24:20 +0000 Received: from broonie by debutante with local (Exim 4.86) (envelope-from ) id 1aMLmD-00026S-Fi; Thu, 21 Jan 2016 20:24:17 +0000 From: Mark Brown To: Paul Kocialkowski Cc: Liam Girdwood , linux-kernel@vger.kernel.org, Mark Brown Date: Thu, 21 Jan 2016 20:24:11 +0000 Message-Id: <1453407851-8039-2-git-send-email-broonie@kernel.org> X-Mailer: git-send-email 2.7.0.rc3 In-Reply-To: <1453407851-8039-1-git-send-email-broonie@kernel.org> References: <1453407851-8039-1-git-send-email-broonie@kernel.org> X-SA-Exim-Connect-IP: 2a01:348:6:8808:fab::3 X-SA-Exim-Mail-From: broonie@sirena.org.uk X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on mezzanine.sirena.org.uk X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 Subject: [PATCH 2/2] regulator: core: Provide per-regulator runtime PM support X-SA-Exim-Version: 4.2.1 (built Mon, 26 Dec 2011 16:24:06 +0000) X-SA-Exim-Scanned: Yes (on mezzanine.sirena.org.uk) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Provide a flag auto_runtime_pm in the regulator_desc which causes the regulator core to take a runtime PM reference to a regulator while it is enabled. This helps integration with chip wide power management for auxiliary PMICs, they may be able to implement chip wide power savings if nothing on the PMIC is in use. Signed-off-by: Mark Brown --- Not tested at all yet, pushing out for testing by others who have devices that could benefit from this. drivers/regulator/core.c | 20 ++++++++++++++++++-- include/linux/regulator/driver.h | 1 + 2 files changed, 19 insertions(+), 2 deletions(-) -- 2.7.0.rc3 diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 3308c6bb83db..968ff3081e6c 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -2059,17 +2060,23 @@ static int _regulator_do_enable(struct regulator_dev *rdev) } } + if (rdev->desc->auto_runtime_pm) { + ret = pm_runtime_get_sync(rdev->dev.parent); + if (ret < 0) + goto err; + } + if (rdev->ena_pin) { if (!rdev->ena_gpio_state) { ret = regulator_ena_gpio_ctrl(rdev, true); if (ret < 0) - return ret; + goto err_pm; rdev->ena_gpio_state = 1; } } else if (rdev->desc->ops->enable) { ret = rdev->desc->ops->enable(rdev); if (ret < 0) - return ret; + goto err_pm; } else { return -EINVAL; } @@ -2084,6 +2091,12 @@ static int _regulator_do_enable(struct regulator_dev *rdev) trace_regulator_enable_complete(rdev_get_name(rdev)); return 0; + +err_pm: + if (rdev->desc->auto_runtime_pm) + pm_runtime_put_autosuspend(rdev->dev.parent); +err: + return ret; } /* locks held by regulator_enable() */ @@ -2177,6 +2190,9 @@ static int _regulator_do_disable(struct regulator_dev *rdev) return ret; } + if (rdev->desc->auto_runtime_pm) + pm_runtime_put_autosuspend(rdev->dev.parent); + /* cares about last_off_jiffy only if off_on_delay is required by * device. */ diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h index 3ac0f306f033..dccea032a143 100644 --- a/include/linux/regulator/driver.h +++ b/include/linux/regulator/driver.h @@ -282,6 +282,7 @@ struct regulator_desc { struct regulator_config *); int id; unsigned int continuous_voltage_range:1; + unsigned int auto_runtime_pm:1; unsigned n_voltages; const struct regulator_ops *ops; int irq;