| // 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) |