Beispiel #1
0
/* 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;
}
Beispiel #2
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;
}