From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (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 3CA1A3F5BF5 for ; Mon, 10 Aug 2026 16:44:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786380295; cv=none; b=aNfytIdcVpoxMAsyHoBYojBBxSXLf6+lrJsd50ykE3xdoHvtgUyMsXlBn2LlgwbyoZnHHOPsQgmq8XC7uv4iQwyxb2Zwih+O0h/cRbcubugNcm9k4ynO/KR4BBCoUdCdHR0qp52wYXc1XN5hXwPxq3a4Rth8ND7pUqnXssA1sao= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786380295; c=relaxed/simple; bh=1rm/dhdmEPnR1DxvivQLnoBWuBxLJrgf0lBNxX+Xen8=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=Gt47BZzXrnVr9qwLTE/UIolGAL/QBr/b7T2jWaX2O878oxC+eSYzIROZ5iOUGIkqEEa7G1hymQzCZwnmuYUiJRrFpOtPm223T1TuSKr1RdTLuvY1f1hTeQWciZfDbAWNVh5B7gkjf553e882MBlTZdtbNm6IvuvPp12umWUrWdA= 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=sq9UBZ3I; arc=none smtp.client-ip=209.85.214.175 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="sq9UBZ3I" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-2caea3f742bso34568145ad.0 for ; Mon, 10 Aug 2026 09:44:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786380293; x=1786985093; 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:content-type; bh=0O/c+uKFNEkPwJGpeY8nCMiIIfom2XBBnkKY3AbM95I=; b=sq9UBZ3IjraWharJ+ubY66FCihjHe0+6XE1hV1qqnqLTusyO4r2WO9sv1DomvcI5pM xoB+Yjqr7svvNcxj2qKEy5Vr0zXolg5VRs2QbjTXoSlTH4kC09Te0PI5A1hVk5Shv9AV V5B9LhcWPFvD/T+mTEWq/e9kfKNCtxxs2Tlj5UilOoxEY9nBAgE5J15+nGaxUKuQWyTD H7PoNPgL9qNYNanV0U6WmedwKLSSyS4HAYDS9Kd1F1asqv/j5+j0m0ogKlnyKO7u9HIh hTukc8dIP53mMGD3Unxg3fWvQ/1kzPaCdmHfVDJOAV9H4YIDkRghSN1BF7cE/3O1Yt/h iLZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786380293; x=1786985093; 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:content-type; bh=0O/c+uKFNEkPwJGpeY8nCMiIIfom2XBBnkKY3AbM95I=; b=gGdZY3We2W6LsR5pmnq7tpfkY66rcVL8V7UoFd4E1rJkd1hqJY5i0D+/69qidTK5vk hf2Dmd0Msy1Z+cVuJo6iT/61lc7p01zN9IHk/TdQdfr/Mh3c9HtKCFLaDB6GxdUToWev /p66mMMyMumiHxVdz3S575zxGohDEkxRHSF8txOd4h7YbF4McdXOcFIUv/5HkGt0TtuD Wmmn4TUJrwfHLOpYt6LtqSsXEiV0vxSRT4Dg1dVgxl57/ZPX2uzrYt8/rPrkHEEMQ0nz NpLSFywj/YZSmVe9aI/OsYZ6MGmRws7pYaHzXZOJeUZpJUMVpNxyNOynaaE6laecXWJe FHPw== X-Forwarded-Encrypted: i=1; AHgh+RpoW8/wRTAQqSbaJX3JnEfou9d6sCqzUarVvQADUJjS+ZUSMcEAXJ+7F5SxICZJnCA+umEqaJxRobj+Bd4=@vger.kernel.org X-Gm-Message-State: AOJu0YxZ1IRxwfC9slPXjoYASyQa/aRgmwKboPEEol6UY49g1Y/fDtXS yWu+oWqBVJHmdqyH4S02hVDBHTRRduiw9fWusLTKuQRkz4nWe1PdlHJ+ X-Gm-Gg: AR+sD10DYEzOfzrpiyKiCKQmKEj+3VdqKbcesC8CbX1rYu3yVUrcEPdmqRtJDbUHnya gnQD2sgMF+uDOR+3VIVhjevNvIZUJ/ODP7RsOgkbn7dQTHk6LnyXi8fedjBkAPy+pVqThjsEzEy KXoWrSaQwEfcmVSyRxzkULEZeAGeJKoBIV3NIGubb84LEOSf6aWYyrp32+Zmbl1eeb0CQWddth3 QF4XbkPX3CVDqxcCO/3sNp32wonIRHeS7bTGtNuSHOR2PaqLEj0aM2W7xCzRwPwaS+Lr3Ve6aj3 znD/ILD6O0K1goZIRFSM+MFzMFlb0ggzC47doAna9dL2aQYzH2SoWf1GVc1I7+akLmp9gLQsf2k RL2R4baNc1xDtg6NozOLEK1mzjqtAsx1tlCo9B5gHvI1pTg5GrtnxcHIiPhq+bG/vDm5cIMoxwF cLMkTVuznCCw2NHW2nNJhHSBkBuJqdjCDHu2q2xSvSAntHOsqkz1l+FnZ6YtlLtH1xYJ9GbIxIK D2T3Lg= X-Received: by 2002:a05:6a21:7482:b0:3cb:b741:2924 with SMTP id adf61e73a8af0-3cc1a3e120cmr4276768637.29.1786380293409; Mon, 10 Aug 2026 09:44:53 -0700 (PDT) Received: from SGN-LDSENG.tasernet.com ([2405:4800:5cc3:11a:1ac0:4dff:fe8b:4a69]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-14101b95b20sm36702240c88.15.2026.08.10.09.44.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Aug 2026 09:44:53 -0700 (PDT) From: Cong Nguyen To: Jonathan Cameron Cc: Andy Shevchenko , David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] iio: adc: max1363: sign-extend bipolar differential channel reads Date: Mon, 10 Aug 2026 23:44:46 +0700 Message-Id: <20260810164446.2555239-1-congnt264@gmail.com> X-Mailer: git-send-email 2.25.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit MAX1363 differential channels are bipolar (scan_type.sign = 's'), but max1363_read_single_chan() masks the raw value to the ADC resolution without sign-extending it. Negative differential readings are therefore reported to userspace as large positive values (e.g. -1 as 4095 on a 12-bit part). Sign-extend the masked value from the resolution bit for differential channels. Single-ended channels are unipolar and are left unchanged. Fixes: d1325cf45077 ("Staging: IIO: max1363 ADC driver") Cc: stable@vger.kernel.org Assisted-by: Claude:claude-opus-4 Signed-off-by: Cong Nguyen --- Changes in v2: - Condense the commit message (Andy Shevchenko). - Fix the Fixes: tag to the original driver commit d1325cf45077 rather than the staging->iio move; the bug has been present since the driver was added in staging (Andy Shevchenko). drivers/iio/adc/max1363.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/iio/adc/max1363.c b/drivers/iio/adc/max1363.c index 4d0b79cfeb27..497f5daadcea 100644 --- a/drivers/iio/adc/max1363.c +++ b/drivers/iio/adc/max1363.c @@ -405,6 +405,14 @@ static int max1363_read_single_chan(struct iio_dev *indio_dev, data = rxbuf[0]; } + + /* + * Differential channels are bipolar and the device returns the sample + * in two's complement, so sign-extend it from the resolution bit. + */ + if (chan->differential) + data = sign_extend32(data, st->chip_info->bits - 1); + *val = data; return 0; -- 2.25.1