From patchwork Wed Aug 9 20:12:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcel Ziswiler X-Patchwork-Id: 799920 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=) Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3xSMwS1tWGz9s0Z for ; Thu, 10 Aug 2017 06:16:08 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 102CDC21C5C; Wed, 9 Aug 2017 20:14:53 +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_DNSWL_NONE, RCVD_IN_MSPIKE_H2, 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 7D7B6C21DA3; Wed, 9 Aug 2017 20:13:54 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 291BCC21DF7; Wed, 9 Aug 2017 20:13:37 +0000 (UTC) Received: from mout.perfora.net (mout.perfora.net [74.208.4.196]) by lists.denx.de (Postfix) with ESMTPS id 57A46C21DDD for ; Wed, 9 Aug 2017 20:13:36 +0000 (UTC) Received: from localhost.localdomain.ziswiler.net ([89.217.76.191]) by mrelay.perfora.net (mreueus001 [74.208.5.2]) with ESMTPA (Nemesis) id 0LuMV7-1dX2rG2b9r-011jHy; Wed, 09 Aug 2017 22:13:06 +0200 From: Marcel Ziswiler To: u-boot@lists.denx.de Date: Wed, 9 Aug 2017 22:12:39 +0200 Message-Id: <20170809201242.16355-4-marcel@ziswiler.com> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170809201242.16355-1-marcel@ziswiler.com> References: <20170809201242.16355-1-marcel@ziswiler.com> X-Provags-ID: V03:K0:tokfBtyZ8UmNU+mKep+CTeKwJ61E4gN3mAgWHLKl8LQVZV2QRPP 5XT3NkQ/1IG5zRzVLalZmCtad+f6fNL77g9LrxwPpxFvztLXA0bwkX/NxFYJAV8BOoWbiby DsRXGQYAhF+da6P/XzbHlyEU7IYu0wXIBBnCTuo9X3coxrIpQlXBbacVoSpghSE6vSfHGe0 KOmOWSiYPdPUuhzEXmdBw== X-UI-Out-Filterresults: notjunk:1; V01:K0:TTy9l1/tL4s=:Nd0gBLzEvtDDE3azN+lmG8 sQz4IwDuQPNXykWP+5vnDL5ZY+NjWDuZDthRgQTuTX8xF+RCqe3eStHZyxk/TMayTy1Ly82r6 QvBEP1241V3m2yKxzrMgfjaS5fGSfG81l/KvKJxp42U3LWKs/+uyGc7c4j+YNNyNJ3ob8ve+F +urwDRVBoh4wbI68ezHoXjpU3FYGi2FvDFcby9XT2Y1WdmUnCXaHJe8dBKisftHGyJY3rVAJ+ 2AAAV7IHmUNW5PnxOQntJU8pGeDCBs9lxLNIJomLi94oLQfd1O/K6IMhbIo4CINHephDxCF1V 9OzD6HQAwxUEFTYGs1+sNWAG6qy5GpWt2vz1cOLv8sLXXuMn4QtyqbJ08Yawllz4fRWL5VhAD 9OXvIUnm/ps6uSs2DzzqcSTK0kc3mFBgEmARJpIrkow7CkaPtKUXRv4Vuz3vYxswiOANCRBOl pqtM3E8Rz/fA0rdoDBj31LfBIEaf61fezU5BHjSJjtXy45IBmYwdfZ/k3iUFIDg0DM9FGEbw7 9AXtwCRmjhfM38eZJ5gwaVVlMT9YAjXvTDNVipP81aA6/9dWlJxQvYIELw6A6SEkGCWVkrZr3 VDNztRpc4JTKlRQBaoKkQ0kCwP7maaquC069mfU1RwsvBEUlzF0Oa6jJf9n6oITXJbitRPWuQ ATwhV64p77fHFRZe8UaZXfElP0VLHGb188JSBpFztOB6HoQzPa+sDyUe2WaQrFraJsvevDB8T dHquKPXCdV4mGegSNRIaHUyDmrR+jDqpD5Mi/Q== Cc: Marcel Ziswiler , Tom Warren , Thierry Reding Subject: [U-Boot] [PATCH v4 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 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 3e1e6f1..eb4c465 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 cb4b188..b3dc7b6 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