From nobody Sat Apr 4 00:24:01 2026 Received: from mx0a-002e3701.pphosted.com (mx0a-002e3701.pphosted.com [148.163.147.86]) (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 20A4C311C32; Sat, 21 Mar 2026 18:12:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=148.163.147.86 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774116747; cv=fail; b=W9uK1sEguFd4k/IVj2LVSunYCwg+pGAlogllT1cs5PacdgiR8JTH/QbsMdrwyKeo73/D24coGaYLJ69HcAW+1kMqY0/K6SYIpD3KwCHXJ0AkZFG04Usc5bStbdgr9vmvgak5yjKDoyl9CKZpKMBwZ8eYmCuWF1QHer0WeEj3I40= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774116747; c=relaxed/simple; bh=OzrFza8H53p4n7wvPetIbf27NoWxYlHjs8eRTWWwzJ4=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=UE9swoY5bGBTAS//MRJv+Uw6CL0ZdXsT3YIyL1OcfQQVjJ3qW9kcRkZF4Qa8bWccKgeXEvxEWfmwU9EFz9XY3elgiHhUg44+2N+y4MgmAeAokFHpqS1p+x0KL8wuLOVqOevUmMMCj3/GPDBAyaGO6bzCKwfXcYK4Du5X1+wdMd8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=hpe.com; spf=pass smtp.mailfrom=hpe.com; dkim=pass (2048-bit key) header.d=hpe.com header.i=@hpe.com header.b=n8wMF5lX; arc=fail smtp.client-ip=148.163.147.86 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=hpe.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hpe.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=hpe.com header.i=@hpe.com header.b="n8wMF5lX" Received: from pps.filterd (m0148663.ppops.net [127.0.0.1]) by mx0a-002e3701.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62LF4GHZ982849; Sat, 21 Mar 2026 18:12:12 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps0720; bh=W4 B659lFA9BERi7CDAd3/FQC4uLfHi0CLKHZ/V9vVUg=; b=n8wMF5lXpKTG3HUI94 y3fztb5oFsNfZKVVCDfnLT8XQUajY1ox+06LOLdBBojrpz/yGr5TCTxkRtIJ5Tjq pZDZ5z+Ch52zcSh3CM5tXcp4IL3fPjWvlVqKk3dUMahG8Wu9aOOhOmXh09vNqak9 RjNVDNxkmglrMiNKKxJ3uZEqwRcIgzboumdMIrdB9NSZ42xhoiqAir/rG6+TJKJk w1iVy1hHbAKCs7UwfYiBYlfVJnOVQM9GPIyVI/R8eIyDZ6TMCT/DINU8nS+EQBFU OP655ydrOvGs53gbrJDDD1b3kBzjL2n0LOZ1T3gEQjI2zJExEqgzI0m5mbUjc7jw 8sVQ== Received: from p1lg14879.it.hpe.com (p1lg14879.it.hpe.com [16.230.97.200]) by mx0a-002e3701.pphosted.com (PPS) with ESMTPS id 4d1v0nhkp3-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Sat, 21 Mar 2026 18:12:12 +0000 (GMT) Received: from p1wg14925.americas.hpqcorp.net (unknown [10.119.18.114]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by p1lg14879.it.hpe.com (Postfix) with ESMTPS id BAC38D273; Sat, 21 Mar 2026 18:12:01 +0000 (UTC) Received: from p1wg14924.americas.hpqcorp.net (10.119.18.113) by p1wg14925.americas.hpqcorp.net (10.119.18.114) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Sat, 21 Mar 2026 06:11:49 -1200 Received: from p1wg14920.americas.hpqcorp.net (16.230.19.123) by p1wg14924.americas.hpqcorp.net (10.119.18.113) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17 via Frontend Transport; Sat, 21 Mar 2026 06:11:49 -1200 Received: from DM2PR0701CU001.outbound.protection.outlook.com (192.58.206.38) by edge.it.hpe.com (16.230.19.123) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Sat, 21 Mar 2026 06:11:33 -1200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mS9akum4fRGFJD4zxRquLzqhJsnBgQKoBY+I+RHBCKnZoWNorRap1022cJ+Z7MksANQ6MFBxuhh4xqrU2ohbNyjMhIK4MRjSHOPjHkJz8irfaKq8ybQmbKrI3baux93eCrtfc9bOsknnXqLmZp3sHfTuhKG5KAs5Vn+BphUk33qdwLAHUSqMjc2JJmzReNjGAawvDEKWCcGyZ6DogW1GvSUpGwQmJGVVX1F0f9TCT9SdPzBWrugLGxU61dIMug3Hgzpf6Eykl13Z8EfPcy3A+70KINhoaZ6oqUgNHK6WnYwMuOIjzMhGuBU2botwFiO+5rCmV1WGYf8Ojb73sVdOqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=W4B659lFA9BERi7CDAd3/FQC4uLfHi0CLKHZ/V9vVUg=; b=Ytz0xIgArB5wttt3JOFUDdLDgKU81kngsUzXGMFKCOiPwEPk9eLHJHwMHQOaKIh5v9v+LAx1fD6Hfqk5mxR6G5FQ3tWk9EkiflFeVfCqCquRH5POwjMF/1QbrzOfQ9GtKcRI889K3/DQO1EdVAk1YQKTQxDZ26nY1smrKZbseOlYDkxPn9GsZtZGgosUdrdDAqkFa/MR52E6WQPN40c/U4ZlK3tuQeRk2xQEy7xfuyT45+BCzef4nFYXnmH0wM3FtrLBV1TivnzcE4gFJ3CmesM0Nc+Fg0qgvSglAVauwnnp/POfEf6pHBpHQoLW+UOes7Y/xCypgioLGfXhCJpiCQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:610:1cc::7) by SN7PR84MB3208.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:806:268::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Sat, 21 Mar 2026 18:11:31 +0000 Received: from CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM ([fe80::2c54:3534:122f:e74f]) by CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM ([fe80::2c54:3534:122f:e74f%4]) with mapi id 15.20.9723.022; Sat, 21 Mar 2026 18:11:31 +0000 From: "Pradhan, Sanman" To: Guenter Roeck CC: "linux-hwmon@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Sanman Pradhan Subject: [PATCH v6 1/3] hwmon: (pmbus) export pmbus_wait and pmbus_update_ts Thread-Topic: [PATCH v6 1/3] hwmon: (pmbus) export pmbus_wait and pmbus_update_ts Thread-Index: AQHcuV4kyicNodFaPEeTJJD+DGScEg== Date: Sat, 21 Mar 2026 18:11:30 +0000 Message-ID: <20260321181052.27129-2-sanman.pradhan@hpe.com> References: <20260321181052.27129-1-sanman.pradhan@hpe.com> In-Reply-To: <20260321181052.27129-1-sanman.pradhan@hpe.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH3PR84MB3523:EE_|SN7PR84MB3208:EE_ x-ms-office365-filtering-correlation-id: 4215a633-63d8-4455-ceb2-08de8775474e x-ld-processed: 105b2061-b669-4b31-92ac-24d304d195dc,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|1800799024|366016|56012099003|18002099003|22082099003|38070700021; x-microsoft-antispam-message-info: XC14lYzoyGztfmcKVmlaMgUhU8Np1E7B0DM1hVfHpr4vHs+xeT3cnszAVxKiwS6JFNnxe6Giy2MUZfEpqeo5YpYqvRr+2xEnMYnXN8EDsrp1GtqmNphKNdedIAdL4+wJvJ50nVxnJ3TJOGT0KB0S4RTXUODnizRVcy9bAwNkJQ6VBcKDkIPN0I6nNCA5YWESDjd/blf5p7UsJ4UTLty5yAff3PzqwVghh2zP676Va3yJ+WQcnKei15y+/VabCwAX97B1ehU25Sk5EOKbN2hHaWkm4U68T3ymaIvQqQntBLUF2UFr3AAlXwBxG8N7p6BrIUGFwvstadFy30ITbs4ErFz4zL8DZi4VSN7HAB41Zzf6mL0V42J0AAv41ETireXIoVsAOGTatXL7VbOOrTd69K5DCEEVrjxpWBeMFgdunn4XHZzZ/0Hg4XacQ340plImtm+W/Y/IGwjyqaUg5XUbvPO6X648JJzfNEGRk0zas7csfFT6VCqwmK4TbylEE6qVjOVVKlKqyIj6TtXEyjN1wgWi1oKx4HZA2/bRxwkC9bpDMSv+XItuUhIkSnoD7YwAUqD2tvDGzeQ8J0lT3rX2Lb9ZDZQUhvcFUTi5pkufxdFwvp3AG/i8M6cmmPW2VtakOwd3oe2Syw6BQii3gb4Fep8R+mX3wQvN+rZca0PXUsbAsQQCi1uR6MXTUMUOG0wN+ZfbGg615NJ2kRFsbNIKdMeke10a+IEFTqMM+pSmtUZSEIWk9WJ1LFQub4Fi//yvvz7Qm6Zo6HUS99+9eYRs6uF0zgXjvp62c3Nk7sNMFPc= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(56012099003)(18002099003)(22082099003)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?vRSzsexkjNHoHLi+qv7l21NsddkmfzTQELLmhU87XhmiUFV4SAEM9FoDS7?= =?iso-8859-1?Q?04sqzHNmsM+GOpRAl7a7EVoWqyTSQLqd7suVIKJK4/r6hqeNoZdXcp7xfQ?= =?iso-8859-1?Q?EbBnqBHxAzAqc8DhtGnOEWtqVAZ8VM0TLpyxEO8Y/P17K0Qu2JtinXfyGL?= =?iso-8859-1?Q?03B6QoIcUM7XfhwKGL5hZMbftruWXg8yZefpisX593Qa7Ov9UqMdVzuTrj?= =?iso-8859-1?Q?F0Gx9vgYBrRnv47QD4mqqWp4YKN4Ns188LoqjbIYIiBUfcEITkeY5XSKRG?= =?iso-8859-1?Q?STCrwXTuOU8rFDLBfz7aoPL1vvrQSPkjo2XWIxj603xbd/fzYmlYVWMNhC?= =?iso-8859-1?Q?a1JXGlqCKk12dCxeK0ToS0GNEGeVTu7S7tH2kfmU85SeKpGIdDhAJM8Zvn?= =?iso-8859-1?Q?buhJtZye5YMbAasGmxUIOYjBwfBUK8q1tNgUS28mUSe2D55rSNYmKNoB52?= =?iso-8859-1?Q?vOA8Qo/uWtWmJnkpNP7I7K2HXjZry59hhvcd7ZthCBlnjh7S5IyOSOUz2U?= =?iso-8859-1?Q?rlgHEoRPrCk1Qoh/jEkV5jE9EZCLZ3aGdMIGBSx/ncqLloonjuhzuAzSsK?= =?iso-8859-1?Q?/IdRBlivslVhpm0rfbV2ZUOr+nRSmo93M6+kTc7kNpxVGopT8DLQ5/xRM6?= =?iso-8859-1?Q?W3ZmhNfYsWIQgJ0+jKljiwhi0t1meiyB2KTgi7FP8Jiw06P08EuqGUQgr7?= =?iso-8859-1?Q?GXPkWFL3j0IgEI3F5Fa62lfAmYtGYbgen65aiw/3TgyF8HFqfw95nT3+Kq?= =?iso-8859-1?Q?PCl+5BPcK7soIFMOCExp7UY0T16bYHjLBewThAJyEPWGb9I9g0a+ufg3/+?= =?iso-8859-1?Q?VhD3FIDuf6KwmaF3CXFKdj2psnpZo/GJ+7COwt/F8l5iM5R+9PhxDfT/Wo?= =?iso-8859-1?Q?0kV+gaKHWO8BaMntpzSRWtIwXzOvA0oa+Ty2ouHW5mWMxqRKVEZAr4vpmF?= =?iso-8859-1?Q?lMMje4WHxBU5EGlrOSLD74qVhCpHE2108Z6ofSURw7SeqQqFNQN4/ejfmu?= =?iso-8859-1?Q?XZM0CGfpSW94+YVG8OVEtzl26xJIPvp8klQySgf/IJW8c5orQCnFCTJBbQ?= =?iso-8859-1?Q?1xyVJExRtUOmcQkRIMCAVNBt8+27BwcWsGxmfTT2Ke8kn/8qrHm3RQaAdA?= =?iso-8859-1?Q?Qz5WGp9VjCsovmM2i4uM6vC5N6+UkSK6ZTL3ymPpRR3aMG4Zaj7GDG0xCN?= =?iso-8859-1?Q?gvK2BuRa0/+uBik2lj4BAoWBPHJdeqUYoht/pLW2YduBGm1DY8gxgW/L55?= =?iso-8859-1?Q?Cqn1FEPUBTjSG3MEZGeiT/TH50dtsaj0Q0w7ye10Nb9sW6OVk/F/CXvHbf?= =?iso-8859-1?Q?E2jEySVUseOkbCeXQeJZExmAeYosQXC4/5luKOEEX7pS6vLJ8IDMX3i8et?= =?iso-8859-1?Q?B2Y6J8RC5o8EHYYL/I5+F5kp8z/Hh6d+aUt3yRE/Crl5fZTw5e2Aen7aLV?= =?iso-8859-1?Q?vHbBtTolEdAwGMp02CA5wJ9U/4VpxQ8k9mSMCfEO5Q9ldGj9KyPePsfcTq?= =?iso-8859-1?Q?uJoej7MJJ93s6Z/PEUxk7COqMuiL/OqQ1tuZdnxWA0wM9FtDsR3OJfu6hQ?= =?iso-8859-1?Q?R5GuYintKe95riD+1qxmxA3z4fQpzs5ccen/iTLeqvVPLvb2US49Oqz5qj?= =?iso-8859-1?Q?5qx2snfyM6g7ygMoUkXs0kSeF7DgoWEX3ub9fft/YIXfGAzbTvAwpKjyfr?= =?iso-8859-1?Q?UjDFbtj6wtNIHA9N249Uz3A1n98Cu16Uv9Qc95zkgYqmnibYwiX+T19K4h?= =?iso-8859-1?Q?pMkadvaX+sYj++w0ZDnyLrhTDkc7orx/tZdfMedOF44nzX?= Content-Transfer-Encoding: quoted-printable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: MWuJEPKu3USsaLUnv0EeLbdEM07Yeg6Ahacj18En8mclHAebSWabCFTkX4kamsa0OSp+ZZ650xrPb5wKxHlP/bWuvCO0ZxDkeumTD+eKaOrvSJ0ba3cwjU4f6ZCXniyenEGttmzwUdTcby4PjK2YpIHpB17YvEg9t32mIQ2Qt4vOsvrtNTsYYzw9Ybnizy8KGulzec50he7HdYVAv8YY92M/T6NORcEgPsvLkiM3NAPW9FieloZExmQEwOlJ6Jkx+nhTqC3piu5GuyieXQ8frhV/65ejpT4UJbdf2gBzzlALQth/WF0Ng9jGDDrI+oMvz3s7bUa1iQbaG1Qecb22pQ== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 4215a633-63d8-4455-ceb2-08de8775474e X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Mar 2026 18:11:30.9875 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: eJSo13TFvkjvO3JQNcVvANpcoqyL3EhKuhUSCtCdv90JJr4SOsjD8cJAXSmhLsqkeME5huCd1X/TeQclpzIU9A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR84MB3208 X-OriginatorOrg: hpe.com X-Proofpoint-GUID: wcpiBOdTv-C1g47fVD289_4LTXtAbb-s X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIxMDE1MyBTYWx0ZWRfX155CBT1xMhpG mgMYWwaIVsai91uG9XPyl0iMMGn41fW3GL3vce3pJ96e5pi7XEUTGW5yUr9o03utpCWcheQ42VK rFhIO0+OytEZd62DYWK84PpEYHOX0vN5e4iSMNEqnw0rRu9HnttUqpCOWJ6XHschf6lpYqT8XC/ W2X9/I3hNLOpQYHFeRE12uiIOBa0FPjipBfMQjF1PSXN8PnADcrUhEzKIUKi0jcrAPc/KGfaNpS sDRpoUnYTA9zw5d8fYxvUuBNZLb7mUgvLfEeh33OJwEVTIwk4YSI/NIrYYj4yaxO2wcH5ale8Ng PkNX2e/OxZF6rLFpBlFcfUOvuQ5ZCSzQfcULevduRoekOiPo1mHTys7wA6hfdyfuBdfwSJ13GRn 1V6t8HvYbsbJH4SbwyebZ9csPX0ejjKWQ8k+vBwf+SMxyrW+mpdAoDtK2w+SR9ZOBqu2beHvIqt NbOwJEuzuLRR/8HdTrw== X-Proofpoint-ORIG-GUID: wcpiBOdTv-C1g47fVD289_4LTXtAbb-s X-Authority-Analysis: v=2.4 cv=Sej6t/Ru c=1 sm=1 tr=0 ts=69bedf7c cx=c_pps a=5jkVtQsCUlC8zk5UhkBgHg==:117 a=5jkVtQsCUlC8zk5UhkBgHg==:17 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=8nJEP1OIZ-IA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=gQcMVamqm3wCPoSYhaRC:22 a=6_mrDcixewTG61oOsKN3:22 a=OUXY8nFuAAAA:8 a=nH3FplcY2SvcWnwWU-MA:9 a=wPNLvfGTeEIA:10 a=cAcMbU7R10T-QSRYIcO_:22 X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-21_06,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 suspectscore=0 malwarescore=0 lowpriorityscore=0 bulkscore=0 impostorscore=0 adultscore=0 priorityscore=1501 phishscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603210153 Content-Type: text/plain; charset="utf-8" From: Sanman Pradhan Export pmbus_wait() and pmbus_update_ts() so that PMBus device drivers which perform raw I2C transfers outside the core helpers can keep the PMBus core delay bookkeeping in sync. Move PMBUS_OP_WRITE and PMBUS_OP_PAGE_CHANGE from pmbus_core.c to pmbus.h so device drivers can pass the correct operation type flags to pmbus_update_ts(). This is needed by the max31785 driver, which performs raw i2c_transfer() calls for its 4-byte extended fan speed reads that cannot use the standard PMBus word read path. Signed-off-by: Sanman Pradhan --- v6: - No changes to this patch in this version. v5: - Removed spinlock usage; pmbus_wait() and pmbus_update_ts() now rely solely on update_lock serialization. v4: - No changes to logic; standardized on the Juniper email address to resolve the From/SOB mismatch. v3: - No changes to this patch in this version. v2: - New patch in the series. - Export pmbus_wait() and pmbus_update_ts() to the PMBUS namespace. - Relocate PMBUS_OP_* bitmasks to the subsystem header. --- drivers/hwmon/pmbus/pmbus.h | 6 ++++++ drivers/hwmon/pmbus/pmbus_core.c | 9 +++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/hwmon/pmbus/pmbus.h b/drivers/hwmon/pmbus/pmbus.h index 3ddcb742d289e..deb556971a726 100644 --- a/drivers/hwmon/pmbus/pmbus.h +++ b/drivers/hwmon/pmbus/pmbus.h @@ -424,6 +424,10 @@ enum vrm_version { vr11 =3D 0, vr12, vr13, imvp9, amd6= 25mv, nvidia195mv }; #define PMBUS_REV_12 0x22 /* PMBus revision 1.2 */ #define PMBUS_REV_13 0x33 /* PMBus revision 1.3 */ =20 +/* Operation type flags for pmbus_update_ts */ +#define PMBUS_OP_WRITE BIT(0) +#define PMBUS_OP_PAGE_CHANGE BIT(1) + struct pmbus_driver_info { int pages; /* Total number of pages */ u8 phases[PMBUS_PAGES]; /* Number of phases per page */ @@ -541,6 +545,8 @@ int pmbus_regulator_init_cb(struct regulator_dev *rdev, =20 void pmbus_clear_cache(struct i2c_client *client); void pmbus_set_update(struct i2c_client *client, u8 reg, bool update); +void pmbus_wait(struct i2c_client *client); +void pmbus_update_ts(struct i2c_client *client, int op); int pmbus_set_page(struct i2c_client *client, int page, int phase); int pmbus_read_word_data(struct i2c_client *client, int page, int phase, u8 reg); diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_c= ore.c index 4d7634ee61484..ada962d9d2762 100644 --- a/drivers/hwmon/pmbus/pmbus_core.c +++ b/drivers/hwmon/pmbus/pmbus_core.c @@ -36,8 +36,7 @@ * The type of operation used for picking the delay between * successive pmbus operations. */ -#define PMBUS_OP_WRITE BIT(0) -#define PMBUS_OP_PAGE_CHANGE BIT(1) +/* PMBUS_OP_WRITE and PMBUS_OP_PAGE_CHANGE are defined in pmbus.h */ =20 static int wp =3D -1; module_param(wp, int, 0444); @@ -173,7 +172,7 @@ void pmbus_set_update(struct i2c_client *client, u8 reg= , bool update) EXPORT_SYMBOL_NS_GPL(pmbus_set_update, "PMBUS"); =20 /* Some chips need a delay between accesses. */ -static void pmbus_wait(struct i2c_client *client) +void pmbus_wait(struct i2c_client *client) { struct pmbus_data *data =3D i2c_get_clientdata(client); s64 delay =3D ktime_us_delta(data->next_access_backoff, ktime_get()); @@ -181,9 +180,10 @@ static void pmbus_wait(struct i2c_client *client) if (delay > 0) fsleep(delay); } +EXPORT_SYMBOL_NS_GPL(pmbus_wait, "PMBUS"); =20 /* Sets the last operation timestamp for pmbus_wait */ -static void pmbus_update_ts(struct i2c_client *client, int op) +void pmbus_update_ts(struct i2c_client *client, int op) { struct pmbus_data *data =3D i2c_get_clientdata(client); const struct pmbus_driver_info *info =3D data->info; @@ -197,6 +197,7 @@ static void pmbus_update_ts(struct i2c_client *client, = int op) if (delay > 0) data->next_access_backoff =3D ktime_add_us(ktime_get(), delay); } +EXPORT_SYMBOL_NS_GPL(pmbus_update_ts, "PMBUS"); =20 int pmbus_set_page(struct i2c_client *client, int page, int phase) { --=20 2.34.1 From nobody Sat Apr 4 00:24:01 2026 Received: from mx0a-002e3701.pphosted.com (mx0a-002e3701.pphosted.com [148.163.147.86]) (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 922B42EC083; Sat, 21 Mar 2026 18:12:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=148.163.147.86 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774116727; cv=fail; b=IhTlCO9mkoB5BLK1PGRi7B8tAzqFXwPrPoAv+4lwaJDunrlS4Ttgpdmm+gn9dTfpRPCpACzuhTRIFVJksbjNx9Ll2JurK2ezi1mNUHrx21aU1TpNQcwb1bR4dGtkeBx2YLR9JvsO9Js7V7VFPp/yhk6mQDYBpZbkeAP0SJx4aEE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774116727; c=relaxed/simple; bh=K6Q0ggsZSNdVvZKs8SRGM/bVAfQUiOMSyxOnBXPTEvU=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=bVYCi0AN6ZUX77byHTqhnPfyavK3nX31/Ra9OmvVBoq/PyNOmgp7xDH40v8qX5FVU/ZaACFtZd7pQRqVlqheJ+vFdC9oLJZKr9PBkrb49mq6iALeFVQFWvpZxK2QT8+VrQn0y4BOGSsfbo3NYg0LiQdH7zbt4jSYs04W+fm/Mew= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=hpe.com; spf=pass smtp.mailfrom=hpe.com; dkim=pass (2048-bit key) header.d=hpe.com header.i=@hpe.com header.b=QF57vcBE; arc=fail smtp.client-ip=148.163.147.86 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=hpe.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hpe.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=hpe.com header.i=@hpe.com header.b="QF57vcBE" Received: from pps.filterd (m0148663.ppops.net [127.0.0.1]) by mx0a-002e3701.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62LDCZZ7749275; Sat, 21 Mar 2026 18:11:51 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps0720; bh=7W lRDEYf+Rymufnd7MAlw1fDGPlji1x8NFDVk2PH6RI=; b=QF57vcBEBxGcRPxViM udXgJxF1vUZ9FczLOIC5yxFJLNYG4iWY6wGKTATiHlP989aBE29Ll7zkAdnxNTL5 b25RobVAoWq7psF7AN3wl4qHDxjlMm8uTCbJpcsrgaS3rCUryHo/g2A90e5dUuVx c1AjLSFJ96Lyic2ImPlxCiRdYXVYr8cZnmP8Vcd69ugC1/sTRbfzpXdTxnQZI4D7 UwakxtHgu/wmGkydOI8y5uDgidWJAfS74EqPSCxjVh8Dq12RUdBsvA+4WbYfRgV2 q4Xr2121BNVmhgP2jgzbIbgB4/qb6+3Gzc6k6BNQaDemJcc8EieJk+noMbx/Vgbc i9Lg== Received: from p1lg14881.it.hpe.com (p1lg14881.it.hpe.com [16.230.97.202]) by mx0a-002e3701.pphosted.com (PPS) with ESMTPS id 4d1v0nhkma-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Sat, 21 Mar 2026 18:11:51 +0000 (GMT) Received: from p1wg14924.americas.hpqcorp.net (unknown [10.119.18.113]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by p1lg14881.it.hpe.com (Postfix) with ESMTPS id 1E269802BA8; Sat, 21 Mar 2026 18:11:51 +0000 (UTC) Received: from p1wg14925.americas.hpqcorp.net (10.119.18.114) by p1wg14924.americas.hpqcorp.net (10.119.18.113) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Sat, 21 Mar 2026 06:11:50 -1200 Received: from p1wg14920.americas.hpqcorp.net (16.230.19.123) by p1wg14925.americas.hpqcorp.net (10.119.18.114) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17 via Frontend Transport; Sat, 21 Mar 2026 06:11:50 -1200 Received: from DM2PR0701CU001.outbound.protection.outlook.com (192.58.206.38) by edge.it.hpe.com (16.230.19.123) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Sat, 21 Mar 2026 06:11:49 -1200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TtxW+4RyNVctJCWhpGsKcdwVS8H3gDOl8IezdUTeUYWoQhbBeT1zPXo2K0yKFleyDwms3p5I+QFuX/NpSZ8xMS56Eln5+CbMv0YXU/Rl7YTNlTO3iKnJvqgZrdz/DT4VMhgUMU2NWkPZQMqz6HXK1uQay1dE2/1sAkXn/LbkobWhx8tdK01AdvRCzkNALgHHHPDu7AZ3cqn1Hc/2IhX53UoBVdoC9RSfmYsP1xA6CyTncMtEqUOkNh0FVSSRQWa480b9ulTw33BY3m4r5og8GLIRm2FVHXLkroMnGDxdMmCgPoYXN/W0GN+DOY9q5rTPZ6NNb3XKgWj0VCPIdt98kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7WlRDEYf+Rymufnd7MAlw1fDGPlji1x8NFDVk2PH6RI=; b=DN1UOU9rWF707r0NMEk8n4nBvptGjd99E1XAfWmwOpkKpbeSuyOZN8fr82YvvMsUvuNDWNTZ1yCZAlauJk+vGQ5Gluloeej1kHRkZZpQ9Xo1fuX8N7Rae/a3Xv6YVObFqqwQAt3B8RW6uirDk6DZBDzsrtcy2dn9rLzH07/JlbH2KhP9Abn881Dk+3YfywvkpCC4W6Um4A8NydPRSyTxRXDWyiFMthwtpFplDdmmYivoDF1LxQAkp1DY7NoCcAhL7AILR7wrXKehxCE+CPOLoY7kIPSghF5zfpOg0jjozfal0/J/41ZFsfKktX0VXYMwITn/mIXa68QtaCp8FCLR4w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:610:1cc::7) by SN7PR84MB3208.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:806:268::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Sat, 21 Mar 2026 18:11:47 +0000 Received: from CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM ([fe80::2c54:3534:122f:e74f]) by CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM ([fe80::2c54:3534:122f:e74f%4]) with mapi id 15.20.9723.022; Sat, 21 Mar 2026 18:11:47 +0000 From: "Pradhan, Sanman" To: Guenter Roeck CC: "linux-hwmon@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Sanman Pradhan Subject: [PATCH v6 2/3] hwmon: (pmbus/max31785) use access_delay for PMBus-mediated accesses Thread-Topic: [PATCH v6 2/3] hwmon: (pmbus/max31785) use access_delay for PMBus-mediated accesses Thread-Index: AQHcuV4umRvuzBT8H0qBEKRvQfwsgQ== Date: Sat, 21 Mar 2026 18:11:47 +0000 Message-ID: <20260321181052.27129-3-sanman.pradhan@hpe.com> References: <20260321181052.27129-1-sanman.pradhan@hpe.com> In-Reply-To: <20260321181052.27129-1-sanman.pradhan@hpe.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH3PR84MB3523:EE_|SN7PR84MB3208:EE_ x-ms-office365-filtering-correlation-id: 1c0df26c-4b06-4948-ad93-08de877550dd x-ld-processed: 105b2061-b669-4b31-92ac-24d304d195dc,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|1800799024|366016|56012099003|18002099003|22082099003|38070700021; x-microsoft-antispam-message-info: Sj2WCjIIv71hHE5C3Z0Ydwvc9sjYCTzR5cY7brrhfm39nBqVgYaIZTWHua6pb3jDf9caH823irEG951/w73kCA0QbQonQfSy1QIMHScCRuRhqeygL+bASVOYf5OzyCNqMShR7rcjqrmvOlHKYeDaExeZckk0goVNWaJ4QO5s4NE6WQXgdgnLREAJ/vMAMNzoOkquAkBHDJ9YP29HOwqQ85fPPJndkCwliOycfKXS9s/Wx0nlAtV+ByARpeUbGByO6UNOT8g8BELqVIuOtsKqwBVobHj4rQdyE4J9OjLsUuA/2pewrDGS0eaypm1aLkq2PB8RZi1SXBFcBBVNpwuI1hManF7ma4veDecqSywp5esXYq/AqSjNlnrS1ngM2VIHrDGb3iYkpcMnq4ONkgnRS6vUY2/0XIqsuU64/SXKUrVgTW4NOln6omYll74aTq6pMzC5DSvkBKn4CWENRa9u8DY9HhJdNE09Q1FHe4j/vWRp5hArZ+RPvvqPvmMyIk/ve/ou19D0xChjp3MWaq/7Y4D+XVMcDDZiFCq0QmRPc3kW5lBt3pM4hXIDbYpjq0vTLxzfKHDrP0y5XLAhsNIG2V8e+eMVS1CwkEateZWfnkBgpUBpkVdTg4sOG86LNG20M9UhcLgjrqDmW2RLM5O2f84ZQHLPZ8hsGcut5XfeOjPG82lkZWXmmA2vOKILeORIFCMKTOHx7dSBCMEc4Qoi02zSMbEjqG+exlKuJ4LSdcEhiGY7zhTQWJgjAd5N7Q1y6LoBIbpQA37uEPIUtuvd7ywItp3aWLuujR9/pxkq7TI= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(56012099003)(18002099003)(22082099003)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?ArGztXgU9kuUvkadKW3TVbUmC2Z0pv6OUJpFHLhDWBwzJRCz+lxqAHFk3h?= =?iso-8859-1?Q?f/OTYWuNn6ApLdgwIO1p9XVfGKZ00ohpNYQbcczA+xxbT05KjRY7zG4cqS?= =?iso-8859-1?Q?nf7NQrfyiQa5JMhH7Z7eyQ11imRRE9Z0R62f7JqHD0XwnwyU8Vy2N2jLzc?= =?iso-8859-1?Q?HXLbGomjLzb83EPIo4HZ1vwGE9uSYlQvknWBe9vQgrY7Jb5MijI9pePSbs?= =?iso-8859-1?Q?eBHpShuebE43ThzsXKkFZZpoiv0g1oXxPQb3JZa14/J0VM87DRFu1F0AtK?= =?iso-8859-1?Q?ouiUtfekj72J5bWkH9J/K5Rd22xoWpbVYnzxjt6+pO/8nHkI+GtQjHCRX3?= =?iso-8859-1?Q?vS6a+RhEp5dI7X5Xvb0f0Xk3bxHm/JMxTJlw6zyPMSJhvnqRI2X80b+yrT?= =?iso-8859-1?Q?h3WVeUUn44Lxe+kpGYPYhAntBcPZzUmWxdDH5vBGaZh6RwhvkCviI6fre0?= =?iso-8859-1?Q?XirH5zAl73JnCqA/2Pn7tgFy7gvfwIiJJz+FbepGznSJ7CTuPaoHatNv/t?= =?iso-8859-1?Q?pG5u/RAYk5p4tGAlxesN96f3J3QM7oDZ5coRzda7SAITyaqj/PLdgZ0xbb?= =?iso-8859-1?Q?7zwx1jlqH6m/GbUOjbM5157rch4eXJpBfjOYsyx+CsPxn8lTCzw1q4/awp?= =?iso-8859-1?Q?Q19AUv1ecl6Ho/iE+yaXJURB13Jmu0o5ZX4O6jsgKGMEcz1DQyTQoIpDeS?= =?iso-8859-1?Q?nqNnShTKw2NEKQBUqLthC0yM9OcX2MDN35GgphblRgqiUMFVj0J4k+bEGI?= =?iso-8859-1?Q?0JZtNDcySnLIXvX3b2Sg++3la5UL+MNFnZgbAvM8UOVEga+DGJATEgcriQ?= =?iso-8859-1?Q?aFDNsOgrbM5XhCCEYpgvv4ODyiKTOs8tD232nTZOCfuJVDgroW0RkDgoYL?= =?iso-8859-1?Q?HR7Jgnp8vmQCbzHNk9XYuisjsqcu7sAgAxz2ZGJEOLwJ0WO1EOmmv56zSs?= =?iso-8859-1?Q?Xp8mupohWH9sFc6F9sYlL2OLCbjzhLX1HppucHxZAEE3VkfXzDVoa49mcD?= =?iso-8859-1?Q?yI274LkM+xPuk5sWuTxxzAfLjrLqdQUMNjrmS+AwvUm30/J0V5m5DimUSe?= =?iso-8859-1?Q?io94ME6fZGmSSfhbB0eCLxuuRHSf2A3Ijj1uspd5G8QYxDnFoFKzldTMb5?= =?iso-8859-1?Q?G/tvOfI53BwE5gRBfCMC9s8f/kWwPYEKhhMB05RRWMfF42OvG/0Da1Z3oQ?= =?iso-8859-1?Q?+Gs/0m5xMb1JDon4NVYlTcUfOJ91OTfJRm1aZUwYLJNgvlcaUYO77Q4rr6?= =?iso-8859-1?Q?DFXxEYfv/m378crdyBLDv7fgbf7xsPg5vdAXz6vZHOLg+FdlAdHHmfOm4c?= =?iso-8859-1?Q?IPh2fziD1pyFj0KPUFZcpb1bLNOrpSuoExBrBjfNimkpi536AcvCRRWfzl?= =?iso-8859-1?Q?YI2gFYW01ywnXzQT5SZR30rzoNhOigLprjVe35ZvrQqTrto5VgWFiKhW5H?= =?iso-8859-1?Q?hwBV+3LD0VDLEhdM7dC8q5eu8Qjl/+593QQfftaNupmE1MwdJz9/6VFXNK?= =?iso-8859-1?Q?ewn89hmbvkj8mpYWplu5qgRyGOeYGNeehu62h5aDCEkV6iI9Z+Mjwf0bUd?= =?iso-8859-1?Q?CXxsh7v0Qz6HReJLaznsLDW25CwIISiH7pdpbRVsHEZfS9CoayeqJ6yepl?= =?iso-8859-1?Q?MYpCnN0QZcIpaLF7BJ+Wycmnw4qs7WFGHn4ukudMlQ1RBkqzE/4xQEQc/c?= =?iso-8859-1?Q?8A0mjWAAs6hqEtlAtAL8piq/r4jnRczgSRLe6YFAqVAdv7PVe9jaHZsq49?= =?iso-8859-1?Q?rxahAOO25PHvt4QiDRq41MMIIvHE8cOJCkCGDdvcGzYvoR?= Content-Transfer-Encoding: quoted-printable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: uXtgWk4Oiq1dvHVkKsMzCIlBii3x+EFwcNed1NM0Ot7/sHquZLIGpfZiecNMN/w40zWfOoAgo7MDanIZiE9Jx/IajtVpwPh6taHlA0eB/om9yW537ybPaftemXaVP0avwFY2PoUaq1Bp3RxBEwxDa17ZNdepPzqifyJjWVjtCWruzJpfjHJUhJOK1j24Nop8GXk4VbmwbGjiQECgnKrem+QFwtFNQcIXSX5MRxIsLwLEr1RYIfE2F2OXdv2Kgjk9Fm+uWCgSne+5KkrPCW7MS9S+PldA4eDgFR1QDxtColzDC2mmNg2alapmkSVbxcR05mKH9F9CBlHon05PbF9wIg== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 1c0df26c-4b06-4948-ad93-08de877550dd X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Mar 2026 18:11:47.0749 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 0avEHTNPKLHmTrxj248Fz1kIMPufRlqSzF7jWwkV+Xj/GmaL6Kf+2uZYmKFL3hxHwyQjD7nFZTvDH2fBDnlZGw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR84MB3208 X-OriginatorOrg: hpe.com X-Proofpoint-GUID: QtmxCLhR_Yr4DYWlUiAxue8ZisBGd7Sr X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIxMDE1MyBTYWx0ZWRfX4oWUoOb03n9q 18k03TRC1ywazOa+eQz/8UXyawrPTR+6D5o6VmZ5972W2n51RAaO1u71I0d3j1sDg/bKKT2diHE F3DIA6A04t2fjTB8R9aBYFq4P+pF3Nm/27I/5SAQsyLTjgijLKwhORInrNLREiT/HwsqLDOtxE4 xgo5qsThkWzcu+36gRUnEiqRibKkistzOzD9QzsXHwv/pfmtpZot9yprD57tC+rPFYCNjmrHdl0 cmHvX3sC+tANy/UwQGmefzuXLBF/E8W5VDt7CFsZs0a2BNriAMwYbhFQdUMXm/UMrmrcv4H+Ugu A/nB6qfpRxqDd2pb1z/LbynKKaHcPamxcPa8IzPeZLN8UewceWnGaQr/VmGCGt9zkjF6YqBUk3L QHmOLb41vf3qtliEb1pPHllDMiVCMHRnNYRF6p5nBVhz5C1t6y0lKmiKVCBtu56mUGIBIK+coz2 0OxHdewfjyjIRapkupg== X-Proofpoint-ORIG-GUID: QtmxCLhR_Yr4DYWlUiAxue8ZisBGd7Sr X-Authority-Analysis: v=2.4 cv=Sej6t/Ru c=1 sm=1 tr=0 ts=69bedf67 cx=c_pps a=FAnPgvRYq/vnBSvlTDCQOQ==:117 a=FAnPgvRYq/vnBSvlTDCQOQ==:17 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=8nJEP1OIZ-IA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=gQcMVamqm3wCPoSYhaRC:22 a=6_mrDcixewTG61oOsKN3:22 a=OUXY8nFuAAAA:8 a=1dJJvSGK75pZe7GnG3sA:9 a=wPNLvfGTeEIA:10 a=cAcMbU7R10T-QSRYIcO_:22 X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-21_06,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 suspectscore=0 malwarescore=0 lowpriorityscore=0 bulkscore=0 impostorscore=0 adultscore=0 priorityscore=1501 phishscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603210153 Content-Type: text/plain; charset="utf-8" From: Sanman Pradhan The MAX31785 driver currently uses driver-local wrappers around PMBus core accesses to enforce a 250us inter-access delay needed to work around occasional NACKs from the device. This duplicates the PMBus core delay mechanism already provided by pmbus_driver_info.access_delay and adds unnecessary complexity. Replace the PMBus wrapper approach with access_delay for normal PMBus-mediated accesses, while keeping the minimal local delay handling needed for raw pre-probe SMBus operations. For the raw i2c_transfer() long-read path, use pmbus_wait() and pmbus_update_ts() to keep the PMBus core timing state consistent with the raw transfer. Also: - allow PMBUS_FAN_CONFIG_12 physical-page accesses to fall back to the PMBus core, while remapping only virtual pages - use pmbus_update_fan() directly for fan configuration updates - use the delayed raw read helper for MFR_REVISION during probe - add a final max31785_wait() before pmbus_do_probe() to bridge the timing gap between pre-probe accesses and PMBus core registration - rename 'virtual' to 'vpage', 'driver_data' to 'data', and drop the unused to_max31785_data() macro Signed-off-by: Sanman Pradhan --- v6: - No changes to this patch in this version. v5: - No changes to this patch in this version. v4: - Standardized on the Juniper email address to resolve the From/SOB mismatch. v3: - Added an explicit max31785_wait() before pmbus_do_probe() to ensure proper timing spacing during the handover to the PMBus core. v2: - Replaced local usleep_range() with core pmbus_wait() and pmbus_update_ts() in the raw long-read path. - Updated read_byte_data() to allow core fallback for physical pages. --- drivers/hwmon/pmbus/max31785.c | 191 +++++++++++---------------------- 1 file changed, 60 insertions(+), 131 deletions(-) diff --git a/drivers/hwmon/pmbus/max31785.c b/drivers/hwmon/pmbus/max31785.c index 50073fe0c5e88..260aa8fb50f13 100644 --- a/drivers/hwmon/pmbus/max31785.c +++ b/drivers/hwmon/pmbus/max31785.c @@ -31,8 +31,6 @@ struct max31785_data { struct pmbus_driver_info info; }; =20 -#define to_max31785_data(x) container_of(x, struct max31785_data, info) - /* * MAX31785 Driver Workaround * @@ -40,9 +38,8 @@ struct max31785_data { * These issues are not indicated by the device itself, except for occasio= nal * NACK responses during master transactions. No error bits are set in STA= TUS_BYTE. * - * To address this, we introduce a delay of 250us between consecutive acce= sses - * to the fan controller. This delay helps mitigate communication problems= by - * allowing sufficient time between accesses. + * Keep minimal local delay handling for raw pre-probe SMBus accesses. + * Normal PMBus-mediated accesses use pmbus_driver_info.access_delay inste= ad. */ static inline void max31785_wait(const struct max31785_data *data) { @@ -54,89 +51,40 @@ static inline void max31785_wait(const struct max31785_= data *data) } =20 static int max31785_i2c_write_byte_data(struct i2c_client *client, - struct max31785_data *driver_data, - int command, u8 data) + struct max31785_data *data, + int command, u8 value) { int rc; =20 - max31785_wait(driver_data); - rc =3D i2c_smbus_write_byte_data(client, command, data); - driver_data->access =3D ktime_get(); + max31785_wait(data); + rc =3D i2c_smbus_write_byte_data(client, command, value); + data->access =3D ktime_get(); return rc; } =20 static int max31785_i2c_read_word_data(struct i2c_client *client, - struct max31785_data *driver_data, + struct max31785_data *data, int command) { int rc; =20 - max31785_wait(driver_data); + max31785_wait(data); rc =3D i2c_smbus_read_word_data(client, command); - driver_data->access =3D ktime_get(); - return rc; -} - -static int _max31785_read_byte_data(struct i2c_client *client, - struct max31785_data *driver_data, - int page, int command) -{ - int rc; - - max31785_wait(driver_data); - rc =3D pmbus_read_byte_data(client, page, command); - driver_data->access =3D ktime_get(); - return rc; -} - -static int _max31785_write_byte_data(struct i2c_client *client, - struct max31785_data *driver_data, - int page, int command, u16 data) -{ - int rc; - - max31785_wait(driver_data); - rc =3D pmbus_write_byte_data(client, page, command, data); - driver_data->access =3D ktime_get(); - return rc; -} - -static int _max31785_read_word_data(struct i2c_client *client, - struct max31785_data *driver_data, - int page, int phase, int command) -{ - int rc; - - max31785_wait(driver_data); - rc =3D pmbus_read_word_data(client, page, phase, command); - driver_data->access =3D ktime_get(); - return rc; -} - -static int _max31785_write_word_data(struct i2c_client *client, - struct max31785_data *driver_data, - int page, int command, u16 data) -{ - int rc; - - max31785_wait(driver_data); - rc =3D pmbus_write_word_data(client, page, command, data); - driver_data->access =3D ktime_get(); + data->access =3D ktime_get(); return rc; } =20 static int max31785_read_byte_data(struct i2c_client *client, int page, in= t reg) { - const struct pmbus_driver_info *info =3D pmbus_get_driver_info(client); - struct max31785_data *driver_data =3D to_max31785_data(info); - switch (reg) { case PMBUS_VOUT_MODE: return -ENOTSUPP; case PMBUS_FAN_CONFIG_12: - return _max31785_read_byte_data(client, driver_data, - page - MAX31785_NR_PAGES, - reg); + if (page < MAX31785_NR_PAGES) + return -ENODATA; + return pmbus_read_byte_data(client, + page - MAX31785_NR_PAGES, + reg); } =20 return -ENODATA; @@ -178,7 +126,21 @@ static int max31785_read_long_data(struct i2c_client *= client, int page, if (rc < 0) return rc; =20 + /* + * Ensure the raw transfer is properly spaced from the + * preceding PMBus transaction. + */ + pmbus_wait(client); + rc =3D i2c_transfer(client->adapter, msg, ARRAY_SIZE(msg)); + + /* + * Update PMBus core timing state for the raw transfer, even on error. + * Pass 0 as the operation mask since this is a raw read, intentionally + * neither PMBUS_OP_WRITE nor PMBUS_OP_PAGE_CHANGE. + */ + pmbus_update_ts(client, 0); + if (rc < 0) return rc; =20 @@ -203,19 +165,16 @@ static int max31785_get_pwm(struct i2c_client *client= , int page) return rv; } =20 -static int max31785_get_pwm_mode(struct i2c_client *client, - struct max31785_data *driver_data, int page) +static int max31785_get_pwm_mode(struct i2c_client *client, int page) { int config; int command; =20 - config =3D _max31785_read_byte_data(client, driver_data, page, - PMBUS_FAN_CONFIG_12); + config =3D pmbus_read_byte_data(client, page, PMBUS_FAN_CONFIG_12); if (config < 0) return config; =20 - command =3D _max31785_read_word_data(client, driver_data, page, 0xff, - PMBUS_FAN_COMMAND_1); + command =3D pmbus_read_word_data(client, page, 0xff, PMBUS_FAN_COMMAND_1); if (command < 0) return command; =20 @@ -233,8 +192,6 @@ static int max31785_get_pwm_mode(struct i2c_client *cli= ent, static int max31785_read_word_data(struct i2c_client *client, int page, int phase, int reg) { - const struct pmbus_driver_info *info =3D pmbus_get_driver_info(client); - struct max31785_data *driver_data =3D to_max31785_data(info); u32 val; int rv; =20 @@ -263,7 +220,7 @@ static int max31785_read_word_data(struct i2c_client *c= lient, int page, rv =3D max31785_get_pwm(client, page); break; case PMBUS_VIRT_PWM_ENABLE_1: - rv =3D max31785_get_pwm_mode(client, driver_data, page); + rv =3D max31785_get_pwm_mode(client, page); break; default: rv =3D -ENODATA; @@ -294,35 +251,7 @@ static inline u32 max31785_scale_pwm(u32 sensor_val) return (sensor_val * 100) / 255; } =20 -static int max31785_update_fan(struct i2c_client *client, - struct max31785_data *driver_data, int page, - u8 config, u8 mask, u16 command) -{ - int from, rv; - u8 to; - - from =3D _max31785_read_byte_data(client, driver_data, page, - PMBUS_FAN_CONFIG_12); - if (from < 0) - return from; - - to =3D (from & ~mask) | (config & mask); - - if (to !=3D from) { - rv =3D _max31785_write_byte_data(client, driver_data, page, - PMBUS_FAN_CONFIG_12, to); - if (rv < 0) - return rv; - } - - rv =3D _max31785_write_word_data(client, driver_data, page, - PMBUS_FAN_COMMAND_1, command); - - return rv; -} - -static int max31785_pwm_enable(struct i2c_client *client, - struct max31785_data *driver_data, int page, +static int max31785_pwm_enable(struct i2c_client *client, int page, u16 word) { int config =3D 0; @@ -351,23 +280,20 @@ static int max31785_pwm_enable(struct i2c_client *cli= ent, return -EINVAL; } =20 - return max31785_update_fan(client, driver_data, page, config, - PB_FAN_1_RPM, rate); + return pmbus_update_fan(client, page, 0, config, + PB_FAN_1_RPM, rate); } =20 static int max31785_write_word_data(struct i2c_client *client, int page, int reg, u16 word) { - const struct pmbus_driver_info *info =3D pmbus_get_driver_info(client); - struct max31785_data *driver_data =3D to_max31785_data(info); - switch (reg) { case PMBUS_VIRT_PWM_1: - return max31785_update_fan(client, driver_data, page, 0, - PB_FAN_1_RPM, - max31785_scale_pwm(word)); + return pmbus_update_fan(client, page, 0, 0, + PB_FAN_1_RPM, + max31785_scale_pwm(word)); case PMBUS_VIRT_PWM_ENABLE_1: - return max31785_pwm_enable(client, driver_data, page, word); + return max31785_pwm_enable(client, page, word); default: break; } @@ -391,6 +317,7 @@ static const struct pmbus_driver_info max31785_info =3D= { .read_byte_data =3D max31785_read_byte_data, .read_word_data =3D max31785_read_word_data, .write_byte =3D max31785_write_byte, + .access_delay =3D MAX31785_WAIT_DELAY_US, =20 /* RPM */ .format[PSC_FAN] =3D direct, @@ -438,29 +365,29 @@ static const struct pmbus_driver_info max31785_info = =3D { }; =20 static int max31785_configure_dual_tach(struct i2c_client *client, - struct pmbus_driver_info *info) + struct max31785_data *data) { + struct pmbus_driver_info *info =3D &data->info; int ret; int i; - struct max31785_data *driver_data =3D to_max31785_data(info); =20 for (i =3D 0; i < MAX31785_NR_FAN_PAGES; i++) { - ret =3D max31785_i2c_write_byte_data(client, driver_data, + ret =3D max31785_i2c_write_byte_data(client, data, PMBUS_PAGE, i); if (ret < 0) return ret; =20 - ret =3D max31785_i2c_read_word_data(client, driver_data, + ret =3D max31785_i2c_read_word_data(client, data, MFR_FAN_CONFIG); if (ret < 0) return ret; =20 if (ret & MFR_FAN_CONFIG_DUAL_TACH) { - int virtual =3D MAX31785_NR_PAGES + i; + int vpage =3D MAX31785_NR_PAGES + i; =20 - info->pages =3D virtual + 1; - info->func[virtual] |=3D PMBUS_HAVE_FAN12; - info->func[virtual] |=3D PMBUS_PAGE_VIRTUAL; + info->pages =3D vpage + 1; + info->func[vpage] |=3D PMBUS_HAVE_FAN12; + info->func[vpage] |=3D PMBUS_PAGE_VIRTUAL; } } =20 @@ -471,7 +398,7 @@ static int max31785_probe(struct i2c_client *client) { struct device *dev =3D &client->dev; struct pmbus_driver_info *info; - struct max31785_data *driver_data; + struct max31785_data *data; bool dual_tach =3D false; int ret; =20 @@ -480,20 +407,20 @@ static int max31785_probe(struct i2c_client *client) I2C_FUNC_SMBUS_WORD_DATA)) return -ENODEV; =20 - driver_data =3D devm_kzalloc(dev, sizeof(struct max31785_data), GFP_KERNE= L); - if (!driver_data) + data =3D devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); + if (!data) return -ENOMEM; =20 - info =3D &driver_data->info; - driver_data->access =3D ktime_get(); + data->access =3D ktime_get(); + info =3D &data->info; *info =3D max31785_info; =20 - ret =3D max31785_i2c_write_byte_data(client, driver_data, - PMBUS_PAGE, 255); + ret =3D max31785_i2c_write_byte_data(client, data, + PMBUS_PAGE, 0xff); if (ret < 0) return ret; =20 - ret =3D i2c_smbus_read_word_data(client, MFR_REVISION); + ret =3D max31785_i2c_read_word_data(client, data, MFR_REVISION); if (ret < 0) return ret; =20 @@ -509,11 +436,13 @@ static int max31785_probe(struct i2c_client *client) } =20 if (dual_tach) { - ret =3D max31785_configure_dual_tach(client, info); + ret =3D max31785_configure_dual_tach(client, data); if (ret < 0) return ret; } =20 + max31785_wait(data); + return pmbus_do_probe(client, info); } =20 --=20 2.34.1 From nobody Sat Apr 4 00:24:01 2026 Received: from mx0a-002e3701.pphosted.com (mx0a-002e3701.pphosted.com [148.163.147.86]) (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 D0F87307AE3; Sat, 21 Mar 2026 18:13:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=148.163.147.86 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774116783; cv=fail; b=DOEeqSPLatLXKULGPlXuxfGJnOq1heX6kxaPlV/8uWsj6UEy9/2apO8gICTs0W5SRZvp5MGGSZEKFPlZE2G+Qr7+dGUqzXqrRblzLLA3noGMP02ge0ELOh/wYwRVeRqo5LMO6YF6hg/5smNMqHQmKa1IdgQIHj5XjE5S2ySM0N8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774116783; c=relaxed/simple; bh=ddNVQxQRZI8VbZaXVNTADl5RYuNjXWmXaPR81ZuDUEc=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=tMwgvLNPLyXRPBrhG+Vu1HoaJB6SX6hAig9TH0FElir+ZYw4RFkqxJEk1eOld6LJQhp/xcp5nmza0fmnsd9fVkM41rgpuEpvR9vCOXptiR61Kwx5X3aVHJBjGcfOGMwQArRmBV7iddYfLIEx/ifsUouN+9AOR8J426aueItE8Oo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=hpe.com; spf=pass smtp.mailfrom=hpe.com; dkim=pass (2048-bit key) header.d=hpe.com header.i=@hpe.com header.b=ht79ATqG; arc=fail smtp.client-ip=148.163.147.86 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=hpe.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hpe.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=hpe.com header.i=@hpe.com header.b="ht79ATqG" Received: from pps.filterd (m0150242.ppops.net [127.0.0.1]) by mx0a-002e3701.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62LH2hV53714012; Sat, 21 Mar 2026 18:12:47 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps0720; bh=M8 naVchcg0AUDWvO3OjBpyJwxLzotB2CqvRMYzW7vJI=; b=ht79ATqG73b75oSvYu WqnkRTXSvZBkBkAUyztgSWbk9MzaL6rhz81+jFosEORNcDuzbTPTz1N74fEsapiK Voz68tT+iy0E95KS0A/csNL+YjYwxsuNxfrq/w19a12QIgbmnuFvFsWdB7msWtBH hK5AKl0e8Q5EhIQeObp2XBskxGUmeAc8+T+fjwQ12JtcDKnjywgT+OGOhaQi8j92 +9w9zrb+MIPDqGXZhTGlbKDpRorgiFDZhQVkRV/H4GgeOIHdG2UrpMSbzF7yQp0l 0R3k4fOdpOVZflmVppx7ek1wEt94H0GhW1UqOWa2KRn+Te9ItvbPZN8sCEQZ8L20 EGyQ== Received: from p1lg14878.it.hpe.com (p1lg14878.it.hpe.com [16.230.97.204]) by mx0a-002e3701.pphosted.com (PPS) with ESMTPS id 4d1p6q429w-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Sat, 21 Mar 2026 18:12:47 +0000 (GMT) Received: from p1wg14923.americas.hpqcorp.net (unknown [10.119.18.111]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by p1lg14878.it.hpe.com (Postfix) with ESMTPS id AD11727678; Sat, 21 Mar 2026 18:12:46 +0000 (UTC) Received: from p1wg14927.americas.hpqcorp.net (10.119.18.117) by p1wg14923.americas.hpqcorp.net (10.119.18.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Sat, 21 Mar 2026 06:12:22 -1200 Received: from P1WG14918.americas.hpqcorp.net (16.230.19.121) by p1wg14927.americas.hpqcorp.net (10.119.18.117) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17 via Frontend Transport; Sat, 21 Mar 2026 06:12:09 -1200 Received: from DM2PR0701CU001.outbound.protection.outlook.com (192.58.206.35) by edge.it.hpe.com (16.230.19.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Sat, 21 Mar 2026 18:12:09 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=POfW5Pd47c9eXBjujgpvKAW9qhjE88usJU0WpeQygUueDJ+H7GAJSbxEN0mPz+awv2nhAvvp+RMYcmPSBPJxsL/ZLeFQo2VhQbw+8riOVDb/EMvStGrWvt1j1DDWKooC2oO1TzRxaeasV9FCu4/q4CzETA8BNXhOWmTxRxlKKhsXaZp0CH+vArVrlUsbAoJPGiLmvhQxKmvXfMtUEDwvh7NVhaL68039lTR71APj1+o/F2gvGYpP8DcpPGky41/SWFUqXubSVcp0/pJR/ZYoXhSU+rQmLI0bXZ6q8y4qKda0e1hTBX4aG7ZJIKF/XYX8CIZ8Me2LEIYQwnZsV0r3AQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=M8naVchcg0AUDWvO3OjBpyJwxLzotB2CqvRMYzW7vJI=; b=M6QNMkJBHYI8/n/A2z8EMNbWRV4YIYhTFE3+5ib3RY3bM01OrRjNCniTnxUpbP3iEPEY2YHOIFaw2o4U5PdLjoWu942XmwwYF7orfFa1jwYKEFKQ03x8KfOuHOhjPS8tBsaEos3tt0wdclFi8hXpkxnQjEyN/0+QBBB/wOvMVfLHEqrTc5V8FufkaCPROdNanyzGn8T5koAzuSoslMZC6Z+afjprww4mct1oMi/L2DwcpH7NoznYazlIPNy4IZ/yOs0EPtG+n9ZYqZejvpFPgvEUMnGGCeKsrDlAk80GB2oPiJLbHivGTWm1TO4YCJ2Ax12IMzUreR7iP6Mu8nm9Sw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:610:1cc::7) by SN7PR84MB3208.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:806:268::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.25; Sat, 21 Mar 2026 18:12:05 +0000 Received: from CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM ([fe80::2c54:3534:122f:e74f]) by CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM ([fe80::2c54:3534:122f:e74f%4]) with mapi id 15.20.9723.022; Sat, 21 Mar 2026 18:12:05 +0000 From: "Pradhan, Sanman" To: Guenter Roeck CC: "linux-hwmon@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Sanman Pradhan Subject: [PATCH v6 3/3] hwmon: (pmbus/max31785) check for partial i2c_transfer in read_long_data Thread-Topic: [PATCH v6 3/3] hwmon: (pmbus/max31785) check for partial i2c_transfer in read_long_data Thread-Index: AQHcuV45vowqosyq+0O6aKW4R0V/pA== Date: Sat, 21 Mar 2026 18:12:05 +0000 Message-ID: <20260321181052.27129-4-sanman.pradhan@hpe.com> References: <20260321181052.27129-1-sanman.pradhan@hpe.com> In-Reply-To: <20260321181052.27129-1-sanman.pradhan@hpe.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH3PR84MB3523:EE_|SN7PR84MB3208:EE_ x-ms-office365-filtering-correlation-id: 6f674ac6-5d37-412b-3d94-08de87755ba2 x-ld-processed: 105b2061-b669-4b31-92ac-24d304d195dc,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|1800799024|366016|56012099003|18002099003|22082099003|38070700021; x-microsoft-antispam-message-info: xcATERYPXcx/2nFT39eisq6ePEevFqKwEH9kUd6Osp0gU0EmL9uVu7IQXZ7SjHndVZGAz0N0h67KUbA1Rpa/3fS30DzssmL7CvRzvrdy6ihScooHYby7rfufS+/+mbuYYLuKcApU0Nxu90PPk3LJA2A7yC1ylvfALbQimoQaBRa43eE78QkLlckXaW7B4GlAVqVtjR1kjfJxaB7CZwBpXg1f+e/1en4EqLx2S6BVYITnPHsxlSngYNXRGB4AHP4pY2LkYc/uzBNlf2gR3dFzg4YWEc4A/VkrmvbblA3O/E4QgtuX3CuZDfL+IJ7v7uYcOnU4Z8VEVpa6jmNJE1kTvl2251bupwBZ2W6ewUzP9atTMEZI2EZT79pKz8c9a6sRDXO2gX6MtBCRbgA0QtFUF8P4fVCD+HJG7CEPvLj67SIfn1OI8v14fU52jG0Pu2I080XdbwLE4FDM5IopquWE7ixq8QZ8HFeozOntepTd2Gt/baf33Hqly3DrCQeeSr+aKfb5yb2Mi7Th4iXCgt0WPBqhAFH4NlkHzS5ZlIVspXNPlqvDWgGX/UYvDYZMx8QGJmb5V/cCSVirTskOXKgzxe4POeI7dml3Jt2+5jKEBBOhRTdijArMPXoFVHOXS4JmLc4afmA/WiTM/sEsxL9+MRWsLLodVV4As4pk+H8BMUuVNkKrY6xdnV3wj/9auEJ7N8Gs57u/Jg5hnXvyzWkw8zrwVW2Pj0TmNVk2/howZuJft79v2PFKr6DqGK2TlHXwZL8swpigZWJVnee1baCd68XsufrMIxcOPbpPkaZNhok= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(366016)(56012099003)(18002099003)(22082099003)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?UKClKSNu5Ue+m+AeogJmschzgGFm3ae1mh9Dn4ui7XYO0PP+GwgUerEsZ/?= =?iso-8859-1?Q?wZ8SLJbWd1PneJfme1bnGYvdkE5VD7K5P1Ipgzcos9uN/kxuKS6zFOBRz0?= =?iso-8859-1?Q?7WBDl6UhOY4tUeWYFR5mwyBXD+inSXEhYJWMiBJ2U3Ttp8R8jrRO68T7pJ?= =?iso-8859-1?Q?YhfsrVXvQGq8zXjS5+15mt1GTYmyCusEwAvm9gipbyylKKFqK47ntgteLm?= =?iso-8859-1?Q?TjjVHm1n47JByUNVcgkpsndOTmr0SaIPtcPdGGW/1EWfg79WcnC37tp4W1?= =?iso-8859-1?Q?xbE6yJa6Qgpo0exJ1W8sT/eO2vGOnB4Jy2xHd8azm8CDR2EdeE3J0V0XTk?= =?iso-8859-1?Q?B9cKopgT1hjMc1sJyNnjzMnzFyEfKUAg3e65niUEqaOAX7sjbkDohmaVcV?= =?iso-8859-1?Q?hDEoxxogh3OwnSJVVvhVdMgm9YjPWUMNMlW0FrJFuHwte32HVDB+mkFTMB?= =?iso-8859-1?Q?XV5JKFq0uVoPiXRY4yIFJBxn4Ev20XxZPyLvJ9J6VI1q2uuH/K3P1qN+1I?= =?iso-8859-1?Q?Kxdip6zZiD3HM+/73M14Cw6zZIqCgjLzJ92K1wEbzq1Sma9RbbcHKkyER6?= =?iso-8859-1?Q?gq6sTK1HgVb6XzuwlR32QsvQJ98XR1B8I06tH/IekNbOSGdiqjsi/o+fhF?= =?iso-8859-1?Q?i+Tkz+z3ygkdecNd3BAUxTF9eDtDQVJuKqJiLU85bSYhCXhicxzk1xOE6R?= =?iso-8859-1?Q?q4/M65AxJYcty2JMJ/IC089J1q5TfgGxV0mOPQD4XFFIvmmbfpeiWpA8q4?= =?iso-8859-1?Q?8DUcB1hDXcc7iFwl3N95x6PrEh6wCtLxVKPZPAEDsclEFEjloz5xsarOYv?= =?iso-8859-1?Q?pANZLqmCwPl0bAI4LlsVKFVugyKU42Oa2cG0XFC71NOjdF4+JLlcpHHtm+?= =?iso-8859-1?Q?x0CeR6Taj2uYc8fFe1UnnU2MeQ5z0lVMfOL2xNG0EGOdGr/PI0uAYRyIpk?= =?iso-8859-1?Q?WtffyfX68xTMTTOYAh8awgrMPwz5OX+n1bPKS1t51x5C/Qger6eAjawqAO?= =?iso-8859-1?Q?1zGk6E/uvfof0Ws2GHLjXNM6EPE8ram5hj9ABBxLi0Z51HybAxI4oIyPL9?= =?iso-8859-1?Q?Pza6eJvdJsKJlRcit+7ILCwjg2rj2oDmA5H0coCFOKP3daa1TVxNoY0ROA?= =?iso-8859-1?Q?KEWho0uDd0jQrDMi+5ia5CvWg55vBm1anLHqUHujwO5M+WUwlPcDvHwJgt?= =?iso-8859-1?Q?6ea21AAVx6aO7Rk2IYdiIGskeyUW6oafTiuH8Ie3KXzbPZcIjYGPDOCNvI?= =?iso-8859-1?Q?M5pfbl1VNY95d4evnuU7Jqexk9QcRIO3W8HE2naY9Cveh7Gg/VEnL5u7Zk?= =?iso-8859-1?Q?KMCy21YeaijE2DxJQshdBXkAlkglkPKOBIefF5u5XDu+ONoq2o+Ugqv8Kq?= =?iso-8859-1?Q?CtxDKjeiWoHtz8DYNovoh3bqsEBYaBFmZFxZaLwv0SyNeWNsCOermnNu3w?= =?iso-8859-1?Q?g88kUQxGCt6cQa4Tik1A3NLUpLHP+3EEA7gKlqSKCFuH1vfHreDM7cp+4W?= =?iso-8859-1?Q?8RycMbQZWJ3JjQDkkKE0QeKxZhDCNllkxC/uSFCvojSVogGxdpGgDGghTd?= =?iso-8859-1?Q?TE0gzAO1Rcz2cNrx8K5viLtB2THEgXQ76zpaXa1pfrNsHltaFcwHdX18es?= =?iso-8859-1?Q?497A74FjJRK+a8fpfUQCTKKVNRryDwDMv9EBlDlsm/rIbtEqO+Ths36uD1?= =?iso-8859-1?Q?4Sl2nOlNOo0LvWdZZwsa83LwhxGLuRMMrjeTAeprdbW5/Xy5xibIVll58P?= =?iso-8859-1?Q?YViuGChedjIS19jYsrm27e6fRjN9j5Py28DrTsa1rVSpEM?= Content-Transfer-Encoding: quoted-printable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: UUK/brGupebfsN35+m9vHdJas3x/+uMVGPk4PIqR5pnsb/BUo9AwutdqWO/x2XnSOAEiA1/chrKXaLJa2IWdcGhX5dsn4Xmowu5pIUQTN7EkZCf+dLL0qvVoXaw91ZCkLbZzgzyEk2EqRLFN6lpNSBibC4sCHqkRscv/tFdDdeqy/ekS89S0QxVCDU9HU5ZilJTLxNwJxuW2Py0Nr3wdYmoe/jVx3L7g9jmCLdpDGX4jwm/plJDijwLfi0c7ze6hbzFJQn7X3CahnWv2rtZUsjpZc9Lk4oFj5t+bpuZEtDavpUF+twNvjpyjV6yqf2zPtrWkNatteSKx0BYNO1dE3w== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 6f674ac6-5d37-412b-3d94-08de87755ba2 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Mar 2026 18:12:05.0969 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: dSjHvYyRNes3eqvcYj5k9jxlpxlZA9aB27B+jpam1nHDkx8eClbeiJKoXUgZ5RfRReOZHRB7rS3ninh7vwskpA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR84MB3208 X-OriginatorOrg: hpe.com X-Proofpoint-GUID: B89lu56iJqAokOcxDc8iejhYojnwfuTZ X-Proofpoint-ORIG-GUID: B89lu56iJqAokOcxDc8iejhYojnwfuTZ X-Authority-Analysis: v=2.4 cv=RaSdyltv c=1 sm=1 tr=0 ts=69bedf9f cx=c_pps a=UObrlqRbTUrrdMEdGJ+KZA==:117 a=UObrlqRbTUrrdMEdGJ+KZA==:17 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=8nJEP1OIZ-IA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=gQcMVamqm3wCPoSYhaRC:22 a=J0OTuHAx6l5K1fCpvPfz:22 a=OUXY8nFuAAAA:8 a=pxZigRnF54JOt-8cZC8A:9 a=wPNLvfGTeEIA:10 a=cAcMbU7R10T-QSRYIcO_:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIxMDE1MyBTYWx0ZWRfX35ZacDl8KHzo ybrvbT8wtKpMCKXVTSFPEVeLfSKbONEpD7nxZCLAGkM4Gz2jLIpYnwo02BdF845nZk8VeiGFh1M CPkVeaS9YJ2FG2O0OILT5rXNpOoa66/RarxXmrubCECvIXaDvPzJf4+ubjvbaWvaUbV/I/AEMB0 d1KBh1zjF1+WCFBELz3dpJzeSxk7oi9Xa03JINAtMrFfzbFRN41FbRIFBcregIwoUpUsK1Air+C jDVvO3+ThphxJKAQjLIVxKmohRBisTSak9S+cjaK+D43OmG5W76l+pWECcB2WM7uhzRjprYivXi ki+ykc+0j/XIA5A+gCTIwPngZlCTCDql5NR99GjUAGR5LAOijMYzWfDkyhhs9DRZudt0zs6y7DW ur3R2zGZZvLIO//ZbyGWpKd9z24Zm76sOurJV1GkmJYnOghGPUwK3CsCZZ0UYdDlXJAq4A/iS3L /bHv2/I1Rpnu7qH+VkA== X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-21_06,2026-03-20_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 bulkscore=0 malwarescore=0 adultscore=0 phishscore=0 spamscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603210153 Content-Type: text/plain; charset="utf-8" From: Sanman Pradhan i2c_transfer() returns the number of messages successfully transferred, not only a negative errno on failure. When called with two messages (write command byte followed by a read of the 4-byte response), a return value of 1 means the command write succeeded but the read did not complete. In that case, rspbuf remains uninitialized and must not be interpreted as valid data. Treat any return value other than ARRAY_SIZE(msg) as an error, and return -EIO for partial completion. Also return 0 on success instead of the message count, since the caller only needs to distinguish success from failure. Signed-off-by: Sanman Pradhan --- v6: - No changes to this patch in this version. v5: - New patch in the series. Fixes a pre-existing bug where partial i2c_transfer() returns left rspbuf uninitialized. --- drivers/hwmon/pmbus/max31785.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/hwmon/pmbus/max31785.c b/drivers/hwmon/pmbus/max31785.c index 260aa8fb50f13..3caa76bcbeb5e 100644 --- a/drivers/hwmon/pmbus/max31785.c +++ b/drivers/hwmon/pmbus/max31785.c @@ -141,13 +141,13 @@ static int max31785_read_long_data(struct i2c_client = *client, int page, */ pmbus_update_ts(client, 0); =20 - if (rc < 0) - return rc; + if (rc !=3D ARRAY_SIZE(msg)) + return rc < 0 ? rc : -EIO; =20 *data =3D (rspbuf[0] << (0 * 8)) | (rspbuf[1] << (1 * 8)) | (rspbuf[2] << (2 * 8)) | (rspbuf[3] << (3 * 8)); =20 - return rc; + return 0; } =20 static int max31785_get_pwm(struct i2c_client *client, int page) --=20 2.34.1