From patchwork Thu Sep 19 08:09:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: zhangqing X-Patchwork-Id: 1164434 X-Patchwork-Delegate: philipp.tomsich@theobroma-systems.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=rock-chips.com Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 46YrDt0QmVz9s7T for ; Thu, 19 Sep 2019 18:51:41 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 1C70BC21E02; Thu, 19 Sep 2019 08:10:46 +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.6 required=5.0 tests=RCVD_IN_SORBS_WEB autolearn=no autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id A72BAC21E90; Thu, 19 Sep 2019 08:10:45 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 626E7C21E7F; Thu, 19 Sep 2019 08:09:39 +0000 (UTC) Received: from regular1.263xmail.com (regular1.263xmail.com [211.150.70.196]) by lists.denx.de (Postfix) with ESMTPS id 4C904C21E6C for ; Thu, 19 Sep 2019 08:09:31 +0000 (UTC) Received: from zhangqing?rock-chips.com (unknown [192.168.167.83]) by regular1.263xmail.com (Postfix) with ESMTP id CB1A27F3; Thu, 19 Sep 2019 16:09:23 +0800 (CST) X-263anti-spam: KSV:0;BIG:0; X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-KSVirus-check: 0 X-ADDR-CHECKED4: 1 X-ABS-CHECKED: 1 X-SKE-CHECKED: 1 X-ANTISPAM-LEVEL: 2 Received: from localhost.localdomain (unknown [58.22.7.114]) by smtp.263.net (postfix) whith ESMTP id P29779T139714795394816S1568880559826507_; Thu, 19 Sep 2019 16:09:21 +0800 (CST) X-IP-DOMAINF: 1 X-UNIQUE-TAG: X-RL-SENDER: zhangqing@rock-chips.com X-SENDER: zhangqing@rock-chips.com X-LOGIN-NAME: zhangqing@rock-chips.com X-FST-TO: yk@rock-chips.com X-SENDER-IP: 58.22.7.114 X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 From: Elaine Zhang To: kever.yang@rock-chips.com, chenjh@rock-chips.com Date: Thu, 19 Sep 2019 16:09:27 +0800 Message-Id: <1568880567-23081-1-git-send-email-zhangqing@rock-chips.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1568880493-22962-1-git-send-email-zhangqing@rock-chips.com> References: <1568880493-22962-1-git-send-email-zhangqing@rock-chips.com> Cc: Elaine Zhang , u-boot@lists.denx.de, jack@embed.me.uk, krzk@kernel.org, sven@svenschwermer.de, richard@puffinpack.se Subject: [U-Boot] [PATCH v3 6/8] power: pmic: rk8xx: add pmic_shutdown() implement 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: Joseph Chen add rk8xx_shutdown for pmic shutdown. It is used in applications such as UBOOT shutdown charging. Signed-off-by: Joseph Chen Signed-off-by: Elaine Zhang --- drivers/power/pmic/rk8xx.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/drivers/power/pmic/rk8xx.c b/drivers/power/pmic/rk8xx.c index 00c8a2e091d8..df2056913ced 100644 --- a/drivers/power/pmic/rk8xx.c +++ b/drivers/power/pmic/rk8xx.c @@ -49,6 +49,44 @@ static int rk8xx_read(struct udevice *dev, uint reg, uint8_t *buff, int len) return 0; } +static int rk8xx_shutdown(struct udevice *dev) +{ + struct rk8xx_priv *priv = dev_get_priv(dev); + u8 val, dev_off; + int ret = 0; + + switch (priv->variant) { + case RK808_ID: + dev_off = BIT(3); + break; + case RK805_ID: + case RK816_ID: + case RK818_ID: + dev_off = BIT(0); + break; + default: + printf("Unknown PMIC: RK%x\n", priv->variant); + return -EINVAL; + } + + ret = dm_i2c_read(dev, REG_DEVCTRL, &val, 1); + if (ret) { + printf("read error from device: %p register: %#x!", + dev, REG_DEVCTRL); + return ret; + } + + val |= dev_off; + ret = dm_i2c_write(dev, REG_DEVCTRL, &val, 1); + if (ret) { + printf("write error to device: %p register: %#x!", + dev, REG_DEVCTRL); + return ret; + } + + return 0; +} + #if CONFIG_IS_ENABLED(PMIC_CHILDREN) static int rk8xx_bind(struct udevice *dev) { @@ -91,6 +129,7 @@ static struct dm_pmic_ops rk8xx_ops = { .reg_count = rk8xx_reg_count, .read = rk8xx_read, .write = rk8xx_write, + .shutdown = rk8xx_shutdown, }; static const struct udevice_id rk8xx_ids[] = {