drm/rockchip: add rk3399 vop big csc support
[firefly-linux-kernel-4.4.55.git] / drivers / base / devices_filter.h
1 #ifndef __DEVICES_FILTER_H
2 #define __DEVICES_FILTER_H
3 //lt 2010-12-03...
4
5 #define USB_ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
6
7 typedef  struct {
8         int  vid;
9         int  pid;
10         const char *manufacturer;
11         const char *product;
12         void *data;
13 }usb_parameter;
14
15 static usb_parameter not_skip_device_list[] = {
16         {0x12D1, 0x1001, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF", "HUAWEI Mobile",NULL},
17 //      {0x12D1, 0x1411, "HUAWEI Technology", "HUAWEI Mobile",NULL},
18 };
19
20 static usb_parameter skip_device_list[] = {
21         {0x12D1, 0x1DA1, NULL, NULL, NULL},
22         {0x12D1, 0x1D09, NULL, NULL, NULL},
23         {0x12D1, 0x1520, NULL, NULL, NULL},
24         {0x12D1, 0x14AC, NULL, NULL, NULL},
25         {0x12D1, 0x1465, NULL, NULL, NULL},
26         {0x12D1, 0x1446, NULL, NULL, NULL},
27         {0x12D1, 0x1414, NULL, NULL, NULL},
28         {0x12D1, 0x140C, NULL, NULL, NULL},
29         {0x12D1, 0x1003, NULL, NULL, NULL},
30         {0x12D1, 0x1001, NULL, NULL, NULL},
31         {0x12D1, 0x1505, NULL, NULL, NULL},
32         {0x12D1, 0x14FE, NULL, NULL, NULL}, 
33         {0x12D1, 0x1506, NULL, NULL, NULL},
34         {0x19D2, 0xFFF5, NULL, NULL, NULL},
35         {0x19D2, 0xFFF1, NULL, NULL, NULL},
36         {0x19D2, 0x2000, NULL, NULL, NULL},
37         {0x19D2, 0x0120, NULL, NULL, NULL},
38         {0x19D2, 0x0094, NULL, NULL, NULL},
39         {0x19D2, 0x0079, NULL, NULL, NULL},
40         {0x19D2, 0x0073, NULL, NULL, NULL},
41         {0x19D2, 0x0033, NULL, NULL, NULL},
42         {0x19D2, 0x0031, NULL, NULL, NULL},
43         {0x19D2, 0x0026, NULL, NULL, NULL},
44         {0x19D2, 0x0017, NULL, NULL, NULL},
45         {0x19D2, 0x0015, NULL, NULL, NULL},
46         {0x19D2, 0x0154, NULL, NULL, NULL},        
47         {0x19D2, 0x2003, NULL, NULL, NULL},
48                 {0x19D2, 0x0151, NULL, NULL, NULL},         
49         {0x04CC, 0x225A, NULL, NULL, NULL},
50         {0x04CC, 0x2259, NULL, NULL, NULL},
51
52         {0x1410, 0x5010, NULL, NULL, NULL},
53         {0x1410, 0x4400, NULL, NULL, NULL},
54         
55         {0x1D09, 0xAEF4, NULL, NULL, NULL},
56
57         {0x1BBB, 0xF000, NULL, NULL, NULL},
58         {0x1BBB, 0x0017, NULL, NULL, NULL},
59         
60 // 山寨
61 //      {0x05C6, -1, NULL, NULL, NULL},
62         {0x05C6, 0x1000, NULL, NULL, NULL},
63         {0x05C6, 0xF000, NULL, NULL, NULL},
64         {0x05C6, 0x0016, NULL, NULL, NULL},
65         {0x1AB7, 0x5700, NULL, NULL, NULL},
66         {0x20B9, 0x1682, NULL, NULL, NULL},
67
68         {0x028A, 0x1006, NULL, NULL, NULL},
69         
70         {0x1C9E, 0x6061, NULL, NULL, NULL},
71         {0x1C9E, 0x6000, NULL, NULL, NULL},
72         {0x1C9E, 0x1001, NULL, NULL, NULL},
73         
74         {0x1C9E, 0xF000, NULL, NULL, NULL},    
75     {0x1C9E, 0x9605, NULL, NULL, NULL}, 
76         {0x21F5, 0x2008, NULL, NULL, NULL},
77         {0x21F5, 0x1000, NULL, NULL, NULL},
78         
79         {0x6000, 0x1000, NULL, NULL, NULL},
80
81         {0x0685, 0x7000, NULL, NULL, NULL},
82
83         {0x20A6, 0xF00E, NULL, NULL, NULL},
84         {0x20A6, 0x1105, NULL, NULL, NULL},
85         {0x1614, 0x0800, NULL, NULL, NULL},
86         //begain add by xxh
87         {0x1A8D, 0x2000, NULL, NULL, NULL},
88         {0x1C9E, 0x9913, NULL, NULL, NULL},
89         {0x1C9E, 0x9915, NULL, NULL, NULL},
90         {0x230D, 0x000C, NULL, NULL, NULL},
91         {0x230D, 0x0003, NULL, NULL, NULL},
92                 {0x230D, 0x0001, NULL, NULL, NULL},
93         {0x257A, 0x2601, NULL, NULL, NULL},
94         {0x1E89, 0x1E16, NULL, NULL, NULL},
95         {0x1C9E, 0x9800, NULL, NULL, NULL},
96                 {0x1dbc, 0x0669, NULL, NULL, NULL},  
97                 {0x2020, 0x0002, NULL, NULL, NULL},    
98                 {0x2020, 0x4000, NULL, NULL, NULL},  
99             {0x1C9E, 0x9916, NULL, NULL, NULL},     
100                 {0x1C9E, 0x9918, NULL, NULL, NULL},     
101             {0x2001, 0xA80B, NULL, NULL, NULL},      
102             {0x2001, 0x7D00, NULL, NULL, NULL},   
103                 {0x0421, 0x0610, NULL, NULL, NULL},    
104         {0x0af0, 0xd157, NULL, NULL, NULL},      
105             {0x19d2, 0x1216, NULL, NULL, NULL},         
106                 {0x19d2, 0x1218, NULL, NULL, NULL},
107                 {0x05c6, 0x9000, NULL, NULL, NULL},
108                 {0x19d2, 0x0016, NULL, NULL, NULL},//MF110
109                 {0x1C9E, 0x9914, NULL, NULL, NULL},//SMART BRO WM66E
110                 {0x2077, 0xF000, NULL, NULL, NULL},
111         {0x2077, 0xA000, NULL, NULL, NULL},//beyond
112             {0x12d1, 0x140b, NULL, NULL, NULL},//EC122 India
113             {0x19D2, 0x1266, NULL, NULL, NULL},//MF190U
114             {0x19D2, 0x1514, NULL, NULL, NULL},
115         {0x19D2, 0x1515, NULL, NULL, NULL},//MF195
116                 {0x1bbb, 0xf017, NULL, NULL, NULL},
117                 {0x19d2, 0x0117, NULL, NULL, NULL},
118                 {0x1C9E, 0xF001, NULL, NULL, NULL},
119                 {0x1C9E, 0x9801, NULL, NULL, NULL},
120                 //end xxh
121 };
122
123 /* 1 - match
124   * 0 - no match
125   */
126 static int __must_check inline match_for_each_entry(usb_parameter* pusbp1, usb_parameter* pusbp2)
127 {
128         if( pusbp1->vid>=0 && pusbp1->vid!=pusbp2->vid)
129             return 0;
130
131         if( pusbp1->pid>=0 && pusbp1->pid!=pusbp2->pid)
132             return 0;
133
134     if( pusbp1->manufacturer )
135     {
136         if( pusbp2->manufacturer==NULL )
137             return 0;
138         else if( strcmp(pusbp1->manufacturer, pusbp2->manufacturer) )
139             return 0;
140     }
141
142     if( pusbp1->product )
143     {
144         if( pusbp2->product==NULL )
145             return 0;
146         else if( strcmp(pusbp1->product, pusbp2->product) )
147             return 0;
148     }
149
150     return 1;
151 }
152
153 /*
154     0 - don't skip
155     1 - skip the device
156  */
157 static int is_skip_device(usb_parameter *pusbp)
158 {
159         int i = 0;
160 /*
161     在 not_skip_device_list 中寻找匹配,找到则该 device 正常流程
162     在 skip_device_list 中寻找匹配,找到则该 device 跳过attach
163     对于不在 skip_device_list,not_skip_device_list,则正常流程
164  */
165         for(i = 0; i < USB_ARRAY_SIZE(not_skip_device_list); i++)
166         {
167                 if(match_for_each_entry(not_skip_device_list+i, pusbp)){
168                     return 0;
169                 }
170         }
171         
172         for(i = 0; i < USB_ARRAY_SIZE(skip_device_list); i++)
173         {
174                 if(match_for_each_entry(skip_device_list+i, pusbp)){
175                     return 1;
176                 }
177         }
178
179         return 0;
180 }
181
182 #endif //__DEVICES_FILTER_H