From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932454AbbJMKqL (ORCPT ); Tue, 13 Oct 2015 06:46:11 -0400 Received: from metis.ext.4.pengutronix.de ([92.198.50.35]:41877 "EHLO metis.ext.pengutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932372AbbJMKqI (ORCPT ); Tue, 13 Oct 2015 06:46:08 -0400 From: Sascha Hauer To: linux-kernel@vger.kernel.org Cc: Liam Girdwood , Mark Brown , kernel@pengutronix.de, alkml@pengutronix.de, Sascha Hauer Subject: [PATCH 2/8] regulator: core: create unlocked version of regulator_set_voltage Date: Tue, 13 Oct 2015 12:45:25 +0200 Message-Id: <1444733131-26995-3-git-send-email-s.hauer@pengutronix.de> X-Mailer: git-send-email 2.6.1 In-Reply-To: <1444733131-26995-1-git-send-email-s.hauer@pengutronix.de> References: <1444733131-26995-1-git-send-email-s.hauer@pengutronix.de> X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::7 X-SA-Exim-Mail-From: sha@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The unlocked version will be needed when we start propagating voltage changes to the supply regulators. Signed-off-by: Sascha Hauer --- drivers/regulator/core.c | 57 +++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index bab426d..b814451 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -2725,33 +2725,14 @@ static int _regulator_do_set_voltage(struct regulator_dev *rdev, return ret; } -/** - * regulator_set_voltage - set regulator output voltage - * @regulator: regulator source - * @min_uV: Minimum required voltage in uV - * @max_uV: Maximum acceptable voltage in uV - * - * Sets a voltage regulator to the desired output voltage. This can be set - * during any regulator state. IOW, regulator can be disabled or enabled. - * - * If the regulator is enabled then the voltage will change to the new value - * immediately otherwise if the regulator is disabled the regulator will - * output at the new voltage when enabled. - * - * NOTE: If the regulator is shared between several devices then the lowest - * request voltage that meets the system constraints will be used. - * Regulator system constraints must be set for this regulator before - * calling this function otherwise this call will fail. - */ -int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV) +static int regulator_set_voltage_unlocked(struct regulator *regulator, + int min_uV, int max_uV) { struct regulator_dev *rdev = regulator->rdev; int ret = 0; int old_min_uV, old_max_uV; int current_uV; - mutex_lock(&rdev->mutex); - /* If we're setting the same range as last time the change * should be a noop (some cpufreq implementations use the same * voltage for multiple frequencies, for example). @@ -2799,12 +2780,42 @@ int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV) goto out2; out: - mutex_unlock(&rdev->mutex); return ret; out2: regulator->min_uV = old_min_uV; regulator->max_uV = old_max_uV; - mutex_unlock(&rdev->mutex); + + return ret; +} + +/** + * regulator_set_voltage - set regulator output voltage + * @regulator: regulator source + * @min_uV: Minimum required voltage in uV + * @max_uV: Maximum acceptable voltage in uV + * + * Sets a voltage regulator to the desired output voltage. This can be set + * during any regulator state. IOW, regulator can be disabled or enabled. + * + * If the regulator is enabled then the voltage will change to the new value + * immediately otherwise if the regulator is disabled the regulator will + * output at the new voltage when enabled. + * + * NOTE: If the regulator is shared between several devices then the lowest + * request voltage that meets the system constraints will be used. + * Regulator system constraints must be set for this regulator before + * calling this function otherwise this call will fail. + */ +int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV) +{ + int ret = 0; + + mutex_lock(®ulator->rdev->mutex); + + ret = regulator_set_voltage_unlocked(regulator, min_uV, max_uV); + + mutex_unlock(®ulator->rdev->mutex); + return ret; } EXPORT_SYMBOL_GPL(regulator_set_voltage); -- 2.6.1