From: Steven Toth Date: Thu, 22 May 2008 21:04:36 +0000 (-0300) Subject: V4L/DVB (8268): sms1xxx: usb cleanup X-Git-Tag: v2.6.27-rc1~966^2~105 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eae55660fc4a7f17f0f87458d8ada2b51b1833c1;p=linux-2.6 V4L/DVB (8268): sms1xxx: usb cleanup Signed-off-by: Steven Toth Signed-off-by: Michael Krufky Signed-off-by: Mauro Carvalho Chehab --- diff --git a/drivers/media/mdtv/smscoreapi.c b/drivers/media/mdtv/smscoreapi.c index 715dde034e..6d21ff3912 100644 --- a/drivers/media/mdtv/smscoreapi.c +++ b/drivers/media/mdtv/smscoreapi.c @@ -1104,6 +1104,12 @@ int smscore_module_init(void) INIT_LIST_HEAD(&g_smscore_registry); kmutex_init(&g_smscore_registrylock); + /* USB Register */ + rc = smsusb_register(); + + /* DVB Register */ + rc = smsdvb_register(); + printk(KERN_INFO "%s, rc %d\n", __FUNCTION__, rc); return rc; @@ -1111,6 +1117,7 @@ int smscore_module_init(void) void smscore_module_exit(void) { + kmutex_lock(&g_smscore_deviceslock); while (!list_empty(&g_smscore_notifyees)) { @@ -1131,6 +1138,12 @@ void smscore_module_exit(void) } kmutex_unlock(&g_smscore_registrylock); + /* DVB UnRegister */ + smsdvb_unregister(); + + /* Unregister USB */ + smsusb_unregister(); + printk(KERN_INFO "%s\n", __FUNCTION__); } diff --git a/drivers/media/mdtv/smscoreapi.h b/drivers/media/mdtv/smscoreapi.h index 5c1369365c..9f367f2cdf 100644 --- a/drivers/media/mdtv/smscoreapi.h +++ b/drivers/media/mdtv/smscoreapi.h @@ -508,7 +508,11 @@ extern smscore_buffer_t *smscore_getbuffer(smscore_device_t *coredev); extern void smscore_putbuffer(smscore_device_t *coredev, smscore_buffer_t *cb); /* smsdvb.c */ -int smsdvb_hotplug(smscore_device_t *coredev, struct device* device, int arrival); -void smsdvb_unregister_client(smsdvb_client_t* client); +int smsdvb_register(void); +void smsdvb_unregister(void); + +/* smsusb.c */ +int smsusb_register(void); +void smsusb_unregister(void); #endif // __smscoreapi_h__ diff --git a/drivers/media/mdtv/smsdvb.c b/drivers/media/mdtv/smsdvb.c index 166f218ca5..7a1e6c33b1 100644 --- a/drivers/media/mdtv/smsdvb.c +++ b/drivers/media/mdtv/smsdvb.c @@ -375,3 +375,30 @@ adapter_error: return rc; } +int smsdvb_register(void) +{ + int rc; + + INIT_LIST_HEAD(&g_smsdvb_clients); + kmutex_init(&g_smsdvb_clientslock); + + rc = smscore_register_hotplug(smsdvb_hotplug); + + printk(KERN_INFO "%s\n", __FUNCTION__); + + return rc; +} + +void smsdvb_unregister(void) +{ + smscore_unregister_hotplug(smsdvb_hotplug); + + kmutex_lock(&g_smsdvb_clientslock); + + while (!list_empty(&g_smsdvb_clients)) + smsdvb_unregister_client((smsdvb_client_t*) g_smsdvb_clients.next); + + kmutex_unlock(&g_smsdvb_clientslock); + +} + diff --git a/drivers/media/mdtv/smsusb.c b/drivers/media/mdtv/smsusb.c index 11c471ad63..277faf142a 100644 --- a/drivers/media/mdtv/smsusb.c +++ b/drivers/media/mdtv/smsusb.c @@ -1,6 +1,5 @@ #include #include -#include #include #include @@ -401,46 +400,21 @@ static struct usb_driver smsusb_driver = { .id_table = smsusb_id_table, }; -extern struct list_head g_smsdvb_clients; -kmutex_t g_smsdvb_clientslock; - -int smsusb_module_init(void) +int smsusb_register(void) { int rc = usb_register(&smsusb_driver); if (rc) printk(KERN_INFO "usb_register failed. Error number %d\n", rc); - /* Bring up the dvb componenets */ - INIT_LIST_HEAD(&g_smsdvb_clients); - kmutex_init(&g_smsdvb_clientslock); - - rc = smscore_register_hotplug(smsdvb_hotplug); - printk(KERN_INFO "%s\n", __FUNCTION__); return rc; } -void smsusb_module_exit(void) +void smsusb_unregister(void) { - /* Tear down the DVB components */ - smscore_unregister_hotplug(smsdvb_hotplug); - - kmutex_lock(&g_smsdvb_clientslock); - - while (!list_empty(&g_smsdvb_clients)) - smsdvb_unregister_client((smsdvb_client_t*) g_smsdvb_clients.next); - - kmutex_unlock(&g_smsdvb_clientslock); - /* Regular USB Cleanup */ usb_deregister(&smsusb_driver); printk(KERN_INFO "%s\n", __FUNCTION__); } -module_init(smsusb_module_init); -module_exit(smsusb_module_exit); - -MODULE_DESCRIPTION("smsusb"); -MODULE_AUTHOR("Anatoly Greenblatt,,, (anatolyg@siano-ms.com)"); -MODULE_LICENSE("GPL");