static void report_key(struct gpio_kp *kp, int key_index, int out, int in)
{
	struct gpio_event_matrix_info *mi = kp->keypad_info;
	int pressed = test_bit(key_index, kp->keys_pressed);
	unsigned short keyentry = mi->keymap[key_index];
	unsigned short keycode = keyentry & MATRIX_KEY_MASK;
	unsigned short dev = keyentry >> MATRIX_CODE_BITS;

	if (pressed != test_bit(keycode, kp->input_devs->dev[dev]->key)) {
		if (keycode == KEY_RESERVED) {
#if defined(CONFIG_MACH_EUROPA)
			if ((mi->flags & GPIOKPF_PRINT_UNMAPPED_KEYS) && (board_hw_revision < 4))
#elif defined(CONFIG_MACH_CALLISTO)
			if ((mi->flags & GPIOKPF_PRINT_UNMAPPED_KEYS) && (board_hw_revision < 3))
#else
			if (mi->flags & GPIOKPF_PRINT_UNMAPPED_KEYS)
#endif			
				pr_info("gpiomatrix: unmapped key, %d-%d "
					"(%d-%d) changed to %d\n",
					out, in, mi->output_gpios[out],
					mi->input_gpios[in], pressed);
		} else {
			if (mi->flags & GPIOKPF_PRINT_MAPPED_KEYS)
				pr_info("gpiomatrix: key %x, %d-%d (%d-%d) "
					"changed to %d\n", keycode,
					out, in, mi->output_gpios[out],
					mi->input_gpios[in], pressed);
#if defined(CONFIG_MACH_EUROPA) || defined(CONFIG_MACH_CALLISTO)  || defined(CONFIG_MACH_COOPER) || defined(CONFIG_MACH_BENI) || defined(CONFIG_MACH_TASS) || defined(CONFIG_MACH_LUCAS)
			if(!power_off_done) {

#if defined(CONFIG_MACH_CALLISTO)
				if ((keycode == KEY_LEFTALT) && pressed)
					alt_key_pressed = 1;
				if ((keycode == KEY_LEFTALT) && !pressed)
					alt_key_pressed = 0;

				if ((alt_key_pressed) && (keycode == KEY_LEFT))
					printk("key (Alt + Down) pressed\n");
				else if ((alt_key_pressed) && (keycode == KEY_RIGHT))
					printk("key (Alt + Up) pressed\n");
				else
				{	
#endif
			input_report_key(kp->input_devs->dev[dev], keycode, pressed);
#if !defined(CONFIG_MACH_JUNO_SKT) && !defined(CONFIG_MACH_JUNO_KT)
#if defined(CONFIG_MACH_COOPER) || defined(CONFIG_MACH_BENI) || defined(CONFIG_MACH_TASS)
				if(keycode == KEY_HOME && pressed == 1)
					TSP_forced_release_forkey();
#endif
#endif
#if defined(CONFIG_MACH_CALLISTO)  || defined(CONFIG_MACH_COOPER)  || defined(CONFIG_MACH_BENI) || defined(CONFIG_MACH_TASS) || defined(CONFIG_MACH_LUCAS)
#ifdef CONFIG_KERNEL_DEBUG_SEC
				printk("key event (keycode:%d, pressed:%d), w=%d\n", 
						keycode, pressed, lcd_on_state_for_debug);	// sec: sm.kim
#endif						
						
#if defined(CONFIG_MACH_COOPER_BASE_KOR)
            if(pressed ==1 && (keycode == KEY_VOLUMEUP || keycode == KEY_VOLUMEDOWN))
             {
                 key_press_count = 0;
        			long_key_state = LONG_KEY_CHECK_ACTIVE;
             }
             else
              {
                 key_press_count = 0;
        			long_key_state = LONG_KEY_CHECK_INACTIVE;              
              }
#endif
		
#ifdef ATH_CLAIM_RELEASE_WAR
				if(!lcd_on_state_for_debug) 
				    ath_debug_sdio_claimer();
#endif
#else
#ifdef CONFIG_KERNEL_DEBUG_SEC
				printk("key event (keycode:%d, pressed:%d), wlan_debug_step=%d\n", 
						keycode, pressed, wlan_debug_step);	// sec: sm.kim
#endif						
#endif
#if defined(CONFIG_MACH_CALLISTO)
				}
#endif
				key_pressed = pressed;
			} else {
				printk("power_off_done : %d\n", power_off_done);
			}
#else
			input_report_key(kp->input_devs->dev[dev], keycode, pressed);
//			printk("key event (keycode:%d, pressed:%d), wlan_debug_step=%d\n", 
//					keycode, pressed, wlan_debug_step);	// sec: sm.kim
#ifdef CONFIG_KERNEL_DEBUG_SEC
			printk("key event (keycode:%d, pressed:%d)\n", keycode, pressed);	//sec: sm.kim
#endif			
#endif
		}
	}
}
Пример #2
0
static void report_key(struct gpio_kp *kp, int key_index, int out, int in)
{
	struct gpio_event_matrix_info *mi = kp->keypad_info;
	int pressed = test_bit(key_index, kp->keys_pressed);
	unsigned short keyentry = KEY_HW_REV(key_index); //mi->keymap[key_index];
	unsigned short keycode = keyentry & MATRIX_KEY_MASK;
	unsigned short dev = keyentry >> MATRIX_CODE_BITS;

	if (pressed != test_bit(keycode, kp->input_devs->dev[dev]->key)) {
		if (keycode == KEY_RESERVED) {
#if defined(CONFIG_MACH_EUROPA)
			if ((mi->flags & GPIOKPF_PRINT_UNMAPPED_KEYS) && (board_hw_revision < 4))
#elif defined(CONFIG_MACH_CALLISTO)
			if ((mi->flags & GPIOKPF_PRINT_UNMAPPED_KEYS) && (board_hw_revision < 3))
#else
			if (mi->flags & GPIOKPF_PRINT_UNMAPPED_KEYS)
#endif			
				pr_info("gpiomatrix: unmapped key, %d-%d "
					"(%d-%d) changed to %d\n",
					out, in, mi->output_gpios[out],
					mi->input_gpios[in], pressed);
		} else {

			if(lcd_wake_flag==0) 
			{
				if(keycode==KEY_MENU || keycode==KEY_BACK) 
				{
					printk("lcd is off, so do not send menu or back key\n");
					return ;
				}
			} 
					
			if (mi->flags & GPIOKPF_PRINT_MAPPED_KEYS)
				pr_info("gpiomatrix: key %x, %d-%d (%d-%d) "
					"changed to %d\n", keycode,
					out, in, mi->output_gpios[out],
					mi->input_gpios[in], pressed);
#if defined(CONFIG_MACH_EUROPA) || defined(CONFIG_MACH_CALLISTO)  || defined(CONFIG_MACH_COOPER) || defined(CONFIG_MACH_BENI) || defined(CONFIG_MACH_TASS) || defined(CONFIG_MACH_LUCAS)
			if(!power_off_done) {
#if defined(CONFIG_MACH_LUCAS)
                                if ((keycode == KEY_LEFTALT) && pressed)
                                        alt_key_pressed = 1;
                                if ((keycode == KEY_LEFTALT) && !pressed)
                                        alt_key_pressed = 0;
 
                                if ((alt_key_pressed) && (keycode == KEY_LEFT))
                                        printk("key (Alt + LEFT) pressed\n");
                                else if ((alt_key_pressed) && (keycode == KEY_RIGHT))
                                        printk("key (Alt + RIGHT) pressed\n");
                                else if ((alt_key_pressed) && (keycode == KEY_DOWN))
                                        printk("key (Alt + DOWN) pressed\n");
                                else
                                {

#elif defined(CONFIG_MACH_CALLISTO)
				if ((keycode == KEY_LEFTALT) && pressed)
					alt_key_pressed = 1;
				if ((keycode == KEY_LEFTALT) && !pressed)
					alt_key_pressed = 0;

				if ((alt_key_pressed) && (keycode == KEY_LEFT))
					printk("key (Alt + Down) pressed\n");
				else if ((alt_key_pressed) && (keycode == KEY_RIGHT))
					printk("key (Alt + Up) pressed\n");
				else
				{	
#endif
			input_report_key(kp->input_devs->dev[dev], keycode, pressed);
#ifdef SLEEP_STATE_SKIP_LONGKEY
				if((pressed == 1) && (keycode == KEY_END || keycode == KEY_VOLUMEUP || keycode == KEY_VOLUMEDOWN/* || keycode == KEY_HOME*/))
				{
					key_press_count = 0;
					current_pressed_key = keycode;
					long_key_state = LONG_KEY_CHECK_ACTIVE;
				}
				else
				{
					key_press_count = 0;
					long_key_state = LONG_KEY_CHECK_INACTIVE;              
				}
#endif
#if defined(CONFIG_MACH_COOPER) || defined(CONFIG_MACH_BENI) || defined(CONFIG_MACH_TASS)
#if defined(CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4) || defined(CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI)
				if(keycode == KEY_HOME && pressed == 1)
					TSP_forced_release_forkey();
#endif
#endif
#if defined(CONFIG_MACH_CALLISTO)  || defined(CONFIG_MACH_COOPER) || defined(CONFIG_MACH_BENI) || defined(CONFIG_MACH_TASS) || defined(CONFIG_MACH_LUCAS)
#if !defined(CONFIG_MACH_TOTORO_CTC) // for google security auth
				printk("key event (keycode:%d, pressed:%d), w=%d\n", 
						keycode, pressed, lcd_on_state_for_debug);	// sec: sm.kim
#endif
				// hsil	
//				if (keycode == 115)
//				{
//					volup_cnt++;
//					if (volup_cnt > 20)
//						enter_suspend = 1;
//				}
//				if (keycode == 114)
//				{
//					volup_cnt = 0;
//					enter_suspend = 0;
//				}
		
#ifdef ATH_CLAIM_RELEASE_WAR
				if(!lcd_on_state_for_debug) 
				    ath_debug_sdio_claimer();
#endif
#else
				printk("key event (keycode:%d, pressed:%d), wlan_debug_step=%d\n", 
						keycode, pressed, wlan_debug_step);	// sec: sm.kim
#endif
#if defined(CONFIG_MACH_LUCAS) || defined(CONFIG_MACH_CALLISTO)
				}
#endif
				key_pressed = pressed;
			} else {
				printk("power_off_done : %d\n", power_off_done);
			}
#else
			input_report_key(kp->input_devs->dev[dev], keycode, pressed);
//			printk("key event (keycode:%d, pressed:%d), wlan_debug_step=%d\n", 
//					keycode, pressed, wlan_debug_step);	// sec: sm.kim
			printk("key event (keycode:%d, pressed:%d)\n", keycode, pressed);	//sec: sm.kim
#endif
		}
	}
}