예제 #1
0
/*
 * 	s3c_udc_disable - disable USB device controller
 */
static void s3c_udc_disable(struct s3c_udc *dev)
{
	DEBUG_PM("%s: %p\n", __func__, dev);

	s3c_udc_set_address(dev, 0);

	//resolved system lockup at switching usb settings mode
	writel(CORE_SOFT_RESET, S3C_UDC_OTG_GRSTCTL);		
	while(!(readl(S3C_UDC_OTG_GRSTCTL) & (AHB_MASTER_IDLE))) 	{ndelay(1);}

	dev->ep0state = WAIT_FOR_SETUP;
	dev->gadget.speed = USB_SPEED_UNKNOWN;
	dev->udc_state = USB_STATE_NOTATTACHED;

#if USING_MACH_OTG_PHY
	otg_phy_off();
#else
	writel(readl(S3C_USBOTG_PHYPWR)|(0x1F<<1), S3C_USBOTG_PHYPWR);
	writel(0, S5P_USB_PHY_CONTROL);
#endif
}
예제 #2
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;

}