linux/drivers/staging/android/ion/tegra/tegra_ion.c
<<
>>
Prefs
   1/*
   2 * drivers/gpu/tegra/tegra_ion.c
   3 *
   4 * Copyright (C) 2011 Google, Inc.
   5 *
   6 * This software is licensed under the terms of the GNU General Public
   7 * License version 2, as published by the Free Software Foundation, and
   8 * may be copied, distributed, and modified under those terms.
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 *
  15 */
  16
  17#include <linux/err.h>
  18#include <linux/platform_device.h>
  19#include <linux/slab.h>
  20#include "../ion.h"
  21#include "../ion_priv.h"
  22
  23static struct ion_device *idev;
  24static int num_heaps;
  25static struct ion_heap **heaps;
  26
  27static int tegra_ion_probe(struct platform_device *pdev)
  28{
  29        struct ion_platform_data *pdata = pdev->dev.platform_data;
  30        int err;
  31        int i;
  32
  33        num_heaps = pdata->nr;
  34
  35        heaps = devm_kzalloc(&pdev->dev,
  36                             sizeof(struct ion_heap *) * pdata->nr,
  37                             GFP_KERNEL);
  38
  39        idev = ion_device_create(NULL);
  40        if (IS_ERR_OR_NULL(idev))
  41                return PTR_ERR(idev);
  42
  43        /* create the heaps as specified in the board file */
  44        for (i = 0; i < num_heaps; i++) {
  45                struct ion_platform_heap *heap_data = &pdata->heaps[i];
  46
  47                heaps[i] = ion_heap_create(heap_data);
  48                if (IS_ERR_OR_NULL(heaps[i])) {
  49                        err = PTR_ERR(heaps[i]);
  50                        goto err;
  51                }
  52                ion_device_add_heap(idev, heaps[i]);
  53        }
  54        platform_set_drvdata(pdev, idev);
  55        return 0;
  56err:
  57        for (i = 0; i < num_heaps; ++i)
  58                ion_heap_destroy(heaps[i]);
  59        return err;
  60}
  61
  62static int tegra_ion_remove(struct platform_device *pdev)
  63{
  64        struct ion_device *idev = platform_get_drvdata(pdev);
  65        int i;
  66
  67        ion_device_destroy(idev);
  68        for (i = 0; i < num_heaps; i++)
  69                ion_heap_destroy(heaps[i]);
  70        return 0;
  71}
  72
  73static struct platform_driver ion_driver = {
  74        .probe = tegra_ion_probe,
  75        .remove = tegra_ion_remove,
  76        .driver = { .name = "ion-tegra" }
  77};
  78
  79module_platform_driver(ion_driver);
  80
  81
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.