void usb_phy_switch_to_usb(void)
{
	int var;
	/* Set RG_UART_EN to 0 */
	var = USB_PHY_Read_Register8(0x6E);
	DBG(0, "[MUSB]addr: 0x6E, value: %x\n", var);
	USB_PHY_Write_Register8(var & ~0x01, 0x6E);
	DBG(0, "[MUSB]addr: 0x6E, value after: %x\n", USB_PHY_Read_Register8(0x6E));

	/* Set RG_USB20_DM_100K_EN to 0 */
	var = USB_PHY_Read_Register8(0x22);
	DBG(0, "[MUSB]addr: 0x22, value: %x\n", var);
	USB_PHY_Write_Register8(var & ~0x02, 0x22);
	DBG(0, "[MUSB]addr: 0x22, value after: %x\n", USB_PHY_Read_Register8(0x22));

	var = DRV_Reg8(UART1_BASE + 0x90);
	DBG(0, "[MUSB]addr: 0x11002090 (UART1), value: %x\n", var);
	DRV_WriteReg8(UART1_BASE + 0x90, var & ~0x01);
	DBG(0, "[MUSB]addr: 0x11002090 (UART1), value after: %x\n\n", DRV_Reg8(UART1_BASE + 0x90));
#if 0
	/* SW connect */
	var = USB_PHY_Read_Register8(0x68);
	DBG(0, "[MUSB]addr: 0x68, value: %x\n", var);
	USB_PHY_Write_Register8(0x0, 0x68);
	DBG(0, "[MUSB]addr: 0x68, value after: %x\n", USB_PHY_Read_Register8(0x68));

	var = USB_PHY_Read_Register8(0x6A);
	DBG(0, "[MUSB]addr: 0x6A, value: %x\n", var);
	USB_PHY_Write_Register8(0x0, 0x6A);
	DBG(0, "[MUSB]addr: 0x6A, value after: %x\n", USB_PHY_Read_Register8(0x6A));
	/* SW connect */
#endif
	/* SW connect */
	mt_usb_connect();
}
Beispiel #2
0
void MT6302_Writer_LCD(kal_uint8 data)
{
	kal_uint32 i, loopIndex;

	if(0 != MT6302_getSPIInterface())
		ASSERT(0);

	i = SaveAndSetIRQMask();
	if(DRVPDN_CON1_LCD & DRV_Reg(DRVPDN_CON1)){
		 RestoreIRQMask(i);
		ASSERT(0);
	}

	if(0xc != REG_LCD_SERIAL_CONFIG){
		 RestoreIRQMask(i);
		ASSERT(0);
	}

	if(KAL_FALSE == MT6302_checkSPIMode()){
		RestoreIRQMask(i);
		ASSERT(0);
	}

	/*	becareful that SW will hang on here until LCD controller return RDY signal on bus
	*	accoring to the measurement, in the slowest timing setting, LCD takes 2us to send on byte
	*/
	 //DRV_Reg8(MT6302_SPI_LCDSerialData) = data;
	 DRV_WriteReg8((MT6302_SPI_LCDSerialData), data);

	/*dummy read to make sure former byte has been written on SPI*/
	MT6302_LCD_dummyReadValue = DRV_Reg8(MT6302_SPI_LCDSerialData);
	
	 RestoreIRQMask(i);
	
	// 285 OK
	// 250 FAIL
	
	if( 0x60 == (0xE0 & data))
		//noke_drv_mt6302_delay_us(300);
		noke_drv_mt6302_delay_us(450);
	
}
void usb_phy_switch_to_uart(void)
{
	int var;
#if 0
	/* SW disconnect */
	var = USB_PHY_Read_Register8(0x68);
	DBG(0, "[MUSB]addr: 0x68, value: %x\n", var);
	USB_PHY_Write_Register8(0x15, 0x68);
	DBG(0, "[MUSB]addr: 0x68, value after: %x\n", USB_PHY_Read_Register8(0x68));

	var = USB_PHY_Read_Register8(0x6A);
	DBG(0, "[MUSB]addr: 0x6A, value: %x\n", var);
	USB_PHY_Write_Register8(0x0, 0x6A);
	DBG(0, "[MUSB]addr: 0x6A, value after: %x\n", USB_PHY_Read_Register8(0x6A));
	/* SW disconnect */
#endif
	/* Set ru_uart_mode to 2'b01 */
	var = USB_PHY_Read_Register8(0x6B);
	DBG(0, "[MUSB]addr: 0x6B, value: %x\n", var);
	USB_PHY_Write_Register8(var | 0x7C, 0x6B);
	DBG(0, "[MUSB]addr: 0x6B, value after: %x\n", USB_PHY_Read_Register8(0x6B));

	/* Set RG_UART_EN to 1 */
	var = USB_PHY_Read_Register8(0x6E);
	DBG(0, "[MUSB]addr: 0x6E, value: %x\n", var);
	USB_PHY_Write_Register8(var | 0x07, 0x6E);
	DBG(0, "[MUSB]addr: 0x6E, value after: %x\n", USB_PHY_Read_Register8(0x6E));

	/* Set RG_USB20_DM_100K_EN to 1 */
	var = USB_PHY_Read_Register8(0x22);
	DBG(0, "[MUSB]addr: 0x22, value: %x\n", var);
	USB_PHY_Write_Register8(var | 0x02, 0x22);
	DBG(0, "[MUSB]addr: 0x22, value after: %x\n", USB_PHY_Read_Register8(0x22));

	var = DRV_Reg8(UART1_BASE + 0x90);
	DBG(0, "[MUSB]addr: 0x11002090 (UART1), value: %x\n", var);
	DRV_WriteReg8(UART1_BASE + 0x90, var | 0x01);
	DBG(0, "[MUSB]addr: 0x11002090 (UART1), value after: %x\n\n", DRV_Reg8(UART1_BASE + 0x90));

	/* SW disconnect */
	mt_usb_disconnect();
}
Beispiel #4
0
void drv_idc_close()
{

	// stop all events before closing IDC
	DRV_WriteReg32(IDC_BSI_SCH_STOP_3100, 0xFFFFFFFF);
	DRV_WriteReg32(IDC_BSI_SCH_STOP_6332, 0xFFFFFFFF & ~0xFC000000);

	// disable interrupt
	IRQMask(MD_IRQID_IDC2ARM);
	DRV_WriteReg8(IDC_UART_IER, IDC_UART_IER_ALLOFF);
	IRQUnmask(MD_IRQID_IDC2ARM);

	idc_port.intr_en = KAL_FALSE;
	idc_port.rx_buf = 0;

	// clear start/finish priority register
	// clear start/finish priority bit enable register
	// clear start/finish pattern register
	// clear start/finish pattern bit enable register
	DRV_WriteReg32(IDC_UART_START_PRI, 0);
	DRV_WriteReg32(IDC_UART_START_PRI_BITEN, 0);
	DRV_WriteReg32(IDC_UART_START_PAT, 0);
	DRV_WriteReg32(IDC_UART_START_PAT_BITEN, 0);
	DRV_WriteReg32(IDC_UART_FINISH_PRI, 0);
	DRV_WriteReg32(IDC_UART_FINISH_PRI_BITEN, 0);
	DRV_WriteReg32(IDC_UART_FINISH_PAT, 0);
	DRV_WriteReg32(IDC_UART_FINISH_PAT_BITEN, 0);

	idc_port.schedule_state[0] = IDC_PLAN;
	idc_port.schedule_state[1] = IDC_PLAN;
	idc_port.event_cnt[0] = 0;
	idc_port.event_cnt[1] = 0;
	idc_port.sram_usage_bit_map[0] = 0;
	idc_port.sram_usage_bit_map[1] = 0;
	idc_port.rx_buf = 0;

	idc_port.owner_id = 0;
	idc_port.main_state = IDC_CLOSED;

	return;
}
Beispiel #5
0
static int usb_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)
{

    printk("usb_i2c_probe, start\n");

	usb_i2c_client = client;

	//disable usb mac suspend
	DRV_WriteReg8(0xF126086a, 0x00);

	//usb phy initial sequence
	USB_PHY_Write_Register8(0x00, 0xFF);
	USB_PHY_Write_Register8(0x04, 0x61);
	USB_PHY_Write_Register8(0x00, 0x68);
	USB_PHY_Write_Register8(0x00, 0x6a);
	USB_PHY_Write_Register8(0x6e, 0x00);
	USB_PHY_Write_Register8(0x0c, 0x1b);
	USB_PHY_Write_Register8(0x44, 0x08);
	USB_PHY_Write_Register8(0x55, 0x11);
	USB_PHY_Write_Register8(0x68, 0x1a);


	printk("addr: 0xFF, value: %x\n", USB_PHY_Read_Register8(0xFF));
	printk("addr: 0x61, value: %x\n", USB_PHY_Read_Register8(0x61));
	printk("addr: 0x68, value: %x\n", USB_PHY_Read_Register8(0x68));
	printk("addr: 0x6a, value: %x\n", USB_PHY_Read_Register8(0x6a));
	printk("addr: 0x00, value: %x\n", USB_PHY_Read_Register8(0x00));
	printk("addr: 0x1b, value: %x\n", USB_PHY_Read_Register8(0x1b));
	printk("addr: 0x08, value: %x\n", USB_PHY_Read_Register8(0x08));
	printk("addr: 0x11, value: %x\n", USB_PHY_Read_Register8(0x11));
	printk("addr: 0x1a, value: %x\n", USB_PHY_Read_Register8(0x1a));


	printk("usb_i2c_probe, end\n");
    return 0;

}
Beispiel #6
0
void drv_idc_set_dcb_config(IDC_CTRL_DCB_CONFIG_T idc_config)
{
	kal_uint8 tmp_lcr, tmp_ier;

	IRQMask(MD_IRQID_IDC2ARM);
	tmp_ier = DRV_Reg8(IDC_UART_IER);
	DRV_WriteReg8(IDC_UART_IER, IDC_UART_IER_ALLOFF);
	IRQUnmask(MD_IRQID_IDC2ARM);

	// set baud rate
	drv_idc_set_baudrate(idc_config.u4Baud);

	tmp_lcr = DRV_Reg32(IDC_UART_LCR);
	tmp_lcr &= ~0x3F;
	// set number of bits per character
	switch(idc_config.u1DataBits)
	{
		case len_5:
			tmp_lcr |= IDC_UART_WLS_5;
			break;
		case len_6:
			tmp_lcr |= IDC_UART_WLS_6;
			break;
		case len_7:
			tmp_lcr |= IDC_UART_WLS_7;
			break;
		case len_8:
			tmp_lcr |= IDC_UART_WLS_8;
			break;
		default:
			break;
	}

	switch(idc_config.u1StopBits)
	{
		case sb_1:
			tmp_lcr |= IDC_UART_1_STOP;
			break;
		case sb_2:
			tmp_lcr |= IDC_UART_2_STOP;
			break;
		case sb_1_5:
			tmp_lcr |= IDC_UART_1_5_STOP;
			break;
		default:
			break;
	}

	switch(idc_config.u1Parity)
	{
		case pa_none:
			tmp_lcr |= IDC_UART_NONE_PARITY;
			break;
		case pa_odd:
			tmp_lcr |= IDC_UART_ODD_PARITY;
			break;
		case pa_even:
			tmp_lcr |= IDC_UART_EVEN_PARITY;
			break;
		default:
			break;
	}

	DRV_WriteReg32(IDC_UART_LCR, tmp_lcr);

	kal_mem_cpy((void *) &idc_port.DCB, (void *) &idc_config, sizeof(IDC_CTRL_DCB_CONFIG_T));
   
	IRQMask(MD_IRQID_IDC2ARM);
	DRV_WriteReg8(IDC_UART_IER, tmp_ier);
	IRQUnmask(MD_IRQID_IDC2ARM);
}