Version:  2.0.40 2.2.26 2.4.37 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2

Linux/drivers/staging/android/ion/tegra/tegra_ion.c

  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/module.h>
 19 #include <linux/platform_device.h>
 20 #include <linux/slab.h>
 21 #include "../ion.h"
 22 #include "../ion_priv.h"
 23 
 24 static struct ion_device *idev;
 25 static int num_heaps;
 26 static struct ion_heap **heaps;
 27 
 28 static int tegra_ion_probe(struct platform_device *pdev)
 29 {
 30         struct ion_platform_data *pdata = pdev->dev.platform_data;
 31         int err;
 32         int i;
 33 
 34         num_heaps = pdata->nr;
 35 
 36         heaps = devm_kzalloc(&pdev->dev,
 37                              sizeof(struct ion_heap *) * pdata->nr,
 38                              GFP_KERNEL);
 39 
 40         idev = ion_device_create(NULL);
 41         if (IS_ERR_OR_NULL(idev))
 42                 return PTR_ERR(idev);
 43 
 44         /* create the heaps as specified in the board file */
 45         for (i = 0; i < num_heaps; i++) {
 46                 struct ion_platform_heap *heap_data = &pdata->heaps[i];
 47 
 48                 heaps[i] = ion_heap_create(heap_data);
 49                 if (IS_ERR_OR_NULL(heaps[i])) {
 50                         err = PTR_ERR(heaps[i]);
 51                         goto err;
 52                 }
 53                 ion_device_add_heap(idev, heaps[i]);
 54         }
 55         platform_set_drvdata(pdev, idev);
 56         return 0;
 57 err:
 58         for (i = 0; i < num_heaps; ++i)
 59                 ion_heap_destroy(heaps[i]);
 60         return err;
 61 }
 62 
 63 static int tegra_ion_remove(struct platform_device *pdev)
 64 {
 65         struct ion_device *idev = platform_get_drvdata(pdev);
 66         int i;
 67 
 68         ion_device_destroy(idev);
 69         for (i = 0; i < num_heaps; i++)
 70                 ion_heap_destroy(heaps[i]);
 71         return 0;
 72 }
 73 
 74 static struct platform_driver ion_driver = {
 75         .probe = tegra_ion_probe,
 76         .remove = tegra_ion_remove,
 77         .driver = { .name = "ion-tegra" }
 78 };
 79 
 80 module_platform_driver(ion_driver);
 81 
 82 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us