/* Start running. Must have called usb_open (above) first */ int sa1100_usb_start( void ) { usbd_info.state = USB_STATE_SUSPENDED; /* Enable UDC and mask everything */ UDC_write(Ser0UDCCR , 0xFC); /* clear stall - receiver seems to start stalled? 19Jan01ww */ /* also clear other stuff just to be thurough 22Feb01ww */ UDC_clear(Ser0UDCCS1, UDCCS1_FST | UDCCS1_RPE | UDCCS1_RPC ); UDC_clear(Ser0UDCCS2, UDCCS2_FST | UDCCS2_TPE | UDCCS2_TPC ); rx_pktsize = 8; // OJO tx_pktsize = 1; // OJO /* flush DMA and fire through some -EAGAINs */ ep1_init( usbd_info.dmach_rx ); ep2_init( usbd_info.dmach_tx ); /* clear all top-level sources */ Ser0UDCSR = UDCSR_RSTIR | UDCSR_RESIR | UDCSR_EIR | UDCSR_RIR | UDCSR_TIR | UDCSR_SUSIR ; /* EXERIMENT - a short line in the spec says toggling this ..bit diddles the internal state machine in the udc to ..expect a suspend */ Ser0UDCCR |= UDCCR_RESIM; /* END EXPERIMENT 10Feb01ww */ UDC_write( Ser0UDCCR, UDCCR_SUSIM | UDCCR_TIM); /* clear all top-level sources */ Ser0UDCSR = UDCSR_RSTIR | UDCSR_RESIR | UDCSR_EIR | UDCSR_RIR | UDCSR_TIR | UDCSR_SUSIR ; return 0; }
/* Start running. Must have called usb_open (above) first */ int s3c2410_usb_start( void ) { unsigned long tmp; LOG("\n"); if ( usbd_info.client_name == NULL ) { printk( "%s%s - no client registered\n", pszMe, __FUNCTION__ ); return -EPERM; } /* start UDC internal machinery running */ udelay( 100 ); /* clear stall - receiver seems to start stalled? */ UD_INDEX = UD_INDEX_EP2; // EP2 input tmp = UD_ICSR1; tmp &= ~(UD_ICSR1_SENTSTL | UD_ICSR1_FFLUSH | UD_ICSR1_UNDRUN); tmp &= ~(UD_ICSR1_PKTRDY | UD_ICSR1_SENDSTL); UD_ICSR1 = tmp; UD_INDEX = UD_INDEX_EP1; // EP1 output tmp = UD_OCSR1; tmp &= ~(UD_OCSR1_SENTSTL | UD_OCSR1_FFLUSH | UD_OCSR1_OVRRUN); tmp &= ~(UD_OCSR1_PKTRDY | UD_OCSR1_SENDSTL); UD_OCSR1 = tmp; /* flush DMA and fire through some -EAGAINs */ ep2_init( usbd_info.dmach_tx ); ep1_init( usbd_info.dmach_rx ); /* clear all top-level sources */ UD_INT = UD_INT_EP0 | UD_INT_EP1 | UD_INT_EP2; UD_USBINT = UD_USBINT_RESET | UD_USBINT_RESUM | UD_USBINT_SUSPND; printk( "%sStarted for %s\n", pszMe, usbd_info.client_name ); return 0; }