Example #1
1
static void type_det_work(struct work_struct *work)
{
	DBG("[JIWON] type_det_work start\n");

	if(headset_status == 1)
	{
	    if(gpio_get_value(headset_sw_data->hook_gpio) == 0) 
	    {
			headset_type = HUB_HEADPHONE;
			//DBG("[JIWON] type_det_work : HUB_HEADPHONE\n");
		}
		else
		{
			headset_type = HUB_HEADSET;
			//DBG("[JIWON] type_det_work : HUB_HEADSET\n");		
		}
	}
	else
	{
		headset_type = HUB_NONE;
#if defined(CONFIG_PRODUCT_LGE_KU5900)||defined(CONFIG_PRODUCT_LGE_P970) || defined(CONFIG_PRODUCT_LGE_LU6800) // 20100814 [email protected], dmb ant detect [START_LGE]		
	//nothing
#elif defined(CONFIG_PRODUCT_LGE_HUB) // [email protected] : Mach_Hub use external ant for dmb
		headset_sw_data->dmb_ant_detected = 0;
		set_dmb_status(headset_sw_data->dmb_ant_detected);	//[email protected]		
#endif		
	}


#if defined(CONFIG_PRODUCT_LGE_KU5900) ||defined(CONFIG_PRODUCT_LGE_P970)|| defined(CONFIG_PRODUCT_LGE_LU6800) 	// 20100814 [email protected], dmb ant detect [START_LGE]
	//nothing
#elif defined(CONFIG_PRODUCT_LGE_HUB) // [email protected] : Mach_Hub use external ant for dmb
//	msleep(100);
    if(system_rev > 3 && gpio_get_value(headset_sw_data->dmb_ant_gpio) == 1) 
    {
		DBG("[LUCKYJUN77] type_det_work : dmb_ant detected\n");
		headset_type = HUB_NONE;
		headset_sw_data->dmb_ant_detected = 1;
		set_dmb_status(headset_sw_data->dmb_ant_detected);	//[email protected]		
//		switch_set_state(&headset_sw_data->sdev, headset_type);		
//		return;
	}
#endif	// 20100814 [email protected], dmb ant detect [START_LGE]

#if defined(CONFIG_PRODUCT_LGE_KU5900) ||defined(CONFIG_PRODUCT_LGE_P970)|| defined(CONFIG_PRODUCT_LGE_LU6800) // 20100814 [email protected], dmb ant detect [START_LGE]
		if(headset_type == HUB_NONE)
		{
	#ifdef USE_LDOBIAS			
			gpio_direction_output(MIC_BIAS_LDO, 0);
			gpio_set_value(MIC_BIAS_LDO, 0);
	#else
			hub_headsetdet_bias(0);
	#endif
		}
#else
	if(system_rev <= 3)	//revB case
	{
    if(headset_type == HUB_NONE)
		hub_headsetdet_bias(0);
	}
	else 
	{
		if(headset_type == HUB_NONE && headset_sw_data->dmb_ant_detected == 0)
		{
			hub_headsetdet_bias(0);
		}
	}
#endif	// 20100814 [email protected], dmb ant detect [START_LGE]
	
 /* 20110215 [email protected] for EarJack & Hook Action [START] */
   if(headset_type == 1) 
   	{	   
    	IsHeadsetInserted=1;
    	DBG("[JIWON] type_det_work : IsHeadsetInserted=1\n");
   	}
   else
   	{
    	IsHeadsetInserted=0;
	    DBG("[JIWON] type_det_work : IsHeadsetInserted=0\n");
   	}
 /* 20110215 [email protected] for EarJack & Hook Action [END] */
  
	switch_set_state(&headset_sw_data->sdev, headset_type);

// 20100608 [email protected], headset event inform for hdmi [START_LGE]
#if defined(CONFIG_PRODUCT_LGE_LU6800)
	if(is_hdmi_enabled() == 1)
	{
		if(headset_type == HUB_NONE)
			Hdmi_setAudioMute(0);
		else
			Hdmi_setAudioMute(1);
	}
#endif
// 20100608 [email protected], headset event inform for hdmi [END_LGE]
	// 20110425 [email protected] detect headset during sleep [START]
	set_wakelock(0);	
	// 20110425 [email protected] detect headset during sleep [END]

}
static void headset_det_work(struct work_struct *work)
{
	headset_status = gpio_get_value(headset_sw_data->gpio); 
	//printk("[JIWON] headset_det_work start\n");

	if(headset_status == 0)
	{
	//printk("[JIWON] headset_det_work : no headset\n");
#if 1	// 20100825 , mic bias LDO control test [START_LGE]
		gpio_direction_output(MIC_BIAS_LDO, 0);
		gpio_set_value(MIC_BIAS_LDO, 0);
#endif	// 20100825 , mic bias LDO control test [END_LGE]
	
		//hub_headsetdet_bias(0);
//For_Resume_Speed		printk("[LUCKYJUN77] headset_det_work : headset_type = HUB_NONE\n");
		headset_type = HUB_NONE;
		switch_set_state(&headset_sw_data->sdev, headset_type);
		#if defined(CONFIG_NXP_HDMI)
		if(is_hdmi_enabled() == 1)
		{
			printk("(headset_det_work == Hdmi_setAudioMute(0)\n");
			Hdmi_setAudioMute(0);
		}
	    #endif
		return;		
	}
	
	msleep(100);
#if 1	// 20100825 , mic bias LDO control test [START_LGE]
	gpio_direction_output(MIC_BIAS_LDO, 1);
	gpio_set_value(MIC_BIAS_LDO, 1);
#endif	// 20100825 , mic bias LDO control test [END_LGE]
	
	//hub_headsetdet_bias(1);
        
#if defined(CONFIG_MACH_LGE_HUB_REV_A)	// 20100814 , dmb ant detect [START_LGE]
	//nothing
#else
   if(system_rev > 3 && gpio_get_value(headset_sw_data->dmb_ant_gpio) == 1) 
    {
		printk("[LUCKYJUN77] headset_det_work : dmb_ant detected\n");
		headset_sw_data->dmb_ant_detected = 1;
		set_dmb_status(headset_sw_data->dmb_ant_detected);	//
		headset_type = HUB_NONE;
		return;
	}
#endif	
	schedule_delayed_work(&headset_sw_data->delayed_work,	msecs_to_jiffies(type_detection_tim));
	
}
Example #3
0
int omapfb_ioctl(struct fb_info *fbi, unsigned int cmd, unsigned long arg)
{
	struct omapfb_info *ofbi = FB2OFB(fbi);
	struct omapfb2_device *fbdev = ofbi->fbdev;
	struct omap_dss_device *display = fb2display(fbi);

	union {
		struct omapfb_update_window_old	uwnd_o;
		struct omapfb_update_window	uwnd;
		struct omapfb_plane_info	plane_info;
		struct omapfb_caps		caps;
		struct omapfb_mem_info          mem_info;
		struct omapfb_color_key		color_key;
		struct omapfb_ovl_colormode	ovl_colormode;
		enum omapfb_update_mode		update_mode;
		int test_num;
		struct omapfb_memory_read	memory_read;
		struct omapfb_vram_info		vram_info;
		struct omapfb_tearsync_info	tearsync_info;
		struct omapfb_display_info	display_info;

//--[[ LGE_UBIQUIX_MODIFIED_START : [email protected] [2011.08.07] - CAM color temp.
		// LGE_DOM_UPDATE_S hyewon.eum 2010/10/01 {
		struct omapfb_ccs			ccs_info;
		// LGE_DOM_UPDATE_S hyewon.eum 2010/10/01 }
//--]] LGE_UBIQUIX_MODIFIED_END : [email protected] [2011.08.07] - CAM color temp.
	} p;

	int r = 0;

	switch (cmd) {
	case OMAPFB_SYNC_GFX:
		DBG("ioctl SYNC_GFX\n");
		if (!display || !display->driver->sync) {
			/* DSS1 never returns an error here, so we neither */
			/*r = -EINVAL;*/
			break;
		}

		r = display->driver->sync(display);
		break;

	case OMAPFB_UPDATE_WINDOW_OLD:
		DBG("ioctl UPDATE_WINDOW_OLD\n");
		if (!display || !display->driver->update) {
			r = -EINVAL;
			break;
		}

		if (copy_from_user(&p.uwnd_o,
					(void __user *)arg,
					sizeof(p.uwnd_o))) {
			r = -EFAULT;
			break;
		}

		r = omapfb_update_window_nolock(fbi, p.uwnd_o.x, p.uwnd_o.y,
				p.uwnd_o.width, p.uwnd_o.height);
		break;

	case OMAPFB_UPDATE_WINDOW:
		DBG("ioctl UPDATE_WINDOW\n");
		if (!display || !display->driver->update) {
			r = -EINVAL;
			break;
		}

		if (copy_from_user(&p.uwnd, (void __user *)arg,
					sizeof(p.uwnd))) {
			r = -EFAULT;
			break;
		}

		r = omapfb_update_window_nolock(fbi, p.uwnd.x, p.uwnd.y,
				p.uwnd.width, p.uwnd.height);
		break;

	case OMAPFB_SETUP_PLANE:
		DBG("ioctl SETUP_PLANE\n");
		if (copy_from_user(&p.plane_info, (void __user *)arg,
					sizeof(p.plane_info)))
			r = -EFAULT;
		else
			r = omapfb_setup_plane(fbi, &p.plane_info);
		break;

	case OMAPFB_QUERY_PLANE:
		DBG("ioctl QUERY_PLANE\n");
		r = omapfb_query_plane(fbi, &p.plane_info);
		if (r < 0)
			break;
		if (copy_to_user((void __user *)arg, &p.plane_info,
					sizeof(p.plane_info)))
			r = -EFAULT;
		break;

	case OMAPFB_SETUP_MEM:
		DBG("ioctl SETUP_MEM\n");
		if (copy_from_user(&p.mem_info, (void __user *)arg,
					sizeof(p.mem_info)))
			r = -EFAULT;
		else
			r = omapfb_setup_mem(fbi, &p.mem_info);
		break;

	case OMAPFB_QUERY_MEM:
		DBG("ioctl QUERY_MEM\n");
		r = omapfb_query_mem(fbi, &p.mem_info);
		if (r < 0)
			break;
		if (copy_to_user((void __user *)arg, &p.mem_info,
					sizeof(p.mem_info)))
			r = -EFAULT;
		break;

	case OMAPFB_GET_CAPS:
		DBG("ioctl GET_CAPS\n");
		if (!display) {
			r = -EINVAL;
			break;
		}

		memset(&p.caps, 0, sizeof(p.caps));
		if (display->caps & OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE)
			p.caps.ctrl |= OMAPFB_CAPS_MANUAL_UPDATE;
		if (display->caps & OMAP_DSS_DISPLAY_CAP_TEAR_ELIM)
			p.caps.ctrl |= OMAPFB_CAPS_TEARSYNC;

		if (copy_to_user((void __user *)arg, &p.caps, sizeof(p.caps)))
			r = -EFAULT;
		break;

	case OMAPFB_GET_OVERLAY_COLORMODE:
		DBG("ioctl GET_OVERLAY_COLORMODE\n");
		if (copy_from_user(&p.ovl_colormode, (void __user *)arg,
				   sizeof(p.ovl_colormode))) {
			r = -EFAULT;
			break;
		}
		r = omapfb_get_ovl_colormode(fbdev, &p.ovl_colormode);
		if (r < 0)
			break;
		if (copy_to_user((void __user *)arg, &p.ovl_colormode,
				 sizeof(p.ovl_colormode)))
			r = -EFAULT;
		break;

	case OMAPFB_SET_UPDATE_MODE:
		DBG("ioctl SET_UPDATE_MODE\n");
		if (get_user(p.update_mode, (int __user *)arg))
			r = -EFAULT;
		else
			r = omapfb_set_update_mode(fbi, p.update_mode);
		break;

	case OMAPFB_GET_UPDATE_MODE:
		DBG("ioctl GET_UPDATE_MODE\n");
		r = omapfb_get_update_mode(fbi, &p.update_mode);
		if (r)
			break;
		if (put_user(p.update_mode,
					(enum omapfb_update_mode __user *)arg))
			r = -EFAULT;
		break;

	case OMAPFB_SET_COLOR_KEY:
		DBG("ioctl SET_COLOR_KEY\n");
		if (copy_from_user(&p.color_key, (void __user *)arg,
				   sizeof(p.color_key)))
			r = -EFAULT;
		else
			r = omapfb_set_color_key(fbi, &p.color_key);
		break;

	case OMAPFB_GET_COLOR_KEY:
		DBG("ioctl GET_COLOR_KEY\n");
		r = omapfb_get_color_key(fbi, &p.color_key);
		if (r)
			break;
		if (copy_to_user((void __user *)arg, &p.color_key,
				 sizeof(p.color_key)))
			r = -EFAULT;
		break;

	case OMAPFB_WAITFORVSYNC:
		DBG("ioctl WAITFORVSYNC\n");
		if (!display) {
			r = -EINVAL;
			break;
		}

		r = display->manager->wait_for_vsync(display->manager);
		break;

	case OMAPFB_WAITFORGO:
		DBG("ioctl WAITFORGO\n");
		if (!display) {
			r = -EINVAL;
			break;
		}

		r = omapfb_wait_for_go(fbi);
		break;

	/* LCD and CTRL tests do the same thing for backward
	 * compatibility */
	case OMAPFB_LCD_TEST:
		DBG("ioctl LCD_TEST\n");
		if (get_user(p.test_num, (int __user *)arg)) {
			r = -EFAULT;
			break;
		}
		if (!display || !display->driver->run_test) {
			r = -EINVAL;
			break;
		}

		r = display->driver->run_test(display, p.test_num);

		break;

	case OMAPFB_CTRL_TEST:
		DBG("ioctl CTRL_TEST\n");
		if (get_user(p.test_num, (int __user *)arg)) {
			r = -EFAULT;
			break;
		}
		if (!display || !display->driver->run_test) {
			r = -EINVAL;
			break;
		}

		r = display->driver->run_test(display, p.test_num);

		break;

	case OMAPFB_MEMORY_READ:
		DBG("ioctl MEMORY_READ\n");

		if (copy_from_user(&p.memory_read, (void __user *)arg,
					sizeof(p.memory_read))) {
			r = -EFAULT;
			break;
		}

		r = omapfb_memory_read(fbi, &p.memory_read);

		break;

	case OMAPFB_GET_VRAM_INFO: {
		unsigned long vram, free, largest;

		DBG("ioctl GET_VRAM_INFO\n");

		omap_vram_get_info(&vram, &free, &largest);
		p.vram_info.total = vram;
		p.vram_info.free = free;
		p.vram_info.largest_free_block = largest;

		if (copy_to_user((void __user *)arg, &p.vram_info,
					sizeof(p.vram_info)))
			r = -EFAULT;
		break;
	}

	case OMAPFB_SET_TEARSYNC: {
		DBG("ioctl SET_TEARSYNC\n");

		if (copy_from_user(&p.tearsync_info, (void __user *)arg,
					sizeof(p.tearsync_info))) {
			r = -EFAULT;
			break;
		}

		if (!display || !display->driver->enable_te) {
			r = -ENODEV;
			break;
		}

		r = display->driver->enable_te(display,
				!!p.tearsync_info.enabled);

		break;
	}

	case OMAPFB_GET_DISPLAY_INFO: {
		u16 xres, yres;

		DBG("ioctl GET_DISPLAY_INFO\n");

		if (display == NULL) {
			r = -ENODEV;
			break;
		}

		display->driver->get_resolution(display, &xres, &yres);

		p.display_info.xres = xres;
		p.display_info.yres = yres;
		p.display_info.width = 0;
		p.display_info.height = 0;

		if (copy_to_user((void __user *)arg, &p.display_info,
					sizeof(p.display_info)))
			r = -EFAULT;
		break;
	}


//--[[ LGE_UBIQUIX_MODIFIED_START : [email protected] [2011.08.07] - CAM color temp.
// LGE_DOM_UPDATE_S hyewon.eum 2010/10/01 {
	case OMAPFB_SET_CCS_MATRIX :
		printk("OMAPFB_SET_CCS_MATRIX\n");
		if (copy_from_user(&p.ccs_info, (void __user *)arg,
					sizeof(p.ccs_info))) {
			r = -EFAULT;
			break;
		}

		if (!cur_main_lcd_level) {
			r = -EIO;
			break;
		}

#ifdef CONFIG_OMAP2_DSS_HDMI
    if( is_hdmi_enabled() )
    {
      printk("====================================\n");
      printk("DOING HDMI NOW..SKIP OMAPFB_SET_CCS_MATRIX\n");
      printk("====================================\n");
      r = -EIO;
			break;
    }
#endif
		if (!display || !display->set_ccs) {
			r = -ENODEV;
			break;
		}

		{
			struct omap_ccs_matrix ccs_info;

			ccs_info.ry = p.ccs_info.ccs[0];
			ccs_info.rcr = p.ccs_info.ccs[1];
			ccs_info.rcb = p.ccs_info.ccs[2];
			ccs_info.gy = p.ccs_info.ccs[3];
			ccs_info.gcr = p.ccs_info.ccs[4];
			ccs_info.gcb = p.ccs_info.ccs[5];
			ccs_info.by = p.ccs_info.ccs[6];
			ccs_info.bcr = p.ccs_info.ccs[7];
			ccs_info.bcb = p.ccs_info.ccs[8];		

			r = display->set_ccs(display, &ccs_info);
		}
		
		break;
// LGE_DOM_UPDATE_S hyewon.eum 2010/10/01 }
//--]] LGE_UBIQUIX_MODIFIED_END : [email protected] [2011.08.07] - CAM color temp.

	default:
		dev_err(fbdev->dev, "Unknown ioctl 0x%x\n", cmd);
		r = -EINVAL;
	}

	if (r < 0)
		DBG("ioctl failed: %d\n", r);

	return r;
}
Example #4
0
// 20100920 [email protected] Refine IRQ handlder with a work queue [START_LGE]
static void pwrbutton_wq_func(struct work_struct *work){

	int err;
	u8 value;

	err = twl_i2c_read_u8(TWL4030_MODULE_PM_MASTER, &value, STS_HW_CONDITIONS);
	if (!err)  {
#if 0  // this code is necessary for hdmi sleep sequence.
		extern int is_hdmi_enabled(void);
		if(is_hdmi_enabled())
		{
			if(!(value & PWR_PWRON_IRQ))
			{
				input_report_key(pwr, KEY_BACK, 1);
				input_sync(pwr);
				input_report_key(pwr, KEY_BACK, 0);
				input_sync(pwr);
				
				extern int WHAT_MODE_IS_IT(void);
				switch(WHAT_MODE_IS_IT()) // this code is necessary for hdmi sleep sequence from HDMI to LCD in Video mode.
				{					           // it takes at least specific time(ms) to change overlay completely.
					case 0:
						// Image gallery
						msleep(1000);
						break;
					case 1:
						// Video mode
						msleep(4000); 
						break;
					case 2:
						// Normal mode
						break;
				}
				input_report_key(pwr, KEY_POWER, 1);	
				input_sync(pwr);
				input_report_key(pwr, KEY_POWER, 0);
				input_sync(pwr);
				msleep(700);
			}
		}
		else
		{
			input_report_key(pwr, KEY_POWER, value & PWR_PWRON_IRQ);
			input_sync(pwr);
			printk( KERN_WARNING "[PWRBUTTON] pwrbutton irq has been processed! %d\n",
				(value & PWR_PWRON_IRQ));
		}

#else
		input_report_key(pwr, KEY_POWER, value & PWR_PWRON_IRQ);
		input_sync(pwr);
		printk( KERN_WARNING "[PWRBUTTON] pwrbutton irq has been processed! %d\n",
			(value & PWR_PWRON_IRQ));
#endif

		
	} else {
		dev_err(pwr->dev.parent, "twl4030: i2c error %d while reading"
			" TWL4030 PM_MASTER STS_HW_CONDITIONS register\n", err);
		printk(KERN_WARNING "[PWRBUTTON] pwrbutton irq caused an error!\n");
	}
}
static void type_det_work(struct work_struct *work)
{
	//printk("[JIWON] type_det_work start\n");

	if(headset_status == 1)
	{
	    if(gpio_get_value(headset_sw_data->hook_gpio) == 0) 
	    {
			headset_type = HUB_HEADPHONE;
			//printk("[JIWON] type_det_work : HUB_HEADPHONE\n");
		}
		else
		{
			headset_type = HUB_HEADSET;
			//printk("[JIWON] type_det_work : HUB_HEADSET\n");		
	}
	}
	else
	{
       	//printk("[JIWON] type_det_work : no headset\n");		
		headset_type = HUB_NONE;
#if defined(CONFIG_MACH_LGE_HUB_REV_A) // 20100814 , dmb ant detect [START_LGE]		
	//nothing
#else
		headset_sw_data->dmb_ant_detected = 0;
		set_dmb_status(headset_sw_data->dmb_ant_detected);	//		
#endif		
	}


#if defined(CONFIG_MACH_LGE_HUB_REV_A) 	// 20100814 , dmb ant detect [START_LGE]
	//nothing
#else
//	msleep(100);
    if(system_rev > 3 && gpio_get_value(headset_sw_data->dmb_ant_gpio) == 1) 
    {
		printk("[LUCKYJUN77] type_det_work : dmb_ant detected\n");
		headset_type = HUB_NONE;
		headset_sw_data->dmb_ant_detected = 1;
		set_dmb_status(headset_sw_data->dmb_ant_detected);	//		
//		switch_set_state(&headset_sw_data->sdev, headset_type);		
//		return;
	}
#endif	// 20100814 , dmb ant detect [START_LGE]

#if defined(CONFIG_MACH_LGE_HUB_REV_A) // 20100814 , dmb ant detect [START_LGE]
    if(headset_type == HUB_NONE){
		//hub_headsetdet_bias(0);
		gpio_direction_output(MIC_BIAS_LDO, 0);
		gpio_set_value(MIC_BIAS_LDO, 0);
    }
#else
	if(system_rev <= 3)	//revB case
	{
    if(headset_type == HUB_NONE)
		//hub_headsetdet_bias(0);
		gpio_direction_output(MIC_BIAS_LDO, 0);
		gpio_set_value(MIC_BIAS_LDO, 0);
	}
	else 
	{
	if(headset_type == HUB_NONE && headset_sw_data->dmb_ant_detected == 0)
		//hub_headsetdet_bias(0);	
		gpio_direction_output(MIC_BIAS_LDO, 0);
		gpio_set_value(MIC_BIAS_LDO, 0);
	}
#endif	// 20100814 , dmb ant detect [START_LGE]
	
 /* 20110215  for EarJack & Hook Action [START] */
   if(headset_type == 1) 
   	{	   
    	IsHeadsetInserted=1;
    	//printk("[JIWON] type_det_work : IsHeadsetInserted=1\n");
   	}
   else
   	{
    	IsHeadsetInserted=0;
	    //printk("[JIWON] type_det_work : IsHeadsetInserted=0\n");
   	}
 /* 20110215  for EarJack & Hook Action [END] */
  
	switch_set_state(&headset_sw_data->sdev, headset_type);

// 20100608 , headset event inform for hdmi [START_LGE]
#if 1
#if defined(CONFIG_NXP_HDMI)
	if(is_hdmi_enabled() == 1)
	{
		if(headset_type == HUB_NONE)
			Hdmi_setAudioMute(0);
		else
			Hdmi_setAudioMute(1);
	}
#endif
#endif
// 20100608 , headset event inform for hdmi [END_LGE]
	
}
Example #6
0
static void headset_det_work(struct work_struct *work)
{
	headset_status = gpio_get_value(headset_sw_data->gpio); 

	if(headset_status == 0)
	{
#if defined(CONFIG_PRODUCT_LGE_KU5900) || defined(CONFIG_PRODUCT_LGE_LU6800)||defined(CONFIG_PRODUCT_LGE_P970)
	#ifdef USE_LDOBIAS	
		gpio_direction_output(MIC_BIAS_LDO, 0);
		gpio_set_value(MIC_BIAS_LDO, 0);
	#else
		hub_headsetdet_bias(0);
	#endif
#elif defined(CONFIG_PRODUCT_LGE_HUB)
	#ifdef USE_LDOBIAS	
		gpio_direction_output(MIC_BIAS_LDO, 0);
		gpio_set_value(MIC_BIAS_LDO, 0);
	#endif
		hub_headsetdet_bias(0);
#endif
//For_Resume_Speed		DBG("[LUCKYJUN77] headset_det_work : headset_type = HUB_NONE\n");
		DBG("[LUCKYJUN77] headset_det_work : headset_type = HUB_NONE\n");

		headset_type = HUB_NONE;
		switch_set_state(&headset_sw_data->sdev, headset_type);
		#if defined(CONFIG_OMAP2_DSS_HDMI)  
		if(is_hdmi_enabled() == 1)
		{
			DBG("(headset_det_work == Hdmi_setAudioMute(0)\n");
			Hdmi_setAudioMute(0);
		}
	    #endif
	// 20110425 [email protected] detect headset during sleep [START]		
		set_wakelock(0);		
	// 20110425 [email protected] detect headset during sleep [END]		
		return;		
	}
	
	msleep(100);

#if defined(CONFIG_PRODUCT_LGE_KU5900) || defined(CONFIG_PRODUCT_LGE_LU6800)||defined(CONFIG_PRODUCT_LGE_P970)
	#ifdef USE_LDOBIAS	
		gpio_direction_output(MIC_BIAS_LDO, 1);
		gpio_set_value(MIC_BIAS_LDO, 1);
	#else
		hub_headsetdet_bias(1);// LGE_B_S 20101217 [email protected], porting
	#endif
#elif defined(CONFIG_PRODUCT_LGE_HUB)
	#ifdef USE_LDOBIAS	
		gpio_direction_output(MIC_BIAS_LDO, 1);
		gpio_set_value(MIC_BIAS_LDO, 1);
	#endif
		hub_headsetdet_bias(1);// LGE_B_S 20101217 [email protected], porting

#endif

#if defined(CONFIG_PRODUCT_LGE_KU5900)||defined(CONFIG_PRODUCT_LGE_P970) || defined(CONFIG_PRODUCT_LGE_LU6800)	// 20100814 [email protected], dmb ant detect [START_LGE]
	//nothing
#elif defined(CONFIG_PRODUCT_LGE_HUB)
   if(system_rev > 3 && gpio_get_value(headset_sw_data->dmb_ant_gpio) == 1) 
    {
		DBG("[LUCKYJUN77] headset_det_work : dmb_ant detected\n");
		headset_sw_data->dmb_ant_detected = 1;
		set_dmb_status(headset_sw_data->dmb_ant_detected);	//[email protected]
		headset_type = HUB_NONE;
		return;
	}
#endif	
	DBG("[LUCKYJUN77] headset_det_work : dmb_ant detected\n");

	schedule_delayed_work(&headset_sw_data->delayed_work,	msecs_to_jiffies(type_detection_tim));
	
}