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 667E8C433EF for ; Fri, 27 May 2022 18:18:51 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 1A49F84369; Fri, 27 May 2022 20:18:47 +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="KA1mQZyt"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 105558334E; Fri, 27 May 2022 20:18:37 +0200 (CEST) Received: from mail-oa1-x2b.google.com (mail-oa1-x2b.google.com [IPv6:2001:4860:4864:20::2b]) (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 A1B768435C for ; Fri, 27 May 2022 20:18:33 +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-x2b.google.com with SMTP id 586e51a60fabf-e93bbb54f9so6633950fac.12 for ; Fri, 27 May 2022 11:18:33 -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=TTeIeLJPc+MgKbr9uRM3AHAJVjFGjkVUXghlRMXLR8A=; b=KA1mQZytIQSI5s1I6HSYFvaXuibJ5SJDvHyF6e67DgTcLiCTsy+/oZCVrgSApyhH9L L/1Ze0oTywDtW5oxvX9nem6r0B7PXUUVigZbXh2RVtza99o4hRXc3ibrBeE2S4G0Kczz GpS+VNmcGcn7uywht9lz2eV/mLmOYhx68PtfuqZQBbWuovmyKYt0cH7SE8A2K4/tSlKX 92ewdgehoF1cz7vkm9JQ/NYyDmNZgc+aoSlAklQMk30rP3upTb/UYq1InKH+vKEASdvQ JZ0tTVi+2eLfwEcvUpjV7aCXBWKCG3IAXEshC2eRwBiMAAGqgwV2c9gCMHVzGsLeYPjc L1Gw== 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=TTeIeLJPc+MgKbr9uRM3AHAJVjFGjkVUXghlRMXLR8A=; b=y90TzQS0Udkh8U306T7F8/vNfByxCoKEHYw+/Y28C7FdnJ7FAyYPFsVNiapWOLbnqM vXuxQUO/iH98wTfuj7iDD5f3AqzO9sVaez85+33VOZFmpJICqvHky9x5IJrUCrC5DAKQ iOObojI3jSE01FJNuLV0uEIv8MVKfvKzNltgn4VD/3df/vzRTzeirnaeXJDwUPHKXmCE RtGkYoBqfPYC2lgOKTGf94O/12K6tc+KsocRWkYj0ljzEcM9zHN3t6JgAfBOtSuAp6SC hNxUpoLrY8STxn2hWRV2iyn0sl/SFThddSO5ZPHzQMxBG5aeTtBPEPzeUezEeUgcaMk0 GSBw== X-Gm-Message-State: AOAM532LoOuLQX6Mw4TJrjphPjJVbE520NGHZHgfJDF+N/uQH+4P2bPs /0x7IENmy+H6eXImDj2rvWjoITaMzuWBZA== X-Google-Smtp-Source: ABdhPJxtidsqvnLPOra6UKdmgQP+TYtOKBRUNw0VnA3cMKTttL777mXiT7Vi/0nmj4nDgLDf8Cdx0A== X-Received: by 2002:a05:6870:7091:b0:f2:c683:3deb with SMTP id v17-20020a056870709100b000f2c6833debmr4828685oae.132.1653675512030; Fri, 27 May 2022 11:18:32 -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 g3-20020a4ad303000000b0040ed6225457sm1701300oos.47.2022.05.27.11.18.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 May 2022 11:18:31 -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 v2 1/2] power: pmic: rk8xx: Support sysreset shutdown method Date: Fri, 27 May 2022 13:18:19 -0500 Message-Id: <20220527181820.24948-2-macroalpha82@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220527181820.24948-1-macroalpha82@gmail.com> References: <20220527181820.24948-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 Reviewed-by: Jaehoon Chung Reviewed-by: Kever Yang --- 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