From nobody Fri Apr 3 03:00:12 2026 Received: from mx0b-002e3701.pphosted.com (mx0b-002e3701.pphosted.com [148.163.143.35]) (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 979D81DEFE0; Wed, 25 Mar 2026 05:13:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=148.163.143.35 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774415618; cv=fail; b=AeAwvu0VuoUOrbV+RhGWlvD6md/pRgz28ulQRbxT1YWDR2yQV2tuk111jjrJm5aRKBB1+gR+bDmxcuksYY22fYNKazdx3+Ae6ZbzJkUT+L3mS2cvv8QGE+IAKYlVJN4BaZkQyFzXs0QipE6Lk//hprMSrJ2qAY76MwgWy2KL31k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774415618; c=relaxed/simple; bh=sTBAQLvB/8VZGoLlvApmnDpkMir5St41aXSD5KECuUE=; h=From:To:CC:Subject:Date:Message-ID:Content-Type:MIME-Version; b=cjzlpMxaNcfjhPu3MN9gK757RNMC/w33NijqmdE5qV+1DR1irYzeoyZvtADAWov+BUFxWviLuyGPIoIq8xg5AorBByDRP/g5IIPAA3FQLsfjFSlSTPdsUNLKeHupY6EcNrgutmvc4EmztjeAOaP/Q5O4YlSbDdyY6/7WfAlQ05I= 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=btj/+TY6; arc=fail smtp.client-ip=148.163.143.35 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="btj/+TY6" Received: from pps.filterd (m0134424.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62OMDFAc2890142; Wed, 25 Mar 2026 05:13:21 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=cc :content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=pps0720; bh=MX+BgGbSD7iEcAwuh1RWbPZV C+YOwTzWGhxv2j4mJxo=; b=btj/+TY6DaCESFIRnU7lLcxa/Lti9TNSPOjB1dCX KDGX8PbdgY4aw/xfHczb/mqFZ8+abIRGGeapXFog/v5kf/zf/OMOVm9hUfAJo6pz bkEMmHm2Pyr2J7BV1YIgrO7BQqCqhVmuvxH8jXgWL98Kmt2eK3kQxLs8Tr0siBJk HPNOaTjYsrAaq7eC2Sz5vVNESwJGBQThOZvRWui37dRU5fzJyfQ4CbYh8KNywnOI D0mvBFpLY//pCl0mIXX9NKk2bF/KZ1p4h+X9zSitdUZl57hNfWEelgviFuR2b4pr Alx6NETjkNjwfRJtD9xE+AWuH8SoRQcsFK+seGEHzfXkhA== Received: from p1lg14879.it.hpe.com (p1lg14879.it.hpe.com [16.230.97.200]) by mx0b-002e3701.pphosted.com (PPS) with ESMTPS id 4d4375ute0-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Wed, 25 Mar 2026 05:13:21 +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 p1lg14879.it.hpe.com (Postfix) with ESMTPS id 5F96ED1E3; Wed, 25 Mar 2026 05:13:20 +0000 (UTC) Received: from p1wg14923.americas.hpqcorp.net (10.119.18.111) 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; Tue, 24 Mar 2026 17:13:18 -1200 Received: from p1wg14921.americas.hpqcorp.net (16.230.19.124) 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 via Frontend Transport; Tue, 24 Mar 2026 17:13:18 -1200 Received: from SN1PR07CU001.outbound.protection.outlook.com (192.58.206.35) by edge.it.hpe.com (16.230.19.124) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Tue, 24 Mar 2026 17:13:18 -1200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=R87X0t97e0tgFUWK08b2F4Er3+Hx2owRQdPha00ZbNMkIEjvppcFZwNhg6qlOkYe3kg5Z6OjGSKPEAUsoXVn6a3iB5DDg5tQy/QV45294QKSmjVn1cP0b0K/VgmgI8Db5esgfT+7+9x5FsJlAx03sfUaxq5kd/ML+PBeJYW95zl4wUSc6ObtTS2W14DdWpSSSJR2aq1RPtYqgrpXOyEudYNbcQ+ucoTAla16TNiMIL4ygR3UA5erJXPXsOn/Aanblixv0lExSd7p6mn4annqEGX2JOnNLEqCag2qTce9EwDoCEd1WqQiNf8cIyTeEU2K0jqgpCUahNf14/NHRMy3cw== 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=MX+BgGbSD7iEcAwuh1RWbPZVC+YOwTzWGhxv2j4mJxo=; b=Hl408a3CqWJztYiMck25VMiHnxATMieSSLnl1ZcI83vWWeKyTf0XbNYvyhmgN1hHyxyWiFfGPe3a8QM9wmPQZTDjU/0Vrh6xTkRPhSS3blm68y7r56KhLvciMO2qLVgOBRpn8HL2OKCqOtSxvd10Wq58WEPqkeeucaMaLqMtUE02aIIrvwZH4QLHwxy8NAFBCM9Sw/aEl9bhyaiPN7rxMZu/FuxuNFNwBUrSD7GLijeNbip9uuuh72an73aLFEXZLAxt9zDqUosndLBtwED9COADjgK87ODwqUPaBGdlwjconwL+u1Yd2Aofq29o9lprP1nJkhzZgjkP5t/h2+ZD2A== 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 DM4PR84MB1398.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:8:49::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Wed, 25 Mar 2026 05:13:13 +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.9745.019; Wed, 25 Mar 2026 05:13:06 +0000 From: "Pradhan, Sanman" To: "linux-hwmon@vger.kernel.org" CC: "linux@roeck-us.net" , "Michael.Hennerich@analog.com" , "linux-kernel@vger.kernel.org" , Sanman Pradhan Subject: [PATCH v2] hwmon: (adm1177) fix sysfs ABI violation and current unit conversion Thread-Topic: [PATCH v2] hwmon: (adm1177) fix sysfs ABI violation and current unit conversion Thread-Index: AQHcvBYQB4hNk5+unU6fyT0Rgf1FYw== Date: Wed, 25 Mar 2026 05:13:06 +0000 Message-ID: <20260325051246.28262-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_|DM4PR84MB1398:EE_ x-ms-office365-filtering-correlation-id: 55293a2d-84c9-4db7-d51b-08de8a2d32ed 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|366016|1800799024|376014|56012099003|18002099003|38070700021; x-microsoft-antispam-message-info: DR4b6otj+rYQSEiZlonP5ERytUU8IKR3abxSZJ7fot52a35tWUuB27yKmUKBupdETdHg4fWWTKdKov0A/fXTdWjnFdRBUaMQ7Y/plSE967H46V130VPYTAFkBjXlfvbaHFndNE+mnPOWtvsmJVPHYP+VYETF6qp5+Nhz2ytajCQfN/PS3ySjoG99NgBVt8n5OkxwwT7gmOP1zAHtqu8NHVeNw0z+4hxgmTWfwM6PiRpw0tQsEcUj1SVcNHg5NrRObm6BhNJ1zZglgUpbjsoJfWwik0jcNq2vj5MJtfsjNYGX2+M0z7/W2/Gevjt2i1bf3PCUGDS6RsVEgjO3EcQV8AhzuShJ1f6j2gtFaiChgiDv2MEXH1Xo1mI4sUo7x8spcUIbsPSl23KwVFtQv3Eq1JdbZnTVP0EM/EeTchyrZXm5GZp9sGoy+Xcqtm/ScsnGxTL9NhEV5Rha/v1UP5NX6jlXkNoZ9Bdbw2HnxnwU+AKHIyUwzuxxq8eqBMPWM7DXyOdqMUTtBVQJefHg/NEBka0KgEWyMG+8iNoJKUhxWeoVTy1ogdpYNCt1FFDzN382tVFXd1gWvEkwOLO2+2v/47/yg4G8IgXma30Ts/2JeNr+l8YHgsKaiNXQKT7iMBMQolSSxH61DFvWw5KYTGu+GPiQ0nM7FTVMCZVYjAwfjjzKtuysboCRK1yg4qbH8jqBcH2SHpUXq0n05Z++ofroh2AykIluhOb8MJK+wt9rjDYKR7P63x4BbvlWa47Du4GFsL8248RIdKir8Ze/JJ+Ld9nm8dQgZRcrXg7UU5Qk3Ig= 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)(366016)(1800799024)(376014)(56012099003)(18002099003)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?SNyU5UVviXX33c57ANNsZOeMDX6g+HnAcDcV5bjnmQ34DCAdnHvDv+J/AP?= =?iso-8859-1?Q?nqAkDggU4GGCp8Z8n3WznB0pa00S0CjnuF3ASDlTJ25nP1Ew26YBJ6Lopr?= =?iso-8859-1?Q?jSD9VqJeQcnjlbUZkBByiuxKeW1RGdtPCLZ9u4sa3SyijMbTO9HIRLwTVe?= =?iso-8859-1?Q?lJ+gYaqXgYXBTwzQ4a8VQ61NEcc/DaMVxpN0ZYul32A5wwiuX5GgcwGNA8?= =?iso-8859-1?Q?DuSV85PVKSgcCsJrdm61ZCQTxYCWQ6TCBS5KukE/xL4tB1mK/kdzViwit4?= =?iso-8859-1?Q?i/Qwi/TZyD0TikjaWksbESMN1GPLA8hh2DtWuEXAtNBXSHa1YDCTzhgEv8?= =?iso-8859-1?Q?86Zy9eaBIIqeYSqTGxH9E9RsfcdW6t5BR5D8DB6MiPohr4OWt6CtDjKu4N?= =?iso-8859-1?Q?MhozcskZRwOP+MJ9VZHW9jWIs5qcDH+S84TxryJL2mc78Peo6OKCkz/sEf?= =?iso-8859-1?Q?zje7kI2LdeDaZjZGz5/nLGiNV1bfjM9hHU8jQ1X5z+qiaolmgPB/hLeSOX?= =?iso-8859-1?Q?tj2EiLH6+++XY+DiRYOlQrFMYH/Ik7CA/ukHCMxqtlIXFRnAb66Ct4qAyH?= =?iso-8859-1?Q?T7ZJwipANSGtAoWAjDknh3fLq9oRKdjq7LYFV2np0pFK3Z6dgC90ZgfMV1?= =?iso-8859-1?Q?68dR5bDd167cqrF+B6OWVwNUiwrkWnlTx3Z2neDb1wnAdPNAh9l+ard0GJ?= =?iso-8859-1?Q?+c4fUXTd9+H2tnLBpCLvg7Fm33SzIyUca+Ua/KRH3sNNOKdauWEnVbOf6b?= =?iso-8859-1?Q?MRwXVja0VCrpnXpvEhwENPHHjfonM+nTwpFvXvbEj7R3vESXym5uDVQ3Sw?= =?iso-8859-1?Q?YNOLHiWErRzxYWK8mTbuoYBGzwYAl/apKyK/w/WAel0Rc4YwxAeYOpRldk?= =?iso-8859-1?Q?a7ZL2VT21bVlXxzKeUc123WrBqiiqYe2ViDJKyglXDkZlBwMKBQDx6u0BJ?= =?iso-8859-1?Q?S2uurW7vAu8iZ6RDxEWrKtFh9RUBlZbVIFFO18GjQps6qpzZa5MqqT62s+?= =?iso-8859-1?Q?HD2J8D5oQ5D1Yu5Oo05KA4SGDbQ9MFq6duvhfkv5xrzeSwkJNsAluF0mC/?= =?iso-8859-1?Q?4BTmiW9f+G/cO/c4MAJvCPEgLNZC8WINB18r5h+JzSeq+zSeEXYGFFDiuV?= =?iso-8859-1?Q?KAD1lF2cNMKxa9c1i/TEWQosMrqgp+Qal+zGEcsLvkW6QaqibtOkrXHYri?= =?iso-8859-1?Q?m1CSK+iOb0gZwzxOT6vh1zxtXLT4PKHswJr9gfKYpGlpe/auhI9fb+tECt?= =?iso-8859-1?Q?5i3ZFtv/B0BtoYSugYikA7SNIUHxE6bVBDwr7Bn5Ow+NcjFM5JS2k6x4DZ?= =?iso-8859-1?Q?Vaade17JYb8vAmzT7uCKO4jFYxHb1S7s5/DIBoXTzyE/zNF98qGhbN+EP+?= =?iso-8859-1?Q?d6zktStIICVtrWQjL+lTTe7XGZogR+DU2iYGxuNxze4XQYQCHeMaQl13i3?= =?iso-8859-1?Q?IEV1RlUKO2kjlZURmRtVlrV52BsOT7jbMVmZLQ7455mBv/h7JN+4vOTxUL?= =?iso-8859-1?Q?4bX2tETG0LM/sY00ry25KDREVmCKTXQFBkUbZHTprep57P/8og7ORkML+k?= =?iso-8859-1?Q?T53I2bGaPUN9i172/w+tqOHk3cjjAQLFczN5uc94pxZXROYuQ2I6Q2djox?= =?iso-8859-1?Q?QPY2UEI2P1t9LA1Er5DQcu06wR3paWYFIhFT2EtwhUGkAaDh9swUWNrx/9?= =?iso-8859-1?Q?nb4CCkcOcC8VpOgh3hDO8bjVFLKzlGxYjcYJge3jHH5w4BFe9mbyyUaXRG?= =?iso-8859-1?Q?kmn47pw4RBA2/gl50RTbCakabPhlrsLPRh0tImzRS3Nxqs8glycBm3yluy?= =?iso-8859-1?Q?hXM14tEaZw=3D=3D?= 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: f91MNIf+hW/xgBgFnVZA/S91yER3x5xv4fOZwjIse+XUxWaFmseBE0usNblsoPfFHyYXNAfWdaDC+ssCH5WYx3IehD4R5sKIl3fS6EsqbL1XPZQyXnsZgt36wvlYxpRRHJzSg0KwhmqPAKtTKxA8nacTDOCoz5LVT3qhBTUtCj6oOT9DS1HPJ5iqaVGrm67k9VKJp7v3WE2ScCTorFblNCTdecGUoqFwke/U6qM7Zr2eBGfdwxwF+YKlwDdHv81WdFaNtASJAHJEJ4yZyliVwgnseOSLKvQ0puJN477TZERylwpdb7MoVRySiAko0N8F+bL76PSBLolD2o3CEPLz9w== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 55293a2d-84c9-4db7-d51b-08de8a2d32ed X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Mar 2026 05:13:06.5290 (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: LO/SnDlgnPhBP/5SPBncMWCijOSEm4g4qTrUiv8suHacsjehul1Ja4p3ceSkGiuhLxq1J7G4UxHOmxRolT2EqQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR84MB1398 X-OriginatorOrg: hpe.com X-Proofpoint-ORIG-GUID: iUFjp-GatcqIe3pRA8s4F52XJPblu56Z X-Proofpoint-GUID: iUFjp-GatcqIe3pRA8s4F52XJPblu56Z X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzI1MDAzMiBTYWx0ZWRfXwRM8fwsqxQXd T6RCz38QmIh2awq8zdYBVzEHXeBcJulP15mUsqoMtXwzRPgzo835GtYg1WKhymXH6Y54K5+Kdwe VEuBZjlsn8vGi+7plyKWwSMO7h9tPXLDDlIyfeIPuOs1LrqnDC8CIJUEc0mi1Q3Rf4mIPo4YyIT 9ya1B2EcOzG9umLhObbdzTgN3lB2gvWj1Hr4MIRiUHZTWo+NNoBUGjaGr1pChFMSq/Y18sg4kKy taL6Wqf2TKjKfWC36MxzAzr4vxqpfkJL6RAuKHeuK9HLXVahT2+uy83MCBzO69xCZgLEOZ//0nu oHzIPMu8NJwDnmkhYdb33nbR+bkshQlzvtD8t7EUr1qH8dxK97pbsYgBWI3n9d4CGwvPXebg0/j Gj1dgSNAPIYkJB3aPgvYLJuqVbRNJY45oGbsK0/59f8AhVUgGNC8OSd+XmXtA9sxNQUyTxXHBw7 bw0FsJYFX7J9PWZ1a1A== X-Authority-Analysis: v=2.4 cv=EvXfbCcA c=1 sm=1 tr=0 ts=69c36ef1 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=3haJ9R1Aw3gUfsUHDaCR:22 a=OUXY8nFuAAAA:8 a=w74Ln4rD2WEPIE-XTYcA: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-25_02,2026-03-24_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 impostorscore=0 suspectscore=0 priorityscore=1501 malwarescore=0 spamscore=0 lowpriorityscore=0 clxscore=1015 adultscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603250032 Content-Type: text/plain; charset="utf-8" From: Sanman Pradhan The adm1177 driver exposes the current alert threshold through hwmon_curr_max_alarm. This violates the hwmon sysfs ABI, where *_alarm attributes are read-only status flags and writable thresholds must use currN_max. The driver also stores the threshold internally in microamps, while currN_max is defined in milliamps. Convert the threshold accordingly on both the read and write paths. Widen the cached threshold and related calculations to 64 bits so that small shunt resistor values do not cause truncation or overflow. Also use 64-bit arithmetic for the mA/uA conversions, clamp writes to the range the hardware can represent, and propagate failures from adm1177_write_alert_thr() instead of silently ignoring them. Update the hwmon documentation to reflect the attribute rename and the correct units returned by the driver. Fixes: 09b08ac9e8d5 ("hwmon: (adm1177) Add ADM1177 Hot Swap Controller and = Digital Power Monitor driver") Signed-off-by: Sanman Pradhan Acked-by: Nuno S=C3=A1 --- v2: - Widen alert_threshold_ua to u64 throughout; use div_u64() and (u64) casts to prevent overflow on read, write, and probe paths. - Update Documentation/hwmon/adm1177.rst for the attribute rename and correct unit descriptions. v1: - Rename hwmon_curr_max_alarm to hwmon_curr_max; add uA-to-mA and mA-to-uA conversions with clamp_val on write path. - Propagate adm1177_write_alert_thr() return value on sysfs write; add linux/math64.h and linux/minmax.h includes. --- Documentation/hwmon/adm1177.rst | 8 ++--- drivers/hwmon/adm1177.c | 54 +++++++++++++++++++-------------- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/Documentation/hwmon/adm1177.rst b/Documentation/hwmon/adm1177.= rst index 1c85a2af92bf7..375f6d6e03a7d 100644 --- a/Documentation/hwmon/adm1177.rst +++ b/Documentation/hwmon/adm1177.rst @@ -27,10 +27,10 @@ for details. Sysfs entries ------------- =20 -The following attributes are supported. Current maxim attribute +The following attributes are supported. Current maximum attribute is read-write, all other attributes are read-only. =20 -in0_input Measured voltage in microvolts. +in0_input Measured voltage in millivolts. =20 -curr1_input Measured current in microamperes. -curr1_max_alarm Overcurrent alarm in microamperes. +curr1_input Measured current in milliamperes. +curr1_max Overcurrent shutdown threshold in milliamperes. diff --git a/drivers/hwmon/adm1177.c b/drivers/hwmon/adm1177.c index 8b2c965480e3f..7888afe8dafd6 100644 --- a/drivers/hwmon/adm1177.c +++ b/drivers/hwmon/adm1177.c @@ -10,6 +10,8 @@ #include #include #include +#include +#include #include #include =20 @@ -33,7 +35,7 @@ struct adm1177_state { struct i2c_client *client; u32 r_sense_uohm; - u32 alert_threshold_ua; + u64 alert_threshold_ua; bool vrange_high; }; =20 @@ -48,7 +50,7 @@ static int adm1177_write_cmd(struct adm1177_state *st, u8= cmd) } =20 static int adm1177_write_alert_thr(struct adm1177_state *st, - u32 alert_threshold_ua) + u64 alert_threshold_ua) { u64 val; int ret; @@ -91,8 +93,8 @@ static int adm1177_read(struct device *dev, enum hwmon_se= nsor_types type, *val =3D div_u64((105840000ull * dummy), 4096 * st->r_sense_uohm); return 0; - case hwmon_curr_max_alarm: - *val =3D st->alert_threshold_ua; + case hwmon_curr_max: + *val =3D div_u64(st->alert_threshold_ua, 1000); return 0; default: return -EOPNOTSUPP; @@ -126,9 +128,10 @@ static int adm1177_write(struct device *dev, enum hwmo= n_sensor_types type, switch (type) { case hwmon_curr: switch (attr) { - case hwmon_curr_max_alarm: - adm1177_write_alert_thr(st, val); - return 0; + case hwmon_curr_max: + val =3D clamp_val(val, 0, + div_u64(105840000ULL, st->r_sense_uohm)); + return adm1177_write_alert_thr(st, (u64)val * 1000); default: return -EOPNOTSUPP; } @@ -156,7 +159,7 @@ static umode_t adm1177_is_visible(const void *data, if (st->r_sense_uohm) return 0444; return 0; - case hwmon_curr_max_alarm: + case hwmon_curr_max: if (st->r_sense_uohm) return 0644; return 0; @@ -170,7 +173,7 @@ static umode_t adm1177_is_visible(const void *data, =20 static const struct hwmon_channel_info * const adm1177_info[] =3D { HWMON_CHANNEL_INFO(curr, - HWMON_C_INPUT | HWMON_C_MAX_ALARM), + HWMON_C_INPUT | HWMON_C_MAX), HWMON_CHANNEL_INFO(in, HWMON_I_INPUT), NULL @@ -192,7 +195,8 @@ static int adm1177_probe(struct i2c_client *client) struct device *dev =3D &client->dev; struct device *hwmon_dev; struct adm1177_state *st; - u32 alert_threshold_ua; + u64 alert_threshold_ua; + u32 prop; int ret; =20 st =3D devm_kzalloc(dev, sizeof(*st), GFP_KERNEL); @@ -208,22 +212,26 @@ static int adm1177_probe(struct i2c_client *client) if (device_property_read_u32(dev, "shunt-resistor-micro-ohms", &st->r_sense_uohm)) st->r_sense_uohm =3D 0; - if (device_property_read_u32(dev, "adi,shutdown-threshold-microamp", - &alert_threshold_ua)) { - if (st->r_sense_uohm) - /* - * set maximum default value from datasheet based on - * shunt-resistor - */ - alert_threshold_ua =3D div_u64(105840000000, - st->r_sense_uohm); - else - alert_threshold_ua =3D 0; + if (!device_property_read_u32(dev, "adi,shutdown-threshold-microamp", + &prop)) { + alert_threshold_ua =3D prop; + } else if (st->r_sense_uohm) { + /* + * set maximum default value from datasheet based on + * shunt-resistor + */ + alert_threshold_ua =3D div_u64(105840000000ULL, + st->r_sense_uohm); + } else { + alert_threshold_ua =3D 0; } st->vrange_high =3D device_property_read_bool(dev, "adi,vrange-high-enable"); - if (alert_threshold_ua && st->r_sense_uohm) - adm1177_write_alert_thr(st, alert_threshold_ua); + if (alert_threshold_ua && st->r_sense_uohm) { + ret =3D adm1177_write_alert_thr(st, alert_threshold_ua); + if (ret) + return ret; + } =20 ret =3D adm1177_write_cmd(st, ADM1177_CMD_V_CONT | ADM1177_CMD_I_CONT | --=20 2.34.1