Merge branch develop-3.10 into develop-3.10-next
[firefly-linux-kernel-4.4.55.git] / drivers / media / video / rk_camsys / camsys_gpio.h
1 #ifndef __RKCAMSYS_GPIO_H__
2 #define __RKCAMSYS_GPIO_H__
3
4 #include <linux/gpio.h>
5 #if defined(CONFIG_ARCH_ROCKCHIP)
6 #define RK30_PIN0_PA0 (0)
7 #define NUM_GROUP       (32)
8 #define GPIO_BANKS      (9)
9 #endif
10
11 static inline unsigned int camsys_gpio_group_pin(unsigned char *io_name)
12 {
13     unsigned char *pin_char;
14     unsigned char pin;
15
16     if (strstr(io_name, "PA")) {
17         pin_char = strstr(io_name, "PA");
18         pin_char += 2;
19         pin = *pin_char - 0x30;
20     } else if (strstr(io_name, "PB")) {
21         pin_char = strstr(io_name, "PB");
22         pin_char += 2;
23         pin = *pin_char - 0x30;
24         pin += 8;
25     } else if (strstr(io_name, "PC")) {
26         pin_char = strstr(io_name, "PC");
27         pin_char += 2;
28         pin = *pin_char - 0x30;
29         pin += 16;
30     } else if (strstr(io_name, "PD")) {
31         pin_char = strstr(io_name, "PD");
32         pin_char += 2;
33         pin = *pin_char - 0x30;
34         pin += 24;
35     }
36
37     return pin;
38 }
39
40 static inline unsigned int camsys_gpio_group(unsigned char *io_name)
41 {
42     unsigned int group;
43     
44     if (strstr(io_name,"PIN0")) {
45         group = 0;        
46     } else if (strstr(io_name,"PIN1")) {
47         group = 1;      
48     } else if (strstr(io_name,"PIN2")) {
49         group = 2;      
50     } else if (strstr(io_name,"PIN3")) {
51         group = 3;      
52     } else if (strstr(io_name,"PIN4")) {
53         group = 4;      
54     } else if (strstr(io_name,"PIN5")) {
55         group = 5;      
56     } else if (strstr(io_name,"PIN6")) {
57         group = 6;      
58     } else if (strstr(io_name,"PIN7")) {
59         group = 7;      
60     } else if (strstr(io_name,"PIN8")) {
61         group = 8;      
62     }  
63
64     return group;
65 }
66
67 static inline unsigned int camsys_gpio_get(unsigned char *io_name)
68 {
69     unsigned int gpio;
70     unsigned int group;
71     unsigned int group_pin;
72     
73 #if (defined(CONFIG_ARCH_RK3066B) || defined(CONFIG_ARCH_RK3188) || defined(CONFIG_ARCH_RK319X) ||defined(CONFIG_ARCH_ROCKCHIP))
74     if (strstr(io_name, "RK30_")) {
75         gpio = RK30_PIN0_PA0;
76         group = camsys_gpio_group(io_name);
77         group_pin = camsys_gpio_group_pin(io_name);
78         
79         if (group >= GPIO_BANKS) {
80             gpio = 0xffffffff;
81         } else {
82             gpio += group*NUM_GROUP + group_pin; 
83         }
84     }
85
86 #endif
87
88
89     return gpio;
90 }
91
92 #endif
93