2 * linux/arch/arm/mach-integrator/lm.c
4 * Copyright (C) 2003 Deep Blue Solutions Ltd, All Rights Reserved.
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.
10 #include <linux/module.h>
11 #include <linux/init.h>
12 #include <linux/device.h>
14 #include <asm/arch/lm.h>
16 #define to_lm_device(d) container_of(d, struct lm_device, dev)
17 #define to_lm_driver(d) container_of(d, struct lm_driver, drv)
19 static int lm_match(struct device
*dev
, struct device_driver
*drv
)
24 static struct bus_type lm_bustype
= {
25 .name
= "logicmodule",
27 // .suspend = lm_suspend,
28 // .resume = lm_resume,
31 static int __init
lm_init(void)
33 return bus_register(&lm_bustype
);
36 postcore_initcall(lm_init
);
38 static int lm_bus_probe(struct device
*dev
)
40 struct lm_device
*lmdev
= to_lm_device(dev
);
41 struct lm_driver
*lmdrv
= to_lm_driver(dev
->driver
);
43 return lmdrv
->probe(lmdev
);
46 static int lm_bus_remove(struct device
*dev
)
48 struct lm_device
*lmdev
= to_lm_device(dev
);
49 struct lm_driver
*lmdrv
= to_lm_driver(dev
->driver
);
55 int lm_driver_register(struct lm_driver
*drv
)
57 drv
->drv
.bus
= &lm_bustype
;
58 drv
->drv
.probe
= lm_bus_probe
;
59 drv
->drv
.remove
= lm_bus_remove
;
61 return driver_register(&drv
->drv
);
64 void lm_driver_unregister(struct lm_driver
*drv
)
66 driver_unregister(&drv
->drv
);
69 static void lm_device_release(struct device
*dev
)
71 struct lm_device
*d
= to_lm_device(dev
);
76 int lm_device_register(struct lm_device
*dev
)
80 dev
->dev
.release
= lm_device_release
;
81 dev
->dev
.bus
= &lm_bustype
;
83 snprintf(dev
->dev
.bus_id
, sizeof(dev
->dev
.bus_id
), "lm%d", dev
->id
);
84 dev
->resource
.name
= dev
->dev
.bus_id
;
86 ret
= request_resource(&iomem_resource
, &dev
->resource
);
88 ret
= device_register(&dev
->dev
);
90 release_resource(&dev
->resource
);
95 EXPORT_SYMBOL(lm_driver_register
);
96 EXPORT_SYMBOL(lm_driver_unregister
);