Commit 3dd24378 authored by Steven Toth's avatar Steven Toth Committed by Mauro Carvalho Chehab

V4L/DVB (8266): sms1xxx: merge modules

Signed-off-by: default avatarSteven Toth <stoth@hauppauge.com>
Signed-off-by: default avatarMichael Krufky <mkrufky@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 7a19598c
#ifndef __smscoreapi_h__ #ifndef __smscoreapi_h__
#define __smscoreapi_h__ #define __smscoreapi_h__
#include "dmxdev.h"
#include "dvbdev.h"
#include "dvb_demux.h"
#include "dvb_frontend.h"
/* From sysksyms.h */ /* From sysksyms.h */
#include <linux/version.h> #include <linux/version.h>
...@@ -453,6 +458,28 @@ typedef struct SMSHOSTLIB_I2C_RES_S ...@@ -453,6 +458,28 @@ typedef struct SMSHOSTLIB_I2C_RES_S
/* End types.h */ /* 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 void smscore_registry_setmode(char *devpath, int mode);
extern int smscore_registry_getmode(char *devpath); 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 ...@@ -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 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 */
int smsdvb_hotplug(smscore_device_t *coredev, struct device* device, int arrival);
void smsdvb_unregister_client(smsdvb_client_t* client);
#endif // __smscoreapi_h__ #endif // __smscoreapi_h__
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include "dmxdev.h"
#include "dvbdev.h"
#include "dvb_demux.h"
#include "dvb_frontend.h"
#include "smscoreapi.h" #include "smscoreapi.h"
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); 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; struct list_head g_smsdvb_clients;
kmutex_t g_smsdvb_clientslock; kmutex_t g_smsdvb_clientslock;
...@@ -402,37 +375,3 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device* device, int arrival ...@@ -402,37 +375,3 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device* device, int arrival
return rc; 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 = { ...@@ -401,12 +401,21 @@ static struct usb_driver smsusb_driver = {
.id_table = smsusb_id_table, .id_table = smsusb_id_table,
}; };
extern struct list_head g_smsdvb_clients;
kmutex_t g_smsdvb_clientslock;
int smsusb_module_init(void) 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;
...@@ -414,6 +423,17 @@ int smsusb_module_init(void) ...@@ -414,6 +423,17 @@ int smsusb_module_init(void)
void smsusb_module_exit(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); usb_deregister(&smsusb_driver);
printk(KERN_INFO "%s\n", __FUNCTION__); printk(KERN_INFO "%s\n", __FUNCTION__);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment