【发布时间】:2014-10-31 03:23:52
【问题描述】:
我正在使用飞思卡尔 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 节点设置中断控制器属性,但我不确定是否需要(?)
【问题讨论】:
标签: linux-device-driver gpio device-tree max732x.c