Merge remote-tracking branch 'origin/develop-3.0' into develop-3.0-jb
author黄涛 <huangtao@rock-chips.com>
Sat, 14 Jul 2012 06:25:50 +0000 (14:25 +0800)
committer黄涛 <huangtao@rock-chips.com>
Sat, 14 Jul 2012 06:25:50 +0000 (14:25 +0800)
arch/arm/mach-rk30/Kconfig
arch/arm/plat-rk/Kconfig
drivers/media/video/rk30_camera_oneframe.c
drivers/video/rockchip/rk_fb.c

index cb9ffb0fb385b6dffeeeaeb522e1afb12cdd884f..9901277f2f9c10b2eee8a632668731aff1f6a4a8 100755 (executable)
@@ -21,10 +21,4 @@ config MACH_RK30_PHONE_A22
        
 endchoice
 
-menu "support for RK power manage "
-
-config CLK_SWITCH_TO_32K
-        bool "Support clock switch to 32.768k"
-endmenu
-
 endif
index 9be603ebce15dfc4c2c9a3ec5c23d587c17649ab..58e73499aea28588cb044bf29b17501bc65a76f7 100644 (file)
@@ -105,6 +105,15 @@ config RK_CLOCK_PROC
        bool "/proc/clocks support"
        depends on PROC_FS
 
+if !ARCH_RK29
+menu "Support for RK power manage"
+
+config CLK_SWITCH_TO_32K
+       bool "Support clock switch to 32.768k"
+
+endmenu
+endif
+
 config WIFI_CONTROL_FUNC
         bool "Enable WiFi control function abstraction"
         help
index b576178e4693d1c9cb6ed590e44d84032922b66c..1d5e368d540d249a00325c7591ef470c589d157a 100755 (executable)
@@ -209,7 +209,7 @@ module_param(debug, int, S_IRUGO|S_IWUSR);
 *v0.x.b:  specify the version is  NOT sure stable.
 *v0.x.c:  1. add cif reset when resolution changed to avoid of collecting data erro
           2. irq process is splitted to two step.
-          
+*v0.x.e: fix bugs of early suspend when display_pd is closed.          
 */
 #define RK_CAM_VERSION_CODE KERNEL_VERSION(0, 2, 0xc)
 
@@ -370,6 +370,7 @@ static DEFINE_MUTEX(camera_lock);
 static const char *rk_cam_driver_description = "RK_Camera";
 
 static int rk_camera_s_stream(struct soc_camera_device *icd, int enable);
