• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/arch/powerpc/lib/
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/gfp.h>
12#include <linux/io.h>		/* ioremap_flags() */
13#include <linux/module.h>	/* EXPORT_SYMBOL() */
14
15/**
16 * devm_ioremap_prot - Managed ioremap_flags()
17 * @dev: Generic device to remap IO address for
18 * @offset: BUS offset to map
19 * @size: Size of map
20 * @flags: Page flags
21 *
22 * Managed ioremap_prot().  Map is automatically unmapped on driver
23 * detach.
24 */
25void __iomem *devm_ioremap_prot(struct device *dev, resource_size_t offset,
26				 size_t size, unsigned long flags)
27{
28	void __iomem **ptr, *addr;
29
30	ptr = devres_alloc(devm_ioremap_release, sizeof(*ptr), GFP_KERNEL);
31	if (!ptr)
32		return NULL;
33
34	addr = ioremap_flags(offset, size, flags);
35	if (addr) {
36		*ptr = addr;
37		devres_add(dev, ptr);
38	} else
39		devres_free(ptr);
40
41	return addr;
42}
43EXPORT_SYMBOL(devm_ioremap_prot);
44