/*
 * tuple format: (key_code, key_param)
 *
 * old-architecture:
 * key-press = (key_code, 0)
 * key-release = (0xff, key_code)
 *
 * new-architecutre:
 * key-press = (key_code, 0)
 * key-release = (key_code, 0xff)
 */
static void report_hs_key(uint32_t key_code, uint32_t key_parm)
{
	int key, temp_key_code;

	if (key_code == HS_REL_K)
		key = hs_find_key(key_parm);
	else
		key = hs_find_key(key_code);

	temp_key_code = key_code;

	if (key_parm == HS_REL_K)
		key_code = key_parm;

	switch (key) {
	case KEY_POWER:
	case KEY_END:
#if 0
	case KEY_MEDIA:
	case KEY_VOLUMEUP:
	case KEY_VOLUMEDOWN:
#endif
#if 0
		input_report_key(hs->ipdev, key, (key_code != HS_REL_K));
#else
		if(pm_key)
		{
#if DEBUG
		switch (key) {
		case KEY_POWER:
			printk(KERN_INFO "[msm-handset] [%s] KEY_POWER[%d] key_code[%d]\n", __func__,key,key_code);
		break;
		case KEY_END:
			printk(KERN_INFO "[msm-handset] [%s] KEY_END[%d] key_code[%d]\n", __func__,key,key_code);
		break;
		}
#endif
#if defined(CONFIG_TENKEY_KEYPAD) && (CONFIG_TENKEY_KEYPAD_SUBID == 2)
		if(shext_hw_revision_cleck == true)
		{
			input_report_key(pm_key->ipdev, KEY_SAVE, (key_code != HS_REL_K));
		}else{
			input_report_key(pm_key->ipdev, key, (key_code != HS_REL_K));
			input_sync(pm_key->ipdev);
		}
#else
			input_report_key(pm_key->ipdev, key, (key_code != HS_REL_K));
			input_sync(pm_key->ipdev);
#endif
		}
		else
		{
#if DEBUG
			printk(KERN_INFO "[msm-handset] [%s] pm_key = NULL\n", __func__);
#endif
		}
#endif
		break;
#if 1
	case KEY_MEDIA:
#if 0
		report_headphone_switch(hs->ipdev, key, (key_code != HS_REL_K));
#else
		if(hssw)
		{
			report_headphone_switch(hssw->ipdev, key, (key_code != HS_REL_K));
			input_sync(hssw->ipdev);
		}
		else
		{
#if DEBUG
			printk(KERN_INFO "[msm-handset] [%s] hssw = NULL\n", __func__);
#endif
		}
#endif
		break;
#endif
	case SW_HEADPHONE_INSERT_W_MIC:
		hs->mic_on = hs->hs_on = (key_code != HS_REL_K) ? 1 : 0;
		input_report_switch(hs->ipdev, SW_HEADPHONE_INSERT,
							hs->hs_on);
		input_report_switch(hs->ipdev, SW_MICROPHONE_INSERT,
							hs->mic_on);
		update_state();
		break;

	case SW_HEADPHONE_INSERT:
#if 0
		report_headset_switch(hs->ipdev, key, (key_code != HS_REL_K));
#else
		if(hs)
		{
			report_headset_switch(hs->ipdev, key, key_parm);
#endif
#if 1
			input_sync(hs->ipdev);
#endif
		}
		else
		{
#if DEBUG
			printk(KERN_INFO "[msm-handset] [%s] hs = NULL\n", __func__);
#endif
		}
		hs->hs_on = (key_code != HS_REL_K) ? 1 : 0;
//		input_report_switch(hs->ipdev, key, hs->hs_on);
		update_state();
		break;
	case SW_MICROPHONE_INSERT:
		hs->mic_on = (key_code != HS_REL_K) ? 1 : 0;
		input_report_switch(hs->ipdev, key, hs->mic_on);
		update_state();
		break;
#ifdef FLIP_USE	/* FLIP */
	case SW_LID:
		if(hs)
		{
			if(report_flip_switch(hs->ipdev, key, key_parm) != 0)
			{
				return;
			}
#if 1
			input_sync(hs->ipdev);
#endif
		}
		else
		{
#if DEBUG
			printk(KERN_INFO "[msm-handset] [%s] hs = NULL\n", __func__);
#endif
		}
		break;
#endif
	case -1:
		printk(KERN_ERR "%s: No mapping for remote handset event %d\n",
				 __func__, temp_key_code);
		return;
	}
#if 0
	input_sync(hs->ipdev);
#endif
}
예제 #2
0
/*
 * tuple format: (key_code, key_param)
 *
 * old-architecture:
 * key-press = (key_code, 0)
 * key-release = (0xff, key_code)
 *
 * new-architecutre:
 * key-press = (key_code, 0)
 * key-release = (key_code, 0xff)
 */
static void report_hs_key(uint32_t key_code, uint32_t key_parm)
{
	int key, temp_key_code;

	if (key_code == HS_REL_K)
		key = hs_find_key(key_parm);
	else
		key = hs_find_key(key_code);

	temp_key_code = key_code;

	if (key_parm == HS_REL_K)
		key_code = key_parm;

	switch (key) {
	case KEY_POWER:
	case KEY_END:
#if 0
	case KEY_MEDIA:
	case KEY_VOLUMEUP:
	case KEY_VOLUMEDOWN:
#endif
#if 0
		input_report_key(hs->ipdev, key, (key_code != HS_REL_K));
#else
		if(pm_key)
		{
			input_report_key(pm_key->ipdev, key, (key_code != HS_REL_K));
			input_sync(pm_key->ipdev);
		}
#endif
		break;
#if 1
	case KEY_MEDIA:
#if 0
		report_headphone_switch(hs->ipdev, key, (key_code != HS_REL_K));
#else
		if(hssw)
		{
			report_headphone_switch(hssw->ipdev, key, (key_code != HS_REL_K));
			input_sync(hssw->ipdev);
		}
		else
		{
#if DEBUG
			printk(KERN_INFO "[msm-handset] [%s] hssw = NULL\n", __func__);
#endif
		}
#endif
		break;
#endif
	case SW_HEADPHONE_INSERT:
#if 0
		report_headset_switch(hs->ipdev, key, (key_code != HS_REL_K));
#else
		if(hs)
		{
			report_headset_switch(hs->ipdev, key, key_parm);
#endif
#if 1
			input_sync(hs->ipdev);
#endif
		}
		else
		{
#if DEBUG
			printk(KERN_INFO "[msm-handset] [%s] hs = NULL\n", __func__);
#endif
		}
		break;
#if 1
	case SW_LID:
		break;
#endif
#if 1
	case KEY_VOLUMEUP:
	case KEY_VOLUMEDOWN:
	case KEY_CAMERA:
	case KEY_FOCUS:
#ifdef CONFIG_LYNCIS_KEYPAD
    case KEY_MENU:
    case KEY_HOME:
    case KEY_BACK:
    case KEY_SEARCH:
#endif /* CONFIG_LYNCIS_KEYPAD */
		if(mt_key)
		{
			input_report_key(mt_key->ipdev, key, (key_code != HS_REL_K));
			input_sync(mt_key->ipdev);
		}
		else
		{
			printk(KERN_INFO "[msm-handset] [%s] mt_key = NULL\n", __func__);
		}
		break;
#endif
	case -1:
		printk(KERN_ERR "%s: No mapping for remote handset event %d\n",
				 __func__, temp_key_code);
		return;
	}
#if 0
	input_sync(hs->ipdev);
#endif
}