static void rk28_kld_reset( int mod ) { #if 0 int boot = 0; kld_set_reset_flag(0 , boot ); rk28_soft_restart(); #else printk("%s::reboot system,mod=%d\n" ,__func__ , mod ); rk28_restart( mod ); #endif }
void rk28_power_off(void) { local_irq_enable(); /* open for some logs */ rockchip_mux_api_set((char *)PLAY_ON_IOMUX_PINNAME,(unsigned int)PLAY_ON_IOMUX_PINDIR); GPIOPullUpDown(PLAY_ON_IOPIN,GPIOPullDown); rockchip_mux_api_set((char *)PWR_ON_IOMUX_PINNAME,PWR_ON_IOMUX_PINDIR); GPIOSetPinDirection(PWR_ON_IOPIN,GPIO_OUT); GPIOSetPinLevel(PWR_ON_IOPIN,GPIO_LOW); while( 1 ) { rockchip_mux_api_set((char *)PWR_ON_IOMUX_PINNAME,(unsigned int)PWR_ON_IOMUX_PINDIR); GPIOSetPinDirection(PWR_ON_IOPIN,GPIO_OUT); if(GPIOGetPinLevel(PWR_ON_IOPIN) == GPIO_HIGH) GPIOSetPinLevel(PWR_ON_IOPIN,GPIO_LOW); if(GPIOGetPinLevel(PLAY_ON_IOPIN) == GPIO_HIGH) break; } rk28_restart( 0 ); }
static int rkusb_usb_command( struct rkusb_dev *dev ) { int r = RKUSB_CB_FAILD; rk28printk("%s::func=%d,len=%d\n" , __func__ , DEV_FUNC(dev),DEV_LENGTH(dev)); switch( DEV_FUNC(dev) ) { case FUNC_UCMD_DEVREADY: r = RKUSB_CB_OK_CSW; break; case FUNC_UCMD_DISCONNECTMSC: rk28_msc_switch( 0 ); r = RKUSB_CB_OK_CSW; break; case FUNC_UCMD_SYSTEMINFO: { unsigned int off_len[2]; off_len[0] = (unsigned int)system_type; off_len[1] = strlen(system_type)+1; rkusb_normal_data_xfer_onetime(dev , off_len ); r = RKUSB_CB_OK_NONE; } break; case FUNC_UCMD_RESTART: rk28printk("get restart cmd,lun=%d\n" , DEV_LUN(dev)); if( DEV_LUN(dev) == 0 ) { /* normal restart */ rk28_restart(0); } else if( DEV_LUN(dev) == 1 ) { /* to loader rkusb */ rk28_restart(1); } break; case FUNC_UCMD_GETVERSION: r = rkusb_ucmd_get_version( dev ); break; case FUNC_UCMD_GETCHIPINFO: { unsigned int off_len[2]; off_len[1] = kld_get_tag_data( 0X524B0000 , (void**)&off_len ); rkusb_normal_data_xfer_onetime(dev , off_len ); r = RKUSB_CB_OK_NONE; } break; case FUNC_UCMD_GETSN: { unsigned int off_len[2]; off_len[1] = kld_get_tag_data( 0X524B0006 , (void**)&off_len ); rkusb_normal_data_xfer_onetime(dev , off_len ); r = RKUSB_CB_OK_NONE; } break; case FUNC_UCMD_DEBUGINFO: { RKDEBUG_INFO *dbi = DEV_FAST_ALLOC(dev,RKDEBUG_INFO); dbi->size = sizeof(RKDEBUG_INFO); dbi->adb_support = adb_support; dbi->dbg_level = __rkusb_write_enable(dev)?2:(__rkusb_read_enable(dev)?1:0); dbi->tr_length = dev->req_buf_length; dbi->save_length = dev->buf_length; dbi->save_buf = (unsigned long)__rkusb_rwbuffer_start(dev); if( dev->fsg ) strcpy(dbi->cur_device,"msc"); else strcpy(dbi->cur_device,"adb"); strcpy( dbi->cur_version,RKUSB_KVERSION); #if 0 dbi->cmds[0]=K_FW_SDRAM_READ_10; dbi->cmds[1]=K_FW_SDRAM_WRITE_10; dbi->cmds[2]=K_FW_TRACE; dbi->cmds[3]=K_FW_GETLOG; dbi->cmds[4]=K_FW_FUNCALL; dbi->cmds[5]=K_FW_GETSYMB; dbi->cmds[6]=K_FW_GETRESULT; dbi->cmds[7]=K_FW_USBCMD; #endif rkusb_normal_data_xfer_onetime(dev , dbi ); r = RKUSB_CB_OK_NONE; } break; case FUNC_UCMD_OPENADB: { /* lun:0 close,1: open */ adb_function_enable(DEV_LUN(dev)); usb_vbus_status = 0; /* force to reconnect! */ r = RKUSB_CB_OK_CSW; } break; default: break ; } return r; }