linux/arch/arm/mach-integrator/lm.c
<<
>>
Prefs
   1/*
   2 *  linux/arch/arm/mach-integrator/lm.c
   3 *
   4 *  Copyright (C) 2003 Deep Blue Solutions Ltd, All Rights Reserved.
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10#include <linux/module.h>
  11#include <linux/init.h>
  12#include <linux/device.h>
  13#include <linux/slab.h>
  14
  15#include <mach/lm.h>
  16
  17#define to_lm_device(d) container_of(d, struct lm_device, dev)
  18#define to_lm_driver(d) container_of(d, struct lm_driver, drv)
  19
  20static int lm_match(struct device *dev, struct device_driver *drv)
  21{
  22        return 1;
  23}
  24
  25static int lm_bus_probe(struct device *dev)
  26{
  27        struct lm_device *lmdev = to_lm_device(dev);
  28        struct lm_driver *lmdrv = to_lm_driver(dev->driver);
  29
  30        return lmdrv->probe(lmdev);
  31}
  32
  33static int lm_bus_remove(struct device *dev)
  34{
  35        struct lm_device *lmdev = to_lm_device(dev);
  36        struct lm_driver *lmdrv = to_lm_driver(dev->driver);
  37
  38        if (lmdrv->remove)
  39                lmdrv->remove(lmdev);
  40        return 0;
  41}
  42
  43static struct bus_type lm_bustype = {
  44        .name           = "logicmodule",
  45        .match          = lm_match,
  46        .probe          = lm_bus_probe,
  47        .remove         = lm_bus_remove,
  48//      .suspend        = lm_bus_suspend,
  49//      .resume         = lm_bus_resume,
  50};
  51
  52static int __init lm_init(void)
  53{
  54        return bus_register(&lm_bustype);
  55}
  56
  57postcore_initcall(lm_init);
  58
  59int lm_driver_register(struct lm_driver *drv)
  60{
  61        drv->drv.bus = &lm_bustype;
  62        return driver_register(&drv->drv);
  63}
  64
  65void lm_driver_unregister(struct lm_driver *drv)
  66{
  67        driver_unregister(&drv->drv);
  68}
  69
  70static void lm_device_release(struct device *dev)
  71{
  72        struct lm_device *d = to_lm_device(dev);
  73
  74        kfree(d);
  75}
  76
  77int lm_device_register(struct lm_device *dev)
  78{
  79        int ret;
  80
  81        dev->dev.release = lm_device_release;
  82        dev->dev.bus = &lm_bustype;
  83
  84        ret = dev_set_name(&dev->dev, "lm%d", dev->id);
  85        if (ret)
  86                return ret;
  87        dev->resource.name = dev_name(&dev->dev);
  88
  89        ret = request_resource(&iomem_resource, &dev->resource);
  90        if (ret == 0) {
  91                ret = device_register(&dev->dev);
  92                if (ret)
  93                        release_resource(&dev->resource);
  94        }
  95        return ret;
  96}
  97
  98EXPORT_SYMBOL(lm_driver_register);
  99EXPORT_SYMBOL(lm_driver_unregister);
 100