From patchwork Thu Apr 26 11:04:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcel Ziswiler X-Patchwork-Id: 905002 X-Patchwork-Delegate: twarren@nvidia.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=ziswiler.com Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40WvPv1Nj1z9s0W for ; Thu, 26 Apr 2018 21:06:11 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id CBD08C22099; Thu, 26 Apr 2018 11:05:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 06490C22087; Thu, 26 Apr 2018 11:05:47 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 9DF45C22078; Thu, 26 Apr 2018 11:05:36 +0000 (UTC) Received: from mout.perfora.net (mout.perfora.net [74.208.4.194]) by lists.denx.de (Postfix) with ESMTPS id B934BC22082 for ; Thu, 26 Apr 2018 11:05:32 +0000 (UTC) Received: from marcel-pc.toradex.int.toradex.int ([46.140.72.82]) by mrelay.perfora.net (mreueus003 [74.208.5.2]) with ESMTPA (Nemesis) id 0MZmmm-1exzBO3CTm-00LSPn; Thu, 26 Apr 2018 13:05:21 +0200 From: Marcel Ziswiler To: u-boot@lists.denx.de Date: Thu, 26 Apr 2018 13:04:59 +0200 Message-Id: <20180426110502.16350-4-marcel@ziswiler.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180426110502.16350-1-marcel@ziswiler.com> References: <20180426110502.16350-1-marcel@ziswiler.com> X-Provags-ID: V03:K1:jxP/YyyRemJNFCHcE+WeNKChjc1pSTmikO3yzuIWTaq4Noy1mti O48/UeFDB+bwi8493TeGUjX13fPYaAvoUYOTPXbOQeNK6sWGSFzmEqskyEzLpRGf6YmitTk 81gF89uMilmowaQzVG79hVhMUQvs5iVIxEriA9OnRJ2QqGoauLkfT8c3aC5b1nZBoGXLwQB n35C6uji94ukheCIVnveA== X-UI-Out-Filterresults: notjunk:1; V01:K0:aUCAEyb9wIc=:/5Wi/usUQY1XIS3Mh39WOb Rvs9+M3emjclqOwzVJwmTy6zazHjMHlr6wGN/WO5k6hcHryiZ/dOKU1+P7DQ39q8HtFCdPDI3 YZWZ7QnIx+COwiw3Ut9FGFbL7G/M/QBYDVzS1UBDEU3WZDvAVOFUzm5QAFpbBWvjkJKyIXnzx cwWPGuI1daaPr8YkdDqrKdvyaXvjMDRrXmQJR6vAsDR/1MeB4FkJTJZdBVudToCoi4/uVeJkQ /nR/koCoyFdDzBHYc6XZU2usW9uemJtiDedgG7XWSgyw7ynHgrZUrJaN1LGpSQllJQLMGh2in 7dmaAtEgX+hUEQW1BD5R3rcTzo3eDAJYbiCTMT7PPcbqHVKmrBXBSGzd/QcMHSTlGKFVUD3KU PQW9zcGAChi/HNYhPJLXFfz0u/e5EOYSMnxwDOujrPTcnkFo2sk/OyIIhGWQ9/Qa1UJ4xp04j Nn3b1VsYqWfNX/dfYCcYZYzWFaoASl+BHngfD1ati7sa2vgeCxZ8z5OwyjVT7p8C0MVls7D5j TUPVUA28DSBBpBIqhz8WzQ64n9DS/L7ZaQKOrNo/7NnjILzn55r4Ip7uaiM7Ss0I3BXN+SjDg 7i8yqBFteoKwdvhzYyymE9D1lCgrzQ8e+tLecEdpblDKlCewyFYHOEeJNsg+hIr88MpJ+Z8Z7 RcfubMmDJAhmMwhQHWYDnw3tFgDs0s9+eS6qkRbJI2wrBhlJRa6NRsnPOzUI/j+5EO5Q= Cc: Marcel Ziswiler , Tom Warren , Thierry Reding Subject: [U-Boot] [PATCH v5 3/6] power: as3722: fix ldo_get/set_enable for ldo index bigger than 7 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Marcel Ziswiler Fix ldo_get_enable() and ldo_set_enable() functions for LDOs with an index > 7. Turns out there are actually two separate AS3722_LDO_CONTROL registers AS3722_LDO_CONTROL0 and AS3722_LDO_CONTROL1. Actually make use of both. While at it also actually use the enable parameter of the ldo_set_enable() function which now truly allows disabling as opposed to only enabling LDOs. Signed-off-by: Marcel Ziswiler --- Changes in v5: None Changes in v4: None Changes in v3: None Changes in v2: - New bug fix. drivers/power/regulator/as3722_regulator.c | 16 ++++++++++++++-- include/power/as3722.h | 3 ++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/drivers/power/regulator/as3722_regulator.c b/drivers/power/regulator/as3722_regulator.c index 3e1e6f1178..eb4c4651d7 100644 --- a/drivers/power/regulator/as3722_regulator.c +++ b/drivers/power/regulator/as3722_regulator.c @@ -69,10 +69,16 @@ static int ldo_set_value(struct udevice *dev, int uvolt) static int ldo_set_enable(struct udevice *dev, bool enable) { struct udevice *pmic = dev_get_parent(dev); + u8 ctrl_reg = AS3722_LDO_CONTROL0; int ldo = dev->driver_data; int ret; - ret = pmic_clrsetbits(pmic, AS3722_LDO_CONTROL, 0, 1 << ldo); + if (ldo > 7) { + ctrl_reg = AS3722_LDO_CONTROL1; + ldo -= 8; + } + + ret = pmic_clrsetbits(pmic, ctrl_reg, !enable << ldo, enable << ldo); if (ret < 0) { debug("%s: failed to write LDO control register: %d", __func__, ret); @@ -85,10 +91,16 @@ static int ldo_set_enable(struct udevice *dev, bool enable) static int ldo_get_enable(struct udevice *dev) { struct udevice *pmic = dev_get_parent(dev); + u8 ctrl_reg = AS3722_LDO_CONTROL0; int ldo = dev->driver_data; int ret; - ret = pmic_reg_read(pmic, AS3722_LDO_CONTROL); + if (ldo > 7) { + ctrl_reg = AS3722_LDO_CONTROL1; + ldo -= 8; + } + + ret = pmic_reg_read(pmic, ctrl_reg); if (ret < 0) { debug("%s: failed to read SD control register: %d", __func__, ret); diff --git a/include/power/as3722.h b/include/power/as3722.h index cb4b188bcf..b3dc7b657a 100644 --- a/include/power/as3722.h +++ b/include/power/as3722.h @@ -14,7 +14,8 @@ #define AS3722_SD_VOLTAGE(n) (0x00 + (n)) #define AS3722_LDO_VOLTAGE(n) (0x10 + (n)) #define AS3722_SD_CONTROL 0x4d -#define AS3722_LDO_CONTROL 0x4e +#define AS3722_LDO_CONTROL0 0x4e +#define AS3722_LDO_CONTROL1 0x4f #define AS3722_ASIC_ID1 0x90 #define AS3722_ASIC_ID2 0x91