From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (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 CB211345CAB for ; Mon, 10 Aug 2026 06:42:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786344163; cv=none; b=nO+wFhnX6MPmS3xYjT7QGuGTXyEK3tQ3FVY0sOm7zPNOPGvLxFGvvbwfwIOizvQ7QZBbrjPDyzsGkpIj7t9w70ZLfVlMDioa88Ed4iUXh7w24s/5GixBizdQ68PyPhOpA60Ij7eg/gJpESVc4X+THJBXQIs8PmFZf+GnKO/JQRk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786344163; c=relaxed/simple; bh=cdpz0h7C3OKumL0be6c2g+3rMM3vhRcq1Ia1fnXu0oA=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=hokEaZ04tE+NshOy9qhLugEMdLRZ8NE8hdYa86E3Av7c6K5LFB+19wzlR1f1BQyImlJis+NFx1FfyhqnYDFKosubXrsobDmjnAlnW4fI2ai27eapGITmsS++YFNiy65ZtalVT1YadY5aYuM5KOZDWeFIYrYPMvoWrGWCTrHstLA= 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=p3VZpTTB; arc=none smtp.client-ip=209.85.216.50 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="p3VZpTTB" Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-384930ca5e2so1572280a91.3 for ; Sun, 09 Aug 2026 23:42:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786344161; x=1786948961; 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=F8jEBE9QHGlloAt0vMeYtcsHxC6qpAYVWGP4wjQCzdc=; b=p3VZpTTBkovmiYJhGV08ShawlfpcJ/5iebSMCFC4QALbk0IgLJEbwffcb5930p62I9 92LD2jg9wG+KAvmMCfMrJgB4K8Nuwomz/RJzRfSQ9gysMc+iAfoolXOgzvWM8HbQrzko bHp2S4AWBDauewlr8wjkm22hYqNf5y0hQJ65q4nNHfbuqtxldt322C5es0hI4zEVRPCf 85kKZoFCSbzNmyHgJBKSTzstjWBczS5fIn8/WwaZBUBVGLYIlDpoMzU1GSG6M2gI92LK jzTrMdtSZCeLjFcNzpyiXC6VHF5yymcu4SxoLSqR9t5yriuaDnRjy/nSmRCQgyaXrZ6L VetQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786344161; x=1786948961; 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=F8jEBE9QHGlloAt0vMeYtcsHxC6qpAYVWGP4wjQCzdc=; b=NCoHpGd4H98Vo9CbMhxE5T3CXFolIYcMCCw0TJlDYQkANAM2rX+IfIkJ3wAzxlawii F4qCoN5Nnzmb4wqLtRKMRYRWgLYs+0SMZe4Okg47jvX6WFMIbC0hqZv055MXPPi4BqZq Pgx57sW0Xm2bR+EvCnIKNhM7A9+9zTd6QJ6AzAfbRosOZWYrbW2dLEhKhFK5I4WnGgf5 POtoNimrpAm86lIPVjAH07pGOcZNL96h2wszCBFlD0pjBGQKUii0FYJWAoDy5gRHZVfm ggr5Ch99y6q4Pl9yDKHY2FFXC1DFaXhFLYzAwXIQTVrLP0nJCUNsU0tjId3++ly9Ec13 z5uA== X-Forwarded-Encrypted: i=1; AHgh+RrP43NAES+7HPByIg06NOvK1/ShWF3njY7qDtmkAM8qcBQ45SSCAc6qgk8ct+3B1ZAoxPcXeD0wTjR0jec=@vger.kernel.org X-Gm-Message-State: AOJu0YyOM6UaoZ/AnzfgOBW404nPjq+U3JMgVmh/+CWA/srMLob+xdS9 uJ/hFsBkeYiuogguZJgpsjK7SekuPb7az+/6toAn5EYTEHcFKNXl/R4R X-Gm-Gg: AR+sD12aHMd90Gu5gMkOFTxWcipLN+uD94keCIv+FaOb3VAj0UhJx7CQSBfToMzsUdK A3dTYf1CWuciIUEbJnBz1kHGYMUbknbScDF/toDzBc08RxSeKTA4eO+WIP0W41L0IvrrZrGbv1m NhDAV9384D6mtdLS9ataJSyyI8He1oaBd2fjkeVfpc9T/4L7jNceGeqjA41J8GhqGVgbvFIO+Zd G4BnKunrvph8FnaAkvEueTDHwm0c2QSW3gpSCHLjYRp98aJ2/4PYJ/dv1Ppb7nMlYgWWumInXBQ VxP7sXnwZz1hl8j98hNgwTbkUEatDG3pXIRBZ5IylA28RiRDh6YMh9G0eBuwZZwu2P+yT2jLI2Z bDuez3aBhi10uEaLBh7KhfjehXbNC/rwiWETQlkN8ztEB0tlOX2nlE91tWacdg9blYMasfE02jw MQVgC3ijltXG1ZkxM7E53hYnT64nA955C2/TFzjlOSh6zH4webdgWsYHqQmfoqQf7PjM7c9Snmv qktFA== X-Received: by 2002:a17:90a:d64f:b0:38f:caa2:5721 with SMTP id 98e67ed59e1d1-3903c5dc500mr39010781a91.17.1786344161101; Sun, 09 Aug 2026 23:42:41 -0700 (PDT) Received: from SGN-LDSENG.tasernet.com ([2405:4800:5cc3:11a:1ac0:4dff:fe8b:4a69]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-315bebee8d0sm37667662eec.24.2026.08.09.23.42.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Aug 2026 23:42:40 -0700 (PDT) From: Cong Nguyen To: Jonathan Cameron Cc: David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , Andy Shevchenko , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] iio: adc: max1363: sign-extend bipolar differential channel reads Date: Mon, 10 Aug 2026 13:42:34 +0700 Message-Id: <20260810064234.1850833-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 The MAX1363 differential channels are bipolar (scan_type.sign = 's') and the device returns those samples in two's complement. However max1363_read_single_chan() masks the raw value to the ADC resolution and stores it as-is, without sign extension. A negative differential reading is therefore reported to userspace as a large positive value (for a 12-bit part, -1 reads back as 4095). These channels expose only IIO_CHAN_INFO_RAW (no offset), so the raw sysfs value is expected to be the signed result. Sign-extend the masked value from the resolution bit for differential channels before returning it. Single-ended channels are unipolar (sign = 'u') and are left unchanged. Fixes: 168c9d95a940 ("iio:adc:max1363 move from staging.") Cc: stable@vger.kernel.org Assisted-by: Claude:claude-opus-4 Signed-off-by: Cong Nguyen --- 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