rendered paste bodydiff -r 595fe1ec7511 linux/drivers/media/dvb/b2c2/flexcop.c--- a/linux/drivers/media/dvb/b2c2/flexcop.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/b2c2/flexcop.c Mon Jun 23 15:07:10 2008 -0700@@ -49,8 +49,6 @@ MODULE_PARM_DESC(debug, "set debug level MODULE_PARM_DESC(debug, "set debug level (1=info,2=tuner,4=i2c,8=ts,16=sram,32=reg (|-able))." DEBSTATUS); #undef DEBSTATUS -DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);- /* global zero for ibi values */ flexcop_ibi_value ibi_zero; @@ -68,10 +66,8 @@ static int flexcop_dvb_stop_feed(struct static int flexcop_dvb_init(struct flexcop_device *fc) {- int ret = dvb_register_adapter(&fc->dvb_adapter,- "FlexCop Digital TV device", fc->owner,- fc->dev, adapter_nr);- if (ret < 0) {+ int ret;+ if ((ret = dvb_register_adapter(&fc->dvb_adapter,"FlexCop Digital TV device",fc->owner,fc->dev)) < 0) { err("error registering DVB adapter"); return ret; }diff -r 595fe1ec7511 linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c--- a/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/bt8xx/dvb-bt8xx.c Mon Jun 23 15:07:10 2008 -0700@@ -40,8 +40,6 @@ static int debug; module_param(debug, int, 0644); MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); #define dprintk( args... ) \ do { \@@ -720,10 +718,7 @@ static int __devinit dvb_bt8xx_load_card { int result; - result = dvb_register_adapter(&card->dvb_adapter, card->card_name,- THIS_MODULE, &card->bt->dev->dev,- adapter_nr);- if (result < 0) {+ if ((result = dvb_register_adapter(&card->dvb_adapter, card->card_name, THIS_MODULE, &card->bt->dev->dev)) < 0) { printk("dvb_bt8xx: dvb_register_adapter failed (errno = %d)\n", result); return result; }diff -r 595fe1ec7511 linux/drivers/media/dvb/cinergyT2/cinergyT2.c--- a/linux/drivers/media/dvb/cinergyT2/cinergyT2.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/cinergyT2/cinergyT2.c Mon Jun 23 15:07:10 2008 -0700@@ -60,8 +60,6 @@ static int debug; static int debug; module_param_named(debug, debug, int, 0644); MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,15) #define dprintk(level, args...) \@@ -1008,10 +1006,7 @@ static int cinergyt2_probe (struct usb_i return -ENOMEM; } - err = dvb_register_adapter(&cinergyt2->adapter, DRIVER_NAME,- THIS_MODULE, &cinergyt2->udev->dev,- adapter_nr);- if (err < 0) {+ if ((err = dvb_register_adapter(&cinergyt2->adapter, DRIVER_NAME, THIS_MODULE, &cinergyt2->udev->dev)) < 0) { kfree(cinergyt2); return err; }diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-core/dvb_frontend.c--- a/linux/drivers/media/dvb/dvb-core/dvb_frontend.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-core/dvb_frontend.c Mon Jun 23 15:07:10 2008 -0700@@ -101,6 +101,7 @@ struct dvb_frontend_private { /* thread/frontend values */ struct dvb_device *dvbdev; struct dvb_frontend_parameters parameters;+ struct dvb_frontend_parameters_new parameters_new; struct dvb_fe_events events; struct semaphore sem; struct list_head list_head;@@ -116,6 +117,8 @@ struct dvb_frontend_private { int tone; int voltage; + int current_standard_set;+ fe_type_t current_standard; /* swzigzag values */ unsigned int state; unsigned int bending;@@ -267,13 +270,23 @@ static int dvb_frontend_swzigzag_autotun int autoinversion; int ready = 0; struct dvb_frontend_private *fepriv = fe->frontend_priv;- int original_inversion = fepriv->parameters.inversion;- u32 original_frequency = fepriv->parameters.frequency;+ int original_inversion;+ u32 original_frequency;+ + if (fepriv->current_standard_set) {+ original_inversion = fepriv->parameters_new.inversion;+ original_frequency = fepriv->parameters_new.frequency;+ } else {+ original_inversion = fepriv->parameters.inversion;+ original_frequency = fepriv->parameters.frequency;+ } /* are we using autoinversion? */ autoinversion = ((!(fe->ops.info.caps & FE_CAN_INVERSION_AUTO)) &&- (fepriv->parameters.inversion == INVERSION_AUTO));-+ ((fepriv->current_standard_set &&+ fepriv->parameters_new.inversion == INVERSION_AUTO) ||+ (! fepriv->current_standard_set &&+ fepriv->parameters.inversion == INVERSION_AUTO))); /* setup parameters correctly */ while(!ready) { /* calculate the lnb_drift */@@ -338,14 +351,24 @@ static int dvb_frontend_swzigzag_autotun fepriv->auto_step, fepriv->auto_sub_step, fepriv->started_auto_step); /* set the frontend itself */- fepriv->parameters.frequency += fepriv->lnb_drift;- if (autoinversion)- fepriv->parameters.inversion = fepriv->inversion;- if (fe->ops.set_frontend)- fe->ops.set_frontend(fe, &fepriv->parameters);-- fepriv->parameters.frequency = original_frequency;- fepriv->parameters.inversion = original_inversion;+ if (fepriv->current_standard_set) {+ fepriv->parameters_new.frequency += fepriv->lnb_drift;+ if (autoinversion)+ fepriv->parameters_new.inversion = fepriv->inversion;+ if (fe->ops.set_frontend2)+ fe->ops.set_frontend2(fe, &fepriv->parameters_new);+ fepriv->parameters_new.frequency = original_frequency;+ fepriv->parameters_new.inversion = original_inversion;+ } else {+ fepriv->parameters.frequency += fepriv->lnb_drift;+ if (autoinversion)+ fepriv->parameters.inversion = fepriv->inversion;+ if (fe->ops.set_frontend)+ fe->ops.set_frontend(fe, &fepriv->parameters);+ + fepriv->parameters.frequency = original_frequency;+ fepriv->parameters.inversion = original_inversion;+ } fepriv->auto_sub_step++; return 0;@@ -353,7 +376,7 @@ static int dvb_frontend_swzigzag_autotun static void dvb_frontend_swzigzag(struct dvb_frontend *fe) {- fe_status_t s = 0;+ fe_status_t s; struct dvb_frontend_private *fepriv = fe->frontend_priv; /* if we've got no parameters, just keep idling */@@ -366,8 +389,13 @@ static void dvb_frontend_swzigzag(struct /* in SCAN mode, we just set the frontend when asked and leave it alone */ if (fepriv->tune_mode_flags & FE_TUNE_MODE_ONESHOT) { if (fepriv->state & FESTATE_RETUNE) {- if (fe->ops.set_frontend)- fe->ops.set_frontend(fe, &fepriv->parameters);+ if (fepriv->current_standard_set) {+ if (fe->ops.set_frontend2)+ fe->ops.set_frontend2(fe, &fepriv->parameters_new);+ } else {+ if (fe->ops.set_frontend)+ fe->ops.set_frontend(fe, &fepriv->parameters);+ } fepriv->state = FESTATE_TUNED; } fepriv->delay = 3*HZ;@@ -987,18 +1015,21 @@ static int dvb_frontend_ioctl(struct ino /* default values */ switch(fe->ops.info.type) { case FE_QPSK:+ case FE_DVB_S: fepriv->min_delay = HZ/20; fepriv->step_size = fepriv->parameters.u.qpsk.symbol_rate / 16000; fepriv->max_drift = fepriv->parameters.u.qpsk.symbol_rate / 2000; break; case FE_QAM:+ case FE_DVB_C: fepriv->min_delay = HZ/20; fepriv->step_size = 0; /* no zigzag */ fepriv->max_drift = 0; break; case FE_OFDM:+ case FE_DVB_T: fepriv->min_delay = HZ/20; fepriv->step_size = fe->ops.info.frequency_stepsize * 2; fepriv->max_drift = (fe->ops.info.frequency_stepsize * 2) + 1;@@ -1007,6 +1038,9 @@ static int dvb_frontend_ioctl(struct ino fepriv->min_delay = HZ/20; fepriv->step_size = 0; fepriv->max_drift = 0;+ break;+ case FE_DVB_S2:+ printk("dvb-core: ERROR FE_DVB_S2 is handled via FE_SET_FRONTEND2.\n"); break; } }@@ -1020,6 +1054,101 @@ static int dvb_frontend_ioctl(struct ino err = 0; break; }+ case FE_SET_FRONTEND2: {+ struct dvb_frontend_tune_settings fetunesettings;+ struct dvb_frontend_parameters_new *castedparg;++ if (!fepriv->current_standard_set) {+ err = -EINVAL;+ break;+ }++ castedparg = (struct dvb_frontend_parameters_new *)parg;+ memcpy (&fepriv->parameters_new, parg,+ sizeof (struct dvb_frontend_parameters_new));++ memset(&fetunesettings, 0, sizeof(struct dvb_frontend_tune_settings));++ /* be sure struct union pointer is set - even if it is NULL */+ fetunesettings.parameters_new.u = castedparg->u;++ /* force auto frequency inversion if requested */+ if (dvb_force_auto_inversion) {+ fepriv->parameters_new.inversion = INVERSION_AUTO;+ fetunesettings.parameters_new.inversion = INVERSION_AUTO;+ }+ if (fe->ops.info.type == FE_DVB_T || fe->ops.info.type == FE_OFDM) {+ /* without hierachical coding code_rate_LP is irrelevant,+ * so we tolerate the otherwise invalid FEC_NONE setting */+ if (fepriv->parameters_new.u.ofdm.hierarchy_information == HIERARCHY_NONE &&+ fepriv->parameters_new.u.ofdm.code_rate_LP == FEC_NONE)+ fepriv->parameters_new.u.ofdm.code_rate_LP = FEC_AUTO;+ }++ /* get frontend-specific tuning settings */+ if (fe->ops.get_tune_settings && (fe->ops.get_tune_settings(fe, &fetunesettings) == 0)) {+ fepriv->min_delay = (fetunesettings.min_delay_ms * HZ) / 1000;+ fepriv->max_drift = fetunesettings.max_drift;+ fepriv->step_size = fetunesettings.step_size;+ } else {+ /* default values */+ switch(fe->ops.info.type) {+ case FE_DVB_S:+ case FE_QPSK:+ if (fepriv->current_standard != FE_DVB_S) {+ err = -EINVAL;+ break;+ }+ fepriv->min_delay = HZ/20;+ fepriv->step_size = fepriv->parameters_new.u.qpsk.symbol_rate / 16000;+ fepriv->max_drift = fepriv->parameters_new.u.qpsk.symbol_rate / 2000;+ break;+ case FE_DVB_C:+ case FE_QAM:+ if (fepriv->current_standard != FE_DVB_C) {+ err = -EINVAL;+ break;+ }+ fepriv->min_delay = HZ/20;+ fepriv->step_size = 0; /* no zigzag */+ fepriv->max_drift = 0;+ break;+ case FE_DVB_T:+ case FE_OFDM:+ if (fepriv->current_standard != FE_DVB_T) {+ err = -EINVAL;+ break;+ }+ fepriv->min_delay = HZ/20;+ fepriv->step_size = fe->ops.info.frequency_stepsize * 2;+ fepriv->max_drift = (fe->ops.info.frequency_stepsize * 2) + 1;+ break;+ case FE_ATSC:+ printk("dvb-core: FE_ATSC not handled yet.\n");+ break;+ case FE_DVB_S2:+ if (fepriv->current_standard != FE_DVB_S2) {+ err = -EINVAL;+ break;+ }+ fepriv->min_delay = HZ/20;+ fepriv->step_size = fepriv->parameters_new.u.qpsk2.symbol_rate / 16000;+ fepriv->max_drift = fepriv->parameters_new.u.qpsk2.symbol_rate / 2000;+ break;++ }+ }+ if (dvb_override_tune_delay > 0)+ fepriv->min_delay = (dvb_override_tune_delay * HZ) / 1000;++ fepriv->state = FESTATE_RETUNE;+ dvb_frontend_wakeup(fe);+ dvb_frontend_add_event(fe, 0);+ fepriv->status = 0;+ err = 0;+ /* if previously used delete old tuning params */+ break;+ } case FE_GET_EVENT: err = dvb_frontend_get_event (fe, parg, file->f_flags);@@ -1031,6 +1160,48 @@ static int dvb_frontend_ioctl(struct ino err = fe->ops.get_frontend(fe, (struct dvb_frontend_parameters*) parg); } break;+ case FE_GET_FRONTEND2:+ if (!fepriv->current_standard) {+ err = -EINVAL;+ break;+ }+ if (fe->ops.get_frontend2) {+ memcpy (parg, &fepriv->parameters_new, sizeof (struct dvb_frontend_parameters_new));+ err = fe->ops.get_frontend2(fe, (struct dvb_frontend_parameters_new*) parg);+ }+ break;++ case FE_SET_STANDARD:+ /*+ * current_standard_set and current_standard are reset+ * this prevents user from ignoring return value and+ * if current_standard would be kept as fallback, users may+ * supply corrupted tuning data.+ * if the new standard isn't supported no FE_SET_FRONTEND2+ * is possible. it will return EINVAL+ */+ fepriv->current_standard_set = 0;+ fepriv->current_standard = 0;+ {+ fe_type_t fetype = (fe_type_t) parg;+ if (fetype != FE_DVB_S && fetype != FE_DVB_C && fetype != FE_DVB_T && fetype != FE_DVB_S2 && fetype != FE_ATSC) {+ err = -EINVAL;+ } else if (fe->ops.set_standard) {+ err = fe->ops.set_standard(fe, fetype);+ if (!err) {+ fepriv->current_standard_set = 1;+ fepriv->current_standard = fetype;+ }+ }+ }+ break;++ case FE_GET_EXTENDED_INFO: {+ struct dvb_fe_caps_extended* info = parg;+ memcpy(info, &fe->ops.extended_info, sizeof(struct dvb_fe_caps_extended));+ err = 0;+ break;+ } case FE_SET_FRONTEND_TUNE_MODE: fepriv->tune_mode_flags = (unsigned long) parg;@@ -1080,7 +1251,10 @@ static int dvb_frontend_open(struct inod fepriv->tune_mode_flags &= ~FE_TUNE_MODE_ONESHOT; fepriv->tone = -1; fepriv->voltage = -1;-+ fepriv->current_standard_set = 0;+ fepriv->current_standard = 0;+ if (fe->ops.set_standard)+ fe->ops.set_standard(fe, 0); ret = dvb_frontend_start (fe); if (ret) goto err2;diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-core/dvb_frontend.h--- a/linux/drivers/media/dvb/dvb-core/dvb_frontend.h Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-core/dvb_frontend.h Mon Jun 23 15:07:10 2008 -0700@@ -48,6 +48,7 @@ struct dvb_frontend_tune_settings { int step_size; int max_drift; struct dvb_frontend_parameters parameters;+ struct dvb_frontend_parameters_new parameters_new; }; struct dvb_frontend;@@ -128,6 +129,7 @@ struct dvb_frontend_ops { struct dvb_frontend_ops { struct dvb_frontend_info info;+ struct dvb_fe_caps_extended extended_info; void (*release)(struct dvb_frontend* fe); void (*release_sec)(struct dvb_frontend* fe);@@ -167,6 +169,10 @@ struct dvb_frontend_ops { int (*enable_high_lnb_voltage)(struct dvb_frontend* fe, long arg); int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd); int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);+ int (*set_standard)(struct dvb_frontend* fe, fe_type_t type);+ int (*get_extended_info)(struct dvb_frontend* fe, struct dvb_fe_caps_extended* extendedinfo);+ int (*set_frontend2)(struct dvb_frontend* fe, struct dvb_frontend_parameters_new* params);+ int (*get_frontend2)(struct dvb_frontend* fe, struct dvb_frontend_parameters_new* params); int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire); struct dvb_tuner_ops tuner_ops;diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-core/dvbdev.c--- a/linux/drivers/media/dvb/dvb-core/dvbdev.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-core/dvbdev.c Mon Jun 23 15:07:10 2008 -0700@@ -52,6 +52,7 @@ static const char * const dnames[] = { "net", "osd" }; +#define DVB_MAX_ADAPTERS 8 #define DVB_MAX_IDS 4 #define nums2minor(num,type,id) ((num << 6) | (id << 4) | type) #define MAX_DVB_MINORS (DVB_MAX_ADAPTERS*64)@@ -276,25 +277,18 @@ void dvb_unregister_device(struct dvb_de } 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) { int num = 0; while (num < DVB_MAX_ADAPTERS) {- if (dvbdev_check_free_adapter_num(num))- return num;+ struct dvb_adapter *adap;+ list_for_each_entry(adap, &dvb_adapter_list, list_head)+ if (adap->num == num)+ goto skip;+ return num;+skip: num++; } @@ -302,28 +296,13 @@ static int dvbdev_get_free_adapter_num ( } -int dvb_register_adapter(struct dvb_adapter *adap, const char *name,- struct module *module, struct device *device,- short *adapter_nums)+int dvb_register_adapter(struct dvb_adapter *adap, const char *name, struct module *module, struct device *device) {- int i, num;+ int num; mutex_lock(&dvbdev_register_lock); - 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) {+ if ((num = dvbdev_get_free_adapter_num ()) < 0) { mutex_unlock(&dvbdev_register_lock); return -ENFILE; }diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-core/dvbdev.h--- a/linux/drivers/media/dvb/dvb-core/dvbdev.h Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-core/dvbdev.h Mon Jun 23 15:07:10 2008 -0700@@ -31,10 +31,6 @@ #define DVB_MAJOR 212 -#define DVB_MAX_ADAPTERS 8--#define DVB_UNSET (-1)- #define DVB_DEVICE_VIDEO 0 #define DVB_DEVICE_AUDIO 1 #define DVB_DEVICE_SEC 2@@ -45,11 +41,6 @@ #define DVB_DEVICE_NET 7 #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 { int num;@@ -87,9 +78,7 @@ struct dvb_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_register_adapter (struct dvb_adapter *adap, const char *name, struct module *module, struct device *device); extern int dvb_unregister_adapter (struct dvb_adapter *adap); extern int dvb_register_device (struct dvb_adapter *adap,diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/Kconfig--- a/linux/drivers/media/dvb/dvb-usb/Kconfig Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/Kconfig Mon Jun 23 15:07:10 2008 -0700@@ -183,13 +183,11 @@ config DVB_USB_VP702X DVB-S USB2.0 receivers. config DVB_USB_GP8PSK- tristate "GENPIX 8PSK->USB module support"+ tristate "GENPIX DVB-s support" depends on DVB_USB help Say Y here to support the- GENPIX 8psk module-- DVB-S USB2.0 receivers.+ GENPIX DVB-s USB2.0 receiver. config DVB_USB_NOVA_T_USB2 tristate "Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 support"diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/a800.c--- a/linux/drivers/media/dvb/dvb-usb/a800.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/a800.c Mon Jun 23 15:07:10 2008 -0700@@ -18,9 +18,6 @@ static int debug; static int debug; module_param(debug, int, 0644); 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) static int a800_power_ctrl(struct dvb_usb_device *d, int onoff)@@ -97,8 +94,7 @@ static int a800_probe(struct usb_interfa static int a800_probe(struct usb_interface *intf, const struct usb_device_id *id) {- return dvb_usb_device_init(intf, &a800_properties,- THIS_MODULE, NULL, adapter_nr);+ return dvb_usb_device_init(intf,&a800_properties,THIS_MODULE,NULL); } /* do not change the order of the ID table */diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/af9005.c--- a/linux/drivers/media/dvb/dvb-usb/af9005.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/af9005.c Mon Jun 23 15:07:10 2008 -0700@@ -38,8 +38,6 @@ int dvb_usb_af9005_dump_eeprom = 0; int dvb_usb_af9005_dump_eeprom = 0; module_param_named(dump_eeprom, dvb_usb_af9005_dump_eeprom, int, 0); MODULE_PARM_DESC(dump_eeprom, "dump contents of the eeprom.");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); /* remote control decoder */ int (*rc_decode) (struct dvb_usb_device * d, u8 * data, int len, u32 * event,@@ -1022,8 +1020,7 @@ static int af9005_usb_probe(struct usb_i static int af9005_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) {- return dvb_usb_device_init(intf, &af9005_properties,- THIS_MODULE, NULL, adapter_nr);+ return dvb_usb_device_init(intf, &af9005_properties, THIS_MODULE, NULL); } static struct usb_device_id af9005_usb_table[] = {diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/cxusb.c--- a/linux/drivers/media/dvb/dvb-usb/cxusb.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/cxusb.c Mon Jun 23 15:07:10 2008 -0700@@ -39,9 +39,6 @@ static int dvb_usb_cxusb_debug; static int dvb_usb_cxusb_debug; 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);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);- #define deb_info(args...) dprintk(dvb_usb_cxusb_debug,0x01,args) #define deb_i2c(args...) if (d->udev->descriptor.idVendor == USB_VID_MEDION) \ dprintk(dvb_usb_cxusb_debug,0x01,args)@@ -494,14 +491,14 @@ static int dvico_bluebird_xc2028_callbac switch (command) { case XC2028_TUNER_RESET:- deb_info("%s: XC2028_TUNER_RESET %d\n", __func__, arg);+ deb_info("%s: XC2028_TUNER_RESET %d\n", __FUNCTION__, arg); cxusb_bluebird_gpio_pulse(d, 0x01, 1); break; case XC2028_RESET_CLK:- deb_info("%s: XC2028_RESET_CLK %d\n", __func__, arg);+ deb_info("%s: XC2028_RESET_CLK %d\n", __FUNCTION__, arg); break; default:- deb_info("%s: unknown command %d, arg %d\n", __func__,+ deb_info("%s: unknown command %d, arg %d\n", __FUNCTION__, command, arg); return -EINVAL; }@@ -725,24 +722,16 @@ static int cxusb_probe(struct usb_interf static int cxusb_probe(struct usb_interface *intf, const struct usb_device_id *id) {- if (0 == dvb_usb_device_init(intf, &cxusb_medion_properties,- THIS_MODULE, NULL, adapter_nr) ||- 0 == dvb_usb_device_init(intf, &cxusb_bluebird_lgh064f_properties,- THIS_MODULE, NULL, adapter_nr) ||- 0 == dvb_usb_device_init(intf, &cxusb_bluebird_dee1601_properties,- THIS_MODULE, NULL, adapter_nr) ||- 0 == dvb_usb_device_init(intf, &cxusb_bluebird_lgz201_properties,- 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))+ if (dvb_usb_device_init(intf,&cxusb_medion_properties,THIS_MODULE,NULL) == 0 ||+ dvb_usb_device_init(intf,&cxusb_bluebird_lgh064f_properties,THIS_MODULE,NULL) == 0 ||+ dvb_usb_device_init(intf,&cxusb_bluebird_dee1601_properties,THIS_MODULE,NULL) == 0 ||+ dvb_usb_device_init(intf,&cxusb_bluebird_lgz201_properties,THIS_MODULE,NULL) == 0 ||+ dvb_usb_device_init(intf,&cxusb_bluebird_dtt7579_properties,THIS_MODULE,NULL) == 0 ||+ dvb_usb_device_init(intf,&cxusb_bluebird_dualdig4_properties,THIS_MODULE,NULL) == 0 ||+ dvb_usb_device_init(intf,&cxusb_bluebird_nano2_properties,THIS_MODULE,NULL) == 0 ||+ dvb_usb_device_init(intf,&cxusb_bluebird_nano2_needsfirmware_properties,THIS_MODULE,NULL) == 0) { return 0;+ } return -EINVAL; }diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dib0700_core.c--- a/linux/drivers/media/dvb/dvb-usb/dib0700_core.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dib0700_core.c Mon Jun 23 15:07:10 2008 -0700@@ -16,8 +16,6 @@ int dvb_usb_dib0700_ir_proto = 1; int dvb_usb_dib0700_ir_proto = 1; 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).");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); /* expecting rx buffer: request data[0] data[1] ... data[2] */ static int dib0700_ctrl_wr(struct dvb_usb_device *d, u8 *tx, u8 txlen)@@ -291,8 +289,7 @@ static int dib0700_probe(struct usb_inte #endif for (i = 0; i < dib0700_device_count; i++)- if (dvb_usb_device_init(intf, &dib0700_devices[i], THIS_MODULE,- &dev, adapter_nr) == 0)+ if (dvb_usb_device_init(intf, &dib0700_devices[i], THIS_MODULE, &dev) == 0) { dib0700_rc_setup(dev); return 0;diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dibusb-mb.c--- a/linux/drivers/media/dvb/dvb-usb/dibusb-mb.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dibusb-mb.c Mon Jun 23 15:07:10 2008 -0700@@ -13,8 +13,6 @@ * see Documentation/dvb/README.dvb-usb for more information */ #include "dibusb.h"--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); static int dib3000mb_i2c_gate_ctrl(struct dvb_frontend* fe, int enable) {@@ -109,14 +107,10 @@ static int dibusb_probe(struct usb_inter static int dibusb_probe(struct usb_interface *intf, const struct usb_device_id *id) {- if (0 == dvb_usb_device_init(intf, &dibusb1_1_properties,- THIS_MODULE, NULL, adapter_nr) ||- 0 == dvb_usb_device_init(intf, &dibusb1_1_an2235_properties,- 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))+ if (dvb_usb_device_init(intf,&dibusb1_1_properties,THIS_MODULE,NULL) == 0 ||+ dvb_usb_device_init(intf,&dibusb1_1_an2235_properties,THIS_MODULE,NULL) == 0 ||+ dvb_usb_device_init(intf,&dibusb2_0b_properties,THIS_MODULE,NULL) == 0 ||+ dvb_usb_device_init(intf,&artec_t1_usb2_properties,THIS_MODULE,NULL) == 0) return 0; return -EINVAL;diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dibusb-mc.c--- a/linux/drivers/media/dvb/dvb-usb/dibusb-mc.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dibusb-mc.c Mon Jun 23 15:07:10 2008 -0700@@ -14,16 +14,13 @@ */ #include "dibusb.h" -DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);- /* USB Driver stuff */ static struct dvb_usb_device_properties dibusb_mc_properties; static int dibusb_mc_probe(struct usb_interface *intf, const struct usb_device_id *id) {- return dvb_usb_device_init(intf, &dibusb_mc_properties, THIS_MODULE,- NULL, adapter_nr);+ return dvb_usb_device_init(intf,&dibusb_mc_properties,THIS_MODULE,NULL); } /* do not change the order of the ID table */diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/digitv.c--- a/linux/drivers/media/dvb/dvb-usb/digitv.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/digitv.c Mon Jun 23 15:07:10 2008 -0700@@ -20,9 +20,6 @@ static int dvb_usb_digitv_debug; static int dvb_usb_digitv_debug; 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);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);- #define deb_rc(args...) dprintk(dvb_usb_digitv_debug,0x01,args) static int digitv_ctrl_msg(struct dvb_usb_device *d,@@ -259,9 +256,8 @@ static int digitv_probe(struct usb_inter const struct usb_device_id *id) { struct dvb_usb_device *d;- int ret = dvb_usb_device_init(intf, &digitv_properties, THIS_MODULE, &d,- adapter_nr);- if (ret == 0) {+ int ret;+ if ((ret = dvb_usb_device_init(intf,&digitv_properties,THIS_MODULE,&d)) == 0) { u8 b[4] = { 0 }; if (d != NULL) { /* do that only when the firmware is loaded */diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dtt200u.c--- a/linux/drivers/media/dvb/dvb-usb/dtt200u.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dtt200u.c Mon Jun 23 15:07:10 2008 -0700@@ -17,8 +17,6 @@ int dvb_usb_dtt200u_debug; int dvb_usb_dtt200u_debug; 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);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); static int dtt200u_power_ctrl(struct dvb_usb_device *d, int onoff) {@@ -103,16 +101,11 @@ static int dtt200u_usb_probe(struct usb_ static int dtt200u_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) {- if (0 == dvb_usb_device_init(intf, &dtt200u_properties,- THIS_MODULE, NULL, adapter_nr) ||- 0 == dvb_usb_device_init(intf, &wt220u_properties,- THIS_MODULE, NULL, adapter_nr) ||- 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))+ if (dvb_usb_device_init(intf,&dtt200u_properties,THIS_MODULE,NULL) == 0 ||+ dvb_usb_device_init(intf,&wt220u_properties,THIS_MODULE,NULL) == 0 ||+ dvb_usb_device_init(intf,&wt220u_fc_properties,THIS_MODULE,NULL) == 0 ||+ dvb_usb_device_init(intf,&wt220u_zl0353_properties,THIS_MODULE,NULL) == 0 ||+ dvb_usb_device_init(intf,&wt220u_miglia_properties,THIS_MODULE,NULL) == 0) return 0; return -ENODEV;diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dvb-usb-common.h--- a/linux/drivers/media/dvb/dvb-usb/dvb-usb-common.h Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dvb-usb-common.h Mon Jun 23 15:07:10 2008 -0700@@ -40,8 +40,7 @@ extern int dvb_usb_i2c_init(struct dvb_u extern int dvb_usb_i2c_init(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,- short *adapter_nums);+extern int dvb_usb_adapter_dvb_init(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_exit(struct dvb_usb_adapter *adap);diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dvb-usb-dvb.c--- a/linux/drivers/media/dvb/dvb-usb/dvb-usb-dvb.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dvb-usb-dvb.c Mon Jun 23 15:07:10 2008 -0700@@ -77,13 +77,12 @@ static int dvb_usb_stop_feed(struct dvb_ return dvb_usb_ctrl_feed(dvbdmxfeed,0); } -int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap, short *adapter_nums)+int dvb_usb_adapter_dvb_init(struct dvb_usb_adapter *adap) {- int ret = dvb_register_adapter(&adap->dvb_adap, adap->dev->desc->name,- adap->dev->owner, &adap->dev->udev->dev,- adapter_nums);+ int ret; - if (ret < 0) {+ if ((ret = dvb_register_adapter(&adap->dvb_adap, adap->dev->desc->name,+ adap->dev->owner, &adap->dev->udev->dev)) < 0) { deb_info("dvb_register_adapter failed: error %d", ret); goto err; }diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dvb-usb-ids.h--- a/linux/drivers/media/dvb/dvb-usb/dvb-usb-ids.h Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dvb-usb-ids.h Mon Jun 23 15:07:10 2008 -0700@@ -136,6 +136,8 @@ #define USB_PID_HAUPPAUGE_NOVA_TD_STICK 0x9580 #define USB_PID_AVERMEDIA_EXPRESS 0xb568 #define USB_PID_AVERMEDIA_VOLAR 0xa807+#define USB_PID_GENPIX_8PSK_REV_2 0x0202+#define USB_PID_GENPIX_SKYWALKER 0x0203 #define USB_PID_AVERMEDIA_VOLAR_2 0xb808 #define USB_PID_TECHNOTREND_CONNECT_S2400 0x3006 #define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY 0x005a@@ -183,11 +185,8 @@ #define USB_PID_WINFAST_DTV_DONGLE_WARM 0x6026 #define USB_PID_WINFAST_DTV_DONGLE_STK7700P 0x6f00 #define USB_PID_WINFAST_DTV_DONGLE_STK7700P_2 0x6f01-#define USB_PID_GENPIX_8PSK_REV_1_COLD 0x0200-#define USB_PID_GENPIX_8PSK_REV_1_WARM 0x0201-#define USB_PID_GENPIX_8PSK_REV_2 0x0202-#define USB_PID_GENPIX_SKYWALKER_1 0x0203-#define USB_PID_GENPIX_SKYWALKER_CW3K 0x0204+#define USB_PID_GENPIX_8PSK_COLD 0x0200+#define USB_PID_GENPIX_8PSK_WARM 0x0201 #define USB_PID_SIGMATEK_DVB_110 0x6610 #define USB_PID_MSI_DIGI_VOX_MINI_II 0x1513 #define USB_PID_OPERA1_COLD 0x2830diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dvb-usb-init.c--- a/linux/drivers/media/dvb/dvb-usb/dvb-usb-init.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dvb-usb-init.c Mon Jun 23 15:07:10 2008 -0700@@ -26,7 +26,7 @@ module_param_named(force_pid_filter_usag 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)."); -static int dvb_usb_adapter_init(struct dvb_usb_device *d, short *adapter_nrs)+static int dvb_usb_adapter_init(struct dvb_usb_device *d) { struct dvb_usb_adapter *adap; int ret,n;@@ -72,7 +72,7 @@ static int dvb_usb_adapter_init(struct d } if ((ret = dvb_usb_adapter_stream_init(adap)) ||- (ret = dvb_usb_adapter_dvb_init(adap, adapter_nrs)) ||+ (ret = dvb_usb_adapter_dvb_init(adap)) || (ret = dvb_usb_adapter_frontend_init(adap))) { return ret; }@@ -122,7 +122,7 @@ static int dvb_usb_exit(struct dvb_usb_d return 0; } -static int dvb_usb_init(struct dvb_usb_device *d, short *adapter_nums)+static int dvb_usb_init(struct dvb_usb_device *d) { int ret = 0; @@ -143,7 +143,7 @@ static int dvb_usb_init(struct dvb_usb_d dvb_usb_device_power_ctrl(d, 1); if ((ret = dvb_usb_i2c_init(d)) ||- (ret = dvb_usb_adapter_init(d, adapter_nums))) {+ (ret = dvb_usb_adapter_init(d))) { dvb_usb_exit(d); return ret; }@@ -213,10 +213,8 @@ int dvb_usb_device_power_ctrl(struct dvb /* * USB */-int dvb_usb_device_init(struct usb_interface *intf,- struct dvb_usb_device_properties *props,- struct module *owner, struct dvb_usb_device **du,- short *adapter_nums)+int dvb_usb_device_init(struct usb_interface *intf, struct dvb_usb_device_properties+ *props, struct module *owner,struct dvb_usb_device **du) { struct usb_device *udev = interface_to_usbdev(intf); struct dvb_usb_device *d = NULL;@@ -256,7 +254,7 @@ int dvb_usb_device_init(struct usb_inter if (du != NULL) *du = d; - ret = dvb_usb_init(d, adapter_nums);+ ret = dvb_usb_init(d); if (ret == 0) info("%s successfully initialized and connected.",desc->name);diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/dvb-usb.h--- a/linux/drivers/media/dvb/dvb-usb/dvb-usb.h Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/dvb-usb.h Mon Jun 23 15:07:10 2008 -0700@@ -186,6 +186,7 @@ struct dvb_usb_adapter_properties { * @num_device_descs: number of struct dvb_usb_device_description in @devices * @devices: array of struct dvb_usb_device_description compatibles with these * properties.+ * @device_version: called to find out the version number. */ #define MAX_NO_OF_ADAPTER_PER_DEVICE 2 struct dvb_usb_device_properties {@@ -227,6 +228,7 @@ struct dvb_usb_device_properties { int num_device_descs; struct dvb_usb_device_description devices[9];+ int (*device_version) (struct dvb_usb_device *, int *); }; /**@@ -387,10 +389,7 @@ struct dvb_usb_device { void *priv; }; -extern int dvb_usb_device_init(struct usb_interface *,- struct dvb_usb_device_properties *,- struct module *, struct dvb_usb_device **,- short *adapter_nums);+extern int dvb_usb_device_init(struct usb_interface *, struct dvb_usb_device_properties *, struct module *, struct dvb_usb_device **); extern void dvb_usb_device_exit(struct usb_interface *); /* the generic read/write method for device control */diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/gp8psk-fe.c--- a/linux/drivers/media/dvb/dvb-usb/gp8psk-fe.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/gp8psk-fe.c Mon Jun 23 15:07:10 2008 -0700@@ -1,12 +1,12 @@-/* DVB USB compliant Linux driver for the- * - GENPIX 8pks/qpsk/DCII USB2.0 DVB-S module+/* DVB USB compliant Linux driver for these USB 2.0 DVB-S modules+ * - GENPIX 8PSK-to-USB2+ * - GENPIX 8PSK-to-USB2 Rev.2+ * - GENPIX SkyWalker-1 *- * Copyright (C) 2006,2007 Alan Nisota (alannisota@gmail.com)- * Copyright (C) 2006,2007 Genpix Electronics (genpix@genpix-electronics.com)- *- * Thanks to GENPIX for the sample code used to implement this module.+ * Copyright (C) 2007 Genpix Electronics (genpix@genpix-electronics.com) * * This module is based off the vp7045 and vp702x modules+ * and original version of dvb-usb-gp8ps (written by Alan Nisota (c) 2006) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free@@ -16,7 +16,7 @@ */ #include "gp8psk.h" -struct gp8psk_fe_state {+struct gp_universal_fe_state { struct dvb_frontend fe; struct dvb_usb_device *d; u8 lock;@@ -25,22 +25,37 @@ struct gp8psk_fe_state { unsigned long status_check_interval; }; -static int gp8psk_fe_update_status(struct gp8psk_fe_state *st)+static int gp_universal_tuned_to_DCII(struct dvb_frontend* fe)+{+ struct gp_universal_fe_state *st = fe->demodulator_priv;+ u8 status;+ gp_universal_usb_in_op(st->d, GET_GENPIX_CONFIG, 0,0,&status,1);+ return (status & bmDCtuned);+}++static int gp_universal_set_tuner_mode(struct dvb_frontend* fe, int mode)+{+ struct gp_universal_fe_state *state = fe->demodulator_priv;+ return gp_universal_usb_out_op(state->d, SET_GENPIX_CONFIG, mode,0,NULL,0);+}++static int gp_universal_fe_update_status(struct gp_universal_fe_state *st) { u8 buf[6]; if (time_after(jiffies,st->next_status_check)) {- gp8psk_usb_in_op(st->d, GET_SIGNAL_LOCK, 0,0,&st->lock,1);- gp8psk_usb_in_op(st->d, GET_SIGNAL_STRENGTH, 0,0,buf,6);+ gp_universal_usb_in_op(st->d, GET_SIGNAL_LOCK, 0,0,&st->lock,1);+ gp_universal_usb_in_op(st->d, GET_SIGNAL_STRENGTH, 0,0,buf,6); st->snr = (buf[1]) << 8 | buf[0]; st->next_status_check = jiffies + (st->status_check_interval*HZ)/1000; } return 0; } -static int gp8psk_fe_read_status(struct dvb_frontend* fe, fe_status_t *status)++static int gp_universal_fe_read_status(struct dvb_frontend* fe, fe_status_t *status) {- struct gp8psk_fe_state *st = fe->demodulator_priv;- gp8psk_fe_update_status(st);+ struct gp_universal_fe_state *st = fe->demodulator_priv;+ gp_universal_fe_update_status(st); if (st->lock) *status = FE_HAS_LOCK | FE_HAS_SYNC | FE_HAS_VITERBI | FE_HAS_SIGNAL | FE_HAS_CARRIER;@@ -54,8 +69,19 @@ static int gp8psk_fe_read_status(struct return 0; } +static int gp_universal_set_standard(struct dvb_frontend* fe, u32 type)+{+ (void) fe;+ if (type == FE_DVB_S2 || type == FE_DVB_S) {+ fe->ops.info.type = type;+ return 0;+ } else {+ fe->ops.info.type = FE_QPSK;+ return 1;+ }+} /* not supported by this Frontend */-static int gp8psk_fe_read_ber(struct dvb_frontend* fe, u32 *ber)+static int gp_universal_fe_read_ber(struct dvb_frontend* fe, u32 *ber) { (void) fe; *ber = 0;@@ -63,26 +89,26 @@ static int gp8psk_fe_read_ber(struct dvb } /* not supported by this Frontend */-static int gp8psk_fe_read_unc_blocks(struct dvb_frontend* fe, u32 *unc)+static int gp_universal_fe_read_unc_blocks(struct dvb_frontend* fe, u32 *unc) { (void) fe; *unc = 0; return 0; } -static int gp8psk_fe_read_snr(struct dvb_frontend* fe, u16 *snr)+static int gp_universal_fe_read_snr(struct dvb_frontend* fe, u16 *snr) {- struct gp8psk_fe_state *st = fe->demodulator_priv;- gp8psk_fe_update_status(st);+ struct gp_universal_fe_state *st = fe->demodulator_priv;+ gp_universal_fe_update_status(st); /* snr is reported in dBu*256 */ *snr = st->snr; return 0; } -static int gp8psk_fe_read_signal_strength(struct dvb_frontend* fe, u16 *strength)+static int gp_universal_fe_read_signal_strength(struct dvb_frontend* fe, u16 *strength) {- struct gp8psk_fe_state *st = fe->demodulator_priv;- gp8psk_fe_update_status(st);+ struct gp_universal_fe_state *st = fe->demodulator_priv;+ gp_universal_fe_update_status(st); /* snr is reported in dBu*256 */ /* snr / 38.4 ~= 100% strength */ /* snr * 17 returns 100% strength as 65535 */@@ -93,16 +119,16 @@ static int gp8psk_fe_read_signal_strengt return 0; } -static int gp8psk_fe_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings *tune)+static int gp_universal_fe_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings *tune) {- tune->min_delay_ms = 200;+ tune->min_delay_ms = 800; return 0; } -static int gp8psk_fe_set_frontend(struct dvb_frontend* fe,- struct dvb_frontend_parameters *fep)+static int gp_universal_fe_set_frontend2(struct dvb_frontend* fe,+ struct dvb_frontend_parameters_new *fep) {- struct gp8psk_fe_state *state = fe->demodulator_priv;+ struct gp_universal_fe_state *state = fe->demodulator_priv; u8 cmd[10]; u32 freq = fep->frequency * 1000; @@ -112,16 +138,114 @@ static int gp8psk_fe_set_frontend(struct cmd[7] = (freq >> 24) & 0xff; switch(fe->ops.info.type) {+ case FE_DVB_S: case FE_QPSK:+ if (gp_product_id == USB_PID_GENPIX_8PSK_WARM)+ if (gp_universal_tuned_to_DCII(fe))+ gp_universal_bcm4500_reload(state->d); cmd[0] = fep->u.qpsk.symbol_rate & 0xff; cmd[1] = (fep->u.qpsk.symbol_rate >> 8) & 0xff; cmd[2] = (fep->u.qpsk.symbol_rate >> 16) & 0xff; cmd[3] = (fep->u.qpsk.symbol_rate >> 24) & 0xff; cmd[8] = ADV_MOD_DVB_QPSK;- cmd[9] = 0x03; /*ADV_MOD_FEC_XXX*/+ cmd[9] = 5;+ break;+ case FE_DVB_S2:+ cmd[0] = fep->u.qpsk2.symbol_rate & 0xff;+ cmd[1] = (fep->u.qpsk2.symbol_rate >> 8) & 0xff;+ cmd[2] = (fep->u.qpsk2.symbol_rate >> 16) & 0xff;+ cmd[3] = (fep->u.qpsk2.symbol_rate >> 24) & 0xff;+ switch (fep->u.qpsk2.modulation) {+ case MOD_QPSK:+ cmd[8] = ADV_MOD_DVB_QPSK;+ if (gp_product_id == USB_PID_GENPIX_8PSK_WARM)+ if (gp_universal_tuned_to_DCII(fe))+ gp_universal_bcm4500_reload(state->d);+ switch (fep->u.qpsk.fec_inner) {+ case FEC_1_2: cmd[9] = 0; break;+ case FEC_2_3: cmd[9] = 1; break;+ case FEC_3_4: cmd[9] = 2; break;+ case FEC_5_6: cmd[9] = 3; break;+ case FEC_7_8: cmd[9] = 4; break;+ case FEC_AUTO: cmd[9] = 5; break;+ default: cmd[9] = 5; break;+ }+ break;+ case MOD_QPSK_TURBO:+ cmd[8] = ADV_MOD_TURBO_QPSK;+ switch (fep->u.qpsk2.fec_inner) {+ case FEC_1_4: cmd[9] = 0; break;+ case FEC_1_2: cmd[9] = 1; break;+ case FEC_2_3: cmd[9] = 0; cmd[8] = ADV_MOD_TURBO_16QAM; break;+ case FEC_3_4: cmd[9] = 2; break;+ default: cmd[9] = 0; break;+ }+ break; + case MOD_8PSK_TURBO:+ case MOD_8PSK: /* MOD_8PSK is for compatibility with DN */+ cmd[8] = ADV_MOD_TURBO_8PSK;+ switch (fep->u.qpsk2.fec_inner) {+ case FEC_2_3: cmd[9] = 0; break;+ case FEC_3_4: cmd[9] = 1; break;+ case FEC_3_5: cmd[9] = 2; break;+ case FEC_5_6: cmd[9] = 3; break;+ case FEC_8_9: cmd[9] = 4; break;+ default: cmd[9] = 0; break;+ }+ break;+ case MOD_16QAM_TURBO:+ case MOD_QAM_16: /* MOD_QAM_16 is for compatibility with DN */+ cmd[8] = ADV_MOD_TURBO_16QAM;+ cmd[9] = 0;+ break;+ case MOD_DCII_C_QPSK:+ cmd[8] = ADV_MOD_DCII_C_QPSK;+ goto fill_fec;+ case MOD_DCII_I_QPSK:+ cmd[8] = ADV_MOD_DCII_I_QPSK;+ goto fill_fec;+ case MOD_DCII_Q_QPSK:+ cmd[8] = ADV_MOD_DCII_Q_QPSK;+ goto fill_fec;+ case MOD_DCII_C_OQPSK:+ cmd[8] = ADV_MOD_DCII_C_OQPSK;+fill_fec:+ switch (fep->u.qpsk2.fec_inner) {+ case FEC_5_11: cmd[9] = 0; break;+ case FEC_1_2: cmd[9] = 1; break;+ case FEC_3_5: cmd[9] = 2; break;+ case FEC_2_3: cmd[9] = 3; break;+ case FEC_3_4: cmd[9] = 4; break;+ case FEC_4_5: cmd[9] = 5; break;+ case FEC_5_6: cmd[9] = 6; break;+ case FEC_7_8: cmd[9] = 7; break;+ case FEC_AUTO: cmd[9] = 8; break;+ default: cmd[9] = 8; break;+ }+ break;+ case MOD_DSS_QPSK:+ cmd[8] = ADV_MOD_DSS_QPSK;+ switch (fep->u.qpsk.fec_inner) {+ case FEC_1_2: cmd[9] = 0; break;+ case FEC_2_3: cmd[9] = 1; break;+ case FEC_3_4: cmd[9] = 2; break;+ case FEC_5_6: cmd[9] = 3; break;+ case FEC_7_8: cmd[9] = 4; break;+ case FEC_AUTO: cmd[9] = 5; break;+ case FEC_6_7: cmd[9] = 6; break;+ default: cmd[9] = 5; break;+ }+ break;+ default: + info("WRONG modulation selected");+ cmd[8] = ADV_MOD_DVB_QPSK;+ cmd[9] = 5; /* FEC_AUTO */ + break;+ } break; default: // other modes are unsuported right now+// info("you should not be here"); cmd[0] = 0; cmd[1] = 0; cmd[2] = 0;@@ -131,7 +255,9 @@ static int gp8psk_fe_set_frontend(struct break; } - gp8psk_usb_out_op(state->d,TUNE_8PSK,0,0,cmd,10);+ if (gp_product_id == USB_PID_GENPIX_8PSK_WARM)+ gp_universal_set_tuner_mode(fe,0);+ gp_universal_usb_out_op(state->d, TUNE_GENPIX, 0,0,cmd,10); state->lock = 0; state->next_status_check = jiffies;@@ -140,106 +266,111 @@ static int gp8psk_fe_set_frontend(struct return 0; } -static int gp8psk_fe_get_frontend(struct dvb_frontend* fe,+static int gp_universal_fe_set_frontend(struct dvb_frontend* fe,+ struct dvb_frontend_parameters *fep)+{+ return gp_universal_fe_set_frontend2(fe,+ (struct dvb_frontend_parameters_new *) fep);+}+++static int gp_universal_fe_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *fep) { return 0; } -static int gp8psk_fe_send_diseqc_msg (struct dvb_frontend* fe,+static int gp_universal_fe_send_diseqc_msg (struct dvb_frontend* fe, struct dvb_diseqc_master_cmd *m) {- struct gp8psk_fe_state *st = fe->demodulator_priv;+ struct gp_universal_fe_state *st = fe->demodulator_priv; - deb_fe("%s\n",__func__);+ deb_fe("%s\n",__FUNCTION__); - if (gp8psk_usb_out_op(st->d,SEND_DISEQC_COMMAND, m->msg[0], 0,+ if (gp_universal_usb_out_op(st->d,SEND_DISEQC_COMMAND, m->msg[0], 0, m->msg, m->msg_len)) { return -EINVAL; } return 0; } -static int gp8psk_fe_send_diseqc_burst (struct dvb_frontend* fe,+static int gp_universal_fe_send_diseqc_burst (struct dvb_frontend* fe, fe_sec_mini_cmd_t burst) {- struct gp8psk_fe_state *st = fe->demodulator_priv;+ struct gp_universal_fe_state *st = fe->demodulator_priv; u8 cmd; - deb_fe("%s\n",__func__);+ deb_fe("%s\n",__FUNCTION__); - /* These commands are certainly wrong */ cmd = (burst == SEC_MINI_A) ? 0x00 : 0x01;-- if (gp8psk_usb_out_op(st->d,SEND_DISEQC_COMMAND, cmd, 0,- &cmd, 0)) {+ if (gp_universal_usb_out_op(st->d,SEND_DISEQC_COMMAND, cmd, 0,+ NULL, 0)) { return -EINVAL; } return 0; } -static int gp8psk_fe_set_tone (struct dvb_frontend* fe, fe_sec_tone_mode_t tone)+static int gp_universal_fe_set_tone (struct dvb_frontend* fe, fe_sec_tone_mode_t tone) {- struct gp8psk_fe_state* state = fe->demodulator_priv;+ struct gp_universal_fe_state* state = fe->demodulator_priv; - if (gp8psk_usb_out_op(state->d,SET_22KHZ_TONE,+ if (gp_universal_usb_out_op(state->d,SET_22KHZ_TONE, (tone == SEC_TONE_ON), 0, NULL, 0)) { return -EINVAL; } return 0; } -static int gp8psk_fe_set_voltage (struct dvb_frontend* fe, fe_sec_voltage_t voltage)+static int gp_universal_fe_set_voltage (struct dvb_frontend* fe, fe_sec_voltage_t voltage) {- struct gp8psk_fe_state* state = fe->demodulator_priv;+ struct gp_universal_fe_state* state = fe->demodulator_priv; - if (gp8psk_usb_out_op(state->d,SET_LNB_VOLTAGE,+ if (gp_universal_usb_out_op(state->d,SET_LNB_VOLTAGE, voltage == SEC_VOLTAGE_18, 0, NULL, 0)) { return -EINVAL; } return 0; } -static int gp8psk_fe_enable_high_lnb_voltage(struct dvb_frontend* fe, long onoff)+static int gp_universal_fe_enable_high_lnb_voltage(struct dvb_frontend* fe, long onoff) {- struct gp8psk_fe_state* state = fe->demodulator_priv;- return gp8psk_usb_out_op(state->d, USE_EXTRA_VOLT, onoff, 0,NULL,0);+ struct gp_universal_fe_state* state = fe->demodulator_priv;+ return gp_universal_usb_out_op(state->d, USE_EXTRA_VOLT, onoff, 0,NULL,0); } -static int gp8psk_fe_send_legacy_dish_cmd (struct dvb_frontend* fe, unsigned long sw_cmd)+static int gp_universal_fe_send_legacy_dish_cmd (struct dvb_frontend* fe, unsigned long sw_cmd) {- struct gp8psk_fe_state* state = fe->demodulator_priv;+ struct gp_universal_fe_state* state = fe->demodulator_priv; u8 cmd = sw_cmd & 0x7f; - if (gp8psk_usb_out_op(state->d,SET_DN_SWITCH, cmd, 0,+ if (gp_universal_usb_out_op(state->d,SET_DN_SWITCH, cmd, 0, NULL, 0)) { return -EINVAL; }- if (gp8psk_usb_out_op(state->d,SET_LNB_VOLTAGE, !!(sw_cmd & 0x80),+ if (gp_universal_usb_out_op(state->d,SET_LNB_VOLTAGE, !!(sw_cmd & 0x80), 0, NULL, 0)) { return -EINVAL; }- return 0; } -static void gp8psk_fe_release(struct dvb_frontend* fe)+static void gp_universal_fe_release(struct dvb_frontend* fe) {- struct gp8psk_fe_state *state = fe->demodulator_priv;+ struct gp_universal_fe_state *state = fe->demodulator_priv; kfree(state); } -static struct dvb_frontend_ops gp8psk_fe_ops;+static struct dvb_frontend_ops gp_universal_fe_ops; -struct dvb_frontend * gp8psk_fe_attach(struct dvb_usb_device *d)+struct dvb_frontend * gp_universal_fe_attach(struct dvb_usb_device *d) {- struct gp8psk_fe_state *s = kzalloc(sizeof(struct gp8psk_fe_state), GFP_KERNEL);+ struct gp_universal_fe_state *s = kzalloc(sizeof(struct gp_universal_fe_state), GFP_KERNEL); if (s == NULL) goto error; s->d = d;- memcpy(&s->fe.ops, &gp8psk_fe_ops, sizeof(struct dvb_frontend_ops));+ memcpy(&s->fe.ops, &gp_universal_fe_ops, sizeof(struct dvb_frontend_ops)); s->fe.demodulator_priv = s; goto success;@@ -250,41 +381,55 @@ success: } -static struct dvb_frontend_ops gp8psk_fe_ops = {+static struct dvb_frontend_ops gp_universal_fe_ops = { .info = {- .name = "Genpix 8psk-to-USB2 DVB-S",- .type = FE_QPSK,- .frequency_min = 800000,- .frequency_max = 2250000,+ .name = "Genpix DVB-s",+ .type = FE_DVB_S2,+ .frequency_min = 760000,+ .frequency_max = 2270000, .frequency_stepsize = 100, .symbol_rate_min = 1000000, .symbol_rate_max = 45000000, .symbol_rate_tolerance = 500, /* ppm */ .caps = FE_CAN_INVERSION_AUTO |- FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |- FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |- FE_CAN_QPSK+ FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |+ FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |+ // FE_CAN_QAM_16 is for compatibility + // (Myth incorrectly detects Turbo-QPSK as plain QAM-16)+ FE_CAN_QPSK | FE_CAN_QAM_16 | FE_HAS_EXTENDED_INFO },+ .extended_info = {+ .caps = FE_CAN_FEC_1_4 | FE_CAN_FEC_5_11 | FE_CAN_FEC_3_5 |+ // FE_CAN_8PSK is for compatibility+ //(Myth incorrectly detectS Turbo-8PSK as plain 8PSK)+ FE_CAN_8PSK |+ FE_CAN_TURBO_FEC | FE_CAN_DCII | FE_CAN_DSS_QPSK,+ .standards = FE_DVB_S | FE_DVB_S2+ },+ .set_standard = gp_universal_set_standard, - .release = gp8psk_fe_release,+ .release = gp_universal_fe_release, .init = NULL, .sleep = NULL, - .set_frontend = gp8psk_fe_set_frontend,- .get_frontend = gp8psk_fe_get_frontend,- .get_tune_settings = gp8psk_fe_get_tune_settings,+ .set_frontend = gp_universal_fe_set_frontend,+ .get_frontend = gp_universal_fe_get_frontend, - .read_status = gp8psk_fe_read_status,- .read_ber = gp8psk_fe_read_ber,- .read_signal_strength = gp8psk_fe_read_signal_strength,- .read_snr = gp8psk_fe_read_snr,- .read_ucblocks = gp8psk_fe_read_unc_blocks,+ .set_frontend2 = gp_universal_fe_set_frontend2,+ .get_frontend2 = NULL, - .diseqc_send_master_cmd = gp8psk_fe_send_diseqc_msg,- .diseqc_send_burst = gp8psk_fe_send_diseqc_burst,- .set_tone = gp8psk_fe_set_tone,- .set_voltage = gp8psk_fe_set_voltage,- .dishnetwork_send_legacy_command = gp8psk_fe_send_legacy_dish_cmd,- .enable_high_lnb_voltage = gp8psk_fe_enable_high_lnb_voltage+ .get_tune_settings = gp_universal_fe_get_tune_settings,++ .read_status = gp_universal_fe_read_status,+ .read_ber = NULL,+ .read_signal_strength = gp_universal_fe_read_signal_strength,+ .read_snr = gp_universal_fe_read_snr,+ .read_ucblocks = NULL,+ .diseqc_send_master_cmd = gp_universal_fe_send_diseqc_msg,+ .diseqc_send_burst = gp_universal_fe_send_diseqc_burst,+ .set_tone = gp_universal_fe_set_tone,+ .set_voltage = gp_universal_fe_set_voltage,+ .dishnetwork_send_legacy_command = gp_universal_fe_send_legacy_dish_cmd,+ .enable_high_lnb_voltage = gp_universal_fe_enable_high_lnb_voltage };diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/gp8psk.c--- a/linux/drivers/media/dvb/dvb-usb/gp8psk.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/gp8psk.c Mon Jun 23 15:07:10 2008 -0700@@ -1,12 +1,12 @@-/* DVB USB compliant Linux driver for the- * - GENPIX 8pks/qpsk/DCII USB2.0 DVB-S module+/* DVB USB compliant Linux driver for these USB 2.0 DVB-S modules+ * - GENPIX 8PSK-to-USB2+ * - GENPIX 8PSK-to-USB2 Rev.2+ * - GENPIX SkyWalker-1 *- * Copyright (C) 2006,2007 Alan Nisota (alannisota@gmail.com)- * Copyright (C) 2006,2007 Genpix Electronics (genpix@genpix-electronics.com)- *- * Thanks to GENPIX for the sample code used to implement this module.+ * Copyright (C) 2007 Genpix Electronics (genpix@genpix-electronics.com) * * This module is based off the vp7045 and vp702x modules+ * and original version of dvb-usb-gp8ps (written by Alan Nisota (c) 2006) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free@@ -17,14 +17,13 @@ #include "gp8psk.h" /* debug */-static char bcm4500_firmware[] = "dvb-usb-gp8psk-02.fw";-int dvb_usb_gp8psk_debug;-module_param_named(debug,dvb_usb_gp8psk_debug, int, 0644);+static char bcm4500_firmware[] = "dvb-gp8psk-02.fw";+int dvb_usb_gp_universal_debug;+int gp_product_id;+module_param_named(debug,dvb_usb_gp_universal_debug, int, 0644); 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 gp_universal_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen) { int ret = 0,try = 0; @@ -43,7 +42,7 @@ int gp8psk_usb_in_op(struct dvb_usb_devi } if (ret < 0 || ret != blen) {- warn("usb in %d operation failed.", req);+ warn("usb in operation failed."); ret = -EIO; } else ret = 0;@@ -56,7 +55,7 @@ int gp8psk_usb_in_op(struct dvb_usb_devi return ret; } -int gp8psk_usb_out_op(struct dvb_usb_device *d, u8 req, u16 value,+int gp_universal_usb_out_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen) { int ret;@@ -82,7 +81,7 @@ int gp8psk_usb_out_op(struct dvb_usb_dev return ret; } -static int gp8psk_load_bcm4500fw(struct dvb_usb_device *d)+static int gp_universal_load_bcm4500fw(struct dvb_usb_device *d) { int ret; const struct firmware *fw = NULL;@@ -96,11 +95,10 @@ static int gp8psk_load_bcm4500fw(struct } ret = -EINVAL;+ if (gp_universal_usb_out_op(d, LOAD_BCM4500,1,0,NULL, 0))+ goto out_rel_fw; - if (gp8psk_usb_out_op(d, LOAD_BCM4500,1,0,NULL, 0))- goto out_rel_fw;-- info("downloading bcm4500 firmware from file '%s'",bcm4500_firmware);+ info("downloaidng bcm4500 firmware from file '%s'",bcm4500_firmware); ptr = fw->data; buf = kmalloc(64, GFP_KERNEL | GFP_DMA);@@ -129,115 +127,112 @@ out_rel_fw: return ret; } -static int gp8psk_power_ctrl(struct dvb_usb_device *d, int onoff)+static int gp_universal_power_ctrl(struct dvb_usb_device *d, int onoff) { u8 status, buf;- int gp_product_id = le16_to_cpu(d->udev->descriptor.idProduct);- if (onoff) {- gp8psk_usb_in_op(d, GET_8PSK_CONFIG,0,0,&status,1);- if (! (status & bm8pskStarted)) { /* started */- if(gp_product_id == USB_PID_GENPIX_SKYWALKER_CW3K)- gp8psk_usb_out_op(d, CW3K_INIT, 1, 0, NULL, 0);- if (gp8psk_usb_in_op(d, BOOT_8PSK, 1, 0, &buf, 1))- return -EINVAL;- }-- if (gp_product_id == USB_PID_GENPIX_8PSK_REV_1_WARM)- if (! (status & bm8pskFW_Loaded)) /* BCM4500 firmware loaded */- if(gp8psk_load_bcm4500fw(d))- return -EINVAL;-- if (! (status & bmIntersilOn)) /* LNB Power */- if (gp8psk_usb_in_op(d, START_INTERSIL, 1, 0,- &buf, 1))+ gp_universal_usb_in_op(d, GET_GENPIX_CONFIG,0,0,&status,1);+ if (! (status & bmTunerEnabled)) /* started */+ if (gp_universal_usb_in_op(d, START_TUNER, 1, 0, &buf, 1)) return -EINVAL; - /* Set DVB mode to 1 */- if (gp_product_id == USB_PID_GENPIX_8PSK_REV_1_WARM)- if (gp8psk_usb_out_op(d, SET_DVB_MODE, 1, 0, NULL, 0))- return -EINVAL;+ if (gp_product_id == USB_PID_GENPIX_8PSK_WARM)+ if (! (status & bmFW_Loaded)) /* BCM4500 firmware loaded */+ if (gp_universal_load_bcm4500fw(d))+ return EINVAL;++ if (! (status & bmLNBPowerOn)) /* LNB Power */+ if (gp_universal_usb_in_op(d, ENABLE_LNB_POWER, 1, 0,+ &buf, 1))+ return EINVAL;++ if (gp_product_id == USB_PID_GENPIX_8PSK_WARM)+ if (gp_universal_usb_out_op(d, SET_DVB_MODE, 1, 0, NULL, 0))+ return EINVAL; /* Abort possible TS (if previous tune crashed) */- if (gp8psk_usb_out_op(d, ARM_TRANSFER, 0, 0, NULL, 0))- return -EINVAL;+ if (gp_universal_usb_out_op(d, ARM_TRANSFER, 0, 0, NULL, 0))+ return EINVAL; } else { /* Turn off LNB power */- if (gp8psk_usb_in_op(d, START_INTERSIL, 0, 0, &buf, 1))+ if (gp_universal_usb_in_op(d, ENABLE_LNB_POWER, 0, 0, &buf, 1))+ return EINVAL;+ /* Turn off tuner power */+ if (gp_universal_usb_in_op(d, START_TUNER, 0, 0, &buf, 1)) return -EINVAL;- /* Turn off 8psk power */- if (gp8psk_usb_in_op(d, BOOT_8PSK, 0, 0, &buf, 1))- return -EINVAL;- if(gp_product_id == USB_PID_GENPIX_SKYWALKER_CW3K)- gp8psk_usb_out_op(d, CW3K_INIT, 0, 0, NULL, 0); } return 0; } -#if 0-int gp8psk_bcm4500_reload(struct dvb_usb_device *d)+int gp_universal_bcm4500_reload(struct dvb_usb_device *d) { u8 buf;- int gp_product_id = le16_to_cpu(d->udev->descriptor.idProduct); /* Turn off 8psk power */- if (gp8psk_usb_in_op(d, BOOT_8PSK, 0, 0, &buf, 1))+ if (gp_universal_usb_in_op(d, START_TUNER, 0, 0, &buf, 1)) return -EINVAL; /* Turn On 8psk power */- if (gp8psk_usb_in_op(d, BOOT_8PSK, 1, 0, &buf, 1))+ if (gp_universal_usb_in_op(d, START_TUNER, 1, 0, &buf, 1)) return -EINVAL; /* load BCM4500 firmware */- if (gp_product_id == USB_PID_GENPIX_8PSK_REV_1_WARM)- if (gp8psk_load_bcm4500fw(d))+ if (gp_product_id == USB_PID_GENPIX_8PSK_WARM)+ if (gp_universal_load_bcm4500fw(d)) return EINVAL; return 0; }-#endif /* 0 */ -static int gp8psk_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)+static int gp_universal_get_fpga_version(struct dvb_usb_device *d, int *version) {- return gp8psk_usb_out_op(adap->dev, ARM_TRANSFER, onoff, 0 , NULL, 0);-}--static int gp8psk_frontend_attach(struct dvb_usb_adapter *adap)-{- adap->fe = gp8psk_fe_attach(adap->dev);+ u8 cmd;+ if (gp_universal_usb_in_op(d, GET_FPGA_VERSION, 0,0,&cmd,1) != 0)+ *version = 0;+ else+ *version = cmd; return 0; } -static struct dvb_usb_device_properties gp8psk_properties;+static int gp_universal_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)+{+ return gp_universal_usb_out_op(adap->dev, ARM_TRANSFER, onoff, 0 , NULL, 0);+} -static int gp8psk_usb_probe(struct usb_interface *intf,+static int gp_universal_frontend_attach(struct dvb_usb_adapter *adap)+{+ adap->fe = gp_universal_fe_attach(adap->dev);+ return 0;+}++static struct dvb_usb_device_properties gp_universal_properties;++static int gp_universal_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) {- int ret;+ int ret; struct usb_device *udev = interface_to_usbdev(intf);- ret = dvb_usb_device_init(intf, &gp8psk_properties,- THIS_MODULE, NULL, adapter_nr);+ ret = dvb_usb_device_init(intf,&gp_universal_properties,THIS_MODULE,NULL); if (ret == 0) {- info("found Genpix USB device pID = %x (hex)",- le16_to_cpu(udev->descriptor.idProduct));+ gp_product_id = le16_to_cpu(udev->descriptor.idProduct);+ info("found Genpix USB device pID = %x (hex)",gp_product_id); } return ret; } -static struct usb_device_id gp8psk_usb_table [] = {- { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_8PSK_REV_1_COLD) },- { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_8PSK_REV_1_WARM) },+static struct usb_device_id gp_universal_usb_table [] = {+ { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_8PSK_COLD) },+ { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_8PSK_WARM) }, { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_8PSK_REV_2) },- { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_SKYWALKER_1) },- { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_SKYWALKER_CW3K) },+ { USB_DEVICE(USB_VID_GENPIX, USB_PID_GENPIX_SKYWALKER) }, { 0 }, };-MODULE_DEVICE_TABLE(usb, gp8psk_usb_table);+MODULE_DEVICE_TABLE(usb, gp_universal_usb_table); -static struct dvb_usb_device_properties gp8psk_properties = {+static struct dvb_usb_device_properties gp_universal_properties = { .usb_ctrl = CYPRESS_FX2,- .firmware = "dvb-usb-gp8psk-01.fw",+ .firmware = "dvb-gp8psk-01.fw", .num_adapters = 1, .adapter = { {- .streaming_ctrl = gp8psk_streaming_ctrl,- .frontend_attach = gp8psk_frontend_attach,+ .streaming_ctrl = gp_universal_streaming_ctrl,+ .frontend_attach = gp_universal_frontend_attach, /* parameter for the MPEG2-data transfer */ .stream = { .type = USB_BULK,@@ -251,48 +246,45 @@ static struct dvb_usb_device_properties }, } },- .power_ctrl = gp8psk_power_ctrl,+ .power_ctrl = gp_universal_power_ctrl, .generic_bulk_ctrl_endpoint = 0x01, - .num_device_descs = 4,+ .num_device_descs = 3, .devices = {- { .name = "Genpix 8PSK-to-USB2 Rev.1 DVB-S receiver",- .cold_ids = { &gp8psk_usb_table[0], NULL },- .warm_ids = { &gp8psk_usb_table[1], NULL },+ { .name = "Genpix 8PSK-to-USB2 DVB-s receiver",+ .cold_ids = { &gp_universal_usb_table[0], NULL },+ .warm_ids = { &gp_universal_usb_table[1], NULL }, },- { .name = "Genpix 8PSK-to-USB2 Rev.2 DVB-S receiver",+ { .name = "Genpix 8PSK-to-USB2 Rev.2 DVB-s receiver", .cold_ids = { NULL },- .warm_ids = { &gp8psk_usb_table[2], NULL },+ .warm_ids = { &gp_universal_usb_table[2], NULL }, },- { .name = "Genpix SkyWalker-1 DVB-S receiver",+ { .name = "Genpix SkyWalker-1 DVB-s receiver", .cold_ids = { NULL },- .warm_ids = { &gp8psk_usb_table[3], NULL },- },- { .name = "Genpix SkyWalker-CW3K DVB-S receiver",- .cold_ids = { NULL },- .warm_ids = { &gp8psk_usb_table[4], NULL },+ .warm_ids = { &gp_universal_usb_table[3], NULL }, }, { NULL },- }+ },+ .device_version = gp_universal_get_fpga_version, }; /* usb specific object needed to register this driver with the usb subsystem */-static struct usb_driver gp8psk_usb_driver = {+static struct usb_driver gp_universal_usb_driver = { #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,15) .owner = THIS_MODULE, #endif- .name = "dvb_usb_gp8psk",- .probe = gp8psk_usb_probe,- .disconnect = dvb_usb_device_exit,- .id_table = gp8psk_usb_table,+ .name = "dvb_usb_gp_universal",+ .probe = gp_universal_usb_probe,+ .disconnect = dvb_usb_device_exit,+ .id_table = gp_universal_usb_table, }; /* module stuff */-static int __init gp8psk_usb_module_init(void)+static int __init gp_universal_usb_module_init(void) { int result;- if ((result = usb_register(&gp8psk_usb_driver))) {+ if ((result = usb_register(&gp_universal_usb_driver))) { err("usb_register failed. (%d)",result); return result; }@@ -300,16 +292,16 @@ static int __init gp8psk_usb_module_init return 0; } -static void __exit gp8psk_usb_module_exit(void)+static void __exit gp_universal_usb_module_exit(void) { /* deregister this driver from the USB subsystem */- usb_deregister(&gp8psk_usb_driver);+ usb_deregister(&gp_universal_usb_driver); } -module_init(gp8psk_usb_module_init);-module_exit(gp8psk_usb_module_exit);+module_init(gp_universal_usb_module_init);+module_exit(gp_universal_usb_module_exit); -MODULE_AUTHOR("Alan Nisota <alannisota@gamil.com>");-MODULE_DESCRIPTION("Driver for Genpix 8psk-to-USB2 DVB-S");+MODULE_AUTHOR("Genpix <genpix@genpix-electronics.com>");+MODULE_DESCRIPTION("Universal Driver for Genpix advanced DVB-S receivers"); MODULE_VERSION("1.1"); MODULE_LICENSE("GPL");diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/gp8psk.h--- a/linux/drivers/media/dvb/dvb-usb/gp8psk.h Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/gp8psk.h Mon Jun 23 15:07:10 2008 -0700@@ -1,12 +1,12 @@-/* DVB USB compliant Linux driver for the- * - GENPIX 8pks/qpsk/DCII USB2.0 DVB-S module+/* DVB USB compliant Linux driver for these USB 2.0 DVB-S modules+ * - GENPIX 8PSK-to-USB2+ * - GENPIX 8PSK-to-USB2 Rev.2+ * - GENPIX SkyWalker-1 *- * Copyright (C) 2006 Alan Nisota (alannisota@gmail.com)- * Copyright (C) 2006,2007 Alan Nisota (alannisota@gmail.com)- *- * Thanks to GENPIX for the sample code used to implement this module.+ * Copyright (C) 2007 Genpix Electronics (genpix@genpix-electronics.com) * * This module is based off the vp7045 and vp702x modules+ * and original version of dvb-usb-gp8ps (written by Alan Nisota (c) 2006) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free@@ -14,83 +14,64 @@ * * see Documentation/dvb/README.dvb-usb for more information */-#ifndef _DVB_USB_GP8PSK_H_-#define _DVB_USB_GP8PSK_H_+#ifndef _DVB_USB_GENPIX_H_+#define _DVB_USB_GENPIX_H_ -#define DVB_USB_LOG_PREFIX "gp8psk"+#define DVB_USB_LOG_PREFIX "gp_universal" #include "dvb-usb.h" -extern int dvb_usb_gp8psk_debug;-#define deb_info(args...) dprintk(dvb_usb_gp8psk_debug,0x01,args)-#define deb_xfer(args...) dprintk(dvb_usb_gp8psk_debug,0x02,args)-#define deb_rc(args...) dprintk(dvb_usb_gp8psk_debug,0x04,args)-#define deb_fe(args...) dprintk(dvb_usb_gp8psk_debug,0x08,args)-/* gp8psk commands */+extern int gp_product_id;+extern int dvb_usb_gp_universal_debug;+#define deb_info(args...) dprintk(dvb_usb_gp_universal_debug,0x01,args)+#define deb_xfer(args...) dprintk(dvb_usb_gp_universal_debug,0x02,args)+#define deb_rc(args...) dprintk(dvb_usb_gp_universal_debug,0x04,args)+#define deb_fe(args...) dprintk(dvb_usb_gp_universal_debug,0x08,args) -/* Twinhan Vendor requests */-#define TH_COMMAND_IN 0xC0-#define TH_COMMAND_OUT 0xC1+/* gp_universal commands */ -/* gp8psk commands */+#define GET_GENPIX_CONFIG 0x80 // in+#define SET_GENPIX_CONFIG 0x81+#define ARM_TRANSFER 0x85+#define TUNE_GENPIX 0x86+#define GET_SIGNAL_STRENGTH 0x87 // in+#define LOAD_BCM4500 0x88+#define START_TUNER 0x89 // in+#define ENABLE_LNB_POWER 0x8A // in+#define SET_LNB_VOLTAGE 0x8B+#define SET_22KHZ_TONE 0x8C+#define SEND_DISEQC_COMMAND 0x8D+#define SET_DVB_MODE 0x8E+#define SET_DN_SWITCH 0x8F+#define GET_SIGNAL_LOCK 0x90 // in+#define GET_FW_VERSION 0x92 // in+#define GET_SERIAL_NUMBER 0x93 // in+#define USE_EXTRA_VOLT 0x94+#define GET_FPGA_VERSION 0x95 // in -#define GET_8PSK_CONFIG 0x80 /* in */-#define SET_8PSK_CONFIG 0x81-#define I2C_WRITE 0x83-#define I2C_READ 0x84-#define ARM_TRANSFER 0x85-#define TUNE_8PSK 0x86-#define GET_SIGNAL_STRENGTH 0x87 /* in */-#define LOAD_BCM4500 0x88-#define BOOT_8PSK 0x89 /* in */-#define START_INTERSIL 0x8A /* in */-#define SET_LNB_VOLTAGE 0x8B-#define SET_22KHZ_TONE 0x8C-#define SEND_DISEQC_COMMAND 0x8D-#define SET_DVB_MODE 0x8E-#define SET_DN_SWITCH 0x8F-#define GET_SIGNAL_LOCK 0x90 /* in */-#define GET_SERIAL_NUMBER 0x93 /* in */-#define USE_EXTRA_VOLT 0x94-#define CW3K_INIT 0x9d--/* PSK_configuration bits */-#define bm8pskStarted 0x01-#define bm8pskFW_Loaded 0x02-#define bmIntersilOn 0x04-#define bmDVBmode 0x08-#define bm22kHz 0x10-#define bmSEL18V 0x20-#define bmDCtuned 0x40-#define bmArmed 0x80+/* gp_universal_configuration bits */+#define bmTunerEnabled 0x01+#define bmFW_Loaded 0x02+#define bmLNBPowerOn 0x04+#define bm22kHz 0x10+#define bmSEL18V 0x20+#define bmDCtuned 0x40+#define bmArmed 0x80 /* Satellite modulation modes */-#define ADV_MOD_DVB_QPSK 0 /* DVB-S QPSK */-#define ADV_MOD_TURBO_QPSK 1 /* Turbo QPSK */-#define ADV_MOD_TURBO_8PSK 2 /* Turbo 8PSK (also used for Trellis 8PSK) */-#define ADV_MOD_TURBO_16QAM 3 /* Turbo 16QAM (also used for Trellis 8PSK) */+#define ADV_MOD_DVB_QPSK 0 /* DVB-S QPSK */+#define ADV_MOD_TURBO_QPSK 1 /* Turbo QPSK */+#define ADV_MOD_TURBO_8PSK 2 /* Turbo 8PSK (also used for Trellis 8PSK) */+#define ADV_MOD_TURBO_16QAM 3 /* Turbo 16QAM (also used for Trellis 8PSK) */+#define ADV_MOD_DCII_C_QPSK 4 /* Digicipher II Combo */+#define ADV_MOD_DCII_I_QPSK 5 /* Digicipher II I-stream */+#define ADV_MOD_DCII_Q_QPSK 6 /* Digicipher II Q-stream */+#define ADV_MOD_DCII_C_OQPSK 7 /* Digicipher II offset QPSK */+#define ADV_MOD_DSS_QPSK 8 /* DSS (DIRECTV) QPSK */+#define ADV_MOD_DVB_BPSK 9 /* DVB-S BPSK */ -#define ADV_MOD_DCII_C_QPSK 4 /* Digicipher II Combo */-#define ADV_MOD_DCII_I_QPSK 5 /* Digicipher II I-stream */-#define ADV_MOD_DCII_Q_QPSK 6 /* Digicipher II Q-stream */-#define ADV_MOD_DCII_C_OQPSK 7 /* Digicipher II offset QPSK */-#define ADV_MOD_DSS_QPSK 8 /* DSS (DIRECTV) QPSK */-#define ADV_MOD_DVB_BPSK 9 /* DVB-S BPSK */--#define GET_USB_SPEED 0x07- #define USB_SPEED_LOW 0- #define USB_SPEED_FULL 1- #define USB_SPEED_HIGH 2--#define RESET_FX2 0x13--#define FW_VERSION_READ 0x0B-#define VENDOR_STRING_READ 0x0C-#define PRODUCT_STRING_READ 0x0D-#define FW_BCD_VERSION_READ 0x14--extern struct dvb_frontend * gp8psk_fe_attach(struct dvb_usb_device *d);-extern int gp8psk_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen);-extern int gp8psk_usb_out_op(struct dvb_usb_device *d, u8 req, u16 value,- u16 index, u8 *b, int blen);+extern struct dvb_frontend * gp_universal_fe_attach(struct dvb_usb_device *d);+extern int gp_universal_usb_in_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen);+extern int gp_universal_usb_out_op(struct dvb_usb_device *d, u8 req, u16 value, u16 index, u8 *b, int blen);+extern int gp_universal_bcm4500_reload(struct dvb_usb_device *d); #endifdiff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/m920x.c--- a/linux/drivers/media/dvb/dvb-usb/m920x.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/m920x.c Mon Jun 23 15:07:10 2008 -0700@@ -22,8 +22,6 @@ static int dvb_usb_m920x_debug; static int dvb_usb_m920x_debug; 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);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); static int m920x_set_filter(struct dvb_usb_device *d, int type, int idx, int pid); @@ -480,7 +478,7 @@ static struct qt1010_config m920x_qt1010 /* Callbacks for DVB USB */ static int m920x_mt352_frontend_attach(struct dvb_usb_adapter *adap) {- deb("%s\n",__func__);+ deb("%s\n",__FUNCTION__); if ((adap->fe = dvb_attach(mt352_attach, &m920x_mt352_config,@@ -492,7 +490,7 @@ static int m920x_mt352_frontend_attach(s static int m920x_tda10046_08_frontend_attach(struct dvb_usb_adapter *adap) {- deb("%s\n",__func__);+ deb("%s\n",__FUNCTION__); if ((adap->fe = dvb_attach(tda10046_attach, &m920x_tda10046_08_config,@@ -504,7 +502,7 @@ static int m920x_tda10046_08_frontend_at static int m920x_tda10046_0b_frontend_attach(struct dvb_usb_adapter *adap) {- deb("%s\n",__func__);+ deb("%s\n",__FUNCTION__); if ((adap->fe = dvb_attach(tda10046_attach, &m920x_tda10046_0b_config,@@ -516,7 +514,7 @@ static int m920x_tda10046_0b_frontend_at static int m920x_qt1010_tuner_attach(struct dvb_usb_adapter *adap) {- deb("%s\n",__func__);+ deb("%s\n",__FUNCTION__); if (dvb_attach(qt1010_attach, adap->fe, &adap->dev->i2c_adap, &m920x_qt1010_config) == NULL) return -ENODEV;@@ -526,7 +524,7 @@ static int m920x_qt1010_tuner_attach(str static int m920x_tda8275_60_tuner_attach(struct dvb_usb_adapter *adap) {- deb("%s\n",__func__);+ deb("%s\n",__FUNCTION__); if (dvb_attach(tda827x_attach, adap->fe, 0x60, &adap->dev->i2c_adap, NULL) == NULL) return -ENODEV;@@ -536,7 +534,7 @@ static int m920x_tda8275_60_tuner_attach static int m920x_tda8275_61_tuner_attach(struct dvb_usb_adapter *adap) {- deb("%s\n",__func__);+ deb("%s\n",__FUNCTION__); if (dvb_attach(tda827x_attach, adap->fe, 0x61, &adap->dev->i2c_adap, NULL) == NULL) return -ENODEV;@@ -621,31 +619,27 @@ static int m920x_probe(struct usb_interf * multi-tuner device */ - ret = dvb_usb_device_init(intf, &megasky_properties,- THIS_MODULE, &d, adapter_nr);- if (ret == 0) {+ if ((ret = dvb_usb_device_init(intf, &megasky_properties,+ THIS_MODULE, &d)) == 0) { rc_init_seq = megasky_rc_init; goto found; } - ret = dvb_usb_device_init(intf, &digivox_mini_ii_properties,- THIS_MODULE, &d, adapter_nr);- if (ret == 0) {+ if ((ret = dvb_usb_device_init(intf, &digivox_mini_ii_properties,+ THIS_MODULE, &d)) == 0) { /* No remote control, so no rc_init_seq */ goto found; } /* This configures both tuners on the TV Walker Twin */- ret = dvb_usb_device_init(intf, &tvwalkertwin_properties,- THIS_MODULE, &d, adapter_nr);- if (ret == 0) {+ if ((ret = dvb_usb_device_init(intf, &tvwalkertwin_properties,+ THIS_MODULE, &d)) == 0) { rc_init_seq = tvwalkertwin_rc_init; goto found; } - ret = dvb_usb_device_init(intf, &dposh_properties,- THIS_MODULE, &d, adapter_nr);- if (ret == 0) {+ if ((ret = dvb_usb_device_init(intf, &dposh_properties,+ THIS_MODULE, &d)) == 0) { /* Remote controller not supported yet. */ goto found; }diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/nova-t-usb2.c--- a/linux/drivers/media/dvb/dvb-usb/nova-t-usb2.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/nova-t-usb2.c Mon Jun 23 15:07:10 2008 -0700@@ -14,8 +14,6 @@ static int debug; static int debug; module_param(debug, int, 0644); 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_ee(args...) dprintk(debug,0x02,args)@@ -144,8 +142,7 @@ static int nova_t_probe(struct usb_inter static int nova_t_probe(struct usb_interface *intf, const struct usb_device_id *id) {- return dvb_usb_device_init(intf, &nova_t_properties,- THIS_MODULE, NULL, adapter_nr);+ return dvb_usb_device_init(intf,&nova_t_properties,THIS_MODULE,NULL); } /* do not change the order of the ID table */diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/opera1.c--- a/linux/drivers/media/dvb/dvb-usb/opera1.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/opera1.c Mon Jun 23 15:07:10 2008 -0700@@ -45,9 +45,6 @@ MODULE_PARM_DESC(debug, MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,pll=4,ts=8,err=16,rc=32,fw=64 (or-able))." DVB_USB_DEBUG_STATUS);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);- #if 0 struct mutex mymutex; #endif@@ -562,8 +559,7 @@ static int opera1_probe(struct usb_inter return -EINVAL; } - if (0 != dvb_usb_device_init(intf, &opera1_properties,- THIS_MODULE, NULL, adapter_nr))+ if (dvb_usb_device_init(intf, &opera1_properties, THIS_MODULE, NULL) != 0) return -EINVAL; return 0; }diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/ttusb2.c--- a/linux/drivers/media/dvb/dvb-usb/ttusb2.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/ttusb2.c Mon Jun 23 15:07:10 2008 -0700@@ -36,8 +36,6 @@ static int dvb_usb_ttusb2_debug; #define deb_info(args...) dprintk(dvb_usb_ttusb2_debug,0x01,args) 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);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); struct ttusb2_state { u8 id;@@ -190,10 +188,8 @@ static int ttusb2_probe(struct usb_inter static int ttusb2_probe(struct usb_interface *intf, const struct usb_device_id *id) {- if (0 == dvb_usb_device_init(intf, &ttusb2_properties,- THIS_MODULE, NULL, adapter_nr) ||- 0 == dvb_usb_device_init(intf, &ttusb2_properties_s2400,- THIS_MODULE, NULL, adapter_nr))+ if (dvb_usb_device_init(intf, &ttusb2_properties, THIS_MODULE, NULL) == 0 ||+ dvb_usb_device_init(intf, &ttusb2_properties_s2400, THIS_MODULE, NULL) == 0) return 0; return -ENODEV; }diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/umt-010.c--- a/linux/drivers/media/dvb/dvb-usb/umt-010.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/umt-010.c Mon Jun 23 15:07:10 2008 -0700@@ -12,8 +12,6 @@ #include "dibusb.h" #include "mt352.h"--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); static int umt_mt352_demod_init(struct dvb_frontend *fe) {@@ -77,8 +75,7 @@ static int umt_probe(struct usb_interfac static int umt_probe(struct usb_interface *intf, const struct usb_device_id *id) {- if (0 == dvb_usb_device_init(intf, &umt_properties,- THIS_MODULE, NULL, adapter_nr))+ if (dvb_usb_device_init(intf,&umt_properties,THIS_MODULE,NULL) == 0) return 0; return -EINVAL; }diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/vp702x-fe.c--- a/linux/drivers/media/dvb/dvb-usb/vp702x-fe.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/vp702x-fe.c Mon Jun 23 15:07:10 2008 -0700@@ -67,7 +67,7 @@ static int vp702x_fe_read_status(struct { struct vp702x_fe_state *st = fe->demodulator_priv; vp702x_fe_refresh_state(st);- deb_fe("%s\n",__func__);+ deb_fe("%s\n",__FUNCTION__); if (st->lock == 0) *status = FE_HAS_LOCK | FE_HAS_SYNC | FE_HAS_VITERBI | FE_HAS_SIGNAL | FE_HAS_CARRIER;@@ -121,7 +121,7 @@ static int vp702x_fe_read_snr(struct dvb static int vp702x_fe_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings *tune) {- deb_fe("%s\n",__func__);+ deb_fe("%s\n",__FUNCTION__); tune->min_delay_ms = 2000; return 0; }@@ -183,21 +183,21 @@ static int vp702x_fe_init(struct dvb_fro static int vp702x_fe_init(struct dvb_frontend *fe) { struct vp702x_fe_state *st = fe->demodulator_priv;- deb_fe("%s\n",__func__);+ deb_fe("%s\n",__FUNCTION__); vp702x_usb_in_op(st->d, RESET_TUNER, 0, 0, NULL, 0); return 0; } static int vp702x_fe_sleep(struct dvb_frontend *fe) {- deb_fe("%s\n",__func__);+ deb_fe("%s\n",__FUNCTION__); return 0; } static int vp702x_fe_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *fep) {- deb_fe("%s\n",__func__);+ deb_fe("%s\n",__FUNCTION__); return 0; } @@ -208,7 +208,7 @@ static int vp702x_fe_send_diseqc_msg (st u8 cmd[8],ibuf[10]; memset(cmd,0,8); - deb_fe("%s\n",__func__);+ deb_fe("%s\n",__FUNCTION__); if (m->msg_len > 4) return -EINVAL;@@ -230,7 +230,7 @@ static int vp702x_fe_send_diseqc_msg (st static int vp702x_fe_send_diseqc_burst (struct dvb_frontend* fe, fe_sec_mini_cmd_t burst) {- deb_fe("%s\n",__func__);+ deb_fe("%s\n",__FUNCTION__); return 0; } @@ -238,7 +238,7 @@ static int vp702x_fe_set_tone(struct dvb { struct vp702x_fe_state *st = fe->demodulator_priv; u8 ibuf[10];- deb_fe("%s\n",__func__);+ deb_fe("%s\n",__FUNCTION__); st->tone_mode = tone; @@ -263,7 +263,7 @@ static int vp702x_fe_set_voltage (struct { struct vp702x_fe_state *st = fe->demodulator_priv; u8 ibuf[10];- deb_fe("%s\n",__func__);+ deb_fe("%s\n",__FUNCTION__); st->voltage = voltage; diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/vp702x.c--- a/linux/drivers/media/dvb/dvb-usb/vp702x.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/vp702x.c Mon Jun 23 15:07:10 2008 -0700@@ -20,8 +20,6 @@ int dvb_usb_vp702x_debug; int dvb_usb_vp702x_debug; 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);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); struct vp702x_state { int pid_filter_count;@@ -287,8 +285,7 @@ static int vp702x_usb_probe(struct usb_i static int vp702x_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) {- return dvb_usb_device_init(intf, &vp702x_properties,- THIS_MODULE, NULL, adapter_nr);+ return dvb_usb_device_init(intf,&vp702x_properties,THIS_MODULE,NULL); } static struct usb_device_id vp702x_usb_table [] = {diff -r 595fe1ec7511 linux/drivers/media/dvb/dvb-usb/vp7045.c--- a/linux/drivers/media/dvb/dvb-usb/vp7045.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/dvb-usb/vp7045.c Mon Jun 23 15:07:10 2008 -0700@@ -18,9 +18,6 @@ static int dvb_usb_vp7045_debug; static int dvb_usb_vp7045_debug; 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);--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);- #define deb_info(args...) dprintk(dvb_usb_vp7045_debug,0x01,args) #define deb_xfer(args...) dprintk(dvb_usb_vp7045_debug,0x02,args) #define deb_rc(args...) dprintk(dvb_usb_vp7045_debug,0x04,args)@@ -230,8 +227,7 @@ static int vp7045_usb_probe(struct usb_i static int vp7045_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) {- return dvb_usb_device_init(intf, &vp7045_properties,- THIS_MODULE, NULL, adapter_nr);+ return dvb_usb_device_init(intf,&vp7045_properties,THIS_MODULE,NULL); } static struct usb_device_id vp7045_usb_table [] = {diff -r 595fe1ec7511 linux/drivers/media/dvb/pluto2/pluto2.c--- a/linux/drivers/media/dvb/pluto2/pluto2.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/pluto2/pluto2.c Mon Jun 23 15:07:10 2008 -0700@@ -38,8 +38,6 @@ #include "dvb_net.h" #include "dvbdev.h" #include "tda1004x.h"--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); #define DRIVER_NAME "pluto2" @@ -668,8 +666,7 @@ static int __devinit pluto2_probe(struct goto err_pluto_hw_exit; /* dvb */- ret = dvb_register_adapter(&pluto->dvb_adapter, DRIVER_NAME,- THIS_MODULE, &pdev->dev, adapter_nr);+ ret = dvb_register_adapter(&pluto->dvb_adapter, DRIVER_NAME, THIS_MODULE, &pdev->dev); if (ret < 0) goto err_i2c_del_adapter; diff -r 595fe1ec7511 linux/drivers/media/dvb/ttpci/av7110.c--- a/linux/drivers/media/dvb/ttpci/av7110.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/ttpci/av7110.c Mon Jun 23 15:07:11 2008 -0700@@ -112,8 +112,6 @@ MODULE_PARM_DESC(wss_cfg_16_9, "WSS 16:9 MODULE_PARM_DESC(wss_cfg_16_9, "WSS 16:9 - default 0x0007 - bit 15: disable, 14: burst mode, 13..0: wss data"); module_param(tv_standard, int, 0444); 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); @@ -2463,7 +2461,7 @@ static int __devinit av7110_attach(struc goto err_kfree_0; ret = dvb_register_adapter(&av7110->dvb_adapter, av7110->card_name,- THIS_MODULE, &dev->pci->dev, adapter_nr);+ THIS_MODULE, &dev->pci->dev); if (ret < 0) goto err_put_firmware_1; diff -r 595fe1ec7511 linux/drivers/media/dvb/ttpci/budget-core.c--- a/linux/drivers/media/dvb/ttpci/budget-core.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/ttpci/budget-core.c Mon Jun 23 15:07:11 2008 -0700@@ -56,8 +56,6 @@ module_param_named(bufsize, dma_buffer_s module_param_named(bufsize, dma_buffer_size, int, 0444); 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)");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); /**************************************************************************** * TT budget / WinTV Nova@@ -473,10 +471,9 @@ int ttpci_budget_init(struct budget *bud budget->buffer_width, budget->buffer_height); printk("%s: dma buffer size %u\n", budget->dev->name, budget->buffer_size); - ret = dvb_register_adapter(&budget->dvb_adapter, budget->card->name,- owner, &budget->dev->pci->dev, adapter_nr);- if (ret < 0)+ if ((ret = dvb_register_adapter(&budget->dvb_adapter, budget->card->name, owner, &budget->dev->pci->dev)) < 0) { return ret;+ } /* set dd1 stream a & b */ saa7146_write(dev, DD1_STREAM_B, 0x00000000);diff -r 595fe1ec7511 linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c--- a/linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c Mon Jun 23 15:07:11 2008 -0700@@ -59,10 +59,9 @@ */ static int debug;+ module_param(debug, int, 0644); 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) @@ -1682,10 +1681,7 @@ static int ttusb_probe(struct usb_interf mutex_unlock(&ttusb->semi2c); - result = dvb_register_adapter(&ttusb->adapter,- "Technotrend/Hauppauge Nova-USB",- THIS_MODULE, &udev->dev, adapter_nr);- if (result < 0) {+ if ((result = dvb_register_adapter(&ttusb->adapter, "Technotrend/Hauppauge Nova-USB", THIS_MODULE, &udev->dev)) < 0) { ttusb_free_iso_urbs(ttusb); kfree(ttusb); return result;diff -r 595fe1ec7511 linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c--- a/linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/dvb/ttusb-dec/ttusb_dec.c Mon Jun 23 15:07:11 2008 -0700@@ -54,8 +54,6 @@ MODULE_PARM_DESC(output_pva, "Output PVA MODULE_PARM_DESC(output_pva, "Output PVA from dvr device (default:off)"); module_param(enable_rc, int, 0644); 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 @@ -1459,9 +1457,7 @@ static int ttusb_dec_init_dvb(struct ttu dprintk("%s\n", __func__); if ((result = dvb_register_adapter(&dec->adapter,- dec->model_name, THIS_MODULE,- &dec->udev->dev,- adapter_nr)) < 0) {+ dec->model_name, THIS_MODULE, &dec->udev->dev)) < 0) { printk("%s: dvb_register_adapter failed: error %d\n", __func__, result); diff -r 595fe1ec7511 linux/drivers/media/video/cx23885/cx23885-dvb.c--- a/linux/drivers/media/video/cx23885/cx23885-dvb.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/video/cx23885/cx23885-dvb.c Mon Jun 23 15:07:11 2008 -0700@@ -55,8 +55,6 @@ static unsigned int alt_tuner; static unsigned int alt_tuner; module_param(alt_tuner, int, 0644); MODULE_PARM_DESC(alt_tuner, "Enable alternate tuner configuration");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); /* ------------------------------------------------------------------ */ @@ -499,7 +497,7 @@ static int dvb_register(struct cx23885_t /* register everything */ return videobuf_dvb_register(&port->dvb, THIS_MODULE, port,- &dev->pci->dev, adapter_nr);+ &dev->pci->dev); } int cx23885_dvb_register(struct cx23885_tsport *port)diff -r 595fe1ec7511 linux/drivers/media/video/cx88/cx88-dvb.c--- a/linux/drivers/media/video/cx88/cx88-dvb.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/video/cx88/cx88-dvb.c Mon Jun 23 15:07:11 2008 -0700@@ -58,8 +58,6 @@ static unsigned int debug; static unsigned int debug; module_param(debug, int, 0644); MODULE_PARM_DESC(debug,"enable debug messages [dvb]");--DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); #define dprintk(level,fmt, arg...) if (debug >= level) \ printk(KERN_DEBUG "%s/2-dvb: " fmt, core->name, ## arg)@@ -910,8 +908,7 @@ static int dvb_register(struct cx8802_de cx88_call_i2c_clients(core, TUNER_SET_STANDBY, NULL); /* register everything */- return videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev,- &dev->pci->dev, adapter_nr);+ return videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev, &dev->pci->dev); frontend_detach: if (dev->dvb.frontend) {diff -r 595fe1ec7511 linux/drivers/media/video/saa7134/saa7134-dvb.c--- a/linux/drivers/media/video/saa7134/saa7134-dvb.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/video/saa7134/saa7134-dvb.c Mon Jun 23 15:07:11 2008 -0700@@ -64,8 +64,6 @@ static int debug; static int debug; module_param(debug, int, 0644); 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) \ printk(KERN_DEBUG "%s/dvb: " fmt, dev->name , ## arg); } while(0)@@ -1323,8 +1321,7 @@ static int dvb_init(struct saa7134_dev * } /* register everything else */- ret = videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev, &dev->pci->dev,- adapter_nr);+ ret = videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev, &dev->pci->dev); /* this sequence is necessary to make the tda1004x load its firmware * and to enter analog mode of hybrid boardsdiff -r 595fe1ec7511 linux/drivers/media/video/videobuf-dvb.c--- a/linux/drivers/media/video/videobuf-dvb.c Sun Jun 22 14:11:13 2008 +0200+++ b/linux/drivers/media/video/videobuf-dvb.c Mon Jun 23 15:07:11 2008 -0700@@ -146,16 +146,14 @@ int videobuf_dvb_register(struct videobu int videobuf_dvb_register(struct videobuf_dvb *dvb, struct module *module, void *adapter_priv,- struct device *device,- short *adapter_nr)+ struct device *device) { int result; mutex_init(&dvb->lock); /* register adapter */- result = dvb_register_adapter(&dvb->adapter, dvb->name, module, device,- adapter_nr);+ result = dvb_register_adapter(&dvb->adapter, dvb->name, module, device); if (result < 0) { printk(KERN_WARNING "%s: dvb_register_adapter failed (errno = %d)\n", dvb->name, result);diff -r 595fe1ec7511 linux/include/linux/dvb/frontend.h--- a/linux/include/linux/dvb/frontend.h Sun Jun 22 14:11:13 2008 +0200+++ b/linux/include/linux/dvb/frontend.h Mon Jun 23 15:07:11 2008 -0700@@ -28,14 +28,23 @@ #include <asm/types.h> -+/**+ * Usage of fe_type_t enumerations:+ * Don't use FE_QPSK, FE_QAM, FE_OFDM any longer in new applications.+ * If the FE_HAS_EXTENDED_INFO is set within the fe_caps,+ * applications should ignore the fe_type_t returned by the FE_GET_INFO ioctl.+ *+ */ typedef enum fe_type {- FE_QPSK,- FE_QAM,- FE_OFDM,- FE_ATSC+ FE_QPSK = 0,+ FE_QAM = 1,+ FE_OFDM = 2,+ FE_ATSC = 3,+ FE_DVB_S = (1 << 2),+ FE_DVB_C = (1 << 3),+ FE_DVB_T = (1 << 4),+ FE_DVB_S2 = (1 << 5), } fe_type_t;- typedef enum fe_caps { FE_IS_STUPID = 0,@@ -62,11 +71,22 @@ typedef enum fe_caps { FE_CAN_HIERARCHY_AUTO = 0x100000, FE_CAN_8VSB = 0x200000, FE_CAN_16VSB = 0x400000,+ FE_HAS_EXTENDED_INFO = 0x10000000, FE_NEEDS_BENDING = 0x20000000, // not supported anymore, don't use (frontend requires frequency bending) FE_CAN_RECOVER = 0x40000000, // frontend can recover from a cable unplug automatically FE_CAN_MUTE_TS = 0x80000000 // frontend can stop spurious TS data output } fe_caps_t; +typedef enum fe_caps_extended {+ FE_CAN_FEC_1_4 = 0x1,+ FE_CAN_FEC_5_11 = 0x2,+ FE_CAN_FEC_3_5 = 0x4,+ FE_CAN_FEC_9_10 = 0x8,+ FE_CAN_8PSK = 0x10,+ FE_CAN_TURBO_FEC = 0x20,+ FE_CAN_DCII = 0x40,+ FE_CAN_DSS_QPSK = 0x80+} fe_caps_extended_t; struct dvb_frontend_info { char name[128];@@ -82,7 +102,6 @@ struct dvb_frontend_info { fe_caps_t caps; }; - /** * Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for * the meaning of this struct...@@ -126,9 +145,9 @@ typedef enum fe_status { FE_HAS_SYNC = 0x08, /* found sync bytes */ FE_HAS_LOCK = 0x10, /* everything's working... */ FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */- FE_REINIT = 0x40 /* frontend was reinitialized, */-} fe_status_t; /* application is recommended to reset */- /* DiSEqC, tone and parameters */+ FE_REINIT = 0x40 /* legacy cruft, do not use */+} fe_status_t;+ typedef enum fe_spectral_inversion { INVERSION_OFF,@@ -147,21 +166,55 @@ typedef enum fe_code_rate { FEC_6_7, FEC_7_8, FEC_8_9,- FEC_AUTO+ FEC_AUTO,+ FEC_1_4,+ FEC_5_11,+ FEC_3_5,+ FEC_9_10 } fe_code_rate_t; typedef enum fe_modulation {- QPSK,- QAM_16,- QAM_32,- QAM_64,- QAM_128,- QAM_256,- QAM_AUTO,- VSB_8,- VSB_16+ MOD_QPSK = 0,+ QPSK = 0,+ MOD_QAM_16 = 1,+ QAM_16 = 1,+ MOD_QAM_32 = 2,+ QAM_32 = 2,+ MOD_QAM_64 = 3,+ QAM_64 = 3,+ MOD_QAM_128 = 4,+ QAM_128 = 4,+ MOD_QAM_256 = 5,+ QAM_256 = 5,+ MOD_QAM_AUTO = 6,+ QAM_AUTO = 6,+ MOD_8VSB = 7,+ VSB_8 = 7,+ MOD_16VSB = 8,+ VSB_16 = 8,+ MOD_2VSB = 9,+ MOD_4VSB = 10,+ MOD_BPSK = 11,+ MOD_16APSK = 12,+ MOD_32APSK = 13,+ MOD_8PSK = 14,+ MOD_16PSK = 15,+ MOD_QPSK_TURBO = 16,+ MOD_8PSK_TURBO = 17,+ MOD_16QAM_TURBO = 18,+ MOD_DCII_C_QPSK = 19,+ MOD_DCII_I_QPSK = 20,+ MOD_DCII_Q_QPSK = 21,+ MOD_DCII_C_OQPSK = 22,+ MOD_DSS_QPSK = 23, } fe_modulation_t;++typedef enum fe_rolloff_factor {+ ROLLOFF_ALPHA_0_35,+ ROLLOFF_ALPHA_0_25,+ ROLLOFF_ALPHA_0_20+} fe_rolloff_factor_t; typedef enum fe_transmit_mode { TRANSMISSION_MODE_2K,@@ -194,23 +247,33 @@ typedef enum fe_hierarchy { HIERARCHY_AUTO } fe_hierarchy_t; +/**+ * this struct will be filled by the FE_GET_EXTENDED_INFO ioctl.+ * it is a extension to the normal frontend capabilities and provided+ * if the dvb_fe_info.caps is having the FE_HAS_EXTENDED_INFO bit set.+ */+struct dvb_fe_caps_extended {+ __u32 caps; /* supported fecs and modulations */+ __u32 standards; /* supported frontend_types */+}; -struct dvb_qpsk_parameters {- __u32 symbol_rate; /* symbol rate in Symbols per second */++struct dvb_dvbs_parameters {+ __u32 symbol_rate; /* symbol rate in symbols per second */ fe_code_rate_t fec_inner; /* forward error correction (see above) */ }; -struct dvb_qam_parameters {- __u32 symbol_rate; /* symbol rate in Symbols per second */+struct dvb_dvbc_parameters {+ __u32 symbol_rate; /* symbol rate in symbols per second */ fe_code_rate_t fec_inner; /* forward error correction (see above) */ fe_modulation_t modulation; /* modulation type (see above) */ }; -struct dvb_vsb_parameters {+struct dvb_atsc_parameters { fe_modulation_t modulation; /* modulation type (see above) */ }; -struct dvb_ofdm_parameters {+struct dvb_dvbt_parameters { fe_bandwidth_t bandwidth; fe_code_rate_t code_rate_HP; /* high priority stream code rate */ fe_code_rate_t code_rate_LP; /* low priority stream code rate */@@ -220,25 +283,75 @@ struct dvb_ofdm_parameters { fe_hierarchy_t hierarchy_information; }; +struct dvb_dvbs2_parameters {+ __u32 symbol_rate; /* symbol rate in symbols per second */+ fe_code_rate_t fec_inner; /* forward error correction (see above) */+ fe_modulation_t modulation; /* modulation type (see above) */+ fe_rolloff_factor_t rolloff_factor; /* rolloff factor needed for dvb-s2 */+}; +/* The following structure is used to allocate enough space in the union+ for future expansion.+*/+struct dvb_private_parameters {+ __u32 priv[64];+};++#define dvb_qpsk_parameters dvb_dvbs_parameters+#define dvb_qam_parameters dvb_dvbc_parameters+#define dvb_ofdm_parameters dvb_dvbt_parameters+#define dvb_vsb_parameters dvb_atsc_parameters++/* just kept for backwards binary compatibility+ * deprecated for usage in actual applications+ */ struct dvb_frontend_parameters { __u32 frequency; /* (absolute) frequency in Hz for QAM/OFDM/ATSC */ /* intermediate frequency in kHz for QPSK */ fe_spectral_inversion_t inversion; union {- struct dvb_qpsk_parameters qpsk;- struct dvb_qam_parameters qam;- struct dvb_ofdm_parameters ofdm;- struct dvb_vsb_parameters vsb;+ struct dvb_dvbs_parameters qpsk;+ struct dvb_dvbc_parameters qam;+ struct dvb_dvbt_parameters ofdm;+ struct dvb_atsc_parameters vsb; } u;+};// __attribute((__deprecated__));++typedef union {+ struct dvb_dvbs_parameters qpsk;+ struct dvb_dvbc_parameters qam;+ struct dvb_dvbt_parameters ofdm;+ struct dvb_atsc_parameters vsb;+ struct dvb_dvbs2_parameters qpsk2;+ struct dvb_private_parameters priv;+} frontend_parameters_union;++struct dvb_frontend_parameters_new {+ __u32 frequency; /* (absolute) frequency in Hz for QAM/OFDM/ATSC */+ /* intermediate frequency in kHz for QPSK */+ fe_spectral_inversion_t inversion;+ frontend_parameters_union u; }; +/**+ * Important:+ * FE_GET_EVENT and struct dvb_frontend_event+ * are deprecated due to:+ * FE_GET_EVENT is a mis-designed ioctl+ * informations within dvb_frontend_event will+ * always return stale information.+ * Applications should:+ * - open the frontend device with O_NONBLOCK+ * - poll() for events+ * - FE_GET_EVENT all pending events to clear the POLLPRI status,+ * and throw them away+ * - FE_READ_STATUS etc. to get current information+ */ struct dvb_frontend_event { fe_status_t status; struct dvb_frontend_parameters parameters;-};-+}; // __attribute((__deprecated__)); /** * When set, this flag will disable any zigzagging or other "normal" tuning@@ -267,9 +380,36 @@ struct dvb_frontend_event { #define FE_READ_SNR _IOR('o', 72, __u16) #define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32) +#define FE_SET_FRONTEND2 _IOW('o', 84, struct dvb_frontend_parameters_new)+#define FE_GET_FRONTEND2 _IOR('o', 85, struct dvb_frontend_parameters_new)++/**+ * next two IOCTLs are deprecated for further use in applications+ */ #define FE_SET_FRONTEND _IOW('o', 76, struct dvb_frontend_parameters) #define FE_GET_FRONTEND _IOR('o', 77, struct dvb_frontend_parameters)++ #define FE_SET_FRONTEND_TUNE_MODE _IO('o', 81) /* unsigned int */++/**+ * use to set the FE_STANDARD - if a tuner supports more than one type.+ * e.g. DVB-C/T or DVB-S/S2 combi frontends. after FE_SET_STANDARD was set,+ * the drivers has to make sure still to reflect the standards available,+ * but capabilities should be adjusted to the selected standard+ */+#define FE_SET_STANDARD _IO('o', 82) /* fe_type_t */++/**+ * used to query the extended frontend capabilities (see above for details)+ */+#define FE_GET_EXTENDED_INFO _IOR('o', 83, struct dvb_fe_caps_extended)++/**+ * FE_GET_EVENT is deprecated for applications.+ * you should use FE_READ_STATUS and if needed the FE_GET_FRONTEND_NEW+ * IOCTLs.+ */ #define FE_GET_EVENT _IOR('o', 78, struct dvb_frontend_event) #define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */diff -r 595fe1ec7511 linux/include/media/videobuf-dvb.h--- a/linux/include/media/videobuf-dvb.h Sun Jun 22 14:11:13 2008 +0200+++ b/linux/include/media/videobuf-dvb.h Mon Jun 23 15:07:11 2008 -0700@@ -35,8 +35,7 @@ int videobuf_dvb_register(struct videobu int videobuf_dvb_register(struct videobuf_dvb *dvb, struct module *module, void *adapter_priv,- struct device *device,- short *adapter_nr);+ struct device *device); void videobuf_dvb_unregister(struct videobuf_dvb *dvb); /*