Exemple #1
0
void acc_con_intr_handle(struct work_struct *_work)
{
	//ACC_CONDEV_DBG("");
	//check the flag MHL or keyboard
	int cur_state = gpio_get_value(GPIO_ACCESSORY_INT);

	if(cur_state !=DOCK_STATE)
	{
		if(1==cur_state)
		{
			ACC_CONDEV_DBG("docking station detatched!!!");
			DOCK_STATE = cur_state;
#if defined(CONFIG_KEYBOARD_P1)
			check_keyboard_dock();
#endif			
#ifdef CONFIG_MHL_SII9234		
			//call MHL deinit
			MHD_HW_Off();
			//msleep(120);
			//max8998_ldo3_8_control(0,LDO_TV_OUT);  //ldo 3,8 off
			//printk("%s: LDO3_8 is disabled by TV \n", __func__);
			TVout_LDO_ctrl(false);
			
#endif	
			acc_dock_check(CONNECTED_DOCK , DOCK_STATE);
			CONNECTED_DOCK = 0;
		}
		else if(0==cur_state)
		{
			ACC_CONDEV_DBG("docking station attatched!!!");
			DOCK_STATE = cur_state;
#if defined(CONFIG_KEYBOARD_P1)
        	if(check_keyboard_dock())
        	{
				CONNECTED_DOCK = DOCK_KEYBD;
			}
			else
#endif				
        	{				
#ifdef CONFIG_MHL_SII9234
				CONNECTED_DOCK = DOCK_DESK;
				//max8998_ldo3_8_control(1,LDO_TV_OUT); //ldo 3,8 on
				//printk("%s: LDO3_8 is enabled by TV \n", __func__);
				//msleep(120);
				TVout_LDO_ctrl(true);
				//call MHL init	
				sii9234_tpi_init();
#endif
         	}
			acc_dock_check(CONNECTED_DOCK , DOCK_STATE);
		}
	}
	else
	{
		ACC_CONDEV_DBG("Ignored");
	}
	enable_irq(IRQ_ACCESSORY_INT);
}
Exemple #2
0
static int acc_con_resume(struct platform_device *pdev)
{
	ACC_CONDEV_DBG("");
	if(0 == gpio_get_value(GPIO_ACCESSORY_INT))
	{
		if(CONNECTED_DOCK == DOCK_KEYBD)
		{
			check_keyboard_dock();
		}
		else if(CONNECTED_DOCK == DOCK_DESK)
		{
#ifdef CONFIG_MHL_SII9234		
			//max8998_ldo3_8_control(1,LDO_TV_OUT); //ldo 3,8 on
			//printk("%s: LDO3_8 is enabled by TV \n", __func__);
			//msleep(120);
			
			//call MHL init 
		sii9234_tpi_init();
#endif
		}

	}
	return 0;
}
irqreturn_t acc_con_interrupt(int irq, void *ptr)
{
	struct acc_con_info *acc = ptr;
	int cur_state;

	ACC_CONDEV_DBG("");

	/* check the flag MHL or keyboard */
	cur_state = gpio_get_value(acc->pdata->accessory_irq_gpio);
	if (cur_state == 1) {
		if (acc->current_dock == DOCK_NONE) {
			return;
		}

		ACC_CONDEV_DBG("[30PIN] dock station detached!!!");
		switch_set_state(&acc->dock_switch, UEVENT_DOCK_NONE);
#ifdef CONFIG_SEC_KEYBOARD_DOCK
		check_keyboard_dock(false);
#endif
#ifdef CONFIG_MHL_SII9234
		/*call MHL deinit */
		if (acc->mhl_pwr_state) {
			MHD_HW_Off();
#if defined(CONFIG_MACH_SAMSUNG_P5) || (CONFIG_MACH_SAMSUNG_P5WIFI)
			hpd_force_low();
#endif
			acc->mhl_pwr_state = false;
		}
		/*TVout_LDO_ctrl(false); */
#endif
		acc_dock_check(acc, false);
		set_irq_type(irq,
			IRQF_TRIGGER_LOW | IRQF_ONESHOT);
	} else if (0 == cur_state) {

#ifdef CONFIG_SEC_KEYBOARD_DOCK
		if (check_keyboard_dock(true)) {
			acc->current_dock = DOCK_KEYBOARD;
			ACC_CONDEV_DBG("[30PIN] keyboard dock station attached!!!");
			switch_set_state(&acc->dock_switch, UEVENT_DOCK_KEYBOARD);
		}
		else
#endif
		{
#ifdef CONFIG_MHL_SII9234
			ACC_CONDEV_DBG("[30PIN] desktop dock station attached!!!");
			switch_set_state(&acc->dock_switch, UEVENT_DOCK_DESK);
			acc->current_dock = DOCK_DESK;
#endif
			if(acc->pdata->acc_power) {
				ACC_CONDEV_DBG("[30PIN] otg 5v up!!!");
				acc->pdata->acc_power(2, true);
			} else
				printk(KERN_ERR"[30PIN][ERROR] acc_power is null !!!");
		}
		if (!acc->mhl_pwr_state) {
			sii9234_tpi_init();
			acc->mhl_pwr_state = true;
		}
		acc_dock_check(acc, true);
		set_irq_type(irq,
			IRQF_TRIGGER_HIGH | IRQF_ONESHOT);
	}

	return IRQ_HANDLED;
}