質問

Linuxカーネルデバイスツリーを操作しています。最初は、複数の割り込み親を持つノードの機能が欠けているようです。私はカスタムアーム内蔵ボードを制御しているドライバを持っています、それは複数のGPIO割り込み親からのGPIOとピン割り込みを取り、オンボードバッテリー、電圧低IRQS、リセットIRQなどを管理します。

これに対処するための追加の機能で誰かがハッキングされているように見えたのは、誰かがオフィシャルではなく、望ましくない割り込みソースファイルの修正を含みます。 このような「割り込み - 拡張」と呼ばれる用語の変更を追加しました。ここでは、割り込み親がタプルに指定されています。

    #interrupt-cells = <2>;
    interrupts-extended = <&gpio3 21 1>, <&gpio7 13 2>; /* voltage/reset irq */
.

私は、Interrupt-Mapプロパティを使用して単純なGPIO割り込みマッピングを実現する方法のいかなる手段または例も見つかりませんでした。

私が単一のGPIO割り込み親を使用していた場合、これを行うための適切な方法はこのようなものです。

interrupt-parent = <&gpio1>;
interrupts = <9 2>, <8,1>;
.

しかし、それは 1 割り込みの宣言を "割り込み"で指定された複数の割り込みを持つ親の割り込み親を宣言し、それらはすべて指定された親に属している必要があります。私は2つの割り込み親、GPIO7、GPIO3を使用しています。

デバイスツリーの単一のデバイスノードで異なる割り込み親を持つ複数の割り込みを実装するための適切な方法は何ですか?

役に立ちましたか?

解決

GPIO割り込み親のうちに機能するかどうかわかりませんが、他の種類の割り込みコントローラでは、「割り込みマップ」プロパティを使用し、各別のコントローラにファンドルを使用して割り込みのリストを指定します。これは、ドライバが3つの割り込みを必要としていた場所、 'INTC'コントローラからの2、 'SPMI'コントローラからの1の1つが必要な例です。

interrupts = <0 1 2>;
interrupt-map = <0 &intc 0 134 0
                 1 &intc 0 140 0
                 2 &spmi 0 0x9 0 0>;
interrupt-names = "core_irq", "async_irq", "pmic_id_irq";
interrupt-map-mask = <0 0 0 0>;
.

この例では、INTCノードに<3>の#割り込みセル値があり、SPMIノードは#割り込みセル値4を持っていました(つまり、それぞれのファンドルで使用する必要があるという多くの引数)。

割り込み名称フィールドはオプションですが、コード内の番号ではなくIRQを名前で要求することができます(つまり、platform_get_irq())

の代わりにplatform_get_irq_byname()を使用することができます。

正直になるために、私は少しわからない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top