camera rk30: modify board configs about camera,use ion for default.
authorroot <root@zyc-desktop.(none)>
Tue, 13 Mar 2012 09:36:16 +0000 (17:36 +0800)
committerroot <root@zyc-desktop.(none)>
Tue, 13 Mar 2012 09:36:16 +0000 (17:36 +0800)
arch/arm/mach-rk30/board-rk30-sdk.c
drivers/media/video/rk30_camera.c
drivers/media/video/rk30_camera_oneframe.c

index 20f6ae5dc5fca5771431f785af881a3f5ca6d549..3a0d6b28818b10431bb1147dd647470284b1ed8f 100755 (executable)
 #include "../../../drivers/media/video/rk30_camera.c"
 /*---------------- Camera Sensor Macro Define End  ---------*/
 
-#define PMEM_CAM_SIZE          PMEM_CAM_NECESSARY
+//RK30,use  ion to allocate mem , set it as 0
+#define PMEM_CAM_SIZE          0//PMEM_CAM_NECESSARY
 #ifdef CONFIG_VIDEO_RK29_WORK_IPP
-#define MEM_CAMIPP_SIZE        PMEM_CAMIPP_NECESSARY
+#define MEM_CAMIPP_SIZE_CIF_0  PMEM_CAMIPP_NECESSARY_CIF_0
+#define MEM_CAMIPP_SIZE_CIF_1  PMEM_CAMIPP_NECESSARY_CIF_0
 #else
-#define MEM_CAMIPP_SIZE        0
+#define MEM_CAMIPP_SIZE_CIF_0  0
+#define MEM_CAMIPP_SIZE_CIF_1  0
+
 #endif
 /*****************************************************************************************
  * camera  devices
@@ -195,7 +199,7 @@ static rk_sensor_user_init_data_s rk_init_data_sensor_0 =
        .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_0) / sizeof(struct reginfo_t),
        
 };
-static rk_sensor_user_init_data_s* rk_init_data_sensor_0_p = &rk_init_data_sensor_0;
+static rk_sensor_user_init_data_s* rk_init_data_sensor_0_p = NULL;
 static rk_sensor_user_init_data_s* rk_init_data_sensor_1_p = NULL;
 #include "../../../drivers/media/video/rk30_camera.c"
 
@@ -1449,25 +1453,7 @@ static void __init rk30_reserve(void)
        resource_fb[2].start = board_mem_reserve_add("fb2",RK30_FB0_MEM_SIZE);
        resource_fb[2].end = resource_fb[2].start + RK30_FB0_MEM_SIZE - 1;      
 #endif
-
-#if (MEM_CAMIPP_SIZE != 0)
-       #if CONFIG_USE_CIF_0
-       rk_camera_platform_data.meminfo.name = "camera_ipp_mem_0";
-       rk_camera_platform_data.meminfo.start = board_mem_reserve_add("camera_ipp_mem_0",MEM_CAMIPP_SIZE);
-       rk_camera_platform_data.meminfo.size= MEM_CAMIPP_SIZE;
-       #endif
-       #if CONFIG_USE_CIF_1
-       rk_camera_platform_data.meminfo_cif1.name = "camera_ipp_mem_1";
-       rk_camera_platform_data.meminfo_cif1.start =board_mem_reserve_add("camera_ipp_mem_1",MEM_CAMIPP_SIZE);
-       rk_camera_platform_data.meminfo_cif1.size= MEM_CAMIPP_SIZE;
-       #endif
-#endif
-
-#if (PMEM_CAM_SIZE != 0)
-       android_pmem_cam_pdata.start = board_mem_reserve_add("camera_pmem",PMEM_CAM_SIZE);
-       android_pmem_cam_pdata.size = PMEM_CAM_SIZE;
-#endif
-
+       rk30_camera_request_reserve_mem();
        board_mem_reserved();
 }
 
index 768ee708dd089d1978cb5c69ae1bde1468d06f14..6e22525de6f2553690fa0c2dc8fa7ad3cf8834fb 100755 (executable)
 #undef PMEM_SENSOR_FULL_RESOLUTION_0\r
 #define PMEM_SENSOR_FULL_RESOLUTION_0  0x500000\r
 #endif\r
+#if(SENSOR_CIF_BUSID_0 == RK_CAM_PLATFORM_DEV_ID_0)\r
+#define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 PMEM_SENSOR_FULL_RESOLUTION_0\r
+#define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 0\r
 #else\r
-#define PMEM_SENSOR_FULL_RESOLUTION_0  0x00\r
+#define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 PMEM_SENSOR_FULL_RESOLUTION_0\r
+#define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 0\r
+#endif\r
+#else\r
+#define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 0x00\r
+#define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 0x00\r
 #endif\r
  \r
 #if (CONFIG_SENSOR_IIC_ADDR_1 != 0x00)\r
 #undef PMEM_SENSOR_FULL_RESOLUTION_1\r
 #define PMEM_SENSOR_FULL_RESOLUTION_1  0x500000\r
 #endif\r
+#if (SENSOR_CIF_BUSID_1 == RK_CAM_PLATFORM_DEV_ID_0)\r
+          #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 < PMEM_SENSOR_FULL_RESOLUTION_1)\r
+          #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_0\r
+          #define PMEM_SENSOR_FULL_RESOLUTION_CIF_0 PMEM_SENSOR_FULL_RESOLUTION_1\r
+          #endif\r
 #else\r
-#define PMEM_SENSOR_FULL_RESOLUTION_1  0x00\r
+          #if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 < PMEM_SENSOR_FULL_RESOLUTION_1)\r
+          #undef PMEM_SENSOR_FULL_RESOLUTION_CIF_1\r
+          #define PMEM_SENSOR_FULL_RESOLUTION_CIF_1 PMEM_SENSOR_FULL_RESOLUTION_1\r
+          #endif\r
 #endif\r
-\r
-#if (PMEM_SENSOR_FULL_RESOLUTION_0 > PMEM_SENSOR_FULL_RESOLUTION_1)\r
-#define PMEM_CAM_FULL_RESOLUTION   PMEM_SENSOR_FULL_RESOLUTION_0\r
-#else\r
-#define PMEM_CAM_FULL_RESOLUTION   PMEM_SENSOR_FULL_RESOLUTION_1\r
 #endif\r
 \r
-#if (PMEM_CAM_FULL_RESOLUTION == 0x500000)\r
+//CIF 0\r
+#if (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x500000)\r
 #define PMEM_CAM_NECESSARY   0x1400000       /* 1280*720*1.5*4(preview) + 7.5M(capture raw) + 4M(jpeg encode output) */\r
