mtk android MT6573方案 power key 长按8s 关机功能实现
2012-07-05 18:33
731 查看
该功能是系统启动后,在任何情况下,长按power key 8s都能做到直接关机。因此在kernel中实现。
所有修改都在keypad driver中,如下文件。
mediatek\platform\mt6573\kernel\drivers\keypad\kpd.c :
#define FORCE_POWERKEY_SECONDS 8 //定义power key按键持续时间
struct timer_list timer;
//定时器timer初始化
static int timer_init()
{
init_timer(&timer);
timer.data= 5;
timer.expires = jiffies + (FORCE_POWERKEY_SECONDS*HZ);
timer.function = timer_function;
add_timer(&timer);
printk("<0>ziheng add_timer\n");
return 0;
}
//定时器timer退出
static void timer_exit()
{
del_timer(&timer);
}
//定时器到时事件处理函数
static void timer_function(int para)
{
timer_exit();
arch_reset(0, "charger"); //kernel强制关机接口
}
按键时间在kpd_pwrkey_handler中处理,kpd_pwrkey_handler是一个tasklet,用于power key的按键中断下半部处理。
static void kpd_pwrkey_handler(unsigned long data)
{
bool pressed;
u8 old_state = kpd_pwrkey_state;
kpd_pwrkey_state = !kpd_pwrkey_state;
pressed = (kpd_pwrkey_state == !!KPD_PWRKEY_POLARITY);
if (kpd_show_hw_keycode) {
printk(KPD_SAY "(%s) HW keycode = using EINT\n",
pressed ? "pressed" : "released");
}
#ifdef FORCE_POWERKEY
if(pressed == 1)
{
printk("<0> kpd_pwr_handler press 1\n");
timer_init();
}
else if(pressed == 0)
{
printk("<0> kpd_pwr_handler press 0\n");
timer_exit();
}
#endif
kpd_backlight_handler(pressed, KPD_PWRKEY_MAP);
input_report_key(kpd_input_dev, KPD_PWRKEY_MAP, pressed);
kpd_print("report Linux keycode = %u\n", KPD_PWRKEY_MAP);
/* for detecting the return to old_state */
mt65xx_eint_set_polarity(KPD_PWRKEY_EINT, old_state);
mt65xx_eint_unmask(KPD_PWRKEY_EINT);
}
所有修改都在keypad driver中,如下文件。
mediatek\platform\mt6573\kernel\drivers\keypad\kpd.c :
#define FORCE_POWERKEY_SECONDS 8 //定义power key按键持续时间
struct timer_list timer;
//定时器timer初始化
static int timer_init()
{
init_timer(&timer);
timer.data= 5;
timer.expires = jiffies + (FORCE_POWERKEY_SECONDS*HZ);
timer.function = timer_function;
add_timer(&timer);
printk("<0>ziheng add_timer\n");
return 0;
}
//定时器timer退出
static void timer_exit()
{
del_timer(&timer);
}
//定时器到时事件处理函数
static void timer_function(int para)
{
timer_exit();
arch_reset(0, "charger"); //kernel强制关机接口
}
按键时间在kpd_pwrkey_handler中处理,kpd_pwrkey_handler是一个tasklet,用于power key的按键中断下半部处理。
static void kpd_pwrkey_handler(unsigned long data)
{
bool pressed;
u8 old_state = kpd_pwrkey_state;
kpd_pwrkey_state = !kpd_pwrkey_state;
pressed = (kpd_pwrkey_state == !!KPD_PWRKEY_POLARITY);
if (kpd_show_hw_keycode) {
printk(KPD_SAY "(%s) HW keycode = using EINT\n",
pressed ? "pressed" : "released");
}
#ifdef FORCE_POWERKEY
if(pressed == 1)
{
printk("<0> kpd_pwr_handler press 1\n");
timer_init();
}
else if(pressed == 0)
{
printk("<0> kpd_pwr_handler press 0\n");
timer_exit();
}
#endif
kpd_backlight_handler(pressed, KPD_PWRKEY_MAP);
input_report_key(kpd_input_dev, KPD_PWRKEY_MAP, pressed);
kpd_print("report Linux keycode = %u\n", KPD_PWRKEY_MAP);
/* for detecting the return to old_state */
mt65xx_eint_set_polarity(KPD_PWRKEY_EINT, old_state);
mt65xx_eint_unmask(KPD_PWRKEY_EINT);
}
相关文章推荐
- mtk android MT6573方案 power key 长按8s 关机功能实现
- android power key 长按8s 关机
- Android静默安装实现方案,仿360手机助手秒装和智能安装功能
- Android静默安装实现方案,仿360手机助手秒装和智能安装功能
- 让Android程序获得系统权限,实现关机重启,静默安装等功能
- Android手机获取root权限并实现关机重启功能的方法
- Android静默安装实现方案,仿360手机助手秒装和智能安装功能 .
- Android关机和重启功能的实现
- Android app实现重启、关机功能
- Android静默安装实现方案,仿360手机助手秒装和智能安装功能
- Android静默安装实现方案,仿360手机助手秒装和智能安装功能
- Android静默安装实现方案,仿360手机助手秒装和智能安装功能
- Android 电量监控、关机、重启功能的实现
- Android静默安装实现方案——秒装和智能安装功能
- Android静默安装实现方案,仿360手机助手秒装和智能安装功能
- Android静默安装实现方案,秒装(测试没有通过)和智能安装(实现)功能
- 让Android程序获得系统的权限,实现关机重启,静默安装等功能
- android客户端消息推送功能实现方案
- Android静默安装实现方案,仿360手机助手秒装和智能安装功能
- Android静默安装实现方案,仿360手机助手秒装和智能安装功能