Esempio n. 1
0
void FSA9480_Enable_CP_USB(u8 enable)
{
	struct i2c_client *client = fsa9480_i2c_client;
	byte reg_value=0;
	byte reg_address=0x0D;

	if(enable)
	{
		printk("[FSA9480_Enable_CP_USB] Enable CP USB\n");
		mdelay(10);
		Get_MAX8998_PM_ADDR(reg_address, &reg_value, 1); // read 0x0D register
		check_reg = reg_value;
		reg_value = ((0x2<<5)|reg_value);
		check_reg = reg_value;
		Set_MAX8998_PM_ADDR(reg_address,&reg_value,1);
		check_reg = reg_value;
			
		mdelay(10);
#if defined(CONFIG_GALAXY_I897)
                fsa9480_write(client, REGISTER_MANUALSW1, 0x90);  // D+/- switching by Audio_L/R
#else
		fsa9480_write(client, REGISTER_MANUALSW1, 0x48);  // D+/- switching by Audio_L/R in HW04
#endif

		mdelay(10);
		fsa9480_write(client, REGISTER_CONTROL, 0x1A);	

	}
	else
	{
		printk("[FSA9480_Enable_AP_USB] Enable AP USB\n");
		Get_MAX8998_PM_ADDR(reg_address, &reg_value, 1); // read 0x0D register
	
		if(askonstatus||mtp_mode_on)
		ap_usb_power_on(0);
		else
		ap_usb_power_on(1);
		mdelay(10);
		fsa9480_write(client, REGISTER_CONTROL, 0x1E);
	}
}
Esempio n. 2
0
void FSA9480_Enable_CP_USB(u8 enable)
{
	byte reg_value=0;
	byte reg_address=0x0D;

	if(enable)
	{
		printk("[FSA9480_Enable_CP_USB] Enable CP USB\n");
		mdelay(10);
		Get_MAX8998_PM_ADDR(reg_address, &reg_value, 1); // read 0x0D register
		check_reg = reg_value;
		reg_value = ((0x2<<5)|reg_value);
		check_reg = reg_value;
		Set_MAX8998_PM_ADDR(reg_address,&reg_value,1);
		check_reg = reg_value;
			
		mdelay(10);
		fsa9480_write( REGISTER_MANUALSW1, 0x90);	

		mdelay(10);
		fsa9480_write( REGISTER_CONTROL, 0x1A);	

	}
	else
	{
		printk("[FSA9480_Enable_AP_USB] Enable AP USB\n");
		Get_MAX8998_PM_ADDR(reg_address, &reg_value, 1); // read 0x0D register

		if(askonstatus||mtp_mode_on)
			ap_usb_power_on(0);
		else
			ap_usb_power_on(1);
		mdelay(10);
		fsa9480_write( REGISTER_CONTROL, 0x1E);	
	}

}
Esempio n. 3
0
static ssize_t Mtp_switch_store(struct device *dev, struct device_attribute *attr,	const char *buf, size_t size)
{		
	if (strncmp(buf, "Mtp", 3) == 0)
	{
		if(mtp_mode_on)
		{
			printk("[Mtp_switch_store]AP USB power on. \n");
#ifdef VODA
			askon_switch_select(USBSTATUS_SAMSUNG_KIES);
#endif
			ap_usb_power_on(1);
		}
	}
	else if (strncmp(buf, "OFF", 3) == 0)
	{
		printk("[Mtp_switch_store]AP USB power off. \n");
		usb_state = 0;
		usb_mtp_select(1);
	}
	return size;
}
Esempio n. 4
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;

}
Esempio n. 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;
    }

}