2017-01-09

何かが違った…

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 件のコメント: