beceem: create class on module installation
First step to supporting multiple devices, create device class when module is initialized. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
This commit is contained in:
parent
46c3790eb5
commit
9e0a3169a3
|
@ -12,7 +12,7 @@
|
||||||
*
|
*
|
||||||
* Returns - Zero(Success)
|
* Returns - Zero(Success)
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
static struct class *bcm_class = NULL;
|
|
||||||
static int bcm_char_open(struct inode *inode, struct file * filp)
|
static int bcm_char_open(struct inode *inode, struct file * filp)
|
||||||
{
|
{
|
||||||
PMINI_ADAPTER Adapter = NULL;
|
PMINI_ADAPTER Adapter = NULL;
|
||||||
|
@ -2093,59 +2093,37 @@ static struct file_operations bcm_fops = {
|
||||||
.llseek = no_llseek,
|
.llseek = no_llseek,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern struct class *bcm_class;
|
||||||
|
|
||||||
int register_control_device_interface(PMINI_ADAPTER Adapter)
|
int register_control_device_interface(PMINI_ADAPTER Adapter)
|
||||||
{
|
{
|
||||||
|
|
||||||
if(Adapter->major>0)
|
if(Adapter->major>0)
|
||||||
return Adapter->major;
|
return Adapter->major;
|
||||||
Adapter->major = register_chrdev(0, "tarang", &bcm_fops);
|
|
||||||
if(Adapter->major < 0)
|
Adapter->major = register_chrdev(0, DEV_NAME, &bcm_fops);
|
||||||
{
|
if(Adapter->major < 0) {
|
||||||
BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "register_chrdev:Failed to registering WiMax control char device!");
|
pr_err(DRV_NAME ": could not created character device\n");
|
||||||
return Adapter->major;
|
return Adapter->major;
|
||||||
}
|
}
|
||||||
|
|
||||||
bcm_class = NULL;
|
|
||||||
bcm_class = class_create (THIS_MODULE, "tarang");
|
|
||||||
if(IS_ERR (bcm_class))
|
|
||||||
{
|
|
||||||
BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Unable to create class\n");
|
|
||||||
unregister_chrdev(Adapter->major, "tarang");
|
|
||||||
Adapter->major = 0;
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
Adapter->pstCreatedClassDevice = device_create (bcm_class, NULL,
|
Adapter->pstCreatedClassDevice = device_create (bcm_class, NULL,
|
||||||
MKDEV(Adapter->major, 0),
|
MKDEV(Adapter->major, 0), Adapter,
|
||||||
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,26)
|
DEV_NAME);
|
||||||
NULL ,
|
|
||||||
#endif
|
|
||||||
"tarang");
|
|
||||||
|
|
||||||
if(IS_ERR(Adapter->pstCreatedClassDevice))
|
if(IS_ERR(Adapter->pstCreatedClassDevice)) {
|
||||||
{
|
pr_err(DRV_NAME ": class device create failed\n");
|
||||||
BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "class device did not get created : %ld", PTR_ERR(Adapter->pstCreatedClassDevice) );
|
unregister_chrdev(Adapter->major, DEV_NAME);
|
||||||
|
return PTR_ERR(Adapter->pstCreatedClassDevice);
|
||||||
}
|
}
|
||||||
BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Got Major No: %d", Adapter->major);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void unregister_control_device_interface(PMINI_ADAPTER Adapter)
|
void unregister_control_device_interface(PMINI_ADAPTER Adapter)
|
||||||
{
|
{
|
||||||
if(Adapter->major > 0)
|
if(Adapter->major > 0) {
|
||||||
{
|
|
||||||
BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "destroying class device");
|
|
||||||
device_destroy (bcm_class, MKDEV(Adapter->major, 0));
|
device_destroy (bcm_class, MKDEV(Adapter->major, 0));
|
||||||
|
unregister_chrdev(Adapter->major, DEV_NAME);
|
||||||
}
|
}
|
||||||
if(!IS_ERR(bcm_class))
|
|
||||||
{
|
|
||||||
BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "destroying created class ");
|
|
||||||
class_destroy (bcm_class);
|
|
||||||
bcm_class = NULL;
|
|
||||||
}
|
|
||||||
if(Adapter->major > 0)
|
|
||||||
{
|
|
||||||
BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL,"unregistering character interface");
|
|
||||||
unregister_chrdev(Adapter->major, "tarang");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -738,6 +738,7 @@ static struct usb_driver usbbcm_driver = {
|
||||||
.supports_autosuspend = 1,
|
.supports_autosuspend = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct class *bcm_class;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Function: InterfaceInitialize
|
Function: InterfaceInitialize
|
||||||
|
@ -755,16 +756,17 @@ Return: BCM_STATUS_SUCCESS - If Initialization of the
|
||||||
*/
|
*/
|
||||||
INT InterfaceInitialize(void)
|
INT InterfaceInitialize(void)
|
||||||
{
|
{
|
||||||
// BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Registering Usb driver!!");
|
bcm_class = class_create(THIS_MODULE, DRV_NAME);
|
||||||
|
if (IS_ERR(bcm_class)) {
|
||||||
|
printk(KERN_ERR DRV_NAME ": could not create class\n");
|
||||||
|
return PTR_ERR(bcm_class);
|
||||||
|
}
|
||||||
return usb_register(&usbbcm_driver);
|
return usb_register(&usbbcm_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
INT InterfaceExit(void)
|
INT InterfaceExit(void)
|
||||||
{
|
{
|
||||||
//PMINI_ADAPTER psAdapter = NULL;
|
class_destroy (bcm_class);
|
||||||
int status = 0;
|
|
||||||
|
|
||||||
//BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Deregistering Usb driver!!");
|
|
||||||
usb_deregister(&usbbcm_driver);
|
usb_deregister(&usbbcm_driver);
|
||||||
return status;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue