diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/devres.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/devres.c b/lib/devres.c index 823533138fa0..48cb3c7bd7de 100644 --- a/lib/devres.c +++ b/lib/devres.c | |||
@@ -81,11 +81,13 @@ EXPORT_SYMBOL(devm_ioremap_nocache); | |||
81 | void devm_iounmap(struct device *dev, void __iomem *addr) | 81 | void devm_iounmap(struct device *dev, void __iomem *addr) |
82 | { | 82 | { |
83 | WARN_ON(devres_destroy(dev, devm_ioremap_release, devm_ioremap_match, | 83 | WARN_ON(devres_destroy(dev, devm_ioremap_release, devm_ioremap_match, |
84 | (void *)addr)); | 84 | (__force void *)addr)); |
85 | iounmap(addr); | 85 | iounmap(addr); |
86 | } | 86 | } |
87 | EXPORT_SYMBOL(devm_iounmap); | 87 | EXPORT_SYMBOL(devm_iounmap); |
88 | 88 | ||
89 | #define IOMEM_ERR_PTR(err) (__force void __iomem *)ERR_PTR(err) | ||
90 | |||
89 | /** | 91 | /** |
90 | * devm_ioremap_resource() - check, request region, and ioremap resource | 92 | * devm_ioremap_resource() - check, request region, and ioremap resource |
91 | * @dev: generic device to handle the resource for | 93 | * @dev: generic device to handle the resource for |
@@ -114,7 +116,7 @@ void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res) | |||
114 | 116 | ||
115 | if (!res || resource_type(res) != IORESOURCE_MEM) { | 117 | if (!res || resource_type(res) != IORESOURCE_MEM) { |
116 | dev_err(dev, "invalid resource\n"); | 118 | dev_err(dev, "invalid resource\n"); |
117 | return ERR_PTR(-EINVAL); | 119 | return IOMEM_ERR_PTR(-EINVAL); |
118 | } | 120 | } |
119 | 121 | ||
120 | size = resource_size(res); | 122 | size = resource_size(res); |
@@ -122,7 +124,7 @@ void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res) | |||
122 | 124 | ||
123 | if (!devm_request_mem_region(dev, res->start, size, name)) { | 125 | if (!devm_request_mem_region(dev, res->start, size, name)) { |
124 | dev_err(dev, "can't request region for resource %pR\n", res); | 126 | dev_err(dev, "can't request region for resource %pR\n", res); |
125 | return ERR_PTR(-EBUSY); | 127 | return IOMEM_ERR_PTR(-EBUSY); |
126 | } | 128 | } |
127 | 129 | ||
128 | if (res->flags & IORESOURCE_CACHEABLE) | 130 | if (res->flags & IORESOURCE_CACHEABLE) |
@@ -133,7 +135,7 @@ void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res) | |||
133 | if (!dest_ptr) { | 135 | if (!dest_ptr) { |
134 | dev_err(dev, "ioremap failed for resource %pR\n", res); | 136 | dev_err(dev, "ioremap failed for resource %pR\n", res); |
135 | devm_release_mem_region(dev, res->start, size); | 137 | devm_release_mem_region(dev, res->start, size); |
136 | dest_ptr = ERR_PTR(-ENOMEM); | 138 | dest_ptr = IOMEM_ERR_PTR(-ENOMEM); |
137 | } | 139 | } |
138 | 140 | ||
139 | return dest_ptr; | 141 | return dest_ptr; |
@@ -224,7 +226,7 @@ void devm_ioport_unmap(struct device *dev, void __iomem *addr) | |||
224 | { | 226 | { |
225 | ioport_unmap(addr); | 227 | ioport_unmap(addr); |
226 | WARN_ON(devres_destroy(dev, devm_ioport_map_release, | 228 | WARN_ON(devres_destroy(dev, devm_ioport_map_release, |
227 | devm_ioport_map_match, (void *)addr)); | 229 | devm_ioport_map_match, (__force void *)addr)); |
228 | } | 230 | } |
229 | EXPORT_SYMBOL(devm_ioport_unmap); | 231 | EXPORT_SYMBOL(devm_ioport_unmap); |
230 | #endif /* CONFIG_HAS_IOPORT */ | 232 | #endif /* CONFIG_HAS_IOPORT */ |