/*1* Copyright (C) 2008 Freescale Semiconductor, Inc.2*3* This program is free software; you can redistribute it and/or4* modify it under the terms of the GNU General Public License5* as published by the Free Software Foundation; either version6* 2 of the License, or (at your option) any later version.7*/89#include <linux/device.h> /* devres_*(), devm_ioremap_release() */10#include <linux/gfp.h>11#include <linux/io.h> /* ioremap_prot() */12#include <linux/module.h> /* EXPORT_SYMBOL() */1314/**15* devm_ioremap_prot - Managed ioremap_prot()16* @dev: Generic device to remap IO address for17* @offset: BUS offset to map18* @size: Size of map19* @flags: Page flags20*21* Managed ioremap_prot(). Map is automatically unmapped on driver22* detach.23*/24void __iomem *devm_ioremap_prot(struct device *dev, resource_size_t offset,25size_t size, unsigned long flags)26{27void __iomem **ptr, *addr;2829ptr = devres_alloc(devm_ioremap_release, sizeof(*ptr), GFP_KERNEL);30if (!ptr)31return NULL;3233addr = ioremap_prot(offset, size, flags);34if (addr) {35*ptr = addr;36devres_add(dev, ptr);37} else38devres_free(ptr);3940return addr;41}42EXPORT_SYMBOL(devm_ioremap_prot);434445