提交 78e92006 编写于 作者: J Janne Grunau 提交者: Mauro Carvalho Chehab

V4L/DVB (7538): Adds selectable adapter numbers as per module option

The adapter_nr module options can be used to allocate static adapter
numbers on a driver level. It avoids problems with changing DVB apapter
numbers after warm/cold boot or device unplugging and repluging.

Each driver holds DVB_MAX_ADAPTER long array of the preferred order of
adapter numbers.

options dvb-usb-dib0700 adapter_nr=7,6,5,4,3,2,1,0 would result in a
reversed allocation of adapter numbers.

With adapter_nr=2,5 it tries first to get adapter number 2 and 5. If
both are already in use it will allocate the lowest free adapter number.
Signed-off-by: NJanne Grunau <janne-dvb@grunau.be>
Acked-by: NHermann Pitton <hermann.pitton@arcor.de>
Signed-off-by: NMichael Krufky <mkrufky@linuxtv.org>
Signed-off-by: NMauro Carvalho Chehab <mchehab@infradead.org>
上级 9950c1b5
...@@ -49,6 +49,8 @@ module_param_named(debug, b2c2_flexcop_debug, int, 0644); ...@@ -49,6 +49,8 @@ module_param_named(debug, b2c2_flexcop_debug, int, 0644);
MODULE_PARM_DESC(debug, "set debug level (1=info,2=tuner,4=i2c,8=ts,16=sram,32=reg (|-able))." DEBSTATUS); MODULE_PARM_DESC(debug, "set debug level (1=info,2=tuner,4=i2c,8=ts,16=sram,32=reg (|-able))." DEBSTATUS);
#undef DEBSTATUS #undef DEBSTATUS
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
/* global zero for ibi values */ /* global zero for ibi values */
flexcop_ibi_value ibi_zero; flexcop_ibi_value ibi_zero;
...@@ -66,8 +68,10 @@ static int flexcop_dvb_stop_feed(struct dvb_demux_feed *dvbdmxfeed) ...@@ -66,8 +68,10 @@ static int flexcop_dvb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
static int flexcop_dvb_init(struct flexcop_device *fc) static int flexcop_dvb_init(struct flexcop_device *fc)
{ {
int ret; int ret = dvb_register_adapter(&fc->dvb_adapter,
if ((ret = dvb_register_adapter(&fc->dvb_adapter,"FlexCop Digital TV device",fc->owner,fc->dev)) < 0) { "FlexCop Digital TV device", fc->owner,
fc->dev, adapter_nr);
if (ret < 0) {
err("error registering DVB adapter"); err("error registering DVB adapter");
return ret; return ret;
} }
......
...@@ -40,6 +40,8 @@ static int debug; ...@@ -40,6 +40,8 @@ static int debug;
module_param(debug, int, 0644); module_param(debug, int, 0644);
MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off)."); MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
#define dprintk( args... ) \ #define dprintk( args... ) \
do { \ do { \
if (debug) printk(KERN_DEBUG args); \ if (debug) printk(KERN_DEBUG args); \
...@@ -717,7 +719,10 @@ static int __devinit dvb_bt8xx_load_card(struct dvb_bt8xx_card *card, u32 type) ...@@ -717,7 +719,10 @@ static int __devinit dvb_bt8xx_load_card(struct dvb_bt8xx_card *card, u32 type)
{ {
int result; int result;
if ((result = dvb_register_adapter(&card->dvb_adapter, card->card_name, THIS_MODULE, &card->bt->dev->dev)) < 0) { result = dvb_register_adapter(&card->dvb_adapter, card->card_name,
THIS_MODULE, &card->bt->dev->dev,
adapter_nr);
if (result < 0) {
printk("dvb_bt8xx: dvb_register_adapter failed (errno = %d)\n", result); printk("dvb_bt8xx: dvb_register_adapter failed (errno = %d)\n", result);
return result; return result;
} }
......
...@@ -58,6 +58,8 @@ static int debug; ...@@ -58,6 +58,8 @@ static int debug;
module_param_named(debug, debug, int, 0644); module_param_named(debug, debug, int, 0644);
MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off)."); MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
#define dprintk(level, args...) \ #define dprintk(level, args...) \
do { \ do { \
if ((debug & level)) { \ if ((debug & level)) { \
...@@ -938,7 +940,10 @@ static int cinergyt2_probe (struct usb_interface *intf, ...@@ -938,7 +940,10 @@ static int cinergyt2_probe (struct usb_interface *intf,
return -ENOMEM; return -ENOMEM;
} }
if ((err = dvb_register_adapter(&cinergyt2->adapter, DRIVER_NAME, THIS_MODULE, &cinergyt2->udev->dev)) < 0) { err = dvb_register_adapter(&cinergyt2->adapter, DRIVER_NAME,
THIS_MODULE, &cinergyt2->udev->dev,
adapter_nr);
if (err < 0) {
kfree(cinergyt2); kfree(cinergyt2);
return err; return err;
} }
......
...@@ -49,7 +49,6 @@ static const char * const dnames[] = { ...@@ -49,7 +49,6 @@ static const char * const dnames[] = {
"net", "osd" "net", "osd"
}; };
#define DVB_MAX_ADAPTERS 8
#define DVB_MAX_IDS 4 #define DVB_MAX_IDS 4
#define nums2minor(num,type,id) ((num << 6) | (id << 4) | type) #define nums2minor(num,type,id) ((num << 6) | (id << 4) | type)
#define MAX_DVB_MINORS (DVB_MAX_ADAPTERS*64) #define MAX_DVB_MINORS (DVB_MAX_ADAPTERS*64)
...@@ -262,18 +261,25 @@ void dvb_unregister_device(struct dvb_device *dvbdev) ...@@ -262,18 +261,25 @@ void dvb_unregister_device(struct dvb_device *dvbdev)
} }
EXPORT_SYMBOL(dvb_unregister_device); EXPORT_SYMBOL(dvb_unregister_device);
static int dvbdev_check_free_adapter_num(int num)
{
struct list_head *entry;
list_for_each(entry, &dvb_adapter_list) {
struct dvb_adapter *adap;
adap = list_entry(entry, struct dvb_adapter, list_head);
if (adap->num == num)
return 0;
}
return 1;
}
static int dvbdev_get_free_adapter_num (void) static int dvbdev_get_free_adapter_num (void)
{ {
int num = 0; int num = 0;
while (num < DVB_MAX_ADAPTERS) { while (num < DVB_MAX_ADAPTERS) {
struct dvb_adapter *adap; if (dvbdev_check_free_adapter_num(num))
list_for_each_entry(adap, &dvb_adapter_list, list_head) return num;
if (adap->num == num)
goto skip;
return num;
skip:
num++; num++;
} }
...@@ -281,13 +287,28 @@ static int dvbdev_get_free_adapter_num (void) ...@@ -281,13 +287,28 @@ static int dvbdev_get_free_adapter_num (void)
} }
int dvb_register_adapter(struct dvb_adapter *adap, const char *name, struct module *module, struct device *device) int dvb_register_adapter(struct dvb_adapter *adap, const char *name,
struct module *module, struct device *device,
short *adapter_nums)
{ {
int num; int i, num;
mutex_lock(&dvbdev_register_lock); mutex_lock(&dvbdev_register_lock);
if ((num = dvbdev_get_free_adapter_num ()) < 0) { for (i = 0; i < DVB_MAX_ADAPTERS; ++i) {
num = adapter_nums[i];
if (num >= 0 && num < DVB_MAX_ADAPTERS) {
/* use the one the driver asked for */
if (dvbdev_check_free_adapter_num(num))
break;
} else {
num = dvbdev_get_free_adapter_num();
break;
}
num = -1;
}
if (num < 0) {
mutex_unlock(&dvbdev_register_lock); mutex_unlock(&dvbdev_register_lock);
return -ENFILE; return -ENFILE;
} }
......
...@@ -31,6 +31,10 @@ ...@@ -31,6 +31,10 @@
#define DVB_MAJOR 212 #define DVB_MAJOR 212
#define DVB_MAX_ADAPTERS 8
#define DVB_UNSET (-1)
#define DVB_DEVICE_VIDEO 0 #define DVB_DEVICE_VIDEO 0
#define DVB_DEVICE_AUDIO 1 #define DVB_DEVICE_AUDIO 1
#define DVB_DEVICE_SEC 2 #define DVB_DEVICE_SEC 2
...@@ -41,6 +45,11 @@ ...@@ -41,6 +45,11 @@
#define DVB_DEVICE_NET 7 #define DVB_DEVICE_NET 7
#define DVB_DEVICE_OSD 8 #define DVB_DEVICE_OSD 8
#define DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr) \
static short adapter_nr[] = \
{[0 ... (DVB_MAX_ADAPTERS - 1)] = DVB_UNSET }; \
module_param_array(adapter_nr, short, NULL, 0444); \
MODULE_PARM_DESC(adapter_nr, "DVB adapter numbers")
struct dvb_adapter { struct dvb_adapter {
int num; int num;
...@@ -78,7 +87,9 @@ struct dvb_device { ...@@ -78,7 +87,9 @@ struct dvb_device {
}; };
extern int dvb_register_adapter (struct dvb_adapter *adap, const char *name, struct module *module, struct device *device); extern int dvb_register_adapter(struct dvb_adapter *adap, const char *name,
struct module *module, struct device *device,
short *adapter_nums);
extern int dvb_unregister_adapter (struct dvb_adapter *adap); extern int dvb_unregister_adapter (struct dvb_adapter *adap);
extern int dvb_register_device (struct dvb_adapter *adap, extern int dvb_register_device (struct dvb_adapter *adap,
......
...@@ -18,6 +18,9 @@ ...@@ -18,6 +18,9 @@
static int debug; static int debug;
module_param(debug, int, 0644); module_param(debug, int, 0644);
MODULE_PARM_DESC(debug, "set debugging level (rc=1 (or-able))." DVB_USB_DEBUG_STATUS); MODULE_PARM_DESC(debug, "set debugging level (rc=1 (or-able))." DVB_USB_DEBUG_STATUS);
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
#define deb_rc(args...) dprintk(debug,0x01,args) #define deb_rc(args...) dprintk(debug,0x01,args)
static int a800_power_ctrl(struct dvb_usb_device *d, int onoff) static int a800_power_ctrl(struct dvb_usb_device *d, int onoff)
...@@ -94,7 +97,8 @@ static struct dvb_usb_device_properties a800_properties; ...@@ -94,7 +97,8 @@ static struct dvb_usb_device_properties a800_properties;
static int a800_probe(struct usb_interface *intf, static int a800_probe(struct usb_interface *intf,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
return dvb_usb_device_init(intf,&a800_properties,THIS_MODULE,NULL); return dvb_usb_device_init(intf, &a800_properties,
THIS_MODULE, NULL, adapter_nr);
} }
/* do not change the order of the ID table */ /* do not change the order of the ID table */
......
...@@ -39,6 +39,8 @@ int dvb_usb_af9005_dump_eeprom = 0; ...@@ -39,6 +39,8 @@ int dvb_usb_af9005_dump_eeprom = 0;
module_param_named(dump_eeprom, dvb_usb_af9005_dump_eeprom, int, 0); module_param_named(dump_eeprom, dvb_usb_af9005_dump_eeprom, int, 0);
MODULE_PARM_DESC(dump_eeprom, "dump contents of the eeprom."); MODULE_PARM_DESC(dump_eeprom, "dump contents of the eeprom.");
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
/* remote control decoder */ /* remote control decoder */
int (*rc_decode) (struct dvb_usb_device * d, u8 * data, int len, u32 * event, int (*rc_decode) (struct dvb_usb_device * d, u8 * data, int len, u32 * event,
int *state); int *state);
...@@ -1020,7 +1022,8 @@ static struct dvb_usb_device_properties af9005_properties; ...@@ -1020,7 +1022,8 @@ static struct dvb_usb_device_properties af9005_properties;
static int af9005_usb_probe(struct usb_interface *intf, static int af9005_usb_probe(struct usb_interface *intf,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
return dvb_usb_device_init(intf, &af9005_properties, THIS_MODULE, NULL); return dvb_usb_device_init(intf, &af9005_properties,
THIS_MODULE, NULL, adapter_nr);
} }
static struct usb_device_id af9005_usb_table[] = { static struct usb_device_id af9005_usb_table[] = {
......
...@@ -19,6 +19,8 @@ static int dvb_usb_au6610_debug; ...@@ -19,6 +19,8 @@ static int dvb_usb_au6610_debug;
module_param_named(debug, dvb_usb_au6610_debug, int, 0644); module_param_named(debug, dvb_usb_au6610_debug, int, 0644);
MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS); MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS);
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
static int au6610_usb_msg(struct dvb_usb_device *d, u8 operation, u8 addr, static int au6610_usb_msg(struct dvb_usb_device *d, u8 operation, u8 addr,
u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen) u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen)
{ {
...@@ -163,7 +165,9 @@ static int au6610_probe(struct usb_interface *intf, ...@@ -163,7 +165,9 @@ static int au6610_probe(struct usb_interface *intf,
if (intf->num_altsetting < AU6610_ALTSETTING_COUNT) if (intf->num_altsetting < AU6610_ALTSETTING_COUNT)
return -ENODEV; return -ENODEV;
if ((ret = dvb_usb_device_init(intf, &au6610_properties, THIS_MODULE, &d)) == 0) { ret = dvb_usb_device_init(intf, &au6610_properties, THIS_MODULE, &d,
adapter_nr);
if (ret == 0) {
alt = usb_altnum_to_altsetting(intf, AU6610_ALTSETTING); alt = usb_altnum_to_altsetting(intf, AU6610_ALTSETTING);
if (alt == NULL) { if (alt == NULL) {
......
...@@ -40,6 +40,9 @@ ...@@ -40,6 +40,9 @@
static int dvb_usb_cxusb_debug; static int dvb_usb_cxusb_debug;
module_param_named(debug, dvb_usb_cxusb_debug, int, 0644); module_param_named(debug, dvb_usb_cxusb_debug, int, 0644);
MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS); MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS);
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
#define deb_info(args...) dprintk(dvb_usb_cxusb_debug,0x01,args) #define deb_info(args...) dprintk(dvb_usb_cxusb_debug,0x01,args)
#define deb_i2c(args...) if (d->udev->descriptor.idVendor == USB_VID_MEDION) \ #define deb_i2c(args...) if (d->udev->descriptor.idVendor == USB_VID_MEDION) \
dprintk(dvb_usb_cxusb_debug,0x01,args) dprintk(dvb_usb_cxusb_debug,0x01,args)
...@@ -723,16 +726,24 @@ static struct dvb_usb_device_properties cxusb_bluebird_nano2_needsfirmware_prope ...@@ -723,16 +726,24 @@ static struct dvb_usb_device_properties cxusb_bluebird_nano2_needsfirmware_prope
static int cxusb_probe(struct usb_interface *intf, static int cxusb_probe(struct usb_interface *intf,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
if (dvb_usb_device_init(intf,&cxusb_medion_properties,THIS_MODULE,NULL) == 0 || if (0 == dvb_usb_device_init(intf, &cxusb_medion_properties,
dvb_usb_device_init(intf,&cxusb_bluebird_lgh064f_properties,THIS_MODULE,NULL) == 0 || THIS_MODULE, NULL, adapter_nr) ||
dvb_usb_device_init(intf,&cxusb_bluebird_dee1601_properties,THIS_MODULE,NULL) == 0 || 0 == dvb_usb_device_init(intf, &cxusb_bluebird_lgh064f_properties,
dvb_usb_device_init(intf,&cxusb_bluebird_lgz201_properties,THIS_MODULE,NULL) == 0 || THIS_MODULE, NULL, adapter_nr) ||
dvb_usb_device_init(intf,&cxusb_bluebird_dtt7579_properties,THIS_MODULE,NULL) == 0 || 0 == dvb_usb_device_init(intf, &cxusb_bluebird_dee1601_properties,
dvb_usb_device_init(intf,&cxusb_bluebird_dualdig4_properties,THIS_MODULE,NULL) == 0 || THIS_MODULE, NULL, adapter_nr) ||
dvb_usb_device_init(intf,&cxusb_bluebird_nano2_properties,THIS_MODULE,NULL) == 0 || 0 == dvb_usb_device_init(intf, &cxusb_bluebird_lgz201_properties,
dvb_usb_device_init(intf,&cxusb_bluebird_nano2_needsfirmware_properties,THIS_MODULE,NULL) == 0) { THIS_MODULE, NULL, adapter_nr) ||
0 == dvb_usb_device_init(intf, &cxusb_bluebird_dtt7579_properties,
THIS_MODULE, NULL, adapter_nr) ||
0 == dvb_usb_device_init(intf, &cxusb_bluebird_dualdig4_properties,
THIS_MODULE, NULL, adapter_nr) ||
0 == dvb_usb_device_init(intf, &cxusb_bluebird_nano2_properties,
THIS_MODULE, NULL, adapter_nr) ||
0 == dvb_usb_device_init(intf,
&cxusb_bluebird_nano2_needsfirmware_properties,
THIS_MODULE, NULL, adapter_nr))
return 0; return 0;
}
return -EINVAL; return -EINVAL;
} }
......
...@@ -17,6 +17,8 @@ int dvb_usb_dib0700_ir_proto = 1; ...@@ -17,6 +17,8 @@ int dvb_usb_dib0700_ir_proto = 1;
module_param(dvb_usb_dib0700_ir_proto, int, 0644); module_param(dvb_usb_dib0700_ir_proto, int, 0644);
MODULE_PARM_DESC(dvb_usb_dib0700_ir_proto, "set ir protocol (0=NEC, 1=RC5 (default), 2=RC6)."); MODULE_PARM_DESC(dvb_usb_dib0700_ir_proto, "set ir protocol (0=NEC, 1=RC5 (default), 2=RC6).");
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
/* expecting rx buffer: request data[0] data[1] ... data[2] */ /* expecting rx buffer: request data[0] data[1] ... data[2] */
static int dib0700_ctrl_wr(struct dvb_usb_device *d, u8 *tx, u8 txlen) static int dib0700_ctrl_wr(struct dvb_usb_device *d, u8 *tx, u8 txlen)
{ {
...@@ -279,7 +281,8 @@ static int dib0700_probe(struct usb_interface *intf, ...@@ -279,7 +281,8 @@ static int dib0700_probe(struct usb_interface *intf,
struct dvb_usb_device *dev; struct dvb_usb_device *dev;
for (i = 0; i < dib0700_device_count; i++) for (i = 0; i < dib0700_device_count; i++)
if (dvb_usb_device_init(intf, &dib0700_devices[i], THIS_MODULE, &dev) == 0) if (dvb_usb_device_init(intf, &dib0700_devices[i], THIS_MODULE,
&dev, adapter_nr) == 0)
{ {
dib0700_rc_setup(dev); dib0700_rc_setup(dev);
return 0; return 0;
......
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
*/ */
#include "dibusb.h" #include "dibusb.h"
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
static int dib3000mb_i2c_gate_ctrl(struct dvb_frontend* fe, int enable) static int dib3000mb_i2c_gate_ctrl(struct dvb_frontend* fe, int enable)
{ {
struct dvb_usb_adapter *adap = fe->dvb->priv; struct dvb_usb_adapter *adap = fe->dvb->priv;
...@@ -107,10 +109,14 @@ static struct dvb_usb_device_properties artec_t1_usb2_properties; ...@@ -107,10 +109,14 @@ static struct dvb_usb_device_properties artec_t1_usb2_properties;
static int dibusb_probe(struct usb_interface *intf, static int dibusb_probe(struct usb_interface *intf,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
if (dvb_usb_device_init(intf,&dibusb1_1_properties,THIS_MODULE,NULL) == 0 || if (0 == dvb_usb_device_init(intf, &dibusb1_1_properties,
dvb_usb_device_init(intf,&dibusb1_1_an2235_properties,THIS_MODULE,NULL) == 0 || THIS_MODULE, NULL, adapter_nr) ||
dvb_usb_device_init(intf,&dibusb2_0b_properties,THIS_MODULE,NULL) == 0 || 0 == dvb_usb_device_init(intf, &dibusb1_1_an2235_properties,
dvb_usb_device_init(intf,&artec_t1_usb2_properties,THIS_MODULE,NULL) == 0) THIS_MODULE, NULL, adapter_nr) ||
0 == dvb_usb_device_init(intf, &dibusb2_0b_properties,
THIS_MODULE, NULL, adapter_nr) ||
0 == dvb_usb_device_init(intf, &artec_t1_usb2_properties,
THIS_MODULE, NULL, adapter_nr))
return 0; return 0;
return -EINVAL; return -EINVAL;
......
...@@ -14,13 +14,16 @@ ...@@ -14,13 +14,16 @@
*/ */
#include "dibusb.h" #include "dibusb.h"
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
/* USB Driver stuff */ /* USB Driver stuff */
static struct dvb_usb_device_properties dibusb_mc_properties; static struct dvb_usb_device_properties dibusb_mc_properties;
static int dibusb_mc_probe(struct usb_interface *intf, static int dibusb_mc_probe(struct usb_interface *intf,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
return dvb_usb_device_init(intf,&dibusb_mc_properties,THIS_MODULE,NULL); return dvb_usb_device_init(intf, &dibusb_mc_properties, THIS_MODULE,
NULL, adapter_nr);
} }
/* do not change the order of the ID table */ /* do not change the order of the ID table */
......
...@@ -20,6 +20,9 @@ ...@@ -20,6 +20,9 @@
static int dvb_usb_digitv_debug; static int dvb_usb_digitv_debug;
module_param_named(debug,dvb_usb_digitv_debug, int, 0644); module_param_named(debug,dvb_usb_digitv_debug, int, 0644);
MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS); MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS);
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
#define deb_rc(args...) dprintk(dvb_usb_digitv_debug,0x01,args) #define deb_rc(args...) dprintk(dvb_usb_digitv_debug,0x01,args)
static int digitv_ctrl_msg(struct dvb_usb_device *d, static int digitv_ctrl_msg(struct dvb_usb_device *d,
...@@ -256,8 +259,9 @@ static int digitv_probe(struct usb_interface *intf, ...@@ -256,8 +259,9 @@ static int digitv_probe(struct usb_interface *intf,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
struct dvb_usb_device *d; struct dvb_usb_device *d;
int ret; int ret = dvb_usb_device_init(intf, &digitv_properties, THIS_MODULE, &d,
if ((ret = dvb_usb_device_init(intf,&digitv_properties,THIS_MODULE,&d)) == 0) { adapter_nr);
if (ret == 0) {
u8 b[4] = { 0 }; u8 b[4] = { 0 };
if (d != NULL) { /* do that only when the firmware is loaded */ if (d != NULL) { /* do that only when the firmware is loaded */
......
...@@ -18,6 +18,8 @@ int dvb_usb_dtt200u_debug; ...@@ -18,6 +18,8 @@ int dvb_usb_dtt200u_debug;
module_param_named(debug,dvb_usb_dtt200u_debug, int, 0644); module_param_named(debug,dvb_usb_dtt200u_debug, int, 0644);
MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2 (or-able))." DVB_USB_DEBUG_STATUS); MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2 (or-able))." DVB_USB_DEBUG_STATUS);
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
static int dtt200u_power_ctrl(struct dvb_usb_device *d, int onoff) static int dtt200u_power_ctrl(struct dvb_usb_device *d, int onoff)
{ {
u8 b = SET_INIT; u8 b = SET_INIT;
...@@ -101,11 +103,16 @@ static struct dvb_usb_device_properties wt220u_miglia_properties; ...@@ -101,11 +103,16 @@ static struct dvb_usb_device_properties wt220u_miglia_properties;
static int dtt200u_usb_probe(struct usb_interface *intf, static int dtt200u_usb_probe(struct usb_interface *intf,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
if (dvb_usb_device_init(intf,&dtt200u_properties,THIS_MODULE,NULL) == 0 || if (0 == dvb_usb_device_init(intf, &dtt200u_properties,
dvb_usb_device_init(intf,&wt220u_properties,THIS_MODULE,NULL) == 0 || THIS_MODULE, NULL, adapter_nr) ||
dvb_usb_device_init(intf,&wt220u_fc_properties,THIS_MODULE,NULL) == 0 || 0 == dvb_usb_device_init(intf, &wt220u_properties,
dvb_usb_device_init(intf,&wt220u_zl0353_properties,THIS_MODULE,NULL) == 0 || THIS_MODULE, NULL, adapter_nr) ||
dvb_usb_device_init(intf,&wt220u_miglia_properties,THIS_MODULE,NULL) == 0) 0 == dvb_usb_device_init(intf, &wt220u_fc_properties,
THIS_MODULE, NULL, adapter_nr) ||
0 == dvb_usb_device_init(intf, &wt220u_zl0353_properties,
THIS_MODULE, NULL, adapter_nr) ||
0 == dvb_usb_device_init(intf, &wt220u_miglia_properties,
THIS_MODULE, NULL, adapter_nr))
return 0; return 0;
return -ENODEV; return -ENODEV;
......
...@@ -40,7 +40,8 @@ extern int dvb_usb_adapter_stream_exit(struct dvb_usb_adapter *adap); ...@@ -40,7 +40,8 @@ extern int dvb_usb_adapter_stream_exit(struct dvb_usb_adapter *adap);
extern int dvb_usb_i2c_init(struct dvb_usb_device *); extern int dvb_usb_i2c_init(struct dvb_usb_device *);
extern int dvb_usb_i2c_exit(struct dvb_usb_device *); extern int dvb_usb_i2c_exit(struct dvb_usb_device *);
extern int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap); extern int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap,
short *adapter_nums);
extern int dvb_usb_adapter_dvb_exit(struct dvb_usb_adapter *adap); extern int dvb_usb_adapter_dvb_exit(struct dvb_usb_adapter *adap);
extern int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap); extern int dvb_usb_adapter_frontend_init(struct dvb_usb_adapter *adap);
extern int dvb_usb_adapter_frontend_exit(struct dvb_usb_adapter *adap); extern int dvb_usb_adapter_frontend_exit(struct dvb_usb_adapter *adap);
......
...@@ -77,12 +77,13 @@ static int dvb_usb_stop_feed(struct dvb_demux_feed *dvbdmxfeed) ...@@ -77,12 +77,13 @@ static int dvb_usb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
return dvb_usb_ctrl_feed(dvbdmxfeed,0); return dvb_usb_ctrl_feed(dvbdmxfeed,0);
} }
int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap) int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap, short *adapter_nums)
{ {
int ret; int ret = dvb_register_adapter(&adap->dvb_adap, adap->dev->desc->name,
adap->dev->owner, &adap->dev->udev->dev,
adapter_nums);
if ((ret = dvb_register_adapter(&adap->dvb_adap, adap->dev->desc->name, if (ret < 0) {
adap->dev->owner, &adap->dev->udev->dev)) < 0) {
deb_info("dvb_register_adapter failed: error %d", ret); deb_info("dvb_register_adapter failed: error %d", ret);
goto err; goto err;
} }
......
...@@ -26,7 +26,7 @@ static int dvb_usb_force_pid_filter_usage; ...@@ -26,7 +26,7 @@ static int dvb_usb_force_pid_filter_usage;
module_param_named(force_pid_filter_usage, dvb_usb_force_pid_filter_usage, int, 0444); module_param_named(force_pid_filter_usage, dvb_usb_force_pid_filter_usage, int, 0444);
MODULE_PARM_DESC(force_pid_filter_usage, "force all dvb-usb-devices to use a PID filter, if any (default: 0)."); MODULE_PARM_DESC(force_pid_filter_usage, "force all dvb-usb-devices to use a PID filter, if any (default: 0).");
static int dvb_usb_adapter_init(struct dvb_usb_device *d) static int dvb_usb_adapter_init(struct dvb_usb_device *d, short *adapter_nrs)
{ {
struct dvb_usb_adapter *adap; struct dvb_usb_adapter *adap;
int ret,n; int ret,n;
...@@ -72,7 +72,7 @@ static int dvb_usb_adapter_init(struct dvb_usb_device *d) ...@@ -72,7 +72,7 @@ static int dvb_usb_adapter_init(struct dvb_usb_device *d)
} }
if ((ret = dvb_usb_adapter_stream_init(adap)) || if ((ret = dvb_usb_adapter_stream_init(adap)) ||
(ret = dvb_usb_adapter_dvb_init(adap)) || (ret = dvb_usb_adapter_dvb_init(adap, adapter_nrs)) ||
(ret = dvb_usb_adapter_frontend_init(adap))) { (ret = dvb_usb_adapter_frontend_init(adap))) {
return ret; return ret;
} }
...@@ -122,7 +122,7 @@ static int dvb_usb_exit(struct dvb_usb_device *d) ...@@ -122,7 +122,7 @@ static int dvb_usb_exit(struct dvb_usb_device *d)
return 0; return 0;
} }
static int dvb_usb_init(struct dvb_usb_device *d) static int dvb_usb_init(struct dvb_usb_device *d, short *adapter_nums)
{ {
int ret = 0; int ret = 0;
...@@ -143,7 +143,7 @@ static int dvb_usb_init(struct dvb_usb_device *d) ...@@ -143,7 +143,7 @@ static int dvb_usb_init(struct dvb_usb_device *d)
dvb_usb_device_power_ctrl(d, 1); dvb_usb_device_power_ctrl(d, 1);
if ((ret = dvb_usb_i2c_init(d)) || if ((ret = dvb_usb_i2c_init(d)) ||
(ret = dvb_usb_adapter_init(d))) { (ret = dvb_usb_adapter_init(d, adapter_nums))) {
dvb_usb_exit(d); dvb_usb_exit(d);
return ret; return ret;
} }
...@@ -213,8 +213,10 @@ int dvb_usb_device_power_ctrl(struct dvb_usb_device *d, int onoff) ...@@ -213,8 +213,10 @@ int dvb_usb_device_power_ctrl(struct dvb_usb_device *d, int onoff)
/* /*
* USB * USB
*/ */
int dvb_usb_device_init(struct usb_interface *intf, struct dvb_usb_device_properties int dvb_usb_device_init(struct usb_interface *intf,
*props, struct module *owner,struct dvb_usb_device **du) struct dvb_usb_device_properties *props,
struct module *owner, struct dvb_usb_device **du,
short *adapter_nums)
{ {
struct usb_device *udev = interface_to_usbdev(intf); struct usb_device *udev = interface_to_usbdev(intf);
struct dvb_usb_device *d = NULL; struct dvb_usb_device *d = NULL;
...@@ -254,7 +256,7 @@ int dvb_usb_device_init(struct usb_interface *intf, struct dvb_usb_device_proper ...@@ -254,7 +256,7 @@ int dvb_usb_device_init(struct usb_interface *intf, struct dvb_usb_device_proper
if (du != NULL) if (du != NULL)
*du = d; *du = d;
ret = dvb_usb_init(d); ret = dvb_usb_init(d, adapter_nums);
if (ret == 0) if (ret == 0)
info("%s successfully initialized and connected.",desc->name); info("%s successfully initialized and connected.",desc->name);
......
...@@ -372,7 +372,10 @@ struct dvb_usb_device { ...@@ -372,7 +372,10 @@ struct dvb_usb_device {
void *priv; void *priv;
}; };
extern int dvb_usb_device_init(struct usb_interface *, struct dvb_usb_device_properties *, struct module *, struct dvb_usb_device **); extern int dvb_usb_device_init(struct usb_interface *,
struct dvb_usb_device_properties *,
struct module *, struct dvb_usb_device **,
short *adapter_nums);
extern void dvb_usb_device_exit(struct usb_interface *); extern void dvb_usb_device_exit(struct usb_interface *);
/* the generic read/write method for device control */ /* the generic read/write method for device control */
......
...@@ -16,6 +16,8 @@ static int dvb_usb_gl861_debug; ...@@ -16,6 +16,8 @@ static int dvb_usb_gl861_debug;
module_param_named(debug,dvb_usb_gl861_debug, int, 0644); module_param_named(debug,dvb_usb_gl861_debug, int, 0644);
MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS); MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS);
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
static int gl861_i2c_msg(struct dvb_usb_device *d, u8 addr, static int gl861_i2c_msg(struct dvb_usb_device *d, u8 addr,
u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen) u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen)
{ {
...@@ -140,7 +142,9 @@ static int gl861_probe(struct usb_interface *intf, ...@@ -140,7 +142,9 @@ static int gl861_probe(struct usb_interface *intf,
if (intf->num_altsetting < 2) if (intf->num_altsetting < 2)
return -ENODEV; return -ENODEV;
if ((ret = dvb_usb_device_init(intf, &gl861_properties, THIS_MODULE, &d)) == 0) { ret = dvb_usb_device_init(intf, &gl861_properties, THIS_MODULE, &d,
adapter_nr);
if (ret == 0) {
alt = usb_altnum_to_altsetting(intf, 0); alt = usb_altnum_to_altsetting(intf, 0);
if (alt == NULL) { if (alt == NULL) {
......
...@@ -22,6 +22,8 @@ int dvb_usb_gp8psk_debug; ...@@ -22,6 +22,8 @@ int dvb_usb_gp8psk_debug;
module_param_named(debug,dvb_usb_gp8psk_debug, int, 0644); module_param_named(debug,dvb_usb_gp8psk_debug, int, 0644);
MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,rc=4 (or-able))." DVB_USB_DEBUG_STATUS); MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,rc=4 (or-able))." DVB_USB_DEBUG_STATUS);
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
int gp8psk_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen) int gp8psk_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen)
{ {
int ret = 0,try = 0; int ret = 0,try = 0;
...@@ -190,7 +192,8 @@ static int gp8psk_usb_probe(struct usb_interface *intf, ...@@ -190,7 +192,8 @@ static int gp8psk_usb_probe(struct usb_interface *intf,
{ {
int ret; int ret;
struct usb_device *udev = interface_to_usbdev(intf); struct usb_device *udev = interface_to_usbdev(intf);
ret = dvb_usb_device_init(intf,&gp8psk_properties,THIS_MODULE,NULL); ret = dvb_usb_device_init(intf, &gp8psk_properties,
THIS_MODULE, NULL, adapter_nr);
if (ret == 0) { if (ret == 0) {
info("found Genpix USB device pID = %x (hex)", info("found Genpix USB device pID = %x (hex)",
le16_to_cpu(udev->descriptor.idProduct)); le16_to_cpu(udev->descriptor.idProduct));
......
...@@ -22,6 +22,8 @@ static int dvb_usb_m920x_debug; ...@@ -22,6 +22,8 @@ static int dvb_usb_m920x_debug;
module_param_named(debug,dvb_usb_m920x_debug, int, 0644); module_param_named(debug,dvb_usb_m920x_debug, int, 0644);
MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS); MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS);
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
static int m920x_set_filter(struct dvb_usb_device *d, int type, int idx, int pid); static int m920x_set_filter(struct dvb_usb_device *d, int type, int idx, int pid);
static inline int m920x_read(struct usb_device *udev, u8 request, u16 value, static inline int m920x_read(struct usb_device *udev, u8 request, u16 value,
...@@ -618,27 +620,31 @@ static int m920x_probe(struct usb_interface *intf, ...@@ -618,27 +620,31 @@ static int m920x_probe(struct usb_interface *intf,
* multi-tuner device * multi-tuner device
*/ */
if ((ret = dvb_usb_device_init(intf, &megasky_properties, ret = dvb_usb_device_init(intf, &megasky_properties,
THIS_MODULE, &d)) == 0) { THIS_MODULE, &d, adapter_nr);
if (ret == 0) {
rc_init_seq = megasky_rc_init; rc_init_seq = megasky_rc_init;
goto found; goto found;
} }
if ((ret = dvb_usb_device_init(intf, &digivox_mini_ii_properties, ret = dvb_usb_device_init(intf, &digivox_mini_ii_properties,
THIS_MODULE, &d)) == 0) { THIS_MODULE, &d, adapter_nr);
if (ret == 0) {
/* No remote control, so no rc_init_seq */ /* No remote control, so no rc_init_seq */
goto found; goto found;
} }
/* This configures both tuners on the TV Walker Twin */ /* This configures both tuners on the TV Walker Twin */
if ((ret = dvb_usb_device_init(intf, &tvwalkertwin_properties, ret = dvb_usb_device_init(intf, &tvwalkertwin_properties,
THIS_MODULE, &d)) == 0) { THIS_MODULE, &d, adapter_nr);
if (ret == 0) {
rc_init_seq = tvwalkertwin_rc_init; rc_init_seq = tvwalkertwin_rc_init;
goto found; goto found;
} }
if ((ret = dvb_usb_device_init(intf, &dposh_properties, ret = dvb_usb_device_init(intf, &dposh_properties,
THIS_MODULE, &d)) == 0) { THIS_MODULE, &d, adapter_nr);
if (ret == 0) {
/* Remote controller not supported yet. */ /* Remote controller not supported yet. */
goto found; goto found;
} }
......
...@@ -15,6 +15,8 @@ static int debug; ...@@ -15,6 +15,8 @@ static int debug;
module_param(debug, int, 0644); module_param(debug, int, 0644);
MODULE_PARM_DESC(debug, "set debugging level (1=rc,2=eeprom (|-able))." DVB_USB_DEBUG_STATUS); MODULE_PARM_DESC(debug, "set debugging level (1=rc,2=eeprom (|-able))." DVB_USB_DEBUG_STATUS);
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
#define deb_rc(args...) dprintk(debug,0x01,args) #define deb_rc(args...) dprintk(debug,0x01,args)
#define deb_ee(args...) dprintk(debug,0x02,args) #define deb_ee(args...) dprintk(debug,0x02,args)
...@@ -142,7 +144,8 @@ static struct dvb_usb_device_properties nova_t_properties; ...@@ -142,7 +144,8 @@ static struct dvb_usb_device_properties nova_t_properties;
static int nova_t_probe(struct usb_interface *intf, static int nova_t_probe(struct usb_interface *intf,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
return dvb_usb_device_init(intf,&nova_t_properties,THIS_MODULE,NULL); return dvb_usb_device_init(intf, &nova_t_properties,
THIS_MODULE, NULL, adapter_nr);
} }
/* do not change the order of the ID table */ /* do not change the order of the ID table */
......
...@@ -46,6 +46,9 @@ MODULE_PARM_DESC(debug, ...@@ -46,6 +46,9 @@ MODULE_PARM_DESC(debug,
"set debugging level (1=info,xfer=2,pll=4,ts=8,err=16,rc=32,fw=64 (or-able))." "set debugging level (1=info,xfer=2,pll=4,ts=8,err=16,rc=32,fw=64 (or-able))."
DVB_USB_DEBUG_STATUS); DVB_USB_DEBUG_STATUS);
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
static int opera1_xilinx_rw(struct usb_device *dev, u8 request, u16 value, static int opera1_xilinx_rw(struct usb_device *dev, u8 request, u16 value,
u8 * data, u16 len, int flags) u8 * data, u16 len, int flags)
{ {
...@@ -548,7 +551,8 @@ static int opera1_probe(struct usb_interface *intf, ...@@ -548,7 +551,8 @@ static int opera1_probe(struct usb_interface *intf,
return -EINVAL; return -EINVAL;
} }
if (dvb_usb_device_init(intf, &opera1_properties, THIS_MODULE, NULL) != 0) if (0 != dvb_usb_device_init(intf, &opera1_properties,
THIS_MODULE, NULL, adapter_nr))
return -EINVAL; return -EINVAL;
return 0; return 0;
} }
......
...@@ -37,6 +37,8 @@ static int dvb_usb_ttusb2_debug; ...@@ -37,6 +37,8 @@ static int dvb_usb_ttusb2_debug;
module_param_named(debug,dvb_usb_ttusb2_debug, int, 0644); module_param_named(debug,dvb_usb_ttusb2_debug, int, 0644);
MODULE_PARM_DESC(debug, "set debugging level (1=info (or-able))." DVB_USB_DEBUG_STATUS); MODULE_PARM_DESC(debug, "set debugging level (1=info (or-able))." DVB_USB_DEBUG_STATUS);
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
struct ttusb2_state { struct ttusb2_state {
u8 id; u8 id;
}; };
...@@ -181,8 +183,10 @@ static struct dvb_usb_device_properties ttusb2_properties_s2400; ...@@ -181,8 +183,10 @@ static struct dvb_usb_device_properties ttusb2_properties_s2400;
static int ttusb2_probe(struct usb_interface *intf, static int ttusb2_probe(struct usb_interface *intf,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
if (dvb_usb_device_init(intf, &ttusb2_properties, THIS_MODULE, NULL) == 0 || if (0 == dvb_usb_device_init(intf, &ttusb2_properties,
dvb_usb_device_init(intf, &ttusb2_properties_s2400, THIS_MODULE, NULL) == 0) THIS_MODULE, NULL, adapter_nr) ||
0 == dvb_usb_device_init(intf, &ttusb2_properties_s2400,
THIS_MODULE, NULL, adapter_nr))
return 0; return 0;
return -ENODEV; return -ENODEV;
} }
......
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
#include "mt352.h" #include "mt352.h"
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
static int umt_mt352_demod_init(struct dvb_frontend *fe) static int umt_mt352_demod_init(struct dvb_frontend *fe)
{ {
static u8 mt352_clock_config[] = { 0x89, 0xb8, 0x2d }; static u8 mt352_clock_config[] = { 0x89, 0xb8, 0x2d };
...@@ -75,7 +77,8 @@ static struct dvb_usb_device_properties umt_properties; ...@@ -75,7 +77,8 @@ static struct dvb_usb_device_properties umt_properties;
static int umt_probe(struct usb_interface *intf, static int umt_probe(struct usb_interface *intf,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
if (dvb_usb_device_init(intf,&umt_properties,THIS_MODULE,NULL) == 0) if (0 == dvb_usb_device_init(intf, &umt_properties,
THIS_MODULE, NULL, adapter_nr))
return 0; return 0;
return -EINVAL; return -EINVAL;
} }
......
...@@ -21,6 +21,8 @@ int dvb_usb_vp702x_debug; ...@@ -21,6 +21,8 @@ int dvb_usb_vp702x_debug;
module_param_named(debug,dvb_usb_vp702x_debug, int, 0644); module_param_named(debug,dvb_usb_vp702x_debug, int, 0644);
MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,rc=4 (or-able))." DVB_USB_DEBUG_STATUS); MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,rc=4 (or-able))." DVB_USB_DEBUG_STATUS);
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
struct vp702x_state { struct vp702x_state {
int pid_filter_count; int pid_filter_count;
int pid_filter_can_bypass; int pid_filter_can_bypass;
...@@ -238,7 +240,8 @@ static struct dvb_usb_device_properties vp702x_properties; ...@@ -238,7 +240,8 @@ static struct dvb_usb_device_properties vp702x_properties;
static int vp702x_usb_probe(struct usb_interface *intf, static int vp702x_usb_probe(struct usb_interface *intf,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
return dvb_usb_device_init(intf,&vp702x_properties,THIS_MODULE,NULL); return dvb_usb_device_init(intf, &vp702x_properties,
THIS_MODULE, NULL, adapter_nr);
} }
static struct usb_device_id vp702x_usb_table [] = { static struct usb_device_id vp702x_usb_table [] = {
......
...@@ -18,6 +18,9 @@ ...@@ -18,6 +18,9 @@
static int dvb_usb_vp7045_debug; static int dvb_usb_vp7045_debug;
module_param_named(debug,dvb_usb_vp7045_debug, int, 0644); module_param_named(debug,dvb_usb_vp7045_debug, int, 0644);
MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,rc=4 (or-able))." DVB_USB_DEBUG_STATUS); MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,rc=4 (or-able))." DVB_USB_DEBUG_STATUS);
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
#define deb_info(args...) dprintk(dvb_usb_vp7045_debug,0x01,args) #define deb_info(args...) dprintk(dvb_usb_vp7045_debug,0x01,args)
#define deb_xfer(args...) dprintk(dvb_usb_vp7045_debug,0x02,args) #define deb_xfer(args...) dprintk(dvb_usb_vp7045_debug,0x02,args)
#define deb_rc(args...) dprintk(dvb_usb_vp7045_debug,0x04,args) #define deb_rc(args...) dprintk(dvb_usb_vp7045_debug,0x04,args)
...@@ -219,7 +222,8 @@ static struct dvb_usb_device_properties vp7045_properties; ...@@ -219,7 +222,8 @@ static struct dvb_usb_device_properties vp7045_properties;
static int vp7045_usb_probe(struct usb_interface *intf, static int vp7045_usb_probe(struct usb_interface *intf,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
return dvb_usb_device_init(intf,&vp7045_properties,THIS_MODULE,NULL); return dvb_usb_device_init(intf, &vp7045_properties,
THIS_MODULE, NULL, adapter_nr);
} }
static struct usb_device_id vp7045_usb_table [] = { static struct usb_device_id vp7045_usb_table [] = {
......
...@@ -39,6 +39,8 @@ ...@@ -39,6 +39,8 @@
#include "dvbdev.h" #include "dvbdev.h"
#include "tda1004x.h" #include "tda1004x.h"
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
#define DRIVER_NAME "pluto2" #define DRIVER_NAME "pluto2"
#define REG_PIDn(n) ((n) << 2) /* PID n pattern registers */ #define REG_PIDn(n) ((n) << 2) /* PID n pattern registers */
...@@ -662,7 +664,8 @@ static int __devinit pluto2_probe(struct pci_dev *pdev, ...@@ -662,7 +664,8 @@ static int __devinit pluto2_probe(struct pci_dev *pdev,
goto err_pluto_hw_exit; goto err_pluto_hw_exit;
/* dvb */ /* dvb */
ret = dvb_register_adapter(&pluto->dvb_adapter, DRIVER_NAME, THIS_MODULE, &pdev->dev); ret = dvb_register_adapter(&pluto->dvb_adapter, DRIVER_NAME,
THIS_MODULE, &pdev->dev, adapter_nr);
if (ret < 0) if (ret < 0)
goto err_i2c_del_adapter; goto err_i2c_del_adapter;
......
...@@ -112,6 +112,8 @@ MODULE_PARM_DESC(wss_cfg_16_9, "WSS 16:9 - default 0x0007 - bit 15: disable, 14: ...@@ -112,6 +112,8 @@ MODULE_PARM_DESC(wss_cfg_16_9, "WSS 16:9 - default 0x0007 - bit 15: disable, 14:
module_param(tv_standard, int, 0444); module_param(tv_standard, int, 0444);
MODULE_PARM_DESC(tv_standard, "TV standard: 0 PAL (default), 1 NTSC"); MODULE_PARM_DESC(tv_standard, "TV standard: 0 PAL (default), 1 NTSC");
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
static void restart_feeds(struct av7110 *av7110); static void restart_feeds(struct av7110 *av7110);
static int av7110_num; static int av7110_num;
...@@ -2461,7 +2463,7 @@ static int __devinit av7110_attach(struct saa7146_dev* dev, ...@@ -2461,7 +2463,7 @@ static int __devinit av7110_attach(struct saa7146_dev* dev,
goto err_kfree_0; goto err_kfree_0;
ret = dvb_register_adapter(&av7110->dvb_adapter, av7110->card_name, ret = dvb_register_adapter(&av7110->dvb_adapter, av7110->card_name,
THIS_MODULE, &dev->pci->dev); THIS_MODULE, &dev->pci->dev, adapter_nr);
if (ret < 0) if (ret < 0)
goto err_put_firmware_1; goto err_put_firmware_1;
......
...@@ -57,6 +57,8 @@ module_param_named(bufsize, dma_buffer_size, int, 0444); ...@@ -57,6 +57,8 @@ module_param_named(bufsize, dma_buffer_size, int, 0444);
MODULE_PARM_DESC(debug, "Turn on/off budget debugging (default:off)."); MODULE_PARM_DESC(debug, "Turn on/off budget debugging (default:off).");
MODULE_PARM_DESC(bufsize, "DMA buffer size in KB, default: 188, min: 188, max: 1410 (Activy: 564)"); MODULE_PARM_DESC(bufsize, "DMA buffer size in KB, default: 188, min: 188, max: 1410 (Activy: 564)");
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
/**************************************************************************** /****************************************************************************
* TT budget / WinTV Nova * TT budget / WinTV Nova
****************************************************************************/ ****************************************************************************/
...@@ -471,9 +473,10 @@ int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev, ...@@ -471,9 +473,10 @@ int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev,
budget->buffer_width, budget->buffer_height); budget->buffer_width, budget->buffer_height);
printk("%s: dma buffer size %u\n", budget->dev->name, budget->buffer_size); printk("%s: dma buffer size %u\n", budget->dev->name, budget->buffer_size);
if ((ret = dvb_register_adapter(&budget->dvb_adapter, budget->card->name, owner, &budget->dev->pci->dev)) < 0) { ret = dvb_register_adapter(&budget->dvb_adapter, budget->card->name,
owner, &budget->dev->pci->dev, adapter_nr);
if (ret < 0)
return ret; return ret;
}
/* set dd1 stream a & b */ /* set dd1 stream a & b */
saa7146_write(dev, DD1_STREAM_B, 0x00000000); saa7146_write(dev, DD1_STREAM_B, 0x00000000);
......
...@@ -56,10 +56,11 @@ ...@@ -56,10 +56,11 @@
*/ */
static int debug; static int debug;
module_param(debug, int, 0644); module_param(debug, int, 0644);
MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off)."); MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
#define dprintk(x...) do { if (debug) printk(KERN_DEBUG x); } while (0) #define dprintk(x...) do { if (debug) printk(KERN_DEBUG x); } while (0)
#define ISO_BUF_COUNT 4 #define ISO_BUF_COUNT 4
...@@ -1669,7 +1670,10 @@ static int ttusb_probe(struct usb_interface *intf, const struct usb_device_id *i ...@@ -1669,7 +1670,10 @@ static int ttusb_probe(struct usb_interface *intf, const struct usb_device_id *i
mutex_unlock(&ttusb->semi2c); mutex_unlock(&ttusb->semi2c);
if ((result = dvb_register_adapter(&ttusb->adapter, "Technotrend/Hauppauge Nova-USB", THIS_MODULE, &udev->dev)) < 0) { result = dvb_register_adapter(&ttusb->adapter,
"Technotrend/Hauppauge Nova-USB",
THIS_MODULE, &udev->dev, adapter_nr);
if (result < 0) {
ttusb_free_iso_urbs(ttusb); ttusb_free_iso_urbs(ttusb);
kfree(ttusb); kfree(ttusb);
return result; return result;
......
...@@ -52,6 +52,8 @@ MODULE_PARM_DESC(output_pva, "Output PVA from dvr device (default:off)"); ...@@ -52,6 +52,8 @@ MODULE_PARM_DESC(output_pva, "Output PVA from dvr device (default:off)");
module_param(enable_rc, int, 0644); module_param(enable_rc, int, 0644);
MODULE_PARM_DESC(enable_rc, "Turn on/off IR remote control(default: off)"); MODULE_PARM_DESC(enable_rc, "Turn on/off IR remote control(default: off)");
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
#define dprintk if (debug) printk #define dprintk if (debug) printk
#define DRIVER_NAME "TechnoTrend/Hauppauge DEC USB" #define DRIVER_NAME "TechnoTrend/Hauppauge DEC USB"
...@@ -1437,7 +1439,9 @@ static int ttusb_dec_init_dvb(struct ttusb_dec *dec) ...@@ -1437,7 +1439,9 @@ static int ttusb_dec_init_dvb(struct ttusb_dec *dec)
dprintk("%s\n", __func__); dprintk("%s\n", __func__);
if ((result = dvb_register_adapter(&dec->adapter, if ((result = dvb_register_adapter(&dec->adapter,
dec->model_name, THIS_MODULE, &dec->udev->dev)) < 0) { dec->model_name, THIS_MODULE,
&dec->udev->dev,
adapter_nr)) < 0) {
printk("%s: dvb_register_adapter failed: error %d\n", printk("%s: dvb_register_adapter failed: error %d\n",
__func__, result); __func__, result);
......
...@@ -54,6 +54,8 @@ static unsigned int alt_tuner; ...@@ -54,6 +54,8 @@ static unsigned int alt_tuner;
module_param(alt_tuner, int, 0644); module_param(alt_tuner, int, 0644);
MODULE_PARM_DESC(alt_tuner, "Enable alternate tuner configuration"); MODULE_PARM_DESC(alt_tuner, "Enable alternate tuner configuration");
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
/* ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ */
static int dvb_buf_setup(struct videobuf_queue *q, static int dvb_buf_setup(struct videobuf_queue *q,
...@@ -333,7 +335,7 @@ static int dvb_register(struct cx23885_tsport *port) ...@@ -333,7 +335,7 @@ static int dvb_register(struct cx23885_tsport *port)
/* register everything */ /* register everything */
return videobuf_dvb_register(&port->dvb, THIS_MODULE, port, return videobuf_dvb_register(&port->dvb, THIS_MODULE, port,
&dev->pci->dev); &dev->pci->dev, adapter_nr);
} }
int cx23885_dvb_register(struct cx23885_tsport *port) int cx23885_dvb_register(struct cx23885_tsport *port)
......
...@@ -58,6 +58,8 @@ static unsigned int debug; ...@@ -58,6 +58,8 @@ static unsigned int debug;
module_param(debug, int, 0644); module_param(debug, int, 0644);
MODULE_PARM_DESC(debug,"enable debug messages [dvb]"); MODULE_PARM_DESC(debug,"enable debug messages [dvb]");
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
#define dprintk(level,fmt, arg...) if (debug >= level) \ #define dprintk(level,fmt, arg...) if (debug >= level) \
printk(KERN_DEBUG "%s/2-dvb: " fmt, core->name, ## arg) printk(KERN_DEBUG "%s/2-dvb: " fmt, core->name, ## arg)
...@@ -862,7 +864,8 @@ static int dvb_register(struct cx8802_dev *dev) ...@@ -862,7 +864,8 @@ static int dvb_register(struct cx8802_dev *dev)
cx88_call_i2c_clients (dev->core, TUNER_SET_STANDBY, NULL); cx88_call_i2c_clients (dev->core, TUNER_SET_STANDBY, NULL);
/* register everything */ /* register everything */
return videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev, &dev->pci->dev); return videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev,
&dev->pci->dev, adapter_nr);
} }
/* ----------------------------------------------------------- */ /* ----------------------------------------------------------- */
......
...@@ -65,6 +65,8 @@ static int debug; ...@@ -65,6 +65,8 @@ static int debug;
module_param(debug, int, 0644); module_param(debug, int, 0644);
MODULE_PARM_DESC(debug, "Turn on/off module debugging (default:off)."); MODULE_PARM_DESC(debug, "Turn on/off module debugging (default:off).");
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
#define dprintk(fmt, arg...) do { if (debug) \ #define dprintk(fmt, arg...) do { if (debug) \
printk(KERN_DEBUG "%s/dvb: " fmt, dev->name , ## arg); } while(0) printk(KERN_DEBUG "%s/dvb: " fmt, dev->name , ## arg); } while(0)
...@@ -1257,7 +1259,8 @@ static int dvb_init(struct saa7134_dev *dev) ...@@ -1257,7 +1259,8 @@ static int dvb_init(struct saa7134_dev *dev)
} }
/* register everything else */ /* register everything else */
ret = videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev, &dev->pci->dev); ret = videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev, &dev->pci->dev,
adapter_nr);
/* this sequence is necessary to make the tda1004x load its firmware /* this sequence is necessary to make the tda1004x load its firmware
* and to enter analog mode of hybrid boards * and to enter analog mode of hybrid boards
......
...@@ -138,14 +138,16 @@ static int videobuf_dvb_stop_feed(struct dvb_demux_feed *feed) ...@@ -138,14 +138,16 @@ static int videobuf_dvb_stop_feed(struct dvb_demux_feed *feed)
int videobuf_dvb_register(struct videobuf_dvb *dvb, int videobuf_dvb_register(struct videobuf_dvb *dvb,
struct module *module, struct module *module,
void *adapter_priv, void *adapter_priv,
struct device *device) struct device *device,
short *adapter_nr)
{ {
int result; int result;
mutex_init(&dvb->lock); mutex_init(&dvb->lock);
/* register adapter */ /* register adapter */
result = dvb_register_adapter(&dvb->adapter, dvb->name, module, device); result = dvb_register_adapter(&dvb->adapter, dvb->name, module, device,
adapter_nr);
if (result < 0) { if (result < 0) {
printk(KERN_WARNING "%s: dvb_register_adapter failed (errno = %d)\n", printk(KERN_WARNING "%s: dvb_register_adapter failed (errno = %d)\n",
dvb->name, result); dvb->name, result);
......
...@@ -27,7 +27,8 @@ struct videobuf_dvb { ...@@ -27,7 +27,8 @@ struct videobuf_dvb {
int videobuf_dvb_register(struct videobuf_dvb *dvb, int videobuf_dvb_register(struct videobuf_dvb *dvb,
struct module *module, struct module *module,
void *adapter_priv, void *adapter_priv,
struct device *device); struct device *device,
short *adapter_nr);
void videobuf_dvb_unregister(struct videobuf_dvb *dvb); void videobuf_dvb_unregister(struct videobuf_dvb *dvb);
/* /*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册