在触摸屏Linux驱动程序上设置GPIO引脚

时间:2017-09-19 15:47:37

标签: linux kernel gpio drivers touchscreen

我需要指定EDT-FT5206显示的GPIO引脚,但我不知道从哪里开始。

我知道linux内核有一些针对此类屏幕的特定驱动程序,位于"/drivers/input/touchscreen/edt-ft5x06. c",可以通过modprobe命令调用;但我不知道如何指定从哪个引脚接收信息。

到目前为止,我已经能够收集一些文档,如屏幕数据表和一些有关驱动程序的信息,但我还没有做更多的事情。

我事先感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

在该驱动程序的最后,您可以看到设备树匹配表:

#ifdef CONFIG_OF
static const struct of_device_id edt_ft5x06_of_match[] = {
    { .compatible = "edt,edt-ft5206", .data = &edt_ft5x06_data },
    { .compatible = "edt,edt-ft5306", .data = &edt_ft5x06_data },
    { .compatible = "edt,edt-ft5406", .data = &edt_ft5x06_data },
    { .compatible = "edt,edt-ft5506", .data = &edt_ft5506_data },
    /* Note focaltech vendor prefix for compatibility with ft6236.c */
    { .compatible = "focaltech,ft6236", .data = &edt_ft6236_data },
    { /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, edt_ft5x06_of_match);
#endif

这样,您可以在电路板设备树中查找兼容属性,我以arch/arm/boot/dts/imx28tx.dts为例,其节点为:

polytouch: edt-ft5x06@38 {
        compatible = "edt,edt-ft5x06";
        reg = <0x38>;
        pinctrl-names = "default";
        pinctrl-0 = <&tx28_edt_ft5x06_pins>;
        interrupt-parent = <&gpio2>;
        interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
        reset-gpios = <&gpio2 6 GPIO_ACTIVE_LOW>;
        wake-gpios = <&gpio4 9 GPIO_ACTIVE_HIGH>;
        wakeup-source;
    };

这样,我们可以使用属性pinctrl-0中使用的引用来检查屏幕所使用的引脚:

 tx28_edt_ft5x06_pins: tx28-edt-ft5x06-pins@0 {
        reg = <0>;
        fsl,pinmux-ids = <
            MX28_PAD_SSP0_DATA6__GPIO_2_6 /* RESET */
            MX28_PAD_SSP0_DATA5__GPIO_2_5 /* IRQ */
            MX28_PAD_ENET0_RXD2__GPIO_4_9 /* WAKE */
        >;
        fsl,drive-strength = <MXS_DRIVE_4mA>;
        fsl,voltage = <MXS_VOLTAGE_HIGH>;
        fsl,pull-up = <MXS_PULL_DISABLE>;
    };

如果imx28tx不是您的电路板,则您必须在电路板设备树中编写此配置,或者使用电路板的GPIO制作用于触摸屏的DT覆盖。