定时器轮休的方式,根据采样次数来区分长按还是短按
1.当按下键1的时候,就不断的计数,直到你放手电压值变化,再根据计数的次数判断上报长按还是短按的功能
没有按键的时候采样率为HZ/4,采样是HZ/40
static void lradc1_data_function(unsigned long data)
248 {
249 volatile unsigned int reg_val;
250 static int key_pressed = -1, count = 0;
251 int delay = HZ/40;
252 reg_val = readl(KEY_BASSADDRESS+LRADC_DATA1);
253 // printk("[lkj] second lradc data1 =0x%x, s_headset_plug=%d \n", reg_val, s_headset_plug);
254 //because recorder app close this, so ....
255 writel( readl(baseaddr+0x28) | (1<<27),(baseaddr+(0x28)));
256 writel( readl(baseaddr+0x28) | (1<<29),(baseaddr+(0x28)));
258 if(s_first_headset_plug != 1 || s_mic_type != 1) {
259 mod_timer(&mic_data->timer, jiffies + HZ/4);
260 printk("[lkj] input key hook key return \n");
261 return ;
262 }
263 if (reg_val >=0 && reg_val < 0x5 )
264 {
265 // hook key
266 if (key_pressed == 0)
267 count++;
268 else {
269 key_pressed = 0;
270 count = 0;