From nobody Sun Feb 8 07:21:59 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 E6497327BF8 for ; Tue, 23 Dec 2025 12:57:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766494655; cv=none; b=NUrYcnn7UyrofPRUbP9ymKHioaZ1MoJYBcUgWxKINB3G1dLLvAZqgvQKObPBvQHMR62CFvGZCeaYH7RheAEDO09QZYtCfyhaN2O+yao15KCH6GL+2lPsCFHzQocrjTS8zAi781YV2jkaAdE0ardabS9bPoubad3nreEyrC+zzAE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766494655; c=relaxed/simple; bh=9d3AqmeKXSAYnelLmGXoCLe/xzD7mfIltSiN9KW7kwQ=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=rOyKy3pBLSvq3252mtdQw/PEBH3g0x+GglRtESSyoagJmNSY/zNFObAJgw73owtWbps+sBX8pCS3hKCRg0ckp1YGi5+/ULBhb/6+huglqcbIBa8He9PnynLlS/ppkDzSU6y/9UszOB0PYn1UPkb7UWgTcNj+m7ldhtEfkvvS4Qg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=monogon.tech; spf=pass smtp.mailfrom=monogon.tech; dkim=pass (2048-bit key) header.d=monogon-tech.20230601.gappssmtp.com header.i=@monogon-tech.20230601.gappssmtp.com header.b=ireOOJD0; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=monogon.tech Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=monogon.tech Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=monogon-tech.20230601.gappssmtp.com header.i=@monogon-tech.20230601.gappssmtp.com header.b="ireOOJD0" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4779cb0a33fso50574595e9.0 for ; Tue, 23 Dec 2025 04:57:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monogon-tech.20230601.gappssmtp.com; s=20230601; t=1766494650; x=1767099450; 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=qeLuMuU0rLR3L3IWE5TVg/ejx2unMg1hrN1IZeYRkAQ=; b=ireOOJD0dVw2TFr//wE3HX9ZFKRiMohUJSbLOBL1/N8gyrG634MDDBfIYemKP6r+r8 +J+w8up/kAiYaQix+s/sc+FIFRKsIjadLRH4sFr/4fEpLY+thnZJk2OJ4qIYxgfVHeav /BR0iKuL/Me5KP0sCri9763cl7BFYPD25nv+XIr9kVPDoxaduvY8OkVUtveIAOJUN6AA 1yFb0ow/PjR3hkLCrjgEztjj2cMQoPVHGR/ER6ezJZqjda5VwI84Q2fnzXKpemSeS0Qx +Rc6icVgfu0AIDSjnV5fBENaQfLyh4cjDtRElTNtGaNcYMqbr3X3VSt90EQGvqTXMcZ8 mqxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766494650; x=1767099450; 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=qeLuMuU0rLR3L3IWE5TVg/ejx2unMg1hrN1IZeYRkAQ=; b=WMY7k0gM8QgVzMUaAF2bnRUWBk1j9pb4uHYHR+mkLjKzxsyr881WmvEYbtcH7mJ6KR X4RZw5++RTGpzX/HLwzBqt0YBLF/F/sgCeaaYXsIRJdLSIFCLz1uBu/+kMBWm3//hAfE tqEjFMtrQekU9iGaAkNNSZcTdA45hke1QtJp49dbAtx4tP+9LUOdsdn/U4yPl1KAylOp +u2/WyuVD2nVzrZrBM3Q1adPY/8PRE/FzY7fZ8nGtX/qegQW5c/LlLGNfsj2Jd1QjiUF dL2/bvi+u0LZLdziXeRphIswINrb2bQuTvQkmFagU7xLWv2mf2V4T47M56R00SV0FEYH dQVA== X-Forwarded-Encrypted: i=1; AJvYcCU3a4CJtJOtrpMD7+mBcjDXzSOC618MWP3lkGyIw/k6iEDr/wq8PvBVHRkUhi5JHyMs1VoOypn5oqCe2Ww=@vger.kernel.org X-Gm-Message-State: AOJu0YyO4VhRSr+12FgN4c7fivRn2BXEW7tz8TB7Xism6O1pDdtPFkXr db6Ktmzojd7W8ZscSuAyyWPDnLlpRJ/X0Xu+I/dTt6NU0QSMe9DQByVVpNF6vuQg0zk= X-Gm-Gg: AY/fxX6AIXhAzO7NzjHkMcGyDEP+Asqf/gLh8No8N7GfCLs+zScgzqXd5CI9QhW6NpF 7sJw2YgTzHuNnEPC1zfJOskZ1q7iFnIP9/C8xo+RJLiS2Dve+Cjxzj08wCO5F+t3awe5tVOn2Y/ UnRpuWNjHnxVz3BwjPCBWx8V3fPOIVol3ekhiZKq4qaacF1fzrdTjg8AKpqr54S6E1k5o6ckRb6 0efOwwx5qca8laquDVC+qAPB4JJcPwWiZLRt1VuGX/SevsO6cSEf58qtEd1yYWEpnncDwz/hN4N a2yAhsH0XWDy2acnjIfLem3KeZPC60pZagr/SN1woPE0G4H42elQyG6mntQJM625jUc7gSJSjXo 2tE2/7IyCeVBq7PiqsoLXbtIR8qmfXaDwgioJemgM0GXjmaOZQ05UVwup9jGRea9wignSAkQ6vP Um9dS8NwM= X-Google-Smtp-Source: AGHT+IFUkkGVc8k9ykozTSpnm7D9Ypqn4/MAxOVssi28cYTsnAIOSOMxqjirN2CKQoAdjFQA/Y5Mow== X-Received: by 2002:a05:600c:3b94:b0:471:13fa:1b84 with SMTP id 5b1f17b1804b1-47d19566b00mr170607805e9.12.1766494649580; Tue, 23 Dec 2025 04:57:29 -0800 (PST) Received: from localhost ([2a02:168:4f87:c:f5d0:88fb:fc2b:b91d]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-47d193d5372sm253675625e9.14.2025.12.23.04.57.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 23 Dec 2025 04:57:29 -0800 (PST) From: Lorenz Brun To: Alexandre Belloni Cc: linux-rtc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] rtc: s35390a: implement nvmem support Date: Tue, 23 Dec 2025 13:57:26 +0100 Message-ID: <20251223125728.346073-1-lorenz@monogon.tech> X-Mailer: git-send-email 2.51.2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This RTC has one "free" register which can be used to store arbitrary data. Expose it as a nvmem resource in Linux. Signed-off-by: Lorenz Brun --- drivers/rtc/rtc-s35390a.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/rtc/rtc-s35390a.c b/drivers/rtc/rtc-s35390a.c index 3408d2ab2741..2ed39d1c8142 100644 --- a/drivers/rtc/rtc-s35390a.c +++ b/drivers/rtc/rtc-s35390a.c @@ -18,6 +18,7 @@ #define S35390A_CMD_TIME1 2 #define S35390A_CMD_TIME2 3 #define S35390A_CMD_INT2_REG1 5 +#define S35390A_CMD_FREE_REG 7 =20 #define S35390A_BYTE_YEAR 0 #define S35390A_BYTE_MONTH 1 @@ -416,6 +417,23 @@ static const struct rtc_class_ops s35390a_rtc_ops =3D { .ioctl =3D s35390a_rtc_ioctl, }; =20 +static int s35390a_nvmem_read(void *priv, unsigned int offset, void *val, + size_t bytes) +{ + struct s35390a *s35390a =3D priv; + + /* The offset is ignored because the NVMEM region is only 1 byte */ + return s35390a_get_reg(s35390a, S35390A_CMD_FREE_REG, val, bytes); +} + +static int s35390a_nvmem_write(void *priv, unsigned int offset, void *val, + size_t bytes) +{ + struct s35390a *s35390a =3D priv; + + return s35390a_set_reg(s35390a, S35390A_CMD_FREE_REG, val, bytes); +} + static int s35390a_probe(struct i2c_client *client) { int err, err_read; @@ -424,6 +442,15 @@ static int s35390a_probe(struct i2c_client *client) struct rtc_device *rtc; char buf, status1; struct device *dev =3D &client->dev; + struct nvmem_config nvmem_cfg =3D { + .name =3D "s35390a_nvram", + .type =3D NVMEM_TYPE_BATTERY_BACKED, + .word_size =3D 1, + .stride =3D 1, + .size =3D 1, + .reg_read =3D s35390a_nvmem_read, + .reg_write =3D s35390a_nvmem_write, + }; =20 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) return -ENODEV; @@ -490,6 +517,11 @@ static int s35390a_probe(struct i2c_client *client) if (status1 & S35390A_FLAG_INT2) rtc_update_irq(rtc, 1, RTC_AF); =20 + nvmem_cfg.priv =3D s35390a; + err =3D devm_rtc_nvmem_register(rtc, &nvmem_cfg); + if (err) + return err; + return devm_rtc_register_device(rtc); } =20 --=20 2.49.0