-#define PMEM_CAMIPP_NECESSARY    0x800000\r
-#elif (PMEM_CAM_FULL_RESOLUTION == 0x300000)\r
+#define PMEM_CAMIPP_NECESSARY_CIF0    0x800000\r
+#elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x300000)\r
 #define PMEM_CAM_NECESSARY   0xe00000        /* 1280*720*1.5*4(preview) + 4.5M(capture raw) + 3M(jpeg encode output) */\r
-#define PMEM_CAMIPP_NECESSARY    0x500000\r
-#elif (PMEM_CAM_FULL_RESOLUTION == 0x200000) /* 1280*720*1.5*4(preview) + 3M(capture raw) + 3M(jpeg encode output) */\r
+#define PMEM_CAMIPP_NECESSARY_CIF_0    0x500000\r
+#elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x200000) /* 1280*720*1.5*4(preview) + 3M(capture raw) + 3M(jpeg encode output) */\r
 #define PMEM_CAM_NECESSARY   0xc00000\r
-#define PMEM_CAMIPP_NECESSARY    0x400000\r
-#elif ((PMEM_CAM_FULL_RESOLUTION == 0x100000) || (PMEM_CAM_FULL_RESOLUTION == 0x130000))\r
+#define PMEM_CAMIPP_NECESSARY_CIF_0    0x400000\r
+#elif ((PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x100000) || (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x130000))\r
 #define PMEM_CAM_NECESSARY   0x800000        /* 800*600*1.5*4(preview) + 2M(capture raw) + 2M(jpeg encode output) */\r
-#define PMEM_CAMIPP_NECESSARY    0x400000\r
-#elif (PMEM_CAM_FULL_RESOLUTION == 0x30000)\r
+#define PMEM_CAMIPP_NECESSARY_CIF_0    0x400000\r
+#elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x30000)\r
 #define PMEM_CAM_NECESSARY   0x400000        /* 640*480*1.5*4(preview) + 1M(capture raw) + 1M(jpeg encode output) */\r
-#define PMEM_CAMIPP_NECESSARY    0x400000\r
+#define PMEM_CAMIPP_NECESSARY_CIF_0    0x400000\r
 #else\r
 #define PMEM_CAM_NECESSARY   0x1200000\r
-#define PMEM_CAMIPP_NECESSARY    0x800000\r
+#define PMEM_CAMIPP_NECESSARY_CIF_0    0x800000\r
+#endif\r
+\r
+//CIF 1\r
+#if (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x500000)\r
+#define PMEM_CAM_NECESSARY      0x1400000               /* 1280*720*1.5*4(preview) + 7.5M(capture raw) + 4M(jpeg encode output) */\r
+#define PMEM_CAMIPP_NECESSARY_CIF_1      0x800000\r
+#elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x300000)\r
+#define PMEM_CAM_NECESSARY      0xe00000                /* 1280*720*1.5*4(preview) + 4.5M(capture raw) + 3M(jpeg encode output) */\r
+#define PMEM_CAMIPP_NECESSARY_CIF_1    0x500000\r
+#elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_1== 0x200000) /* 1280*720*1.5*4(preview) + 3M(capture raw) + 3M(jpeg encode output) */\r
+#define PMEM_CAM_NECESSARY      0xc00000\r
+#define PMEM_CAMIPP_NECESSARY_CIF_1    0x400000\r
+#elif ((PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x100000) || (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x130000))\r
+#define PMEM_CAM_NECESSARY      0x800000                /* 800*600*1.5*4(preview) + 2M(capture raw) + 2M(jpeg encode output) */\r
+#define PMEM_CAMIPP_NECESSARY_CIF_1    0x400000\r
+#elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x30000)\r
+#define PMEM_CAM_NECESSARY      0x400000                /* 640*480*1.5*4(preview) + 1M(capture raw) + 1M(jpeg encode output) */\r
+#define PMEM_CAMIPP_NECESSARY_CIF_1    0x400000\r
+#else\r
+#define PMEM_CAM_NECESSARY      0x1200000\r
+#define PMEM_CAMIPP_NECESSARY_CIF_1    0x800000\r
 #endif\r
 /*---------------- Camera Sensor Fixed Macro End  ------------------------*/\r
