Merge master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb
diff --git a/Documentation/video4linux/CARDLIST.bttv b/Documentation/video4linux/CARDLIST.bttv
index 74fb085..b72706c 100644
--- a/Documentation/video4linux/CARDLIST.bttv
+++ b/Documentation/video4linux/CARDLIST.bttv
@@ -142,3 +142,4 @@
 141 -> Asound Skyeye PCTV
 142 -> Sabrent TV-FM (bttv version)
 143 -> Hauppauge ImpactVCB (bt878)                         [0070:13eb]
+144 -> MagicTV
diff --git a/Documentation/video4linux/CARDLIST.cx88 b/Documentation/video4linux/CARDLIST.cx88
index 34b6e59..56e194f 100644
--- a/Documentation/video4linux/CARDLIST.cx88
+++ b/Documentation/video4linux/CARDLIST.cx88
@@ -19,7 +19,7 @@
  18 -> Hauppauge Nova-T DVB-T                              [0070:9002,0070:9001]
  19 -> Conexant DVB-T reference design                     [14f1:0187]
  20 -> Provideo PV259                                      [1540:2580]
- 21 -> DViCO FusionHDTV DVB-T Plus                         [18ac:db10]
+ 21 -> DViCO FusionHDTV DVB-T Plus                         [18ac:db10,18ac:db11]
  22 -> pcHDTV HD3000 HDTV                                  [7063:3000]
  23 -> digitalnow DNTV Live! DVB-T                         [17de:a8a6]
  24 -> Hauppauge WinTV 28xxx (Roslyn) models               [0070:2801]
diff --git a/drivers/media/common/saa7146_core.c b/drivers/media/common/saa7146_core.c
index 2899d34..04c1938 100644
--- a/drivers/media/common/saa7146_core.c
+++ b/drivers/media/common/saa7146_core.c
@@ -109,10 +109,9 @@
 	struct page *pg;
 	int i;
 
-	sglist = kmalloc(sizeof(struct scatterlist)*nr_pages, GFP_KERNEL);
+	sglist = kcalloc(nr_pages, sizeof(struct scatterlist), GFP_KERNEL);
 	if (NULL == sglist)
 		return NULL;
-	memset(sglist,0,sizeof(struct scatterlist)*nr_pages);
 	for (i = 0; i < nr_pages; i++, virt += PAGE_SIZE) {
 		pg = vmalloc_to_page(virt);
 		if (NULL == pg)
@@ -306,15 +305,13 @@
 	struct saa7146_dev *dev;
 	int err = -ENOMEM;
 
-	dev = kmalloc(sizeof(struct saa7146_dev), GFP_KERNEL);
+	/* clear out mem for sure */
+	dev = kzalloc(sizeof(struct saa7146_dev), GFP_KERNEL);
 	if (!dev) {
 		ERR(("out of memory.\n"));
 		goto out;
 	}
 
-	/* clear out mem for sure */
-	memset(dev, 0x0, sizeof(struct saa7146_dev));
-
 	DEB_EE(("pci:%p\n",pci));
 
 	err = pci_enable_device(pci);
diff --git a/drivers/media/common/saa7146_fops.c b/drivers/media/common/saa7146_fops.c
index b614612..f8cf73e 100644
--- a/drivers/media/common/saa7146_fops.c
+++ b/drivers/media/common/saa7146_fops.c
@@ -239,13 +239,12 @@
 	}
 
 	/* allocate per open data */
-	fh = kmalloc(sizeof(*fh),GFP_KERNEL);
+	fh = kzalloc(sizeof(*fh),GFP_KERNEL);
 	if (NULL == fh) {
 		DEB_S(("cannot allocate memory for per open data.\n"));
 		result = -ENOMEM;
 		goto out;
 	}
-	memset(fh,0,sizeof(*fh));
 
 	file->private_data = fh;
 	fh->dev = dev;
@@ -464,12 +463,11 @@
 
 int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv)
 {
-	struct saa7146_vv *vv = kmalloc (sizeof(struct saa7146_vv),GFP_KERNEL);
+	struct saa7146_vv *vv = kzalloc (sizeof(struct saa7146_vv),GFP_KERNEL);
 	if( NULL == vv ) {
 		ERR(("out of memory. aborting.\n"));
 		return -1;
 	}
-	memset(vv, 0x0, sizeof(*vv));
 
 	DEB_EE(("dev:%p\n",dev));
 
diff --git a/drivers/media/dvb/b2c2/flexcop.c b/drivers/media/dvb/b2c2/flexcop.c
index 123ed96..56ba524 100644
--- a/drivers/media/dvb/b2c2/flexcop.c
+++ b/drivers/media/dvb/b2c2/flexcop.c
@@ -220,20 +220,18 @@
 struct flexcop_device *flexcop_device_kmalloc(size_t bus_specific_len)
 {
 	void *bus;
-	struct flexcop_device *fc = kmalloc(sizeof(struct flexcop_device), GFP_KERNEL);
+	struct flexcop_device *fc = kzalloc(sizeof(struct flexcop_device), GFP_KERNEL);
 	if (!fc) {
 		err("no memory");
 		return NULL;
 	}
-	memset(fc, 0, sizeof(struct flexcop_device));
 
-	bus = kmalloc(bus_specific_len, GFP_KERNEL);
+	bus = kzalloc(bus_specific_len, GFP_KERNEL);
 	if (!bus) {
 		err("no memory");
 		kfree(fc);
 		return NULL;
 	}
-	memset(bus, 0, bus_specific_len);
 
 	fc->bus_specific = bus;
 
diff --git a/drivers/media/dvb/bt8xx/dvb-bt8xx.c b/drivers/media/dvb/bt8xx/dvb-bt8xx.c
index 01b4e0a..f65f64b 100644
--- a/drivers/media/dvb/bt8xx/dvb-bt8xx.c
+++ b/drivers/media/dvb/bt8xx/dvb-bt8xx.c
@@ -786,10 +786,9 @@
 	struct pci_dev* bttv_pci_dev;
 	int ret;
 
-	if (!(card = kmalloc(sizeof(struct dvb_bt8xx_card), GFP_KERNEL)))
+	if (!(card = kzalloc(sizeof(struct dvb_bt8xx_card), GFP_KERNEL)))
 		return -ENOMEM;
 
-	memset(card, 0, sizeof(*card));
 	init_MUTEX(&card->lock);
 	card->bttv_nr = sub->core->nr;
 	strncpy(card->card_name, sub->core->name, sizeof(sub->core->name));
diff --git a/drivers/media/dvb/dvb-core/dvb_ca_en50221.c b/drivers/media/dvb/dvb-core/dvb_ca_en50221.c
index 4bb779a..00347a7 100644
--- a/drivers/media/dvb/dvb-core/dvb_ca_en50221.c
+++ b/drivers/media/dvb/dvb-core/dvb_ca_en50221.c
@@ -1649,21 +1649,17 @@
 		return -EINVAL;
 
 	/* initialise the system data */
-	if ((ca =
-	     (struct dvb_ca_private *) kmalloc(sizeof(struct dvb_ca_private),
-					       GFP_KERNEL)) == NULL) {
+	if ((ca = kzalloc(sizeof(struct dvb_ca_private), GFP_KERNEL)) == NULL) {
 		ret = -ENOMEM;
 		goto error;
 	}
-	memset(ca, 0, sizeof(struct dvb_ca_private));
 	ca->pub = pubca;
 	ca->flags = flags;
 	ca->slot_count = slot_count;
-	if ((ca->slot_info = kmalloc(sizeof(struct dvb_ca_slot) * slot_count, GFP_KERNEL)) == NULL) {
+	if ((ca->slot_info = kcalloc(slot_count, sizeof(struct dvb_ca_slot), GFP_KERNEL)) == NULL) {
 		ret = -ENOMEM;
 		goto error;
 	}
-	memset(ca->slot_info, 0, sizeof(struct dvb_ca_slot) * slot_count);
 	init_waitqueue_head(&ca->wait_queue);
 	ca->thread_pid = 0;
 	init_waitqueue_head(&ca->thread_queue);
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c
index 4a08c4a..771f32d 100644
--- a/drivers/media/dvb/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb/dvb-core/dvb_frontend.c
@@ -1024,13 +1024,12 @@
 	if (down_interruptible (&frontend_mutex))
 		return -ERESTARTSYS;
 
-	fe->frontend_priv = kmalloc(sizeof(struct dvb_frontend_private), GFP_KERNEL);
+	fe->frontend_priv = kzalloc(sizeof(struct dvb_frontend_private), GFP_KERNEL);
 	if (fe->frontend_priv == NULL) {
 		up(&frontend_mutex);
 		return -ENOMEM;
 	}
 	fepriv = fe->frontend_priv;
-	memset(fe->frontend_priv, 0, sizeof(struct dvb_frontend_private));
 
 	init_MUTEX (&fepriv->sem);
 	init_waitqueue_head (&fepriv->wait_queue);
diff --git a/drivers/media/dvb/dvb-usb/cxusb.c b/drivers/media/dvb/dvb-usb/cxusb.c
index 358ed15..18d1698 100644
--- a/drivers/media/dvb/dvb-usb/cxusb.c
+++ b/drivers/media/dvb/dvb-usb/cxusb.c
@@ -253,6 +253,26 @@
 	return 0;
 }
 
+static int cxusb_mt352_demod_init(struct dvb_frontend* fe)
+{	/* used in both lgz201 and th7579 */
+	static u8 clock_config []  = { CLOCK_CTL,  0x38, 0x39 };
+	static u8 reset []         = { RESET,      0x80 };
+	static u8 adc_ctl_1_cfg [] = { ADC_CTL_1,  0x40 };
+	static u8 agc_cfg []       = { AGC_TARGET, 0x24, 0x20 };
+	static u8 gpp_ctl_cfg []   = { GPP_CTL,    0x33 };
+	static u8 capt_range_cfg[] = { CAPT_RANGE, 0x32 };
+
+	mt352_write(fe, clock_config,   sizeof(clock_config));
+	udelay(200);
+	mt352_write(fe, reset,          sizeof(reset));
+	mt352_write(fe, adc_ctl_1_cfg,  sizeof(adc_ctl_1_cfg));
+
+	mt352_write(fe, agc_cfg,        sizeof(agc_cfg));
+	mt352_write(fe, gpp_ctl_cfg,    sizeof(gpp_ctl_cfg));
+	mt352_write(fe, capt_range_cfg, sizeof(capt_range_cfg));
+	return 0;
+}
+
 struct cx22702_config cxusb_cx22702_config = {
 	.demod_address = 0x63,
 
@@ -274,6 +294,13 @@
 	.pll_set       = dvb_usb_pll_set,
 };
 
+struct mt352_config cxusb_mt352_config = {
+	/* used in both lgz201 and th7579 */
+	.demod_address = 0x0f,
+	.demod_init    = cxusb_mt352_demod_init,
+	.pll_set       = dvb_usb_pll_set,
+};
+
 /* Callbacks for DVB USB */
 static int cxusb_fmd1216me_tuner_attach(struct dvb_usb_device *d)
 {
@@ -302,6 +329,20 @@
 	return 0;
 }
 
+static int cxusb_lgz201_tuner_attach(struct dvb_usb_device *d)
+{
+	d->pll_addr = 0x61;
+	d->pll_desc = &dvb_pll_lg_z201;
+	return 0;
+}
+
+static int cxusb_dtt7579_tuner_attach(struct dvb_usb_device *d)
+{
+	d->pll_addr = 0x60;
+	d->pll_desc = &dvb_pll_thomson_dtt7579;
+	return 0;
+}
+
 static int cxusb_cx22702_frontend_attach(struct dvb_usb_device *d)
 {
 	u8 b;
@@ -329,6 +370,19 @@
 	return -EIO;
 }
 
+static int cxusb_mt352_frontend_attach(struct dvb_usb_device *d)
+{	/* used in both lgz201 and th7579 */
+	if (usb_set_interface(d->udev,0,0) < 0)
+		err("set interface failed");
+
+	cxusb_ctrl_msg(d,CMD_DIGITAL, NULL, 0, NULL, 0);
+
+	if ((d->fe = mt352_attach(&cxusb_mt352_config, &d->i2c_adap)) != NULL)
+		return 0;
+
+	return -EIO;
+}
+
 static int cxusb_dee1601_frontend_attach(struct dvb_usb_device *d)
 {
 	if (usb_set_interface(d->udev,0,0) < 0)
@@ -370,13 +424,17 @@
 static struct dvb_usb_properties cxusb_medion_properties;
 static struct dvb_usb_properties cxusb_bluebird_lgh064f_properties;
 static struct dvb_usb_properties cxusb_bluebird_dee1601_properties;
+static struct dvb_usb_properties cxusb_bluebird_lgz201_properties;
+static struct dvb_usb_properties cxusb_bluebird_dtt7579_properties;
 
 static int cxusb_probe(struct usb_interface *intf,
 		const struct usb_device_id *id)
 {
 	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_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) {
 		return 0;
 	}
 
@@ -389,6 +447,12 @@
 		{ USB_DEVICE(USB_VID_DVICO, USB_PID_DVICO_BLUEBIRD_LG064F_WARM) },
 		{ USB_DEVICE(USB_VID_DVICO, USB_PID_DVICO_BLUEBIRD_DEE1601_COLD) },
 		{ USB_DEVICE(USB_VID_DVICO, USB_PID_DVICO_BLUEBIRD_DEE1601_WARM) },
+		{ USB_DEVICE(USB_VID_DVICO, USB_PID_DVICO_BLUEBIRD_LGZ201_COLD) },
+		{ USB_DEVICE(USB_VID_DVICO, USB_PID_DVICO_BLUEBIRD_LGZ201_WARM) },
+		{ USB_DEVICE(USB_VID_DVICO, USB_PID_DVICO_BLUEBIRD_TH7579_COLD) },
+		{ USB_DEVICE(USB_VID_DVICO, USB_PID_DVICO_BLUEBIRD_TH7579_WARM) },
+		{ USB_DEVICE(USB_VID_DVICO, USB_PID_DIGITALNOW_BLUEBIRD_DEE1601_COLD) },
+		{ USB_DEVICE(USB_VID_DVICO, USB_PID_DIGITALNOW_BLUEBIRD_DEE1601_WARM) },
 		{}		/* Terminating entry */
 };
 MODULE_DEVICE_TABLE (usb, cxusb_table);
@@ -505,12 +569,96 @@
 		}
 	},
 
-	.num_device_descs = 1,
+	.num_device_descs = 2,
 	.devices = {
 		{   "DViCO FusionHDTV DVB-T Dual USB",
 			{ &cxusb_table[3], NULL },
 			{ &cxusb_table[4], NULL },
 		},
+		{   "DigitalNow DVB-T Dual USB",
+			{ &cxusb_table[9],  NULL },
+			{ &cxusb_table[10], NULL },
+		},
+	}
+};
+
+static struct dvb_usb_properties cxusb_bluebird_lgz201_properties = {
+	.caps = DVB_USB_IS_AN_I2C_ADAPTER,
+
+	.usb_ctrl          = DEVICE_SPECIFIC,
+	.firmware          = "dvb-usb-bluebird-01.fw",
+	.download_firmware = bluebird_patch_dvico_firmware_download,
+	/* use usb alt setting 0 for EP4 transfer (dvb-t),
+	   use usb alt setting 7 for EP2 transfer (atsc) */
+
+	.size_of_priv     = sizeof(struct cxusb_state),
+
+	.streaming_ctrl   = cxusb_streaming_ctrl,
+	.power_ctrl       = cxusb_power_ctrl,
+	.frontend_attach  = cxusb_mt352_frontend_attach,
+	.tuner_attach     = cxusb_lgz201_tuner_attach,
+
+	.i2c_algo         = &cxusb_i2c_algo,
+
+	.generic_bulk_ctrl_endpoint = 0x01,
+	/* parameter for the MPEG2-data transfer */
+	.urb = {
+		.type = DVB_USB_BULK,
+		.count = 5,
+		.endpoint = 0x04,
+		.u = {
+			.bulk = {
+				.buffersize = 8192,
+			}
+		}
+	},
+
+	.num_device_descs = 1,
+	.devices = {
+		{   "DViCO FusionHDTV DVB-T USB (LGZ201)",
+			{ &cxusb_table[5], NULL },
+			{ &cxusb_table[6], NULL },
+		},
+	}
+};
+
+static struct dvb_usb_properties cxusb_bluebird_dtt7579_properties = {
+	.caps = DVB_USB_IS_AN_I2C_ADAPTER,
+
+	.usb_ctrl          = DEVICE_SPECIFIC,
+	.firmware          = "dvb-usb-bluebird-01.fw",
+	.download_firmware = bluebird_patch_dvico_firmware_download,
+	/* use usb alt setting 0 for EP4 transfer (dvb-t),
+	   use usb alt setting 7 for EP2 transfer (atsc) */
+
+	.size_of_priv     = sizeof(struct cxusb_state),
+
+	.streaming_ctrl   = cxusb_streaming_ctrl,
+	.power_ctrl       = cxusb_power_ctrl,
+	.frontend_attach  = cxusb_mt352_frontend_attach,
+	.tuner_attach     = cxusb_dtt7579_tuner_attach,
+
+	.i2c_algo         = &cxusb_i2c_algo,
+
+	.generic_bulk_ctrl_endpoint = 0x01,
+	/* parameter for the MPEG2-data transfer */
+	.urb = {
+		.type = DVB_USB_BULK,
+		.count = 5,
+		.endpoint = 0x04,
+		.u = {
+			.bulk = {
+				.buffersize = 8192,
+			}
+		}
+	},
+
+	.num_device_descs = 1,
+	.devices = {
+		{   "DViCO FusionHDTV DVB-T USB (TH7579)",
+			{ &cxusb_table[7], NULL },
+			{ &cxusb_table[8], NULL },
+		},
 	}
 };
 
diff --git a/drivers/media/dvb/dvb-usb/dtt200u-fe.c b/drivers/media/dvb/dvb-usb/dtt200u-fe.c
index 0a94ec2..cd21ddb 100644
--- a/drivers/media/dvb/dvb-usb/dtt200u-fe.c
+++ b/drivers/media/dvb/dvb-usb/dtt200u-fe.c
@@ -156,10 +156,9 @@
 	struct dtt200u_fe_state* state = NULL;
 
 	/* allocate memory for the internal state */
-	state = (struct dtt200u_fe_state*) kmalloc(sizeof(struct dtt200u_fe_state), GFP_KERNEL);
+	state = kzalloc(sizeof(struct dtt200u_fe_state), GFP_KERNEL);
 	if (state == NULL)
 		goto error;
-	memset(state,0,sizeof(struct dtt200u_fe_state));
 
 	deb_info("attaching frontend dtt200u\n");
 
diff --git a/drivers/media/dvb/dvb-usb/dvb-usb-ids.h b/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
index d229343..4a1b9e77 100644
--- a/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
+++ b/drivers/media/dvb/dvb-usb/dvb-usb-ids.h
@@ -95,6 +95,8 @@
 #define USB_PID_DVICO_BLUEBIRD_TH7579_WARM		0xdb11
 #define USB_PID_DVICO_BLUEBIRD_DEE1601_COLD		0xdb50
 #define USB_PID_DVICO_BLUEBIRD_DEE1601_WARM		0xdb51
+#define USB_PID_DIGITALNOW_BLUEBIRD_DEE1601_COLD	0xdb54
+#define USB_PID_DIGITALNOW_BLUEBIRD_DEE1601_WARM	0xdb55
 #define USB_PID_MEDION_MD95700				0x0932
 #define USB_PID_KYE_DVB_T_COLD				0x701e
 #define USB_PID_KYE_DVB_T_WARM				0x701f
diff --git a/drivers/media/dvb/dvb-usb/dvb-usb-init.c b/drivers/media/dvb/dvb-usb/dvb-usb-init.c
index 2e23060..716f8bf 100644
--- a/drivers/media/dvb/dvb-usb/dvb-usb-init.c
+++ b/drivers/media/dvb/dvb-usb/dvb-usb-init.c
@@ -154,12 +154,11 @@
 	}
 
 	info("found a '%s' in warm state.",desc->name);
-	d = kmalloc(sizeof(struct dvb_usb_device),GFP_KERNEL);
+		d = kzalloc(sizeof(struct dvb_usb_device),GFP_KERNEL);
 	if (d == NULL) {
 		err("no memory for 'struct dvb_usb_device'");
 		return ret;
 	}
-	memset(d,0,sizeof(struct dvb_usb_device));
 
 	d->udev = udev;
 	memcpy(&d->props,props,sizeof(struct dvb_usb_properties));
@@ -167,13 +166,12 @@
 	d->owner = owner;
 
 	if (d->props.size_of_priv > 0) {
-		d->priv = kmalloc(d->props.size_of_priv,GFP_KERNEL);
+			d->priv = kzalloc(d->props.size_of_priv,GFP_KERNEL);
 		if (d->priv == NULL) {
 			err("no memory for priv in 'struct dvb_usb_device'");
 			kfree(d);
 			return -ENOMEM;
 		}
-		memset(d->priv,0,d->props.size_of_priv);
 	}
 
 	usb_set_intfdata(intf, d);
diff --git a/drivers/media/dvb/dvb-usb/dvb-usb-urb.c b/drivers/media/dvb/dvb-usb/dvb-usb-urb.c
index 36b7048..ee82197 100644
--- a/drivers/media/dvb/dvb-usb/dvb-usb-urb.c
+++ b/drivers/media/dvb/dvb-usb/dvb-usb-urb.c
@@ -175,15 +175,13 @@
 
 	deb_mem("all in all I will use %lu bytes for streaming\n",num*size);
 
-	if ((d->buf_list = kmalloc(num*sizeof(u8 *), GFP_ATOMIC)) == NULL)
+	if ((d->buf_list = kcalloc(num, sizeof(u8 *), GFP_ATOMIC)) == NULL)
 		return -ENOMEM;
 
-	if ((d->dma_addr = kmalloc(num*sizeof(dma_addr_t), GFP_ATOMIC)) == NULL) {
+	if ((d->dma_addr = kcalloc(num, sizeof(dma_addr_t), GFP_ATOMIC)) == NULL) {
 		kfree(d->buf_list);
 		return -ENOMEM;
 	}
-	memset(d->buf_list,0,num*sizeof(u8 *));
-	memset(d->dma_addr,0,num*sizeof(dma_addr_t));
 
 	d->state |= DVB_USB_STATE_URB_BUF;
 
@@ -285,10 +283,9 @@
 	usb_clear_halt(d->udev,usb_rcvbulkpipe(d->udev,d->props.urb.endpoint));
 
 	/* allocate the array for the data transfer URBs */
-	d->urb_list = kmalloc(d->props.urb.count * sizeof(struct urb *),GFP_KERNEL);
+	d->urb_list = kzalloc(d->props.urb.count * sizeof(struct urb *),GFP_KERNEL);
 	if (d->urb_list == NULL)
 		return -ENOMEM;
-	memset(d->urb_list,0,d->props.urb.count * sizeof(struct urb *));
 	d->state |= DVB_USB_STATE_URB_LIST;
 
 	switch (d->props.urb.type) {
diff --git a/drivers/media/dvb/dvb-usb/vp702x-fe.c b/drivers/media/dvb/dvb-usb/vp702x-fe.c
index 0885d9f..b6d95e1 100644
--- a/drivers/media/dvb/dvb-usb/vp702x-fe.c
+++ b/drivers/media/dvb/dvb-usb/vp702x-fe.c
@@ -281,10 +281,9 @@
 
 struct dvb_frontend * vp702x_fe_attach(struct dvb_usb_device *d)
 {
-	struct vp702x_fe_state *s = kmalloc(sizeof(struct vp702x_fe_state), GFP_KERNEL);
+	struct vp702x_fe_state *s = kzalloc(sizeof(struct vp702x_fe_state), GFP_KERNEL);
 	if (s == NULL)
 		goto error;
-	memset(s,0,sizeof(struct vp702x_fe_state));
 
 	s->d = d;
 	s->fe.ops = &vp702x_fe_ops;
diff --git a/drivers/media/dvb/dvb-usb/vp7045-fe.c b/drivers/media/dvb/dvb-usb/vp7045-fe.c
index 83f1de1..5242cca 100644
--- a/drivers/media/dvb/dvb-usb/vp7045-fe.c
+++ b/drivers/media/dvb/dvb-usb/vp7045-fe.c
@@ -145,10 +145,9 @@
 
 struct dvb_frontend * vp7045_fe_attach(struct dvb_usb_device *d)
 {
-	struct vp7045_fe_state *s = kmalloc(sizeof(struct vp7045_fe_state), GFP_KERNEL);
+	struct vp7045_fe_state *s = kzalloc(sizeof(struct vp7045_fe_state), GFP_KERNEL);
 	if (s == NULL)
 		goto error;
-	memset(s,0,sizeof(struct vp7045_fe_state));
 
 	s->d = d;
 	s->fe.ops = &vp7045_fe_ops;
diff --git a/drivers/media/dvb/frontends/bcm3510.c b/drivers/media/dvb/frontends/bcm3510.c
index 3b132ba..caaee89 100644
--- a/drivers/media/dvb/frontends/bcm3510.c
+++ b/drivers/media/dvb/frontends/bcm3510.c
@@ -782,10 +782,9 @@
 	bcm3510_register_value v;
 
 	/* allocate memory for the internal state */
-	state = kmalloc(sizeof(struct bcm3510_state), GFP_KERNEL);
+	state = kzalloc(sizeof(struct bcm3510_state), GFP_KERNEL);
 	if (state == NULL)
 		goto error;
-	memset(state,0,sizeof(struct bcm3510_state));
 
 	/* setup the state */
 
diff --git a/drivers/media/dvb/frontends/dib3000mb.c b/drivers/media/dvb/frontends/dib3000mb.c
index 6b05536..ae589ad 100644
--- a/drivers/media/dvb/frontends/dib3000mb.c
+++ b/drivers/media/dvb/frontends/dib3000mb.c
@@ -700,10 +700,9 @@
 	struct dib3000_state* state = NULL;
 
 	/* allocate memory for the internal state */
-	state = kmalloc(sizeof(struct dib3000_state), GFP_KERNEL);
+	state = kzalloc(sizeof(struct dib3000_state), GFP_KERNEL);
 	if (state == NULL)
 		goto error;
-	memset(state,0,sizeof(struct dib3000_state));
 
 	/* setup the state */
 	state->i2c = i2c;
diff --git a/drivers/media/dvb/frontends/dib3000mc.c b/drivers/media/dvb/frontends/dib3000mc.c
index c024fad..3b303db 100644
--- a/drivers/media/dvb/frontends/dib3000mc.c
+++ b/drivers/media/dvb/frontends/dib3000mc.c
@@ -832,10 +832,9 @@
 	u16 devid;
 
 	/* allocate memory for the internal state */
-	state = kmalloc(sizeof(struct dib3000_state), GFP_KERNEL);
+	state = kzalloc(sizeof(struct dib3000_state), GFP_KERNEL);
 	if (state == NULL)
 		goto error;
-	memset(state,0,sizeof(struct dib3000_state));
 
 	/* setup the state */
 	state->i2c = i2c;
diff --git a/drivers/media/dvb/frontends/dvb-pll.c b/drivers/media/dvb/frontends/dvb-pll.c
index a3d57ce..757075f 100644
--- a/drivers/media/dvb/frontends/dvb-pll.c
+++ b/drivers/media/dvb/frontends/dvb-pll.c
@@ -345,6 +345,23 @@
 };
 EXPORT_SYMBOL(dvb_pll_tbmv30111in);
 
+/*
+ * Philips SD1878 Tuner.
+ */
+struct dvb_pll_desc dvb_pll_philips_sd1878_tda8261 = {
+	.name  = "Philips SD1878",
+	.min   =  950000,
+	.max   = 2150000,
+	.count = 4,
+	.entries = {
+		{ 1250000, 499, 500, 0xc4, 0x00},
+		{ 1550000, 499, 500, 0xc4, 0x40},
+		{ 2050000, 499, 500, 0xc4, 0x80},
+		{ 2150000, 499, 500, 0xc4, 0xc0},
+	},
+};
+EXPORT_SYMBOL(dvb_pll_philips_sd1878_tda8261);
+
 /* ----------------------------------------------------------- */
 /* code                                                        */
 
diff --git a/drivers/media/dvb/frontends/dvb-pll.h b/drivers/media/dvb/frontends/dvb-pll.h
index 24d4d2e..f682c09 100644
--- a/drivers/media/dvb/frontends/dvb-pll.h
+++ b/drivers/media/dvb/frontends/dvb-pll.h
@@ -39,6 +39,7 @@
 extern struct dvb_pll_desc dvb_pll_tuv1236d;
 extern struct dvb_pll_desc dvb_pll_tdhu2;
 extern struct dvb_pll_desc dvb_pll_tbmv30111in;
+extern struct dvb_pll_desc dvb_pll_philips_sd1878_tda8261;
 
 int dvb_pll_configure(struct dvb_pll_desc *desc, u8 *buf,
 		      u32 freq, int bandwidth);
diff --git a/drivers/media/dvb/frontends/lgdt330x.c b/drivers/media/dvb/frontends/lgdt330x.c
index 9d21464..4691ac5 100644
--- a/drivers/media/dvb/frontends/lgdt330x.c
+++ b/drivers/media/dvb/frontends/lgdt330x.c
@@ -714,10 +714,9 @@
 	u8 buf[1];
 
 	/* Allocate memory for the internal state */
-	state = (struct lgdt330x_state*) kmalloc(sizeof(struct lgdt330x_state), GFP_KERNEL);
+	state = kzalloc(sizeof(struct lgdt330x_state), GFP_KERNEL);
 	if (state == NULL)
 		goto error;
-	memset(state,0,sizeof(*state));
 
 	/* Setup the state */
 	state->config = config;
diff --git a/drivers/media/dvb/frontends/mt352.c b/drivers/media/dvb/frontends/mt352.c
index f0c610f..aaaec90 100644
--- a/drivers/media/dvb/frontends/mt352.c
+++ b/drivers/media/dvb/frontends/mt352.c
@@ -535,9 +535,8 @@
 	struct mt352_state* state = NULL;
 
 	/* allocate memory for the internal state */
-	state = kmalloc(sizeof(struct mt352_state), GFP_KERNEL);
+	state = kzalloc(sizeof(struct mt352_state), GFP_KERNEL);
 	if (state == NULL) goto error;
-	memset(state,0,sizeof(*state));
 
 	/* setup the state */
 	state->i2c = i2c;
diff --git a/drivers/media/dvb/frontends/nxt200x.c b/drivers/media/dvb/frontends/nxt200x.c
index aeafef4..78d2b93 100644
--- a/drivers/media/dvb/frontends/nxt200x.c
+++ b/drivers/media/dvb/frontends/nxt200x.c
@@ -1110,10 +1110,9 @@
 	u8 buf [] = {0,0,0,0,0};
 
 	/* allocate memory for the internal state */
-	state = (struct nxt200x_state*) kmalloc(sizeof(struct nxt200x_state), GFP_KERNEL);
+	state = kzalloc(sizeof(struct nxt200x_state), GFP_KERNEL);
 	if (state == NULL)
 		goto error;
-	memset(state,0,sizeof(*state));
 
 	/* setup the state */
 	state->config = config;
diff --git a/drivers/media/dvb/pluto2/pluto2.c b/drivers/media/dvb/pluto2/pluto2.c
index bbebd1c..1c5316e 100644
--- a/drivers/media/dvb/pluto2/pluto2.c
+++ b/drivers/media/dvb/pluto2/pluto2.c
@@ -584,11 +584,10 @@
 	struct dmx_demux *dmx;
 	int ret = -ENOMEM;
 
-	pluto = kmalloc(sizeof(struct pluto), GFP_KERNEL);
+	pluto = kzalloc(sizeof(struct pluto), GFP_KERNEL);
 	if (!pluto)
 		goto out;
 
-	memset(pluto, 0, sizeof(struct pluto));
 	pluto->pdev = pdev;
 
 	ret = pci_enable_device(pdev);
diff --git a/drivers/media/dvb/ttpci/av7110.c b/drivers/media/dvb/ttpci/av7110.c
index 8ce4146..327a808 100644
--- a/drivers/media/dvb/ttpci/av7110.c
+++ b/drivers/media/dvb/ttpci/av7110.c
@@ -2565,14 +2565,12 @@
 	}
 
 	/* prepare the av7110 device struct */
-	av7110 = kmalloc(sizeof(struct av7110), GFP_KERNEL);
+	av7110 = kzalloc(sizeof(struct av7110), GFP_KERNEL);
 	if (!av7110) {
 		dprintk(1, "out of memory\n");
 		return -ENOMEM;
 	}
 
-	memset(av7110, 0, sizeof(struct av7110));
-
 	av7110->card_name = (char*) pci_ext->ext_priv;
 	av7110->dev = dev;
 	dev->ext_priv = av7110;
diff --git a/drivers/media/dvb/ttpci/budget-av.c b/drivers/media/dvb/ttpci/budget-av.c
index f9d0045..1465c04 100644
--- a/drivers/media/dvb/ttpci/budget-av.c
+++ b/drivers/media/dvb/ttpci/budget-av.c
@@ -37,6 +37,7 @@
 #include "stv0299.h"
 #include "tda10021.h"
 #include "tda1004x.h"
+#include "dvb-pll.h"
 #include <media/saa7146_vv.h>
 #include <linux/module.h>
 #include <linux/errno.h>
@@ -864,8 +865,117 @@
 	.request_firmware = philips_tu1216_request_firmware,
 };
 
+static u8 philips_sd1878_inittab[] = {
+	0x01, 0x15,
+	0x02, 0x30,
+	0x03, 0x00,
+	0x04, 0x7d,
+	0x05, 0x35,
+	0x06, 0x40,
+	0x07, 0x00,
+	0x08, 0x43,
+	0x09, 0x02,
+	0x0C, 0x51,
+	0x0D, 0x82,
+	0x0E, 0x23,
+	0x10, 0x3f,
+	0x11, 0x84,
+	0x12, 0xb9,
+	0x15, 0xc9,
+	0x16, 0x19,
+	0x17, 0x8c,
+	0x18, 0x59,
+	0x19, 0xf8,
+	0x1a, 0xfe,
+	0x1c, 0x7f,
+	0x1d, 0x00,
+	0x1e, 0x00,
+	0x1f, 0x50,
+	0x20, 0x00,
+	0x21, 0x00,
+	0x22, 0x00,
+	0x23, 0x00,
+	0x28, 0x00,
+	0x29, 0x28,
+	0x2a, 0x14,
+	0x2b, 0x0f,
+	0x2c, 0x09,
+	0x2d, 0x09,
+	0x31, 0x1f,
+	0x32, 0x19,
+	0x33, 0xfc,
+	0x34, 0x93,
+	0xff, 0xff
+};
 
+static int philips_sd1878_tda8261_pll_set(struct dvb_frontend *fe,
+		struct i2c_adapter *i2c,
+		struct dvb_frontend_parameters *params)
+{
+	u8              buf[4];
+	int             rc;
+	struct i2c_msg  tuner_msg = {.addr=0x60,.flags=0,.buf=buf,.len=sizeof(buf)};
 
+	if((params->frequency < 950000) || (params->frequency > 2150000))
+		return -EINVAL;
+
+	rc=dvb_pll_configure(&dvb_pll_philips_sd1878_tda8261, buf,
+			params->frequency, 0);
+	if(rc < 0) return rc;
+
+	if(i2c_transfer(i2c, &tuner_msg, 1) != 1)
+		return -EIO;
+
+    return 0;
+}
+
+static int philips_sd1878_ci_set_symbol_rate(struct dvb_frontend *fe,
+		u32 srate, u32 ratio)
+{
+	u8 aclk = 0;
+	u8 bclk = 0;
+	u8 m1;
+
+	aclk = 0xb5;
+	if (srate < 2000000)
+		bclk = 0x86;
+	else if (srate < 5000000)
+		bclk = 0x89;
+	else if (srate < 15000000)
+		bclk = 0x8f;
+	else if (srate < 45000000)
+		bclk = 0x95;
+
+	m1 = 0x14;
+	if (srate < 4000000)
+		m1 = 0x10;
+
+	stv0299_writereg(fe, 0x0e, 0x23);
+	stv0299_writereg(fe, 0x0f, 0x94);
+	stv0299_writereg(fe, 0x10, 0x39);
+	stv0299_writereg(fe, 0x13, aclk);
+	stv0299_writereg(fe, 0x14, bclk);
+	stv0299_writereg(fe, 0x15, 0xc9);
+	stv0299_writereg(fe, 0x1f, (ratio >> 16) & 0xff);
+	stv0299_writereg(fe, 0x20, (ratio >> 8) & 0xff);
+	stv0299_writereg(fe, 0x21, (ratio) & 0xf0);
+	stv0299_writereg(fe, 0x0f, 0x80 | m1);
+
+	return 0;
+}
+
+static struct stv0299_config philips_sd1878_config = {
+	.demod_address = 0x68,
+	.inittab = philips_sd1878_inittab,
+	.mclk = 88000000UL,
+	.invert = 0,
+	.skip_reinit = 0,
+	.lock_output = STV0229_LOCKOUTPUT_1,
+	.volt13_op0_op1 = STV0299_VOLT13_OP0,
+	.min_delay_ms = 100,
+	.set_symbol_rate = philips_sd1878_ci_set_symbol_rate,
+	.pll_set = philips_sd1878_tda8261_pll_set,
+};
 
 static u8 read_pwm(struct budget_av *budget_av)
 {
@@ -886,7 +996,10 @@
 #define SUBID_DVBS_KNC1_PLUS	0x0011
 #define SUBID_DVBS_TYPHOON	0x4f56
 #define SUBID_DVBS_CINERGY1200	0x1154
+#define SUBID_DVBS_CYNERGY1200N 0x1155
 
+#define SUBID_DVBS_TV_STAR	0x0014
+#define SUBID_DVBS_TV_STAR_CI	0x0016
 #define SUBID_DVBC_KNC1		0x0020
 #define SUBID_DVBC_KNC1_PLUS	0x0021
 #define SUBID_DVBC_CINERGY1200	0x1156
@@ -922,6 +1035,13 @@
 		}
 		break;
 
+	case SUBID_DVBS_TV_STAR:
+	case SUBID_DVBS_TV_STAR_CI:
+	case SUBID_DVBS_CYNERGY1200N:
+		fe = stv0299_attach(&philips_sd1878_config,
+				&budget_av->budget.i2c_adap);
+		break;
+
 	case SUBID_DVBS_KNC1_PLUS:
 	case SUBID_DVBS_TYPHOON:
 		fe = stv0299_attach(&typhoon_config,
@@ -1027,11 +1147,9 @@
 
 	dprintk(2, "dev: %p\n", dev);
 
-	if (!(budget_av = kmalloc(sizeof(struct budget_av), GFP_KERNEL)))
+	if (!(budget_av = kzalloc(sizeof(struct budget_av), GFP_KERNEL)))
 		return -ENOMEM;
 
-	memset(budget_av, 0, sizeof(struct budget_av));
-
 	budget_av->has_saa7113 = 0;
 	budget_av->budget.ci_present = 0;
 
@@ -1166,10 +1284,12 @@
 MAKE_BUDGET_INFO(knc1s, "KNC1 DVB-S", BUDGET_KNC1S);
 MAKE_BUDGET_INFO(knc1c, "KNC1 DVB-C", BUDGET_KNC1C);
 MAKE_BUDGET_INFO(knc1t, "KNC1 DVB-T", BUDGET_KNC1T);
+MAKE_BUDGET_INFO(kncxs, "KNC TV STAR DVB-S", BUDGET_TVSTAR);
 MAKE_BUDGET_INFO(knc1sp, "KNC1 DVB-S Plus", BUDGET_KNC1SP);
 MAKE_BUDGET_INFO(knc1cp, "KNC1 DVB-C Plus", BUDGET_KNC1CP);
 MAKE_BUDGET_INFO(knc1tp, "KNC1 DVB-T Plus", BUDGET_KNC1TP);
 MAKE_BUDGET_INFO(cin1200s, "TerraTec Cinergy 1200 DVB-S", BUDGET_CIN1200S);
+MAKE_BUDGET_INFO(cin1200sn, "TerraTec Cinergy 1200 DVB-S", BUDGET_CIN1200S);
 MAKE_BUDGET_INFO(cin1200c, "Terratec Cinergy 1200 DVB-C", BUDGET_CIN1200C);
 MAKE_BUDGET_INFO(cin1200t, "Terratec Cinergy 1200 DVB-T", BUDGET_CIN1200T);
 
@@ -1178,11 +1298,14 @@
 	MAKE_EXTENSION_PCI(knc1s, 0x1131, 0x0010),
 	MAKE_EXTENSION_PCI(knc1s, 0x1894, 0x0010),
 	MAKE_EXTENSION_PCI(knc1sp, 0x1131, 0x0011),
+	MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0014),
+	MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0016),
 	MAKE_EXTENSION_PCI(knc1c, 0x1894, 0x0020),
 	MAKE_EXTENSION_PCI(knc1cp, 0x1894, 0x0021),
 	MAKE_EXTENSION_PCI(knc1t, 0x1894, 0x0030),
 	MAKE_EXTENSION_PCI(knc1tp, 0x1894, 0x0031),
 	MAKE_EXTENSION_PCI(cin1200s, 0x153b, 0x1154),
+	MAKE_EXTENSION_PCI(cin1200sn, 0x153b, 0x1155),
 	MAKE_EXTENSION_PCI(cin1200c, 0x153b, 0x1156),
 	MAKE_EXTENSION_PCI(cin1200t, 0x153b, 0x1157),
 	{
diff --git a/drivers/media/dvb/ttpci/budget.h b/drivers/media/dvb/ttpci/budget.h
index c8d48cf..c7bb63c 100644
--- a/drivers/media/dvb/ttpci/budget.h
+++ b/drivers/media/dvb/ttpci/budget.h
@@ -95,6 +95,7 @@
 #define BUDGET_KNC1SP		   11
 #define BUDGET_KNC1CP		   12
 #define BUDGET_KNC1TP		   13
+#define BUDGET_TVSTAR		   14
 
 #define BUDGET_VIDEO_PORTA         0
 #define BUDGET_VIDEO_PORTB         1
diff --git a/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c b/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
index 104df61..5a13c47 100644
--- a/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
+++ b/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
@@ -1489,11 +1489,9 @@
 
 	if (intf->altsetting->desc.bInterfaceNumber != 1) return -ENODEV;
 
-	if (!(ttusb = kmalloc(sizeof(struct ttusb), GFP_KERNEL)))
+	if (!(ttusb = kzalloc(sizeof(struct ttusb), GFP_KERNEL)))
 		return -ENOMEM;
 
-	memset(ttusb, 0, sizeof(struct ttusb));
-
 	ttusb->dev = udev;
 	ttusb->c = 0;
 	ttusb->mux_state = 0;
diff --git a/drivers/media/dvb/ttusb-dec/ttusb_dec.c b/drivers/media/dvb/ttusb-dec/ttusb_dec.c
index d8966d1..df83117 100644
--- a/drivers/media/dvb/ttusb-dec/ttusb_dec.c
+++ b/drivers/media/dvb/ttusb-dec/ttusb_dec.c
@@ -1606,15 +1606,13 @@
 
 	udev = interface_to_usbdev(intf);
 
-	if (!(dec = kmalloc(sizeof(struct ttusb_dec), GFP_KERNEL))) {
+	if (!(dec = kzalloc(sizeof(struct ttusb_dec), GFP_KERNEL))) {
 		printk("%s: couldn't allocate memory.\n", __FUNCTION__);
 		return -ENOMEM;
 	}
 
 	usb_set_intfdata(intf, (void *)dec);
 
-	memset(dec, 0, sizeof(struct ttusb_dec));
-
 	switch (le16_to_cpu(id->idProduct)) {
 	case 0x1006:
 		ttusb_dec_set_model(dec, TTUSB_DEC3000S);
diff --git a/drivers/media/radio/radio-gemtek-pci.c b/drivers/media/radio/radio-gemtek-pci.c
index 69ac8aa..8e499b8 100644
--- a/drivers/media/radio/radio-gemtek-pci.c
+++ b/drivers/media/radio/radio-gemtek-pci.c
@@ -318,11 +318,10 @@
 	struct gemtek_pci_card *card;
 	struct video_device *devradio;
 
-	if ( (card = kmalloc( sizeof( struct gemtek_pci_card ), GFP_KERNEL )) == NULL ) {
+	if ( (card = kzalloc( sizeof( struct gemtek_pci_card ), GFP_KERNEL )) == NULL ) {
 		printk( KERN_ERR "gemtek_pci: out of memory\n" );
 		return -ENOMEM;
 	}
-	memset( card, 0, sizeof( struct gemtek_pci_card ) );
 
 	if ( pci_enable_device( pci_dev ) ) 
 		goto err_pci;
diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
index 2fe260f..d82c8a3 100644
--- a/drivers/media/video/Kconfig
+++ b/drivers/media/video/Kconfig
@@ -183,7 +183,7 @@
 	help
 	  Say Y here to enable support for the Stradis 4:2:2 MPEG-2 video
 	  driver for PCI.  There is a product page at
-	  <http://www.stradis.com/decoder.html>.
+	  <http://www.stradis.com/>.
 
 config VIDEO_ZORAN
 	tristate "Zoran ZR36057/36067 Video For Linux"
diff --git a/drivers/media/video/adv7170.c b/drivers/media/video/adv7170.c
index e61003d..4ce07ae 100644
--- a/drivers/media/video/adv7170.c
+++ b/drivers/media/video/adv7170.c
@@ -413,10 +413,9 @@
 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 		return 0;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == 0)
 		return -ENOMEM;
-	memset(client, 0, sizeof(struct i2c_client));
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &i2c_driver_adv7170;
@@ -433,12 +432,11 @@
 	}
 	strlcpy(I2C_NAME(client), dname, sizeof(I2C_NAME(client)));
 
-	encoder = kmalloc(sizeof(struct adv7170), GFP_KERNEL);
+	encoder = kzalloc(sizeof(struct adv7170), GFP_KERNEL);
 	if (encoder == NULL) {
 		kfree(client);
 		return -ENOMEM;
 	}
-	memset(encoder, 0, sizeof(struct adv7170));
 	encoder->norm = VIDEO_MODE_NTSC;
 	encoder->input = 0;
 	encoder->enable = 1;
diff --git a/drivers/media/video/adv7175.c b/drivers/media/video/adv7175.c
index 6d9536a..4e218f2 100644
--- a/drivers/media/video/adv7175.c
+++ b/drivers/media/video/adv7175.c
@@ -463,10 +463,9 @@
 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 		return 0;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == 0)
 		return -ENOMEM;
-	memset(client, 0, sizeof(struct i2c_client));
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &i2c_driver_adv7175;
@@ -483,12 +482,11 @@
 	}
 	strlcpy(I2C_NAME(client), dname, sizeof(I2C_NAME(client)));
 
-	encoder = kmalloc(sizeof(struct adv7175), GFP_KERNEL);
+	encoder = kzalloc(sizeof(struct adv7175), GFP_KERNEL);
 	if (encoder == NULL) {
 		kfree(client);
 		return -ENOMEM;
 	}
-	memset(encoder, 0, sizeof(struct adv7175));
 	encoder->norm = VIDEO_MODE_PAL;
 	encoder->input = 0;
 	encoder->enable = 1;
diff --git a/drivers/media/video/bt819.c b/drivers/media/video/bt819.c
index 560b998..d644779 100644
--- a/drivers/media/video/bt819.c
+++ b/drivers/media/video/bt819.c
@@ -528,21 +528,18 @@
 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 		return 0;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == 0)
 		return -ENOMEM;
-	memset(client, 0, sizeof(struct i2c_client));
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &i2c_driver_bt819;
 
-	decoder = kmalloc(sizeof(struct bt819), GFP_KERNEL);
+	decoder = kzalloc(sizeof(struct bt819), GFP_KERNEL);
 	if (decoder == NULL) {
 		kfree(client);
 		return -ENOMEM;
 	}
-
-	memset(decoder, 0, sizeof(struct bt819));
 	decoder->norm = VIDEO_MODE_NTSC;
 	decoder->input = 0;
 	decoder->enable = 1;
diff --git a/drivers/media/video/bt832.c b/drivers/media/video/bt832.c
index dda4aa6..07c78f1 100644
--- a/drivers/media/video/bt832.c
+++ b/drivers/media/video/bt832.c
@@ -75,13 +75,13 @@
 
 	if(debug>1) {
 		int i;
-		v4l_dbg(2,i2c_client_s,"hexdump:");
+		v4l_dbg(2, debug,i2c_client_s,"hexdump:");
 		for(i=1;i<65;i++) {
 			if(i!=1) {
 				if(((i-1)%8)==0) printk(" ");
 				if(((i-1)%16)==0) {
 					printk("\n");
-					v4l_dbg(2,i2c_client_s,"hexdump:");
+					v4l_dbg(2, debug,i2c_client_s,"hexdump:");
 				}
 			}
 			printk(" %02x",buf[i]);
@@ -167,9 +167,8 @@
 	client_template.adapter = adap;
 	client_template.addr    = addr;
 
-	if (NULL == (t = kmalloc(sizeof(*t), GFP_KERNEL)))
+	if (NULL == (t = kzalloc(sizeof(*t), GFP_KERNEL)))
 		return -ENOMEM;
-	memset(t,0,sizeof(*t));
 	t->client = client_template;
 	i2c_set_clientdata(&t->client, t);
 	i2c_attach_client(&t->client);
diff --git a/drivers/media/video/bt856.c b/drivers/media/video/bt856.c
index 6050806..909b593 100644
--- a/drivers/media/video/bt856.c
+++ b/drivers/media/video/bt856.c
@@ -316,21 +316,19 @@
 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 		return 0;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == 0)
 		return -ENOMEM;
-	memset(client, 0, sizeof(struct i2c_client));
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &i2c_driver_bt856;
 	strlcpy(I2C_NAME(client), "bt856", sizeof(I2C_NAME(client)));
 
-	encoder = kmalloc(sizeof(struct bt856), GFP_KERNEL);
+	encoder = kzalloc(sizeof(struct bt856), GFP_KERNEL);
 	if (encoder == NULL) {
 		kfree(client);
 		return -ENOMEM;
 	}
-	memset(encoder, 0, sizeof(struct bt856));
 	encoder->norm = VIDEO_MODE_NTSC;
 	encoder->enable = 1;
 	i2c_set_clientdata(client, encoder);
diff --git a/drivers/media/video/bttv-cards.c b/drivers/media/video/bttv-cards.c
index 1621ab1..65323e7 100644
--- a/drivers/media/video/bttv-cards.c
+++ b/drivers/media/video/bttv-cards.c
@@ -321,7 +321,7 @@
 		.audio_inputs	= 1,
 		.tuner		= 0,
 		.svhs		= 2,
-		.muxsel		= { 2, 3, 1, 0},
+		.muxsel		= { 2, 3, 1, 0 },
 		.tuner_type	= -1,
 		.tuner_addr	= ADDR_UNSET,
 		.radio_addr     = ADDR_UNSET,
@@ -333,8 +333,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 15,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 2, 0, 0, 0, 10},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 2, 0, 0, 0, 10 },
 		.needs_tvaudio	= 1,
 		.tuner_type	= -1,
 		.tuner_addr	= ADDR_UNSET,
@@ -347,8 +347,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 7,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 0, 1, 2, 3, 4},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 0, 1, 2, 3, 4 },
 		.needs_tvaudio	= 1,
 		.tuner_type	= -1,
 		.tuner_addr	= ADDR_UNSET,
@@ -361,8 +361,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 7,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 4, 0, 2, 3, 1},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 4, 0, 2, 3, 1 },
 		.no_msp34xx	= 1,
 		.needs_tvaudio	= 1,
 		.tuner_type     = TUNER_PHILIPS_NTSC,
@@ -380,7 +380,7 @@
 		.tuner		= -1,
 		.svhs		= 2,
 		.gpiomask	= 0,
-		.muxsel		= { 2, 3, 1, 1},
+		.muxsel		= { 2, 3, 1, 1 },
 		.audiomux	= { 0 },
 		.needs_tvaudio	= 0,
 		.tuner_type	= 4,
@@ -394,8 +394,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 3,
-		.muxsel		= { 2, 3, 1, 0},
-		.audiomux	= { 0, 1, 0, 1, 3},
+		.muxsel		= { 2, 3, 1, 0 },
+		.audiomux	= { 0, 1, 0, 1, 3 },
 		.needs_tvaudio	= 1,
 		.tuner_type	= -1,
 		.tuner_addr	= ADDR_UNSET,
@@ -407,9 +407,9 @@
 		.audio_inputs	= 1,
 		.tuner		= 0,
 		.svhs		= 3,
-		.muxsel		= { 2, 3, 1, 1},
+		.muxsel		= { 2, 3, 1, 1 },
 		.gpiomask	= 0x0f,
-		.audiomux	= { 0x0c, 0x04, 0x08, 0x04, 0},
+		.audiomux	= { 0x0c, 0x04, 0x08, 0x04, 0 },
 		/*                0x04 for some cards ?? */
 		.needs_tvaudio	= 1,
 		.tuner_type	= -1,
@@ -425,8 +425,8 @@
 		.tuner		= -1,
 		.svhs		= 3,
 		.gpiomask	= 0,
-		.muxsel		= { 2, 3, 1, 0, 0},
-		.audiomux	= {0 },
+		.muxsel		= { 2, 3, 1, 0, 0 },
+		.audiomux	= { 0 },
 		.needs_tvaudio	= 1,
 		.tuner_type	= -1,
 		.tuner_addr	= ADDR_UNSET,
@@ -441,8 +441,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0xc00,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 0, 0xc00, 0x800, 0x400, 0xc00, 0},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 0, 0xc00, 0x800, 0x400, 0xc00, 0 },
 		.needs_tvaudio	= 1,
 		.pll		= PLL_28,
 		.tuner_type	= -1,
@@ -456,8 +456,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 3,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 1, 1, 2, 3, 0},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 1, 1, 2, 3, 0 },
 		.needs_tvaudio	= 0,
 		.pll		= PLL_28,
 		.tuner_type	= TUNER_TEMIC_PAL,
@@ -471,8 +471,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x0f, /* old: 7 */
-		.muxsel		= { 2, 0, 1, 1},
-		.audiomux	= { 0, 1, 2, 3, 4},
+		.muxsel		= { 2, 0, 1, 1 },
+		.audiomux	= { 0, 1, 2, 3, 4 },
 		.needs_tvaudio	= 1,
 		.pll		= PLL_28,
 		.tuner_type	= -1,
@@ -486,8 +486,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x3014f,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 0x20001,0x10001, 0, 0,10},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 0x20001,0x10001, 0, 0,10 },
 		.needs_tvaudio	= 1,
 		.tuner_type	= -1,
 		.tuner_addr	= ADDR_UNSET,
@@ -502,8 +502,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 15,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 13, 14, 11, 7, 0, 0},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 13, 14, 11, 7, 0, 0 },
 		.needs_tvaudio	= 1,
 		.tuner_type	= -1,
 		.tuner_addr	= ADDR_UNSET,
@@ -516,8 +516,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 15,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 13, 14, 11, 7, 0, 0},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 13, 14, 11, 7, 0, 0 },
 		.needs_tvaudio	= 1,
 		.msp34xx_alt    = 1,
 		.pll		= PLL_28,
@@ -534,8 +534,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 7,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 0, 2, 1, 3, 4}, /* old: { 0, 1, 2, 3, 4} */
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 0, 2, 1, 3, 4 }, /* old: {0, 1, 2, 3, 4} */
 		.needs_tvaudio	= 1,
 		.pll		= PLL_28,
 		.tuner_type	= -1,
@@ -549,8 +549,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 15,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= {0 , 0, 1 , 0, 10},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 0 , 0, 1 , 0, 10 },
 		.needs_tvaudio	= 1,
 		.tuner_type	= -1,
 		.tuner_addr	= ADDR_UNSET,
@@ -565,7 +565,7 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x01fe00,
-		.muxsel		= { 2, 3, 1, 1},
+		.muxsel		= { 2, 3, 1, 1 },
 	#if 0
 		/* old */
 		.audiomux	= { 0x01c000, 0, 0x018000, 0x014000, 0x002000, 0 },
@@ -584,8 +584,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x8300f8,
-		.muxsel		= { 2, 3, 1, 1,0},
-		.audiomux	= { 0x4fa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007},
+		.muxsel		= { 2, 3, 1, 1,0 },
+		.audiomux	= { 0x4fa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007 },
 		.needs_tvaudio	= 1,
 		.tuner_type	= -1,
 		.tuner_addr	= ADDR_UNSET,
@@ -600,8 +600,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0,
-		.muxsel		= {2, 3, 1, 1},
-		.audiomux	= {1, 0, 0, 0, 0},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 1, 0, 0, 0, 0 },
 		.needs_tvaudio	= 1,
 		.tuner_type	= -1,
 		.tuner_addr	= ADDR_UNSET,
@@ -614,7 +614,7 @@
 		.tuner		= -1,
 		.svhs		= -1,
 		.gpiomask	= 0x8dff00,
-		.muxsel		= { 2, 3, 1, 1},
+		.muxsel		= { 2, 3, 1, 1 },
 		.audiomux	= { 0 },
 		.no_msp34xx	= 1,
 		.tuner_type	= -1,
@@ -629,7 +629,7 @@
 		.audio_inputs	= 3,
 		.tuner		= 0,
 		.svhs		= 2,
-		.muxsel		= {2, 3, 1, 1},
+		.muxsel		= { 2, 3, 1, 1 },
 		.tuner_type	= -1,
 		.tuner_addr	= ADDR_UNSET,
 		.radio_addr     = ADDR_UNSET,
@@ -641,8 +641,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x1800,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 0, 0x800, 0x1000, 0x1000, 0x1800},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 0, 0x800, 0x1000, 0x1000, 0x1800 },
 		.pll		= PLL_28,
 		.tuner_type	= TUNER_PHILIPS_PAL_I,
 		.tuner_addr	= ADDR_UNSET,
@@ -655,8 +655,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0xc00,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= {0, 1, 0x800, 0x400, 0xc00, 0},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 0, 1, 0x800, 0x400, 0xc00, 0 },
 		.needs_tvaudio	= 1,
 		.pll		= PLL_28,
 		.tuner_type	= -1,
@@ -688,8 +688,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0xe00,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= {0x400, 0x400, 0x400, 0x400, 0xc00},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= {0x400, 0x400, 0x400, 0x400, 0xc00 },
 		.needs_tvaudio	= 1,
 		.pll		= PLL_28,
 		.tuner_type	= -1,
@@ -704,8 +704,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask       = 0x1f0fff,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux       = { 0x20000, 0x30000, 0x10000, 0, 0x40000},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux       = { 0x20000, 0x30000, 0x10000, 0, 0x40000 },
 		.needs_tvaudio	= 0,
 		.tuner_type	= TUNER_PHILIPS_PAL,
 		.tuner_addr	= ADDR_UNSET,
@@ -719,8 +719,8 @@
 		.tuner		= 0,
 		.svhs		= 3,
 		.gpiomask	= 7,
-		.muxsel		= { 2, 0, 1, 1},
-		.audiomux	= { 0, 1, 2, 3, 4},
+		.muxsel		= { 2, 0, 1, 1 },
+		.audiomux	= { 0, 1, 2, 3, 4 },
 		.needs_tvaudio	= 1,
 		.tuner_type	= -1,
 		.tuner_addr	= ADDR_UNSET,
@@ -733,8 +733,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x1800,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 0, 0x800, 0x1000, 0x1000, 0x1800},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 0, 0x800, 0x1000, 0x1000, 0x1800 },
 		.pll            = PLL_28,
 		.tuner_type	= TUNER_PHILIPS_SECAM,
 		.tuner_addr	= ADDR_UNSET,
@@ -749,8 +749,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x1f0fff,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 0x20000, 0x30000, 0x10000, 0x00000, 0x40000},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 0x20000, 0x30000, 0x10000, 0x00000, 0x40000 },
 		.needs_tvaudio	= 0,
 		.tuner_type	= TUNER_PHILIPS_PAL,
 		.tuner_addr	= ADDR_UNSET,
@@ -812,7 +812,7 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x1800,  /* 0x8dfe00 */
-		.muxsel		= { 2, 3, 1, 1},
+		.muxsel		= { 2, 3, 1, 1 },
 		.audiomux	= { 0, 0x0800, 0x1000, 0x1000, 0x1800, 0 },
 		.pll            = PLL_28,
 		.tuner_type	= -1,
@@ -826,7 +826,7 @@
 		.tuner		= 0,
 		.svhs		= 3,
 		.gpiomask	= 1,
-		.muxsel		= { 2, 3, 1, 1},
+		.muxsel		= { 2, 3, 1, 1 },
 		.audiomux	= { 1, 0, 0, 0, 0 },
 		.pll            = PLL_28,
 		.tuner_type	= TUNER_PHILIPS_PAL,
@@ -842,7 +842,7 @@
 		.tuner		= -1,
 		.svhs		= 2,
 		.gpiomask	= 0,
-		.muxsel		= { 2, 3, 1, 1},
+		.muxsel		= { 2, 3, 1, 1 },
 		.audiomux	= { 0 },
 		.needs_tvaudio	= 0,
 		.tuner_type	= 4,
@@ -856,8 +856,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0xffff00,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 0x500, 0, 0x300, 0x900, 0x900},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 0x500, 0, 0x300, 0x900, 0x900 },
 		.needs_tvaudio	= 1,
 		.pll		= PLL_28,
 		.tuner_type	= TUNER_PHILIPS_PAL,
@@ -870,7 +870,7 @@
 		.audio_inputs	= 1,
 		.tuner		= 0,
 		.svhs		= 2,
-		.muxsel		= { 2, 3, 1, 1, 0}, /* TV, CVid, SVid, CVid over SVid connector */
+		.muxsel		= { 2, 3, 1, 1, 0 }, /* TV, CVid, SVid, CVid over SVid connector */
 	#if 0
 		.gpiomask	= 0xc33000,
 		.audiomux	= { 0x422000,0x1000,0x0000,0x620000,0x800000 },
@@ -906,8 +906,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x1800,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 0, 0x800, 0x1000, 0x1000, 0x1800},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 0, 0x800, 0x1000, 0x1000, 0x1800 },
 		.pll		= PLL_28,
 		.tuner_type	= -1,
 		.tuner_addr	= ADDR_UNSET,
@@ -922,7 +922,7 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x1800,
-		.muxsel		= { 2, 3, 1, 1},
+		.muxsel		= { 2, 3, 1, 1 },
 		.audiomux	= { 0, 0x800, 0x1000, 0x1000, 0x1800, 0 },
 		.pll		= PLL_28,
 		.tuner_type	= -1,
@@ -952,7 +952,7 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x551e00,
-		.muxsel		= { 2, 3, 1, 0},
+		.muxsel		= { 2, 3, 1, 0 },
 		.audiomux	= { 0x551400, 0x551200, 0, 0, 0x551c00, 0x551200 },
 		.needs_tvaudio	= 1,
 		.pll		= PLL_28,
@@ -968,8 +968,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x03000F,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 2, 0xd0001, 0, 0, 1},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 2, 0xd0001, 0, 0, 1 },
 		.needs_tvaudio	= 0,
 		.pll		= PLL_28,
 		.tuner_type	= -1,
@@ -985,8 +985,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 7,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 4, 0, 2, 3, 1},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 4, 0, 2, 3, 1 },
 		.no_msp34xx	= 1,
 		.needs_tvaudio	= 1,
 		.tuner_type     = TUNER_PHILIPS_NTSC,
@@ -1002,8 +1002,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 15,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 13, 4, 11, 7, 0, 0},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 13, 4, 11, 7, 0, 0 },
 		.needs_tvaudio	= 1,
 		.pll		= PLL_28,
 		.tuner_type	= -1,
@@ -1035,8 +1035,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0xe00b,
-		.muxsel		= {2, 3, 1, 1},
-		.audiomux	= {0xff9ff6, 0xff9ff6, 0xff1ff7, 0, 0xff3ffc},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 0xff9ff6, 0xff9ff6, 0xff1ff7, 0, 0xff3ffc },
 		.no_msp34xx	= 1,
 		.tuner_type	= -1,
 		.tuner_addr	= ADDR_UNSET,
@@ -1051,8 +1051,8 @@
 		.tuner		= 0,
 		.svhs		= -1,
 		.gpiomask	= 3,
-		.muxsel		= {2, 3, 1, 1},
-		.audiomux	= {1, 1, 0, 2, 3},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 1, 1, 0, 2, 3 },
 		.no_msp34xx	= 1,
 		.pll		= PLL_NONE,
 		.tuner_type	= -1,
@@ -1066,8 +1066,8 @@
 		.tuner		= -1,
 		.svhs		= 3,
 		.gpiomask	= 0,
-		.muxsel		= { 2, 3, 1, 0, 0},
-		.audiomux	= {0 },
+		.muxsel		= { 2, 3, 1, 0, 0 },
+		.audiomux	= { 0 },
 		.no_msp34xx	= 1,
 		.pll		= PLL_28,
 		.tuner_type	= -1,
@@ -1081,8 +1081,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0xbcf03f,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 0xbc803f, 0xbc903f, 0xbcb03f, 0, 0xbcb03f},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 0xbc803f, 0xbc903f, 0xbcb03f, 0, 0xbcb03f },
 		.no_msp34xx	= 1,
 		.pll		= PLL_28,
 		.tuner_type	= 21,
@@ -1096,7 +1096,7 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x70000,
-		.muxsel		= { 2, 3, 1, 1},
+		.muxsel		= { 2, 3, 1, 1 },
 		.audiomux	= { 0x20000, 0x30000, 0x10000, 0, 0x40000, 0x20000 },
 		.needs_tvaudio	= 1,
 		.no_msp34xx	= 1,
@@ -1115,8 +1115,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 15,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= {2,0,0,0,1},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= {2,0,0,0,1 },
 		.needs_tvaudio	= 1,
 		.pll		= PLL_28,
 		.tuner_type	= -1,
@@ -1130,8 +1130,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x010f00,
-		.muxsel		= {2, 3, 0, 0},
-		.audiomux	= {0x10000, 0, 0x10000, 0, 0, 0},
+		.muxsel		= {2, 3, 0, 0 },
+		.audiomux	= {0x10000, 0, 0x10000, 0, 0, 0 },
 		.no_msp34xx	= 1,
 		.pll		= PLL_28,
 		.tuner_type	= TUNER_ALPS_TSHC6_NTSC,
@@ -1172,8 +1172,8 @@
 		.tuner          = 0,
 		.svhs           = 2,
 		.gpiomask       = 7,
-		.muxsel         = { 2, 0, 1, 1},
-		.audiomux       = { 0, 1, 2, 3, 4},
+		.muxsel         = { 2, 0, 1, 1 },
+		.audiomux       = { 0, 1, 2, 3, 4 },
 		.pll            = PLL_28,
 		.tuner_type     = -1 /* TUNER_ALPS_TMDH2_NTSC */,
 		.tuner_addr	= ADDR_UNSET,
@@ -1189,8 +1189,8 @@
 		.tuner          = 0,
 		.svhs           = 3,
 		.gpiomask       = 0x03000F,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 1, 0xd0001, 0, 0, 10},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 1, 0xd0001, 0, 0, 10 },
 				/* sound path (5 sources):
 				MUX1 (mask 0x03), Enable Pin 0x08 (0=enable, 1=disable)
 					0= ext. Audio IN
@@ -1215,7 +1215,7 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x1c,
-		.muxsel		= { 2, 3, 1, 1},
+		.muxsel		= { 2, 3, 1, 1 },
 		.audiomux	= { 0, 0, 0x10, 8, 4 },
 		.needs_tvaudio	= 1,
 		.pll		= PLL_28,
@@ -1236,7 +1236,7 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x18e0,
-		.muxsel		= { 2, 3, 1, 1},
+		.muxsel		= { 2, 3, 1, 1 },
 		.audiomux	= { 0x0000,0x0800,0x1000,0x1000,0x18e0 },
 			/* For cards with tda9820/tda9821:
 				0x0000: Tuner normal stereo
@@ -1256,8 +1256,8 @@
 		.tuner          = 0,
 		.svhs           = 2,
 		.gpiomask       = 0xF,
-		.muxsel         = { 2, 3, 1, 0},
-		.audiomux       = { 2, 0, 0, 0, 10},
+		.muxsel         = { 2, 3, 1, 0 },
+		.audiomux       = { 2, 0, 0, 0, 10 },
 		.needs_tvaudio  = 0,
 		.pll		= PLL_28,
 		.tuner_type	= TUNER_TEMIC_PAL,
@@ -1274,7 +1274,7 @@
 		.tuner          = 0,
 		.svhs           = 2,
 		.gpiomask       = 0x1800,
-		.muxsel         = { 2, 3, 1, 1},
+		.muxsel         = { 2, 3, 1, 1 },
 		.audiomux       = { 0, 0x800, 0x1000, 0x1000, 0x1800, 0 },
 		.pll            = PLL_28,
 		.tuner_type     = 5,
@@ -1324,8 +1324,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask       = 0x03000F,
-		.muxsel		= { 2, 3, 1, 0},
-		.audiomux       = { 2,0,0,0,1 },
+		.muxsel		= { 2, 3, 1, 0 },
+		.audiomux       = { 2, 0, 0, 0, 1 },
 		.pll            = PLL_28,
 		.tuner_type	= 0,
 		.tuner_addr	= ADDR_UNSET,
@@ -1341,8 +1341,8 @@
 		.tuner		= 0,
 		.svhs		= -1,
 		.gpiomask       = 11,
-		.muxsel         = { 2, 3, 1, 1},
-		.audiomux       = { 2, 0, 0, 1, 8},
+		.muxsel         = { 2, 3, 1, 1 },
+		.audiomux       = { 2, 0, 0, 1, 8 },
 		.pll            = PLL_35,
 		.tuner_type     = TUNER_TEMIC_PAL,
 		.tuner_addr	= ADDR_UNSET,
@@ -1356,7 +1356,7 @@
 		.tuner		= -1,
 		.svhs		= 1,
 		.gpiomask       = 0xF,
-		.muxsel		= { 2, 2},
+		.muxsel		= { 2, 2 },
 		.audiomux       = { },
 		.no_msp34xx     = 1,
 		.needs_tvaudio  = 0,
@@ -1375,8 +1375,8 @@
 		.tuner          = 0,
 		.svhs           = 2,
 		.gpiomask       = 0xFF,
-		.muxsel         = { 2, 3, 1, 0},
-		.audiomux       = { 1, 0, 4, 4, 9},
+		.muxsel         = { 2, 3, 1, 0 },
+		.audiomux       = { 1, 0, 4, 4, 9 },
 		.needs_tvaudio  = 0,
 		.pll		= PLL_28,
 		.tuner_type	= TUNER_PHILIPS_PAL,
@@ -1392,7 +1392,7 @@
 		.svhs		= 2,
 		.gpiomask	= 0xf03f,
 		.muxsel		= { 2, 3, 1, 0 },
-		.audiomux	= { 0xbffe, 0, 0xbfff, 0, 0xbffe},
+		.audiomux	= { 0xbffe, 0, 0xbfff, 0, 0xbffe },
 		.pll		= PLL_28,
 		.tuner_type	= TUNER_TEMIC_4006FN5_MULTI_PAL,
 		.tuner_addr	= ADDR_UNSET,
@@ -1408,8 +1408,8 @@
 		.tuner		= 0,
 		.svhs		= -1,
 		.gpiomask	= 1,
-		.muxsel		= { 2, 3, 0, 1},
-		.audiomux	= { 0, 0, 1, 0, 0},
+		.muxsel		= { 2, 3, 0, 1 },
+		.audiomux	= { 0, 0, 1, 0, 0 },
 		.no_msp34xx	= 1,
 		.pll		= PLL_28,
 		.tuner_type	= TUNER_TEMIC_4006FN5_MULTI_PAL,
@@ -1424,7 +1424,7 @@
 		.tuner          = 0,
 		.svhs           = 2,
 		.gpiomask	= 0x18e0,
-		.muxsel		= { 2, 3, 0, 1},
+		.muxsel		= { 2, 3, 0, 1 },
 				/* Radio changed from 1e80 to 0x800 to make
 				FlyVideo2000S in .hu happy (gm)*/
 				/* -dk-???: set mute=0x1800 for tda9874h daughterboard */
@@ -1445,8 +1445,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0xffff00,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 0x500, 0x500, 0x300, 0x900, 0x900},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 0x500, 0x500, 0x300, 0x900, 0x900 },
 		.needs_tvaudio	= 1,
 		.pll		= PLL_28,
 		.tuner_type	= TUNER_PHILIPS_PAL,
@@ -1462,8 +1462,8 @@
 		.tuner          = 0,
 		.svhs           = 2,
 		.gpiomask       = 0x010f00,
-		.muxsel         = {2, 3, 0, 0},
-		.audiomux       = {0x10000, 0, 0x10000, 0, 0, 0},
+		.muxsel         = {2, 3, 0, 0 },
+		.audiomux       = {0x10000, 0, 0x10000, 0, 0, 0 },
 		.no_msp34xx     = 1,
 		.pll            = PLL_28,
 		.tuner_type     = TUNER_SHARP_2U5JF5540_NTSC,
@@ -1487,7 +1487,7 @@
 		.audiomux       = {0x947fff, 0x987fff,0x947fff,0x947fff, 0x947fff},
 		/* tvtuner, radio,   external,internal, mute,  stereo
 		* tuner, Composit, SVid, Composit-on-Svid-adapter */
-		.muxsel         = { 2, 3 ,0 ,1},
+		.muxsel         = { 2, 3 ,0 ,1 },
 		.tuner_type     = TUNER_MT2032,
 		.tuner_addr	= ADDR_UNSET,
 		.radio_addr     = ADDR_UNSET,
@@ -1515,8 +1515,8 @@
 		.tuner          = 0,
 		.svhs           = 2,
 		.gpiomask       = 15,
-		.muxsel         = { 2, 3, 1, 1},
-		.audiomux       = { 0, 0, 11, 7, 13, 0}, /* TV and Radio with same GPIO ! */
+		.muxsel         = { 2, 3, 1, 1 },
+		.audiomux       = { 0, 0, 11, 7, 13, 0 }, /* TV and Radio with same GPIO ! */
 		.needs_tvaudio  = 1,
 		.pll            = PLL_28,
 		.tuner_type     = 25,
@@ -1537,7 +1537,7 @@
 		.audio_inputs   = 0,
 		.tuner		= -1,
 		.svhs		= 2,
-		.muxsel		= { 2, 3, 1, 1}, /* AV1, AV2, SVHS, CVid adapter on SVHS */
+		.muxsel		= { 2, 3, 1, 1 }, /* AV1, AV2, SVHS, CVid adapter on SVHS */
 		.pll		= PLL_28,
 		.no_msp34xx	= 1,
 		.tuner_type	= UNSET,
@@ -1583,7 +1583,7 @@
 		.tuner          = -1,
 		.svhs           = 4,
 		.gpiomask       = 0,
-		.muxsel         = { 2, 3, 1, 0, 0},
+		.muxsel         = { 2, 3, 1, 0, 0 },
 		.audiomux       = { 0 },
 		.needs_tvaudio  = 0,
 		.tuner_type     = -1,
@@ -1696,7 +1696,7 @@
 		.name           = "DSP Design TCVIDEO",
 		.video_inputs   = 4,
 		.svhs           = -1,
-		.muxsel         = { 2, 3, 1, 0},
+		.muxsel         = { 2, 3, 1, 0 },
 		.pll            = PLL_28,
 		.tuner_type     = -1,
 		.tuner_addr	= ADDR_UNSET,
@@ -1710,7 +1710,7 @@
 		.audio_inputs   = 1,
 		.tuner          = 0,
 		.svhs           = 2,
-		.muxsel         = { 2, 0, 1, 1},
+		.muxsel         = { 2, 0, 1, 1 },
 		.needs_tvaudio  = 1,
 		.pll            = PLL_28,
 		.tuner_type     = -1,
@@ -1727,7 +1727,7 @@
 		.tuner          = 0,
 		.svhs           = 2,
 		.gpiomask       = 0x0f0f80,
-		.muxsel         = {2, 3, 1, 0},
+		.muxsel         = {2, 3, 1, 0 },
 		.audiomux       = {0x030000, 0x010000, 0, 0, 0x020000, 0},
 		.no_msp34xx     = 1,
 		.pll            = PLL_28,
@@ -1944,7 +1944,7 @@
 		.no_msp34xx     = 1,
 		.no_tda9875     = 1,
 		.no_tda7432     = 1,
-		.muxsel         = { 3, 0, 1, 2},
+		.muxsel         = { 3, 0, 1, 2 },
 		.pll            = PLL_28,
 		.no_gpioirq     = 1,
 		.has_dvb        = 1,
@@ -1957,7 +1957,7 @@
 		.svhs           = 3,
 		.gpiomask       = 2,
 		/* TV, Comp1, Composite over SVID con, SVID */
-		.muxsel         = { 2, 3, 1, 1},
+		.muxsel         = { 2, 3, 1, 1 },
 		.audiomux       = { 2, 2, 0, 0, 0 },
 		.pll            = PLL_28,
 		.has_radio      = 1,
@@ -2074,7 +2074,7 @@
 		.audio_inputs   = 1,
 		.tuner          = 0,
 		.svhs           = 2,
-		.muxsel         = { 2, 3, 1, 1}, /* Tuner, CVid, SVid, CVid over SVid connector */
+		.muxsel         = { 2, 3, 1, 1 }, /* Tuner, CVid, SVid, CVid over SVid connector */
 		.gpiomask       = 0,
 		.no_tda9875     = 1,
 		.no_tda7432     = 1,
@@ -2128,7 +2128,7 @@
 		.video_inputs   = 1,
 		.tuner          = -1,
 		.svhs           = -1,
-		.muxsel         = { 2, 3, 1, 0},
+		.muxsel         = { 2, 3, 1, 0 },
 		.no_msp34xx     = 1,
 		.no_tda9875     = 1,
 		.no_tda7432     = 1,
@@ -2166,7 +2166,7 @@
 		.tuner          = -1, /* card has no tuner */
 		.svhs           = 3,
 		.gpiomask       = 0x00,
-		.muxsel         = { 2, 3, 1, 0},
+		.muxsel         = { 2, 3, 1, 0 },
 		.audiomux       = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */
 		.needs_tvaudio  = 1,
 		.pll            = PLL_28,
@@ -2181,7 +2181,7 @@
 		.tuner          = -1, /* card has no tuner */
 		.svhs           = 3,
 		.gpiomask       = 0x00,
-		.muxsel         = { 2, 3, 1, 1},
+		.muxsel         = { 2, 3, 1, 1 },
 		.audiomux       = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */
 		.needs_tvaudio  = 1,
 		.pll            = PLL_28,
@@ -2268,7 +2268,7 @@
 		.audio_inputs   = 1,
 		.tuner          = 0,
 		.svhs           = 2,
-		.muxsel         = { 2, 3, 1, 0},
+		.muxsel         = { 2, 3, 1, 0 },
 		.tuner_type     = TUNER_PHILIPS_ATSC,
 		.tuner_addr	= ADDR_UNSET,
 		.radio_addr     = ADDR_UNSET,
@@ -2291,7 +2291,7 @@
 		.audio_inputs   = 0,
 		.svhs           = 1,
 		.tuner          = -1,
-		.muxsel         = { 3, 1, 1, 3}, /* Vid In, SVid In, Vid over SVid in connector */
+		.muxsel         = { 3, 1, 1, 3 }, /* Vid In, SVid In, Vid over SVid in connector */
 		.no_msp34xx     = 1,
 		.no_tda9875     = 1,
 		.no_tda7432     = 1,
@@ -2307,8 +2307,8 @@
 		.tuner          = 0,
 		.svhs           = 2,
 		.gpiomask       = 3,
-		.muxsel         = { 2, 3, 1, 1},
-		.audiomux       = { 1, 1, 1, 1, 0},
+		.muxsel         = { 2, 3, 1, 1 },
+		.audiomux       = { 1, 1, 1, 1, 0 },
 		.needs_tvaudio  = 1,
 		.tuner_type     = TUNER_PHILIPS_PAL,
 		.tuner_addr	= ADDR_UNSET,
@@ -2327,7 +2327,7 @@
 		.tuner_addr	= ADDR_UNSET,
 		.radio_addr     = ADDR_UNSET,
 		.pll            = PLL_28,
-		.muxsel         = { 2, 2, 2, 2},
+		.muxsel         = { 2, 2, 2, 2 },
 		.gpiomask       = 0x3F,
 		.muxsel_hook    = gvc1100_muxsel,
 	},
@@ -2338,8 +2338,8 @@
 		.tuner          = 0,
 		.svhs           = 2,
 		.gpiomask       = 0x008007,
-		.muxsel         = {2, 3, 0, 0},
-		.audiomux       = {0, 0, 0, 0, 0x000003, 0},
+		.muxsel         = { 2, 3, 0, 0 },
+		.audiomux       = { 0, 0, 0, 0, 0x000003, 0 },
 		.pll            = PLL_28,
 		.tuner_type     = TUNER_PHILIPS_PAL,
 		.tuner_addr	= ADDR_UNSET,
@@ -2374,7 +2374,7 @@
 		.svhs           = 2,
 		.needs_tvaudio  = 0,
 		.gpiomask       = 0x68,
-		.muxsel         = { 2, 3, 1},
+		.muxsel         = { 2, 3, 1 },
 		.audiomux       = { 0x68, 0x68, 0x61, 0x61, 0x00 },
 		.pll            = PLL_28,
 	},
@@ -2433,7 +2433,7 @@
 		.svhs           = 2,
 		.gpiomask       = 0x0000000f,
 		.muxsel         = { 2, 1, 1 },
-		.audiomux       = { 0x02, 0x00, 0x00, 0x00, 0x00},
+		.audiomux       = { 0x02, 0x00, 0x00, 0x00, 0x00 },
 		.tuner_type     = TUNER_TEMIC_PAL,
 		.tuner_addr	= ADDR_UNSET,
 		.radio_addr     = ADDR_UNSET,
@@ -2466,7 +2466,7 @@
 		.video_inputs   = 2,
 		.tuner          = -1,
 		.svhs           = 1,
-		.muxsel         = { 3, 1, 2, 0}, /* Comp0, S-Video, ?, ? */
+		.muxsel         = { 3, 1, 2, 0 }, /* Comp0, S-Video, ?, ? */
 		.no_msp34xx     = 1,
 		.no_tda9875     = 1,
 		.no_tda7432     = 1,
@@ -2523,8 +2523,8 @@
 		.tuner          = 0,
 		.svhs           = -1,
 		.gpiomask       = 0xFF,
-		.muxsel         = { 2, 3, 1, 1},
-		.audiomux       = { 2, 0, 0, 0, 10},
+		.muxsel         = { 2, 3, 1, 1 },
+		.audiomux       = { 2, 0, 0, 0, 10 },
 		.needs_tvaudio  = 0,
 		.pll            = PLL_28,
 		.tuner_type     = TUNER_PHILIPS_PAL,
@@ -2557,8 +2557,8 @@
 		.tuner          = 0,
 		.svhs           = 2,
 		.gpiomask       = 0x3f,
-		.muxsel         = {2, 3, 1, 0},
-		.audiomux       = {0x31, 0x31, 0x31, 0x31, 0x31, 0x31},
+		.muxsel         = {2, 3, 1, 0 },
+		.audiomux       = {0x31, 0x31, 0x31, 0x31, 0x31, 0x31 },
 		.no_msp34xx     = 1,
 		.pll            = PLL_28,
 		.tuner_type     = TUNER_PHILIPS_NTSC_M,
@@ -2576,12 +2576,12 @@
 		.audio_inputs   = 1,
 		.tuner          = 0,
 		.svhs           = 2,
-		.muxsel         = { 2, 3, 1, 0},
+		.muxsel         = { 2, 3, 1, 0 },
 		.tuner_type     = TUNER_PHILIPS_NTSC,
 		.tuner_addr	= ADDR_UNSET,
 		.radio_addr     = ADDR_UNSET,
 		.gpiomask       = 0x008007,
-		.audiomux       = { 0, 0x000001,0,0, 0},
+		.audiomux       = { 0, 0x000001,0,0, 0 },
 		.needs_tvaudio  = 1,
 		.has_radio      = 1,
 	},
@@ -2672,7 +2672,7 @@
 		.audio_inputs   = 1,
 		.tuner          = 0,
 		.svhs           = 2,
-		.muxsel         = { 2, 3, 1, 0},
+		.muxsel         = { 2, 3, 1, 0 },
 		.tuner_type     = -1,
 		.tuner_addr	= ADDR_UNSET,
 		.radio_addr     = ADDR_UNSET,
@@ -2706,7 +2706,7 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x01fe00,
-		.muxsel		= { 2, 3, 1, 1},
+		.muxsel		= { 2, 3, 1, 1 },
 		.audiomux       = { 0x001e00, 0, 0x018000, 0x014000, 0x002000, 0 },
 		.needs_tvaudio	= 1,
 		.pll		= PLL_28,
@@ -2794,8 +2794,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 15,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= {2,0,0,0,1},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 2, 0, 0, 0, 1 },
 		.needs_tvaudio	= 1,
 		.pll		= PLL_28,
 		.tuner_type	= 2,
@@ -2810,8 +2810,8 @@
 		.tuner		= 0,
 		.svhs		= 2,
 		.gpiomask	= 0x108007,
-		.muxsel		= { 2, 3, 1, 1},
-		.audiomux	= { 100000, 100002, 100002, 100000},
+		.muxsel		= { 2, 3, 1, 1 },
+		.audiomux	= { 100000, 100002, 100002, 100000 },
 		.no_msp34xx	= 1,
 		.no_tda9875     = 1,
 		.no_tda7432     = 1,
@@ -2828,7 +2828,7 @@
 		.tuner		= -1,
 		.svhs		= -1,
 		.gpiomask	= 0x0f, /* old: 7 */
-		.muxsel		= { 0, 1, 3, 2}, /* Composite 0-3 */
+		.muxsel		= { 0, 1, 3, 2 }, /* Composite 0-3 */
 		.no_msp34xx	= 1,
 		.no_tda9875     = 1,
 		.no_tda7432     = 1,
@@ -2836,6 +2836,29 @@
 		.tuner_addr	= ADDR_UNSET,
 		.radio_addr     = ADDR_UNSET,
 	},
+	[BTTV_BOARD_MACHTV_MAGICTV] = {
+		/* Julian Calaby <julian.calaby@gmail.com>
+		 * Slightly different from original MachTV definition (0x60)
+
+		 * FIXME: RegSpy says gpiomask should be "0x001c800f", but it
+		 * stuffs up remote chip. Bug is a pin on the jaecs is not set
+		 * properly (methinks) causing no keyup bits being set */
+
+		.name           = "MagicTV", /* rebranded MachTV */
+		.video_inputs   = 3,
+		.audio_inputs   = 1,
+		.tuner          = 0,
+		.svhs           = 2,
+		.gpiomask       = 7,
+		.muxsel         = { 2, 3, 1, 1 },
+		.audiomux       = { 0, 1, 2, 3, 4 },
+		.tuner_type     = TUNER_TEMIC_4009FR5_PAL,
+		.tuner_addr     = ADDR_UNSET,
+		.radio_addr     = ADDR_UNSET,
+		.pll            = PLL_28,
+		.has_radio      = 1,
+		.has_remote     = 1,
+	},
 };
 
 static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards);
diff --git a/drivers/media/video/bttv-gpio.c b/drivers/media/video/bttv-gpio.c
index 575ce8b..d64accc 100644
--- a/drivers/media/video/bttv-gpio.c
+++ b/drivers/media/video/bttv-gpio.c
@@ -64,10 +64,9 @@
 	struct bttv_sub_device *sub;
 	int err;
 
-	sub = kmalloc(sizeof(*sub),GFP_KERNEL);
+	sub = kzalloc(sizeof(*sub),GFP_KERNEL);
 	if (NULL == sub)
 		return -ENOMEM;
-	memset(sub,0,sizeof(*sub));
 
 	sub->core        = core;
 	sub->dev.parent  = &core->pci->dev;
diff --git a/drivers/media/video/bttv-input.c b/drivers/media/video/bttv-input.c
index 12197f1..221b36e 100644
--- a/drivers/media/video/bttv-input.c
+++ b/drivers/media/video/bttv-input.c
@@ -583,6 +583,12 @@
 		btv->custom_irq = bttv_rc5_irq;
 		ir->rc5_gpio = 1;
 		break;
+	case BTTV_BOARD_MACHTV_MAGICTV:
+		ir_codes         = ir_codes_apac_viewcomp;
+		ir->mask_keycode = 0x001F00;
+		ir->mask_keyup   = 0x004000;
+		ir->polling      = 50; /* ms */
+		break;
 	}
 	if (NULL == ir_codes) {
 		dprintk(KERN_INFO "Ooops: IR config error [card=%d]\n",btv->c.type);
diff --git a/drivers/media/video/bttv.h b/drivers/media/video/bttv.h
index 9feaa6b..e370d74 100644
--- a/drivers/media/video/bttv.h
+++ b/drivers/media/video/bttv.h
@@ -166,6 +166,7 @@
 #define BTTV_BOARD_ASOUND_SKYEYE	   0x8d
 #define BTTV_BOARD_SABRENT_TVFM   	   0x8e
 #define BTTV_BOARD_HAUPPAUGE_IMPACTVCB     0x8f
+#define BTTV_BOARD_MACHTV_MAGICTV          0x90
 
 /* i2c address list */
 #define I2C_TSA5522        0xc2
diff --git a/drivers/media/video/compat_ioctl32.c b/drivers/media/video/compat_ioctl32.c
index 6194b01..297c32a 100644
--- a/drivers/media/video/compat_ioctl32.c
+++ b/drivers/media/video/compat_ioctl32.c
@@ -18,8 +18,11 @@
 #include <linux/videodev2.h>
 #include <linux/module.h>
 #include <linux/smp_lock.h>
+#include <media/v4l2-common.h>
 
 #ifdef CONFIG_COMPAT
+
+
 struct video_tuner32 {
 	compat_int_t tuner;
 	char name[32];
@@ -30,27 +33,29 @@
 
 static int get_video_tuner32(struct video_tuner *kp, struct video_tuner32 __user *up)
 {
-	if(get_user(kp->tuner, &up->tuner))
+	if(!access_ok(VERIFY_READ, up, sizeof(struct video_tuner32)) ||
+		get_user(kp->tuner, &up->tuner) ||
+		copy_from_user(kp->name, up->name, 32) ||
+		get_user(kp->rangelow, &up->rangelow) ||
+		get_user(kp->rangehigh, &up->rangehigh) ||
+		get_user(kp->flags, &up->flags) ||
+		get_user(kp->mode, &up->mode) ||
+		get_user(kp->signal, &up->signal))
 		return -EFAULT;
-	__copy_from_user(kp->name, up->name, 32);
-	__get_user(kp->rangelow, &up->rangelow);
-	__get_user(kp->rangehigh, &up->rangehigh);
-	__get_user(kp->flags, &up->flags);
-	__get_user(kp->mode, &up->mode);
-	__get_user(kp->signal, &up->signal);
 	return 0;
 }
 
 static int put_video_tuner32(struct video_tuner *kp, struct video_tuner32 __user *up)
 {
-	if(put_user(kp->tuner, &up->tuner))
-		return -EFAULT;
-	__copy_to_user(up->name, kp->name, 32);
-	__put_user(kp->rangelow, &up->rangelow);
-	__put_user(kp->rangehigh, &up->rangehigh);
-	__put_user(kp->flags, &up->flags);
-	__put_user(kp->mode, &up->mode);
-	__put_user(kp->signal, &up->signal);
+	if(!access_ok(VERIFY_WRITE, up, sizeof(struct video_tuner32)) ||
+		put_user(kp->tuner, &up->tuner) ||
+		copy_to_user(up->name, kp->name, 32) ||
+		put_user(kp->rangelow, &up->rangelow) ||
+		put_user(kp->rangehigh, &up->rangehigh) ||
+		put_user(kp->flags, &up->flags) ||
+		put_user(kp->mode, &up->mode) ||
+		put_user(kp->signal, &up->signal))
+			return -EFAULT;
 	return 0;
 }
 
@@ -63,18 +68,19 @@
 {
 	u32 tmp;
 
-	if (get_user(tmp, &up->base))
-		return -EFAULT;
+	if (!access_ok(VERIFY_READ, up, sizeof(struct video_buffer32)) ||
+		get_user(tmp, &up->base) ||
+		get_user(kp->height, &up->height) ||
+		get_user(kp->width, &up->width) ||
+		get_user(kp->depth, &up->depth) ||
+		get_user(kp->bytesperline, &up->bytesperline))
+			return -EFAULT;
 
 	/* This is actually a physical address stored
 	 * as a void pointer.
 	 */
 	kp->base = (void *)(unsigned long) tmp;
 
-	__get_user(kp->height, &up->height);
-	__get_user(kp->width, &up->width);
-	__get_user(kp->depth, &up->depth);
-	__get_user(kp->bytesperline, &up->bytesperline);
 	return 0;
 }
 
@@ -82,12 +88,13 @@
 {
 	u32 tmp = (u32)((unsigned long)kp->base);
 
-	if(put_user(tmp, &up->base))
-		return -EFAULT;
-	__put_user(kp->height, &up->height);
-	__put_user(kp->width, &up->width);
-	__put_user(kp->depth, &up->depth);
-	__put_user(kp->bytesperline, &up->bytesperline);
+	if(!access_ok(VERIFY_WRITE, up, sizeof(struct video_buffer32)) ||
+		put_user(tmp, &up->base) ||
+		put_user(kp->height, &up->height) ||
+		put_user(kp->width, &up->width) ||
+		put_user(kp->depth, &up->depth) ||
+		put_user(kp->bytesperline, &up->bytesperline))
+			return -EFAULT;
 	return 0;
 }
 
@@ -121,14 +128,15 @@
 /* You get back everything except the clips... */
 static int put_video_window32(struct video_window *kp, struct video_window32 __user *up)
 {
-	if(put_user(kp->x, &up->x))
-		return -EFAULT;
-	__put_user(kp->y, &up->y);
-	__put_user(kp->width, &up->width);
-	__put_user(kp->height, &up->height);
-	__put_user(kp->chromakey, &up->chromakey);
-	__put_user(kp->flags, &up->flags);
-	__put_user(kp->clipcount, &up->clipcount);
+	if(!access_ok(VERIFY_WRITE, up, sizeof(struct video_window32)) ||
+		put_user(kp->x, &up->x) ||
+		put_user(kp->y, &up->y) ||
+		put_user(kp->width, &up->width) ||
+		put_user(kp->height, &up->height) ||
+		put_user(kp->chromakey, &up->chromakey) ||
+		put_user(kp->flags, &up->flags) ||
+		put_user(kp->clipcount, &up->clipcount))
+			return -EFAULT;
 	return 0;
 }
 
@@ -150,11 +158,12 @@
 
 static int get_v4l2_window32(struct v4l2_window *kp, struct v4l2_window32 __user *up)
 {
-	if (copy_from_user(&kp->w, &up->w, sizeof(up->w)))
-		return -EFAULT;
-	__get_user(kp->field, &up->field);
-	__get_user(kp->chromakey, &up->chromakey);
-	__get_user(kp->clipcount, &up->clipcount);
+	if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_window32)) ||
+		copy_from_user(&kp->w, &up->w, sizeof(up->w)) ||
+		get_user(kp->field, &up->field) ||
+		get_user(kp->chromakey, &up->chromakey) ||
+		get_user(kp->clipcount, &up->clipcount))
+			return -EFAULT;
 	if (kp->clipcount > 2048)
 		return -EINVAL;
 	if (kp->clipcount) {
@@ -165,7 +174,9 @@
 		kclips = compat_alloc_user_space(n * sizeof(struct v4l2_clip));
 		kp->clips = kclips;
 		while (--n >= 0) {
-			copy_from_user(&kclips->c, &uclips->c, sizeof(uclips->c));
+			if (!access_ok(VERIFY_READ, &uclips->c, sizeof(uclips->c)) ||
+				copy_from_user(&kclips->c, &uclips->c, sizeof(uclips->c)))
+				return -EFAULT;
 			kclips->next = n ? kclips + 1 : 0;
 			uclips += 1;
 			kclips += 1;
@@ -177,32 +188,45 @@
 
 static int put_v4l2_window32(struct v4l2_window *kp, struct v4l2_window32 __user *up)
 {
-	if (copy_to_user(&up->w, &kp->w, sizeof(up->w)))
-		return -EFAULT;
-	__put_user(kp->field, &up->field);
-	__put_user(kp->chromakey, &up->chromakey);
-	__put_user(kp->clipcount, &up->clipcount);
+	if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_window32)) ||
+		copy_to_user(&up->w, &kp->w, sizeof(up->w)) ||
+		put_user(kp->field, &up->field) ||
+		put_user(kp->chromakey, &up->chromakey) ||
+		put_user(kp->clipcount, &up->clipcount))
+			return -EFAULT;
 	return 0;
 }
 
 static inline int get_v4l2_pix_format(struct v4l2_pix_format *kp, struct v4l2_pix_format __user *up)
 {
-	return copy_from_user(kp, up, sizeof(struct v4l2_pix_format));
+	if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_pix_format)) ||
+		copy_from_user(kp, up, sizeof(struct v4l2_pix_format)))
+			return -EFAULT;
+	return 0;
 }
 
 static inline int put_v4l2_pix_format(struct v4l2_pix_format *kp, struct v4l2_pix_format __user *up)
 {
-	return copy_to_user(up, kp, sizeof(struct v4l2_pix_format));
+	if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_pix_format)) ||
+		copy_to_user(up, kp, sizeof(struct v4l2_pix_format)))
+			return -EFAULT;
+	return 0;
 }
 
 static inline int get_v4l2_vbi_format(struct v4l2_vbi_format *kp, struct v4l2_vbi_format __user *up)
 {
-	return copy_from_user(kp, up, sizeof(struct v4l2_vbi_format));
+	if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_vbi_format)) ||
+		copy_from_user(kp, up, sizeof(struct v4l2_vbi_format)))
+			return -EFAULT;
+	return 0;
 }
 
 static inline int put_v4l2_vbi_format(struct v4l2_vbi_format *kp, struct v4l2_vbi_format __user *up)
 {
-	return copy_to_user(up, kp, sizeof(struct v4l2_vbi_format));
+	if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_vbi_format)) ||
+		copy_to_user(up, kp, sizeof(struct v4l2_vbi_format)))
+			return -EFAULT;
+	return 0;
 }
 
 struct v4l2_format32
@@ -219,8 +243,9 @@
 
 static int get_v4l2_format32(struct v4l2_format *kp, struct v4l2_format32 __user *up)
 {
-	if(get_user(kp->type, &up->type))
-		return -EFAULT;
+	if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_format32)) ||
+			get_user(kp->type, &up->type))
+			return -EFAULT;
 	switch (kp->type) {
 	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
 		return get_v4l2_pix_format(&kp->fmt.pix, &up->fmt.pix);
@@ -237,7 +262,8 @@
 
 static int put_v4l2_format32(struct v4l2_format *kp, struct v4l2_format32 __user *up)
 {
-	if(put_user(kp->type, &up->type))
+	if(!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_format32)) ||
+		put_user(kp->type, &up->type))
 		return -EFAULT;
 	switch (kp->type) {
 	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
@@ -251,6 +277,23 @@
 	}
 }
 
+static inline int get_v4l2_standard(struct v4l2_standard *kp, struct v4l2_standard __user *up)
+{
+	if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_standard)) ||
+		copy_from_user(kp, up, sizeof(struct v4l2_standard)))
+			return -EFAULT;
+	return 0;
+
+}
+
+static inline int put_v4l2_standard(struct v4l2_standard *kp, struct v4l2_standard __user *up)
+{
+	if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_standard)) ||
+		copy_to_user(up, kp, sizeof(struct v4l2_standard)))
+			return -EFAULT;
+	return 0;
+}
+
 struct v4l2_standard32
 {
 	__u32		     index;
@@ -264,18 +307,39 @@
 static int get_v4l2_standard32(struct v4l2_standard *kp, struct v4l2_standard32 __user *up)
 {
 	/* other fields are not set by the user, nor used by the driver */
-	return get_user(kp->index, &up->index);
+	if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_standard32)) ||
+		get_user(kp->index, &up->index))
+		return -EFAULT;
+	return 0;
 }
 
 static int put_v4l2_standard32(struct v4l2_standard *kp, struct v4l2_standard32 __user *up)
 {
-	if(put_user(kp->index, &up->index))
-		return -EFAULT;
-	__copy_to_user(up->id, &kp->id, sizeof(__u64));
-	__copy_to_user(up->name, kp->name, 24);
-	__put_user(kp->frameperiod, &up->frameperiod);
-	__put_user(kp->framelines, &up->framelines);
-	__copy_to_user(up->reserved, kp->reserved, 4 * sizeof(__u32));
+	if(!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_standard32)) ||
+		put_user(kp->index, &up->index) ||
+		copy_to_user(up->id, &kp->id, sizeof(__u64)) ||
+		copy_to_user(up->name, kp->name, 24) ||
+		copy_to_user(&up->frameperiod, &kp->frameperiod, sizeof(kp->frameperiod)) ||
+		put_user(kp->framelines, &up->framelines) ||
+		copy_to_user(up->reserved, kp->reserved, 4 * sizeof(__u32)))
+			return -EFAULT;
+	return 0;
+}
+
+static inline int get_v4l2_tuner(struct v4l2_tuner *kp, struct v4l2_tuner __user *up)
+{
+	if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_tuner)) ||
+		copy_from_user(kp, up, sizeof(struct v4l2_tuner)))
+			return -EFAULT;
+	return 0;
+
+}
+
+static inline int put_v4l2_tuner(struct v4l2_tuner *kp, struct v4l2_tuner __user *up)
+{
+	if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_tuner)) ||
+		copy_to_user(up, kp, sizeof(struct v4l2_tuner)))
+			return -EFAULT;
 	return 0;
 }
 
@@ -304,12 +368,13 @@
 static int get_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user *up)
 {
 
-	if (get_user(kp->index, &up->index))
-		return -EFAULT;
-	__get_user(kp->type, &up->type);
-	__get_user(kp->flags, &up->flags);
-	__get_user(kp->memory, &up->memory);
-	__get_user(kp->input, &up->input);
+	if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_buffer32)) ||
+		get_user(kp->index, &up->index) ||
+		get_user(kp->type, &up->type) ||
+		get_user(kp->flags, &up->flags) ||
+		get_user(kp->memory, &up->memory) ||
+		get_user(kp->input, &up->input))
+			return -EFAULT;
 	switch(kp->memory) {
 	case V4L2_MEMORY_MMAP:
 		break;
@@ -317,12 +382,14 @@
 		{
 		unsigned long tmp = (unsigned long)compat_ptr(up->m.userptr);
 
-		__get_user(kp->length, &up->length);
-		__get_user(kp->m.userptr, &tmp);
+		if(get_user(kp->length, &up->length) ||
+			get_user(kp->m.userptr, &tmp))
+				return -EFAULT;
 		}
 		break;
 	case V4L2_MEMORY_OVERLAY:
-		__get_user(kp->m.offset, &up->m.offset);
+		if(get_user(kp->m.offset, &up->m.offset))
+			return -EFAULT;
 		break;
 	}
 	return 0;
@@ -330,32 +397,37 @@
 
 static int put_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user *up)
 {
-	if (put_user(kp->index, &up->index))
-		return -EFAULT;
-	__put_user(kp->type, &up->type);
-	__put_user(kp->flags, &up->flags);
-	__put_user(kp->memory, &up->memory);
-	__put_user(kp->input, &up->input);
+	if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_buffer32)) ||
+		put_user(kp->index, &up->index) ||
+		put_user(kp->type, &up->type) ||
+		put_user(kp->flags, &up->flags) ||
+		put_user(kp->memory, &up->memory) ||
+		put_user(kp->input, &up->input))
+			return -EFAULT;
 	switch(kp->memory) {
 	case V4L2_MEMORY_MMAP:
-		__put_user(kp->length, &up->length);
-		__put_user(kp->m.offset, &up->m.offset);
+		if (put_user(kp->length, &up->length) ||
+			put_user(kp->m.offset, &up->m.offset))
+			return -EFAULT;
 		break;
 	case V4L2_MEMORY_USERPTR:
-		__put_user(kp->length, &up->length);
-		__put_user(kp->m.userptr, &up->m.userptr);
+		if (put_user(kp->length, &up->length) ||
+			put_user(kp->m.userptr, &up->m.userptr))
+			return -EFAULT;
 		break;
 	case V4L2_MEMORY_OVERLAY:
-		__put_user(kp->m.offset, &up->m.offset);
+		if (put_user(kp->m.offset, &up->m.offset))
+			return -EFAULT;
 		break;
 	}
-	__put_user(kp->bytesused, &up->bytesused);
-	__put_user(kp->field, &up->field);
-	__put_user(kp->timestamp.tv_sec, &up->timestamp.tv_sec);
-	__put_user(kp->timestamp.tv_usec, &up->timestamp.tv_usec);
-	__copy_to_user(&up->timecode, &kp->timecode, sizeof(struct v4l2_timecode));
-	__put_user(kp->sequence, &up->sequence);
-	__put_user(kp->reserved, &up->reserved);
+	if (put_user(kp->bytesused, &up->bytesused) ||
+		put_user(kp->field, &up->field) ||
+		put_user(kp->timestamp.tv_sec, &up->timestamp.tv_sec) ||
+		put_user(kp->timestamp.tv_usec, &up->timestamp.tv_usec) ||
+		copy_to_user(&up->timecode, &kp->timecode, sizeof(struct v4l2_timecode)) ||
+		put_user(kp->sequence, &up->sequence) ||
+		put_user(kp->reserved, &up->reserved))
+			return -EFAULT;
 	return 0;
 }
 
@@ -371,11 +443,12 @@
 {
 	u32 tmp;
 
-	if (get_user(tmp, &up->base))
-		return -EFAULT;
+	if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_framebuffer32)) ||
+		get_user(tmp, &up->base) ||
+		get_user(kp->capability, &up->capability) ||
+		get_user(kp->flags, &up->flags))
+			return -EFAULT;
 	kp->base = compat_ptr(tmp);
-	__get_user(kp->capability, &up->capability);
-	__get_user(kp->flags, &up->flags);
 	get_v4l2_pix_format(&kp->fmt, &up->fmt);
 	return 0;
 }
@@ -384,25 +457,46 @@
 {
 	u32 tmp = (u32)((unsigned long)kp->base);
 
-	if(put_user(tmp, &up->base))
-		return -EFAULT;
-	__put_user(kp->capability, &up->capability);
-	__put_user(kp->flags, &up->flags);
+	if(!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_framebuffer32)) ||
+		put_user(tmp, &up->base) ||
+		put_user(kp->capability, &up->capability) ||
+		put_user(kp->flags, &up->flags))
+			return -EFAULT;
 	put_v4l2_pix_format(&kp->fmt, &up->fmt);
 	return 0;
 }
 
-struct v4l2_input32 	/* identical layout, but different size */
+static inline int get_v4l2_input32(struct v4l2_input *kp, struct v4l2_input __user *up)
 {
-	__u32	     index;		/*  Which input */
-	__u8	     name[32];		/*  Label */
-	__u32	     type;		/*  Type of input */
-	__u32	     audioset;		/*  Associated audios (bitfield) */
-	__u32        tuner;             /*  Associated tuner */
-	__u32	     std[2];		/* __u64 would get the padding wrong */
-	__u32	     status;
-	__u32	     reserved[4];
-};
+	if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_input) - 4) ||
+		copy_from_user(kp, up, sizeof(struct v4l2_input) - 4))
+			return -EFAULT;
+	return 0;
+}
+
+static inline int put_v4l2_input32(struct v4l2_input *kp, struct v4l2_input __user *up)
+{
+	if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_input) - 4) ||
+		copy_to_user(up, kp, sizeof(struct v4l2_input) - 4))
+			return -EFAULT;
+	return 0;
+}
+
+static inline int get_v4l2_input(struct v4l2_input *kp, struct v4l2_input __user *up)
+{
+	if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_input)) ||
+		copy_from_user(kp, up, sizeof(struct v4l2_input)))
+			return -EFAULT;
+	return 0;
+}
+
+static inline int put_v4l2_input(struct v4l2_input *kp, struct v4l2_input __user *up)
+{
+	if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_input)) ||
+		copy_to_user(up, kp, sizeof(struct v4l2_input)))
+			return -EFAULT;
+	return 0;
+}
 
 #define VIDIOCGTUNER32		_IOWR('v',4, struct video_tuner32)
 #define VIDIOCSTUNER32		_IOW('v',5, struct video_tuner32)
@@ -413,6 +507,8 @@
 #define VIDIOCGFREQ32		_IOR('v',14, u32)
 #define VIDIOCSFREQ32		_IOW('v',15, u32)
 
+/* VIDIOC_ENUMINPUT32 is VIDIOC_ENUMINPUT minus 4 bytes of padding alignement */
+#define VIDIOC_ENUMINPUT32	VIDIOC_ENUMINPUT - _IOC(0, 0, 0, 4)
 #define VIDIOC_G_FMT32		_IOWR ('V',  4, struct v4l2_format32)
 #define VIDIOC_S_FMT32		_IOWR ('V',  5, struct v4l2_format32)
 #define VIDIOC_QUERYBUF32	_IOWR ('V',  9, struct v4l2_buffer32)
@@ -425,7 +521,6 @@
 #define VIDIOC_STREAMON32	_IOW  ('V', 18, compat_int_t)
 #define VIDIOC_STREAMOFF32	_IOW  ('V', 19, compat_int_t)
 #define VIDIOC_ENUMSTD32	_IOWR ('V', 25, struct v4l2_standard32)
-#define VIDIOC_ENUMINPUT32	_IOWR ('V', 26, struct v4l2_input32)
 /* VIDIOC_S_CTRL is now _IOWR, but was _IOW */
 #define VIDIOC_S_CTRL32		_IOW  ('V', 28, struct v4l2_control)
 #define VIDIOC_G_INPUT32	_IOR  ('V', 38, compat_int_t)
@@ -444,6 +539,9 @@
 	int nclips;
 	u32 n;
 
+	if (!access_ok(VERIFY_READ, up, sizeof(struct video_window32)))
+		return -EFAULT;
+
 	if (get_user(nclips, &up->clipcount))
 		return -EFAULT;
 
@@ -476,7 +574,9 @@
 			return -EINVAL;
 		for (i = 0; i < nclips; i++, u++, p++) {
 			s32 v;
-			if (get_user(v, &u->x) ||
+			if (!access_ok(VERIFY_READ, u, sizeof(struct video_clip32)) ||
+			    !access_ok(VERIFY_WRITE, p, sizeof(struct video_clip32)) ||
+			    get_user(v, &u->x) ||
 			    put_user(v, &p->x) ||
 			    get_user(v, &u->y) ||
 			    put_user(v, &p->y) ||
@@ -502,11 +602,14 @@
 		struct v4l2_buffer v2b;
 		struct v4l2_framebuffer v2fb;
 		struct v4l2_standard v2s;
+		struct v4l2_input v2i;
+		struct v4l2_tuner v2t;
 		unsigned long vx;
 	} karg;
 	void __user *up = compat_ptr(arg);
 	int compatible_arg = 1;
 	int err = 0;
+	int realcmd = cmd;
 
 	/* First, convert the command. */
 	switch(cmd) {
@@ -527,8 +630,8 @@
 	case VIDIOC_G_FBUF32: cmd = VIDIOC_G_FBUF; break;
 	case VIDIOC_S_FBUF32: cmd = VIDIOC_S_FBUF; break;
 	case VIDIOC_OVERLAY32: cmd = VIDIOC_OVERLAY; break;
-	case VIDIOC_ENUMSTD32: cmd = VIDIOC_ENUMSTD; break;
-	case VIDIOC_ENUMINPUT32: cmd = VIDIOC_ENUMINPUT; break;
+	case VIDIOC_ENUMSTD32: realcmd = VIDIOC_ENUMSTD; break;
+	case VIDIOC_ENUMINPUT32: realcmd = VIDIOC_ENUMINPUT; break;
 	case VIDIOC_S_CTRL32: cmd = VIDIOC_S_CTRL; break;
 	case VIDIOC_G_INPUT32: cmd = VIDIOC_G_INPUT; break;
 	case VIDIOC_S_INPUT32: cmd = VIDIOC_S_INPUT; break;
@@ -577,10 +680,31 @@
 		break;
 
 	case VIDIOC_ENUMSTD:
+		err = get_v4l2_standard(&karg.v2s, up);
+		compatible_arg = 0;
+		break;
+
+	case VIDIOC_ENUMSTD32:
 		err = get_v4l2_standard32(&karg.v2s, up);
 		compatible_arg = 0;
 		break;
 
+	case VIDIOC_ENUMINPUT:
+		err = get_v4l2_input(&karg.v2i, up);
+		compatible_arg = 0;
+		break;
+
+	case VIDIOC_ENUMINPUT32:
+		err = get_v4l2_input32(&karg.v2i, up);
+		compatible_arg = 0;
+		break;
+
+	case VIDIOC_G_TUNER:
+	case VIDIOC_S_TUNER:
+		err = get_v4l2_tuner(&karg.v2t, up);
+		compatible_arg = 0;
+		break;
+
 	case VIDIOCGWIN:
 	case VIDIOCGFBUF:
 	case VIDIOCGFREQ:
@@ -593,12 +717,12 @@
 		goto out;
 
 	if(compatible_arg)
-		err = native_ioctl(file, cmd, (unsigned long)up);
+		err = native_ioctl(file, realcmd, (unsigned long)up);
 	else {
 		mm_segment_t old_fs = get_fs();
 
 		set_fs(KERNEL_DS);
-		err = native_ioctl(file, cmd, (unsigned long)&karg);
+		err = native_ioctl(file, realcmd, (unsigned long)&karg);
 		set_fs(old_fs);
 	}
 	if(err == 0) {
@@ -632,9 +756,26 @@
 			break;
 
 		case VIDIOC_ENUMSTD:
+			err = put_v4l2_standard(&karg.v2s, up);
+			break;
+
+		case VIDIOC_ENUMSTD32:
 			err = put_v4l2_standard32(&karg.v2s, up);
 			break;
 
+		case VIDIOC_G_TUNER:
+		case VIDIOC_S_TUNER:
+			err = put_v4l2_tuner(&karg.v2t, up);
+			break;
+
+		case VIDIOC_ENUMINPUT:
+			err = put_v4l2_input(&karg.v2i, up);
+			break;
+
+		case VIDIOC_ENUMINPUT32:
+			err = put_v4l2_input32(&karg.v2i, up);
+			break;
+
 		case VIDIOCGFREQ:
 		case VIDIOC_G_INPUT:
 			err = put_user(((u32)karg.vx), (u32 __user *)up);
@@ -679,7 +820,11 @@
 	case VIDIOC_G_PARM:
 	case VIDIOC_G_STD:
 	case VIDIOC_S_STD:
+	case VIDIOC_G_TUNER:
+	case VIDIOC_S_TUNER:
+	case VIDIOC_ENUMSTD:
 	case VIDIOC_ENUMSTD32:
+	case VIDIOC_ENUMINPUT:
 	case VIDIOC_ENUMINPUT32:
 	case VIDIOC_G_CTRL:
 	case VIDIOC_S_CTRL32:
@@ -718,6 +863,8 @@
 	case _IOR('v' , BASE_VIDIOCPRIVATE+7, int):
 		ret = native_ioctl(file, cmd, (unsigned long)compat_ptr(arg));
 		break;
+	default:
+		v4l_print_ioctl("compat_ioctl32", cmd);
 	}
 	return ret;
 }
diff --git a/drivers/media/video/cpia_pp.c b/drivers/media/video/cpia_pp.c
index 6861d40..74cff62 100644
--- a/drivers/media/video/cpia_pp.c
+++ b/drivers/media/video/cpia_pp.c
@@ -702,12 +702,11 @@
 		return -ENXIO;
 	}
 
-	cam = kmalloc(sizeof(struct pp_cam_entry), GFP_KERNEL);
+	cam = kzalloc(sizeof(struct pp_cam_entry), GFP_KERNEL);
 	if (cam == NULL) {
 		LOG("failed to allocate camera structure\n");
 		return -ENOMEM;
 	}
-	memset(cam,0,sizeof(struct pp_cam_entry));
 	
 	pdev = parport_register_device(port, "cpia_pp", NULL, NULL,
 	                               NULL, 0, cam);
diff --git a/drivers/media/video/cpia_usb.c b/drivers/media/video/cpia_usb.c
index 1439cb7..03275c3 100644
--- a/drivers/media/video/cpia_usb.c
+++ b/drivers/media/video/cpia_usb.c
@@ -499,14 +499,12 @@
 
 	printk(KERN_INFO "USB CPiA camera found\n");
 
-	ucpia = kmalloc(sizeof(*ucpia), GFP_KERNEL);
+	ucpia = kzalloc(sizeof(*ucpia), GFP_KERNEL);
 	if (!ucpia) {
 		printk(KERN_ERR "couldn't kmalloc cpia struct\n");
 		return -ENOMEM;
 	}
 
-	memset(ucpia, 0, sizeof(*ucpia));
-
 	ucpia->dev = udev;
 	ucpia->iface = interface->desc.bInterfaceNumber;
 	init_waitqueue_head(&ucpia->wq_stream);
diff --git a/drivers/media/video/cs53l32a.c b/drivers/media/video/cs53l32a.c
index b421068..8739c64 100644
--- a/drivers/media/video/cs53l32a.c
+++ b/drivers/media/video/cs53l32a.c
@@ -141,11 +141,10 @@
 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 		return 0;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == 0)
 		return -ENOMEM;
 
-	memset(client, 0, sizeof(struct i2c_client));
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &i2c_driver;
@@ -156,7 +155,7 @@
 	for (i = 1; i <= 7; i++) {
 		u8 v = cs53l32a_read(client, i);
 
-		v4l_dbg(1, client, "Read Reg %d %02x\n", i, v);
+		v4l_dbg(1, debug, client, "Read Reg %d %02x\n", i, v);
 	}
 
 	/* Set cs53l32a internal register for Adaptec 2010/2410 setup */
@@ -174,7 +173,7 @@
 	for (i = 1; i <= 7; i++) {
 		u8 v = cs53l32a_read(client, i);
 
-		v4l_dbg(1, client, "Read Reg %d %02x\n", i, v);
+		v4l_dbg(1, debug, client, "Read Reg %d %02x\n", i, v);
 	}
 
 	i2c_attach_client(client);
diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c
index d45237d..1d75a42 100644
--- a/drivers/media/video/cx25840/cx25840-core.c
+++ b/drivers/media/video/cx25840/cx25840-core.c
@@ -43,9 +43,9 @@
 static unsigned short normal_i2c[] = { 0x88 >> 1, I2C_CLIENT_END };
 
 
-int debug = 0;
+int cx25840_debug = 0;
 
-module_param(debug, bool, 0644);
+module_param_named(debug,cx25840_debug, int, 0644);
 
 MODULE_PARM_DESC(debug, "Debugging messages [0=Off (default) 1=On]");
 
@@ -265,7 +265,7 @@
 			   vid_input <= CX25840_COMPOSITE8);
 	u8 reg;
 
-	v4l_dbg(1, client, "decoder set video input %d, audio input %d\n",
+	v4l_dbg(1, cx25840_debug, client, "decoder set video input %d, audio input %d\n",
 			vid_input, aud_input);
 
 	if (is_composite) {
@@ -533,7 +533,7 @@
 		else
 			filter = 3;
 
-		v4l_dbg(1, client, "decoder set size %dx%d -> scale  %ux%u\n",
+		v4l_dbg(1, cx25840_debug, client, "decoder set size %dx%d -> scale  %ux%u\n",
 			    pix->width, pix->height, HSC, VSC);
 
 		/* HSCALE=HSC */
@@ -687,13 +687,13 @@
 		return cx25840_audio(client, cmd, arg);
 
 	case VIDIOC_STREAMON:
-		v4l_dbg(1, client, "enable output\n");
+		v4l_dbg(1, cx25840_debug, client, "enable output\n");
 		cx25840_write(client, 0x115, 0x8c);
 		cx25840_write(client, 0x116, 0x07);
 		break;
 
 	case VIDIOC_STREAMOFF:
-		v4l_dbg(1, client, "disable output\n");
+		v4l_dbg(1, cx25840_debug, client, "disable output\n");
 		cx25840_write(client, 0x115, 0x00);
 		cx25840_write(client, 0x116, 0x00);
 		break;
@@ -862,17 +862,16 @@
 	if (!i2c_check_functionality(adapter, I2C_FUNC_I2C))
 		return 0;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == 0)
 		return -ENOMEM;
 
-	memset(client, 0, sizeof(struct i2c_client));
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &i2c_driver_cx25840;
 	snprintf(client->name, sizeof(client->name) - 1, "cx25840");
 
-	v4l_dbg(1, client, "detecting cx25840 client on address 0x%x\n", address << 1);
+	v4l_dbg(1, cx25840_debug, client, "detecting cx25840 client on address 0x%x\n", address << 1);
 
 	device_id = cx25840_read(client, 0x101) << 8;
 	device_id |= cx25840_read(client, 0x100);
@@ -880,7 +879,7 @@
 	/* The high byte of the device ID should be
 	 * 0x84 if chip is present */
 	if ((device_id & 0xff00) != 0x8400) {
-		v4l_dbg(1, client, "cx25840 not found\n");
+		v4l_dbg(1, cx25840_debug, client, "cx25840 not found\n");
 		kfree(client);
 		return 0;
 	}
diff --git a/drivers/media/video/cx88/cx88-blackbird.c b/drivers/media/video/cx88/cx88-blackbird.c
index a490621..a502a4d 100644
--- a/drivers/media/video/cx88/cx88-blackbird.c
+++ b/drivers/media/video/cx88/cx88-blackbird.c
@@ -1539,10 +1539,9 @@
 	dprintk(1,"open minor=%d\n",minor);
 
 	/* allocate + initialize per filehandle data */
-	fh = kmalloc(sizeof(*fh),GFP_KERNEL);
+	fh = kzalloc(sizeof(*fh),GFP_KERNEL);
 	if (NULL == fh)
 		return -ENOMEM;
-	memset(fh,0,sizeof(*fh));
 	file->private_data = fh;
 	fh->dev      = dev;
 
@@ -1678,10 +1677,9 @@
 		goto fail_core;
 
 	err = -ENOMEM;
-	dev = kmalloc(sizeof(*dev),GFP_KERNEL);
+	dev = kzalloc(sizeof(*dev),GFP_KERNEL);
 	if (NULL == dev)
 		goto fail_core;
-	memset(dev,0,sizeof(*dev));
 	dev->pci = pci_dev;
 	dev->core = core;
 	dev->width = 720;
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c
index a76d545..ad2f565 100644
--- a/drivers/media/video/cx88/cx88-cards.c
+++ b/drivers/media/video/cx88/cx88-cards.c
@@ -1244,6 +1244,11 @@
 		.subvendor = 0x18ac,
 		.subdevice = 0xdb50,
 		.card      = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL,
+	},{
+		.subvendor = 0x18ac,
+		.subdevice = 0xdb11,
+		.card      = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS,
+		/* Re-branded DViCO: UltraView DVB-T Plus */
 	},
 };
 const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids);
diff --git a/drivers/media/video/cx88/cx88-core.c b/drivers/media/video/cx88/cx88-core.c
index 9975be1..194446f 100644
--- a/drivers/media/video/cx88/cx88-core.c
+++ b/drivers/media/video/cx88/cx88-core.c
@@ -1050,11 +1050,10 @@
 		up(&devlist);
 		return core;
 	}
-	core = kmalloc(sizeof(*core),GFP_KERNEL);
+	core = kzalloc(sizeof(*core),GFP_KERNEL);
 	if (NULL == core)
 		goto fail_unlock;
 
-	memset(core,0,sizeof(*core));
 	atomic_inc(&core->refcount);
 	core->pci_bus  = pci->bus->number;
 	core->pci_slot = PCI_SLOT(pci->devfn);
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c
index 42c012a..e48aa3f 100644
--- a/drivers/media/video/cx88/cx88-dvb.c
+++ b/drivers/media/video/cx88/cx88-dvb.c
@@ -657,10 +657,9 @@
 		goto fail_core;
 
 	err = -ENOMEM;
-	dev = kmalloc(sizeof(*dev),GFP_KERNEL);
+	dev = kzalloc(sizeof(*dev),GFP_KERNEL);
 	if (NULL == dev)
 		goto fail_core;
-	memset(dev,0,sizeof(*dev));
 	dev->pci = pci_dev;
 	dev->core = core;
 
diff --git a/drivers/media/video/cx88/cx88-input.c b/drivers/media/video/cx88/cx88-input.c
index 286c85b..da2ad5c 100644
--- a/drivers/media/video/cx88/cx88-input.c
+++ b/drivers/media/video/cx88/cx88-input.c
@@ -697,6 +697,7 @@
 	case CX88_BOARD_HAUPPAUGE_DVB_T1:
 	case CX88_BOARD_HAUPPAUGE_NOVASE2_S1:
 	case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1:
+	case CX88_BOARD_HAUPPAUGE_HVR1100:
 		ircode = ir_decode_biphase(ir->samples, ir->scount, 5, 7);
 		ir_dprintk("biphase decoded: %x\n", ircode);
 		if ((ircode & 0xfffff000) != 0x3000)
diff --git a/drivers/media/video/cx88/cx88-video.c b/drivers/media/video/cx88/cx88-video.c
index 9a02515..073494c 100644
--- a/drivers/media/video/cx88/cx88-video.c
+++ b/drivers/media/video/cx88/cx88-video.c
@@ -750,10 +750,9 @@
 		minor,radio,v4l2_type_names[type]);
 
 	/* allocate + initialize per filehandle data */
-	fh = kmalloc(sizeof(*fh),GFP_KERNEL);
+	fh = kzalloc(sizeof(*fh),GFP_KERNEL);
 	if (NULL == fh)
 		return -ENOMEM;
-	memset(fh,0,sizeof(*fh));
 	file->private_data = fh;
 	fh->dev      = dev;
 	fh->radio    = radio;
@@ -1809,10 +1808,9 @@
 	struct cx88_core *core;
 	int err;
 
-	dev = kmalloc(sizeof(*dev),GFP_KERNEL);
+	dev = kzalloc(sizeof(*dev),GFP_KERNEL);
 	if (NULL == dev)
 		return -ENOMEM;
-	memset(dev,0,sizeof(*dev));
 
 	/* pci init */
 	dev->pci = pci_dev;
diff --git a/drivers/media/video/dpc7146.c b/drivers/media/video/dpc7146.c
index da94811..2831bdd 100644
--- a/drivers/media/video/dpc7146.c
+++ b/drivers/media/video/dpc7146.c
@@ -94,12 +94,11 @@
 	struct i2c_client *client;
 	struct list_head *item;
 
-	dpc = (struct dpc*)kmalloc(sizeof(struct dpc), GFP_KERNEL);
+	dpc = kzalloc(sizeof(struct dpc), GFP_KERNEL);
 	if( NULL == dpc ) {
 		printk("dpc_v4l2.o: dpc_probe: not enough kernel memory.\n");
 		return -ENOMEM;
 	}
-	memset(dpc, 0x0, sizeof(struct dpc));	
 
 	/* FIXME: enable i2c-port pins, video-port-pins
 	   video port pins should be enabled here ?! */
diff --git a/drivers/media/video/em28xx/em28xx-video.c b/drivers/media/video/em28xx/em28xx-video.c
index fdc25591..3323dff 100644
--- a/drivers/media/video/em28xx/em28xx-video.c
+++ b/drivers/media/video/em28xx/em28xx-video.c
@@ -1861,12 +1861,11 @@
 	}
 
 	/* allocate memory for our device state and initialize it */
-	dev = kmalloc(sizeof(*dev), GFP_KERNEL);
+	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
 	if (dev == NULL) {
 		em28xx_err(DRIVER_NAME ": out of memory!\n");
 		return -ENOMEM;
 	}
-	memset(dev, 0, sizeof(*dev));
 
 	/* compute alternate max packet sizes */
 	uif = udev->actconfig->interface[0];
diff --git a/drivers/media/video/hexium_gemini.c b/drivers/media/video/hexium_gemini.c
index c9b00ea..e7bbeb1 100644
--- a/drivers/media/video/hexium_gemini.c
+++ b/drivers/media/video/hexium_gemini.c
@@ -240,12 +240,11 @@
 
 	DEB_EE((".\n"));
 
-	hexium = (struct hexium *) kmalloc(sizeof(struct hexium), GFP_KERNEL);
+	hexium = kzalloc(sizeof(struct hexium), GFP_KERNEL);
 	if (NULL == hexium) {
 		printk("hexium_gemini: not enough kernel memory in hexium_attach().\n");
 		return -ENOMEM;
 	}
-	memset(hexium, 0x0, sizeof(struct hexium));
 	dev->ext_priv = hexium;
 
 	/* enable i2c-port pins */
diff --git a/drivers/media/video/hexium_orion.c b/drivers/media/video/hexium_orion.c
index 42a9414..0b6c209 100644
--- a/drivers/media/video/hexium_orion.c
+++ b/drivers/media/video/hexium_orion.c
@@ -224,12 +224,11 @@
 		return -EFAULT;
 	}
 
-	hexium = (struct hexium *) kmalloc(sizeof(struct hexium), GFP_KERNEL);
+	hexium = kzalloc(sizeof(struct hexium), GFP_KERNEL);
 	if (NULL == hexium) {
 		printk("hexium_orion: hexium_probe: not enough kernel memory.\n");
 		return -ENOMEM;
 	}
-	memset(hexium, 0x0, sizeof(struct hexium));
 
 	/* enable i2c-port pins */
 	saa7146_write(dev, MC1, (MASK_08 | MASK_24 | MASK_10 | MASK_26));
diff --git a/drivers/media/video/indycam.c b/drivers/media/video/indycam.c
index bb5cbec..7420b79 100644
--- a/drivers/media/video/indycam.c
+++ b/drivers/media/video/indycam.c
@@ -289,18 +289,15 @@
 	printk(KERN_INFO "SGI IndyCam driver version %s\n",
 	       INDYCAM_MODULE_VERSION);
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (!client)
 		return -ENOMEM;
-	camera = kmalloc(sizeof(struct indycam), GFP_KERNEL);
+	camera = kzalloc(sizeof(struct indycam), GFP_KERNEL);
 	if (!camera) {
 		err = -ENOMEM;
 		goto out_free_client;
 	}
 
-	memset(client, 0, sizeof(struct i2c_client));
-	memset(camera, 0, sizeof(struct indycam));
-
 	client->addr = addr;
 	client->adapter = adap;
 	client->driver = &i2c_driver_indycam;
diff --git a/drivers/media/video/msp3400-driver.c b/drivers/media/video/msp3400-driver.c
index aa8c556..9b05a0a 100644
--- a/drivers/media/video/msp3400-driver.c
+++ b/drivers/media/video/msp3400-driver.c
@@ -66,26 +66,26 @@
 
 /* module parameters */
 static int opmode   = OPMODE_AUTO;
-int debug    = 0;    /* debug output */
-int once     = 0;    /* no continous stereo monitoring */
-int amsound  = 0;    /* hard-wire AM sound at 6.5 Hz (france),
+int msp_debug    = 0;    /* msp_debug output */
+int msp_once     = 0;    /* no continous stereo monitoring */
+int msp_amsound  = 0;    /* hard-wire AM sound at 6.5 Hz (france),
 			       the autoscan seems work well only with FM... */
-int standard = 1;    /* Override auto detect of audio standard, if needed. */
-int dolby    = 0;
+int msp_standard = 1;    /* Override auto detect of audio msp_standard, if needed. */
+int msp_dolby    = 0;
 
-int stereo_threshold = 0x190; /* a2 threshold for stereo/bilingual
+int msp_stereo_thresh = 0x190; /* a2 threshold for stereo/bilingual
 					(msp34xxg only) 0x00a0-0x03c0 */
 
 /* read-only */
 module_param(opmode,           int, 0444);
 
 /* read-write */
-module_param(once,             bool, 0644);
-module_param(debug,            int, 0644);
-module_param(stereo_threshold, int, 0644);
-module_param(standard,         int, 0644);
-module_param(amsound,          bool, 0644);
-module_param(dolby,            bool, 0644);
+module_param_named(once,msp_once,                      bool, 0644);
+module_param_named(debug,msp_debug,                    int,  0644);
+module_param_named(stereo_threshold,msp_stereo_thresh, int,  0644);
+module_param_named(standard,msp_standard,              int,  0644);
+module_param_named(amsound,msp_amsound,                bool, 0644);
+module_param_named(dolby,msp_dolby,                    bool, 0644);
 
 MODULE_PARM_DESC(opmode, "Forces a MSP3400 opmode. 0=Manual, 1=Autodetect, 2=Autodetect and autoselect");
 MODULE_PARM_DESC(once, "No continuous stereo monitoring");
@@ -127,7 +127,7 @@
 		{ client->addr, I2C_M_RD, 2, read  },
 	};
 
-	v4l_dbg(3, client, "msp_reset\n");
+	v4l_dbg(3, msp_debug, client, "msp_reset\n");
 	if (i2c_transfer(client->adapter, &reset[0], 1) != 1 ||
 	    i2c_transfer(client->adapter, &reset[1], 1) != 1 ||
 	    i2c_transfer(client->adapter, test, 2) != 2) {
@@ -165,7 +165,7 @@
 		return -1;
 	}
 	retval = read[0] << 8 | read[1];
-	v4l_dbg(3, client, "msp_read(0x%x, 0x%x): 0x%x\n", dev, addr, retval);
+	v4l_dbg(3, msp_debug, client, "msp_read(0x%x, 0x%x): 0x%x\n", dev, addr, retval);
 	return retval;
 }
 
@@ -190,7 +190,7 @@
 	buffer[3] = val  >> 8;
 	buffer[4] = val  &  0xff;
 
-	v4l_dbg(3, client, "msp_write(0x%x, 0x%x, 0x%x)\n", dev, addr, val);
+	v4l_dbg(3, msp_debug, client, "msp_write(0x%x, 0x%x, 0x%x)\n", dev, addr, val);
 	for (err = 0; err < 3; err++) {
 		if (i2c_master_send(client, buffer, 5) == 5)
 			break;
@@ -273,7 +273,7 @@
 	} else
 		state->acb = 0xf60; /* Mute Input and SCART 1 Output */
 
-	v4l_dbg(1, client, "scart switch: %s => %d (ACB=0x%04x)\n",
+	v4l_dbg(1, msp_debug, client, "scart switch: %s => %d (ACB=0x%04x)\n",
 						scart_names[in], out, state->acb);
 	msp_write_dsp(client, 0x13, state->acb);
 
@@ -285,7 +285,7 @@
 {
 	struct msp_state *state = i2c_get_clientdata(client);
 
-	v4l_dbg(1, client, "mute audio\n");
+	v4l_dbg(1, msp_debug, client, "mute audio\n");
 	msp_write_dsp(client, 0x0000, 0);
 	msp_write_dsp(client, 0x0007, 1);
 	if (state->has_scart2_out_volume)
@@ -303,7 +303,7 @@
 	if (!state->muted)
 		val = (state->volume * 0x7f / 65535) << 8;
 
-	v4l_dbg(1, client, "mute=%s volume=%d\n",
+	v4l_dbg(1, msp_debug, client, "mute=%s volume=%d\n",
 		state->muted ? "on" : "off", state->volume);
 
 	msp_write_dsp(client, 0x0000, val);
@@ -321,7 +321,7 @@
 	treble = ((state->treble - 32768) * 0x60 / 65535) << 8;
 	loudness = state->loudness ? ((5 * 4) << 8) : 0;
 
-	v4l_dbg(1, client, "balance=%d bass=%d treble=%d loudness=%d\n",
+	v4l_dbg(1, msp_debug, client, "balance=%d bass=%d treble=%d loudness=%d\n",
 		state->balance, state->bass, state->treble, state->loudness);
 
 	msp_write_dsp(client, 0x0001, bal << 8);
@@ -341,12 +341,12 @@
 	struct msp_state *state = i2c_get_clientdata(client);
 
 	if (state->radio) {
-		v4l_dbg(1, client, "video mode selected to Radio\n");
+		v4l_dbg(1, msp_debug, client, "video mode selected to Radio\n");
 		return 0x0003;
 	}
 
 	if (state->v4l2_std & V4L2_STD_PAL) {
-		v4l_dbg(1, client, "video mode selected to PAL\n");
+		v4l_dbg(1, msp_debug, client, "video mode selected to PAL\n");
 
 #if 1
 		/* experimental: not sure this works with all chip versions */
@@ -357,11 +357,11 @@
 #endif
 	}
 	if (state->v4l2_std & V4L2_STD_NTSC) {
-		v4l_dbg(1, client, "video mode selected to NTSC\n");
+		v4l_dbg(1, msp_debug, client, "video mode selected to NTSC\n");
 		return 0x2003;
 	}
 	if (state->v4l2_std & V4L2_STD_SECAM) {
-		v4l_dbg(1, client, "video mode selected to SECAM\n");
+		v4l_dbg(1, msp_debug, client, "video mode selected to SECAM\n");
 		return 0x0003;
 	}
 	return 0x0003;
@@ -619,7 +619,7 @@
 	u16 *sarg = arg;
 	int scart = 0;
 
-	if (debug >= 2)
+	if (msp_debug >= 2)
 		v4l_i2c_print_ioctl(client, cmd);
 
 	switch (cmd) {
@@ -666,7 +666,7 @@
 		if (state->radio)
 			return 0;
 		state->radio = 1;
-		v4l_dbg(1, client, "switching to radio mode\n");
+		v4l_dbg(1, msp_debug, client, "switching to radio mode\n");
 		state->watch_stereo = 0;
 		switch (state->opmode) {
 		case OPMODE_MANUAL:
@@ -937,7 +937,7 @@
 		if (a->index < 0 || a->index > 2)
 			return -EINVAL;
 
-		v4l_dbg(1, client, "Setting audio out on msp34xx to input %i\n", a->index);
+		v4l_dbg(1, msp_debug, client, "Setting audio out on msp34xx to input %i\n", a->index);
 		msp_set_scart(client, state->in_scart, a->index + 1);
 
 		break;
@@ -947,7 +947,7 @@
 	{
 		u32 *a = (u32 *)arg;
 
-		v4l_dbg(1, client, "Setting I2S speed to %d\n", *a);
+		v4l_dbg(1, msp_debug, client, "Setting I2S speed to %d\n", *a);
 
 		switch (*a) {
 			case 1024000:
@@ -1041,7 +1041,7 @@
 {
 	struct i2c_client *client = container_of(dev, struct i2c_client, dev);
 
-	v4l_dbg(1, client, "suspend\n");
+	v4l_dbg(1, msp_debug, client, "suspend\n");
 	msp_reset(client);
 	return 0;
 }
@@ -1050,7 +1050,7 @@
 {
 	struct i2c_client *client = container_of(dev, struct i2c_client, dev);
 
-	v4l_dbg(1, client, "resume\n");
+	v4l_dbg(1, msp_debug, client, "resume\n");
 	msp_wake_thread(client);
 	return 0;
 }
@@ -1080,7 +1080,7 @@
 	snprintf(client->name, sizeof(client->name) - 1, "msp3400");
 
 	if (msp_reset(client) == -1) {
-		v4l_dbg(1, client, "msp3400 not found\n");
+		v4l_dbg(1, msp_debug, client, "msp3400 not found\n");
 		kfree(client);
 		return -1;
 	}
@@ -1107,9 +1107,9 @@
 	state->rev1 = msp_read_dsp(client, 0x1e);
 	if (state->rev1 != -1)
 		state->rev2 = msp_read_dsp(client, 0x1f);
-	v4l_dbg(1, client, "rev1=0x%04x, rev2=0x%04x\n", state->rev1, state->rev2);
+	v4l_dbg(1, msp_debug, client, "rev1=0x%04x, rev2=0x%04x\n", state->rev1, state->rev2);
 	if (state->rev1 == -1 || (state->rev1 == 0 && state->rev2 == 0)) {
-		v4l_dbg(1, client, "not an msp3400 (cannot read chip version)\n");
+		v4l_dbg(1, msp_debug, client, "not an msp3400 (cannot read chip version)\n");
 		kfree(state);
 		kfree(client);
 		return -1;
diff --git a/drivers/media/video/msp3400-kthreads.c b/drivers/media/video/msp3400-kthreads.c
index 2b59b68..2072c3e 100644
--- a/drivers/media/video/msp3400-kthreads.c
+++ b/drivers/media/video/msp3400-kthreads.c
@@ -168,7 +168,7 @@
 	struct msp_state *state = i2c_get_clientdata(client);
 	int i;
 
-	v4l_dbg(1, client, "setmode: %d\n", type);
+	v4l_dbg(1, msp_debug, client, "setmode: %d\n", type);
 	state->mode       = type;
 	state->audmode    = V4L2_TUNER_MODE_MONO;
 	state->rxsubchans = V4L2_TUNER_SUB_MONO;
@@ -191,7 +191,7 @@
 
 	msp_write_dem(client, 0x0056, 0); /*LOAD_REG_1/2*/
 
-	if (dolby) {
+	if (msp_dolby) {
 		msp_write_dsp(client, 0x0008, 0x0520); /* I2S1 */
 		msp_write_dsp(client, 0x0009, 0x0620); /* I2S2 */
 		msp_write_dsp(client, 0x000b, msp3400c_init_data[type].dsp_src);
@@ -221,7 +221,7 @@
 		/* this method would break everything, let's make sure
 		 * it's never called
 		 */
-		v4l_dbg(1, client, "setstereo called with mode=%d instead of set_source (ignored)\n",
+		v4l_dbg(1, msp_debug, client, "setstereo called with mode=%d instead of set_source (ignored)\n",
 		     mode);
 		return;
 	}
@@ -229,7 +229,7 @@
 	/* switch demodulator */
 	switch (state->mode) {
 	case MSP_MODE_FM_TERRA:
-		v4l_dbg(1, client, "FM setstereo: %s\n", strmode[mode]);
+		v4l_dbg(1, msp_debug, client, "FM setstereo: %s\n", strmode[mode]);
 		msp3400c_setcarrier(client, state->second, state->main);
 		switch (mode) {
 		case V4L2_TUNER_MODE_STEREO:
@@ -243,7 +243,7 @@
 		}
 		break;
 	case MSP_MODE_FM_SAT:
-		v4l_dbg(1, client, "SAT setstereo: %s\n", strmode[mode]);
+		v4l_dbg(1, msp_debug, client, "SAT setstereo: %s\n", strmode[mode]);
 		switch (mode) {
 		case V4L2_TUNER_MODE_MONO:
 			msp3400c_setcarrier(client, MSP_CARRIER(6.5), MSP_CARRIER(6.5));
@@ -262,24 +262,24 @@
 	case MSP_MODE_FM_NICAM1:
 	case MSP_MODE_FM_NICAM2:
 	case MSP_MODE_AM_NICAM:
-		v4l_dbg(1, client, "NICAM setstereo: %s\n",strmode[mode]);
+		v4l_dbg(1, msp_debug, client, "NICAM setstereo: %s\n",strmode[mode]);
 		msp3400c_setcarrier(client,state->second,state->main);
 		if (state->nicam_on)
 			nicam=0x0100;
 		break;
 	case MSP_MODE_BTSC:
-		v4l_dbg(1, client, "BTSC setstereo: %s\n",strmode[mode]);
+		v4l_dbg(1, msp_debug, client, "BTSC setstereo: %s\n",strmode[mode]);
 		nicam=0x0300;
 		break;
 	case MSP_MODE_EXTERN:
-		v4l_dbg(1, client, "extern setstereo: %s\n",strmode[mode]);
+		v4l_dbg(1, msp_debug, client, "extern setstereo: %s\n",strmode[mode]);
 		nicam = 0x0200;
 		break;
 	case MSP_MODE_FM_RADIO:
-		v4l_dbg(1, client, "FM-Radio setstereo: %s\n",strmode[mode]);
+		v4l_dbg(1, msp_debug, client, "FM-Radio setstereo: %s\n",strmode[mode]);
 		break;
 	default:
-		v4l_dbg(1, client, "mono setstereo\n");
+		v4l_dbg(1, msp_debug, client, "mono setstereo\n");
 		return;
 	}
 
@@ -290,7 +290,7 @@
 		break;
 	case V4L2_TUNER_MODE_MONO:
 		if (state->mode == MSP_MODE_AM_NICAM) {
-			v4l_dbg(1, client, "switching to AM mono\n");
+			v4l_dbg(1, msp_debug, client, "switching to AM mono\n");
 			/* AM mono decoding is handled by tuner, not MSP chip */
 			/* SCART switching control register */
 			msp_set_scart(client, SCART_MONO, 0);
@@ -304,9 +304,9 @@
 		src = 0x0010 | nicam;
 		break;
 	}
-	v4l_dbg(1, client, "setstereo final source/matrix = 0x%x\n", src);
+	v4l_dbg(1, msp_debug, client, "setstereo final source/matrix = 0x%x\n", src);
 
-	if (dolby) {
+	if (msp_dolby) {
 		msp_write_dsp(client, 0x0008, 0x0520);
 		msp_write_dsp(client, 0x0009, 0x0620);
 		msp_write_dsp(client, 0x000a, src);
@@ -327,20 +327,20 @@
 	struct msp_state *state = i2c_get_clientdata(client);
 
 	if (state->main == state->second) {
-		v4l_dbg(1, client, "mono sound carrier: %d.%03d MHz\n",
+		v4l_dbg(1, msp_debug, client, "mono sound carrier: %d.%03d MHz\n",
 		       state->main / 910000, (state->main / 910) % 1000);
 	} else {
-		v4l_dbg(1, client, "main sound carrier: %d.%03d MHz\n",
+		v4l_dbg(1, msp_debug, client, "main sound carrier: %d.%03d MHz\n",
 		       state->main / 910000, (state->main / 910) % 1000);
 	}
 	if (state->mode == MSP_MODE_FM_NICAM1 || state->mode == MSP_MODE_FM_NICAM2)
-		v4l_dbg(1, client, "NICAM/FM carrier  : %d.%03d MHz\n",
+		v4l_dbg(1, msp_debug, client, "NICAM/FM carrier  : %d.%03d MHz\n",
 		       state->second / 910000, (state->second/910) % 1000);
 	if (state->mode == MSP_MODE_AM_NICAM)
-		v4l_dbg(1, client, "NICAM/AM carrier  : %d.%03d MHz\n",
+		v4l_dbg(1, msp_debug, client, "NICAM/AM carrier  : %d.%03d MHz\n",
 		       state->second / 910000, (state->second / 910) % 1000);
 	if (state->mode == MSP_MODE_FM_TERRA && state->main != state->second) {
-		v4l_dbg(1, client, "FM-stereo carrier : %d.%03d MHz\n",
+		v4l_dbg(1, msp_debug, client, "FM-stereo carrier : %d.%03d MHz\n",
 		       state->second / 910000, (state->second / 910) % 1000);
 	}
 }
@@ -360,7 +360,7 @@
 		val = msp_read_dsp(client, 0x18);
 		if (val > 32767)
 			val -= 65536;
-		v4l_dbg(2, client, "stereo detect register: %d\n", val);
+		v4l_dbg(2, msp_debug, client, "stereo detect register: %d\n", val);
 		if (val > 4096) {
 			rxsubchans = V4L2_TUNER_SUB_STEREO | V4L2_TUNER_SUB_MONO;
 		} else if (val < -4096) {
@@ -374,7 +374,7 @@
 	case MSP_MODE_FM_NICAM2:
 	case MSP_MODE_AM_NICAM:
 		val = msp_read_dem(client, 0x23);
-		v4l_dbg(2, client, "nicam sync=%d, mode=%d\n",
+		v4l_dbg(2, msp_debug, client, "nicam sync=%d, mode=%d\n",
 			val & 1, (val & 0x1e) >> 1);
 
 		if (val & 1) {
@@ -407,7 +407,7 @@
 		break;
 	case MSP_MODE_BTSC:
 		val = msp_read_dem(client, 0x200);
-		v4l_dbg(2, client, "status=0x%x (pri=%s, sec=%s, %s%s%s)\n",
+		v4l_dbg(2, msp_debug, client, "status=0x%x (pri=%s, sec=%s, %s%s%s)\n",
 			val,
 			(val & 0x0002) ? "no"     : "yes",
 			(val & 0x0004) ? "no"     : "yes",
@@ -421,13 +421,13 @@
 	}
 	if (rxsubchans != state->rxsubchans) {
 		update = 1;
-		v4l_dbg(1, client, "watch: rxsubchans %d => %d\n",
+		v4l_dbg(1, msp_debug, client, "watch: rxsubchans %d => %d\n",
 			state->rxsubchans,rxsubchans);
 		state->rxsubchans = rxsubchans;
 	}
 	if (newnicam != state->nicam_on) {
 		update = 1;
-		v4l_dbg(1, client, "watch: nicam %d => %d\n",
+		v4l_dbg(1, msp_debug, client, "watch: nicam %d => %d\n",
 			state->nicam_on,newnicam);
 		state->nicam_on = newnicam;
 	}
@@ -452,7 +452,7 @@
 			msp3400c_setstereo(client, V4L2_TUNER_MODE_MONO);
 	}
 
-	if (once)
+	if (msp_once)
 		state->watch_stereo = 0;
 }
 
@@ -464,21 +464,21 @@
 	int count, max1,max2,val1,val2, val,this;
 
 
-	v4l_dbg(1, client, "msp3400 daemon started\n");
+	v4l_dbg(1, msp_debug, client, "msp3400 daemon started\n");
 	for (;;) {
-		v4l_dbg(2, client, "msp3400 thread: sleep\n");
+		v4l_dbg(2, msp_debug, client, "msp3400 thread: sleep\n");
 		msp_sleep(state, -1);
-		v4l_dbg(2, client, "msp3400 thread: wakeup\n");
+		v4l_dbg(2, msp_debug, client, "msp3400 thread: wakeup\n");
 
 	restart:
-		v4l_dbg(1, client, "thread: restart scan\n");
+		v4l_dbg(1, msp_debug, client, "thread: restart scan\n");
 		state->restart = 0;
 		if (kthread_should_stop())
 			break;
 
 		if (state->radio || MSP_MODE_EXTERN == state->mode) {
 			/* no carrier scan, just unmute */
-			v4l_dbg(1, client, "thread: no carrier scan\n");
+			v4l_dbg(1, msp_debug, client, "thread: no carrier scan\n");
 			msp_set_audio(client);
 			continue;
 		}
@@ -498,11 +498,11 @@
 		cd = msp3400c_carrier_detect_main;
 		count = ARRAY_SIZE(msp3400c_carrier_detect_main);
 
-		if (amsound && (state->v4l2_std & V4L2_STD_SECAM)) {
+		if (msp_amsound && (state->v4l2_std & V4L2_STD_SECAM)) {
 			/* autodetect doesn't work well with AM ... */
 			max1 = 3;
 			count = 0;
-			v4l_dbg(1, client, "AM sound override\n");
+			v4l_dbg(1, msp_debug, client, "AM sound override\n");
 		}
 
 		for (this = 0; this < count; this++) {
@@ -514,7 +514,7 @@
 				val -= 65536;
 			if (val1 < val)
 				val1 = val, max1 = this;
-			v4l_dbg(1, client, "carrier1 val: %5d / %s\n", val,cd[this].name);
+			v4l_dbg(1, msp_debug, client, "carrier1 val: %5d / %s\n", val,cd[this].name);
 		}
 
 		/* carrier detect pass #2 -- second (stereo) carrier */
@@ -535,7 +535,7 @@
 			break;
 		}
 
-		if (amsound && (state->v4l2_std & V4L2_STD_SECAM)) {
+		if (msp_amsound && (state->v4l2_std & V4L2_STD_SECAM)) {
 			/* autodetect doesn't work well with AM ... */
 			cd = NULL;
 			count = 0;
@@ -550,7 +550,7 @@
 				val -= 65536;
 			if (val2 < val)
 				val2 = val, max2 = this;
-			v4l_dbg(1, client, "carrier2 val: %5d / %s\n", val,cd[this].name);
+			v4l_dbg(1, msp_debug, client, "carrier2 val: %5d / %s\n", val,cd[this].name);
 		}
 
 		/* program the msp3400 according to the results */
@@ -627,7 +627,7 @@
 		/* unmute */
 		msp_set_audio(client);
 
-		if (debug)
+		if (msp_debug)
 			msp3400c_print_mode(client);
 
 		/* monitor tv audio mode */
@@ -637,7 +637,7 @@
 			watch_stereo(client);
 		}
 	}
-	v4l_dbg(1, client, "thread: exit\n");
+	v4l_dbg(1, msp_debug, client, "thread: exit\n");
 	return 0;
 }
 
@@ -648,22 +648,22 @@
 	struct msp_state *state = i2c_get_clientdata(client);
 	int val, i, std;
 
-	v4l_dbg(1, client, "msp3410 daemon started\n");
+	v4l_dbg(1, msp_debug, client, "msp3410 daemon started\n");
 
 	for (;;) {
-		v4l_dbg(2, client, "msp3410 thread: sleep\n");
+		v4l_dbg(2, msp_debug, client, "msp3410 thread: sleep\n");
 		msp_sleep(state,-1);
-		v4l_dbg(2, client, "msp3410 thread: wakeup\n");
+		v4l_dbg(2, msp_debug, client, "msp3410 thread: wakeup\n");
 
 	restart:
-		v4l_dbg(1, client, "thread: restart scan\n");
+		v4l_dbg(1, msp_debug, client, "thread: restart scan\n");
 		state->restart = 0;
 		if (kthread_should_stop())
 			break;
 
 		if (state->mode == MSP_MODE_EXTERN) {
 			/* no carrier scan needed, just unmute */
-			v4l_dbg(1, client, "thread: no carrier scan\n");
+			v4l_dbg(1, msp_debug, client, "thread: no carrier scan\n");
 			msp_set_audio(client);
 			continue;
 		}
@@ -682,8 +682,8 @@
 			std = (state->v4l2_std & V4L2_STD_NTSC) ? 0x20 : 1;
 		state->watch_stereo = 0;
 
-		if (debug)
-			v4l_dbg(1, client, "setting standard: %s (0x%04x)\n",
+		if (msp_debug)
+			v4l_dbg(1, msp_debug, client, "setting standard: %s (0x%04x)\n",
 			       msp_standard_std_name(std), std);
 
 		if (std != 1) {
@@ -700,22 +700,22 @@
 				val = msp_read_dem(client, 0x7e);
 				if (val < 0x07ff)
 					break;
-				v4l_dbg(1, client, "detection still in progress\n");
+				v4l_dbg(1, msp_debug, client, "detection still in progress\n");
 			}
 		}
 		for (i = 0; msp_stdlist[i].name != NULL; i++)
 			if (msp_stdlist[i].retval == val)
 				break;
-		v4l_dbg(1, client, "current standard: %s (0x%04x)\n",
+		v4l_dbg(1, msp_debug, client, "current standard: %s (0x%04x)\n",
 			msp_standard_std_name(val), val);
 		state->main   = msp_stdlist[i].main;
 		state->second = msp_stdlist[i].second;
 		state->std = val;
 
-		if (amsound && !state->radio && (state->v4l2_std & V4L2_STD_SECAM) &&
+		if (msp_amsound && !state->radio && (state->v4l2_std & V4L2_STD_SECAM) &&
 				(val != 0x0009)) {
 			/* autodetection has failed, let backup */
-			v4l_dbg(1, client, "autodetection failed,"
+			v4l_dbg(1, msp_debug, client, "autodetection failed,"
 				" switching to backup standard: %s (0x%04x)\n",
 				msp_stdlist[8].name ? msp_stdlist[8].name : "unknown",val);
 			val = 0x0009;
@@ -798,13 +798,13 @@
 			watch_stereo(client);
 		}
 	}
-	v4l_dbg(1, client, "thread: exit\n");
+	v4l_dbg(1, msp_debug, client, "thread: exit\n");
 	return 0;
 }
 
 /* ----------------------------------------------------------------------- */
 
-/* msp34xxG + (autoselect no-thread)                                          */
+/* msp34xxG + (autoselect no-thread)                                       */
 /* this one uses both automatic standard detection and automatic sound     */
 /* select which are available in the newer G versions                      */
 /* struct msp: only norm, acb and source are really used in this mode      */
@@ -825,7 +825,7 @@
 	 */
 	int value = (source & 0x07) << 8 | (source == 0 ? 0x30 : 0x20);
 
-	v4l_dbg(1, client, "set source to %d (0x%x)\n", source, value);
+	v4l_dbg(1, msp_debug, client, "set source to %d (0x%x)\n", source, value);
 	/* Loudspeaker Output */
 	msp_write_dsp(client, 0x08, value);
 	/* SCART1 DA Output */
@@ -840,7 +840,7 @@
 	 * 0x7f0 = forced mono mode
 	 */
 	/* a2 threshold for stereo/bilingual */
-	msp_write_dem(client, 0x22, stereo_threshold);
+	msp_write_dem(client, 0x22, msp_stereo_thresh);
 	state->source = source;
 }
 
@@ -897,28 +897,28 @@
 	struct msp_state *state = i2c_get_clientdata(client);
 	int val, std, i;
 
-	v4l_dbg(1, client, "msp34xxg daemon started\n");
+	v4l_dbg(1, msp_debug, client, "msp34xxg daemon started\n");
 
 	state->source = 1; /* default */
 	for (;;) {
-		v4l_dbg(2, client, "msp34xxg thread: sleep\n");
+		v4l_dbg(2, msp_debug, client, "msp34xxg thread: sleep\n");
 		msp_sleep(state, -1);
-		v4l_dbg(2, client, "msp34xxg thread: wakeup\n");
+		v4l_dbg(2, msp_debug, client, "msp34xxg thread: wakeup\n");
 
 	restart:
-		v4l_dbg(1, client, "thread: restart scan\n");
+		v4l_dbg(1, msp_debug, client, "thread: restart scan\n");
 		state->restart = 0;
 		if (kthread_should_stop())
 			break;
 
 		/* setup the chip*/
 		msp34xxg_reset(client);
-		std = standard;
+		std = msp_standard;
 		if (std != 0x01)
 			goto unmute;
 
 		/* watch autodetect */
-		v4l_dbg(1, client, "triggered autodetect, waiting for result\n");
+		v4l_dbg(1, msp_debug, client, "triggered autodetect, waiting for result\n");
 		for (i = 0; i < 10; i++) {
 			if (msp_sleep(state, 100))
 				goto restart;
@@ -929,16 +929,16 @@
 				std = val;
 				break;
 			}
-			v4l_dbg(2, client, "detection still in progress\n");
+			v4l_dbg(2, msp_debug, client, "detection still in progress\n");
 		}
 		if (std == 1) {
-			v4l_dbg(1, client, "detection still in progress after 10 tries. giving up.\n");
+			v4l_dbg(1, msp_debug, client, "detection still in progress after 10 tries. giving up.\n");
 			continue;
 		}
 
 	unmute:
 		state->std = std;
-		v4l_dbg(1, client, "current standard: %s (0x%04x)\n",
+		v4l_dbg(1, msp_debug, client, "current standard: %s (0x%04x)\n",
 			msp_standard_std_name(std), std);
 
 		/* unmute: dispatch sound to scart output, set scart volume */
@@ -950,7 +950,7 @@
 
 		msp_write_dem(client, 0x40, state->i2s_mode);
 	}
-	v4l_dbg(1, client, "thread: exit\n");
+	v4l_dbg(1, msp_debug, client, "thread: exit\n");
 	return 0;
 }
 
@@ -976,7 +976,7 @@
 		 * this is a problem, I'll handle SAP just like lang1/lang2.
 		 */
 	}
-	v4l_dbg(1, client, "status=0x%x, stereo=%d, bilingual=%d -> rxsubchans=%d\n",
+	v4l_dbg(1, msp_debug, client, "status=0x%x, stereo=%d, bilingual=%d -> rxsubchans=%d\n",
 		status, is_stereo, is_bilingual, state->rxsubchans);
 }
 
diff --git a/drivers/media/video/msp3400.h b/drivers/media/video/msp3400.h
index 8a05cf5..70a5ef8 100644
--- a/drivers/media/video/msp3400.h
+++ b/drivers/media/video/msp3400.h
@@ -48,12 +48,12 @@
 #define OPMODE_AUTOSELECT  2   /* use autodetect & autoselect (>= msp34xxG)   */
 
 /* module parameters */
-extern int debug;
-extern int once;
-extern int amsound;
-extern int standard;
-extern int dolby;
-extern int stereo_threshold;
+extern int msp_debug;
+extern int msp_once;
+extern int msp_amsound;
+extern int msp_standard;
+extern int msp_dolby;
+extern int msp_stereo_thresh;
 
 struct msp_state {
 	int rev1, rev2;
diff --git a/drivers/media/video/mt20xx.c b/drivers/media/video/mt20xx.c
index 2c19c95..0bf1caa 100644
--- a/drivers/media/video/mt20xx.c
+++ b/drivers/media/video/mt20xx.c
@@ -21,7 +21,7 @@
 module_param(radio_antenna,     int, 0644);
 
 /* from tuner-core.c */
-extern int debug;
+extern int tuner_debug;
 
 /* ---------------------------------------------------------------------- */
 
@@ -404,7 +404,7 @@
 	div2a=(lo2/8)-1;
 	div2b=lo2-(div2a+1)*8;
 
-	if (debug > 1) {
+	if (tuner_debug > 1) {
 		tuner_dbg("lo1 lo2 = %d %d\n", lo1, lo2);
 		tuner_dbg("num1 num2 div1a div1b div2a div2b= %x %x %x %x %x %x\n",
 			  num1,num2,div1a,div1b,div2a,div2b);
@@ -420,7 +420,7 @@
 	buf[5]=div2a;
 	if(num2!=0) buf[5]=buf[5]|0x40;
 
-	if (debug > 1) {
+	if (tuner_debug > 1) {
 		int i;
 		tuner_dbg("bufs is: ");
 		for(i=0;i<6;i++)
@@ -508,7 +508,7 @@
 
 	i2c_master_send(c,buf,1);
 	i2c_master_recv(c,buf,21);
-	if (debug) {
+	if (tuner_debug) {
 		int i;
 		tuner_dbg("MT20xx hexdump:");
 		for(i=0;i<21;i++) {
diff --git a/drivers/media/video/mxb.c b/drivers/media/video/mxb.c
index 91681aa..8416cef 100644
--- a/drivers/media/video/mxb.c
+++ b/drivers/media/video/mxb.c
@@ -177,12 +177,11 @@
 		return -ENODEV;
 	}
 
-	mxb = (struct mxb*)kmalloc(sizeof(struct mxb), GFP_KERNEL);
+	mxb = kzalloc(sizeof(struct mxb), GFP_KERNEL);
 	if( NULL == mxb ) {
 		DEB_D(("not enough kernel memory.\n"));
 		return -ENOMEM;
 	}
-	memset(mxb, 0x0, sizeof(struct mxb));	
 
 	mxb->i2c_adapter = (struct i2c_adapter) {
 		.class = I2C_CLASS_TV_ANALOG,
diff --git a/drivers/media/video/ovcamchip/ov6x20.c b/drivers/media/video/ovcamchip/ov6x20.c
index b3f4d26..c04130d 100644
--- a/drivers/media/video/ovcamchip/ov6x20.c
+++ b/drivers/media/video/ovcamchip/ov6x20.c
@@ -178,10 +178,9 @@
 	if (rc < 0)
 		return rc;
 
-	ov->spriv = s = kmalloc(sizeof *s, GFP_KERNEL);
+	ov->spriv = s = kzalloc(sizeof *s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;
-	memset(s, 0, sizeof *s);
 
 	s->auto_brt = 1;
 	s->auto_exp = 1;
diff --git a/drivers/media/video/ovcamchip/ov6x30.c b/drivers/media/video/ovcamchip/ov6x30.c
index 6eab458..73b94f5 100644
--- a/drivers/media/video/ovcamchip/ov6x30.c
+++ b/drivers/media/video/ovcamchip/ov6x30.c
@@ -141,10 +141,9 @@
 	if (rc < 0)
 		return rc;
 
-	ov->spriv = s = kmalloc(sizeof *s, GFP_KERNEL);
+	ov->spriv = s = kzalloc(sizeof *s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;
-	memset(s, 0, sizeof *s);
 
 	s->auto_brt = 1;
 	s->auto_exp = 1;
diff --git a/drivers/media/video/ovcamchip/ov76be.c b/drivers/media/video/ovcamchip/ov76be.c
index 29bbdc0..11f6be9 100644
--- a/drivers/media/video/ovcamchip/ov76be.c
+++ b/drivers/media/video/ovcamchip/ov76be.c
@@ -105,10 +105,9 @@
 	if (rc < 0)
 		return rc;
 
-	ov->spriv = s = kmalloc(sizeof *s, GFP_KERNEL);
+	ov->spriv = s = kzalloc(sizeof *s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;
-	memset(s, 0, sizeof *s);
 
 	s->auto_brt = 1;
 	s->auto_exp = 1;
diff --git a/drivers/media/video/ovcamchip/ov7x10.c b/drivers/media/video/ovcamchip/ov7x10.c
index 6c383d4..5206e79 100644
--- a/drivers/media/video/ovcamchip/ov7x10.c
+++ b/drivers/media/video/ovcamchip/ov7x10.c
@@ -115,10 +115,9 @@
 	if (rc < 0)
 		return rc;
 
-	ov->spriv = s = kmalloc(sizeof *s, GFP_KERNEL);
+	ov->spriv = s = kzalloc(sizeof *s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;
-	memset(s, 0, sizeof *s);
 
 	s->auto_brt = 1;
 	s->auto_exp = 1;
diff --git a/drivers/media/video/ovcamchip/ov7x20.c b/drivers/media/video/ovcamchip/ov7x20.c
index 3c8c48f..8e26ae3 100644
--- a/drivers/media/video/ovcamchip/ov7x20.c
+++ b/drivers/media/video/ovcamchip/ov7x20.c
@@ -232,10 +232,9 @@
 	if (rc < 0)
 		return rc;
 
-	ov->spriv = s = kmalloc(sizeof *s, GFP_KERNEL);
+	ov->spriv = s = kzalloc(sizeof *s, GFP_KERNEL);
 	if (!s)
 		return -ENOMEM;
-	memset(s, 0, sizeof *s);
 
 	s->auto_brt = 1;
 	s->auto_exp = DFL_AUTO_EXP;
diff --git a/drivers/media/video/ovcamchip/ovcamchip_core.c b/drivers/media/video/ovcamchip/ovcamchip_core.c
index 428f1bb..e76b53d 100644
--- a/drivers/media/video/ovcamchip/ovcamchip_core.c
+++ b/drivers/media/video/ovcamchip/ovcamchip_core.c
@@ -316,12 +316,11 @@
 	c->adapter = adap;
 	strcpy(c->name, "OV????");
 
-	ov = kmalloc(sizeof *ov, GFP_KERNEL);
+	ov = kzalloc(sizeof *ov, GFP_KERNEL);
 	if (!ov) {
 		rc = -ENOMEM;
 		goto no_ov;
 	}
-	memset(ov, 0, sizeof *ov);
 	i2c_set_clientdata(c, ov);
 
 	rc = ovcamchip_detect(c);
diff --git a/drivers/media/video/saa5246a.c b/drivers/media/video/saa5246a.c
index 0aa9e72..2ce0102 100644
--- a/drivers/media/video/saa5246a.c
+++ b/drivers/media/video/saa5246a.c
@@ -83,13 +83,12 @@
 	client_template.adapter = adap;
 	client_template.addr = addr;
 	memcpy(client, &client_template, sizeof(*client));
-	t = kmalloc(sizeof(*t), GFP_KERNEL);
+	t = kzalloc(sizeof(*t), GFP_KERNEL);
 	if(t==NULL)
 	{
 		kfree(client);
 		return -ENOMEM;
 	}
-	memset(t, 0, sizeof(*t));
 	strlcpy(client->name, IF_NAME, I2C_NAME_SIZE);
 	init_MUTEX(&t->lock);
 
diff --git a/drivers/media/video/saa5249.c b/drivers/media/video/saa5249.c
index 73b4f0e..5694eb5 100644
--- a/drivers/media/video/saa5249.c
+++ b/drivers/media/video/saa5249.c
@@ -151,13 +151,12 @@
         client_template.adapter = adap;
         client_template.addr = addr;
 	memcpy(client, &client_template, sizeof(*client));
-	t = kmalloc(sizeof(*t), GFP_KERNEL);
+	t = kzalloc(sizeof(*t), GFP_KERNEL);
 	if(t==NULL)
 	{
 		kfree(client);
 		return -ENOMEM;
 	}
-	memset(t, 0, sizeof(*t));
 	strlcpy(client->name, IF_NAME, I2C_NAME_SIZE);
 	init_MUTEX(&t->lock);
 	
@@ -165,7 +164,7 @@
 	 *	Now create a video4linux device
 	 */
 	 
-	vd = (struct video_device *)kmalloc(sizeof(struct video_device), GFP_KERNEL);
+	vd = kmalloc(sizeof(struct video_device), GFP_KERNEL);
 	if(vd==NULL)
 	{
 		kfree(t);
diff --git a/drivers/media/video/saa7110.c b/drivers/media/video/saa7110.c
index 619ff0b..7bb85a7 100644
--- a/drivers/media/video/saa7110.c
+++ b/drivers/media/video/saa7110.c
@@ -494,21 +494,19 @@
 	     I2C_FUNC_SMBUS_READ_BYTE | I2C_FUNC_SMBUS_WRITE_BYTE_DATA))
 		return 0;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == 0)
 		return -ENOMEM;
-	memset(client, 0, sizeof(struct i2c_client));
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &i2c_driver_saa7110;
 	strlcpy(I2C_NAME(client), "saa7110", sizeof(I2C_NAME(client)));
 
-	decoder = kmalloc(sizeof(struct saa7110), GFP_KERNEL);
+	decoder = kzalloc(sizeof(struct saa7110), GFP_KERNEL);
 	if (decoder == 0) {
 		kfree(client);
 		return -ENOMEM;
 	}
-	memset(decoder, 0, sizeof(struct saa7110));
 	decoder->norm = VIDEO_MODE_PAL;
 	decoder->input = 0;
 	decoder->enable = 1;
diff --git a/drivers/media/video/saa7111.c b/drivers/media/video/saa7111.c
index acaeee5..8c06592 100644
--- a/drivers/media/video/saa7111.c
+++ b/drivers/media/video/saa7111.c
@@ -511,21 +511,19 @@
 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 		return 0;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == 0)
 		return -ENOMEM;
-	memset(client, 0, sizeof(struct i2c_client));
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &i2c_driver_saa7111;
 	strlcpy(I2C_NAME(client), "saa7111", sizeof(I2C_NAME(client)));
 
-	decoder = kmalloc(sizeof(struct saa7111), GFP_KERNEL);
+	decoder = kzalloc(sizeof(struct saa7111), GFP_KERNEL);
 	if (decoder == NULL) {
 		kfree(client);
 		return -ENOMEM;
 	}
-	memset(decoder, 0, sizeof(struct saa7111));
 	decoder->norm = VIDEO_MODE_NTSC;
 	decoder->input = 0;
 	decoder->enable = 1;
diff --git a/drivers/media/video/saa7114.c b/drivers/media/video/saa7114.c
index b7ac012..fd0a4b4 100644
--- a/drivers/media/video/saa7114.c
+++ b/drivers/media/video/saa7114.c
@@ -852,21 +852,19 @@
 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 		return 0;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == 0)
 		return -ENOMEM;
-	memset(client, 0, sizeof(struct i2c_client));
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &i2c_driver_saa7114;
 	strlcpy(I2C_NAME(client), "saa7114", sizeof(I2C_NAME(client)));
 
-	decoder = kmalloc(sizeof(struct saa7114), GFP_KERNEL);
+	decoder = kzalloc(sizeof(struct saa7114), GFP_KERNEL);
 	if (decoder == NULL) {
 		kfree(client);
 		return -ENOMEM;
 	}
-	memset(decoder, 0, sizeof(struct saa7114));
 	decoder->norm = VIDEO_MODE_NTSC;
 	decoder->input = -1;
 	decoder->enable = 1;
diff --git a/drivers/media/video/saa7115.c b/drivers/media/video/saa7115.c
index 4a4bc69..048d000 100644
--- a/drivers/media/video/saa7115.c
+++ b/drivers/media/video/saa7115.c
@@ -549,7 +549,7 @@
 	u32 hz;
 	u64 f;
 
-	v4l_dbg(1, client, "set audio clock freq: %d\n", freq);
+	v4l_dbg(1, debug, client, "set audio clock freq: %d\n", freq);
 
 	/* sanity check */
 	if (freq < 32000 || freq > 48000)
@@ -670,10 +670,10 @@
 
 	// This works for NTSC-M, SECAM-L and the 50Hz PAL variants.
 	if (std & V4L2_STD_525_60) {
-		v4l_dbg(1, client, "decoder set standard 60 Hz\n");
+		v4l_dbg(1, debug, client, "decoder set standard 60 Hz\n");
 		saa7115_writeregs(client, saa7115_cfg_60hz_video);
 	} else {
-		v4l_dbg(1, client, "decoder set standard 50 Hz\n");
+		v4l_dbg(1, debug, client, "decoder set standard 50 Hz\n");
 		saa7115_writeregs(client, saa7115_cfg_50hz_video);
 	}
 
@@ -863,7 +863,7 @@
 
 	pix = &(fmt->fmt.pix);
 
-	v4l_dbg(1, client, "decoder set size\n");
+	v4l_dbg(1, debug, client, "decoder set size\n");
 
 	/* FIXME need better bounds checking here */
 	if ((pix->width < 1) || (pix->width > 1440))
@@ -889,7 +889,7 @@
 		HPSC = HPSC ? HPSC : 1;
 		HFSC = (int)((1024 * 720) / (HPSC * pix->width));
 
-		v4l_dbg(1, client, "Hpsc: 0x%05x, Hfsc: 0x%05x\n", HPSC, HFSC);
+		v4l_dbg(1, debug, client, "Hpsc: 0x%05x, Hfsc: 0x%05x\n", HPSC, HFSC);
 		/* FIXME hardcodes to "Task B"
 		 * write H prescaler integer */
 		saa7115_write(client, 0xd0, (u8) (HPSC & 0x3f));
@@ -903,10 +903,10 @@
 		saa7115_write(client, 0xDD, (u8) ((HFSC >> 9) & 0xff));
 	} else {
 		if (is_50hz) {
-			v4l_dbg(1, client, "Setting full 50hz width\n");
+			v4l_dbg(1, debug, client, "Setting full 50hz width\n");
 			saa7115_writeregs(client, saa7115_cfg_50hz_fullres_x);
 		} else {
-			v4l_dbg(1, client, "Setting full 60hz width\n");
+			v4l_dbg(1, debug, client, "Setting full 60hz width\n");
 			saa7115_writeregs(client, saa7115_cfg_60hz_fullres_x);
 		}
 	}
@@ -915,7 +915,7 @@
 
 	if (pix->height != Vsrc) {
 		VSCY = (int)((1024 * Vsrc) / pix->height);
-		v4l_dbg(1, client, "Vsrc: %d, Vscy: 0x%05x\n", Vsrc, VSCY);
+		v4l_dbg(1, debug, client, "Vsrc: %d, Vscy: 0x%05x\n", Vsrc, VSCY);
 
 		/* Correct Contrast and Luminance */
 		saa7115_write(client, 0xd5, (u8) (64 * 1024 / VSCY));
@@ -929,10 +929,10 @@
 		saa7115_write(client, 0xe3, (u8) ((VSCY >> 8) & 0xff));
 	} else {
 		if (is_50hz) {
-			v4l_dbg(1, client, "Setting full 50Hz height\n");
+			v4l_dbg(1, debug, client, "Setting full 50Hz height\n");
 			saa7115_writeregs(client, saa7115_cfg_50hz_fullres_y);
 		} else {
-			v4l_dbg(1, client, "Setting full 60hz height\n");
+			v4l_dbg(1, debug, client, "Setting full 60hz height\n");
 			saa7115_writeregs(client, saa7115_cfg_60hz_fullres_y);
 		}
 	}
@@ -1079,7 +1079,7 @@
 			break;
 		status = saa7115_read(client, 0x1f);
 
-		v4l_dbg(1, client, "status: 0x%02x\n", status);
+		v4l_dbg(1, debug, client, "status: 0x%02x\n", status);
 		vt->signal = ((status & (1 << 6)) == 0) ? 0xffff : 0x0;
 		break;
 	}
@@ -1125,7 +1125,7 @@
 		break;
 
 	case VIDIOC_S_INPUT:
-		v4l_dbg(1, client, "decoder set input %d\n", *iarg);
+		v4l_dbg(1, debug, client, "decoder set input %d\n", *iarg);
 		/* inputs from 0-9 are available */
 		if (*iarg < 0 || *iarg > 9) {
 			return -EINVAL;
@@ -1133,7 +1133,7 @@
 
 		if (state->input == *iarg)
 			break;
-		v4l_dbg(1, client, "now setting %s input\n",
+		v4l_dbg(1, debug, client, "now setting %s input\n",
 			*iarg >= 6 ? "S-Video" : "Composite");
 		state->input = *iarg;
 
@@ -1150,7 +1150,7 @@
 
 	case VIDIOC_STREAMON:
 	case VIDIOC_STREAMOFF:
-		v4l_dbg(1, client, "%s output\n",
+		v4l_dbg(1, debug, client, "%s output\n",
 			(cmd == VIDIOC_STREAMON) ? "enable" : "disable");
 
 		if (state->enable != (cmd == VIDIOC_STREAMON)) {
@@ -1164,7 +1164,7 @@
 		break;
 
 	case VIDIOC_INT_RESET:
-		v4l_dbg(1, client, "decoder RESET\n");
+		v4l_dbg(1, debug, client, "decoder RESET\n");
 		saa7115_writeregs(client, saa7115_cfg_reset_scaler);
 		break;
 
@@ -1249,21 +1249,20 @@
 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 		return 0;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == 0)
 		return -ENOMEM;
-	memset(client, 0, sizeof(struct i2c_client));
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &i2c_driver_saa7115;
 	snprintf(client->name, sizeof(client->name) - 1, "saa7115");
 
-	v4l_dbg(1, client, "detecting saa7115 client on address 0x%x\n", address << 1);
+	v4l_dbg(1, debug, client, "detecting saa7115 client on address 0x%x\n", address << 1);
 
 	saa7115_write(client, 0, 5);
 	chip_id = saa7115_read(client, 0) & 0x0f;
 	if (chip_id != 4 && chip_id != 5) {
-		v4l_dbg(1, client, "saa7115 not found\n");
+		v4l_dbg(1, debug, client, "saa7115 not found\n");
 		kfree(client);
 		return 0;
 	}
@@ -1272,13 +1271,12 @@
 	}
 	v4l_info(client, "saa711%d found @ 0x%x (%s)\n", chip_id, address << 1, adapter->name);
 
-	state = kmalloc(sizeof(struct saa7115_state), GFP_KERNEL);
+	state = kzalloc(sizeof(struct saa7115_state), GFP_KERNEL);
 	i2c_set_clientdata(client, state);
 	if (state == NULL) {
 		kfree(client);
 		return -ENOMEM;
 	}
-	memset(state, 0, sizeof(struct saa7115_state));
 	state->std = V4L2_STD_NTSC;
 	state->input = -1;
 	state->enable = 1;
@@ -1290,7 +1288,7 @@
 	state->ident = (chip_id == 4) ? V4L2_IDENT_SAA7114 : V4L2_IDENT_SAA7115;
 	state->audclk_freq = 48000;
 
-	v4l_dbg(1, client, "writing init values\n");
+	v4l_dbg(1, debug, client, "writing init values\n");
 
 	/* init to 60hz/48khz */
 	saa7115_writeregs(client, saa7115_init_auto_input);
@@ -1303,7 +1301,7 @@
 
 	i2c_attach_client(client);
 
-	v4l_dbg(1, client, "status: (1E) 0x%02x, (1F) 0x%02x\n",
+	v4l_dbg(1, debug, client, "status: (1E) 0x%02x, (1F) 0x%02x\n",
 		saa7115_read(client, 0x1e), saa7115_read(client, 0x1f));
 
 	return 0;
diff --git a/drivers/media/video/saa711x.c b/drivers/media/video/saa711x.c
index f39a7be..ae53063 100644
--- a/drivers/media/video/saa711x.c
+++ b/drivers/media/video/saa711x.c
@@ -487,20 +487,18 @@
 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 		return 0;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == 0)
 		return -ENOMEM;
-	memset(client, 0, sizeof(struct i2c_client));
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &i2c_driver_saa711x;
 	strlcpy(I2C_NAME(client), "saa711x", sizeof(I2C_NAME(client)));
-	decoder = kmalloc(sizeof(struct saa711x), GFP_KERNEL);
+	decoder = kzalloc(sizeof(struct saa711x), GFP_KERNEL);
 	if (decoder == NULL) {
 		kfree(client);
 		return -ENOMEM;
 	}
-	memset(decoder, 0, sizeof(struct saa711x));
 	decoder->norm = VIDEO_MODE_NTSC;
 	decoder->input = 0;
 	decoder->enable = 1;
diff --git a/drivers/media/video/saa7127.c b/drivers/media/video/saa7127.c
index 2009c1b..992c717 100644
--- a/drivers/media/video/saa7127.c
+++ b/drivers/media/video/saa7127.c
@@ -338,7 +338,7 @@
 	if (enable && (data->field != 0 || data->line != 16))
 		return -EINVAL;
 	if (state->vps_enable != enable) {
-		v4l_dbg(1, client, "Turn VPS Signal %s\n", enable ? "on" : "off");
+		v4l_dbg(1, debug, client, "Turn VPS Signal %s\n", enable ? "on" : "off");
 		saa7127_write(client, 0x54, enable << 7);
 		state->vps_enable = enable;
 	}
@@ -350,7 +350,7 @@
 	state->vps_data[2] = data->data[11];
 	state->vps_data[3] = data->data[12];
 	state->vps_data[4] = data->data[13];
-	v4l_dbg(1, client, "Set VPS data %02x %02x %02x %02x %02x\n",
+	v4l_dbg(1, debug, client, "Set VPS data %02x %02x %02x %02x %02x\n",
 		state->vps_data[0], state->vps_data[1],
 		state->vps_data[2], state->vps_data[3],
 		state->vps_data[4]);
@@ -373,7 +373,7 @@
 	if (enable && (data->field != 0 || data->line != 21))
 		return -EINVAL;
 	if (state->cc_enable != enable) {
-		v4l_dbg(1, client, "Turn CC %s\n", enable ? "on" : "off");
+		v4l_dbg(1, debug, client, "Turn CC %s\n", enable ? "on" : "off");
 		saa7127_write(client, SAA7127_REG_CLOSED_CAPTION,
 				(state->xds_enable << 7) | (enable << 6) | 0x11);
 		state->cc_enable = enable;
@@ -381,7 +381,7 @@
 	if (!enable)
 		return 0;
 
-	v4l_dbg(2, client, "CC data: %04x\n", cc);
+	v4l_dbg(2, debug, client, "CC data: %04x\n", cc);
 	saa7127_write(client, SAA7127_REG_LINE_21_ODD_0, cc & 0xff);
 	saa7127_write(client, SAA7127_REG_LINE_21_ODD_1, cc >> 8);
 	state->cc_data = cc;
@@ -399,7 +399,7 @@
 	if (enable && (data->field != 1 || data->line != 21))
 		return -EINVAL;
 	if (state->xds_enable != enable) {
-		v4l_dbg(1, client, "Turn XDS %s\n", enable ? "on" : "off");
+		v4l_dbg(1, debug, client, "Turn XDS %s\n", enable ? "on" : "off");
 		saa7127_write(client, SAA7127_REG_CLOSED_CAPTION,
 				(enable << 7) | (state->cc_enable << 6) | 0x11);
 		state->xds_enable = enable;
@@ -407,7 +407,7 @@
 	if (!enable)
 		return 0;
 
-	v4l_dbg(2, client, "XDS data: %04x\n", xds);
+	v4l_dbg(2, debug, client, "XDS data: %04x\n", xds);
 	saa7127_write(client, SAA7127_REG_LINE_21_EVEN_0, xds & 0xff);
 	saa7127_write(client, SAA7127_REG_LINE_21_EVEN_1, xds >> 8);
 	state->xds_data = xds;
@@ -424,7 +424,7 @@
 	if (enable && (data->field != 0 || data->line != 23))
 		return -EINVAL;
 	if (state->wss_enable != enable) {
-		v4l_dbg(1, client, "Turn WSS %s\n", enable ? "on" : "off");
+		v4l_dbg(1, debug, client, "Turn WSS %s\n", enable ? "on" : "off");
 		saa7127_write(client, 0x27, enable << 7);
 		state->wss_enable = enable;
 	}
@@ -433,7 +433,7 @@
 
 	saa7127_write(client, 0x26, data->data[0]);
 	saa7127_write(client, 0x27, 0x80 | (data->data[1] & 0x3f));
-	v4l_dbg(1, client, "WSS mode: %s\n", wss_strs[data->data[0] & 0xf]);
+	v4l_dbg(1, debug, client, "WSS mode: %s\n", wss_strs[data->data[0] & 0xf]);
 	state->wss_mode = (data->data[1] & 0x3f) << 8 | data->data[0];
 	return 0;
 }
@@ -445,11 +445,11 @@
 	struct saa7127_state *state = i2c_get_clientdata(client);
 
 	if (enable) {
-		v4l_dbg(1, client, "Enable Video Output\n");
+		v4l_dbg(1, debug, client, "Enable Video Output\n");
 		saa7127_write(client, 0x2d, state->reg_2d);
 		saa7127_write(client, 0x61, state->reg_61);
 	} else {
-		v4l_dbg(1, client, "Disable Video Output\n");
+		v4l_dbg(1, debug, client, "Disable Video Output\n");
 		saa7127_write(client, 0x2d, (state->reg_2d & 0xf0));
 		saa7127_write(client, 0x61, (state->reg_61 | 0xc0));
 	}
@@ -465,11 +465,11 @@
 	const struct i2c_reg_value *inittab;
 
 	if (std & V4L2_STD_525_60) {
-		v4l_dbg(1, client, "Selecting 60 Hz video Standard\n");
+		v4l_dbg(1, debug, client, "Selecting 60 Hz video Standard\n");
 		inittab = saa7127_init_config_60hz;
 		state->reg_61 = SAA7127_60HZ_DAC_CONTROL;
 	} else {
-		v4l_dbg(1, client, "Selecting 50 Hz video Standard\n");
+		v4l_dbg(1, debug, client, "Selecting 50 Hz video Standard\n");
 		inittab = saa7127_init_config_50hz;
 		state->reg_61 = SAA7127_50HZ_DAC_CONTROL;
 	}
@@ -520,7 +520,7 @@
 	default:
 		return -EINVAL;
 	}
-	v4l_dbg(1, client, "Selecting %s output type\n", output_strs[output]);
+	v4l_dbg(1, debug, client, "Selecting %s output type\n", output_strs[output]);
 
 	/* Configure Encoder */
 	saa7127_write(client, 0x2d, state->reg_2d);
@@ -537,12 +537,12 @@
 
 	switch (input) {
 	case SAA7127_INPUT_TYPE_NORMAL:	/* avia */
-		v4l_dbg(1, client, "Selecting Normal Encoder Input\n");
+		v4l_dbg(1, debug, client, "Selecting Normal Encoder Input\n");
 		state->reg_3a_cb = 0;
 		break;
 
 	case SAA7127_INPUT_TYPE_TEST_IMAGE:	/* color bar */
-		v4l_dbg(1, client, "Selecting Color Bar generator\n");
+		v4l_dbg(1, debug, client, "Selecting Color Bar generator\n");
 		state->reg_3a_cb = 0x80;
 		break;
 
@@ -689,17 +689,16 @@
 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 		return 0;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == 0)
 		return -ENOMEM;
 
-	memset(client, 0, sizeof(struct i2c_client));
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &i2c_driver_saa7127;
 	snprintf(client->name, sizeof(client->name) - 1, "saa7127");
 
-	v4l_dbg(1, client, "detecting saa7127 client on address 0x%x\n", address << 1);
+	v4l_dbg(1, debug, client, "detecting saa7127 client on address 0x%x\n", address << 1);
 
 	/* First test register 0: Bits 5-7 are a version ID (should be 0),
 	   and bit 2 should also be 0.
@@ -708,11 +707,11 @@
 	   0x1d after a reset and not expected to ever change. */
 	if ((saa7127_read(client, 0) & 0xe4) != 0 ||
 			(saa7127_read(client, 0x29) & 0x3f) != 0x1d) {
-		v4l_dbg(1, client, "saa7127 not found\n");
+		v4l_dbg(1, debug, client, "saa7127 not found\n");
 		kfree(client);
 		return 0;
 	}
-	state = kmalloc(sizeof(struct saa7127_state), GFP_KERNEL);
+	state = kzalloc(sizeof(struct saa7127_state), GFP_KERNEL);
 
 	if (state == NULL) {
 		kfree(client);
@@ -720,11 +719,10 @@
 	}
 
 	i2c_set_clientdata(client, state);
-	memset(state, 0, sizeof(struct saa7127_state));
 
 	/* Configure Encoder */
 
-	v4l_dbg(1, client, "Configuring encoder\n");
+	v4l_dbg(1, debug, client, "Configuring encoder\n");
 	saa7127_write_inittab(client, saa7127_init_config_common);
 	saa7127_set_std(client, V4L2_STD_NTSC);
 	saa7127_set_output_type(client, SAA7127_OUTPUT_TYPE_BOTH);
diff --git a/drivers/media/video/saa7134/Kconfig b/drivers/media/video/saa7134/Kconfig
index 8a5c3e7..86671a4 100644
--- a/drivers/media/video/saa7134/Kconfig
+++ b/drivers/media/video/saa7134/Kconfig
@@ -15,7 +15,7 @@
 config VIDEO_SAA7134_ALSA
 	tristate "Philips SAA7134 DMA audio support"
 	depends on VIDEO_SAA7134 && SND
-	select SND_PCM_OSS
+	select SND_PCM
 	---help---
 	  This is a video4linux driver for direct (DMA) audio in
 	  Philips SAA713x based TV cards using ALSA
diff --git a/drivers/media/video/saa7134/saa6752hs.c b/drivers/media/video/saa7134/saa6752hs.c
index ad73c4a..0e0ba50 100644
--- a/drivers/media/video/saa7134/saa6752hs.c
+++ b/drivers/media/video/saa7134/saa6752hs.c
@@ -511,9 +511,8 @@
 	struct saa6752hs_state *h;
 
 
-	if (NULL == (h = kmalloc(sizeof(*h), GFP_KERNEL)))
+	if (NULL == (h = kzalloc(sizeof(*h), GFP_KERNEL)))
 		return -ENOMEM;
-	memset(h,0,sizeof(*h));
 	h->client = client_template;
 	h->params = param_defaults;
 	h->client.adapter = adap;
diff --git a/drivers/media/video/saa7134/saa7134-cards.c b/drivers/media/video/saa7134/saa7134-cards.c
index 77e5be9..275d06a 100644
--- a/drivers/media/video/saa7134/saa7134-cards.c
+++ b/drivers/media/video/saa7134/saa7134-cards.c
@@ -1666,7 +1666,7 @@
 		.radio_type     = UNSET,
 		.tuner_addr	= ADDR_UNSET,
 		.radio_addr	= ADDR_UNSET,
-		.tda9887_conf   = TDA9887_PRESENT | TDA9887_INTERCARRIER,
+		.tda9887_conf   = TDA9887_PRESENT | TDA9887_INTERCARRIER | TDA9887_PORT2_ACTIVE,
 		.mpeg           = SAA7134_MPEG_DVB,
 		.inputs         = {{
 			.name = name_tv,
diff --git a/drivers/media/video/saa7134/saa7134-core.c b/drivers/media/video/saa7134/saa7134-core.c
index accbc32..3983a65 100644
--- a/drivers/media/video/saa7134/saa7134-core.c
+++ b/drivers/media/video/saa7134/saa7134-core.c
@@ -803,10 +803,9 @@
 	struct saa7134_mpeg_ops *mops;
 	int err;
 
-	dev = kmalloc(sizeof(*dev),GFP_KERNEL);
+	dev = kzalloc(sizeof(*dev),GFP_KERNEL);
 	if (NULL == dev)
 		return -ENOMEM;
-	memset(dev,0,sizeof(*dev));
 
 	/* pci init */
 	dev->pci = pci_dev;
diff --git a/drivers/media/video/saa7134/saa7134-video.c b/drivers/media/video/saa7134/saa7134-video.c
index adfa8fe..e97426b 100644
--- a/drivers/media/video/saa7134/saa7134-video.c
+++ b/drivers/media/video/saa7134/saa7134-video.c
@@ -1264,10 +1264,9 @@
 		v4l2_type_names[type]);
 
 	/* allocate + initialize per filehandle data */
-	fh = kmalloc(sizeof(*fh),GFP_KERNEL);
+	fh = kzalloc(sizeof(*fh),GFP_KERNEL);
 	if (NULL == fh)
 		return -ENOMEM;
-	memset(fh,0,sizeof(*fh));
 	file->private_data = fh;
 	fh->dev      = dev;
 	fh->radio    = radio;
diff --git a/drivers/media/video/saa7146.h b/drivers/media/video/saa7146.h
index f305ec8..756963f 100644
--- a/drivers/media/video/saa7146.h
+++ b/drivers/media/video/saa7146.h
@@ -73,7 +73,6 @@
         unsigned int nr;
 	unsigned long irq;          /* IRQ used by SAA7146 card */
 	unsigned short id;
-	struct pci_dev *dev;
 	unsigned char revision;
 	unsigned char boardcfg[64];	/* 64 bytes of config from eeprom */
 	unsigned long saa7146_adr;   /* bus address of IO mem from PCI BIOS */
diff --git a/drivers/media/video/saa7185.c b/drivers/media/video/saa7185.c
index f72a9f7..3ed0edb 100644
--- a/drivers/media/video/saa7185.c
+++ b/drivers/media/video/saa7185.c
@@ -408,21 +408,19 @@
 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 		return 0;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == 0)
 		return -ENOMEM;
-	memset(client, 0, sizeof(struct i2c_client));
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &i2c_driver_saa7185;
 	strlcpy(I2C_NAME(client), "saa7185", sizeof(I2C_NAME(client)));
 
-	encoder = kmalloc(sizeof(struct saa7185), GFP_KERNEL);
+	encoder = kzalloc(sizeof(struct saa7185), GFP_KERNEL);
 	if (encoder == NULL) {
 		kfree(client);
 		return -ENOMEM;
 	}
-	memset(encoder, 0, sizeof(struct saa7185));
 	encoder->norm = VIDEO_MODE_NTSC;
 	encoder->enable = 1;
 	i2c_set_clientdata(client, encoder);
diff --git a/drivers/media/video/saa7191.c b/drivers/media/video/saa7191.c
index 41f6f05..746cadb 100644
--- a/drivers/media/video/saa7191.c
+++ b/drivers/media/video/saa7191.c
@@ -571,18 +571,15 @@
 	printk(KERN_INFO "Philips SAA7191 driver version %s\n",
 	       SAA7191_MODULE_VERSION);
 
-	client = kmalloc(sizeof(*client), GFP_KERNEL);
+	client = kzalloc(sizeof(*client), GFP_KERNEL);
 	if (!client)
 		return -ENOMEM;
-	decoder = kmalloc(sizeof(*decoder), GFP_KERNEL);
+	decoder = kzalloc(sizeof(*decoder), GFP_KERNEL);
 	if (!decoder) {
 		err = -ENOMEM;
 		goto out_free_client;
 	}
 
-	memset(client, 0, sizeof(struct i2c_client));
-	memset(decoder, 0, sizeof(struct saa7191));
-
 	client->addr = addr;
 	client->adapter = adap;
 	client->driver = &i2c_driver_saa7191;
diff --git a/drivers/media/video/stradis.c b/drivers/media/video/stradis.c
index 6ee54a4..54fc330 100644
--- a/drivers/media/video/stradis.c
+++ b/drivers/media/video/stradis.c
@@ -49,9 +49,9 @@
 #include "saa7121.h"
 #include "cs8420.h"
 
-#define DEBUG(x) 		/* debug driver */
-#undef  IDEBUG	 		/* debug irq handler */
-#undef  MDEBUG	 		/* debug memory management */
+#define DEBUG(x)		/* debug driver */
+#undef  IDEBUG			/* debug irq handler */
+#undef  MDEBUG			/* debug memory management */
 
 #define SAA7146_MAX 6
 
@@ -63,7 +63,6 @@
 module_param(video_nr, int, 0);
 MODULE_LICENSE("GPL");
 
-
 #define nDebNormal	0x00480000
 #define nDebNoInc	0x00480000
 #define nDebVideo	0xd0480000
@@ -99,7 +98,12 @@
 
 #ifdef USE_RESCUE_EEPROM_SDM275
 static unsigned char rescue_eeprom[64] = {
-0x00,0x01,0x04,0x13,0x26,0x0f,0x10,0x00,0x00,0x00,0x43,0x63,0x22,0x01,0x29,0x15,0x73,0x00,0x1f, 'd', 'e', 'c', 'x', 'l', 'd', 'v', 'a',0x02,0x00,0x01,0x00,0xcc,0xa4,0x63,0x09,0xe2,0x10,0x00,0x0a,0x00,0x02,0x02, 'd', 'e', 'c', 'x', 'l', 'a',0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+	0x00, 0x01, 0x04, 0x13, 0x26, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x43, 0x63,
+	0x22, 0x01, 0x29, 0x15, 0x73, 0x00, 0x1f,  'd',  'e',  'c',  'x',  'l',
+	 'd',  'v',  'a', 0x02, 0x00, 0x01, 0x00, 0xcc, 0xa4, 0x63, 0x09, 0xe2,
+	0x10, 0x00, 0x0a, 0x00, 0x02, 0x02,  'd',  'e',  'c',  'x',  'l',  'a',
+	0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00,
 };
 #endif
 
@@ -140,17 +144,18 @@
 
 	if (saaread(SAA7146_I2C_STATUS) & 0x3c)
 		I2CWipe(saa);
-	for (i = 0; i < 1000 &&
-	     (saaread(SAA7146_I2C_STATUS) & SAA7146_I2C_BUSY); i++)
+	for (i = 0;
+		i < 1000 && (saaread(SAA7146_I2C_STATUS) & SAA7146_I2C_BUSY);
+		i++)
 		schedule();
 	if (i == 1000)
 		I2CWipe(saa);
 	if (dosub)
 		saawrite(((addr & 0xfe) << 24) | (((addr | 1) & 0xff) << 8) |
-		  ((subaddr & 0xff) << 16) | 0xed, SAA7146_I2C_TRANSFER);
+			((subaddr & 0xff) << 16) | 0xed, SAA7146_I2C_TRANSFER);
 	else
 		saawrite(((addr & 0xfe) << 24) | (((addr | 1) & 0xff) << 16) |
-			 0xf1, SAA7146_I2C_TRANSFER);
+			0xf1, SAA7146_I2C_TRANSFER);
 	saawrite((SAA7146_MC2_UPLD_I2C << 16) |
 		 SAA7146_MC2_UPLD_I2C, SAA7146_MC2);
 	/* wait for i2c registers to be programmed */
@@ -163,7 +168,7 @@
 		schedule();
 	if (saaread(SAA7146_I2C_STATUS) & SAA7146_I2C_ERR)
 		return -1;
-	if (i == 1000) 
+	if (i == 1000)
 		printk("i2c setup read timeout\n");
 	saawrite(0x41, SAA7146_I2C_TRANSFER);
 	saawrite((SAA7146_MC2_UPLD_I2C << 16) |
@@ -178,7 +183,7 @@
 		schedule();
 	if (saaread(SAA7146_I2C_TRANSFER) & SAA7146_I2C_ERR)
 		return -1;
-	if (i == 1000) 
+	if (i == 1000)
 		printk("i2c read timeout\n");
 	return ((saaread(SAA7146_I2C_TRANSFER) >> 24) & 0xff);
 }
@@ -213,20 +218,22 @@
 {
 	int i;
 
-	DEBUG(printk(KERN_DEBUG "stradis%d: i2c: device found=%02x\n", saa->nr, id));
-	if (id == 0xa0)	{ /* we have rev2 or later board, fill in info */
+	DEBUG(printk(KERN_DEBUG "stradis%d: i2c: device found=%02x\n", saa->nr,
+		id));
+	if (id == 0xa0) {	/* we have rev2 or later board, fill in info */
 		for (i = 0; i < 64; i++)
 			saa->boardcfg[i] = I2CRead(saa, 0xa0, i, 1);
 #ifdef USE_RESCUE_EEPROM_SDM275
 		if (saa->boardcfg[0] != 0) {
-			printk("stradis%d: WARNING: EEPROM STORED VALUES HAVE BEEN IGNORED\n", saa->nr);
+			printk("stradis%d: WARNING: EEPROM STORED VALUES HAVE "
+				"BEEN IGNORED\n", saa->nr);
 			for (i = 0; i < 64; i++)
 				saa->boardcfg[i] = rescue_eeprom[i];
 		}
 #endif
 		printk("stradis%d: config =", saa->nr);
 		for (i = 0; i < 51; i++) {
-			printk(" %02x",saa->boardcfg[i]);
+			printk(" %02x", saa->boardcfg[i]);
 		}
 		printk("\n");
 	}
@@ -254,17 +261,19 @@
 	for (i = 0; i < 500000 &&
 	     (saaread(SAA7146_PSR) & SAA7146_PSR_DEBI_S); i++)
 		saaread(SAA7146_MC2);
+
 	if (i > debiwait_maxwait)
 		printk("wait-for-debi-done maxwait: %d\n",
 			debiwait_maxwait = i);
-	
+
 	if (i == 500000)
 		return -1;
+
 	return 0;
 }
 
 static int debiwrite(struct saa7146 *saa, u32 config, int addr,
-		      u32 val, int count)
+	u32 val, int count)
 {
 	u32 cmd;
 	if (count <= 0 || count > 32764)
@@ -309,41 +318,6 @@
 	return result;
 }
 
-#if 0 /* unused */
-/* MUST be a multiple of 8 bytes and 8-byte aligned and < 32768 bytes */
-/* data copied into saa->dmadebi buffer, caller must re-enable interrupts */
-static void ibm_block_dram_read(struct saa7146 *saa, int address, int bytes)
-{
-	int i, j;
-	u32 *buf;
-	buf = (u32 *) saa->dmadebi;
-	if (bytes > 0x7000)
-		bytes = 0x7000;
-	saawrite(0, SAA7146_IER);	/* disable interrupts */
-	for (i=0; i < 10000 &&
-		(debiread(saa, debNormal, IBM_MP2_DRAM_CMD_STAT, 2)
-		& 0x8000); i++)
-		saaread(SAA7146_MC2);
-	if (i == 10000)
-		printk(KERN_ERR "stradis%d: dram_busy never cleared\n",
-			saa->nr);
-	debiwrite(saa, debNormal, IBM_MP2_SRC_ADDR, (address<<16) |
-		(address>>16), 4);
-	debiwrite(saa, debNormal, IBM_MP2_BLOCK_SIZE, bytes, 2);
-	debiwrite(saa, debNormal, IBM_MP2_CMD_STAT, 0x8a10, 2);
-	for (j = 0; j < bytes/4; j++) {
-		for (i = 0; i < 10000 &&
-			(!(debiread(saa, debNormal, IBM_MP2_DRAM_CMD_STAT, 2)
-			& 0x4000)); i++)
-			saaread(SAA7146_MC2);
-		if (i == 10000)
-			printk(KERN_ERR "stradis%d: dram_ready never set\n",
-				saa->nr);
-		buf[j] = debiread(saa, debNormal, IBM_MP2_DRAM_DATA, 4);
-	}
-}
-#endif /* unused */
-
 static void do_irq_send_data(struct saa7146 *saa)
 {
 	int split, audbytes, vidbytes;
@@ -365,16 +339,15 @@
 		return;
 	}
 	/* if at least 1 block audio waiting and audio fifo isn't full */
-	if (audbytes >= 2048 && (debiread(saa, debNormal,
-		IBM_MP2_AUD_FIFO, 2) & 0xff) < 60) {
+	if (audbytes >= 2048 && (debiread(saa, debNormal, IBM_MP2_AUD_FIFO, 2)
+			& 0xff) < 60) {
 		if (saa->audhead > saa->audtail)
 			split = 65536 - saa->audhead;
 		else
 			split = 0;
 		audbytes = 2048;
 		if (split > 0 && split < 2048) {
-			memcpy(saa->dmadebi, saa->audbuf + saa->audhead,
-				split);
+			memcpy(saa->dmadebi, saa->audbuf + saa->audhead, split);
 			saa->audhead = 0;
 			audbytes -= split;
 		} else
@@ -383,20 +356,19 @@
 			audbytes);
 		saa->audhead += audbytes;
 		saa->audhead &= 0xffff;
-		debiwrite(saa, debAudio, (NewCard? IBM_MP2_AUD_FIFO :
-			  IBM_MP2_AUD_FIFOW), 0, 2048);
+		debiwrite(saa, debAudio, (NewCard ? IBM_MP2_AUD_FIFO :
+			IBM_MP2_AUD_FIFOW), 0, 2048);
 		wake_up_interruptible(&saa->audq);
-	/* if at least 1 block video waiting and video fifo isn't full */
+		/* if at least 1 block video waiting and video fifo isn't full */
 	} else if (vidbytes >= 30720 && (debiread(saa, debNormal,
-		IBM_MP2_FIFO, 2)) < 16384) {
+						  IBM_MP2_FIFO, 2)) < 16384) {
 		if (saa->vidhead > saa->vidtail)
 			split = 524288 - saa->vidhead;
 		else
 			split = 0;
 		vidbytes = 30720;
 		if (split > 0 && split < 30720) {
-			memcpy(saa->dmadebi, saa->vidbuf + saa->vidhead,
-				split);
+			memcpy(saa->dmadebi, saa->vidbuf + saa->vidhead, split);
 			saa->vidhead = 0;
 			vidbytes -= split;
 		} else
@@ -406,7 +378,7 @@
 		saa->vidhead += vidbytes;
 		saa->vidhead &= 0x7ffff;
 		debiwrite(saa, debVideo, (NewCard ? IBM_MP2_FIFO :
-			  IBM_MP2_FIFOW), 0, 30720);
+					  IBM_MP2_FIFOW), 0, 30720);
 		wake_up_interruptible(&saa->vidq);
 	}
 	saawrite(SAA7146_PSR_DEBI_S | SAA7146_PSR_PIN1, SAA7146_IER);
@@ -418,10 +390,10 @@
 	if (size > 30720)
 		size = 30720;
 	/* ensure some multiple of 8 bytes is transferred */
-	size = 8 * ((size + 8)>>3);
+	size = 8 * ((size + 8) >> 3);
 	if (size) {
 		debiwrite(saa, debNormal, IBM_MP2_OSD_ADDR,
-			  (saa->osdhead>>3), 2);
+			  (saa->osdhead >> 3), 2);
 		memcpy(saa->dmadebi, &saa->osdbuf[saa->osdhead], size);
 		saa->osdhead += size;
 		/* block transfer of next 8 bytes to ~32k bytes */
@@ -435,7 +407,7 @@
 
 static irqreturn_t saa7146_irq(int irq, void *dev_id, struct pt_regs *regs)
 {
-	struct saa7146 *saa = (struct saa7146 *) dev_id;
+	struct saa7146 *saa = dev_id;
 	u32 stat, astat;
 	int count;
 	int handled = 0;
@@ -484,7 +456,7 @@
 				saa->vidinfo.v_size = 480;
 #if 0
 				if (saa->endmarkhead != saa->endmarktail) {
-					saa->audhead = 
+					saa->audhead =
 						saa->endmark[saa->endmarkhead];
 					saa->endmarkhead++;
 					if (saa->endmarkhead >= MAX_MARKS)
@@ -494,7 +466,7 @@
 			}
 			if (istat & 0x4000) {	/* Sequence Error Code */
 				if (saa->endmarkhead != saa->endmarktail) {
-					saa->audhead = 
+					saa->audhead =
 						saa->endmark[saa->endmarkhead];
 					saa->endmarkhead++;
 					if (saa->endmarkhead >= MAX_MARKS)
@@ -613,7 +585,7 @@
 	int i;
 
 	if (chain)
-		debiwrite(saa, debNormal, IBM_MP2_COMMAND, (command << 1) | 1, 2);
+		debiwrite(saa, debNormal, IBM_MP2_COMMAND, (command << 1)| 1,2);
 	else
 		debiwrite(saa, debNormal, IBM_MP2_COMMAND, command << 1, 2);
 	debiwrite(saa, debNormal, IBM_MP2_CMD_DATA, data, 2);
@@ -663,11 +635,9 @@
 	else
 		sequence = mode8420con;
 	for (i = 0; i < INIT8420LEN; i++)
-		I2CWrite(saa, 0x20, init8420[i * 2],
-			 init8420[i * 2 + 1], 2);
+		I2CWrite(saa, 0x20, init8420[i * 2], init8420[i * 2 + 1], 2);
 	for (i = 0; i < MODE8420LEN; i++)
-		I2CWrite(saa, 0x20, sequence[i * 2],
-			 sequence[i * 2 + 1], 2);
+		I2CWrite(saa, 0x20, sequence[i * 2], sequence[i * 2 + 1], 2);
 	printk("stradis%d: CS8420 initialized\n", saa->nr);
 }
 
@@ -683,35 +653,36 @@
 	/* initialize PAL/NTSC video encoder */
 	for (i = 0; i < INIT7121LEN; i++) {
 		if (NewCard) {	/* handle new card encoder differences */
-			if (sequence[i*2] == 0x3a)
+			if (sequence[i * 2] == 0x3a)
 				I2CWrite(saa, 0x88, 0x3a, 0x13, 2);
-			else if (sequence[i*2] == 0x6b)
+			else if (sequence[i * 2] == 0x6b)
 				I2CWrite(saa, 0x88, 0x6b, 0x20, 2);
-			else if (sequence[i*2] == 0x6c)
+			else if (sequence[i * 2] == 0x6c)
 				I2CWrite(saa, 0x88, 0x6c,
 					 dopal ? 0x09 : 0xf5, 2);
-			else if (sequence[i*2] == 0x6d)
+			else if (sequence[i * 2] == 0x6d)
 				I2CWrite(saa, 0x88, 0x6d,
 					 dopal ? 0x20 : 0x00, 2);
-			else if (sequence[i*2] == 0x7a)
+			else if (sequence[i * 2] == 0x7a)
 				I2CWrite(saa, 0x88, 0x7a,
 					 dopal ? (PALFirstActive - 1) :
 					 (NTSCFirstActive - 4), 2);
-			else if (sequence[i*2] == 0x7b)
+			else if (sequence[i * 2] == 0x7b)
 				I2CWrite(saa, 0x88, 0x7b,
 					 dopal ? PALLastActive :
 					 NTSCLastActive, 2);
-			else I2CWrite(saa, 0x88, sequence[i * 2],
-				 sequence[i * 2 + 1], 2);
+			else
+				I2CWrite(saa, 0x88, sequence[i * 2],
+					 sequence[i * 2 + 1], 2);
 		} else {
-			if (sequence[i*2] == 0x6b && mod)
-				I2CWrite(saa, 0x88, 0x6b, 
-					(sequence[i * 2 + 1] ^ 0x09), 2);
-			else if (sequence[i*2] == 0x7a)
+			if (sequence[i * 2] == 0x6b && mod)
+				I2CWrite(saa, 0x88, 0x6b,
+					 (sequence[i * 2 + 1] ^ 0x09), 2);
+			else if (sequence[i * 2] == 0x7a)
 				I2CWrite(saa, 0x88, 0x7a,
 					 dopal ? (PALFirstActive - 1) :
 					 (NTSCFirstActive - 4), 2);
-			else if (sequence[i*2] == 0x7b)
+			else if (sequence[i * 2] == 0x7b)
 				I2CWrite(saa, 0x88, 0x7b,
 					 dopal ? PALLastActive :
 					 NTSCLastActive, 2);
@@ -735,7 +706,8 @@
 	nCode = noffset + 0x100;
 	if (nCode == 1)
 		nCode = 0x401;
-	else if (nCode < 1) nCode = 0x400 + PixelsPerLine + nCode;
+	else if (nCode < 1)
+		nCode = 0x400 + PixelsPerLine + nCode;
 	debiwrite(saa, debNormal, XILINX_GLDELAY, nCode, 2);
 }
 
@@ -745,33 +717,31 @@
 	saa->boardcfg[2] = mode;
 	/* do not adjust analog video parameters here, use saa7121 init */
 	/* you will affect the SDI output on the new card */
-	if (mode == VIDEO_MODE_PAL) {		/* PAL */
+	if (mode == VIDEO_MODE_PAL) {	/* PAL */
 		debiwrite(saa, debNormal, XILINX_CTL0, 0x0808, 2);
 		mdelay(50);
 		saawrite(0x012002c0, SAA7146_NUM_LINE_BYTE1);
 		if (NewCard) {
-			debiwrite(saa, debNormal, IBM_MP2_DISP_MODE,
-				  0xe100, 2);
+			debiwrite(saa, debNormal, IBM_MP2_DISP_MODE, 0xe100, 2);
 			mdelay(50);
 		}
 		debiwrite(saa, debNormal, IBM_MP2_DISP_MODE,
-			  NewCard ? 0xe500: 0x6500, 2);
+			  NewCard ? 0xe500 : 0x6500, 2);
 		debiwrite(saa, debNormal, IBM_MP2_DISP_DLY,
 			  (1 << 8) |
-			  (NewCard ? PALFirstActive : PALFirstActive-6), 2);
+			  (NewCard ? PALFirstActive : PALFirstActive - 6), 2);
 	} else {		/* NTSC */
 		debiwrite(saa, debNormal, XILINX_CTL0, 0x0800, 2);
 		mdelay(50);
 		saawrite(0x00f002c0, SAA7146_NUM_LINE_BYTE1);
 		debiwrite(saa, debNormal, IBM_MP2_DISP_MODE,
-			  NewCard ? 0xe100: 0x6100, 2);
+			  NewCard ? 0xe100 : 0x6100, 2);
 		debiwrite(saa, debNormal, IBM_MP2_DISP_DLY,
 			  (1 << 8) |
-			  (NewCard ? NTSCFirstActive : NTSCFirstActive-6), 2);
+			  (NewCard ? NTSCFirstActive : NTSCFirstActive - 6), 2);
 	}
 }
 
-
 /* Intialize bitmangler to map from a byte value to the mangled word that
  * must be output to program the Xilinx part through the DEBI port.
  * Xilinx Data Bit->DEBI Bit: 0->15 1->7 2->6 3->12 4->11 5->2 6->1 7->0
@@ -799,43 +769,41 @@
 	for (num = 0; num < saa_num; num++) {
 		saa = &saa7146s[num];
 		if (saa->boardcfg[0] > 20)
-				continue;	/* card was programmed */
+			continue;	/* card was programmed */
 		loadtwo = (saa->boardcfg[18] & 0x10);
 		if (!NewCard)	/* we have an old board */
 			for (i = 0; i < 256; i++)
-			    bitmangler[i] = ((i & 0x01) << 15) |
-				((i & 0x02) << 6) | ((i & 0x04) << 4) |
-				((i & 0x08) << 9) | ((i & 0x10) << 7) |
-				((i & 0x20) >> 3) | ((i & 0x40) >> 5) |
-				((i & 0x80) >> 7);
-		else	/* else we have a new board */
+				bitmangler[i] = ((i & 0x01) << 15) |
+					((i & 0x02) << 6) | ((i & 0x04) << 4) |
+					((i & 0x08) << 9) | ((i & 0x10) << 7) |
+					((i & 0x20) >> 3) | ((i & 0x40) >> 5) |
+					((i & 0x80) >> 7);
+		else		/* else we have a new board */
 			for (i = 0; i < 256; i++)
-			    bitmangler[i] = ((i & 0x01) << 7) |
-				((i & 0x02) << 5) | ((i & 0x04) << 3) |
-				((i & 0x08) << 1) | ((i & 0x10) >> 1) |
-				((i & 0x20) >> 3) | ((i & 0x40) >> 5) |
-				((i & 0x80) >> 7);
+				bitmangler[i] = ((i & 0x01) << 7) |
+					((i & 0x02) << 5) | ((i & 0x04) << 3) |
+					((i & 0x08) << 1) | ((i & 0x10) >> 1) |
+					((i & 0x20) >> 3) | ((i & 0x40) >> 5) |
+					((i & 0x80) >> 7);
 
 		dmabuf = (u16 *) saa->dmadebi;
 		newdma = (u8 *) saa->dmadebi;
 		if (NewCard) {	/* SDM2xxx */
 			if (!strncmp(bitdata->loadwhat, "decoder2", 8))
 				continue;	/* fpga not for this card */
-			if (!strncmp(&saa->boardcfg[42],
-				     bitdata->loadwhat, 8)) {
+			if (!strncmp(&saa->boardcfg[42], bitdata->loadwhat, 8))
 				loadfile = 1;
-			} else if (loadtwo && !strncmp(&saa->boardcfg[19],
-				   bitdata->loadwhat, 8)) {
+			else if (loadtwo && !strncmp(&saa->boardcfg[19],
+				       bitdata->loadwhat, 8))
 				loadfile = 2;
-			} else if (!saa->boardcfg[42] &&	/* special */
-				   !strncmp("decxl", bitdata->loadwhat, 8)) {
-				loadfile = 1;
-			} else
+			else if (!saa->boardcfg[42] && !strncmp("decxl",
+					bitdata->loadwhat, 8))
+				loadfile = 1;	/* special */
+			else
 				continue;	/* fpga not for this card */
-			if (loadfile != 1 && loadfile != 2) {
+			if (loadfile != 1 && loadfile != 2)
 				continue;	/* skip to next card */
-			}
-			if (saa->boardcfg[0] && loadfile == 1 )
+			if (saa->boardcfg[0] && loadfile == 1)
 				continue;	/* skip to next card */
 			if (saa->boardcfg[0] != 1 && loadfile == 2)
 				continue;	/* skip to next card */
@@ -870,8 +838,9 @@
 		/* Release Xilinx INIT signal (WS2) */
 		saawrite(0x00000000, SAA7146_GPIO_CTRL);
 		/* Wait for the INIT to go High */
-		for (i = 0; i < 10000 &&
-		     !(saaread(SAA7146_PSR) & SAA7146_PSR_PIN2); i++)
+		for (i = 0;
+			i < 10000 && !(saaread(SAA7146_PSR) & SAA7146_PSR_PIN2);
+			i++)
 			schedule();
 		if (i == 1000) {
 			printk(KERN_INFO "stradis%d: no fpga INIT\n", saa->nr);
@@ -881,17 +850,13 @@
 		if (NewCard) {
 			for (i = startindex; i < bitdata->datasize; i++)
 				newdma[i - startindex] =
-					bitmangler[bitdata->data[i]];
+				    bitmangler[bitdata->data[i]];
 			debiwrite(saa, 0x01420000, 0, 0,
 				((bitdata->datasize - startindex) + 5));
-			if (loadtwo) {
-				if (loadfile == 1) {
-					printk("stradis%d: "
-						"awaiting 2nd FPGA bitfile\n",
-						saa->nr);
-					continue;	/* skip to next card */
-				}
-
+			if (loadtwo && loadfile == 1) {
+				printk("stradis%d: awaiting 2nd FPGA bitfile\n",
+				       saa->nr);
+				continue;	/* skip to next card */
 			}
 		} else {
 			for (i = startindex; i < bitdata->datasize; i++)
@@ -900,8 +865,9 @@
 			debiwrite(saa, 0x014a0000, 0, 0,
 				((bitdata->datasize - startindex) + 5) * 2);
 		}
-		for (i = 0; i < 1000 &&
-		     !(saaread(SAA7146_PSR) & SAA7146_PSR_PIN2); i++)
+		for (i = 0;
+			i < 1000 && !(saaread(SAA7146_PSR) & SAA7146_PSR_PIN2);
+			i++)
 			schedule();
 		if (i == 1000) {
 			printk(KERN_INFO "stradis%d: FPGA load failed\n",
@@ -925,14 +891,14 @@
 			/* mute CS3310 */
 			if (HaveCS3310)
 				debiwrite(saa, debNormal, XILINX_CS3310_CMPLT,
-					  0, 2);
+					0, 2);
 			/* set VXCO to PWM mode, release reset, blank on */
 			debiwrite(saa, debNormal, XILINX_CTL0, 0xffc4, 2);
 			mdelay(10);
 			/* unmute CS3310 */
 			if (HaveCS3310)
 				debiwrite(saa, debNormal, XILINX_CTL0,
-					  0x2020, 2);
+					0x2020, 2);
 		}
 		/* set source Black */
 		debiwrite(saa, debNormal, XILINX_CTL0, 0x1707, 2);
@@ -958,10 +924,10 @@
 			/* we must init CS8420 first since rev b pulls i2s */
 			/* master clock low and CS4341 needs i2s master to */
 			/* run the i2c port. */
-			if (HaveCS8420) {
+			if (HaveCS8420)
 				/* 0=consumer, 1=pro */
 				initialize_cs8420(saa, 0);
-			}
+
 			mdelay(5);
 			if (HaveCS4341)
 				initialize_cs4341(saa);
@@ -981,6 +947,7 @@
 		debiwrite(saa, debNormal, XILINX_CTL0, 0x8080, 2);
 #endif
 	}
+
 	return failure;
 }
 
@@ -1021,10 +988,10 @@
 		/* we must init CS8420 first since rev b pulls i2s */
 		/* master clock low and CS4341 needs i2s master to */
 		/* run the i2c port. */
-		if (HaveCS8420) {
+		if (HaveCS8420)
 			/* 0=consumer, 1=pro */
 			initialize_cs8420(saa, 1);
-		}
+
 		mdelay(5);
 		if (HaveCS4341)
 			initialize_cs4341(saa);
@@ -1039,12 +1006,12 @@
 	debiwrite(saa, debNormal, IBM_MP2_OSD_SIZE, 0x2000, 2);
 	debiwrite(saa, debNormal, IBM_MP2_AUD_CTL, 0x4552, 2);
 	if (ibm_send_command(saa, IBM_MP2_CONFIG_DECODER,
-		(ChipControl == 0x43 ? 0xe800 : 0xe000), 1)) {
+			(ChipControl == 0x43 ? 0xe800 : 0xe000), 1)) {
 		printk(KERN_ERR "stradis%d: IBM config failed\n", saa->nr);
 	}
 	if (HaveCS3310) {
 		int i = CS3310MaxLvl;
-		debiwrite(saa, debNormal, XILINX_CS3310_CMPLT, ((i<<8)|i), 2);
+		debiwrite(saa, debNormal, XILINX_CS3310_CMPLT, ((i << 8)| i),2);
 	}
 	/* start video decoder */
 	debiwrite(saa, debNormal, IBM_MP2_CHIP_CONTROL, ChipControl, 2);
@@ -1057,6 +1024,7 @@
 	/* clear pending interrupts */
 	debiread(saa, debNormal, IBM_MP2_HOST_INT, 2);
 	debiwrite(saa, debNormal, XILINX_CTL0, 0x1711, 2);
+
 	return 0;
 }
 
@@ -1070,8 +1038,8 @@
 		saa = &saa7146s[num];
 		/* check that FPGA is loaded */
 		debiwrite(saa, debNormal, IBM_MP2_OSD_SIZE, 0xa55a, 2);
-		if ((i = debiread(saa, debNormal, IBM_MP2_OSD_SIZE, 2)) !=
-		     0xa55a) {
+		i = debiread(saa, debNormal, IBM_MP2_OSD_SIZE, 2);
+		if (i != 0xa55a) {
 			printk(KERN_INFO "stradis%d: %04x != 0xa55a\n",
 				saa->nr, i);
 #if 0
@@ -1082,17 +1050,17 @@
 			if (saa->boardcfg[0] > 27)
 				continue;	/* skip to next card */
 			/* load video control store */
-			saa->boardcfg[1] = 0x13;  /* no-sync default */
+			saa->boardcfg[1] = 0x13;	/* no-sync default */
 			debiwrite(saa, debNormal, IBM_MP2_WR_PROT, 1, 2);
 			debiwrite(saa, debNormal, IBM_MP2_PROC_IADDR, 0, 2);
 			for (i = 0; i < microcode->datasize / 2; i++)
 				debiwrite(saa, debNormal, IBM_MP2_PROC_IDATA,
 					(microcode->data[i * 2] << 8) |
-					 microcode->data[i * 2 + 1], 2);
+					microcode->data[i * 2 + 1], 2);
 			debiwrite(saa, debNormal, IBM_MP2_PROC_IADDR, 0, 2);
 			debiwrite(saa, debNormal, IBM_MP2_WR_PROT, 0, 2);
 			debiwrite(saa, debNormal, IBM_MP2_CHIP_CONTROL,
-				  ChipControl, 2);
+				ChipControl, 2);
 			saa->boardcfg[0] = 28;
 		}
 		if (!strncmp(microcode->loadwhat, "decoder.aud", 11)) {
@@ -1109,34 +1077,32 @@
 			debiwrite(saa, debNormal, IBM_MP2_OSD_SIZE, 0x2000, 2);
 			debiwrite(saa, debNormal, IBM_MP2_AUD_CTL, 0x4552, 2);
 			if (ibm_send_command(saa, IBM_MP2_CONFIG_DECODER,
-			    0xe000, 1)) {
-				printk(KERN_ERR
-				       "stradis%d: IBM config failed\n",
-				       saa->nr);
+					0xe000, 1)) {
+				printk(KERN_ERR "stradis%d: IBM config "
+					"failed\n", saa->nr);
 				return -1;
 			}
 			/* set PWM to center value */
 			if (NewCard) {
 				debiwrite(saa, debNormal, XILINX_PWM,
-					  saa->boardcfg[14] +
-					  (saa->boardcfg[13]<<8), 2);
+					saa->boardcfg[14] +
+					(saa->boardcfg[13] << 8), 2);
 			} else
-				debiwrite(saa, debNormal, XILINX_PWM,
-					  0x46, 2);
+				debiwrite(saa, debNormal, XILINX_PWM, 0x46, 2);
+
 			if (HaveCS3310) {
 				i = CS3310MaxLvl;
-				debiwrite(saa, debNormal,
-					XILINX_CS3310_CMPLT, ((i<<8)|i), 2);
+				debiwrite(saa, debNormal, XILINX_CS3310_CMPLT,
+					(i << 8) | i, 2);
 			}
-			printk(KERN_INFO
-			       "stradis%d: IBM MPEGCD%d Initialized\n",
-			       saa->nr, 18 + (debiread(saa, debNormal,
-			       IBM_MP2_CHIP_CONTROL, 2) >> 12));
+			printk(KERN_INFO "stradis%d: IBM MPEGCD%d Inited\n",
+				saa->nr, 18 + (debiread(saa, debNormal,
+				IBM_MP2_CHIP_CONTROL, 2) >> 12));
 			/* start video decoder */
 			debiwrite(saa, debNormal, IBM_MP2_CHIP_CONTROL,
 				ChipControl, 2);
-			debiwrite(saa, debNormal, IBM_MP2_RB_THRESHOLD,
-				0x4037, 2);	/* 256k vid, 3520 bytes aud */
+			debiwrite(saa, debNormal, IBM_MP2_RB_THRESHOLD, 0x4037,
+				2);	/* 256k vid, 3520 bytes aud */
 			debiwrite(saa, debNormal, IBM_MP2_AUD_CTL, 0x4573, 2);
 			ibm_send_command(saa, IBM_MP2_PLAY, 0, 0);
 			/* enable buffer threshold irq */
@@ -1149,52 +1115,48 @@
 			saa->boardcfg[0] = 37;
 		}
 	}
+
 	return 0;
 }
 
-static u32 palette2fmt[] =
-{				/* some of these YUV translations are wrong */
-  0xffffffff, 0x86000000, 0x87000000, 0x80000000, 0x8100000, 0x82000000,
-  0x83000000, 0x00000000, 0x03000000, 0x03000000, 0x0a00000, 0x03000000,
-  0x06000000, 0x00000000, 0x03000000, 0x0a000000, 0x0300000
+static u32 palette2fmt[] = {	/* some of these YUV translations are wrong */
+	0xffffffff, 0x86000000, 0x87000000, 0x80000000, 0x8100000, 0x82000000,
+	0x83000000, 0x00000000, 0x03000000, 0x03000000, 0x0a00000, 0x03000000,
+	0x06000000, 0x00000000, 0x03000000, 0x0a000000, 0x0300000
 };
-static int bpp2fmt[4] =
-{
+static int bpp2fmt[4] = {
 	VIDEO_PALETTE_HI240, VIDEO_PALETTE_RGB565, VIDEO_PALETTE_RGB24,
 	VIDEO_PALETTE_RGB32
 };
 
 /* I wish I could find a formula to calculate these... */
-static u32 h_prescale[64] =
-{
-  0x10000000, 0x18040202, 0x18080000, 0x380c0606, 0x38100204, 0x38140808,
-  0x38180000, 0x381c0000, 0x3820161c, 0x38242a3b, 0x38281230, 0x382c4460,
-  0x38301040, 0x38340080, 0x38380000, 0x383c0000, 0x3840fefe, 0x3844ee9f,
-  0x3848ee9f, 0x384cee9f, 0x3850ee9f, 0x38542a3b, 0x38581230, 0x385c0000,
-  0x38600000, 0x38640000, 0x38680000, 0x386c0000, 0x38700000, 0x38740000,
-  0x38780000, 0x387c0000, 0x30800000, 0x38840000, 0x38880000, 0x388c0000,
-  0x38900000, 0x38940000, 0x38980000, 0x389c0000, 0x38a00000, 0x38a40000,
-  0x38a80000, 0x38ac0000, 0x38b00000, 0x38b40000, 0x38b80000, 0x38bc0000,
-  0x38c00000, 0x38c40000, 0x38c80000, 0x38cc0000, 0x38d00000, 0x38d40000,
-  0x38d80000, 0x38dc0000, 0x38e00000, 0x38e40000, 0x38e80000, 0x38ec0000,
-  0x38f00000, 0x38f40000, 0x38f80000, 0x38fc0000,
+static u32 h_prescale[64] = {
+	0x10000000, 0x18040202, 0x18080000, 0x380c0606, 0x38100204, 0x38140808,
+	0x38180000, 0x381c0000, 0x3820161c, 0x38242a3b, 0x38281230, 0x382c4460,
+	0x38301040, 0x38340080, 0x38380000, 0x383c0000, 0x3840fefe, 0x3844ee9f,
+	0x3848ee9f, 0x384cee9f, 0x3850ee9f, 0x38542a3b, 0x38581230, 0x385c0000,
+	0x38600000, 0x38640000, 0x38680000, 0x386c0000, 0x38700000, 0x38740000,
+	0x38780000, 0x387c0000, 0x30800000, 0x38840000, 0x38880000, 0x388c0000,
+	0x38900000, 0x38940000, 0x38980000, 0x389c0000, 0x38a00000, 0x38a40000,
+	0x38a80000, 0x38ac0000, 0x38b00000, 0x38b40000, 0x38b80000, 0x38bc0000,
+	0x38c00000, 0x38c40000, 0x38c80000, 0x38cc0000, 0x38d00000, 0x38d40000,
+	0x38d80000, 0x38dc0000, 0x38e00000, 0x38e40000, 0x38e80000, 0x38ec0000,
+	0x38f00000, 0x38f40000, 0x38f80000, 0x38fc0000,
 };
-static u32 v_gain[64] =
-{
-  0x016000ff, 0x016100ff, 0x016100ff, 0x016200ff, 0x016200ff, 0x016200ff,
-  0x016200ff, 0x016300ff, 0x016300ff, 0x016300ff, 0x016300ff, 0x016300ff,
-  0x016300ff, 0x016300ff, 0x016300ff, 0x016400ff, 0x016400ff, 0x016400ff,
-  0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
-  0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
-  0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
-  0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
-  0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
-  0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
-  0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
-  0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
+static u32 v_gain[64] = {
+	0x016000ff, 0x016100ff, 0x016100ff, 0x016200ff, 0x016200ff, 0x016200ff,
+	0x016200ff, 0x016300ff, 0x016300ff, 0x016300ff, 0x016300ff, 0x016300ff,
+	0x016300ff, 0x016300ff, 0x016300ff, 0x016400ff, 0x016400ff, 0x016400ff,
+	0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
+	0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
+	0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
+	0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
+	0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
+	0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
+	0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
+	0x016400ff, 0x016400ff, 0x016400ff, 0x016400ff,
 };
 
-
 static void saa7146_set_winsize(struct saa7146 *saa)
 {
 	u32 format;
@@ -1209,24 +1171,23 @@
 	saawrite(saa->win.vidadr + saa->win.bpl * saa->win.sheight,
 		 SAA7146_PROT_ADDR1);
 	saawrite(0, SAA7146_PAGE1);
-	saawrite(format|0x60, SAA7146_CLIP_FORMAT_CTRL);
+	saawrite(format | 0x60, SAA7146_CLIP_FORMAT_CTRL);
 	offset = (704 / (saa->win.width - 1)) & 0x3f;
 	saawrite(h_prescale[offset], SAA7146_HPS_H_PRESCALE);
 	offset = (720896 / saa->win.width) / (offset + 1);
-	saawrite((offset<<12)|0x0c, SAA7146_HPS_H_SCALE);
+	saawrite((offset << 12) | 0x0c, SAA7146_HPS_H_SCALE);
 	if (CurrentMode == VIDEO_MODE_NTSC) {
-		yacl = /*(480 / saa->win.height - 1) & 0x3f*/ 0;
+		yacl = /*(480 / saa->win.height - 1) & 0x3f */ 0;
 		ysci = 1024 - (saa->win.height * 1024 / 480);
 	} else {
-		yacl = /*(576 / saa->win.height - 1) & 0x3f*/ 0;
+		yacl = /*(576 / saa->win.height - 1) & 0x3f */ 0;
 		ysci = 1024 - (saa->win.height * 1024 / 576);
 	}
-	saawrite((1<<31)|(ysci<<21)|(yacl<<15), SAA7146_HPS_V_SCALE);
+	saawrite((1 << 31) | (ysci << 21) | (yacl << 15), SAA7146_HPS_V_SCALE);
 	saawrite(v_gain[yacl], SAA7146_HPS_V_GAIN);
 	saawrite(((SAA7146_MC2_UPLD_DMA1 | SAA7146_MC2_UPLD_HPS_V |
-		   SAA7146_MC2_UPLD_HPS_H) << 16) | (SAA7146_MC2_UPLD_DMA1 |
-		   SAA7146_MC2_UPLD_HPS_V | SAA7146_MC2_UPLD_HPS_H),
-		   SAA7146_MC2);
+		SAA7146_MC2_UPLD_HPS_H) << 16) | (SAA7146_MC2_UPLD_DMA1 |
+		SAA7146_MC2_UPLD_HPS_V | SAA7146_MC2_UPLD_HPS_H), SAA7146_MC2);
 }
 
 /* clip_draw_rectangle(cm,x,y,w,h) -- handle clipping an area
@@ -1261,8 +1222,8 @@
 	startword = (x >> 5);
 	endword = ((x + w) >> 5);
 	bitsleft = (0xffffffff >> (x & 31));
-	bitsright = (0xffffffff << (~((x + w) - (endword<<5))));
-	temp = &clipmap[(y<<5) + startword];
+	bitsright = (0xffffffff << (~((x + w) - (endword << 5))));
+	temp = &clipmap[(y << 5) + startword];
 	w = endword - startword;
 	if (!w) {
 		bitsleft |= bitsright;
@@ -1287,13 +1248,13 @@
 	u32 *clipmap;
 
 	clipmap = saa->dmavid2;
-	if((width=saa->win.width)>1023)
-		width = 1023;		/* sanity check */
-	if((height=saa->win.height)>640)
-		height = 639;		/* sanity check */
-	if (ncr > 0) {	/* rectangles pased */
+	if ((width = saa->win.width) > 1023)
+		width = 1023;	/* sanity check */
+	if ((height = saa->win.height) > 640)
+		height = 639;	/* sanity check */
+	if (ncr > 0) {		/* rectangles pased */
 		/* convert rectangular clips to a bitmap */
-		memset(clipmap, 0, VIDEO_CLIPMAP_SIZE); /* clear map */
+		memset(clipmap, 0, VIDEO_CLIPMAP_SIZE);	/* clear map */
 		for (i = 0; i < ncr; i++)
 			clip_draw_rectangle(clipmap, cr[i].x, cr[i].y,
 				cr[i].width, cr[i].height);
@@ -1301,14 +1262,15 @@
 	/* clip against viewing window AND screen 
 	   so we do not have to rely on the user program
 	 */
-	clip_draw_rectangle(clipmap,(saa->win.x+width>saa->win.swidth) ?
-		(saa->win.swidth-saa->win.x) : width, 0, 1024, 768);
-	clip_draw_rectangle(clipmap,0,(saa->win.y+height>saa->win.sheight) ?
-		(saa->win.sheight-saa->win.y) : height,1024,768);
-	if (saa->win.x<0)
-		clip_draw_rectangle(clipmap, 0, 0, -(saa->win.x), 768);
-	if (saa->win.y<0)
-		clip_draw_rectangle(clipmap, 0, 0, 1024, -(saa->win.y));
+	clip_draw_rectangle(clipmap, (saa->win.x + width > saa->win.swidth) ?
+		(saa->win.swidth - saa->win.x) : width, 0, 1024, 768);
+	clip_draw_rectangle(clipmap, 0,
+		(saa->win.y + height > saa->win.sheight) ?
+		(saa->win.sheight - saa->win.y) : height, 1024, 768);
+	if (saa->win.x < 0)
+		clip_draw_rectangle(clipmap, 0, 0, -saa->win.x, 768);
+	if (saa->win.y < 0)
+		clip_draw_rectangle(clipmap, 0, 0, 1024, -saa->win.y);
 }
 
 static int saa_ioctl(struct inode *inode, struct file *file,
@@ -1322,11 +1284,9 @@
 		{
 			struct video_capability b;
 			strcpy(b.name, saa->video_dev.name);
-			b.type = VID_TYPE_CAPTURE |
-			    VID_TYPE_OVERLAY |
-			    VID_TYPE_CLIPPING |
-			    VID_TYPE_FRAMERAM |
-			    VID_TYPE_SCALES;
+			b.type = VID_TYPE_CAPTURE | VID_TYPE_OVERLAY |
+				VID_TYPE_CLIPPING | VID_TYPE_FRAMERAM |
+				VID_TYPE_SCALES;
 			b.channels = 1;
 			b.audios = 1;
 			b.maxwidth = 768;
@@ -1363,17 +1323,18 @@
 			if (p.palette < sizeof(palette2fmt) / sizeof(u32)) {
 				format = palette2fmt[p.palette];
 				saa->win.color_fmt = format;
-				saawrite(format|0x60, SAA7146_CLIP_FORMAT_CTRL);
+				saawrite(format | 0x60,
+					SAA7146_CLIP_FORMAT_CTRL);
 			}
 			saawrite(((p.brightness & 0xff00) << 16) |
-				 ((p.contrast & 0xfe00) << 7) |
-			     ((p.colour & 0xfe00) >> 9), SAA7146_BCS_CTRL);
+				((p.contrast & 0xfe00) << 7) |
+				((p.colour & 0xfe00) >> 9), SAA7146_BCS_CTRL);
 			saa->picture = p;
 			/* upload changed registers */
 			saawrite(((SAA7146_MC2_UPLD_HPS_H |
-				 SAA7146_MC2_UPLD_HPS_V) << 16) |
-				SAA7146_MC2_UPLD_HPS_H | SAA7146_MC2_UPLD_HPS_V,
-				 SAA7146_MC2);
+				SAA7146_MC2_UPLD_HPS_V) << 16) |
+				SAA7146_MC2_UPLD_HPS_H |
+				SAA7146_MC2_UPLD_HPS_V, SAA7146_MC2);
 			return 0;
 		}
 	case VIDIOCSWIN:
@@ -1384,11 +1345,14 @@
 			if (copy_from_user(&vw, arg, sizeof(vw)))
 				return -EFAULT;
 
-			if (vw.flags || vw.width < 16 || vw.height < 16) {	/* stop capture */
-				saawrite((SAA7146_MC1_TR_E_1 << 16), SAA7146_MC1);
+			/* stop capture */
+			if (vw.flags || vw.width < 16 || vw.height < 16) {
+				saawrite((SAA7146_MC1_TR_E_1 << 16),
+					SAA7146_MC1);
 				return -EINVAL;
 			}
-			if (saa->win.bpp < 4) {		/* 32-bit align start and adjust width */
+			/* 32-bit align start and adjust width */
+			if (saa->win.bpp < 4) {
 				int i = vw.x;
 				vw.x = (vw.x + 3) & ~3;
 				i = vw.x - i;
@@ -1417,23 +1381,24 @@
 			 */
 			if (vw.clipcount < 0) {
 				if (copy_from_user(saa->dmavid2, vw.clips,
-						   VIDEO_CLIPMAP_SIZE))
+						VIDEO_CLIPMAP_SIZE))
 					return -EFAULT;
-			}
-			else if (vw.clipcount > 16384) {
+			} else if (vw.clipcount > 16384) {
 				return -EINVAL;
 			} else if (vw.clipcount > 0) {
-				if ((vcp = vmalloc(sizeof(struct video_clip) *
-					        (vw.clipcount))) == NULL)
-					 return -ENOMEM;
+				vcp = vmalloc(sizeof(struct video_clip) *
+					vw.clipcount);
+				if (vcp == NULL)
+					return -ENOMEM;
 				if (copy_from_user(vcp, vw.clips,
-					      sizeof(struct video_clip) *
-						   vw.clipcount)) {
+						sizeof(struct video_clip) *
+						vw.clipcount)) {
 					vfree(vcp);
 					return -EFAULT;
 				}
 			} else	/* nothing clipped */
 				memset(saa->dmavid2, 0, VIDEO_CLIPMAP_SIZE);
+
 			make_clip_tab(saa, vcp, vw.clipcount);
 			if (vw.clipcount > 0)
 				vfree(vcp);
@@ -1466,21 +1431,21 @@
 			if (v == 0) {
 				saa->cap &= ~1;
 				saawrite((SAA7146_MC1_TR_E_1 << 16),
-					 SAA7146_MC1);
+					SAA7146_MC1);
 			} else {
 				if (saa->win.vidadr == 0 || saa->win.width == 0
-				    || saa->win.height == 0)
+						|| saa->win.height == 0)
 					return -EINVAL;
 				saa->cap |= 1;
 				saawrite((SAA7146_MC1_TR_E_1 << 16) | 0xffff,
-					 SAA7146_MC1);
+					SAA7146_MC1);
 			}
 			return 0;
 		}
 	case VIDIOCGFBUF:
 		{
 			struct video_buffer v;
-			v.base = (void *) saa->win.vidadr;
+			v.base = (void *)saa->win.vidadr;
 			v.height = saa->win.sheight;
 			v.width = saa->win.swidth;
 			v.depth = saa->win.depth;
@@ -1498,19 +1463,20 @@
 			if (copy_from_user(&v, arg, sizeof(v)))
 				return -EFAULT;
 			if (v.depth != 8 && v.depth != 15 && v.depth != 16 &&
-			v.depth != 24 && v.depth != 32 && v.width > 16 &&
+			    v.depth != 24 && v.depth != 32 && v.width > 16 &&
 			    v.height > 16 && v.bytesperline > 16)
 				return -EINVAL;
 			if (v.base)
-				saa->win.vidadr = (unsigned long) v.base;
+				saa->win.vidadr = (unsigned long)v.base;
 			saa->win.sheight = v.height;
 			saa->win.swidth = v.width;
 			saa->win.bpp = ((v.depth + 7) & 0x38) / 8;
 			saa->win.depth = v.depth;
 			saa->win.bpl = v.bytesperline;
 
-			DEBUG(printk("Display at %p is %d by %d, bytedepth %d, bpl %d\n",
-				     v.base, v.width, v.height, saa->win.bpp, saa->win.bpl));
+			DEBUG(printk("Display at %p is %d by %d, bytedepth %d, "
+					"bpl %d\n", v.base, v.width, v.height,
+					saa->win.bpp, saa->win.bpl));
 			saa7146_set_winsize(saa);
 			return 0;
 		}
@@ -1538,21 +1504,18 @@
 			int i;
 			if (copy_from_user(&v, arg, sizeof(v)))
 				return -EFAULT;
-			i = (~(v.volume>>8))&0xff;
+			i = (~(v.volume >> 8)) & 0xff;
 			if (!HaveCS4341) {
-				if (v.flags & VIDEO_AUDIO_MUTE) {
+				if (v.flags & VIDEO_AUDIO_MUTE)
 					debiwrite(saa, debNormal,
-						IBM_MP2_FRNT_ATTEN,
-						0xffff, 2);
-				}
+						IBM_MP2_FRNT_ATTEN, 0xffff, 2);
 				if (!(v.flags & VIDEO_AUDIO_MUTE))
 					debiwrite(saa, debNormal,
-						IBM_MP2_FRNT_ATTEN,
-						  0x0000, 2);
+						IBM_MP2_FRNT_ATTEN, 0x0000, 2);
 				if (v.flags & VIDEO_AUDIO_VOLUME)
 					debiwrite(saa, debNormal,
 						IBM_MP2_FRNT_ATTEN,
-						(i<<8)|i, 2);
+						(i << 8) | i, 2);
 			} else {
 				if (v.flags & VIDEO_AUDIO_MUTE)
 					cs4341_setlevel(saa, 0xff, 0xff);
@@ -1580,163 +1543,138 @@
 	case VIDIOCSPLAYMODE:
 		{
 			struct video_play_mode pmode;
-			if (copy_from_user((void *) &pmode, arg,
-				sizeof(struct video_play_mode)))
+			if (copy_from_user((void *)&pmode, arg,
+					sizeof(struct video_play_mode)))
 				return -EFAULT;
 			switch (pmode.mode) {
-				case VID_PLAY_VID_OUT_MODE:
-					if (pmode.p1 != VIDEO_MODE_NTSC &&
+			case VID_PLAY_VID_OUT_MODE:
+				if (pmode.p1 != VIDEO_MODE_NTSC &&
 						pmode.p1 != VIDEO_MODE_PAL)
+					return -EINVAL;
+				set_out_format(saa, pmode.p1);
+				return 0;
+			case VID_PLAY_GENLOCK:
+				debiwrite(saa, debNormal, XILINX_CTL0,
+					pmode.p1 ? 0x8000 : 0x8080, 2);
+				if (NewCard)
+					set_genlock_offset(saa, pmode.p2);
+				return 0;
+			case VID_PLAY_NORMAL:
+				debiwrite(saa, debNormal,
+					IBM_MP2_CHIP_CONTROL, ChipControl, 2);
+				ibm_send_command(saa, IBM_MP2_PLAY, 0, 0);
+				saa->playmode = pmode.mode;
+				return 0;
+			case VID_PLAY_PAUSE:
+				/* IBM removed the PAUSE command */
+				/* they say use SINGLE_FRAME now */
+			case VID_PLAY_SINGLE_FRAME:
+				ibm_send_command(saa, IBM_MP2_SINGLE_FRAME,0,0);
+				if (saa->playmode == pmode.mode) {
+					debiwrite(saa, debNormal,
+						IBM_MP2_CHIP_CONTROL,
+						ChipControl, 2);
+				}
+				saa->playmode = pmode.mode;
+				return 0;
+			case VID_PLAY_FAST_FORWARD:
+				ibm_send_command(saa, IBM_MP2_FAST_FORWARD,0,0);
+				saa->playmode = pmode.mode;
+				return 0;
+			case VID_PLAY_SLOW_MOTION:
+				ibm_send_command(saa, IBM_MP2_SLOW_MOTION,
+					pmode.p1, 0);
+				saa->playmode = pmode.mode;
+				return 0;
+			case VID_PLAY_IMMEDIATE_NORMAL:
+				/* ensure transfers resume */
+				debiwrite(saa, debNormal,
+					IBM_MP2_CHIP_CONTROL, ChipControl, 2);
+				ibm_send_command(saa, IBM_MP2_IMED_NORM_PLAY,
+					0, 0);
+				saa->playmode = VID_PLAY_NORMAL;
+				return 0;
+			case VID_PLAY_SWITCH_CHANNELS:
+				saa->audhead = saa->audtail = 0;
+				saa->vidhead = saa->vidtail = 0;
+				ibm_send_command(saa, IBM_MP2_FREEZE_FRAME,0,1);
+				ibm_send_command(saa, IBM_MP2_RESET_AUD_RATE,
+					0, 1);
+				debiwrite(saa, debNormal, IBM_MP2_CHIP_CONTROL,
+					0, 2);
+				ibm_send_command(saa, IBM_MP2_CHANNEL_SWITCH,
+					0, 1);
+				debiwrite(saa, debNormal, IBM_MP2_CHIP_CONTROL,
+					ChipControl, 2);
+				ibm_send_command(saa, IBM_MP2_PLAY, 0, 0);
+				saa->playmode = VID_PLAY_NORMAL;
+				return 0;
+			case VID_PLAY_FREEZE_FRAME:
+				ibm_send_command(saa, IBM_MP2_FREEZE_FRAME,0,0);
+				saa->playmode = pmode.mode;
+				return 0;
+			case VID_PLAY_STILL_MODE:
+				ibm_send_command(saa, IBM_MP2_SET_STILL_MODE,
+					0, 0);
+				saa->playmode = pmode.mode;
+				return 0;
+			case VID_PLAY_MASTER_MODE:
+				if (pmode.p1 == VID_PLAY_MASTER_NONE)
+					saa->boardcfg[1] = 0x13;
+				else if (pmode.p1 == VID_PLAY_MASTER_VIDEO)
+					saa->boardcfg[1] = 0x23;
+				else if (pmode.p1 == VID_PLAY_MASTER_AUDIO)
+					saa->boardcfg[1] = 0x43;
+				else
+					return -EINVAL;
+				debiwrite(saa, debNormal,
+					  IBM_MP2_CHIP_CONTROL, ChipControl, 2);
+				return 0;
+			case VID_PLAY_ACTIVE_SCANLINES:
+				if (CurrentMode == VIDEO_MODE_PAL) {
+					if (pmode.p1 < 1 || pmode.p2 > 625)
 						return -EINVAL;
-					set_out_format(saa, pmode.p1);
-					return 0;
-				case VID_PLAY_GENLOCK:
-					debiwrite(saa, debNormal,
-						  XILINX_CTL0,
-						  (pmode.p1 ? 0x8000 : 0x8080),
-						  2);
-					if (NewCard)
-						set_genlock_offset(saa,
-							pmode.p2);
-					return 0;
-				case VID_PLAY_NORMAL:
-					debiwrite(saa, debNormal,
-						IBM_MP2_CHIP_CONTROL,
-						ChipControl, 2);
-					ibm_send_command(saa,
-						IBM_MP2_PLAY, 0, 0);
-					saa->playmode = pmode.mode;
-					return 0;
-				case VID_PLAY_PAUSE:
-					/* IBM removed the PAUSE command */
-					/* they say use SINGLE_FRAME now */
-				case VID_PLAY_SINGLE_FRAME:
-					ibm_send_command(saa,
-							IBM_MP2_SINGLE_FRAME,
-							0, 0);
-					if (saa->playmode == pmode.mode) {
-						debiwrite(saa, debNormal,
-							IBM_MP2_CHIP_CONTROL,
-							ChipControl, 2);
-					}
-					saa->playmode = pmode.mode;
-					return 0;
-				case VID_PLAY_FAST_FORWARD:
-					ibm_send_command(saa,
-						IBM_MP2_FAST_FORWARD, 0, 0);
-					saa->playmode = pmode.mode;
-					return 0;
-				case VID_PLAY_SLOW_MOTION:
-					ibm_send_command(saa,
-						IBM_MP2_SLOW_MOTION,
-						pmode.p1, 0);
-					saa->playmode = pmode.mode;
-					return 0;
-				case VID_PLAY_IMMEDIATE_NORMAL:
-					/* ensure transfers resume */
-					debiwrite(saa, debNormal,
-						IBM_MP2_CHIP_CONTROL,
-						ChipControl, 2);
-					ibm_send_command(saa,
-						IBM_MP2_IMED_NORM_PLAY, 0, 0);
-					saa->playmode = VID_PLAY_NORMAL;
-					return 0;
-				case VID_PLAY_SWITCH_CHANNELS:
-					saa->audhead = saa->audtail = 0;
-					saa->vidhead = saa->vidtail = 0;
-					ibm_send_command(saa,
-						IBM_MP2_FREEZE_FRAME, 0, 1);
-					ibm_send_command(saa,
-						IBM_MP2_RESET_AUD_RATE, 0, 1);
-					debiwrite(saa, debNormal,
-						IBM_MP2_CHIP_CONTROL, 0, 2);
-					ibm_send_command(saa,
-						IBM_MP2_CHANNEL_SWITCH, 0, 1);
-					debiwrite(saa, debNormal,
-						IBM_MP2_CHIP_CONTROL,
-						ChipControl, 2);
-					ibm_send_command(saa,
-						IBM_MP2_PLAY, 0, 0);
-					saa->playmode = VID_PLAY_NORMAL;
-					return 0;
-				case VID_PLAY_FREEZE_FRAME:
-					ibm_send_command(saa,
-						IBM_MP2_FREEZE_FRAME, 0, 0);
-					saa->playmode = pmode.mode;
-					return 0;
-				case VID_PLAY_STILL_MODE:
-					ibm_send_command(saa,
-						IBM_MP2_SET_STILL_MODE, 0, 0);
-					saa->playmode = pmode.mode;
-					return 0;
-				case VID_PLAY_MASTER_MODE:
-					if (pmode.p1 == VID_PLAY_MASTER_NONE)
-						saa->boardcfg[1] = 0x13;
-					else if (pmode.p1 ==
-						VID_PLAY_MASTER_VIDEO)
-						saa->boardcfg[1] = 0x23;
-					else if (pmode.p1 ==
-						VID_PLAY_MASTER_AUDIO)
-						saa->boardcfg[1] = 0x43;
-					else
+					saa->boardcfg[5] = pmode.p1;
+					saa->boardcfg[55] = (pmode.p1 +
+						(pmode.p2 / 2) - 1) & 0xff;
+				} else {
+					if (pmode.p1 < 4 || pmode.p2 > 525)
 						return -EINVAL;
-					debiwrite(saa, debNormal,
-						IBM_MP2_CHIP_CONTROL,
-						ChipControl, 2);
-					return 0;
-				case VID_PLAY_ACTIVE_SCANLINES:
-					if (CurrentMode == VIDEO_MODE_PAL) {
-						if (pmode.p1 < 1 ||
-							pmode.p2 > 625)
-							return -EINVAL;
-						saa->boardcfg[5] = pmode.p1;
-						saa->boardcfg[55] = (pmode.p1 +
-							(pmode.p2/2) - 1) &	
-							0xff;
-					} else {
-						if (pmode.p1 < 4 ||
-							pmode.p2 > 525)
-							return -EINVAL;
-						saa->boardcfg[4] = pmode.p1;
-						saa->boardcfg[54] = (pmode.p1 +
-							(pmode.p2/2) - 4) &
-							0xff;
-					}
-					set_out_format(saa, CurrentMode);
-				case VID_PLAY_RESET:
-					return do_ibm_reset(saa);
-				case VID_PLAY_END_MARK:
-					if (saa->endmarktail <  
-						saa->endmarkhead) {
-						if (saa->endmarkhead -
+					saa->boardcfg[4] = pmode.p1;
+					saa->boardcfg[54] = (pmode.p1 +
+						(pmode.p2 / 2) - 4) & 0xff;
+				}
+				set_out_format(saa, CurrentMode);
+			case VID_PLAY_RESET:
+				return do_ibm_reset(saa);
+			case VID_PLAY_END_MARK:
+				if (saa->endmarktail < saa->endmarkhead) {
+					if (saa->endmarkhead -
 							saa->endmarktail < 2)
-							return -ENOSPC;
-					} else if (saa->endmarkhead <=
-						saa->endmarktail) {
-						if (saa->endmarktail -
-							saa->endmarkhead >
-							(MAX_MARKS - 2))
-							return -ENOSPC;
-					} else
 						return -ENOSPC;
-					saa->endmark[saa->endmarktail] =
-						saa->audtail;
-					saa->endmarktail++;
-					if (saa->endmarktail >= MAX_MARKS)
-						saa->endmarktail = 0;
+				} else if (saa->endmarkhead <=saa->endmarktail){
+					if (saa->endmarktail - saa->endmarkhead
+							> (MAX_MARKS - 2))
+						return -ENOSPC;
+				} else
+					return -ENOSPC;
+				saa->endmark[saa->endmarktail] = saa->audtail;
+				saa->endmarktail++;
+				if (saa->endmarktail >= MAX_MARKS)
+					saa->endmarktail = 0;
 			}
 			return -EINVAL;
 		}
 	case VIDIOCSWRITEMODE:
 		{
 			int mode;
-			if (copy_from_user((void *) &mode, arg, sizeof(int)))
-				 return -EFAULT;
+			if (copy_from_user((void *)&mode, arg, sizeof(int)))
+				return -EFAULT;
 			if (mode == VID_WRITE_MPEG_AUD ||
-			    mode == VID_WRITE_MPEG_VID ||
-			    mode == VID_WRITE_CC ||
-			    mode == VID_WRITE_TTX ||
-			    mode == VID_WRITE_OSD) {
+					mode == VID_WRITE_MPEG_VID ||
+					mode == VID_WRITE_CC ||
+					mode == VID_WRITE_TTX ||
+					mode == VID_WRITE_OSD) {
 				saa->writemode = mode;
 				return 0;
 			}
@@ -1750,7 +1688,7 @@
 			if (copy_from_user(&ucode, arg, sizeof(ucode)))
 				return -EFAULT;
 			if (ucode.datasize > 65536 || ucode.datasize < 1024 ||
-			    strncmp(ucode.loadwhat, "dec", 3))
+					strncmp(ucode.loadwhat, "dec", 3))
 				return -EINVAL;
 			if ((udata = vmalloc(ucode.datasize)) == NULL)
 				return -ENOMEM;
@@ -1759,8 +1697,8 @@
 				return -EFAULT;
 			}
 			ucode.data = udata;
-			if (!strncmp(ucode.loadwhat, "decoder.aud", 11)
-				|| !strncmp(ucode.loadwhat, "decoder.vid", 11))
+			if (!strncmp(ucode.loadwhat, "decoder.aud", 11) ||
+				!strncmp(ucode.loadwhat, "decoder.vid", 11))
 				i = initialize_ibmmpeg2(&ucode);
 			else
 				i = initialize_fpga(&ucode);
@@ -1805,14 +1743,14 @@
 	return -EINVAL;
 }
 
-static ssize_t saa_read(struct file *file, char __user *buf,
-			size_t count, loff_t *ppos)
+static ssize_t saa_read(struct file *file, char __user * buf,
+	size_t count, loff_t * ppos)
 {
 	return -EINVAL;
 }
 
-static ssize_t saa_write(struct file *file, const char __user *buf,
-			 size_t count, loff_t *ppos)
+static ssize_t saa_write(struct file *file, const char __user * buf,
+	size_t count, loff_t * ppos)
 {
 	struct saa7146 *saa = file->private_data;
 	unsigned long todo = count;
@@ -1823,20 +1761,22 @@
 		if (saa->writemode == VID_WRITE_MPEG_AUD) {
 			spin_lock_irqsave(&saa->lock, flags);
 			if (saa->audhead <= saa->audtail)
-				blocksize = 65536-(saa->audtail - saa->audhead);
+				blocksize = 65536 -
+					(saa->audtail - saa->audhead);
 			else
 				blocksize = saa->audhead - saa->audtail;
 			spin_unlock_irqrestore(&saa->lock, flags);
 			if (blocksize < 16384) {
 				saawrite(SAA7146_PSR_DEBI_S |
-					 SAA7146_PSR_PIN1, SAA7146_IER);
+					SAA7146_PSR_PIN1, SAA7146_IER);
 				saawrite(SAA7146_PSR_PIN1, SAA7146_PSR);
 				/* wait for buffer space to open */
 				interruptible_sleep_on(&saa->audq);
 			}
 			spin_lock_irqsave(&saa->lock, flags);
 			if (saa->audhead <= saa->audtail) {
-				blocksize = 65536-(saa->audtail - saa->audhead);
+				blocksize = 65536 -
+					(saa->audtail - saa->audhead);
 				split = 65536 - saa->audtail;
 			} else {
 				blocksize = saa->audhead - saa->audtail;
@@ -1851,7 +1791,7 @@
 				return -ENOSPC;
 			if (split < blocksize) {
 				if (copy_from_user(saa->audbuf +
-					saa->audtail, buf, split)) 
+						saa->audtail, buf, split))
 					return -EFAULT;
 				buf += split;
 				todo -= split;
@@ -1859,7 +1799,7 @@
 				saa->audtail = 0;
 			}
 			if (copy_from_user(saa->audbuf + saa->audtail, buf,
-				blocksize)) 
+					blocksize))
 				return -EFAULT;
 			saa->audtail += blocksize;
 			todo -= blocksize;
@@ -1868,20 +1808,22 @@
 		} else if (saa->writemode == VID_WRITE_MPEG_VID) {
 			spin_lock_irqsave(&saa->lock, flags);
 			if (saa->vidhead <= saa->vidtail)
-				blocksize=524288-(saa->vidtail - saa->vidhead);
+				blocksize = 524288 -
+					(saa->vidtail - saa->vidhead);
 			else
 				blocksize = saa->vidhead - saa->vidtail;
 			spin_unlock_irqrestore(&saa->lock, flags);
 			if (blocksize < 65536) {
 				saawrite(SAA7146_PSR_DEBI_S |
-					 SAA7146_PSR_PIN1, SAA7146_IER);
+					SAA7146_PSR_PIN1, SAA7146_IER);
 				saawrite(SAA7146_PSR_PIN1, SAA7146_PSR);
 				/* wait for buffer space to open */
 				interruptible_sleep_on(&saa->vidq);
 			}
 			spin_lock_irqsave(&saa->lock, flags);
 			if (saa->vidhead <= saa->vidtail) {
-				blocksize=524288-(saa->vidtail - saa->vidhead);
+				blocksize = 524288 -
+					(saa->vidtail - saa->vidhead);
 				split = 524288 - saa->vidtail;
 			} else {
 				blocksize = saa->vidhead - saa->vidtail;
@@ -1896,7 +1838,7 @@
 				return -ENOSPC;
 			if (split < blocksize) {
 				if (copy_from_user(saa->vidbuf +
-					saa->vidtail, buf, split)) 
+						saa->vidtail, buf, split))
 					return -EFAULT;
 				buf += split;
 				todo -= split;
@@ -1904,7 +1846,7 @@
 				saa->vidtail = 0;
 			}
 			if (copy_from_user(saa->vidbuf + saa->vidtail, buf,
-				blocksize)) 
+					blocksize))
 				return -EFAULT;
 			saa->vidtail += blocksize;
 			todo -= blocksize;
@@ -1922,8 +1864,8 @@
 			debiwrite(saa, debNormal, IBM_MP2_OSD_LINK_ADDR, 0, 2);
 			debiwrite(saa, debNormal, IBM_MP2_MASK0, 0xc00d, 2);
 			debiwrite(saa, debNormal, IBM_MP2_DISP_MODE,
-				  debiread(saa, debNormal,
-				  IBM_MP2_DISP_MODE, 2) | 1, 2);
+				debiread(saa, debNormal,
+					IBM_MP2_DISP_MODE, 2) | 1, 2);
 			/* trigger osd data transfer */
 			saawrite(SAA7146_PSR_DEBI_S |
 				 SAA7146_PSR_PIN1, SAA7146_IER);
@@ -1935,21 +1877,11 @@
 
 static int saa_open(struct inode *inode, struct file *file)
 {
-	struct saa7146 *saa = NULL;
-	unsigned int minor = iminor(inode);
-	int i;
+	struct video_device *vdev = video_devdata(file);
+	struct saa7146 *saa = container_of(vdev, struct saa7146, video_dev);
 
-	for (i = 0; i < SAA7146_MAX; i++) {
-		if (saa7146s[i].video_dev.minor == minor) {
-			saa = &saa7146s[i];
-		}
-	}
-	if (saa == NULL) {
-		return -ENODEV;
-	}
 	file->private_data = saa;
 
-	//saa->video_dev.busy = 0; /* old hack to support multiple open */
 	saa->user++;
 	if (saa->user > 1)
 		return 0;	/* device open already, don't reset */
@@ -1961,43 +1893,39 @@
 {
 	struct saa7146 *saa = file->private_data;
 	saa->user--;
-	//saa->video_dev.busy = 0; /* old hack to support multiple open */
+
 	if (saa->user > 0)	/* still someone using device */
 		return 0;
 	saawrite(0x007f0000, SAA7146_MC1);	/* stop all overlay dma */
 	return 0;
 }
 
-static struct file_operations saa_fops =
-{
-	.owner		= THIS_MODULE,
-	.open		= saa_open,
-	.release	= saa_release,
-	.ioctl		= saa_ioctl,
-	.compat_ioctl	= v4l_compat_ioctl32,
-	.read		= saa_read,
-	.llseek		= no_llseek,
-	.write		= saa_write,
-	.mmap		= saa_mmap,
+static struct file_operations saa_fops = {
+	.owner = THIS_MODULE,
+	.open = saa_open,
+	.release = saa_release,
+	.ioctl = saa_ioctl,
+	.compat_ioctl = v4l_compat_ioctl32,
+	.read = saa_read,
+	.llseek = no_llseek,
+	.write = saa_write,
+	.mmap = saa_mmap,
 };
 
 /* template for video_device-structure */
-static struct video_device saa_template =
-{
-	.name		= "SAA7146A",
-	.type		= VID_TYPE_CAPTURE | VID_TYPE_OVERLAY,
-	.hardware	= VID_HARDWARE_SAA7146,
-	.fops		= &saa_fops,
-	.minor		= -1,
+static struct video_device saa_template = {
+	.name = "SAA7146A",
+	.type = VID_TYPE_CAPTURE | VID_TYPE_OVERLAY,
+	.hardware = VID_HARDWARE_SAA7146,
+	.fops = &saa_fops,
+	.minor = -1,
 };
 
-static int configure_saa7146(struct pci_dev *dev, int num)
+static int __devinit configure_saa7146(struct pci_dev *pdev, int num)
 {
-	int result;
-	struct saa7146 *saa;
+	int retval;
+	struct saa7146 *saa = pci_get_drvdata(pdev);
 
-	saa = &saa7146s[num];
-	
 	saa->endmarkhead = saa->endmarktail = 0;
 	saa->win.x = saa->win.y = 0;
 	saa->win.width = saa->win.cropwidth = 720;
@@ -2013,7 +1941,6 @@
 	saa->picture.contrast = 38768;
 	saa->picture.colour = 32768;
 	saa->cap = 0;
-	saa->dev = dev;
 	saa->nr = num;
 	saa->playmode = VID_PLAY_NORMAL;
 	memset(saa->boardcfg, 0, 64);	/* clear board config area */
@@ -2033,45 +1960,59 @@
 	init_waitqueue_head(&saa->vidq);
 	spin_lock_init(&saa->lock);
 
-	if (pci_enable_device(dev))
-		return -EIO;
-	
-	saa->id = dev->device;
-	saa->irq = dev->irq;
+	retval = pci_enable_device(pdev);
+	if (retval) {
+		dev_err(&pdev->dev, "%d: pci_enable_device failed!\n", num);
+		goto err;
+	}
+
+	saa->id = pdev->device;
+	saa->irq = pdev->irq;
 	saa->video_dev.minor = -1;
-	saa->saa7146_adr = pci_resource_start(dev, 0);
-	pci_read_config_byte(dev, PCI_CLASS_REVISION, &saa->revision);
+	saa->saa7146_adr = pci_resource_start(pdev, 0);
+	pci_read_config_byte(pdev, PCI_CLASS_REVISION, &saa->revision);
 
 	saa->saa7146_mem = ioremap(saa->saa7146_adr, 0x200);
-	if (!saa->saa7146_mem)
-		return -EIO;
+	if (saa->saa7146_mem == NULL) {
+		dev_err(&pdev->dev, "%d: ioremap failed!\n", num);
+		retval = -EIO;
+		goto err;
+	}
 
 	memcpy(&saa->video_dev, &saa_template, sizeof(saa_template));
 	saawrite(0, SAA7146_IER);	/* turn off all interrupts */
-	result = request_irq(saa->irq, saa7146_irq,
-		       SA_SHIRQ | SA_INTERRUPT, "stradis", (void *) saa);
-	if (result == -EINVAL)
-		printk(KERN_ERR "stradis%d: Bad irq number or handler\n",
-		       num);
-	if (result == -EBUSY)
-		printk(KERN_ERR "stradis%d: IRQ %ld busy, change your PnP"
-		       " config in BIOS\n", num, saa->irq);
-	if (result < 0) {
-		iounmap(saa->saa7146_mem);
-		return result;
+
+	retval = request_irq(saa->irq, saa7146_irq, SA_SHIRQ | SA_INTERRUPT,
+		"stradis", saa);
+	if (retval == -EINVAL)
+		dev_err(&pdev->dev, "%d: Bad irq number or handler\n", num);
+	else if (retval == -EBUSY)
+		dev_err(&pdev->dev, "%d: IRQ %ld busy, change your PnP config "
+			"in BIOS\n", num, saa->irq);
+	if (retval < 0)
+		goto errio;
+
+	pci_set_master(pdev);
+	retval = video_register_device(&saa->video_dev, VFL_TYPE_GRABBER,
+		video_nr);
+	if (retval < 0) {
+		dev_err(&pdev->dev, "%d: error in registering video device!\n",
+			num);
+		goto errio;
 	}
-	pci_set_master(dev);
-	if (video_register_device(&saa->video_dev, VFL_TYPE_GRABBER, video_nr) < 0) {
-		iounmap(saa->saa7146_mem);
-		return -1;
-	}
+
 	return 0;
+errio:
+	iounmap(saa->saa7146_mem);
+err:
+	return retval;
 }
 
-static int init_saa7146(int i)
+static int __devinit init_saa7146(struct pci_dev *pdev)
 {
-	struct saa7146 *saa = &saa7146s[i];
+	struct saa7146 *saa = pci_get_drvdata(pdev);
 
+	memset(saa, 0, sizeof(*saa));
 	saa->user = 0;
 	/* reset the saa7146 */
 	saawrite(0xffff0000, SAA7146_MC1);
@@ -2089,23 +2030,23 @@
 	saawrite(0x00000000, SAA7146_DD1_STREAM_A);
 	saawrite(0x00000000, SAA7146_BRS_CTRL);
 	saawrite(0x80400040, SAA7146_BCS_CTRL);
-	saawrite(0x0000e000 /*| (1<<29)*/, SAA7146_HPS_CTRL);
+	saawrite(0x0000e000 /*| (1<<29) */ , SAA7146_HPS_CTRL);
 	saawrite(0x00000060, SAA7146_CLIP_FORMAT_CTRL);
 	saawrite(0x00000000, SAA7146_ACON1);
 	saawrite(0x00000000, SAA7146_ACON2);
 	saawrite(0x00000600, SAA7146_I2C_STATUS);
 	saawrite(((SAA7146_MC2_UPLD_D1_B | SAA7146_MC2_UPLD_D1_A |
-		   SAA7146_MC2_UPLD_BRS | SAA7146_MC2_UPLD_HPS_H |
-		   SAA7146_MC2_UPLD_HPS_V | SAA7146_MC2_UPLD_DMA2 |
-	   SAA7146_MC2_UPLD_DMA1 | SAA7146_MC2_UPLD_I2C) << 16) | 0xffff,
-		 SAA7146_MC2);
+		SAA7146_MC2_UPLD_BRS | SAA7146_MC2_UPLD_HPS_H |
+		SAA7146_MC2_UPLD_HPS_V | SAA7146_MC2_UPLD_DMA2 |
+		SAA7146_MC2_UPLD_DMA1 | SAA7146_MC2_UPLD_I2C) << 16) | 0xffff,
+		SAA7146_MC2);
 	/* setup arbitration control registers */
 	saawrite(0x1412121a, SAA7146_PCI_BT_V1);
 
 	/* allocate 32k dma buffer + 4k for page table */
 	if ((saa->dmadebi = kmalloc(32768 + 4096, GFP_KERNEL)) == NULL) {
-		printk(KERN_ERR "stradis%d: debi kmalloc failed\n", i);
-		return -1;
+		dev_err(&pdev->dev, "%d: debi kmalloc failed\n", saa->nr);
+		goto err;
 	}
 #if 0
 	saa->pagedebi = saa->dmadebi + 32768;	/* top 4k is for mmu */
@@ -2115,133 +2056,162 @@
 #endif
 	saa->audhead = saa->vidhead = saa->osdhead = 0;
 	saa->audtail = saa->vidtail = saa->osdtail = 0;
-	if (saa->vidbuf == NULL)
-		if ((saa->vidbuf = vmalloc(524288)) == NULL) {
-			printk(KERN_ERR "stradis%d: malloc failed\n", saa->nr);
-			return -ENOMEM;
-		}
-	if (saa->audbuf == NULL)
-		if ((saa->audbuf = vmalloc(65536)) == NULL) {
-			printk(KERN_ERR "stradis%d: malloc failed\n", saa->nr);
-			vfree(saa->vidbuf);
-			saa->vidbuf = NULL;
-			return -ENOMEM;
-		}
-	if (saa->osdbuf == NULL)
-		if ((saa->osdbuf = vmalloc(131072)) == NULL) {
-			printk(KERN_ERR "stradis%d: malloc failed\n", saa->nr);
-			vfree(saa->vidbuf);
-			vfree(saa->audbuf);
-			saa->vidbuf = saa->audbuf = NULL;
-			return -ENOMEM;
-		}
-	/* allocate 81920 byte buffer for clipping */
-	if ((saa->dmavid2 = kmalloc(VIDEO_CLIPMAP_SIZE, GFP_KERNEL)) == NULL) {
-		printk(KERN_ERR "stradis%d: clip kmalloc failed\n", saa->nr);
-		vfree(saa->vidbuf);
-		vfree(saa->audbuf);
-		vfree(saa->osdbuf);
-		saa->vidbuf = saa->audbuf = saa->osdbuf = NULL;
-		saa->dmavid2 = NULL;
-		return -1;
+	if (saa->vidbuf == NULL && (saa->vidbuf = vmalloc(524288)) == NULL) {
+		dev_err(&pdev->dev, "%d: malloc failed\n", saa->nr);
+		goto err;
 	}
-	memset(saa->dmavid2, 0x00, VIDEO_CLIPMAP_SIZE);	/* clip everything */
+	if (saa->audbuf == NULL && (saa->audbuf = vmalloc(65536)) == NULL) {
+		dev_err(&pdev->dev, "%d: malloc failed\n", saa->nr);
+		goto errvid;
+	}
+	if (saa->osdbuf == NULL && (saa->osdbuf = vmalloc(131072)) == NULL) {
+		dev_err(&pdev->dev, "%d: malloc failed\n", saa->nr);
+		goto erraud;
+	}
+	/* allocate 81920 byte buffer for clipping */
+	if ((saa->dmavid2 = kzalloc(VIDEO_CLIPMAP_SIZE, GFP_KERNEL)) == NULL) {
+		dev_err(&pdev->dev, "%d: clip kmalloc failed\n", saa->nr);
+		goto errosd;
+	}
 	/* setup clipping registers */
 	saawrite(virt_to_bus(saa->dmavid2), SAA7146_BASE_EVEN2);
 	saawrite(virt_to_bus(saa->dmavid2) + 128, SAA7146_BASE_ODD2);
 	saawrite(virt_to_bus(saa->dmavid2) + VIDEO_CLIPMAP_SIZE,
-		SAA7146_PROT_ADDR2);
+		 SAA7146_PROT_ADDR2);
 	saawrite(256, SAA7146_PITCH2);
-	saawrite(4, SAA7146_PAGE2); /* dma direction: read, no byteswap */
+	saawrite(4, SAA7146_PAGE2);	/* dma direction: read, no byteswap */
 	saawrite(((SAA7146_MC2_UPLD_DMA2) << 16) | SAA7146_MC2_UPLD_DMA2,
 		 SAA7146_MC2);
 	I2CBusScan(saa);
+
 	return 0;
+errosd:
+	vfree(saa->osdbuf);
+	saa->osdbuf = NULL;
+erraud:
+	vfree(saa->audbuf);
+	saa->audbuf = NULL;
+errvid:
+	vfree(saa->vidbuf);
+	saa->vidbuf = NULL;
+err:
+	return -ENOMEM;
 }
 
-static void release_saa(void)
+static void stradis_release_saa(struct pci_dev *pdev)
 {
 	u8 command;
-	int i;
-	struct saa7146 *saa;
+	struct saa7146 *saa = pci_get_drvdata(pdev);
 
-	for (i = 0; i < saa_num; i++) {
-		saa = &saa7146s[i];
+	/* turn off all capturing, DMA and IRQs */
+	saawrite(0xffff0000, SAA7146_MC1);	/* reset chip */
+	saawrite(0, SAA7146_MC2);
+	saawrite(0, SAA7146_IER);
+	saawrite(0xffffffffUL, SAA7146_ISR);
 
-		/* turn off all capturing, DMA and IRQs */
-		saawrite(0xffff0000, SAA7146_MC1);	/* reset chip */
-		saawrite(0, SAA7146_MC2);
-		saawrite(0, SAA7146_IER);
-		saawrite(0xffffffffUL, SAA7146_ISR);
+	/* disable PCI bus-mastering */
+	pci_read_config_byte(pdev, PCI_COMMAND, &command);
+	command &= ~PCI_COMMAND_MASTER;
+	pci_write_config_byte(pdev, PCI_COMMAND, command);
 
-		/* disable PCI bus-mastering */
-		pci_read_config_byte(saa->dev, PCI_COMMAND, &command);
-		command &= ~PCI_COMMAND_MASTER;
-		pci_write_config_byte(saa->dev, PCI_COMMAND, command);
-
-		/* unmap and free memory */
-		saa->audhead = saa->audtail = saa->osdhead = 0;
-		saa->vidhead = saa->vidtail = saa->osdtail = 0;
-		vfree(saa->vidbuf);
-		vfree(saa->audbuf);
-		vfree(saa->osdbuf);
-		kfree(saa->dmavid2);
-		saa->audbuf = saa->vidbuf = saa->osdbuf = NULL;
-		saa->dmavid2 = NULL;
-		kfree(saa->dmadebi);
-		kfree(saa->dmavid1);
-		kfree(saa->dmavid3);
-		kfree(saa->dmaa1in);
-		kfree(saa->dmaa1out);
-		kfree(saa->dmaa2in);
-		kfree(saa->dmaa2out);
-		kfree(saa->dmaRPS1);
-		kfree(saa->dmaRPS2);
-		free_irq(saa->irq, saa);
-		if (saa->saa7146_mem)
-			iounmap(saa->saa7146_mem);
-		if (saa->video_dev.minor != -1)
-			video_unregister_device(&saa->video_dev);
-	}
+	/* unmap and free memory */
+	saa->audhead = saa->audtail = saa->osdhead = 0;
+	saa->vidhead = saa->vidtail = saa->osdtail = 0;
+	vfree(saa->vidbuf);
+	vfree(saa->audbuf);
+	vfree(saa->osdbuf);
+	kfree(saa->dmavid2);
+	saa->audbuf = saa->vidbuf = saa->osdbuf = NULL;
+	saa->dmavid2 = NULL;
+	kfree(saa->dmadebi);
+	kfree(saa->dmavid1);
+	kfree(saa->dmavid3);
+	kfree(saa->dmaa1in);
+	kfree(saa->dmaa1out);
+	kfree(saa->dmaa2in);
+	kfree(saa->dmaa2out);
+	kfree(saa->dmaRPS1);
+	kfree(saa->dmaRPS2);
+	free_irq(saa->irq, saa);
+	if (saa->saa7146_mem)
+		iounmap(saa->saa7146_mem);
+	if (saa->video_dev.minor != -1)
+		video_unregister_device(&saa->video_dev);
 }
 
-
-static int __init stradis_init (void)
+static int __devinit stradis_probe(struct pci_dev *pdev,
+	const struct pci_device_id *ent)
 {
-	struct pci_dev *dev = NULL;
-	int result = 0, i;
+	int retval = -EINVAL;
+
+	if (saa_num >= SAA7146_MAX)
+		goto err;
+
+	if (!pdev->subsystem_vendor)
+		dev_info(&pdev->dev, "%d: rev1 decoder\n", saa_num);
+	else
+		dev_info(&pdev->dev, "%d: SDM2xx found\n", saa_num);
+
+	pci_set_drvdata(pdev, &saa7146s[saa_num]);
+
+	retval = configure_saa7146(pdev, saa_num);
+	if (retval) {
+		dev_err(&pdev->dev, "%d: error in configuring\n", saa_num);
+		goto err;
+	}
+
+	if (init_saa7146(pdev) < 0) {
+		dev_err(&pdev->dev, "%d: error in initialization\n", saa_num);
+		retval = -EIO;
+		goto errrel;
+	}
+
+	saa_num++;
+
+	return 0;
+errrel:
+	stradis_release_saa(pdev);
+err:
+	return retval;
+}
+
+static void __devexit stradis_remove(struct pci_dev *pdev)
+{
+	stradis_release_saa(pdev);
+}
+
+static struct pci_device_id stradis_pci_tbl[] = {
+	{ PCI_DEVICE(PCI_VENDOR_ID_PHILIPS, PCI_DEVICE_ID_PHILIPS_SAA7146) },
+	{ 0 }
+};
+
+MODULE_DEVICE_TABLE(pci, stradis_pci_tbl);
+
+static struct pci_driver stradis_driver = {
+	.name = "stradis",
+	.id_table = stradis_pci_tbl,
+	.probe = stradis_probe,
+	.remove = __devexit_p(stradis_remove)
+};
+
+int __init stradis_init(void)
+{
+	int retval;
 
 	saa_num = 0;
 
-	while ((dev = pci_find_device(PCI_VENDOR_ID_PHILIPS, PCI_DEVICE_ID_PHILIPS_SAA7146, dev))) {
-		if (!dev->subsystem_vendor)
-			printk(KERN_INFO "stradis%d: rev1 decoder\n", saa_num);
-		else
-			printk(KERN_INFO "stradis%d: SDM2xx found\n", saa_num); 
-		result = configure_saa7146(dev, saa_num++);
-		if (result)
-			return result;
-	}
-	if (saa_num)
-		printk(KERN_INFO "stradis: %d card(s) found.\n", saa_num);
-	else
-		return -EINVAL;
-	for (i = 0; i < saa_num; i++)
-		if (init_saa7146(i) < 0) {
-			release_saa();
-			return -EIO;
-		}
-	return 0;
+	retval = pci_register_driver(&stradis_driver);
+	if (retval)
+		printk(KERN_ERR "stradis: Unable to register pci driver.\n");
+
+	return retval;
 }
 
-
-static void __exit stradis_exit (void)
+void __exit stradis_exit(void)
 {
-	release_saa();
+	pci_unregister_driver(&stradis_driver);
 	printk(KERN_INFO "stradis: module cleanup complete\n");
 }
 
-
 module_init(stradis_init);
 module_exit(stradis_exit);
-
diff --git a/drivers/media/video/tda7432.c b/drivers/media/video/tda7432.c
index 99261f1..fc3d582 100644
--- a/drivers/media/video/tda7432.c
+++ b/drivers/media/video/tda7432.c
@@ -227,8 +227,8 @@
 static int tda7432_write(struct i2c_client *client, int subaddr, int val)
 {
 	unsigned char buffer[2];
-	v4l_dbg(2,client,"In tda7432_write\n");
-	v4l_dbg(1,client,"Writing %d 0x%x\n", subaddr, val);
+	v4l_dbg(2, debug,client,"In tda7432_write\n");
+	v4l_dbg(1, debug,client,"Writing %d 0x%x\n", subaddr, val);
 	buffer[0] = subaddr;
 	buffer[1] = val;
 	if (2 != i2c_master_send(client,buffer,2)) {
@@ -245,9 +245,9 @@
 {
 	struct tda7432 *t = i2c_get_clientdata(client);
 	unsigned char buf[16];
-	v4l_dbg(2,client,"In tda7432_set\n");
+	v4l_dbg(2, debug,client,"In tda7432_set\n");
 
-	v4l_dbg(1,client,
+	v4l_dbg(1, debug,client,
 		"tda7432: 7432_set(0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x)\n",
 		t->input,t->volume,t->bass,t->treble,t->lf,t->lr,t->rf,t->rr,t->loud);
 	buf[0]  = TDA7432_IN;
@@ -271,7 +271,7 @@
 static void do_tda7432_init(struct i2c_client *client)
 {
 	struct tda7432 *t = i2c_get_clientdata(client);
-	v4l_dbg(2,client,"In tda7432_init\n");
+	v4l_dbg(2, debug,client,"In tda7432_init\n");
 
 	t->input  = TDA7432_STEREO_IN |  /* Main (stereo) input   */
 		    TDA7432_BASS_SYM  |  /* Symmetric bass cut    */
@@ -300,10 +300,9 @@
 	struct tda7432 *t;
 	struct i2c_client *client;
 
-	t = kmalloc(sizeof *t,GFP_KERNEL);
+	t = kzalloc(sizeof *t,GFP_KERNEL);
 	if (!t)
 		return -ENOMEM;
-	memset(t,0,sizeof *t);
 
 	client = &t->c;
 	memcpy(client,&client_template,sizeof(struct i2c_client));
@@ -340,7 +339,7 @@
 			   unsigned int cmd, void *arg)
 {
 	struct tda7432 *t = i2c_get_clientdata(client);
-	v4l_dbg(2,client,"In tda7432_command\n");
+	v4l_dbg(2, debug,client,"In tda7432_command\n");
 	if (debug>1)
 		v4l_i2c_print_ioctl(client,cmd);
 
diff --git a/drivers/media/video/tda9875.c b/drivers/media/video/tda9875.c
index 299393b..ef98c49 100644
--- a/drivers/media/video/tda9875.c
+++ b/drivers/media/video/tda9875.c
@@ -232,10 +232,9 @@
 	struct i2c_client *client;
 	dprintk("In tda9875_attach\n");
 
-	t = kmalloc(sizeof *t,GFP_KERNEL);
+	t = kzalloc(sizeof *t,GFP_KERNEL);
 	if (!t)
 		return -ENOMEM;
-	memset(t,0,sizeof *t);
 
 	client = &t->c;
 	memcpy(client,&client_template,sizeof(struct i2c_client));
diff --git a/drivers/media/video/tda9887.c b/drivers/media/video/tda9887.c
index 9cf47dc..5815649 100644
--- a/drivers/media/video/tda9887.c
+++ b/drivers/media/video/tda9887.c
@@ -696,9 +696,8 @@
 	client_template.adapter = adap;
 	client_template.addr    = addr;
 
-	if (NULL == (t = kmalloc(sizeof(*t), GFP_KERNEL)))
+	if (NULL == (t = kzalloc(sizeof(*t), GFP_KERNEL)))
 		return -ENOMEM;
-	memset(t,0,sizeof(*t));
 
 	t->client      = client_template;
 	t->std         = 0;
diff --git a/drivers/media/video/tea5767.c b/drivers/media/video/tea5767.c
index 261b7a3..921fe72 100644
--- a/drivers/media/video/tea5767.c
+++ b/drivers/media/video/tea5767.c
@@ -18,7 +18,7 @@
 #define PREFIX "TEA5767 "
 
 /* from tuner-core.c */
-extern int debug;
+extern int tuner_debug;
 
 /*****************************************************************************/
 
@@ -249,7 +249,7 @@
 	if (5 != (rc = i2c_master_send(c, buffer, 5)))
 		tuner_warn("i2c i/o error: rc == %d (should be 5)\n", rc);
 
-	if (debug) {
+	if (tuner_debug) {
 		if (5 != (rc = i2c_master_recv(c, buffer, 5)))
 			tuner_warn("i2c i/o error: rc == %d (should be 5)\n", rc);
 		else
diff --git a/drivers/media/video/tea6420.c b/drivers/media/video/tea6420.c
index c4ba374..4dcba5a 100644
--- a/drivers/media/video/tea6420.c
+++ b/drivers/media/video/tea6420.c
@@ -99,11 +99,10 @@
 	}
 
 	/* allocate memory for client structure */
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (0 == client) {
 		return -ENOMEM;
 	}
-	memset(client, 0x0, sizeof(struct i2c_client));
 
 	/* fill client structure */
 	memcpy(client, &client_template, sizeof(struct i2c_client));
diff --git a/drivers/media/video/tuner-3036.c b/drivers/media/video/tuner-3036.c
index d97f668..c4a78e7 100644
--- a/drivers/media/video/tuner-3036.c
+++ b/drivers/media/video/tuner-3036.c
@@ -193,8 +193,7 @@
 static int __init
 tuner3036_init(void)
 {
-	i2c_add_driver(&i2c_driver_tuner);
-	return 0;
+	return i2c_add_driver(&i2c_driver_tuner);
 }
 
 static void __exit
diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c
index 57bc585..f30ef79 100644
--- a/drivers/media/video/tuner-core.c
+++ b/drivers/media/video/tuner-core.c
@@ -41,8 +41,8 @@
 static unsigned int show_i2c = 0;
 
 /* insmod options used at runtime => read/write */
-static unsigned int tuner_debug = 0;
-int debug = 0;
+static unsigned int tuner_debug_old = 0;
+int tuner_debug = 0;
 
 static unsigned int tv_range[2] = { 44, 958 };
 static unsigned int radio_range[2] = { 65, 108 };
@@ -51,13 +51,13 @@
 static char secam[] = "--";
 static char ntsc[] = "-";
 
+
 module_param(addr, int, 0444);
 module_param(no_autodetect, int, 0444);
 module_param(show_i2c, int, 0444);
 /* Note: tuner_debug is deprecated and will be removed in 2.6.17 */
-module_param(tuner_debug, int, 0444);
-module_param(debug, int, 0644);
-
+module_param_named(tuner_debug,tuner_debug_old, int, 0444);
+module_param_named(debug,tuner_debug, int, 0644);
 module_param_string(pal, pal, sizeof(pal), 0644);
 module_param_string(secam, secam, sizeof(secam), 0644);
 module_param_string(ntsc, ntsc, sizeof(ntsc), 0644);
@@ -410,18 +410,17 @@
 	client_template.adapter = adap;
 	client_template.addr = addr;
 
-	t = kmalloc(sizeof(struct tuner), GFP_KERNEL);
+	t = kzalloc(sizeof(struct tuner), GFP_KERNEL);
 	if (NULL == t)
 		return -ENOMEM;
-	memset(t, 0, sizeof(struct tuner));
 	memcpy(&t->i2c, &client_template, sizeof(struct i2c_client));
 	i2c_set_clientdata(&t->i2c, t);
 	t->type = UNSET;
 	t->radio_if2 = 10700 * 1000;	/* 10.7MHz - FM radio */
 	t->audmode = V4L2_TUNER_MODE_STEREO;
 	t->mode_mask = T_UNINITIALIZED;
-	if (tuner_debug) {
-		debug = tuner_debug;
+	if (tuner_debug_old) {
+		tuner_debug = tuner_debug_old;
 		printk(KERN_ERR "tuner: tuner_debug is deprecated and will be removed in 2.6.17.\n");
 		printk(KERN_ERR "tuner: use the debug option instead.\n");
 	}
@@ -552,7 +551,7 @@
 {
 	struct tuner *t = i2c_get_clientdata(client);
 
-	if (debug>1)
+	if (tuner_debug>1)
 		v4l_i2c_print_ioctl(&(t->i2c),cmd);
 
 	switch (cmd) {
diff --git a/drivers/media/video/tvaudio.c b/drivers/media/video/tvaudio.c
index b582943..6d03b9b 100644
--- a/drivers/media/video/tvaudio.c
+++ b/drivers/media/video/tvaudio.c
@@ -159,7 +159,7 @@
 	unsigned char buffer[2];
 
 	if (-1 == subaddr) {
-		v4l_dbg(1, &chip->c, "%s: chip_write: 0x%x\n",
+		v4l_dbg(1, debug, &chip->c, "%s: chip_write: 0x%x\n",
 			chip->c.name, val);
 		chip->shadow.bytes[1] = val;
 		buffer[0] = val;
@@ -169,7 +169,7 @@
 			return -1;
 		}
 	} else {
-		v4l_dbg(1, &chip->c, "%s: chip_write: reg%d=0x%x\n",
+		v4l_dbg(1, debug, &chip->c, "%s: chip_write: reg%d=0x%x\n",
 			chip->c.name, subaddr, val);
 		chip->shadow.bytes[subaddr+1] = val;
 		buffer[0] = subaddr;
@@ -204,7 +204,7 @@
 		chip->c.name);
 		return -1;
 	}
-	v4l_dbg(1, &chip->c, "%s: chip_read: 0x%x\n",chip->c.name, buffer);
+	v4l_dbg(1, debug, &chip->c, "%s: chip_read: 0x%x\n",chip->c.name, buffer);
 	return buffer;
 }
 
@@ -222,7 +222,7 @@
 		v4l_warn(&chip->c, "%s: I/O error (read2)\n", chip->c.name);
 		return -1;
 	}
-	v4l_dbg(1, &chip->c, "%s: chip_read2: reg%d=0x%x\n",
+	v4l_dbg(1, debug, &chip->c, "%s: chip_read2: reg%d=0x%x\n",
 		chip->c.name, subaddr,read[0]);
 	return read[0];
 }
@@ -235,7 +235,7 @@
 		return 0;
 
 	/* update our shadow register set; print bytes if (debug > 0) */
-	v4l_dbg(1, &chip->c, "%s: chip_cmd(%s): reg=%d, data:",
+	v4l_dbg(1, debug, &chip->c, "%s: chip_cmd(%s): reg=%d, data:",
 		chip->c.name, name,cmd->bytes[0]);
 	for (i = 1; i < cmd->count; i++) {
 		if (debug)
@@ -274,7 +274,7 @@
 
 	daemonize("%s", chip->c.name);
 	allow_signal(SIGTERM);
-	v4l_dbg(1, &chip->c, "%s: thread started\n", chip->c.name);
+	v4l_dbg(1, debug, &chip->c, "%s: thread started\n", chip->c.name);
 
 	for (;;) {
 		add_wait_queue(&chip->wq, &wait);
@@ -286,7 +286,7 @@
 		try_to_freeze();
 		if (chip->done || signal_pending(current))
 			break;
-		v4l_dbg(1, &chip->c, "%s: thread wakeup\n", chip->c.name);
+		v4l_dbg(1, debug, &chip->c, "%s: thread wakeup\n", chip->c.name);
 
 		/* don't do anything for radio or if mode != auto */
 		if (chip->radio || chip->mode != 0)
@@ -299,7 +299,7 @@
 		mod_timer(&chip->wt, jiffies+2*HZ);
 	}
 
-	v4l_dbg(1, &chip->c, "%s: thread exiting\n", chip->c.name);
+	v4l_dbg(1, debug, &chip->c, "%s: thread exiting\n", chip->c.name);
 	complete_and_exit(&chip->texit, 0);
 	return 0;
 }
@@ -312,7 +312,7 @@
 	if (mode == chip->prevmode)
 	return;
 
-	v4l_dbg(1, &chip->c, "%s: thread checkmode\n", chip->c.name);
+	v4l_dbg(1, debug, &chip->c, "%s: thread checkmode\n", chip->c.name);
 	chip->prevmode = mode;
 
 	if (mode & VIDEO_SOUND_STEREO)
@@ -359,7 +359,7 @@
 	if (val & TDA9840_ST_STEREO)
 		mode |= VIDEO_SOUND_STEREO;
 
-	v4l_dbg(1, &chip->c, "tda9840_getmode(): raw chip read: %d, return: %d\n",
+	v4l_dbg(1, debug, &chip->c, "tda9840_getmode(): raw chip read: %d, return: %d\n",
 		val, mode);
 	return mode;
 }
@@ -655,7 +655,7 @@
 		mode |= VIDEO_SOUND_STEREO;
 	if (val & TDA9873_DUAL)
 		mode |= VIDEO_SOUND_LANG1 | VIDEO_SOUND_LANG2;
-	v4l_dbg(1, &chip->c, "tda9873_getmode(): raw chip read: %d, return: %d\n",
+	v4l_dbg(1, debug, &chip->c, "tda9873_getmode(): raw chip read: %d, return: %d\n",
 		val, mode);
 	return mode;
 }
@@ -666,12 +666,12 @@
 	/*	int adj_data = chip->shadow.bytes[TDA9873_AD+1] ; */
 
 	if ((sw_data & TDA9873_INP_MASK) != TDA9873_INTERNAL) {
-		v4l_dbg(1, &chip->c, "tda9873_setmode(): external input\n");
+		v4l_dbg(1, debug, &chip->c, "tda9873_setmode(): external input\n");
 		return;
 	}
 
-	v4l_dbg(1, &chip->c, "tda9873_setmode(): chip->shadow.bytes[%d] = %d\n", TDA9873_SW+1, chip->shadow.bytes[TDA9873_SW+1]);
-	v4l_dbg(1, &chip->c, "tda9873_setmode(): sw_data  = %d\n", sw_data);
+	v4l_dbg(1, debug, &chip->c, "tda9873_setmode(): chip->shadow.bytes[%d] = %d\n", TDA9873_SW+1, chip->shadow.bytes[TDA9873_SW+1]);
+	v4l_dbg(1, debug, &chip->c, "tda9873_setmode(): sw_data  = %d\n", sw_data);
 
 	switch (mode) {
 	case VIDEO_SOUND_MONO:
@@ -692,7 +692,7 @@
 	}
 
 	chip_write(chip, TDA9873_SW, sw_data);
-	v4l_dbg(1, &chip->c, "tda9873_setmode(): req. mode %d; chip_write: %d\n",
+	v4l_dbg(1, debug, &chip->c, "tda9873_setmode(): req. mode %d; chip_write: %d\n",
 		mode, sw_data);
 }
 
@@ -831,7 +831,7 @@
 		chip_write(chip, TDA9874A_SDACOSR, (tda9874a_mode) ? 0x81:0x80);
 		chip_write(chip, TDA9874A_AOSR, 0x00); /* or 0x10 */
 	}
-	v4l_dbg(1, &chip->c, "tda9874a_setup(): %s [0x%02X].\n",
+	v4l_dbg(1, debug, &chip->c, "tda9874a_setup(): %s [0x%02X].\n",
 		tda9874a_modelist[tda9874a_STD].name,tda9874a_STD);
 	return 1;
 }
@@ -874,7 +874,7 @@
 			mode |= VIDEO_SOUND_LANG1 | VIDEO_SOUND_LANG2;
 	}
 
-	v4l_dbg(1, &chip->c, "tda9874a_getmode(): DSR=0x%X, NSR=0x%X, NECR=0x%X, return: %d.\n",
+	v4l_dbg(1, debug, &chip->c, "tda9874a_getmode(): DSR=0x%X, NSR=0x%X, NECR=0x%X, return: %d.\n",
 		 dsr, nsr, necr, mode);
 	return mode;
 }
@@ -920,7 +920,7 @@
 		chip_write(chip, TDA9874A_AOSR, aosr);
 		chip_write(chip, TDA9874A_MDACOSR, mdacosr);
 
-		v4l_dbg(1, &chip->c, "tda9874a_setmode(): req. mode %d; AOSR=0x%X, MDACOSR=0x%X.\n",
+		v4l_dbg(1, debug, &chip->c, "tda9874a_setmode(): req. mode %d; AOSR=0x%X, MDACOSR=0x%X.\n",
 			mode, aosr, mdacosr);
 
 	} else { /* dic == 0x07 */
@@ -955,7 +955,7 @@
 		chip_write(chip, TDA9874A_FMMR, fmmr);
 		chip_write(chip, TDA9874A_AOSR, aosr);
 
-		v4l_dbg(1, &chip->c, "tda9874a_setmode(): req. mode %d; FMMR=0x%X, AOSR=0x%X.\n",
+		v4l_dbg(1, debug, &chip->c, "tda9874a_setmode(): req. mode %d; FMMR=0x%X, AOSR=0x%X.\n",
 			mode, fmmr, aosr);
 	}
 }
@@ -969,7 +969,7 @@
 	if(-1 == (sic = chip_read2(chip,TDA9874A_SIC)))
 		return 0;
 
-	v4l_dbg(1, &chip->c, "tda9874a_checkit(): DIC=0x%X, SIC=0x%X.\n", dic, sic);
+	v4l_dbg(1, debug, &chip->c, "tda9874a_checkit(): DIC=0x%X, SIC=0x%X.\n", dic, sic);
 
 	if((dic == 0x11)||(dic == 0x07)) {
 		v4l_info(&chip->c, "found tda9874%s.\n", (dic == 0x11) ? "a":"h");
@@ -1184,7 +1184,7 @@
 	}else if (!(val & TA8874Z_B0)){
 		mode |= VIDEO_SOUND_STEREO;
 	}
-	/* v4l_dbg(1, &chip->c, "ta8874z_getmode(): raw chip read: 0x%02x, return: 0x%02x\n", val, mode); */
+	/* v4l_dbg(1, debug, &chip->c, "ta8874z_getmode(): raw chip read: 0x%02x, return: 0x%02x\n", val, mode); */
 	return mode;
 }
 
@@ -1197,7 +1197,7 @@
 {
 	int update = 1;
 	audiocmd *t = NULL;
-	v4l_dbg(1, &chip->c, "ta8874z_setmode(): mode: 0x%02x\n", mode);
+	v4l_dbg(1, debug, &chip->c, "ta8874z_setmode(): mode: 0x%02x\n", mode);
 
 	switch(mode){
 	case VIDEO_SOUND_MONO:
@@ -1468,17 +1468,16 @@
 	struct CHIPSTATE *chip;
 	struct CHIPDESC  *desc;
 
-	chip = kmalloc(sizeof(*chip),GFP_KERNEL);
+	chip = kzalloc(sizeof(*chip),GFP_KERNEL);
 	if (!chip)
 		return -ENOMEM;
-	memset(chip,0,sizeof(*chip));
 	memcpy(&chip->c,&client_template,sizeof(struct i2c_client));
 	chip->c.adapter = adap;
 	chip->c.addr = addr;
 	i2c_set_clientdata(&chip->c, chip);
 
 	/* find description for the chip */
-	v4l_dbg(1, &chip->c, "chip found @ 0x%x\n", addr<<1);
+	v4l_dbg(1, debug, &chip->c, "chip found @ 0x%x\n", addr<<1);
 	for (desc = chiplist; desc->name != NULL; desc++) {
 		if (0 == *(desc->insmodopt))
 			continue;
@@ -1490,12 +1489,12 @@
 		break;
 	}
 	if (desc->name == NULL) {
-		v4l_dbg(1, &chip->c, "no matching chip description found\n");
+		v4l_dbg(1, debug, &chip->c, "no matching chip description found\n");
 		return -EIO;
 	}
 	v4l_info(&chip->c, "%s found @ 0x%x (%s)\n", desc->name, addr<<1, adap->name);
 	if (desc->flags) {
-		v4l_dbg(1, &chip->c, "matches:%s%s%s.\n",
+		v4l_dbg(1, debug, &chip->c, "matches:%s%s%s.\n",
 			(desc->flags & CHIP_HAS_VOLUME)     ? " volume"      : "",
 			(desc->flags & CHIP_HAS_BASSTREBLE) ? " bass/treble" : "",
 			(desc->flags & CHIP_HAS_INPUTSEL)   ? " audiomux"    : "");
@@ -1583,7 +1582,7 @@
 	struct CHIPSTATE *chip = i2c_get_clientdata(client);
 	struct CHIPDESC  *desc = chiplist + chip->type;
 
-	v4l_dbg(1, &chip->c, "%s: chip_command 0x%x\n", chip->c.name, cmd);
+	v4l_dbg(1, debug, &chip->c, "%s: chip_command 0x%x\n", chip->c.name, cmd);
 
 	switch (cmd) {
 	case AUDC_SET_INPUT:
diff --git a/drivers/media/video/tveeprom.c b/drivers/media/video/tveeprom.c
index fd0acc5..5e71a35 100644
--- a/drivers/media/video/tveeprom.c
+++ b/drivers/media/video/tveeprom.c
@@ -719,8 +719,7 @@
 
 	switch (cmd) {
 	case 0:
-		buf = kmalloc(256,GFP_KERNEL);
-		memset(buf,0,256);
+		buf = kzalloc(256,GFP_KERNEL);
 		tveeprom_read(client,buf,256);
 		tveeprom_hauppauge_analog(client, &eeprom,buf);
 		kfree(buf);
@@ -743,10 +742,9 @@
 {
 	struct i2c_client *client;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (NULL == client)
 		return -ENOMEM;
-	memset(client, 0, sizeof(struct i2c_client));
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &i2c_driver_tveeprom;
diff --git a/drivers/media/video/tvp5150.c b/drivers/media/video/tvp5150.c
index c35b804..e86b522 100644
--- a/drivers/media/video/tvp5150.c
+++ b/drivers/media/video/tvp5150.c
@@ -1074,12 +1074,11 @@
 		return -ENOMEM;
 	memcpy(c, &client_template, sizeof(struct i2c_client));
 
-	core = kmalloc(sizeof(struct tvp5150), GFP_KERNEL);
+	core = kzalloc(sizeof(struct tvp5150), GFP_KERNEL);
 	if (core == 0) {
 		kfree(c);
 		return -ENOMEM;
 	}
-	memset(core, 0, sizeof(struct tvp5150));
 	i2c_set_clientdata(c, core);
 
 	rv = i2c_attach_client(c);
diff --git a/drivers/media/video/v4l1-compat.c b/drivers/media/video/v4l1-compat.c
index 2ab5b40..474a29b 100644
--- a/drivers/media/video/v4l1-compat.c
+++ b/drivers/media/video/v4l1-compat.c
@@ -305,9 +305,8 @@
 	{
 		struct video_capability *cap = arg;
 
-		cap2 = kmalloc(sizeof(*cap2),GFP_KERNEL);
+		cap2 = kzalloc(sizeof(*cap2),GFP_KERNEL);
 		memset(cap, 0, sizeof(*cap));
-		memset(cap2, 0, sizeof(*cap2));
 		memset(&fbuf2, 0, sizeof(fbuf2));
 
 		err = drv(inode, file, VIDIOC_QUERYCAP, cap2);
@@ -422,9 +421,8 @@
 	{
 		struct video_window	*win = arg;
 
-		fmt2 = kmalloc(sizeof(*fmt2),GFP_KERNEL);
+		fmt2 = kzalloc(sizeof(*fmt2),GFP_KERNEL);
 		memset(win,0,sizeof(*win));
-		memset(fmt2,0,sizeof(*fmt2));
 
 		fmt2->type = V4L2_BUF_TYPE_VIDEO_OVERLAY;
 		err = drv(inode, file, VIDIOC_G_FMT, fmt2);
@@ -461,8 +459,7 @@
 		struct video_window	*win = arg;
 		int err1,err2;
 
-		fmt2 = kmalloc(sizeof(*fmt2),GFP_KERNEL);
-		memset(fmt2,0,sizeof(*fmt2));
+		fmt2 = kzalloc(sizeof(*fmt2),GFP_KERNEL);
 		fmt2->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
 		drv(inode, file, VIDIOC_STREAMOFF, &fmt2->type);
 		err1 = drv(inode, file, VIDIOC_G_FMT, fmt2);
@@ -595,8 +592,7 @@
 		pict->whiteness = get_v4l_control(inode, file,
 						  V4L2_CID_WHITENESS, drv);
 
-		fmt2 = kmalloc(sizeof(*fmt2),GFP_KERNEL);
-		memset(fmt2,0,sizeof(*fmt2));
+		fmt2 = kzalloc(sizeof(*fmt2),GFP_KERNEL);
 		fmt2->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
 		err = drv(inode, file, VIDIOC_G_FMT, fmt2);
 		if (err < 0) {
@@ -622,8 +618,7 @@
 		set_v4l_control(inode, file,
 				V4L2_CID_WHITENESS, pict->whiteness, drv);
 
-		fmt2 = kmalloc(sizeof(*fmt2),GFP_KERNEL);
-		memset(fmt2,0,sizeof(*fmt2));
+		fmt2 = kzalloc(sizeof(*fmt2),GFP_KERNEL);
 		fmt2->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
 		err = drv(inode, file, VIDIOC_G_FMT, fmt2);
 		if (err < 0)
@@ -846,9 +841,8 @@
 	{
 		struct video_mmap	*mm = arg;
 
-		fmt2 = kmalloc(sizeof(*fmt2),GFP_KERNEL);
+		fmt2 = kzalloc(sizeof(*fmt2),GFP_KERNEL);
 		memset(&buf2,0,sizeof(buf2));
-		memset(fmt2,0,sizeof(*fmt2));
 
 		fmt2->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
 		err = drv(inode, file, VIDIOC_G_FMT, fmt2);
@@ -942,8 +936,7 @@
 	{
 		struct vbi_format      *fmt = arg;
 
-		fmt2 = kmalloc(sizeof(*fmt2),GFP_KERNEL);
-		memset(fmt2, 0, sizeof(*fmt2));
+		fmt2 = kzalloc(sizeof(*fmt2),GFP_KERNEL);
 		fmt2->type = V4L2_BUF_TYPE_VBI_CAPTURE;
 
 		err = drv(inode, file, VIDIOC_G_FMT, fmt2);
@@ -975,8 +968,7 @@
 			break;
 		}
 
-		fmt2 = kmalloc(sizeof(*fmt2),GFP_KERNEL);
-		memset(fmt2, 0, sizeof(*fmt2));
+		fmt2 = kzalloc(sizeof(*fmt2),GFP_KERNEL);
 
 		fmt2->type = V4L2_BUF_TYPE_VBI_CAPTURE;
 		fmt2->fmt.vbi.samples_per_line = fmt->samples_per_line;
diff --git a/drivers/media/video/video-buf.c b/drivers/media/video/video-buf.c
index 9a6bf28..9ef4775 100644
--- a/drivers/media/video/video-buf.c
+++ b/drivers/media/video/video-buf.c
@@ -52,10 +52,9 @@
 	struct page *pg;
 	int i;
 
-	sglist = kmalloc(sizeof(struct scatterlist)*nr_pages, GFP_KERNEL);
+	sglist = kcalloc(nr_pages, sizeof(struct scatterlist), GFP_KERNEL);
 	if (NULL == sglist)
 		return NULL;
-	memset(sglist,0,sizeof(struct scatterlist)*nr_pages);
 	for (i = 0; i < nr_pages; i++, virt += PAGE_SIZE) {
 		pg = vmalloc_to_page(virt);
 		if (NULL == pg)
@@ -80,10 +79,9 @@
 
 	if (NULL == pages[0])
 		return NULL;
-	sglist = kmalloc(sizeof(*sglist) * nr_pages, GFP_KERNEL);
+	sglist = kcalloc(nr_pages, sizeof(*sglist), GFP_KERNEL);
 	if (NULL == sglist)
 		return NULL;
-	memset(sglist, 0, sizeof(*sglist) * nr_pages);
 
 	if (NULL == pages[0])
 		goto nopage;
@@ -284,9 +282,8 @@
 {
 	struct videobuf_buffer *vb;
 
-	vb = kmalloc(size,GFP_KERNEL);
+	vb = kzalloc(size,GFP_KERNEL);
 	if (NULL != vb) {
-		memset(vb,0,size);
 		videobuf_dma_init(&vb->dma);
 		init_waitqueue_head(&vb->done);
 		vb->magic     = MAGIC_BUFFER;
diff --git a/drivers/media/video/videocodec.c b/drivers/media/video/videocodec.c
index 839db62..8f271de 100644
--- a/drivers/media/video/videocodec.c
+++ b/drivers/media/video/videocodec.c
@@ -124,17 +124,13 @@
 			if (res == 0) {
 				dprintk(3, "videocodec_attach '%s'\n",
 					codec->name);
-				ptr = (struct attached_list *)
-				    kmalloc(sizeof(struct attached_list),
-					    GFP_KERNEL);
+				ptr = kzalloc(sizeof(struct attached_list), GFP_KERNEL);
 				if (!ptr) {
 					dprintk(1,
 						KERN_ERR
 						"videocodec_attach: no memory\n");
 					goto out_kfree;
 				}
-				memset(ptr, 0,
-				       sizeof(struct attached_list));
 				ptr->codec = codec;
 
 				a = h->list;
@@ -249,14 +245,11 @@
 		"videocodec: register '%s', type: %x, flags %lx, magic %lx\n",
 		codec->name, codec->type, codec->flags, codec->magic);
 
-	ptr =
-	    (struct codec_list *) kmalloc(sizeof(struct codec_list),
-					  GFP_KERNEL);
+	ptr = kzalloc(sizeof(struct codec_list), GFP_KERNEL);
 	if (!ptr) {
 		dprintk(1, KERN_ERR "videocodec_register: no memory\n");
 		return -ENOMEM;
 	}
-	memset(ptr, 0, sizeof(struct codec_list));
 	ptr->codec = codec;
 
 	if (!h) {
diff --git a/drivers/media/video/videodev.c b/drivers/media/video/videodev.c
index 9a9902c..d5be259 100644
--- a/drivers/media/video/videodev.c
+++ b/drivers/media/video/videodev.c
@@ -52,10 +52,7 @@
 {
 	struct video_device *vfd;
 
-	vfd = kmalloc(sizeof(*vfd),GFP_KERNEL);
-	if (NULL == vfd)
-		return NULL;
-	memset(vfd,0,sizeof(*vfd));
+	vfd = kzalloc(sizeof(*vfd),GFP_KERNEL);
 	return vfd;
 }
 
diff --git a/drivers/media/video/vino.c b/drivers/media/video/vino.c
index 71b28e9..c8fd823 100644
--- a/drivers/media/video/vino.c
+++ b/drivers/media/video/vino.c
@@ -4499,13 +4499,11 @@
 	dma_addr_t dma_dummy_address;
 	int i;
 
-	vino_drvdata = (struct vino_settings *)
-		kmalloc(sizeof(struct vino_settings), GFP_KERNEL);
+	vino_drvdata = kzalloc(sizeof(struct vino_settings), GFP_KERNEL);
 	if (!vino_drvdata) {
 		vino_module_cleanup(vino_init_stage);
 		return -ENOMEM;
 	}
-	memset(vino_drvdata, 0, sizeof(struct vino_settings));
 	vino_init_stage++;
 
 	/* create a dummy dma descriptor */
diff --git a/drivers/media/video/vpx3220.c b/drivers/media/video/vpx3220.c
index 8dcee8b..d0a1e72 100644
--- a/drivers/media/video/vpx3220.c
+++ b/drivers/media/video/vpx3220.c
@@ -621,13 +621,11 @@
 	    (adapter, I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA))
 		return 0;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == NULL) {
 		return -ENOMEM;
 	}
 
-	memset(client, 0, sizeof(struct i2c_client));
-
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &vpx3220_i2c_driver;
@@ -675,12 +673,11 @@
 			sizeof(I2C_NAME(client)));
 	}
 
-	decoder = kmalloc(sizeof(struct vpx3220), GFP_KERNEL);
+	decoder = kzalloc(sizeof(struct vpx3220), GFP_KERNEL);
 	if (decoder == NULL) {
 		kfree(client);
 		return -ENOMEM;
 	}
-	memset(decoder, 0, sizeof(struct vpx3220));
 	decoder->norm = VIDEO_MODE_PAL;
 	decoder->input = 0;
 	decoder->enable = 1;
diff --git a/drivers/media/video/wm8775.c b/drivers/media/video/wm8775.c
index c2e6d2e..8cb64f8 100644
--- a/drivers/media/video/wm8775.c
+++ b/drivers/media/video/wm8775.c
@@ -166,11 +166,10 @@
 	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 		return 0;
 
-	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+	client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
 	if (client == 0)
 		return -ENOMEM;
 
-	memset(client, 0, sizeof(struct i2c_client));
 	client->addr = address;
 	client->adapter = adapter;
 	client->driver = &i2c_driver;
diff --git a/drivers/media/video/zoran_card.c b/drivers/media/video/zoran_card.c
index 39a0d23..ea32886 100644
--- a/drivers/media/video/zoran_card.c
+++ b/drivers/media/video/zoran_card.c
@@ -1050,7 +1050,7 @@
 	/* allocate memory *before* doing anything to the hardware
 	 * in case allocation fails */
 	mem_needed = BUZ_NUM_STAT_COM * 4;
-	mem = (unsigned long) kmalloc(mem_needed, GFP_KERNEL);
+	mem = kzalloc(mem_needed, GFP_KERNEL);
 	vdev = (void *) kmalloc(sizeof(struct video_device), GFP_KERNEL);
 	if (!mem || !vdev) {
 		dprintk(1,
@@ -1061,7 +1061,6 @@
 		kfree((void *)mem);
 		return -ENOMEM;
 	}
-	memset((void *) mem, 0, mem_needed);
 	zr->stat_com = (u32 *) mem;
 	for (j = 0; j < BUZ_NUM_STAT_COM; j++) {
 		zr->stat_com[j] = 1;	/* mark as unavailable to zr36057 */
diff --git a/drivers/media/video/zoran_driver.c b/drivers/media/video/zoran_driver.c
index 15283f4..485553b 100644
--- a/drivers/media/video/zoran_driver.c
+++ b/drivers/media/video/zoran_driver.c
@@ -1345,7 +1345,7 @@
 		ZR_DEVNAME(zr), current->comm, current->pid, zr->user);
 
 	/* now, create the open()-specific file_ops struct */
-	fh = kmalloc(sizeof(struct zoran_fh), GFP_KERNEL);
+	fh = kzalloc(sizeof(struct zoran_fh), GFP_KERNEL);
 	if (!fh) {
 		dprintk(1,
 			KERN_ERR
@@ -1354,7 +1354,6 @@
 		res = -ENOMEM;
 		goto open_unlock_and_return;
 	}
-	memset(fh, 0, sizeof(struct zoran_fh));
 	/* used to be BUZ_MAX_WIDTH/HEIGHT, but that gives overflows
 	 * on norm-change! */
 	fh->overlay_mask =
diff --git a/drivers/media/video/zr36016.c b/drivers/media/video/zr36016.c
index 4ed8985..10130ef 100644
--- a/drivers/media/video/zr36016.c
+++ b/drivers/media/video/zr36016.c
@@ -451,12 +451,11 @@
 		return -ENOSPC;
 	}
 	//mem structure init
-	codec->data = ptr = kmalloc(sizeof(struct zr36016), GFP_KERNEL);
+	codec->data = ptr = kzalloc(sizeof(struct zr36016), GFP_KERNEL);
 	if (NULL == ptr) {
 		dprintk(1, KERN_ERR "zr36016: Can't get enough memory!\n");
 		return -ENOMEM;
 	}
-	memset(ptr, 0, sizeof(struct zr36016));
 
 	snprintf(ptr->name, sizeof(ptr->name), "zr36016[%d]",
 		 zr36016_codecs);
diff --git a/drivers/media/video/zr36050.c b/drivers/media/video/zr36050.c
index 0144576..bd0cd28 100644
--- a/drivers/media/video/zr36050.c
+++ b/drivers/media/video/zr36050.c
@@ -813,12 +813,11 @@
 		return -ENOSPC;
 	}
 	//mem structure init
-	codec->data = ptr = kmalloc(sizeof(struct zr36050), GFP_KERNEL);
+	codec->data = ptr = kzalloc(sizeof(struct zr36050), GFP_KERNEL);
 	if (NULL == ptr) {
 		dprintk(1, KERN_ERR "zr36050: Can't get enough memory!\n");
 		return -ENOMEM;
 	}
-	memset(ptr, 0, sizeof(struct zr36050));
 
 	snprintf(ptr->name, sizeof(ptr->name), "zr36050[%d]",
 		 zr36050_codecs);
diff --git a/drivers/media/video/zr36060.c b/drivers/media/video/zr36060.c
index 129744a..28fa31a 100644
--- a/drivers/media/video/zr36060.c
+++ b/drivers/media/video/zr36060.c
@@ -919,12 +919,11 @@
 		return -ENOSPC;
 	}
 	//mem structure init
-	codec->data = ptr = kmalloc(sizeof(struct zr36060), GFP_KERNEL);
+	codec->data = ptr = kzalloc(sizeof(struct zr36060), GFP_KERNEL);
 	if (NULL == ptr) {
 		dprintk(1, KERN_ERR "zr36060: Can't get enough memory!\n");
 		return -ENOMEM;
 	}
-	memset(ptr, 0, sizeof(struct zr36060));
 
 	snprintf(ptr->name, sizeof(ptr->name), "zr36060[%d]",
 		 zr36060_codecs);
diff --git a/include/media/tuner.h b/include/media/tuner.h
index 7674b12..27cbf08 100644
--- a/include/media/tuner.h
+++ b/include/media/tuner.h
@@ -218,8 +218,8 @@
 	printk(KERN_INFO "%s %d-%04x: " fmt, t->i2c.driver->driver.name, \
 			i2c_adapter_id(t->i2c.adapter), t->i2c.addr , ##arg); } while (0)
 #define tuner_dbg(fmt, arg...) do {\
-	extern int debug; \
-	if (debug) \
+	extern int tuner_debug; \
+	if (tuner_debug) \
 		printk(KERN_DEBUG "%s %d-%04x: " fmt, t->i2c.driver->driver.name, \
 			i2c_adapter_id(t->i2c.adapter), t->i2c.addr , ##arg); } while (0)
 
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h
index 3cc3132..c74052a 100644
--- a/include/media/v4l2-common.h
+++ b/include/media/v4l2-common.h
@@ -49,9 +49,8 @@
 
 /* These three macros assume that the debug level is set with a module
    parameter called 'debug'. */
-#define v4l_dbg(level, client, fmt, arg...)				     \
+#define v4l_dbg(level, debug, client, fmt, arg...)			     \
 	do { 								     \
-		extern int debug;					     \
 		if (debug >= (level))					     \
 			v4l_client_printk(KERN_DEBUG, client, fmt , ## arg); \
 	} while (0)