From nobody Sun Feb 8 03:58:03 2026 Received: from mail-ua1-f52.google.com (mail-ua1-f52.google.com [209.85.222.52]) (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 5D1A133B96B for ; Sun, 18 Jan 2026 15:44:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768751097; cv=none; b=k2M1p9TRnGru7cR4r4/msQdfpGPKKFxlfDyUWGRRWMsCQuqNRkV1mj2WCjmfsNl+grEmnU+cVuRt5lmTmvlmyBKp27cFQC5zQg4avBl2waLqfmH5QrzbKhvIWvRlzlkZPFxS8LAv1Q+YnYYjd+71fpNQXJs9JtDJOre3VVF/RZE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768751097; c=relaxed/simple; bh=V5GRFxOK+CqYOqKjTag3VDmILaHUud2L5Y/Wvb3b2ns=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ah61e8Eq+RPsWC213wgiVuHPuI05R3jb1jgBATCpWeWD4rn9ZYkd6h4gl+W0W1nA7Prev8YLAp4AnH1XGhTstIhIrvLkVCXahgI9TP/8gvJIOHVOEJ+lKBSr/g6HB1illfjpGEavw5eq/7imcxULJU/QMoEpcwMEe50Xkshmop4= 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=DEaIzD2b; arc=none smtp.client-ip=209.85.222.52 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="DEaIzD2b" Received: by mail-ua1-f52.google.com with SMTP id a1e0cc1a2514c-9371f6f2813so1011480241.0 for ; Sun, 18 Jan 2026 07:44:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768751094; x=1769355894; 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=Y6CY6gggGU9QCCuY3V8jLvoji+Ol4m8zqn3+Qzz+4w0=; b=DEaIzD2bhdioW2brvbkMlA0FY30Wbnpc37xCzmeNtheqhIkixGeLubWOL3CHY0gLpy YOftSldJgxUsoQGqaQNcMOtHT31FUraL5cx6K4OQY9EtK4utxSpoDJKizomjHAhtezmV WD8Nt2y7H0/G/1LKL+zPdJ4WJCGshjNiwqh24MjBAhbnTkfMwTkPDwPYdz6zZYa9lqo1 GdwyFMw8f20GwRw/6e4SVzzHoUZwiBlE5yP7qopuC5JvI8YJr43LfCzbUsbJknhErmC0 Nz1nTBHOWz2bTqX6kY6Y6hBSt/OuPQdcKa6xO2aF5ZjwhHiOtXcvQKHnV4Vswkb00pNS S+tw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768751094; x=1769355894; 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=Y6CY6gggGU9QCCuY3V8jLvoji+Ol4m8zqn3+Qzz+4w0=; b=VuUINpkqvm5rMCPUDeQTEyWa9Gd8g4bnl6QjPchtJFm/uqpqcNm9jH07kUyEyPLzx2 lbtWTYqu2X52tdXz4P14gn+83yuGujoj8Q+ImPmfnePGCvIZ51izKMVrKgIhwQ28r/mi zo/Wrd73WYNhHQn96JTQXqpQlSHk+NcKZC7gnIOSZI5iJ8/+G3hUe5JLF3CNishKq5Oj nTwEU/imWMJIuZ5v04YoAbr1OkmPgO6lAh88j/ZoczF/NqJYIHtl6xIuRFKaDxW2I8Kx 4YyAXAsVa7kFwVO2cIWs8zdcbMsTwTZy3ufXczHHN7CpQbgIL6cu07MCgBon5ULrvSua 77Cg== X-Forwarded-Encrypted: i=1; AJvYcCUmimMqqlNY0mKuYJX6FweT87XTVVpdBGIvuNDyXoXB+AbesRcVLykhsg5/slZmQXwqknyb2XpGxDtuiws=@vger.kernel.org X-Gm-Message-State: AOJu0YwgAFAk6w9lueT7FJ4335tPRKM93FPPYb/YigpHuPqD8SponwTM jAHR5j59/YD+6tNpP+415r6kdarcuTuzvUxOa2WkIgc1oBv+uuKTXK6q X-Gm-Gg: AY/fxX6bKMBDNDxlueNano/pE55JkJqtF06XTsL3ydX2XVn7SE/lDbWXeg4RbqZdQFb HB2uRIrRRH/hu9X2hvmWP0wiUcr6cC0Nkj4oCEihU4tkuLApzxqxNWfl4Nb6J6XLlJJv7WXuReN Ny0I34NEHjfPSZgiQ56G/KU/CbMaDG8jqhBLQV6fRl6j6RaDekb1HoEjiTx91aF8B7uaUhkL/W4 R6nykoalegxxZFlnKveviUAhUTbsJu43QXZSe3l7vAbXX/Z5SGZ+avWJIirOTD2rypxotKixqR5 4K8Aw1f8ZZUCAoXvgz9HZ3A+uaIFIhkLCkniOciimXsRp36V23ctyvbwfj0uUDgJtrg7RR5xzWh EDfCahyl6K1QHE/9O0vDt21cdxelWbn9Wa2XGHgjXkRLkIZ8G5KxWDYRNODth1RB/dm8Lzzul0B Hfryp62DtE/wMB X-Received: by 2002:a05:6102:5109:b0:5d5:f544:a88e with SMTP id ada2fe7eead31-5f1a71b9607mr2391425137.35.1768751094087; Sun, 18 Jan 2026 07:44:54 -0800 (PST) Received: from [192.168.100.253] ([2800:bf0:82:11a2:7ac4:1f2:947b:2b6]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-5f1a6d3ca2esm2832731137.10.2026.01.18.07.44.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 07:44:53 -0800 (PST) From: Kurt Borja Date: Sun, 18 Jan 2026 10:44:28 -0500 Subject: [PATCH v4 1/7] iio: core: Add and export __iio_dev_mode_lock() 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: <20260118-lock-impr-v4-1-6c8d0aee8ed2@gmail.com> References: <20260118-lock-impr-v4-0-6c8d0aee8ed2@gmail.com> In-Reply-To: <20260118-lock-impr-v4-0-6c8d0aee8ed2@gmail.com> To: Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Benson Leung , Antoniu Miclaus , Gwendal Grignou , Shrikant Raskar , Per-Daniel Olsson Cc: David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Guenter Roeck , Jonathan Cameron , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Kurt Borja X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2874; i=kuurtb@gmail.com; h=from:subject:message-id; bh=V5GRFxOK+CqYOqKjTag3VDmILaHUud2L5Y/Wvb3b2ns=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDJk5/z8sc/oo426zjDHXauYmqYyS97EeL/jsHxnmBZ97X znPpHBxRykLgxgXg6yYIkt7wqJvj6Ly3vodCL0PM4eVCWQIAxenAExEO5GR4Unwj3N67c++vLfs nMpTKrZhudQD4c9pEl/YIiInteix+TD8Mzy+0LlwaTZz3fKHAl2zj+8Jum72PuukhPjN5mm/7Z9 lcwIA X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Add unconditional wrappers around the internal IIO mode lock. As mentioned in the documentation, this is not meant to be used by drivers, instead this will aid in the eventual addition of cleanup classes around conditional locks. Reviewed-by: David Lechner Reviewed-by: Nuno S=C3=A1 Signed-off-by: Kurt Borja --- drivers/iio/industrialio-core.c | 30 ++++++++++++++++++++++++++++++ include/linux/iio/iio.h | 3 +++ 2 files changed, 33 insertions(+) diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-cor= e.c index f69deefcfb6f..9693a6bb3917 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -2171,6 +2171,36 @@ int __devm_iio_device_register(struct device *dev, s= truct iio_dev *indio_dev, } EXPORT_SYMBOL_GPL(__devm_iio_device_register); =20 +/** + * __iio_dev_mode_lock - Locks the current IIO device mode + * @indio_dev: the iio_dev associated with the device + * + * If the device is either in direct or buffer mode, it's guaranteed to st= ay + * that way until __iio_dev_mode_unlock() is called. + * + * This function is not meant to be used directly by drivers to protect in= ternal + * state; a driver should have it's own mechanisms for that matter. + * + * There are very few cases where a driver actually needs to lock the curr= ent + * mode unconditionally. It's recommended to use iio_device_claim_direct()= or + * iio_device_claim_buffer_mode() pairs or related helpers instead. + */ +void __iio_dev_mode_lock(struct iio_dev *indio_dev) +{ + mutex_lock(&to_iio_dev_opaque(indio_dev)->mlock); +} +EXPORT_SYMBOL_GPL(__iio_dev_mode_lock); + +/** + * __iio_dev_mode_unlock - Unlocks the current IIO device mode + * @indio_dev: the iio_dev associated with the device + */ +void __iio_dev_mode_unlock(struct iio_dev *indio_dev) +{ + mutex_unlock(&to_iio_dev_opaque(indio_dev)->mlock); +} +EXPORT_SYMBOL_GPL(__iio_dev_mode_unlock); + /** * __iio_device_claim_direct - Keep device in direct mode * @indio_dev: the iio_dev associated with the device diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h index 872ebdf0dd77..aecda887d833 100644 --- a/include/linux/iio/iio.h +++ b/include/linux/iio/iio.h @@ -661,6 +661,9 @@ void iio_device_unregister(struct iio_dev *indio_dev); int __devm_iio_device_register(struct device *dev, struct iio_dev *indio_d= ev, struct module *this_mod); int iio_push_event(struct iio_dev *indio_dev, u64 ev_code, s64 timestamp); + +void __iio_dev_mode_lock(struct iio_dev *indio_dev) __acquires(indio_dev); +void __iio_dev_mode_unlock(struct iio_dev *indio_dev) __releases(indio_dev= ); bool __iio_device_claim_direct(struct iio_dev *indio_dev); void __iio_device_release_direct(struct iio_dev *indio_dev); =20 --=20 2.52.0 From nobody Sun Feb 8 03:58:03 2026 Received: from mail-vs1-f52.google.com (mail-vs1-f52.google.com [209.85.217.52]) (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 6979533BBB9 for ; Sun, 18 Jan 2026 15:44:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768751105; cv=none; b=aqoihSEJvNSehKusumYbAIWojCXbQsm/jHEEwrWPcjFKsg2YT5j66PP1OHTsuIdufaT/UcyZg994iI+i9CRGUwVFGmYNrwJM2Yn8+1phHmOHeSYHNkpS4MKzEGHUZsr01FFaLjDfoDnk0Tsx69ilWA03PUtwtCvZPXyCfK6Nxk0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768751105; c=relaxed/simple; bh=BtNIOm3WFxuBN0I59Ylb15JT2dcPZJy+ODhgAT4Nc5Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=meka0nADev1rpvLcgVp+MtIOMJXNQyr98obwflY3lOZWqfyQr37T2Xf5Cs7XWfJpIPZutM+YjJyulImQN7J/HTpEqOPAFjD/U13J2N4i8N8SLmoDpp3XZvgsR2UGskcyt5SZQk/X2QR+kZ110efgS/+d0dGH+bqCby8PqfQJ/tQ= 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=C+m9xQrp; arc=none smtp.client-ip=209.85.217.52 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="C+m9xQrp" Received: by mail-vs1-f52.google.com with SMTP id ada2fe7eead31-5eea31b5cb7so1204009137.0 for ; Sun, 18 Jan 2026 07:44:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768751096; x=1769355896; 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=Ml0Pxh1qVbQteTW8hQLYuo6bKN3PZO7AtXRgiPy9iHM=; b=C+m9xQrpiMphSENRXz8B9ivFS/QWpj+7XOa1X2QDYjFN7h20DxJtwTs+V5IyiQSrU/ cUOkYVg3X/+V5t7PSruGU47aapIZPfuBjfvRVXkN7JT6RkxiNB+OaErF3jmOau94tpP1 UQzqrm5XBvCqWQZrcPowWlyhxulOtdZKGMe8uQ5hzOndcjV1NNJVraPSDm35ud3XIuS5 DrezawrlarMAkbvmbjY46OAGErEzsxvrdVxDAFKnqm2r7wuDuuDdDIg8dpRapLJstRul gq76Jk7Sh8JDvj+KgIWitOByafBP8L6T+872MX3+IcZRSS5KTsGc0moWjP5Ha75lZgJl 7H9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768751096; x=1769355896; 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=Ml0Pxh1qVbQteTW8hQLYuo6bKN3PZO7AtXRgiPy9iHM=; b=hhCJkOLZ3T7G2qIh98nam8KA5WbewhlCMDPT0K/LLtAHU90tLhNVvJwx3LskMZ068g fOs2rRn9MwjZhutwze5D5n32hqPTKxvI6Zp0JdB49wqzDacmYmViAvqiPB7RePTjP7nM dgcm7HufX06HEfjai+bhypm1ttZEj/ghoy7MAIq7I4HNRtwi9TUhG0isv746/4fTm8iX lLVPDCeIDPKLb3+rmebpSP/8h5/FcjKLvglfJ+v4gW4X87AjF93iChv4heLmYN7/c/eh sK6iFw1JJiDRULeY7PLWAxrNBsQdpvoLzNaLXrliqzeLVRZh2B3ZX4YCrUsG7OizBmMz wbDQ== X-Forwarded-Encrypted: i=1; AJvYcCX6gjPOQDWqKB3SM8L3r6XPjG1caOiniK5txFwLkfNQxVZueDh84OD9jvyZAeQNh36YSMoi1fK9rS36qCo=@vger.kernel.org X-Gm-Message-State: AOJu0YynFLlnrM4aZnP4LmMBfR/rlYdWqmluuSqXFQDD2Sc13HcGuvj8 rqlVVyQa3QBheGkOtDGcWxSKVVnCEw9gz30X0FIaMFF/qb/JlD9csIN7 X-Gm-Gg: AY/fxX6KW3OTL5yfTpBO3vLEw20FYtBKSxtwaS/KcGXeIVkYpyu5uQtS+O4fcWqxrL0 Z6TN7E5zu4ZhK8H2Hs9ACJ9l62ylPW+YIEYk/202EgDSWcRQUz6RWZAezU2LlcEr5+cg5bsixw9 VIQB4YnoutA9TnxoUy4X0PGpYOy2JSG27fwWLr7OabE8CfE/dSWBdxuY/DCPqyUSdTbdxgEvQLt 761EsYEVFWJySHbxsMMuNCAMtBwCo6brl+swezUJM6CjWu7tNm7vlsQ3k9+DrszOn1jRpHfFOWz lpZQ5uH2wCN3SLAIxDCPtMApBO0qRi4T+L7XWLkk1OQ44C8ox5Bh+1NpQBA7M+kJwrCP//gUMZF Eoj+ZnmFm16TOrEeKLFRo+CjjzwT9kQ0BJDrj4Zl0dKCewXhPDp9dwrJEAsxWpUx2VkA+f3hFil MMUTYOYRds0RFz X-Received: by 2002:a05:6102:cc6:b0:5db:20ea:2329 with SMTP id ada2fe7eead31-5f1a55a32demr2588543137.35.1768751096351; Sun, 18 Jan 2026 07:44:56 -0800 (PST) Received: from [192.168.100.253] ([2800:bf0:82:11a2:7ac4:1f2:947b:2b6]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-5f1a6d3ca2esm2832731137.10.2026.01.18.07.44.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 07:44:56 -0800 (PST) From: Kurt Borja Date: Sun, 18 Jan 2026 10:44:29 -0500 Subject: [PATCH v4 2/7] iio: core: Refactor iio_device_claim_direct() implementation 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: <20260118-lock-impr-v4-2-6c8d0aee8ed2@gmail.com> References: <20260118-lock-impr-v4-0-6c8d0aee8ed2@gmail.com> In-Reply-To: <20260118-lock-impr-v4-0-6c8d0aee8ed2@gmail.com> To: Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Benson Leung , Antoniu Miclaus , Gwendal Grignou , Shrikant Raskar , Per-Daniel Olsson Cc: David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Guenter Roeck , Jonathan Cameron , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Kurt Borja X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4534; i=kuurtb@gmail.com; h=from:subject:message-id; bh=BtNIOm3WFxuBN0I59Ylb15JT2dcPZJy+ODhgAT4Nc5Q=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDJk5/z+wxcZe++GxJsk/YC7XGpWXe/l+8zZ+cni59h2ru cn1xMa/HaUsDGJcDLJiiiztCYu+PYrKe+t3IPQ+zBxWJpAhDFycAjCRmE2MDKfmP7TTmsjW0fV8 R6zIjPcvp3xqLEyqEp6TzXadVUiJsZLhn+ZPKzel0o8i9Ztd1JdkLHWIk2hWqrXgU3izrkA+VOU pJwA= X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A In order to eventually unify the locking API, implement iio_device_claim_direct() fully inline, with the use of __iio_dev_mode_lock(), which takes care of sparse annotations. Reviewed-by: David Lechner Reviewed-by: Nuno S=C3=A1 Signed-off-by: Kurt Borja --- drivers/iio/industrialio-core.c | 44 -------------------------------------= ---- include/linux/iio/iio.h | 40 ++++++++++++++++++++++++++----------- 2 files changed, 28 insertions(+), 56 deletions(-) diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-cor= e.c index 9693a6bb3917..83078285cd97 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -2201,50 +2201,6 @@ void __iio_dev_mode_unlock(struct iio_dev *indio_dev) } EXPORT_SYMBOL_GPL(__iio_dev_mode_unlock); =20 -/** - * __iio_device_claim_direct - Keep device in direct mode - * @indio_dev: the iio_dev associated with the device - * - * If the device is in direct mode it is guaranteed to stay - * that way until __iio_device_release_direct() is called. - * - * Use with __iio_device_release_direct(). - * - * Drivers should only call iio_device_claim_direct(). - * - * Returns: true on success, false on failure. - */ -bool __iio_device_claim_direct(struct iio_dev *indio_dev) -{ - struct iio_dev_opaque *iio_dev_opaque =3D to_iio_dev_opaque(indio_dev); - - mutex_lock(&iio_dev_opaque->mlock); - - if (iio_buffer_enabled(indio_dev)) { - mutex_unlock(&iio_dev_opaque->mlock); - return false; - } - return true; -} -EXPORT_SYMBOL_GPL(__iio_device_claim_direct); - -/** - * __iio_device_release_direct - releases claim on direct mode - * @indio_dev: the iio_dev associated with the device - * - * Release the claim. Device is no longer guaranteed to stay - * in direct mode. - * - * Drivers should only call iio_device_release_direct(). - * - * Use with __iio_device_claim_direct() - */ -void __iio_device_release_direct(struct iio_dev *indio_dev) -{ - mutex_unlock(&to_iio_dev_opaque(indio_dev)->mlock); -} -EXPORT_SYMBOL_GPL(__iio_device_release_direct); - /** * iio_device_claim_buffer_mode - Keep device in buffer mode * @indio_dev: the iio_dev associated with the device diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h index aecda887d833..f6d494065efe 100644 --- a/include/linux/iio/iio.h +++ b/include/linux/iio/iio.h @@ -664,31 +664,47 @@ int iio_push_event(struct iio_dev *indio_dev, u64 ev_= code, s64 timestamp); =20 void __iio_dev_mode_lock(struct iio_dev *indio_dev) __acquires(indio_dev); void __iio_dev_mode_unlock(struct iio_dev *indio_dev) __releases(indio_dev= ); -bool __iio_device_claim_direct(struct iio_dev *indio_dev); -void __iio_device_release_direct(struct iio_dev *indio_dev); =20 /* * Helper functions that allow claim and release of direct mode * in a fashion that doesn't generate many false positives from sparse. * Note this must remain static inline in the header so that sparse - * can see the __acquire() marking. Revisit when sparse supports - * __cond_acquires() + * can see the __acquires() and __releases() annotations. + */ + +/** + * iio_device_claim_direct - Keep device in direct mode + * @indio_dev: the iio_dev associated with the device + * + * If the device is in direct mode it is guaranteed to stay + * that way until iio_device_release_direct() is called. + * + * Use with iio_device_release_direct(). + * + * Returns: true on success, false on failure. */ static inline bool iio_device_claim_direct(struct iio_dev *indio_dev) { - if (!__iio_device_claim_direct(indio_dev)) - return false; + __iio_dev_mode_lock(indio_dev); =20 - __acquire(iio_dev); + if (iio_buffer_enabled(indio_dev)) { + __iio_dev_mode_unlock(indio_dev); + return false; + } =20 return true; } =20 -static inline void iio_device_release_direct(struct iio_dev *indio_dev) -{ - __iio_device_release_direct(indio_dev); - __release(indio_dev); -} +/** + * iio_device_release_direct - Releases claim on direct mode + * @indio_dev: the iio_dev associated with the device + * + * Release the claim. Device is no longer guaranteed to stay + * in direct mode. + * + * Use with iio_device_claim_direct(). + */ +#define iio_device_release_direct(indio_dev) __iio_dev_mode_unlock(indio_d= ev) =20 int iio_device_claim_buffer_mode(struct iio_dev *indio_dev); void iio_device_release_buffer_mode(struct iio_dev *indio_dev); --=20 2.52.0 From nobody Sun Feb 8 03:58:03 2026 Received: from mail-vk1-f181.google.com (mail-vk1-f181.google.com [209.85.221.181]) (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 C78CE33343D for ; Sun, 18 Jan 2026 15:44:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768751106; cv=none; b=bJbofT2hqPm26ZhzLIHBDlIA/LMYhAUZ02T2XhBDlNHDZEVJcckOE0RaTiVewGWZdI4ac2cqPZISNl5w25VIw0V4Od25OXTnVJ8uLvQGjO3RRdTj13/FuzngKvlEE+P6suaQ0RrtlR2cFb5GdWbIBJMhezKOVBrDcFmir5hqrJc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768751106; c=relaxed/simple; bh=8Qsn8l9ngnc+knSDLyebRMQVPK7UtYm5UK7xm5nz2xY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Jumw+GRP+y7GT1lkvCMtqZnccmg9yg57sfvgMi3uinL6y4j1Cp8oh5zgjIQ7C1RXolYkfQ1ivSmP8tnImCeQj0s9auhmg7J299ocRaslY5E9DvcgcAvma5dG0lyWOENWP4/RAojkNcgZq/9jZoQ76cv8VDQg54/3eXKKkZtDBAQ= 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=NJySmkqj; arc=none smtp.client-ip=209.85.221.181 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="NJySmkqj" Received: by mail-vk1-f181.google.com with SMTP id 71dfb90a1353d-5637b96211aso3223416e0c.2 for ; Sun, 18 Jan 2026 07:44:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768751099; x=1769355899; 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=Q5xzC39ymMALozKjLqKfAnaQGtCnTtEhf1tuivfMM+M=; b=NJySmkqjTV+TqmAOqemMagbdrGqMcs09G3i2SdPW3VuzMgAz4fzfEq62dWjticJMNT GaI/M4CamquppxcxRg6KAoTF9lRyrql5LVD85dy+RuI6lMh8F9ApoNDkXQnpXNPqy3su TXjTy4BBN3B/ZZWsaKwIBpem9HknoczCIn6L12+Xcq3y3ejIg7vvR18UjeogmKhiq5L0 vTutH76uuohn5qGsx5gGHF44r2ZGfs4B1iI3cfiv2s+HQ9Lru+gxW+h0h+Ya5rUJXdP9 i9O6/oSIGAyyjeJaM9glCeRmfZb2/ZBjNBXYxV3kmNIld65OLM/j2LTnyjceVdnKcThm zzsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768751099; x=1769355899; 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=Q5xzC39ymMALozKjLqKfAnaQGtCnTtEhf1tuivfMM+M=; b=Li+q7dcneQ1hfjnN+8GWPE7Q1+f22Q0XEW7L2qwR1taPA9/ISEWfq93iVmuSYXoYTB 0BH7Ggq+cCI1b7J1kE4JeX1mSRXirqBuVJJfVHZEduLsUjdJmsCX+KEfvA/iu6dMrec3 PwPmOPp0MwiMc1lzn3e/JX9KB9s7QMfRtvNrDGZ37FUw4+H27kAWhocF1ZLZWCni1Vc8 X89TJhNjov6ez5JmAIamcfy91RvEyuDeA8hgWvnln2kpXsmzIWbSdpcN+mOLt0VY1uq2 9eZHFTuTTCOjCfmKWzK4y2xFs14KUxez3/T2vPeJ0pEIDY2mTpcCWvNMF4U6ILCkl+6o MCiA== X-Forwarded-Encrypted: i=1; AJvYcCXt5m9X3ZG/q2X9+e4jxJMgnjgE/Jqjh5MCmkKSqIDsHIQp7rTo9CNL91g9/F8TqsOwxNKfivp7d4o67zw=@vger.kernel.org X-Gm-Message-State: AOJu0YyTG+I9aDByddOycoRYp4v5n13YfA2Q9tVhcvwGJrilyCOlyA3K nyUAJSWwOqSnclhUrN0FrWVLX9m4KRSvJmFfPAKT4diC9lImQsAM1Ayc X-Gm-Gg: AY/fxX5ry1az+n2t0GJy3hK56u9Ol+LJOcEPJmFR/h7fDzXJZeQA8rViFbiyy+K/XyK fCqy2WgB84h5Y5iNiDf2FoDDnBFBVfr6LFiln4kgIz8NHZI9kQI9dihRun2BftnyGZtZYfc4ngL RBMgrteNKKcOjBzD2wEXLmXe5UkmRb74lVak07zUpKDMnorbqyeqsCb2IliNuIKy9NcMdyS7gHU fvvxpE7PxXu563BRAcmj3yxz2q/vG0Y3Jg0qHGY81i96x+5wdjqEy0uQ1zRQVFMUflV6kA8roHQ Xykl4jska/8052fiQtkNz3jg3TtV2ZUlV+GPq67jBfYJCAx2Tjsw3FxheF1tVIGj8TkunNCMIuI 3UFclO/ZcN4r1JYmL9tgT7AQ7ltpo6Byo8E6dqoY7Hc2ORhW/Zhxq2oFoGbkBSAyi7UTmW7sVZC tVUjohACbCWGmV X-Received: by 2002:a05:6102:4415:b0:5db:28ef:3dfb with SMTP id ada2fe7eead31-5f1a55958b4mr3140154137.34.1768751098599; Sun, 18 Jan 2026 07:44:58 -0800 (PST) Received: from [192.168.100.253] ([2800:bf0:82:11a2:7ac4:1f2:947b:2b6]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-5f1a6d3ca2esm2832731137.10.2026.01.18.07.44.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 07:44:58 -0800 (PST) From: Kurt Borja Date: Sun, 18 Jan 2026 10:44:30 -0500 Subject: [PATCH v4 3/7] iio: core: Match iio_device_claim_*() semantics and implementation 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: <20260118-lock-impr-v4-3-6c8d0aee8ed2@gmail.com> References: <20260118-lock-impr-v4-0-6c8d0aee8ed2@gmail.com> In-Reply-To: <20260118-lock-impr-v4-0-6c8d0aee8ed2@gmail.com> To: Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Benson Leung , Antoniu Miclaus , Gwendal Grignou , Shrikant Raskar , Per-Daniel Olsson Cc: David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Guenter Roeck , Jonathan Cameron , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Kurt Borja X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=7969; i=kuurtb@gmail.com; h=from:subject:message-id; bh=8Qsn8l9ngnc+knSDLyebRMQVPK7UtYm5UK7xm5nz2xY=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDJk5/z8Gvd9Vy8Y4fXrfdoNKtqN/qywsor5kWioZNHPp1 q26Z9PbUcrCIMbFICumyNKesOjbo6i8t34HQu/DzGFlAhnCwMUpABN5rsHwk3EbT2nxQblyXc1G O5nzAeHxb1gtcqomJp75XmRifvSjPcP/ktCF/2+sXvTmasWPmvCdEibFvN5hipar1SM7dVNNWaI 4AQ== X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Implement iio_device_claim_buffer_mode() fully inline with the use of __iio_dev_mode_lock(), which takes care of sparse annotations. To completely match iio_device_claim_direct() semantics, we need to also change iio_device_claim_buffer_mode() return semantics to usual true/false conditional lock semantics. Additionally, to avoid silently breaking out-of-tree drivers, rename iio_device_claim_buffer_mode() to iio_device_claim_try_buffer_mode(). Reviewed-by: David Lechner Reviewed-by: Nuno S=C3=A1 Signed-off-by: Kurt Borja --- drivers/iio/adc/ade9000.c | 2 +- .../common/cros_ec_sensors/cros_ec_sensors_core.c | 5 +-- drivers/iio/health/max30100.c | 8 +---- drivers/iio/health/max30102.c | 2 +- drivers/iio/industrialio-core.c | 42 +-----------------= ---- drivers/iio/light/opt4060.c | 2 +- include/linux/iio/iio.h | 35 ++++++++++++++++-- 7 files changed, 39 insertions(+), 57 deletions(-) diff --git a/drivers/iio/adc/ade9000.c b/drivers/iio/adc/ade9000.c index 2de8a718d62a..db085dc5e526 100644 --- a/drivers/iio/adc/ade9000.c +++ b/drivers/iio/adc/ade9000.c @@ -964,7 +964,7 @@ static irqreturn_t ade9000_dready_thread(int irq, void = *data) struct iio_dev *indio_dev =3D data; =20 /* Handle data ready interrupt from C4/EVENT/DREADY pin */ - if (!iio_device_claim_buffer_mode(indio_dev)) { + if (iio_device_try_claim_buffer_mode(indio_dev)) { ade9000_iio_push_buffer(indio_dev); iio_device_release_buffer_mode(indio_dev); } diff --git a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c b/dr= ivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c index 9ac80e4b7d75..ef53066b1735 100644 --- a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c +++ b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c @@ -188,11 +188,8 @@ int cros_ec_sensors_push_data(struct iio_dev *indio_de= v, /* * Ignore samples if the buffer is not set: it is needed if the ODR is * set but the buffer is not enabled yet. - * - * Note: iio_device_claim_buffer_mode() returns -EBUSY if the buffer - * is not enabled. */ - if (iio_device_claim_buffer_mode(indio_dev) < 0) + if (!iio_device_try_claim_buffer_mode(indio_dev)) return 0; =20 out =3D (s16 *)st->samples; diff --git a/drivers/iio/health/max30100.c b/drivers/iio/health/max30100.c index 3d441013893c..7dfdb5eb305e 100644 --- a/drivers/iio/health/max30100.c +++ b/drivers/iio/health/max30100.c @@ -417,13 +417,7 @@ static int max30100_read_raw(struct iio_dev *indio_dev, * Temperature reading can only be acquired while engine * is running */ - if (iio_device_claim_buffer_mode(indio_dev)) { - /* - * Replacing -EBUSY or other error code - * returned by iio_device_claim_buffer_mode() - * because user space may rely on the current - * one. - */ + if (!iio_device_try_claim_buffer_mode(indio_dev)) { ret =3D -EAGAIN; } else { ret =3D max30100_get_temp(data, val); diff --git a/drivers/iio/health/max30102.c b/drivers/iio/health/max30102.c index a48c0881a4c7..6918fcb5de2b 100644 --- a/drivers/iio/health/max30102.c +++ b/drivers/iio/health/max30102.c @@ -476,7 +476,7 @@ static int max30102_read_raw(struct iio_dev *indio_dev, * shutdown; leave shutdown briefly when buffer not running */ any_mode_retry: - if (iio_device_claim_buffer_mode(indio_dev)) { + if (!iio_device_try_claim_buffer_mode(indio_dev)) { /* * This one is a *bit* hacky. If we cannot claim buffer * mode, then try direct mode so that we make sure diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-cor= e.c index 83078285cd97..20cf316664b4 100644 --- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -2183,7 +2183,7 @@ EXPORT_SYMBOL_GPL(__devm_iio_device_register); * * There are very few cases where a driver actually needs to lock the curr= ent * mode unconditionally. It's recommended to use iio_device_claim_direct()= or - * iio_device_claim_buffer_mode() pairs or related helpers instead. + * iio_device_try_claim_buffer_mode() pairs or related helpers instead. */ void __iio_dev_mode_lock(struct iio_dev *indio_dev) { @@ -2201,46 +2201,6 @@ void __iio_dev_mode_unlock(struct iio_dev *indio_dev) } EXPORT_SYMBOL_GPL(__iio_dev_mode_unlock); =20 -/** - * iio_device_claim_buffer_mode - Keep device in buffer mode - * @indio_dev: the iio_dev associated with the device - * - * If the device is in buffer mode it is guaranteed to stay - * that way until iio_device_release_buffer_mode() is called. - * - * Use with iio_device_release_buffer_mode(). - * - * Returns: 0 on success, -EBUSY on failure. - */ -int iio_device_claim_buffer_mode(struct iio_dev *indio_dev) -{ - struct iio_dev_opaque *iio_dev_opaque =3D to_iio_dev_opaque(indio_dev); - - mutex_lock(&iio_dev_opaque->mlock); - - if (iio_buffer_enabled(indio_dev)) - return 0; - - mutex_unlock(&iio_dev_opaque->mlock); - return -EBUSY; -} -EXPORT_SYMBOL_GPL(iio_device_claim_buffer_mode); - -/** - * iio_device_release_buffer_mode - releases claim on buffer mode - * @indio_dev: the iio_dev associated with the device - * - * Release the claim. Device is no longer guaranteed to stay - * in buffer mode. - * - * Use with iio_device_claim_buffer_mode(). - */ -void iio_device_release_buffer_mode(struct iio_dev *indio_dev) -{ - mutex_unlock(&to_iio_dev_opaque(indio_dev)->mlock); -} -EXPORT_SYMBOL_GPL(iio_device_release_buffer_mode); - /** * iio_device_get_current_mode() - helper function providing read-only acc= ess to * the opaque @currentmode variable diff --git a/drivers/iio/light/opt4060.c b/drivers/iio/light/opt4060.c index 981c704e7df5..8c4a1f562a83 100644 --- a/drivers/iio/light/opt4060.c +++ b/drivers/iio/light/opt4060.c @@ -304,7 +304,7 @@ static int opt4060_set_driver_state(struct iio_dev *ind= io_dev, struct opt4060_chip *chip =3D iio_priv(indio_dev); int ret =3D 0; any_mode_retry: - if (iio_device_claim_buffer_mode(indio_dev)) { + if (!iio_device_try_claim_buffer_mode(indio_dev)) { /* * This one is a *bit* hacky. If we cannot claim buffer mode, * then try direct mode so that we make sure things cannot diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h index f6d494065efe..fa671e120e95 100644 --- a/include/linux/iio/iio.h +++ b/include/linux/iio/iio.h @@ -706,8 +706,39 @@ static inline bool iio_device_claim_direct(struct iio_= dev *indio_dev) */ #define iio_device_release_direct(indio_dev) __iio_dev_mode_unlock(indio_d= ev) =20 -int iio_device_claim_buffer_mode(struct iio_dev *indio_dev); -void iio_device_release_buffer_mode(struct iio_dev *indio_dev); +/** + * iio_device_try_claim_buffer_mode - Keep device in buffer mode + * @indio_dev: the iio_dev associated with the device + * + * If the device is in buffer mode it is guaranteed to stay + * that way until iio_device_release_buffer_mode() is called. + * + * Use with iio_device_release_buffer_mode(). + * + * Returns: true on success, false on failure. + */ +static inline bool iio_device_try_claim_buffer_mode(struct iio_dev *indio_= dev) +{ + __iio_dev_mode_lock(indio_dev); + + if (!iio_buffer_enabled(indio_dev)) { + __iio_dev_mode_unlock(indio_dev); + return false; + } + + return true; +} + +/** + * iio_device_release_buffer_mode - releases claim on buffer mode + * @indio_dev: the iio_dev associated with the device + * + * Release the claim. Device is no longer guaranteed to stay + * in buffer mode. + * + * Use with iio_device_try_claim_buffer_mode(). + */ +#define iio_device_release_buffer_mode(indio_dev) __iio_dev_mode_unlock(in= dio_dev) =20 extern const struct bus_type iio_bus_type; =20 --=20 2.52.0 From nobody Sun Feb 8 03:58:03 2026 Received: from mail-ua1-f53.google.com (mail-ua1-f53.google.com [209.85.222.53]) (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 39CA82D5932 for ; Sun, 18 Jan 2026 15:45:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768751105; cv=none; b=Uw9xgwTcs8mkxqUpiB08Gk/fObs2ShO8o9gKeUctSs0FXrVJ0EY6ntSXdBe/+HXTDsgdLJ5F4BnAOv/nSQAYE1UrTbD4ADxnfKUIJ2WOpttx6BIkeB7M92wa2Uxt0GoDqn+djqc2QynMX6EbrS+A5FSZRXI0yN4/91mqQItb7F0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768751105; c=relaxed/simple; bh=Bt3F/lHb6LI1N+BCX9VGngIeBqcSWQC3l35PbzVvVCs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QxSfavi9r1gqwcLUQ8Aym4dzofN9oXqKrdLDOmTv6i61LhXBRpwknvhhO36cWZdbEp7L+g0AkiJ4a5rPDl1ZNItKRpyxIA2YXwMKA/tC/fDQiWlvBCRWCPd5tZi26juvOx6+wRHwBjpOtb6qibxOSEaIdxRF5EJitrY9iRVxwhs= 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=g6/ZCnhL; arc=none smtp.client-ip=209.85.222.53 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="g6/ZCnhL" Received: by mail-ua1-f53.google.com with SMTP id a1e0cc1a2514c-93f542917eeso1161555241.2 for ; Sun, 18 Jan 2026 07:45:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768751101; x=1769355901; 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=XGdTfbPm6m/cN0XbYhh/ArH4Gt5W4bmHVBdR2RxVxHc=; b=g6/ZCnhL2VuK3YHY1zHho5axxQPApJjnUe+UGvYZ8313wbUsdBgaSviWW2y/taSmEc kfe5q3yMNrJGt8c+4Oj+7F3M6EwWc31jCB56jxT6kEg1wcuAwNPs8YYrIgVLuwGy7UfL vrIliTxYTP/bD6W1lLA8mWdB3QZsU7GFAm5PqmcZUL1Nt27Rozh23P1qC0u/Po6eH3N1 VAu6AixxxUKkG2Fc+iN6DgZ7PWD3yuvfxj3Gq6ujbtdF1Gco5XFmvb1E56lApuq23fBX WbEk1enYlf30/fTo92rdmM+nCauvciY9yuO4C0vn5D/nkmIoaZBvBNLWbo7I9+YbJhou SXKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768751101; x=1769355901; 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=XGdTfbPm6m/cN0XbYhh/ArH4Gt5W4bmHVBdR2RxVxHc=; b=RvLiVQaKTJm0DJQY8cyxoBhrbBsldpI/pr8hpsI6KRc6IOwuVf5uqIxaHg10aaDQzf /afk++/wkp/t9WsCcBSFWzFH2J7QfGBZYcVQ4V6Cq0q9iBo9kCiwxBmAoj3oKW5YoO20 L4lCzB86PbUvZFW4oh+HBBdS2V1PFYzRAI1j5kO8xvqrhEh3JUCh3daa/DObGmUQFBeE OaScRYfz9fjX9lk4kdobvYUgp5DAMDrj5sK6G3tAC9q0rAGk3IZISTHm2+JiLHKa84Nt J2gJvVu9eSMuuZCCl1rmCd/qWzAe+BXLzK5qJSNOXFGxC6DW+xhR41s/7ZEEZsbiuTzg wQiQ== X-Forwarded-Encrypted: i=1; AJvYcCUi9jSvYdMUoMP97/nXBEtkrSCE3x4cA5UR5rPI87AhbRA26DjqZ4b3kUY3m1VFI1jBltaGSVXblV+GVDo=@vger.kernel.org X-Gm-Message-State: AOJu0YzcPk3/j6TBCJlzORyvxp0PlCAaPYzJySV32syCJuBIktG0g4tZ at8GyvzP0/fvyI6I23Jcdfn2hzzClgqtue2wRE20fNrL3jhkm9kkg2qP X-Gm-Gg: AY/fxX5I5Q5eEwL+peu39ihPHaWm6NzGYqmMO2FluJiAbu47XbC6bsSIMZh73mdHEY9 gGYJvfQfJRqgpKwbrRw16BZ+4lbRCozFP3lO29GlEV/xuQ6MAyVJwLaw9EyLJPAYByZ5xrucPfH 6fPvw8JGQBTUKvkxNPZAJ1lYsYOcoOXaJCgW1ftQzeARJYI844i4Wp+I7gmgDPDhn5+T9f/AXMQ bYgGnXKc3LgtV6B1knX5vyH0swxOoMO6HFPjucNoTUHCfOf+/g3XNlZI3YQUe4MytPOpXgBpdYM kGVPqd5dNMHBnB1eoUiKG7O58KOz3ZcdGi2Mb58PYaB5xnlLUO/EYZFIdshE/HWKmeaKg2pxiyq fax0ejElZrC59rXm9vMbItzTRSmY3jVjCqXW9MyuaWQFzBIg8wKSGvlwysXuFv+rZbTcaXeyFVj 99xXYZ3PzsA7fz X-Received: by 2002:a05:6102:dcc:b0:5db:f031:84c7 with SMTP id ada2fe7eead31-5f1a717ed4emr2752450137.30.1768751100866; Sun, 18 Jan 2026 07:45:00 -0800 (PST) Received: from [192.168.100.253] ([2800:bf0:82:11a2:7ac4:1f2:947b:2b6]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-5f1a6d3ca2esm2832731137.10.2026.01.18.07.44.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 07:45:00 -0800 (PST) From: Kurt Borja Date: Sun, 18 Jan 2026 10:44:31 -0500 Subject: [PATCH v4 4/7] iio: core: Add cleanup.h support for iio_device_claim_*() 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: <20260118-lock-impr-v4-4-6c8d0aee8ed2@gmail.com> References: <20260118-lock-impr-v4-0-6c8d0aee8ed2@gmail.com> In-Reply-To: <20260118-lock-impr-v4-0-6c8d0aee8ed2@gmail.com> To: Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Benson Leung , Antoniu Miclaus , Gwendal Grignou , Shrikant Raskar , Per-Daniel Olsson Cc: David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Guenter Roeck , Jonathan Cameron , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Kurt Borja X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3563; i=kuurtb@gmail.com; h=from:subject:message-id; bh=Bt3F/lHb6LI1N+BCX9VGngIeBqcSWQC3l35PbzVvVCs=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDJk5/z/eZhPNcLLkddP59UGR49r002tzUzdNjdqo2JfJW 3O1JGlhRykLgxgXg6yYIkt7wqJvj6Ly3vodCL0PM4eVCWQIAxenAEzEtomR4cuUHvZdLO4rD//d OF+kpG/y8dPXpjw71f91z99lwi8/bVjKyDCfY9uReJ37ehPnBBxm7NIxvvZq4s0F+97uz85dN8l J9wkzAA== X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Add guard classes for iio_device_claim_*() conditional locks. This will aid drivers write safer and cleaner code when dealing with some common patterns. These classes are not meant to be used directly by drivers (hence the __priv__ prefix). Instead, documented wrapper macros are provided to enforce the use of ACQUIRE() or guard() semantics and avoid the problematic scoped guard. Suggested-by: Andy Shevchenko Reviewed-by: David Lechner Reviewed-by: Nuno S=C3=A1 Signed-off-by: Kurt Borja Acked-by: Andy Shevchenko --- include/linux/iio/iio.h | 65 +++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 65 insertions(+) diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h index fa671e120e95..4a0a77fcfa8d 100644 --- a/include/linux/iio/iio.h +++ b/include/linux/iio/iio.h @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -740,6 +741,70 @@ static inline bool iio_device_try_claim_buffer_mode(st= ruct iio_dev *indio_dev) */ #define iio_device_release_buffer_mode(indio_dev) __iio_dev_mode_unlock(in= dio_dev) =20 +/* + * These classes are not meant to be used directly by drivers (hence the + * __priv__ prefix). Instead, documented wrapper macros are provided below= to + * enforce the use of ACQUIRE() or guard() semantics and avoid the problem= atic + * scoped guard variants. + */ +DEFINE_GUARD(__priv__iio_dev_mode_lock, struct iio_dev *, + __iio_dev_mode_lock(_T), __iio_dev_mode_unlock(_T)); +DEFINE_GUARD_COND(__priv__iio_dev_mode_lock, _try_direct, + iio_device_claim_direct(_T)); + +/** + * IIO_DEV_ACQUIRE_DIRECT_MODE(dev, var) - Tries to acquire the direct mode + * lock with automatic release + * @dev: IIO device instance + * @claim: Variable identifier to store acquire result + * + * Tries to acquire the direct mode lock with cleanup ACQUIRE() semantics = and + * automatically releases it at the end of the scope. It most be always pa= ired + * with IIO_DEV_ACQUIRE_ERR(), for example (notice the scope braces):: + * + * switch() { + * case IIO_CHAN_INFO_RAW: { + * IIO_DEV_ACQUIRE_DIRECT_MODE(indio_dev, claim); + * if (IIO_DEV_ACQUIRE_FAILED(claim)) + * return -EBUSY; + * + * ... + * } + * case IIO_CHAN_INFO_SCALE: + * ... + * ... + * } + * + * Context: Can sleep + */ +#define IIO_DEV_ACQUIRE_DIRECT_MODE(dev, claim) \ + ACQUIRE(__priv__iio_dev_mode_lock_try_direct, claim)(dev) + +/** + * IIO_DEV_ACQUIRE_FAILED() - ACQUIRE_ERR() wrapper + * @claim: The claim variable passed to IIO_DEV_ACQUIRE_*_MODE() + * + * Return: true if failed to acquire the mode, otherwise false. + */ +#define IIO_DEV_ACQUIRE_FAILED(claim) \ + ACQUIRE_ERR(__priv__iio_dev_mode_lock_try_direct, &(claim)) + +/** + * IIO_DEV_GUARD_CURRENT_MODE - Acquires the mode lock with automatic rele= ase + * @dev: IIO device instance + * + * Acquires the mode lock with cleanup guard() semantics. It is usually pa= ired + * with iio_buffer_enabled(). + * + * This should *not* be used to protect internal driver state and it's use= in + * general is *strongly* discouraged. Use any of the IIO_DEV_ACQUIRE_*_MOD= E() + * variants. + * + * Context: Can sleep + */ +#define IIO_DEV_GUARD_CURRENT_MODE(dev) \ + guard(__priv__iio_dev_mode_lock)(dev) + extern const struct bus_type iio_bus_type; =20 /** --=20 2.52.0 From nobody Sun Feb 8 03:58:03 2026 Received: from mail-vk1-f169.google.com (mail-vk1-f169.google.com [209.85.221.169]) (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 7890D23EAB7 for ; Sun, 18 Jan 2026 15:45:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768751106; cv=none; b=bjE1txK3To6xSSCvc5MO8UfTYityaSV9whASbsWC5VR1on/NNyDo9a4TcYp9IJTDEjJytc6JBnYa9RBw0gMlF5hjGbMbGOhwARC008PkieIcTjRZDyxOgls69AxUDQOl5xF1GI37DxoisSVP6xTZUBaJSSHSHMy85TEJs8IQRpM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768751106; c=relaxed/simple; bh=3P+X2YeLcPjCXYTP9cibJrgBqh+scSiCbpaQGpGyBmA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RfYTiQK8FElAm71D+ZA2DSRAleV+XA1LzTqAKtp3qaxzvWb61lXRLSztUNXCZUVa4WhmW9guiol/l3qCsTtHZmk9t8vJFn5mdT9fGwFQZi2KYm4MZZ5iWI9NMJnBlBCzr2GMDDY0jiZwUaQbyQ4tdbKHp4UkC2ZYGpcod00Fip0= 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=P5Ybyc6Y; arc=none smtp.client-ip=209.85.221.169 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="P5Ybyc6Y" Received: by mail-vk1-f169.google.com with SMTP id 71dfb90a1353d-56376c3e866so2782632e0c.3 for ; Sun, 18 Jan 2026 07:45:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768751103; x=1769355903; 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=XTnTVRGv/a3yeACWeWEj6KZeE3Y99K4b2EX+Zi7IhJ8=; b=P5Ybyc6YfqnlyWmGy32VNdiMLlZNTCT7BlD2kw4748c8ZeqqdO93cA9+ElL+zOW3IW QREGobPBHoEnBE13Ijo9yEeBgG2XOWcx2PTj6kfbP20vrpKGbZwK/BkgC4bR98/ZES29 pG4zYSTvDz6XPFUSELXRCTl0L64MlPes5TMo/KBA526xyLEYkx2jN5ahxUpzZmwwTBvv sS/MUBwq4NLxUTdrBu08EOXD7vSS5UoSNf2bp64Vjlw/9M/L/OU9D2o9Aq57iRoFZMrF A6d6GCHmrNrTdZ02cusxE25QMjCFLKjgA5UmcdCCmKFrnhBv4vMi2tP54/IgpXrFmvWH RznQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768751103; x=1769355903; 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=XTnTVRGv/a3yeACWeWEj6KZeE3Y99K4b2EX+Zi7IhJ8=; b=g+zzk0L50Mv9UGTmUmXzkPUfxKW9LWf0EO2TlIVebnpGhcv3V7+grSgFaarrFhb2VT 43l0AiGo233DaBRGtNAsQBjfqrEOo+rdfMFMM5CTxtWdg/m08nIGe/G9d5gyPUx/WajI kDVhtrUOTWdC5wys1IzJnNK6zvJZzIjMvlIHO692PBoUcQn8DRJFpsMWK5omhmxN1XuB 8CHy9hSUL/BOFrTDWzM/NrRjZjbwUm5EIc4CKmLClqtlS2f//hPtvSTWPszZ1ymURfTV 8bJ+YfIwfjNL1vHIW7pCasm63CxzvM75X+GTrz+YzHEbXA883FPgSBAyNYGMfYka03/k +Zzg== X-Forwarded-Encrypted: i=1; AJvYcCXMllxLe9i4iuGgcVpwKI0MW25C9isjK6SbuClHDEMDicrd8GUG/YRfOYvaAnzkHlywtJOwiFVeQSMoxGQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4RkUQixNDGr4q26d54Pme4TCV183dmyEAZIps+yRNNLp2jJnt CS2HHyFaIK219Xv/VbO99xQPKLuB7lrPnLPgLHgdyfEwDuKjWZbnhaMs X-Gm-Gg: AY/fxX5slhUdBxfdf494TPF3tUQVeql5kONv63DWngXLWF9sG58KBOfJSTDHsPHzJ6b 1KksAQCEYA7wrh4OAoSSxzI8nRLb3vzalL1z3OxGuuyVA1nZuKJHegPM/SdAxFUfGr38cAB08aC nNbhxYAWo2D+84h4dGv0VFGTP9alA6SR1bZXXAulSJr1mAWlwbetAA0St7UeAfkpznRwKKyhsIq FdTGodDgFX/1ZFwokNGMIYyDsZPr7SSxOK7NrgFi7l2MegaagykTXGpwafVVOwkYcBBoiP0CFM6 zZzBa4rrgrJ+lT2z+TsVe8u2l/apKHZvFQzLewGgH13nIqwI6hkaCKLSNz0mbu40AktWqaoj7r0 4glNGaH8oFW0ufBrLz/JF063D2nR2lS7zq/l3dwCyr3xHHCDCL/hPfvy6bwQHGdliB10cCTr5s/ v7US99Z6kU/vJs X-Received: by 2002:a05:6102:a48:b0:5db:cfb2:e610 with SMTP id ada2fe7eead31-5f1a55dce21mr3189064137.41.1768751103410; Sun, 18 Jan 2026 07:45:03 -0800 (PST) Received: from [192.168.100.253] ([2800:bf0:82:11a2:7ac4:1f2:947b:2b6]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-5f1a6d3ca2esm2832731137.10.2026.01.18.07.45.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 07:45:03 -0800 (PST) From: Kurt Borja Date: Sun, 18 Jan 2026 10:44:32 -0500 Subject: [PATCH v4 5/7] iio: light: vcnl4000: Use IIO cleanup helpers 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: <20260118-lock-impr-v4-5-6c8d0aee8ed2@gmail.com> References: <20260118-lock-impr-v4-0-6c8d0aee8ed2@gmail.com> In-Reply-To: <20260118-lock-impr-v4-0-6c8d0aee8ed2@gmail.com> To: Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Benson Leung , Antoniu Miclaus , Gwendal Grignou , Shrikant Raskar , Per-Daniel Olsson Cc: David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Guenter Roeck , Jonathan Cameron , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Kurt Borja X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3136; i=kuurtb@gmail.com; h=from:subject:message-id; bh=3P+X2YeLcPjCXYTP9cibJrgBqh+scSiCbpaQGpGyBmA=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDJk5/z8+iJ4RHnlk3snQuump56fLnmzP+yR1+31BpOonj oP5N49ZdZSyMIhxMciKKbK0Jyz69igq763fgdD7MHNYmUCGMHBxCsBENsow/I+9cd2l0P+rrurq RW/ydxrGWMhMORSpfOQDu0CYocvuLQcY/opzLnlwkuPZZJakczuqJ/W/OmoQ9l1TeGnI5QPW4gn fH7ABAA== X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Use IIO_DEV_ACQUIRE_DIRECT_MODE() helper to automatically release direct mode. Reviewed-by: David Lechner Reviewed-by: Nuno S=C3=A1 Signed-off-by: Kurt Borja --- drivers/iio/light/vcnl4000.c | 49 ++++++++++++++++------------------------= ---- 1 file changed, 18 insertions(+), 31 deletions(-) diff --git a/drivers/iio/light/vcnl4000.c b/drivers/iio/light/vcnl4000.c index 4dbb2294a843..a36c23813679 100644 --- a/drivers/iio/light/vcnl4000.c +++ b/drivers/iio/light/vcnl4000.c @@ -1078,20 +1078,17 @@ static int vcnl4010_read_raw(struct iio_dev *indio_= dev, =20 switch (mask) { case IIO_CHAN_INFO_RAW: - case IIO_CHAN_INFO_SCALE: - if (!iio_device_claim_direct(indio_dev)) + case IIO_CHAN_INFO_SCALE: { + IIO_DEV_ACQUIRE_DIRECT_MODE(indio_dev, claim); + if (IIO_DEV_ACQUIRE_FAILED(claim)) return -EBUSY; =20 /* Protect against event capture. */ - if (vcnl4010_is_in_periodic_mode(data)) { - ret =3D -EBUSY; - } else { - ret =3D vcnl4000_read_raw(indio_dev, chan, val, val2, - mask); - } + if (vcnl4010_is_in_periodic_mode(data)) + return -EBUSY; =20 - iio_device_release_direct(indio_dev); - return ret; + return vcnl4000_read_raw(indio_dev, chan, val, val2, mask); + } case IIO_CHAN_INFO_SAMP_FREQ: switch (chan->type) { case IIO_PROXIMITY: @@ -1148,36 +1145,27 @@ static int vcnl4010_write_raw(struct iio_dev *indio= _dev, struct iio_chan_spec const *chan, int val, int val2, long mask) { - int ret; struct vcnl4000_data *data =3D iio_priv(indio_dev); =20 - if (!iio_device_claim_direct(indio_dev)) + IIO_DEV_ACQUIRE_DIRECT_MODE(indio_dev, claim); + if (IIO_DEV_ACQUIRE_FAILED(claim)) return -EBUSY; =20 /* Protect against event capture. */ - if (vcnl4010_is_in_periodic_mode(data)) { - ret =3D -EBUSY; - goto end; - } + if (vcnl4010_is_in_periodic_mode(data)) + return -EBUSY; =20 switch (mask) { case IIO_CHAN_INFO_SAMP_FREQ: switch (chan->type) { case IIO_PROXIMITY: - ret =3D vcnl4010_write_proxy_samp_freq(data, val, val2); - goto end; + return vcnl4010_write_proxy_samp_freq(data, val, val2); default: - ret =3D -EINVAL; - goto end; + return -EINVAL; } default: - ret =3D -EINVAL; - goto end; + return -EINVAL; } - -end: - iio_device_release_direct(indio_dev); - return ret; } =20 static int vcnl4010_read_event(struct iio_dev *indio_dev, @@ -1438,14 +1426,13 @@ static int vcnl4010_config_threshold_disable(struct= vcnl4000_data *data) static int vcnl4010_config_threshold(struct iio_dev *indio_dev, bool state) { struct vcnl4000_data *data =3D iio_priv(indio_dev); - int ret; =20 if (state) { - if (!iio_device_claim_direct(indio_dev)) + IIO_DEV_ACQUIRE_DIRECT_MODE(indio_dev, claim); + if (IIO_DEV_ACQUIRE_FAILED(claim)) return -EBUSY; - ret =3D vcnl4010_config_threshold_enable(data); - iio_device_release_direct(indio_dev); - return ret; + + return vcnl4010_config_threshold_enable(data); } else { return vcnl4010_config_threshold_disable(data); } --=20 2.52.0 From nobody Sun Feb 8 03:58:03 2026 Received: from mail-vs1-f46.google.com (mail-vs1-f46.google.com [209.85.217.46]) (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 0AD24287272 for ; Sun, 18 Jan 2026 15:45:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768751114; cv=none; b=fwGx84aoVLGjIVRaaPjwSD5WBk9eEtSNHfWupu9m6PjPH8mrBlSHfugWPlNzFamMyKF3jXl6ok0K1c9dLL0D5oDX5/A56fKpKA2k3cGRVuOzmBSFvzWrvU60rF2dJuOI1GITazcc/Rhz73KZZPmzrR4Uz10j3sturg5qkNobe7g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768751114; c=relaxed/simple; bh=R6AtgfHNFuyoDu3Dt8So6HbHkHEi4svHf3KFVpxGpRY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DSNEar32xOgAv2NhthnECt5zzHKUm95DbKxypfd7Uz8wi6bK3Sa08jyQPyB1fKeUZBjZvh9gx0eoQBvmW4bLI9COqwfhgzwCe9L+cCKW+G3VuSYJNZ7clpP1AOy022u96amWRBlZ0VpcCp2+UhmKgglozxdNGTyaL/dt2MPzroU= 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=lolg1dOg; arc=none smtp.client-ip=209.85.217.46 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="lolg1dOg" Received: by mail-vs1-f46.google.com with SMTP id ada2fe7eead31-5eef115c781so1509812137.2 for ; Sun, 18 Jan 2026 07:45:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768751106; x=1769355906; 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=RvaFKco8z0TcIBUmMpdNSTwRtZj3x2smNoAu0imBUvA=; b=lolg1dOgWJd47bSmHyJzpBaZPk1JVQYIa37zmHPlOGAFugA8zTiino2Sx+L5Tia2mw CKF/fT4DyzsJpUf7BtCZzNeXCZuPpdjH9rT3KvlL0I8Q/0gHXik827k7ZM8QwOwYFcCC Pp/yhbN5SyTsAr9c7WE4OH8H+w47CJq7nuyT3Nn6wff+ScczZXTlDdu2kx7vjJiz6K71 +FypK5gJFxH5z9xwdDiz65SFYVq+DNbOazGumUEW3neLFeIVXdcivt3cmk4QjEx2Dtjm 5OKUk9MO+2mSc40a/zSwKs9b9jjK/3TJPt2IZsdvQvaZBEZW/ZSfd88bxMw8QCdRzYnk wZ9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768751106; x=1769355906; 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=RvaFKco8z0TcIBUmMpdNSTwRtZj3x2smNoAu0imBUvA=; b=awE4GC+/y0bI1LPp8hAcdWjAvOFbXStXIWeewACD9I1XW3fP7lOyVW+YRXLwJTsan0 oPNlLLFkxx/2Ftf4VTa9Dd9HyQ8z0OdTn7LtsytHIlIb6BxgmkPsC7wqozNLEUkEWht0 LhM68zHMiLqlRfae5bqOUMXWfFWGDniMsS7lqdcV8FbEuZ+gs24Etia+mXcbrsEGgfBi pQFuyAI0El0uepdom40ieYrhFmPG16DUc92YQcwqw5ooL2DK91os+oPOnsYnR2L33vrt t05dXfKO+8tfKvou7c1D0gdNMfPVSuloXzq+MljO6eXygX0uvt7lRnq/0FkvxfeEQj5k lGIw== X-Forwarded-Encrypted: i=1; AJvYcCXQUP4V+EL7Cp7A4CuaOpAJtSEc1O6z59gRObVptbC9GpkPoGcicysPif5kYzwsjR6LHKXGlVcjjGiKXmw=@vger.kernel.org X-Gm-Message-State: AOJu0YxsOYaGCnmErrNG5ErlXE0zTNW/jwy4WDl5cWt2Kglx6/CcyCnM 02YfTi8WttjrUuH3FHKpIVyUlkV93w9oSYtHWCWAGfCOR6LkucPM4Q84 X-Gm-Gg: AY/fxX7wcdDH2qLstvZi0t1IZyf8NuNfep2Q7VV0BehjFp+Jzn7U7T+tDlQfyOwaXpn zVf4v/Ms5sGHOqXWEJI3PNwNrQ5OjF7l4BgREThz4xEQfLiPBM+fVoXLonYFLk8dnHaXHe0oub3 Gi3rKYVL0f/VrNAhABy2or9GLHov72LB5ogWc9hcwXtMgV6FO03uKHd5saWQ7jNWh/q9YTOLIj4 rH75egCYR0FlsImBRWhOIIeQhWyevhC8cTZIuh53g2f6sbkszxMn4jpzkKmlAp/9ule1oXHlpZD zgEOH7B1i1hkqbMMBygpipx7oPPxp/mGOLFAt2bGAPZ4wFpJK5oIFmoFIparoxdfrSuZpnCOupy tqc2X/Pq/sodAXR8zWq6kG4EIMMa087tgPbYWQfq1qAUnaLUrAs0IxVBiyhWPIXKWdngyDOFClt s9lAKGTlTXNE4Y X-Received: by 2002:a05:6102:54a8:b0:5e1:866c:4f83 with SMTP id ada2fe7eead31-5f1a558c2e5mr2344860137.35.1768751105696; Sun, 18 Jan 2026 07:45:05 -0800 (PST) Received: from [192.168.100.253] ([2800:bf0:82:11a2:7ac4:1f2:947b:2b6]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-5f1a6d3ca2esm2832731137.10.2026.01.18.07.45.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 07:45:05 -0800 (PST) From: Kurt Borja Date: Sun, 18 Jan 2026 10:44:33 -0500 Subject: [PATCH v4 6/7] iio: health: max30102: Use IIO cleanup helpers 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: <20260118-lock-impr-v4-6-6c8d0aee8ed2@gmail.com> References: <20260118-lock-impr-v4-0-6c8d0aee8ed2@gmail.com> In-Reply-To: <20260118-lock-impr-v4-0-6c8d0aee8ed2@gmail.com> To: Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Benson Leung , Antoniu Miclaus , Gwendal Grignou , Shrikant Raskar , Per-Daniel Olsson Cc: David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Guenter Roeck , Jonathan Cameron , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Kurt Borja X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2086; i=kuurtb@gmail.com; h=from:subject:message-id; bh=R6AtgfHNFuyoDu3Dt8So6HbHkHEi4svHf3KFVpxGpRY=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDJk5/z+KsaetvqNpz/Jty55VRR2Fgt/erzJ7WWW/qmtL6 owrzOY2HaUsDGJcDLJiiiztCYu+PYrKe+t3IPQ+zBxWJpAhDFycAjCR83KMDLN6GFbuZXgb8nTK hNfPlVgneCdYrJYODnP+lLol0mPd3R+MDK1liWf0Ek7wrZlqLGdVseJgb7CSX1n61T05E3JfMhT f4QIA X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Use IIO_DEV_GUARD_CURRENT_MODE() cleanup helper to simplify and drop busy-waiting code in max30102_read_raw(). Reviewed-by: David Lechner Reviewed-by: Nuno S=C3=A1 Signed-off-by: Kurt Borja --- drivers/iio/health/max30102.c | 33 +++++++++------------------------ 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/drivers/iio/health/max30102.c b/drivers/iio/health/max30102.c index 6918fcb5de2b..47da44efd68b 100644 --- a/drivers/iio/health/max30102.c +++ b/drivers/iio/health/max30102.c @@ -467,44 +467,29 @@ static int max30102_read_raw(struct iio_dev *indio_de= v, int *val, int *val2, long mask) { struct max30102_data *data =3D iio_priv(indio_dev); - int ret =3D -EINVAL; + int ret; =20 switch (mask) { - case IIO_CHAN_INFO_RAW: + case IIO_CHAN_INFO_RAW: { /* * Temperature reading can only be acquired when not in * shutdown; leave shutdown briefly when buffer not running */ -any_mode_retry: - if (!iio_device_try_claim_buffer_mode(indio_dev)) { - /* - * This one is a *bit* hacky. If we cannot claim buffer - * mode, then try direct mode so that we make sure - * things cannot concurrently change. And we just keep - * trying until we get one of the modes... - */ - if (!iio_device_claim_direct(indio_dev)) - goto any_mode_retry; + IIO_DEV_GUARD_CURRENT_MODE(indio_dev); =20 - ret =3D max30102_get_temp(data, val, true); - iio_device_release_direct(indio_dev); - } else { - ret =3D max30102_get_temp(data, val, false); - iio_device_release_buffer_mode(indio_dev); - } + ret =3D max30102_get_temp(data, val, !iio_buffer_enabled(indio_dev)); if (ret) return ret; =20 - ret =3D IIO_VAL_INT; - break; + return IIO_VAL_INT; + } case IIO_CHAN_INFO_SCALE: *val =3D 1000; /* 62.5 */ *val2 =3D 16; - ret =3D IIO_VAL_FRACTIONAL; - break; + return IIO_VAL_FRACTIONAL; + default: + return -EINVAL; } - - return ret; } =20 static const struct iio_info max30102_info =3D { --=20 2.52.0 From nobody Sun Feb 8 03:58:03 2026 Received: from mail-ua1-f41.google.com (mail-ua1-f41.google.com [209.85.222.41]) (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 566AC1D798E for ; Sun, 18 Jan 2026 15:45:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768751116; cv=none; b=D3WpDQoVIuMwPDz2sORKrZa+3dsiIo7aiDYmHDcl1xTVjoqoUlqDPOrDLmVpsp309xtPqU8UjIqnRF0BZgaXVcWL44AWRmCa4Thp60fID3yjweGw7XYwQlo2DnNFsjhOWuqSqtNJMy18Vp/8cjQ/UHFNWYXk0fMKFY5z24VHBqQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768751116; c=relaxed/simple; bh=K/GzZXmVDH5d3ajOh9Vses0jzRTbszvo9JEIlad+htc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XgURx1j9BgmCq6rufmkKegu5WCbn3CB76XdwSCW1uc2LFCkkOKqIKD7xdetuTZM8LWeUJMu8JX51yiU1QSyqEqhXe4tq5haZJ5Fl+VXkohET65L/3xfjEBq8F92QYs/Cs073qmXWZnqsM4rC6skgdWAhC1wC3PSaKAgXnYgN2xU= 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=eONvwQ+1; arc=none smtp.client-ip=209.85.222.41 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="eONvwQ+1" Received: by mail-ua1-f41.google.com with SMTP id a1e0cc1a2514c-94240659ceaso991451241.3 for ; Sun, 18 Jan 2026 07:45:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768751108; x=1769355908; 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=SUuEqo1bBPTtYvx/6MqHHwRERlW4p1/ugxXmq/ssirA=; b=eONvwQ+1y3RaaoDq2SjOK+W8t4cWq5V727BqcxUo3q0zexkDCy+ePe0EJiBokHg48x 50PbRgXmGDls/cUqflqS7GPNGQJpk2UuW/aKfwwoB2NWc2A5OVysb4fqcRuYCz4GVyjU W1puEEVZ6XXzN8CtF3wzVz7jAV67G4gm1/5j4pkWFNE0rn66LaH3R6z86ydo4mfmVqQl wKmmLGZUuSu6ylKYcf7mtCRf6z+Ldbo8RACZgxp1QPF2zPFGN8IjG7kpVKqydtVsFEDv HGZ2noJCw6ZwlAlo8YZSZx9h98W0Wcpj+NDeVdQ1eL1r2QkKmldmlu0VIoyCPvtyYU4S 5sOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768751108; x=1769355908; 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=SUuEqo1bBPTtYvx/6MqHHwRERlW4p1/ugxXmq/ssirA=; b=mg9aWFnEpg0jg+f5XH15IxuejeGB8uxAY2EZwpXETm/7aU7oAF8l/PTSMR/JhqR1cV 9lWQCm5+J5WFN7IZcz2eMLMWspxK1RcEhLj9twxHqax7eXenGUt5ASi14Roah5tc4/JX cNKmtfJQ+ZV/TDkhSvIqFA78Bc2Lh2944+0TLOBHB6jec9YAyJdpPkD/ruzi1FI23yg5 YTG8EcvGTTJVOhNOEsa1K7T9/EM9ir4mCEFm5oYKwo3FoN5hLwCl8unzxtNHnnK801b2 qmXyvUBu4DHBOJJDV3R+eMp2LuPZdUzAX0OqHLtWYmhnkL8/oHbrAEaaT3c1S/FikgAN BTNQ== X-Forwarded-Encrypted: i=1; AJvYcCXQJV29pWkR/JvII9k9JU3IP3f7FbY9NsUIpa/RWbWRnJFj9LzkiNz+bfY4pEOYWxiTM1lZGvkGdhucNJQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzxNLDubHBzuVHqHh3Mo8pZrgfAsTEfLxhFRF6K6/zm7G4+1fHG GN6dl8s77Wi/7cvQ9nXm5777Q72Xk86o0RCGVQY3xIdhGQJ3SVKX11Le X-Gm-Gg: AY/fxX5v4ayBQ/sfyPQ05Zvxjoth4jx/UWuRJXyziZsmkC7NeUaWNYagpgnIHdBGeV1 uVQkJtwIXB+Hd4CXh915OvN+g6XmJl2MaEIAG/5kBZ33Qk8WMolCk5c/tySnYHbJXdAeSMWO+q4 7QrcdFCH0tGPZDG+bHoDBBTrWC9GWTCPInHXoNQcyhiH3go8HKMdTN5nO+Or2jL8u7fbP8DyjS7 SoCfPG014CtGY0FF7adPx8uk8SGW0kuG+DT2Vo84woC3l/gXk9SEmHrwnmwHLvIpOvS+oQBe18q YQcHxOfX4PXWO8Rn8oZXg7TB7NWklY175y3+XNN//YbZe1VtaMsXu46vHxGPFvHZ5sL1VfVOERj 7rYemF6RxFq4lChdlM1Eq1Xz6vZ8FZW8q2o5+nKpBgOf+oNxFFcHM5XNiN/42Gk07pQM6J1mRmE CoEJkAmFExAcAc X-Received: by 2002:a05:6102:38c9:b0:5db:d60a:6b24 with SMTP id ada2fe7eead31-5f1a5527da2mr2484137137.22.1768751107999; Sun, 18 Jan 2026 07:45:07 -0800 (PST) Received: from [192.168.100.253] ([2800:bf0:82:11a2:7ac4:1f2:947b:2b6]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-5f1a6d3ca2esm2832731137.10.2026.01.18.07.45.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 07:45:07 -0800 (PST) From: Kurt Borja Date: Sun, 18 Jan 2026 10:44:34 -0500 Subject: [PATCH v4 7/7] iio: light: opt4060: Use IIO cleanup helpers 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: <20260118-lock-impr-v4-7-6c8d0aee8ed2@gmail.com> References: <20260118-lock-impr-v4-0-6c8d0aee8ed2@gmail.com> In-Reply-To: <20260118-lock-impr-v4-0-6c8d0aee8ed2@gmail.com> To: Andy Shevchenko , Lars-Peter Clausen , Michael Hennerich , Jonathan Cameron , Benson Leung , Antoniu Miclaus , Gwendal Grignou , Shrikant Raskar , Per-Daniel Olsson Cc: David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Guenter Roeck , Jonathan Cameron , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, chrome-platform@lists.linux.dev, Kurt Borja X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2688; i=kuurtb@gmail.com; h=from:subject:message-id; bh=K/GzZXmVDH5d3ajOh9Vses0jzRTbszvo9JEIlad+htc=; b=owGbwMvMwCUmluBs8WX+lTTG02pJDJk5/z9efWr+Xjwq72RES8m2CyrWnD3Hl+pwmrgYfxLYr ZO1amNlRykLgxgXg6yYIkt7wqJvj6Ly3vodCL0PM4eVCWQIAxenAExEQ4WR4V1Q1p3SkOX1NZxR 6XZG2W/4HgQtZT74dGqV7PYjx4+9SWP4w8lyUSt/QbZJTPfrdVk19xOLD16O6vD6OcNm6lEdPt0 HjAA= X-Developer-Key: i=kuurtb@gmail.com; a=openpgp; fpr=54D3BE170AEF777983C3C63B57E3B6585920A69A Use IIO_DEV_GUARD_CURRENT_MODE() cleanup helper to simplify and drop busy-waiting code in opt4060_set_driver_state(). Reviewed-by: David Lechner Reviewed-by: Nuno S=C3=A1 Signed-off-by: Kurt Borja --- drivers/iio/light/opt4060.c | 52 +++++++++++++++--------------------------= ---- 1 file changed, 17 insertions(+), 35 deletions(-) diff --git a/drivers/iio/light/opt4060.c b/drivers/iio/light/opt4060.c index 8c4a1f562a83..d6e915ab355d 100644 --- a/drivers/iio/light/opt4060.c +++ b/drivers/iio/light/opt4060.c @@ -302,41 +302,23 @@ static int opt4060_set_driver_state(struct iio_dev *i= ndio_dev, bool continuous_irq) { struct opt4060_chip *chip =3D iio_priv(indio_dev); - int ret =3D 0; -any_mode_retry: - if (!iio_device_try_claim_buffer_mode(indio_dev)) { - /* - * This one is a *bit* hacky. If we cannot claim buffer mode, - * then try direct mode so that we make sure things cannot - * concurrently change. And we just keep trying until we get one - * of the modes... - */ - if (!iio_device_claim_direct(indio_dev)) - goto any_mode_retry; - /* - * This path means that we managed to claim direct mode. In - * this case the buffer isn't enabled and it's okay to leave - * continuous mode for sampling and/or irq. - */ - ret =3D opt4060_set_state_common(chip, continuous_sampling, - continuous_irq); - iio_device_release_direct(indio_dev); - return ret; - } else { - /* - * This path means that we managed to claim buffer mode. In - * this case the buffer is enabled and irq and sampling must go - * to or remain continuous, but only if the trigger is from this - * device. - */ - if (!iio_trigger_validate_own_device(indio_dev->trig, indio_dev)) - ret =3D opt4060_set_state_common(chip, true, true); - else - ret =3D opt4060_set_state_common(chip, continuous_sampling, - continuous_irq); - iio_device_release_buffer_mode(indio_dev); - } - return ret; + + IIO_DEV_GUARD_CURRENT_MODE(indio_dev); + + /* + * If we manage to claim buffer mode and we are using our own trigger, + * IRQ and sampling must go to or remain continuous. + */ + if (iio_buffer_enabled(indio_dev) && + iio_trigger_validate_own_device(indio_dev->trig, indio_dev)) + return opt4060_set_state_common(chip, true, true); + + /* + * This path means that we managed to claim direct mode. In this case + * the buffer isn't enabled and it's okay to leave continuous mode for + * sampling and/or irq. + */ + return opt4060_set_state_common(chip, continuous_sampling, continuous_irq= ); } =20 /* --=20 2.52.0