-#else   //#ifdef CONFIG_VIDEO_RK \r
-#define PMEM_CAM_NECESSARY   0x00000000\r
+#else  //#ifdef CONFIG_VIDEO_RK \r
+#define PMEM_CAM_NECESSARY      0x00000000\r
 #endif\r
 #else   // #ifdef PMEM_CAM_SIZE\r
 \r
@@ -1681,8 +1714,30 @@ static struct android_pmem_platform_data android_pmem_cam_pdata = {
                .platform_data = &android_pmem_cam_pdata,\r
        },\r
 };\r
+ static void rk30_camera_request_reserve_mem(void)\r
+{\r
+#if (MEM_CAMIPP_SIZE_CIF_0 != 0)\r
+       #if CONFIG_USE_CIF_0\r
+                rk_camera_platform_data.meminfo.name = "camera_ipp_mem_0";\r
+                rk_camera_platform_data.meminfo.start = board_mem_reserve_add("camera_ipp_mem_0",MEM_CAMIPP_SIZE_CIF_0);\r
+                rk_camera_platform_data.meminfo.size= MEM_CAMIPP_SIZE_CIF_0;\r
+       #endif\r
+#endif\r
+\r
+#if (MEM_CAMIPP_SIZE_CIF_1 != 0)\r
+      #if CONFIG_USE_CIF_1\r
+        rk_camera_platform_data.meminfo_cif1.name = "camera_ipp_mem_1";\r
+        rk_camera_platform_data.meminfo_cif1.start =board_mem_reserve_add("camera_ipp_mem_1",MEM_CAMIPP_SIZE_CIF_1);\r
+        rk_camera_platform_data.meminfo_cif1.size= MEM_CAMIPP_SIZE_CIF_1;\r
+      #endif\r
+#endif\r
 \r
-static void rk_register_camera_devices(void)\r
+#if (PMEM_CAM_SIZE != 0)\r
+                android_pmem_cam_pdata.start = board_mem_reserve_add("camera_pmem",PMEM_CAM_SIZE);\r
+                android_pmem_cam_pdata.size = PMEM_CAM_SIZE;\r
+#endif\r
+}\r
+static int rk_register_camera_devices(void)\r
 {\r
        rk_init_camera_plateform_data();\r
 #if CONFIG_USE_CIF_0\r
@@ -1697,7 +1752,9 @@ static void rk_register_camera_devices(void)
                platform_device_register(&rk_soc_camera_pdrv_1);\r
        if(((struct android_pmem_platform_data*)(android_pmem_cam_device.dev.platform_data))->size)\r
                platform_device_register(&android_pmem_cam_device);\r
+       return 0;\r
 }\r
+\r
 module_init(rk_register_camera_devices);\r
 #endif\r
 \r
index ee071f553f172ba2dc953bcbf09741553ccff2ac..41f479ef793a165433bab82b0bb981e5cea57b38 100755 (executable)
@@ -1359,10 +1359,10 @@ static int rk_camera_set_fmt(struct soc_camera_device *icd,
             goto RK_CAMERA_SET_FMT_END;
        }
                //need crop ?
-               if(1/*(mf.width/mf.height) != (usr_w/usr_h)*/){
-                       ratio = ((mf.width/usr_w) >= (mf.height/usr_h))?(mf.height/usr_h):(mf.width/usr_w);
-                       pcdev->host_width = ratio*usr_w;
-                       pcdev->host_height = ratio*usr_h;
+               if((mf.width*10/mf.height) != (usr_w*10/usr_h)){
+                       ratio = ((mf.width*10/usr_w) >= (mf.height*10/usr_h))?(mf.height*10/usr_h):(mf.width*10/usr_w);
+                       pcdev->host_width = ratio*usr_w/10;
+                       pcdev->host_height = ratio*usr_h/10;
                        printk("ratio = %d ,host:%d*%d\n",ratio,pcdev->host_width,pcdev->host_height);
                        }
                else{ // needn't crop ,just scaled by ipp