linux/arch/powerpc/lib/devres.c
<<
>>
Prefs
   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