From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 22D122571D0; Mon, 7 Apr 2025 18:17:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744049853; cv=none; b=POoq7Y2iJjdv1ZFIIsZ45PPbvup1ljQEeDWApEe+7CbvIyVJy2KpfQeqzZyC8rg34LfqqNTw30J2XDP2rB1226A7xGt2f948WHyIm+Kk+jPCI3OaDNGqqG5BGYc9v4MskKgss9vdxzmf4PemvTXodWD43E01OFwiKLzqRdH962U= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744049853; c=relaxed/simple; bh=iGSyNrTHBXw3xZ+wJn3dD9eaK14Mh27PcDfdGv/T/dU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=W8ZCnPyZEnw9TVIfZdnT+336B0J1pC9M+LbxFPeigXrBFs6hZmmSmcN9z8gsz2TXyfGx2Jngm3GZAD0pQFfWhIrZlpAOSUjljBJ4xH0+AOmhtZ4y8i9uYEcn2ltiwuyMRHXgsaXn1kFVvxv9qG/5xwkNntzGBFaq3sK8cVy12kc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OGw6ePat; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OGw6ePat" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3503FC4CEDD; Mon, 7 Apr 2025 18:17:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1744049853; bh=iGSyNrTHBXw3xZ+wJn3dD9eaK14Mh27PcDfdGv/T/dU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OGw6ePat7G4OANqgeUGc5jxmSXd8dhCg/MMj2KhzLyF/IYHNih4GsybjKPQA0lg84 F98kQs11b9FJcxwTo1JXBAZ04t2g/5keD1+VxUeUh1iXQSXUPmGYj7hTBWpKsFUlP0 gSwcspqRLPBNRhnQ43qwoIhgUtMqAvjXvwHeeCWEfu1dYqSxV1aOQuFYtONqoKF2r8 MRF6bh0v02qJ8eacYkqKRhZ0Fq38QEPSDC2/0ip4+H3vTdnjWUJU224lLvmgzVdmrC HtI+FZOnlzdzOJjTKVs6wehH76Df8nm5je7It0cNs3ldsn5qBwObMlYAd7yx9kluvw ePuG7lDvzWiCw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Lukas Stockmann , Alexander Sverdlin , Alexandre Belloni , Sasha Levin , linux-rtc@vger.kernel.org Subject: [PATCH AUTOSEL 6.12 6/7] rtc: pcf85063: do a SW reset if POR failed Date: Mon, 7 Apr 2025 14:17:17 -0400 Message-Id: <20250407181718.3184348-6-sashal@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250407181718.3184348-1-sashal@kernel.org> References: <20250407181718.3184348-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.12.22 Content-Transfer-Encoding: 8bit From: Lukas Stockmann [ Upstream commit 2b7cbd98495f6ee4cd6422fe77828a19e9edf87f ] Power-on Reset has a documented issue in PCF85063, refer to its datasheet, section "Software reset": "There is a low probability that some devices will have corruption of the registers after the automatic power-on reset if the device is powered up with a residual VDD level. It is required that the VDD starts at zero volts at power up or upon power cycling to ensure that there is no corruption of the registers. If this is not possible, a reset must be initiated after power-up (i.e. when power is stable) with the software reset command" Trigger SW reset if there is an indication that POR has failed. Link: https://www.nxp.com/docs/en/data-sheet/PCF85063A.pdf Signed-off-by: Lukas Stockmann Signed-off-by: Alexander Sverdlin Link: https://lore.kernel.org/r/20250120093451.30778-1-alexander.sverdlin@siemens.com Signed-off-by: Alexandre Belloni Signed-off-by: Sasha Levin --- drivers/rtc/rtc-pcf85063.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/drivers/rtc/rtc-pcf85063.c b/drivers/rtc/rtc-pcf85063.c index 905986c616559..73848f764559b 100644 --- a/drivers/rtc/rtc-pcf85063.c +++ b/drivers/rtc/rtc-pcf85063.c @@ -35,6 +35,7 @@ #define PCF85063_REG_CTRL1_CAP_SEL BIT(0) #define PCF85063_REG_CTRL1_STOP BIT(5) #define PCF85063_REG_CTRL1_EXT_TEST BIT(7) +#define PCF85063_REG_CTRL1_SWR 0x58 #define PCF85063_REG_CTRL2 0x01 #define PCF85063_CTRL2_AF BIT(6) @@ -589,7 +590,7 @@ static int pcf85063_probe(struct i2c_client *client) i2c_set_clientdata(client, pcf85063); - err = regmap_read(pcf85063->regmap, PCF85063_REG_CTRL1, &tmp); + err = regmap_read(pcf85063->regmap, PCF85063_REG_SC, &tmp); if (err) { dev_err(&client->dev, "RTC chip is not present\n"); return err; @@ -599,6 +600,22 @@ static int pcf85063_probe(struct i2c_client *client) if (IS_ERR(pcf85063->rtc)) return PTR_ERR(pcf85063->rtc); + /* + * If a Power loss is detected, SW reset the device. + * From PCF85063A datasheet: + * There is a low probability that some devices will have corruption + * of the registers after the automatic power-on reset... + */ + if (tmp & PCF85063_REG_SC_OS) { + dev_warn(&client->dev, + "POR issue detected, sending a SW reset\n"); + err = regmap_write(pcf85063->regmap, PCF85063_REG_CTRL1, + PCF85063_REG_CTRL1_SWR); + if (err < 0) + dev_warn(&client->dev, + "SW reset failed, trying to continue\n"); + } + err = pcf85063_load_capacitance(pcf85063, client->dev.of_node, config->force_cap_7000 ? 7000 : 0); if (err < 0) -- 2.39.5