按键驱动源码在kernel/arch/arm/mach-s5pv210/button-smdkv210.c中,源码很简单,
在s3c_button_probe函数中设置相关按键的寄存器,再开启定时器定时扫描。在定时器中断
函数s3cbutton_timer_handler中判断相应IO口的电平,达到监控按键的作用。
值得注意的是,当我们需要修改按键的功能时,需要和android层的按键匹配起来,具体通过
数组s3c_Keycode的定义以及按键配置表实现,驱动中定义如下:
static int s3c_Keycode[MAX_BUTTON_CNT] = {KEY_POWER, KEY_BACK, KEY_VOLUMEUP, KEY_VOLUMEDOWN};
这里表示定义四个按键,分别为POWER,返回,音量加,音量减。具体和device/samsung/smdkv210/s3c-button.kl中的定义对应,s3c-button.kl
内容如下:
key 116 ENDCALL WAKE_DROPPED
key 103 DPAD_UP WAKE_DROPPED
key 108 DPAD_DOWN WAKE_DROPPED
key 105 DPAD_LEFT WAKE_DROPPED
key 106 DPAD_RIGHT WAKE_DROPPED
key 114 VOLUME_DOWN WAKE
key 115 VOLUME_UP WAKE
key 139 MENU WAKE_DROPPED
key 158 BACK WAKE_DROPPED
注意,这里s3c-button.kl的内容需和out/target/product/smdkv210/system/usr/keylayout/qwerty.kl的值对应起来。
在s3c_button_probe函数中设置相关按键的寄存器,再开启定时器定时扫描。在定时器中断
函数s3cbutton_timer_handler中判断相应IO口的电平,达到监控按键的作用。
值得注意的是,当我们需要修改按键的功能时,需要和android层的按键匹配起来,具体通过
数组s3c_Keycode的定义以及按键配置表实现,驱动中定义如下:
static int s3c_Keycode[MAX_BUTTON_CNT] = {KEY_POWER, KEY_BACK, KEY_VOLUMEUP, KEY_VOLUMEDOWN};
这里表示定义四个按键,分别为POWER,返回,音量加,音量减。具体和device/samsung/smdkv210/s3c-button.kl中的定义对应,s3c-button.kl
内容如下:
key 116 ENDCALL WAKE_DROPPED
key 103 DPAD_UP WAKE_DROPPED
key 108 DPAD_DOWN WAKE_DROPPED
key 105 DPAD_LEFT WAKE_DROPPED
key 106 DPAD_RIGHT WAKE_DROPPED
key 114 VOLUME_DOWN WAKE
key 115 VOLUME_UP WAKE
key 139 MENU WAKE_DROPPED
key 158 BACK WAKE_DROPPED
注意,这里s3c-button.kl的内容需和out/target/product/smdkv210/system/usr/keylayout/qwerty.kl的值对应起来。