+static void rk_camera_capture_process(struct work_struct *work);
 
 
 /*
@@ -413,11 +414,17 @@ static int rk_videobuf_setup(struct videobuf_queue *vq, unsigned int *count,
                }
 
                if (pcdev->camera_work == NULL) {
+            int wk_index = 0;
+               struct rk_camera_work *wk;
                        pcdev->camera_work = kmalloc(sizeof(struct rk_camera_work)*(*count), GFP_KERNEL);
                        if (pcdev->camera_work == NULL) {
                                RKCAMERA_TR("\n %s kmalloc fail\n", __FUNCTION__);
                                BUG();
                        }
+            for(;wk_index < *count;wk_index++){
+                wk = pcdev->camera_work+wk_index;
+                       INIT_WORK(&wk->work, rk_camera_capture_process);
+                }
                        pcdev->camera_work_count = *count;
                }
        }
@@ -603,10 +610,10 @@ static void rk_camera_capture_process(struct work_struct *work)
         scale_times = 1;
     }
     memset(&ipp_req, 0, sizeof(struct rk29_ipp_req));
-    
-    down(&pcdev->zoominfo.sem);
 
-    ipp_req.timeout = 100;
+
+    down(&pcdev->zoominfo.sem);
+    ipp_req.timeout = 3000;
     ipp_req.flag = IPP_ROT_0; 
  //   if(pcdev->icd->user_width != pcdev->zoominfo.vir_width)
     ipp_req.store_clip_mode =1;
@@ -625,7 +632,7 @@ static void rk_camera_capture_process(struct work_struct *work)
     dst_y_size = pcdev->icd->user_width*pcdev->icd->user_height;
     for (h=0; h<scale_times; h++) {
         for (w=0; w<scale_times; w++) {
-            
+            int ipp_times = 3;
             src_y_offset = (pcdev->zoominfo.a.c.top + h*pcdev->zoominfo.a.c.height/scale_times)* pcdev->host_width 
                         + pcdev->zoominfo.a.c.left + w*pcdev->zoominfo.a.c.width/scale_times;
                    src_uv_offset = (pcdev->zoominfo.a.c.top + h*pcdev->zoominfo.a.c.height/scale_times)* pcdev->host_width/2
@@ -642,22 +649,31 @@ static void rk_camera_capture_process(struct work_struct *work)
        //     printk("ipp_req.dst0.YrgbMst = 0x%x , ipp_req.dst0.CbrMst = 0x%x\n",ipp_req.dst0.YrgbMst,ipp_req.dst0.CbrMst);
                //      printk("%dx%d@(%d,%d)->%dx%d\n",pcdev->zoominfo.a.c.width,pcdev->zoominfo.a.c.height,pcdev->zoominfo.a.c.left,pcdev->zoominfo.a.c.top,pcdev->icd->user_width,pcdev->icd->user_height);
                //      printk("ipp_req.src_vir_w:0x%x ipp_req.dst_vir_w :0x%x\n",ipp_req.src_vir_w ,ipp_req.dst_vir_w);
-            if (ipp_blit_sync(&ipp_req)) {
+               while(ipp_times-- > 0)
+              {
+                if (ipp_blit_sync(&ipp_req)){
+                    RKCAMERA_TR("ipp do erro,do again,ipp_times = %d!\n",ipp_times);
+                    }
+                else{
+                    break;
+                    }
+              }
+            if (ipp_times <= 0) 
+                {
                        spin_lock_irqsave(&pcdev->lock, flags);
-                       vb->state = VIDEOBUF_ERROR;
+                       vb->state = VIDEOBUF_NEEDS_INIT;
                        spin_unlock_irqrestore(&pcdev->lock, flags);
-
-                       RKCAMERA_TR("Capture image(vb->i:0x%x) which IPP operated is error:\n",vb->i);
-                       RKCAMERA_TR("widx:%d hidx:%d ",w,h);
-                       RKCAMERA_TR("%dx%d@(%d,%d)->%dx%d\n",pcdev->zoominfo.a.c.width,pcdev->zoominfo.a.c.height,pcdev->zoominfo.a.c.left,pcdev->zoominfo.a.c.top,pcdev->icd->user_width,pcdev->icd->user_height);
-                       RKCAMERA_TR("ipp_req.src0.YrgbMst:0x%x ipp_req.src0.CbrMst:0x%x \n", ipp_req.src0.YrgbMst,ipp_req.src0.CbrMst);
-                       RKCAMERA_TR("ipp_req.src0.w:0x%x ipp_req.src0.h:0x%x \n",ipp_req.src0.w,ipp_req.src0.h);
-                       RKCAMERA_TR("ipp_req.src0.fmt:0x%x\n",ipp_req.src0.fmt);
-                       RKCAMERA_TR("ipp_req.dst0.YrgbMst:0x%x ipp_req.dst0.CbrMst:0x%x \n",ipp_req.dst0.YrgbMst,ipp_req.dst0.CbrMst);
-                       RKCAMERA_TR("ipp_req.dst0.w:0x%x ipp_req.dst0.h:0x%x \n",ipp_req.dst0.w ,ipp_req.dst0.h);
-                       RKCAMERA_TR("ipp_req.dst0.fmt:0x%x\n",ipp_req.dst0.fmt);
-                       RKCAMERA_TR("ipp_req.src_vir_w:0x%x ipp_req.dst_vir_w :0x%x\n",ipp_req.src_vir_w ,ipp_req.dst_vir_w);
-                       RKCAMERA_TR("ipp_req.timeout:0x%x ipp_req.flag :0x%x\n",ipp_req.timeout,ipp_req.flag);
+                       RKCAMERA_TR("Capture image(vb->i:0x%x) which IPP operated is error:\n",vb->i);
+                       RKCAMERA_TR("widx:%d hidx:%d ",w,h);
+                       RKCAMERA_TR("%dx%d@(%d,%d)->%dx%d\n",pcdev->zoominfo.a.c.width,pcdev->zoominfo.a.c.height,pcdev->zoominfo.a.c.left,pcdev->zoominfo.a.c.top,pcdev->icd->user_width,pcdev->icd->user_height);
+                       RKCAMERA_TR("ipp_req.src0.YrgbMst:0x%x ipp_req.src0.CbrMst:0x%x \n", ipp_req.src0.YrgbMst,ipp_req.src0.CbrMst);
+                       RKCAMERA_TR("ipp_req.src0.w:0x%x ipp_req.src0.h:0x%x \n",ipp_req.src0.w,ipp_req.src0.h);
+                       RKCAMERA_TR("ipp_req.src0.fmt:0x%x\n",ipp_req.src0.fmt);
+                       RKCAMERA_TR("ipp_req.dst0.YrgbMst:0x%x ipp_req.dst0.CbrMst:0x%x \n",ipp_req.dst0.YrgbMst,ipp_req.dst0.CbrMst);
+                       RKCAMERA_TR("ipp_req.dst0.w:0x%x ipp_req.dst0.h:0x%x \n",ipp_req.dst0.w ,ipp_req.dst0.h);
+                       RKCAMERA_TR("ipp_req.dst0.fmt:0x%x\n",ipp_req.dst0.fmt);
+                       RKCAMERA_TR("ipp_req.src_vir_w:0x%x ipp_req.dst_vir_w :0x%x\n",ipp_req.src_vir_w ,ipp_req.dst_vir_w);
+                       RKCAMERA_TR("ipp_req.timeout:0x%x ipp_req.flag :0x%x\n",ipp_req.timeout,ipp_req.flag);
                 
                        goto do_ipp_err;
                }
@@ -666,7 +682,6 @@ static void rk_camera_capture_process(struct work_struct *work)
 
     if (pcdev->icd_cb.sensor_cb)
         (pcdev->icd_cb.sensor_cb)(vb);
-       
 do_ipp_err:
     up(&pcdev->zoominfo.sem);
     wake_up(&(camera_work->vb->done)); 
@@ -738,7 +753,10 @@ static irqreturn_t rk_camera_irq(int irq, void *data)
             else if(pcdev->active){
                 printk("vb state is wrong ,del it \n");
                list_del_init(&(pcdev->active->queue));
+                pcdev->active->state = VIDEOBUF_NEEDS_INIT;
+                wake_up(&pcdev->active->done);
                 pcdev->active = NULL;
+                
                 }
         }
         if (pcdev->active == NULL) {
@@ -752,7 +770,7 @@ static irqreturn_t rk_camera_irq(int irq, void *data)
                }
                if (CAM_WORKQUEUE_IS_EN()) {
                        wk = pcdev->camera_work + vb->i;
-                       INIT_WORK(&(wk->work), rk_camera_capture_process);
+                       //INIT_WORK(&(wk->work), rk_camera_capture_process);
             wk->vb = vb;
                        wk->pcdev = pcdev;
                        queue_work(pcdev->camera_wq, &(wk->work));
@@ -901,6 +919,7 @@ RK_CAMERA_ACTIVE_ERR:
 static void rk_camera_deactivate(struct rk_camera_dev *pcdev)
 {
     //pcdev->active = NULL;
+   // printk("rk_camera_deactivate enter\n");
        clk_disable(pcdev->aclk_cif);
 
        clk_disable(pcdev->hclk_cif);
@@ -1003,6 +1022,7 @@ static void rk_camera_remove_device(struct soc_camera_device *icd)
        if (read_cif_reg(pcdev->base,CIF_CIF_CTRL) & ENABLE_CAPTURE) {
                rk_camera_s_stream(icd,0);
        }
+    
     //soft reset  the registers
     #if 0 //has somthing wrong when suspend and resume now
     if(IS_CIF0()){
@@ -1014,7 +1034,6 @@ static void rk_camera_remove_device(struct soc_camera_device *icd)
     }
     #endif
     v4l2_subdev_call(sd, core, ioctl, RK29_CAM_SUBDEV_DEACTIVATE,NULL);
-       rk_camera_deactivate(pcdev);
     //if stream off is not been executed,timer is running.
     if(pcdev->fps_timer.istarted){
          hrtimer_cancel(&pcdev->fps_timer.timer);
@@ -1028,7 +1047,7 @@ static void rk_camera_remove_device(struct soc_camera_device *icd)
                pcdev->camera_work = NULL;
                pcdev->camera_work_count = 0;
        }
-
+       rk_camera_deactivate(pcdev);
        pcdev->active = NULL;
     pcdev->icd = NULL;
     pcdev->icd_cb.sensor_cb = NULL;
@@ -1884,26 +1903,27 @@ static void rk_camera_reinit_work(struct work_struct *work)
     tmp_soc_cam_link = to_soc_camera_link(pcdev->icd);
        //dump regs
        {
-               RKCAMERA_DG("CIF_CIF_CTRL = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_CTRL));
-               RKCAMERA_DG("CIF_CIF_INTEN = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_INTEN));
-               RKCAMERA_DG("CIF_CIF_INTSTAT = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_INTSTAT));
-               RKCAMERA_DG("CIF_CIF_FOR = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_FOR));
-               RKCAMERA_DG("CIF_CIF_CROP = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_CROP));
-               RKCAMERA_DG("CIF_CIF_SET_SIZE = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_SET_SIZE));
-               RKCAMERA_DG("CIF_CIF_SCL_CTRL = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_SCL_CTRL));
-               RKCAMERA_DG("CRU_PCLK_REG30 = 0X%x\n",read_cru_reg(CRU_PCLK_REG30));
-               RKCAMERA_DG("CIF_CIF_LAST_LINE = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_LAST_LINE));
+               RKCAMERA_TR("CIF_CIF_CTRL = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_CTRL));
+               RKCAMERA_TR("CIF_CIF_INTEN = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_INTEN));
+               RKCAMERA_TR("CIF_CIF_INTSTAT = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_INTSTAT));
+               RKCAMERA_TR("CIF_CIF_FOR = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_FOR));
+               RKCAMERA_TR("CIF_CIF_CROP = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_CROP));
+               RKCAMERA_TR("CIF_CIF_SET_SIZE = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_SET_SIZE));
+               RKCAMERA_TR("CIF_CIF_SCL_CTRL = 0x%x\n",read_cif_reg(pcdev->base,CIF_CIF_SCL_CTRL));
+               RKCAMERA_TR("CRU_PCLK_REG30 = 0X%x\n",read_cru_reg(CRU_PCLK_REG30));
+               RKCAMERA_TR("CIF_CIF_LAST_LINE = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_LAST_LINE));
                
-               RKCAMERA_DG("CIF_CIF_LAST_PIX = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_LAST_PIX));
-               RKCAMERA_DG("CIF_CIF_VIR_LINE_WIDTH = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_VIR_LINE_WIDTH));
-       RKCAMERA_DG("CIF_CIF_LINE_NUM_ADDR = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_LINE_NUM_ADDR));
-       RKCAMERA_DG("CIF_CIF_FRM0_ADDR_Y = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_FRM0_ADDR_Y));
-       RKCAMERA_DG("CIF_CIF_FRM0_ADDR_UV = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_FRM0_ADDR_UV));
-       RKCAMERA_DG("CIF_CIF_FRAME_STATUS = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_FRAME_STATUS));
+               RKCAMERA_TR("CIF_CIF_LAST_PIX = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_LAST_PIX));
+               RKCAMERA_TR("CIF_CIF_VIR_LINE_WIDTH = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_VIR_LINE_WIDTH));
+       RKCAMERA_TR("CIF_CIF_LINE_NUM_ADDR = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_LINE_NUM_ADDR));
+       RKCAMERA_TR("CIF_CIF_FRM0_ADDR_Y = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_FRM0_ADDR_Y));
+       RKCAMERA_TR("CIF_CIF_FRM0_ADDR_UV = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_FRM0_ADDR_UV));
+       RKCAMERA_TR("CIF_CIF_FRAME_STATUS = 0X%x\n",read_cif_reg(pcdev->base,CIF_CIF_FRAME_STATUS));
        }
-       write_cif_reg(pcdev->base,CIF_CIF_CTRL, (read_cif_reg(pcdev->base,CIF_CIF_CTRL)&(~ENABLE_CAPTURE)));
-    if(1/*pcdev->reinit_times++ > 0*/)  
+    if(1/*pcdev->reinit_times++ >= 2*/)  
         {
+            pcdev->stop_cif = true;
+               write_cif_reg(pcdev->base,CIF_CIF_CTRL, (read_cif_reg(pcdev->base,CIF_CIF_CTRL)&(~ENABLE_CAPTURE)));
                RKCAMERA_DG("the reinit times = %d\n",pcdev->reinit_times);
             #if 0
             while (!list_empty(&pcdev->capture)) {
@@ -1917,11 +1937,12 @@ static void rk_camera_reinit_work(struct work_struct *work)
                }
             }
             #else
