From nobody Mon Sep 28 18:37:17 2026 Received: from mail-43171.protonmail.ch (mail-43171.protonmail.ch [185.70.43.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6AD1C47207C; Mon, 28 Sep 2026 08:26:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.70.43.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790583991; cv=none; b=Je3mwK6cGVC2ybWfdrArFVidJn/8i7D5M7teslNufYeZ/i9U6AB4ih39WEGzlyG48orlKp1EQzHR7yi7O7jpgacWyB3g/ZfS4A1VdyGLEI2eK507uar7+ap3KAQnjE+vkI9L+0s5ob0xXcEyJ4+EiVKtL2WmdXRiQFJ5TXBq1Yg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790583991; c=relaxed/simple; bh=Vy2kFGWf40LZZu/OrRKxOp27EqZPY3iYxkaZKLnSAbQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gEMIRB8hqZAInOGGw2+4e60AI4bXGvXw9HFfAqcxniSZBGyz76DUFBie+PDrHc9Y3hx8fG05KkgXl+ovlou+N5E77oH0JyZV5d/LkaopLsbpk/X9aO950FMENpI6mv/1HUBk/Xg8imHO9KcZDVNmHoMdGNhOloYJ2dyIwtx1qxI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com; spf=pass smtp.mailfrom=geanix.com; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b=jTJ73O6N; arc=none smtp.client-ip=185.70.43.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=geanix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b="jTJ73O6N" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=geanix.com; s=protonmail; t=1790583987; x=1790843187; bh=sNcmNScEhpmF/4cOJIi/n2ntDi0iE/3WYicZo1sq86I=; h=From:Date:Subject:Message-Id:References:In-Reply-To:To:Cc:From:To: Cc:Date:Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=jTJ73O6NQHocJTaFr6Wk4f5K1+ojTAxeetq0mr4QhhhXAEKo6sisRoWFVW5gu790I xLk5ztT0O53zjLoOo6fMMrOO2KgxTPmWDXEBaFpvrSThptoKKDh8Rsz3jzElgUHm9P oR+SbtN/MFj8HLWwFDpZkC/hgpTWjj6pLzPsV1c1qlE6PzRUFjW8nTYdgTf/51NieE uxMcVZPrAqQvddXPlc/b/3sWDf4BmtcPsNN4rJu6niICvukUXlqwCor5rm0T50GLDs QSbx4+laDurERWy3HOwTID5hg1qwh6TM542SKmfj4fiyv67wVA6WWcB8l+iMH8cEll 3zkTSZpGOzf9Q== X-Pm-Submission-Id: 4htZCP0cRZz2ScPR From: Esben Haabendal Date: Mon, 28 Sep 2026 10:26:17 +0200 Subject: [PATCH v10 01/10] dt-bindings: iio: accel: mma8452: Add drive-open-drain 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: <20260928-mma8452-open-drain-v10-1-b906fb408386@geanix.com> References: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> In-Reply-To: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> To: Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Martin Kepplinger , Sean Nyekjaer , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Martin Kepplinger , Christoph Muellner Cc: Esben Haabendal , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790583982; l=1037; i=esben@geanix.com; s=20240523; h=from:subject:message-id; bh=Vy2kFGWf40LZZu/OrRKxOp27EqZPY3iYxkaZKLnSAbQ=; b=WOfKVFoIdlbzzGQpUNMuIJ5fYJO+3j19yW1XNke+sMwb3ToCBUU3PxKdoufRDZCZjdHRDS9sS h7pVSL6tq6MDHuILZ3ryOiZaQn1qfMhrp8dIoSaSdy8FM3fr6Q2AG6A X-Developer-Key: i=esben@geanix.com; a=ed25519; pk=PbXoezm+CERhtgVeF/QAgXtEzSkDIahcWfC7RIXNdEk= Add new boolean to configure selected interrupt pin to open drain instead of the default push-pull mode. Acked-by: Rob Herring (Arm) Signed-off-by: Esben Haabendal --- Documentation/devicetree/bindings/iio/accel/fsl,mma8452.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Documentation/devicetree/bindings/iio/accel/fsl,mma8452.yaml b= /Documentation/devicetree/bindings/iio/accel/fsl,mma8452.yaml index b0dd2b4e116a..20701aa725d0 100644 --- a/Documentation/devicetree/bindings/iio/accel/fsl,mma8452.yaml +++ b/Documentation/devicetree/bindings/iio/accel/fsl,mma8452.yaml @@ -39,6 +39,12 @@ properties: minItems: 1 maxItems: 2 =20 + drive-open-drain: + $ref: /schemas/types.yaml#/definitions/flag + description: the interrupt line will be configured as open drain, whic= h is + useful if several sensors share the same interrupt line. (This bindi= ng is + taken from pinctrl.) + vdd-supply: true vddio-supply: true =20 --=20 2.55.0 From nobody Mon Sep 28 18:37:17 2026 Received: from mail-43172.protonmail.ch (mail-43172.protonmail.ch [185.70.43.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 34E49472F6A; Mon, 28 Sep 2026 08:26:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.70.43.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790583998; cv=none; b=SnUSO8H2X/1HvBnEmbYKGK0soL70bjRFGSHDWemLVutOCE9SIvN8ZWL8Uk67bIJVLjIslm87z1552wud7plyacJxmcBD+EHIibJhWSXNXTFfe5dqJavizWWP2tg8+qDsouQYysBFGgeFQH/f7G7aiAMtZbHT+riLk8jNtu+nVxg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790583998; c=relaxed/simple; bh=5aHhFmRHH7hXWezUncCFq6AliuOuzN9v+On7qJIecuQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qNoAo6sMcRT8p/eKPI1ih841upfoEBOlyQptj8OE/mIYCsDo0MukbO7D4maKEs8kVUURLXwPLHV9D6jW0WO5igf+UoG8Rju/UtFOX4ypTYaaPak4DJr5T+n76fux6BwtFmyFffbCXq/+4KPouCbcWOB1EZD2aSnbkzXvJBU/IkQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com; spf=pass smtp.mailfrom=geanix.com; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b=NTDu6Qw8; arc=none smtp.client-ip=185.70.43.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=geanix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b="NTDu6Qw8" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=geanix.com; s=protonmail; t=1790583989; x=1790843189; bh=zOE/xhizi9/jAXNjhr878qhJ9pvevPWCdRYDdJUXczg=; h=From:Date:Subject:Message-Id:References:In-Reply-To:To:Cc:From:To: Cc:Date:Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=NTDu6Qw8bGoZOGwoxJifS+qzqMUIBygrTiRw2Ru1Rl5N28GQqDgAueS6/DIx9b0zx L/Cl6pI3uJ3O791yqxd3/p9S8mEgubAso+NOpQGH1aMMx4rJK98EdPKC9e6qNxgnrV nsaQ+i8isj4YOVJf9s2gEwliqqDO1LmYWYJL+4sE2LWYj4+3eFCPTa4iwnO2JDdHV8 zxA0sqLIyDASLAAsm6MkCnobphFL8aItbeJaR0+xX6XDITk7ct7lQquH6jx9rjpFkg I2WSScPWGEL+nKWVlHR8n8yw2ndthx7xUuvON4g2GZ5DwdOnfi18iVjuC0mXfghJCl NfFp9NwGQhdOg== X-Pm-Submission-Id: 4htZCR2PRLz1DF4w From: Esben Haabendal Date: Mon, 28 Sep 2026 10:26:18 +0200 Subject: [PATCH v10 02/10] iio: accel: mma8452: Fix use-after-free bug in error error path 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: <20260928-mma8452-open-drain-v10-2-b906fb408386@geanix.com> References: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> In-Reply-To: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> To: Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Martin Kepplinger , Sean Nyekjaer , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Martin Kepplinger , Christoph Muellner Cc: Esben Haabendal , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Joshua Crofts X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790583982; l=1204; i=esben@geanix.com; s=20240523; h=from:subject:message-id; bh=5aHhFmRHH7hXWezUncCFq6AliuOuzN9v+On7qJIecuQ=; b=hW8GY8QUKVx4DKCL9nU/p3fhVjaQ36BWQAEmTL/kneYuZYusYvByhxM9Dp7cILHmYQGl6ptke cbi4odVoe1nCUd2Bu36B99n8326BntOr/vf4cpoSHolvP2R3twXsiVD X-Developer-Key: i=esben@geanix.com; a=ed25519; pk=PbXoezm+CERhtgVeF/QAgXtEzSkDIahcWfC7RIXNdEk= If mma8452_probe() fails in iio_device_register() or later, we could end up with runtime suspend callback being called with a now freed device pointer. Fixes: 96c0cb2bbfe0 ("iio: mma8452: add support for runtime power managemen= t") Cc: stable@vger.kernel.org Reviewed-by: Joshua Crofts Signed-off-by: Esben Haabendal --- drivers/iio/accel/mma8452.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c index fe62a903f0e2..a937cbd84f30 100644 --- a/drivers/iio/accel/mma8452.c +++ b/drivers/iio/accel/mma8452.c @@ -1681,7 +1681,7 @@ static int mma8452_probe(struct i2c_client *client) =20 ret =3D iio_device_register(indio_dev); if (ret < 0) - goto free_irq; + goto runtime_suspend; =20 ret =3D mma8452_set_freefall_mode(data, false); if (ret < 0) @@ -1692,6 +1692,10 @@ static int mma8452_probe(struct i2c_client *client) unregister_device: iio_device_unregister(indio_dev); =20 +runtime_suspend: + pm_runtime_disable(dev); + pm_runtime_set_suspended(dev); + free_irq: if (client->irq) free_irq(client->irq, indio_dev); --=20 2.55.0 From nobody Mon Sep 28 18:37:17 2026 Received: from mail-43172.protonmail.ch (mail-43172.protonmail.ch [185.70.43.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 010BB4746A3; Mon, 28 Sep 2026 08:26:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.70.43.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584007; cv=none; b=NqacszQ8QSMTcyHqBq3ZixVlnewihTZpNVQlXqCYAkfYSljLV5SlqUTHh6k06/1+idZdauGDlyvE/NJtIR9INfYynuxVRxazYQC+0R9UsiBbJeqstdMio2jiBzPspLXSPEUUJe+zvsgcsGkc36I0LTZ3e6CWs/2Mk99hPcnCblw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584007; c=relaxed/simple; bh=7g4Bx6VcNobxJ0NKjiVjkZ2NfOoDHgnEhpsjeZEGI9Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=k+sG8V0V7dtCclJPVYuZx0QAb/pvxnS1zS2pn5yztagUlz1bsOiJmD8+IVDcqt2O9yL7QtdmMawoCy3QSJ9Kxliy1IMn6EMExopCsl5gBib6dETvm8KB9vcBiYAdnjOBNdZbdAWni4epL3m1fNsSzexbExULnGp+q77cWtalj9o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com; spf=pass smtp.mailfrom=geanix.com; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b=QCwGg2aV; arc=none smtp.client-ip=185.70.43.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=geanix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b="QCwGg2aV" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=geanix.com; s=protonmail; t=1790583991; x=1790843191; bh=KdnGPyMt+WNrC+sXSZeon9pFIAKeJSHes4isdLhm8wg=; h=From:Date:Subject:Message-Id:References:In-Reply-To:To:Cc:From:To: Cc:Date:Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=QCwGg2aV6Ljp0sU8JTdCvDyZjb2H+DjHRYSIKhYvwliw25PlYhDN7fb2K9+ygymTq 3ZsbyqbQSaahHncMgRA9iujoLkqmL/2uUUcAeamjcrnjl4teo5aTfoW+x3+kHZdSM4 PWKwYxRN2P7yb8YfHvLqEzVkYp3rGMJqMxibXBZv7kS4lxa31swR0elorUqgiJFZ7b hNFkHXj9GUsUrJ2etUltiSdAfP5LH2saglSP8bMdeURRLdPKxLt6P0wuwEa0U3xyNV HhZlKHRf7hbbhL7GO5xckIasKazLzJ/JdzVujNpQAsi1ouZ3Lj487YrYduw0fMBSsf bR8n9ODvPFp7Q== X-Pm-Submission-Id: 4htZCT6QNMz2ScpX From: Esben Haabendal Date: Mon, 28 Sep 2026 10:26:19 +0200 Subject: [PATCH v10 03/10] iio: accel: mma8452: Fix runtime PM bugs in mma8452_read() 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: <20260928-mma8452-open-drain-v10-3-b906fb408386@geanix.com> References: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> In-Reply-To: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> To: Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Martin Kepplinger , Sean Nyekjaer , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Martin Kepplinger , Christoph Muellner Cc: Esben Haabendal , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790583982; l=2127; i=esben@geanix.com; s=20240523; h=from:subject:message-id; bh=7g4Bx6VcNobxJ0NKjiVjkZ2NfOoDHgnEhpsjeZEGI9Y=; b=txX77s4OaVR6OD1k8sTLGTpuIPLUvakGwmS4wze10HMHy3j43ChPZynnkTq1QL4MHV2e9PV6w J1hwwYlxOS4C7lczPQfMLisZULSYUuf6dluG/Occ9js5IabHTLeMa4M X-Developer-Key: i=esben@geanix.com; a=ed25519; pk=PbXoezm+CERhtgVeF/QAgXtEzSkDIahcWfC7RIXNdEk= When runtime PM support was added [1], the implementation in mma8452_read() was done incorrectly, as it calls mma8452_drdy() before ensuring runtime pm has set the device active, so it can cause read from STATUS register while device is suspended/off. At the same time, the return value from i2c_smbus_read_i2c_block_data() was discarded, and the function would return the value returned from pm_runtime_put_autosuspend() instead. When the latter bug described above was fixed [2], another bug was introduced, as mma8452_read() would now leak the runtime PM reference counter when i2c_smbus_read_i2c_block_data() failed. This commit corrects this mess. [1] commit 96c0cb2bbfe0 ("iio: mma8452: add support for runtime power manag= ement") [2] commit 5bdff291d20c ("iio: accel: mma8452: handle I2C read error(s) in = mma8452_read()") Fixes: 96c0cb2bbfe0 ("iio: mma8452: add support for runtime power managemen= t") Cc: stable@vger.kernel.org Signed-off-by: Esben Haabendal --- drivers/iio/accel/mma8452.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c index a937cbd84f30..a77c4b88b61d 100644 --- a/drivers/iio/accel/mma8452.c +++ b/drivers/iio/accel/mma8452.c @@ -242,21 +242,25 @@ static int mma8452_set_runtime_pm_state(struct i2c_cl= ient *client, bool on) =20 static int mma8452_read(struct mma8452_data *data, __be16 buf[3]) { - int ret =3D mma8452_drdy(data); - - if (ret < 0) - return ret; + int ret; =20 ret =3D mma8452_set_runtime_pm_state(data->client, true); if (ret) return ret; =20 + ret =3D mma8452_drdy(data); + if (ret < 0) + goto out_runtime_put; + ret =3D i2c_smbus_read_i2c_block_data(data->client, MMA8452_OUT_X, 3 * sizeof(__be16), (u8 *)buf); if (ret < 0) - return ret; + goto out_runtime_put; + + return mma8452_set_runtime_pm_state(data->client, false); =20 - ret =3D mma8452_set_runtime_pm_state(data->client, false); +out_runtime_put: + mma8452_set_runtime_pm_state(data->client, false); =20 return ret; } --=20 2.55.0 From nobody Mon Sep 28 18:37:17 2026 Received: from mail-43170.protonmail.ch (mail-43170.protonmail.ch [185.70.43.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F29B474273 for ; Mon, 28 Sep 2026 08:26:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.70.43.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584000; cv=none; b=E3hQaufYuZeO3mVbOBPHFHanv3/APM5g63vFc0xnFVKNTHQEawCNfBwFY+Elq4i2yyX7OPxoLoAjDR39DqmIsAWES8fTGdddktebsZgTdS2lMxg7MxpIozvsq/chkO+Zfo+fDERG+qpiVq0RzkMF3iwold0WV3s3rMVtNQzj5Jw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584000; c=relaxed/simple; bh=ZsRWQ2cy4/2MshimBga9KEvo5MqZ+GDpAPXPf+c/Lk0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Xjw5YXb8T5ygA21gYeHw/yIWz3pYYFurtWAqWgvPMVOL6fQVqsGAnPLzFa6Fv7TUQnB/EbllbKhhqsswbBQ8vvQPx+IAcZOaWUuFqTTVxG/jCFkMWjcj6dVlyUpDNpJa1EuXPW82RlMllgErwW3dGSbgFBFPW+wl5Q5saajNxpo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com; spf=pass smtp.mailfrom=geanix.com; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b=bTQTSyj2; arc=none smtp.client-ip=185.70.43.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=geanix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b="bTQTSyj2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=geanix.com; s=protonmail; t=1790583993; x=1790843193; bh=hvvSu4jQNAlUbHyw4OnEn6UGVnkOGTmR1TTHMd7EAHk=; h=From:Date:Subject:Message-Id:References:In-Reply-To:To:Cc:From:To: Cc:Date:Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=bTQTSyj2Wh6yHEMqKBWRnj8u278eOz4VE46idtRD97rFf4OQfpTykuaga65V4Y2/d UV0h4SWwtQpblN5OIfG20a3JAiJKxWBKOWtD5hYSc9mwxuptI532tG1uVlqBJkaESv +XVSv0z2m0FQm+2D8G+EPcQc4qJx7mW4+TvxseOVXNqiYnU/TNva8c54mdmP5U8Dif BP7gq/AsQEMvLYxUEIFobOg1EJxkVk6qrIN+JKTQYGp+NY1LcfSlHXoMzSr9eCHeRE 7n9V8kLvTgNAPNBOgqXYn+wCd3GU+c2keIh6KvvbIx+Glzft8UVUZRno3BTCXeX22p HTSyzYWkHcWfg== X-Pm-Submission-Id: 4htZCX0QnDz1DDr6 From: Esben Haabendal Date: Mon, 28 Sep 2026 10:26:20 +0200 Subject: [PATCH v10 04/10] iio: accel: mma8452: Optimize struct mma8452_data member orders 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: <20260928-mma8452-open-drain-v10-4-b906fb408386@geanix.com> References: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> In-Reply-To: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> To: Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Martin Kepplinger , Sean Nyekjaer , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Martin Kepplinger , Christoph Muellner Cc: Esben Haabendal , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Joshua Crofts , Andy Shevchenko X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790583982; l=1020; i=esben@geanix.com; s=20240523; h=from:subject:message-id; bh=ZsRWQ2cy4/2MshimBga9KEvo5MqZ+GDpAPXPf+c/Lk0=; b=+CiKrUilw2HCNaA27oIiGHyuAhZLqIMYW1ZUQ984TBc6ADN6P2AqMgEE32SrwvyG3pvnMpSJn hQNn50LMdntCyBLYOHRmSfKuOIe3TaGgW8W7xFzgjV4uAsXn2yDrAIE X-Developer-Key: i=esben@geanix.com; a=ed25519; pk=PbXoezm+CERhtgVeF/QAgXtEzSkDIahcWfC7RIXNdEk= Reorder struct mma8452_data members to avoid holes. Reviewed-by: Joshua Crofts Reviewed-by: Andy Shevchenko Signed-off-by: Esben Haabendal --- drivers/iio/accel/mma8452.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c index a77c4b88b61d..8d70fe89110c 100644 --- a/drivers/iio/accel/mma8452.c +++ b/drivers/iio/accel/mma8452.c @@ -108,10 +108,7 @@ struct mma8452_data { struct i2c_client *client; struct mutex lock; struct iio_mount_matrix orientation; - u8 ctrl_reg1; - u8 data_cfg; const struct mma_chip_info *chip_info; - int sleep_val; struct regulator_bulk_data regs[2]; =20 /* Ensure correct alignment of time stamp when present */ @@ -119,6 +116,10 @@ struct mma8452_data { __be16 channels[3]; aligned_s64 ts; } buffer; + + int sleep_val; + u8 ctrl_reg1; + u8 data_cfg; }; =20 /** --=20 2.55.0 From nobody Mon Sep 28 18:37:17 2026 Received: from mail-106112.protonmail.ch (mail-106112.protonmail.ch [79.135.106.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4311D473C80 for ; Mon, 28 Sep 2026 08:26:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=79.135.106.112 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584004; cv=none; b=H4wQax97GXlnpPC7a3pfbEicJq/2CA40w1wPoYS9vOlyzqhAJ2Y4iM3HjnC3C9LATK5fq6UfVcmhxamjqzXdxqcZqEIO01FTgS/XEO8cSfBM9oXUVgMKzZzJw0UXeOOWAZoBvd5oeylfryVGFGkP8JpsW3l2lGnJLYw55EkX7j8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584004; c=relaxed/simple; bh=uPZchZjn6UkglmRiByWIsLTuCMTQTNFVKTPStIfIxjQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ums4vygvoYHZjMnfYh5hGmnlZuF5D/BRIFx4mRrgMRTw4p42L1mwVM2RGoPzHi0+i+Gvi4GthccUIGstp7dkbh80YpttAp8dlV3wRm23K7FB/Aqy70BtPMncnLb3u8DTutqzAC4vxXY0K40q+NlaflykjsYpzzO7HSWrz8HWCXM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com; spf=pass smtp.mailfrom=geanix.com; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b=BOndjyZ5; arc=none smtp.client-ip=79.135.106.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=geanix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b="BOndjyZ5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=geanix.com; s=protonmail; t=1790583997; x=1790843197; bh=CkyR3JWxdNK53MZOpOdoX4HeDh3SJwW8Fzkq3YTz0p0=; h=From:Date:Subject:Message-Id:References:In-Reply-To:To:Cc:From:To: Cc:Date:Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=BOndjyZ562mSeKe/YeUjruRO1KLhULB/knx87kCYnJ8Pmzmcy4RVwqz88ykR5aUhr ATXYbPJbQ7YURwlCvGGyqOh9j4Q41/SADn5k3Br2cppnuITROWY8PMV+j42MXXSDgt 3HcJjuIIdee83dFTUOnd1CaVYia1p1VxGKxxi1blHKd82V+h+R2mXk9pO4zii5vUkF 2Iw3Alckv07TdUd7J9R0Fx6uVeQOJb6XVhaK1Fay9lPOu89FF/m8wwFn91PFMT+0nx BIEaInCkCNPGihGDnYz6c3m2nrFNK7K9p/L0tqbrMxNrazHp+34iAmKOoA8OEJwMsq zMHd+rXD6lSBA== X-Pm-Submission-Id: 4htZCY1VWPz2ScDC From: Esben Haabendal Date: Mon, 28 Sep 2026 10:26:21 +0200 Subject: [PATCH v10 05/10] iio: accel: mma8452: Only apply trigger type when not set by firmware 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: <20260928-mma8452-open-drain-v10-5-b906fb408386@geanix.com> References: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> In-Reply-To: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> To: Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Martin Kepplinger , Sean Nyekjaer , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Martin Kepplinger , Christoph Muellner Cc: Esben Haabendal , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Andy Shevchenko X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790583982; l=1389; i=esben@geanix.com; s=20240523; h=from:subject:message-id; bh=uPZchZjn6UkglmRiByWIsLTuCMTQTNFVKTPStIfIxjQ=; b=AxpHNoe2UZf+1XzA5GOSvktWHnuOvxZRVU0yZYmOQTSA/WVbtTqiiSG9N1ww2sIQoQGIpYTSe nLGN/CwwvkxBDY43jWeEQMaHgUeJUxKiBMksWnvyWzTTtlrpYk3zOBU X-Developer-Key: i=esben@geanix.com; a=ed25519; pk=PbXoezm+CERhtgVeF/QAgXtEzSkDIahcWfC7RIXNdEk= Instead of unconditionally overriding the trigger type, it is better to only apply a default when no trigger type is set by firmware. This should be reasonably backward compatible, and should only potentially cause problems if systems exist where firmware specifies an incorrect trigger type. With a bit of luck, there are no such systems. Reviewed-by: Andy Shevchenko Signed-off-by: Esben Haabendal --- drivers/iio/accel/mma8452.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c index 8d70fe89110c..72b4ab32775a 100644 --- a/drivers/iio/accel/mma8452.c +++ b/drivers/iio/accel/mma8452.c @@ -1669,9 +1669,16 @@ static int mma8452_probe(struct i2c_client *client) goto trigger_cleanup; =20 if (client->irq) { + unsigned long irq_flags; + + irq_flags =3D irq_get_trigger_type(client->irq); + if (irq_flags =3D=3D IRQ_TYPE_NONE) { + dev_info(dev, "invalid irq type, setting default active low\n"); + irq_flags =3D IRQF_TRIGGER_LOW; + } + irq_flags |=3D IRQF_ONESHOT; ret =3D request_threaded_irq(client->irq, NULL, mma8452_interrupt, - IRQF_TRIGGER_LOW | IRQF_ONESHOT, - client->name, indio_dev); + irq_flags, client->name, indio_dev); if (ret) goto buffer_cleanup; } --=20 2.55.0 From nobody Mon Sep 28 18:37:17 2026 Received: from mail-244106.protonmail.ch (mail-244106.protonmail.ch [109.224.244.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C2BFD475330 for ; Mon, 28 Sep 2026 08:26:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=109.224.244.106 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584006; cv=none; b=A6H2ma3qhVkHaFHykD2Btp+61WdQHyi8vxMCOf5h2ypTEtjGYZjQxEVlg2z7eZqoUxkpEQJksKQ+SIw39YZ0fur0BjhGd9H5DzY5OM15HRj0j/+rLno9lZjnwHGIKDvJStnJwWVNV8NvEcl1+9kibctOEcDtH5sMwNi++FPnih8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584006; c=relaxed/simple; bh=K1jPbnIpn2vPrtvqzcNi7Vjb6hG0x04g8LVYMsnM6gY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LK8HltojwVloffu4Fod+MxijKIgF0fGt9shp/b3ExvWgvcmafzqSoCbjQ1qf1YjZKy0rdupc19HcOWiBpmpDaB0TVy/5GoIy5GWKUCl7nX6afJaumGJmbS0cdU75FA9rv8SeAuJ7upiwECt5pH0J98Cfk6fYC/Jwg89CeAzgNrs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com; spf=pass smtp.mailfrom=geanix.com; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b=SAkM/9NG; arc=none smtp.client-ip=109.224.244.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=geanix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b="SAkM/9NG" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=geanix.com; s=protonmail; t=1790583998; x=1790843198; bh=QCIfMsx6KjKXpnoxBI1XGkxGk4Y7Sik+nYV7bSHmLbY=; h=From:Date:Subject:Message-Id:References:In-Reply-To:To:Cc:From:To: Cc:Date:Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=SAkM/9NGJ3VcY3M2BzND+fCxorHLcBG3ZFDSBST6Sx/1wUl5RYxkLyzjKM5TiKzXB cI7B3L+oN89d6cLY9ixUUAxuJ4sJd+cHzNse43h3W95xk40AXLG2xgATUDyH8paMX/ IipJKFlzp9PrvV9A8Nf/jVmHymd//nh22lpvzvak0Frhzbu1AU71rJrLsQCxOdfpkg dkdA/JEeUHgPv35sSHSxk1qLBmsb+JvlV56pEUdBFKradZF+6C2fIQkhMpCq53OXTp 5K7+Z8aoaPvFBvTJ7NZES2K6fQrYk40cJTY4Dsd7gsGojU3giFq8Kz59xkiLbhsDNd fnMhBPk4Fxlrw== X-Pm-Submission-Id: 4htZCc4b0hz1DF6h From: Esben Haabendal Date: Mon, 28 Sep 2026 10:26:22 +0200 Subject: [PATCH v10 06/10] iio: accel: mma8452: Fix unintended comment indent 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: <20260928-mma8452-open-drain-v10-6-b906fb408386@geanix.com> References: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> In-Reply-To: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> To: Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Martin Kepplinger , Sean Nyekjaer , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Martin Kepplinger , Christoph Muellner Cc: Esben Haabendal , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Joshua Crofts X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790583982; l=2166; i=esben@geanix.com; s=20240523; h=from:subject:message-id; bh=K1jPbnIpn2vPrtvqzcNi7Vjb6hG0x04g8LVYMsnM6gY=; b=qJdKs2Xt7zSoQ7rvCmwU1/ZF3pwXf4Ud0z7Hyl/UdwOLZXcYruTOi0odto9YhsaJXmanItsTE ji/aMTIyg/2A1A11HtHShn/HXQDrR2b+nN1cAubAVv9r+4Cq7sQULB3 X-Developer-Key: i=esben@geanix.com; a=ed25519; pk=PbXoezm+CERhtgVeF/QAgXtEzSkDIahcWfC7RIXNdEk= The extra space this block was indented with looks quite untraditional, and does not align with the common style used in the kernel. Reviewed-by: Joshua Crofts Signed-off-by: Esben Haabendal --- drivers/iio/accel/mma8452.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c index 72b4ab32775a..b70bc8638128 100644 --- a/drivers/iio/accel/mma8452.c +++ b/drivers/iio/accel/mma8452.c @@ -122,21 +122,21 @@ struct mma8452_data { u8 data_cfg; }; =20 - /** - * struct mma8452_event_regs - chip specific data related to events - * @ev_cfg: event config register address - * @ev_cfg_ele: latch bit in event config register - * @ev_cfg_chan_shift: number of the bit to enable events in X - * direction; in event config register - * @ev_src: event source register address - * @ev_ths: event threshold register address - * @ev_ths_mask: mask for the threshold value - * @ev_count: event count (period) register address - * - * Since not all chips supported by the driver support comparing high pass - * filtered data for events (interrupts), different interrupt sources are - * used for different chips and the relevant registers are included here. - */ +/** + * struct mma8452_event_regs - chip specific data related to events + * @ev_cfg: event config register address + * @ev_cfg_ele: latch bit in event config register + * @ev_cfg_chan_shift: number of the bit to enable events in X + * direction; in event config register + * @ev_src: event source register address + * @ev_ths: event threshold register address + * @ev_ths_mask: mask for the threshold value + * @ev_count: event count (period) register address + * + * Since not all chips supported by the driver support comparing high pass + * filtered data for events (interrupts), different interrupt sources are + * used for different chips and the relevant registers are included here. + */ struct mma8452_event_regs { u8 ev_cfg; u8 ev_cfg_ele; --=20 2.55.0 From nobody Mon Sep 28 18:37:17 2026 Received: from mail-43171.protonmail.ch (mail-43171.protonmail.ch [185.70.43.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 15914473C64 for ; Mon, 28 Sep 2026 08:26:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.70.43.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584006; cv=none; b=GqSNJuWwFA4Ma9+xdxEO7R9HzSNGvFreDTYFJF+dw43vfIqZeqBEq1yE1p5U7REnLSgTX4DmrSXc2lodtcBUmDgddDg/SVURXt1+82jDb+QjZG9ZizlhRPcsUdQDrPMOvyidU9Li3Oo+tIJ+jfB1egYxdA2RGLTFeuX+zXPoPvo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584006; c=relaxed/simple; bh=OKQ535GKjfWUhMwPz+MoNR0GVl2P4OFczFeAea+Xbtk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=S+B8iGoSmq9gwp+l5GO8M+JXImaH5tgREtGKw1fdNvm7dhAMNor6c304JtiAf5Y8NElIUbjZeBZpEppTdAAlpPsg+5s0DoQDHP7gjRLWvH/bz3B3FVRCUSbuW3nAnw8JxbmM+SKyKh1F1q9Q/BJnCRPeTjg7W6/Fi409b6bOUzE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com; spf=pass smtp.mailfrom=geanix.com; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b=JoLgnJcp; arc=none smtp.client-ip=185.70.43.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=geanix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b="JoLgnJcp" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=geanix.com; s=protonmail; t=1790583999; x=1790843199; bh=aDEVcEomKHwwxee1ZSmYMgQ8MLwj8ii2wd/is7mlRPY=; h=From:Date:Subject:Message-Id:References:In-Reply-To:To:Cc:From:To: Cc:Date:Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=JoLgnJcpZon6tm514acOQGT8uuPtSTIBMqy6ODQw50Ti1s5LErdr8KVtzgXy5ZOEg BzM2dDETvQKEBYJP1HhbKBRn5UZiGD/aSKqcuEkiJYU/XR+gnv+ZHeBT4J8at1xEGP uZWOkkeDeky9oCMUzaxm9wvI6vshhnzs64m2RD5eSgNu+eJQPCzh0kcUsfru+w79V9 WjWdiHTP5cdSPY2xOO7hygUatDF1UhzIQ1QLecxJlxcKmUawq4YKOSt/VS/uI7LLJz sb8YJTyReEl9ti3hipt60N/cWZeAE3pXN9xXnjosEnogZsZBor5sXm+LkUhcXqEbWa 4Ekws9GdTWVag== X-Pm-Submission-Id: 4htZCg0GPKz1DF4X From: Esben Haabendal Date: Mon, 28 Sep 2026 10:26:23 +0200 Subject: [PATCH v10 07/10] iio: accel: mma8452: Add comment block for struct mma8452_data 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: <20260928-mma8452-open-drain-v10-7-b906fb408386@geanix.com> References: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> In-Reply-To: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> To: Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Martin Kepplinger , Sean Nyekjaer , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Martin Kepplinger , Christoph Muellner Cc: Esben Haabendal , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Joshua Crofts X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790583982; l=1365; i=esben@geanix.com; s=20240523; h=from:subject:message-id; bh=OKQ535GKjfWUhMwPz+MoNR0GVl2P4OFczFeAea+Xbtk=; b=XM5ggP66R5GeFzefbqLif6Mj5snSEk3MY0fcMgmaw/8S1RkuQ02aqUBGwALzRk3dyJV/iInir 0SQjoBiVZIJASzc/mR6HjB+0fDj+eFDZtANgcJFQ5d5J1HoAivdFn2e X-Developer-Key: i=esben@geanix.com; a=ed25519; pk=PbXoezm+CERhtgVeF/QAgXtEzSkDIahcWfC7RIXNdEk= The struct mma8452_data is central for this driver, and it makes sense to have a description of the fields in it to make it easier to work with the driver. Reviewed-by: Joshua Crofts Signed-off-by: Esben Haabendal --- drivers/iio/accel/mma8452.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c index b70bc8638128..0c6ca6640f72 100644 --- a/drivers/iio/accel/mma8452.c +++ b/drivers/iio/accel/mma8452.c @@ -104,6 +104,21 @@ =20 #define MMA8452_AUTO_SUSPEND_DELAY_MS 2000 =20 +/** + * struct mma8452_data - IIO device private data structure + * @client: the I2C client object + * @lock: mutex for synchronization of register + * read-modify-write sequences and holding chip in + * STANDBY mode while writing to registers + * @orientation: mounting matrix, flipped axis etc. + * @chip_info: chip specific data + * @regs: reference to voltage regulators + * @buffer: triggered buffer + * @sleep_val: time in ms to sleep while waiting for drdy + * @ctrl_reg1: CTRL_REG1 register shadow value + * @data_cfg: DATA_CFG register shadow value + * @open_drain: true for irq pin in open-drain mode + */ struct mma8452_data { struct i2c_client *client; struct mutex lock; --=20 2.55.0 From nobody Mon Sep 28 18:37:17 2026 Received: from mail-244106.protonmail.ch (mail-244106.protonmail.ch [109.224.244.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 684044746BA for ; Mon, 28 Sep 2026 08:26:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=109.224.244.106 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584009; cv=none; b=mjUZzgzEHNzWlXITmacdHDXDgEfQNpCA2KR1eoMp+oVss7g05dpiph8uetNGHykad1CxVo53UM52jmY94bJBH710Z2pKcvC0Zfjlyh6vwkOtuy1jIxCg0DSgb7DX0nG2VOH7CuCTH7eMB7AgIvv5/aJ5swli42RAL/JmczQSaWU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584009; c=relaxed/simple; bh=XGEsq7I91jFFVYMozOu6aYJdcGok2gTrP6rXEYT2gr4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=D/lOV02sppnubuJkNV3wArFrv8FZXeGXlqgjhxuBIz0z4984ZawPmTjRDcvtO577SGdzcRsgNyi0QzIqwL9KLMjUemUfgGkPFZXip0I71MDnT33h6bEUGgAppiTOsj9poAwvc2CVvQ7vLvamwcABwFzXbjis6SL5ZlGf6fc9RHY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com; spf=pass smtp.mailfrom=geanix.com; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b=K3RxZrl6; arc=none smtp.client-ip=109.224.244.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=geanix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b="K3RxZrl6" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=geanix.com; s=protonmail; t=1790584002; x=1790843202; bh=H0pYOKJP8pFNFSz2qrXGPiXDYiGetVFhBwXimGfIVCE=; h=From:Date:Subject:Message-Id:References:In-Reply-To:To:Cc:From:To: Cc:Date:Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=K3RxZrl6Uvmzv4TTbCIXvmVMzonZg2GIYiRwv4swjhrKmbjDOvRFttssvJv/Xs1E7 74Fwzc6sldURvWw5a5HgUXwSHfdDAVLxd3JOInYyoGhUyUOrTAj1Dxh449yvI74RdD 893GZOa5TgdJ+m982TzWoypDmVzP5te9Bye0p7AAaNX9dDFf1o3NEZvqxyBEnHUSNn d7fETfwCy8Y9eZ/FZOAy8T8rfeGV8cgxxHY9aUofSLQ/77mTuxqmw3t7LCTxWAl+ph mfUt3MTrSgw7825Nl6xj4+Qhw3YvcSU7rtFdXaovKyfHAfhAEy7guLuRi2eaPreXLg WbFYEkZPHSRGA== X-Pm-Submission-Id: 4htZCh5KkSz1DDLM From: Esben Haabendal Date: Mon, 28 Sep 2026 10:26:24 +0200 Subject: [PATCH v10 08/10] iio: accel: mma8452: Allow open drain interrupt pin configuration 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: <20260928-mma8452-open-drain-v10-8-b906fb408386@geanix.com> References: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> In-Reply-To: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> To: Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Martin Kepplinger , Sean Nyekjaer , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Martin Kepplinger , Christoph Muellner Cc: Esben Haabendal , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Andy Shevchenko X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790583982; l=2386; i=esben@geanix.com; s=20240523; h=from:subject:message-id; bh=XGEsq7I91jFFVYMozOu6aYJdcGok2gTrP6rXEYT2gr4=; b=cPSbfc4mmOzbu3ZE53/XEflbxUVzmm2P344oy5hjD3WXjxZUpvjVdKFxkfLe7xZ3mFZXd/I7p hurCKAo2yHUBZUlk1RVfRwYGI9U/RMj6bD0ffrjaIB8sxhA1JlOshpQ X-Developer-Key: i=esben@geanix.com; a=ed25519; pk=PbXoezm+CERhtgVeF/QAgXtEzSkDIahcWfC7RIXNdEk= When designing systems sharing the interrupt for mma8452 chips, it is helpful to be able to configure the irq pin in open-drain mode (default is push-pull). Reviewed-by: Andy Shevchenko Signed-off-by: Esben Haabendal --- drivers/iio/accel/mma8452.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c index 0c6ca6640f72..0b48aded2230 100644 --- a/drivers/iio/accel/mma8452.c +++ b/drivers/iio/accel/mma8452.c @@ -83,6 +83,8 @@ #define MMA8452_CTRL_REG2_RST BIT(6) #define MMA8452_CTRL_REG2_MODS_SHIFT 3 #define MMA8452_CTRL_REG2_MODS_MASK 0x1b +#define MMA8452_CTRL_REG3 0x2c +#define MMA8452_CTRL_REG3_PP_OD BIT(0) #define MMA8452_CTRL_REG4 0x2d #define MMA8452_CTRL_REG5 0x2e #define MMA8452_OFF_X 0x2f @@ -135,6 +137,7 @@ struct mma8452_data { int sleep_val; u8 ctrl_reg1; u8 data_cfg; + bool open_drain; }; =20 /** @@ -662,6 +665,22 @@ static int mma8452_set_power_mode(struct mma8452_data = *data, u8 mode) return mma8452_change_config(data, MMA8452_CTRL_REG2, reg); } =20 +static int mma8452_set_interrupt_pin_mode(struct mma8452_data *data) +{ + int reg; + + reg =3D i2c_smbus_read_byte_data(data->client, MMA8452_CTRL_REG3); + if (reg < 0) + return reg; + + if (data->open_drain) + reg |=3D MMA8452_CTRL_REG3_PP_OD; + else + reg &=3D ~MMA8452_CTRL_REG3_PP_OD; + + return i2c_smbus_write_byte_data(data->client, MMA8452_CTRL_REG3, reg); +} + /* returns >0 if in freefall mode, 0 if not or <0 if an error occurred */ static int mma8452_freefall_mode_enabled(struct mma8452_data *data) { @@ -1668,6 +1687,11 @@ static int mma8452_probe(struct i2c_client *client) goto disable_regulators; } =20 + data->open_drain =3D device_property_read_bool(dev, "drive-open-drain"); + ret =3D mma8452_set_interrupt_pin_mode(data); + if (ret) + goto trigger_cleanup; + data->ctrl_reg1 =3D MMA8452_CTRL_ACTIVE | (MMA8452_CTRL_DR_DEFAULT << MMA8452_CTRL_DR_SHIFT); =20 @@ -1795,6 +1819,10 @@ static int mma8452_runtime_resume(struct device *dev) return ret; } =20 + ret =3D mma8452_set_interrupt_pin_mode(data); + if (ret) + goto runtime_resume_failed; + ret =3D mma8452_active(data); if (ret < 0) goto runtime_resume_failed; --=20 2.55.0 From nobody Mon Sep 28 18:37:17 2026 Received: from mail-43172.protonmail.ch (mail-43172.protonmail.ch [185.70.43.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8EAF9472774 for ; Mon, 28 Sep 2026 08:26:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.70.43.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584011; cv=none; b=silkmrAk/Ljy8uInA2kNPRj1EF1PxkD+Dwh1Tn2/CasziD6vFUYaI2x7QT3rC7GNXs94fPZOIF2ih+aWD8v+vaqLYYjE5Nx1a/yECctzTS7qjq/5TLGZEbWRlUzbot/A+nea1f+v2i43N86qdkpaOU8ckapN5hd5fps8ATeWGvE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584011; c=relaxed/simple; bh=T7sr0TzMgmglAP2j9V16bPDOgCZYpUUMAGQh9Ee2guQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JlBwyKlb9MoosMaDlFUIURVUUgAwjzk9IOQN2hqitZB+KZEMN7O2Q1RaYkrSrZRILTG0rtHj3VlN4DPl8F6PVXbliMt3yc0XLQ93YhJSMxFrsk/X3Kd9Qk/Y/MMB96krzBHJVN6ohQgeruSpXg8zWrkNkzAEbF7LFtRWOJ6mJhA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com; spf=pass smtp.mailfrom=geanix.com; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b=Rk98KsLk; arc=none smtp.client-ip=185.70.43.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=geanix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b="Rk98KsLk" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=geanix.com; s=protonmail; t=1790584004; x=1790843204; bh=b7mmMpqnnkKIyb7qAxiVt25p/f/J3CztQHK4bgN0iHo=; h=From:Date:Subject:Message-Id:References:In-Reply-To:To:Cc:From:To: Cc:Date:Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=Rk98KsLk4JJLU3T35LqKnaJTFzmVl8uEzRz2eWuQrz7Z4R4Nz1tKwb438YrEGTQ6B t7xbm5L2jK0tyipFO5/IwcpcSB6aBCtMpIk2fktBhfatNs7huLxPsizPQE9uYVV/mZ iPMUNl7JlbwsETiKwEEF3miK1EWL4FyM+Vn5WrcG+hrxh5RmST4OrzPcflHKNceP4v DKQljX6fj9WvjbZDsIVo11Ubnc79nT8mjFRbbr8VUOd7WMbYKnj/38W4FNE1K+7oo1 6/IpaH50NHfDlxjurxJW3JNPB+td/BrmULdjU9szhrMkRyp8D1HbY/XBBz/2bqUjot gj5poYgWHlikA== X-Pm-Submission-Id: 4htZCk3rscz1DF4X From: Esben Haabendal Date: Mon, 28 Sep 2026 10:26:25 +0200 Subject: [PATCH v10 09/10] iio: accel: mma8452: Use proper error code when missing device model 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: <20260928-mma8452-open-drain-v10-9-b906fb408386@geanix.com> References: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> In-Reply-To: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> To: Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Martin Kepplinger , Sean Nyekjaer , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Martin Kepplinger , Christoph Muellner Cc: Esben Haabendal , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Joshua Crofts , Andy Shevchenko X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790583982; l=915; i=esben@geanix.com; s=20240523; h=from:subject:message-id; bh=T7sr0TzMgmglAP2j9V16bPDOgCZYpUUMAGQh9Ee2guQ=; b=TKav7TFpZP0DQK6tKFhxPdwc3fuDzvnycoAjIcsEA2EEbD+BE/R6Puj1Paoffxr/jJY0PdEjc TsA417n/SLeBI/BdCIkI5SSALcz7EpoethuZlmC4zydoaT5U/zI03FZ X-Developer-Key: i=esben@geanix.com; a=ed25519; pk=PbXoezm+CERhtgVeF/QAgXtEzSkDIahcWfC7RIXNdEk= Switch -ENODEV error on i2c_get_match_data() failure to -ENODATA to satisfy the IIO coding style. Reviewed-by: Joshua Crofts Reviewed-by: Andy Shevchenko Signed-off-by: Esben Haabendal --- drivers/iio/accel/mma8452.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c index 0b48aded2230..dc8031e14c29 100644 --- a/drivers/iio/accel/mma8452.c +++ b/drivers/iio/accel/mma8452.c @@ -1594,7 +1594,7 @@ static int mma8452_probe(struct i2c_client *client) =20 data->chip_info =3D i2c_get_match_data(client); if (!data->chip_info) - return dev_err_probe(dev, -ENODEV, "unknown device model\n"); + return dev_err_probe(dev, -ENODATA, "unknown device model\n"); =20 ret =3D iio_read_mount_matrix(dev, &data->orientation); if (ret) --=20 2.55.0 From nobody Mon Sep 28 18:37:17 2026 Received: from mail-244106.protonmail.ch (mail-244106.protonmail.ch [109.224.244.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F22A7479897; Mon, 28 Sep 2026 08:26:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=109.224.244.106 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584013; cv=none; b=RRK6K8zxKeQ/8mFKqntj4NEIamVzPWTzeeEeE6lpmwRryJJ4WcDi5fwoCWPGAvn+pHeeqvrP9I63Q6o6vMto07+FlkfejDqi2iFTY41c9QSgzfjfQUIYBjm9bO+2kWcT5H5Ze2Rg27zL3wUcB6cgS72Ov7jnXdjzLbPMEEjc2Wo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584013; c=relaxed/simple; bh=oyTsDKxlsAv6YtjCMarHV3m081TpTe743p4uxpuZpkI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZkWK9Ks6qfRO3fgJ39xLPdiZnB0TiX9mmyGmLaZ6Rsm0/A0VVAq4KZ/cfBaId0kXVRLGkULqvJdLDqdjfA8QCMKf7h65qAIAksi5Yc5FyVoY3NpqfgqMsR4bh0ezg+XkA8qRBrj2dU0GkG0JnFz7/hBEDvorz5J9jO5f1OmvuRo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com; spf=pass smtp.mailfrom=geanix.com; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b=RhKDvFR/; arc=none smtp.client-ip=109.224.244.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=geanix.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=geanix.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=geanix.com header.i=@geanix.com header.b="RhKDvFR/" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=geanix.com; s=protonmail; t=1790584006; x=1790843206; bh=D3csb1h/+bja1wK6CStFmw7G93ndMJmKRxnYM1geIUo=; h=From:Date:Subject:Message-Id:References:In-Reply-To:To:Cc:From:To: Cc:Date:Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=RhKDvFR/P0ZvA1mpjDr27BK/trn/3nRdO4m85ugm7UWKuBOjKb8RgFXHK+1AUKGbP X4JE42MA3PXOuBMPrUZJVoOKwHl9z2sY+bmEqTZRHbcaYGXYuKNhYJBD4mjqhXl3Er 87MjZ15BIcWPXNdEG67VnBGV0SxoY1kHQgVYGxRqCX9igamxRyZn3sDYYx4hDHV9Wr JUyWw84MWBvkL7+3kH+XcYSctqKeCz/GI7d4nOb1XBlm1mdY2/89WDeYPV3zXnOFAy mEJ/N91IJsDRjjQruNR6pYy1LM2NcCjpi8uCnu999nlUKTpyjZjOuuawbzYK1+I5FW Gm2HFh1MjQPhQ== X-Pm-Submission-Id: 4htZCm6Zsdz1DFG0 From: Esben Haabendal Date: Mon, 28 Sep 2026 10:26:26 +0200 Subject: [PATCH v10 10/10] iio: accel: mma8452: Support interrupt sharing 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: <20260928-mma8452-open-drain-v10-10-b906fb408386@geanix.com> References: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> In-Reply-To: <20260928-mma8452-open-drain-v10-0-b906fb408386@geanix.com> To: Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Martin Kepplinger , Sean Nyekjaer , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Martin Kepplinger , Christoph Muellner Cc: Esben Haabendal , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1790583982; l=7994; i=esben@geanix.com; s=20240523; h=from:subject:message-id; bh=oyTsDKxlsAv6YtjCMarHV3m081TpTe743p4uxpuZpkI=; b=W2IjSOuZasoL/VL/M7EJzuS80hEx/YgIUKem1qeq1Moil3PXnMPz4MDaK1SrDMmmy+rdAH5nj IH6e2xtytEeAwrb6MxrcJMvyQMjSFjIewGkWchxWPYgjIwteznKaMh8 X-Developer-Key: i=esben@geanix.com; a=ed25519; pk=PbXoezm+CERhtgVeF/QAgXtEzSkDIahcWfC7RIXNdEk= Adding support for sharing interrupt line with other device requires the interrupt handler to handle runtime PM suspension properly, ignoring the irq if the device is suspended (maybe even off). And while at it, we use the PM reference to ensure we do not get suspended while processing an irq. In order to prevent the chip from raising irq while suspended (that is when using fixed regulator, where suspend just means setting the device in STANDBY mode), we disable all interrupt sources by clearing CTRL_REG4, and then restores the value again when resuming. The scoped_guard in mma8452_runtime_suspend() is changed to a plain mutex_lock() instead, both to prevent mixing guards and goto, but also to ensure that we stay in STANDBY mode while writing to CTRL_REG4 and all the way up to disabling the device as much as possible. With that in place, it is safe to add the IRQF_SHARED flag. Keep in mind that the device by default is using push-pull for the irq pin, which might require additional hardware design to allow interrupt sharing. Signed-off-by: Esben Haabendal --- drivers/iio/accel/mma8452.c | 120 ++++++++++++++++++++++++++++++++++------= ---- 1 file changed, 93 insertions(+), 27 deletions(-) diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c index dc8031e14c29..f05dd936b7f3 100644 --- a/drivers/iio/accel/mma8452.c +++ b/drivers/iio/accel/mma8452.c @@ -119,6 +119,7 @@ * @sleep_val: time in ms to sleep while waiting for drdy * @ctrl_reg1: CTRL_REG1 register shadow value * @data_cfg: DATA_CFG register shadow value + * @ctrl_reg4: CTRL_REG4 register value to restore on resume * @open_drain: true for irq pin in open-drain mode */ struct mma8452_data { @@ -137,6 +138,7 @@ struct mma8452_data { int sleep_val; u8 ctrl_reg1; u8 data_cfg; + u8 ctrl_reg4; bool open_drain; }; =20 @@ -1086,15 +1088,32 @@ static irqreturn_t mma8452_interrupt(int irq, void = *p) { struct iio_dev *indio_dev =3D p; struct mma8452_data *data =3D iio_priv(indio_dev); + struct device *dev =3D &data->client->dev; irqreturn_t ret =3D IRQ_NONE; + int pm_status; int src; =20 + pm_status =3D pm_runtime_get_if_active(dev); + if (pm_status =3D=3D 0) + /* device is powered down */ + return IRQ_NONE; + if (IS_ENABLED(CONFIG_PM) && pm_status < 0) + /* runtime PM was disabled, possibly suspending */ + return IRQ_HANDLED; + + /* + * pm_status is now 1 or -EINVAL (with CONFIG_PM not enabled). If + * pm_status=3D=3D1, runtime PM is enabled and device is RPM_ACTIVE. If + * pm_status=3D=3D-EINVAL, runtime PM is build-time disabled (i.e. CONFIG= _PM + * not enabled), and we can/must assume device is active. + */ + src =3D i2c_smbus_read_byte_data(data->client, MMA8452_INT_SRC); if (src < 0) - return IRQ_NONE; + goto out_runtime_put; =20 if (!(src & (data->chip_info->enabled_events | MMA8452_INT_DRDY))) - return IRQ_NONE; + goto out_runtime_put; =20 if (src & MMA8452_INT_DRDY) { iio_trigger_poll_nested(indio_dev->trig); @@ -1120,6 +1139,10 @@ static irqreturn_t mma8452_interrupt(int irq, void *= p) ret =3D IRQ_HANDLED; } =20 +out_runtime_put: + if (pm_status > 0) + pm_runtime_put_autosuspend(dev); + return ret; } =20 @@ -1707,6 +1730,14 @@ static int mma8452_probe(struct i2c_client *client) if (ret < 0) goto trigger_cleanup; =20 + ret =3D pm_runtime_set_active(dev); + if (ret < 0) + goto buffer_cleanup; + + pm_runtime_enable(dev); + pm_runtime_set_autosuspend_delay(dev, MMA8452_AUTO_SUSPEND_DELAY_MS); + pm_runtime_use_autosuspend(dev); + if (client->irq) { unsigned long irq_flags; =20 @@ -1715,24 +1746,16 @@ static int mma8452_probe(struct i2c_client *client) dev_info(dev, "invalid irq type, setting default active low\n"); irq_flags =3D IRQF_TRIGGER_LOW; } - irq_flags |=3D IRQF_ONESHOT; + irq_flags |=3D IRQF_ONESHOT | IRQF_SHARED; ret =3D request_threaded_irq(client->irq, NULL, mma8452_interrupt, irq_flags, client->name, indio_dev); if (ret) - goto buffer_cleanup; + goto runtime_suspend; } =20 - ret =3D pm_runtime_set_active(dev); - if (ret < 0) - goto free_irq; - - pm_runtime_enable(dev); - pm_runtime_set_autosuspend_delay(dev, MMA8452_AUTO_SUSPEND_DELAY_MS); - pm_runtime_use_autosuspend(dev); - ret =3D iio_device_register(indio_dev); if (ret < 0) - goto runtime_suspend; + goto free_irq; =20 ret =3D mma8452_set_freefall_mode(data, false); if (ret < 0) @@ -1743,14 +1766,14 @@ static int mma8452_probe(struct i2c_client *client) unregister_device: iio_device_unregister(indio_dev); =20 -runtime_suspend: - pm_runtime_disable(dev); - pm_runtime_set_suspended(dev); - free_irq: if (client->irq) free_irq(client->irq, indio_dev); =20 +runtime_suspend: + pm_runtime_disable(dev); + pm_runtime_set_suspended(dev); + buffer_cleanup: iio_triggered_buffer_cleanup(indio_dev); =20 @@ -1771,11 +1794,12 @@ static void mma8452_remove(struct i2c_client *clien= t) =20 iio_device_unregister(indio_dev); =20 - pm_runtime_disable(dev); - pm_runtime_set_suspended(dev); - if (client->irq) free_irq(client->irq, indio_dev); + /* No irq will fire beyond this point */ + + pm_runtime_disable(dev); + pm_runtime_set_suspended(dev); =20 iio_triggered_buffer_cleanup(indio_dev); mma8452_trigger_cleanup(indio_dev); @@ -1787,29 +1811,67 @@ static void mma8452_remove(struct i2c_client *clien= t) #ifdef CONFIG_PM static int mma8452_runtime_suspend(struct device *dev) { - struct iio_dev *indio_dev =3D i2c_get_clientdata(to_i2c_client(dev)); + struct i2c_client *client =3D to_i2c_client(dev); + struct iio_dev *indio_dev =3D i2c_get_clientdata(client); struct mma8452_data *data =3D iio_priv(indio_dev); int ret; =20 - scoped_guard(mutex, &data->lock) - ret =3D mma8452_standby(data); + mutex_lock(&data->lock); + + ret =3D mma8452_standby(data); + if (ret < 0) { + dev_err(dev, "transition to STANDBY mode failed\n"); + ret =3D -EAGAIN; + goto out_unlock; + } + + ret =3D i2c_smbus_read_byte_data(client, MMA8452_CTRL_REG4); if (ret < 0) { - dev_err(dev, "powering off device failed\n"); - return -EAGAIN; + dev_warn(dev, "backing up CTRL_REG4 failed\n"); + ret =3D -EAGAIN; + goto out_active; + } else + data->ctrl_reg4 =3D ret; + + ret =3D i2c_smbus_write_byte_data(client, MMA8452_CTRL_REG4, 0); + if (ret) { + dev_warn(dev, "disabling interrupt sources (CTRL_REG4) failed\n"); + ret =3D -EAGAIN; + goto out_active; } =20 + /* + * Interrupt line should be deasserted now, so we just need ensure any + * mid-flight irq is completed (will return IRQ_NONE due to + * pm_status=3D=3D0). + */ + if (client->irq) + synchronize_irq(client->irq); + ret =3D regulator_bulk_disable(ARRAY_SIZE(data->regs), data->regs); if (ret) { dev_err(dev, "failed to disable regulators\n"); - return ret; + goto out_restore_ctrl_reg4; } =20 + mutex_unlock(&data->lock); return 0; + +out_restore_ctrl_reg4: + if (i2c_smbus_write_byte_data(client, MMA8452_CTRL_REG4, data->ctrl_reg4)) + dev_warn(dev, "restoring CTRL_REG4 failed\n"); +out_active: + if (mma8452_active(data)) + dev_warn(dev, "failed to switch back to ACTIVE mode\n"); +out_unlock: + mutex_unlock(&data->lock); + return ret; } =20 static int mma8452_runtime_resume(struct device *dev) { - struct iio_dev *indio_dev =3D i2c_get_clientdata(to_i2c_client(dev)); + struct i2c_client *client =3D to_i2c_client(dev); + struct iio_dev *indio_dev =3D i2c_get_clientdata(client); struct mma8452_data *data =3D iio_priv(indio_dev); int ret, sleep_val; =20 @@ -1823,6 +1885,10 @@ static int mma8452_runtime_resume(struct device *dev) if (ret) goto runtime_resume_failed; =20 + ret =3D i2c_smbus_write_byte_data(client, MMA8452_CTRL_REG4, data->ctrl_r= eg4); + if (ret) + goto runtime_resume_failed; + ret =3D mma8452_active(data); if (ret < 0) goto runtime_resume_failed; --=20 2.55.0