@ -85,6 +85,78 @@ void lowlevel_init(void)
{
}
# if defined(CONFIG_USB_GADGET) && defined(CONFIG_USB_GADGET_DWC2_OTG)
# include <usb.h>
# include <usb/dwc2_udc.h>
static struct dwc2_plat_otg_data rk3288_otg_data = {
. rx_fifo_sz = 512 ,
. np_tx_fifo_sz = 16 ,
. tx_fifo_sz = 128 ,
} ;
int board_usb_init ( int index , enum usb_init_type init )
{
int node , phy_node ;
const char * mode ;
bool matched = false ;
const void * blob = gd - > fdt_blob ;
u32 grf_phy_offset ;
/* find the usb_otg node */
node = fdt_node_offset_by_compatible ( blob , - 1 ,
" rockchip,rk3288-usb " ) ;
while ( node > 0 ) {
mode = fdt_getprop ( blob , node , " dr_mode " , NULL ) ;
if ( mode & & strcmp ( mode , " otg " ) = = 0 ) {
matched = true ;
break ;
}
node = fdt_node_offset_by_compatible ( blob , node ,
" rockchip,rk3288-usb " ) ;
}
if ( ! matched ) {
debug ( " Not found usb_otg device \n " ) ;
return - ENODEV ;
}
rk3288_otg_data . regs_otg = fdtdec_get_addr ( blob , node , " reg " ) ;
node = fdtdec_lookup_phandle ( blob , node , " phys " ) ;
if ( node < = 0 ) {
debug ( " Not found usb phy device \n " ) ;
return - ENODEV ;
}
phy_node = fdt_parent_offset ( blob , node ) ;
if ( phy_node < = 0 ) {
debug ( " Not found usb phy device \n " ) ;
return - ENODEV ;
}
rk3288_otg_data . phy_of_node = phy_node ;
grf_phy_offset = fdtdec_get_addr ( blob , node , " reg " ) ;
/* find the grf node */
node = fdt_node_offset_by_compatible ( blob , - 1 ,
" rockchip,rk3288-grf " ) ;
if ( node < = 0 ) {
debug ( " Not found grf device \n " ) ;
return - ENODEV ;
}
rk3288_otg_data . regs_phy = grf_phy_offset +
fdtdec_get_addr ( blob , node , " reg " ) ;
return dwc2_udc_probe ( & rk3288_otg_data ) ;
}
int board_usb_cleanup ( int index , enum usb_init_type init )
{
return 0 ;
}
# endif
static int do_clock ( cmd_tbl_t * cmdtp , int flag , int argc ,
char * const argv [ ] )
{