at v2.6.26 42 lines 1.2 kB view raw
1/* 2 * Copyright (C) 2008 Freescale Semiconductor, Inc. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 7 * 2 of the License, or (at your option) any later version. 8 */ 9 10#include <linux/device.h> /* devres_*(), devm_ioremap_release() */ 11#include <linux/io.h> /* ioremap_flags() */ 12#include <linux/module.h> /* EXPORT_SYMBOL() */ 13 14/** 15 * devm_ioremap_prot - Managed ioremap_flags() 16 * @dev: Generic device to remap IO address for 17 * @offset: BUS offset to map 18 * @size: Size of map 19 * @flags: Page flags 20 * 21 * Managed ioremap_prot(). Map is automatically unmapped on driver 22 * detach. 23 */ 24void __iomem *devm_ioremap_prot(struct device *dev, resource_size_t offset, 25 size_t size, unsigned long flags) 26{ 27 void __iomem **ptr, *addr; 28 29 ptr = devres_alloc(devm_ioremap_release, sizeof(*ptr), GFP_KERNEL); 30 if (!ptr) 31 return NULL; 32 33 addr = ioremap_flags(offset, size, flags); 34 if (addr) { 35 *ptr = addr; 36 devres_add(dev, ptr); 37 } else 38 devres_free(ptr); 39 40 return addr; 41} 42EXPORT_SYMBOL(devm_ioremap_prot);