From patchwork Wed Mar 22 16:53:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leonard Crestez X-Patchwork-Id: 9639547 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 3AFD6602CB for ; Wed, 22 Mar 2017 17:13:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3824F28452 for ; Wed, 22 Mar 2017 17:13:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2CAD128478; Wed, 22 Mar 2017 17:13:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9084528452 for ; Wed, 22 Mar 2017 17:13:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934828AbdCVRNA (ORCPT ); Wed, 22 Mar 2017 13:13:00 -0400 Received: from mail-co1nam03on0082.outbound.protection.outlook.com ([104.47.40.82]:38095 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1759561AbdCVRME (ORCPT ); Wed, 22 Mar 2017 13:12:04 -0400 Received: from BN6PR03CA0070.namprd03.prod.outlook.com (10.173.137.32) by SN2PR03MB2272.namprd03.prod.outlook.com (10.166.210.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.961.17; Wed, 22 Mar 2017 16:53:42 +0000 Received: from BN1AFFO11FD041.protection.gbl (2a01:111:f400:7c10::195) by BN6PR03CA0070.outlook.office365.com (2603:10b6:404:4c::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.977.11 via Frontend Transport; Wed, 22 Mar 2017 16:53:42 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1AFFO11FD041.mail.protection.outlook.com (10.58.52.252) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.977.7 via Frontend Transport; Wed, 22 Mar 2017 16:53:42 +0000 Received: from fsr-ub1664-115.ea.freescale.net (fsr-ub1664-115.ea.freescale.net [10.171.73.212]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v2MGrKXc024800; Wed, 22 Mar 2017 09:53:38 -0700 From: Leonard Crestez To: Mark Brown , Liam Girdwood , Viresh Kumar , "Rafael J. Wysocki" , Shawn Guo , Sascha Hauer CC: Leonard Crestez , Robin Gong , Anson Huang , Irina Tirdea , Rob Herring , Mark Rutland , Fabio Estevam , Octavian Purdila , , , , Subject: [RFC 4/8] regulator: core: Check enabling bypass respects constraints Date: Wed, 22 Mar 2017 18:53:06 +0200 Message-ID: <1edff9bc610969b0c53fa1080d5db021c8e00b2d.1490199005.git.leonard.crestez@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: References: X-EOPAttributedMessage: 0 X-Matching-Connectors: 131346752222383112; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39450400003)(39860400002)(39850400002)(39400400002)(39410400002)(39840400002)(39380400002)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(9170700003)(305945005)(48376002)(356003)(86362001)(77096006)(33646002)(47776003)(6666003)(38730400002)(39060400002)(106466001)(4326008)(50226002)(8936002)(85426001)(5003940100001)(189998001)(2950100002)(50466002)(104016004)(36756003)(50986999)(5660300001)(8676002)(54906002)(105606002)(53936002)(7416002)(81166006)(8656002)(118296001)(76176999)(2906002); DIR:OUT; SFP:1101; SCL:1; SRVR:SN2PR03MB2272; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; A:1; MX:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD041; 1:uXYaiGOH+omOEZzhkyAl5Dx/TWSx6A3R/SjIAQ9JfZN7l3385A9wh660RLFeBpRZ5InsUh6EqTJ9vkmD/Y3bz5ucd8LcfgpWzyAgcFQHjy5uh0F1LvpwaUsEEuP/j0V6AhFLQNYc++0UTQax6BxvQNqascljL2oZYNORLAmd/32MP3OKgvqn2QgitgC/uZmzjNAQkZCGqLz4ldPpsNMA6vX7ihD+h7RtQ0shwz363z/xXqqIbDYq0MzdxwrdatqUzc/DZrx6fBU/geoNi2FtDiMPdKMEaSlNIoetRSm9bCKgivmY9LXVC7c/Aj5wT640+55q6iByaLav9pJ9Mi4xahq6wftTeCSrCpqq3xJwhCcPwGtIUWHBlNQer8UOCU5WFHesF856t0GXVun35ziBGwSW0qY6Fuli5IVTh7i2ZlP3psSuHBgNF1aDJfpU6UAS6Q5HG5+kcqh747VUsvrXLLqrG4j52c6ryOGPs3wNdrFS8sdiXYvtk/BkfRUcHR9IkBLYvArQtYlNQUaVRx/WrD2lojsGrKYo6wuBtb1GkV/neTv6TouKz6mngDZoe1QkOumrEN4K89QXTyPY8bTGX5VBAgNR/rjnkwjCdK7VWOtD1fLiZJaxFFa7wwnai4Ua MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 85588de1-a921-4492-cc08-08d47143ff14 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:SN2PR03MB2272; X-Microsoft-Exchange-Diagnostics: 1; SN2PR03MB2272; 3:6mG94Nemb8o2Aeo2x8VGxPY+Z0Xps5M18YDDhI1mGOgosXRoZVlglIHI3DenmqsV5Hlfa6O5f72uNXNvna5PlFUGNtSPMAXjL79gO6hc4vax3iDUx9zJ6oBxO1cDLwEv431gYWxnlt+ChLUvH1s5fyXE4qobdLWhnsRS6R85VlwOzMYIA7TdonKopW3PMcAZdz8ZxrKtfNuqD4rSZXTzLBeN2l5b8oe5yVttedyNhDtISeRtHTWZeSbV3Vj8kKk4IQCfCevREaGayDAKgU2gLG6tWiZgmSLO9DXVlpmb25ndzi2pngonklGlbCxYwNi18XFI2zfZkXEtwpOa9Ug/38K642j9JsstnOhWVjUHuVyWdpClDUAIoINXV39XLrXE; 25:r41hDF6JAUux57qS6QxFK8gUEsZXREeCKe7ZtoocZ57RavItQ9nGdxy11rh/LEtOqRJMzYbC80SW+TnWk5a77U5OU6HfaKSQuqJMBt4sKhbmnEcid3E9CWezO5dAXMJNpjp+zriJEU4aWva3EzjzkYGoEPfEe69zQz2QTiu4sLigCR6RUEfrOZ2LTjDqT+D6j0W8Z+seDUBKJJQGS2wgxkU+tV3alYb26kcSrOkXBUwLXVk6udgE73ySTI0BT7WpksYJLEk0Myo90xAB4g/VZSkXdkLfDfiIRh8MTAypMlE0hanlkd3wBF9fs2eAWUgtj7PTW5JoKWwlhI45/WJutQ5/7k35zQ4suonDPo8NftNrbet05+eaZ5y9pUA5Rv12g9c6c1Dg3gm2Ekthl99+GcUvaDaW6qFsnPdtE/mfCA9f8m3WdZXk5WPjUesG2kcvJHlRx0UrzzJQiq/Wzk2Fgw== X-Microsoft-Exchange-Diagnostics: 1; SN2PR03MB2272; 31:/5kqp0FD2/eFHriq8/6DIT6ZtlzSvyRsC+4zqUNLYt3p7g7EAdJxPqHggLb4sgAmUJl6D60kMWTLlJh8zpTS5AaL/Y6QwgecLl+VUCKyrLXAtSE9AA1f+IJwfD9/lJURCdE3AY4CBmH4ZFIO606OgUI9nkcIuYOvUn+ECMQ97wNOQljWoymrIUjZBmTOHnfxE5vdo1x4t0AU+aQRfl9t0aVGtGLdKnoSZJPGRWCDIi44maCWyfPhp12v1xxDR/99kU+Zu02nXSFdQqFiXPmAMA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095060)(601004)(2401047)(13023025)(13015025)(5005006)(13017025)(8121501046)(13024025)(13018025)(3002001)(10201501046)(6055026)(6096035)(20161123559025)(20161123556025)(20161123565025)(20161123563025)(20161123561025); SRVR:SN2PR03MB2272; BCL:0; PCL:0; RULEID:(400006); SRVR:SN2PR03MB2272; X-Microsoft-Exchange-Diagnostics: 1; SN2PR03MB2272; 4:O1bLO4+8GOZDL0NhVGA7Sba18U650gf5BFNKWYvzSmWpV0TB6sjGmegMTEwD/FoY88cMvmsJAC0DMvR3cBUhK80mxryhHnJrUxllj5/vhfcb+oxintfeT3EY0+MJiOKIsONoyt7H0lfwzqlwtpI1GqvNvxwCjcXVd9YX97l/AQiBbOB/xryK8EjzdOjZ9Avt0mGy/pZihYsbtbUWZ5OFUYK0Fx2jNDfXE3+Jk0KJACQfoF9MFZYAhuI2vFXNQVXMQtFzE34gga8oEfp79SNkSEUk8mQsyGGtpFGdjOX1GHfgcYN/WwVR0JfCEwY6wdF2HbxAIUnsohuUzG/PQBbBBVeUe+NH133e2uEA0qMapDcFnBxVqNxAYEjsc9tnZlfOOq9k1e+j5L+fjcW+OHZSlTlGuLV4CtuTjUeQ16cCFC9m9tAA6OSxmhkXU4eLKzzlHvG5ZJCjytMlZd42KwCA4wAlNe/5OPJxFkIBp+G1js04N3UksdvgJyx5UBUIYRTQZDMNDT1thj8pTCWf1p5ovOvtk5ldISGnJ9hCS+vCpfTuLKh/Z+0zphmzEa2tY2Xx224wXeVnARsDYdfv8YO8iUS2aXJpVBLYu5pRGy+rUWLy20E6P/uUy01MaXACjZsmIXNExh1iYsIXXqAtVBOFxxCdWVtDOpt6q+I8nB9qOjWJXqeO2R9dcUb9U3O10omtNScMoNAQDSAotnOXNoqOZBvM5W2Mm+j7KIsCXiu+9zWcXw6wD+yOEB7Bvgmumx1D X-Forefront-PRVS: 02543CD7CD X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN2PR03MB2272; 23:4JUBHz4Lb92vKYdqyIeX0E5qunsCN1NFSmFqDQPaQ?= =?us-ascii?Q?EoJ9vVRfFUdCWdLcjp5E+M2R6L5crHHl6ySy6jAFP0nfyZCfMsHMzfYYxkYc?= =?us-ascii?Q?OyWG5W2cEKAmWamJhlJH5s+bMdb9G5tBX1WFzN6CMyOxTdjYmYQLEV2kJuGm?= =?us-ascii?Q?5HKs5R6OOu+Sx6LzghhLIiSJ6zYcc5yGBK0LLukaUgM8q9ngCxj+9oXn29hk?= =?us-ascii?Q?NEG0wlmiuMlumcVcFdOH6fxMded7+ucPPlwNydLKLR1SdyIWzywUEcawlJ2R?= =?us-ascii?Q?w4HkxcuZO4I+4Ksfws7EbIIFXXNZ+HH+2iKZf0v0PSDlfjfnumJKKQlbz55j?= =?us-ascii?Q?D+xbf+Nps5vXgP3U8xu61dPjUiur91fnUrXb+ZgcgKx1ZZl/prXUDrjisP1n?= =?us-ascii?Q?CNWkH7jTTTwvnasGP2ED5j3KwBthGI/OlAq2g/UmD3XOghTH06M0BtPtkYAs?= =?us-ascii?Q?iiba+nfOnb5nf2AVvVvBwBkaRXKA7CqoFpDiXBMn780UMMTdOqxunJta1dHv?= =?us-ascii?Q?PZfMdAeSUGDPraVuL7GX2uxLGoMMUDUNephzrS8sr6OMHJKG6hXcLcgDaQ7d?= =?us-ascii?Q?g9SrrB3n/o/+LaVBmFPf2+/clxlS0bvyo5wcZQ2yyDSdjnfzbD94Z8XUcOjq?= =?us-ascii?Q?dZtkS/38k1YZZ5AnRb8x0s3Wt/yCIZbM/1QZjiPghElFlue4HMSRvZTqy0sg?= =?us-ascii?Q?P+K83FpQP6YyPI72xEaaQHBVC4WxP8OoSKnin+OjUyZUlvOsv/+HUXOQl+ni?= =?us-ascii?Q?52z+i05G+YZRXJmpiY+mQzto6h8el7j5w2fq2Kebwf62M5yJT7diAyeM7FdP?= =?us-ascii?Q?ifSO18LZWQm0jUjLk1UYtP97QqVo5sDzM94+iPRnhwj2xTSk2oj5AIrVSkRO?= =?us-ascii?Q?OsIugtu46xpJwMEbuYaKOQttyEj0QYeAqqNznH+RVNgwVUjtxFhcF994xrMx?= =?us-ascii?Q?CiO3qfRYjJRo552ozyPk14C44PXLU1avcKDEGW2O549XEszEMBguzCNjmQmw?= =?us-ascii?Q?an4xKUNtDrnG8GFL8UwTDOCfRg05gXRkYy52AL9QDafdbiuo3oMQFA6kM5IM?= =?us-ascii?Q?MIj0JvrGGy7XpbW2A3rvGNNbuP+aCU9ypcXjoBN2P7Bc+cjD/jhRWIMYX4zA?= =?us-ascii?Q?1n3qNQeJ5G2KuCt3/AMq67KQ34nl9jZNNnihZNYobc/ZzSt4AH0xJLoqn3hr?= =?us-ascii?Q?U61oJTYmg3iCFV9WaxLlOixT6G3I/hTN/qC1LvOYWexCZnLBaaXt6Hf4w=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; SN2PR03MB2272; 6:ee+5YmPhPDzeqVTvVWqGs/S/14AaaKDnvuiaQEtkkdCWMgJTqr3DygkGBtCsHg8yNPTWTg3pug+efgh391y2LzPvfuXudLU7sDflgQwesrn9SJ4V5DmdaNd2mfwIoJNGRbcVPKxUB5Yd0cQ1C9rdFUnLVbjJDgiOIL3Ef17LaacewfkwwDYKE8SCj/vfLXsdFDNELs6A4oYPdIItP2omNNE9uzy/38QHuuolDd7aZ1gz7LV00Lxls6WBuMXi2g7NtC2NJbhCsbX3BF+PFqO2NsU2Q/Jk79+sQnW9SJrOrVlRzljeHsrwe4bL2dsgKtb8RiDSYenwbYfRqJY/RWVTHEMcUWt4Lb8BXdss8vvO4AA21pHXsTr9DmhAZXrcs+c9HoavzRejKmQSsaKOwy19+QDMDV9BTRrOH0/+uOMoi38=; 5:QOgDWDX5AqPmEqJCVuMOQwdkpWcVP5/pFR1WXB3+SpUoTSB/Gw+/i56KrA6NEpSlaeQf1Tt69oxsUGCHuwD84rBcHpX2sCazMVTyoTgmXaQbUpf2Eyt0HHF+i9HCOpxL7KExpqN3kdQqnTfS1u4QBcnskjIWbSAX3XWs276rbVE91Bi748KlmY8787sFtlAn; 24:I+lEuZXV8sNFQVQh2pK2tuqXcTlif9PDtLy+ckYdrQhqbqIelhok5hxOrHkhKGgaPW/AKaHbB1jKvrj98cYjh+OqklGT7BfsT93yUDmcqNE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN2PR03MB2272; 7:8AGjnKmlvlMvSIC9irCBtchPXQ+TcL1KMDSOgtSNTw9UrxBhTeEkCmv7lLEn2aLdlr+3+e9R9pFbFyWntp0FHgH5dwwO/ugWTaCdoBny/PpYok8nTzVt3hgySW/CpHn4N4McQ30XUhZHMARaw4Z8POZQzdAv/3FPo7Hn5qzNERw8RiuMLdzNFyVi49jgvyTDijMFy7jgi236zzUq0qdnDR1i6RfQ6B/gapKRegNLK9MRSXu3mAnpDaqjAiKVydf9EPjlJ8ZmPHmmWvsr99WPaVjylQqrCiL9yhkBvnkw44+2mjWW1prfBFsuadeUtKSf7NyS1cvx7vAavInq9jdq7w== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2017 16:53:42.0043 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN2PR03MB2272 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Enabling bypass mode makes a regulator passthrough the supply voltage directly. It is possible that the supply voltage is set high enough that it violates machine constraints so let's check for that. The supply voltage might be higher because of min_dropout_uV or maybe there is just an unrelated consumer who requested a higher voltage. Signed-off-by: Leonard Crestez --- drivers/regulator/core.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 53d4fc7..9d893aa 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -3453,6 +3453,54 @@ int regulator_set_load(struct regulator *regulator, int uA_load) } EXPORT_SYMBOL_GPL(regulator_set_load); +static int _regulator_set_bypass(struct regulator *regulator, bool bypass) +{ + struct regulator_dev *rdev = regulator->rdev; + int output_voltage; + int supply_voltage; + + if (bypass && !rdev->supply) { + rdev_err(rdev, "Refuse to set bypass on regulator with no supply!\n"); + return -EINVAL; + } + + /* Check that enabling bypass won't break constraints */ + if (bypass && _regulator_is_enabled(rdev)) { + output_voltage = _regulator_get_voltage(rdev); + if (output_voltage < 0) { + rdev_err(rdev, "Failed to get old output voltage before" + " enabling bypass: %d\n", output_voltage); + return output_voltage; + } + supply_voltage = _regulator_get_voltage(rdev->supply->rdev); + if (supply_voltage < 0) { + rdev_err(rdev, "Failed to get supply voltage before" + " enabling bypass: %d\n", supply_voltage); + return supply_voltage; + } + if (supply_voltage < rdev->constraints->min_uV || + supply_voltage > rdev->constraints->max_uV) { + rdev_err(rdev, "Enabling bypass would change voltage" + " from %duV to %duV violating" + " constraint range %duV to %duV\n", + output_voltage, + supply_voltage, + rdev->constraints->min_uV, + rdev->constraints->max_uV); + return -EINVAL; + } + rdev_dbg(rdev, "Enabling bypass would change voltage" + " from %duV to %duV respecting" + " constraint range %duV to %duV\n", + output_voltage, + supply_voltage, + rdev->constraints->min_uV, + rdev->constraints->max_uV); + } + + return rdev->desc->ops->set_bypass(rdev, bypass); +} + /** * regulator_allow_bypass - allow the regulator to go into bypass mode * @@ -3481,7 +3529,7 @@ int regulator_allow_bypass(struct regulator *regulator, bool enable) rdev->bypass_count++; if (rdev->bypass_count == rdev->open_count) { - ret = rdev->desc->ops->set_bypass(rdev, enable); + ret = _regulator_set_bypass(regulator, enable); if (ret != 0) rdev->bypass_count--; } @@ -3490,7 +3538,7 @@ int regulator_allow_bypass(struct regulator *regulator, bool enable) rdev->bypass_count--; if (rdev->bypass_count != rdev->open_count) { - ret = rdev->desc->ops->set_bypass(rdev, enable); + ret = _regulator_set_bypass(regulator, enable); if (ret != 0) rdev->bypass_count++; }