#include
#include
#include
#include
#include
#include
#include
#include
//#include
#include
#include
#define SCAN_INTERVAL (50) /* ms */
//#define HINGE_SCAN_INTERVAL (150) /* ms */
static unsigned char mgc270btn_keycode[1] = {KEY_ENTER};
struct mgc270btn {
unsigned char keycode[ARRAY_SIZE(mgc270btn_keycode)];
struct input_dev *input;
char phys[32];
spinlock_t lock;
struct timer_list timer;
};
//#define KB_DISCHARGE_DELAY 10
//#define KB_ACTIVATE_DELAY 10
static inline int mgc270btn_get_status(void)
{
return ((GPLR0 & 0x01));//取得当前按键的状态
}
/*
* The MagicARM270 Button only generates interrupts when it is pressed.
* When it is pressed, we enable a timer which then scans the
* button to detect when the it is released.
*/
/*
* MagicARM270 button interrupt handler.
*/
/* Scan the hardware button and push any changes up through the input layer */
static void mgc270btn_scankeypad(struct mgc270btn *mgc270btn_data, struct pt_regs *regs)
{
/*
struct pt_regs:
* This struct defines the way the registers are stored on the
* stack during a system call. Note that sizeof(struct pt_regs)
* has to be a multiple of 8.
*/
unsigned long flags;
unsigned int num_pressed = 0;
unsigned int p