【OK210试用体验】4.1 Linux下驱动的编写---按键测试篇 - 在线问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【OK210试用体验】4.1 Linux下驱动的编写---按键测试篇

中科院 ( 楼主 ) 2015-9-19 13:47:50  显示全部楼层
本帖最后由 中科院 于 2015-9-19 13:49 编辑

之前在裸机部分记录了关于LED,USART,PWM方面的驱动程序编写过程,接下来要讨论一下在Linux系统下写按键测试程序的一个流程,先上按键的原理图部分:
QQ截图20150919113408.png

接核心板的部分:

QQ截图20150919115524.png

如果按键没按下就是高电平,按照检测电平来判断按键状态
由于篇幅限制,只能先把驱动部分寄存器的定义部分放上来
  1. #ifndef __ASM_ARCH_REGS_GPIO_H
  2. #define __ASM_ARCH_REGS_GPIO_H __FILE__

  3. #include


  4. /* Base addresses for each of the banks */

  5. #define S5PV210_GPA0_BASE                (S5P_VA_GPIO + 0x000)
  6. #define S5PV210_GPA1_BASE                (S5P_VA_GPIO + 0x020)
  7. #define S5PV210_GPB_BASE                 (S5P_VA_GPIO + 0x040)
  8. #define S5PV210_GPC0_BASE                (S5P_VA_GPIO + 0x060)
  9. #define S5PV210_GPC1_BASE                (S5P_VA_GPIO + 0x080)
  10. #define S5PV210_GPD0_BASE                (S5P_VA_GPIO + 0x0A0)
  11. #define S5PV210_GPD1_BASE                (S5P_VA_GPIO + 0x0C0)
  12. #define S5PV210_GPE0_BASE                (S5P_VA_GPIO + 0x0E0)
  13. #define S5PV210_GPE1_BASE                (S5P_VA_GPIO + 0x100)
  14. #define S5PV210_GPF0_BASE                (S5P_VA_GPIO + 0x120)
  15. #define S5PV210_GPF1_BASE                (S5P_VA_GPIO + 0x140)
  16. #define S5PV210_GPF2_BASE                (S5P_VA_GPIO + 0x160)
  17. #define S5PV210_GPF3_BASE                (S5P_VA_GPIO + 0x180)
  18. #define S5PV210_GPG0_BASE                (S5P_VA_GPIO + 0x1A0)
  19. #define S5PV210_GPG1_BASE                (S5P_VA_GPIO + 0x1C0)
  20. #define S5PV210_GPG2_BASE                (S5P_VA_GPIO + 0x1E0)
  21. #define S5PV210_GPG3_BASE                (S5P_VA_GPIO + 0x200)
  22. #define S5PV210_GPH0_BASE                (S5P_VA_GPIO + 0xC00)
  23. #define S5PV210_GPH1_BASE                (S5P_VA_GPIO + 0xC20)
  24. #define S5PV210_GPH2_BASE                (S5P_VA_GPIO + 0xC40)
  25. #define S5PV210_GPH3_BASE                (S5P_VA_GPIO + 0xC60)
  26. #define S5PV210_GPI_BASE                 (S5P_VA_GPIO + 0x220)
  27. #define S5PV210_GPJ0_BASE                (S5P_VA_GPIO + 0x240)
  28. #define S5PV210_GPJ1_BASE                (S5P_VA_GPIO + 0x260)
  29. #define S5PV210_GPJ2_BASE                (S5P_VA_GPIO + 0x280)
  30. #define S5PV210_GPJ3_BASE                (S5P_VA_GPIO + 0x2A0)
  31. #define S5PV210_GPJ4_BASE                (S5P_VA_GPIO + 0x2C0)
  32. #define S5PV210_MP01_BASE                (S5P_VA_GPIO + 0x2E0)
  33. #define S5PV210_MP02_BASE                (S5P_VA_GPIO + 0x300)
  34. #define S5PV210_MP03_BASE                (S5P_VA_GPIO + 0x320)
  35. #define S5PV210_MP04_BASE                (S5P_VA_GPIO + 0x340)
  36. #define S5PV210_MP05_BASE                (S5P_VA_GPIO + 0x360)
  37. #define S5PV210_MP06_BASE                (S5P_VA_GPIO + 0x380)
  38. #define S5PV210_MP07_BASE                (S5P_VA_GPIO + 0x3A0)
  39. #define S5PV210_MP10_BASE                (S5P_VA_GPIO + 0x3C0)
  40. #define S5PV210_MP11_BASE                (S5P_VA_GPIO + 0x3E0)
  41. #define S5PV210_MP12_BASE                (S5P_VA_GPIO + 0x400)
  42. #define S5PV210_MP13_BASE                (S5P_VA_GPIO + 0x420)
  43. #define S5PV210_MP14_BASE                (S5P_VA_GPIO + 0x440)
  44. #define S5PV210_MP15_BASE                (S5P_VA_GPIO + 0x460)
  45. #define S5PV210_MP16_BASE                (S5P_VA_GPIO + 0x480)
  46. #define S5PV210_MP17_BASE                (S5P_VA_GPIO + 0x4A0)
  47. #define S5PV210_MP18_BASE                (S5P_VA_GPIO + 0x4C0)
  48. #define S5PV210_MP20_BASE                (S5P_VA_GPIO + 0x4E0)
  49. #define S5PV210_MP21_BASE                (S5P_VA_GPIO + 0x500)
  50. #define S5PV210_MP22_BASE                (S5P_VA_GPIO + 0x520)
  51. #define S5PV210_MP23_BASE                (S5P_VA_GPIO + 0x540)
  52. #define S5PV210_MP24_BASE                (S5P_VA_GPIO + 0x560)
  53. #define S5PV210_MP25_BASE                (S5P_VA_GPIO + 0x580)
  54. #define S5PV210_MP26_BASE                (S5P_VA_GPIO + 0x5A0)
  55. #define S5PV210_MP27_BASE                (S5P_VA_GPIO + 0x5C0)
  56. #define S5PV210_MP28_BASE                (S5P_VA_GPIO + 0x5E0)
  57. #define S5PV210_ETC0_BASE                (S5P_VA_GPIO + 0x600)
  58. #define S5PV210_ETC1_BASE                (S5P_VA_GPIO + 0x620)
  59. #define S5PV210_ETC2_BASE                (S5P_VA_GPIO + 0x640)
  60. #define S5PV210_ETC4_BASE                (S5P_VA_GPIO + 0x660)

  61. #define S5PV210_MP01CON                        (S5PV210_MP01_BASE + 0x00)
  62. #define S5PV210_MP01DAT                        (S5PV210_MP01_BASE + 0x04)
  63. #define S5PV210_MP01PUD                        (S5PV210_MP01_BASE + 0x08)
  64. #define S5PV210_MP01DRV                        (S5PV210_MP01_BASE + 0x0c)
  65. #define S5PV210_MP01CONPDN                (S5PV210_MP01_BASE + 0x10)
  66. #define S5PV210_MP01PUDPDN                (S5PV210_MP01_BASE + 0x14)

  67. #define S5PV210_GPH1DRV                        (S5PV210_GPH1_BASE + 0x0c)

  68. #define S5PV210_GPA0_INT_CON                (S5P_VA_GPIO + 0x700)
  69. #define S5PV210_GPA0_INT_FLTCON0                (S5P_VA_GPIO + 0x800)
  70. #define S5PV210_GPA0_INT_FLTCON1                (S5P_VA_GPIO + 0x804)
  71. #define S5PV210_GPA0_INT_MASK                (S5P_VA_GPIO + 0x900)
  72. #define S5PV210_GPA0_INT_PEND                (S5P_VA_GPIO + 0xA00)
  73. #define S5PV210_GPA0_INT_FIXPRI                (S5P_VA_GPIO + 0xB14)

  74. #define S5PV210_GPA1_INT_CON                (S5P_VA_GPIO + 0x704)
  75. #define S5PV210_GPA1_INT_FLTCON0                (S5P_VA_GPIO + 0x808)
  76. #define S5PV210_GPA1_INT_FLTCON1                (S5P_VA_GPIO + 0x80C)
  77. #define S5PV210_GPA1_INT_MASK                (S5P_VA_GPIO + 0x904)
  78. #define S5PV210_GPA1_INT_PEND                (S5P_VA_GPIO + 0xA04)
  79. #define S5PV210_GPA1_INT_FIXPRI                (S5P_VA_GPIO + 0xB18)

  80. #define S5PV210_GPB_INT_CON                (S5P_VA_GPIO + 0x708)
  81. #define S5PV210_GPB_INT_FLTCON0                (S5P_VA_GPIO + 0x810)
  82. #define S5PV210_GPB_INT_FLTCON1                (S5P_VA_GPIO + 0x814)
  83. #define S5PV210_GPB_INT_MASK                (S5P_VA_GPIO + 0x908)
  84. #define S5PV210_GPB_INT_PEND                (S5P_VA_GPIO + 0xA08)
  85. #define S5PV210_GPB_INT_FIXPRI                (S5P_VA_GPIO + 0xB1C)

  86. #define S5PV210_GPC0_INT_CON                (S5P_VA_GPIO + 0x70C)
  87. #define S5PV210_GPC0_INT_FLTCON0                (S5P_VA_GPIO + 0x818)
  88. #define S5PV210_GPC0_INT_FLTCON1                (S5P_VA_GPIO + 0x81C)
  89. #define S5PV210_GPC0_INT_MASK                (S5P_VA_GPIO + 0x90C)
  90. #define S5PV210_GPC0_INT_PEND                (S5P_VA_GPIO + 0xA0C)
  91. #define S5PV210_GPC0_INT_FIXPRI                (S5P_VA_GPIO + 0xB20)

  92. #define S5PV210_GPC1_INT_CON                (S5P_VA_GPIO + 0x710)
  93. #define S5PV210_GPC1_INT_FLTCON0                (S5P_VA_GPIO + 0x820)
  94. #define S5PV210_GPC1_INT_FLTCON1                (S5P_VA_GPIO + 0x824)
  95. #define S5PV210_GPC1_INT_MASK                (S5P_VA_GPIO + 0x910)
  96. #define S5PV210_GPC1_INT_PEND                (S5P_VA_GPIO + 0xA10)
  97. #define S5PV210_GPC1_INT_FIXPRI                (S5P_VA_GPIO + 0xB24)

  98. #define S5PV210_GPD0_INT_CON                (S5P_VA_GPIO + 0x714)
  99. #define S5PV210_GPD0_INT_FLTCON0                (S5P_VA_GPIO + 0x828)
  100. #define S5PV210_GPD0_INT_FLTCON1                (S5P_VA_GPIO + 0x82C)
  101. #define S5PV210_GPD0_INT_MASK                (S5P_VA_GPIO + 0x914)
  102. #define S5PV210_GPD0_INT_PEND                (S5P_VA_GPIO + 0xA14)
  103. #define S5PV210_GPD0_INT_FIXPRI                (S5P_VA_GPIO + 0xB28)

  104. #define S5PV210_GPD1_INT_CON                (S5P_VA_GPIO + 0x718)
  105. #define S5PV210_GPD1_INT_FLTCON0                (S5P_VA_GPIO + 0x830)
  106. #define S5PV210_GPD1_INT_FLTCON1                (S5P_VA_GPIO + 0x834)
  107. #define S5PV210_GPD1_INT_MASK                (S5P_VA_GPIO + 0x918)
  108. #define S5PV210_GPD1_INT_PEND                (S5P_VA_GPIO + 0xA18)
  109. #define S5PV210_GPD1_INT_FIXPRI                (S5P_VA_GPIO + 0xB2C)

  110. #define S5PV210_GPE0_INT_CON                (S5P_VA_GPIO + 0x71C)
  111. #define S5PV210_GPE0_INT_FLTCON0                (S5P_VA_GPIO + 0x838)
  112. #define S5PV210_GPE0_INT_FLTCON1                (S5P_VA_GPIO + 0x83C)
  113. #define S5PV210_GPE0_INT_MASK                (S5P_VA_GPIO + 0x91C)
  114. #define S5PV210_GPE0_INT_PEND                (S5P_VA_GPIO + 0xA1C)
  115. #define S5PV210_GPE0_INT_FIXPRI                (S5P_VA_GPIO + 0xB30)

  116. #define S5PV210_GPE1_INT_CON                (S5P_VA_GPIO + 0x720)
  117. #define S5PV210_GPE1_INT_FLTCON0                (S5P_VA_GPIO + 0x840)
  118. #define S5PV210_GPE1_INT_FLTCON1                (S5P_VA_GPIO + 0x844)
  119. #define S5PV210_GPE1_INT_MASK                (S5P_VA_GPIO + 0x920)
  120. #define S5PV210_GPE1_INT_PEND                (S5P_VA_GPIO + 0xA20)
  121. #define S5PV210_GPE1_INT_FIXPRI                (S5P_VA_GPIO + 0xB34)

  122. #define S5PV210_GPF0_INT_CON                (S5P_VA_GPIO + 0x724)
  123. #define S5PV210_GPF0_INT_FLTCON0                (S5P_VA_GPIO + 0x848)
  124. #define S5PV210_GPF0_INT_FLTCON1                (S5P_VA_GPIO + 0x84C)
  125. #define S5PV210_GPF0_INT_MASK                (S5P_VA_GPIO + 0x924)
  126. #define S5PV210_GPF0_INT_PEND                (S5P_VA_GPIO + 0xA24)
  127. #define S5PV210_GPF0_INT_FIXPRI                (S5P_VA_GPIO + 0xB38)

  128. #define S5PV210_GPF1_INT_CON                (S5P_VA_GPIO + 0x728)
  129. #define S5PV210_GPF1_INT_FLTCON0                (S5P_VA_GPIO + 0x850)
  130. #define S5PV210_GPF1_INT_FLTCON1                (S5P_VA_GPIO + 0x854)
  131. #define S5PV210_GPF1_INT_MASK                (S5P_VA_GPIO + 0x928)
  132. #define S5PV210_GPF1_INT_PEND                (S5P_VA_GPIO + 0xA28)
  133. #define S5PV210_GPF1_INT_FIXPRI                (S5P_VA_GPIO + 0xB3C)

  134. #define S5PV210_GPF2_INT_CON                (S5P_VA_GPIO + 0x72C)
  135. #define S5PV210_GPF2_INT_FLTCON0                (S5P_VA_GPIO + 0x858)
  136. #define S5PV210_GPF2_INT_FLTCON1                (S5P_VA_GPIO + 0x85C)
  137. #define S5PV210_GPF2_INT_MASK                (S5P_VA_GPIO + 0x92C)
  138. #define S5PV210_GPF2_INT_PEND                (S5P_VA_GPIO + 0xA2C)
  139. #define S5PV210_GPF2_INT_FIXPRI                (S5P_VA_GPIO + 0xB40)

  140. #define S5PV210_GPF3_INT_CON                (S5P_VA_GPIO + 0x730)
  141. #define S5PV210_GPF3_INT_FLTCON0                (S5P_VA_GPIO + 0x860)
  142. #define S5PV210_GPF3_INT_FLTCON1                (S5P_VA_GPIO + 0x864)
  143. #define S5PV210_GPF3_INT_MASK                (S5P_VA_GPIO + 0x930)
  144. #define S5PV210_GPF3_INT_PEND                (S5P_VA_GPIO + 0xA30)
  145. #define S5PV210_GPF3_INT_FIXPRI                (S5P_VA_GPIO + 0xB44)

  146. #define S5PV210_GPG0_INT_CON                (S5P_VA_GPIO + 0x734)
  147. #define S5PV210_GPG0_INT_FLTCON0                (S5P_VA_GPIO + 0x868)
  148. #define S5PV210_GPG0_INT_FLTCON1                (S5P_VA_GPIO + 0x86C)
  149. #define S5PV210_GPG0_INT_MASK                (S5P_VA_GPIO + 0x934)
  150. #define S5PV210_GPG0_INT_PEND                (S5P_VA_GPIO + 0xA34)
  151. #define S5PV210_GPG0_INT_FIXPRI                (S5P_VA_GPIO + 0xB48)

  152. #define S5PV210_GPG1_INT_CON                (S5P_VA_GPIO + 0x738)
  153. #define S5PV210_GPG1_INT_FLTCON0                (S5P_VA_GPIO + 0x870)
  154. #define S5PV210_GPG1_INT_FLTCON1                (S5P_VA_GPIO + 0x874)
  155. #define S5PV210_GPG1_INT_MASK                (S5P_VA_GPIO + 0x938)
  156. #define S5PV210_GPG1_INT_PEND                (S5P_VA_GPIO + 0xA38)
  157. #define S5PV210_GPG1_INT_FIXPRI                (S5P_VA_GPIO + 0xB4C)

  158. #define S5PV210_GPG2_INT_CON                (S5P_VA_GPIO + 0x73C)
  159. #define S5PV210_GPG2_INT_FLTCON0                (S5P_VA_GPIO + 0x878)
  160. #define S5PV210_GPG2_INT_FLTCON1                (S5P_VA_GPIO + 0x87C)
  161. #define S5PV210_GPG2_INT_MASK                (S5P_VA_GPIO + 0x93C)
  162. #define S5PV210_GPG2_INT_PEND                (S5P_VA_GPIO + 0xA3C)
  163. #define S5PV210_GPG2_INT_FIXPRI                (S5P_VA_GPIO + 0xB50)

  164. #define S5PV210_GPG3_INT_CON                (S5P_VA_GPIO + 0x740)
  165. #define S5PV210_GPG3_INT_FLTCON0                (S5P_VA_GPIO + 0x880)
  166. #define S5PV210_GPG3_INT_FLTCON1                (S5P_VA_GPIO + 0x884)
  167. #define S5PV210_GPG3_INT_MASK                (S5P_VA_GPIO + 0x940)
  168. #define S5PV210_GPG3_INT_PEND                (S5P_VA_GPIO + 0xA40)
  169. #define S5PV210_GPG3_INT_FIXPRI                (S5P_VA_GPIO + 0xB54)

  170. #define S5PV210_GPJ0_INT_CON                (S5P_VA_GPIO + 0x744)
  171. #define S5PV210_GPJ0_INT_FLTCON0                (S5P_VA_GPIO + 0x888)
  172. #define S5PV210_GPJ0_INT_FLTCON1                (S5P_VA_GPIO + 0x88C)
  173. #define S5PV210_GPJ0_INT_MASK                (S5P_VA_GPIO + 0x944)
  174. #define S5PV210_GPJ0_INT_PEND                (S5P_VA_GPIO + 0xA44)
  175. #define S5PV210_GPJ0_INT_FIXPRI                (S5P_VA_GPIO + 0xB58)

  176. #define S5PV210_GPJ1_INT_CON                (S5P_VA_GPIO + 0x748)
  177. #define S5PV210_GPJ1_INT_FLTCON0                (S5P_VA_GPIO + 0x890)
  178. #define S5PV210_GPJ1_INT_FLTCON1                (S5P_VA_GPIO + 0x894)
  179. #define S5PV210_GPJ1_INT_MASK                (S5P_VA_GPIO + 0x948)
  180. #define S5PV210_GPJ1_INT_PEND                (S5P_VA_GPIO + 0xA48)
  181. #define S5PV210_GPJ1_INT_FIXPRI                (S5P_VA_GPIO + 0xB5C)

  182. #define S5PV210_GPJ2_INT_CON                (S5P_VA_GPIO + 0x74C)
  183. #define S5PV210_GPJ2_INT_FLTCON0                (S5P_VA_GPIO + 0x898)
  184. #define S5PV210_GPJ2_INT_FLTCON1                (S5P_VA_GPIO + 0x89C)
  185. #define S5PV210_GPJ2_INT_MASK                (S5P_VA_GPIO + 0x94C)
  186. #define S5PV210_GPJ2_INT_PEND                (S5P_VA_GPIO + 0xA4C)
  187. #define S5PV210_GPJ2_INT_FIXPRI                (S5P_VA_GPIO + 0xB60)

  188. #define S5PV210_GPJ3_INT_CON                (S5P_VA_GPIO + 0x750)
  189. #define S5PV210_GPJ3_INT_FLTCON0                (S5P_VA_GPIO + 0x8A0)
  190. #define S5PV210_GPJ3_INT_FLTCON1                (S5P_VA_GPIO + 0x8A4)
  191. #define S5PV210_GPJ3_INT_MASK                (S5P_VA_GPIO + 0x950)
  192. #define S5PV210_GPJ3_INT_PEND                (S5P_VA_GPIO + 0xA50)
  193. #define S5PV210_GPJ3_INT_FIXPRI                (S5P_VA_GPIO + 0xB64)

  194. #define S5PV210_GPJ4_INT_CON                (S5P_VA_GPIO + 0x754)
  195. #define S5PV210_GPJ4_INT_FLTCON0                (S5P_VA_GPIO + 0x8A8)
  196. #define S5PV210_GPJ4_INT_FLTCON1                (S5P_VA_GPIO + 0x8AC)
  197. #define S5PV210_GPJ4_INT_MASK                (S5P_VA_GPIO + 0x954)
  198. #define S5PV210_GPJ4_INT_PEND                (S5P_VA_GPIO + 0xA54)
  199. #define S5PV210_GPJ4_INT_FIXPRI                (S5P_VA_GPIO + 0xB68)

  200. #define S5PV210_EXT_INT_GRPPRI                (S5P_VA_GPIO + 0xB00)
  201. #define S5PV210_EXT_INT_PRIO                (S5P_VA_GPIO + 0xB04)
  202. #define S5PV210_EXT_INT_SVC                (S5P_VA_GPIO + 0xB08)
  203. #define S5PV210_EXT_INT_SVC_PND                (S5P_VA_GPIO + 0xB0C)
  204. #define S5PV210_EXT_INT_GRPFIXPRI        (S5P_VA_GPIO + 0xB10)

  205. #define S5PV210_EINT30CON                (S5P_VA_GPIO + 0xE00)
  206. #define S5P_EINT_CON(x)                        (S5PV210_EINT30CON + ((x) * 0x4))

  207. #define S5PV210_EINT30FLTCON0                (S5P_VA_GPIO + 0xE80)
  208. #define S5P_EINT_FLTCON(x,y)                (S5PV210_EINT30FLTCON0 + ((x) * 0x8) + ((y) * 0x4))

  209. #define S5PV210_EINT30MASK                (S5P_VA_GPIO + 0xF00)
  210. #define S5P_EINT_MASK(x)                (S5PV210_EINT30MASK + ((x) * 0x4))

  211. #define S5PV210_EINT30PEND                (S5P_VA_GPIO + 0xF40)
  212. #define S5P_EINT_PEND(x)                (S5PV210_EINT30PEND + ((x) * 0x4))

  213. #define EINT_REG_NR(x)                        (EINT_OFFSET(x) >> 3)

  214. #define eint_offset(irq)                ((irq) < IRQ_EINT16_31 ? ((irq)-IRQ_EINT0)
  215.                                                 : (irq-S5P_IRQ_EINT_BASE))

  216. #define eint_irq_to_bit(irq)                (1 << (EINT_OFFSET(irq) & 0x7))

  217. #define eint_conf_reg(irq)                ((eint_offset(irq)) >> 3)
  218. #define eint_filt_reg(irq)                ((eint_offset(irq)) >> 2)
  219. #define eint_mask_reg(irq)                ((eint_offset(irq)) >> 3)
  220. #define eint_pend_reg(irq)                ((eint_offset(irq)) >> 3)

  221. /* values for S5P_EXtiNT0 */
  222. #define S5P_EXTINT_LOWLEV                (0x00)
  223. #define S5P_EXTINT_HILEV                (0x01)
  224. #define S5P_EXTINT_FALLEDGE                (0x02)
  225. #define S5P_EXTINT_RISEEDGE                (0x03)
  226. #define S5P_EXTINT_BOTHEDGE                (0x04)

  227. #define EINT_MODE                S3C_GPIO_SFN(0xf)

  228. #define EINT_GPIO_0(x)                S5PV210_GPH0(x)
  229. #define EINT_GPIO_1(x)                S5PV210_GPH1(x)
  230. #define EINT_GPIO_2(x)                S5PV210_GPH2(x)
  231. #define EINT_GPIO_3(x)                S5PV210_GPH3(x)

  232. #endif /* __ASM_ARCH_REGS_GPIO_H */
