static void button_timer_function(u32_t data) { static u32_t key_old = 0x3; u32_t keyup, keydown; u32_t key = 0; if(readl(S5PV210_GPH0DAT) & (0x1<<4)) { key |= 0x1 << 0; } else { key &= ~(0x1 << 0); } if(readl(S5PV210_GPH3DAT) & (0x1<<7)) { key |= 0x1 << 1; } else { key &= ~(0x1 << 1); } if(key != key_old) { keyup = (key ^ key_old) & key; keydown = (key ^ key_old) & key_old; key_old = key; if(keyup) { if(keyup & (0x1<<0)) /* GPH0_4 */ input_report(INPUT_KEYBOARD, KEY_DOWN, KEY_BUTTON_UP); else if(keyup & (0x1<<1)) /* GPH3_7 */ input_report(INPUT_KEYBOARD, KEY_ENTER, KEY_BUTTON_UP); } if(keydown) { if(keydown & (0x1<<0)) /* GPH0_4 */ input_report(INPUT_KEYBOARD, KEY_DOWN, KEY_BUTTON_DOWN); else if(keydown & (0x1<<1)) /* GPH3_7 */ input_report(INPUT_KEYBOARD, KEY_ENTER, KEY_BUTTON_DOWN); } input_sync(INPUT_KEYBOARD); } /* mod timer for next 100 ms */ mod_timer(&button_timer, jiffies + get_system_hz() / 10); }
static void keyboard_report_event(u32_t flag, u8_t data, enum key_value press) { u32_t i; enum key_code key; for(i = 0; i < ARRAY_SIZE(map); i++) { if(map[i].data == data) { if( (flag & KBD_CAPS_LOCK) ) key = map[i].caps_key; else if( (flag & (KBD_LEFT_SHIFT | KBD_RIGHT_SHIFT)) ) key = map[i].shift_key; else if( (flag & (KBD_LEFT_CTRL | KBD_RIGHT_CTRL)) ) key = map[i].ctrl_key; else key = map[i].key; if(key != 0) { input_report(INPUT_KEYBOARD, key, press); input_sync(INPUT_KEYBOARD); } } } }
static void keypad_timer_function(u32_t data) { static u32_t gpm_old = 0x0; u32_t gpm = readl(S3C6410_GPMDAT) & 0x1d; u32_t keyup, keydown; if(gpm != gpm_old) { keyup = (gpm ^ gpm_old) & gpm_old; keydown = (gpm ^ gpm_old) & gpm; gpm_old = gpm; if(keyup) { if(keyup & (0x1<<0)) /* gpm0 */ input_report(INPUT_KEYBOARD, KEY_UP, KEY_BUTTON_UP); else if(keyup & (0x1<<3)) /* gpm3 */ input_report(INPUT_KEYBOARD, KEY_DOWN, KEY_BUTTON_UP); else if(keyup & (0x1<<2)) /* gpm2 */ input_report(INPUT_KEYBOARD, KEY_ENTER, KEY_BUTTON_UP); else if(keyup & (0x1<<4)) /* gpm4 */ input_report(INPUT_KEYBOARD, KEY_POWER, KEY_BUTTON_UP); } if(keydown) { if(keydown & (0x1<<0)) /* gpm0 */ input_report(INPUT_KEYBOARD, KEY_UP, KEY_BUTTON_DOWN); else if(keydown & (0x1<<3)) /* gpm3 */ input_report(INPUT_KEYBOARD, KEY_DOWN, KEY_BUTTON_DOWN); else if(keydown & (0x1<<2)) /* gpm2 */ input_report(INPUT_KEYBOARD, KEY_ENTER, KEY_BUTTON_DOWN); else if(keydown & (0x1<<4)) /* gpm4 */ input_report(INPUT_KEYBOARD, KEY_POWER, KEY_BUTTON_DOWN); } input_sync(INPUT_KEYBOARD); } /* mod timer for next 10 ms */ mod_timer(&keypad_timer, jiffies + get_system_hz() / 100); }
static void keypad_timer_function(u32_t data) { static u32_t gpn_old = 0x7; u32_t gpn = readl(S3C6410_GPNDAT) & (0x7<<9); u32_t keyup, keydown; if(gpn != gpn_old) { keyup = (gpn ^ gpn_old) & gpn_old; keydown = (gpn ^ gpn_old) & gpn; gpn_old = gpn; if(keyup) { if(keyup & (0x1<<10)) /* gpn10 */ input_report(INPUT_KEYBOARD, KEY_UP, KEY_BUTTON_UP); else if(keyup & (0x1<<11)) /* gpn11 */ input_report(INPUT_KEYBOARD, KEY_DOWN, KEY_BUTTON_UP); else if(keyup & (0x1<<9)) /* gpn9 */ input_report(INPUT_KEYBOARD, KEY_ENTER, KEY_BUTTON_UP); } if(keydown) { if(keydown & (0x1<<10)) /* gpn10 */ input_report(INPUT_KEYBOARD, KEY_UP, KEY_BUTTON_DOWN); else if(keydown & (0x1<<11)) /* gpn11 */ input_report(INPUT_KEYBOARD, KEY_DOWN, KEY_BUTTON_DOWN); else if(keydown & (0x1<<9)) /* gpn9 */ input_report(INPUT_KEYBOARD, KEY_ENTER, KEY_BUTTON_DOWN); } input_sync(INPUT_KEYBOARD); } /* mod timer for next 10 ms */ mod_timer(&keypad_timer, jiffies + get_system_hz() / 100); }
static void keypad_timer_function(u32_t data) { static u32_t gpn_old = 0x3f; u32_t gpn = readl(S3C6410_GPNDAT) & 0x3f; u32_t keyup, keydown; if(gpn != gpn_old) { keyup = (gpn ^ gpn_old) & gpn; keydown = (gpn ^ gpn_old) & gpn_old; gpn_old = gpn; if(keyup) { if(keyup & (0x1<<0)) /* gpn0 */ input_report(INPUT_KEYBOARD, KEY_LEFT, KEY_BUTTON_UP); else if(keyup & (0x1<<1)) /* gpn1 */ input_report(INPUT_KEYBOARD, KEY_DOWN, KEY_BUTTON_UP); else if(keyup & (0x1<<2)) /* gpn2 */ input_report(INPUT_KEYBOARD, KEY_UP, KEY_BUTTON_UP); else if(keyup & (0x1<<3)) /* gpn3 */ input_report(INPUT_KEYBOARD, KEY_RIGHT, KEY_BUTTON_UP); else if(keyup & (0x1<<4)) /* gpn4 */ input_report(INPUT_KEYBOARD, KEY_ENTER, KEY_BUTTON_UP); else if(keyup & (0x1<<5)) /* gpn5 */ input_report(INPUT_KEYBOARD, KEY_BACK, KEY_BUTTON_UP); } if(keydown) { if(keydown & (0x1<<0)) /* gpn0 */ input_report(INPUT_KEYBOARD, KEY_LEFT, KEY_BUTTON_DOWN); else if(keydown & (0x1<<1)) /* gpn1 */ input_report(INPUT_KEYBOARD, KEY_DOWN, KEY_BUTTON_DOWN); else if(keydown & (0x1<<2)) /* gpn2 */ input_report(INPUT_KEYBOARD, KEY_UP, KEY_BUTTON_DOWN); else if(keydown & (0x1<<3)) /* gpn3 */ input_report(INPUT_KEYBOARD, KEY_RIGHT, KEY_BUTTON_DOWN); else if(keydown & (0x1<<4)) /* gpn4 */ input_report(INPUT_KEYBOARD, KEY_ENTER, KEY_BUTTON_DOWN); else if(keydown & (0x1<<5)) /* gpn5 */ input_report(INPUT_KEYBOARD, KEY_BACK, KEY_BUTTON_DOWN); } input_sync(INPUT_KEYBOARD); } /* mod timer for next 10 ms */ mod_timer(&keypad_timer, jiffies + get_system_hz() / 100); }