arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts
とか
arch/arm/boot/dts/overlays/hifiberry-digi-pro-overlay.dts
を参考に
fragment@2 {
target = <&sound>;
__overlay__ {
compatible = "rpi,rpi-dac";
i2s-controller = <&i2s>;
status = "okay";
};
};
に
reset-gpio = <&gpio 16 0> ;
とかを記述追加
で、
sound/soc/bcm/iqaudio-dac.c
や
sound/soc/bcm/hifiberry_digi.c
を参考に
probe関数の中で
devm_gpiod_get(&pdev->dev, "reset", GPIOD_OUT_LOW);
を使って、resetのgpioの情報を読みだそうとするが、-2でエラー。
なぜ引っ張れないんだろう、と思案中。
エラー値は、 -ENOENT (=-2) つまり、「ファイルまたはディレクトリが存在しません。」
要するに、"reset" で、dtsの中の情報を引っ張ろうとしてるが、引っ張れません、というところか…
ソースをみていくと
http://lxr.free-electrons.com/source/drivers/gpio/gpiolib.c#L3194
このあたり、__must_check gpiod_get_indexの中で
デバイスツリーか、ACPIでの検索をして、なかったら、gpiod_findして、それでもなかったら、上記エラーを返している、と。
dtsに書いている時点でデバイスツリーを使っているはずだが…
んー、よく見比べると
if (pdev->dev.of_node) {
の内側、
i2s_node = of_parse_phandle(pdev->dev.of_node, "i2s-controller", 0);
のコールがすんでからのみ、呼んでるようにみえるな…ちょっとそっちの方向で試してみるか…
0 件のコメント:
コメントを投稿