复制代码





6个回复

中科院 发表于 2015-9-19 14:04:57
本帖最后由 中科院 于 2015-9-19 14:08 编辑
  1. {
  2.                 .gpio                = S5PV210_GPH0(0),//k1
  3.                 .code                = 103,//158,
  4.                 .desc                = "BACK",
  5.                 .active_low        = 1,
  6.                 .wakeup                = 1,
  7.         },
  8.         {
  9.                 .gpio                = S5PV210_GPH0(1),//k2
  10.                 .code                = 108,//107,
  11.                 .desc                = "HOME",
  12.                 .active_low        = 1,
  13.                 .wakeup                = 1,
  14.         },               
  15.         {
  16.                 .gpio                = S5PV210_GPH0(2),//k3
  17.                 .code                = 105,//102,
  18.                 .desc                = "MENU",        
  19.                 .active_low        = 1,
  20.                 .wakeup                = 1,
  21.         },
  22.         {
  23.                 .gpio                = S5PV210_GPH0(3),//k4
  24.                 .code                = 106,
  25.                 .desc                = "POWER",        
  26.                 .active_low        = 1,
  27.                 .wakeup                = 1,
  28.         },
  29.         {
  30.                 .gpio                = S5PV210_GPH0(4),//k5
  31.                 .code                = 28,
  32.                 .desc                = "SEARCH",        
  33.                 .active_low        = 1,
  34.                 .wakeup                = 1,
  35.         },
