From nobody Thu Apr 2 17:16:41 2026 Received: from mail-dy1-f179.google.com (mail-dy1-f179.google.com [74.125.82.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 1AB2A37419E for ; Fri, 6 Mar 2026 07:17:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772781469; cv=none; b=Zvltuh7mm5pUdJ/Q/E2MKSBVpfR+c5aIjBZqh2yFiCU2Fgq5j5VEHAsfbr+rTWqgDChCQPecS0YbMWkVKw4wjvzaQ6dyq31ZxSYzs4dANvD0r3NmrDDT0p33eFEMl9INRTilLapwkHY+QYMaO3JFWi/Qs3M3u3RVbWrL2iDADq0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772781469; c=relaxed/simple; bh=oeQmZIlz2JJz59gBI5BPetmmm+BU84jH/mvfVStshOg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Nc7alTHzgAs5RXl6wpENk33rsmm5FvBSnHFt57JQjoEvJgsefosbKktZ+xJ/rO4OnufLWKKULE3A7fyUOo1QGZmOASHfNgpssw5RhSotHh81DjbaPVomFTiDbDULdvS5CrzQFrwadtn3Gks+IfFoKm+Niioxt10lYPGN1YGfEqQ= 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=OwlPhxRa; arc=none smtp.client-ip=74.125.82.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="OwlPhxRa" Received: by mail-dy1-f179.google.com with SMTP id 5a478bee46e88-2bdfc4b191fso4642803eec.1 for ; Thu, 05 Mar 2026 23:17:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772781467; x=1773386267; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=05RQko9c+bX0Bo97buy99JJ6b/j1nxAiAkWb4nM2qMM=; b=OwlPhxRauwNMKq2mANiK8CEu4ocOym0LdpiWuAFMQkfX6PtYi8AfJhBk7eAAS+Ah64 /TktnOECkdHZrB0oNndhGpW5whMdmHQl+lua9OehK9O8YxLzWCo4KrtLkKSYEVVkhyqD izyYG99ct1L9VlvMeN6UJ5W7WgFA2VIMhXllpGInFz4lDoDvS9jX0puynBi/pxbaYQYj wVVmQ41pPlDjD778DHF2o2Aqm4YoiBTOK58k1JVG0Xb0wd0I9U0+uqjJGNTJA9lgY3R5 N5y8cfsaimXplKxXN9917y2c7cF9kYscAZmsH98weZEfyYd4HxK1T1PlgDQz5JFA9whw of3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772781467; x=1773386267; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=05RQko9c+bX0Bo97buy99JJ6b/j1nxAiAkWb4nM2qMM=; b=kxPRVA8/qMEHJr1SEDSQFW7HGuaOUhb5LDNY2ztFh8eb7HZFL9yY9dvm9/FZYf411p l6MV6xZMN2zyPu5wfX8WBnAXBJo2ej4EdjFh9pdqvWPxuz2ivHkuU/FUhs9lt2nvAwGQ hoJvAYV208oO6sWfMblMZfaobt9YHJVNGDR6amQggfIl0FF+//++z0v9qCiJHj08sPpM 7Ej0KHixiO7besh/rmvsVKwjSmzQvCnDo0F1dwbXtNWo/J5xApmnTBMfx7yuB67r4fYX 75Lqspsop1MNc4XJgg2Ogv8AF7+ift4EgT8L/fz0RWyFy79jnBy4wocMjB9rGTgLmY+v izsw== X-Forwarded-Encrypted: i=1; AJvYcCWm0YyuToeTCu8oxOWIpVEUlpM3aH2jHAiudhR8TuXLDeyAnilmoYi56SxuMGic2oIcagBAa6ROgiQC9Dk=@vger.kernel.org X-Gm-Message-State: AOJu0YwzTHj911xsxQDgUgsPM1s5Yiep6XynuplC8CIlYZ9agfjuBNsP osth/OeCgFRbre3SfJMVJcLQhUPxK5XYDy3gkz38Noo2hwpLJe8YJZM/ X-Gm-Gg: ATEYQzxy90uhYRaDa3e/eVIrsI7EFA4+IzVnhqpoHqBOFk4PRNBfJCPmq/LMLOfEmWq x1P1ib4g3188hlnuUPqh0B5TQ03c0JvIaUSOUCP/p/s+kIDZmajdB1X+FwjHh+xFuHHZmW1fGrr BRlffstT/joVyw9H/smtw0qWESENOjWIYF/T0KvbQgVsFyPck7p63p4x+rmwXJz2zfLaaJt2TQQ Bq2YHXsYmhmlT6Qz37YNkBmLVOar3XvT1TF3cQdnfMNhkOr73KJjplOBkrWR8BL9ZHu87PtiS2y 7ag7zIXh+GzLy4uoHaukxqLUc4sdO0vanvwr86jxP0vlZPmjA0aObII8ZQ0gpAK/Mfs0suDhKIE Ntq3aKWpw73JOuVMP1ExirjRzolBPlm6POv2HYo4q5obXFOFNH78X0QhDwFODDV7+kFdho6OPHw /n5z65IsOJelBVnGFHOGYyTB5Rp83KerEEx7WtPCNSURS8QdS0 X-Received: by 2002:a05:7300:d70c:b0:2be:171c:5034 with SMTP id 5a478bee46e88-2be4de8dfe3mr416221eec.3.1772781467139; Thu, 05 Mar 2026 23:17:47 -0800 (PST) Received: from [192.168.1.187] ([76.50.196.152]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2be4f96f25bsm545713eec.28.2026.03.05.23.17.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 23:17:46 -0800 (PST) From: Michael Harris Date: Thu, 05 Mar 2026 23:16:59 -0800 Subject: [PATCH v2 2/4] staging: iio: adt7316: remove shift/offset macros Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260305-adt7316-correct-macros-v2-2-3702e3841c42@gmail.com> References: <20260305-adt7316-correct-macros-v2-0-3702e3841c42@gmail.com> In-Reply-To: <20260305-adt7316-correct-macros-v2-0-3702e3841c42@gmail.com> To: Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Greg Kroah-Hartman Cc: David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , linux-iio@vger.kernel.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, Michael Harris X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1772781459; l=6748; i=michaelharriscode@gmail.com; s=20260130; h=from:subject:message-id; bh=oeQmZIlz2JJz59gBI5BPetmmm+BU84jH/mvfVStshOg=; b=Ev++nxoH1vfEiiEqCE4gFGEJhwvyysEaC6C/O/fX0YszI4ksJfMyuysgemfLswxqioxHzuv8F EbZzrLwOkzXDbkxRQcnW0NYPomM64yCd6SyFug4hezKck92zaTJrK28 X-Developer-Key: i=michaelharriscode@gmail.com; a=ed25519; pk=td/zQD3XANAhdG3Kf3mSetXiynk1Ql0eM4s0+eks5DU= Remove shift/offset macros and instead use the corresponding mask with FIELD_GET(), FIELD_PREP(), or FIELD_FIT(). In cases where an appropriate mask didn't exist, it was created. One of the shift/offset macros was used for a convoluted dynamic bitfield extraction. In its place, a helper function, adt7316_extract_ad_lsb(), was created so the shift/offset could be removed. Signed-off-by: Michael Harris --- drivers/staging/iio/addac/adt7316.c | 59 ++++++++++++++++++++++-----------= ---- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/drivers/staging/iio/addac/adt7316.c b/drivers/staging/iio/adda= c/adt7316.c index 1412808c50c76a68b5771a25c46dd3308c5cbcdb..b8b66f4dd14bb59c3d29fdd569d= 84f0dd786db9e 100644 --- a/drivers/staging/iio/addac/adt7316.c +++ b/drivers/staging/iio/addac/adt7316.c @@ -17,6 +17,7 @@ #include #include #include +#include =20 #include #include @@ -31,10 +32,11 @@ #define ADT7316_LSB_IN_TEMP_VDD 0x3 #define ADT7316_LSB_IN_TEMP_MASK 0x3 #define ADT7316_LSB_VDD_MASK 0xC -#define ADT7316_LSB_VDD_OFFSET 2 #define ADT7316_LSB_EX_TEMP_AIN 0x4 -#define ADT7316_LSB_EX_TEMP_MASK 0x3 -#define ADT7516_LSB_AIN_SHIFT 2 +#define ADT7316_LSB_EX_TEMP_AIN1_MASK GENMASK_U32(1, 0) +#define ADT7516_LSB_AIN2_MASK GENMASK_U32(3, 2) +#define ADT7516_LSB_AIN3_MASK GENMASK_U32(5, 4) +#define ADT7516_LSB_AIN4_MASK GENMASK_U32(7, 6) #define ADT7316_AD_MSB_DATA_BASE 0x6 #define ADT7316_AD_MSB_DATA_REGS 3 #define ADT7516_AD_MSB_DATA_REGS 6 @@ -46,8 +48,8 @@ #define ADT7516_MSB_AIN3 0xA #define ADT7516_MSB_AIN4 0xB #define ADT7316_DA_DATA_BASE 0x10 -#define ADT7316_DA_10_BIT_LSB_SHIFT 6 -#define ADT7316_DA_12_BIT_LSB_SHIFT 4 +#define ADT7316_DA_10_BIT_LSB_MASK GENMASK_U32(7, 6) +#define ADT7316_DA_12_BIT_LSB_MASK GENMASK_U32(7, 4) #define ADT7316_DA_MSB_DATA_REGS 4 #define ADT7316_LSB_DAC_A 0x10 #define ADT7316_MSB_DAC_A 0x11 @@ -128,7 +130,6 @@ */ #define ADT7316_DA_2VREF_CH_MASK 0xF #define ADT7316_DA_EN_MODE_MASK 0x30 -#define ADT7316_DA_EN_MODE_SHIFT 4 #define ADT7316_DA_EN_MODE_SINGLE 0x00 #define ADT7316_DA_EN_MODE_AB_CD 0x10 #define ADT7316_DA_EN_MODE_ABCD 0x20 @@ -143,7 +144,6 @@ #define ADT7316_DAC_IN_VREF 0x10 #define ADT7516_DAC_AB_IN_VREF 0x10 #define ADT7516_DAC_CD_IN_VREF 0x20 -#define ADT7516_DAC_IN_VREF_OFFSET 4 #define ADT7516_DAC_IN_VREF_MASK 0x30 =20 /* @@ -155,7 +155,7 @@ * ADT7316 value masks */ #define ADT7316_VALUE_MASK 0xfff -#define ADT7316_T_VALUE_FLOAT_OFFSET 2 +#define ADT7316_AD_MSB_MASK GENMASK_U32(9, 2) =20 /* * ADT7316 hardware constants @@ -873,11 +873,11 @@ static ssize_t adt7316_store_DAC_update_mode(struct d= evice *dev, return -EPERM; =20 ret =3D kstrtou8(buf, 10, &data); - if (ret || data > (ADT7316_DA_EN_MODE_MASK >> ADT7316_DA_EN_MODE_SHIFT)) + if (ret || !FIELD_FIT(ADT7316_DA_EN_MODE_MASK, data)) return -EINVAL; =20 dac_config =3D chip->dac_config & (~ADT7316_DA_EN_MODE_MASK); - dac_config |=3D data << ADT7316_DA_EN_MODE_SHIFT; + dac_config |=3D FIELD_PREP(ADT7316_DA_EN_MODE_MASK, data); =20 ret =3D chip->bus.write(chip->bus.client, ADT7316_DAC_CONFIG, dac_config); if (ret) @@ -1038,8 +1038,7 @@ static ssize_t adt7316_show_DAC_internal_Vref(struct = device *dev, =20 if ((chip->id & ID_FAMILY_MASK) =3D=3D ID_ADT75XX) return sysfs_emit(buf, "0x%x\n", - (chip->ldac_config & ADT7516_DAC_IN_VREF_MASK) >> - ADT7516_DAC_IN_VREF_OFFSET); + FIELD_GET(ADT7516_DAC_IN_VREF_MASK, chip->ldac_config)); return sysfs_emit(buf, "%d\n", !!(chip->ldac_config & ADT7316_DAC_IN_VREF)); } @@ -1090,6 +1089,22 @@ static IIO_DEVICE_ATTR(DAC_internal_Vref, 0644, adt7316_store_DAC_internal_Vref, 0); =20 +static u8 adt7316_extract_ad_lsb(u8 lsb, int channel) +{ + switch (channel) { + case ADT7316_AD_SINGLE_CH_EX: + return FIELD_GET(ADT7316_LSB_EX_TEMP_AIN1_MASK, lsb); + case ADT7516_AD_SINGLE_CH_AIN2: + return FIELD_GET(ADT7516_LSB_AIN2_MASK, lsb); + case ADT7516_AD_SINGLE_CH_AIN3: + return FIELD_GET(ADT7516_LSB_AIN3_MASK, lsb); + case ADT7516_AD_SINGLE_CH_AIN4: + return FIELD_GET(ADT7516_LSB_AIN4_MASK, lsb); + default: + return 0; + } +} + static ssize_t adt7316_show_ad(struct adt7316_chip_info *chip, int channel, char *buf) { @@ -1113,7 +1128,7 @@ static ssize_t adt7316_show_ad(struct adt7316_chip_in= fo *chip, if (ret) return -EIO; =20 - data =3D msb << ADT7316_T_VALUE_FLOAT_OFFSET; + data =3D FIELD_PREP(ADT7316_AD_MSB_MASK, msb); data |=3D lsb & ADT7316_LSB_IN_TEMP_MASK; break; case ADT7316_AD_SINGLE_CH_VDD: @@ -1128,8 +1143,8 @@ static ssize_t adt7316_show_ad(struct adt7316_chip_in= fo *chip, if (ret) return -EIO; =20 - data =3D msb << ADT7316_T_VALUE_FLOAT_OFFSET; - data |=3D (lsb & ADT7316_LSB_VDD_MASK) >> ADT7316_LSB_VDD_OFFSET; + data =3D FIELD_PREP(ADT7316_AD_MSB_MASK, msb); + data |=3D FIELD_GET(ADT7316_LSB_VDD_MASK, lsb); return sysfs_emit(buf, "%d\n", data); default: /* ex_temp and ain */ ret =3D chip->bus.read(chip->bus.client, @@ -1142,10 +1157,8 @@ static ssize_t adt7316_show_ad(struct adt7316_chip_i= nfo *chip, if (ret) return -EIO; =20 - data =3D msb << ADT7316_T_VALUE_FLOAT_OFFSET; - data |=3D lsb & (ADT7316_LSB_EX_TEMP_MASK << - (ADT7516_LSB_AIN_SHIFT * (channel - - (ADT7316_MSB_EX_TEMP - ADT7316_AD_MSB_DATA_BASE)))); + data =3D FIELD_PREP(ADT7316_AD_MSB_MASK, msb); + data |=3D adt7316_extract_ad_lsb(lsb, channel); =20 if ((chip->id & ID_FAMILY_MASK) =3D=3D ID_ADT75XX) return sysfs_emit(buf, "%d\n", data); @@ -1410,9 +1423,9 @@ static ssize_t adt7316_show_DAC(struct adt7316_chip_i= nfo *chip, return -EIO; =20 if (chip->dac_bits =3D=3D 12) - data =3D lsb >> ADT7316_DA_12_BIT_LSB_SHIFT; + data =3D FIELD_GET(ADT7316_DA_12_BIT_LSB_MASK, lsb); else if (chip->dac_bits =3D=3D 10) - data =3D lsb >> ADT7316_DA_10_BIT_LSB_SHIFT; + data =3D FIELD_GET(ADT7316_DA_10_BIT_LSB_MASK, lsb); data |=3D msb << offset; =20 return sysfs_emit(buf, "%d\n", data); @@ -1441,9 +1454,9 @@ static ssize_t adt7316_store_DAC(struct adt7316_chip_= info *chip, if (chip->dac_bits > 8) { lsb =3D data & ((1 << offset) - 1); if (chip->dac_bits =3D=3D 12) - lsb_reg =3D lsb << ADT7316_DA_12_BIT_LSB_SHIFT; + lsb_reg =3D FIELD_PREP(ADT7316_DA_12_BIT_LSB_MASK, lsb); else - lsb_reg =3D lsb << ADT7316_DA_10_BIT_LSB_SHIFT; + lsb_reg =3D FIELD_PREP(ADT7316_DA_10_BIT_LSB_MASK, lsb); ret =3D chip->bus.write(chip->bus.client, ADT7316_DA_DATA_BASE + channel * 2, lsb_reg); if (ret) --=20 2.53.0