-               spin_lock_irqsave(pcdev->video_vq->irqlock, flags);
+               spin_lock_irqsave(pcdev->video_vq->irqlock, flags);
                for (index = 0; index < VIDEO_MAX_FRAME; index++) {
                        if (NULL == pcdev->video_vq->bufs[index])
                                continue;
-                       if (pcdev->video_vq->bufs[index]->state == VIDEOBUF_QUEUED) {
+                       if (pcdev->video_vq->bufs[index]->state == VIDEOBUF_QUEUED) 
+                      {
                                list_del_init(&pcdev->video_vq->bufs[index]->queue);
                                pcdev->video_vq->bufs[index]->state = VIDEOBUF_NEEDS_INIT;
                                wake_up_all(&pcdev->video_vq->bufs[index]->done);
@@ -1932,7 +1953,7 @@ static void rk_camera_reinit_work(struct work_struct *work)
             
             #endif
                RKCAMERA_TR("the %d reinit times ,wake up video buffers!\n ",pcdev->reinit_times);
-        }else{ //the first time,just reinit sensor ,don't wake up vb
+        }/*else{ //the first time,just reinit sensor ,don't wake up vb
            // rk_cif_poweroff(pcdev);
                RKCAMERA_DG("first time to reinit\n");
         //   return;
@@ -1981,7 +2002,7 @@ static void rk_camera_reinit_work(struct work_struct *work)
                write_cif_reg(pcdev->base,CIF_CIF_CTRL, (read_cif_reg(pcdev->base,CIF_CIF_CTRL)|ENABLE_CAPTURE));
                        
                RKCAMERA_TR("first time Camera host haven't recevie data from sensor,Reinit sensor now! ret:0x%x\n",ret);
-            }
+            }*/
 }
 static enum hrtimer_restart rk_camera_fps_func(struct hrtimer *timer)
 {
@@ -1998,6 +2019,7 @@ static enum hrtimer_restart rk_camera_fps_func(struct hrtimer *timer)
                RKCAMERA_TR("Camera host haven't recevie data from sensor,Reinit sensor delay,last fps = %d,pcdev->fps = %d!\n",pcdev->last_fps,pcdev->fps);
                pcdev->camera_reinit_work.pcdev = pcdev;
                //INIT_WORK(&(pcdev->camera_reinit_work.work), rk_camera_reinit_work);
+        pcdev->reinit_times++;
                queue_work(pcdev->camera_wq,&(pcdev->camera_reinit_work.work));
        } else if(!pcdev->timer_get_fps) {
            pcdev->timer_get_fps = true;
@@ -2062,7 +2084,10 @@ static enum hrtimer_restart rk_camera_fps_func(struct hrtimer *timer)
     pcdev->fps_timer.timer.node.expires= ktime_add_us(pcdev->fps_timer.timer.node.expires, ktime_to_us(ktime_set(3, 0)));
     pcdev->fps_timer.timer._softexpires= ktime_add_us(pcdev->fps_timer.timer._softexpires, ktime_to_us(ktime_set(3, 0)));
     //return HRTIMER_NORESTART;
-    return HRTIMER_RESTART;
+    if(pcdev->reinit_times >=2)
+        return HRTIMER_NORESTART;
+    else
+        return HRTIMER_RESTART;
 }
 static int rk_camera_s_stream(struct soc_camera_device *icd, int enable)
 {
@@ -2090,19 +2115,21 @@ static int rk_camera_s_stream(struct soc_camera_device *icd, int enable)
                hrtimer_start(&(pcdev->fps_timer.timer),ktime_set(3, 0),HRTIMER_MODE_REL);
         pcdev->fps_timer.istarted = true;
        } else {
-        cif_ctrl_val &= ~ENABLE_CAPTURE;
+           //cancel timer before stop cif
+               ret = hrtimer_cancel(&pcdev->fps_timer.timer);
+        pcdev->fps_timer.istarted = false;
+        flush_work(&(pcdev->camera_reinit_work.work));
         
+        cif_ctrl_val &= ~ENABLE_CAPTURE;
                spin_lock_irqsave(&pcdev->lock, flags);
        write_cif_reg(pcdev->base,CIF_CIF_CTRL, cif_ctrl_val);
         pcdev->stop_cif = true;
        spin_unlock_irqrestore(&pcdev->lock, flags);
+     //   printk("flush work end!!!!!!!!!\n");
       //  mdelay(3*1000);
      //   write_cif_reg(pcdev->base,CIF_CIF_FRAME_STATUS,  0x00000003);//frame1 has been ready to receive data,frame 2 is not used
     // write_cif_reg(pcdev->base,CIF_CIF_INTSTAT,0xFFFFFFFF);  /* clear vip interrupte single  */
     // write_cif_reg(pcdev->base,CIF_CIF_FRAME_STATUS,0);  /* clear vip interrupte single  */
-               ret = hrtimer_cancel(&pcdev->fps_timer.timer);
-        pcdev->fps_timer.istarted = false;
-        flush_work(&(pcdev->camera_reinit_work.work));
                flush_workqueue((pcdev->camera_wq));
                RKCAMERA_DG("STREAM_OFF cancel timer and flush work:0x%x \n", ret);
        }
@@ -2447,12 +2474,12 @@ static int rk_camera_probe(struct platform_device *pdev)
        if (pcdev->pdata && IS_CIF0()) {
                pcdev->vipmem_phybase = pcdev->pdata->meminfo.start;
                pcdev->vipmem_size = pcdev->pdata->meminfo.size;
-               RKCAMERA_DG("\n%s Memory(start:0x%x size:0x%x) for IPP obtain \n",__FUNCTION__, pcdev->pdata->meminfo.start,pcdev->pdata->meminfo.size);
+               RKCAMERA_TR("\n%s Memory(start:0x%x size:0x%x) for IPP obtain \n",__FUNCTION__, pcdev->pdata->meminfo.start,pcdev->pdata->meminfo.size);
                } 
        else if (pcdev->pdata){
                pcdev->vipmem_phybase = pcdev->pdata->meminfo_cif1.start;
                pcdev->vipmem_size = pcdev->pdata->meminfo_cif1.size;
-               RKCAMERA_DG("\n%s Memory(start:0x%x size:0x%x) for IPP obtain \n",__FUNCTION__, pcdev->pdata->meminfo.start,pcdev->pdata->meminfo.size);
+               RKCAMERA_TR("\n%s Memory(start:0x%x size:0x%x) for IPP obtain \n",__FUNCTION__, pcdev->pdata->meminfo.start,pcdev->pdata->meminfo.size);
                }
        else{
                RKCAMERA_TR("\n%s Memory for IPP have not obtain! IPP Function is fail\n",__FUNCTION__);
index 781c3ed166c118accd941f29b6c8b787afb4203f..5a42aa8735c3ef814f40703970f4d78d36cfafee 100644 (file)
@@ -217,7 +217,7 @@ static int rk_pan_display(struct fb_var_screeninfo *var, struct fb_info *info)
 
        #if defined(CONFIG_HDMI_RK30)
                #if defined(CONFIG_DUAL_DISP_IN_KERNEL)
-                       if(hdmi_get_hotplug())
+                       if(hdmi_get_hotplug() == HDMI_HPD_ACTIVED)
                        {
                                if(inf->num_fb >= 2)
                                {
@@ -370,7 +370,7 @@ static int rk_fb_set_par(struct fb_info *info)
        
        #if defined(CONFIG_HDMI_RK30)
                #if defined(CONFIG_DUAL_DISP_IN_KERNEL)
-                       if(hdmi_get_hotplug())
+                       if(hdmi_get_hotplug() == HDMI_HPD_ACTIVED)
                        {
                                if(inf->num_fb >= 2)
                                {
@@ -481,7 +481,7 @@ static int rk_fb_set_par(struct fb_info *info)
 
        #if defined(CONFIG_HDMI_RK30)
                #if defined(CONFIG_DUAL_DISP_IN_KERNEL)
-                       if(hdmi_get_hotplug())
+                       if(hdmi_get_hotplug() == HDMI_HPD_ACTIVED)
                        {
                                if(info != info2)
                                {
@@ -638,6 +638,7 @@ int rk_fb_switch_screen(rk_screen *screen ,int enable ,int lcdc_id)
        if(!enable)
        {
                dev_drv->open(dev_drv,layer_id,enable); //disable the layer which attached to this fb
+               return 0;
        }
        
        hdmi_var = &info->var;