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