void ResetDevice() { /* SetLCDPorts(); Init_MCU();*/ // Initialize the device DriverInterfaceInit(); DelayMs(1); // Delay to let controller ready for next SetReg command /* LCD_nRESET = 1; DelayMs(1); // Delay 1ms LCD_nRESET = 0; DelayMs(10); // Delay 10ms // This delay time is necessary LCD_nRESET = 1; DelayMs(120); // Delay 120 ms*/ ResetLCD(); LCD_ILI9341_CMD(PowerControlB); //Power control B (CFh) LCD_ILI9341_Parameter(0x00); LCD_ILI9341_Parameter(0x81); LCD_ILI9341_Parameter(0X30); LCD_ILI9341_CMD(PowerOnSequenceControl); LCD_ILI9341_Parameter(0x64); LCD_ILI9341_Parameter(0x03); LCD_ILI9341_Parameter(0X12); LCD_ILI9341_Parameter(0X81); LCD_ILI9341_CMD(DriverTimingControlA); LCD_ILI9341_Parameter(0x85); LCD_ILI9341_Parameter(0x10); LCD_ILI9341_Parameter(0x78); LCD_ILI9341_CMD(PowerControlA); LCD_ILI9341_Parameter(0x39); LCD_ILI9341_Parameter(0x2C); LCD_ILI9341_Parameter(0x00); LCD_ILI9341_Parameter(0x34); LCD_ILI9341_Parameter(0x02); LCD_ILI9341_CMD(PumpRatioControl); LCD_ILI9341_Parameter(0x20); LCD_ILI9341_CMD(DriverTimingControlB); LCD_ILI9341_Parameter(0x00); LCD_ILI9341_Parameter(0x00); LCD_ILI9341_CMD(FrameRateControlInNormalModeFullColors); LCD_ILI9341_Parameter(0x00); LCD_ILI9341_Parameter(0x1B); LCD_ILI9341_CMD(DisplayFunctionControl); // Display Function Control LCD_ILI9341_Parameter(0x0A); LCD_ILI9341_Parameter(0xA2); LCD_ILI9341_CMD(PowerControl1); //Power control LCD_ILI9341_Parameter(0x21); //VRH[5:0] LCD_ILI9341_CMD(PowerControl2); //Power control LCD_ILI9341_Parameter(0x11); //SAP[2:0];BT[3:0] LCD_ILI9341_CMD(VCOMControl1); //VCM control LCD_ILI9341_Parameter(0x3F); LCD_ILI9341_Parameter(0x3C); LCD_ILI9341_CMD(VCOMControl2); //VCM control2 LCD_ILI9341_Parameter(0Xb5); LCD_ILI9341_CMD(PixelFormatSet); #if defined (_64K_COLOR_MODE) LCD_ILI9341_Parameter(BITPERPIXEL16); #elif defined (_256K_COLOR_MODE) LCD_ILI9341_Parameter(BITPERPIXEL18); #endif LCD_ILI9341_CMD(MemoryAccessControl); // Memory Access Control LCD_ILI9341_Parameter(RGBSET | MVSET | MXSET); LCD_ILI9341_CMD(InterfaceControl); // Memory Access Control LCD_ILI9341_Parameter(0x01); #if defined (_MDT00) LCD_ILI9341_Parameter(MDT00); #elif defined (_MDT01) LCD_ILI9341_Parameter(MDT01); #else #error "You must define the MDT parameter !" #endif LCD_ILI9341_Parameter(0x00); LCD_ILI9341_CMD(Enable3G); // 3Gamma Function Disable LCD_ILI9341_Parameter(0x00); LCD_ILI9341_CMD(GammaSet); //Gamma curve selected LCD_ILI9341_Parameter(0x01); LCD_ILI9341_CMD(PositiveGammaCorrection); //Set Gamma LCD_ILI9341_Parameter(0x0F); LCD_ILI9341_Parameter(0x26); LCD_ILI9341_Parameter(0x24); LCD_ILI9341_Parameter(0x0B); LCD_ILI9341_Parameter(0x0E); LCD_ILI9341_Parameter(0x09); LCD_ILI9341_Parameter(0x54); LCD_ILI9341_Parameter(0XA8); LCD_ILI9341_Parameter(0x46); LCD_ILI9341_Parameter(0x0C); LCD_ILI9341_Parameter(0x17); LCD_ILI9341_Parameter(0x09); LCD_ILI9341_Parameter(0x0F); LCD_ILI9341_Parameter(0x07); LCD_ILI9341_Parameter(0x00); LCD_ILI9341_CMD(NegativeGammaCorrection); //Set Gamma LCD_ILI9341_Parameter(0x00); LCD_ILI9341_Parameter(0x19); LCD_ILI9341_Parameter(0x1B); LCD_ILI9341_Parameter(0x04); LCD_ILI9341_Parameter(0x10); LCD_ILI9341_Parameter(0x07); LCD_ILI9341_Parameter(0x2A); LCD_ILI9341_Parameter(0x47); LCD_ILI9341_Parameter(0x39); LCD_ILI9341_Parameter(0x03); LCD_ILI9341_Parameter(0x06); LCD_ILI9341_Parameter(0x06); LCD_ILI9341_Parameter(0x30); LCD_ILI9341_Parameter(0x38); LCD_ILI9341_Parameter(0x0F); //lcdSetWindow(10, 230 - 1, 10, 310 - 1); LCD_ILI9341_CMD(SleepOut); //Exit Sleep DelayMs(120); //delayms(120); LCD_ILI9341_CMD(0x29); //Display on DisplayBacklightOn(); }
static Cyg_ErrNo w90n740_video_lookup(struct cyg_devtab_entry **tab, struct cyg_devtab_entry *sub_tab, const char *name) { w685cf_t *priv = (w685cf_t *)(*tab)->priv; int err = 0; int i; #ifdef W865THREAD int pid; #endif init_waitqueue_head(&priv->wq); init_MUTEX(&priv->lock); #ifndef W865THREAD priv->rawbuf = (char *)malloc(W685BUF_SIZE*sizeof(char)); if(!priv->rawbuf) { err = -ENOMEM; goto out_nomem1; } #endif #ifdef W865THREAD init_waitqueue_head(&(priv->waitq)); priv->images = (ImageContainer_t *)malloc(sizeof(ImageContainer_t)); if(!priv->images) { err = -ENOMEM; goto out_nomem1; } memset(priv->images, 0, sizeof(ImageContainer_t)); priv->images->reading = IMGCONTAINERSIZE-1; //init, put it to IMGCONTAINERSIZE-1 IMAGEDATA(priv->images, 0) = (char *)kmalloc(W685BUF_SIZE*sizeof(char), GFP_KERNEL); if(!(IMAGEDATA(priv->images, 0))) { err = -ENOMEM; } IMAGEDATA(priv->images, 1) = (char *)kmalloc(W685BUF_SIZE*sizeof(char), GFP_KERNEL); if(!(IMAGEDATA(priv->images, 1))) { err = -ENOMEM; } for(i = 0; i < IMGCONTAINERSIZE; i++) init_MUTEX( &(IMAGEHOLD(priv->images, i).ilock) ); #endif //vdev->priv = priv; #ifndef VERSION825 InitCFI(0); wait_ms(20); if(DownLoadFWFlag == 1) { ResetLCD(); wait_ms(20); InitCFI(1); wait_ms(20); InitLCD(); wait_ms(20); } else if(DownLoadFWFlag == 0) { W99685CMD_SetOpMode(OP_STREAMING, PPC_YUV422, 1); W99685CMD_SetLCMNums(LCD1_ON_685,LCD_BUS_16); //KDEBUG("Have set LCMNUMS"); W99685CMD_SelectLCM(LCM_1ST); printk("Have selected LCM\n"); W99685CMD_SetLCMRes(128, 161); printk("Have set LCM resolution\n"); // W99685CMD_SetBridgeMode(0); LCM_FillChar(lcm_buf, LEN_LCMBF); printk("Have Filled LCM with char\n"); W99685CMD_SetLCMWndPos(0, 32); // KDEBUG("Have set LCM Wdn Pos"); // W99685CMD_SetLCMWndSize(128, 96); } // W99685CMD_SetOpMode(OP_SINGLE, PPC_RGB565, 0); #else W99685CMD_SetOpMode(OP_STREAMING, PPC_YUV422, 1); #endif #ifdef W865THREAD pid = kernel_thread(w99685_thread, priv, CLONE_FS | CLONE_FILES | CLONE_SIGNAL); if(pid < 0) { printk("Init W99685 Thread failed\n"); goto out; } #endif w99685_v4l1_open(tab, sub_tab, name); return err; out: #ifndef W865THREAD free(priv->rawbuf); #endif out_nomem1: free(priv); out_nomem0: return err; }