我正在使用飞思卡尔 MX6 和飞思卡尔 3.10.31 修改内核。我有一个用作 IO 扩展器的 Maxim MAX7325,它的按钮连接到 P0-P2。7325的中断线连接到GPIO_3焊盘(我相信是GPIO1_3 ...)
我在设备树中设置了 7325 和 gpio-keys,如下所示:
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 gpio-keys.20: Unable to get irq number for GPIO 242, error -6
我确实确定使用 P0 映射到 GPIO 240 的 /sys 接口,所以是的,GPIO 242 是我试图设置的 sw2 GPIO-KEY。
我想知道,这个驱动程序不能与设备树一起使用吗?我没有看到它试图获取任何设备树属性,但我查看的其他 IO 扩展器驱动程序也没有,所以我认为 I2C 内核可能正在读取设备树并应该以某种方式从那里填写 platform_data它调用驱动程序的探测函数(?)
我在这方面相当新,所以任何帮助将不胜感激。=)我确实在网上阅读了一些设备树文档,但我认为这是相当具体的事情,我没有正确地做,他们没有涵盖......(?)
我确实在内核中配置了 CONFIG_GPIO_MAX732X_IRQ ......我曾经尝试为 max7325 I2c1 节点设置中断控制器属性,但我不确定是否需要(?)