From nobody Thu Apr 2 12:25:52 2026 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (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 A8E56311C3E for ; Sat, 28 Mar 2026 18:21:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774722075; cv=none; b=dM1J19kEbubVaEvUBGN0FTPoO8/D914rtFUwShvnWvyikP08RnsOx4VaOJf3lTXD5nIyYxccjvWcGAA6g5pov2Jww+yYUOpYAkdGZBBT71U12ofcZpQ8/EF7uSKUu8m8aKqMG6+ORSvHUjPrOJrseRgLDJxOUHzE4gIXfT6g5WU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774722075; c=relaxed/simple; bh=0pbOL/dGHERe1EfSvbVNssanpwxAN38tdpdbr/Jaxj8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cTy/LeYnh23EPsRciZx6QqK+LENvsfBHcKbc4fYS4FInE1k4RtGzoNvwT8kbOv9XCeG56ps0Dls2vwYJbmbZFoyBhDboiZI5FDROuY2Wu0/+Igc5RRwAIVXTvLiS5tAXahe/4a2/yY04vAYsvSscOd1t2a7heLXwMV2fhwX8oF0= 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=q140Y/7K; arc=none smtp.client-ip=209.85.214.174 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="q140Y/7K" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-2b23f90f53aso10609965ad.0 for ; Sat, 28 Mar 2026 11:21:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774722074; x=1775326874; 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=U9KE3Yo35HcOp4QopaJDXVc4B2FMTqxqxd65+MOhm+I=; b=q140Y/7Kkp9tmO94vZ71RCDyQPT7Qkwbu8LCTXyrYy/TnsxY4YWN5w+5YObT0DCdQ9 0jIq2X4Ihf9atMVRlOLWpai4tQ/9K+EGxVvpxZOWjQvVkM55nryri7q89sfwwyN9RcKg dpkfwPhMe7hq2yj4OnT96age08ErfMSrpZo9+iOKK/ogoaLmjHVrYImGZI07lQbLJRo3 E4gnofcsww79ws9SH0dJH24TOI7ijD7VSs1aTAlpP2CNqwaHEpHveDERr8l75xs3HSIc u3+v3MlLXn6QtLGUsvHssAGGzn/hOv4c/OXk7VWFOcfWQun8/jkv8bbqKmpNCGIKlSUN PUwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774722074; x=1775326874; 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=U9KE3Yo35HcOp4QopaJDXVc4B2FMTqxqxd65+MOhm+I=; b=LbaGo8TOteQXEPh/D40eAwLDjQvN7SOdoA4pfbgQStSisDLXrSiSIAtaFSZ85vyl0j p7t6zWE53da4m6Gyl8aHRjpMcNG+bizv/8QVGZXfBgMm6XOj+13t4xXkMmIMui5jdkQq jE5K7RIFzPdYFyDPglmqKJ5z2RVnFRijqkENljAoQZbkL4C2aoH71ztMb4lb3FHURGJT 2ajQOxYuG3KVQa2K+eUHD/vneYsL/IAIG5nDIEuWsWAfe64plNpw+TYwepI67aymgNWR 1ljPCSWyeTlnFqc//vRp3NHfzJWuMNuQDoO8OWSfs0SbVnEhN/FapL8vfFOKBTg+Va2Z 3Mzw== X-Forwarded-Encrypted: i=1; AJvYcCXcmG6K1l5VoVXlCC0owj/GQcKPVLiVg06G5t9UoRJqBH7t4X3ov6OATRYLLu9yUZxBeSnDkvLU39tnVrw=@vger.kernel.org X-Gm-Message-State: AOJu0YwjbEQbtvcV7Ep6VGlaawAoxjVEptUH1xBYP0fkhhqyUWvSAF0K +BcpAkMWOpue0av7Xgg4LmsrglSJB/CYOurpkuic71M6BMNNp+rT/I4gAqKZnA== X-Gm-Gg: ATEYQzyNNEabEL1vUH3Fqy+iQ3Sz0DRiBtQizkcashxVCDpzfbKiGO98eIjrsJ3LpI8 QXxSYqYajuZJr+aZxa0n+vD5WcZDvmHHU97G0nPzDomb5ft01D7oFThxrRn1g2BCgjkikYtsvh7 n2hs3byA9kbZKgkDr75EYlQemWPT4ZSYIAiEF6alOVUYA2sdYvRwwOjVEvHuwY1noljejXYKBqk qrEpcpIIyCUIHZWg9joXmFRuEdM/0kmRDm7ci4Vt4Kmyrv9XwZWSKG+flLm4T5MMk3DenCVh75f XNwSjtYAr4HgyMjPRQ+9wjkMjFp8BXZJ8G1ptclgWx+ONSOKU+u9Maq23F7EDgynd/QvSIt9vam jmw7gUm6hYuGcg8+crwJEkbCX2frwf6KqZOEbFR4JPz4qlgioOfwGJzkFtEP7Hy2VIPdtVkGqEa Kj/n02NxkHEM/Hdr4QaytVrtc9wrzJkHQbRa7+Xn9/789+b6ppIs2OEnHR8gl+pQtEkg== X-Received: by 2002:a17:903:22d1:b0:2b0:659e:97c6 with SMTP id d9443c01a7336-2b0cdd06f24mr75180345ad.47.1774722073947; Sat, 28 Mar 2026 11:21:13 -0700 (PDT) Received: from tabrez-VivoBook-ASUSLaptop-X513UA-KM513UA.. ([115.96.68.45]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2427660c7sm28451665ad.44.2026.03.28.11.21.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 28 Mar 2026 11:21:13 -0700 (PDT) From: Tabrez Ahmed To: linux@roeck-us.net Cc: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, shuah@kernel.org, me@brighamcampbell.com, Tabrez Ahmed Subject: [PATCH 1/2] hwmon: (ads7871) Add mutex to serialize SPI transactions Date: Sat, 28 Mar 2026 23:50:14 +0530 Message-ID: <20260328182015.220298-2-tabreztalks@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260328182015.220298-1-tabreztalks@gmail.com> References: <20260328182015.220298-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" If userspace reads multiple channels concurrently, the driver can overwrite ongoing REG_GAIN_MUX writes before the conversion completes. Add a mutex to the driver's private data structure to serialize hardware access and prevent concurrent userspace reads from corrupting the ADC multiplexer state. Update error paths to ensure the mutex is properly unlocked. Suggested-by: Guenter Roeck Signed-off-by: Tabrez Ahmed --- drivers/hwmon/ads7871.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/drivers/hwmon/ads7871.c b/drivers/hwmon/ads7871.c index 9bfdf9e6bcd77..02e69bef2ca12 100644 --- a/drivers/hwmon/ads7871.c +++ b/drivers/hwmon/ads7871.c @@ -59,11 +59,13 @@ #include #include #include +#include =20 #define DEVICE_NAME "ads7871" =20 struct ads7871_data { struct spi_device *spi; + struct mutex lock; }; =20 static int ads7871_read_reg8(struct spi_device *spi, int reg) @@ -98,6 +100,8 @@ static ssize_t voltage_show(struct device *dev, struct d= evice_attribute *da, uint8_t channel, mux_cnv; =20 channel =3D attr->index; + + mutex_lock(&pdata->lock); /* * TODO: add support for conversions * other than single ended with a gain of 1 @@ -107,11 +111,11 @@ static ssize_t voltage_show(struct device *dev, struc= t device_attribute *da, ret =3D ads7871_write_reg8(spi, REG_GAIN_MUX, (MUX_CNV_BM | MUX_M3_BM | channel)); if (ret < 0) - return ret; + goto out_unlock; =20 ret =3D ads7871_read_reg8(spi, REG_GAIN_MUX); if (ret < 0) - return ret; + goto out_unlock; mux_cnv =3D ((ret & MUX_CNV_BM) >> MUX_CNV_BV); /* * on 400MHz arm9 platform the conversion @@ -121,21 +125,27 @@ static ssize_t voltage_show(struct device *dev, struc= t device_attribute *da, i++; ret =3D ads7871_read_reg8(spi, REG_GAIN_MUX); if (ret < 0) - return ret; + goto out_unlock; mux_cnv =3D ((ret & MUX_CNV_BM) >> MUX_CNV_BV); msleep_interruptible(1); } =20 if (mux_cnv =3D=3D 0) { val =3D ads7871_read_reg16(spi, REG_LS_BYTE); - if (val < 0) - return val; + if (val < 0) { + ret =3D val; + goto out_unlock; + } /*result in volts*10000 =3D (val/8192)*2.5*10000*/ val =3D ((val >> 2) * 25000) / 8192; - return sysfs_emit(buf, "%d\n", val); + ret =3D sysfs_emit(buf, "%d\n", val); + goto out_unlock; } =20 - return -ETIMEDOUT; + ret =3D -ETIMEDOUT; +out_unlock: + mutex_unlock(&pdata->lock); + return ret; } =20 static SENSOR_DEVICE_ATTR_RO(in0_input, voltage, 0); @@ -194,7 +204,7 @@ static int ads7871_probe(struct spi_device *spi) return -ENOMEM; =20 pdata->spi =3D spi; - + mutex_init(&pdata->lock); hwmon_dev =3D devm_hwmon_device_register_with_groups(dev, spi->modalias, pdata, ads7871_groups); --=20 2.43.0 From nobody Thu Apr 2 12:25:52 2026 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (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 82F20374171 for ; Sat, 28 Mar 2026 18:21:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774722078; cv=none; b=WtPFqgEsIYKI0oXSC9qfJ2m9RCxVV+jUOdHvwQtEBojXO6FGWUaOHMyPvYRd2pJaxyfDxRylr785J88YbG6+D0C3akjaj7OX10kz36zzX9VSAKK/Im0tLwVb7fBmlwbMkBRCeJuXz8x8SfP8Wl/Ooelxf+7Fb7G/YvAq38J+Nz0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774722078; c=relaxed/simple; bh=8kmUTSXCnQpDk2iRzyppv3Dhj89vKfY2CvUcHfNXYoM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pDc1zBGAcZhylhkKTQVFC6hgJ1AzlmYzmhQEsXg1LjcYIWAqaj0TMtmcLRrfgQHzpXWqZ7KRAAEVHVt0BtNgyp01tswwLpETbiEWWulaSFRto+pFAWmOiXejqgo54qt8oyVU8AuGrQshXc+b1AQsN+zF8Z5shNvLy89a7BH/iM8= 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=XgBxynyw; arc=none smtp.client-ip=209.85.214.179 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="XgBxynyw" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-2b23f90f53aso10610255ad.0 for ; Sat, 28 Mar 2026 11:21:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774722077; x=1775326877; 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=/44zWbQ4JkV8yMKsOlxZMaFhTbPmOsSLVbdVyq/40m4=; b=XgBxynywGzqsVGfwaKuAoRfFD+gbllaJoTwiZTDKrAuQF2fTF/oNu2jyPNpHX8dr+U Jek6mgPrf58YnRPzJD9e4EIcA43AeDE9TrFXE88WIefWC+InTVJXskPrBC5nOiIlUsXQ /7bQ1QaPVii6WJXLL4O0L0+63XChrpP5hUVHWOT2nz/W6232Hz1aGZp3RHNF5cZ1gilb H6HnMEV/nqVC0xECqTS8wlloqsV2uXAF4ssRF2i/9QBPVFitX893Lc/IwzvZe7X3uLG2 65TXO70Zhn7dJycf5GmN6YdBEO78TNtK2cOh5++vr2jHnTZ0LAr4lEfWNFMOkE7iAE7S ReVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774722077; x=1775326877; 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=/44zWbQ4JkV8yMKsOlxZMaFhTbPmOsSLVbdVyq/40m4=; b=aPeR11DfjAMrJUkhUHWREF3kwlgbCkLleK4fHM+0snQDOhqUbsymBoh1R7H9wnQ6WT zhYCVtcY/dtzuEQ8PIZla5Wb0Epp8ugubAipVW/RYvDjDev2i+Z1JkAT1cSCqTB7LyEe jJFvWhFnvr23jOe2qlUo8YzhNGO771yN92zO75izjuPq/yOtfmVQvHAH/lGm/QTBYmZ3 2CdTzdB9YsQwfogz+eXC0ZgWbNwPBrPtAAazNmtyRp5pcBmxqIwcjXNFwlWyALsDJVIY 2m1j6/Rvf0qmtrvXIjWJbN9ZdKI/PukNesA0dg/VcUMYLxiGxXfUfWhtK+xmN3l749rX md2w== X-Forwarded-Encrypted: i=1; AJvYcCVU9vhwKdFh9Ndtp0ZklzuJ1qNU6WgcB4uRu4sFUkr8mhvlGEiopgzzMgf8Mzl2o/kF8LoD+QqsWJnHZSU=@vger.kernel.org X-Gm-Message-State: AOJu0YyvsH2a5yPIRKXwagGhJ+jDCJgNvBobbWT09DdqkJlSyZDzZdOq FFvnDsZNc2Jo6IqNtofSHZ8dY9/ugepvytLJacW79kdKAZ3BawkIOKje X-Gm-Gg: ATEYQzxqAhfss5M4+EmHtyXFZ9tYWayUbHTZQ7xKkLI8cAr39DYIEznmAtJprK/mbU1 ZfOzYgtcRv0FphOJg5WPvW4mTH/omHSbiynZXduThWCXgO2kX+b4dWtglzNCAIMjXvrqUFRhYh4 pC3uGOeTWTsWLkyLmtXeodIqg9dm0ocSMBw4BXxh+U4dW+Q73gqDS0uDN0LCr/UghhEv07bPjLY DyWW9qURd0TWv8g0I8R5LEZdxqZ/4ePauw20sm+46HCtvqqxwPDc55AUJnczrutz6DgtmGjej+f 2EQZeSgGp5Lh0bQsLrVtqnd+Q7Uj+2kpxiWu1hBM0TgqneO3II+9evHGPzOmnfGCIf9uOyLQvoK tZ83ReMgsoCgu1c+HaR1NLmosttfr9iJywDEnTr2kEZHPqX97VUEggCa4dT9G34Mnl9sNk0tVaj 8h0N79nRD6C9HLeTVsCcJCu8J2KdscJS8R9Ui8Pje/cf4IcB/SDk0wJEvGtidKVIWPWw== X-Received: by 2002:a17:902:fc85:b0:2b0:5923:5194 with SMTP id d9443c01a7336-2b0cdcbb4e2mr69187665ad.27.1774722076841; Sat, 28 Mar 2026 11:21:16 -0700 (PDT) Received: from tabrez-VivoBook-ASUSLaptop-X513UA-KM513UA.. ([115.96.68.45]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b2427660c7sm28451665ad.44.2026.03.28.11.21.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 28 Mar 2026 11:21:16 -0700 (PDT) From: Tabrez Ahmed To: linux@roeck-us.net Cc: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org, shuah@kernel.org, me@brighamcampbell.com, Tabrez Ahmed Subject: [PATCH 2/2] hwmon: (ads7871) Convert to hwmon_device_register_with_info Date: Sat, 28 Mar 2026 23:50:15 +0530 Message-ID: <20260328182015.220298-3-tabreztalks@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260328182015.220298-1-tabreztalks@gmail.com> References: <20260328182015.220298-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 driver to use the modern hwmon_device_register_with_info() API. This removes the need for manual sysfs attribute creation and simplifies the driver by utilizing the hwmon core's standard callbacks. Remove the SENSOR_DEVICE_ATTR_RO macros and the attribute group arrays. Replace the voltage_show() function with an ads7871_read() callback and define the supported channels via hwmon_channel_info. Suggested-by: Guenter Roeck Signed-off-by: Tabrez Ahmed --- drivers/hwmon/ads7871.c | 71 +++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/drivers/hwmon/ads7871.c b/drivers/hwmon/ads7871.c index 02e69bef2ca12..8e93e58e9298c 100644 --- a/drivers/hwmon/ads7871.c +++ b/drivers/hwmon/ads7871.c @@ -56,7 +56,6 @@ #include #include #include -#include #include #include #include @@ -67,6 +66,15 @@ struct ads7871_data { struct spi_device *spi; struct mutex lock; }; +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; +} =20 static int ads7871_read_reg8(struct spi_device *spi, int reg) { @@ -90,16 +98,16 @@ static int ads7871_write_reg8(struct spi_device *spi, i= nt reg, u8 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; + uint8_t mux_cnv; =20 - channel =3D attr->index; + if (type !=3D hwmon_in || attr !=3D hwmon_in_input) + return -EOPNOTSUPP; =20 mutex_lock(&pdata->lock); /* @@ -131,14 +139,14 @@ 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) { - ret =3D val; + raw_val =3D ads7871_read_reg16(spi, REG_LS_BYTE); + if (raw_val < 0) { + ret =3D raw_val; goto out_unlock; } /*result in volts*10000 =3D (val/8192)*2.5*10000*/ - val =3D ((val >> 2) * 25000) / 8192; - ret =3D sysfs_emit(buf, "%d\n", val); + *val =3D ((raw_val >> 2) * 25000) / 8192; + ret =3D 0; goto out_unlock; } =20 @@ -148,28 +156,22 @@ static ssize_t voltage_show(struct device *dev, struc= t device_attribute *da, return ret; } =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) { @@ -205,9 +207,10 @@ static int ads7871_probe(struct spi_device *spi) =20 pdata->spi =3D spi; mutex_init(&pdata->lock); - 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