From nobody Mon Jun 8 19:35:24 2026 Received: from mail-qv1-f54.google.com (mail-qv1-f54.google.com [209.85.219.54]) (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 A0F0638B7BD for ; Tue, 26 May 2026 22:55:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779836134; cv=none; b=m71jYW0JsCHxi26lwESLG1bxrm6at9NRDzQdMECd5/mLGdc6ZIONa2kqybQQdaLLcsESGLxQefzB2BkoR4PlpMVJo9/+yrpVtamQHB+XHWokrOzz/h2rMYVYPtbkA96F4ceq5TTRDFkNyof6htqlv2sv4rVYaQjEXBcQcFgHCsU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779836134; c=relaxed/simple; bh=+4BfOIrHwNp5Zh98vFYK7tpf8R9ocPQgn2KbiPpFooI=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=QftjQYUjLrBxG4m7gqtsIiivJLyp82MbIV1vK3jTPMX9Q3aWX8fQsmgs8nedtiARh8zvsx4VjbFzqYn/boZVz0iYp6LhDLTVHG6wPPs8HtlWOSuQqUTzmgzHoH/OOOhIE4U1JDbEAZPUCHKuG7wGDGTcnUTzAmDkAPoRXBWifgw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=E4+Zl1V8; arc=none smtp.client-ip=209.85.219.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="E4+Zl1V8" Received: by mail-qv1-f54.google.com with SMTP id 6a1803df08f44-8b7f937ef44so72146356d6.0 for ; Tue, 26 May 2026 15:55:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779836130; x=1780440930; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=p4yVkmTcVUUu9NqnU6zdwk2UhPPdPatpYNyM+RcDiCk=; b=E4+Zl1V8SYGDm++aFLJye6ZjL9xob+MjcspiZdteaRFfrv7Uxd+P/rNiUG2ytzGhGE 7nVOQVT6z1MiJS7iI49b+9Lb402n4jZx2RYgHAGJX1jgMMvSU8dZoNUGgnSAgUxXwnqe L8MG1bdZ0vfS08k8ZXgNHb2elVl2BZLDYzamJHHHKzLMB/t5oKiDa3aFlNekhhtjnaWa gVsGyrICgLW9rR/nQ4t11vFn7aMRP/v6mm2+AaJ5r31nLMuq1OVe2bN4dm6etLbvdniv IE9BHDwsqehWvJrlyjk3nzRBMSt+Y4g1/r9GFfFtiO/ry2XI21tBuK1IjhoLByJHTJdo /QMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779836130; x=1780440930; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=p4yVkmTcVUUu9NqnU6zdwk2UhPPdPatpYNyM+RcDiCk=; b=UbWX+BsQg4caxZW0pSYRAeI42J1j15eRRy0f0uXFpDhXn98z/0DyPsASce43CLANdr 4q0pQX9YI8lNPSjYe7ypDpSt93cF0LfWUr6deeZXkG2FWw6yMFO2ZBXPuqFzve5JfnF9 XjepgNW34BRDhFMgu8dpsmPpQa65WwbVtPHCOiG8+CClIvLlXf27nJsNmPWJwiblcHdO ddRJk8pIDM7YoVI/XMebzRHlKGTdaq0Gr4TLFLfGn1GKvAC/fH9OrGlRpG/zLy83VzDB dnyvCeKMNGNQl/I8glebSWtmDd0THDplH+/bSEFSGjqB2JaCe+Gki0AOlJDsjlI66g1M GoRg== X-Forwarded-Encrypted: i=1; AFNElJ/C+AWhaCdx/GXCFjAQDDQLp8v6HEWXAM5Id84NhlYzUgQmTLI+54J9ApM0UNpv5eozTtFQR8+tjDYrVWA=@vger.kernel.org X-Gm-Message-State: AOJu0YzYm4vCNY7RW9vtOEej9UceAaugps7vWSOBW67t8HQiSrok+4b4 +ymGYlwj98rLUZeQlFWxvByMioOcwDmOp36O4Ksdli+fnzkcdhLT103x X-Gm-Gg: Acq92OFg4l++wDEFRZw/nhabRwsAoyZaYY5BytF2zX8A0D32640QmW+TO+7L1lD+ARZ RnP9Okd6j1Ji39wjO6S/CRN4p+OagoGV+EUyC+xBwDNHGouml5UBhK6XaJlvcSniCe2u5Ben9nB NMp5ZUd17/yEz4O2pjU3IlQGzLGwL4qqjr2c+T7XWUJ/AJm6VIofGenKF7+SHEiQnnX8YxXYITN aOI+aDR93Bx19rIoDFXRANnnln57oEy0Y0YmVbsQxRBjvhZ2k8s0zqc0zduoMSCL/ro/bASMdHl CpT+jzyjyvvl/pHMZKwYt0PRu6++ujzsWGHIUcGsREx6tXT7WpjmOqFqJqa3l5tjSV9aOl6VoCk yOosLBT7nsoQyzCcQnTiGV1pxG3tzC4opWBBodYd8WdQpU6MXlJPgzyEeDN1zqc8ez3y94KTPAK wIxoblH4fruVLfWkhMXDd3FBo41EVrMagDo5lb3v9RR12F7vPhkg2UkRuguA== X-Received: by 2002:a05:6214:5a03:b0:8a6:1216:fb78 with SMTP id 6a1803df08f44-8cc7b5eaecamr326150336d6.46.1779836130492; Tue, 26 May 2026 15:55:30 -0700 (PDT) Received: from linuxescape.lan (23-88-128-2.fttp.usinternet.com. [23.88.128.2]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-8cc81306d70sm151715996d6.35.2026.05.26.15.55.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 May 2026 15:55:29 -0700 (PDT) From: Maxwell Doose To: jic23@kernel.org Cc: sashiko , David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , Andy Shevchenko , Tomasz Duszynski , linux-iio@vger.kernel.org (open list:IIO SUBSYSTEM AND DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v3] iio: chemical: scd30: Cleanup initializations and fix sign-extension bug Date: Tue, 26 May 2026 17:55:24 -0500 Message-ID: <20260526225524.119001-2-m32285159@gmail.com> X-Mailer: git-send-email 2.54.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Include linux/bitfield.h for FIELD_GET(). Create new macros for bit manipulation in combination with manual bit manipulation being replaced with FIELD_GET(). The current variable declaration and initializations are barely readable and use comma separations across multiple lines. Refactor the initializations so that mantissa and exp have separate declarations and sign gets initialized later. In addition (and due to the nature of the cleanup), fix a sign-extension bug where, float32 would get bitwise anded with ~BIT(31) (which is 0xFFFFFFFF7FFFFFFF) which corrupted the exponent. Fixes: 64b3d8b1b0f5c ("iio: chemical: scd30: add core driver") Reported-by: sashiko Closes: https://sashiko.dev/#/patchset/20260524020309.18618-1-m32285159%40g= mail.com Signed-off-by: Maxwell Doose --- v2: - Added new floating point macro constants per Jonathan's suggestion. - Included linux/bitfield.h to use FIELD_GET() since Jonathan also recommended its use. v3: - Added fixes, reported-by, and closes tags per Jonathan's suggestion. - Added explaination for fix per Jonathan's suggestion. - Removed unneeded comment. - Changed commit subject. drivers/iio/chemical/scd30_core.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/iio/chemical/scd30_core.c b/drivers/iio/chemical/scd30= _core.c index a665fcb78806..79124f4d7b9b 100644 --- a/drivers/iio/chemical/scd30_core.c +++ b/drivers/iio/chemical/scd30_core.c @@ -4,6 +4,8 @@ * * Copyright (c) 2020 Tomasz Duszynski */ + +#include #include #include #include @@ -43,6 +45,11 @@ #define SCD30_TEMP_OFFSET_MAX 655360 #define SCD30_EXTRA_TIMEOUT_PER_S 250 =20 +/* Floating point arithmetic macros */ +#define SCD30_FLOAT_MANTISSA_MSK GENMASK(22, 0) +#define SCD30_FLOAT_EXP_MSK GENMASK(30, 23) +#define SCD30_FLOAT_SIGN_MSK BIT(31) + enum { SCD30_CONC, SCD30_TEMP, @@ -89,10 +96,14 @@ static int scd30_reset(struct scd30_state *state) /* simplified float to fixed point conversion with a scaling factor of 0.0= 1 */ static int scd30_float_to_fp(int float32) { - int fraction, shift, - mantissa =3D float32 & GENMASK(22, 0), - sign =3D (float32 & BIT(31)) ? -1 : 1, - exp =3D (float32 & ~BIT(31)) >> 23; + int fraction, shift, sign; + int mantissa =3D FIELD_GET(SCD30_FLOAT_MANTISSA_MSK, float32); + int exp =3D FIELD_GET(SCD30_FLOAT_EXP_MSK, float32); + + if (float32 & SCD30_FLOAT_SIGN_MSK) + sign =3D -1; + else + sign =3D 1; =20 /* special case 0 */ if (!exp && !mantissa) --=20 2.54.0