static void FSA9480_ReadIntRegister(struct work_struct * work) { u8 interrupt1 , device1, device2, temp; DEBUG_FSA9480("[FSA9480] %s\n", __func__); fsa9480_read( REGISTER_INTERRUPT1, &interrupt1); msleep(5); fsa9480_read( REGISTER_DEVICETYPE1, &device1); msleep(5); fsa9480_read( REGISTER_DEVICETYPE2, &device2); usb_state = (device2 << 8) | (device1 << 0); if((interrupt1 & FSA9480_INT1_ATTACH) || (FSA9480_Get_JIG_Status() && maxim_lpm_chg_status())) { fsa9480_device1 = device1; fsa9480_device2 = device2; if(fsa9480_device1 != FSA9480_DEV_TY1_DED_CHG) { s3c_usb_cable(USB_CABLE_ATTACHED); } if(fsa9480_device1&FSA9480_DEV_TY1_CAR_KIT) { msleep(5); fsa9480_write( REGISTER_CARKITSTATUS, 0x02); msleep(5); fsa9480_read( REGISTER_CARKITINT1, &temp); } } msleep(5); fsa9480_write( REGISTER_CONTROL, 0x1E); fsa9480_write( REGISTER_INTERRUPTMASK1, 0xFC); FSA9480_ProcessDevice(fsa9480_device1, fsa9480_device2, interrupt1); if((interrupt1 & FSA9480_INT1_DETACH) || (FSA9480_Get_JIG_Status() && !maxim_lpm_chg_status())) { if(fsa9480_device1 != FSA9480_DEV_TY1_DED_CHG) { s3c_usb_cable(USB_CABLE_DETACHED); } fsa9480_device1 = 0; fsa9480_device2 = 0; } enable_irq(IRQ_FSA9480_INTB); }
void acc_ID_intr_handle(struct work_struct *_work) { //ACC_CONDEV_DBG(""); int acc_ID_val = 0, adc_val; acc_ID_val = gpio_get_value(GPIO_DOCK_INT); ACC_CONDEV_DBG("GPIO_DOCK_INT is %d",acc_ID_val); if(acc_ID_val!=ACC_STATE) { if(1==acc_ID_val) { ACC_CONDEV_DBG("Accessory detatched"); ACC_STATE = acc_ID_val; acc_notified(false); set_irq_type(IRQ_DOCK_INT, IRQ_TYPE_EDGE_FALLING); #ifdef CONFIG_USB_S3C_OTG_HOST if(intr_count++) s3c_usb_cable(USB_OTGHOST_DETACHED); #endif } else if(0==acc_ID_val) { msleep(420); //workaround for jack ACC_CONDEV_DBG("Accessory attached"); ACC_STATE = acc_ID_val; adc_val = connector_detect_change(); acc_notified(adc_val); set_irq_type(IRQ_DOCK_INT, IRQ_TYPE_EDGE_RISING); #ifdef CONFIG_USB_S3C_OTG_HOST // check USB OTG Host ADC range... if(adc_val > 2700 && adc_val < 2799) { s3c_usb_cable(USB_OTGHOST_ATTACHED); } #endif } } else { ACC_CONDEV_DBG("Ignored"); } enable_irq(IRQ_DOCK_INT); }
static void connectivity_switching_init(struct work_struct *ignored) { int usb_sel, uart_sel, samsung_kies_sel, ums_sel, mtp_sel, vtp_sel, askon_sel; int lpm_mode_check = charging_mode_get(); switch_sel = 0; dmsg("\n"); if (sec_get_param_value) { sec_get_param_value(__SWITCH_SEL, &switch_sel); cancel_delayed_work(&switch_init_work); } else { schedule_delayed_work(&switch_init_work, msecs_to_jiffies(100)); return; } if(BOOTUP) { BOOTUP = 0; otg_phy_init(); //USB Power on after boot up. } usb_sel = switch_sel & (int)(USB_SEL_MASK); uart_sel = (switch_sel & (int)(UART_SEL_MASK)) >> 1; samsung_kies_sel = (switch_sel & (int)(USB_SAMSUNG_KIES_MASK)) >> 2; ums_sel = (switch_sel & (int)(USB_UMS_MASK)) >> 3; mtp_sel = (switch_sel & (int)(USB_MTP_MASK)) >> 4; #if !defined(CONFIG_TARGET_LOCALE_NTT) // disable tethering xmoondash vtp_sel = (switch_sel & (int)(USB_VTP_MASK)) >> 5; #endif askon_sel = (switch_sel & (int)(USB_ASKON_MASK)) >> 6; printk("\n[WJ] %s, %s, switch_sel=%d\n", __FILE__, __FUNCTION__, switch_sel); if( samsung_kies_sel ) currentusbstatus = USBSTATUS_SAMSUNG_KIES; else if(ums_sel) currentusbstatus = USBSTATUS_UMS; else if(mtp_sel) currentusbstatus = USBSTATUS_MTPONLY; else if(askon_sel) currentusbstatus = USBSTATUS_ASKON; if((switch_sel == 0x1) || (factoryresetstatus == 0xAE)) { PathSelStore(AP_USB_MODE); Ap_Cp_Switch_Config(AP_USB_MODE); usb_switching_value_update(SWITCH_PDA); PathSelStore(CP_UART_MODE); Ap_Cp_Switch_Config(CP_UART_MODE); uart_switching_value_update(SWITCH_MODEM); } else { if(usb_sel) { Ap_Cp_Switch_Config(AP_USB_MODE); usb_switching_value_update(SWITCH_PDA); } else { if(MicroJigUARTOffStatus) { Ap_Cp_Switch_Config(AP_USB_MODE); } else { Ap_Cp_Switch_Config(CP_USB_MODE); usb_switching_value_update(SWITCH_MODEM); } } if(uart_sel) { Ap_Cp_Switch_Config(AP_UART_MODE); uart_switching_value_update(SWITCH_PDA); } else { Ap_Cp_Switch_Config(CP_UART_MODE); uart_switching_value_update(SWITCH_MODEM); } } /*Turn off usb power when LPM mode*/ if(lpm_mode_check) otg_phy_off(); switching_value_update(); if((switch_sel == 1) || (factoryresetstatus == 0xAE)) { usb_switch_select(USBSTATUS_SAMSUNG_KIES); mtp_mode_on = 1; ap_usb_power_on(0); UsbMenuSelStore(0); } else { if(usb_sel) { if(samsung_kies_sel) { usb_switch_select(USBSTATUS_SAMSUNG_KIES); /*USB Power off till MTP Appl launching*/ #ifdef _SUPPORT_SAMSUNG_AUTOINSTALLER_ //mtp_mode_on = 1; //ap_usb_power_on(0); #else mtp_mode_on = 1; ap_usb_power_on(0); #endif } else if(mtp_sel) { usb_switch_select(USBSTATUS_MTPONLY); /*USB Power off till MTP Appl launching*/ mtp_mode_on = 1; ap_usb_power_on(0); } else if(ums_sel) { usb_switch_select(USBSTATUS_UMS); } #if !defined(CONFIG_TARGET_LOCALE_NTT) // disable tethering xmoondash else if(vtp_sel) { usb_switch_select(USBSTATUS_VTP); } #endif else if(askon_sel) { usb_switch_select(USBSTATUS_ASKON); } } } if(!FSA9480_Get_USB_Status()) { s3c_usb_cable(1); mdelay(5); s3c_usb_cable(0); } else { s3c_usb_cable(1); indicator_dev.state = 1; } dmsg("switch_sel : 0x%x\n", switch_sel); microusb_uart_status(1); connectivity_switching_init_state=1; }
void FSA9480_ReadIntRegister(struct work_struct *work) { struct i2c_client *client = fsa9480_i2c_client; u8 interrupt1 ,interrupt2 ,device1, device2, temp; DEBUG_FSA9480("[FSA9480] %s\n", __func__); fsa9480_read(client, REGISTER_INTERRUPT1, &interrupt1); msleep(5); fsa9480_read(client, REGISTER_INTERRUPT2, &interrupt2); msleep(5); fsa9480_read(client, REGISTER_DEVICETYPE1, &device1); msleep(5); fsa9480_read(client, REGISTER_DEVICETYPE2, &device2); usb_state = (device2 << 8) | (device1 << 0); if(interrupt1 & FSA9480_INT1_ATTACH) { fsa9480_device1 = device1; fsa9480_device2 = device2; if(fsa9480_device1 != FSA9480_DEV_TY1_DED_CHG) { //DEBUG_FSA9480("FSA9480_enable LDO8\n"); s3c_usb_cable(1); } if(fsa9480_device1&FSA9480_DEV_TY1_CAR_KIT) { msleep(5); fsa9480_write(client, REGISTER_CARKITSTATUS, 0x02); msleep(5); fsa9480_read(client, REGISTER_CARKITINT1, &temp); } } msleep(5); fsa9480_write(client, REGISTER_CONTROL, 0x1E); fsa9480_write(client, REGISTER_INTERRUPTMASK1, 0xFC); #if defined(CONFIG_ARIES_NTT) // Modify NTTS1 //syyoon 20100724 fix for SC - Ad_10_2nd - 0006. When USB is removed, sometimes attatch value gets 0x00 if((fsa9480_device1 == FSA9480_DEV_TY1_USB) && (!interrupt1)) { printk("[FSA9480] dev1=usb, attach change is from 0 to 2\n"); interrupt1 = FSA9480_INT1_DETACH; } #endif FSA9480_ProcessDevice(fsa9480_device1, fsa9480_device2, interrupt1); if(interrupt1 & FSA9480_INT1_DETACH) { if(fsa9480_device1 != FSA9480_DEV_TY1_DED_CHG) { //DEBUG_FSA9480("FSA9480_disable LDO8\n"); s3c_usb_cable(0); } fsa9480_device1 = 0; fsa9480_device2 = 0; } enable_irq(IRQ_FSA9480_INTB); }
void FSA9480_ProcessDevice(u8 dev1, u8 dev2, u8 attach) { DEBUG_FSA9480("[FSA9480] %s (dev1 : 0x%x, dev2 : 0x%x)\n", __func__, dev1, dev2); if(!attach && !chip_error && (mtp_mode_on == 1)) chip_error = 0xAE; if(dev1) { switch(dev1) { case FSA9480_DEV_TY1_AUD_TY1: DEBUG_FSA9480("Audio Type1 "); if(attach & FSA9480_INT1_ATTACH) DEBUG_FSA9480("FSA9480_DEV_TY1_AUD_TY1 --- ATTACH\n"); else DEBUG_FSA9480("FSA9480_DEV_TY1_AUD_TY1 --- DETACH\n"); break; case FSA9480_DEV_TY1_AUD_TY2: DEBUG_FSA9480("Audio Type2 "); break; case FSA9480_DEV_TY1_USB: DEBUG_FSA9480("USB attach or detach: %d\n",attach); if(attach & FSA9480_INT1_ATTACH) { DEBUG_FSA9480("FSA9480_DEV_TY1_USB --- ATTACH\n"); MicroUSBStatus = 1; log_via_usb = log_usb_enable; #if 0 if(connectivity_switching_init_state) s3c_usb_cable(1); #endif usb_switch_state(); if(!askonstatus) UsbIndicator(1); else inaskonstatus = 0; uUSB_check_finished = 1; // finished } else if(attach & FSA9480_INT1_DETACH) { MicroUSBStatus = 0; inaskonstatus = 0; chip_error = 0; #if 0 if(connectivity_switching_init_state) s3c_usb_cable(0); #endif UsbIndicator(0); askon_gadget_disconnect(); DEBUG_FSA9480("FSA9480_DEV_TY1_USB --- DETACH\n"); uUSB_check_finished = 0; // finished } break; case FSA9480_DEV_TY1_UART: DEBUG_FSA9480("UART\n"); break; case FSA9480_DEV_TY1_CAR_KIT: DEBUG_FSA9480("Carkit\n"); break; case FSA9480_DEV_TY1_USB_CHG: DEBUG_FSA9480("USB\n"); break; case FSA9480_DEV_TY1_DED_CHG: { if(attach & FSA9480_INT1_ATTACH) { DEBUG_FSA9480("Dedicated Charger ATTACH\n"); uUSB_check_finished = 1; // finished //A9480_ChangePathToAudio(TRUE); } else if(attach & FSA9480_INT1_DETACH) { DEBUG_FSA9480("Dedicated Charger DETACH\n"); uUSB_check_finished = 0; // finished //A9480_ChangePathToAudio(FALSE); } } break; case FSA9480_DEV_TY1_USB_OTG: DEBUG_FSA9480("USB OTG\n"); break; default: DEBUG_FSA9480("Unknown device\n"); break; } } if(dev2) { switch(dev2) { case FSA9480_DEV_TY2_JIG_USB_ON: DEBUG_FSA9480("JIG USB ON attach or detach: %d",attach); if(attach & FSA9480_INT1_ATTACH) { DEBUG_FSA9480("FSA9480_DEV_TY2_JIG_USB_ON --- ATTACH\n"); MicroJigUSBOnStatus = 1; #if 0 if(connectivity_switching_init_state) s3c_usb_cable(1); #endif usb_switch_state(); if(!askonstatus) UsbIndicator(1); else inaskonstatus = 0; } else if(attach & FSA9480_INT1_DETACH) { DEBUG_FSA9480("FSA9480_DEV_TY2_JIG_USB_ON --- DETACH\n"); chip_error = 0; MicroJigUSBOnStatus = 0; inaskonstatus = 0; #if 0 if(connectivity_switching_init_state) s3c_usb_cable(0); #endif UsbIndicator(0); askon_gadget_disconnect(); } break; case FSA9480_DEV_TY2_JIG_USB_OFF: if(attach & FSA9480_INT1_ATTACH) { DEBUG_FSA9480("FSA9480_DEV_TY2_JIG_USB_OFF --- ATTACH\n"); MicroJigUSBOffStatus = 1; #if 0 if(connectivity_switching_init_state) s3c_usb_cable(1); #endif usb_switch_state(); if(!askonstatus) UsbIndicator(1); else inaskonstatus = 0; } else if(attach & FSA9480_INT1_DETACH) { DEBUG_FSA9480("FSA9480_DEV_TY2_JIG_USB_OFF --- DETACH\n"); chip_error = 0; MicroJigUSBOffStatus = 0; inaskonstatus = 0; #if 0 if(connectivity_switching_init_state) s3c_usb_cable(0); #endif UsbIndicator(0); askon_gadget_disconnect(); } DEBUG_FSA9480("JIG USB OFF \n"); break; case FSA9480_DEV_TY2_JIG_UART_ON: if(attach & FSA9480_INT1_ATTACH) { DEBUG_FSA9480("FSA9480_DEV_TY2_JIG_UART_ON --- ATTACH\n"); set_dock_state((int)CAR_DOCK_INSERTED); g_dock = CAR_DOCK_INSERTED; } else { DEBUG_FSA9480("FSA9480_DEV_TY2_JIG_UART_ON --- DETACH\n"); set_dock_state((int)DOCK_REMOVED); g_dock = DOCK_REMOVED; } DEBUG_FSA9480("JIG UART ON\n"); break; case FSA9480_DEV_TY2_JIG_UART_OFF: if(attach & FSA9480_INT1_ATTACH) { DEBUG_FSA9480("FSA9480_DEV_TY2_JIG_UART_OFF --- ATTACH\n"); MicroJigUARTOffStatus = 1; uart_insert_switch_state(); } else { DEBUG_FSA9480("FSA9480_DEV_TY2_JIG_UART_OFF --- DETACH\n"); MicroJigUARTOffStatus = 0; uart_remove_switch_state(); } DEBUG_FSA9480("JIT UART OFF\n"); break; case FSA9480_DEV_TY2_PDD: DEBUG_FSA9480("PPD \n"); break; case FSA9480_DEV_TY2_TTY: DEBUG_FSA9480("TTY\n"); break; case FSA9480_DEV_TY2_AV: DEBUG_FSA9480("AudioVideo\n"); if (attach & FSA9480_INT1_DETACH) { DEBUG_FSA9480("FSA9480_disable_spk\n"); set_dock_state((int)DOCK_REMOVED); g_dock = DOCK_REMOVED; } else { DEBUG_FSA9480("FSA9480_enable_spk\n"); set_dock_state((int)HOME_DOCK_INSERTED); FSA9480_Enable_SPK(1); g_dock = HOME_DOCK_INSERTED; } break; default: DEBUG_FSA9480("Unknown device\n"); break; } } if((attach == FSA9480_INT1_ATTACH) && (chip_error == 0xAE) && (mtp_mode_on == 1)) { ap_usb_power_on(1); chip_error = 0; } }