Freescale MX6 と 3.10.31 Freescale 修正カーネルを使用しています。私はマキシム MAX7325 を IO エクスパンダとして使用しています。これには、P0-P2 にプッシュボタンが接続されています。7325 からの割り込みラインは GPIO_3 パッドに接続されています (これは GPIO1_3 だと思います...)
次のように、デバイス ツリーに 7325 と gpio キーを設定します。
max7325_reset: max7325-reset {
compatible = "gpio-reset";
reset-gpios = <&gpio5 16 GPIO_ACTIVE_LOW>;
reset-delay-us = <1>;
#reset-cells = <0>;
};
gpio-keys {
compatible = "gpio-keys";
sw2 {
gpios = <&max7325 2 GPIO_ACTIVE_LOW>;
linux,code = <30>; //a
gpio-key,wakeup;
};
};
と
&i2c1 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c1_2>;
status = "okay";
max7325: gpio@68 {
compatible = "maxim,max7325";
reg = <0x68>;
gpio-controller;
#gpio-cells = <2>;
resets = <&max7325_reset>;
gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
interrupt-parent = <&gpio1>;
interrupts = <3 2>;
};
};
MAX7325 ドライバのプローブが呼び出されると、client->dev.platform_data が NULL になるように見えます。このため、後で max732x_irq_setup が呼び出されたときに、chip->gpio_chip.to_irq ポインターが max732x_gpio_to_irq 関数を指すようにセットアップされません (おそらく、これが機能するための適切な情報がないためです)。最初の入力を設定しようとすると、割り込みを設定しようとすると失敗し、他のキーは設定されません。
gpio-keys gpio-keys.20: Unable to get irq number for GPIO 242, error -6
/sys インターフェイスを使用して、P0 が GPIO 240 にマップされることを確認したので、GPIO 242 は、セットアップしようとしていた sw2 GPIO-KEY です。
このドライバはデバイス ツリーで動作しないのでしょうか? デバイス ツリーのプロパティを取得しようとしている様子は見られませんが、私が調べた他の IO エキスパンダー ドライバーも同様でした。そのため、I2C コアがデバイス ツリーを読み取っており、そこから platform_data を入力する必要があるのではないかと考えました。ドライバーのプローブ関数を呼び出します (?)
私はこれにかなり慣れていないので、助けていただければ幸いです。=) デバイス ツリーのドキュメントをオンラインでいくつか読みましたが、これはかなり具体的なことであり、正しく行っていないため、カバーされていないと思います... (?)
カーネルで CONFIG_GPIO_MAX732X_IRQ を構成しています...そして、ある時点で max7325 I2c1 ノードの interrupt-controller プロパティを設定しようとしましたが、それが必要かどうか確信が持てませんでした (?)