文檔說明
本文檔以SC806-CN-00(8909平臺)爲例,結合實際的原理圖,說明矩陣鍵盤配置方法。
2. 原理圖
下面是一個鍵盤的原理圖,4*5的矩陣鍵盤,行號爲ROW0-3,列號爲COL0-4。
嗯,鍵盤圖畫的很漂亮。
3. 相關文檔
OK,我們開始看看相關的文檔:
kernel/Documentation/devicetree/bindings/input/gpio-matrix-keypad.txt
kernel/Documentation/devicetree/bindings/input/matrix-keymap.txt
打開gpio-matrix-keypad.txt:
把example這部分內容,原樣copy到 kernel/arch/arm/boot/dts/qcom/sc806-evk/msm8909-mtp.dtsi
修改:
debounce-delay-ms = <200>
col-scan-delay-us = <200>
上述兩個值,根據實際按鍵效果自行調整,避免誤判和錯判。
matrix-keymap.txt 對 linux,keymap做了解釋:
以某個值爲例:
4. 如何確定keymap
以原理圖的KEY8爲例,是由ROW3*COL0交叉而成,行號:0x03;列號:0x00
那麼鍵值是多少呢?
KEY8對應”←”功能鍵,查詢kernel/include/uapi/linux/input.h,裏面列出了所有鍵值。
到這裏,我們確定了KEY8的鍵值是105,換算成16進制0x69。
那麼KEY8在keymap中對應的值就是:0x03000069,鍵值不夠16bit高位用0補齊。
現在我們寫下里程碑的第一個keymap值:
linux,keymap = <0x03000069 //105 KEY_LEFT
用同樣的辦法,參考原理圖,計算出其他按鍵對應的keymap值。
keymap值的排列順序無所謂,可以按照個人喜好,只要和實際電路圖相符即可。
5. 確定行號列號對應的GPIO管腳
這一步很簡單,根據原理圖找出行和列對應的GPIO管腳,注意是GPIO號,不是模塊的管腳編號。
把上圖的信息整理並順序填入 kernel/arch/arm/boot/dts/qcom/sc806-evk/msm8909-mtp.dtsi
6. 打開編譯選項
在 kernel/arch/arm/configs/la0920_defconfig 和 kernel/arch/arm/configs/la0920_user_defconfig中增加編譯選項:
CONFIG_KEYBOARD_MATRIX=y
本文檔所涉及的修改點,見下面百度鏈接:
鏈接:https://pan.baidu.com/s/1w8muLo29SpTUDR4oLFXi1Q
提取碼:9w4n