From nobody Sat Jun 20 17:34:51 2026 Received: from mail-dy1-f175.google.com (mail-dy1-f175.google.com [74.125.82.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 9658017555 for ; Sun, 12 Apr 2026 15:48:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776008890; cv=none; b=bjeZY+2AsjL5diacr8QOso5g6fhfZMIPDHttx+7UR465VjUIU4zr1XZWfFcEknFGgYVEyGEtGSvMOMuB/D0lwnr76/ZCpNr2sWujfTnseAysyb79/Q2u/9R4G464cM7tycG9CODfHbEF4w7m21EdIqY91FoiVg0Rh2zgj1+q+ZI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776008890; c=relaxed/simple; bh=UVmeS6iniJduqFpUJAvxPU8hRBQo/JsjZhnTW4jDMlA=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=nSVVPiTjEdS4SYROdqYHfTQdg5XZXq93qLhmCJ8y9QL5vsNBtlbw/HGS6+/ICvQxbNB6kGOu5I6QcnTFV7ha/WpnWLB+jY11k6w6AmR3rUm++eJQsomPwcNDICrtqv4UNuocNSs9TUxwszDaPz1eDLa++ZilUP4UhcWsX+l0DA4= 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=nU6OHp8B; arc=none smtp.client-ip=74.125.82.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="nU6OHp8B" Received: by mail-dy1-f175.google.com with SMTP id 5a478bee46e88-2d8ffdc31d0so403056eec.0 for ; Sun, 12 Apr 2026 08:48:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776008889; x=1776613689; 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; bh=kUbQdvdf8km/rzPCn3acJIK+ibdfhCrcGrCDLCQq7kM=; b=nU6OHp8BpvuSL1wE2MRWeuESuQjIScbZWQUqNjgaxZyHOdWF6CphNzlvusYXf5yCwl ZU8ZObWApyrQIMJCw80gSDgl+qNIz1XSxiCA9UBhOvY8XEURJ5idcwULMbmQKRwn1Dwz pDUe5jIVLDEvsWXJiqew58HSwbfOEvfwcuZdfuRgzH9j8jwbasOM2kWFigoToCxD1OWe ezvGr4Y/ZPFl/iSAnbE78/M58DDbZZ0P+8iXijkXSt1+UTaQdhNvPyy8rOE9EYFYghSq iS5qvI0kSL7ovnDvWB/2wyZB+UIGKTBBkbwSnIcirhz0M3ZQ8NaoGgJHoLWJ5gLOt+83 EOtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776008889; x=1776613689; 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; bh=kUbQdvdf8km/rzPCn3acJIK+ibdfhCrcGrCDLCQq7kM=; b=Rk5ESs1Qw7QEmrduzkM91cxTRlEtgMDJK9hNlE9NXj+g+M5GrseIl84qjraaQRBhx6 FwVP2W3CHpklUd3AClrY3XtOYvkOfCLYH6Gw5mMm9Mlhx8ph0PZsq4peYmMhlQ/MKX4S wSgRc1/mrtWuZUzruI5lMTDgagn/NGkKC+k+rzCHGdn495FTeyTcVHl0wee57GUqQt4y UZuDU8VIwGvwd1yZDxLzQvaxmQY+WLzhUIJgD9rh8H06wqVoMhjI1mxjIqzmyKX/3FEO oSVs+2VjxCztCp6nK4oTXpIA1JZKBuxy5xJU8aO/vzkmt09EeRoUYUb6wYpRQkxgjNsR Ew4A== X-Forwarded-Encrypted: i=1; AFNElJ8r0+Qv3jsFuJMEt+ojF+csF1z7nOoyYqakAyKedRy4JygNnGammQIbF3LZjB45cr3qn9yWu58glopCeQI=@vger.kernel.org X-Gm-Message-State: AOJu0YxPAKQvuRwicXTxCZicJEokupCHupdmhhP4vmrRMJhcvIBrEMIi JcAx8Yyy7LOxa+K97gs7A5TnLixKb5U1jETrVaTt9+0p/PKwKEC6BWmMVt4BxN47OCA= X-Gm-Gg: AeBDiev3RVf5it3obQPRJPnP9iG1A0M8oJst9HKo9jGNkoL+Y/wJhpZQ3tZvCzYq2FQ t5VdL/noHjrMHfk9R3zK3y/ccKCwnBVlM3hhSA4F/ZOCgpf5zQiTYsvI9mkv2r2HL9s9+iTLS1p iZBCpK3MgYcMrtqA2nU5gZv/ne0l1kV46KuvRCgj60Y9Bz/ykaw25jY7l+uZ1GlBIziEuSC6nyf AjC80EYSF17X3jgFQp5rienUTrCMP9wkTwx3vss740KZKa3rOp3Q7dbpfO1d3Wd0og90E3sfy4U v7DCwvKEtwyWKcn/OEZWpQrKIvViFFbGWDo/IfTg8LfrhEtkIBZPkZopkZ3t8aqiL6dSqqNA41o qZRL6NQugsa8SnObVqPJlx93UEEzUFtwwVw2dJMnz3eAYL9q+JlNSFHrM83zKdzTgQeCYAAPI/A ccr7TfB1AZJIavcyfynIl1tNAml8EgqQGS95sL X-Received: by 2002:a05:693c:2c8d:b0:2d1:93b8:bc81 with SMTP id 5a478bee46e88-2d5893632cfmr5331946eec.31.1776008888590; Sun, 12 Apr 2026 08:48:08 -0700 (PDT) Received: from localhost.localdomain ([2804:14c:38:8c29:c41:ee70:537c:acf5]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2d5627c44fcsm13272910eec.23.2026.04.12.08.48.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Apr 2026 08:48:07 -0700 (PDT) From: Matheus Giarola X-Google-Original-From: Matheus Giarola To: lars@metafoo.de, Michael.Hennerich@analog.com, jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, matheusgiarola@usp.br, arthurpilone@usp.br, davidbtadokoro@ime.usp.br Subject: [PATCH v4] iio: adc: ad7280a: replace mutex_lock() with guard(mutex) Date: Sun, 12 Apr 2026 12:47:48 -0300 Message-ID: <20260412154748.24937-1-matheusgiarola@usp.br> X-Mailer: git-send-email 2.47.3 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" Use guard(mutex) instead of mutex_lock()/mutex_unlock(), ensuring the mutex is released automatically when leaving the function scope. The change improves error handling and avoids issues such as missing unlocks. It also simplifies the code by removing 'err_unlock' label and several mutex_unlock() calls. As suggested, in ad7280_read_raw(), wrap the IIO_CHAN_INFO_RAW case in braces, providing a scope for the implicit variable declared by guard(mutex). Also, limit guard(mutex) scope in ad7280_show_balance_timer() to keep it locked just when necessary. Suggested-by: Jonathan Cameron Signed-off-by: Matheus Giarola --- v4: - limit guard(mutex) scope in ad7280_show_balance_timer() v3: - correct v2 patch tags v2: - fix missing scope in ad7280_read_raw() by wrapping IIO_CHAN_INFO_RAW case in braces so as to fix build errors. drivers/iio/adc/ad7280a.c | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/drivers/iio/adc/ad7280a.c b/drivers/iio/adc/ad7280a.c index ba12a3796e2b..f3cbf8810daa 100644 --- a/drivers/iio/adc/ad7280a.c +++ b/drivers/iio/adc/ad7280a.c @@ -496,7 +496,7 @@ static ssize_t ad7280_store_balance_sw(struct iio_dev *= indio_dev, devaddr =3D chan->address >> 8; ch =3D chan->address & 0xFF; =20 - mutex_lock(&st->lock); + guard(mutex)(&st->lock); if (readin) st->cb_mask[devaddr] |=3D BIT(ch); else @@ -505,7 +505,6 @@ static ssize_t ad7280_store_balance_sw(struct iio_dev *= indio_dev, ret =3D ad7280_write(st, devaddr, AD7280A_CELL_BALANCE_REG, 0, FIELD_PREP(AD7280A_CELL_BALANCE_CHAN_BITMAP_MSK, st->cb_mask[devaddr])); - mutex_unlock(&st->lock); =20 return ret ? ret : len; } @@ -519,10 +518,11 @@ static ssize_t ad7280_show_balance_timer(struct iio_d= ev *indio_dev, unsigned int msecs; int ret; =20 - mutex_lock(&st->lock); - ret =3D ad7280_read_reg(st, chan->address >> 8, + { + guard(mutex)(&st->lock); + ret =3D ad7280_read_reg(st, chan->address >> 8, (chan->address & 0xFF) + AD7280A_CB1_TIMER_REG); - mutex_unlock(&st->lock); + } =20 if (ret < 0) return ret; @@ -551,11 +551,10 @@ static ssize_t ad7280_store_balance_timer(struct iio_= dev *indio_dev, if (val > 31) return -EINVAL; =20 - mutex_lock(&st->lock); + guard(mutex)(&st->lock); ret =3D ad7280_write(st, chan->address >> 8, (chan->address & 0xFF) + AD7280A_CB1_TIMER_REG, 0, FIELD_PREP(AD7280A_CB_TIMER_VAL_MSK, val)); - mutex_unlock(&st->lock); =20 return ret ? ret : len; } @@ -737,7 +736,7 @@ static int ad7280a_write_thresh(struct iio_dev *indio_d= ev, if (val2 !=3D 0) return -EINVAL; =20 - mutex_lock(&st->lock); + guard(mutex)(&st->lock); switch (chan->type) { case IIO_VOLTAGE: value =3D ((val - 1000) * 100) / 1568; /* LSB 15.68mV */ @@ -760,8 +759,7 @@ static int ad7280a_write_thresh(struct iio_dev *indio_d= ev, st->cell_threshlow =3D value; break; default: - ret =3D -EINVAL; - goto err_unlock; + return -EINVAL; } break; case IIO_TEMP: @@ -785,18 +783,12 @@ static int ad7280a_write_thresh(struct iio_dev *indio= _dev, st->aux_threshlow =3D value; break; default: - ret =3D -EINVAL; - goto err_unlock; + return -EINVAL; } break; default: - ret =3D -EINVAL; - goto err_unlock; + return -EINVAL; } - -err_unlock: - mutex_unlock(&st->lock); - return ret; } =20 @@ -884,14 +876,13 @@ static int ad7280_read_raw(struct iio_dev *indio_dev, int ret; =20 switch (m) { - case IIO_CHAN_INFO_RAW: - mutex_lock(&st->lock); + case IIO_CHAN_INFO_RAW: { + guard(mutex)(&st->lock); if (chan->address =3D=3D AD7280A_ALL_CELLS) ret =3D ad7280_read_all_channels(st, st->scan_cnt, NULL); else ret =3D ad7280_read_channel(st, chan->address >> 8, chan->address & 0xFF); - mutex_unlock(&st->lock); =20 if (ret < 0) return ret; @@ -899,6 +890,7 @@ static int ad7280_read_raw(struct iio_dev *indio_dev, *val =3D ret; =20 return IIO_VAL_INT; + } case IIO_CHAN_INFO_SCALE: if ((chan->address & 0xFF) <=3D AD7280A_CELL_VOLTAGE_6_REG) *val =3D 4000; --=20 2.47.3