diff options
author | Michael Krufky <mkrufky@linuxtv.org> | 2008-05-22 14:04:36 -0400 |
---|---|---|
committer | Michael Krufky <mkrufky@linuxtv.org> | 2008-05-22 14:04:36 -0400 |
commit | 9ec225c1fc9e6dc062f30aceb9df8c6cee086bf2 (patch) | |
tree | da4a0231dd8b886594b566a245b3d624e8aabc8a /linux/drivers/media/mdtv | |
parent | 75598b2f3a5ddf1c210e0d332ffbdac2acb87354 (diff) | |
download | mediapointer-dvb-s2-9ec225c1fc9e6dc062f30aceb9df8c6cee086bf2.tar.gz mediapointer-dvb-s2-9ec225c1fc9e6dc062f30aceb9df8c6cee086bf2.tar.bz2 |
sms1xxx: usb cleanup
From: Steven Toth <stoth@hauppauge.com>
Signed-off-by: Steven Toth <stoth@hauppauge.com>
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Diffstat (limited to 'linux/drivers/media/mdtv')
-rw-r--r-- | linux/drivers/media/mdtv/smscoreapi.c | 13 | ||||
-rw-r--r-- | linux/drivers/media/mdtv/smscoreapi.h | 8 | ||||
-rw-r--r-- | linux/drivers/media/mdtv/smsdvb.c | 27 | ||||
-rw-r--r-- | linux/drivers/media/mdtv/smsusb.c | 30 |
4 files changed, 48 insertions, 30 deletions
diff --git a/linux/drivers/media/mdtv/smscoreapi.c b/linux/drivers/media/mdtv/smscoreapi.c index 1f4171b1e..3e00c8b5a 100644 --- a/linux/drivers/media/mdtv/smscoreapi.c +++ b/linux/drivers/media/mdtv/smscoreapi.c @@ -1159,6 +1159,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; @@ -1166,6 +1172,7 @@ int smscore_module_init(void) void smscore_module_exit(void) { + kmutex_lock(&g_smscore_deviceslock); while (!list_empty(&g_smscore_notifyees)) { @@ -1186,6 +1193,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/linux/drivers/media/mdtv/smscoreapi.h b/linux/drivers/media/mdtv/smscoreapi.h index 166379262..c6b5cad85 100644 --- a/linux/drivers/media/mdtv/smscoreapi.h +++ b/linux/drivers/media/mdtv/smscoreapi.h @@ -523,7 +523,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/linux/drivers/media/mdtv/smsdvb.c b/linux/drivers/media/mdtv/smsdvb.c index 166f218ca..7a1e6c33b 100644 --- a/linux/drivers/media/mdtv/smsdvb.c +++ b/linux/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/linux/drivers/media/mdtv/smsusb.c b/linux/drivers/media/mdtv/smsusb.c index df2b82801..0d94cc45f 100644 --- a/linux/drivers/media/mdtv/smsusb.c +++ b/linux/drivers/media/mdtv/smsusb.c @@ -1,6 +1,5 @@ #include <linux/kernel.h> #include <linux/init.h> -#include <linux/module.h> #include <linux/usb.h> #include <linux/firmware.h> @@ -405,46 +404,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"); |