Adrian Bunk wrote:
> The following compile error comes from Linus' tree:
> 
> <--  snip  -->
> 
> ...
>   LD      .tmp_vmlinux1
> drivers/built-in.o(.bss+0xd50e4): multiple definition of `debug'
> arch/i386/kernel/built-in.o(.text+0x2e4c): first defined here
> make: *** [.tmp_vmlinux1] Error 1
> 
> <--  snip  -->
> 
> 
> The offender is in drivers/media/dvb/dibusb/dvb-dibusb-core.c:
> 
> "debug" is not a good name for a global variable...

I've sorted this out with Patrick. The attached patch cleans up
various aspects of dibusb module argument handling, so it's a bit
larger than just renaming "debug".

Andrew, could you please make sure this patch and
dib3000mc-build-fix.patch (from rc2-mm1) will be
merged into Linus tree before 2.6.11? Or should I
submit it to Linus seperately?

Thanks,
Johannes


diff -rupN linux-2.6.11-rc2-mm1/drivers/media/dvb/dibusb/dvb-dibusb-core.c 
linux-2.6.11-rc2-mm1-dvb/drivers/media/dvb/dibusb/dvb-dibusb-core.c
--- linux-2.6.11-rc2-mm1/drivers/media/dvb/dibusb/dvb-dibusb-core.c     
2005-01-24 23:31:05.000000000 +0100
+++ linux-2.6.11-rc2-mm1-dvb/drivers/media/dvb/dibusb/dvb-dibusb-core.c 
2005-01-24 23:16:27.000000000 +0100
@@ -27,17 +27,19 @@
 #include <linux/moduleparam.h>
 
 /* debug */
-#ifdef CONFIG_DVB_DIBCOM_DEBUG
-int debug;
-module_param(debug, int, 0644);
-MODULE_PARM_DESC(debug, "set debugging level 
(1=info,2=xfer,4=alotmore,8=ts,16=err,32=rc (|-able)).");
+int dvb_dibusb_debug;
+module_param_named(debug, dvb_dibusb_debug,  int, 0644);
+MODULE_PARM_DESC(debug, "set debugging level 
(1=info,2=xfer,4=alotmore,8=ts,16=err,32=rc (|-able))."
+#ifndef CONFIG_DVB_DIBCOM_DEBUG
+               " (debugging is not enabled)"
 #endif
+);
 
-int pid_parse;
+static int pid_parse;
 module_param(pid_parse, int, 0644);
 MODULE_PARM_DESC(pid_parse, "enable pid parsing (filtering) when running at 
USB2.0");
 
-int rc_query_interval;
+static int rc_query_interval;
 module_param(rc_query_interval, int, 0644);
 MODULE_PARM_DESC(rc_query_interval, "interval in msecs for remote control 
query (default: 100; min: 40)");
 
@@ -410,6 +412,10 @@ static int dibusb_probe(struct usb_inter
                dib->udev = udev;
                dib->dibdev = dibdev;
 
+               /* store parameters to structures */
+               dib->rc_query_interval = rc_query_interval;
+               dib->pid_parse = pid_parse;
+
                usb_set_intfdata(intf, dib);
                
                ret = dibusb_init(dib);
diff -rupN linux-2.6.11-rc2-mm1/drivers/media/dvb/dibusb/dvb-dibusb-remote.c 
linux-2.6.11-rc2-mm1-dvb/drivers/media/dvb/dibusb/dvb-dibusb-remote.c
--- linux-2.6.11-rc2-mm1/drivers/media/dvb/dibusb/dvb-dibusb-remote.c   
2005-01-24 23:31:05.000000000 +0100
+++ linux-2.6.11-rc2-mm1-dvb/drivers/media/dvb/dibusb/dvb-dibusb-remote.c       
2005-01-24 18:26:53.000000000 +0100
@@ -143,7 +143,7 @@ static void dibusb_remote_query(void *da
           if we're busy. */
        dibusb_read_remote_control(dib);
        schedule_delayed_work(&dib->rc_query_work,
-                             msecs_to_jiffies(rc_query_interval));
+                             msecs_to_jiffies(dib->rc_query_interval));
 }
 
 int dibusb_remote_init(struct usb_dibusb *dib)
@@ -171,11 +171,11 @@ int dibusb_remote_init(struct usb_dibusb
        INIT_WORK(&dib->rc_query_work, dibusb_remote_query, dib);
 
        /* Start the remote-control polling. */
-       if (rc_query_interval < 40)
-               rc_query_interval = 100; /* default */
+       if (dib->rc_query_interval < 40)
+               dib->rc_query_interval = 100; /* default */
 
-       info("schedule remote query interval to %d msecs.",rc_query_interval);
-       
schedule_delayed_work(&dib->rc_query_work,msecs_to_jiffies(rc_query_interval));
+       info("schedule remote query interval to %d 
msecs.",dib->rc_query_interval);
+       
schedule_delayed_work(&dib->rc_query_work,msecs_to_jiffies(dib->rc_query_interval));
 
        dib->init_state |= DIBUSB_STATE_REMOTE;
        
diff -rupN linux-2.6.11-rc2-mm1/drivers/media/dvb/dibusb/dvb-dibusb-usb.c 
linux-2.6.11-rc2-mm1-dvb/drivers/media/dvb/dibusb/dvb-dibusb-usb.c
--- linux-2.6.11-rc2-mm1/drivers/media/dvb/dibusb/dvb-dibusb-usb.c      
2005-01-24 23:31:05.000000000 +0100
+++ linux-2.6.11-rc2-mm1-dvb/drivers/media/dvb/dibusb/dvb-dibusb-usb.c  
2005-01-24 18:26:53.000000000 +0100
@@ -158,7 +158,7 @@ int dibusb_streaming(struct usb_dibusb *
 
 int dibusb_urb_init(struct usb_dibusb *dib)
 {
-       int ret,i,bufsize;
+       int ret,i,bufsize,def_pid_parse = 1;
        
        /*
         * when reloading the driver w/o replugging the device 
@@ -210,12 +210,14 @@ int dibusb_urb_init(struct usb_dibusb *d
                dib->init_state |= DIBUSB_STATE_URB_SUBMIT;
        }
 
-
-       dib->pid_parse = 1;
+       /* dib->pid_parse here contains the value of the module parameter */
+       /* decide if pid parsing can be deactivated: 
+        * is possible (by speed) and wanted (by user) 
+        */
        switch (dib->dibdev->dev_cl->id) {
                case DIBUSB2_0:
-                       if (dib->udev->speed == USB_SPEED_HIGH && !pid_parse) {
-                               dib->pid_parse = 0;
+                       if (dib->udev->speed == USB_SPEED_HIGH && 
!dib->pid_parse) {
+                               def_pid_parse = 0;
                                info("running at HIGH speed, will deliver the 
complete TS.");
                        } else
                                info("will use pid_parsing.");
@@ -223,6 +225,8 @@ int dibusb_urb_init(struct usb_dibusb *d
                default: 
                        break;
        }
+       /* from here on it contains the device and user decision */
+       dib->pid_parse = def_pid_parse;
        
        return 0;
 }
diff -rupN linux-2.6.11-rc2-mm1/drivers/media/dvb/dibusb/dvb-dibusb.h 
linux-2.6.11-rc2-mm1-dvb/drivers/media/dvb/dibusb/dvb-dibusb.h
--- linux-2.6.11-rc2-mm1/drivers/media/dvb/dibusb/dvb-dibusb.h  2005-01-24 
23:31:05.000000000 +0100
+++ linux-2.6.11-rc2-mm1-dvb/drivers/media/dvb/dibusb/dvb-dibusb.h      
2005-01-24 18:26:53.000000000 +0100
@@ -27,31 +27,26 @@
 /* debug */
 #ifdef CONFIG_DVB_DIBCOM_DEBUG
 #define dprintk(level,args...) \
-           do { if ((debug & level)) { printk(args); } } while (0)
+           do { if ((dvb_dibusb_debug & level)) { printk(args); } } while (0)
 
-#define debug_dump(b,l) if (debug) {\
-       int i; deb_xfer("%s: %d > ",__FUNCTION__,l); \
+#define debug_dump(b,l) {\
+       int i; \
        for (i = 0; i < l; i++) deb_xfer("%02x ", b[i]); \
        deb_xfer("\n");\
 }
 
-/* module parameters - declared in -core.c */
-extern int debug;
-
 #else
 #define dprintk(args...)
 #define debug_dump(b,l)
 #endif
 
+extern int dvb_dibusb_debug;
+
 /* Version information */
 #define DRIVER_VERSION "0.3"
 #define DRIVER_DESC "Driver for DiBcom based USB Budget DVB-T device"
 #define DRIVER_AUTHOR "Patrick Boettcher, [EMAIL PROTECTED]"
 
-/* module parameters - declared in -core.c */
-extern int pid_parse;
-extern int rc_query_interval;
-
 #define deb_info(args...) dprintk(0x01,args)
 #define deb_xfer(args...) dprintk(0x02,args)
 #define deb_alot(args...) dprintk(0x04,args)
@@ -162,7 +157,6 @@ struct usb_dibusb {
        int init_state;
 
        int feedcount;
-       int pid_parse;
        struct dib_fe_xfer_ops xfer_ops;
 
        struct dibusb_tuner *tuner;
@@ -196,6 +190,10 @@ struct usb_dibusb {
        struct input_dev rc_input_dev;
        struct work_struct rc_query_work;
        int rc_input_event;
+
+       /* module parameters */
+       int pid_parse;
+       int rc_query_interval;
 };
 
 /* commonly used functions in the separated files */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to