From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6C1E4C433F5 for ; Mon, 23 May 2022 19:30:39 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id E87A18424A; Mon, 23 May 2022 21:30:36 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Ue94U2Ur"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 1672683B3C; Mon, 23 May 2022 21:30:14 +0200 (CEST) Received: from mail-oa1-x36.google.com (mail-oa1-x36.google.com [IPv6:2001:4860:4864:20::36]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 2998B83DBF for ; Mon, 23 May 2022 21:30:11 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=macroalpha82@gmail.com Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-e656032735so19775717fac.0 for ; Mon, 23 May 2022 12:30:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=mgCUJFAuV95AOFzt3MHbe3Qxpm8IIHTMBb9k4bBeQHk=; b=Ue94U2UrdHbJay2gZJuo7nRb67ilFeDBKphQiiCRQdQVNSIgj4+yOQFT24rc9o434g 6m46GvCQUiVwXlvlNxKWF5+krsAv790l/xtk7g1cT1+j3uVEQIuEsmP3GFm4CZikvVs5 pZzxGzvYuQjPfc2veDBCnrvg/za4utPEx+M2jtxnRUZQtxe0Kg6XD6jtMVcPPok8hqLs duOLrHGcs4jtRSH5NuraEc/IWGJeqvR4Ja9WleoOam3tR2Vh9z2OfG+YU5HcjiK9tOej gR/wm6PW4wu7o/chDA0pgaJDiEvusd9yTH8ZSMBfV7kuLL4YO1kz52BU73U2+DWnMlKt C8qA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mgCUJFAuV95AOFzt3MHbe3Qxpm8IIHTMBb9k4bBeQHk=; b=aVCQgGJiX+9nm7uJ5X4RKMpSP+yqGGmiEdSwVYsM13ZNxs3M5zeJkA5XtyklhXUips fq26/P4GuEG5VW2CDn1oMqRY4tB/5+S1v66pEA3YuK+e/6BZH4YnomYHkHCjGAHATQ28 Opsa/rS4ZQ9o7Ui+xtipem0gzbfiikLWHJcY0Kj8Qehz0+s5lqLoQN4OW6OVoC5HIo9G 1zsOulowg5yKtnEDLCrgtbamk39jVeun5K/4SL3LlPf37/bqBcZmic7ETZTfb4rlJKoK XK5eg3tT1ntwGbdeEp75xfbDqWhVHh158GHjmO7tN9IAwx+u28vtV/+li99MJvZJ8TCl E9nw== X-Gm-Message-State: AOAM530YMbaz3vYRTYxIhpHGIq1HKPrQnPsGahn2phSL7cVx9gXhQMYO 8lS5cKPppgng5H37gnFNnzxxtLuz4T90gw== X-Google-Smtp-Source: ABdhPJzNzvxFMfmGt1KUeJBkkjetFlju/a4OBan0UX2haVPMYZ658TzXbJDtUe2OjQG6td2Kfzdr1g== X-Received: by 2002:a05:6870:b41c:b0:f2:5d2b:9a77 with SMTP id x28-20020a056870b41c00b000f25d2b9a77mr366641oap.62.1653334209580; Mon, 23 May 2022 12:30:09 -0700 (PDT) Received: from wintermute.localdomain (cpe-76-183-134-35.tx.res.rr.com. [76.183.134.35]) by smtp.gmail.com with ESMTPSA id s7-20020a05687087c700b000f2911d1987sm336626oam.39.2022.05.23.12.30.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 May 2022 12:30:09 -0700 (PDT) From: Chris Morgan To: u-boot@lists.denx.de Cc: jh80.chung@samsung.com, kever.yang@rock-chips.com, philipp.tomsich@vrull.eu, sjg@chromium.org, Chris Morgan Subject: [PATCH 1/2] power: pmic: rk8xx: Support sysreset shutdown method Date: Mon, 23 May 2022 14:30:00 -0500 Message-Id: <20220523193001.13715-2-macroalpha82@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220523193001.13715-1-macroalpha82@gmail.com> References: <20220523193001.13715-1-macroalpha82@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.5 at phobos.denx.de X-Virus-Status: Clean From: Chris Morgan Add support for sysreset shutdown for this PMIC. The values were pulled from the various datasheets, but for now it has only been tested on the rk817 (for an Odroid Go Advance). Signed-off-by: Chris Morgan --- drivers/power/pmic/rk8xx.c | 50 +++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/drivers/power/pmic/rk8xx.c b/drivers/power/pmic/rk8xx.c index 5f442fea68..1ffbecc02a 100644 --- a/drivers/power/pmic/rk8xx.c +++ b/drivers/power/pmic/rk8xx.c @@ -6,10 +6,50 @@ #include #include +#include #include #include #include #include +#include + +static int rk8xx_sysreset_request(struct udevice *dev, enum sysreset_t type) +{ + struct rk8xx_priv *priv = dev_get_priv(dev->parent); + + if (type != SYSRESET_POWER_OFF) + return -EPROTONOSUPPORT; + + switch (priv->variant) { + case RK805_ID: + case RK808_ID: + case RK816_ID: + case RK818_ID: + pmic_clrsetbits(dev->parent, REG_DEVCTRL, 0, BIT(0)); + break; + case RK809_ID: + case RK817_ID: + pmic_clrsetbits(dev->parent, RK817_REG_SYS_CFG3, 0, + BIT(0)); + break; + default: + printf("Unknown PMIC RK%x: Cannot shutdown\n", + priv->variant); + return -EPROTONOSUPPORT; + }; + + return -EINPROGRESS; +} + +static struct sysreset_ops rk8xx_sysreset_ops = { + .request = rk8xx_sysreset_request, +}; + +U_BOOT_DRIVER(rk8xx_sysreset) = { + .name = "rk8xx_sysreset", + .id = UCLASS_SYSRESET, + .ops = &rk8xx_sysreset_ops, +}; static struct reg_data rk817_init_reg[] = { /* enable the under-voltage protection, @@ -61,7 +101,7 @@ static int rk8xx_read(struct udevice *dev, uint reg, uint8_t *buff, int len) static int rk8xx_bind(struct udevice *dev) { ofnode regulators_node; - int children; + int children, ret; regulators_node = dev_read_subnode(dev, "regulators"); if (!ofnode_valid(regulators_node)) { @@ -72,6 +112,14 @@ static int rk8xx_bind(struct udevice *dev) debug("%s: '%s' - found regulators subnode\n", __func__, dev->name); + if (CONFIG_IS_ENABLED(SYSRESET)) { + ret = device_bind_driver_to_node(dev, "rk8xx_sysreset", + "rk8xx_sysreset", + dev_ofnode(dev), NULL); + if (ret) + return ret; + } + children = pmic_bind_children(dev, regulators_node, pmic_children_info); if (!children) debug("%s: %s - no child found\n", __func__, dev->name); -- 2.25.1