From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 903371A5B84 for ; Fri, 17 Apr 2026 18:39:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776451146; cv=none; b=TmylEnvUYyR+rN+wqo4CLCdhqQAHnXvYUhtH+lxxZsbVycvWTLPnX58PkmlwiU3jSMXmYr53EUjP9MbGV/qDVWjc1ob6dFZXIyOFrTMGXiYRnXxfM+2oLHLi/VU5aKZe+3K/Hc8cRnJbi1SN+OKFjBJjpc0r7o41jhK/o5pChFg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776451146; c=relaxed/simple; bh=eruQFKRUgPkE3r+A43zpiXBrcwIJH4olNTJgaLccCvU=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=UdrPwxg4Li/Gf7yFJF2ztOLh1HfiMkqXuINioH21AO3DSIpcLZi/vAYYvdJpSAVnFysEm7zl0/PxebucSX7McR2y8PGjfJDZ4cBISz3zgb4EnHLHsy7JvvtMSoHk3ccnUf0JE93XuGUQ6AAZfSGKD5RltiUYTkBMWXJCD4QEqM8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=I7LexiBh; arc=none smtp.client-ip=209.85.214.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="I7LexiBh" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-2b23fcf90b2so9968595ad.3 for ; Fri, 17 Apr 2026 11:39:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776451145; x=1777055945; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=ae4XyvpGcdln6f15kE7xb97ONw8HzTbOYKK48/K7Tqw=; b=I7LexiBhDZ18mR7sSDS88KKCUN0ldw8qRw0AJkQt9VQcwYAATV7l4B+qU1YEW715dM zpK/uq4ksMjmpzv2kSLBSRkpuoETSIs+iy8USfjlockqDhY+kEYgP361w5A6IVIMqhLG wmSUOPinxR2mkOh/yxprY5JRQ0Hn3DAIfMKV+zrfYNwvi2Pu6Pr/Bc9RztEpXWdxq4tU KOauxwL/+WXuhDO8jMZ2A/i+I+uFb35/mmV/KmYVptKwhevhefPmOu/H9FQJZfBOIYUD IK26jywjkXbvWE73qxUeVoc3wF5fvt70Rn08MftdQjsl1l97E/RgQ3ORv0oITaMyg/jN iO7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776451145; x=1777055945; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=ae4XyvpGcdln6f15kE7xb97ONw8HzTbOYKK48/K7Tqw=; b=hMlhmbd1OfeX99RJWc6n0FPyoUNPGKgbdHXBCGWy6EGho0HqTpPrhGVPLxVkKJ46TT eW4+QavnkttzELlrVYtTiziQ10g52F38vHVap2WBf+kRcYTrR4YDdnoU7JN9kucrC3kA AlS5QWsQ9ptu0Yag1sSX1113NQ1AFCV+dviHJRJvESLzThgU2hHPNwV0u4mWutJcCrJi k2K9Cf9l5kTF31mSMAr9id2OR5T8HIWnnXCgc7ms8kp/boGG/BYWavkEWxJxP1WqOLXF KrQoBmumj7JjIHdGUfPB/n/G6LWfX6XseDnk4LPmXexEArx0Yoj/1sVgbtrsY54vmcf0 XVqQ== X-Forwarded-Encrypted: i=1; AFNElJ/EJb2HJ+v/UmYrnK3vacikZrr1kZ98nwVa5vN5F+U5ziqk3i1zNAw3scqy1PW52hJM9iH994NWKwmGO5g=@vger.kernel.org X-Gm-Message-State: AOJu0YxP/6fYqVOKVOeVxmLguhw6qwkobV0GMe67Dn6i8iXxTNkJW/lr nzXcKpHi0GhRIxVu17c3JZJE4i5HxyEwfEI5EbgRkiWu7hp2e0euCUKS X-Gm-Gg: AeBDies5KKbY5caOO7AvS2+IGLViYGkHsRlQlicxpB45KcGbrpk49tbwvpVX/n3V7o8 MC5b+BP0qisTKGVEn4PT7kxjyzLVX1EFYKr6PtTPMfjQtaF8d4fn7pI9QSvOF3WsMnX9OsexfKw jiBa/v8ez2Qiyd8W00iEvccdzk27Qf6DpjPGQt+JnC++WO0m35u3WppqLH86e7iEyxogyu4ACAR K2J0kJvHi5YoR8JjX0iO527ctRT6z/lIwTsBnZYiqhc6MBZaOLs7vl8fPwUJxHtk9csQX7oqNGE VTAVd4F8XhiOGnGzl1aeRH+53C1J2m87z1w/1Bq35ERCNDP4RvRdh/9b7W25aNYZVvngUmHpdlU GF1GYs6PSohU4Svg2VFnY/21sn/Hru3apr483Sr/dO3YJD3EgFy5JKUSlrDc74y0VbgWgjOBORm Jb1u5X98SoUGheOPE53qR+6SQuMUXmF81fsNCvqte9Z7QUCl0VUR7Vr4rHZuLuWFncUnY= X-Received: by 2002:a17:902:690a:b0:2b2:50bd:83b3 with SMTP id d9443c01a7336-2b5f9e8196fmr29987735ad.10.1776451144652; Fri, 17 Apr 2026 11:39:04 -0700 (PDT) Received: from intel-VirtualBox.. ([185.213.82.129]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b5fab3a929sm25583465ad.72.2026.04.17.11.39.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Apr 2026 11:39:04 -0700 (PDT) From: Brian Sune To: alexandre.belloni@bootlin.com Cc: linux-rtc@vger.kernel.org, linux-kernel@vger.kernel.org, Brian Sune Subject: [PATCH v1] Fix missing RTC charge ctrl Date: Sat, 18 Apr 2026 02:38:49 +0800 Message-Id: <20260417183849.88144-1-briansune@gmail.com> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Default driver did not consider battery supported use cases, which DTS and probe did not control the charge switch and strength. As such battery could be dried out and possible dmanage. Signed-off-by: Brian Sune --- drivers/rtc/rtc-sd3078.c | 47 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/drivers/rtc/rtc-sd3078.c b/drivers/rtc/rtc-sd3078.c index 10cc1dcfc774..871e6d9acd86 100644 --- a/drivers/rtc/rtc-sd3078.c +++ b/drivers/rtc/rtc-sd3078.c @@ -22,11 +22,17 @@ #define SD3078_REG_CTRL1 0x0f #define SD3078_REG_CTRL2 0x10 #define SD3078_REG_CTRL3 0x11 +#define SD3078_REG_AGTC 0x17 +#define SD3078_REG_CHARGE 0x18 #define KEY_WRITE1 0x80 #define KEY_WRITE2 0x04 #define KEY_WRITE3 0x80 +#define CLK_F32K 0x40 + +#define BAT_IIC 0x80 + #define NUM_TIME_REGS (SD3078_REG_YR - SD3078_REG_SC + 1) /* @@ -36,6 +42,13 @@ */ #define WRITE_PROTECT_EN 0 +static const char * const sd3078_charge_names[] = { + "10k", /* 0x00 */ + "5k", /* 0x01 */ + "2k", /* 0x02 */ + "inf", /* 0x03 */ +}; + /* * In order to prevent arbitrary modification of the time register, * when modification of the register, @@ -148,13 +161,15 @@ static const struct rtc_class_ops sd3078_rtc_ops = { static const struct regmap_config regmap_config = { .reg_bits = 8, .val_bits = 8, - .max_register = 0x11, + .max_register = 0x18, }; static int sd3078_probe(struct i2c_client *client) { int ret; + unsigned int val; struct regmap *regmap; + bool f32k_out, bat_iic; struct rtc_device *rtc; if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) @@ -182,6 +197,36 @@ static int sd3078_probe(struct i2c_client *client) sd3078_enable_reg_write(regmap); + f32k_out = device_property_read_bool(&client->dev, "CLOCK_F32K"); + regmap_update_bits(regmap, SD3078_REG_CTRL3, + CLK_F32K, !f32k_out); + + bat_iic = device_property_read_bool(&client->dev, "IIC_ON_BAT"); + regmap_update_bits(regmap, SD3078_REG_AGTC, + BAT_IIC, bat_iic); + + ret = regmap_read(regmap, SD3078_REG_CHARGE, &val); + if (!ret) { + dev_info(&client->dev, "RTC BAT Charge: %s", + (val & 0x80) ? "ON" : "OFF"); + } + + ret = device_property_read_u32(&client->dev, "BAT_CHARGE", &val); + if (!ret) { + // 0: 10k, 1: 5k, 2: 2k, 3: inf + dev_info(&client->dev, "Enable Battery Charge.\n"); + regmap_write(regmap, SD3078_REG_CHARGE, + (val < 3) ? (u8)(val|0x80) : 0x03); + } + + ret = regmap_read(regmap, SD3078_REG_CHARGE, &val); + if (!ret) { + dev_info(&client->dev, "RTC BAT charge: %s", + (val & 0x80) ? "ON" : "OFF"); + dev_info(&client->dev, "RTC BAT Charge Strength: %s", + sd3078_charge_names[val & 0x03]); + } + return 0; } -- 2.34.1