示例#1
0
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);
}
示例#2
0
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);
}
示例#3
0
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;

}
示例#4
0
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);
}
示例#5
0
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;
    }

}