GPIO P3_1について、Pin functionをIRQ7に設定し、外部割り込みとして使いたいと考えております。デバイスツリーにてIRQ7の設定をし、起動後 cat /proc/interrupt にて割り込み一覧に表示されており、割り込み登録はできています。しかし、ポートの設定ができておらず、割り込み検出ができません。割り込みの初期設定にてgpio_requestを実行しているのですが、エラーコード-517が返ってきております。
デバイスツリーの設定が抜けているのでしょうか?初歩的な質問で申し訳ございませんが、アドバイスをお願いします。
<デバイスツリー>
/ { model = "Renesas SMARC EVK based on r9a07g044l2"; compatible = "renesas,smarc-evk", "renesas,r9a07g044l2", "renesas,r9a07g044";
gpio3: gpio@11030000{ compatible = "renesas,r9a07g044-gpio"; reg = <0x11030000 0x10000>; gpio-controller; #gpio-cells = <2>; interrupt-controller; #interrupt-cells = <2>; };
gpio_interrupt { compatible = "gpio-keys"; gpio = <&gpio3 1 GPIO_ACTIVE_LOW>; // GPIO番号とアクティブ状態 interrupt-parent = <&gpio3>; interrupts = <40>; // 割り込み番号 label = "gpio_interrupt"; };
};
&intc_ex { /* pinctrl-0 = <&modint_pins>; */ interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 8 IRQ_TYPE_LEVEL_LOW>, // IRQ=7 割り込み番号40 <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;};
<ドライバコード>
その後いろいろ解析を進めると、デバイスツリーにてgpioの設定ができていないことが要因のようです。GPIO P3_1をIRQ7として使用するための、デバイスツリーの設定方法を教えて頂けないでしょうか?
結局、デバイスツリーで上手く設定できなかったので、pinctrlドライバーでピンファンクションを設定する関数がありましたので、その関数をpinctrlドライバー内で呼び出して設定しました。
build/tmp/work-shared/smarc-rzg2l/kernel-source/drivers/pinctrl/renesas/pinctrl-rzg2l.crzg2l_pinctrl_set_pfc_mode()
i2cやuartのように機能に属しないポートの設定は、デバイスツリーではなくpinctrlドライバーで直接記述するものなのでしょうか?
GPIOはpinctrlで操作ですwww.kernel.org/.../pinctl.html