現在、Linuxデバイスツリーにmma8451Q加速度計を追加してmma8452ドライバを実装しようとしています。
現在、加速度計を記述するデバイスツリーに追加を追加してデバイスツリーオーバーレイファイル(dtbo)を作成する方法を取り上げています。起動時に正しくロードされ、指定されたmma8452ドライバを正しくインポートします。ただし、ドライバは起動時にdmesgログに次のエラーを返します。
[ 23.2352] mma8452: probe of 0-001c failed with error -121
これが何を意味するのか、解決策を知っている人はいますか?上書きするのが正しい方法ではない可能性があるため、dtsiファイルを作成するか、ソースdtsファイルを変更する必要がありますか? SA0アドレス0x1Cのi2c-toolsパッケージを使用して、コンソールから加速度計にアクセスできます。
NXPが提供するドライバはここにあります。mma8452.cドライバ
私のdtboファイルは次のとおりです。
/*
* MIRA custom cape device tree overlay
* Supports MMA8451Q Accelerometer
*/
/dts-v1/;
/plugin/;
#include <dt-bindings/interrupt-controller/irq.h>
/ {
/*
* Helper to show loaded overlays under: /proc/device-tree/chosen/overlays/
*/
fragment@0 {
target-path="/";
__overlay__ {
chosen {
overlays {
MIRA_EXTENSIONS = __TIMESTAMP__;
};
};
};
};
fragment@1 {
target = <&i2c0>;
__overlay__ {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
accel@1C {
compatible = "fsl,mma8451";
reg = <0x1C>;
interrupt-parent = <&gpio1>;
interrupts = <16 IRQ_TYPE_EDGE_RISING>;
interrupt-names = "INT1";
};
};
};
};
他のdtsiファイルのi2cノードなので、target = <&i2c0>を選択してください。他の理由はありません。間違っている可能性があります。
答え1
解決策は、加速度計が接続されている正しいi2cバスをターゲットにすることです。結局i2c0ではなくi2c2になりました。これは私の問題を解決しました。正しいdtboファイルは次のとおりです。
/*
* MIRA custom cape device tree overlay
* Supports MMA8451Q Accelerometer
*/
/dts-v1/;
/plugin/;
#include <dt-bindings/interrupt-controller/irq.h>
/ {
/*
* Helper to show loaded overlays under: /proc/device-tree/chosen/overlays/
*/
fragment@0 {
target-path="/";
__overlay__ {
chosen {
overlays {
MIRA_EXTENSIONS = __TIMESTAMP__;
};
};
};
};
fragment@1 {
target = <&i2c2>;
__overlay__ {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
accel@1C {
compatible = "fsl,mma8451";
reg = <0x1C>;
interrupt-parent = <&gpio1>;
interrupts = <16 IRQ_TYPE_EDGE_RISING>;
interrupt-names = "INT1";
};
};
};
};