init cif driver for rk2928,compatable with rk30.
[firefly-linux-kernel-4.4.55.git] / drivers / media / video / rk2928_camera.c
1 \r
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
8 #else\r
9 /*****************************************************************************************\r
10  * camera  devices\r
11  * author: ddl@rock-chips.com\r
12  *****************************************************************************************/\r
13 #ifdef CONFIG_VIDEO_RK29 \r
14 \r
15 static int rk_sensor_iomux(int pin)\r
16 {    \r
17     return 0;\r
18 }\r
19 #define PMEM_CAM_BASE 0 //just for compile ,no meaning\r
20 #include "../../../arch/arm/plat-rk/rk_camera.c"\r
21 \r
22 \r
23 static u64 rockchip_device_camera_dmamask = 0xffffffffUL;\r
24 static struct resource rk_camera_resource_host_0[] = {\r
25         [0] = {\r
26                 .start = RK2928_CIF_PHYS,\r
27                 .end   = RK2928_CIF_PHYS + RK2928_CIF_SIZE - 1,\r
28                 .flags = IORESOURCE_MEM,\r
29         },\r
30         [1] = {\r
31                 .start = IRQ_CIF,\r
32                 .end   = IRQ_CIF,\r
33                 .flags = IORESOURCE_IRQ,\r
34         }\r
35 };\r
36 static struct resource rk_camera_resource_host_1[] = {\r
37         [0] = {\r
38                 .start = RK2928_CIF_PHYS,\r
39                 .end   = RK2928_CIF_PHYS+ RK2928_CIF_SIZE - 1,\r
40                 .flags = IORESOURCE_MEM,\r
41         },\r
42         [1] = {\r
43                 .start = IRQ_CIF,\r
44                 .end   = IRQ_CIF,\r
45                 .flags = IORESOURCE_IRQ,\r
46         }\r
47 };\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
54         .dev                    = {\r
55                 .dma_mask = &rockchip_device_camera_dmamask,\r
56                 .coherent_dma_mask = 0xffffffffUL,\r
57                 .platform_data  = &rk_camera_platform_data,\r
58         }\r
59 };\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
66         .dev                    = {\r
67                 .dma_mask = &rockchip_device_camera_dmamask,\r
68                 .coherent_dma_mask = 0xffffffffUL,\r
69                 .platform_data  = &rk_camera_platform_data,\r
70         }\r
71 };\r
72 \r
73 static void rk_init_camera_plateform_data(void)\r
74 {\r
75     int i,dev_idx;\r
76     \r
77     dev_idx = 0;\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
86             dev_idx++;\r
87         }\r
88     }\r
89 }\r
90 \r
91 static void rk30_camera_request_reserve_mem(void)\r
92 {\r
93 #ifdef CONFIG_VIDEO_RK29_WORK_IPP\r
94     #ifdef 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
98 \r
99         memcpy(&rk_camera_platform_data.meminfo_cif1,&rk_camera_platform_data.meminfo,sizeof(struct rk29camera_mem_res));\r
100     #else\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
104         \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
108     #endif\r
109  #endif\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
113  #endif\r
114 \r
115 }\r
116 static int rk_register_camera_devices(void)\r
117 {\r
118     int i;\r
119     int host_registered_0,host_registered_1;\r
120     \r
121         rk_init_camera_plateform_data();\r
122 \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
131                 }\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
136                 }\r
137             } \r
138         }\r
139     }\r
140 \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
144         }\r
145     }\r
146  #if PMEM_CAM_NECESSARY\r
147             platform_device_register(&android_pmem_cam_device);\r
148  #endif\r
149     \r
150         return 0;\r
151 }\r
152 \r
153 module_init(rk_register_camera_devices);\r
154 #endif\r
155 \r
156 #endif //#ifdef CONFIG_VIDEO_RK\r