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
19 #define PMEM_CAM_BASE 0 //just for compile ,no meaning
\r
20 #include "../../../arch/arm/plat-rk/rk_camera.c"
\r
23 static u64 rockchip_device_camera_dmamask = 0xffffffffUL;
\r
24 static struct resource rk_camera_resource_host_0[] = {
\r
26 .start = RK2928_CIF_PHYS,
\r
27 .end = RK2928_CIF_PHYS + RK2928_CIF_SIZE - 1,
\r
28 .flags = IORESOURCE_MEM,
\r
33 .flags = IORESOURCE_IRQ,
\r
36 static struct resource rk_camera_resource_host_1[] = {
\r
38 .start = RK2928_CIF_PHYS,
\r
39 .end = RK2928_CIF_PHYS+ RK2928_CIF_SIZE - 1,
\r
40 .flags = IORESOURCE_MEM,
\r
45 .flags = IORESOURCE_IRQ,
\r
48 /*platform_device : */
\r
49 struct platform_device rk_device_camera_host_0 = {
\r
50 .name = RK29_CAM_DRV_NAME,
\r
51 .id = RK_CAM_PLATFORM_DEV_ID_0, /* This is used to put cameras on this interface */
\r
52 .num_resources = ARRAY_SIZE(rk_camera_resource_host_0),
\r
53 .resource = rk_camera_resource_host_0,
\r
55 .dma_mask = &rockchip_device_camera_dmamask,
\r
56 .coherent_dma_mask = 0xffffffffUL,
\r
57 .platform_data = &rk_camera_platform_data,
\r
60 /*platform_device : */
\r
61 struct platform_device rk_device_camera_host_1 = {
\r
62 .name = RK29_CAM_DRV_NAME,
\r
63 .id = RK_CAM_PLATFORM_DEV_ID_1, /* This is used to put cameras on this interface */
\r
64 .num_resources = ARRAY_SIZE(rk_camera_resource_host_1),
\r
65 .resource = rk_camera_resource_host_1,
\r
67 .dma_mask = &rockchip_device_camera_dmamask,
\r
68 .coherent_dma_mask = 0xffffffffUL,
\r
69 .platform_data = &rk_camera_platform_data,
\r
73 static void rk_init_camera_plateform_data(void)
\r
78 for (i=0; i<RK_CAM_NUM; i++) {
\r
79 rk_camera_platform_data.sensor_init_data[i] = &rk_init_data_sensor[i];
\r
80 if (rk_camera_platform_data.register_dev[i].device_info.name) {
\r
81 rk_camera_platform_data.register_dev[i].link_info.board_info =
\r
82 &rk_camera_platform_data.register_dev[i].i2c_cam_info;
\r
83 rk_camera_platform_data.register_dev[i].device_info.id = dev_idx;
\r
84 rk_camera_platform_data.register_dev[i].device_info.dev.platform_data =
\r
85 &rk_camera_platform_data.register_dev[i].link_info;
\r
91 static void rk30_camera_request_reserve_mem(void)
\r
93 #ifdef CONFIG_VIDEO_RK29_WORK_IPP
\r
94 #ifdef CONFIG_VIDEO_RKCIF_WORK_SIMUL_OFF
\r
95 rk_camera_platform_data.meminfo.name = "camera_ipp_mem";
\r
96 rk_camera_platform_data.meminfo.start = board_mem_reserve_add("camera_ipp_mem",PMEM_CAMIPP_NECESSARY);
\r
97 rk_camera_platform_data.meminfo.size= PMEM_CAMIPP_NECESSARY;
\r
99 memcpy(&rk_camera_platform_data.meminfo_cif1,&rk_camera_platform_data.meminfo,sizeof(struct rk29camera_mem_res));
\r
101 rk_camera_platform_data.meminfo.name = "camera_ipp_mem_0";
\r
102 rk_camera_platform_data.meminfo.start = board_mem_reserve_add("camera_ipp_mem_0",PMEM_CAMIPP_NECESSARY_CIF_0);
\r
103 rk_camera_platform_data.meminfo.size= PMEM_CAMIPP_NECESSARY_CIF_0;
\r
105 rk_camera_platform_data.meminfo_cif1.name = "camera_ipp_mem_1";
\r
106 rk_camera_platform_data.meminfo_cif1.start =board_mem_reserve_add("camera_ipp_mem_1",PMEM_CAMIPP_NECESSARY_CIF_1);
\r
107 rk_camera_platform_data.meminfo_cif1.size= PMEM_CAMIPP_NECESSARY_CIF_1;
\r
110 #if PMEM_CAM_NECESSARY
\r
111 android_pmem_cam_pdata.start = board_mem_reserve_add((char*)(android_pmem_cam_pdata.name),PMEM_CAM_NECESSARY);
\r
112 android_pmem_cam_pdata.size= PMEM_CAM_NECESSARY;
\r
116 static int rk_register_camera_devices(void)
\r
119 int host_registered_0,host_registered_1;
\r
121 rk_init_camera_plateform_data();
\r
123 host_registered_0 = 0;
\r
124 host_registered_1 = 0;
\r
125 for (i=0; i<RK_CAM_NUM; i++) {
\r
126 if (rk_camera_platform_data.register_dev[i].device_info.name) {
\r
127 if (rk_camera_platform_data.register_dev[i].link_info.bus_id == RK_CAM_PLATFORM_DEV_ID_0) {
\r
128 if (!host_registered_0) {
\r
129 platform_device_register(&rk_device_camera_host_0);
\r
130 host_registered_0 = 1;
\r
132 } else if (rk_camera_platform_data.register_dev[i].link_info.bus_id == RK_CAM_PLATFORM_DEV_ID_1) {
\r
133 if (!host_registered_1) {
\r
134 platform_device_register(&rk_device_camera_host_1);
\r
135 host_registered_1 = 1;
\r
141 for (i=0; i<RK_CAM_NUM; i++) {
\r
142 if (rk_camera_platform_data.register_dev[i].device_info.name) {
\r
143 platform_device_register(&rk_camera_platform_data.register_dev[i].device_info);
\r
146 #if PMEM_CAM_NECESSARY
\r
147 platform_device_register(&android_pmem_cam_device);
\r
153 module_init(rk_register_camera_devices);
\r
156 #endif //#ifdef CONFIG_VIDEO_RK
\r