From patchwork Tue Dec 4 14:01:01 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1837651 Return-Path: X-Original-To: patchwork-linux-mmc@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id C07923FCD5 for ; Tue, 4 Dec 2012 14:01:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754064Ab2LDOBg (ORCPT ); Tue, 4 Dec 2012 09:01:36 -0500 Received: from mailout4.samsung.com ([203.254.224.34]:23341 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752990Ab2LDOBe (ORCPT ); Tue, 4 Dec 2012 09:01:34 -0500 Received: from epcpsbgm1.samsung.com (epcpsbgm1 [203.254.230.26]) by mailout4.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MEI00JU4EYKLON0@mailout4.samsung.com>; Tue, 04 Dec 2012 23:01:32 +0900 (KST) X-AuditID: cbfee61a-b7fa66d0000004cf-b2-50be023c63b1 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id 81.39.01231.C320EB05; Tue, 04 Dec 2012 23:01:32 +0900 (KST) Received: from localhost.localdomain ([106.116.147.30]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0MEI00EMKEY4BV70@mmp2.samsung.com>; Tue, 04 Dec 2012 23:01:32 +0900 (KST) From: Marek Szyprowski To: linux-kernel@vger.kernel.org, linux-mmc@vger.kernel.org Cc: Marek Szyprowski , Kyungmin Park , Mark Brown , Liam Girdwood , Chris Ball , Kevin Liu Subject: [PATCH 1/3] regulators: add regulator_can_change_voltage() function Date: Tue, 04 Dec 2012 15:01:01 +0100 Message-id: <1354629663-29091-2-git-send-email-m.szyprowski@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1354629663-29091-1-git-send-email-m.szyprowski@samsung.com> References: <1354629663-29091-1-git-send-email-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrIJMWRmVeSWpSXmKPExsVy+t9jQV0bpn0BBpMPSVpc3jWHzeLI/35G ByaPz5vkAhijuGxSUnMyy1KL9O0SuDLeL7vCXHBesOLZNpEGxj98XYwcHBICJhK92+26GDmB TDGJC/fWs3UxcnEICUxnlHj5cwsrSEJIoJ1Jom1ZFIjNJmAo0fW2iw2kV0TAWmLvQl+QemaB t4wSy29tZwGJCwv4SNx7YApSziKgKvH+3l12EJtXwEOicecmFoi1ChJzJtmAmJwCnhJvfzJC LPKQuLd8HeMERt4FjAyrGEVTC5ILipPScw31ihNzi0vz0vWS83M3MYI9/kxqB+PKBotDjAIc jEo8vDMe7gkQYk0sK67MPcQowcGsJMKr8GFvgBBvSmJlVWpRfnxRaU5q8SFGaQ4WJXHeZo+U ACGB9MSS1OzU1ILUIpgsEwenVANjnpDA3FsnshdvdHi7TfbqtxOcKg5cLv83ex28NeWiik9K AV/srKUenmExh13ZSq6kvDr9cNqb4vDfdkdX1qznCj8+gYlXtrl1xzZO04o9a+J6glTF2uOv cxa22Kq6zDv6Jm37HLn3EwsqrrGndjTuOZ995NaN9U/W6rrKff/g97ExMS56/uf5SizFGYmG WsxFxYkAID/KnfQBAAA= Sender: linux-mmc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org Introduce a regulator_can_change_voltage() function for the subsytems or drivers which might check if applying voltage change is possible and use special workaround code when the driver is used with fixed regulators or regulators with disabled ability to change the voltage. Signed-off-by: Marek Szyprowski --- drivers/regulator/core.c | 22 ++++++++++++++++++++++ include/linux/regulator/consumer.h | 1 + 2 files changed, 23 insertions(+) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 5c4829c..24623b8 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -1861,6 +1861,28 @@ int regulator_is_enabled(struct regulator *regulator) EXPORT_SYMBOL_GPL(regulator_is_enabled); /** + * regulator_can_change_voltage - check if regulator can change voltage + * @regulator: regulator source + * + * Returns positive if the regulator driver backing the source/client + * can change its voltage, false otherwise. Usefull for detecting fixed + * or dummy regulators and disabling voltage change logic in the client + * driver. + */ +int regulator_can_change_voltage(struct regulator *regulator) +{ + struct regulator_dev *rdev = regulator->rdev; + + if (rdev->constraints && + rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_VOLTAGE && + rdev->desc->n_voltages > 1) + return 1; + + return 0; +} +EXPORT_SYMBOL_GPL(regulator_can_change_voltage); + +/** * regulator_count_voltages - count regulator_list_voltage() selectors * @regulator: regulator source * diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h index c43cd35..5d0f7c1 100644 --- a/include/linux/regulator/consumer.h +++ b/include/linux/regulator/consumer.h @@ -160,6 +160,7 @@ int regulator_bulk_force_disable(int num_consumers, void regulator_bulk_free(int num_consumers, struct regulator_bulk_data *consumers); +int regulator_can_change_voltage(struct regulator *regulator); int regulator_count_voltages(struct regulator *regulator); int regulator_list_voltage(struct regulator *regulator, unsigned selector); int regulator_is_supported_voltage(struct regulator *regulator,