2 #include <mach/iomux.h>
\r
3 #include <media/soc_camera.h>
\r
4 #include <linux/android_pmem.h>
\r
5 #include <mach/rk2928_camera.h>
\r
6 #ifndef PMEM_CAM_SIZE
\r
7 #include "../../../arch/arm/plat-rk/rk_camera.c"
\r
9 /*****************************************************************************************
\r
11 * author: ddl@rock-chips.com
\r
12 *****************************************************************************************/
\r
13 #ifdef CONFIG_VIDEO_RK29
\r
15 static int rk_sensor_iomux(int pin)
\r
17 iomux_set_gpio_mode(pin);
\r
20 #define PMEM_CAM_BASE 0 //just for compile ,no meaning
\r
21 #include "../../../arch/arm/plat-rk/rk_camera.c"
\r
24 static u64 rockchip_device_camera_dmamask = 0xffffffffUL;
\r
26 static struct resource rk_camera_resource_host_0[] = {
\r
28 .start = RK2928_CIF_PHYS,
\r
29 .end = RK2928_CIF_PHYS + RK2928_CIF_SIZE - 1,
\r
30 .flags = IORESOURCE_MEM,
\r
35 .flags = IORESOURCE_IRQ,
\r
40 static struct resource rk_camera_resource_host_1[] = {
\r
42 .start = RK2928_CIF_PHYS,
\r
43 .end = RK2928_CIF_PHYS+ RK2928_CIF_SIZE - 1,
\r
44 .flags = IORESOURCE_MEM,
\r
49 .flags = IORESOURCE_IRQ,
\r
54 /*platform_device : */
\r
56 struct platform_device rk_device_camera_host_0 = {
\r
57 .name = RK29_CAM_DRV_NAME,
\r
58 .id = RK_CAM_PLATFORM_DEV_ID_0, /* This is used to put cameras on this interface */
\r
59 .num_resources = ARRAY_SIZE(rk_camera_resource_host_0),
\r
60 .resource = rk_camera_resource_host_0,
\r
62 .dma_mask = &rockchip_device_camera_dmamask,
\r
63 .coherent_dma_mask = 0xffffffffUL,
\r
64 .platform_data = &rk_camera_platform_data,
\r
70 /*platform_device : */
\r
71 struct platform_device rk_device_camera_host_1 = {
\r
72 .name = RK29_CAM_DRV_NAME,
\r
73 .id = RK_CAM_PLATFORM_DEV_ID_1, /* This is used to put cameras on this interface */
\r
74 .num_resources = ARRAY_SIZE(rk_camera_resource_host_1),
\r
75 .resource = rk_camera_resource_host_1,
\r
77 .dma_mask = &rockchip_device_camera_dmamask,
\r
78 .coherent_dma_mask = 0xffffffffUL,
\r
79 .platform_data = &rk_camera_platform_data,
\r
84 static void rk_init_camera_plateform_data(void)
\r
89 for (i=0; i<RK_CAM_NUM; i++) {
\r
90 rk_camera_platform_data.sensor_init_data[i] = &rk_init_data_sensor[i];
\r
91 if (rk_camera_platform_data.register_dev[i].device_info.name) {
\r
92 rk_camera_platform_data.register_dev[i].link_info.board_info =
\r
93 &rk_camera_platform_data.register_dev[i].i2c_cam_info;
\r
94 rk_camera_platform_data.register_dev[i].device_info.id = dev_idx;
\r
95 rk_camera_platform_data.register_dev[i].device_info.dev.platform_data =
\r
96 &rk_camera_platform_data.register_dev[i].link_info;
\r
102 static void rk30_camera_request_reserve_mem(void)
\r
104 int i,max_resolution;
\r
105 int cam_ipp_mem=PMEM_CAMIPP_NECESSARY, cam_pmem=PMEM_CAM_NECESSARY;
\r
108 max_resolution = 0x00;
\r
109 while (strstr(new_camera[i].dev.device_info.dev.init_name,"end")==NULL) {
\r
110 if (new_camera[i].resolution > max_resolution)
\r
111 max_resolution = new_camera[i].resolution;
\r
115 if (max_resolution < PMEM_SENSOR_FULL_RESOLUTION_CIF_1)
\r
116 max_resolution = PMEM_SENSOR_FULL_RESOLUTION_CIF_1;
\r
117 if (max_resolution < PMEM_SENSOR_FULL_RESOLUTION_CIF_0)
\r
118 max_resolution = PMEM_SENSOR_FULL_RESOLUTION_CIF_0;
\r
120 switch (max_resolution)
\r
125 cam_ipp_mem = 0x800000;
\r
126 cam_pmem = 0x1900000;
\r
132 cam_ipp_mem = 0x800000;
\r
133 cam_pmem = 0x1400000;
\r
139 cam_ipp_mem = 0x600000;
\r
140 cam_pmem = 0xf00000;
\r
146 cam_ipp_mem = 0x600000;
\r
147 cam_pmem = 0xc00000;
\r
153 cam_ipp_mem = 0x600000;
\r
154 cam_pmem = 0xa00000;
\r
160 cam_ipp_mem = 0x600000;
\r
161 cam_pmem = 0x600000;
\r
167 rk_camera_platform_data.meminfo.vbase = rk_camera_platform_data.meminfo_cif1.vbase = NULL;
\r
168 #if defined(CONFIG_VIDEO_RKCIF_WORK_SIMUL_OFF) || ((RK_SUPPORT_CIF0 && RK_SUPPORT_CIF1) == 0)
\r
169 rk_camera_platform_data.meminfo.name = "camera_ipp_mem";
\r
170 rk_camera_platform_data.meminfo.start = board_mem_reserve_add("camera_ipp_mem",cam_ipp_mem);
\r
171 rk_camera_platform_data.meminfo.size= cam_ipp_mem;
\r
173 memcpy(&rk_camera_platform_data.meminfo_cif1,&rk_camera_platform_data.meminfo,sizeof(struct rk29camera_mem_res));
\r
175 rk_camera_platform_data.meminfo.name = "camera_ipp_mem_0";
\r
176 rk_camera_platform_data.meminfo.start = board_mem_reserve_add("camera_ipp_mem_0",PMEM_CAMIPP_NECESSARY_CIF_0);
\r
177 rk_camera_platform_data.meminfo.size= PMEM_CAMIPP_NECESSARY_CIF_0;
\r
179 rk_camera_platform_data.meminfo_cif1.name = "camera_ipp_mem_1";
\r
180 rk_camera_platform_data.meminfo_cif1.start =board_mem_reserve_add("camera_ipp_mem_1",PMEM_CAMIPP_NECESSARY_CIF_1);
\r
181 rk_camera_platform_data.meminfo_cif1.size= PMEM_CAMIPP_NECESSARY_CIF_1;
\r
184 #if PMEM_CAM_NECESSARY
\r
185 android_pmem_cam_pdata.start = board_mem_reserve_add((char*)(android_pmem_cam_pdata.name),cam_pmem);
\r
186 android_pmem_cam_pdata.size= cam_pmem;
\r
190 static int rk_register_camera_devices(void)
\r
193 int host_registered_0,host_registered_1;
\r
194 struct rkcamera_platform_data *new_camera;
\r
196 rk_init_camera_plateform_data();
\r
198 host_registered_0 = 0;
\r
199 host_registered_1 = 0;
\r
200 for (i=0; i<RK_CAM_NUM; i++) {
\r
201 if (rk_camera_platform_data.register_dev[i].device_info.name) {
\r
202 if (rk_camera_platform_data.register_dev[i].link_info.bus_id == RK_CAM_PLATFORM_DEV_ID_0) {
\r
203 #if RK_SUPPORT_CIF0
\r
204 host_registered_0 = 1;
\r
206 printk(KERN_ERR "%s(%d) : This chip isn't support CIF0, Please user check ...\n",__FUNCTION__,__LINE__);
\r
210 if (rk_camera_platform_data.register_dev[i].link_info.bus_id == RK_CAM_PLATFORM_DEV_ID_1) {
\r
211 #if RK_SUPPORT_CIF1
\r
212 host_registered_1 = 1;
\r
214 printk(KERN_ERR "%s(%d) : This chip isn't support CIF1, Please user check ...\n",__FUNCTION__,__LINE__);
\r
222 new_camera = rk_camera_platform_data.register_dev_new;
\r
223 if (new_camera != NULL) {
\r
224 while (strstr(new_camera->dev.device_info.dev.init_name,"end")==NULL) {
\r
225 if (new_camera->dev.link_info.bus_id == RK_CAM_PLATFORM_DEV_ID_1) {
\r
226 host_registered_1 = 1;
\r
227 } else if (new_camera->dev.link_info.bus_id == RK_CAM_PLATFORM_DEV_ID_0) {
\r
228 host_registered_0 = 1;
\r
233 #if RK_SUPPORT_CIF0
\r
234 if (host_registered_0) {
\r
235 platform_device_register(&rk_device_camera_host_0);
\r
238 #if RK_SUPPORT_CIF1
\r
239 if (host_registered_1) {
\r
240 platform_device_register(&rk_device_camera_host_1);
\r
244 for (i=0; i<RK_CAM_NUM; i++) {
\r
245 if (rk_camera_platform_data.register_dev[i].device_info.name) {
\r
246 platform_device_register(&rk_camera_platform_data.register_dev[i].device_info);
\r
250 if (rk_camera_platform_data.sensor_register)
\r
251 (rk_camera_platform_data.sensor_register)();
\r
253 #if PMEM_CAM_NECESSARY
\r
254 platform_device_register(&android_pmem_cam_device);
\r
260 module_init(rk_register_camera_devices);
\r
263 #endif //#ifdef CONFIG_VIDEO_RK
\r