AM335x(TQ335x)学习笔记——GPIO按键驱动移植

时间:2016-11-28来源:网络
还是按照S5PV210的学习顺序来,我们首先解决按键问题。TQ335x有六个用户按键,分别是上、下、左、右、Enter和ESC。开始我想到的是跟学习S5PV210时一样,编写输入子系统驱动解决按键问题,但是浏览driver/input/keyboard目录时意外的发现了gpio-keys.c,大体上看下该驱动程序,其功能是实现了通用的gpio按键。再去看了下DTS,发现DTS中有对gpio-keys的引用,于是猜到,新的内核不需要自己编写输入子系统驱动,可以通过配置DTS直接解决按键问题。本人最终通过实验证实了这个猜想,下面是实验笔记及本人的一些理解。

(1)确定GPIO管脚

通过查看TQ335x的原理图可以看到,TQ335x的6个按键分别接在GPIO1的20~25管脚上,原理图如下:

(2)查看原有的dts配置

进行DTS文件修改之前可以阅读下内核相关文档,在Documentation/devicetree/目录下有很多关于devicetree的记载,其实,这些第一手的资料才是最具参考价值的资料。我还没来得及系统的阅读这些文档,急于实现功能,仅阅读了gpio-key和pinmux相关的部分就开始了修改工作,这是浮躁的表现,大家不要养成这种恶习啊!

通过仔细阅读原dts文件可以发现am335x-evm开发板上有个gpio矩阵键盘和gpio的音量+、音量-键,且矩阵键盘和音量键与TQ335x的按键管脚有冲突,因此,删除这两组配置并重新添加适应TQ335x按键的配置。修改后的DTS代码片段如下:

  1. gpio_keypad:gpio_keyad@0{
  2. compatible="gpio-keys";
  3. #address-cells=<1>;
  4. #size-cells=<0>;
  5. autorepeat;
  6. switch@1{
  7. label="up";
  8. linux,code=<103>;
  9. gpios=<&gpio120GPIO_ACTIVE_LOW>;
  10. gpio-key,wakeup;
  11. };
  12. switch@2{
  13. label="down";
  14. linux,code=<108>;
  15. gpios=<&gpio121GPIO_ACTIVE_LOW>;
  16. gpio-key,wakeup;
  17. };
  18. switch@3{
  19. label="left";
  20. linux,code=<105>;
  21. gpios=<&gpio122GPIO_ACTIVE_LOW>;
  22. gpio-key,wakeup;
  23. };
  24. switch@4{
  25. label="right";
  26. linux,code=<106>;
  27. gpios=<&gpio123GPIO_ACTIVE_LOW>;
  28. gpio-key,wakeup;
  29. };
  30. switch@5{
  31. label="enter";
  32. linux,code=<28>;
  33. gpios=<&gpio124GPIO_ACTIVE_LOW>;
  34. gpio-key,wakeup;
  35. };
  36. switch@6{
  37. label="esc";
  38. linux,code=<1>;
  39. gpios=<&gpio125GPIO_ACTIVE_LOW>;
  40. gpio-key,wakeup;
  41. };
  42. };
    1 2

    关键词: AM335x(Q335xGPIO按键驱

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版