提交 3dd24378 编写于 作者: S Steven Toth 提交者: Mauro Carvalho Chehab

V4L/DVB (8266): sms1xxx: merge modules

Signed-off-by: NSteven Toth <stoth@hauppauge.com>
Signed-off-by: NMichael Krufky <mkrufky@linuxtv.org>
Signed-off-by: NMauro Carvalho Chehab <mchehab@infradead.org>
上级 7a19598c
#ifndef __smscoreapi_h__
#define __smscoreapi_h__
#include "dmxdev.h"
#include "dvbdev.h"
#include "dvb_demux.h"
#include "dvb_frontend.h"
/* From sysksyms.h */
#include <linux/version.h>
......@@ -453,6 +458,28 @@ typedef struct SMSHOSTLIB_I2C_RES_S
/* End types.h */
typedef struct _smsdvb_client
{
struct list_head entry;
smscore_device_t *coredev;
smscore_client_t *smsclient;
struct dvb_adapter adapter;
struct dvb_demux demux;
struct dmxdev dmxdev;
struct dvb_frontend frontend;
fe_status_t fe_status;
int fe_ber, fe_snr, fe_signal_strength;
struct completion tune_done, stat_done;
// todo: save freq/band instead whole struct
struct dvb_frontend_parameters fe_params;
} smsdvb_client_t;
extern void smscore_registry_setmode(char *devpath, int mode);
extern int smscore_registry_getmode(char *devpath);
......@@ -480,4 +507,8 @@ extern int smscore_map_common_buffer(smscore_device_t *coredev, struct vm_area_s
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);
#endif // __smscoreapi_h__
#include <linux/module.h>
#include <linux/init.h>
#include "dmxdev.h"
#include "dvbdev.h"
#include "dvb_demux.h"
#include "dvb_frontend.h"
#include "smscoreapi.h"
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
typedef struct _smsdvb_client
{
struct list_head entry;
smscore_device_t *coredev;
smscore_client_t *smsclient;
struct dvb_adapter adapter;
struct dvb_demux demux;
struct dmxdev dmxdev;
struct dvb_frontend frontend;
fe_status_t fe_status;
int fe_ber, fe_snr, fe_signal_strength;
struct completion tune_done, stat_done;
// todo: save freq/band instead whole struct
struct dvb_frontend_parameters fe_params;
} smsdvb_client_t;
struct list_head g_smsdvb_clients;
kmutex_t g_smsdvb_clientslock;
......@@ -402,37 +375,3 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device* device, int arrival
return rc;
}
int smsdvb_module_init(void)
{
int rc;
INIT_LIST_HEAD(&g_smsdvb_clients);
kmutex_init(&g_smsdvb_clientslock);
rc = smscore_register_hotplug(smsdvb_hotplug);
printk(KERN_INFO "%s, rc %d\n", __FUNCTION__, rc);
return rc;
}
void smsdvb_module_exit(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);
printk(KERN_INFO "%s\n", __FUNCTION__);
}
module_init(smsdvb_module_init);
module_exit(smsdvb_module_exit);
MODULE_DESCRIPTION("smsdvb dvb-api module");
MODULE_AUTHOR("Anatoly Greenblatt,,, (anatolyg@siano-ms.com)");
MODULE_LICENSE("GPL");
......@@ -401,12 +401,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 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;
......@@ -414,6 +423,17 @@ int smsusb_module_init(void)
void smsusb_module_exit(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__);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册