From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-oi1-f170.google.com (mail-oi1-f170.google.com [209.85.167.170]) (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 7779725A655 for ; Tue, 5 May 2026 12:47:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.170 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777985231; cv=none; b=XuRxVUi8yL1bhTwzkL5fJdkX83uMPbynRhjWWbKF1lRlCrhw1QcdLINNNj2uD8UweEM9nDfBNM8gvWsHSxUp8JiALXP/Ee7P4UTpPxjZniEKf/cli98hgQR9+6n2sQpSfnNXgB0RMocmxYsEnu7GZ2XwU/lWciComN6WqI6jXSg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777985231; c=relaxed/simple; bh=ctoc8LlLlBjE0niJJEck2zd4RQOEPqXc2Twy1eMgRNI=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=p3azopu+vhDHS9AzfXVuWK569M2utLjR1QKKSTlHT2eoN6VYQCdoNA/9RdGKiXLV7wI9pwN+CqlARhS0xJMaG8CtRjNSly7MFjG7fQtBWsRhxB7HC9emOV+YKF/awe2apQ970kk0Eu5RJS5LLEj9488zoW6DC+DJocRzHn1ZHBE= 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=pToD/QrL; arc=none smtp.client-ip=209.85.167.170 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="pToD/QrL" Received: by mail-oi1-f170.google.com with SMTP id 5614622812f47-479d9b155deso1685239b6e.3 for ; Tue, 05 May 2026 05:47:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777985228; x=1778590028; 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=yVMRujASvDSHhgOv+ec0q+nHlkOG175QBTOF3/J/MAc=; b=pToD/QrLfec1lpwCh0/bnVeLNpNCYgCkZjgi/3pSC44syY3UKnc8XMz8a3aIENZ53Z mGYG1LpIUWG+/LbWC3e6MmAVqIwIU4Lbx4Nzmc9byNy6Rv1vxiTKv+m3ZVdPQbvH2oI3 dW1TFXco0ciKCBEV3XNyFsP/+35rXZ27OPPJPOe6YpIb+kW21+rHHvPTnBZjhdvmeIpQ EoCmQUmByZEQbZYUSmNdvNa5eYyh7l0diFf6ogFzJJsU35oLeTfrlbnoHyhI8n+dDpxn +dHAoWHQv/VmTfpMzStU/3nDd3UtP+mZDnU86BpPnLGbbIWoyVVFb94INwfMd7BRjx/D 5Wdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777985228; x=1778590028; 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=yVMRujASvDSHhgOv+ec0q+nHlkOG175QBTOF3/J/MAc=; b=FEofYn4HiH9M6zAbw8lk2/4f7j3UShR26hAoSZxF9/HIGKFSncvCFDkhCA+GT6kcI2 ZsciZoi/vp9mRbSHiJTVrB5FFr/FKy55vGiEdD781us/aSzYAN1+Zv8oG5uws58SCOLU Lg2Mjg0/L9WZU4IJ4g93uQ98HphCNyYSjBu7fEZ6dS6G8HEPeIAmE7IbTM6raCGzBDhU xvJPVI/PonVRtNfYCNrJiYgG6pqMHeeNeg0sM3RWgELtEpiQf4KMhdhhTO6KX2xtM3VY PE8wDxOKboMF3rx5GLQPSuHV7qe9i1trE9Yv3viy8x9OnGydFiWitkIGUVCoVHjR9bzF DcGQ== X-Forwarded-Encrypted: i=1; AFNElJ8weFRAGcuIstB6F6fZXGoyZVeGkfGZ0MngOSWnQCu/VblixBJmj9F0r1LFjwTg3deAjMzf9NxMP0KxGqo=@vger.kernel.org X-Gm-Message-State: AOJu0YxhTV3CHvtDleNZ9Xb+v4BgielbH998nBBxfblYYcVGPd9tN54i S9CHsE+YxbP0YINRc85MSEYgmqat5fc/t7nN1Ec5G3vXasasLthr9mnF0WhiI5Vi X-Gm-Gg: AeBDieva71Ca8GX7gypLLeBfLrBgfdObaXXlYTx1W1d8/2lU1A+Nq0RuyCPGG5uCzGr +wya1nnuQnkr7KUHEEinRaf4SXEzE9uUPqL07nVwB6/dfYeFsVMpRdCzoxZb1xiARRaZl/MdVso YmW8AJMQJN56L2R7+mjBi+DqJHzwg9qusOh4mzbxQqEUv1eSet3DBlZOkAJi/I+gK1kFMH3g/Ix 9j2YqGsbWtVnDAVDnqbV75siFvcgF+9QsASyRC/2hYYGTioD3mEv0EUYUL2/mfAxGkpAwiw9mq8 TvAjQbaXvFBb9yeFsahSgrEWr06KK9VzlbDRFzOqcdp/W+ZtByfgbxaDz3oTWX5+WGXJ6oYG+lS 2vOx85U4YZwA6uyhUXYNxdctIG0oVBxmgOzOoEp/OOX41W7U3tLr3hiHTjx8hXflFTcvL6FJqLS ZDcAa6rG5O3P8fRj00q6eATJa2PbduS7ufyq7AmaIdYbPLmfhHH8myZX+MKsFYPux90UBsdRsuc eDKy0Y= X-Received: by 2002:a05:6808:1644:b0:479:d48f:d6e0 with SMTP id 5614622812f47-47e25c66b68mr1285304b6e.19.1777985228094; Tue, 05 May 2026 05:47:08 -0700 (PDT) Received: from linuxescape.lan (23-88-128-2.fttp.usinternet.com. [23.88.128.2]) by smtp.gmail.com with ESMTPSA id 5614622812f47-47c763b32dbsm8596627b6e.3.2026.05.05.05.47.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 May 2026 05:47:07 -0700 (PDT) From: Maxwell Doose To: jic23@kernel.org Cc: David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , Andy Shevchenko , linux-iio@vger.kernel.org (open list:IIO SUBSYSTEM AND DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v3] iio: imu: kmx61: Use guard(mutex)() family over manual locking Date: Tue, 5 May 2026 07:47:06 -0500 Message-ID: <20260505124706.9862-1-m32285159@gmail.com> X-Mailer: git-send-email 2.54.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Include linux/cleanup.h to take advantage of new macros. Replace manual mutex_lock() and mutex_unlock() calls across the file with guard(mutex)() and scoped_guard() where appropriate. This will help modernize the driver with up-to-date functions/macros. Remove now redundant gotos and ret variables, as the new RAII macros make them unneeded. Signed-off-by: Maxwell Doose --- v2: - Remove redundant blank line per Andy. - Put kmx61_set_mode() function call in kmx61_runtime_suspend() on one line per Andy. v3: - Add dedicated scope for guards. drivers/iio/imu/kmx61.c | 82 +++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 53 deletions(-) drivers/iio/imu/kmx61.c | 88 ++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 55 deletions(-) diff --git a/drivers/iio/imu/kmx61.c b/drivers/iio/imu/kmx61.c index 3cd91d8a89ee..a112e291c064 100644 --- a/drivers/iio/imu/kmx61.c +++ b/drivers/iio/imu/kmx61.c @@ -7,6 +7,7 @@ * IIO driver for KMX61 (7-bit I2C slave address 0x0E or 0x0F). */ +#include #include #include #include @@ -783,7 +784,7 @@ static int kmx61_read_raw(struct iio_dev *indio_dev, struct kmx61_data *data = kmx61_get_data(indio_dev); switch (mask) { - case IIO_CHAN_INFO_RAW: + case IIO_CHAN_INFO_RAW: { switch (chan->type) { case IIO_ACCEL: base_reg = KMX61_ACC_XOUT_L; @@ -794,28 +795,24 @@ static int kmx61_read_raw(struct iio_dev *indio_dev, default: return -EINVAL; } - mutex_lock(&data->lock); + guard(mutex)(&data->lock); ret = kmx61_set_power_state(data, true, chan->address); - if (ret) { - mutex_unlock(&data->lock); + if (ret) return ret; - } ret = kmx61_read_measurement(data, base_reg, chan->scan_index); if (ret < 0) { kmx61_set_power_state(data, false, chan->address); - mutex_unlock(&data->lock); return ret; } *val = sign_extend32(ret >> chan->scan_type.shift, chan->scan_type.realbits - 1); ret = kmx61_set_power_state(data, false, chan->address); - - mutex_unlock(&data->lock); if (ret) return ret; return IIO_VAL_INT; + } case IIO_CHAN_INFO_SCALE: switch (chan->type) { case IIO_ACCEL: @@ -830,17 +827,17 @@ static int kmx61_read_raw(struct iio_dev *indio_dev, default: return -EINVAL; } - case IIO_CHAN_INFO_SAMP_FREQ: + case IIO_CHAN_INFO_SAMP_FREQ: { if (chan->type != IIO_ACCEL && chan->type != IIO_MAGN) return -EINVAL; - mutex_lock(&data->lock); - ret = kmx61_get_odr(data, val, val2, chan->address); - mutex_unlock(&data->lock); + scoped_guard(mutex, &data->lock) + ret = kmx61_get_odr(data, val, val2, chan->address); if (ret) return -EINVAL; return IIO_VAL_INT_PLUS_MICRO; } + } return -EINVAL; } @@ -852,26 +849,24 @@ static int kmx61_write_raw(struct iio_dev *indio_dev, struct kmx61_data *data = kmx61_get_data(indio_dev); switch (mask) { - case IIO_CHAN_INFO_SAMP_FREQ: + case IIO_CHAN_INFO_SAMP_FREQ: { if (chan->type != IIO_ACCEL && chan->type != IIO_MAGN) return -EINVAL; - mutex_lock(&data->lock); - ret = kmx61_set_odr(data, val, val2, chan->address); - mutex_unlock(&data->lock); - return ret; - case IIO_CHAN_INFO_SCALE: + guard(mutex)(&data->lock); + return kmx61_set_odr(data, val, val2, chan->address); + } + case IIO_CHAN_INFO_SCALE: { switch (chan->type) { case IIO_ACCEL: if (val != 0) return -EINVAL; - mutex_lock(&data->lock); - ret = kmx61_set_scale(data, val2); - mutex_unlock(&data->lock); - return ret; + guard(mutex)(&data->lock); + return kmx61_set_scale(data, val2); default: return -EINVAL; } + } default: return -EINVAL; } @@ -945,28 +940,25 @@ static int kmx61_write_event_config(struct iio_dev *indio_dev, if (state && data->ev_enable_state) return 0; - mutex_lock(&data->lock); + guard(mutex)(&data->lock); if (!state && data->motion_trig_on) { data->ev_enable_state = false; - goto err_unlock; + return ret; } ret = kmx61_set_power_state(data, state, KMX61_ACC); if (ret < 0) - goto err_unlock; + return ret; ret = kmx61_setup_any_motion_interrupt(data, state); if (ret < 0) { kmx61_set_power_state(data, false, KMX61_ACC); - goto err_unlock; + return ret; } data->ev_enable_state = state; -err_unlock: - mutex_unlock(&data->lock); - return ret; } @@ -1020,11 +1012,11 @@ static int kmx61_data_rdy_trigger_set_state(struct iio_trigger *trig, struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig); struct kmx61_data *data = kmx61_get_data(indio_dev); - mutex_lock(&data->lock); + guard(mutex)(&data->lock); if (!state && data->ev_enable_state && data->motion_trig_on) { data->motion_trig_on = false; - goto err_unlock; + return ret; } if (data->acc_dready_trig == trig || data->motion_trig == trig) @@ -1034,7 +1026,7 @@ static int kmx61_data_rdy_trigger_set_state(struct iio_trigger *trig, ret = kmx61_set_power_state(data, state, device); if (ret < 0) - goto err_unlock; + return ret; if (data->acc_dready_trig == trig || data->mag_dready_trig == trig) ret = kmx61_setup_new_data_interrupt(data, state, device); @@ -1042,7 +1034,7 @@ static int kmx61_data_rdy_trigger_set_state(struct iio_trigger *trig, ret = kmx61_setup_any_motion_interrupt(data, state); if (ret < 0) { kmx61_set_power_state(data, false, device); - goto err_unlock; + return ret; } if (data->acc_dready_trig == trig) @@ -1051,8 +1043,6 @@ static int kmx61_data_rdy_trigger_set_state(struct iio_trigger *trig, data->mag_dready_trig_on = state; else data->motion_trig_on = state; -err_unlock: - mutex_unlock(&data->lock); return ret; } @@ -1195,19 +1185,17 @@ static irqreturn_t kmx61_trigger_handler(int irq, void *p) else base = KMX61_MAG_XOUT_L; - mutex_lock(&data->lock); + guard(mutex)(&data->lock); iio_for_each_active_channel(indio_dev, bit) { ret = kmx61_read_measurement(data, base, bit); if (ret < 0) { - mutex_unlock(&data->lock); - goto err; + iio_trigger_notify_done(indio_dev->trig); + return IRQ_HANDLED; } buffer[i++] = ret; } - mutex_unlock(&data->lock); iio_push_to_buffers(indio_dev, buffer); -err: iio_trigger_notify_done(indio_dev->trig); return IRQ_HANDLED; @@ -1419,22 +1407,16 @@ static void kmx61_remove(struct i2c_client *client) iio_trigger_unregister(data->motion_trig); } - mutex_lock(&data->lock); + guard(mutex)(&data->lock); kmx61_set_mode(data, KMX61_ALL_STBY, KMX61_ACC | KMX61_MAG, true); - mutex_unlock(&data->lock); } static int kmx61_suspend(struct device *dev) { - int ret; struct kmx61_data *data = i2c_get_clientdata(to_i2c_client(dev)); - mutex_lock(&data->lock); - ret = kmx61_set_mode(data, KMX61_ALL_STBY, KMX61_ACC | KMX61_MAG, - false); - mutex_unlock(&data->lock); - - return ret; + guard(mutex)(&data->lock); + return kmx61_set_mode(data, KMX61_ALL_STBY, KMX61_ACC | KMX61_MAG, false); } static int kmx61_resume(struct device *dev) @@ -1453,13 +1435,9 @@ static int kmx61_resume(struct device *dev) static int kmx61_runtime_suspend(struct device *dev) { struct kmx61_data *data = i2c_get_clientdata(to_i2c_client(dev)); - int ret; - mutex_lock(&data->lock); - ret = kmx61_set_mode(data, KMX61_ALL_STBY, KMX61_ACC | KMX61_MAG, true); - mutex_unlock(&data->lock); - - return ret; + guard(mutex)(&data->lock); + return kmx61_set_mode(data, KMX61_ALL_STBY, KMX61_ACC | KMX61_MAG, true); } static int kmx61_runtime_resume(struct device *dev) -- 2.54.0