Merge tag 'lsk-v4.4-16.06-android'
[firefly-linux-kernel-4.4.55.git] / drivers / media / video / rk_camsys / camsys_soc_priv.c
1
2 #include "camsys_soc_priv.h"
3
4
5 static camsys_soc_priv_t *camsys_soc_p;
6
7 extern int camsys_rk3288_cfg(
8         camsys_dev_t *camsys_dev, camsys_soc_cfg_t cfg_cmd, void *cfg_para);
9 extern int camsys_rk3368_cfg(
10         camsys_dev_t *camsys_dev, camsys_soc_cfg_t cfg_cmd, void *cfg_para);
11 extern int camsys_rk3366_cfg(
12         camsys_dev_t *camsys_dev, camsys_soc_cfg_t cfg_cmd, void *cfg_para);
13 extern int camsys_rk3399_cfg(
14         camsys_dev_t *camsys_dev, camsys_soc_cfg_t cfg_cmd, void *cfg_para);
15 camsys_soc_priv_t *camsys_soc_get(void)
16 {
17         if (camsys_soc_p != NULL) {
18                 return camsys_soc_p;
19         } else {
20                 return NULL;
21         }
22 }
23
24 int camsys_soc_init(unsigned int chip_type)
25 {
26         camsys_soc_p = kzalloc(sizeof(camsys_soc_priv_t), GFP_KERNEL);
27         if (camsys_soc_p == NULL) {
28                 camsys_err("malloc camsys_soc_priv_t failed!");
29                 goto fail;
30         }
31
32         if (chip_type == 3368) {
33                 strlcpy(camsys_soc_p->name, "camsys_rk3368", 31);
34                 camsys_soc_p->soc_cfg = camsys_rk3368_cfg;
35                 camsys_err("camsys_soc_init exit!");
36         } else if (chip_type == 3288) {
37                 if (cpu_is_rk3288()) {
38                         strlcpy(camsys_soc_p->name, "camsys_rk3288", 31);
39                         camsys_soc_p->soc_cfg = camsys_rk3288_cfg;
40                 } else {
41                         camsys_err("camsys isn't support soc!");
42                         goto fail;
43                 }
44         } else if (chip_type == 3366) {
45                 strlcpy(camsys_soc_p->name, "camsys_rk3366", 31);
46                 camsys_soc_p->soc_cfg = camsys_rk3366_cfg;
47                 camsys_err("camsys_soc_init exit!");
48         } else if (chip_type == 3399) {
49                 strlcpy(camsys_soc_p->name, "camsys_rk3399", 31);
50                 camsys_soc_p->soc_cfg = camsys_rk3399_cfg;
51                 camsys_err("camsys_soc_init exit!");
52         }
53
54         return 0;
55 fail:
56         if (camsys_soc_p != NULL) {
57                 kfree(camsys_soc_p);
58                 camsys_soc_p = NULL;
59         }
60         return -1;
61 }
62
63 int camsys_soc_deinit(void)
64 {
65         if (camsys_soc_p != NULL) {
66                 kfree(camsys_soc_p);
67                 camsys_soc_p = NULL;
68         }
69         return 0;
70 }