From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (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 0DDDA331EC0 for ; Mon, 10 Aug 2026 04:28:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786336130; cv=none; b=jb+/0+BsSjU0X4FVQxFt7jmM1SatvM0kR1ttq5E1PneldnkY1Fm3FI2Xt0IbTE43BjlXP+OgNumPp5f8kMvh0iwIImhAlrv60QLHrTDkL9MvdRwNNBgsabHeRvcrWl4N0f6khqHs6MAe5H8oTPIFZqZITTWLUlQ0W0WpBn/3HDA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786336130; c=relaxed/simple; bh=wkVugtm0RK+PqsY5OjF4fBlE5x70gVAyAJs2seIi9es=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=EXER51IgxM3OHl6bztS499Eh/Y+yNzHMlXuWCAf496u0pI0WZXBqsmj2ffmRGC1qa5i0Ck83LrNyaKEeBrAeJ9OcED+GiwaICf1nf0dpOiVL6XFuEbeCFOTKtokG/RQjiO5t+/mTFmmxIPqyI0uLt8HA5OCdvH+V6pdcnc9PGR4= 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=akVIE+0Q; arc=none smtp.client-ip=209.85.214.170 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="akVIE+0Q" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2cf452def93so30235115ad.1 for ; Sun, 09 Aug 2026 21:28:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786336127; x=1786940927; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=pX6MMBhGhY7ZKweNH7lUk+HVieNOWtynN9b6a3M3yBg=; b=akVIE+0Qi5UEm8UKi2qA3qGTOxBfhlYstQyXYTrO35vZ3UfXP1V9uSOe/rNZb85KpQ vpaO0XaoEb3jdZ99eX8Sh7g6c9CkUE+e6Wen21C9AVVJNUr0vvPnS9T/lFf6Zkrg3+nm 1xz+kAOJv9c/9th0HShtVyz0xWX29XmTL6/mJxr3t5LUTfqkFC2PXXhKOoVwLFKDkMP2 vtmIkAIOdCf/G+lTh8OfjH1CUn9ZrSNT2tnAiuvPsCOoy/2vOPM2enGhQ6tYKWYFJOgn QuN3GW8/6JN3wU/DCO845e30S6rBV4ukxggAJNbmDps504wZZPKqI5EibwREmrlwmoNc oJfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786336127; x=1786940927; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=pX6MMBhGhY7ZKweNH7lUk+HVieNOWtynN9b6a3M3yBg=; b=djCLDbX7Iic+BcSi3mXR8O2//bx728qoyYqLaZgTvSpTlAiwhwa0C1AIjBRaOVRlzW 5HnH1O/C+zemE0l4Sru5aq1Z5rZB1ouAG5tE+o3DbtVAt/QLBRLQc7huE1GDaowbgOZY sViOPzKfs/IBPSBqgiYirsX6ll+YOnbXh79FpUvgLyN6x3i0OqWqTGBtKLaNDoYlWvde 8f2qJtijx/B9NgKQe9YttVlBIEziK/SwCjnI3dviKVGeoNyU34nGSsSdBfjW9uFnzqct Ovm8WLWde1M30//eBU48zk38O3rXnlkH7BfKfuAaWFEHwbml82lNXBC1LXEHzApl79Ho n+cw== X-Gm-Message-State: AOJu0YxGWIMci4IVJrohQb5RSGimyZyN80AAL/aQOX+Ox97/LWP8c7Tc ol9KceJHA+18zS/5mCAICwD08w7xNjbAl5tcrj/rnR8bQfCWOXIypVyB X-Gm-Gg: AR+sD10JP9aD3zIFIOwj2vf4IuJwPHBqZjcUTCLk+woRoNA/nLpjg4CRvwEyR+6DDyZ tN1TMRMAz6WaiToRUAS6KQ8hNh/fo+o++iFbWZ2HrKVUkPi2Bub4DvR2OSXs+xMSV4zh0yQRUAq vWboaOXeQpiBYnRWFklP98M72H2nua8O2s3DBFwvMLsIBxn2HU33CycTBd+fexTTb/liMj+8XdA OA4DAP5eD7rQSA4OhIvKjAhOnpHjS++iEnmZz6n9O7kfx/Ua+IqA/fj//zY3vGiW63KHsQc7nfB xc853FyMPzfWbV8UbXQ8KwwghCqyVtM7+92TWa7+wPH6bolXH0I0sZqILgBd/QTEI+OWmpErstu kJf/qQ15BtPgUkzrkPeaPOXQJYc5e4+zkEVloisqsXxuVm/2Pz/HUW0+4eVQcXsO/qzYwZW6/OD ZcoyU9hbVHHkKOTpasX3aYRE/JhCoWqgAFfRPw4iud2/juRNqrxGBXZyW3KPmaMi4USa46982ep L/+AQ== X-Received: by 2002:a17:90b:1641:b0:380:ce69:2669 with SMTP id 98e67ed59e1d1-3928467fbfemr7425362a91.9.1786336127203; Sun, 09 Aug 2026 21:28:47 -0700 (PDT) Received: from SGN-LDSENG.tasernet.com ([2405:4800:5cc3:11a:1ac0:4dff:fe8b:4a69]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-315be8d6074sm40890689eec.12.2026.08.09.21.28.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Aug 2026 21:28:46 -0700 (PDT) From: Cong Nguyen To: Guenter Roeck , Vadim Pasternak , linux-hwmon@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Cong Nguyen , stable@vger.kernel.org Subject: [PATCH v2 2/2] hwmon: (max6621) fix negative temperature offset and crit readings Date: Mon, 10 Aug 2026 11:28:39 +0700 Message-Id: X-Mailer: git-send-email 2.25.1 In-Reply-To: <9d3a4f1895a47794bb359a2a32fb1ccd6a15812c.1786334038.git.congnt264@gmail.com> References: <9d3a4f1895a47794bb359a2a32fb1ccd6a15812c.1786334038.git.congnt264@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit max6621_read() reads the CONFIG2 offset and the critical alert threshold registers into a u32 and scales them without sign extension: /* offset */ *val = (regval >> MAX6621_REG_TEMP_SHIFT) * 1000L; /* crit */ *val = regval * 1000L; Both attributes are writable and their write paths clamp to a negative minimum and encode negative values, so a value written as negative is read back as a large positive number. For example, writing a -10 degrees C offset stores max6621_temp_mc2reg(-10000) = (-10 << 6) = 0xfd80; the read then computes 0xfd80 >> 6 = 1014 -> 1014000 instead of -10000. Cast the register value to s16 before scaling so the read preserves the sign the write path encodes. The temperature input path already uses an s8 intermediate and is left unchanged. Fixes: 92b64580f14b ("hwmon: (max6621) Add support for Maxim MAX6621 temperature sensor") Cc: stable@vger.kernel.org Assisted-by: Claude:claude-opus-4 Signed-off-by: Cong Nguyen --- drivers/hwmon/max6621.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/hwmon/max6621.c b/drivers/hwmon/max6621.c index ee5898fbe110..3690f2ffe5fc 100644 --- a/drivers/hwmon/max6621.c +++ b/drivers/hwmon/max6621.c @@ -239,7 +239,7 @@ max6621_read(struct device *dev, enum hwmon_sensor_types type, u32 attr, if (ret) return ret; - *val = (regval >> MAX6621_REG_TEMP_SHIFT) * + *val = ((s16)regval >> MAX6621_REG_TEMP_SHIFT) * 1000L; break; @@ -254,7 +254,7 @@ max6621_read(struct device *dev, enum hwmon_sensor_types type, u32 attr, if (ret) return ret; - *val = regval * 1000L; + *val = (s16)regval * 1000L; break; case hwmon_temp_crit_alarm: -- 2.25.1