1/// Remove .owner field if calls are used which set it automatically
2///
3// Confidence: High
4// Copyright: (C) 2014 Wolfram Sang. GPL v2.
5
6virtual patch
7virtual context
8virtual org
9virtual report
10
11@match1@
12declarer name module_i2c_driver;
13declarer name module_platform_driver;
14declarer name module_platform_driver_probe;
15identifier __driver;
16@@
17(
18	module_i2c_driver(__driver);
19|
20	module_platform_driver(__driver);
21|
22	module_platform_driver_probe(__driver, ...);
23)
24
25@fix1 depends on match1 && patch && !context && !org && !report@
26identifier match1.__driver;
27@@
28	static struct platform_driver __driver = {
29		.driver = {
30-			.owner = THIS_MODULE,
31		}
32	};
33
34@fix1_i2c depends on match1 && patch && !context && !org && !report@
35identifier match1.__driver;
36@@
37	static struct i2c_driver __driver = {
38		.driver = {
39-			.owner = THIS_MODULE,
40		}
41	};
42
43@match2@
44identifier __driver;
45@@
46(
47	platform_driver_register(&__driver)
48|
49	platform_driver_probe(&__driver, ...)
50|
51	platform_create_bundle(&__driver, ...)
52|
53	i2c_add_driver(&__driver)
54)
55
56@fix2 depends on match2 && patch && !context && !org && !report@
57identifier match2.__driver;
58@@
59	static struct platform_driver __driver = {
60		.driver = {
61-			.owner = THIS_MODULE,
62		}
63	};
64
65@fix2_i2c depends on match2 && patch && !context && !org && !report@
66identifier match2.__driver;
67@@
68	static struct i2c_driver __driver = {
69		.driver = {
70-			.owner = THIS_MODULE,
71		}
72	};
73
74// ----------------------------------------------------------------------------
75
76@fix1_context depends on match1 && !patch && (context || org || report)@
77identifier match1.__driver;
78position j0;
79@@
80
81 	static struct platform_driver __driver = {
82		.driver = {
83*			.owner@j0 = THIS_MODULE,
84		}
85	};
86
87@fix1_i2c_context depends on match1 && !patch && (context || org || report)@
88identifier match1.__driver;
89position j0;
90@@
91
92	static struct i2c_driver __driver = {
93		.driver = {
94*			.owner@j0 = THIS_MODULE,
95		}
96	};
97
98@fix2_context depends on match2 && !patch && (context || org || report)@
99identifier match2.__driver;
100position j0;
101@@
102
103 	static struct platform_driver __driver = {
104		.driver = {
105*			.owner@j0 = THIS_MODULE,
106		}
107	};
108
109@fix2_i2c_context depends on match2 && !patch && (context || org || report)@
110identifier match2.__driver;
111position j0;
112@@
113
114	static struct i2c_driver __driver = {
115		.driver = {
116*			.owner@j0 = THIS_MODULE,
117		}
118	};
119
120// ----------------------------------------------------------------------------
121
122@script:python fix1_org depends on org@
123j0 << fix1_context.j0;
124@@
125
126msg = "No need to set .owner here. The core will do it."
127coccilib.org.print_todo(j0[0], msg)
128
129@script:python fix1_i2c_org depends on org@
130j0 << fix1_i2c_context.j0;
131@@
132
133msg = "No need to set .owner here. The core will do it."
134coccilib.org.print_todo(j0[0], msg)
135
136@script:python fix2_org depends on org@
137j0 << fix2_context.j0;
138@@
139
140msg = "No need to set .owner here. The core will do it."
141coccilib.org.print_todo(j0[0], msg)
142
143@script:python fix2_i2c_org depends on org@
144j0 << fix2_i2c_context.j0;
145@@
146
147msg = "No need to set .owner here. The core will do it."
148coccilib.org.print_todo(j0[0], msg)
149
150// ----------------------------------------------------------------------------
151
152@script:python fix1_report depends on report@
153j0 << fix1_context.j0;
154@@
155
156msg = "No need to set .owner here. The core will do it."
157coccilib.report.print_report(j0[0], msg)
158
159@script:python fix1_i2c_report depends on report@
160j0 << fix1_i2c_context.j0;
161@@
162
163msg = "No need to set .owner here. The core will do it."
164coccilib.report.print_report(j0[0], msg)
165
166@script:python fix2_report depends on report@
167j0 << fix2_context.j0;
168@@
169
170msg = "No need to set .owner here. The core will do it."
171coccilib.report.print_report(j0[0], msg)
172
173@script:python fix2_i2c_report depends on report@
174j0 << fix2_i2c_context.j0;
175@@
176
177msg = "No need to set .owner here. The core will do it."
178coccilib.report.print_report(j0[0], msg)
179
180