2005-04-17 02:20:36 +04:00
/*
* linux / arch / arm / mach - integrator / lm . c
*
* Copyright ( C ) 2003 Deep Blue Solutions Ltd , All Rights Reserved .
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# include <linux/module.h>
# include <linux/init.h>
# include <linux/device.h>
2005-10-31 02:03:48 +03:00
# include <linux/slab.h>
2005-04-17 02:20:36 +04:00
2014-02-13 23:01:41 +04:00
# include "lm.h"
2005-04-17 02:20:36 +04:00
# define to_lm_device(d) container_of(d, struct lm_device, dev)
# define to_lm_driver(d) container_of(d, struct lm_driver, drv)
static int lm_match ( struct device * dev , struct device_driver * drv )
{
return 1 ;
}
static int lm_bus_probe ( struct device * dev )
{
struct lm_device * lmdev = to_lm_device ( dev ) ;
struct lm_driver * lmdrv = to_lm_driver ( dev - > driver ) ;
return lmdrv - > probe ( lmdev ) ;
}
static int lm_bus_remove ( struct device * dev )
{
struct lm_device * lmdev = to_lm_device ( dev ) ;
struct lm_driver * lmdrv = to_lm_driver ( dev - > driver ) ;
2006-01-05 17:33:35 +03:00
if ( lmdrv - > remove )
lmdrv - > remove ( lmdev ) ;
2005-04-17 02:20:36 +04:00
return 0 ;
}
2006-01-05 17:33:35 +03:00
static struct bus_type lm_bustype = {
. name = " logicmodule " ,
. match = lm_match ,
. probe = lm_bus_probe ,
. remove = lm_bus_remove ,
// .suspend = lm_bus_suspend,
// .resume = lm_bus_resume,
} ;
static int __init lm_init ( void )
{
return bus_register ( & lm_bustype ) ;
}
postcore_initcall ( lm_init ) ;
2005-04-17 02:20:36 +04:00
int lm_driver_register ( struct lm_driver * drv )
{
drv - > drv . bus = & lm_bustype ;
return driver_register ( & drv - > drv ) ;
}
void lm_driver_unregister ( struct lm_driver * drv )
{
driver_unregister ( & drv - > drv ) ;
}
static void lm_device_release ( struct device * dev )
{
struct lm_device * d = to_lm_device ( dev ) ;
kfree ( d ) ;
}
int lm_device_register ( struct lm_device * dev )
{
int ret ;
dev - > dev . release = lm_device_release ;
dev - > dev . bus = & lm_bustype ;
2008-05-30 19:42:11 +04:00
ret = dev_set_name ( & dev - > dev , " lm%d " , dev - > id ) ;
if ( ret )
return ret ;
dev - > resource . name = dev_name ( & dev - > dev ) ;
2005-04-17 02:20:36 +04:00
ret = request_resource ( & iomem_resource , & dev - > resource ) ;
if ( ret = = 0 ) {
ret = device_register ( & dev - > dev ) ;
if ( ret )
release_resource ( & dev - > resource ) ;
}
return ret ;
}
EXPORT_SYMBOL ( lm_driver_register ) ;
EXPORT_SYMBOL ( lm_driver_unregister ) ;