From nobody Fri Jun 12 03:08:22 2026 Received: from mail-vs1-f42.google.com (mail-vs1-f42.google.com [209.85.217.42]) (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 ED1353DBD5E for ; Tue, 21 Apr 2026 19:09:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776798566; cv=none; b=lClA9FrS9/zu1obQyaAhoPML93BbZ5LRlfsSFQoAacPROWPDamY8iAVnyQGsUoTMd7UyDc+Ieq3qM8/POrn6xlTCnD8jIAIglbty/cd6Z87ANB2pZCLYqEWsM9qEXlkaYr8XuVy9+k8kYKoPCb9vz8UMBzoW1La6+MmGqGL/fW4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776798566; c=relaxed/simple; bh=Cxajfpwj1FxUEXseN/wkwg/G8tMpTeDahSG4GUYNoX8=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=b2UY5FJBi/v0ohmnNRSAbU93hpXO5KraF0rGGgHidEpZYIfOljsVN3jFthVoMFakS3nrj3yV1FeqsEQ5kC7qOZ3wN9LXblY/qrplIEOpDh+nsfCGDDEMAvu80YvyXf707M6UsZdnM31l0imDaeGJW2MD9M/3ycYP0LaN4YJPh7o= 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=EMZkbzCH; arc=none smtp.client-ip=209.85.217.42 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="EMZkbzCH" Received: by mail-vs1-f42.google.com with SMTP id ada2fe7eead31-60fbbac2938so1905420137.1 for ; Tue, 21 Apr 2026 12:09:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776798564; x=1777403364; 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=p2lthb7hspRQdClr5z+ClimHJxMC7lWM10n6ZXy/Zv0=; b=EMZkbzCH9nIbS3Ns5YHVS2nE4JRekvIXzbMSkUwrAEwwz+dLqa7HUQ8iWZhrKRZYgI 2dXNxujlstQeHAKP8AYYPcMGiJQPsiQMPKflIyMhlsR+y5NZOqEJt5eOlSMGxkuRQ2hU 7Jn30LFCBClB5+ppCDUGIynKrFG9RXBRd9SOEPQuyGutidZYWN/cUT9PY1C+UwtoF6pK 2hhfJyE/MrPU25bRZY4kjCZaJIxCQw9pnCCSlrWmSOjSsdwUEH7aJp+mB+RINGTPo+4A zXDxWC2ab42deEzuNs1sIcs90CwWJ01eyiNRoWefKw8/NE0kqO7SQ378B7Pu+Gt+v2x/ Z9mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776798564; x=1777403364; 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=p2lthb7hspRQdClr5z+ClimHJxMC7lWM10n6ZXy/Zv0=; b=Jk9Ec25dQZRnYjQISBA5W3j66b2/UHiYU0ycEI9Lx+wLHDOxuZxFHzVxfoLxCeLFAr rgfTlKBZe0KkqNfnggZAKf4WvkAWlEOpSZtr8F12wm6jcKQ3kJEpWjF4Fmr5Ci0Axk3j Kwt6Vbep7zLiq7srYvaoOzhG/DToJFEmcVtB7kGoDBss2bMCSi0mAOl/0O1hMVxVrdsw a6asw276on8sPSCep94el9LN+Xefu/emCWf9dRBVtqP1HaQQO6VanLyxwPBHxHDSlODF 0kH2stDLbLznh1XXbzuYChp4JohBMGE3WnkybymbPFmlJoy/EGroVQZEjtdekr0TU3VD CQfQ== X-Forwarded-Encrypted: i=1; AFNElJ/QdXoXlTIwb3BJgUfTpgByMs5YiKAZVKeWj/2jhiz/qhVHY1TReQ8JX7ZrWljxLCToj5oz3mlOKpYkFNE=@vger.kernel.org X-Gm-Message-State: AOJu0YxpYmtbDhIwfD5dAU78i/l5XXw0Jn3dyFuel4ISSnrEqXETe7aa 9cTn5rv3+tRlgKIfL+Kx9uKe3GqoaEnFwinW6XNU25XQWszvcCIjXOg6 X-Gm-Gg: AeBDievXgPGnN4nDEgiS/U2ke155VdRiDargLaUXbnKmwfBOx2Hu7to0JsltEalqXJA 7JKDKK2mkTO6b9nHiFzbodGI0DMBIcZU5DDNL3YsPMMWZXMLTSyDpcM7W0T6awEAuxH/tkQh86t 7E8USwWsaGeZiSx2vfUGWUo7BtKu5nF75XIWdglU7sOKEsr7RuRGIWc9P6Q4qZGJQh+1kylZhdj F3RroiuEmeu+CEetcN/+PQS4TxD6ru0qjf5ZfSLeu+myX1Hb1kqk8eBhXDC8oHWU2QSrZhNQONj QAsFc2Zornp3Hi3zGVlUvWI4jBFBEwMK3iMR9M5m+UdrvvU9TidGUDqA1VOUBruI+frdqFT21jo 2rCHTsE4q45j5waCdrwCFn7i5iK2lE5gMkQmwf8esku35TTMbG5kWSnrXqCTuQ+CqumdlBEbXAq BVK1f8i6rxen+o0DrSMUEAQW3olFDzP8RLfWGDR//0dFP11nM= X-Received: by 2002:a05:6102:5e94:b0:610:1239:f6d7 with SMTP id ada2fe7eead31-616f772efecmr8777622137.18.1776798563733; Tue, 21 Apr 2026 12:09:23 -0700 (PDT) Received: from localhost.localdomain ([177.72.23.165]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-61747cb52c9sm7009613137.9.2026.04.21.12.09.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Apr 2026 12:09:22 -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 v5] iio: adc: ad7280a: replace mutex_lock() with guard(mutex) Date: Tue, 21 Apr 2026 16:08:55 -0300 Message-ID: <20260421190855.24132-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. In ad7280a_write_thresh(), replace break with return on error. Suggested-by: Jonathan Cameron Signed-off-by: Matheus Giarola --- v5: - replace braces with scoped_guard() in ad7280_show_balance_timer() - replace breaks with return on error in ad7280a_write_thresh() 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 | 43 ++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/drivers/iio/adc/ad7280a.c b/drivers/iio/adc/ad7280a.c index f50e2b3121bf..156309d2449c 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,10 @@ 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, + scoped_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 +550,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 +735,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 */ @@ -748,7 +746,7 @@ static int ad7280a_write_thresh(struct iio_dev *indio_d= ev, ret =3D ad7280_write(st, AD7280A_DEVADDR_MASTER, addr, 1, value); if (ret) - break; + return ret; st->cell_threshhigh =3D value; break; case IIO_EV_DIR_FALLING: @@ -756,12 +754,11 @@ static int ad7280a_write_thresh(struct iio_dev *indio= _dev, ret =3D ad7280_write(st, AD7280A_DEVADDR_MASTER, addr, 1, value); if (ret) - break; + return ret; st->cell_threshlow =3D value; break; default: - ret =3D -EINVAL; - goto err_unlock; + return -EINVAL; } break; case IIO_TEMP: @@ -773,7 +770,7 @@ static int ad7280a_write_thresh(struct iio_dev *indio_d= ev, ret =3D ad7280_write(st, AD7280A_DEVADDR_MASTER, addr, 1, value); if (ret) - break; + return ret; st->aux_threshhigh =3D value; break; case IIO_EV_DIR_FALLING: @@ -781,23 +778,17 @@ static int ad7280a_write_thresh(struct iio_dev *indio= _dev, ret =3D ad7280_write(st, AD7280A_DEVADDR_MASTER, addr, 1, value); if (ret) - break; + return ret; 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; + return 0; } =20 static irqreturn_t ad7280_event_handler(int irq, void *private) @@ -884,14 +875,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 +889,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