之前在Linux3.0.35内核移植过按键的信息,请点击链接查看:3.0.35内核移植

本篇文章记录在IMX6开发板移植4.1.15内核时,添加矩阵按键的设备树信息。

1、具体添加的设备树信息

下面是我们的开发板中按键与核心板的引脚链接情况:

具体的驱动程序的分析可以查看之前移植3.0.35内核时的相关分析:点击查看

本次主要修改imx6qdl-sabresd.dtsi文件,该文件是与具体外设相关的文件

在imx6qdl-sabresd.dtsi文件的最后加上keypad设备树信息

&kpp {
    // keypad
    compatible = "fsl,imx6qdl-kpp", "fsl,imx21-kpp";
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_kpp>;
    clocks = <&clks IMX6QDL_CLK_DUMMY>;
    linux,keymap = <
             MATRIX_KEY(0x0, 0x0, KEY_UP)
             MATRIX_KEY(0x0, 0x1, KEY_F9)
             MATRIX_KEY(0x0, 0x2, KEY_F3)
             MATRIX_KEY(0x0, 0x4, KEY_DOWN)
             MATRIX_KEY(0x0, 0x5, KEY_PRINT)
             MATRIX_KEY(0x1, 0x0, KEY_RIGHT)
             MATRIX_KEY(0x1, 0x1, KEY_F8)
             MATRIX_KEY(0x1, 0x2, KEY_F4)
             MATRIX_KEY(0x1, 0x4, KEY_HOME)
             MATRIX_KEY(0x1, 0x5, KEY_PAGEDOWN)
             MATRIX_KEY(0x2, 0x0, KEY_F12)
             MATRIX_KEY(0x2, 0x1, KEY_F7)
             MATRIX_KEY(0x2, 0x2, KEY_F5)
             MATRIX_KEY(0x2, 0x4, KEY_END)
             MATRIX_KEY(0x2, 0x5, KEY_PAGEUP)
             MATRIX_KEY(0x4, 0x0, KEY_F11)
             MATRIX_KEY(0x4, 0x1, KEY_F1)
             MATRIX_KEY(0x4, 0x2, KEY_F6)
             MATRIX_KEY(0x4, 0x4, KEY_NUMLOCK)
             MATRIX_KEY(0x4, 0x5, KEY_ESC)
             MATRIX_KEY(0x5, 0x0, KEY_F10)
             MATRIX_KEY(0x5, 0x1, KEY_F2)
             MATRIX_KEY(0x5, 0x2, KEY_LEFT)
             MATRIX_KEY(0x5, 0x4, KEY_SCROLLLOCK)
             MATRIX_KEY(0x5, 0x5, KEY_PAUSE)
     >;
     status = "okay";
};

在iomuxc节点下的imx6qdl-sabresd节点下:

&iomuxc {
		pinctrl-names = "default";
       	pinctrl-0 = <&pinctrl_hog>;
		imx6qdl-sabresd {
				。。。。。。
				。。。。。。
			pinctrl_kpp:kpp_grp_1{
               fsl,pins = <                               
                 MX6QDL_PAD_KEY_COL0__KEY_COL0            0x80000000
                 MX6QDL_PAD_KEY_ROW0__KEY_ROW0            0x80000000
                 MX6QDL_PAD_KEY_COL1__KEY_COL1            0x80000000
                 MX6QDL_PAD_KEY_ROW1__KEY_ROW1            0x80000000
                 MX6QDL_PAD_KEY_COL2__KEY_COL2            0x80000000
                 MX6QDL_PAD_KEY_ROW2__KEY_ROW2            0x80000000
                 MX6QDL_PAD_KEY_COL4__KEY_COL4            0x80000000
                 MX6QDL_PAD_KEY_ROW4__KEY_ROW4            0x80000000
                 MX6QDL_PAD_CSI0_DAT4__KEY_COL5           0x80000000
                 MX6QDL_PAD_CSI0_DAT5__KEY_ROW5           0x80000000
                        >;
               };
         };
};

同样跟移植3.0.35内核一样,注意将引脚复用去掉,否则无法正常使用按键。

2、测试

重新编译内核后,烧写到开发板,然后测试按键是否可以正常使用:

首先在板子启动后,在板子的终端输入;

$ cat /proc/bus/input/devices

查看当前的设备,找到我们的按键设备,假设为evet0。

则在终端中输入

$ hexdump /dev/input/event0

所有按键都按一遍,会发现终端中打印了按键的值(显示的内容好像是某一种编码,不知道怎么转换为按键的值)

3、总结

设备树的出现,使内核的代码量变得精简的同时,也使得外设驱动的移植变得更加简单。

学习探讨加:
qq:1126137994
微信:liu1126137994