From nobody Thu Oct 2 22:40:27 2025 Received: from mail.subdimension.ro (nalicastle.subdimension.ro [172.105.74.154]) (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 A37F630DEDA; Wed, 10 Sep 2025 07:58:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=172.105.74.154 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491090; cv=none; b=EY+5pGJ7OfwuqAf7JHA2OOAES/+u40txYvwJoFGSWaRI4xayZqmpkQfXWB7Fx227ezIKXom+/D9aD1LBZj4DxXDhPhIkqqhuqKf83ascAE/hal8Zu+8aK+qN14KMNE0r31xMYLfzqQAfiazF5BGIW8snBMylM0ZaSFGhqVu5iUo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491090; c=relaxed/simple; bh=FYjJXoY4AMEgCSnS6fQ11Ukudf0Rfc/lTb5wo6hKrGE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IPQ7k1pfbhQtFhxoXEq0fRGoqYGBvqfUxSZTpFK0NBxHck1aONIv87azeub2IVfUAevYoDAFuobVKg2QK1Q5uw5hMnFFV5qAJU8dH/7s3/aD+o30ByCfJ7Bcv2r1oKGce4Ue6ToWSvO6OJRNNUo0I9IuAeR3mlnEvUHa/EhmOXw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro; spf=pass smtp.mailfrom=subdimension.ro; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b=2gP24Erf; arc=none smtp.client-ip=172.105.74.154 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b="2gP24Erf" Received: from [10.212.0.13] (unknown [IPv6:2a02:2f0e:3503:4a00:e2d5:5eff:fed9:f1c4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mail.subdimension.ro (Postfix) with ESMTPSA id 798C4173BE9; Wed, 10 Sep 2025 10:58:00 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=subdimension.ro; s=mail; t=1757491080; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=46ncP2nkNBhkYAOSJYYaT4iHbNJbhU8MBU+tgId1tWI=; b=2gP24Erfr5K+XN7KIIZ9TZ0m7yN0ib8Y/CU+Vjvkd2VX1pMCEk5JQyC7CCWl1CEjgPJVOm mJzylljPl8lncrUoVz3OXI4H2Hj4mOX1Nb8T9RgdWFnyjkX6AKn7eqX5y6u5fMNMAUQXID 0Y/NCEsHuEU3WlAlaYA6qvwoalP6qX1/b+9y0KdMXIpATCNY2vvgW9eZvehwGALcnUyInY lkA7G1a7khJ7GnYTcumbHSM3qYov6eajndebOdiJxkLHiktO/cw9j8GREjqQwqzorMEAf0 Mszhhlpof9gCN7RKilOhjLmUoY0Peeefu9p69PrAGh7q+CUyepTDxnE5h9FLMg== From: Petre Rodan Date: Wed, 10 Sep 2025 10:57:06 +0300 Subject: [PATCH v2 01/14] dt-bindings: iio: accel: bosch,bma220 cleanup typo 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: <20250910-bma220_improvements-v2-1-e23f4f2b9745@subdimension.ro> References: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> In-Reply-To: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Jonathan Cameron , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Petre Rodan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=982; i=petre.rodan@subdimension.ro; h=from:subject:message-id; bh=FYjJXoY4AMEgCSnS6fQ11Ukudf0Rfc/lTb5wo6hKrGE=; b=owEBbQKS/ZANAwAIAc8mmZmETn8wAcsmYgBowS+GnZU4LqeRqSIBI7Q5ji6/hWa8yC6fvDw6R pmq2Q3fntOJAjMEAAEIAB0WIQTYCn/BdhUZNew+X6nPJpmZhE5/MAUCaMEvhgAKCRDPJpmZhE5/ MMJwEAC1Jv8xnuvgIZSMi7oBLXe1UAkGuheSLxGi8Dgu7llFI3NUyaMxkKSLaTAZKyLtsl9FSPF nMNA/bu0o0kiGLwQN+DNt5ZdE7hablKDFxTZrudTqXHsDjTWwkuPP3+wJkIwKaNJVjX3QJ8RFbn Qyd3koSu+ApFlK4G8nvxc0XgrQejLDgN6NLhfX9GavWmKLvxXSL2lN2PS7an6KO7FgKLF6/YBAa 5/WW9QJSAbrK7k1YvgiNHVgEESWnd9McG8gfZX0sJsqyUlSJNVCBZHboqUNgXtOb2J1ljX9nEJu HI9j+Uf31bBFTZ4mPugAQibKQi910ltiTe4D7uquj1c+w3gE9RgPzTz2Y4x49GdvfuWBfNbG6+U JAhwDPIFYlxmSDE3KjuFAyxqYBFLJgVq2o1csSTcG1g0pwu7IVrXTXY0++nb9VAgYp0l4dPL/s3 JYY3Y2je3qLYhKNXWqY0905tIYa5tHCdgIIvk0MZRbbePVLyvoAMGa6VjO1KmKRgjSVHY/JF1vm c0doCSg4nQB6PSedEtb0aqioc2wwN3vcMoaDRhTKkR4Bwcf/uA6e7+Jov6s3sIfmvNk5xnYwZBb 12jJpCPXC3Ur5g7bjT9ksCQ49Vq5McLEhNFt7m7mlwUWo8I5rdI5y8l48Dua/swLUi3Tgg+XBqs C8/33yXZiE6SD1Q== X-Developer-Key: i=petre.rodan@subdimension.ro; a=openpgp; fpr=D80A7FC176151935EC3E5FA9CF269999844E7F30 Cleanup typo present in the title. Signed-off-by: Petre Rodan Acked-by: Krzysztof Kozlowski --- ChangeLog: - split out from a bigger patch file --- Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml = b/Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml index ec643de031a34190af1bc2bffee7412ee2d3b902..da047258aca3d84e8b2cbe92a9c= 98309236fe7ae 100644 --- a/Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml +++ b/Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml @@ -4,7 +4,7 @@ $id: http://devicetree.org/schemas/iio/accel/bosch,bma220.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# =20 -title: Bosch BMA220 Trixial Acceleration Sensor +title: Bosch BMA220 Triaxial Acceleration Sensor =20 maintainers: - Jonathan Cameron --=20 2.49.1 From nobody Thu Oct 2 22:40:27 2025 Received: from mail.subdimension.ro (nalicastle.subdimension.ro [172.105.74.154]) (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 530DC30E0D4; Wed, 10 Sep 2025 07:58:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=172.105.74.154 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491090; cv=none; b=bgwx4LT1V2fr7qYnDm35zQNmuInwBeOuDkI7Oz5uNdDdcM7hJoQXP3C9IvongXYp6IFs8etk2+Lj+YF5qjbyMeIH7fqR0fwdSWskO9LVPiy2AgKcw4kM1Nreg5nsvw8oWR+WFzzK/BxOCRn1VjWh6wPTUPuZzm3WB2RVdF+g5eA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491090; c=relaxed/simple; bh=oCx9mTmOajNf9Uc7YbPFgPQg58rFpIdkoxLqdZ+Ke64=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=n/P1loEfxvDvyKxXN/D+3bZAF0BgSGczesMdUlzpxbWhkMV9lTyju8wGH2gUvxPu6iKjQ2kUlX/aLIbRguWohCCb/r/ylQlXzjKSG6sqyqMSE7SY3ui6dd01r1Xxs4I7pgjBWwahyK5SDeuKHa99YAqRGRiNxeLkRhhkb7UCWIQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro; spf=pass smtp.mailfrom=subdimension.ro; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b=ayX8FD0O; arc=none smtp.client-ip=172.105.74.154 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b="ayX8FD0O" Received: from [10.212.0.13] (unknown [IPv6:2a02:2f0e:3503:4a00:e2d5:5eff:fed9:f1c4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mail.subdimension.ro (Postfix) with ESMTPSA id 45120173BEA; Wed, 10 Sep 2025 10:58:01 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=subdimension.ro; s=mail; t=1757491081; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=OQe1hYAKwZYOw+7T33ujn3KSyjTVRK+2iVCjlDK8A4w=; b=ayX8FD0O123NwoJ6DR2WlWmAkh1rCYB3EoW1ZTt2uWczVexOna/h7vBN6kSjplqDnNiyCj Kd0wGEAB9tF6lqjHwOUimTRGk/mex99PcsN+yzjliB4e/CqlXJ4o2mVwKwzS3w097TJVqp VXOjdYVZxFytftDvXpmgHgX4WNkNk/7m/BL6fs92NsqDP5XVzlsHf6tEFGVbEBADNApCiB Q6Or+bJS+w2BymJ4i8qZn1Ot6irZrdbnJoU9BANlCOi+dUP3CTL9LNY3ucYdZ24Z9Tzegl Y0RSNP5datIsXs3bIMHralh//xwCDJR90UuEIpcgSwGou76mHKocXGW0/XL+xA== From: Petre Rodan Date: Wed, 10 Sep 2025 10:57:07 +0300 Subject: [PATCH v2 02/14] dt-bindings: iio: accel: bosch,bma220 setup SPI clock mode 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: <20250910-bma220_improvements-v2-2-e23f4f2b9745@subdimension.ro> References: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> In-Reply-To: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Jonathan Cameron , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Petre Rodan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1445; i=petre.rodan@subdimension.ro; h=from:subject:message-id; bh=oCx9mTmOajNf9Uc7YbPFgPQg58rFpIdkoxLqdZ+Ke64=; b=owEBbQKS/ZANAwAIAc8mmZmETn8wAcsmYgBowS+GkIjb/tYXN7fDw2KLwEn5zICcmxF9VI61k ZFSkj4L9sOJAjMEAAEIAB0WIQTYCn/BdhUZNew+X6nPJpmZhE5/MAUCaMEvhgAKCRDPJpmZhE5/ MK91EACz0hESbkZwW4xHeOPqHsuOKTc5FNclEelG4QyDSbm8Fr3tE1L5WnZpizGL4sVbCJTHOVN upkP8skpL04juf0VbVRy+eTKVOlEAwnHASkXAsS4keX95Blfpzblji8ScT01FP1xE2VWOABrMZO CIHl+PD1McdV1xCbdnXlTTpWunImPZUZx/leoHl1KmeMsvqEe3Xli9y66WN0GyInrkCFAp4jKtl GTHMp57Qw/z1Jg+j54cfFlZPvkcqj8FiIWoPwSi9XS6MpW1tJcn/7x0pOINkhQ/+XsKCuyGxvh1 axbj60nkP94YYAc2g3zVrAJDTOG13XboL6VAwNchN4cguUpIgH3zFAcYxOBW0TtbDv3/AKbWCqY 0B9WQiCvsDkbF4ibDPhgVL8uq3pBmFgqVkct4wvOwhJ9uH1QpIWMF/54dJvXKQ8K7A1cOBZn040 2qOSiB3RzqoXkPDVNCXzam2K8JGFEO+/qLdtOL9RLuLunxlKUd3YcJx6UrzLJWIWPiUW5G0Y+Zz 656L6T8oiEFBhu5tJ0U8seGt6U49zDDX20rUrH3ViPJxC9CjJ0mOmQbs819YBmsvwxiE7DI5e3c gPvk0pg6oVkbUYm1suRP1iK///gle5cJuxA+10ZcYvbxwjIxMIXIwa3oI+vqONvUkxqfVfL/uJI zBwhI1Y5gQKvHuQ== X-Developer-Key: i=petre.rodan@subdimension.ro; a=openpgp; fpr=D80A7FC176151935EC3E5FA9CF269999844E7F30 Assert CPOL for a high-idle clock signal and CPHA for sampling on the trailing (rising) edge. Quoting from the datasheet: "During the transitions on CSB, SCK must be high. SDI and SDO are driven at the falling edge of SCK and should be captured at the rising edge of SCK." The sensor does not function with the default SPI clock mode. Signed-off-by: Petre Rodan Reviewed-by: Krzysztof Kozlowski --- ChangeLog: - split out from a bigger patch file --- Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml = b/Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml index da047258aca3d84e8b2cbe92a9c98309236fe7ae..0e27ec74065acca611e63309d6a= e889b8a3134ce 100644 --- a/Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml +++ b/Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml @@ -20,6 +20,9 @@ properties: interrupts: maxItems: 1 =20 + spi-cpha: true + spi-cpol: true + vdda-supply: true vddd-supply: true vddio-supply: true @@ -44,6 +47,8 @@ examples: compatible =3D "bosch,bma220"; reg =3D <0>; spi-max-frequency =3D <2500000>; + spi-cpol; + spi-cpha; interrupt-parent =3D <&gpio0>; interrupts =3D <0 IRQ_TYPE_LEVEL_HIGH>; }; --=20 2.49.1 From nobody Thu Oct 2 22:40:27 2025 Received: from mail.subdimension.ro (nalicastle.subdimension.ro [172.105.74.154]) (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 5186F30E0D3; Wed, 10 Sep 2025 07:58:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=172.105.74.154 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491091; cv=none; b=eGCex9hPa5t+t/qE9adF1QgnK6bV/maLyGqHsIaOvYB5Y7uwyVKii7CBt2EKN5/1znYe0vZG6iEK29w5v0B2imaMqwf0Ds/zCtsD8r3QoYdPU8ca7Ntg/YpBA6TXpPm1PaIfCQnWwNyTOiky8iYR3lIIOn1m+Wu9xFlWONpMLG8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491091; c=relaxed/simple; bh=ImPKxHSGq3ndlT8NZVGV3OeU/EuHHXeTYMbeg2lmxEs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=T3aCQIRthldjtK1Daq0qmKPeP+hY5nZwd9tvPdZTgdL2tDicx0ou5vav0pzPEl6e/DbsILrBxmsZUxlKhW4Mr4BWLYS9VNCIZ6WrxK4WzOC0iDjtzGyF3cmTlF6n9JbJFSEOH4oi45uzyfUfwJMlDuE8mBLy6prCu3sdqhrUUkI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro; spf=pass smtp.mailfrom=subdimension.ro; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b=BQEky6+X; arc=none smtp.client-ip=172.105.74.154 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b="BQEky6+X" Received: from [10.212.0.13] (unknown [IPv6:2a02:2f0e:3503:4a00:e2d5:5eff:fed9:f1c4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mail.subdimension.ro (Postfix) with ESMTPSA id BAED8173BEB; Wed, 10 Sep 2025 10:58:01 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=subdimension.ro; s=mail; t=1757491082; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cBzTdcdjY3tGfhA7VjWY8IHogkhlKoPPORRxkej+wVY=; b=BQEky6+XKCu3JNJJA+5NoA1uZq2chF4Kz7Z75QOqxAvhqVnmBfJdtb9C2pFkZoBs22Thrv nZcmxPCh9xkHiDzA+QtVoejkg24Y5bKZbRZdZbaX9iUeYw/w1vEIjvADHHONLf8ieg9VQ3 Iz46OuVSn0GSnjHogqJfi3B6CyFbVoGz5gIJ29kDzd/fljQ1vnhVnOqa1fpm7cuEu0uuVQ /FZrAlXuajU97VhYrt08wErH3nGreOgN4nKz4eXnm7TDKHB69+mxL7BdggC+GxnHU74SnH lUgJE8xxUlNT7Pn7pGEQJshObh32gHvl7lLazcN1mQmEpH+zjPbkuXw7Sxvj/g== From: Petre Rodan Date: Wed, 10 Sep 2025 10:57:08 +0300 Subject: [PATCH v2 03/14] dt-bindings: iio: accel: bosch,bma220 change irq type 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: <20250910-bma220_improvements-v2-3-e23f4f2b9745@subdimension.ro> References: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> In-Reply-To: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Jonathan Cameron , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Petre Rodan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1268; i=petre.rodan@subdimension.ro; h=from:subject:message-id; bh=ImPKxHSGq3ndlT8NZVGV3OeU/EuHHXeTYMbeg2lmxEs=; b=owEBbQKS/ZANAwAIAc8mmZmETn8wAcsmYgBowS+HLsmxcre7S7FS4ta7jdKfMJCqcmQPuaLM8 F2zYHSot7eJAjMEAAEIAB0WIQTYCn/BdhUZNew+X6nPJpmZhE5/MAUCaMEvhwAKCRDPJpmZhE5/ MDgVD/9jN/CltAl1qukk4AdiY7k8FJl9p3/LSTnQXdPFH5HT+4Fsj4l5gk9tbCfNtbiN7lF3sPF VL+L5eU9ERB7r+RlXl3ZKcoGhYtQhm9YBbfasLMrQITgajH6Isnxl3+GPp9e+dWwdeLKbk1gdec JQV9X9k5RwFfbMnsCJb5eoXOkr8Ri3YE0YBD5488aPMc/3KfbbVc0sT8+1lcXLrKxhQG/CYjQdL Qszw50jy4UeJUVOQdo2J7GqVwy/agJE3NLhQ6dvvx6D/nZseyrW7SyfjKRV84iujRWmm9mX+e78 U+jQNuRaUD7QDjlqYjHJUWNm2vpx1tIRe2YI7NPLoQdDATXdk5kjNK6mOQ8zZzJLPl93JEBZfam S0zGnVcANRHOnJQioVLJh2sbKKtYKzBaSL5g/R/JKbgNqCttRWJSeYj1s8LGvBOjNNI86i5IsHo zoWokls4s8wjvaAPnq5BpRkLksYQ9aua1Ejd4QvbdXOjSDD0X7j8b4n4FA3ZxY7eFO/Dq4IEsL1 L0kboEKp8aL02Ooh77fxG4alVloJgVkLh2GmBY3VJtulemivIHz8pHqUhCeVqUU+Y69gQ6071/J hlhy2ZuJ4RmO9XxRfZXofV2jcI9GXrS/7ZbnXx8rpcBv+Iw8iyyXg8+cuGPu8vOKJ7wkX6gW340 5h1u9xQUsqEj0JQ== X-Developer-Key: i=petre.rodan@subdimension.ro; a=openpgp; fpr=D80A7FC176151935EC3E5FA9CF269999844E7F30 Set the interrupt type to rising edge instead of high level. Quoting from the datasheet: "If at least one of the configured conditions applies, an interrupt (logic =E2=80=981=E2=80=99) is issued through the INT pin of the sensor." The old code did not request an irq line via devm_request_threaded_irq() so there is no backward compatibility that would be affected by this change. Signed-off-by: Petre Rodan --- ChangeLog: - split out from a bigger patch file --- Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml = b/Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml index 0e27ec74065acca611e63309d6ae889b8a3134ce..8c820c27f781e8001bc14b4ca6a= b1f293bdb18ca 100644 --- a/Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml +++ b/Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml @@ -50,7 +50,7 @@ examples: spi-cpol; spi-cpha; interrupt-parent =3D <&gpio0>; - interrupts =3D <0 IRQ_TYPE_LEVEL_HIGH>; + interrupts =3D <0 IRQ_TYPE_EDGE_RISING>; }; }; ... --=20 2.49.1 From nobody Thu Oct 2 22:40:27 2025 Received: from mail.subdimension.ro (nalicastle.subdimension.ro [172.105.74.154]) (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 5E4EC30E0DC; Wed, 10 Sep 2025 07:58:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=172.105.74.154 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491093; cv=none; b=o1MngqjApjTiJjL5Fhrydos6s+qs5pydcxdt4oiohE3z+cZtpRfD3IOTsn4lPP6Avo1to6jE7zpyyQ/mJHBpwYvqz4u7juQ3LZB5b/h341ItplgFXvRHbcp5XZKAAAoc0i6dD52/grl915dAck8Er2WgN42GnL6xKP78vgGDSxI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491093; c=relaxed/simple; bh=QB1dyv1rcbt9qlgaGXObRQmLlQeUUlRShetN5AL6NME=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eDbXBTZqFAV/tBa8feKUiqMit2C80oRsQdc0SMyaa1WBEEQhmAaujfanDBNMSpTCbikEL/0ZjQuDWnOASJU9/AGz6x6LNyGnaOVTobB/Wu5AidGvPTSeyuw8tjt05NZc00MQunyaYpmA/qaHgA4oqD43hJpFV7JdolynzSbMwgU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro; spf=pass smtp.mailfrom=subdimension.ro; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b=4Z+sivjI; arc=none smtp.client-ip=172.105.74.154 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b="4Z+sivjI" Received: from [10.212.0.13] (unknown [IPv6:2a02:2f0e:3503:4a00:e2d5:5eff:fed9:f1c4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mail.subdimension.ro (Postfix) with ESMTPSA id 4CBD3173BEC; Wed, 10 Sep 2025 10:58:02 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=subdimension.ro; s=mail; t=1757491082; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6U1FRFkD9keaeCTQxgVo9bGF1/CuceK0TZHuBfXRJ9c=; b=4Z+sivjIp/JTXFzRrdlIy4J5/Vh+GemXvkjI+7VtnCHaXyYPfjkeCIo4RMJ0txh5H0sgNc wwHqzbViLFkO+AN+BSDKsVgP6df6ejWoPgYQmcKqc+OUL2gzqrq3W0pu/W1DUMFtXBGKR8 oUY/h6D/OQL6QR/k3qZY8ZNmy+s+kUr6D8NwsIxbQPaMCjN/FkJJ9phKRMshpXEH4XrCka ALPSRqk8Wj8nj/c/K82YNA4UX/GmxyvyEStgF2RahFOiC3gy4WhVC1wskA2/bGMBWTwKZ1 3hGPvfQ4gjcjSWfMPmVLkZJmDFg8eP98oOfHRmfxgguCB9q6/13GLt7UgKqFVQ== From: Petre Rodan Date: Wed, 10 Sep 2025 10:57:09 +0300 Subject: [PATCH v2 04/14] iio: accel: bma220: split original driver 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: <20250910-bma220_improvements-v2-4-e23f4f2b9745@subdimension.ro> References: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> In-Reply-To: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Jonathan Cameron , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Petre Rodan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=20817; i=petre.rodan@subdimension.ro; h=from:subject:message-id; bh=QB1dyv1rcbt9qlgaGXObRQmLlQeUUlRShetN5AL6NME=; b=owEBbQKS/ZANAwAIAc8mmZmETn8wAcsmYgBowS+HLHTuHxLx8IgP8E00hUiiwXhXVtVy87/qb sGiZ3I/I0OJAjMEAAEIAB0WIQTYCn/BdhUZNew+X6nPJpmZhE5/MAUCaMEvhwAKCRDPJpmZhE5/ MLnnEACkQW9+6u+Nmu/bA3l8S19AfhRMq7YwMvRjRWX/DPJjgPqODXiG3dMY5s0rMXrHcyU8etw hSXokO2sVAdmyXenN1K88fXzNg5TvAfDgAZ+L2Rv7YWf6aLpOp0EMnbAV4ynRWpDP3JQfbCpzJO FbdRcx4QW2D2meV74eGakIKatYp5qa/C8wSNioUp34OWV4krNBJEAPNLUif8yTAlAkgZVItaa1O yOGjzQtRv8pMaEm98PpcVpRHD1R1OD4FqJhOMI6e28CYt59cBK6R/wexWwS8r2Hv7nawVf1gifs GNPNRdbD0HtytyVxpiPmDk7FpPpK9EVrkb/eCBm/Qxu8asJ8xna7A3fTnTNfjburU6b+ZOtK5Ce EsFLMrkkdpEolzq3JuLuGKThbR9r4QrhBpbU+smXmJgpz7icmh6mbcV6aiG93YIwCxdhsl2frVv rr5QxvxGUoHrZrg+Th8rX9mVyt611Dh07Nabap1hJvwXe3FRKC3KC8UL3sq8NcXX4ASLImEfwQJ YPO7YDxQ1huT4jJ/LEJAOg3YVsNKqYDVG1BUvYf1q0YPJVCuYNIcBRVfxN3Of3VbalHBOxnClaG aqqxIlINHUfDazWGdldlnCn2x38TczbNPBmIkyAdXbfVDm+oVh3efJJO64h7WG+93Ih2iGyLOhK Qj6/qdXA+xXTYPg== X-Developer-Key: i=petre.rodan@subdimension.ro; a=openpgp; fpr=D80A7FC176151935EC3E5FA9CF269999844E7F30 In preparation for the i2c module, move the original code into multiple source files without any other functional change. Create the additional bma220_core module. Fix checkpatch warning about GPL v2 license in bma220_spi.c. Signed-off-by: Petre Rodan --- Changes: - split out open firmware table modification into separate patch - bma220_write_raw() exits without dev_err() based on similar feedback from David - change includes in bma220.h - include bma220.h in bma220_core.c - add mutex.h and pm.h includes to bma220_core.c - cleanup struct spacing in bma220_spi.c --- drivers/iio/accel/Kconfig | 9 +- drivers/iio/accel/Makefile | 3 +- drivers/iio/accel/bma220.h | 19 +++ drivers/iio/accel/bma220_core.c | 313 ++++++++++++++++++++++++++++++++++++= ++++ drivers/iio/accel/bma220_spi.c | 307 ++----------------------------------= --- 5 files changed, 354 insertions(+), 297 deletions(-) diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig index 8c3f7cf55d5fa432a4d4662b184a46cd59c3ebca..2cc3075e26883df60b5068c73b0= 551e1dd02c32e 100644 --- a/drivers/iio/accel/Kconfig +++ b/drivers/iio/accel/Kconfig @@ -218,15 +218,20 @@ config BMA180 =20 config BMA220 tristate "Bosch BMA220 3-Axis Accelerometer Driver" - depends on SPI select IIO_BUFFER select IIO_TRIGGERED_BUFFER + select BMA220_SPI if SPI help Say yes here to add support for the Bosch BMA220 triaxial acceleration sensor. =20 To compile this driver as a module, choose M here: the - module will be called bma220_spi. + module will be called bma220_core and you will also get + bma220_spi if SPI is enabled. + +config BMA220_SPI + tristate + depends on BMA220 =20 config BMA400 tristate "Bosch BMA400 3-Axis Accelerometer Driver" diff --git a/drivers/iio/accel/Makefile b/drivers/iio/accel/Makefile index ca8569e25aba31c3ae3437abf8506addbf5edffa..56a9f848f7f913633bc2a628c1a= c5c9190774b9d 100644 --- a/drivers/iio/accel/Makefile +++ b/drivers/iio/accel/Makefile @@ -25,7 +25,8 @@ obj-$(CONFIG_ADXL380) +=3D adxl380.o obj-$(CONFIG_ADXL380_I2C) +=3D adxl380_i2c.o obj-$(CONFIG_ADXL380_SPI) +=3D adxl380_spi.o obj-$(CONFIG_BMA180) +=3D bma180.o -obj-$(CONFIG_BMA220) +=3D bma220_spi.o +obj-$(CONFIG_BMA220) +=3D bma220_core.o +obj-$(CONFIG_BMA220_SPI) +=3D bma220_spi.o obj-$(CONFIG_BMA400) +=3D bma400_core.o obj-$(CONFIG_BMA400_I2C) +=3D bma400_i2c.o obj-$(CONFIG_BMA400_SPI) +=3D bma400_spi.o diff --git a/drivers/iio/accel/bma220.h b/drivers/iio/accel/bma220.h new file mode 100644 index 0000000000000000000000000000000000000000..eb311183ebfe37d1a75d858d435= eac777efc4ed8 --- /dev/null +++ b/drivers/iio/accel/bma220.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Forward declarations needed by the bma220 sources. + * + * Copyright 2025 Petre Rodan + */ + +#ifndef _BMA220_H +#define _BMA220_H + +#include +#include + +extern const struct dev_pm_ops bma220_pm_ops; +struct spi_device; + +int bma220_common_probe(struct spi_device *dev); + +#endif diff --git a/drivers/iio/accel/bma220_core.c b/drivers/iio/accel/bma220_cor= e.c new file mode 100644 index 0000000000000000000000000000000000000000..6bc2e5c3fb6cebd50209acbcc2d= 5340630c27cd1 --- /dev/null +++ b/drivers/iio/accel/bma220_core.c @@ -0,0 +1,313 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * BMA220 Digital triaxial acceleration sensor driver + * + * Copyright (c) 2016,2020 Intel Corporation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "bma220.h" + +#define BMA220_REG_ID 0x00 +#define BMA220_REG_ACCEL_X 0x02 +#define BMA220_REG_ACCEL_Y 0x03 +#define BMA220_REG_ACCEL_Z 0x04 +#define BMA220_REG_RANGE 0x11 +#define BMA220_REG_SUSPEND 0x18 + +#define BMA220_CHIP_ID 0xDD +#define BMA220_READ_MASK BIT(7) +#define BMA220_RANGE_MASK GENMASK(1, 0) +#define BMA220_SUSPEND_SLEEP 0xFF +#define BMA220_SUSPEND_WAKE 0x00 + +#define BMA220_DEVICE_NAME "bma220" + +#define BMA220_ACCEL_CHANNEL(index, reg, axis) { \ + .type =3D IIO_ACCEL, \ + .address =3D reg, \ + .modified =3D 1, \ + .channel2 =3D IIO_MOD_##axis, \ + .info_mask_separate =3D BIT(IIO_CHAN_INFO_RAW), \ + .info_mask_shared_by_type =3D BIT(IIO_CHAN_INFO_SCALE), \ + .scan_index =3D index, \ + .scan_type =3D { \ + .sign =3D 's', \ + .realbits =3D 6, \ + .storagebits =3D 8, \ + .shift =3D 2, \ + .endianness =3D IIO_CPU, \ + }, \ +} + +enum bma220_axis { + AXIS_X, + AXIS_Y, + AXIS_Z, +}; + +static const int bma220_scale_table[][2] =3D { + {0, 623000}, {1, 248000}, {2, 491000}, {4, 983000}, +}; + +struct bma220_data { + struct spi_device *spi_device; + struct mutex lock; + struct { + s8 chans[3]; + /* Ensure timestamp is naturally aligned. */ + aligned_s64 timestamp; + } scan; + u8 tx_buf[2] __aligned(IIO_DMA_MINALIGN); +}; + +static const struct iio_chan_spec bma220_channels[] =3D { + BMA220_ACCEL_CHANNEL(0, BMA220_REG_ACCEL_X, X), + BMA220_ACCEL_CHANNEL(1, BMA220_REG_ACCEL_Y, Y), + BMA220_ACCEL_CHANNEL(2, BMA220_REG_ACCEL_Z, Z), + IIO_CHAN_SOFT_TIMESTAMP(3), +}; + +static inline int bma220_read_reg(struct spi_device *spi, u8 reg) +{ + return spi_w8r8(spi, reg | BMA220_READ_MASK); +} + +static const unsigned long bma220_accel_scan_masks[] =3D { + BIT(AXIS_X) | BIT(AXIS_Y) | BIT(AXIS_Z), + 0 +}; + +static irqreturn_t bma220_trigger_handler(int irq, void *p) +{ + int ret; + struct iio_poll_func *pf =3D p; + struct iio_dev *indio_dev =3D pf->indio_dev; + struct bma220_data *data =3D iio_priv(indio_dev); + struct spi_device *spi =3D data->spi_device; + + mutex_lock(&data->lock); + data->tx_buf[0] =3D BMA220_REG_ACCEL_X | BMA220_READ_MASK; + ret =3D spi_write_then_read(spi, data->tx_buf, 1, &data->scan.chans, + ARRAY_SIZE(bma220_channels) - 1); + if (ret < 0) + goto err; + + iio_push_to_buffers_with_ts(indio_dev, &data->scan, sizeof(data->scan), + pf->timestamp); +err: + mutex_unlock(&data->lock); + iio_trigger_notify_done(indio_dev->trig); + + return IRQ_HANDLED; +} + +static int bma220_read_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + int *val, int *val2, long mask) +{ + int ret; + u8 range_idx; + struct bma220_data *data =3D iio_priv(indio_dev); + + switch (mask) { + case IIO_CHAN_INFO_RAW: + ret =3D bma220_read_reg(data->spi_device, chan->address); + if (ret < 0) + return -EINVAL; + *val =3D sign_extend32(ret >> chan->scan_type.shift, + chan->scan_type.realbits - 1); + return IIO_VAL_INT; + case IIO_CHAN_INFO_SCALE: + ret =3D bma220_read_reg(data->spi_device, BMA220_REG_RANGE); + if (ret < 0) + return ret; + range_idx =3D ret & BMA220_RANGE_MASK; + *val =3D bma220_scale_table[range_idx][0]; + *val2 =3D bma220_scale_table[range_idx][1]; + return IIO_VAL_INT_PLUS_MICRO; + } + + return -EINVAL; +} + +static int bma220_write_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + int val, int val2, long mask) +{ + int i; + int ret; + int index =3D -1; + struct bma220_data *data =3D iio_priv(indio_dev); + + switch (mask) { + case IIO_CHAN_INFO_SCALE: + for (i =3D 0; i < ARRAY_SIZE(bma220_scale_table); i++) + if (val =3D=3D bma220_scale_table[i][0] && + val2 =3D=3D bma220_scale_table[i][1]) { + index =3D i; + break; + } + if (index < 0) + return -EINVAL; + + mutex_lock(&data->lock); + data->tx_buf[0] =3D BMA220_REG_RANGE; + data->tx_buf[1] =3D index; + ret =3D spi_write(data->spi_device, data->tx_buf, + sizeof(data->tx_buf)); + if (ret < 0) + return ret; + mutex_unlock(&data->lock); + + return 0; + } + + return -EINVAL; +} + +static int bma220_read_avail(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + const int **vals, int *type, int *length, + long mask) +{ + switch (mask) { + case IIO_CHAN_INFO_SCALE: + *vals =3D (int *)bma220_scale_table; + *type =3D IIO_VAL_INT_PLUS_MICRO; + *length =3D ARRAY_SIZE(bma220_scale_table) * 2; + return IIO_AVAIL_LIST; + default: + return -EINVAL; + } +} + +static const struct iio_info bma220_info =3D { + .read_raw =3D bma220_read_raw, + .write_raw =3D bma220_write_raw, + .read_avail =3D bma220_read_avail, +}; + +static int bma220_init(struct spi_device *spi) +{ + int ret; + + ret =3D bma220_read_reg(spi, BMA220_REG_ID); + if (ret !=3D BMA220_CHIP_ID) + return -ENODEV; + + /* Make sure the chip is powered on */ + ret =3D bma220_read_reg(spi, BMA220_REG_SUSPEND); + if (ret =3D=3D BMA220_SUSPEND_WAKE) + ret =3D bma220_read_reg(spi, BMA220_REG_SUSPEND); + if (ret < 0) + return ret; + if (ret =3D=3D BMA220_SUSPEND_WAKE) + return -EBUSY; + + return 0; +} + +static int bma220_power(struct spi_device *spi, bool up) +{ + int i, ret; + + /** + * The chip can be suspended/woken up by a simple register read. + * So, we need up to 2 register reads of the suspend register + * to make sure that the device is in the desired state. + */ + for (i =3D 0; i < 2; i++) { + ret =3D bma220_read_reg(spi, BMA220_REG_SUSPEND); + if (ret < 0) + return ret; + + if (up && ret =3D=3D BMA220_SUSPEND_SLEEP) + return 0; + + if (!up && ret =3D=3D BMA220_SUSPEND_WAKE) + return 0; + } + + return -EBUSY; +} + +static void bma220_deinit(void *spi) +{ + bma220_power(spi, false); +} + +int bma220_common_probe(struct spi_device *spi) +{ + int ret; + struct iio_dev *indio_dev; + struct bma220_data *data; + + indio_dev =3D devm_iio_device_alloc(&spi->dev, sizeof(*data)); + if (!indio_dev) + return -ENOMEM; + + data =3D iio_priv(indio_dev); + data->spi_device =3D spi; + mutex_init(&data->lock); + + indio_dev->info =3D &bma220_info; + indio_dev->name =3D BMA220_DEVICE_NAME; + indio_dev->modes =3D INDIO_DIRECT_MODE; + indio_dev->channels =3D bma220_channels; + indio_dev->num_channels =3D ARRAY_SIZE(bma220_channels); + indio_dev->available_scan_masks =3D bma220_accel_scan_masks; + + ret =3D bma220_init(data->spi_device); + if (ret) + return ret; + + ret =3D devm_add_action_or_reset(&spi->dev, bma220_deinit, spi); + if (ret) + return ret; + + ret =3D devm_iio_triggered_buffer_setup(&spi->dev, indio_dev, + iio_pollfunc_store_time, + bma220_trigger_handler, NULL); + if (ret < 0) { + dev_err(&spi->dev, "iio triggered buffer setup failed\n"); + return ret; + } + + return devm_iio_device_register(&spi->dev, indio_dev); +} +EXPORT_SYMBOL_NS(bma220_common_probe, "IIO_BOSCH_BMA220"); + +static int bma220_suspend(struct device *dev) +{ + struct spi_device *spi =3D to_spi_device(dev); + + return bma220_power(spi, false); +} + +static int bma220_resume(struct device *dev) +{ + struct spi_device *spi =3D to_spi_device(dev); + + return bma220_power(spi, true); +} +EXPORT_NS_SIMPLE_DEV_PM_OPS(bma220_pm_ops, bma220_suspend, bma220_resume, + IIO_BOSCH_BMA220); + +MODULE_AUTHOR("Tiberiu Breana "); +MODULE_DESCRIPTION("BMA220 acceleration sensor driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/iio/accel/bma220_spi.c b/drivers/iio/accel/bma220_spi.c index 01592eebf05bb6b002d44c41cca1d2dd5f28350c..3ad5e43aae496d265a8cf198595= bf824f8e73692 100644 --- a/drivers/iio/accel/bma220_spi.c +++ b/drivers/iio/accel/bma220_spi.c @@ -5,326 +5,45 @@ * Copyright (c) 2016,2020 Intel Corporation. */ =20 -#include -#include +#include +#include #include #include #include #include =20 -#include #include -#include -#include -#include =20 -#define BMA220_REG_ID 0x00 -#define BMA220_REG_ACCEL_X 0x02 -#define BMA220_REG_ACCEL_Y 0x03 -#define BMA220_REG_ACCEL_Z 0x04 -#define BMA220_REG_RANGE 0x11 -#define BMA220_REG_SUSPEND 0x18 +#include "bma220.h" =20 -#define BMA220_CHIP_ID 0xDD -#define BMA220_READ_MASK BIT(7) -#define BMA220_RANGE_MASK GENMASK(1, 0) -#define BMA220_SUSPEND_SLEEP 0xFF -#define BMA220_SUSPEND_WAKE 0x00 - -#define BMA220_DEVICE_NAME "bma220" - -#define BMA220_ACCEL_CHANNEL(index, reg, axis) { \ - .type =3D IIO_ACCEL, \ - .address =3D reg, \ - .modified =3D 1, \ - .channel2 =3D IIO_MOD_##axis, \ - .info_mask_separate =3D BIT(IIO_CHAN_INFO_RAW), \ - .info_mask_shared_by_type =3D BIT(IIO_CHAN_INFO_SCALE), \ - .scan_index =3D index, \ - .scan_type =3D { \ - .sign =3D 's', \ - .realbits =3D 6, \ - .storagebits =3D 8, \ - .shift =3D 2, \ - .endianness =3D IIO_CPU, \ - }, \ -} - -enum bma220_axis { - AXIS_X, - AXIS_Y, - AXIS_Z, -}; - -static const int bma220_scale_table[][2] =3D { - {0, 623000}, {1, 248000}, {2, 491000}, {4, 983000}, -}; - -struct bma220_data { - struct spi_device *spi_device; - struct mutex lock; - struct { - s8 chans[3]; - /* Ensure timestamp is naturally aligned. */ - aligned_s64 timestamp; - } scan; - u8 tx_buf[2] __aligned(IIO_DMA_MINALIGN); -}; - -static const struct iio_chan_spec bma220_channels[] =3D { - BMA220_ACCEL_CHANNEL(0, BMA220_REG_ACCEL_X, X), - BMA220_ACCEL_CHANNEL(1, BMA220_REG_ACCEL_Y, Y), - BMA220_ACCEL_CHANNEL(2, BMA220_REG_ACCEL_Z, Z), - IIO_CHAN_SOFT_TIMESTAMP(3), -}; - -static inline int bma220_read_reg(struct spi_device *spi, u8 reg) -{ - return spi_w8r8(spi, reg | BMA220_READ_MASK); -} - -static const unsigned long bma220_accel_scan_masks[] =3D { - BIT(AXIS_X) | BIT(AXIS_Y) | BIT(AXIS_Z), - 0 -}; - -static irqreturn_t bma220_trigger_handler(int irq, void *p) -{ - int ret; - struct iio_poll_func *pf =3D p; - struct iio_dev *indio_dev =3D pf->indio_dev; - struct bma220_data *data =3D iio_priv(indio_dev); - struct spi_device *spi =3D data->spi_device; - - mutex_lock(&data->lock); - data->tx_buf[0] =3D BMA220_REG_ACCEL_X | BMA220_READ_MASK; - ret =3D spi_write_then_read(spi, data->tx_buf, 1, &data->scan.chans, - ARRAY_SIZE(bma220_channels) - 1); - if (ret < 0) - goto err; - - iio_push_to_buffers_with_ts(indio_dev, &data->scan, sizeof(data->scan), - pf->timestamp); -err: - mutex_unlock(&data->lock); - iio_trigger_notify_done(indio_dev->trig); - - return IRQ_HANDLED; -} - -static int bma220_read_raw(struct iio_dev *indio_dev, - struct iio_chan_spec const *chan, - int *val, int *val2, long mask) -{ - int ret; - u8 range_idx; - struct bma220_data *data =3D iio_priv(indio_dev); - - switch (mask) { - case IIO_CHAN_INFO_RAW: - ret =3D bma220_read_reg(data->spi_device, chan->address); - if (ret < 0) - return -EINVAL; - *val =3D sign_extend32(ret >> chan->scan_type.shift, - chan->scan_type.realbits - 1); - return IIO_VAL_INT; - case IIO_CHAN_INFO_SCALE: - ret =3D bma220_read_reg(data->spi_device, BMA220_REG_RANGE); - if (ret < 0) - return ret; - range_idx =3D ret & BMA220_RANGE_MASK; - *val =3D bma220_scale_table[range_idx][0]; - *val2 =3D bma220_scale_table[range_idx][1]; - return IIO_VAL_INT_PLUS_MICRO; - } - - return -EINVAL; -} - -static int bma220_write_raw(struct iio_dev *indio_dev, - struct iio_chan_spec const *chan, - int val, int val2, long mask) +static int bma220_spi_probe(struct spi_device *spi) { - int i; - int ret; - int index =3D -1; - struct bma220_data *data =3D iio_priv(indio_dev); - - switch (mask) { - case IIO_CHAN_INFO_SCALE: - for (i =3D 0; i < ARRAY_SIZE(bma220_scale_table); i++) - if (val =3D=3D bma220_scale_table[i][0] && - val2 =3D=3D bma220_scale_table[i][1]) { - index =3D i; - break; - } - if (index < 0) - return -EINVAL; - - mutex_lock(&data->lock); - data->tx_buf[0] =3D BMA220_REG_RANGE; - data->tx_buf[1] =3D index; - ret =3D spi_write(data->spi_device, data->tx_buf, - sizeof(data->tx_buf)); - if (ret < 0) - dev_err(&data->spi_device->dev, - "failed to set measurement range\n"); - mutex_unlock(&data->lock); - - return 0; - } - - return -EINVAL; -} - -static int bma220_read_avail(struct iio_dev *indio_dev, - struct iio_chan_spec const *chan, - const int **vals, int *type, int *length, - long mask) -{ - switch (mask) { - case IIO_CHAN_INFO_SCALE: - *vals =3D (int *)bma220_scale_table; - *type =3D IIO_VAL_INT_PLUS_MICRO; - *length =3D ARRAY_SIZE(bma220_scale_table) * 2; - return IIO_AVAIL_LIST; - default: - return -EINVAL; - } -} - -static const struct iio_info bma220_info =3D { - .read_raw =3D bma220_read_raw, - .write_raw =3D bma220_write_raw, - .read_avail =3D bma220_read_avail, -}; - -static int bma220_init(struct spi_device *spi) -{ - int ret; - - ret =3D bma220_read_reg(spi, BMA220_REG_ID); - if (ret !=3D BMA220_CHIP_ID) - return -ENODEV; - - /* Make sure the chip is powered on */ - ret =3D bma220_read_reg(spi, BMA220_REG_SUSPEND); - if (ret =3D=3D BMA220_SUSPEND_WAKE) - ret =3D bma220_read_reg(spi, BMA220_REG_SUSPEND); - if (ret < 0) - return ret; - if (ret =3D=3D BMA220_SUSPEND_WAKE) - return -EBUSY; - - return 0; -} - -static int bma220_power(struct spi_device *spi, bool up) -{ - int i, ret; - - /** - * The chip can be suspended/woken up by a simple register read. - * So, we need up to 2 register reads of the suspend register - * to make sure that the device is in the desired state. - */ - for (i =3D 0; i < 2; i++) { - ret =3D bma220_read_reg(spi, BMA220_REG_SUSPEND); - if (ret < 0) - return ret; - - if (up && ret =3D=3D BMA220_SUSPEND_SLEEP) - return 0; - - if (!up && ret =3D=3D BMA220_SUSPEND_WAKE) - return 0; - } - - return -EBUSY; -} - -static void bma220_deinit(void *spi) -{ - bma220_power(spi, false); -} - -static int bma220_probe(struct spi_device *spi) -{ - int ret; - struct iio_dev *indio_dev; - struct bma220_data *data; - - indio_dev =3D devm_iio_device_alloc(&spi->dev, sizeof(*data)); - if (!indio_dev) - return -ENOMEM; - - data =3D iio_priv(indio_dev); - data->spi_device =3D spi; - mutex_init(&data->lock); - - indio_dev->info =3D &bma220_info; - indio_dev->name =3D BMA220_DEVICE_NAME; - indio_dev->modes =3D INDIO_DIRECT_MODE; - indio_dev->channels =3D bma220_channels; - indio_dev->num_channels =3D ARRAY_SIZE(bma220_channels); - indio_dev->available_scan_masks =3D bma220_accel_scan_masks; - - ret =3D bma220_init(data->spi_device); - if (ret) - return ret; - - ret =3D devm_add_action_or_reset(&spi->dev, bma220_deinit, spi); - if (ret) - return ret; - - ret =3D devm_iio_triggered_buffer_setup(&spi->dev, indio_dev, - iio_pollfunc_store_time, - bma220_trigger_handler, NULL); - if (ret < 0) { - dev_err(&spi->dev, "iio triggered buffer setup failed\n"); - return ret; - } - - return devm_iio_device_register(&spi->dev, indio_dev); -} - -static int bma220_suspend(struct device *dev) -{ - struct spi_device *spi =3D to_spi_device(dev); - - return bma220_power(spi, false); -} - -static int bma220_resume(struct device *dev) -{ - struct spi_device *spi =3D to_spi_device(dev); - - return bma220_power(spi, true); + return bma220_common_probe(spi); } -static DEFINE_SIMPLE_DEV_PM_OPS(bma220_pm_ops, bma220_suspend, bma220_resu= me); =20 static const struct spi_device_id bma220_spi_id[] =3D { - {"bma220", 0}, + { "bma220", 0 }, { } }; =20 static const struct acpi_device_id bma220_acpi_id[] =3D { - {"BMA0220", 0}, + { "BMA0220", 0 }, { } }; MODULE_DEVICE_TABLE(spi, bma220_spi_id); =20 -static struct spi_driver bma220_driver =3D { +static struct spi_driver bma220_spi_driver =3D { .driver =3D { .name =3D "bma220_spi", .pm =3D pm_sleep_ptr(&bma220_pm_ops), .acpi_match_table =3D bma220_acpi_id, }, - .probe =3D bma220_probe, + .probe =3D bma220_spi_probe, .id_table =3D bma220_spi_id, }; -module_spi_driver(bma220_driver); +module_spi_driver(bma220_spi_driver); =20 MODULE_AUTHOR("Tiberiu Breana "); -MODULE_DESCRIPTION("BMA220 acceleration sensor driver"); -MODULE_LICENSE("GPL v2"); +MODULE_DESCRIPTION("BMA220 triaxial acceleration sensor spi driver"); +MODULE_LICENSE("GPL"); +MODULE_IMPORT_NS("IIO_BOSCH_BMA220"); --=20 2.49.1 From nobody Thu Oct 2 22:40:27 2025 Received: from mail.subdimension.ro (nalicastle.subdimension.ro [172.105.74.154]) (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 0597530F554; Wed, 10 Sep 2025 07:58:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=172.105.74.154 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491093; cv=none; b=EaW3rlFluVA8b6vyiBVLwVuE76aOtELkh69jM/HhH1yonOJ71kpSCJsW/4z9BCpe5CXyAMBmaz9ek4rfq65cwFKN/iHv0KxyeNO+kV9BDXviW+Q9q4M8GK3o1+QPY6zopBEVM7qg8f+6ZJLWoBzhx2bp921vkf8vyjnA7E2d6VI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491093; c=relaxed/simple; bh=xCQ4R5IipziaPFirWiYAT8NBRrNTDlTpdFlbr3ypQUA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HWtAEnC4Z2VtvmTvXrd5r/MdbFdflzFNNCqTouRfUltmA9cCq0uWpX2T5BL8Yi8WcUe0PwZEoXyidzifJgyMMM3JSTrcoFhRv8dLamMN6MjjXlJ42c3zr5IOtQ4vrYcxsiWjEO9pcEJ00TbnWKfwNyWQgMY8Wo/KAi1xWVkFopY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro; spf=pass smtp.mailfrom=subdimension.ro; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b=jq8ZgLop; arc=none smtp.client-ip=172.105.74.154 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b="jq8ZgLop" Received: from [10.212.0.13] (unknown [IPv6:2a02:2f0e:3503:4a00:e2d5:5eff:fed9:f1c4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mail.subdimension.ro (Postfix) with ESMTPSA id 16981173BED; Wed, 10 Sep 2025 10:58:03 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=subdimension.ro; s=mail; t=1757491083; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QdEGmUJ4rrZAPa1caKgA6NkLY7Tuz7+KbeKrR9ouOgY=; b=jq8ZgLopmWzKvNx9ItTgcPQtTr5e8B1fJvag2PW97RB4qpqVPze6b+/zwyVGi6QSn/oDYa s7/b6H/NRvAygkQjEbO0S17AiTMCb1WUTBIkAhGPCc6NbPgqZPdw6+o94l4YDKAfWPJ+wx WTGipaolSGVIsDj8gMJjnGMyADDIsK02ts5lSGBPUohnv4Two5kDaA5GCRtnJVKJGnn05Q ugo1+3TWsS15HbLaR0BGl8rQd2e92UXg8YFC2DVFjLSGPSk5RjD9j1FaP/gQBq+N0GGIO7 Mf9ljkNH+a8ABuNZ13uo/a/hO92hJnSIxXIDPfMxkEUiqj71tOus09Mqb1CbQw== From: Petre Rodan Date: Wed, 10 Sep 2025 10:57:10 +0300 Subject: [PATCH v2 05/14] iio: accel: bma220: add open firmware table 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: <20250910-bma220_improvements-v2-5-e23f4f2b9745@subdimension.ro> References: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> In-Reply-To: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Jonathan Cameron , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Petre Rodan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1021; i=petre.rodan@subdimension.ro; h=from:subject:message-id; bh=xCQ4R5IipziaPFirWiYAT8NBRrNTDlTpdFlbr3ypQUA=; b=owEBbQKS/ZANAwAIAc8mmZmETn8wAcsmYgBowS+HssSDDQ8jhhQO7AnxHyi3PU5LdXf9CtEC8 OQxdLZi55KJAjMEAAEIAB0WIQTYCn/BdhUZNew+X6nPJpmZhE5/MAUCaMEvhwAKCRDPJpmZhE5/ MPdaEACaVKrrAeuji+1wneND0Qor5d6hDsQ3OpBywT4R48HXFYpd3RzfKYds1SXQ3I4lAsCsjmJ JXpqWiFgCBxhmXs6BPBr1M4+rmwA9Ej/3ORJcT7sVhGcuPeXhziJFJ9r08etFiiTD2/ewfHLSLY Pn40KCmkaZKWnTGaok2YEUDd+1a8UiyKMhMNTPgfNNWmUZkfADa7A1bZagJhthF8kvr74oGDKjT YBu1bs8Wnr+JKK5woxqtsIjVl8PSIeaVYTYqN/WghCxR4fiRjCWnYgEKW4n8jw3YidwIGrt1LU9 MdWdZS404TT1OqDVVraWGriU5eKykUjFh1BK6AHKhT8wGflai2uQguQtUyDvLi+My0E1Lnn1cNv shG1ZQSKlwUgpiYQq16HohPAUlQXwfcV8bksywEWRcRhgCX4NrmZXjQfK1sFOL3JBgHxnCAfC8z K1HL6iYiTpkOxKSWMXwOuuJoN5ChVxgaOZ3L0DavcHVs2Hoty/rw/n45UabbHTP+nFwkglk/JlT SM6SBa3NiRchFKn6ladej+zQdoztPp262Jgur0Mv6DTzI8++8xplSC0Fdd5yAwUb+7+lkjA9GW7 KzyjZwZqOCmClBddwBA8lwJ3t5eGn32s4dtYHjnYWihdxZ4GGIvdtS3iCbMivubeM3uyFzSgDaa 05ZAv7VqWjLfK2g== X-Developer-Key: i=petre.rodan@subdimension.ro; a=openpgp; fpr=D80A7FC176151935EC3E5FA9CF269999844E7F30 Add open firmware entry to the spi driver. Signed-off-by: Petre Rodan --- no change --- drivers/iio/accel/bma220_spi.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/iio/accel/bma220_spi.c b/drivers/iio/accel/bma220_spi.c index 3ad5e43aae496d265a8cf198595bf824f8e73692..78820d90e39119d9755b6266a83= 29e11ffd55723 100644 --- a/drivers/iio/accel/bma220_spi.c +++ b/drivers/iio/accel/bma220_spi.c @@ -32,10 +32,17 @@ static const struct acpi_device_id bma220_acpi_id[] =3D= { }; MODULE_DEVICE_TABLE(spi, bma220_spi_id); =20 +static const struct of_device_id bma220_of_spi_match[] =3D { + { .compatible =3D "bosch,bma220" }, + { } +}; +MODULE_DEVICE_TABLE(of, bma220_of_spi_match); + static struct spi_driver bma220_spi_driver =3D { .driver =3D { .name =3D "bma220_spi", .pm =3D pm_sleep_ptr(&bma220_pm_ops), + .of_match_table =3D bma220_of_spi_match, .acpi_match_table =3D bma220_acpi_id, }, .probe =3D bma220_spi_probe, --=20 2.49.1 From nobody Thu Oct 2 22:40:27 2025 Received: from mail.subdimension.ro (nalicastle.subdimension.ro [172.105.74.154]) (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 058B430F553; Wed, 10 Sep 2025 07:58:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=172.105.74.154 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491094; cv=none; b=u2dKa3T7/K81R753shvcP5qSV9ZTN+fXjVIfpet5xj/eqzyV/VycClUuyawOtim80Udsj3dgWDynIWXycbD8uQuWNB3VI/wVp776Qjdog2pt55nx2Fl6UE5XypGGr83EHHmB2REHxZdZgQxzthqRmDxYE6eSxVWZ0UnxmeYw68A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491094; c=relaxed/simple; bh=vzXTIDrjP1pDfPjNNfkDoU+3wjCvrQSDby46AFhOTpE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YyvRnmgplEfYHV0TPy5a1wlI9vKd37v5xH/x2MfN3Sh0QSFxBn5r0U0IWUs7zG/MHyRhOicYrpckg16DnKVkHLVMI6MxOcz/MXMF1Prv2gthl3FjurT4cFiWC6squIuOLUPWt91NAgFBzN3BUZslbgG+14GPYiHDfzU4bLSS0fo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro; spf=pass smtp.mailfrom=subdimension.ro; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b=qyfHtlEn; arc=none smtp.client-ip=172.105.74.154 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b="qyfHtlEn" Received: from [10.212.0.13] (unknown [IPv6:2a02:2f0e:3503:4a00:e2d5:5eff:fed9:f1c4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mail.subdimension.ro (Postfix) with ESMTPSA id 8E8BC173BEE; Wed, 10 Sep 2025 10:58:03 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=subdimension.ro; s=mail; t=1757491083; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mEL+OzR1QaU/yG1ohZ4kzH9gvKvOjMioR2BOf3PWHus=; b=qyfHtlEnYKRM58LxUXFz/hssQV7J/rsaf785S+TbUWCVnryC8HjxwmMqNzNa3Bf4fmbhxx hhgPbkBxDwb+5zXYlcryt+Np/R/dcuxdM+tUkk6S9YEYMjWDDpbN7j6x7Y9MZbbDwFqbf/ oA7TTI0jKcfxzD2jgAfMyTEp1dvCV6pQsV4RR1l6u9LrF0ndhfAnYs3Amsjz2daIzuSwva gkbpotLfsIuEjRhww3UffkdjQVIolADbAJkURqtiPikVAu9YDPMdt3DPeCJlOjEYXF1IwW IiLZwkpVZkAqYXoc5WdpNidlbJc81xlx9iFJy+5Pk0K2UInC6ipx1RWjs1jRgQ== From: Petre Rodan Date: Wed, 10 Sep 2025 10:57:11 +0300 Subject: [PATCH v2 06/14] iio: accel: bma220: add get regulator check 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: <20250910-bma220_improvements-v2-6-e23f4f2b9745@subdimension.ro> References: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> In-Reply-To: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Jonathan Cameron , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Petre Rodan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1186; i=petre.rodan@subdimension.ro; h=from:subject:message-id; bh=vzXTIDrjP1pDfPjNNfkDoU+3wjCvrQSDby46AFhOTpE=; b=owEBbQKS/ZANAwAIAc8mmZmETn8wAcsmYgBowS+HIkEtplNguP0cs+7NUwQ/s8QaDD85D7f71 s21yAp0yViJAjMEAAEIAB0WIQTYCn/BdhUZNew+X6nPJpmZhE5/MAUCaMEvhwAKCRDPJpmZhE5/ MPB2D/9x2hhIOMVOkim1y506YGuFDA36eipT+uit2oQPkXqh08TGKoVZISlbEDSK659iLkkmNKH 6CH7tMFMNtqNsCgUvvvxyP4n06dkC/thDW+aSUgQVJLMTzrPTiqym8Xcf27pVqYj0cGDWayJdNY b0U5Wz+/GLHw8f7aRU8U/ttLIgk0rVdYySp+8tZn6qrkDr8e5SEr08GTTgUoquH5LSt+kpmFmYZ xnHKQIRtjqaShK0fKQUMSlNlBFb1N36EAbBOGykoLNJphwbwsrDKkZVa8g4755B4sH2hJ441UMC w6ZHNG0bqSRr1k8SPS/+uoepv7lBesQ7DSl5hjBRVNFeJE63GCFeNzKyby3w3aw6AlEkkuOnXPG NskdxCsdTTiJVdJWInWyarNkb6WdwJqfSFHe3fly42OXVOsUPCYI9RErghUPV5zhtuXwXojlaho vlxjXf3osz2pwnV/lvgPUqCMmxjyZ3EXKDgedCqDymKIfqYjnYm4iK5NpXGfu3BSm0iaq75Q1W3 /5A2ewtQnKp1szGT1MUxG5G1Czvy/fyMfRQ9Nw2l+xF6Kwu4/Cz/aQfmVeb8+7ioGYLx/ID5YBa N8VPR4VLVpwi+WbIQcV8oaFpSdHfyjxoXimufOz1Okqaf7zqyHGUffF5FgB5A8tQprrplH4OX5S dBUT2ZGB+nu76Dw== X-Developer-Key: i=petre.rodan@subdimension.ro; a=openpgp; fpr=D80A7FC176151935EC3E5FA9CF269999844E7F30 Add devm_regulator_bulk_get_enable() to device probe(). Signed-off-by: Petre Rodan --- no change --- drivers/iio/accel/bma220_core.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/iio/accel/bma220_core.c b/drivers/iio/accel/bma220_cor= e.c index 6bc2e5c3fb6cebd50209acbcc2d5340630c27cd1..b6f1374a9cca52966c105511371= 0061a7284cf5a 100644 --- a/drivers/iio/accel/bma220_core.c +++ b/drivers/iio/accel/bma220_core.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include =20 @@ -205,6 +206,13 @@ static const struct iio_info bma220_info =3D { static int bma220_init(struct spi_device *spi) { int ret; + static const char * const regulator_names[] =3D { "vddd", "vddio", "vdda"= }; + + ret =3D devm_regulator_bulk_get_enable(&spi->dev, + ARRAY_SIZE(regulator_names), + regulator_names); + if (ret) + return dev_err_probe(&spi->dev, ret, "Failed to get regulators\n"); =20 ret =3D bma220_read_reg(spi, BMA220_REG_ID); if (ret !=3D BMA220_CHIP_ID) --=20 2.49.1 From nobody Thu Oct 2 22:40:27 2025 Received: from mail.subdimension.ro (nalicastle.subdimension.ro [172.105.74.154]) (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 2C13C30F7E3; Wed, 10 Sep 2025 07:58:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=172.105.74.154 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491094; cv=none; b=SiLVaMmJQmq8TLG5/IzPCtp/bxKADudshwjZ401M2uhnqVOlN7ulrV/gLTphD42qD7uqo3MmyCwLX3V+Yw1y1nJGg0MQcbcEqFgpI0rssKcOd5tbCn3sDg/TXdzi1FI8BO6rqRY0sPl9mnmajMtEaibIe63RUV6jm+/vq+Xuz7I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491094; c=relaxed/simple; bh=1scJCB+806UtNfxHO3wDXIOqiSHVx3IrG0YVu0piZBk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RcyNza9MWQVy6tDXe1LFxdr2cO6bFt3WTWoe8p48a4scSpGncVmNTnwDQK95DuegA5vDacgP1t/53x1xhDcw9cUkAdT6jY0aQy/GtQNgb4BnhI3SABirjTKq1S/gV29QjJkHc1Zb8JzIHsA/FMbsXEttr9pHBxTL42+dZzJTmpk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro; spf=pass smtp.mailfrom=subdimension.ro; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b=g5XK6ZUL; arc=none smtp.client-ip=172.105.74.154 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b="g5XK6ZUL" Received: from [10.212.0.13] (unknown [IPv6:2a02:2f0e:3503:4a00:e2d5:5eff:fed9:f1c4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mail.subdimension.ro (Postfix) with ESMTPSA id 12611173BEF; Wed, 10 Sep 2025 10:58:04 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=subdimension.ro; s=mail; t=1757491084; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=AfJ3WGDj3DCbzW0qEw5j4fk1Oo5dl0J3mYsDlxO0xPM=; b=g5XK6ZULBWfMavS2bQ7oqpVH2NX2kidmhUIMqkUzaNQibg8chlHbW71tiowyFynOUhVeDA tM2U0lT2dUkiGnw6nbEnCEWYx+reMxnp6H7RMDpI5RhvYswabFJntO58UvitHyd3hZQ2OU Yl/wb5QQX8V6n2q8Udp++baKx7C9lzgyt6SmMW/esUL4pBlApaFbcFgWU3UzHmGt1HyrUW dIkEgKuG4DSAVyTdjlIk2CNSXX+WrBG4OxDRLZJw3w2DszJUc5Co3ZObEdBQIpizYnSi1Z C6Ymtd/xbLUYURDpMBVDQAwkCAa2by3ijE/lB8ttorkkiteTP+k1E0+4IGSSCQ== From: Petre Rodan Date: Wed, 10 Sep 2025 10:57:12 +0300 Subject: [PATCH v2 07/14] iio: accel: bma220: reset registers during init stage 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: <20250910-bma220_improvements-v2-7-e23f4f2b9745@subdimension.ro> References: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> In-Reply-To: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Jonathan Cameron , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Petre Rodan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3680; i=petre.rodan@subdimension.ro; h=from:subject:message-id; bh=1scJCB+806UtNfxHO3wDXIOqiSHVx3IrG0YVu0piZBk=; b=owEBbQKS/ZANAwAIAc8mmZmETn8wAcsmYgBowS+H+lbBm1fJRNRUAbqlyfztjKh1lRU6RZSq2 JRxA60heJqJAjMEAAEIAB0WIQTYCn/BdhUZNew+X6nPJpmZhE5/MAUCaMEvhwAKCRDPJpmZhE5/ MOxmEAC+9O+71EeYTsLfT7dvbo3t7T3N74DOKhNgg+kC1FIwVWuzEIcB5whTkTYo3Jk8ASAQ6ds 9URirDv13cWoUT0XO/cg6wpjjA0dgUKKV59iULxlcvb5rIdc9IA+TZWHcFo9SpWt3e0aIsjIVRb AU2zKMXdgccGORaZSBTkLTcRB1sUs+1QP1A8Drox2Q5Sp45r+vubybEer65UsmZky37rlrYH0zX AdeHPRM66ffFAtChvG3rIYNcHoUzuzhkM36mfZrzuDzNxy+KZtjxk429kAyWF4dxV9Eby/eycgf J0n+zhkTtC0kbfyytr9S3BylW2zKQsW7hJBAajbGiYupbIW9winyB/ZiZGq5TVil01ILJHzl1eX 4MtODErwYCUoWrWsUpoUk9/bcLo2lww58+0y2NrDsVa/taZBGPKSvMoOfsjMoCBv4wqQ7dJHO7u A0JYN0UB8kOZLJKM8i9UjNrlFsf1EFcbkt4dkV20fb3X3reZ0cVTlgjBA2jz6plmKw7bXQGCG5J dGkWmJ1wdh8BCnBCne33PS3Vl6VlhhEPPoYzpNGw0z6J4ieLlupAGXg/X8p6jCSR3FCDTW1AI1i EDcxuWR7aNSB4ksNlq1rh+Fx9LRCgHEnGJSsD3JK7rP0cor7VlPo1Bx+0qQDJjtc+wGXEKKy7+B 3sTSgwPHpXIF4Fw== X-Developer-Key: i=petre.rodan@subdimension.ro; a=openpgp; fpr=D80A7FC176151935EC3E5FA9CF269999844E7F30 Bring all configuration registers to default values during device probe(). Signed-off-by: Petre Rodan --- drivers/iio/accel/bma220_core.c | 71 ++++++++++++++++++++++++++++---------= ---- 1 file changed, 49 insertions(+), 22 deletions(-) diff --git a/drivers/iio/accel/bma220_core.c b/drivers/iio/accel/bma220_cor= e.c index b6f1374a9cca52966c1055113710061a7284cf5a..322df516c90a7c645eeca579cae= 9803eb31caad1 100644 --- a/drivers/iio/accel/bma220_core.c +++ b/drivers/iio/accel/bma220_core.c @@ -29,12 +29,15 @@ #define BMA220_REG_ACCEL_Z 0x04 #define BMA220_REG_RANGE 0x11 #define BMA220_REG_SUSPEND 0x18 +#define BMA220_REG_SOFTRESET 0x19 =20 #define BMA220_CHIP_ID 0xDD #define BMA220_READ_MASK BIT(7) #define BMA220_RANGE_MASK GENMASK(1, 0) #define BMA220_SUSPEND_SLEEP 0xFF #define BMA220_SUSPEND_WAKE 0x00 +#define BMA220_RESET_MODE 0xFF +#define BMA220_NONRESET_MODE 0x00 =20 #define BMA220_DEVICE_NAME "bma220" =20 @@ -203,31 +206,28 @@ static const struct iio_info bma220_info =3D { .read_avail =3D bma220_read_avail, }; =20 -static int bma220_init(struct spi_device *spi) +static int bma220_reset(struct spi_device *spi, bool up) { - int ret; - static const char * const regulator_names[] =3D { "vddd", "vddio", "vdda"= }; + int i, ret; =20 - ret =3D devm_regulator_bulk_get_enable(&spi->dev, - ARRAY_SIZE(regulator_names), - regulator_names); - if (ret) - return dev_err_probe(&spi->dev, ret, "Failed to get regulators\n"); + /** + * The chip can be reset by a simple register read. + * We need up to 2 register reads of the softreset register + * to make sure that the device is in the desired state. + */ + for (i =3D 0; i < 2; i++) { + ret =3D bma220_read_reg(spi, BMA220_REG_SOFTRESET); + if (ret < 0) + return ret; =20 - ret =3D bma220_read_reg(spi, BMA220_REG_ID); - if (ret !=3D BMA220_CHIP_ID) - return -ENODEV; + if (up && (ret =3D=3D BMA220_RESET_MODE)) + return 0; =20 - /* Make sure the chip is powered on */ - ret =3D bma220_read_reg(spi, BMA220_REG_SUSPEND); - if (ret =3D=3D BMA220_SUSPEND_WAKE) - ret =3D bma220_read_reg(spi, BMA220_REG_SUSPEND); - if (ret < 0) - return ret; - if (ret =3D=3D BMA220_SUSPEND_WAKE) - return -EBUSY; + if (!up && (ret =3D=3D BMA220_NONRESET_MODE)) + return 0; + } =20 - return 0; + return -EBUSY; } =20 static int bma220_power(struct spi_device *spi, bool up) @@ -244,16 +244,43 @@ static int bma220_power(struct spi_device *spi, bool = up) if (ret < 0) return ret; =20 - if (up && ret =3D=3D BMA220_SUSPEND_SLEEP) + if (up && (ret =3D=3D BMA220_SUSPEND_SLEEP)) return 0; =20 - if (!up && ret =3D=3D BMA220_SUSPEND_WAKE) + if (!up && (ret =3D=3D BMA220_SUSPEND_WAKE)) return 0; } =20 return -EBUSY; } =20 +static int bma220_init(struct spi_device *spi) +{ + int ret; + static const char * const regulator_names[] =3D { "vddd", "vddio", "vdda"= }; + + ret =3D devm_regulator_bulk_get_enable(&spi->dev, + ARRAY_SIZE(regulator_names), + regulator_names); + if (ret) + return dev_err_probe(&spi->dev, ret, "Failed to get regulators\n"); + + ret =3D bma220_read_reg(spi, BMA220_REG_ID); + if (ret !=3D BMA220_CHIP_ID) + return -ENODEV; + + /* Make sure the chip is powered on and config registers are reset */ + ret =3D bma220_power(spi, true); + if (ret) + return dev_err_probe(&spi->dev, ret, "Failed to power-on chip\n"); + + ret =3D bma220_reset(spi, true); + if (ret) + return dev_err_probe(&spi->dev, ret, "Failed to soft reset chip\n"); + + return 0; +} + static void bma220_deinit(void *spi) { bma220_power(spi, false); --=20 2.49.1 From nobody Thu Oct 2 22:40:27 2025 Received: from mail.subdimension.ro (nalicastle.subdimension.ro [172.105.74.154]) (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 6CAE830F7F7; Wed, 10 Sep 2025 07:58:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=172.105.74.154 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491095; cv=none; b=INm3Zwhcj/idtYQO77wTrbfH3RzFGQyxMSKsDE8FQ/uKSZfmCFlD10ANFrCzlnUrn7pPZIqIZQJFRYygyjHSo3ZUutPQ2+aXZECXdXzRjaPmM5Yv0zI+z3mmnhC2LHVKoUotRQE1FsUUhRhXjQnzVxZZYwIV0v0ledmbo7FwOqs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491095; c=relaxed/simple; bh=33OmVTDTil3fSdjFKRtBb9hG5ahtUBANoDGBne1gLwk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tQPiG6odef3/4eTpuz9qfR9SJTI7rqt2MH7yCNT5+6SSLIRTTQNzULm0OI+oXgoyuxEDN9p8wx9FR/W2aAoUqCtClB/KNBeyexkugj/WBH9Rludwspml9YoY1g8ClMaSj1rRcAafak47NACb+PjblZP+nPXbBzWsPW32nG5WmCs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro; spf=pass smtp.mailfrom=subdimension.ro; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b=RZzZM0Bz; arc=none smtp.client-ip=172.105.74.154 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b="RZzZM0Bz" Received: from [10.212.0.13] (unknown [IPv6:2a02:2f0e:3503:4a00:e2d5:5eff:fed9:f1c4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mail.subdimension.ro (Postfix) with ESMTPSA id 9C1CC173BF0; Wed, 10 Sep 2025 10:58:04 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=subdimension.ro; s=mail; t=1757491085; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=r4Pa05WnLC5Ci62ccx10QOQDakxk9m0mEzup+FfOKgo=; b=RZzZM0Bzh4E/F2nisgCLXvU7A2ImNDcOCr84q4PNTpcvq0Qyoyq+oMzxa3Keqt7khZmFkx ZhxxnCRRAQW5WrLOin4Lo352uLcEqTOzZqD1vIVj0YC3cbocf8F/MJrK0CGpcR7MSLoQlz sTvzb/6kHSFR862SEFEfAw3RREExJiTG81jufqQwhshraPi8eWwZYLVjPs5Rd9tCcpP/vO +FYFRZhx+RJ/7/a61UDzW6N0OES1PFLgQD55KeF+V69HoXh44zYKX2DTbHHDAV5Yo21Xi5 XFHj2NSMau73qPqVK3Pi3uTbV3JYsPu8C6t2MXV9uLQ5HFu4dG0iRJEP6u3tEw== From: Petre Rodan Date: Wed, 10 Sep 2025 10:57:13 +0300 Subject: [PATCH v2 08/14] iio: accel: bma220: migrate to regmap API 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: <20250910-bma220_improvements-v2-8-e23f4f2b9745@subdimension.ro> References: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> In-Reply-To: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Jonathan Cameron , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Petre Rodan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=16839; i=petre.rodan@subdimension.ro; h=from:subject:message-id; bh=33OmVTDTil3fSdjFKRtBb9hG5ahtUBANoDGBne1gLwk=; b=owEBbQKS/ZANAwAIAc8mmZmETn8wAcsmYgBowS+HQdvNCuIsw/S7tdqP3T+daUTN6p26SThxj vs7NxzCUn6JAjMEAAEIAB0WIQTYCn/BdhUZNew+X6nPJpmZhE5/MAUCaMEvhwAKCRDPJpmZhE5/ MNWVD/49BKZoXUZ+0c8GelVqB2HNDCHGxJKzK2mOATC8Xqvys42YsQzUPSkMEqwgAqutJJrIFG8 7d7DaW8wfM1DW4ppuGTdGxUsfBxMo4jV+e+esXdYLmXQecuJLu86G+IIy28oC1M+27yh7s2RCQ1 fUGx443zpXnAFKOo+SE8mnSsWm6clsbKwzHrBdgEUuRn5jl8HxWJWb/QeY+QIwa3uRR4ya5e9dS YX2D7tcDrIionx9RMmxFvyp/w2LkrDOKEC0d2cirzK2UfVn0HtKP2TAegNg22SGpq+AfKZTAlEe arn5P2Dw0PdXYor352+CvTjDdHquejnw8LW1x9qYPXNfq9Kt1TyC8zhpCtgzZhRcofmvrdIjAZa O/l9HmwhREmDzPUkpAEkI36P8+5id95TJ+iJWvyugKLMND52Dh9fI2cvpEGxaeNgruuj/HHeS94 HPM2wMAXBqbX4+SB0aHOgt2NTitcj9LGl66+BisMpkvFqr2L70AMBYWVsWXv0SrySBM8jou0SMQ snsjzwbxOiKoanD8pVdddvTryJfK0AJIQ8Y8TWyRTfpCtSJEoZae+cXhsvmd4rt3XwoQI6+4TJb mBINtKptbmBqFJBDGVpuQY+g2rIzphJOx6XM/I6AzI9/Hr+V3d9UKaRlNisYZmnIb0x408bxZ3r LtIzBoK1qfyLcxw== X-Developer-Key: i=petre.rodan@subdimension.ro; a=openpgp; fpr=D80A7FC176151935EC3E5FA9CF269999844E7F30 Switch to regmap API. Signed-off-by: Petre Rodan --- ChangeLog: - cleanup patch by splitting out unrelated changes --- drivers/iio/accel/Kconfig | 2 + drivers/iio/accel/bma220.h | 6 +- drivers/iio/accel/bma220_core.c | 266 ++++++++++++++++++++++++++++--------= ---- drivers/iio/accel/bma220_spi.c | 10 +- 4 files changed, 200 insertions(+), 84 deletions(-) diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig index 2cc3075e26883df60b5068c73b0551e1dd02c32e..9b6c35b759481df5ff3c91856f8= 783357d25de80 100644 --- a/drivers/iio/accel/Kconfig +++ b/drivers/iio/accel/Kconfig @@ -218,6 +218,7 @@ config BMA180 =20 config BMA220 tristate "Bosch BMA220 3-Axis Accelerometer Driver" + select REGMAP select IIO_BUFFER select IIO_TRIGGERED_BUFFER select BMA220_SPI if SPI @@ -231,6 +232,7 @@ config BMA220 =20 config BMA220_SPI tristate + select REGMAP_SPI depends on BMA220 =20 config BMA400 diff --git a/drivers/iio/accel/bma220.h b/drivers/iio/accel/bma220.h index eb311183ebfe37d1a75d858d435eac777efc4ed8..f9f4fa3daf33665f07f8bf07346= 8dff070b46d74 100644 --- a/drivers/iio/accel/bma220.h +++ b/drivers/iio/accel/bma220.h @@ -9,11 +9,11 @@ #define _BMA220_H =20 #include -#include +#include =20 +extern const struct regmap_config bma220_spi_regmap_config; extern const struct dev_pm_ops bma220_pm_ops; -struct spi_device; =20 -int bma220_common_probe(struct spi_device *dev); +int bma220_common_probe(struct device *dev, struct regmap *regmap, int irq= ); =20 #endif diff --git a/drivers/iio/accel/bma220_core.c b/drivers/iio/accel/bma220_cor= e.c index 322df516c90a7c645eeca579cae9803eb31caad1..4d8b65ea737a2d5fe74f98da13a= 582a80874a5af 100644 --- a/drivers/iio/accel/bma220_core.c +++ b/drivers/iio/accel/bma220_core.c @@ -3,17 +3,21 @@ * BMA220 Digital triaxial acceleration sensor driver * * Copyright (c) 2016,2020 Intel Corporation. + * Copyright (c) 2025 Petre Rodan */ =20 #include +#include +#include +#include #include #include #include #include #include +#include #include #include -#include =20 #include #include @@ -24,16 +28,64 @@ #include "bma220.h" =20 #define BMA220_REG_ID 0x00 +#define BMA220_REG_REVISION_ID 0x01 #define BMA220_REG_ACCEL_X 0x02 #define BMA220_REG_ACCEL_Y 0x03 #define BMA220_REG_ACCEL_Z 0x04 +#define BMA220_REG_CONF0 0x05 +#define BMA220_HIGH_DUR_MSK GENMASK(5, 0) +#define BMA220_HIGH_HY_MSK GENMASK(7, 6) +#define BMA220_REG_CONF1 0x06 +#define BMA220_HIGH_TH_MSK GENMASK(3, 0) +#define BMA220_LOW_TH_MSK GENMASK(7, 4) +#define BMA220_REG_CONF2 0x07 +#define BMA220_LOW_DUR_MSK GENMASK(5, 0) +#define BMA220_LOW_HY_MSK GENMASK(7, 6) +#define BMA220_REG_CONF3 0x08 +#define BMA220_TT_DUR_MSK GENMASK(2, 0) +#define BMA220_TT_TH_MSK GENMASK(6, 3) +#define BMA220_REG_CONF4 0x09 +#define BMA220_SLOPE_DUR_MSK GENMASK(1, 0) +#define BMA220_SLOPE_TH_MSK GENMASK(5, 2) +#define BMA220_REG_CONF5 0x0a +#define BMA220_TIP_EN_MSK BIT(4) +#define BMA220_REG_IF0 0x0b +#define BMA220_REG_IF1 0x0c +#define BMA220_IF_SLOPE BIT(0) +#define BMA220_IF_DRDY BIT(1) +#define BMA220_IF_HIGH BIT(2) +#define BMA220_IF_LOW BIT(3) +#define BMA220_IF_TT BIT(4) +#define BMA220_REG_IE0 0x0d +#define BMA220_INT_EN_TAP_Z_MSK BIT(0) +#define BMA220_INT_EN_TAP_Y_MSK BIT(1) +#define BMA220_INT_EN_TAP_X_MSK BIT(2) +#define BMA220_INT_EN_SLOPE_Z_MSK BIT(3) +#define BMA220_INT_EN_SLOPE_Y_MSK BIT(4) +#define BMA220_INT_EN_SLOPE_X_MSK BIT(5) +#define BMA220_INT_EN_DRDY_MSK BIT(7) +#define BMA220_REG_IE1 0x0e +#define BMA220_INT_EN_HIGH_Z_MSK BIT(0) +#define BMA220_INT_EN_HIGH_Y_MSK BIT(1) +#define BMA220_INT_EN_HIGH_X_MSK BIT(2) +#define BMA220_INT_EN_LOW_MSK BIT(3) +#define BMA220_INT_LATCH_MSK GENMASK(6, 4) +#define BMA220_INT_LATCH_MAX 0x7 +#define BMA220_INT_RST_MSK BIT(7) +#define BMA220_REG_IE2 0x0f +#define BMA220_REG_FILTER 0x10 +#define BMA220_FILTER_MASK GENMASK(3, 0) #define BMA220_REG_RANGE 0x11 +#define BMA220_RANGE_MASK GENMASK(1, 0) +#define BMA220_REG_WDT 0x17 +#define BMA220_WDT_MASK GENMASK(2, 1) +#define BMA220_WDT_OFF 0x0 +#define BMA220_WDT_1MS BIT(1) +#define BMA220_WDT_10MS GENMASK(1, 0) #define BMA220_REG_SUSPEND 0x18 #define BMA220_REG_SOFTRESET 0x19 =20 #define BMA220_CHIP_ID 0xDD -#define BMA220_READ_MASK BIT(7) -#define BMA220_RANGE_MASK GENMASK(1, 0) #define BMA220_SUSPEND_SLEEP 0xFF #define BMA220_SUSPEND_WAKE 0x00 #define BMA220_RESET_MODE 0xFF @@ -69,14 +121,15 @@ static const int bma220_scale_table[][2] =3D { }; =20 struct bma220_data { - struct spi_device *spi_device; + struct device *dev; + struct regmap *regmap; struct mutex lock; + u8 range_idx; struct { s8 chans[3]; /* Ensure timestamp is naturally aligned. */ aligned_s64 timestamp; - } scan; - u8 tx_buf[2] __aligned(IIO_DMA_MINALIGN); + } scan __aligned(IIO_DMA_MINALIGN); }; =20 static const struct iio_chan_spec bma220_channels[] =3D { @@ -86,35 +139,57 @@ static const struct iio_chan_spec bma220_channels[] = =3D { IIO_CHAN_SOFT_TIMESTAMP(3), }; =20 -static inline int bma220_read_reg(struct spi_device *spi, u8 reg) -{ - return spi_w8r8(spi, reg | BMA220_READ_MASK); -} - static const unsigned long bma220_accel_scan_masks[] =3D { BIT(AXIS_X) | BIT(AXIS_Y) | BIT(AXIS_Z), 0 }; =20 +static bool bma220_is_writable_reg(struct device *dev, unsigned int reg) +{ + switch (reg) { + case BMA220_REG_CONF0: + case BMA220_REG_CONF1: + case BMA220_REG_CONF2: + case BMA220_REG_CONF3: + case BMA220_REG_CONF4: + case BMA220_REG_CONF5: + case BMA220_REG_IE0: + case BMA220_REG_IE1: + case BMA220_REG_IE2: + case BMA220_REG_FILTER: + case BMA220_REG_RANGE: + case BMA220_REG_WDT: + return true; + default: + return false; + } +} + +const struct regmap_config bma220_spi_regmap_config =3D { + .reg_bits =3D 8, + .val_bits =3D 8, + .read_flag_mask =3D BIT(7), + .max_register =3D BMA220_REG_SOFTRESET, + .cache_type =3D REGCACHE_NONE, + .writeable_reg =3D bma220_is_writable_reg, +}; +EXPORT_SYMBOL_NS_GPL(bma220_spi_regmap_config, "IIO_BOSCH_BMA220"); + static irqreturn_t bma220_trigger_handler(int irq, void *p) { int ret; struct iio_poll_func *pf =3D p; struct iio_dev *indio_dev =3D pf->indio_dev; struct bma220_data *data =3D iio_priv(indio_dev); - struct spi_device *spi =3D data->spi_device; =20 - mutex_lock(&data->lock); - data->tx_buf[0] =3D BMA220_REG_ACCEL_X | BMA220_READ_MASK; - ret =3D spi_write_then_read(spi, data->tx_buf, 1, &data->scan.chans, - ARRAY_SIZE(bma220_channels) - 1); + ret =3D regmap_bulk_read(data->regmap, BMA220_REG_ACCEL_X, + &data->scan.chans, + sizeof(data->scan.chans)); if (ret < 0) - goto err; + return IRQ_NONE; =20 iio_push_to_buffers_with_ts(indio_dev, &data->scan, sizeof(data->scan), - pf->timestamp); -err: - mutex_unlock(&data->lock); + iio_get_time_ns(indio_dev)); iio_trigger_notify_done(indio_dev->trig); =20 return IRQ_HANDLED; @@ -125,58 +200,65 @@ static int bma220_read_raw(struct iio_dev *indio_dev, int *val, int *val2, long mask) { int ret; - u8 range_idx; + u8 index; + unsigned int reg; struct bma220_data *data =3D iio_priv(indio_dev); =20 switch (mask) { case IIO_CHAN_INFO_RAW: - ret =3D bma220_read_reg(data->spi_device, chan->address); + ret =3D regmap_read(data->regmap, chan->address, ®); if (ret < 0) return -EINVAL; - *val =3D sign_extend32(ret >> chan->scan_type.shift, + *val =3D sign_extend32(reg >> chan->scan_type.shift, chan->scan_type.realbits - 1); return IIO_VAL_INT; case IIO_CHAN_INFO_SCALE: - ret =3D bma220_read_reg(data->spi_device, BMA220_REG_RANGE); - if (ret < 0) - return ret; - range_idx =3D ret & BMA220_RANGE_MASK; - *val =3D bma220_scale_table[range_idx][0]; - *val2 =3D bma220_scale_table[range_idx][1]; + index =3D data->range_idx; + *val =3D bma220_scale_table[index][0]; + *val2 =3D bma220_scale_table[index][1]; return IIO_VAL_INT_PLUS_MICRO; } =20 return -EINVAL; } =20 +static int bma220_find_match_2dt(const int (*tbl)[2], const int n, + const int val, const int val2) +{ + int i; + + for (i =3D 0; i < n; i++) { + if (tbl[i][0] =3D=3D val && tbl[i][1] =3D=3D val2) + return i; + } + + return -EINVAL; +} + static int bma220_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int val, int val2, long mask) { - int i; int ret; int index =3D -1; struct bma220_data *data =3D iio_priv(indio_dev); =20 + guard(mutex)(&data->lock); + switch (mask) { case IIO_CHAN_INFO_SCALE: - for (i =3D 0; i < ARRAY_SIZE(bma220_scale_table); i++) - if (val =3D=3D bma220_scale_table[i][0] && - val2 =3D=3D bma220_scale_table[i][1]) { - index =3D i; - break; - } + index =3D bma220_find_match_2dt(bma220_scale_table, + ARRAY_SIZE(bma220_scale_table), + val, val2); if (index < 0) return -EINVAL; =20 - mutex_lock(&data->lock); - data->tx_buf[0] =3D BMA220_REG_RANGE; - data->tx_buf[1] =3D index; - ret =3D spi_write(data->spi_device, data->tx_buf, - sizeof(data->tx_buf)); + ret =3D regmap_update_bits(data->regmap, BMA220_REG_RANGE, + BMA220_RANGE_MASK, + FIELD_PREP(BMA220_RANGE_MASK, index)); if (ret < 0) return ret; - mutex_unlock(&data->lock); + data->range_idx =3D index; =20 return 0; } @@ -206,9 +288,12 @@ static const struct iio_info bma220_info =3D { .read_avail =3D bma220_read_avail, }; =20 -static int bma220_reset(struct spi_device *spi, bool up) +static int bma220_reset(struct bma220_data *data, bool up) { int i, ret; + unsigned int val; + + guard(mutex)(&data->lock); =20 /** * The chip can be reset by a simple register read. @@ -216,89 +301,113 @@ static int bma220_reset(struct spi_device *spi, bool= up) * to make sure that the device is in the desired state. */ for (i =3D 0; i < 2; i++) { - ret =3D bma220_read_reg(spi, BMA220_REG_SOFTRESET); + ret =3D regmap_read(data->regmap, BMA220_REG_SOFTRESET, &val); if (ret < 0) return ret; =20 - if (up && (ret =3D=3D BMA220_RESET_MODE)) + if (up && (val =3D=3D BMA220_RESET_MODE)) return 0; =20 - if (!up && (ret =3D=3D BMA220_NONRESET_MODE)) + if (!up && (val =3D=3D BMA220_NONRESET_MODE)) return 0; } =20 return -EBUSY; } =20 -static int bma220_power(struct spi_device *spi, bool up) +static int bma220_power(struct bma220_data *data, bool up) { int i, ret; + unsigned int val; =20 + guard(mutex)(&data->lock); /** * The chip can be suspended/woken up by a simple register read. * So, we need up to 2 register reads of the suspend register * to make sure that the device is in the desired state. */ for (i =3D 0; i < 2; i++) { - ret =3D bma220_read_reg(spi, BMA220_REG_SUSPEND); + ret =3D regmap_read(data->regmap, BMA220_REG_SUSPEND, &val); if (ret < 0) return ret; =20 - if (up && (ret =3D=3D BMA220_SUSPEND_SLEEP)) + if (up && (val =3D=3D BMA220_SUSPEND_SLEEP)) return 0; =20 - if (!up && (ret =3D=3D BMA220_SUSPEND_WAKE)) + if (!up && (val =3D=3D BMA220_SUSPEND_WAKE)) return 0; } =20 return -EBUSY; } =20 -static int bma220_init(struct spi_device *spi) + +static int bma220_init(struct bma220_data *data) { int ret; + unsigned int val; + struct device *dev =3D data->dev; static const char * const regulator_names[] =3D { "vddd", "vddio", "vdda"= }; =20 - ret =3D devm_regulator_bulk_get_enable(&spi->dev, + ret =3D devm_regulator_bulk_get_enable(dev, ARRAY_SIZE(regulator_names), regulator_names); if (ret) - return dev_err_probe(&spi->dev, ret, "Failed to get regulators\n"); + return dev_err_probe(dev, ret, "Failed to get regulators\n"); =20 - ret =3D bma220_read_reg(spi, BMA220_REG_ID); - if (ret !=3D BMA220_CHIP_ID) + /* Try to read chip_id register. It must return 0xdd. */ + ret =3D regmap_read(data->regmap, BMA220_REG_ID, &val); + if (ret) + return dev_err_probe(dev, ret, + "Failed to read chip id register\n"); + + if (val !=3D BMA220_CHIP_ID) return -ENODEV; =20 - /* Make sure the chip is powered on and config registers are reset */ - ret =3D bma220_power(spi, true); + ret =3D bma220_power(data, true); if (ret) - return dev_err_probe(&spi->dev, ret, "Failed to power-on chip\n"); + return dev_err_probe(dev, ret, "Failed to power-on chip\n"); =20 - ret =3D bma220_reset(spi, true); + ret =3D bma220_reset(data, true); if (ret) - return dev_err_probe(&spi->dev, ret, "Failed to soft reset chip\n"); + return dev_err_probe(dev, ret, "Failed to soft reset chip\n"); =20 return 0; } =20 -static void bma220_deinit(void *spi) +static void bma220_deinit(void *data_ptr) { - bma220_power(spi, false); + struct bma220_data *data =3D data_ptr; + int ret; + + ret =3D bma220_power(data, false); + if (ret) + dev_warn(data->dev, + "Failed to put device into suspend mode (%pe)\n", + ERR_PTR(ret)); } =20 -int bma220_common_probe(struct spi_device *spi) +int bma220_common_probe(struct device *dev, struct regmap *regmap, int irq) { int ret; struct iio_dev *indio_dev; struct bma220_data *data; =20 - indio_dev =3D devm_iio_device_alloc(&spi->dev, sizeof(*data)); + indio_dev =3D devm_iio_device_alloc(dev, sizeof(*data)); if (!indio_dev) return -ENOMEM; =20 data =3D iio_priv(indio_dev); - data->spi_device =3D spi; - mutex_init(&data->lock); + data->regmap =3D regmap; + data->dev =3D dev; + + ret =3D bma220_init(data); + if (ret) + return ret; + + ret =3D devm_mutex_init(dev, &data->lock); + if (ret) + return ret; =20 indio_dev->info =3D &bma220_info; indio_dev->name =3D BMA220_DEVICE_NAME; @@ -307,38 +416,35 @@ int bma220_common_probe(struct spi_device *spi) indio_dev->num_channels =3D ARRAY_SIZE(bma220_channels); indio_dev->available_scan_masks =3D bma220_accel_scan_masks; =20 - ret =3D bma220_init(data->spi_device); + ret =3D devm_add_action_or_reset(dev, bma220_deinit, data); if (ret) return ret; =20 - ret =3D devm_add_action_or_reset(&spi->dev, bma220_deinit, spi); - if (ret) - return ret; - - ret =3D devm_iio_triggered_buffer_setup(&spi->dev, indio_dev, - iio_pollfunc_store_time, + ret =3D devm_iio_triggered_buffer_setup(dev, indio_dev, NULL, bma220_trigger_handler, NULL); if (ret < 0) { - dev_err(&spi->dev, "iio triggered buffer setup failed\n"); + dev_err(dev, "iio triggered buffer setup failed\n"); return ret; } =20 - return devm_iio_device_register(&spi->dev, indio_dev); + return devm_iio_device_register(dev, indio_dev); } -EXPORT_SYMBOL_NS(bma220_common_probe, "IIO_BOSCH_BMA220"); +EXPORT_SYMBOL_NS_GPL(bma220_common_probe, "IIO_BOSCH_BMA220"); =20 static int bma220_suspend(struct device *dev) { - struct spi_device *spi =3D to_spi_device(dev); + struct iio_dev *indio_dev =3D dev_get_drvdata(dev); + struct bma220_data *data =3D iio_priv(indio_dev); =20 - return bma220_power(spi, false); + return bma220_power(data, false); } =20 static int bma220_resume(struct device *dev) { - struct spi_device *spi =3D to_spi_device(dev); + struct iio_dev *indio_dev =3D dev_get_drvdata(dev); + struct bma220_data *data =3D iio_priv(indio_dev); =20 - return bma220_power(spi, true); + return bma220_power(data, true); } EXPORT_NS_SIMPLE_DEV_PM_OPS(bma220_pm_ops, bma220_suspend, bma220_resume, IIO_BOSCH_BMA220); diff --git a/drivers/iio/accel/bma220_spi.c b/drivers/iio/accel/bma220_spi.c index 78820d90e39119d9755b6266a8329e11ffd55723..7364428b3e363950d3be2a03b76= 57a2f0315fc5b 100644 --- a/drivers/iio/accel/bma220_spi.c +++ b/drivers/iio/accel/bma220_spi.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include =20 @@ -18,7 +19,14 @@ =20 static int bma220_spi_probe(struct spi_device *spi) { - return bma220_common_probe(spi); + struct regmap *regmap; + + regmap =3D devm_regmap_init_spi(spi, &bma220_spi_regmap_config); + if (IS_ERR(regmap)) + return dev_err_probe(&spi->dev, PTR_ERR(regmap), + "failed to create regmap\n"); + + return bma220_common_probe(&spi->dev, regmap, spi->irq); } =20 static const struct spi_device_id bma220_spi_id[] =3D { --=20 2.49.1 From nobody Thu Oct 2 22:40:27 2025 Received: from mail.subdimension.ro (nalicastle.subdimension.ro [172.105.74.154]) (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 8046E30F800; Wed, 10 Sep 2025 07:58:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=172.105.74.154 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491094; cv=none; b=lnRbY+oS/6YhxcrmNaHlXl5lU5YYocOyBGt5PX+urshUyiOmsqAdj3IUocUWYNDsc7f+fBqAm9c3VQN0Yhz6JkvDrlO+ykPDOnyB3dThg0wxWF8qCjBv4qGkM6T9PBiv3jEC4P6T9GVwQXX9l4D/YkPe2yuAUE/Pd0Vbl+NXn4I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491094; c=relaxed/simple; bh=RTZw4uDnll1cZJo23ly7UvXXjnqrpFWaLvHw980X6B4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XMBXR6h5HBqu6BMoOdgNuH/sM+15sJeLHh1lsp/zNpVEpEgY6MRuNIEpWOuPeq88d2clXf8s64bRuEkyFBmYNir1RBo7nSKBZAuNuOdaJKYLLZzXNQfWTdl57RTMKHRRFgFnKGBULFpti1oz7MMHBwud3q7aRpONihwUscTK2j8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro; spf=pass smtp.mailfrom=subdimension.ro; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b=53JYks8t; arc=none smtp.client-ip=172.105.74.154 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b="53JYks8t" Received: from [10.212.0.13] (unknown [IPv6:2a02:2f0e:3503:4a00:e2d5:5eff:fed9:f1c4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mail.subdimension.ro (Postfix) with ESMTPSA id 2378F173BF1; Wed, 10 Sep 2025 10:58:05 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=subdimension.ro; s=mail; t=1757491085; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=hux/M/0FgLpbyrxaPAKanHcmyeYQoBgJs8k97/CVXwM=; b=53JYks8t0+deSdSZhFtm/LY8Y/qgMuekQ7+BKcwRDoWUOmzULDC2djmKkiI3Hff5RQmwt2 jjUI3OppNNJGb3xCyqE3vhGYzAqe7neyKA1Wef42wzylXfRKZq6iGDxIaIdzdlan7aMBP/ FTMnsoZ70CK+HZYibvFp+Xe6c/SVVhGu0JLeerkTJuQLB3UanAf+p3TJ+yIHL6UKvuNcfN omE5GgmUxIhuOVP6GSbi1brWBTmw6Yi0bySS0KkTfwIBiTKvEb0osdi/hT6F4saedZhWi2 9CDhNXfiLci446io8NYqXNHw+kC6hPS3RGZTqdyX/bomh43bqE4AZ4j91L0P1w== From: Petre Rodan Date: Wed, 10 Sep 2025 10:57:14 +0300 Subject: [PATCH v2 09/14] iio: accel: bma220: add i2c module 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: <20250910-bma220_improvements-v2-9-e23f4f2b9745@subdimension.ro> References: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> In-Reply-To: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Jonathan Cameron , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Petre Rodan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5661; i=petre.rodan@subdimension.ro; h=from:subject:message-id; bh=RTZw4uDnll1cZJo23ly7UvXXjnqrpFWaLvHw980X6B4=; b=owEBbQKS/ZANAwAIAc8mmZmETn8wAcsmYgBowS+Hw8rlEeIDTwdyHE4qi5gTZmyv1TaFC3nDd TeIJl2Ncb2JAjMEAAEIAB0WIQTYCn/BdhUZNew+X6nPJpmZhE5/MAUCaMEvhwAKCRDPJpmZhE5/ MCYJEAC6Qy2lhMqXyUOmErnn+myXgdYx3+/Kcz5t8yiarQ4LC1+oTkOzYlmqOsSdGjh1Ol+tdRS W2amQ2AzEBAbA3RQSCKVL5cu2VUjGT3re/Md2XkQOVWgXUJSQFBC3FtAeQAR6G9rvkz4l2IYFPX kHn2kar7vMxRfdg7JdnGXyuUs1H7G/KuNr8v8vwdEzSuk2K1ERSGzizVyy/fF2fbjVpDx2xllXp wuK0gQ40How26Hp1iS7B6HaA/MG+NOnZuylfarZpgF1BO7aod0umVPbInlnJcGPhB9MYjKTcURi lx/4tM9HqSJHA56aXYnYubVVLBPK/UJ/BBzlB8PDwJzmY57SkzSVxsh2xXFjhw6xxXMe9E2rO29 HOrany/ASNyX6jOJkm6rsLGKlkIUbN4JesMWgqD/UJ4rFO/KbRDg0+7cQMB6UKGVB7DSgVCx3KQ 6HIZH/JrYMGj0e70wFYlGJkOFwuHJ/YG8SCisfPzquC+UeNy3GltFekoTr9z7617doov3YxK9km xqqMwGU/lHuBwh0NmzKCqBYm3XKIEIngAiHy+ca9FZS80Lp+tCPzumvgG8+UkQC0xwe/f6NhgtO z3+prBH2gQoyC/TNqNmUrOvkPB0kRaowvg0eEFwWQcSeldT+qv8zkqGpN5lMztIAFZG0JTBYF8V B7YhOkh1NrkKYRA== X-Developer-Key: i=petre.rodan@subdimension.ro; a=openpgp; fpr=D80A7FC176151935EC3E5FA9CF269999844E7F30 Add the bma220_i2c module. Note that this kernel module transparently shifts all register addresses 1 bit to the left, so all functions will operate based on the SPI memory map. Signed-off-by: Petre Rodan --- no change --- drivers/iio/accel/Kconfig | 9 +++++- drivers/iio/accel/Makefile | 1 + drivers/iio/accel/bma220.h | 1 + drivers/iio/accel/bma220_core.c | 18 ++++++++++++ drivers/iio/accel/bma220_i2c.c | 61 +++++++++++++++++++++++++++++++++++++= ++++ 5 files changed, 89 insertions(+), 1 deletion(-) diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig index 9b6c35b759481df5ff3c91856f8783357d25de80..b3c5b0b7a406ec0cec531a122af= 424cb8ec57703 100644 --- a/drivers/iio/accel/Kconfig +++ b/drivers/iio/accel/Kconfig @@ -221,6 +221,7 @@ config BMA220 select REGMAP select IIO_BUFFER select IIO_TRIGGERED_BUFFER + select BMA220_I2C if I2C select BMA220_SPI if SPI help Say yes here to add support for the Bosch BMA220 triaxial @@ -228,7 +229,13 @@ config BMA220 =20 To compile this driver as a module, choose M here: the module will be called bma220_core and you will also get - bma220_spi if SPI is enabled. + bma220_i2c if I2C is enabled and bma220_spi if SPI is + enabled. + +config BMA220_I2C + tristate + select REGMAP_I2C + depends on BMA220 =20 config BMA220_SPI tristate diff --git a/drivers/iio/accel/Makefile b/drivers/iio/accel/Makefile index 56a9f848f7f913633bc2a628c1ac5c9190774b9d..fa440a85928398fee927081f605= 595ba9fbc4ad9 100644 --- a/drivers/iio/accel/Makefile +++ b/drivers/iio/accel/Makefile @@ -26,6 +26,7 @@ obj-$(CONFIG_ADXL380_I2C) +=3D adxl380_i2c.o obj-$(CONFIG_ADXL380_SPI) +=3D adxl380_spi.o obj-$(CONFIG_BMA180) +=3D bma180.o obj-$(CONFIG_BMA220) +=3D bma220_core.o +obj-$(CONFIG_BMA220_I2C) +=3D bma220_i2c.o obj-$(CONFIG_BMA220_SPI) +=3D bma220_spi.o obj-$(CONFIG_BMA400) +=3D bma400_core.o obj-$(CONFIG_BMA400_I2C) +=3D bma400_i2c.o diff --git a/drivers/iio/accel/bma220.h b/drivers/iio/accel/bma220.h index f9f4fa3daf33665f07f8bf073468dff070b46d74..384557d10d5613b7d829c6666f3= da06de219277a 100644 --- a/drivers/iio/accel/bma220.h +++ b/drivers/iio/accel/bma220.h @@ -12,6 +12,7 @@ #include =20 extern const struct regmap_config bma220_spi_regmap_config; +extern const struct regmap_config bma220_i2c_regmap_config; extern const struct dev_pm_ops bma220_pm_ops; =20 int bma220_common_probe(struct device *dev, struct regmap *regmap, int irq= ); diff --git a/drivers/iio/accel/bma220_core.c b/drivers/iio/accel/bma220_cor= e.c index 4d8b65ea737a2d5fe74f98da13a582a80874a5af..191074d8618ea2638f69283781b= 8677921876681 100644 --- a/drivers/iio/accel/bma220_core.c +++ b/drivers/iio/accel/bma220_core.c @@ -175,6 +175,24 @@ const struct regmap_config bma220_spi_regmap_config = =3D { }; EXPORT_SYMBOL_NS_GPL(bma220_spi_regmap_config, "IIO_BOSCH_BMA220"); =20 +/* + * Based on the datasheet the memory map differs between the SPI and the I= 2C + * implementations. I2C register addresses are simply shifted to the left + * by 1 bit yet the register size remains unchanged. + * This driver employs the SPI memory map to correlate register names to + * addresses regardless of the bus type. + */ + +const struct regmap_config bma220_i2c_regmap_config =3D { + .reg_bits =3D 8, + .val_bits =3D 8, + .reg_shift =3D -1, + .max_register =3D BMA220_REG_SOFTRESET, + .cache_type =3D REGCACHE_NONE, + .writeable_reg =3D bma220_is_writable_reg, +}; +EXPORT_SYMBOL_NS_GPL(bma220_i2c_regmap_config, "IIO_BOSCH_BMA220"); + static irqreturn_t bma220_trigger_handler(int irq, void *p) { int ret; diff --git a/drivers/iio/accel/bma220_i2c.c b/drivers/iio/accel/bma220_i2c.c new file mode 100644 index 0000000000000000000000000000000000000000..2b63949ea64ee11421e76a2e7c8= 68a922d1f9a12 --- /dev/null +++ b/drivers/iio/accel/bma220_i2c.c @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Bosch triaxial acceleration sensor + * + * Copyright (c) 2025 Petre Rodan + * + * Datasheet: https://media.digikey.com/pdf/Data%20Sheets/Bosch/BMA220.pdf + * I2C address is either 0x0b or 0x0a depending on CSB (pin 10) + */ + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "bma220.h" + +static int bma220_i2c_probe(struct i2c_client *client) +{ + struct regmap *regmap; + + regmap =3D devm_regmap_init_i2c(client, &bma220_i2c_regmap_config); + if (IS_ERR(regmap)) + return dev_err_probe(&client->dev, PTR_ERR(regmap), + "failed to create regmap\n"); + + return bma220_common_probe(&client->dev, regmap, client->irq); +} + +static const struct of_device_id bma220_i2c_match[] =3D { + { .compatible =3D "bosch,bma220" }, + { } +}; +MODULE_DEVICE_TABLE(of, bma220_i2c_match); + +static const struct i2c_device_id bma220_i2c_id[] =3D { + { "bma220" }, + { } +}; +MODULE_DEVICE_TABLE(i2c, bma220_i2c_id); + +static struct i2c_driver bma220_i2c_driver =3D { + .driver =3D { + .name =3D "bma220_i2c", + .pm =3D pm_sleep_ptr(&bma220_pm_ops), + .of_match_table =3D bma220_i2c_match, + }, + .probe =3D bma220_i2c_probe, + .id_table =3D bma220_i2c_id, +}; +module_i2c_driver(bma220_i2c_driver); + +MODULE_AUTHOR("Petre Rodan "); +MODULE_DESCRIPTION("Bosch triaxial acceleration sensor i2c driver"); +MODULE_LICENSE("GPL"); +MODULE_IMPORT_NS("IIO_BOSCH_BMA220"); --=20 2.49.1 From nobody Thu Oct 2 22:40:27 2025 Received: from mail.subdimension.ro (nalicastle.subdimension.ro [172.105.74.154]) (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 3A98C30F924; Wed, 10 Sep 2025 07:58:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=172.105.74.154 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491095; cv=none; b=Q7dOF7BsyAtRv8aQAgpoMAB/bmt768S0JK/ptD+2QfcPQyT6JE1VdbOmwHiERX32rx5MI0uIMkAh2Ho/k3z6tAYk9v4agZFgJed+OFfh+FCa1a12WM44LODpewGXoyBZ6cGlVFAq8yUt6MtTbxeEs3TmGenlN7Qwp1jzU/G2kOU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491095; c=relaxed/simple; bh=GfiWXyX7LPifOUfYn9+ZkSeq0DR2UY+Z/0jCplTp0Pk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MA8EGtRP847JyYOFCmxCU3GvNJ9j6b5LBzJ7K/pR1oYjT012TyrLE8TRYt+pNFZQn09jLNVkO6z2KxraAnczFM5ggpNIZ1n80PWlvc0LMvq6Tv4hYuBvK2amQTtAJCfEhCzmu+EytSvQHt0AVviwMdQMYBspWBk2DOt7TrqDkfc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro; spf=pass smtp.mailfrom=subdimension.ro; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b=NL14pc/X; arc=none smtp.client-ip=172.105.74.154 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b="NL14pc/X" Received: from [10.212.0.13] (unknown [IPv6:2a02:2f0e:3503:4a00:e2d5:5eff:fed9:f1c4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mail.subdimension.ro (Postfix) with ESMTPSA id B621C173BF2; Wed, 10 Sep 2025 10:58:05 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=subdimension.ro; s=mail; t=1757491086; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=u8p82y0f5BUKpqRAfpnZdMPA1+ijprn7JFqFj01MehI=; b=NL14pc/XUxhLQU+CpvyA7+EVpsKWGUcZabNboFPz9iOv1GeTCdrfs9YUbsOJ5YOGk8oLEa Qi/HXgsfRSXNnCwCEpkrl8HNmPvALUqvJ+c7fmhs4eHuBwUOHOLlz9fXaDCn93XYIQV15v LWYj7lnPb+C6G5qF4SGFS01nIiLflC2Pvpy1Cq2E+7EGRNjrO9OKqaczx+te+3eB5sDkl+ 6w44HM0i/vxxLh2YeffaxaUZ8VnaDFkqkayRPfaWgVFasnzNyFlbcqRjof+Nd3J+wM7Xol SjsajWxQ9AfRCViCQXGGEdv7j5SdtVSNq4olfjyoZsz2R2Z6P0nzXzxjGkBqrg== From: Petre Rodan Date: Wed, 10 Sep 2025 10:57:15 +0300 Subject: [PATCH v2 10/14] iio: accel: bma220: add i2c watchdog feature 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: <20250910-bma220_improvements-v2-10-e23f4f2b9745@subdimension.ro> References: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> In-Reply-To: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Jonathan Cameron , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Petre Rodan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1734; i=petre.rodan@subdimension.ro; h=from:subject:message-id; bh=GfiWXyX7LPifOUfYn9+ZkSeq0DR2UY+Z/0jCplTp0Pk=; b=kA0DAAgBzyaZmYROfzAByyZiAGjBL4egSduQZnS2wnOn7+U3gLWpmiYM7eN8AGlx82rY/aESi okCMwQAAQgAHRYhBNgKf8F2FRk17D5fqc8mmZmETn8wBQJowS+HAAoJEM8mmZmETn8wYF4QAIeE v0wJrqFF8kM9NdHaEmHKGr2jXK0LnmM+2yjJ8yREzHwNowPEdkT1wD49xv8K2S8qSzQ6rxqa2ua SpFK2/XPxhm5lY3z0A2yjfwoPe8oWTKXcEkyZf4rhiCro/RSIQ0be3g0IE3ksod+0FXphkD9V5u 2sfKfQA8codPtRPYcsjsCJpeC54f1XVuzNqynoEuWS3C2Zc3SfTtdKusnwViVg8kUkuwyXkfg31 xDyHOefNUPqkb9/vtd/U3cB1pwkep7LdPWxvQrk7a4b+IS/rpDgG7r39Ju07dZWjpbAAA9jaIJF ZJvoZO5/BPFRUIf8d/WhzXJ6LE3bgaY+AgWJJhSTVwwkt6nut+5CqpWfcNvn3OaIaa+YAWvwRCu UbD+Q7bITQGWN5apbjDuweply+wnrvYW7VCKJREk234rKL5nyKrp5e9gNHv8jbBM/tLolabYWn3 Kxqal8RUW5dvkXNJHgF441uiA7V812rpRD95vY+NlmT3e47Tcvm1CJYWUDm6RUhjlve1IuJp7A6 +RYKwthHzfgiKvbfYaYj988+SUWDOu3CeifPxZtSfPexvo4pTlOCGI8A8BHbZAbGUP5mfDQ7OmF zVrhYyzOOYZ919MvX32FR4SG8uM0LSsviIBRoOdQO9Tfzi0vESCJYNdnTr3q5hAGg28w/76K/I1 z8dB+ X-Developer-Key: i=petre.rodan@subdimension.ro; a=openpgp; fpr=D80A7FC176151935EC3E5FA9CF269999844E7F30 Sometimes the sensor gets stuck and enters a condition in which it pulls SDA low, thus making the entire i2c bus unusable. This problem is mitigated by activating a 1ms watchdog implemented in the sensor. Signed-off-by: Petre Rodan --- ChangeLog: - hardcode 1ms timer watchdog to any i2c-based sensor instead of configuring a dt-based property - rename bma220_wdt() to bma220_set_wdt() --- drivers/iio/accel/bma220_core.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/iio/accel/bma220_core.c b/drivers/iio/accel/bma220_cor= e.c index 191074d8618ea2638f69283781b8677921876681..b619f5a0bf713b4d386a5d4fc1d= 919e144798f02 100644 --- a/drivers/iio/accel/bma220_core.c +++ b/drivers/iio/accel/bma220_core.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -359,6 +360,11 @@ static int bma220_power(struct bma220_data *data, bool= up) return -EBUSY; } =20 +static int bma220_set_wdt(struct bma220_data *data, const u8 val) +{ + return regmap_update_bits(data->regmap, BMA220_REG_WDT, BMA220_WDT_MASK, + FIELD_PREP(BMA220_WDT_MASK, val)); +} =20 static int bma220_init(struct bma220_data *data) { @@ -390,6 +396,13 @@ static int bma220_init(struct bma220_data *data) if (ret) return dev_err_probe(dev, ret, "Failed to soft reset chip\n"); =20 + if (i2c_verify_client(dev)) { + ret =3D bma220_set_wdt(data, BMA220_WDT_1MS); + if (ret) + return dev_err_probe(dev, ret, + "Failed to set i2c watchdog\n"); + } + return 0; } =20 --=20 2.49.1 From nobody Thu Oct 2 22:40:27 2025 Received: from mail.subdimension.ro (nalicastle.subdimension.ro [172.105.74.154]) (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 5817B30F935; Wed, 10 Sep 2025 07:58:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=172.105.74.154 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491095; cv=none; b=RuEJz0gmRpl2tWWrIejdp1Q83nxUlkV6R4nI3e4VNHXAFDxgu207vRrJWrhzTh99aIxHj1td7DbTloVcA74do73kWTXMntGvfgUK1dc0BEiYX6VQg3KMHqs7Pj4C42qd9rF+rUtPS+67rMhpZos6OqG/S4PPVrmdUVqve2S6R/8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491095; c=relaxed/simple; bh=XWzHd7nlDw82TjC+TEc4SoFNh/CzczQGkWthXmS4GRA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AbPRh1Xfkz3yjbqg1/wJWru/SDRvuXEZJmP8W4gnfe6fXYOVhkNu/NKgjo1r56oXUV5C2ohSoCQXRX+G+j/VPIvDnil017xEaMW6gArmpTAVqaJ4WJAH8LMiJ9rOWEnPfqTgwIzgjZKwaUXdduaSS6y6UdejmesYd0suWfDNnMA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro; spf=pass smtp.mailfrom=subdimension.ro; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b=afQ10EKL; arc=none smtp.client-ip=172.105.74.154 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b="afQ10EKL" Received: from [10.212.0.13] (unknown [IPv6:2a02:2f0e:3503:4a00:e2d5:5eff:fed9:f1c4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mail.subdimension.ro (Postfix) with ESMTPSA id 387F4173BF3; Wed, 10 Sep 2025 10:58:06 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=subdimension.ro; s=mail; t=1757491086; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=n+xOIVvEek2iwN6DRKMJ3IrqnIPefm0SKjzAvT3YQtI=; b=afQ10EKLIrbQoXdGP8eJwIEwt4ADAufVpgE4yhXEvnjkDg/6KlXq1H3Bk0HXCxRIT7SKyf 7Ccov/4O65vpuDWiTu8StsDnFct37rwbIH7zQjALKoGHlimEcnsQnlYgtrWDKQkK63iu7r 3OkM34bhma1Su/C7Wy5SNu5nrothBN8HMDbqunzFL58cIOmeWKmCHCdrOsnr6X1SJCy4Ni YuLWPRJrF8XVdpY75OarkNkJaae4dSeJZ9nKG5wNz+he5SHrRrteuX784YBB7B4cM+8Q+s RW+LE1yN/KoztTho4d5MhFKktX72OV1XTRBWSTNKMMJKt7NNgbHy08EkjtonWA== From: Petre Rodan Date: Wed, 10 Sep 2025 10:57:16 +0300 Subject: [PATCH v2 11/14] iio: accel: bma220: add interrupt trigger 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: <20250910-bma220_improvements-v2-11-e23f4f2b9745@subdimension.ro> References: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> In-Reply-To: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Jonathan Cameron , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Petre Rodan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3509; i=petre.rodan@subdimension.ro; h=from:subject:message-id; bh=XWzHd7nlDw82TjC+TEc4SoFNh/CzczQGkWthXmS4GRA=; b=owEBbQKS/ZANAwAIAc8mmZmETn8wAcsmYgBowS+HY6SKQtDFmzn3zP0STv+SpmHSSxoregIUb d780z93iFqJAjMEAAEIAB0WIQTYCn/BdhUZNew+X6nPJpmZhE5/MAUCaMEvhwAKCRDPJpmZhE5/ MN8fEADX6Mt7G9EqaFrdavXIo494ADbqyT8e86hdrHs0v/vURULncZIZr4HdQZ34EQcvrLh/+6g cC76rlCjmSGyyGmAasJgyfPc9zFfBa8wHx4WQNlQj7Vg5vj2gZ2SzIVdUrPfr2UGf0v+xP1ycmQ vdiI/5nVs9SdEDgRqOqz9Ho++0dddzDaluo6rigpkyTWKtguPMRWLlQ2atoNclXSmzX5uVgXchF D8e1iV8x9S7qXU+aBoqg7Y158GPhPBa1H9CdRZ1BuhLs9k1NUAvsnxgEPi/PaKccxrJCGRbrUKR KSmIiKKt1qR88dnmofWx7dejfn3IDC1EQyUYwGaf92cisj31a/IUyJTY/QwJjfAjcy4T0A4PAt/ gZdgIpuGAAFvveYF8daxHe7TJA/vK7MQWT+IOfI4UHRgAmbtJbUAnRQtBpJU42s6aCibJ5LQXk+ oDLV0nMRpvGOGVkioRPe3Yps0MgWezs+AQIh4H44ks56i5hjWpdzlHsrXnnf3TS7S7O9d2dQ2Uz Vgs5njuUxGURPClMtDpUEWNPzZhA+1lb43Bc7+SuZ11HhLhjXwc0G5qcmkJ6dKk9keV6s2Qa1Hp ypdEpAhfu7crH92FJwEUuhfgCXFxA78wHFUD+HXTKXXrAowmhh5vmgGvQ8vvmO5rr/Us7y/8H5a i2flgDGn275kW1A== X-Developer-Key: i=petre.rodan@subdimension.ro; a=openpgp; fpr=D80A7FC176151935EC3E5FA9CF269999844E7F30 Add interrupt trigger. Signed-off-by: Petre Rodan --- no change, just patch split --- drivers/iio/accel/bma220_core.c | 62 +++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 62 insertions(+) diff --git a/drivers/iio/accel/bma220_core.c b/drivers/iio/accel/bma220_cor= e.c index b619f5a0bf713b4d386a5d4fc1d919e144798f02..69bfd7f9f2b35e67835c6e1e41e= 02258e6741e7b 100644 --- a/drivers/iio/accel/bma220_core.c +++ b/drivers/iio/accel/bma220_core.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include =20 @@ -126,6 +127,7 @@ struct bma220_data { struct regmap *regmap; struct mutex lock; u8 range_idx; + struct iio_trigger *trig; struct { s8 chans[3]; /* Ensure timestamp is naturally aligned. */ @@ -194,6 +196,23 @@ const struct regmap_config bma220_i2c_regmap_config = =3D { }; EXPORT_SYMBOL_NS_GPL(bma220_i2c_regmap_config, "IIO_BOSCH_BMA220"); =20 +static int bma220_data_rdy_trigger_set_state(struct iio_trigger *trig, + bool state) +{ + struct iio_dev *indio_dev =3D iio_trigger_get_drvdata(trig); + struct bma220_data *data =3D iio_priv(indio_dev); + + guard(mutex)(&data->lock); + return regmap_update_bits(data->regmap, BMA220_REG_IE0, + BMA220_INT_EN_DRDY_MSK, + FIELD_PREP(BMA220_INT_EN_DRDY_MSK, state)); +} + +static const struct iio_trigger_ops bma220_trigger_ops =3D { + .set_trigger_state =3D &bma220_data_rdy_trigger_set_state, + .validate_device =3D &iio_trigger_validate_own_device, +}; + static irqreturn_t bma220_trigger_handler(int irq, void *p) { int ret; @@ -418,6 +437,25 @@ static void bma220_deinit(void *data_ptr) ERR_PTR(ret)); } =20 +static irqreturn_t bma220_irq_handler(int irq, void *private) +{ + struct iio_dev *indio_dev =3D private; + struct bma220_data *data =3D iio_priv(indio_dev); + int rv; + u8 bma220_reg_if[2]; + + guard(mutex)(&data->lock); + rv =3D regmap_bulk_read(data->regmap, BMA220_REG_IF0, bma220_reg_if, + sizeof(bma220_reg_if)); + if (rv) + return IRQ_NONE; + + if (FIELD_GET(BMA220_IF_DRDY, bma220_reg_if[1])) + iio_trigger_poll_nested(data->trig); + + return IRQ_HANDLED; +} + int bma220_common_probe(struct device *dev, struct regmap *regmap, int irq) { int ret; @@ -447,6 +485,30 @@ int bma220_common_probe(struct device *dev, struct reg= map *regmap, int irq) indio_dev->num_channels =3D ARRAY_SIZE(bma220_channels); indio_dev->available_scan_masks =3D bma220_accel_scan_masks; =20 + if (irq > 0) { + data->trig =3D devm_iio_trigger_alloc(dev, "%s-dev%d", + indio_dev->name, + iio_device_id(indio_dev)); + if (!data->trig) + return -ENOMEM; + + data->trig->ops =3D &bma220_trigger_ops; + iio_trigger_set_drvdata(data->trig, indio_dev); + + ret =3D devm_iio_trigger_register(dev, data->trig); + if (ret) + return dev_err_probe(dev, ret, + "iio trigger register fail\n"); + indio_dev->trig =3D iio_trigger_get(data->trig); + ret =3D devm_request_threaded_irq(dev, irq, NULL, + &bma220_irq_handler, + IRQF_TRIGGER_RISING | IRQF_ONESHOT, + indio_dev->name, indio_dev); + if (ret) + return dev_err_probe(dev, ret, + "request irq %d failed\n", irq); + } + ret =3D devm_add_action_or_reset(dev, bma220_deinit, data); if (ret) return ret; --=20 2.49.1 From nobody Thu Oct 2 22:40:27 2025 Received: from mail.subdimension.ro (nalicastle.subdimension.ro [172.105.74.154]) (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 9A0E830F94C; Wed, 10 Sep 2025 07:58:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=172.105.74.154 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491095; cv=none; b=GEfufRdb84TnaWC+GmAdJtVuN/qd5nlrytmMNi+ycr1/710swXRt51F442Meqrx3Hvab9rpbHNDYEg7Ojt7dOAkUiABajEGucfEZaf5UgkRgMLNNI5b7tcCtWlcolBeWIc/Z6Cchqq1tK671IzD7Z9apgd711Inzgeysx6Z3eGw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491095; c=relaxed/simple; bh=409ZBhNOe9HaBHJimTYFEu+sSb/2bn/ZWFfpFbcTf1w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=X5Dj2CVrcXqMo7Gp8be7c9/knTE31HMdIq25lZCPORl3b8hCm6hAMLiPM+FaBU2QYlF1a0+61Cg5mfdpb1Ri8ycU2fqB34St7/9i8reUVx37uoG+R1SOdpFEfjXcShIgzqfMttbPvVLGTEbzlzeByrCzA6Mj5QFCkgPbNRhM5Wc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro; spf=pass smtp.mailfrom=subdimension.ro; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b=YjdYGZqz; arc=none smtp.client-ip=172.105.74.154 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b="YjdYGZqz" Received: from [10.212.0.13] (unknown [IPv6:2a02:2f0e:3503:4a00:e2d5:5eff:fed9:f1c4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mail.subdimension.ro (Postfix) with ESMTPSA id D2CFB173BF4; Wed, 10 Sep 2025 10:58:06 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=subdimension.ro; s=mail; t=1757491087; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+au2rMrozozcPYNNCeRGGmu+HJEQku2dK2UlpDdDD10=; b=YjdYGZqzPatLMlFfdoD0jHPJW0Muix+bQANFwWp7VhlQScuRisY1RQ9stfreaNgmb8O3kd ZrNdibf+NkYl4e1TStu980OkwWcv3Venms6YCgIk/te/Djhy32zidPYtzTK5/3cpnCmIva KU4jHxDNtehWBRfCzk8VW2H7ZqRulGhdsRhnuzRkQ7JEsv89hRZ0enekmnwN0NX0/vZrW9 wW6a6mHJdxkXCm25cjOViPkKg8n50uWRthV8mLZJpz2547SlH2ujnlfJqWosEpS+8YMphQ D/adczSgXmN55vH+Tfb5EMCgLVAZGgUVgvdPGUofpAbdyygqES2J5YVmRUNCow== From: Petre Rodan Date: Wed, 10 Sep 2025 10:57:17 +0300 Subject: [PATCH v2 12/14] iio: accel: bma220: add LPF cut-off frequency mapping 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: <20250910-bma220_improvements-v2-12-e23f4f2b9745@subdimension.ro> References: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> In-Reply-To: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Jonathan Cameron , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Petre Rodan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4159; i=petre.rodan@subdimension.ro; h=from:subject:message-id; bh=409ZBhNOe9HaBHJimTYFEu+sSb/2bn/ZWFfpFbcTf1w=; b=owEBbQKS/ZANAwAIAc8mmZmETn8wAcsmYgBowS+HPCm0ikiLEQiLjqX1m/wkknHGFhxjAzzgV mKupNDtEwiJAjMEAAEIAB0WIQTYCn/BdhUZNew+X6nPJpmZhE5/MAUCaMEvhwAKCRDPJpmZhE5/ MA/yD/9ktP9s1b0h5lB6+PbbhaqMusltawg+V8AZBlmm5tdKQx4f+7nb2JkULMWMXysQszElD4c uFBoOzdY6V/b0ezGlLoezS5dZcEQvQ86c29ks2lyBQL75NYG/stblb/MUhS0oiZt/8yDX+lz+BI RDa0cc4t0MU9q3lHaHXTI9Km8DXycWshUG25uy/JBCDXhC3gsnmzs+XWlQFkB1OJiadMvzaVzov fkBo7jjUTDIpv52ygJA4FEEAFYlv9Qlz9sC4M8ze1eWYEHA9YSkfkNW5a4plUiEPNoB/RGCVKC8 5Ur6P8s5jR24DNbqyhEqq4UrUoyzAcaAoHBAQvNYe5ndw0Eo166YHuKWIESTNEcwcHOqvcHp+Uc dTVRibGA8sqHqZ27QdnxzS2gdpMUlS9cYTXVeP2DnTKuXwKXMEFTeplrDbmWO4iBcVrI9EavafF x59k1E9ne6IQ/5CWnd1XsdPqSyHyhZUuQ90n16mJr2pR6CkBjUrdk3UkPwXN26FZKOOl1TMmAtA 2TU/v3OasMlPOtBcSGGaQvBWONLSFikvMaVYdce9r8XBQ9pJ7564eXpVx9khuH7ZDLHLgonFn7D s6Z7/X5dXOoaA6JNIVa44TYDepTGO48WI+rQeXUTVkpbZdUG61UuMcScOoT40iC6umfc4Obax0h Nn2AkB0zwUt8Weg== X-Developer-Key: i=petre.rodan@subdimension.ro; a=openpgp; fpr=D80A7FC176151935EC3E5FA9CF269999844E7F30 Add mapping for the low pass filter cut-off frequency. Make valid values visible for both the cut-off frequency and the scale. Signed-off-by: Petre Rodan --- ChangeLog: - rename variables to include unit capitalization (dB, Hz) --- drivers/iio/accel/bma220_core.c | 61 +++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/drivers/iio/accel/bma220_core.c b/drivers/iio/accel/bma220_cor= e.c index 69bfd7f9f2b35e67835c6e1e41e02258e6741e7b..16a1aac5aa178ec06dc26e7e632= f8ec5f43b5f78 100644 --- a/drivers/iio/accel/bma220_core.c +++ b/drivers/iio/accel/bma220_core.c @@ -95,13 +95,23 @@ =20 #define BMA220_DEVICE_NAME "bma220" =20 +#define BMA220_COF_1000Hz 0x0 +#define BMA220_COF_500Hz 0x1 +#define BMA220_COF_250Hz 0x2 +#define BMA220_COF_125Hz 0x3 +#define BMA220_COF_64Hz 0x4 +#define BMA220_COF_32Hz 0x5 + #define BMA220_ACCEL_CHANNEL(index, reg, axis) { \ .type =3D IIO_ACCEL, \ .address =3D reg, \ .modified =3D 1, \ .channel2 =3D IIO_MOD_##axis, \ .info_mask_separate =3D BIT(IIO_CHAN_INFO_RAW), \ - .info_mask_shared_by_type =3D BIT(IIO_CHAN_INFO_SCALE), \ + .info_mask_shared_by_type =3D BIT(IIO_CHAN_INFO_SCALE) | \ + BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \ + .info_mask_shared_by_type_available =3D BIT(IIO_CHAN_INFO_SCALE) |\ + BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \ .scan_index =3D index, \ .scan_type =3D { \ .sign =3D 's', \ @@ -126,6 +136,7 @@ struct bma220_data { struct device *dev; struct regmap *regmap; struct mutex lock; + u8 lpf_3dB_freq_idx; u8 range_idx; struct iio_trigger *trig; struct { @@ -142,6 +153,18 @@ static const struct iio_chan_spec bma220_channels[] = =3D { IIO_CHAN_SOFT_TIMESTAMP(3), }; =20 +/* + * Available cut-off frequencies of the low pass filter in Hz. + */ +static const int bma220_lpf_3dB_freq_Hz_table[] =3D { + [BMA220_COF_1000Hz] =3D 1000, + [BMA220_COF_500Hz] =3D 500, + [BMA220_COF_250Hz] =3D 250, + [BMA220_COF_125Hz] =3D 125, + [BMA220_COF_64Hz] =3D 64, + [BMA220_COF_32Hz] =3D 32, +}; + static const unsigned long bma220_accel_scan_masks[] =3D { BIT(AXIS_X) | BIT(AXIS_Y) | BIT(AXIS_Z), 0 @@ -255,6 +278,10 @@ static int bma220_read_raw(struct iio_dev *indio_dev, *val =3D bma220_scale_table[index][0]; *val2 =3D bma220_scale_table[index][1]; return IIO_VAL_INT_PLUS_MICRO; + case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: + index =3D data->lpf_3dB_freq_idx; + *val =3D bma220_lpf_3dB_freq_Hz_table[index]; + return IIO_VAL_INT; } =20 return -EINVAL; @@ -273,6 +300,18 @@ static int bma220_find_match_2dt(const int (*tbl)[2], = const int n, return -EINVAL; } =20 +static int bma220_find_match(const int *arr, const int n, const int val) +{ + int i; + + for (i =3D 0; i < n; i++) { + if (arr[i] =3D=3D val) + return i; + } + + return -EINVAL; +} + static int bma220_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int val, int val2, long mask) @@ -298,6 +337,21 @@ static int bma220_write_raw(struct iio_dev *indio_dev, return ret; data->range_idx =3D index; =20 + return 0; + case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: + index =3D bma220_find_match(bma220_lpf_3dB_freq_Hz_table, + ARRAY_SIZE(bma220_lpf_3dB_freq_Hz_table), + val); + if (index < 0) + return -EINVAL; + + ret =3D regmap_update_bits(data->regmap, BMA220_REG_FILTER, + BMA220_FILTER_MASK, + FIELD_PREP(BMA220_FILTER_MASK, index)); + if (ret < 0) + return ret; + data->lpf_3dB_freq_idx =3D index; + return 0; } =20 @@ -315,6 +369,11 @@ static int bma220_read_avail(struct iio_dev *indio_dev, *type =3D IIO_VAL_INT_PLUS_MICRO; *length =3D ARRAY_SIZE(bma220_scale_table) * 2; return IIO_AVAIL_LIST; + case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: + *vals =3D (const int *)bma220_lpf_3dB_freq_Hz_table; + *type =3D IIO_VAL_INT; + *length =3D ARRAY_SIZE(bma220_lpf_3dB_freq_Hz_table); + return IIO_AVAIL_LIST; default: return -EINVAL; } --=20 2.49.1 From nobody Thu Oct 2 22:40:27 2025 Received: from mail.subdimension.ro (nalicastle.subdimension.ro [172.105.74.154]) (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 8914430FC2E; Wed, 10 Sep 2025 07:58:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=172.105.74.154 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491096; cv=none; b=XHVTbXUkoVaiUXLL6RlSxDtv1KEVibGAGYDNlD0/S83TWHXiIPFhY2muhYfrZN4H6zOAUW0nNB0SLrz3+s+vcYp/bV7v+xv4GKIob0TgMUKbbXpVszmLQZDz9apmlCfZGGibOeY1+I0Z3iPtlJDR1cnAG+4skW7S1Syhm1zTn/g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491096; c=relaxed/simple; bh=r8E2kS8o52+1PDCkrtd3/+EP0uEZzLwaZ9SfpLhys78=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dE4NK7WzUOiqJ30QzmryVrNmIG64hX1VTicZlQ4+tuYKgKxqlEFBWG5TbU0/CRV301Q+9U2lQZhjBFanJ1pHCKjMmoza0ftpkdPg/RcwXYxDMJ2DQfZPwumqhy2sS61LqFbNaq1jgycV4SHCMQi0yqrLFoKYDrkAIm9KBqdt+Rk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro; spf=pass smtp.mailfrom=subdimension.ro; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b=3EwRyub1; arc=none smtp.client-ip=172.105.74.154 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b="3EwRyub1" Received: from [10.212.0.13] (unknown [IPv6:2a02:2f0e:3503:4a00:e2d5:5eff:fed9:f1c4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mail.subdimension.ro (Postfix) with ESMTPSA id 560D5173BF5; Wed, 10 Sep 2025 10:58:07 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=subdimension.ro; s=mail; t=1757491087; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1iVjreKN1foDjJrC6jfgK3nQqEZmjmSpIa1S7kHOMC0=; b=3EwRyub13DY26Q09buH5Eloz8DFApaGLtHjWxThfLUOqb8i2bBelVayi8BNv6zP4hBfmlX u23ICEQZtsFEqwkoIwAN0v3sX2yOn2AZcHrH+3lQjfgPbY+4jSb6II7tG4QVZR8c+Ut1VR kEYxu0naw3agqpLdhIRE0bstiwr/A5E8ZO5HhBKmvfO63278R5g8yK1OmSNMLcu6GFXUcq IohBvpdWIX6u1+Zbf6+5eu8jQ1H0a1M/zp6Sw1H31WTYucWam82jeCK2DUMg9/0PRqWCR7 qx/LTHqC1A04jE9kzA6XzMjQSsKJQnl3IaXiP1mu7bX7Xx2L1bAH3jz+7CPHFw== From: Petre Rodan Date: Wed, 10 Sep 2025 10:57:18 +0300 Subject: [PATCH v2 13/14] iio: accel: bma220: add debugfs reg access 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: <20250910-bma220_improvements-v2-13-e23f4f2b9745@subdimension.ro> References: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> In-Reply-To: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Jonathan Cameron , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Petre Rodan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1182; i=petre.rodan@subdimension.ro; h=from:subject:message-id; bh=r8E2kS8o52+1PDCkrtd3/+EP0uEZzLwaZ9SfpLhys78=; b=kA0DAAgBzyaZmYROfzAByyZiAGjBL4ehctbbFBr0YYeRcrWJDYc2zL6i21MVoNC5iX39Xlqep YkCMwQAAQgAHRYhBNgKf8F2FRk17D5fqc8mmZmETn8wBQJowS+HAAoJEM8mmZmETn8wPisQAJpR mDdmZ/RQrhy3vWt8XMbHtLbsOS2dN9kUaHUnIcMOyhphBqj1+k89qX0ZVKaLtYCZhIWafDt6VNS rMdFgrgmPSn34funSame97dLznPviJTAcc8kIIFlGwPjEkV4aNOxlyJkvumdJNdrci4NZgivURt S2ckhmFgbWRkvwDUxMfU7DkOygesi1FbuLVeX07r+8tf2yBs81y16wdVyVxFAHyRP6ta5jOFsxB 6G7xHebbVoJgoYNmAljoTCIAdMgt0HHUpN/sRLWWsj6MTt/NyaKngNDwTJfZaSNXzxSIyfvx7jO TU9Yl8Qy2sSlL/BoDJjNz/26RlQTP8X8tomsjUjC5tt3xOv6wezC3R+XWAmtWyMI6socppdb0WP 2XIQwoUPOFq85K6ojEf9+z57nkqu6eMu9a7o3uJNb1BTDqmKcrXj0ox53m0nUbFqR9gu6nSCgrs dtPR0XOeCb7eVm+urVE6GXyY+FLT2zlyj/jlPlxLT5QCO+XRSy1Rv3tOxM++LMCbEtrEemKciWZ UBlDbgfqne+ONpPy7BpOeouAyw8GqA87czqZNnsO8ZGTkKUzRFPVrB+M8odaur474xm+jHwd1rN yr5lVpJ0i5cQbB2drH7IcSRt/bgXixhkGD7XB433fpyTkcWYSYuOFoBiW3qSXobOAnZfvy3pUsV v3bWN X-Developer-Key: i=petre.rodan@subdimension.ro; a=openpgp; fpr=D80A7FC176151935EC3E5FA9CF269999844E7F30 Allow read/write access to sensor registers for use in unit-tests. Signed-off-by: Petre Rodan --- no change --- drivers/iio/accel/bma220_core.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/iio/accel/bma220_core.c b/drivers/iio/accel/bma220_cor= e.c index 16a1aac5aa178ec06dc26e7e632f8ec5f43b5f78..981b0fdc306e936ce9fc45439f7= c164f50de50c4 100644 --- a/drivers/iio/accel/bma220_core.c +++ b/drivers/iio/accel/bma220_core.c @@ -379,10 +379,21 @@ static int bma220_read_avail(struct iio_dev *indio_de= v, } } =20 +static int bma220_reg_access(struct iio_dev *indio_dev, unsigned int reg, + unsigned int writeval, unsigned int *readval) +{ + struct bma220_data *data =3D iio_priv(indio_dev); + + if (readval) + return regmap_read(data->regmap, reg, readval); + return regmap_write(data->regmap, reg, writeval); +} + static const struct iio_info bma220_info =3D { .read_raw =3D bma220_read_raw, .write_raw =3D bma220_write_raw, .read_avail =3D bma220_read_avail, + .debugfs_reg_access =3D &bma220_reg_access, }; =20 static int bma220_reset(struct bma220_data *data, bool up) --=20 2.49.1 From nobody Thu Oct 2 22:40:27 2025 Received: from mail.subdimension.ro (nalicastle.subdimension.ro [172.105.74.154]) (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 CC5CC3101AB; Wed, 10 Sep 2025 07:58:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=172.105.74.154 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491096; cv=none; b=cwMdWBtXZc3++HMX80GeZ0nvagPK4kjkvMCj6JsgEv8rViK/Ayp9jk8IFI7EKJawxOZ9xc9iGUVboZ9Dkr+8Ah3SI9xKRTdvj3V2KaCuR1H5MY8fBzszRl+l6lKB5QzDaCZhjE0IGb1u8gq4YIJdt7WqEGDlc+u4kLO1BMZvlvE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757491096; c=relaxed/simple; bh=/4zN9lAblT0/99lYnfhdg1WFLieqr7yBVjvAKHYmEwQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=a8Pagbu4bG9bh2EwCTpFHqFATH8DyodgBNg7or2rmwUbbH/xMbWQF9JjE0eOgNyEe0yO1JOR2aLSE4QrpSgOiRx0nvAQH8wB9/KTVhO4kF2oFk8JlT+2c9obLvmI1EGH5Fr01drfkT/O2wAEayARvPMAZn+Nz+UqW1Pf4DHspTQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro; spf=pass smtp.mailfrom=subdimension.ro; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b=YSZ4poHY; arc=none smtp.client-ip=172.105.74.154 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=subdimension.ro Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=subdimension.ro header.i=@subdimension.ro header.b="YSZ4poHY" Received: from [10.212.0.13] (unknown [IPv6:2a02:2f0e:3503:4a00:e2d5:5eff:fed9:f1c4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mail.subdimension.ro (Postfix) with ESMTPSA id CB295173BF6; Wed, 10 Sep 2025 10:58:07 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=subdimension.ro; s=mail; t=1757491088; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=oBVWElmnKoZWfiu+W3DAEuKmhtUcJOutX7gM+xyCT/0=; b=YSZ4poHYLa7t+NByxsJdnS3ubRhWWN5Ylo5moL6tafU5AiCHY2pFj/Bphild9Fav9JQMBL A/KhwfNxygqO9WpNb4xtJwaGoEDSvoH1EfyILtix/0kqzBBXYw5L/d/AiXAF/uudpivc+I iHUNgXqmWPoiTM9uPfsSZObMEfkYVkUqrrvLy5va+MaSHnO8SMX37CLLwMU7oZkm+MZsq1 dxhOdfcaLYGmVedh/yRBopdlgFKYfxQxDJcGgFd/gRkBn0TGTQ2Lmujz9WHFqkJrp2KE57 x8yJPKreA/GjsyNQHPYhLb6yqW4KcaQk+YxpUgWKqiBOULHvwcfRy7rRK0iZvg== From: Petre Rodan Date: Wed, 10 Sep 2025 10:57:19 +0300 Subject: [PATCH v2 14/14] iio: accel: bma220: add maintainer 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: <20250910-bma220_improvements-v2-14-e23f4f2b9745@subdimension.ro> References: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> In-Reply-To: <20250910-bma220_improvements-v2-0-e23f4f2b9745@subdimension.ro> To: Jonathan Cameron , David Lechner , =?utf-8?q?Nuno_S=C3=A1?= , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Jonathan Cameron , linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Petre Rodan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=868; i=petre.rodan@subdimension.ro; h=from:subject:message-id; bh=/4zN9lAblT0/99lYnfhdg1WFLieqr7yBVjvAKHYmEwQ=; b=owEBbQKS/ZANAwAIAc8mmZmETn8wAcsmYgBowS+H4A6LtCJHII2vKHnVxOJivcCT+5zMAibi3 nh7cjCHiF+JAjMEAAEIAB0WIQTYCn/BdhUZNew+X6nPJpmZhE5/MAUCaMEvhwAKCRDPJpmZhE5/ MP8xEACVIrH4hJGpvJQtu9YlB/zRRcGF0QTywNNETqL2pDw4HO55vMOIP1gXkVMvMZC2P0ul6bu lgIxx8SGrVHpa2CcibHplQ/3ItrMRG0jlVEEFft6MMIohy379n/hUwfjfrJGiRZcGkwQZEWiQWj lCOZn8sCDYrDob47CKOyabLFVHVRDFVbXkZ5zXXs0P6/GnDn8RgZtGNpunfgImKYMeW7cK5JaEu f2UnpwWUOotSGVNuiXpyjmPfmVL463XuZM4seuhfz6yhqgTecKii4buTtuzOaIhw2eB+fv4fDFJ 9u01o3cCYYEpA+RW2WGgFLw5DNkZzVGc7mqLgJ964DaYodZevuXKcBFi27aEyHC2p3UbtprGPF7 ekZt94k4+MBhqZnBAOYmKXKOGATt0FoteorcmREDbMUkN1PNV69vIyNvzf/GodzMdhCSL+KUHtz x7FdTazMiVhv3nh9tsE09EeHyR2ta0sTfZltB2el3YwfJ/TojxaVi6juGgEqzLRPdMGHL1+W+tC vIZ2/78RNkCQcNHnrPLhRE4a5h6wFq1UKnSXPJMAa/syD/s/kk6fcV5gjcknaxKR7ObxKUGEJH/ NIJ+YKejhF/VqMYjJqhoE7ct272vPu11/W1G1nZ+r0ulk1jrdVzg9hTgUBUu2dXTe/ekj9LfwPu cdhGrYOk4He3HXQ== X-Developer-Key: i=petre.rodan@subdimension.ro; a=openpgp; fpr=D80A7FC176151935EC3E5FA9CF269999844E7F30 Add maintainer for this driver. Signed-off-by: Petre Rodan --- no change --- MAINTAINERS | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 75615d82593e173a9e07fd269163fecdc4711e8b..eb985bd06b7d960bbc25941a8ea= 7b420d83483b0 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4402,6 +4402,13 @@ F: include/net/bond* F: include/uapi/linux/if_bonding.h F: tools/testing/selftests/drivers/net/bonding/ =20 +BOSCH SENSORTEC BMA220 ACCELEROMETER IIO DRIVER +M: Petre Rodan +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/accel/bosch,bma220.yaml +F: drivers/iio/accel/bma220* + BOSCH SENSORTEC BMA400 ACCELEROMETER IIO DRIVER M: Dan Robertson L: linux-iio@vger.kernel.org --=20 2.49.1