Ticket #6478: gpio.diff

File gpio.diff, 1.4 KB (added by nunojpg@…, 8 years ago)
  • target/linux/generic-2.6/files/drivers/input/misc/gpio_buttons.c

     
    5252                state = gpio_get_value(button->gpio) ? 1 : 0; 
    5353                state ^= button->active_low; 
    5454 
    55                 if (state) { 
    56                         button->count++; 
    57                 } else { 
    58                         if (button->count >= button->threshold) { 
     55                if(button->count == 0){ 
     56                        //no event on initial button state(system boot) 
     57                        //otherwise failsafe mode may be activated without button being pressed   
     58                        button->count += state ? button->threshold : -button->threshold; 
     59                } else if(button->count >= button->threshold && state == 0){ 
    5960                                input_event(input, type, button->code, 1); 
    6061                                input_sync(input); 
    61                         } 
    62                         button->count = 0; 
     62                                button->count = -1; 
     63                } else if(button->count <= - button->threshold && state == 1){ 
     64                                input_event(input, type, button->code, 0); 
     65                                input_sync(input); 
     66                                button->count = 1; 
     67                } else if(button->count > 0 && button->count < INT_MAX){ 
     68                                button->count++; 
     69                } else if(button->count < 0 && button->count > INT_MIN){ 
     70                                button->count--; 
    6371                } 
    64  
    65                 if (button->count == button->threshold) { 
    66                         input_event(input, type, button->code, 0); 
    67                         input_sync(input); 
    68                 } 
    6972        } 
    7073} 
    7174