| // SPDX-License-Identifier: GPL-2.0 |
| /// Use devm_platform_ioremap_resource helper which wraps |
| /// platform_get_resource() and devm_ioremap_resource() together. |
| /// |
| // Confidence: High |
| // Copyright: (C) 2019 Himanshu Jha GPLv2. |
| // Copyright: (C) 2019 Julia Lawall, Inria/LIP6. GPLv2. |
| // Keywords: platform_get_resource, devm_ioremap_resource, |
| // Keywords: devm_platform_ioremap_resource |
| |
| virtual patch |
| virtual report |
| |
| @r depends on patch && !report@ |
| expression e1, e2, arg1, arg2, arg3; |
| identifier id; |
| @@ |
| |
| ( |
| - id = platform_get_resource(arg1, IORESOURCE_MEM, arg2); |
| | |
| - struct resource *id = platform_get_resource(arg1, IORESOURCE_MEM, arg2); |
| ) |
| ... when != id |
| - e1 = devm_ioremap_resource(arg3, id); |
| + e1 = devm_platform_ioremap_resource(arg1, arg2); |
| ... when != id |
| ? id = e2 |
| |
| @r1 depends on patch && !report@ |
| identifier r.id; |
| type T; |
| @@ |
| |
| - T *id; |
| ...when != id |
| |
| @r2 depends on report && !patch@ |
| identifier id; |
| expression e1, e2, arg1, arg2, arg3; |
| position j0; |
| @@ |
| |
| ( |
| id = platform_get_resource(arg1, IORESOURCE_MEM, arg2); |
| | |
| struct resource *id = platform_get_resource(arg1, IORESOURCE_MEM, arg2); |
| ) |
| ... when != id |
| e1@j0 = devm_ioremap_resource(arg3, id); |
| ... when != id |
| ? id = e2 |
| |
| @script:python depends on report && !patch@ |
| e1 << r2.e1; |
| j0 << r2.j0; |
| @@ |
| |
| msg = "WARNING: Use devm_platform_ioremap_resource for %s" % (e1) |
| coccilib.report.print_report(j0[0], msg) |