{"id":813297,"url":"http://patchwork.ozlabs.org/api/1.2/patches/813297/?format=json","web_url":"http://patchwork.ozlabs.org/project/uboot/patch/1505297094-5273-2-git-send-email-kever.yang@rock-chips.com/","project":{"id":18,"url":"http://patchwork.ozlabs.org/api/1.2/projects/18/?format=json","name":"U-Boot","link_name":"uboot","list_id":"u-boot.lists.denx.de","list_email":"u-boot@lists.denx.de","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<1505297094-5273-2-git-send-email-kever.yang@rock-chips.com>","list_archive_url":null,"date":"2017-09-13T10:04:51","name":"[U-Boot,2/5] power: pmic: rk816: support rk816 pmic","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"3084082eabcf09aec487021370b33e72bd5651bb","submitter":{"id":64532,"url":"http://patchwork.ozlabs.org/api/1.2/people/64532/?format=json","name":"Kever Yang","email":"kever.yang@rock-chips.com"},"delegate":{"id":69486,"url":"http://patchwork.ozlabs.org/api/1.2/users/69486/?format=json","username":"ptomsich","first_name":"Philipp","last_name":"Tomsich","email":"philipp.tomsich@theobroma-systems.com"},"mbox":"http://patchwork.ozlabs.org/project/uboot/patch/1505297094-5273-2-git-send-email-kever.yang@rock-chips.com/mbox/","series":[{"id":2863,"url":"http://patchwork.ozlabs.org/api/1.2/series/2863/?format=json","web_url":"http://patchwork.ozlabs.org/project/uboot/list/?series=2863","date":"2017-09-13T10:04:50","name":"[U-Boot,1/5] rockchip: i2c: rk3328: support i2c for rk3328 SoC","version":1,"mbox":"http://patchwork.ozlabs.org/series/2863/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/813297/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/813297/checks/","tags":{},"related":[],"headers":{"Return-Path":"<u-boot-bounces@lists.denx.de>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=lists.denx.de\n\t(client-ip=81.169.180.215; helo=lists.denx.de;\n\tenvelope-from=u-boot-bounces@lists.denx.de;\n\treceiver=<UNKNOWN>)","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"oEBrSseH\"; dkim-atps=neutral"],"Received":["from lists.denx.de (dione.denx.de [81.169.180.215])\n\tby ozlabs.org (Postfix) with ESMTP id 3xsckH4Pdsz9s9Y\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 13 Sep 2017 20:05:59 +1000 (AEST)","by lists.denx.de (Postfix, from userid 105)\n\tid 3C06CC225E8; Wed, 13 Sep 2017 10:05:22 +0000 (UTC)","from lists.denx.de (localhost [IPv6:::1])\n\tby lists.denx.de (Postfix) with ESMTP id ED196C225C6;\n\tWed, 13 Sep 2017 10:05:16 +0000 (UTC)","by lists.denx.de (Postfix, from userid 105)\n\tid 770BBC22430; Wed, 13 Sep 2017 10:05:08 +0000 (UTC)","from mail-pf0-f196.google.com (mail-pf0-f196.google.com\n\t[209.85.192.196])\n\tby lists.denx.de (Postfix) with ESMTPS id 7957DC22498\n\tfor <u-boot@lists.denx.de>; Wed, 13 Sep 2017 10:05:04 +0000 (UTC)","by mail-pf0-f196.google.com with SMTP id h4so7337997pfk.0\n\tfor <u-boot@lists.denx.de>; Wed, 13 Sep 2017 03:05:04 -0700 (PDT)","from localhost.localdomain ([103.29.142.67])\n\tby smtp.gmail.com with ESMTPSA id\n\ti12sm9122203pgr.21.2017.09.13.03.05.00\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n\tWed, 13 Sep 2017 03:05:02 -0700 (PDT)"],"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,\n\tRCVD_IN_MSPIKE_H2,\n\tT_DKIM_INVALID autolearn=unavailable autolearn_force=no\n\tversion=3.4.0","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=sender:from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=Qls1jQSE13yQlmF555F3hrxMRTwV10ThNTTkEuOFgbU=;\n\tb=oEBrSseHUaXqzMp9bLJni9vw1mIpVqvWWM6dTQ/VmsFJ8ksXLPT6EkEAovheb/MV5g\n\tX4LVvtxGu6lhecyKLEclCoaX/qth2W1eH8E5C1xKb6H3ofwnAMWBkUnXtAIJZpUlrcMj\n\t1i0DNdxdxZMJ4+mJAi6+vSsqnQiRDa0SFJEF4nKssxH12kM+XQqQFSTOgpt3J44qNpbM\n\tc5d7jQWwHucKL1pYoGwhQrYE1Tiv+goHuKbWePa0O+OgvsYj+lcdFaPscVrDhsuWmixU\n\trgNIN5yT67CTdFtAS0YCsENr1mPAZlgryvgV7+C34/ydW34J/OI6TLR01JiJTHWwoRj+\n\tEMaA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:sender:from:to:cc:subject:date:message-id\n\t:in-reply-to:references;\n\tbh=Qls1jQSE13yQlmF555F3hrxMRTwV10ThNTTkEuOFgbU=;\n\tb=n4Xjugrbz1LCqw2h74qw2nt/dXHLjmczSrzvdvFWGHrbATZJFEWvYvqYEN9BNSeQ6J\n\toatcyw6xVuHtNRfneeVmDG5bLps4WHtK6Y2L5FiFzGLTYvVEtNc4CsmxeDQQkGmgDyWh\n\t91ZYz7Q+P3YMmSyLRevWIRULqPUWSAQ7M8dZla2XbKjIz5gJn0KVc1ZjX7BgP86swCAd\n\tRcYT9yWdjJMeDYuNPeb/1eBWMh+GX2l0VJ9lM9kAy074OedDgnwYicFDxgryPgD0x/+B\n\tqIZjJ6dH9QFTkQW1GK4p91uTsDI2ZpZHulvdXf5qmSOGKL//2mYymSWvPVQelWkPCmDT\n\tLvgg==","X-Gm-Message-State":"AHPjjUj69LafIMfbVZTPVl0xJ1BSibiujYfcE9vdymvCqMwIgV/ur8B6\n\tGR9/3nYF6ykYLkJr","X-Google-Smtp-Source":"AOwi7QCIfZMB2KShfnmyDVDV0PVMgLJ9KAuny8Q+5x3V6wbQG8736rY4eFCVWd+kbN8f+5eZWKlYrw==","X-Received":"by 10.98.44.69 with SMTP id s66mr1587744pfs.309.1505297102882;\n\tWed, 13 Sep 2017 03:05:02 -0700 (PDT)","From":"Kever Yang <kever.yang@rock-chips.com>","To":"u-boot@lists.denx.de","Date":"Wed, 13 Sep 2017 18:04:51 +0800","Message-Id":"<1505297094-5273-2-git-send-email-kever.yang@rock-chips.com>","X-Mailer":"git-send-email 1.9.1","In-Reply-To":"<1505297094-5273-1-git-send-email-kever.yang@rock-chips.com>","References":"<1505297094-5273-1-git-send-email-kever.yang@rock-chips.com>","Cc":"Elaine Zhang <zhangqing@rock-chips.com>,\n\tJacob Chen <jacob-chen@iotwrt.com>","Subject":"[U-Boot] [PATCH 2/5] power: pmic: rk816: support rk816 pmic","X-BeenThere":"u-boot@lists.denx.de","X-Mailman-Version":"2.1.18","Precedence":"list","List-Id":"U-Boot discussion <u-boot.lists.denx.de>","List-Unsubscribe":"<https://lists.denx.de/options/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=unsubscribe>","List-Archive":"<http://lists.denx.de/pipermail/u-boot/>","List-Post":"<mailto:u-boot@lists.denx.de>","List-Help":"<mailto:u-boot-request@lists.denx.de?subject=help>","List-Subscribe":"<https://lists.denx.de/listinfo/u-boot>,\n\t<mailto:u-boot-request@lists.denx.de?subject=subscribe>","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"u-boot-bounces@lists.denx.de","Sender":"\"U-Boot\" <u-boot-bounces@lists.denx.de>"},"content":"From: Elaine Zhang <zhangqing@rock-chips.com>\n\nAdd Rockchip pmic rk816 support.\n\nSigned-off-by: Elaine Zhang <zhangqing@rock-chips.com>\nSigned-off-by: Kever Yang <kever.yang@rock-chips.com>\n---\n\n drivers/power/pmic/rk8xx.c      |   1 +\n drivers/power/regulator/rk8xx.c | 212 ++++++++++++++++++++++++++++++++--------\n include/power/rk8xx_pmic.h      |   9 +-\n 3 files changed, 182 insertions(+), 40 deletions(-)","diff":"diff --git a/drivers/power/pmic/rk8xx.c b/drivers/power/pmic/rk8xx.c\nindex eb3ec0f..0fdea95 100644\n--- a/drivers/power/pmic/rk8xx.c\n+++ b/drivers/power/pmic/rk8xx.c\n@@ -100,6 +100,7 @@ static struct dm_pmic_ops rk8xx_ops = {\n \n static const struct udevice_id rk8xx_ids[] = {\n \t{ .compatible = \"rockchip,rk808\" },\n+\t{ .compatible = \"rockchip,rk816\" },\n \t{ .compatible = \"rockchip,rk818\" },\n \t{ }\n };\ndiff --git a/drivers/power/regulator/rk8xx.c b/drivers/power/regulator/rk8xx.c\nindex 76fc2ef..cf3566e 100644\n--- a/drivers/power/regulator/rk8xx.c\n+++ b/drivers/power/regulator/rk8xx.c\n@@ -48,6 +48,21 @@ static const struct rk8xx_reg_info rk808_buck[] = {\n \t{ 1800000, 100000, REG_BUCK4_ON_VSEL, RK808_BUCK4_VSEL_MASK, },\n };\n \n+static const struct rk8xx_reg_info rk816_buck[] = {\n+\t/* buck 1 */\n+\t{ 712500, 12500, REG_BUCK1_ON_VSEL, RK818_BUCK_VSEL_MASK, },\n+\t{ 1800000, 200000, REG_BUCK1_ON_VSEL, RK818_BUCK_VSEL_MASK, },\n+\t{ 2300000, 0, REG_BUCK1_ON_VSEL, RK818_BUCK_VSEL_MASK, },\n+\t/* buck 2 */\n+\t{ 712500, 12500, REG_BUCK2_ON_VSEL, RK818_BUCK_VSEL_MASK, },\n+\t{ 1800000, 200000, REG_BUCK2_ON_VSEL, RK818_BUCK_VSEL_MASK, },\n+\t{ 2300000, 0, REG_BUCK2_ON_VSEL, RK818_BUCK_VSEL_MASK, },\n+\t/* buck 3 */\n+\t{ 712500, 12500, -1, RK818_BUCK_VSEL_MASK, },\n+\t/* buck 4 */\n+\t{ 800000, 100000, REG_BUCK4_ON_VSEL, RK818_BUCK4_VSEL_MASK, },\n+};\n+\n static const struct rk8xx_reg_info rk818_buck[] = {\n \t{ 712500, 12500, REG_BUCK1_ON_VSEL, RK818_BUCK_VSEL_MASK, },\n \t{ 712500, 12500, REG_BUCK2_ON_VSEL, RK818_BUCK_VSEL_MASK, },\n@@ -67,6 +82,15 @@ static const struct rk8xx_reg_info rk808_ldo[] = {\n \t{ 1800000, 100000, REG_LDO8_ON_VSEL, RK808_LDO_VSEL_MASK, },\n };\n \n+static const struct rk8xx_reg_info rk816_ldo[] = {\n+\t{ 800000, 100000, REG_LDO1_ON_VSEL, RK818_LDO_VSEL_MASK, },\n+\t{ 800000, 100000, REG_LDO2_ON_VSEL, RK818_LDO_VSEL_MASK, },\n+\t{ 800000, 100000, REG_LDO3_ON_VSEL, RK818_LDO_VSEL_MASK, },\n+\t{ 800000, 100000, REG_LDO4_ON_VSEL, RK818_LDO_VSEL_MASK, },\n+\t{ 800000, 100000, REG_LDO5_ON_VSEL, RK818_LDO_VSEL_MASK, },\n+\t{ 800000, 100000, REG_LDO6_ON_VSEL, RK818_LDO_VSEL_MASK, },\n+};\n+\n static const struct rk8xx_reg_info rk818_ldo[] = {\n \t{ 1800000, 100000, REG_LDO1_ON_VSEL, RK818_LDO_VSEL_MASK, },\n \t{ 1800000, 100000, REG_LDO2_ON_VSEL, RK818_LDO_VSEL_MASK, },\n@@ -88,10 +112,24 @@ static const uint rk818_chrg_shutdown_vsel_array[] = {\n };\n \n static const struct rk8xx_reg_info *get_buck_reg(struct udevice *pmic,\n-\t\t\t\t\t     int num)\n+\t\t\t\t\t\t int num, int uvolt)\n {\n \tstruct rk8xx_priv *priv = dev_get_priv(pmic);\n+\n \tswitch (priv->variant) {\n+\tcase RK816_ID:\n+\t\tswitch (num) {\n+\t\tcase 0:\n+\t\tcase 1:\n+\t\t\tif (uvolt <= 1450000)\n+\t\t\t\treturn &rk816_buck[num * 3 + 0];\n+\t\t\telse if (uvolt <= 2200000)\n+\t\t\t\treturn &rk816_buck[num * 3 + 1];\n+\t\t\telse\n+\t\t\t\treturn &rk816_buck[num * 3 + 2];\n+\t\tdefault:\n+\t\t\treturn &rk816_buck[num + 4];\n+\t\t}\n \tcase RK818_ID:\n \t\treturn &rk818_buck[num];\n \tdefault:\n@@ -101,7 +139,7 @@ static const struct rk8xx_reg_info *get_buck_reg(struct udevice *pmic,\n \n static int _buck_set_value(struct udevice *pmic, int buck, int uvolt)\n {\n-\tconst struct rk8xx_reg_info *info = get_buck_reg(pmic, buck - 1);\n+\tconst struct rk8xx_reg_info *info = get_buck_reg(pmic, buck, uvolt);\n \tint mask = info->vsel_mask;\n \tint val;\n \n@@ -114,23 +152,76 @@ static int _buck_set_value(struct udevice *pmic, int buck, int uvolt)\n \treturn pmic_clrsetbits(pmic, info->vsel_reg, mask, val);\n }\n \n+static int _buck_get_enable(struct udevice *pmic, int buck)\n+{\n+\tstruct rk8xx_priv *priv = dev_get_priv(pmic);\n+\tuint mask = 0;\n+\tint ret = 0;\n+\n+\tswitch (priv->variant) {\n+\tcase RK816_ID:\n+\t\tif (buck >= 4) {\n+\t\t\tmask = 1 << (buck - 4);\n+\t\t\tret = pmic_reg_read(pmic, RK816_REG_DCDC_EN2);\n+\t\t} else {\n+\t\t\tmask = 1 << buck;\n+\t\t\tret = pmic_reg_read(pmic, RK816_REG_DCDC_EN1);\n+\t\t}\n+\t\tbreak;\n+\tcase RK808_ID:\n+\tcase RK818_ID:\n+\t\tmask = 1 << buck;\n+\t\tret = pmic_reg_read(pmic, REG_DCDC_EN);\n+\t\tif (ret < 0)\n+\t\t\treturn ret;\n+\t\tbreak;\n+\t}\n+\treturn ret & mask ? true : false;\n+}\n+\n+\n static int _buck_set_enable(struct udevice *pmic, int buck, bool enable)\n {\n-\tuint mask;\n+\tuint mask, value, en_reg;\n \tint ret;\n+\tstruct rk8xx_priv *priv = dev_get_priv(pmic);\n \n-\tbuck--;\n-\tmask = 1 << buck;\n-\tif (enable) {\n-\t\tret = pmic_clrsetbits(pmic, REG_DCDC_ILMAX, 0, 3 << (buck * 2));\n-\t\tif (ret)\n-\t\t\treturn ret;\n-\t\tret = pmic_clrsetbits(pmic, REG_DCDC_UV_ACT, 1 << buck, 0);\n-\t\tif (ret)\n-\t\t\treturn ret;\n+\tswitch (priv->variant) {\n+\tcase RK816_ID:\n+\t\tif (buck >= 4) {\n+\t\t\tbuck -= 4;\n+\t\t\ten_reg = RK816_REG_DCDC_EN2;\n+\t\t} else {\n+\t\t\ten_reg = RK816_REG_DCDC_EN1;\n+\t\t}\n+\t\tif (enable)\n+\t\t\tvalue = ((1 << buck) | (1 << (buck + 4)));\n+\t\telse\n+\t\t\tvalue = ((0 << buck) | (1 << (buck + 4)));\n+\t\tret = pmic_reg_write(pmic, en_reg, value);\n+\t\tbreak;\n+\n+\tcase RK808_ID:\n+\tcase RK818_ID:\n+\t\tmask = 1 << buck;\n+\t\tif (enable) {\n+\t\t\tret = pmic_clrsetbits(pmic, REG_DCDC_ILMAX,\n+\t\t\t\t\t      0, 3 << (buck * 2));\n+\t\t\tif (ret)\n+\t\t\t\treturn ret;\n+\t\t\tret = pmic_clrsetbits(pmic, REG_DCDC_UV_ACT,\n+\t\t\t\t\t      1 << buck, 0);\n+\t\t\tif (ret)\n+\t\t\t\treturn ret;\n+\t\t}\n+\t\tret = pmic_clrsetbits(pmic, REG_DCDC_EN, mask,\n+\t\t\t\t      enable ? mask : 0);\n+\t\tbreak;\n+\tdefault:\n+\t\tret = -EINVAL;\n \t}\n \n-\treturn pmic_clrsetbits(pmic, REG_DCDC_EN, mask, enable ? mask : 0);\n+\treturn ret;\n }\n \n #ifdef ENABLE_DRIVER\n@@ -138,7 +229,10 @@ static const struct rk8xx_reg_info *get_ldo_reg(struct udevice *pmic,\n \t\t\t\t\t     int num)\n {\n \tstruct rk8xx_priv *priv = dev_get_priv(pmic);\n+\n \tswitch (priv->variant) {\n+\tcase RK816_ID:\n+\t\treturn &rk816_ldo[num];\n \tcase RK818_ID:\n \t\treturn &rk818_ldo[num];\n \tdefault:\n@@ -146,10 +240,70 @@ static const struct rk8xx_reg_info *get_ldo_reg(struct udevice *pmic,\n \t}\n }\n \n+static int _ldo_get_enable(struct udevice *pmic, int ldo)\n+{\n+\tstruct rk8xx_priv *priv = dev_get_priv(pmic);\n+\tuint mask = 0;\n+\tint ret = 0;\n+\n+\tswitch (priv->variant) {\n+\tcase RK816_ID:\n+\t\tif (ldo >= 4) {\n+\t\t\tmask = 1 << (ldo - 4);\n+\t\t\tret = pmic_reg_read(pmic, RK816_REG_LDO_EN2);\n+\t\t} else {\n+\t\t\tmask = 1 << ldo;\n+\t\t\tret = pmic_reg_read(pmic, RK816_REG_LDO_EN1);\n+\t\t}\n+\t\tbreak;\n+\tcase RK808_ID:\n+\tcase RK818_ID:\n+\t\tmask = 1 << ldo;\n+\t\tret = pmic_reg_read(pmic, REG_LDO_EN);\n+\t\tif (ret < 0)\n+\t\t\treturn ret;\n+\t\tbreak;\n+\t}\n+\treturn ret & mask ? true : false;\n+}\n+\n+\n+static int _ldo_set_enable(struct udevice *pmic, int ldo, bool enable)\n+{\n+\tstruct rk8xx_priv *priv = dev_get_priv(pmic);\n+\tuint mask, value, en_reg;\n+\tint ret = 0;\n+\n+\tswitch (priv->variant) {\n+\tcase RK816_ID:\n+\t\tif (ldo >= 4) {\n+\t\t\tldo -= 4;\n+\t\t\ten_reg = RK816_REG_LDO_EN2;\n+\t\t} else {\n+\t\t\ten_reg = RK816_REG_LDO_EN1;\n+\t\t}\n+\t\tif (enable)\n+\t\t\tvalue = ((1 << ldo) | (1 << (ldo + 4)));\n+\t\telse\n+\t\t\tvalue = ((0 << ldo) | (1 << (ldo + 4)));\n+\n+\t\tret = pmic_reg_write(pmic, en_reg, value);\n+\t\tbreak;\n+\tcase RK808_ID:\n+\tcase RK818_ID:\n+\t\tmask = 1 << ldo;\n+\t\tret = pmic_clrsetbits(pmic, REG_LDO_EN, mask,\n+\t\t\t\t       enable ? mask : 0);\n+\t\tbreak;\n+\t}\n+\n+\treturn ret;\n+}\n+\n static int buck_get_value(struct udevice *dev)\n {\n \tint buck = dev->driver_data - 1;\n-\tconst struct rk8xx_reg_info *info = get_buck_reg(dev->parent, buck);\n+\tconst struct rk8xx_reg_info *info = get_buck_reg(dev->parent, buck, 0);\n \tint mask = info->vsel_mask;\n \tint ret, val;\n \n@@ -165,14 +319,14 @@ static int buck_get_value(struct udevice *dev)\n \n static int buck_set_value(struct udevice *dev, int uvolt)\n {\n-\tint buck = dev->driver_data;\n+\tint buck = dev->driver_data - 1;\n \n \treturn _buck_set_value(dev->parent, buck, uvolt);\n }\n \n static int buck_set_enable(struct udevice *dev, bool enable)\n {\n-\tint buck = dev->driver_data;\n+\tint buck = dev->driver_data - 1;\n \n \treturn _buck_set_enable(dev->parent, buck, enable);\n }\n@@ -180,16 +334,8 @@ static int buck_set_enable(struct udevice *dev, bool enable)\n static int buck_get_enable(struct udevice *dev)\n {\n \tint buck = dev->driver_data - 1;\n-\tint ret;\n-\tuint mask;\n-\n-\tmask = 1 << buck;\n \n-\tret = pmic_reg_read(dev->parent, REG_DCDC_EN);\n-\tif (ret < 0)\n-\t\treturn ret;\n-\n-\treturn ret & mask ? true : false;\n+\treturn _buck_get_enable(dev->parent, buck);\n }\n \n static int ldo_get_value(struct udevice *dev)\n@@ -228,27 +374,15 @@ static int ldo_set_value(struct udevice *dev, int uvolt)\n static int ldo_set_enable(struct udevice *dev, bool enable)\n {\n \tint ldo = dev->driver_data - 1;\n-\tuint mask;\n-\n-\tmask = 1 << ldo;\n \n-\treturn pmic_clrsetbits(dev->parent, REG_LDO_EN, mask,\n-\t\t\t       enable ? mask : 0);\n+\treturn _ldo_set_enable(dev->parent, ldo, enable);\n }\n \n static int ldo_get_enable(struct udevice *dev)\n {\n \tint ldo = dev->driver_data - 1;\n-\tint ret;\n-\tuint mask;\n-\n-\tmask = 1 << ldo;\n \n-\tret = pmic_reg_read(dev->parent, REG_LDO_EN);\n-\tif (ret < 0)\n-\t\treturn ret;\n-\n-\treturn ret & mask ? true : false;\n+\treturn _ldo_get_enable(dev->parent, ldo);\n }\n \n static int switch_set_enable(struct udevice *dev, bool enable)\ndiff --git a/include/power/rk8xx_pmic.h b/include/power/rk8xx_pmic.h\nindex 47a6b36..8e821c3 100644\n--- a/include/power/rk8xx_pmic.h\n+++ b/include/power/rk8xx_pmic.h\n@@ -171,8 +171,15 @@ enum {\n };\n \n enum {\n-\tRK805_ID = 0x8050,\n+\tRK816_REG_DCDC_EN1 = 0x23,\n+\tRK816_REG_DCDC_EN2,\n+\tRK816_REG_LDO_EN1 = 0x27,\n+\tRK816_REG_LDO_EN2,\n+};\n+\n+enum {\n \tRK808_ID = 0x0000,\n+\tRK816_ID = 0x8160,\n \tRK818_ID = 0x8180,\n };\n \n","prefixes":["U-Boot","2/5"]}