diff options
Diffstat (limited to 'lib/devres.c')
| -rw-r--r-- | lib/devres.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/devres.c b/lib/devres.c index 0f1dd2e9d2c1..fbe2aac522e6 100644 --- a/lib/devres.c +++ b/lib/devres.c | |||
| @@ -72,6 +72,34 @@ void __iomem *devm_ioremap_nocache(struct device *dev, resource_size_t offset, | |||
| 72 | EXPORT_SYMBOL(devm_ioremap_nocache); | 72 | EXPORT_SYMBOL(devm_ioremap_nocache); |
| 73 | 73 | ||
| 74 | /** | 74 | /** |
| 75 | * devm_ioremap_wc - Managed ioremap_wc() | ||
| 76 | * @dev: Generic device to remap IO address for | ||
| 77 | * @offset: BUS offset to map | ||
| 78 | * @size: Size of map | ||
| 79 | * | ||
| 80 | * Managed ioremap_wc(). Map is automatically unmapped on driver detach. | ||
| 81 | */ | ||
| 82 | void __iomem *devm_ioremap_wc(struct device *dev, resource_size_t offset, | ||
| 83 | resource_size_t size) | ||
| 84 | { | ||
| 85 | void __iomem **ptr, *addr; | ||
| 86 | |||
| 87 | ptr = devres_alloc(devm_ioremap_release, sizeof(*ptr), GFP_KERNEL); | ||
| 88 | if (!ptr) | ||
| 89 | return NULL; | ||
| 90 | |||
| 91 | addr = ioremap_wc(offset, size); | ||
| 92 | if (addr) { | ||
| 93 | *ptr = addr; | ||
| 94 | devres_add(dev, ptr); | ||
| 95 | } else | ||
| 96 | devres_free(ptr); | ||
| 97 | |||
| 98 | return addr; | ||
| 99 | } | ||
| 100 | EXPORT_SYMBOL(devm_ioremap_wc); | ||
| 101 | |||
| 102 | /** | ||
| 75 | * devm_iounmap - Managed iounmap() | 103 | * devm_iounmap - Managed iounmap() |
| 76 | * @dev: Generic device to unmap for | 104 | * @dev: Generic device to unmap for |
| 77 | * @addr: Address to unmap | 105 | * @addr: Address to unmap |
