From nobody Fri Jun 12 20:22:42 2026 Received: from mail-dy1-f178.google.com (mail-dy1-f178.google.com [74.125.82.178]) (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 882753672B0 for ; Tue, 12 May 2026 18:56:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778612207; cv=none; b=Kx8fFIRdQE4ceJkgsmMeej1uW5QaCHRDK0+5U55BC/cvlggqCqRYU1LUSEbRF4hVi+r1kCm+DBVTNF1CUObEkbH2HOzEcI/GPDQJccdY4dPw45wmaF68ktpdJQ2tvUgoc8ARbpOwn9Mq6oRChutcLn5Ep7GTWLpZ60Zqkg5OptU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778612207; c=relaxed/simple; bh=6vBEHLMLOSh3PUQH6ftcKyQ9NFmKypGaweZdjAsCnfo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s0haI+MPo/id4tZv7Gl2cJAy307CZITCbHIJIK8LC283nFZ9hNmaTxNNdRRgfyC5Bmgh3zuC/0RlQjXn092uB7Eju6gVHLy/5oA+8tsE9E/BTCe2RojlXPhTuknSgI0KNtucTZmSXbY21LXkVBW03peiFO21kt0g/q0bp9FQptc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nexthop.ai; spf=pass smtp.mailfrom=nexthop.ai; dkim=pass (2048-bit key) header.d=nexthop.ai header.i=@nexthop.ai header.b=jCu9v/R4; arc=none smtp.client-ip=74.125.82.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nexthop.ai Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nexthop.ai Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nexthop.ai header.i=@nexthop.ai header.b="jCu9v/R4" Received: by mail-dy1-f178.google.com with SMTP id 5a478bee46e88-2ff5472f263so1983225eec.1 for ; Tue, 12 May 2026 11:56:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nexthop.ai; s=google; t=1778612205; x=1779217005; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=qmlEmHdWn0teIVBaM5N/uRakvieamDiDIKxKpSCD5g8=; b=jCu9v/R4G4gAXoDlalY7BjS8FnfD1tvrT5EXFW0nEsid2JPPAtiL7Z2DTOh45B5vh0 x3YwIfew8GvjdbQqvwa/p+K3Eh5eNOeqby2EYvV3RGzFxCjlVSJjW2HqvJWJlqAT1KyI 9k87U++OvwfORpHVZjoRCeXSMLxgwR3wFolk/HNM6tC2zuNkbaFjgykkfZ1ro9v/NYI6 fm0SpVAxdpa83sipeRbDpan1/qYI998te9VWgTQpRtKSLq32jBA2z4oFxQm8SnrTB9yZ 6LlhsaHg4ClQnjVJGuDpKq136OPOo5VeCpOrgmr1jFucDDrrHQJF5haExw0aCyaXvb6O UB4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778612205; x=1779217005; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=qmlEmHdWn0teIVBaM5N/uRakvieamDiDIKxKpSCD5g8=; b=fTEETlwWAdR8B3DsWMNX2VPayEgZEiCt7JhpI4Ql6j6g/PcPWh7aHN670DtEKGUiCM 8qLXUews4l438S7l1jOu6H6oh7yIJJYHhKqW3db73UZPBjx/pVRX/0WIUTDs/Qdz9hq/ 4BaDCg5QUIsBkVcGeO++g+1i0WqRp9Pr8FskNnR0l23ZHv1NtMu/7C1YsyH10myXkv47 6XcnILaeRdeMLi7G0KBsL10V7sCjUI6TGci8LiR+SMComipoWMbnpw9CkCue+bsJ98M7 XcwfNr1fNcf6hC5sSvPbonb/yR9KQBfbLwyk4D+lqa+hrynIFe6zMPZzTyzkLw1bQHV3 4a6g== X-Forwarded-Encrypted: i=1; AFNElJ++qWahBFLHNasg2qrMHR7do2WS+bQfmDYhWJ3aC77GgIK39imEvO3LxVgDj+DOs+kTKqKhVrJeziDTxKU=@vger.kernel.org X-Gm-Message-State: AOJu0Yy+J/Lp2ScD96UpqDt29mvM/tRxqgxlXRAPrS7L+R7IDqsHWFph yj8221fASgfHjFgKLRh6xhFh7EE0j9KNFFzcKOc7bpDQrwDfyI7OO88BmD51jZ4v2xyXEgAhzOd U11QcRTI= X-Gm-Gg: Acq92OHYisxBVhRvhd3COePTsblMP7FpTDBaezdMYi/ZquqtwV5tz0IZmWmVrtysHGq BNWuYOwE7QhtiTlcp/OyA2cHEEe02v1/4+J3FYHPq3wbji69yql5onG/1tPNe8VxvBZVsNChkx0 59fllSwUFs4m5X520JlaXOdpNQoY/2a4tZo0XUSNnZAdkREb19wfsbM/aFko/QyoUL47nPEq1Us sxiR7if4Gyw2tE80NDSSCk2WBRJE76h02qye4h3ZKigLHolU3XXI2H+4Yw7X9q45JsbBY5y8Xkv 47Gd2bwfgck22LmdIIi4mp3BSwzTW5OmSvPMwj1yKKqZCtZm0OMcNv5PhGHNZy4pZlGZ9aIpj/X 3xEhGtkcm98kxL66pP3voQIVgiGX7r6EdbY3AovAIi6nzEJfOAGM0Z7nKdbxMbSGVMkBAo0qQjg 8MM3DHdSA5/0KbXZphSdK7pxCvDA== X-Received: by 2002:a05:7300:dc10:b0:2ee:be86:7b90 with SMTP id 5a478bee46e88-3011977a8a3mr184693eec.29.1778612205331; Tue, 12 May 2026 11:56:45 -0700 (PDT) Received: from [127.0.0.2] ([50.145.100.174]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2f8862d43b4sm18626408eec.11.2026.05.12.11.56.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 11:56:45 -0700 (PDT) From: Abdurrahman Hussain Date: Tue, 12 May 2026 11:56:24 -0700 Subject: [PATCH v3 1/5] hwmon: (pmbus/adm1266) add firmware_revision debugfs entry Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-adm1266-v3-1-a81a479b0bb0@nexthop.ai> References: <20260512-adm1266-v3-0-a81a479b0bb0@nexthop.ai> In-Reply-To: <20260512-adm1266-v3-0-a81a479b0bb0@nexthop.ai> To: Guenter Roeck , Alexandru Tachici Cc: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, Abdurrahman Hussain X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778612203; l=2492; i=abdurrahman@nexthop.ai; s=20260510; h=from:subject:message-id; bh=6vBEHLMLOSh3PUQH6ftcKyQ9NFmKypGaweZdjAsCnfo=; b=E1SfiCYwRsxPNgtJQpxEvLQ6uzgLlppOi0Ebc/3AtrJikD7Ag7IbyRP62k5LSqZgRn8FYuElM msgf0fq4ejrAOWQ4+oYmQENu1NtbcwoUhrTSpbwkWr8gCpI3NV1LpFb X-Developer-Key: i=abdurrahman@nexthop.ai; a=ed25519; pk=omTm9cCAbO0ZhS32aKfJDKue0W3sQGpG9ub5eYHif8I= The ADM1266 reports its firmware revision via the IC_DEVICE_REV manufacturer-specific block-read command (0xAE, datasheet Rev. D Table 80). The first three returned bytes are the firmware major.minor.patch fields. This is useful when correlating field behaviour against ADI release notes; expose it through debugfs alongside the existing sequencer_state entry. The standard PMBus MFR_REVISION (0x9B) register is already exposed by pmbus_core's debugfs auto-create path and reports the manufacturer revision, which is a separate thing from the firmware running on the device. Signed-off-by: Abdurrahman Hussain --- drivers/hwmon/pmbus/adm1266.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/drivers/hwmon/pmbus/adm1266.c b/drivers/hwmon/pmbus/adm1266.c index d90f8f80be8e..7b8433226176 100644 --- a/drivers/hwmon/pmbus/adm1266.c +++ b/drivers/hwmon/pmbus/adm1266.c @@ -21,6 +21,7 @@ #include #include =20 +#define ADM1266_IC_DEVICE_REV 0xAE #define ADM1266_BLACKBOX_CONFIG 0xD3 #define ADM1266_PDIO_CONFIG 0xD4 #define ADM1266_READ_STATE 0xD9 @@ -331,6 +332,30 @@ static int adm1266_state_read(struct seq_file *s, void= *pdata) return 0; } =20 +/* + * IC_DEVICE_REV (0xAE) returns an 8-byte block (datasheet Rev. D, Table 8= 0): + * [2:0] firmware revision major.minor.patch + * [5:3] bootloader revision major.minor.patch + * [7:6] silicon revision two ASCII characters + */ +static int adm1266_firmware_revision_read(struct seq_file *s, void *pdata) +{ + struct device *dev =3D s->private; + struct i2c_client *client =3D to_i2c_client(dev); + u8 buf[I2C_SMBUS_BLOCK_MAX]; + int ret; + + ret =3D i2c_smbus_read_block_data(client, ADM1266_IC_DEVICE_REV, buf); + if (ret < 0) + return ret; + if (ret < 3) + return -EIO; + + seq_printf(s, "%u.%u.%u\n", buf[0], buf[1], buf[2]); + + return 0; +} + static void adm1266_init_debugfs(struct adm1266_data *data) { struct dentry *root; @@ -343,6 +368,8 @@ static void adm1266_init_debugfs(struct adm1266_data *d= ata) =20 debugfs_create_devm_seqfile(&data->client->dev, "sequencer_state", data->= debugfs_dir, adm1266_state_read); + debugfs_create_devm_seqfile(&data->client->dev, "firmware_revision", data= ->debugfs_dir, + adm1266_firmware_revision_read); } =20 static int adm1266_nvmem_read_blackbox(struct adm1266_data *data, u8 *read= _buff) --=20 2.53.0 From nobody Fri Jun 12 20:22:42 2026 Received: from mail-dy1-f174.google.com (mail-dy1-f174.google.com [74.125.82.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 650D2372071 for ; Tue, 12 May 2026 18:56:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778612208; cv=none; b=gRnh7YW2NCURMZC800vqYiItsfI+mrHHtcGQPr+cGUgrsUNXGu32YXgtXBw3zuk58pUDHlnmmkGKi1Nh5KLLkPvu7QufrXo27xBcqOcvxBHMspH4/8aMsFOzxu+4rII4CK8F0d7h4oKtfdmU7XjPo9yJgtDheJSbIU+FnpEs0Qc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778612208; c=relaxed/simple; bh=Z7hkncgsOQY/+2tXdlSW2APoMxPqmZfYnmq7uiHim+M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PwlhpiUR05LI+ooSY9RTrJ/bigjQ7BfY+Pg2YNbHJl09xaf0bQc9+iJINmyew7Wq80Ia2bfPLoPWYO2TcMccQ+BKmwZM8dfYp9lHHcAOKxPk7hKvjgCYkTk+zEObhWaZ6rw/b7zibG5cZ8YCL4LlKG2Po9Vagm/vsb791cnSjzI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nexthop.ai; spf=pass smtp.mailfrom=nexthop.ai; dkim=pass (2048-bit key) header.d=nexthop.ai header.i=@nexthop.ai header.b=VDDtk/Uo; arc=none smtp.client-ip=74.125.82.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nexthop.ai Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nexthop.ai Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nexthop.ai header.i=@nexthop.ai header.b="VDDtk/Uo" Received: by mail-dy1-f174.google.com with SMTP id 5a478bee46e88-2ee990e8597so10077018eec.1 for ; Tue, 12 May 2026 11:56:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nexthop.ai; s=google; t=1778612206; x=1779217006; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=gXhdJByMTXKnr5SUOLnc+CwZJu8wV9dbpoJ9K/0/NZs=; b=VDDtk/UoJvtb0wYOfmkSd3U2k5FQS1lm9YS+NZwMwV92p8gZuBP4CmVmILjyzWCyHG +tdexM9m/r8vTq3KUDH3bZcIYNHYloWCQ1EZ4ZI8WyHYJ9VAkYMqd79PoPtiIxiMHENC YUsMMvSuod3/vWSdwfh5lo+PobCZ2FAd6ZNUw2njN5TFuYpJKuvD4ysZZ2q4P2GTQ/SD WxIya5Uxo6tWX+/fRwRkMUNjmjGqpOW8lG0vqi4pJiFjmLcGnW3FL4kAMeQ5YE38PMuq 3ow14fcAFouINn9SWn0Y1hxamvD8RxwKaRnnwTni4gMSIflSghIUuGF4YfKWxaebYJfv YrgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778612206; x=1779217006; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=gXhdJByMTXKnr5SUOLnc+CwZJu8wV9dbpoJ9K/0/NZs=; b=XP0My0fh6nDzDHqVkcW6ldYN7wK4Rvfa9kOoac0H1MSzoVqmKBUGyQ742HUfCXuyxM 7X/9MQQOqWc11KsA4H3tMcaJaI5A3h7ffl42X5O7QZQY2QH1M3m12Lwy+BbIZmve8j3r YktitR82+P2/FWNavIxbVjNwEEWXjIWmWM+D1L2MkM7yOU5+3Vvf5uuvTtXExTZSSuYj S6Qnk96elQdB3auNx00XQGSzPyM2pGKBI+Aaq7aEMtgeiJZ8OuvBeJqaV2rK6i5Ic5BJ /Ls2XLxtwAkr7ARWkWMEEIjisvNOOGrMEVihBRE1KaLqZqk7krZuslKsbrKduM8ZukZv piBg== X-Forwarded-Encrypted: i=1; AFNElJ9FQY7C4F9GZHArz6ykmVQnfyjd1EpxE2Z4DoMY0A8LSOz/nWxQb3IleLB6hwMNjR+ND7WoQSe2V8jjqF8=@vger.kernel.org X-Gm-Message-State: AOJu0YwadIeuFKOZdu3/G/497ra4hiVb+K6c95JheMiCwc04ErSqwT7I PZ8aXdWzeBvs7/msFuXdThkkIqlizWucte8TXFwXDyu6+BktwE/Bz+IRXijTx8HGsSNFve0lG2G ghkapArM= X-Gm-Gg: Acq92OGZCxUDqHHxyC6s4fgKqnIrUOX2c1yvGqmiNVpRF07CNfqrEMJ5YV9OtlarsZ1 /E2qhmgbyiX/RBifu/ScC7Y6aPK0TURxdCn4XQfGiIP9QTlugjMzRTzvFee4O3iAZCMNHvffDdP b4Cb1CWxLzjucNVv+PYF2HbFsm4jKDxonYV603f5rZwqgCS5+1whyXL1LmU8RTB6ymjtv7QCvhc 6hVdREu2VMeKy69QU9Lxu33LkoO1ajG3rUphrZTyAEWHC1uznwUWzFNBJVUd6ZTB93ZrzKFhtvl WB1TkzMuRr+EKSCChHi3cAnOwaFURCOD4/ATfUlogJSX+Y8M7xdqaV54Q7MD2/0pysQ3VX2sFNh 4wiiIWHo0T7GIWCRiKpTb2qhOhu1A7ECZKRd4elJH/YU9d6IQ952Z3ZUYf1RK7r5BFVQ+j+g+f6 17XKf7OIaUomo+bPfg3FkgeVWdCw== X-Received: by 2002:a05:7301:fa12:b0:2df:7fe3:96a with SMTP id 5a478bee46e88-3011437364emr243570eec.0.1778612206001; Tue, 12 May 2026 11:56:46 -0700 (PDT) Received: from [127.0.0.2] ([50.145.100.174]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2f8862d43b4sm18626408eec.11.2026.05.12.11.56.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 11:56:45 -0700 (PDT) From: Abdurrahman Hussain Date: Tue, 12 May 2026 11:56:25 -0700 Subject: [PATCH v3 2/5] hwmon: (pmbus/adm1266) add clear_blackbox debugfs entry Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-adm1266-v3-2-a81a479b0bb0@nexthop.ai> References: <20260512-adm1266-v3-0-a81a479b0bb0@nexthop.ai> In-Reply-To: <20260512-adm1266-v3-0-a81a479b0bb0@nexthop.ai> To: Guenter Roeck , Alexandru Tachici Cc: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, Abdurrahman Hussain X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778612203; l=3902; i=abdurrahman@nexthop.ai; s=20260510; h=from:subject:message-id; bh=Z7hkncgsOQY/+2tXdlSW2APoMxPqmZfYnmq7uiHim+M=; b=hffBXCWKJ8/ONUkpmKyalJ1r4OU+MupJVvVPPSd6Hf0/1itF0tVeU/emknBchy7RtUL8p3AvW Encmagcwtz2CtagLee33pwFQ2BtPmKG/Eb+yHI+WMvxSxqJ7v/bRcUY X-Developer-Key: i=abdurrahman@nexthop.ai; a=ed25519; pk=omTm9cCAbO0ZhS32aKfJDKue0W3sQGpG9ub5eYHif8I= The ADM1266 blackbox can be configured in two recording modes via BLACKBOX_CONFIG[0]: cyclic, where the device overwrites the oldest record once the 32-record buffer fills, and single, where it stops recording until the buffer is cleared. Deployments that need to preserve the full record history across multiple fault episodes typically run in single mode and need a way to clear the buffer after the records have been collected. Expose a write-only debugfs file alongside sequencer_state. Writing any data to it issues the documented clear-blackbox sub-command: a 2-byte block-write to READ_BLACKBOX (0xDE) with payload {0xFE, 0x00} (datasheet Rev. D). Signed-off-by: Abdurrahman Hussain --- drivers/hwmon/pmbus/adm1266.c | 48 +++++++++++++++++++++++++++++++++++++--= ---- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/drivers/hwmon/pmbus/adm1266.c b/drivers/hwmon/pmbus/adm1266.c index 7b8433226176..bd3784d59a7c 100644 --- a/drivers/hwmon/pmbus/adm1266.c +++ b/drivers/hwmon/pmbus/adm1266.c @@ -356,6 +356,40 @@ static int adm1266_firmware_revision_read(struct seq_f= ile *s, void *pdata) return 0; } =20 +/* + * Clearing the blackbox is required when the device is configured in + * single-recording mode (BLACKBOX_CONFIG[0] =3D 0): once the 32-record + * buffer is full the device stops recording until cleared. + * + * The clear is issued as a 2-byte block-write to READ_BLACKBOX with + * payload {0xFE, 0x00} per the datasheet. READ_BLACKBOX is also used + * by adm1266_nvmem_read_blackbox() to walk records one at a time, so + * both paths take pmbus_lock to keep the clear from interleaving + * mid-iteration and corrupting the read sequence. + */ +static ssize_t adm1266_clear_blackbox_write(struct file *file, const char = __user *ubuf, + size_t count, loff_t *ppos) +{ + struct i2c_client *client =3D file->private_data; + u8 payload[2] =3D { 0xFE, 0x00 }; + int ret; + + guard(pmbus_lock)(client); + ret =3D i2c_smbus_write_block_data(client, ADM1266_READ_BLACKBOX, + sizeof(payload), payload); + if (ret < 0) + return ret; + + return count; +} + +static const struct file_operations adm1266_clear_blackbox_fops =3D { + .owner =3D THIS_MODULE, + .open =3D simple_open, + .write =3D adm1266_clear_blackbox_write, + .llseek =3D noop_llseek, +}; + static void adm1266_init_debugfs(struct adm1266_data *data) { struct dentry *root; @@ -370,6 +404,8 @@ static void adm1266_init_debugfs(struct adm1266_data *d= ata) adm1266_state_read); debugfs_create_devm_seqfile(&data->client->dev, "firmware_revision", data= ->debugfs_dir, adm1266_firmware_revision_read); + debugfs_create_file("clear_blackbox", 0200, data->debugfs_dir, data->clie= nt, + &adm1266_clear_blackbox_fops); } =20 static int adm1266_nvmem_read_blackbox(struct adm1266_data *data, u8 *read= _buff) @@ -379,10 +415,11 @@ static int adm1266_nvmem_read_blackbox(struct adm1266= _data *data, u8 *read_buff) u8 buf[5]; int ret; =20 + guard(pmbus_lock)(data->client); + ret =3D i2c_smbus_read_block_data(data->client, ADM1266_BLACKBOX_INFO, bu= f); if (ret < 0) return ret; - if (ret !=3D 4) return -EIO; =20 @@ -392,7 +429,6 @@ static int adm1266_nvmem_read_blackbox(struct adm1266_d= ata *data, u8 *read_buff) ret =3D adm1266_pmbus_block_xfer(data, ADM1266_READ_BLACKBOX, 1, &index,= read_buff); if (ret < 0) return ret; - if (ret !=3D ADM1266_BLACKBOX_SIZE) return -EIO; =20 @@ -497,14 +533,14 @@ static int adm1266_probe(struct i2c_client *client) if (ret < 0) return ret; =20 - ret =3D adm1266_config_nvmem(data); - if (ret < 0) - return ret; - ret =3D pmbus_do_probe(client, &data->info); if (ret) return ret; =20 + ret =3D adm1266_config_nvmem(data); + if (ret < 0) + return ret; + adm1266_init_debugfs(data); =20 return 0; --=20 2.53.0 From nobody Fri Jun 12 20:22:42 2026 Received: from mail-dy1-f171.google.com (mail-dy1-f171.google.com [74.125.82.171]) (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 4774A3783AE for ; Tue, 12 May 2026 18:56:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778612209; cv=none; b=I/zUqKK1g2oe527NnFtRBiq0L6FtLHY3VXbYAW/9HAP+PolP9aoPTEXHZqLjhd+fU4rdzIgctJaRc4axHIktpkw0gFc7w8PKHY0J8HnXy2cNMO0VXrYT4+9C4Lvv56ideXn5LhirKwG3A0b7fvT4skG5AkZC0il5uLyiFhOlSh0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778612209; c=relaxed/simple; bh=k/WeXsyIs4N8EBomdIUZhc6w7uqY0msS071m02q6900=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=n+vfwt9z6e7kQn3S0Bf0j+f8KHwz6tMhIDFyxvIL3/dB0VcV1Z7f2ibZXGV1g1se5qQf4XEi2micgGpJvuOUGSo99Tb60h7H9gDyHMsfD10z0M6narVZebeYNp8opZHw1NABvMnE2ixiYvtPhXYcv6su8aOfcBD/gXYmnXBC2uw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nexthop.ai; spf=pass smtp.mailfrom=nexthop.ai; dkim=pass (2048-bit key) header.d=nexthop.ai header.i=@nexthop.ai header.b=b9XySYwo; arc=none smtp.client-ip=74.125.82.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nexthop.ai Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nexthop.ai Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nexthop.ai header.i=@nexthop.ai header.b="b9XySYwo" Received: by mail-dy1-f171.google.com with SMTP id 5a478bee46e88-2f30a4601bbso6341435eec.1 for ; Tue, 12 May 2026 11:56:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nexthop.ai; s=google; t=1778612207; x=1779217007; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=eieIXGoJTyA0haz1UtIrd2PB79IVIZJdV7E0usIY6Q4=; b=b9XySYwoxt+GBjKIDhNRrqiiV+zP2hF8KoTrU5nqgoFsDStK8FYpxdua5UQMawMtVd 01v0j3Ft+9OTdpMJ0mZPx708AphrrkbNpuptF9qlUGRMGmracXDPkX2F3NRyLWNCC5n2 lVycH7Zsh03lZ9igq5kkATmKOxTvW7GMyyWxLrfzOEuUsdq4I/bAYfkYgPh16npk1Bje trFpEFbB0iVdSVS4yXFD0YocMGReo2MqE81sx5dfuIesrwB7vz9ZNLGIOPVqP3lbuC6N fZKBgbJoImAPTs0igZAV6UcEtrkNA1IcYOKAVrAa16HOMcQVJLIOYCV3/FLKpwFJW0Sh z7Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778612207; x=1779217007; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=eieIXGoJTyA0haz1UtIrd2PB79IVIZJdV7E0usIY6Q4=; b=KLYilb2BPvkS0briJZOaGts7KF5z4+wQ2qJ2Fc+SP/+mtSDfexafXtZy5p3AfEldcP RMrDDxxf3V5qey/3aWTZlc1Cyv88W70WWFYkuBJLL5xNkfG+OL9uePqusrmmlTVcjgV2 jHy71SOygtcNof4C58dXhatyYkaVyxENRi1p+JHH/OTVgxA06HL1QKjsfxh4jigpScK8 D6LToplWdyBLa5AqjgaO/RYCjdcfaLcl+s0lROWttQDBsgS+Ss2QnnUXDHWebCayvI8b nM9jDgEJqnKfND/6CIo+/ET7KlPVOlnORFYVNT3d2Xzr608fpiuL8FT2uI9EyAVuwtSp tygg== X-Forwarded-Encrypted: i=1; AFNElJ/1yyc0h9TpbVhKWs3W+B6TRoH4jyI6yKvUdP3zs3brZv7501ollknUptAYmk4RwJECS0OpPWKDG1HNkpQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzVSQ7yZ3T1Oo2QX7WnonxjKpxBq96h2+g/QFK2KAVDdSDkiYeO H9tOTg0P9ALaksDI1T9FJ1b94nFhaqFG4G55yEEAaan2Q4mhZn3wdxHjS+xf5syzv20XKan7kJA LuGDLwPg= X-Gm-Gg: Acq92OEakvq6bk5r8fjCY3C+gBlkkMG2Oom1DWmpYMRnSpG82wZ+1Ftx9oz37mmHVrm 3vwBNUgVSr4kHVfQv0pForiDQRrGdFhe//fCQbNZXLEt4GwPub3VijPi9fqNMleVsUezvL54wMn nC+HSHC+rqC6p2i57TLj/UpbeFbbWwcGv5zfwSsq/ZY80elkzmIZmaxvZUM85kuMz9WVqo803sA KpuObqD5GHmpO9SfFe/fWMAUhENyURdHju9KfYXMK01eQKuuph+tN1tx/LR+FvSpKBs2EsEfFtv U2CZsk8FNRe+MTQe7IRVnmRXFPQK3SjULBPxyaNDX697tc8wuPlKSc4lnVaSC8pXyMLVHm1V5RG xvPTJMW8ue/bhVolGS3EN6DgoMqbjNMX+8bZya917I+xSvYPAILMAXYumWZ2uEwoQYcv8E2iZ+J 38p8qlfJ6HaBPL8Wyw0VXv+aSfg0ZpHmDqbfUJ X-Received: by 2002:a05:7301:2a03:b0:2f8:42b0:e63d with SMTP id 5a478bee46e88-301180a53bcmr218037eec.2.1778612206800; Tue, 12 May 2026 11:56:46 -0700 (PDT) Received: from [127.0.0.2] ([50.145.100.174]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2f8862d43b4sm18626408eec.11.2026.05.12.11.56.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 11:56:46 -0700 (PDT) From: Abdurrahman Hussain Date: Tue, 12 May 2026 11:56:26 -0700 Subject: [PATCH v3 3/5] hwmon: (pmbus/adm1266) add powerup_counter debugfs entry Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-adm1266-v3-3-a81a479b0bb0@nexthop.ai> References: <20260512-adm1266-v3-0-a81a479b0bb0@nexthop.ai> In-Reply-To: <20260512-adm1266-v3-0-a81a479b0bb0@nexthop.ai> To: Guenter Roeck , Alexandru Tachici Cc: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, Abdurrahman Hussain X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778612203; l=2726; i=abdurrahman@nexthop.ai; s=20260510; h=from:subject:message-id; bh=k/WeXsyIs4N8EBomdIUZhc6w7uqY0msS071m02q6900=; b=N+BodH61Oi/VdwPnYVsQATZAvZK/fRdNoe4l4tUOy77EmcomAiw2iBJKR++7c32C4VpgqDabo DDQ/ZU4kJsmDVXr6gKNe99qOdlAcJGqt8QSF4zU2gErt2WHF9D8NfWl X-Developer-Key: i=abdurrahman@nexthop.ai; a=ed25519; pk=omTm9cCAbO0ZhS32aKfJDKue0W3sQGpG9ub5eYHif8I= The ADM1266 maintains a 16-bit non-volatile POWERUP_COUNTER register (0xE4, datasheet Rev. D, Table 93) that increments on every power cycle and cannot be reset by the host. Each blackbox record already embeds the counter at record time, so the standalone live value is primarily useful for matching a captured record back to the boot it came from when correlating logs. Expose it as a read-only debugfs file alongside firmware_revision. The block-read returns two payload bytes in little-endian order. Signed-off-by: Abdurrahman Hussain --- drivers/hwmon/pmbus/adm1266.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/hwmon/pmbus/adm1266.c b/drivers/hwmon/pmbus/adm1266.c index bd3784d59a7c..080e7dbd0c06 100644 --- a/drivers/hwmon/pmbus/adm1266.c +++ b/drivers/hwmon/pmbus/adm1266.c @@ -28,6 +28,7 @@ #define ADM1266_READ_BLACKBOX 0xDE #define ADM1266_SET_RTC 0xDF #define ADM1266_GPIO_CONFIG 0xE1 +#define ADM1266_POWERUP_COUNTER 0xE4 #define ADM1266_BLACKBOX_INFO 0xE6 #define ADM1266_PDIO_STATUS 0xE9 #define ADM1266_GPIO_STATUS 0xEA @@ -356,6 +357,31 @@ static int adm1266_firmware_revision_read(struct seq_f= ile *s, void *pdata) return 0; } =20 +/* + * POWERUP_COUNTER (0xE4) is a 2-byte little-endian non-volatile counter + * that increments on every device power cycle (datasheet Rev. D, Table + * 93). It saturates at 65535 and cannot be reset by the host. Each + * blackbox record embeds the counter value at record time, so this live + * read is mainly useful for matching a record back to its boot. + */ +static int adm1266_powerup_counter_read(struct seq_file *s, void *pdata) +{ + struct device *dev =3D s->private; + struct i2c_client *client =3D to_i2c_client(dev); + u8 buf[I2C_SMBUS_BLOCK_MAX]; + int ret; + + ret =3D i2c_smbus_read_block_data(client, ADM1266_POWERUP_COUNTER, buf); + if (ret < 0) + return ret; + if (ret !=3D 2) + return -EIO; + + seq_printf(s, "%u\n", buf[0] | (buf[1] << 8)); + + return 0; +} + /* * Clearing the blackbox is required when the device is configured in * single-recording mode (BLACKBOX_CONFIG[0] =3D 0): once the 32-record @@ -404,6 +430,8 @@ static void adm1266_init_debugfs(struct adm1266_data *d= ata) adm1266_state_read); debugfs_create_devm_seqfile(&data->client->dev, "firmware_revision", data= ->debugfs_dir, adm1266_firmware_revision_read); + debugfs_create_devm_seqfile(&data->client->dev, "powerup_counter", data->= debugfs_dir, + adm1266_powerup_counter_read); debugfs_create_file("clear_blackbox", 0200, data->debugfs_dir, data->clie= nt, &adm1266_clear_blackbox_fops); } --=20 2.53.0 From nobody Fri Jun 12 20:22:42 2026 Received: from mail-dy1-f178.google.com (mail-dy1-f178.google.com [74.125.82.178]) (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 D486337BE8E for ; Tue, 12 May 2026 18:56:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778612210; cv=none; b=c9GiWPqSDn6MITv/1HrjY7E9/mAtdNP0KSpXFl+BRlpoHPMUzieMveADLYNCrtFX2KGLunYkv3f2QHHpex/qnXoqhhSvNkjMKCw6aB1TiHXmMeOHo1qqLb4cLaVevFTCiz7t5B4Pds680dtyyuQedAShXqH3GR07ZUcKWpiXURc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778612210; c=relaxed/simple; bh=oftjZyGkhQBDX2v08GDqVOkG+JBpp/Fv7uQcMQZZ2lE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nAJr7FCGQPEatBnn6106X5GS1kRE/HdNWZIfqAZt2qFRS+tj21T+fKq6WM4nkSYRuiAcClP/WEHt89cUFISzqjHQtmuMmCZKlLiy+MoxmgxYIV8iX7KZrgZwIgvTCLKp5NU40hKDrW3BILdMk+kv1s+zP5oxzV3esao7mfo9J9c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nexthop.ai; spf=pass smtp.mailfrom=nexthop.ai; dkim=pass (2048-bit key) header.d=nexthop.ai header.i=@nexthop.ai header.b=hA5A/COd; arc=none smtp.client-ip=74.125.82.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nexthop.ai Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nexthop.ai Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nexthop.ai header.i=@nexthop.ai header.b="hA5A/COd" Received: by mail-dy1-f178.google.com with SMTP id 5a478bee46e88-2ff5472f263so1983256eec.1 for ; Tue, 12 May 2026 11:56:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nexthop.ai; s=google; t=1778612208; x=1779217008; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=gb5dpzhIGZxf8OHmmRVMCTs+SemyL2u/4eJnpZoxaHI=; b=hA5A/COdV3ju+V6zG8oDLPaYWb/27/QGTwOXpfgeqircWUYsftcT8qF4Jn1pWyhFqO yHq0RqUEP3ZMPtmhg5NyOKTilXbTEbokWVz7eNxtgyw0aQLG+Ioe2Hd3qwmCUFgos+F+ PuBCLKpKCHe8is3MZOD9hJrkXvviinDql54sfj1NegXKajsgCZCU92irIv+lmWojw0TX t5yHw7FKhl8is9JQBtPA6WNP5xVp1eXl8E+VWz8RfCOd1A8Q/QA9E7uVlUqEPWyZ0JUR UkEQEnw5sSkRXiyotwVIAAVDMK11c+Y/xgKYV/RpQL5AnhbGT4b2kdnlchjeOO5abJGD f8OQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778612208; x=1779217008; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=gb5dpzhIGZxf8OHmmRVMCTs+SemyL2u/4eJnpZoxaHI=; b=RswkZ1YT9uskp/scdm8dGFbdepcqmZ+Wm/hFp9nC28Y1dFvTYp9+KrX7ZefMkS03tx OSSrvaCw6V2akKWJBIBn7ntGu3X0ZRbtzfeiAag41xjlYjsdM90jdEQrJwfzNkf8NDtL O6XMqnuZgnHJDBoqFwep4bCyXUFecxGwUJowCqMgnPZA+fEAHdtWP/mS9bLsts7DquER YUyH5yTg8OzTI9NcR5+jcGn/ItXVeooN81ce2G/++r18YDW/rqIJoSdG4bpAWMw89uah kqGOsv53iaxltQb6KH33t7z331uUoJDqZAXdHYEzW114PBhXmZLC9HJrYR076JKZ/MYU hi3g== X-Forwarded-Encrypted: i=1; AFNElJ9FwadlqOEF5phb0+aNArpEH8mE5euciJ+FTG0zTS6m2VAgLWfB50/71bU4asUamAnwqZVhckHZM8RdWn4=@vger.kernel.org X-Gm-Message-State: AOJu0YzK69/7R+RxOEW5//5yZM2pYTo+924teL7uIvxonsarv5CmDlsU fXvrr3AsbzBDwXlJr7IaouZoMDDdakvfITPUsm+AmZ3jUBDE9NpLXQoT/qV3adsLvLhHUIAh1hZ DDlj16IY= X-Gm-Gg: Acq92OEFQ1WboJyon60D+ysMK0EgeEQcxUAo3ezhQtFfXZwn4dDZsd9ON9+lkf9+XWx mtQI6Ol1mEmc4OnTQEo4rZWq1CluEyH3UDBnpcjR6cHrE7wIfJ90a9hVYc8BqdmnB79KU3o8wvQ 4cjX7EVq1hyRgg2GpCfzsx5vW1mmqxyTCrFq6sDC2n6W63P6fRtFFOcl4xvaoiIlF0jSqW4x3rx 2n4MWHYgNN/dmYJba+aSiN+zN4GI7UdtlkmbBTSgKcB05PCqZyd3yn0DEVP6l9xvvi4MG3938PB gRe53wPMUUU1wMwUHPcygiL2B3Szc3mQydipAsbJGpmCM3Sdn1QxsjxiGRL5rtdlOIsuXprQJLu uSCSQ0C5uMcS623s29r6DyHZTrKTSIoleUiOpvOR64WoivYccu5ZN4/c/b/nro3iU3XqLXRSoym AFcg2N0i9dEMPzkUnYt8qCP6GGnw== X-Received: by 2002:a05:7301:198c:b0:2da:d4b4:c85a with SMTP id 5a478bee46e88-3011747e13bmr215063eec.11.1778612207625; Tue, 12 May 2026 11:56:47 -0700 (PDT) Received: from [127.0.0.2] ([50.145.100.174]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2f8862d43b4sm18626408eec.11.2026.05.12.11.56.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 11:56:47 -0700 (PDT) From: Abdurrahman Hussain Date: Tue, 12 May 2026 11:56:27 -0700 Subject: [PATCH v3 4/5] hwmon: (pmbus/adm1266) replace probe-time RTC seed with rtc_class device Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-adm1266-v3-4-a81a479b0bb0@nexthop.ai> References: <20260512-adm1266-v3-0-a81a479b0bb0@nexthop.ai> In-Reply-To: <20260512-adm1266-v3-0-a81a479b0bb0@nexthop.ai> To: Guenter Roeck , Alexandru Tachici Cc: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, Abdurrahman Hussain X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778612203; l=4804; i=abdurrahman@nexthop.ai; s=20260510; h=from:subject:message-id; bh=oftjZyGkhQBDX2v08GDqVOkG+JBpp/Fv7uQcMQZZ2lE=; b=JSKpW7WLsk5TEz/ZxeflWJGTY4p/N4p+7uQHNp+tD5g3sAmELpBawgpQHePPHcBttpG8zIrvh T6D2Dm72+AqBazkpK/nYytcHJIrrnAimZ8IkxzuDMquICGbIMDO1Ekf X-Developer-Key: i=abdurrahman@nexthop.ai; a=ed25519; pk=omTm9cCAbO0ZhS32aKfJDKue0W3sQGpG9ub5eYHif8I= The driver currently writes the device's internal RTC at probe with ktime_get_seconds(), which returns CLOCK_MONOTONIC seconds since boot and is not a wall-clock value. The resulting timestamps embedded in blackbox records are therefore meaningless across reboots, defeating the cross-reboot record-correlation use case the field exists for. Switching the seed to ktime_get_real_seconds() does not actually fix this: at probe the system wall clock may not yet have been set (no external RTC, no userspace NTP), and seeding unconditionally also clobbers whatever valid time the ADM1266 retained across a warm reboot. The data sheet (Rev. D, p. 22) recommends "frequently send the time stamp to the ADM1266 to synchronize the UNIX time and reduce the time from drifting" when running on the internal oscillator. The clean way to expose that policy is an rtc_class device backed by SET_RTC, so that userspace tooling (hwclock, chrony, systemd-timesyncd) can drive the re-sync against /dev/rtcN once it trusts the system clock - with no driver-specific sysfs ABI. Drop the probe-time seed and adm1266_set_rtc() entirely. Add an rtc_class device whose ->read_time and ->set_time callbacks read and write the SET_RTC frame. The rtc_class API is second-precision, so the SET_RTC fractional-seconds bytes are always written as zero. Fixes: 15609d189302 ("hwmon: (pmbus/adm1266) read blackbox") Signed-off-by: Abdurrahman Hussain --- drivers/hwmon/pmbus/adm1266.c | 78 +++++++++++++++++++++++++++++++++++----= ---- 1 file changed, 65 insertions(+), 13 deletions(-) diff --git a/drivers/hwmon/pmbus/adm1266.c b/drivers/hwmon/pmbus/adm1266.c index 080e7dbd0c06..05b31bb08f38 100644 --- a/drivers/hwmon/pmbus/adm1266.c +++ b/drivers/hwmon/pmbus/adm1266.c @@ -18,8 +18,8 @@ #include #include #include "pmbus.h" +#include #include -#include =20 #define ADM1266_IC_DEVICE_REV 0xAE #define ADM1266_BLACKBOX_CONFIG 0xD3 @@ -517,21 +517,73 @@ static int adm1266_config_nvmem(struct adm1266_data *= data) return 0; } =20 -static int adm1266_set_rtc(struct adm1266_data *data) +/* + * SET_RTC frame layout (datasheet Rev. D, Table 84): + * bytes [1:0] =3D fractional seconds, LSB =3D 1/65536 s + * bytes [5:2] =3D seconds since 1970-01-01 UTC + * The rtc_class API is second-precision, so the fractional bytes are + * always written as zero. + */ +static int adm1266_write_rtc(struct i2c_client *client, time64_t secs) { - time64_t kt; - char write_buf[6]; + u8 buf[6] =3D { 0 }; int i; =20 - kt =3D ktime_get_seconds(); + for (i =3D 0; i < 4; i++) + buf[2 + i] =3D (secs >> (i * 8)) & 0xFF; + + return i2c_smbus_write_block_data(client, ADM1266_SET_RTC, sizeof(buf), b= uf); +} + +static int adm1266_rtc_read_time(struct device *dev, struct rtc_time *tm) +{ + struct i2c_client *client =3D to_i2c_client(dev); + u8 buf[I2C_SMBUS_BLOCK_MAX]; + u32 secs; + int ret; + int i; =20 - memset(write_buf, 0, sizeof(write_buf)); + guard(pmbus_lock)(client); + ret =3D i2c_smbus_read_block_data(client, ADM1266_SET_RTC, buf); + if (ret < 0) + return ret; + if (ret !=3D 6) + return -EIO; =20 + secs =3D 0; for (i =3D 0; i < 4; i++) - write_buf[2 + i] =3D (kt >> (i * 8)) & 0xFF; + secs |=3D (u32)buf[2 + i] << (i * 8); + + rtc_time64_to_tm(secs, tm); + return 0; +} =20 - return i2c_smbus_write_block_data(data->client, ADM1266_SET_RTC, sizeof(w= rite_buf), - write_buf); +static int adm1266_rtc_set_time(struct device *dev, struct rtc_time *tm) +{ + struct i2c_client *client =3D to_i2c_client(dev); + + guard(pmbus_lock)(client); + return adm1266_write_rtc(client, rtc_tm_to_time64(tm)); +} + +static const struct rtc_class_ops adm1266_rtc_ops =3D { + .read_time =3D adm1266_rtc_read_time, + .set_time =3D adm1266_rtc_set_time, +}; + +static int adm1266_register_rtc(struct adm1266_data *data) +{ + struct rtc_device *rtc; + + rtc =3D devm_rtc_allocate_device(&data->client->dev); + if (IS_ERR(rtc)) + return PTR_ERR(rtc); + + rtc->ops =3D &adm1266_rtc_ops; + rtc->range_min =3D 0; + rtc->range_max =3D U32_MAX; + + return devm_rtc_register_device(rtc); } =20 static int adm1266_probe(struct i2c_client *client) @@ -557,10 +609,6 @@ static int adm1266_probe(struct i2c_client *client) if (ret < 0) return ret; =20 - ret =3D adm1266_set_rtc(data); - if (ret < 0) - return ret; - ret =3D pmbus_do_probe(client, &data->info); if (ret) return ret; @@ -569,6 +617,10 @@ static int adm1266_probe(struct i2c_client *client) if (ret < 0) return ret; =20 + ret =3D adm1266_register_rtc(data); + if (ret < 0) + return ret; + adm1266_init_debugfs(data); =20 return 0; --=20 2.53.0 From nobody Fri Jun 12 20:22:42 2026 Received: from mail-dy1-f176.google.com (mail-dy1-f176.google.com [74.125.82.176]) (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 64DFA382F1A for ; Tue, 12 May 2026 18:56:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778612210; cv=none; b=ZO5oONZDMOamr70E2W5safh6PQvTyWbvnWx9r1SFJcEYxIfZV/QIiuIAXEJmsDelk3AQvtDfVnyAQr3gJg41m7+lh7Mr6TfCYMTTnArl5jiaGFHemGVNTuave+UP086vkFKCRXVf4Ft1W7mCgiHKCmDwaALW+R4UUHvxI6oAung= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778612210; c=relaxed/simple; bh=MQn9S2juUdWwB971TPlw/6GlRx8zeFsKlkI79enfUNY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=k/uePaYxLEWc4dGvVAp60MrTwpcQ3WS2KvPgbxizpYL88hSbMoI1SjT8OoEysO3pJTVdGA1l5VRwXb9D3famgvSgOa98Aj3QkGvrC62iIfOuvo6OW+oL3tA/U3PTk2aLSGfJKEcEyaUmjzbS01GMRFtfwUrSPwOT/VKermQYQ/c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nexthop.ai; spf=pass smtp.mailfrom=nexthop.ai; dkim=pass (2048-bit key) header.d=nexthop.ai header.i=@nexthop.ai header.b=g+LFXSjV; arc=none smtp.client-ip=74.125.82.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nexthop.ai Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nexthop.ai Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nexthop.ai header.i=@nexthop.ai header.b="g+LFXSjV" Received: by mail-dy1-f176.google.com with SMTP id 5a478bee46e88-2f68f3b075fso8049753eec.0 for ; Tue, 12 May 2026 11:56:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nexthop.ai; s=google; t=1778612208; x=1779217008; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=jd957bMzMubkFSlEfdCxzQ13eA2jDWDObgVCBdnHBUg=; b=g+LFXSjV9GiVPEUk1+Ce8Y0n/z6925UZDy2V+DBQjlojfLsi/eRsVqnaVi1ZM4ol51 ml6Wyg2GmFvvgYxy/cI/DO2njrjYxdHiU0iLKz9nzXvuL6wTBUcTA4GqdHLJywuqWV6/ fZLI1BtfS3Bn6bxYB42cqGROCeFESCO6Ne7zM2FqSf//2/Q09N5lje4VzNj3DIXObQ0T KxSWbN2eDX8sOtFTyD68jsoGRAnTykalcB+OHDdTDiD1KqY1aKjDqv+fxCFg6i/L6bbs J/oF2N3o1BhH/dkur4qMxqqzezXNOccaxUbeM5T6+FM6fyT0Txj1al4BflloT3gHXAdI TSlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778612208; x=1779217008; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=jd957bMzMubkFSlEfdCxzQ13eA2jDWDObgVCBdnHBUg=; b=qI2TqTGKepEYDIRCZtztuYKKi03cMOL+GSnbu5Nz/IaNS8lONh14eUNIGCn4WsOxWv 7Nv2EbHgRanLMAXgvSYdt/jdvsAbUsVHj6Duf88gI5kx9cr/QWS/FjgcKAkNnnI+p2MQ j1qTjpCWInx4ORtQfsQrlsX87hoz+kiufeY5iq7Nx9VqUaLb2fsAaN9FAAh+5ud1RmHS J2x+OWcQrWlhq2y3V6sUWVCPFkcKBcNDzcqsg7HZ5+Fc73g8lLm/SkaOT12w4QHAiAGP V81Y20gmvzQT3qUIfA3trbhUFlYIh5L40MxU4JWI8Hj8oXfNFe9krARL3BDI9rf7eHsR F6Lg== X-Forwarded-Encrypted: i=1; AFNElJ/GzT5GKmS8LmLAfA4R+qWy6Eealle3s5qetOu91KngO2ThrKZl6yXG+9KmaYPYnM8DQc55iNNZwtnRyl8=@vger.kernel.org X-Gm-Message-State: AOJu0YwLCsTYdvSC6ZuFSLXMEc/1j7wdyvm7lSxNB64Td2uJWRZEQLzj sTyPqvKtDURAEr3VvlV9RMYit3gSSiVSmOqkjTs2PXwwyswx6ccFQY2UIfHUq90iDzMrG30F2Z0 M90aGuis= X-Gm-Gg: Acq92OEPvRGxNyAk914JzSEvkXhP01v02VqPszsxEU/0a2RZkRNmb3+pGI1vhuANXGq OCo91QtWTxzzimcDl88Uk1rMuu1oJ/ptz932RbO0GrUHBoOBtntE6arFejSVKmcYMENOtAQ5QLe ZGkpWXhmvSl+nveZ6lOjuYUm+gRTdjoQoO3b4QjK3t3IRf9R+BOsRzNvvFEn1LbGow+fbO7kRh3 7+ottlSQW817wExE92NzOng64nAGOg9F3jzNNwWiFWZmwlhbBpq6XeYc4F6ZsWUCyQ0uZS9sUr6 7UQuKPSRl6q8y8FwPY1Sbbxr/iFTEeEQIiGPiegORbsBCbdSSVHdgWJjciaRjcCoz2Bxv9CP18k xQl6SKmxzSZtvHUxLZEFyTLY111lbWp/jBC9AWm9MPNVy1XGXQ3U1V2bEyOr/k2+KR31rDuHpMa 93qWvR1iT5TxlmF6dg9sA3pUzKDw== X-Received: by 2002:a05:7301:7c0c:b0:2ed:e16:6b4c with SMTP id 5a478bee46e88-30119c61891mr200944eec.34.1778612208286; Tue, 12 May 2026 11:56:48 -0700 (PDT) Received: from [127.0.0.2] ([50.145.100.174]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2f8862d43b4sm18626408eec.11.2026.05.12.11.56.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 11:56:47 -0700 (PDT) From: Abdurrahman Hussain Date: Tue, 12 May 2026 11:56:28 -0700 Subject: [PATCH v3 5/5] hwmon: (pmbus/adm1266) include adapter number in GPIO line label Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-adm1266-v3-5-a81a479b0bb0@nexthop.ai> References: <20260512-adm1266-v3-0-a81a479b0bb0@nexthop.ai> In-Reply-To: <20260512-adm1266-v3-0-a81a479b0bb0@nexthop.ai> To: Guenter Roeck , Alexandru Tachici Cc: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, Abdurrahman Hussain X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778612203; l=1498; i=abdurrahman@nexthop.ai; s=20260510; h=from:subject:message-id; bh=MQn9S2juUdWwB971TPlw/6GlRx8zeFsKlkI79enfUNY=; b=/1R0t9+PHi3Ij1OLz9JTiBWvcRhbXYl6X+C7ktA1Jg4Q62V/7JVhue0MRibcqorkk5FYBTQDM q3ABcrZHUcpCAmvKM9Vy/jlMbdgpnA4oVPX18pX1qdjx1VtJrAiqett X-Developer-Key: i=abdurrahman@nexthop.ai; a=ed25519; pk=omTm9cCAbO0ZhS32aKfJDKue0W3sQGpG9ub5eYHif8I= Platforms that fit more than one ADM1266 on different I2C buses at the same 7-bit slave address (a common shelf-management pattern, e.g. one device per power domain) end up with duplicate GPIO line labels because the existing format only includes the slave address. Including the adapter number disambiguates them. The adapter number is formatted as decimal to match the i2c-N convention used elsewhere in Linux (sysfs paths, dev nodes); the slave address keeps its conventional hexadecimal form. The label is purely informational (visible via gpioinfo and the gpiochip /sys/class/gpio name); no DT or ABI consumer parses it. Signed-off-by: Abdurrahman Hussain --- drivers/hwmon/pmbus/adm1266.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/hwmon/pmbus/adm1266.c b/drivers/hwmon/pmbus/adm1266.c index 05b31bb08f38..12cdf6de341a 100644 --- a/drivers/hwmon/pmbus/adm1266.c +++ b/drivers/hwmon/pmbus/adm1266.c @@ -292,8 +292,9 @@ static int adm1266_config_gpio(struct adm1266_data *dat= a) int i; =20 for (i =3D 0; i < ARRAY_SIZE(data->gpio_names); i++) { - gpio_name =3D devm_kasprintf(&data->client->dev, GFP_KERNEL, "adm1266-%x= -%s", - data->client->addr, adm1266_names[i]); + gpio_name =3D devm_kasprintf(&data->client->dev, GFP_KERNEL, "adm1266-%d= -%x-%s", + data->client->adapter->nr, data->client->addr, + adm1266_names[i]); if (!gpio_name) return -ENOMEM; =20 --=20 2.53.0