复制代码
中科院 发表于 2015-9-19 14:09:00
  1. static struct platform_device s3c_device_gpio_button = {
  2.         .name                = "gpio-keys",
  3.         .id                = -1,
  4.         .num_resources        = 0,
  5.         .dev                = {
  6.                 .platform_data        = &gpio_button_data,
  7.         }
  8. };
复制代码
中科院 发表于 2015-9-19 14:09:45
  1. static struct gpio_keys_platform_data gpio_button_data = {
  2.         .buttons        = gpio_buttons,
  3.         .nbuttons        = ARRAY_SIZE(gpio_buttons),
  4. };
复制代码
中科院 发表于 2015-9-19 14:10:15

其中

n   gpio是连接按键的IO管脚。

n   code是这个按键上报的键值, 在input.h中定义。

n   desc是按键的name。

n   active_low为1是表示低电平触发。
中科院 发表于 2015-9-19 14:14:09
  1. static struct platform_device *smdkc110_devices[] __initdata = {
  2. #ifdef CONFIG_FIQ_DEBUGGER
  3.         &s5pv210_device_fiqdbg_uart2,
  4. #endif
  5. #ifdef CONFIG_MTD_ONENAND
  6.         &s5pc110_device_onenand,
  7. #endif
  8. #ifdef CONFIG_MTD_NAND
  9.         &s3c_device_nand,
  10. #endif
  11.         &s5p_device_rtc,
  12. #ifdef CONFIG_SND_S3C64XX_SOC_I2S_V4
  13.         &s5pv210_device_iis0,
  14. #endif
  15. #ifdef CONFIG_SND_S3C_SOC_AC97
  16.         &s5pv210_device_ac97,
  17. #endif
  18. #ifdef CONFIG_SND_S3C_SOC_PCM
  19.         &s5pv210_device_pcm0,
  20. #endif
  21. #ifdef CONFIG_SND_SOC_SPDIF
  22.         &s5pv210_device_spdif,
  23. #endif
  24.         &s3c_device_wdt,

  25. #ifdef CONFIG_FB_S3C
  26.         &s3c_device_fb,
  27. #endif
  28. #ifdef CONFIG_DM9000
  29.         &s5p_device_dm9000,
  30. #endif

  31. #ifdef CONFIG_VIDEO_MFC50
  32.         &s3c_device_mfc,
  33. #endif
  34. #ifdef CONFIG_TOUCHSCREEN_S3C
  35.         &s3c_device_ts,
  36. #endif
  37.         &s3c_device_keypad,
  38. #ifdef CONFIG_S5P_ADC
  39.         &s3c_device_adc,
  40. #endif
  41. #ifdef CONFIG_VIDEO_FIMC
  42.         &s3c_device_fimc0,
  43.         &s3c_device_fimc1,
  44.         &s3c_device_fimc2,
  45. #endif
  46. #ifdef CONFIG_VIDEO_FIMC_MIPI
  47.         &s3c_device_csis,
  48. #endif
  49. #ifdef CONFIG_VIDEO_JPEG_V2
  50.         &s3c_device_jpeg,
  51. #endif
  52. #ifdef CONFIG_VIDEO_G2D
  53.         &s3c_device_g2d,
  54. #endif
  55. #ifdef CONFIG_VIDEO_TV20
  56.         &s5p_device_tvout,
  57.         &s5p_device_cec,
  58.         &s5p_device_hpd,
  59. #endif

  60.         &s3c_device_g3d,
  61.         &s3c_device_lcd,

  62.         &s3c_device_i2c0,
  63. #ifdef CONFIG_S3C_DEV_I2C1
  64.         &s3c_device_i2c1,
  65. #endif
  66. #ifdef CONFIG_S3C_DEV_I2C2
  67.         &s3c_device_i2c2,
  68. #endif

  69. #ifdef CONFIG_USB_EHCI_HCD
  70.         &s3c_device_u***_ehci,
  71. #endif
  72. #ifdef CONFIG_USB_OHCI_HCD
  73.         &s3c_device_u***_ohci,
  74. #endif

  75. #ifdef CONFIG_USB_GADGET
  76.         &s3c_device_u***gadget,
  77. #endif
  78. #ifdef CONFIG_USB_ANDROID
  79.         &s3c_device_android_u***,
  80. #ifdef CONFIG_USB_ANDROID_MASS_STORAGE
  81.         &s3c_device_u***_mass_storage,
  82. #endif
  83. #ifdef CONFIG_USB_ANDROID_RNDIS
  84.         &s3c_device_rndis,
  85. #endif
  86. #endif
  87. #ifdef CONFIG_BATTERY_S3C
  88.         &sec_device_battery,
  89. #endif
  90. #ifdef CONFIG_S3C_DEV_HSMMC
  91.         &s3c_device_hsmmc0,
  92. #endif
  93. #ifdef CONFIG_S3C_DEV_HSMMC1
  94.         &s3c_device_hsmmc1,
  95. #endif
  96. #ifdef CONFIG_S3C_DEV_HSMMC2
  97.         &s3c_device_hsmmc2,
  98. #endif
  99. #ifdef CONFIG_S3C_DEV_HSMMC3
  100.         &s3c_device_hsmmc3,
  101. #endif

  102. #ifdef CONFIG_S3C64XX_DEV_SPI
  103.         &s5pv210_device_spi0,
  104.         &s5pv210_device_spi1,
  105. #endif
  106. #ifdef CONFIG_S5PV210_POWER_DOMAIN
  107.         &s5pv210_pd_audio,
  108.         &s5pv210_pd_cam,
  109.         &s5pv210_pd_tv,
  110.         &s5pv210_pd_lcd,
  111.         &s5pv210_pd_g3d,
  112.         &s5pv210_pd_mfc,
  113. #endif

  114. #ifdef CONFIG_HAVE_PWM
  115.         &s3c_device_timer[0],
  116.         &s3c_device_timer[1],
  117.         &s3c_device_timer[2],
  118.         &s3c_device_timer[3],
  119. #endif
  120. #ifdef CONFIG_KEYBOARD_S3C_GPIO
  121.         &s3c_device_gpio_button,
  122. #endif
  123. };
复制代码
中科院 发表于 2015-9-21 15:34:05
【OK210试用体验】4.1 Linux下驱动的编写---按键测试篇 中有些小问题,看看大家谁可以发现,请告诉我。
您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-3-29 12:35 , Processed in 0.629154 second(s), Total 65, Slave 45 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表