mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-05-24 10:39:52 +00:00
V4L/DVB (8268): sms1xxx: usb cleanup
Signed-off-by: Steven Toth <stoth@hauppauge.com> Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
159ed4bbc3
commit
eae55660fc
4 changed files with 48 additions and 30 deletions
|
@ -1104,6 +1104,12 @@ int smscore_module_init(void)
|
||||||
INIT_LIST_HEAD(&g_smscore_registry);
|
INIT_LIST_HEAD(&g_smscore_registry);
|
||||||
kmutex_init(&g_smscore_registrylock);
|
kmutex_init(&g_smscore_registrylock);
|
||||||
|
|
||||||
|
/* USB Register */
|
||||||
|
rc = smsusb_register();
|
||||||
|
|
||||||
|
/* DVB Register */
|
||||||
|
rc = smsdvb_register();
|
||||||
|
|
||||||
printk(KERN_INFO "%s, rc %d\n", __FUNCTION__, rc);
|
printk(KERN_INFO "%s, rc %d\n", __FUNCTION__, rc);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -1111,6 +1117,7 @@ int smscore_module_init(void)
|
||||||
|
|
||||||
void smscore_module_exit(void)
|
void smscore_module_exit(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
kmutex_lock(&g_smscore_deviceslock);
|
kmutex_lock(&g_smscore_deviceslock);
|
||||||
while (!list_empty(&g_smscore_notifyees))
|
while (!list_empty(&g_smscore_notifyees))
|
||||||
{
|
{
|
||||||
|
@ -1131,6 +1138,12 @@ void smscore_module_exit(void)
|
||||||
}
|
}
|
||||||
kmutex_unlock(&g_smscore_registrylock);
|
kmutex_unlock(&g_smscore_registrylock);
|
||||||
|
|
||||||
|
/* DVB UnRegister */
|
||||||
|
smsdvb_unregister();
|
||||||
|
|
||||||
|
/* Unregister USB */
|
||||||
|
smsusb_unregister();
|
||||||
|
|
||||||
printk(KERN_INFO "%s\n", __FUNCTION__);
|
printk(KERN_INFO "%s\n", __FUNCTION__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
extern void smscore_putbuffer(smscore_device_t *coredev, smscore_buffer_t *cb);
|
||||||
|
|
||||||
/* smsdvb.c */
|
/* smsdvb.c */
|
||||||
int smsdvb_hotplug(smscore_device_t *coredev, struct device* device, int arrival);
|
int smsdvb_register(void);
|
||||||
void smsdvb_unregister_client(smsdvb_client_t* client);
|
void smsdvb_unregister(void);
|
||||||
|
|
||||||
|
/* smsusb.c */
|
||||||
|
int smsusb_register(void);
|
||||||
|
void smsusb_unregister(void);
|
||||||
|
|
||||||
#endif // __smscoreapi_h__
|
#endif // __smscoreapi_h__
|
||||||
|
|
|
@ -375,3 +375,30 @@ adapter_error:
|
||||||
return rc;
|
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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/usb.h>
|
#include <linux/usb.h>
|
||||||
#include <linux/firmware.h>
|
#include <linux/firmware.h>
|
||||||
|
|
||||||
|
@ -401,46 +400,21 @@ static struct usb_driver smsusb_driver = {
|
||||||
.id_table = smsusb_id_table,
|
.id_table = smsusb_id_table,
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct list_head g_smsdvb_clients;
|
int smsusb_register(void)
|
||||||
kmutex_t g_smsdvb_clientslock;
|
|
||||||
|
|
||||||
int smsusb_module_init(void)
|
|
||||||
{
|
{
|
||||||
int rc = usb_register(&smsusb_driver);
|
int rc = usb_register(&smsusb_driver);
|
||||||
if (rc)
|
if (rc)
|
||||||
printk(KERN_INFO "usb_register failed. Error number %d\n", 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__);
|
printk(KERN_INFO "%s\n", __FUNCTION__);
|
||||||
|
|
||||||
return rc;
|
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 */
|
/* Regular USB Cleanup */
|
||||||
usb_deregister(&smsusb_driver);
|
usb_deregister(&smsusb_driver);
|
||||||
printk(KERN_INFO "%s\n", __FUNCTION__);
|
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");
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue