From nobody Sun Jun 14 06:05:07 2026 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (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 EE245202997 for ; Sat, 2 May 2026 02:08:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777687738; cv=none; b=HQR9Ly4/fHbrsUuKRAWaLCUau9h/4wq5iekdn8BIaQBH5HVc7RMaVrzaDVH2dNgHmV25S+jTr0lkX5c9Cpvz0k1GQ5SoJnRbh4SZSHEkUOsLuXqCIQKM9/JaXrMNjkrBRg4d97FNHD/PHA+dOuQ62zgtHYPliqjkbqO79/VhQ94= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777687738; c=relaxed/simple; bh=Vj0a9qduxlNCPp1ydSPehmSf382ohEVT4KqXWYvxNPk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CfEILsFoiYlsujwTT6WOYL9UhHnB5D6ROpimAkKU+W4fwzX9PAC+GyPEfu9i4FkEWn4kuCjGOpaEEQP8hU2MpkAHzBqpP6cTAEQfJMzrYCRn79zOpYiDrdfOufOSZSPh5b3WMouhx34Pwo7BgGPBc9XB8O0XLT3wdIHFXXmINTQ= 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=jvtyKGH2; arc=none smtp.client-ip=209.85.216.53 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="jvtyKGH2" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-35dac556bb2so1937984a91.1 for ; Fri, 01 May 2026 19:08:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777687736; x=1778292536; 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; bh=lvktrsPRQjbid/M7vQVO3VIEYHof7fHHQw2CFy4zVhM=; b=jvtyKGH2gKoU0npHz5JbaMwFXIRxb6894Oa1avO0QFl8y7SMZbl6pCsZHLWPzNUEoz F6evvb7s+UE4lRWKoDxoQbbQhSGc9143vcEDjCPftT/muwS/EMKXtrPqJDKXQibbSUOU IHP/+GGPxRFqQ1gyXZ6FUTO74YBtpmyrWQ4aV+ZbzEc9B3DsoUzGWoWjfe45h/bmT291 tus/kLfpJAE1LIoWbe+4Q7tjdVcrhbLx1iWg4P7nUld8L5GBnPghL26v60Msq3mGhU6l o5q60xQ+L5RfZC6eu1zfw39w545Yhek8v86pW08ho8TEnd8maaFP7IZY1aimYO7zJhHG yOZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777687736; x=1778292536; 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; bh=lvktrsPRQjbid/M7vQVO3VIEYHof7fHHQw2CFy4zVhM=; b=X5vaUl2S3VvzFIFcjNrytabZtdVjZiSZzAMbg0DKzpB+s8kOeZnkVQDtIaYBYuSJBh zaSJakrL7hJL4Zd532+fNhFtxSQ+Se1a0UoGSI4hhR7vKWtHsdueIH6R5k4RGkY7nGux 4zdW9Qi6mRI7HaQcOX+oQnVd5r7ZNMMDyXM50Zmb5kS0TThPrWvvYf3XvvfJTQrVcTYK H2yxIe4XCNtXlHD8VYYepPJ80ylsfJA5S6ZwEh+NjMoP3QTh8nhtWka6XTOGrq5TPNzR OPwCdHGSxN+nbIwvCv7XkiNLfKTcOkKZ1owHpGGo5VQPqGq9U5DFoalnwl63sAI5Ud4j /ABg== X-Forwarded-Encrypted: i=1; AFNElJ8nu9N2VwLaJXoI7rLD4XodxYeHdFz6WBL5/2WCUSSWZxduVgTm5Dk13EPNj6+tvKJJ7hePSmuYccx3w0w=@vger.kernel.org X-Gm-Message-State: AOJu0YyIvZ6zEukRjwHACyCp0uwewwM7/rHHDh9UyogurtgL21f1/eyH b8sUrFenJJrmgSUXNy2YVoxTlx0vb0/Gw5eHSqQlk3LJ9hNJYc34YZZg X-Gm-Gg: AeBDievHZJgwt0n5O6dsLUC0jRDCEMXUCXIvMhJRtTyfN0PSsonUUpb/Eigt9ijssbU P+jNu8r7rdwrV9SFgQsNYqr2NzGfvXoVIrtE/kv567xUdHa/FwtO/UwY16AJ1oZAF8LWmWNzN31 SSS/twtI/UG7YS8JmfdOHClH38XaRebiQ9NclQFVx6KbqQhnCHYNYnUyBNuFlf9lSxwRNAQamTn bg5cZU8v8RXaMx4f1EjHAM9U/jJ/qTKfPMD0xOna1E4zaFyMDKY7lknT65hPcDOntuQ5VEK42mn 24CtVaIK0T7Ijvlg3o3ie4aJKM8V6v8PCrM0PF2hilNyDmRMN8A3StcjpKNoFuQBpfLSq1nAOiA MhoY7G/JB/dI6JlbhmUVI7rJ3Qx4mmtZk5SUYGsNSN3lby8aDRBgRfXY5eDPTTjETQCsTBCkQPJ DpVvj106Q4kT4n+HiWql+ow0F5GAtdlOyBOGUZ3CULU9sTLJaiPyqo/BMCbobEUtROMIFoLfW0P Y7wjg== X-Received: by 2002:a17:902:9889:b0:2b4:5309:2c14 with SMTP id d9443c01a7336-2b9f260b785mr10116985ad.31.1777687736219; Fri, 01 May 2026 19:08:56 -0700 (PDT) Received: from tabrez-VivoBook-ASUSLaptop-X513UA-KM513UA.. ([116.72.73.183]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b9cae39e91sm34519135ad.56.2026.05.01.19.08.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 May 2026 19:08:55 -0700 (PDT) From: Tabrez Ahmed To: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org Cc: linux@roeck-us.net, david.laight.linux@gmail.com, me@brighamcampbell.com, shuah@kernel.org, Tabrez Ahmed , Sashiko Subject: [PATCH v6 1/3] hwmon: (ads7871) Fix endianness bug in 16-bit register reads Date: Sat, 2 May 2026 07:38:42 +0530 Message-ID: <20260502020844.110038-2-tabreztalks@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260502020844.110038-1-tabreztalks@gmail.com> References: <20260502020844.110038-1-tabreztalks@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: quoted-printable Content-Type: text/plain; charset="utf-8" The ads7871_read_reg16() function relies on spi_w8r16() to read the 16-bit sensor output. The ADS7871 device transmits the Least Significant Byte (LSB) first. On Little-Endian architectures, spi_w8r16() correctly reconstructs the 16-bit value. However, on Big-Endian architectures, the byte swapping causes the first received byte (LSB) to be placed in the most significant byte of the u16, resulting in corrupted voltage readings. To fix this, cast the integer result of spi_w8r16() to a restricted __le16 type and convert it to the host CPU's native byte order using le16_to_cpu(). Negative error codes returned by the SPI core are caught and returned prior to the conversion to avoid mangling the error status. Reported-by: Sashiko Closes: https://sashiko.dev/#/patchset/20260418034601.90226-1-tabreztalks@g= mail.com Suggested-by: David Laight Signed-off-by: Tabrez Ahmed --- drivers/hwmon/ads7871.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/hwmon/ads7871.c b/drivers/hwmon/ads7871.c index 9bfdf9e6bcd77..52584bb77ffb7 100644 --- a/drivers/hwmon/ads7871.c +++ b/drivers/hwmon/ads7871.c @@ -61,7 +61,6 @@ #include =20 #define DEVICE_NAME "ads7871" - struct ads7871_data { struct spi_device *spi; }; @@ -77,9 +76,13 @@ static int ads7871_read_reg8(struct spi_device *spi, int= reg) static int ads7871_read_reg16(struct spi_device *spi, int reg) { int ret; + reg =3D reg | INST_READ_BM | INST_16BIT_BM; ret =3D spi_w8r16(spi, reg); - return ret; + if (ret < 0) + return ret; + + return le16_to_cpu((__force __le16)ret); } =20 static int ads7871_write_reg8(struct spi_device *spi, int reg, u8 val) --=20 2.43.0 From nobody Sun Jun 14 06:05:07 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 9B7B22BE7AC for ; Sat, 2 May 2026 02:09:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777687741; cv=none; b=sF47kSCYlg9XogXetYCr7t2UJy1UhHBQ9UXqRHTqnMPVvJ6XwDZCOS7xZeSvH0GnPXwt3GOonEDPXFKAZPmfum9YgzOnaDmxCyrlXpOE8i2tUSYSO4VCLi7Pvp8Ef/r5khg7yBEDMqowRJs9ZZLPab7RJudWtNRTPxWgN3SSnVg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777687741; c=relaxed/simple; bh=WW2rz5gdzVaBv4rLa9CAp5aUVBIaeArCTZgLhtHri3I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kIDmUYc7moyew6K5iOt5VClyx1oGLmU6JhBRoQaF/4/yWBXyF11yt9xOapbAe2+/8zqSOKcWeE5BlA8mrWWfU6RyAIS9SWFCeSJWJwY2qaGVN40z5/NKbNu1QqGTAr16xuUDiKVaz09tV0UbrEkqrynoYO0fWLSRnWS2cCB90ic= 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=EjJFx3kK; arc=none smtp.client-ip=209.85.216.46 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="EjJFx3kK" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-35691a231a7so1639826a91.3 for ; Fri, 01 May 2026 19:09:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777687740; x=1778292540; 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; bh=R7tIFYG7ybBVuM5lvo7m4EE1oTdl7/Nx/akc7N8Rrsc=; b=EjJFx3kKSkMbpcpPAZzesGTvI/2Ksbti0k5u+tiM2F0oXs4gwPTUu8nnqn2SfG5h1C DlEcPVl40ZvmtjIHAV1APzpRpl+7rg4Z7gB3QlJ5r0mpwtAQssdTYYUcJ85cTVyiDi5A GAwhgTVly3q0ERQbwPYRObhE7YC5RU4gJhhILVtcDW6LzHgE8ys17PQrDzss+VTbeTuJ 5y4ps4lpYIejHc6hTWhNgWA7faY2GkKUXA13JeNJYTv6RBs1rdc7NTOxn1iVU9X5fTtN 8+hG1Y1Y+LydCDpUEu7AKW0yVNsyb5/DGKrVoIiv1/t+fx9nQZHk1AoMU7FoLq8cpbDx z+oA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777687740; x=1778292540; 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; bh=R7tIFYG7ybBVuM5lvo7m4EE1oTdl7/Nx/akc7N8Rrsc=; b=LgqAWf4L7INcuLkBdK5xP+pIdRwq/MQ4d0eOllh3AAD4oaRBKg3GCdhtSsmDOSz5nd iemu7aBMEh78CEgEB0qmQ+LAlIpTP/rHnzKpAL10Ya0P1sgp258vVkhvijQvjP0Uroo6 p8xGXzv0h1snKvEPkRzA58HRD4YxB3qHKnBGB7wb2J6W5fTV08Ap6Yehs45SMIUw9snz I1X2e9VybpCn4jyoMGlzmbVJrem0MRzdRGyFgxVmDXdNN9PJwfpdZ67uHuP0OEQz9SfI d+jhr1qClUB3UpGz03bNprh6oIZgQVNp62UVTP/5AiYim1IDqdfI8x8jagxrO029vlBj IjAQ== X-Forwarded-Encrypted: i=1; AFNElJ+X++9d32TXn2jFD3s8HEX7wuhIGR2CL0ZiTnZsDA1jlcJake6hJ4VEIlrAKLvJRV2rNpMiIz3UTbpLniw=@vger.kernel.org X-Gm-Message-State: AOJu0YyXa14ScKlVzGjeLtvUBUJuoRbjewfR8+EWn4SHyMD+n9WeGDiB 1b1OHSGcJGWXb+LRtwpivKf2acTV73CkZL843ZW2+1fBVPI61KGdtqgi X-Gm-Gg: AeBDieszv3IeuTEEeG83VxAI1+Ppv7LrmrWCf3bP4pG5KD/4Nmi3ZBGizhGyw/CuCTg DCL/Z2OMw+mbNR3G/3l7Hbl08bpQLK54VyiRWzRx0OoufmQNCyKDlhc4p/TxK+Z3hsEsY0kO4YC LafTf4+dCQwsWFXDyQP7qtQg7XGJYv4AvcOpNDoLv7+EPI+i663wzsTDLIDbv4dS5W7qfAE57YY iXFskg9UXw7EtEk4z9l4sqoZ6l4KbLQTNnJkwmQ/m5xO3UbwzR3Z9dcZAeKTo5q5pIrF9RebOsa 6tiVZzAOiXfKgIalpqzj0IiL4v0+Ge01wXi+LMmGawPkPBxfW1kr+Vzn/8Qr30ArsOgJ69DJS+5 5UICaLPC1/G275aIImcbDchr9BO95H8OQ5oI3+fkIiAltPBokeEZfM+1GLGYrpP0nsRSuQBUQQJ llJucEK6b4oWWLUYGDVwgzSMHaPpvPlY+V3EYVO9or4j6dhrkzwqgaOIRIJLysaYuEfGzQndNWJ nlqxg== X-Received: by 2002:a17:90b:2b45:b0:35b:a418:698c with SMTP id 98e67ed59e1d1-3650cd988e4mr1558730a91.12.1777687739788; Fri, 01 May 2026 19:08:59 -0700 (PDT) Received: from tabrez-VivoBook-ASUSLaptop-X513UA-KM513UA.. ([116.72.73.183]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b9cae39e91sm34519135ad.56.2026.05.01.19.08.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 May 2026 19:08:59 -0700 (PDT) From: Tabrez Ahmed To: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org Cc: linux@roeck-us.net, david.laight.linux@gmail.com, me@brighamcampbell.com, shuah@kernel.org, Tabrez Ahmed Subject: [PATCH v6 2/3] hwmon: (ads7871) Convert to hwmon_device_register_with_info Date: Sat, 2 May 2026 07:38:43 +0530 Message-ID: <20260502020844.110038-3-tabreztalks@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260502020844.110038-1-tabreztalks@gmail.com> References: <20260502020844.110038-1-tabreztalks@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: quoted-printable Content-Type: text/plain; charset="utf-8" Convert the ads7871 driver from the legacy hwmon_device_register() to the modern hwmon_device_register_with_info() API. This migration simplifies the driver by using the structured hwmon_channel_info approach and prepares the codebase for the transition to a shared DMA-safe buffer. While at it, fix checkpatch violations. Signed-off-by: Tabrez Ahmed --- drivers/hwmon/ads7871.c | 75 ++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/drivers/hwmon/ads7871.c b/drivers/hwmon/ads7871.c index 52584bb77ffb7..8ffcc4c823a60 100644 --- a/drivers/hwmon/ads7871.c +++ b/drivers/hwmon/ads7871.c @@ -56,7 +56,6 @@ #include #include #include -#include #include #include =20 @@ -65,6 +64,16 @@ struct ads7871_data { struct spi_device *spi; }; =20 +static umode_t ads7871_is_visible(const void *data, + enum hwmon_sensor_types type, + u32 attr, int channel) +{ + if (type =3D=3D hwmon_in && attr =3D=3D hwmon_in_input) + return 0444; + + return 0; +} + static int ads7871_read_reg8(struct spi_device *spi, int reg) { int ret; @@ -88,19 +97,20 @@ static int ads7871_read_reg16(struct spi_device *spi, i= nt reg) static int ads7871_write_reg8(struct spi_device *spi, int reg, u8 val) { u8 tmp[2] =3D {reg, val}; + return spi_write(spi, tmp, sizeof(tmp)); } =20 -static ssize_t voltage_show(struct device *dev, struct device_attribute *d= a, - char *buf) +static int ads7871_read(struct device *dev, enum hwmon_sensor_types type, + u32 attr, int channel, long *val) { struct ads7871_data *pdata =3D dev_get_drvdata(dev); struct spi_device *spi =3D pdata->spi; - struct sensor_device_attribute *attr =3D to_sensor_dev_attr(da); - int ret, val, i =3D 0; - uint8_t channel, mux_cnv; + int ret, raw_val, i =3D 0; + u8 mux_cnv; =20 - channel =3D attr->index; + if (type !=3D hwmon_in || attr !=3D hwmon_in_input) + return -EOPNOTSUPP; /* * TODO: add support for conversions * other than single ended with a gain of 1 @@ -130,39 +140,34 @@ static ssize_t voltage_show(struct device *dev, struc= t device_attribute *da, } =20 if (mux_cnv =3D=3D 0) { - val =3D ads7871_read_reg16(spi, REG_LS_BYTE); - if (val < 0) - return val; + raw_val =3D ads7871_read_reg16(spi, REG_LS_BYTE); + if (raw_val < 0) + return raw_val; + /*result in volts*10000 =3D (val/8192)*2.5*10000*/ - val =3D ((val >> 2) * 25000) / 8192; - return sysfs_emit(buf, "%d\n", val); + *val =3D ((raw_val >> 2) * 25000) / 8192; + return 0; } =20 return -ETIMEDOUT; } =20 -static SENSOR_DEVICE_ATTR_RO(in0_input, voltage, 0); -static SENSOR_DEVICE_ATTR_RO(in1_input, voltage, 1); -static SENSOR_DEVICE_ATTR_RO(in2_input, voltage, 2); -static SENSOR_DEVICE_ATTR_RO(in3_input, voltage, 3); -static SENSOR_DEVICE_ATTR_RO(in4_input, voltage, 4); -static SENSOR_DEVICE_ATTR_RO(in5_input, voltage, 5); -static SENSOR_DEVICE_ATTR_RO(in6_input, voltage, 6); -static SENSOR_DEVICE_ATTR_RO(in7_input, voltage, 7); - -static struct attribute *ads7871_attrs[] =3D { - &sensor_dev_attr_in0_input.dev_attr.attr, - &sensor_dev_attr_in1_input.dev_attr.attr, - &sensor_dev_attr_in2_input.dev_attr.attr, - &sensor_dev_attr_in3_input.dev_attr.attr, - &sensor_dev_attr_in4_input.dev_attr.attr, - &sensor_dev_attr_in5_input.dev_attr.attr, - &sensor_dev_attr_in6_input.dev_attr.attr, - &sensor_dev_attr_in7_input.dev_attr.attr, +static const struct hwmon_channel_info * const ads7871_info[] =3D { + HWMON_CHANNEL_INFO(in, + HWMON_I_INPUT, HWMON_I_INPUT, HWMON_I_INPUT, HWMON_I_INPUT, + HWMON_I_INPUT, HWMON_I_INPUT, HWMON_I_INPUT, HWMON_I_INPUT), NULL }; =20 -ATTRIBUTE_GROUPS(ads7871); +static const struct hwmon_ops ads7871_hwmon_ops =3D { + .is_visible =3D ads7871_is_visible, + .read =3D ads7871_read, +}; + +static const struct hwmon_chip_info ads7871_chip_info =3D { + .ops =3D &ads7871_hwmon_ops, + .info =3D ads7871_info, +}; =20 static int ads7871_probe(struct spi_device *spi) { @@ -197,10 +202,10 @@ static int ads7871_probe(struct spi_device *spi) return -ENOMEM; =20 pdata->spi =3D spi; - - hwmon_dev =3D devm_hwmon_device_register_with_groups(dev, spi->modalias, - pdata, - ads7871_groups); + hwmon_dev =3D devm_hwmon_device_register_with_info(dev, spi->modalias, + pdata, + &ads7871_chip_info, + NULL); return PTR_ERR_OR_ZERO(hwmon_dev); } =20 --=20 2.43.0 From nobody Sun Jun 14 06:05:07 2026 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (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 A8A182C027E for ; Sat, 2 May 2026 02:09:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777687745; cv=none; b=no9ni4ANFz3BkmfMS9m5E830wGHr41oWOAh7kcf+qxZYOjir/pcDAlAyy18zZ4XCUz20H+hqzmbNCOtRE+txyqV/gTYS89t9A/EcWIuma33+3LkpAwqYJpUUdAOuKcIIIjiDykybC71UKLU/cs959sWFVzP9RkBANYGQXy/ZGXQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777687745; c=relaxed/simple; bh=0h5BEMG7ZbzlYE1qYJc8sPYWwfEyMLY79w8gc6hehOg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QVnYfbh/M0AdlXY+r5NeoH1KTRFt0AiWlW/Hum89hfXbloQBNAH0rTj4VnEtYfj0Neowl8+O0/buVPrbHgnp/4T5Nu4XlSvf/F5EbtNm5pAfuysTvad8CSVHemHID1dOJjXVW4PJSl0tSmqZ8B3QggP9KYwKqSRL4ZuM98u30cU= 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=Y4EKpbFZ; arc=none smtp.client-ip=209.85.214.172 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="Y4EKpbFZ" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-2a871daa98fso14174115ad.1 for ; Fri, 01 May 2026 19:09:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777687743; x=1778292543; 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; bh=fv+LaawXWM5Be8S4ugblbJPLa3ayLH0tuydTTKYUZtA=; b=Y4EKpbFZuiIRAzAdG+Vq8xHc7oo4RBjvdp+yMxrn2FZ27dU9t4ZZvgqVxiNBbc7vOj 7Nf9lcRIHiq+XYZ7RBh7gBlo/+N0lbRSVtG6Dw5uBB1Nsuv4T6E/iD/fQMFOAlkqBQAs MunNPP7Ums1DYhEfmRz1bhivCFZPP+8Xrpo84FIVAjPOW851MQQM23iWAnLBjR4VH/5V ZUuXpeyvDYvRAnKbFGTCl2Rs4wN9fFLcCRYIi8SaqbMmFTGmK1y8OiWCvv+AG9EawIvV 2dmVaEJfGw/DIZkDrx5nz4FzGpys2h4KogoOXxLZwKIRbR7Gl0OLZdfW+4niIFEGqU7a 9ZOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777687743; x=1778292543; 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; bh=fv+LaawXWM5Be8S4ugblbJPLa3ayLH0tuydTTKYUZtA=; b=abnrw6+kICT6rwEJMD/MFLOuldop9rGqWMrjPPwEQPK+YC3ZRC+EV2uS8yXm76bbau ygSviGRy6hGaeKBuAOlrIrGTtnpGLJ++TJ0a1A/R35emXl7/5TNumydJ96jdH/KEMdpH pHnzPbocHcguy145pgJhSa4I4QgcNJk0KMFYJFGTBcIpbzxzXtgNMsmadbCEsPOvwWJI qC23TB/mG3jtaQ/MuHp33qdAZxPSCQQsaqp2AHPhuC0rk8qoLy1sefE8E6gRL8YYbWIs g3plJ0ISor96UE2UDlywOFcaP6H5jxb64VCKKWHRlxD5+Ynw0EARujcBIXC9dEOlmD7h C8Ww== X-Forwarded-Encrypted: i=1; AFNElJ9w/XRhFqcqn03oBN0RANNC1kbjuCpfWn8sREpnIBYfmQZaAx55isWobDbKfTD2BoOTNqIPhogQNChooOw=@vger.kernel.org X-Gm-Message-State: AOJu0YyfBRG54RO4fJME6gIN8p7K0x2XCDVowdRgIFxMhBdMJbq+ikfo exEg9MgNgnkAZvolBIzuJ3j0Gb0KYBrYcXCU7d01OOf0wFv1jqz3eJZh X-Gm-Gg: AeBDieubQXvxOOuL6Mm9uXSx/iJ6VjRaI6xPURZCdCBl3cILOjdLcC9O0PyuinGW8bd e5g8S9jdtB3hN8FgzhhiGKsEzz9yGbcU9FdHJuTA35BJtMw1KrU+w8PQmncqCQ5BfQ8iwZsNv1m pjcPDL5I8dEa8qCEQkKo6tv4IT8iajTXTNKNI8gZo9Cjmy9L6j9cuiIzfdzA0hakp+8vi9BG+pX WCVbt8Cy2y16FZa5uVF523d9Y3oU/909jTltL7LqqlfIp+2xIqm5RrEHHo4RkLKzPnj2844RlIV SNrgW8Qy+26CB6wihBFy5pDyM2CSNuPihBuh/J5smvD5nfyQt1ypfAPTWjaLl4O8QTbnU6yWvHC ArlUBmFm5kagbGktKY9mN4Qe/xHCmPrbBuGhXIcLSehe1qiFEY1X7dTK1GUe5+sOx4Y4yLMAVED 0dMsmQ4IS5ZUdH6X18FbedOWCA/AkZcDoqytcf8xknz+Xqjnv0VLplOCC1lxT9KEHGC1QrZNl6i m4aJQ== X-Received: by 2002:a17:903:1984:b0:2b2:ec46:dfd4 with SMTP id d9443c01a7336-2b9f25df2fcmr14482125ad.22.1777687742996; Fri, 01 May 2026 19:09:02 -0700 (PDT) Received: from tabrez-VivoBook-ASUSLaptop-X513UA-KM513UA.. ([116.72.73.183]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b9cae39e91sm34519135ad.56.2026.05.01.19.09.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 May 2026 19:09:02 -0700 (PDT) From: Tabrez Ahmed To: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org Cc: linux@roeck-us.net, david.laight.linux@gmail.com, me@brighamcampbell.com, shuah@kernel.org, Tabrez Ahmed Subject: [PATCH v6 3/3] hwmon: (ads7871) Use DMA-safe buffer for SPI writes Date: Sat, 2 May 2026 07:38:44 +0530 Message-ID: <20260502020844.110038-4-tabreztalks@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260502020844.110038-1-tabreztalks@gmail.com> References: <20260502020844.110038-1-tabreztalks@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: quoted-printable Content-Type: text/plain; charset="utf-8" The driver currently passes a stack-allocated buffer to spi_write(), which is incompatible with DMA on systems with CONFIG_VMAP_STACK enabled. Move the transfer buffer into the driver's private data structure to ensure it is DMA-safe. Since this shared buffer now requires serialization, this change depends on the previous commit which migrated the driver to the hwmon 'with_info' API. While moving the logic, also: - Corrected the sign extension for 14-bit data by casting to s16. - Scaled the output to millivolts (2500mV full scale ) to comply with the hwmon ABI. Signed-off-by: Tabrez Ahmed --- drivers/hwmon/ads7871.c | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/drivers/hwmon/ads7871.c b/drivers/hwmon/ads7871.c index 8ffcc4c823a60..83ea09a935bc4 100644 --- a/drivers/hwmon/ads7871.c +++ b/drivers/hwmon/ads7871.c @@ -62,6 +62,7 @@ #define DEVICE_NAME "ads7871" struct ads7871_data { struct spi_device *spi; + u8 tx_buf[2] ____cacheline_aligned; }; =20 static umode_t ads7871_is_visible(const void *data, @@ -94,11 +95,12 @@ static int ads7871_read_reg16(struct spi_device *spi, i= nt reg) return le16_to_cpu((__force __le16)ret); } =20 -static int ads7871_write_reg8(struct spi_device *spi, int reg, u8 val) +static int ads7871_write_reg8(struct ads7871_data *pdata, int reg, u8 val) { - u8 tmp[2] =3D {reg, val}; + pdata->tx_buf[0] =3D reg; + pdata->tx_buf[1] =3D val; =20 - return spi_write(spi, tmp, sizeof(tmp)); + return spi_write(pdata->spi, pdata->tx_buf, 2); } =20 static int ads7871_read(struct device *dev, enum hwmon_sensor_types type, @@ -117,7 +119,7 @@ static int ads7871_read(struct device *dev, enum hwmon_= sensor_types type, */ /*MUX_M3_BM forces single ended*/ /*This is also where the gain of the PGA would be set*/ - ret =3D ads7871_write_reg8(spi, REG_GAIN_MUX, + ret =3D ads7871_write_reg8(pdata, REG_GAIN_MUX, (MUX_CNV_BM | MUX_M3_BM | channel)); if (ret < 0) return ret; @@ -125,6 +127,7 @@ static int ads7871_read(struct device *dev, enum hwmon_= sensor_types type, ret =3D ads7871_read_reg8(spi, REG_GAIN_MUX); if (ret < 0) return ret; + mux_cnv =3D ((ret & MUX_CNV_BM) >> MUX_CNV_BV); /* * on 400MHz arm9 platform the conversion @@ -144,8 +147,11 @@ static int ads7871_read(struct device *dev, enum hwmon= _sensor_types type, if (raw_val < 0) return raw_val; =20 - /*result in volts*10000 =3D (val/8192)*2.5*10000*/ - *val =3D ((raw_val >> 2) * 25000) / 8192; + /* + * Use (s16) to ensure the sign bit is preserved during the shift. + * Report millivolts (2.5V =3D 2500mV). + */ + *val =3D ((s16)raw_val >> 2) * 2500 / 8192; return 0; } =20 @@ -182,11 +188,17 @@ static int ads7871_probe(struct spi_device *spi) spi->bits_per_word =3D 8; spi_setup(spi); =20 - ads7871_write_reg8(spi, REG_SER_CONTROL, 0); - ads7871_write_reg8(spi, REG_AD_CONTROL, 0); + pdata =3D devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); + if (!pdata) + return -ENOMEM; + + pdata->spi =3D spi; + + ads7871_write_reg8(pdata, REG_SER_CONTROL, 0); + ads7871_write_reg8(pdata, REG_AD_CONTROL, 0); =20 val =3D (OSC_OSCR_BM | OSC_OSCE_BM | OSC_REFE_BM | OSC_BUFE_BM); - ads7871_write_reg8(spi, REG_OSC_CONTROL, val); + ads7871_write_reg8(pdata, REG_OSC_CONTROL, val); ret =3D ads7871_read_reg8(spi, REG_OSC_CONTROL); =20 dev_dbg(dev, "REG_OSC_CONTROL write:%x, read:%x\n", val, ret); @@ -197,11 +209,6 @@ static int ads7871_probe(struct spi_device *spi) if (val !=3D ret) return -ENODEV; =20 - pdata =3D devm_kzalloc(dev, sizeof(struct ads7871_data), GFP_KERNEL); - if (!pdata) - return -ENOMEM; - - pdata->spi =3D spi; hwmon_dev =3D devm_hwmon_device_register_with_info(dev, spi->modalias, pdata, &ads7871_chip_info, --=20 2.43.0