From mboxrd@z Thu Jan 1 00:00:00 1970 From: Elaine Zhang Date: Wed, 4 Sep 2019 15:10:25 +0800 Subject: [U-Boot] [PATCH v1 5/7] power: pmic: rk8xx: add pmic_shutdown() implement In-Reply-To: <1567580907-9561-1-git-send-email-zhangqing@rock-chips.com> References: <1567580907-9561-1-git-send-email-zhangqing@rock-chips.com> Message-ID: <1567581025-9708-1-git-send-email-zhangqing@rock-chips.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de From: Joseph Chen 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[] = { -- 1.9.1