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); }
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; }