Browse Source

Merge master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb

* master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb:
  V4L/DVB (4290): Add support for the TCL M2523_3DB_E tuner.
  V4L/DVB (4289): Missing statement in drivers/media/dvb/frontends/cx22700.c
  V4L/DVB (4288): Clean out a zillion sparse warnings in pvrusb2
  V4L/DVB (4287): Pvrusb2/: possible cleanups
  V4L/DVB (4285): Cx88: add support for Geniatech Digistar / Digiwave 103g
  V4L/DVB (4284): Cx24123: fix set_voltage function according to the specs
  V4L/DVB (4282): Fix: use swzigzag for swalgo
  V4L/DVB (4281): TDA9887_SET_CONFIG should only be handled by the tda9887.
  V4L/DVB (4277): Fix CI interface on PRO KNC1 cards
  V4L/DVB (4276): Fix CI on old KNC1 DVBC cards
  V4L/DVB (4275): The FE_SET_FRONTEND_TUNE_MODE ioctl always returns EOPNOTSUPP
  V4L/DVB (4274): Eliminate use of tda9887 from pvrusb2 driver
  V4L/DVB (4273): Always log pvrusb2 device register / unregister events
  V4L/DVB (4272): Fix tveeprom supported standards
  V4L/DVB (4270): Add tda9887-specific tuner configuration
  V4L/DVB (4269): Subject: videocodec: make 1-bit fields unsigned
  V4L/DVB (4267): Remove all instances of request_module("tda9887")
  V4L/DVB (4264): Cx88-blackbird: implement VIDIOC_QUERYCTRL and VIDIOC_QUERYMENU
Linus Torvalds 19 years ago
parent
commit
1cfef5ed63
49 changed files with 524 additions and 548 deletions
  1. 1 0
      Documentation/video4linux/CARDLIST.cx88
  2. 3 1
      drivers/media/dvb/dvb-core/dvb_frontend.c
  3. 1 0
      drivers/media/dvb/frontends/cx22700.c
  4. 2 2
      drivers/media/dvb/frontends/cx24123.c
  5. 10 5
      drivers/media/dvb/ttpci/budget-av.c
  6. 0 5
      drivers/media/video/bt8xx/bttv-cards.c
  7. 43 0
      drivers/media/video/cx88/cx88-blackbird.c
  8. 19 0
      drivers/media/video/cx88/cx88-cards.c
  9. 28 0
      drivers/media/video/cx88/cx88-dvb.c
  10. 46 15
      drivers/media/video/cx88/cx88-video.c
  11. 3 0
      drivers/media/video/cx88/cx88.h
  12. 0 2
      drivers/media/video/em28xx/em28xx-video.c
  13. 2 2
      drivers/media/video/msp3400-driver.h
  14. 1 1
      drivers/media/video/pvrusb2/Makefile
  15. 2 2
      drivers/media/video/pvrusb2/pvrusb2-audio.c
  16. 7 7
      drivers/media/video/pvrusb2/pvrusb2-context.c
  17. 3 3
      drivers/media/video/pvrusb2/pvrusb2-ctrl.c
  18. 3 3
      drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c
  19. 3 3
      drivers/media/video/pvrusb2/pvrusb2-debugifc.c
  20. 0 126
      drivers/media/video/pvrusb2/pvrusb2-demod.c
  21. 0 38
      drivers/media/video/pvrusb2/pvrusb2-demod.h
  22. 2 2
      drivers/media/video/pvrusb2/pvrusb2-eeprom.c
  23. 2 2
      drivers/media/video/pvrusb2/pvrusb2-encoder.c
  24. 0 17
      drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h
  25. 73 99
      drivers/media/video/pvrusb2/pvrusb2-hdw.c
  26. 0 32
      drivers/media/video/pvrusb2/pvrusb2-hdw.h
  27. 0 6
      drivers/media/video/pvrusb2/pvrusb2-i2c-chips-v4l2.c
  28. 2 2
      drivers/media/video/pvrusb2/pvrusb2-i2c-cmd-v4l2.c
  29. 19 15
      drivers/media/video/pvrusb2/pvrusb2-i2c-core.c
  30. 0 3
      drivers/media/video/pvrusb2/pvrusb2-i2c-core.h
  31. 13 44
      drivers/media/video/pvrusb2/pvrusb2-io.c
  32. 0 13
      drivers/media/video/pvrusb2/pvrusb2-io.h
  33. 15 19
      drivers/media/video/pvrusb2/pvrusb2-ioread.c
  34. 0 1
      drivers/media/video/pvrusb2/pvrusb2-ioread.h
  35. 5 5
      drivers/media/video/pvrusb2/pvrusb2-main.c
  36. 3 3
      drivers/media/video/pvrusb2/pvrusb2-std.c
  37. 7 7
      drivers/media/video/pvrusb2/pvrusb2-sysfs.c
  38. 1 1
      drivers/media/video/pvrusb2/pvrusb2-tuner.c
  39. 20 22
      drivers/media/video/pvrusb2/pvrusb2-v4l2.c
  40. 2 2
      drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
  41. 1 1
      drivers/media/video/pvrusb2/pvrusb2-wm8775.c
  42. 0 2
      drivers/media/video/saa7134/saa7134-core.c
  43. 2 2
      drivers/media/video/tda9887.c
  44. 6 6
      drivers/media/video/tuner-core.c
  45. 64 10
      drivers/media/video/tuner-simple.c
  46. 38 0
      drivers/media/video/tuner-types.c
  47. 9 9
      drivers/media/video/tveeprom.c
  48. 8 8
      drivers/media/video/videocodec.h
  49. 55 0
      include/media/tuner-types.h

+ 1 - 0
Documentation/video4linux/CARDLIST.cx88

@@ -50,3 +50,4 @@
  49 -> PixelView PlayTV P7000                              [1554:4813]
  50 -> NPG Tech Real TV FM Top 10                          [14f1:0842]
  51 -> WinFast DTV2000 H                                   [107d:665e]
+ 52 -> Geniatech DVB-S                                     [14f1:0084]

+ 3 - 1
drivers/media/dvb/dvb-core/dvb_frontend.c

@@ -570,7 +570,8 @@ static int dvb_frontend_thread(void *data)
 					dvb_frontend_add_event(fe, s);
 					fepriv->status = s;
 				}
-			}
+			} else
+				dvb_frontend_swzigzag(fe);
 		} else
 			dvb_frontend_swzigzag(fe);
 	}
@@ -975,6 +976,7 @@ static int dvb_frontend_ioctl(struct inode *inode, struct file *file,
 
 	case FE_SET_FRONTEND_TUNE_MODE:
 		fepriv->tune_mode_flags = (unsigned long) parg;
+		err = 0;
 		break;
 	};
 

+ 1 - 0
drivers/media/dvb/frontends/cx22700.c

@@ -134,6 +134,7 @@ static int cx22700_set_tps (struct cx22700_state *state, struct dvb_ofdm_paramet
 		return -EINVAL;
 
 	if (p->code_rate_LP < FEC_1_2 || p->code_rate_LP > FEC_7_8)
+		return -EINVAL;
 
 	if (p->code_rate_HP == FEC_4_5 || p->code_rate_LP == FEC_4_5)
 		return -EINVAL;

+ 2 - 2
drivers/media/dvb/frontends/cx24123.c

@@ -670,10 +670,10 @@ static int cx24123_set_voltage(struct dvb_frontend* fe, fe_sec_voltage_t voltage
 	switch (voltage) {
 	case SEC_VOLTAGE_13:
 		dprintk("%s: setting voltage 13V\n", __FUNCTION__);
-		return cx24123_writereg(state, 0x29, val | 0x80);
+		return cx24123_writereg(state, 0x29, val & 0x7f);
 	case SEC_VOLTAGE_18:
 		dprintk("%s: setting voltage 18V\n", __FUNCTION__);
-		return cx24123_writereg(state, 0x29, val & 0x7f);
+		return cx24123_writereg(state, 0x29, val | 0x80);
 	default:
 		return -EINVAL;
 	};

+ 10 - 5
drivers/media/dvb/ttpci/budget-av.c

@@ -1141,6 +1141,15 @@ static void frontend_init(struct budget_av *budget_av)
 		break;
 
 	case SUBID_DVBC_KNC1:
+		budget_av->reinitialise_demod = 1;
+		fe = tda10021_attach(&philips_cu1216_config,
+				     &budget_av->budget.i2c_adap,
+				     read_pwm(budget_av));
+		if (fe) {
+			fe->ops.tuner_ops.set_params = philips_cu1216_tuner_set_params;
+		}
+		break;
+
 	case SUBID_DVBC_KNC1_PLUS:
 	case SUBID_DVBC_CINERGY1200:
 		budget_av->reinitialise_demod = 1;
@@ -1293,11 +1302,7 @@ static int budget_av_attach(struct saa7146_dev *dev, struct saa7146_pci_extensio
 
 	budget_av->budget.dvb_adapter.priv = budget_av;
 	frontend_init(budget_av);
-
-	if (!budget_av->has_saa7113) {
-		ciintf_init(budget_av);
-	}
-
+	ciintf_init(budget_av);
 	return 0;
 }
 

+ 0 - 5
drivers/media/video/bt8xx/bttv-cards.c

@@ -3548,11 +3548,6 @@ void __devinit bttv_init_card2(struct bttv *btv)
 	/* Hybrid DVB card, DOES have a tda9887 */
 	if (btv->c.type == BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE)
 		tda9887 = 1;
-	if((btv->tuner_type == TUNER_PHILIPS_FM1216ME_MK3) ||
-	   (btv->tuner_type == TUNER_PHILIPS_FM1236_MK3) ||
-	   (btv->tuner_type == TUNER_PHILIPS_FM1256_IH3) ||
-	    tda9887)
-		request_module("tda9887");
 	if (btv->tuner_type != UNSET)
 		request_module("tuner");
 }

+ 43 - 0
drivers/media/video/cx88/cx88-blackbird.c

@@ -686,6 +686,39 @@ static struct videobuf_queue_ops blackbird_qops = {
 
 /* ------------------------------------------------------------------ */
 
+static const u32 *ctrl_classes[] = {
+	cx88_user_ctrls,
+	cx2341x_mpeg_ctrls,
+	NULL
+};
+
+static int blackbird_queryctrl(struct cx8802_dev *dev, struct v4l2_queryctrl *qctrl)
+{
+	qctrl->id = v4l2_ctrl_next(ctrl_classes, qctrl->id);
+	if (qctrl->id == 0)
+		return -EINVAL;
+
+	/* Standard V4L2 controls */
+	if (cx8800_ctrl_query(qctrl) == 0)
+		return 0;
+
+	/* MPEG V4L2 controls */
+	if (cx2341x_ctrl_query(&dev->params, qctrl))
+		qctrl->flags |= V4L2_CTRL_FLAG_DISABLED;
+	return 0;
+}
+
+static int blackbird_querymenu(struct cx8802_dev *dev, struct v4l2_querymenu *qmenu)
+{
+	struct v4l2_queryctrl qctrl;
+
+	qctrl.id = qmenu->id;
+	blackbird_queryctrl(dev, &qctrl);
+	return v4l2_ctrl_query_menu(qmenu, &qctrl, cx2341x_ctrl_get_menu(qmenu->id));
+}
+
+/* ------------------------------------------------------------------ */
+
 static int mpeg_do_ioctl(struct inode *inode, struct file *file,
 			 unsigned int cmd, void *arg)
 {
@@ -866,6 +899,16 @@ static int mpeg_do_ioctl(struct inode *inode, struct file *file,
 		       core->name);
 		return 0;
 	}
+	case VIDIOC_QUERYMENU:
+		return blackbird_querymenu(dev, arg);
+	case VIDIOC_QUERYCTRL:
+	{
+		struct v4l2_queryctrl *c = arg;
+
+		if (blackbird_queryctrl(dev, c) == 0)
+			return 0;
+		return cx88_do_ioctl(inode, file, 0, dev->core, cmd, arg, mpeg_do_ioctl);
+	}
 
 	default:
 		return cx88_do_ioctl(inode, file, 0, dev->core, cmd, arg, mpeg_do_ioctl);

+ 19 - 0
drivers/media/video/cx88/cx88-cards.c

@@ -1194,6 +1194,21 @@ struct cx88_board cx88_boards[] = {
 		}},
 		.dvb            = 1,
 	},
+	[CX88_BOARD_GENIATECH_DVBS] = {
+		.name          = "Geniatech DVB-S",
+		.tuner_type    = TUNER_ABSENT,
+		.radio_type    = UNSET,
+		.tuner_addr    = ADDR_UNSET,
+		.radio_addr    = ADDR_UNSET,
+		.input  = {{
+			.type  = CX88_VMUX_DVB,
+			.vmux  = 0,
+		},{
+			.type  = CX88_VMUX_COMPOSITE1,
+			.vmux  = 1,
+		}},
+		.dvb      = 1,
+	},
 };
 const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards);
 
@@ -1439,6 +1454,10 @@ struct cx88_subid cx88_subids[] = {
 		.subvendor = 0x18ac,
 		.subdevice = 0xd800, /* FusionHDTV 3 Gold (original revision) */
 		.card      = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q,
+	},{
+		.subvendor = 0x14f1,
+		.subdevice = 0x0084,
+		.card      = CX88_BOARD_GENIATECH_DVBS,
 	},
 };
 const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids);

+ 28 - 0
drivers/media/video/cx88/cx88-dvb.c

@@ -496,6 +496,26 @@ static int kworld_dvbs_100_set_voltage(struct dvb_frontend* fe, fe_sec_voltage_t
 	return 0;
 }
 
+static int geniatech_dvbs_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
+{
+	struct cx8802_dev *dev= fe->dvb->priv;
+	struct cx88_core *core = dev->core;
+
+	if (voltage == SEC_VOLTAGE_OFF) {
+		dprintk(1,"LNB Voltage OFF\n");
+		cx_write(MO_GP0_IO, 0x0000efff);
+	}
+
+	if (core->prev_set_voltage)
+		return core->prev_set_voltage(fe, voltage);
+	return 0;
+}
+
+static struct cx24123_config geniatech_dvbs_config = {
+	.demod_address  = 0x55,
+	.set_ts_params  = cx24123_set_ts_param,
+};
+
 static struct cx24123_config hauppauge_novas_config = {
 	.demod_address		= 0x55,
 	.set_ts_params		= cx24123_set_ts_param,
@@ -760,6 +780,14 @@ static int dvb_register(struct cx8802_dev *dev)
 			dev->dvb.frontend->ops.set_voltage = kworld_dvbs_100_set_voltage;
 		}
 		break;
+	case CX88_BOARD_GENIATECH_DVBS:
+		dev->dvb.frontend = cx24123_attach(&geniatech_dvbs_config,
+						   &dev->core->i2c_adap);
+		if (dev->dvb.frontend) {
+			dev->core->prev_set_voltage = dev->dvb.frontend->ops.set_voltage;
+			dev->dvb.frontend->ops.set_voltage = geniatech_dvbs_set_voltage;
+		}
+		break;
 #endif
 	default:
 		printk("%s: The frontend of your DVB/ATSC card isn't supported yet\n",

+ 46 - 15
drivers/media/video/cx88/cx88-video.c

@@ -327,6 +327,51 @@ static struct cx88_ctrl cx8800_ctls[] = {
 };
 static const int CX8800_CTLS = ARRAY_SIZE(cx8800_ctls);
 
+const u32 cx88_user_ctrls[] = {
+	V4L2_CID_USER_CLASS,
+	V4L2_CID_BRIGHTNESS,
+	V4L2_CID_CONTRAST,
+	V4L2_CID_SATURATION,
+	V4L2_CID_HUE,
+	V4L2_CID_AUDIO_VOLUME,
+	V4L2_CID_AUDIO_BALANCE,
+	V4L2_CID_AUDIO_MUTE,
+	0
+};
+EXPORT_SYMBOL(cx88_user_ctrls);
+
+static const u32 *ctrl_classes[] = {
+	cx88_user_ctrls,
+	NULL
+};
+
+int cx8800_ctrl_query(struct v4l2_queryctrl *qctrl)
+{
+	int i;
+
+	if (qctrl->id < V4L2_CID_BASE ||
+	    qctrl->id >= V4L2_CID_LASTP1)
+		return -EINVAL;
+	for (i = 0; i < CX8800_CTLS; i++)
+		if (cx8800_ctls[i].v.id == qctrl->id)
+			break;
+	if (i == CX8800_CTLS) {
+		*qctrl = no_ctl;
+		return 0;
+	}
+	*qctrl = cx8800_ctls[i].v;
+	return 0;
+}
+EXPORT_SYMBOL(cx8800_ctrl_query);
+
+static int cx88_queryctrl(struct v4l2_queryctrl *qctrl)
+{
+	qctrl->id = v4l2_ctrl_next(ctrl_classes, qctrl->id);
+	if (qctrl->id == 0)
+		return -EINVAL;
+	return cx8800_ctrl_query(qctrl);
+}
+
 /* ------------------------------------------------------------------- */
 /* resource management                                                 */
 
@@ -1362,20 +1407,8 @@ int cx88_do_ioctl(struct inode *inode, struct file *file, int radio,
 	case VIDIOC_QUERYCTRL:
 	{
 		struct v4l2_queryctrl *c = arg;
-		int i;
 
-		if (c->id <  V4L2_CID_BASE ||
-		    c->id >= V4L2_CID_LASTP1)
-			return -EINVAL;
-		for (i = 0; i < CX8800_CTLS; i++)
-			if (cx8800_ctls[i].v.id == c->id)
-				break;
-		if (i == CX8800_CTLS) {
-			*c = no_ctl;
-			return 0;
-		}
-		*c = cx8800_ctls[i].v;
-		return 0;
+		return cx88_queryctrl(c);
 	}
 	case VIDIOC_G_CTRL:
 		return get_control(core,arg);
@@ -1893,8 +1926,6 @@ static int __devinit cx8800_initdev(struct pci_dev *pci_dev,
 	/* load and configure helper modules */
 	if (TUNER_ABSENT != core->tuner_type)
 		request_module("tuner");
-	if (core->tda9887_conf)
-		request_module("tda9887");
 
 	/* register v4l devices */
 	dev->video_dev = cx88_vdev_init(core,dev->pci,

+ 3 - 0
drivers/media/video/cx88/cx88.h

@@ -196,6 +196,7 @@ extern struct sram_channel cx88_sram_channels[];
 #define CX88_BOARD_PIXELVIEW_PLAYTV_P7000  49
 #define CX88_BOARD_NPGTECH_REALTV_TOP10FM  50
 #define CX88_BOARD_WINFAST_DTV2000H        51
+#define CX88_BOARD_GENIATECH_DVBS          52
 
 enum cx88_itype {
 	CX88_VMUX_COMPOSITE1 = 1,
@@ -590,6 +591,8 @@ int cx8802_resume_common(struct pci_dev *pci_dev);
 extern int cx88_do_ioctl(struct inode *inode, struct file *file, int radio,
 				struct cx88_core *core, unsigned int cmd,
 				void *arg, v4l2_kioctl driver_ioctl);
+extern const u32 cx88_user_ctrls[];
+extern int cx8800_ctrl_query(struct v4l2_queryctrl *qctrl);
 
 /*
  * Local variables:

+ 0 - 2
drivers/media/video/em28xx/em28xx-video.c

@@ -1574,8 +1574,6 @@ static int em28xx_init_dev(struct em28xx **devhandle, struct usb_device *udev,
 		request_module("tvp5150");
 	if (dev->has_tuner)
 		request_module("tuner");
-	if (dev->tda9887_conf)
-		request_module("tda9887");
 #endif
 	errCode = em28xx_config(dev);
 	if (errCode) {

+ 2 - 2
drivers/media/video/msp3400-driver.h

@@ -90,8 +90,8 @@ struct msp_state {
 	/* thread */
 	struct task_struct   *kthread;
 	wait_queue_head_t    wq;
-	int                  restart:1;
-	int                  watch_stereo:1;
+	unsigned int         restart:1;
+	unsigned int         watch_stereo:1;
 };
 
 /* msp3400-driver.c */

+ 1 - 1
drivers/media/video/pvrusb2/Makefile

@@ -8,7 +8,7 @@ obj-pvrusb2-24xxx-$(CONFIG_VIDEO_PVRUSB2_24XXX) := \
 pvrusb2-objs	:= pvrusb2-i2c-core.o pvrusb2-i2c-cmd-v4l2.o \
 		   pvrusb2-audio.o pvrusb2-i2c-chips-v4l2.o \
 		   pvrusb2-encoder.o pvrusb2-video-v4l.o \
-		   pvrusb2-eeprom.o pvrusb2-tuner.o pvrusb2-demod.o \
+		   pvrusb2-eeprom.o pvrusb2-tuner.o \
 		   pvrusb2-main.o pvrusb2-hdw.o pvrusb2-v4l2.o \
 		   pvrusb2-ctrl.o pvrusb2-std.o \
 		   pvrusb2-context.o pvrusb2-io.o pvrusb2-ioread.o \

+ 2 - 2
drivers/media/video/pvrusb2/pvrusb2-audio.c

@@ -145,8 +145,8 @@ static int get_audio_status(struct pvr2_msp3400_handler *ctxt)
 
 static void pvr2_msp3400_detach(struct pvr2_msp3400_handler *ctxt)
 {
-	ctxt->client->handler = 0;
-	ctxt->hdw->audio_stat = 0;
+	ctxt->client->handler = NULL;
+	ctxt->hdw->audio_stat = NULL;
 	kfree(ctxt);
 }
 

+ 7 - 7
drivers/media/video/pvrusb2/pvrusb2-context.c

@@ -77,7 +77,7 @@ struct pvr2_context *pvr2_context_create(
 	const struct usb_device_id *devid,
 	void (*setup_func)(struct pvr2_context *))
 {
-	struct pvr2_context *mp = 0;
+	struct pvr2_context *mp = NULL;
 	mp = kmalloc(sizeof(*mp),GFP_KERNEL);
 	if (!mp) goto done;
 	memset(mp,0,sizeof(*mp));
@@ -87,7 +87,7 @@ struct pvr2_context *pvr2_context_create(
 	mp->hdw = pvr2_hdw_create(intf,devid);
 	if (!mp->hdw) {
 		pvr2_context_destroy(mp);
-		mp = 0;
+		mp = NULL;
 		goto done;
 	}
 
@@ -145,7 +145,7 @@ void pvr2_channel_init(struct pvr2_channel *cp,struct pvr2_context *mp)
 {
 	cp->hdw = mp->hdw;
 	cp->mc_head = mp;
-	cp->mc_next = 0;
+	cp->mc_next = NULL;
 	cp->mc_prev = mp->mc_last;
 	if (mp->mc_last) {
 		mp->mc_last->mc_next = cp;
@@ -160,8 +160,8 @@ static void pvr2_channel_disclaim_stream(struct pvr2_channel *cp)
 {
 	if (!cp->stream) return;
 	pvr2_stream_kill(cp->stream->stream);
-	cp->stream->user = 0;
-	cp->stream = 0;
+	cp->stream->user = NULL;
+	cp->stream = NULL;
 }
 
 
@@ -179,7 +179,7 @@ void pvr2_channel_done(struct pvr2_channel *cp)
 	} else {
 		mp->mc_first = cp->mc_next;
 	}
-	cp->hdw = 0;
+	cp->hdw = NULL;
 }
 
 
@@ -212,7 +212,7 @@ struct pvr2_ioread *pvr2_channel_create_mpeg_stream(
 {
 	struct pvr2_ioread *cp;
 	cp = pvr2_ioread_create();
-	if (!cp) return 0;
+	if (!cp) return NULL;
 	pvr2_ioread_setup(cp,sp->stream);
 	pvr2_ioread_set_sync_key(cp,stream_sync_key,sizeof(stream_sync_key));
 	return cp;

+ 3 - 3
drivers/media/video/pvrusb2/pvrusb2-ctrl.c

@@ -158,7 +158,7 @@ int pvr2_ctrl_get_mask(struct pvr2_ctrl *cptr)
 /* Retrieve the control's name */
 const char *pvr2_ctrl_get_name(struct pvr2_ctrl *cptr)
 {
-	if (!cptr) return 0;
+	if (!cptr) return NULL;
 	return cptr->info->name;
 }
 
@@ -166,7 +166,7 @@ const char *pvr2_ctrl_get_name(struct pvr2_ctrl *cptr)
 /* Retrieve the control's desc */
 const char *pvr2_ctrl_get_desc(struct pvr2_ctrl *cptr)
 {
-	if (!cptr) return 0;
+	if (!cptr) return NULL;
 	return cptr->info->desc;
 }
 
@@ -488,7 +488,7 @@ int pvr2_ctrl_sym_to_value(struct pvr2_ctrl *cptr,
 
 	LOCK_TAKE(cptr->hdw->big_lock); do {
 		if (cptr->info->type == pvr2_ctl_int) {
-			ret = parse_token(ptr,len,valptr,0,0);
+			ret = parse_token(ptr,len,valptr,NULL,0);
 			if ((ret >= 0) &&
 			    ((*valptr < cptr->info->def.type_int.min_value) ||
 			     (*valptr > cptr->info->def.type_int.max_value))) {

+ 3 - 3
drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c

@@ -139,8 +139,8 @@ static const struct pvr2_v4l_cx2584x_ops decoder_ops[] = {
 
 static void decoder_detach(struct pvr2_v4l_cx2584x *ctxt)
 {
-	ctxt->client->handler = 0;
-	ctxt->hdw->decoder_ctrl = 0;
+	ctxt->client->handler = NULL;
+	ctxt->hdw->decoder_ctrl = NULL;
 	kfree(ctxt);
 }
 
@@ -221,7 +221,7 @@ static unsigned int decoder_describe(struct pvr2_v4l_cx2584x *ctxt,
 static void decoder_reset(struct pvr2_v4l_cx2584x *ctxt)
 {
 	int ret;
-	ret = pvr2_i2c_client_cmd(ctxt->client,VIDIOC_INT_RESET,0);
+	ret = pvr2_i2c_client_cmd(ctxt->client,VIDIOC_INT_RESET,NULL);
 	pvr2_trace(PVR2_TRACE_CHIPS,"i2c cx25840 decoder_reset (ret=%d)",ret);
 }
 

+ 3 - 3
drivers/media/video/pvrusb2/pvrusb2-debugifc.c

@@ -82,7 +82,7 @@ static unsigned int debugifc_isolate_word(const char *buf,unsigned int count,
 	unsigned int wlen;
 	unsigned int scnt;
 
-	wptr = 0;
+	wptr = NULL;
 	wlen = 0;
 	scnt = debugifc_count_whitespace(buf,count);
 	consume_cnt += scnt; count -= scnt; buf += scnt;
@@ -337,8 +337,8 @@ int pvr2_debugifc_print_status(struct pvr2_hdw *hdw,
 }
 
 
-int pvr2_debugifc_do1cmd(struct pvr2_hdw *hdw,const char *buf,
-			 unsigned int count)
+static int pvr2_debugifc_do1cmd(struct pvr2_hdw *hdw,const char *buf,
+				unsigned int count)
 {
 	const char *wptr;
 	unsigned int wlen;

+ 0 - 126
drivers/media/video/pvrusb2/pvrusb2-demod.c

@@ -1,126 +0,0 @@
-/*
- *
- *  $Id$
- *
- *  Copyright (C) 2005 Mike Isely <isely@pobox.com>
- *  Copyright (C) 2004 Aurelien Alleaume <slts@free.fr>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-#include "pvrusb2.h"
-#include "pvrusb2-util.h"
-#include "pvrusb2-demod.h"
-#include "pvrusb2-hdw-internal.h"
-#include "pvrusb2-debug.h"
-#include <linux/videodev2.h>
-#include <media/tuner.h>
-#include <media/v4l2-common.h>
-
-
-struct pvr2_demod_handler {
-	struct pvr2_hdw *hdw;
-	struct pvr2_i2c_client *client;
-	struct pvr2_i2c_handler i2c_handler;
-	int type_update_fl;
-};
-
-
-static void set_config(struct pvr2_demod_handler *ctxt)
-{
-	struct pvr2_hdw *hdw = ctxt->hdw;
-	int cfg = 0;
-
-	switch (hdw->tuner_type) {
-	case TUNER_PHILIPS_FM1216ME_MK3:
-	case TUNER_PHILIPS_FM1236_MK3:
-		cfg = TDA9887_PORT1_ACTIVE|TDA9887_PORT2_ACTIVE;
-		break;
-	default:
-		break;
-	}
-	pvr2_trace(PVR2_TRACE_CHIPS,"i2c demod set_config(0x%x)",cfg);
-	pvr2_i2c_client_cmd(ctxt->client,TDA9887_SET_CONFIG,&cfg);
-	ctxt->type_update_fl = 0;
-}
-
-
-static int demod_check(struct pvr2_demod_handler *ctxt)
-{
-	struct pvr2_hdw *hdw = ctxt->hdw;
-	if (hdw->tuner_updated) ctxt->type_update_fl = !0;
-	return ctxt->type_update_fl != 0;
-}
-
-
-static void demod_update(struct pvr2_demod_handler *ctxt)
-{
-	if (ctxt->type_update_fl) set_config(ctxt);
-}
-
-
-static void demod_detach(struct pvr2_demod_handler *ctxt)
-{
-	ctxt->client->handler = 0;
-	kfree(ctxt);
-}
-
-
-static unsigned int demod_describe(struct pvr2_demod_handler *ctxt,char *buf,unsigned int cnt)
-{
-	return scnprintf(buf,cnt,"handler: pvrusb2-demod");
-}
-
-
-const static struct pvr2_i2c_handler_functions tuner_funcs = {
-	.detach = (void (*)(void *))demod_detach,
-	.check = (int (*)(void *))demod_check,
-	.update = (void (*)(void *))demod_update,
-	.describe = (unsigned int (*)(void *,char *,unsigned int))demod_describe,
-};
-
-
-int pvr2_i2c_demod_setup(struct pvr2_hdw *hdw,struct pvr2_i2c_client *cp)
-{
-	struct pvr2_demod_handler *ctxt;
-	if (cp->handler) return 0;
-
-	ctxt = kmalloc(sizeof(*ctxt),GFP_KERNEL);
-	if (!ctxt) return 0;
-	memset(ctxt,0,sizeof(*ctxt));
-
-	ctxt->i2c_handler.func_data = ctxt;
-	ctxt->i2c_handler.func_table = &tuner_funcs;
-	ctxt->type_update_fl = !0;
-	ctxt->client = cp;
-	ctxt->hdw = hdw;
-	cp->handler = &ctxt->i2c_handler;
-	pvr2_trace(PVR2_TRACE_CHIPS,"i2c 0x%x tda9887 V4L2 handler set up",
-		   cp->client->addr);
-	return !0;
-}
-
-
-
-
-/*
-  Stuff for Emacs to see, in order to encourage consistent editing style:
-  *** Local Variables: ***
-  *** mode: c ***
-  *** fill-column: 70 ***
-  *** tab-width: 8 ***
-  *** c-basic-offset: 8 ***
-  *** End: ***
-  */

+ 0 - 38
drivers/media/video/pvrusb2/pvrusb2-demod.h

@@ -1,38 +0,0 @@
-/*
- *
- *  $Id$
- *
- *  Copyright (C) 2005 Mike Isely <isely@pobox.com>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-#ifndef __PVRUSB2_DEMOD_H
-#define __PVRUSB2_DEMOD_H
-
-#include "pvrusb2-i2c-core.h"
-
-int pvr2_i2c_demod_setup(struct pvr2_hdw *,struct pvr2_i2c_client *);
-
-#endif /* __PVRUSB2_DEMOD_H */
-
-/*
-  Stuff for Emacs to see, in order to encourage consistent editing style:
-  *** Local Variables: ***
-  *** mode: c ***
-  *** fill-column: 70 ***
-  *** tab-width: 8 ***
-  *** c-basic-offset: 8 ***
-  *** End: ***
-  */

+ 2 - 2
drivers/media/video/pvrusb2/pvrusb2-eeprom.c

@@ -58,7 +58,7 @@ static u8 *pvr2_eeprom_fetch(struct pvr2_hdw *hdw)
 		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
 			   "Failed to allocate memory"
 			   " required to read eeprom");
-		return 0;
+		return NULL;
 	}
 
 	trace_eeprom("Value for eeprom addr from controller was 0x%x",
@@ -108,7 +108,7 @@ static u8 *pvr2_eeprom_fetch(struct pvr2_hdw *hdw)
 			pvr2_trace(PVR2_TRACE_ERROR_LEGS,
 				   "eeprom fetch set offs err=%d",ret);
 			kfree(eeprom);
-			return 0;
+			return NULL;
 		}
 	}
 	return eeprom;

+ 2 - 2
drivers/media/video/pvrusb2/pvrusb2-encoder.c

@@ -65,7 +65,7 @@ static int pvr2_encoder_write_words(struct pvr2_hdw *hdw,
 		}
 		ret = pvr2_send_request(hdw,
 					hdw->cmd_buffer,1+(chunkCnt*7),
-					0,0);
+					NULL,0);
 		if (ret) return ret;
 		data += chunkCnt;
 		dlen -= chunkCnt;
@@ -322,7 +322,7 @@ int pvr2_encoder_configure(struct pvr2_hdw *hdw)
 	}
 
 	ret = cx2341x_update(hdw,pvr2_encoder_cmd,
-			     (hdw->enc_cur_valid ? &hdw->enc_cur_state : 0),
+			     (hdw->enc_cur_valid ? &hdw->enc_cur_state : NULL),
 			     &hdw->enc_ctl_state);
 	if (ret) {
 		pvr2_trace(PVR2_TRACE_ERROR_LEGS,

+ 0 - 17
drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h

@@ -354,23 +354,6 @@ struct pvr2_hdw {
 	unsigned int control_cnt;
 };
 
-int pvr2_hdw_commit_ctl_internal(struct pvr2_hdw *hdw);
-
-unsigned int pvr2_hdw_get_signal_status_internal(struct pvr2_hdw *);
-
-void pvr2_hdw_subsys_bit_chg_no_lock(struct pvr2_hdw *hdw,
-				     unsigned long msk,unsigned long val);
-void pvr2_hdw_subsys_stream_bit_chg_no_lock(struct pvr2_hdw *hdw,
-					    unsigned long msk,
-					    unsigned long val);
-
-void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw);
-void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw);
-
-int pvr2_i2c_basic_op(struct pvr2_hdw *,u8 i2c_addr,
-		      u8 *wdata,u16 wlen,
-		      u8 *rdata,u16 rlen);
-
 #endif /* __PVRUSB2_HDW_INTERNAL_H */
 
 /*

+ 73 - 99
drivers/media/video/pvrusb2/pvrusb2-hdw.c

@@ -63,7 +63,6 @@ struct pvr2_string_table {
 static const char *pvr2_client_24xxx[] = {
 	"cx25840",
 	"tuner",
-	"tda9887",
 	"wm8775",
 };
 #endif
@@ -73,7 +72,6 @@ static const char *pvr2_client_29xxx[] = {
 	"msp3400",
 	"saa7115",
 	"tuner",
-	"tda9887",
 };
 
 static struct pvr2_string_table pvr2_client_lists[] = {
@@ -89,8 +87,8 @@ static struct pvr2_string_table pvr2_client_lists[] = {
 #endif
 };
 
-static struct pvr2_hdw *unit_pointers[PVR_NUM] = {[ 0 ... PVR_NUM-1 ] = 0};
-DECLARE_MUTEX(pvr2_unit_sem);
+static struct pvr2_hdw *unit_pointers[PVR_NUM] = {[ 0 ... PVR_NUM-1 ] = NULL};
+static DECLARE_MUTEX(pvr2_unit_sem);
 
 static int ctlchg = 0;
 static int initusbreset = 1;
@@ -263,6 +261,25 @@ static const char *control_values_subsystem[] = {
 	[PVR2_SUBSYS_B_ENC_RUN] = "enc_run",
 };
 
+static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
+static int pvr2_hdw_commit_ctl_internal(struct pvr2_hdw *hdw);
+static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw);
+static unsigned int pvr2_hdw_get_signal_status_internal(struct pvr2_hdw *hdw);
+static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw);
+static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw);
+static void pvr2_hdw_render_useless_unlocked(struct pvr2_hdw *hdw);
+static void pvr2_hdw_subsys_bit_chg_no_lock(struct pvr2_hdw *hdw,
+					    unsigned long msk,
+					    unsigned long val);
+static void pvr2_hdw_subsys_stream_bit_chg_no_lock(struct pvr2_hdw *hdw,
+						   unsigned long msk,
+						   unsigned long val);
+static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
+				unsigned int timeout,int probe_fl,
+				void *write_data,unsigned int write_len,
+				void *read_data,unsigned int read_len);
+static int pvr2_write_u16(struct pvr2_hdw *hdw, u16 data, int res);
+static int pvr2_write_u8(struct pvr2_hdw *hdw, u8 data, int res);
 
 static int ctrl_channelfreq_get(struct pvr2_ctrl *cptr,int *vp)
 {
@@ -405,7 +422,7 @@ static unsigned int ctrl_cx2341x_getv4lflags(struct pvr2_ctrl *cptr)
 	info = (struct pvr2_ctl_info *)(cptr->info);
 	if (qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY) {
 		if (info->set_value) {
-			info->set_value = 0;
+			info->set_value = NULL;
 		}
 	} else {
 		if (!(info->set_value)) {
@@ -836,14 +853,6 @@ unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *hdw)
 }
 
 
-struct pvr2_hdw *pvr2_hdw_find(int unit_number)
-{
-	if (unit_number < 0) return 0;
-	if (unit_number >= PVR_NUM) return 0;
-	return unit_pointers[unit_number];
-}
-
-
 int pvr2_hdw_get_unit_number(struct pvr2_hdw *hdw)
 {
 	return hdw->unit_number;
@@ -917,9 +926,9 @@ static int pvr2_locate_firmware(struct pvr2_hdw *hdw,
  * is not suitable for an usb transaction.
  *
  */
-int pvr2_upload_firmware1(struct pvr2_hdw *hdw)
+static int pvr2_upload_firmware1(struct pvr2_hdw *hdw)
 {
-	const struct firmware *fw_entry = 0;
+	const struct firmware *fw_entry = NULL;
 	void  *fw_ptr;
 	unsigned int pipe;
 	int ret;
@@ -1015,7 +1024,7 @@ int pvr2_upload_firmware1(struct pvr2_hdw *hdw)
 
 int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
 {
-	const struct firmware *fw_entry = 0;
+	const struct firmware *fw_entry = NULL;
 	void  *fw_ptr;
 	unsigned int pipe, fw_len, fw_done;
 	int actual_length;
@@ -1166,8 +1175,9 @@ int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
   reconfigure and start over.
 
 */
-void pvr2_hdw_subsys_bit_chg_no_lock(struct pvr2_hdw *hdw,
-				     unsigned long msk,unsigned long val)
+static void pvr2_hdw_subsys_bit_chg_no_lock(struct pvr2_hdw *hdw,
+					    unsigned long msk,
+					    unsigned long val)
 {
 	unsigned long nmsk;
 	unsigned long vmsk;
@@ -1318,18 +1328,6 @@ void pvr2_hdw_subsys_bit_chg(struct pvr2_hdw *hdw,
 }
 
 
-void pvr2_hdw_subsys_bit_set(struct pvr2_hdw *hdw,unsigned long msk)
-{
-	pvr2_hdw_subsys_bit_chg(hdw,msk,msk);
-}
-
-
-void pvr2_hdw_subsys_bit_clr(struct pvr2_hdw *hdw,unsigned long msk)
-{
-	pvr2_hdw_subsys_bit_chg(hdw,msk,0);
-}
-
-
 unsigned long pvr2_hdw_subsys_get(struct pvr2_hdw *hdw)
 {
 	return hdw->subsys_enabled_mask;
@@ -1342,9 +1340,9 @@ unsigned long pvr2_hdw_subsys_stream_get(struct pvr2_hdw *hdw)
 }
 
 
-void pvr2_hdw_subsys_stream_bit_chg_no_lock(struct pvr2_hdw *hdw,
-					    unsigned long msk,
-					    unsigned long val)
+static void pvr2_hdw_subsys_stream_bit_chg_no_lock(struct pvr2_hdw *hdw,
+						   unsigned long msk,
+						   unsigned long val)
 {
 	unsigned long val2;
 	msk &= PVR2_SUBSYS_ALL;
@@ -1366,7 +1364,7 @@ void pvr2_hdw_subsys_stream_bit_chg(struct pvr2_hdw *hdw,
 }
 
 
-int pvr2_hdw_set_streaming_no_lock(struct pvr2_hdw *hdw,int enableFl)
+static int pvr2_hdw_set_streaming_no_lock(struct pvr2_hdw *hdw,int enableFl)
 {
 	if ((!enableFl) == !(hdw->flag_streaming_enabled)) return 0;
 	if (enableFl) {
@@ -1400,8 +1398,8 @@ int pvr2_hdw_set_streaming(struct pvr2_hdw *hdw,int enable_flag)
 }
 
 
-int pvr2_hdw_set_stream_type_no_lock(struct pvr2_hdw *hdw,
-				     enum pvr2_config config)
+static int pvr2_hdw_set_stream_type_no_lock(struct pvr2_hdw *hdw,
+					    enum pvr2_config config)
 {
 	unsigned long sm = hdw->subsys_enabled_mask;
 	if (!hdw->flag_ok) return -EIO;
@@ -1741,7 +1739,7 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
 	    sizeof(pvr2_device_names)/sizeof(pvr2_device_names[0])) {
 		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
 			   "Bogus device type of %u reported",hdw_type);
-		return 0;
+		return NULL;
 	}
 
 	hdw = kmalloc(sizeof(*hdw),GFP_KERNEL);
@@ -1922,38 +1920,38 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
 		if (hdw->mpeg_ctrl_info) kfree(hdw->mpeg_ctrl_info);
 		kfree(hdw);
 	}
-	return 0;
+	return NULL;
 }
 
 
 /* Remove _all_ associations between this driver and the underlying USB
    layer. */
-void pvr2_hdw_remove_usb_stuff(struct pvr2_hdw *hdw)
+static void pvr2_hdw_remove_usb_stuff(struct pvr2_hdw *hdw)
 {
 	if (hdw->flag_disconnected) return;
 	pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_remove_usb_stuff: hdw=%p",hdw);
 	if (hdw->ctl_read_urb) {
 		usb_kill_urb(hdw->ctl_read_urb);
 		usb_free_urb(hdw->ctl_read_urb);
-		hdw->ctl_read_urb = 0;
+		hdw->ctl_read_urb = NULL;
 	}
 	if (hdw->ctl_write_urb) {
 		usb_kill_urb(hdw->ctl_write_urb);
 		usb_free_urb(hdw->ctl_write_urb);
-		hdw->ctl_write_urb = 0;
+		hdw->ctl_write_urb = NULL;
 	}
 	if (hdw->ctl_read_buffer) {
 		kfree(hdw->ctl_read_buffer);
-		hdw->ctl_read_buffer = 0;
+		hdw->ctl_read_buffer = NULL;
 	}
 	if (hdw->ctl_write_buffer) {
 		kfree(hdw->ctl_write_buffer);
-		hdw->ctl_write_buffer = 0;
+		hdw->ctl_write_buffer = NULL;
 	}
 	pvr2_hdw_render_useless_unlocked(hdw);
 	hdw->flag_disconnected = !0;
-	hdw->usb_dev = 0;
-	hdw->usb_intf = 0;
+	hdw->usb_dev = NULL;
+	hdw->usb_intf = NULL;
 }
 
 
@@ -1963,11 +1961,11 @@ void pvr2_hdw_destroy(struct pvr2_hdw *hdw)
 	pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_destroy: hdw=%p",hdw);
 	if (hdw->fw_buffer) {
 		kfree(hdw->fw_buffer);
-		hdw->fw_buffer = 0;
+		hdw->fw_buffer = NULL;
 	}
 	if (hdw->vid_stream) {
 		pvr2_stream_destroy(hdw->vid_stream);
-		hdw->vid_stream = 0;
+		hdw->vid_stream = NULL;
 	}
 	if (hdw->audio_stat) {
 		hdw->audio_stat->detach(hdw->audio_stat->ctxt);
@@ -1981,7 +1979,7 @@ void pvr2_hdw_destroy(struct pvr2_hdw *hdw)
 		if ((hdw->unit_number >= 0) &&
 		    (hdw->unit_number < PVR_NUM) &&
 		    (unit_pointers[hdw->unit_number] == hdw)) {
-			unit_pointers[hdw->unit_number] = 0;
+			unit_pointers[hdw->unit_number] = NULL;
 		}
 	} while (0); up(&pvr2_unit_sem);
 	if (hdw->controls) kfree(hdw->controls);
@@ -2018,7 +2016,7 @@ void pvr2_hdw_disconnect(struct pvr2_hdw *hdw)
 
 // Attempt to autoselect an appropriate value for std_enum_cur given
 // whatever is currently in std_mask_cur
-void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw)
+static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw)
 {
 	unsigned int idx;
 	for (idx = 1; idx < hdw->std_enum_cnt; idx++) {
@@ -2033,7 +2031,7 @@ void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw)
 
 // Calculate correct set of enumerated standards based on currently known
 // set of available standards bits.
-void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw)
+static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw)
 {
 	struct v4l2_standard *newstd;
 	unsigned int std_cnt;
@@ -2043,12 +2041,12 @@ void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw)
 
 	if (hdw->std_defs) {
 		kfree(hdw->std_defs);
-		hdw->std_defs = 0;
+		hdw->std_defs = NULL;
 	}
 	hdw->std_enum_cnt = 0;
 	if (hdw->std_enum_names) {
 		kfree(hdw->std_enum_names);
-		hdw->std_enum_names = 0;
+		hdw->std_enum_names = NULL;
 	}
 
 	if (!std_cnt) {
@@ -2099,7 +2097,7 @@ unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw *hdw)
 struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_index(struct pvr2_hdw *hdw,
 					     unsigned int idx)
 {
-	if (idx >= hdw->control_cnt) return 0;
+	if (idx >= hdw->control_cnt) return NULL;
 	return hdw->controls + idx;
 }
 
@@ -2118,7 +2116,7 @@ struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw *hdw,
 		i = cptr->info->internal_id;
 		if (i && (i == ctl_id)) return cptr;
 	}
-	return 0;
+	return NULL;
 }
 
 
@@ -2135,7 +2133,7 @@ struct pvr2_ctrl *pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw *hdw,unsigned int ctl_id
 		i = cptr->info->v4l_id;
 		if (i && (i == ctl_id)) return cptr;
 	}
-	return 0;
+	return NULL;
 }
 
 
@@ -2149,7 +2147,7 @@ struct pvr2_ctrl *pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw *hdw,
 	int i;
 
 	/* This could be made a lot more efficient, but for now... */
-	cp2 = 0;
+	cp2 = NULL;
 	for (idx = 0; idx < hdw->control_cnt; idx++) {
 		cptr = hdw->controls + idx;
 		i = cptr->info->v4l_id;
@@ -2159,7 +2157,7 @@ struct pvr2_ctrl *pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw *hdw,
 		cp2 = cptr;
 	}
 	return cp2;
-	return 0;
+	return NULL;
 }
 
 
@@ -2182,7 +2180,7 @@ static const char *get_ctrl_typename(enum pvr2_ctl_type tp)
    state(s) back to their previous value before this function was called.
    Thus we can automatically reconfigure affected pieces of the driver as
    controls are changed. */
-int pvr2_hdw_commit_ctl_internal(struct pvr2_hdw *hdw)
+static int pvr2_hdw_commit_ctl_internal(struct pvr2_hdw *hdw)
 {
 	unsigned long saved_subsys_mask = hdw->subsys_enabled_mask;
 	unsigned long stale_subsys_mask = 0;
@@ -2321,14 +2319,6 @@ void pvr2_hdw_poll_trigger_unlocked(struct pvr2_hdw *hdw)
 }
 
 
-void pvr2_hdw_poll_trigger(struct pvr2_hdw *hdw)
-{
-	LOCK_TAKE(hdw->big_lock); do {
-		pvr2_hdw_poll_trigger_unlocked(hdw);
-	} while (0); LOCK_GIVE(hdw->big_lock);
-}
-
-
 /* Return name for this driver instance */
 const char *pvr2_hdw_get_driver_name(struct pvr2_hdw *hdw)
 {
@@ -2337,7 +2327,7 @@ const char *pvr2_hdw_get_driver_name(struct pvr2_hdw *hdw)
 
 
 /* Return bit mask indicating signal status */
-unsigned int pvr2_hdw_get_signal_status_internal(struct pvr2_hdw *hdw)
+static unsigned int pvr2_hdw_get_signal_status_internal(struct pvr2_hdw *hdw)
 {
 	unsigned int msk = 0;
 	switch (hdw->input_val) {
@@ -2424,7 +2414,7 @@ void pvr2_hdw_cpufw_set_enabled(struct pvr2_hdw *hdw, int enable_flag)
 			pvr2_trace(PVR2_TRACE_FIRMWARE,
 				   "Cleaning up after CPU firmware fetch");
 			kfree(hdw->fw_buffer);
-			hdw->fw_buffer = 0;
+			hdw->fw_buffer = NULL;
 			hdw->fw_size = 0;
 			/* Now release the CPU.  It will disconnect and
 			   reconnect later. */
@@ -2519,22 +2509,6 @@ void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *hdw,int v)
 }
 
 
-void pvr2_reset_ctl_endpoints(struct pvr2_hdw *hdw)
-{
-	if (!hdw->usb_dev) return;
-	usb_settoggle(hdw->usb_dev, PVR2_CTL_WRITE_ENDPOINT & 0xf,
-		      !(PVR2_CTL_WRITE_ENDPOINT & USB_DIR_IN), 0);
-	usb_settoggle(hdw->usb_dev, PVR2_CTL_READ_ENDPOINT & 0xf,
-		      !(PVR2_CTL_READ_ENDPOINT & USB_DIR_IN), 0);
-	usb_clear_halt(hdw->usb_dev,
-		       usb_rcvbulkpipe(hdw->usb_dev,
-				       PVR2_CTL_READ_ENDPOINT & 0x7f));
-	usb_clear_halt(hdw->usb_dev,
-		       usb_sndbulkpipe(hdw->usb_dev,
-				       PVR2_CTL_WRITE_ENDPOINT & 0x7f));
-}
-
-
 static void pvr2_ctl_write_complete(struct urb *urb, struct pt_regs *regs)
 {
 	struct pvr2_hdw *hdw = urb->context;
@@ -2568,10 +2542,10 @@ static void pvr2_ctl_timeout(unsigned long data)
 }
 
 
-int pvr2_send_request_ex(struct pvr2_hdw *hdw,
-			 unsigned int timeout,int probe_fl,
-			 void *write_data,unsigned int write_len,
-			 void *read_data,unsigned int read_len)
+static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
+				unsigned int timeout,int probe_fl,
+				void *write_data,unsigned int write_len,
+				void *read_data,unsigned int read_len)
 {
 	unsigned int idx;
 	int status = 0;
@@ -2826,7 +2800,7 @@ int pvr2_write_register(struct pvr2_hdw *hdw, u16 reg, u32 data)
 }
 
 
-int pvr2_read_register(struct pvr2_hdw *hdw, u16 reg, u32 *data)
+static int pvr2_read_register(struct pvr2_hdw *hdw, u16 reg, u32 *data)
 {
 	int ret = 0;
 
@@ -2850,7 +2824,7 @@ int pvr2_read_register(struct pvr2_hdw *hdw, u16 reg, u32 *data)
 }
 
 
-int pvr2_write_u16(struct pvr2_hdw *hdw, u16 data, int res)
+static int pvr2_write_u16(struct pvr2_hdw *hdw, u16 data, int res)
 {
 	int ret;
 
@@ -2867,7 +2841,7 @@ int pvr2_write_u16(struct pvr2_hdw *hdw, u16 data, int res)
 }
 
 
-int pvr2_write_u8(struct pvr2_hdw *hdw, u8 data, int res)
+static int pvr2_write_u8(struct pvr2_hdw *hdw, u8 data, int res)
 {
 	int ret;
 
@@ -2883,13 +2857,13 @@ int pvr2_write_u8(struct pvr2_hdw *hdw, u8 data, int res)
 }
 
 
-void pvr2_hdw_render_useless_unlocked(struct pvr2_hdw *hdw)
+static void pvr2_hdw_render_useless_unlocked(struct pvr2_hdw *hdw)
 {
 	if (!hdw->flag_ok) return;
 	pvr2_trace(PVR2_TRACE_INIT,"render_useless");
 	hdw->flag_ok = 0;
 	if (hdw->vid_stream) {
-		pvr2_stream_setup(hdw->vid_stream,0,0,0);
+		pvr2_stream_setup(hdw->vid_stream,NULL,0,0);
 	}
 	hdw->flag_streaming_enabled = 0;
 	hdw->subsys_enabled_mask = 0;
@@ -2908,7 +2882,7 @@ void pvr2_hdw_device_reset(struct pvr2_hdw *hdw)
 {
 	int ret;
 	pvr2_trace(PVR2_TRACE_INIT,"Performing a device reset...");
-	ret = usb_lock_device_for_reset(hdw->usb_dev,0);
+	ret = usb_lock_device_for_reset(hdw->usb_dev,NULL);
 	if (ret == 1) {
 		ret = usb_reset_device(hdw->usb_dev);
 		usb_unlock_device(hdw->usb_dev);
@@ -2957,7 +2931,7 @@ int pvr2_hdw_cmd_deep_reset(struct pvr2_hdw *hdw)
 		pvr2_trace(PVR2_TRACE_INIT,"Requesting uproc hard reset");
 		hdw->flag_ok = !0;
 		hdw->cmd_buffer[0] = 0xdd;
-		status = pvr2_send_request(hdw,hdw->cmd_buffer,1,0,0);
+		status = pvr2_send_request(hdw,hdw->cmd_buffer,1,NULL,0);
 	} while (0); LOCK_GIVE(hdw->ctl_lock);
 	return status;
 }
@@ -2969,7 +2943,7 @@ int pvr2_hdw_cmd_powerup(struct pvr2_hdw *hdw)
 	LOCK_TAKE(hdw->ctl_lock); do {
 		pvr2_trace(PVR2_TRACE_INIT,"Requesting powerup");
 		hdw->cmd_buffer[0] = 0xde;
-		status = pvr2_send_request(hdw,hdw->cmd_buffer,1,0,0);
+		status = pvr2_send_request(hdw,hdw->cmd_buffer,1,NULL,0);
 	} while (0); LOCK_GIVE(hdw->ctl_lock);
 	return status;
 }
@@ -2996,12 +2970,12 @@ int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *hdw)
 }
 
 
-int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl)
+static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl)
 {
 	int status;
 	LOCK_TAKE(hdw->ctl_lock); do {
 		hdw->cmd_buffer[0] = (runFl ? 0x36 : 0x37);
-		status = pvr2_send_request(hdw,hdw->cmd_buffer,1,0,0);
+		status = pvr2_send_request(hdw,hdw->cmd_buffer,1,NULL,0);
 	} while (0); LOCK_GIVE(hdw->ctl_lock);
 	if (!status) {
 		hdw->subsys_enabled_mask =
@@ -3094,7 +3068,7 @@ int pvr2_hdw_gpio_chg_out(struct pvr2_hdw *hdw,u32 msk,u32 val)
 }
 
 
-int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw)
+static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw)
 {
 	int result;
 	LOCK_TAKE(hdw->ctl_lock); do {

+ 0 - 32
drivers/media/video/pvrusb2/pvrusb2-hdw.h

@@ -91,7 +91,6 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
 void pvr2_hdw_poll(struct pvr2_hdw *);
 
 /* Trigger a poll to take place later at a convenient time */
-void pvr2_hdw_poll_trigger(struct pvr2_hdw *);
 void pvr2_hdw_poll_trigger_unlocked(struct pvr2_hdw *);
 
 /* Register a callback used to trigger a future poll */
@@ -99,9 +98,6 @@ void pvr2_hdw_setup_poll_trigger(struct pvr2_hdw *,
 				 void (*func)(void *),
 				 void *data);
 
-/* Get pointer to structure given unit number */
-struct pvr2_hdw *pvr2_hdw_find(int unit_number);
-
 /* Destroy hardware interaction structure */
 void pvr2_hdw_destroy(struct pvr2_hdw *);
 
@@ -180,12 +176,6 @@ int pvr2_hdw_get_stdenum_value(struct pvr2_hdw *hdw,struct v4l2_standard *std,
 void pvr2_hdw_subsys_bit_chg(struct pvr2_hdw *hdw,
 			     unsigned long msk,unsigned long val);
 
-/* Shortcut for pvr2_hdw_subsys_bit_chg(hdw,msk,msk) */
-void pvr2_hdw_subsys_bit_set(struct pvr2_hdw *hdw,unsigned long msk);
-
-/* Shortcut for pvr2_hdw_subsys_bit_chg(hdw,msk,0) */
-void pvr2_hdw_subsys_bit_clr(struct pvr2_hdw *hdw,unsigned long msk);
-
 /* Retrieve mask indicating which pieces of hardware are currently enabled
    / configured. */
 unsigned long pvr2_hdw_subsys_get(struct pvr2_hdw *);
@@ -225,34 +215,18 @@ void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *,int);
 /* The following entry points are all lower level things you normally don't
    want to worry about. */
 
-/* Attempt to recover from a USB foul-up (in practice I find that if you
-   have to do this, then it's already too late). */
-void pvr2_reset_ctl_endpoints(struct pvr2_hdw *hdw);
-
 /* Issue a command and get a response from the device.  LOTS of higher
    level stuff is built on this. */
 int pvr2_send_request(struct pvr2_hdw *,
 		      void *write_ptr,unsigned int write_len,
 		      void *read_ptr,unsigned int read_len);
 
-/* Issue a command and get a response from the device.  This extended
-   version includes a probe flag (which if set means that device errors
-   should not be logged or treated as fatal) and a timeout in jiffies.
-   This can be used to non-lethally probe the health of endpoint 1. */
-int pvr2_send_request_ex(struct pvr2_hdw *,unsigned int timeout,int probe_fl,
-			 void *write_ptr,unsigned int write_len,
-			 void *read_ptr,unsigned int read_len);
-
 /* Slightly higher level device communication functions. */
 int pvr2_write_register(struct pvr2_hdw *, u16, u32);
-int pvr2_read_register(struct pvr2_hdw *, u16, u32 *);
-int pvr2_write_u16(struct pvr2_hdw *, u16, int);
-int pvr2_write_u8(struct pvr2_hdw *, u8, int);
 
 /* Call if for any reason we can't talk to the hardware anymore - this will
    cause the driver to stop flailing on the device. */
 void pvr2_hdw_render_useless(struct pvr2_hdw *);
-void pvr2_hdw_render_useless_unlocked(struct pvr2_hdw *);
 
 /* Set / clear 8051's reset bit */
 void pvr2_hdw_cpureset_assert(struct pvr2_hdw *,int);
@@ -271,12 +245,6 @@ int pvr2_hdw_cmd_powerup(struct pvr2_hdw *);
 /* Order decoder to reset */
 int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *);
 
-/* Stop / start video stream transport */
-int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
-
-/* Find I2C address of eeprom */
-int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *);
-
 /* Direct manipulation of GPIO bits */
 int pvr2_hdw_gpio_get_dir(struct pvr2_hdw *hdw,u32 *);
 int pvr2_hdw_gpio_get_out(struct pvr2_hdw *hdw,u32 *);

+ 0 - 6
drivers/media/video/pvrusb2/pvrusb2-i2c-chips-v4l2.c

@@ -25,7 +25,6 @@
 #include "pvrusb2-i2c-cmd-v4l2.h"
 #include "pvrusb2-audio.h"
 #include "pvrusb2-tuner.h"
-#include "pvrusb2-demod.h"
 #include "pvrusb2-video-v4l.h"
 #ifdef CONFIG_VIDEO_PVRUSB2_24XXX
 #include "pvrusb2-cx2584x-v4l.h"
@@ -89,11 +88,6 @@ void pvr2_i2c_probe(struct pvr2_hdw *hdw,struct pvr2_i2c_client *cp)
 			return;
 		}
 	}
-	if (id == I2C_DRIVERID_TDA9887) {
-		if (pvr2_i2c_demod_setup(hdw,cp)) {
-			return;
-		}
-	}
 }
 
 

+ 2 - 2
drivers/media/video/pvrusb2/pvrusb2-i2c-cmd-v4l2.c

@@ -196,7 +196,7 @@ const struct pvr2_i2c_op pvr2_i2c_op_v4l2_size = {
 static void do_log(struct pvr2_hdw *hdw)
 {
 	pvr2_trace(PVR2_TRACE_CHIPS,"i2c v4l2 do_log()");
-	pvr2_i2c_core_cmd(hdw,VIDIOC_LOG_STATUS,0);
+	pvr2_i2c_core_cmd(hdw,VIDIOC_LOG_STATUS,NULL);
 
 }
 
@@ -217,7 +217,7 @@ const struct pvr2_i2c_op pvr2_i2c_op_v4l2_log = {
 void pvr2_v4l2_cmd_stream(struct pvr2_i2c_client *cp,int fl)
 {
 	pvr2_i2c_client_cmd(cp,
-			    (fl ? VIDIOC_STREAMON : VIDIOC_STREAMOFF),0);
+			    (fl ? VIDIOC_STREAMON : VIDIOC_STREAMOFF),NULL);
 }
 
 

+ 19 - 15
drivers/media/video/pvrusb2/pvrusb2-i2c-core.c

@@ -37,6 +37,10 @@ static unsigned int i2c_scan = 0;
 module_param(i2c_scan, int, S_IRUGO|S_IWUSR);
 MODULE_PARM_DESC(i2c_scan,"scan i2c bus at insmod time");
 
+static unsigned int pvr2_i2c_client_describe(struct pvr2_i2c_client *cp,
+					     unsigned int detail,
+					     char *buf,unsigned int maxlen);
+
 static int pvr2_i2c_write(struct pvr2_hdw *hdw, /* Context */
 			  u8 i2c_addr,      /* I2C address we're talking to */
 			  u8 *data,         /* Data to write */
@@ -165,12 +169,12 @@ static int pvr2_i2c_read(struct pvr2_hdw *hdw, /* Context */
 
 /* This is the common low level entry point for doing I2C operations to the
    hardware. */
-int pvr2_i2c_basic_op(struct pvr2_hdw *hdw,
-		      u8 i2c_addr,
-		      u8 *wdata,
-		      u16 wlen,
-		      u8 *rdata,
-		      u16 rlen)
+static int pvr2_i2c_basic_op(struct pvr2_hdw *hdw,
+			     u8 i2c_addr,
+			     u8 *wdata,
+			     u16 wlen,
+			     u8 *rdata,
+			     u16 rlen)
 {
 	if (!rdata) rlen = 0;
 	if (!wdata) wlen = 0;
@@ -267,7 +271,7 @@ static int i2c_hack_cx25840(struct pvr2_hdw *hdw,
 			   "WARNING: Disabling further access to the device"
 			   " to prevent other foul-ups.");
 		// This blocks all further communication with the part.
-		hdw->i2c_func[0x44] = 0;
+		hdw->i2c_func[0x44] = NULL;
 		pvr2_hdw_render_useless(hdw);
 		goto fail;
 	}
@@ -294,7 +298,7 @@ static int pvr2_i2c_xfer(struct i2c_adapter *i2c_adap,
 			 int num)
 {
 	int ret = -ENOTSUPP;
-	pvr2_i2c_func funcp = 0;
+	pvr2_i2c_func funcp = NULL;
 	struct pvr2_hdw *hdw = (struct pvr2_hdw *)(i2c_adap->algo_data);
 
 	if (!num) {
@@ -319,7 +323,7 @@ static int pvr2_i2c_xfer(struct i2c_adapter *i2c_adap,
 			u16 tcnt,bcnt,offs;
 			if (!msgs[0].len) {
 				/* Length == 0 read.  This is a probe. */
-				if (funcp(hdw,msgs[0].addr,0,0,0,0)) {
+				if (funcp(hdw,msgs[0].addr,NULL,0,NULL,0)) {
 					ret = -EIO;
 					goto done;
 				}
@@ -336,7 +340,7 @@ static int pvr2_i2c_xfer(struct i2c_adapter *i2c_adap,
 				if (bcnt > sizeof(hdw->cmd_buffer)-1) {
 					bcnt = sizeof(hdw->cmd_buffer)-1;
 				}
-				if (funcp(hdw,msgs[0].addr,0,0,
+				if (funcp(hdw,msgs[0].addr,NULL,0,
 					  msgs[0].buf+offs,bcnt)) {
 					ret = -EIO;
 					goto done;
@@ -350,7 +354,7 @@ static int pvr2_i2c_xfer(struct i2c_adapter *i2c_adap,
 			/* Simple write */
 			ret = 1;
 			if (funcp(hdw,msgs[0].addr,
-				  msgs[0].buf,msgs[0].len,0,0)) {
+				  msgs[0].buf,msgs[0].len,NULL,0)) {
 				ret = -EIO;
 			}
 			goto done;
@@ -705,9 +709,9 @@ int pvr2_i2c_core_check_stale(struct pvr2_hdw *hdw)
 	return (hdw->i2c_pend_types & PVR2_I2C_PEND_ALL) != 0;
 }
 
-unsigned int pvr2_i2c_client_describe(struct pvr2_i2c_client *cp,
-				      unsigned int detail,
-				      char *buf,unsigned int maxlen)
+static unsigned int pvr2_i2c_client_describe(struct pvr2_i2c_client *cp,
+					     unsigned int detail,
+					     char *buf,unsigned int maxlen)
 {
 	unsigned int ccnt,bcnt;
 	int spcfl = 0;
@@ -871,7 +875,7 @@ static void do_i2c_scan(struct pvr2_hdw *hdw)
 	msg[0].addr = 0;
 	msg[0].flags = I2C_M_RD;
 	msg[0].len = 0;
-	msg[0].buf = 0;
+	msg[0].buf = NULL;
 	printk("%s: i2c scan beginning\n",hdw->name);
 	for (i = 0; i < 128; i++) {
 		msg[0].addr = i;

+ 0 - 3
drivers/media/video/pvrusb2/pvrusb2-i2c-core.h

@@ -75,9 +75,6 @@ unsigned int pvr2_i2c_report(struct pvr2_hdw *,char *buf,unsigned int maxlen);
 	PVR2_I2C_DETAIL_DEBUG |\
 	PVR2_I2C_DETAIL_HANDLER |\
 	PVR2_I2C_DETAIL_CTLMASK)
-unsigned int pvr2_i2c_client_describe(struct pvr2_i2c_client *,
-				      unsigned int detail_mask,
-				      char *buf,unsigned int maxlen);
 
 void pvr2_i2c_probe(struct pvr2_hdw *,struct pvr2_i2c_client *);
 const struct pvr2_i2c_op *pvr2_i2c_get_op(unsigned int idx);

+ 13 - 44
drivers/media/video/pvrusb2/pvrusb2-io.c

@@ -93,7 +93,7 @@ struct pvr2_buffer {
 	struct urb *purb;
 };
 
-const char *pvr2_buffer_state_decode(enum pvr2_buffer_state st)
+static const char *pvr2_buffer_state_decode(enum pvr2_buffer_state st)
 {
 	switch (st) {
 	case pvr2_buffer_state_none: return "none";
@@ -104,7 +104,8 @@ const char *pvr2_buffer_state_decode(enum pvr2_buffer_state st)
 	return "unknown";
 }
 
-void pvr2_buffer_describe(struct pvr2_buffer *bp,const char *msg)
+#ifdef SANITY_CHECK_BUFFERS
+static void pvr2_buffer_describe(struct pvr2_buffer *bp,const char *msg)
 {
 	pvr2_trace(PVR2_TRACE_INFO,
 		   "buffer%s%s %p state=%s id=%d status=%d"
@@ -115,10 +116,11 @@ void pvr2_buffer_describe(struct pvr2_buffer *bp,const char *msg)
 		   (bp ? pvr2_buffer_state_decode(bp->state) : "(invalid)"),
 		   (bp ? bp->id : 0),
 		   (bp ? bp->status : 0),
-		   (bp ? bp->stream : 0),
-		   (bp ? bp->purb : 0),
+		   (bp ? bp->stream : NULL),
+		   (bp ? bp->purb : NULL),
 		   (bp ? bp->signature : 0));
 }
+#endif  /*  SANITY_CHECK_BUFFERS  */
 
 static void pvr2_buffer_remove(struct pvr2_buffer *bp)
 {
@@ -284,7 +286,7 @@ static void pvr2_buffer_done(struct pvr2_buffer *bp)
 	pvr2_buffer_wipe(bp);
 	pvr2_buffer_set_none(bp);
 	bp->signature = 0;
-	bp->stream = 0;
+	bp->stream = NULL;
 	if (bp->purb) usb_free_urb(bp->purb);
 	pvr2_trace(PVR2_TRACE_BUF_POOL,"/*---TRACE_FLOW---*/"
 		   " bufferDone     %p",bp);
@@ -339,13 +341,13 @@ static int pvr2_stream_buffer_count(struct pvr2_stream *sp,unsigned int cnt)
 			struct pvr2_buffer *bp;
 			bp = sp->buffers[sp->buffer_total_count - 1];
 			/* Paranoia */
-			sp->buffers[sp->buffer_total_count - 1] = 0;
+			sp->buffers[sp->buffer_total_count - 1] = NULL;
 			(sp->buffer_total_count)--;
 			pvr2_buffer_done(bp);
 			kfree(bp);
 		}
 		if (scnt < sp->buffer_slot_count) {
-			struct pvr2_buffer **nb = 0;
+			struct pvr2_buffer **nb = NULL;
 			if (scnt) {
 				nb = kmalloc(scnt * sizeof(*nb),GFP_KERNEL);
 				if (!nb) return -ENOMEM;
@@ -513,10 +515,6 @@ void pvr2_stream_set_callback(struct pvr2_stream *sp,
 }
 
 /* Query / set the nominal buffer count */
-int pvr2_stream_get_buffer_count(struct pvr2_stream *sp)
-{
-	return sp->buffer_target_count;
-}
 
 int pvr2_stream_set_buffer_count(struct pvr2_stream *sp,unsigned int cnt)
 {
@@ -532,21 +530,21 @@ int pvr2_stream_set_buffer_count(struct pvr2_stream *sp,unsigned int cnt)
 struct pvr2_buffer *pvr2_stream_get_idle_buffer(struct pvr2_stream *sp)
 {
 	struct list_head *lp = sp->idle_list.next;
-	if (lp == &sp->idle_list) return 0;
+	if (lp == &sp->idle_list) return NULL;
 	return list_entry(lp,struct pvr2_buffer,list_overhead);
 }
 
 struct pvr2_buffer *pvr2_stream_get_ready_buffer(struct pvr2_stream *sp)
 {
 	struct list_head *lp = sp->ready_list.next;
-	if (lp == &sp->ready_list) return 0;
+	if (lp == &sp->ready_list) return NULL;
 	return list_entry(lp,struct pvr2_buffer,list_overhead);
 }
 
 struct pvr2_buffer *pvr2_stream_get_buffer(struct pvr2_stream *sp,int id)
 {
-	if (id < 0) return 0;
-	if (id >= sp->buffer_total_count) return 0;
+	if (id < 0) return NULL;
+	if (id >= sp->buffer_total_count) return NULL;
 	return sp->buffers[id];
 }
 
@@ -555,17 +553,6 @@ int pvr2_stream_get_ready_count(struct pvr2_stream *sp)
 	return sp->r_count;
 }
 
-int pvr2_stream_get_idle_count(struct pvr2_stream *sp)
-{
-	return sp->i_count;
-}
-
-void pvr2_stream_flush(struct pvr2_stream *sp)
-{
-	mutex_lock(&sp->mutex); do {
-		pvr2_stream_internal_flush(sp);
-	} while(0); mutex_unlock(&sp->mutex);
-}
 
 void pvr2_stream_kill(struct pvr2_stream *sp)
 {
@@ -620,20 +607,6 @@ int pvr2_buffer_queue(struct pvr2_buffer *bp)
 	return ret;
 }
 
-int pvr2_buffer_idle(struct pvr2_buffer *bp)
-{
-	struct pvr2_stream *sp;
-	if (!bp) return -EINVAL;
-	sp = bp->stream;
-	mutex_lock(&sp->mutex); do {
-		pvr2_buffer_wipe(bp);
-		pvr2_buffer_set_idle(bp);
-		if (sp->buffer_total_count != sp->buffer_target_count) {
-			pvr2_stream_achieve_buffer_count(sp);
-		}
-	} while(0); mutex_unlock(&sp->mutex);
-	return 0;
-}
 
 int pvr2_buffer_set_buffer(struct pvr2_buffer *bp,void *ptr,unsigned int cnt)
 {
@@ -673,10 +646,6 @@ int pvr2_buffer_get_status(struct pvr2_buffer *bp)
 	return bp->status;
 }
 
-enum pvr2_buffer_state pvr2_buffer_get_state(struct pvr2_buffer *bp)
-{
-	return bp->state;
-}
 
 int pvr2_buffer_get_id(struct pvr2_buffer *bp)
 {

+ 0 - 13
drivers/media/video/pvrusb2/pvrusb2-io.h

@@ -36,8 +36,6 @@ enum pvr2_buffer_state {
 struct pvr2_stream;
 struct pvr2_buffer;
 
-const char *pvr2_buffer_state_decode(enum pvr2_buffer_state);
-
 /* Initialize / tear down stream structure */
 struct pvr2_stream *pvr2_stream_create(void);
 void pvr2_stream_destroy(struct pvr2_stream *);
@@ -49,7 +47,6 @@ void pvr2_stream_set_callback(struct pvr2_stream *,
 			      void *data);
 
 /* Query / set the nominal buffer count */
-int pvr2_stream_get_buffer_count(struct pvr2_stream *);
 int pvr2_stream_set_buffer_count(struct pvr2_stream *,unsigned int);
 
 /* Get a pointer to a buffer that is either idle, ready, or is specified
@@ -59,12 +56,8 @@ struct pvr2_buffer *pvr2_stream_get_ready_buffer(struct pvr2_stream *);
 struct pvr2_buffer *pvr2_stream_get_buffer(struct pvr2_stream *sp,int id);
 
 /* Find out how many buffers are idle or ready */
-int pvr2_stream_get_idle_count(struct pvr2_stream *);
 int pvr2_stream_get_ready_count(struct pvr2_stream *);
 
-/* Kill all pending operations */
-void pvr2_stream_flush(struct pvr2_stream *);
-
 /* Kill all pending buffers and throw away any ready buffers as well */
 void pvr2_stream_kill(struct pvr2_stream *);
 
@@ -77,18 +70,12 @@ unsigned int pvr2_buffer_get_count(struct pvr2_buffer *);
 /* Retrieve completion code for given ready buffer */
 int pvr2_buffer_get_status(struct pvr2_buffer *);
 
-/* Retrieve state of given buffer */
-enum pvr2_buffer_state pvr2_buffer_get_state(struct pvr2_buffer *);
-
 /* Retrieve ID of given buffer */
 int pvr2_buffer_get_id(struct pvr2_buffer *);
 
 /* Start reading into given buffer (kill it if needed) */
 int pvr2_buffer_queue(struct pvr2_buffer *);
 
-/* Move buffer back to idle pool (kill it if needed) */
-int pvr2_buffer_idle(struct pvr2_buffer *);
-
 #endif /* __PVRUSB2_IO_H */
 
 /*

+ 15 - 19
drivers/media/video/pvrusb2/pvrusb2-ioread.c

@@ -54,7 +54,7 @@ static int pvr2_ioread_init(struct pvr2_ioread *cp)
 {
 	unsigned int idx;
 
-	cp->stream = 0;
+	cp->stream = NULL;
 	mutex_init(&cp->mutex);
 
 	for (idx = 0; idx < BUFFER_COUNT; idx++) {
@@ -77,7 +77,7 @@ static void pvr2_ioread_done(struct pvr2_ioread *cp)
 {
 	unsigned int idx;
 
-	pvr2_ioread_setup(cp,0);
+	pvr2_ioread_setup(cp,NULL);
 	for (idx = 0; idx < BUFFER_COUNT; idx++) {
 		if (!(cp->buffer_storage[idx])) continue;
 		kfree(cp->buffer_storage[idx]);
@@ -88,12 +88,12 @@ struct pvr2_ioread *pvr2_ioread_create(void)
 {
 	struct pvr2_ioread *cp;
 	cp = kmalloc(sizeof(*cp),GFP_KERNEL);
-	if (!cp) return 0;
+	if (!cp) return NULL;
 	pvr2_trace(PVR2_TRACE_STRUCT,"pvr2_ioread_create id=%p",cp);
 	memset(cp,0,sizeof(*cp));
 	if (pvr2_ioread_init(cp) < 0) {
 		kfree(cp);
-		return 0;
+		return NULL;
 	}
 	return cp;
 }
@@ -105,7 +105,7 @@ void pvr2_ioread_destroy(struct pvr2_ioread *cp)
 	pvr2_trace(PVR2_TRACE_STRUCT,"pvr2_ioread_destroy id=%p",cp);
 	if (cp->sync_key_ptr) {
 		kfree(cp->sync_key_ptr);
-		cp->sync_key_ptr = 0;
+		cp->sync_key_ptr = NULL;
 	}
 	kfree(cp);
 }
@@ -124,7 +124,7 @@ void pvr2_ioread_set_sync_key(struct pvr2_ioread *cp,
 	if (sync_key_len != cp->sync_key_len) {
 		if (cp->sync_key_ptr) {
 			kfree(cp->sync_key_ptr);
-			cp->sync_key_ptr = 0;
+			cp->sync_key_ptr = NULL;
 		}
 		cp->sync_key_len = 0;
 		if (sync_key_len) {
@@ -144,8 +144,8 @@ static void pvr2_ioread_stop(struct pvr2_ioread *cp)
 	pvr2_trace(PVR2_TRACE_START_STOP,
 		   "/*---TRACE_READ---*/ pvr2_ioread_stop id=%p",cp);
 	pvr2_stream_kill(cp->stream);
-	cp->c_buf = 0;
-	cp->c_data_ptr = 0;
+	cp->c_buf = NULL;
+	cp->c_data_ptr = NULL;
 	cp->c_data_len = 0;
 	cp->c_data_offs = 0;
 	cp->enabled = 0;
@@ -179,8 +179,8 @@ static int pvr2_ioread_start(struct pvr2_ioread *cp)
 		}
 	}
 	cp->enabled = !0;
-	cp->c_buf = 0;
-	cp->c_data_ptr = 0;
+	cp->c_buf = NULL;
+	cp->c_data_ptr = NULL;
 	cp->c_data_len = 0;
 	cp->c_data_offs = 0;
 	cp->stream_running = 0;
@@ -214,7 +214,7 @@ int pvr2_ioread_setup(struct pvr2_ioread *cp,struct pvr2_stream *sp)
 			pvr2_ioread_stop(cp);
 			pvr2_stream_kill(cp->stream);
 			pvr2_stream_set_buffer_count(cp->stream,0);
-			cp->stream = 0;
+			cp->stream = NULL;
 		}
 		if (sp) {
 			pvr2_trace(PVR2_TRACE_START_STOP,
@@ -251,12 +251,8 @@ int pvr2_ioread_set_enabled(struct pvr2_ioread *cp,int fl)
 	return ret;
 }
 
-int pvr2_ioread_get_enabled(struct pvr2_ioread *cp)
-{
-	return cp->enabled != 0;
-}
 
-int pvr2_ioread_get_buffer(struct pvr2_ioread *cp)
+static int pvr2_ioread_get_buffer(struct pvr2_ioread *cp)
 {
 	int stat;
 
@@ -274,8 +270,8 @@ int pvr2_ioread_get_buffer(struct pvr2_ioread *cp)
 				pvr2_ioread_stop(cp);
 				return 0;
 			}
-			cp->c_buf = 0;
-			cp->c_data_ptr = 0;
+			cp->c_buf = NULL;
+			cp->c_data_ptr = NULL;
 			cp->c_data_len = 0;
 			cp->c_data_offs = 0;
 		}
@@ -307,7 +303,7 @@ int pvr2_ioread_get_buffer(struct pvr2_ioread *cp)
 	return !0;
 }
 
-void pvr2_ioread_filter(struct pvr2_ioread *cp)
+static void pvr2_ioread_filter(struct pvr2_ioread *cp)
 {
 	unsigned int idx;
 	if (!cp->enabled) return;

+ 0 - 1
drivers/media/video/pvrusb2/pvrusb2-ioread.h

@@ -33,7 +33,6 @@ void pvr2_ioread_set_sync_key(struct pvr2_ioread *,
 			      const char *sync_key_ptr,
 			      unsigned int sync_key_len);
 int pvr2_ioread_set_enabled(struct pvr2_ioread *,int fl);
-int pvr2_ioread_get_enabled(struct pvr2_ioread *);
 int pvr2_ioread_read(struct pvr2_ioread *,void __user *buf,unsigned int cnt);
 int pvr2_ioread_avail(struct pvr2_ioread *);
 

+ 5 - 5
drivers/media/video/pvrusb2/pvrusb2-main.c

@@ -54,7 +54,7 @@ module_param_named(debug,pvrusb2_debug,int,S_IRUGO|S_IWUSR);
 MODULE_PARM_DESC(debug, "Debug trace mask");
 
 #ifdef CONFIG_VIDEO_PVRUSB2_SYSFS
-static struct pvr2_sysfs_class *class_ptr = 0;
+static struct pvr2_sysfs_class *class_ptr = NULL;
 #endif /* CONFIG_VIDEO_PVRUSB2_SYSFS */
 
 static void pvr_setup_attach(struct pvr2_context *pvr)
@@ -104,10 +104,10 @@ static void pvr_disconnect(struct usb_interface *intf)
 }
 
 static struct usb_driver pvr_driver = {
-	name:           "pvrusb2",
-	id_table:       pvr2_device_table,
-	probe:          pvr_probe,
-	disconnect:     pvr_disconnect
+	.name =         "pvrusb2",
+	.id_table =     pvr2_device_table,
+	.probe =        pvr_probe,
+	.disconnect =   pvr_disconnect
 };
 
 /*

+ 3 - 3
drivers/media/video/pvrusb2/pvrusb2-std.c

@@ -121,7 +121,7 @@ static const struct std_name *find_std_name(const struct std_name *arrPtr,
 		if (strlen(p->name) != bufSize) continue;
 		if (!memcmp(bufPtr,p->name,bufSize)) return p;
 	}
-	return 0;
+	return NULL;
 }
 
 
@@ -289,7 +289,7 @@ static struct v4l2_standard *match_std(v4l2_std_id id)
 			return generic_standards + idx;
 		}
 	}
-	return 0;
+	return NULL;
 }
 
 static int pvr2_std_fill(struct v4l2_standard *std,v4l2_std_id id)
@@ -364,7 +364,7 @@ struct v4l2_standard *pvr2_std_create_enum(unsigned int *countptr,
 
 	pvr2_trace(PVR2_TRACE_INIT,"Setting up %u unique standard(s)",
 		   std_cnt);
-	if (!std_cnt) return 0; // paranoia
+	if (!std_cnt) return NULL; // paranoia
 
 	stddefs = kmalloc(sizeof(struct v4l2_standard) * std_cnt,
 			  GFP_KERNEL);

+ 7 - 7
drivers/media/video/pvrusb2/pvrusb2-sysfs.c

@@ -504,7 +504,7 @@ static void pvr2_sysfs_add_control(struct pvr2_sysfs *sfp,int ctl_id)
 	cip->cptr = cptr;
 
 	cip->chptr = sfp;
-	cip->item_next = 0;
+	cip->item_next = NULL;
 	if (sfp->item_last) {
 		sfp->item_last->item_next = cip;
 	} else {
@@ -625,7 +625,7 @@ static void pvr2_sysfs_tear_down_debugifc(struct pvr2_sysfs *sfp)
 				 &sfp->debugifc->attr_debuginfo);
 	class_device_remove_file(sfp->class_dev,&sfp->debugifc->attr_debugcmd);
 	kfree(sfp->debugifc);
-	sfp->debugifc = 0;
+	sfp->debugifc = NULL;
 }
 #endif /* CONFIG_VIDEO_PVRUSB2_DEBUGIFC */
 
@@ -678,9 +678,9 @@ static void class_dev_destroy(struct pvr2_sysfs *sfp)
 	class_device_remove_file(sfp->class_dev,&sfp->attr_v4l_minor_number);
 	class_device_remove_file(sfp->class_dev,&sfp->attr_unit_number);
 	pvr2_sysfs_trace("Destroying class_dev id=%p",sfp->class_dev);
-	sfp->class_dev->class_data = 0;
+	sfp->class_dev->class_data = NULL;
 	class_device_unregister(sfp->class_dev);
-	sfp->class_dev = 0;
+	sfp->class_dev = NULL;
 }
 
 
@@ -739,13 +739,13 @@ static void class_dev_create(struct pvr2_sysfs *sfp,
 	sfp->attr_v4l_minor_number.attr.name = "v4l_minor_number";
 	sfp->attr_v4l_minor_number.attr.mode = S_IRUGO;
 	sfp->attr_v4l_minor_number.show = v4l_minor_number_show;
-	sfp->attr_v4l_minor_number.store = 0;
+	sfp->attr_v4l_minor_number.store = NULL;
 	class_device_create_file(sfp->class_dev,&sfp->attr_v4l_minor_number);
 	sfp->attr_unit_number.attr.owner = THIS_MODULE;
 	sfp->attr_unit_number.attr.name = "unit_number";
 	sfp->attr_unit_number.attr.mode = S_IRUGO;
 	sfp->attr_unit_number.show = unit_number_show;
-	sfp->attr_unit_number.store = 0;
+	sfp->attr_unit_number.store = NULL;
 	class_device_create_file(sfp->class_dev,&sfp->attr_unit_number);
 
 	pvr2_sysfs_add_controls(sfp);
@@ -806,7 +806,7 @@ struct pvr2_sysfs_class *pvr2_sysfs_class_create(void)
 		pvr2_sysfs_trace(
 			"Registration failed for pvr2_sysfs_class id=%p",clp);
 		kfree(clp);
-		clp = 0;
+		clp = NULL;
 	}
 	return clp;
 }

+ 1 - 1
drivers/media/video/pvrusb2/pvrusb2-tuner.c

@@ -69,7 +69,7 @@ static void tuner_update(struct pvr2_tuner_handler *ctxt)
 
 static void pvr2_tuner_detach(struct pvr2_tuner_handler *ctxt)
 {
-	ctxt->client->handler = 0;
+	ctxt->client->handler = NULL;
 	kfree(ctxt);
 }
 

+ 20 - 22
drivers/media/video/pvrusb2/pvrusb2-v4l2.c

@@ -81,7 +81,7 @@ static int video_nr[PVR_NUM] = {[0 ... PVR_NUM-1] = -1};
 module_param_array(video_nr, int, NULL, 0444);
 MODULE_PARM_DESC(video_nr, "Offset for device's minor");
 
-struct v4l2_capability pvr_capability ={
+static struct v4l2_capability pvr_capability ={
 	.driver         = "pvrusb2",
 	.card           = "Hauppauge WinTV pvr-usb2",
 	.bus_info       = "usb",
@@ -111,7 +111,7 @@ static struct v4l2_tuner pvr_v4l2_tuners[]= {
 	}
 };
 
-struct v4l2_fmtdesc pvr_fmtdesc [] = {
+static struct v4l2_fmtdesc pvr_fmtdesc [] = {
 	{
 		.index          = 0,
 		.type           = V4L2_BUF_TYPE_VIDEO_CAPTURE,
@@ -127,7 +127,7 @@ struct v4l2_fmtdesc pvr_fmtdesc [] = {
 #define PVR_FORMAT_PIX  0
 #define PVR_FORMAT_VBI  1
 
-struct v4l2_format pvr_format [] = {
+static struct v4l2_format pvr_format [] = {
 	[PVR_FORMAT_PIX] = {
 		.type   = V4L2_BUF_TYPE_VIDEO_CAPTURE,
 		.fmt    = {
@@ -701,9 +701,8 @@ static int pvr2_v4l2_do_ioctl(struct inode *inode, struct file *file,
 
 static void pvr2_v4l2_dev_destroy(struct pvr2_v4l2_dev *dip)
 {
-	pvr2_trace(PVR2_TRACE_INIT,
-		   "unregistering device video%d [%s]",
-		   dip->vdev->minor,pvr2_config_get_name(dip->config));
+	printk(KERN_INFO "pvrusb2: unregistering device video%d [%s]\n",
+	       dip->vdev->minor,pvr2_config_get_name(dip->config));
 	if (dip->ctxt_idx >= 0) {
 		mutex_lock(&device_lock);
 		devices[dip->ctxt_idx] = NULL;
@@ -725,7 +724,7 @@ static void pvr2_v4l2_destroy_no_lock(struct pvr2_v4l2 *vp)
 }
 
 
-void pvr2_v4l2_internal_check(struct pvr2_channel *chp)
+static void pvr2_v4l2_internal_check(struct pvr2_channel *chp)
 {
 	struct pvr2_v4l2 *vp;
 	vp = container_of(chp,struct pvr2_v4l2,channel);
@@ -735,8 +734,8 @@ void pvr2_v4l2_internal_check(struct pvr2_channel *chp)
 }
 
 
-int pvr2_v4l2_ioctl(struct inode *inode, struct file *file,
-		    unsigned int cmd, unsigned long arg)
+static int pvr2_v4l2_ioctl(struct inode *inode, struct file *file,
+			   unsigned int cmd, unsigned long arg)
 {
 
 /* Temporary hack : use ivtv api until a v4l2 one is available. */
@@ -747,7 +746,7 @@ int pvr2_v4l2_ioctl(struct inode *inode, struct file *file,
 }
 
 
-int pvr2_v4l2_release(struct inode *inode, struct file *file)
+static int pvr2_v4l2_release(struct inode *inode, struct file *file)
 {
 	struct pvr2_v4l2_fh *fhp = file->private_data;
 	struct pvr2_v4l2 *vp = fhp->vhead;
@@ -761,9 +760,9 @@ int pvr2_v4l2_release(struct inode *inode, struct file *file)
 		hdw = fhp->channel.mc_head->hdw;
 		pvr2_hdw_set_streaming(hdw,0);
 		sp = pvr2_ioread_get_stream(fhp->rhp);
-		if (sp) pvr2_stream_set_callback(sp,0,0);
+		if (sp) pvr2_stream_set_callback(sp,NULL,NULL);
 		pvr2_ioread_destroy(fhp->rhp);
-		fhp->rhp = 0;
+		fhp->rhp = NULL;
 	}
 	v4l2_prio_close(&vp->prio, &fhp->prio);
 	file->private_data = NULL;
@@ -779,9 +778,9 @@ int pvr2_v4l2_release(struct inode *inode, struct file *file)
 		} else {
 			vp->vfirst = fhp->vnext;
 		}
-		fhp->vnext = 0;
-		fhp->vprev = 0;
-		fhp->vhead = 0;
+		fhp->vnext = NULL;
+		fhp->vprev = NULL;
+		fhp->vhead = NULL;
 		pvr2_channel_done(&fhp->channel);
 		pvr2_trace(PVR2_TRACE_STRUCT,
 			   "Destroying pvr_v4l2_fh id=%p",fhp);
@@ -794,9 +793,9 @@ int pvr2_v4l2_release(struct inode *inode, struct file *file)
 }
 
 
-int pvr2_v4l2_open(struct inode *inode, struct file *file)
+static int pvr2_v4l2_open(struct inode *inode, struct file *file)
 {
-	struct pvr2_v4l2_dev *dip = 0; /* Our own context pointer */
+	struct pvr2_v4l2_dev *dip = NULL; /* Our own context pointer */
 	struct pvr2_v4l2_fh *fhp;
 	struct pvr2_v4l2 *vp;
 	struct pvr2_hdw *hdw;
@@ -854,7 +853,7 @@ int pvr2_v4l2_open(struct inode *inode, struct file *file)
 	pvr2_context_enter(vp->channel.mc_head); do {
 		pvr2_trace(PVR2_TRACE_STRUCT,"Creating pvr_v4l2_fh id=%p",fhp);
 		pvr2_channel_init(&fhp->channel,vp->channel.mc_head);
-		fhp->vnext = 0;
+		fhp->vnext = NULL;
 		fhp->vprev = vp->vlast;
 		if (vp->vlast) {
 			vp->vlast->vnext = fhp;
@@ -897,7 +896,7 @@ static int pvr2_v4l2_iosetup(struct pvr2_v4l2_fh *fh)
 
 	fh->rhp = pvr2_channel_create_mpeg_stream(fh->dev_info->stream);
 	if (!fh->rhp) {
-		pvr2_channel_claim_stream(&fh->channel,0);
+		pvr2_channel_claim_stream(&fh->channel,NULL);
 		return -ENOMEM;
 	}
 
@@ -1078,9 +1077,8 @@ static void pvr2_v4l2_dev_init(struct pvr2_v4l2_dev *dip,
 	    (video_register_device(dip->vdev, v4l_type, -1) < 0)) {
 		err("Failed to register pvrusb2 v4l video device");
 	} else {
-		pvr2_trace(PVR2_TRACE_INIT,
-			   "registered device video%d [%s]",
-			   dip->vdev->minor,pvr2_config_get_name(dip->config));
+		printk(KERN_INFO "pvrusb2: registered device video%d [%s]\n",
+		       dip->vdev->minor,pvr2_config_get_name(dip->config));
 	}
 
 	if ((dip->vdev->minor < sizeof(devices)/sizeof(devices[0])) &&

+ 2 - 2
drivers/media/video/pvrusb2/pvrusb2-video-v4l.c

@@ -126,8 +126,8 @@ static const struct pvr2_v4l_decoder_ops decoder_ops[] = {
 
 static void decoder_detach(struct pvr2_v4l_decoder *ctxt)
 {
-	ctxt->client->handler = 0;
-	ctxt->hdw->decoder_ctrl = 0;
+	ctxt->client->handler = NULL;
+	ctxt->hdw->decoder_ctrl = NULL;
 	kfree(ctxt);
 }
 

+ 1 - 1
drivers/media/video/pvrusb2/pvrusb2-wm8775.c

@@ -89,7 +89,7 @@ static unsigned int wm8775_describe(struct pvr2_v4l_wm8775 *ctxt,
 
 static void wm8775_detach(struct pvr2_v4l_wm8775 *ctxt)
 {
-	ctxt->client->handler = 0;
+	ctxt->client->handler = NULL;
 	kfree(ctxt);
 }
 

+ 0 - 2
drivers/media/video/saa7134/saa7134-core.c

@@ -942,8 +942,6 @@ static int __devinit saa7134_initdev(struct pci_dev *pci_dev,
 	/* load i2c helpers */
 	if (TUNER_ABSENT != dev->tuner_type)
 		request_module("tuner");
-	if (dev->tda9887_conf)
-		request_module("tda9887");
 	if (card_is_empress(dev)) {
 		request_module("saa6752hs");
 		request_module_depend("saa7134-empress",&need_empress);

+ 2 - 2
drivers/media/video/tda9887.c

@@ -590,8 +590,8 @@ int tda9887_tuner_init(struct i2c_client *c)
 	t->set_tv_freq = tda9887_set_freq;
 	t->set_radio_freq = tda9887_set_freq;
 	t->standby = tda9887_standby;
-	t->tuner_status=tda9887_tuner_status;
-	t->get_afc=tda9887_get_afc;
+	t->tuner_status = tda9887_tuner_status;
+	t->get_afc = tda9887_get_afc;
 
 	return 0;
 }

+ 6 - 6
drivers/media/video/tuner-core.c

@@ -416,7 +416,7 @@ static void tuner_status(struct i2c_client *client)
 
 /* ---------------------------------------------------------------------- */
 
-/* static var Used only in tuner_attach and tuner_probe */
+/* static vars: used only in tuner_attach and tuner_probe */
 static unsigned default_mode_mask;
 
 /* During client attach, set_type is called by adapter's attach_inform callback.
@@ -608,13 +608,13 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg)
 		tuner_dbg("VIDIOCSAUDIO not implemented.\n");
 		break;
 	case TDA9887_SET_CONFIG:
-	{
-		int *i = arg;
+		if (t->type == TUNER_TDA9887) {
+			int *i = arg;
 
-		t->tda9887_config = *i;
-		set_freq(client, t->tv_freq);
+			t->tda9887_config = *i;
+			set_freq(client, t->tv_freq);
+		}
 		break;
-	}
 	/* --- v4l ioctls --- */
 	/* take care: bttv does userspace copying, we'll get a
 	   kernel pointer here... */

+ 64 - 10
drivers/media/video/tuner-simple.c

@@ -7,6 +7,7 @@
 #include <linux/i2c.h>
 #include <linux/videodev.h>
 #include <media/tuner.h>
+#include <media/v4l2-common.h>
 
 static int offset = 0;
 module_param(offset, int, 0666);
@@ -128,6 +129,7 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq)
 	u8 buffer[4];
 	int rc, IFPCoff, i, j;
 	enum param_type desired_type;
+	struct tuner_params *params;
 
 	tun = &tuners[t->type];
 
@@ -169,19 +171,20 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq)
 			  IFPCoff,t->type);
 		j = 0;
 	}
+	params = &tun->params[j];
 
-	for (i = 0; i < tun->params[j].count; i++) {
-		if (freq > tun->params[j].ranges[i].limit)
+	for (i = 0; i < params->count; i++) {
+		if (freq > params->ranges[i].limit)
 			continue;
 		break;
 	}
-	if (i == tun->params[j].count) {
+	if (i == params->count) {
 		tuner_dbg("TV frequency out of range (%d > %d)",
-				freq, tun->params[j].ranges[i - 1].limit);
-		freq = tun->params[j].ranges[--i].limit;
+				freq, params->ranges[i - 1].limit);
+		freq = params->ranges[--i].limit;
 	}
-	config = tun->params[j].ranges[i].config;
-	cb     = tun->params[j].ranges[i].cb;
+	config = params->ranges[i].config;
+	cb     = params->ranges[i].cb;
 	/*  i == 0 -> VHF_LO
 	 *  i == 1 -> VHF_HI
 	 *  i == 2 -> UHF     */
@@ -281,7 +284,7 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq)
 		break;
 	}
 
-	if (tuners[t->type].params->cb_first_if_lower_freq && div < t->last_div) {
+	if (params->cb_first_if_lower_freq && div < t->last_div) {
 		buffer[0] = config;
 		buffer[1] = cb;
 		buffer[2] = (div>>8) & 0x7f;
@@ -293,6 +296,43 @@ static void default_set_tv_freq(struct i2c_client *c, unsigned int freq)
 		buffer[3] = cb;
 	}
 	t->last_div = div;
+	if (params->has_tda9887) {
+		int config = 0;
+		int is_secam_l = (t->std & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC)) &&
+			!(t->std & ~(V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC));
+
+		if (t->std == V4L2_STD_SECAM_LC) {
+			if (params->port1_active ^ params->port1_invert_for_secam_lc)
+				config |= TDA9887_PORT1_ACTIVE;
+			if (params->port2_active ^ params->port2_invert_for_secam_lc)
+				config |= TDA9887_PORT2_ACTIVE;
+		}
+		else {
+			if (params->port1_active)
+				config |= TDA9887_PORT1_ACTIVE;
+			if (params->port2_active)
+				config |= TDA9887_PORT2_ACTIVE;
+		}
+		if (params->intercarrier_mode)
+			config |= TDA9887_INTERCARRIER;
+		if (is_secam_l) {
+			if (i == 0 && params->default_top_secam_low)
+				config |= TDA9887_TOP(params->default_top_secam_low);
+			else if (i == 1 && params->default_top_secam_mid)
+				config |= TDA9887_TOP(params->default_top_secam_mid);
+			else if (params->default_top_secam_high)
+				config |= TDA9887_TOP(params->default_top_secam_high);
+		}
+		else {
+			if (i == 0 && params->default_top_low)
+				config |= TDA9887_TOP(params->default_top_low);
+			else if (i == 1 && params->default_top_mid)
+				config |= TDA9887_TOP(params->default_top_mid);
+			else if (params->default_top_high)
+				config |= TDA9887_TOP(params->default_top_high);
+		}
+		i2c_clients_command(c->adapter, TDA9887_SET_CONFIG, &config);
+	}
 	tuner_dbg("tv 0x%02x 0x%02x 0x%02x 0x%02x\n",
 		  buffer[0],buffer[1],buffer[2],buffer[3]);
 
@@ -339,6 +379,7 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq)
 	u16 div;
 	int rc, j;
 	enum param_type desired_type = TUNER_PARAM_TYPE_RADIO;
+	struct tuner_params *params;
 
 	tun = &tuners[t->type];
 
@@ -352,7 +393,8 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq)
 		j = 0;
 
 	div = (20 * freq / 16000) + (int)(20*10.7); /* IF 10.7 MHz */
-	buffer[2] = (tun->params[j].ranges[0].config & ~TUNER_RATIO_MASK) | TUNER_RATIO_SELECT_50; /* 50 kHz step */
+	params = &tun->params[j];
+	buffer[2] = (params->ranges[0].config & ~TUNER_RATIO_MASK) | TUNER_RATIO_SELECT_50; /* 50 kHz step */
 
 	switch (t->type) {
 	case TUNER_TENA_9533_DI:
@@ -384,7 +426,7 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq)
 	}
 	buffer[0] = (div>>8) & 0x7f;
 	buffer[1] = div      & 0xff;
-	if (tuners[t->type].params->cb_first_if_lower_freq && div < t->last_div) {
+	if (params->cb_first_if_lower_freq && div < t->last_div) {
 		buffer[0] = buffer[2];
 		buffer[1] = buffer[3];
 		buffer[2] = (div>>8) & 0x7f;
@@ -398,6 +440,18 @@ static void default_set_radio_freq(struct i2c_client *c, unsigned int freq)
 	       buffer[0],buffer[1],buffer[2],buffer[3]);
 	t->last_div = div;
 
+	if (params->has_tda9887) {
+		int config = 0;
+		if (params->port1_active && !params->port1_fm_high_sensitivity)
+			config |= TDA9887_PORT1_ACTIVE;
+		if (params->port2_active && !params->port2_fm_high_sensitivity)
+			config |= TDA9887_PORT2_ACTIVE;
+		if (params->intercarrier_mode)
+			config |= TDA9887_INTERCARRIER;
+/*		if (params->port1_set_for_fm_mono)
+			config &= ~TDA9887_PORT1_ACTIVE;*/
+		i2c_clients_command(c->adapter, TDA9887_SET_CONFIG, &config);
+	}
 	if (4 != (rc = i2c_master_send(c,buffer,4)))
 		tuner_warn("i2c i/o error: rc == %d (should be 4)\n",rc);
 }

+ 38 - 0
drivers/media/video/tuner-types.c

@@ -380,6 +380,10 @@ static struct tuner_params tuner_philips_fq1216me_params[] = {
 		.type   = TUNER_PARAM_TYPE_PAL,
 		.ranges = tuner_lg_pal_ranges,
 		.count  = ARRAY_SIZE(tuner_lg_pal_ranges),
+		.has_tda9887 = 1,
+		.port1_active = 1,
+		.port2_active = 1,
+		.port2_invert_for_secam_lc = 1,
 	},
 };
 
@@ -542,6 +546,14 @@ static struct tuner_params tuner_fm1216me_mk3_params[] = {
 		.ranges = tuner_fm1216me_mk3_pal_ranges,
 		.count  = ARRAY_SIZE(tuner_fm1216me_mk3_pal_ranges),
 		.cb_first_if_lower_freq = 1,
+		.has_tda9887 = 1,
+		.port1_active = 1,
+		.port2_active = 1,
+		.port2_invert_for_secam_lc = 1,
+		.port1_fm_high_sensitivity = 1,
+		.default_top_mid = -2,
+		.default_top_secam_mid = -2,
+		.default_top_secam_high = -2,
 	},
 };
 
@@ -612,6 +624,10 @@ static struct tuner_params tuner_fm1236_mk3_params[] = {
 		.ranges = tuner_fm1236_mk3_ntsc_ranges,
 		.count  = ARRAY_SIZE(tuner_fm1236_mk3_ntsc_ranges),
 		.cb_first_if_lower_freq = 1,
+		.has_tda9887 = 1,
+		.port1_active = 1,
+		.port2_active = 1,
+		.port1_fm_high_sensitivity = 1,
 	},
 };
 
@@ -632,6 +648,8 @@ static struct tuner_params tuner_microtune_4049_fm5_params[] = {
 		.type   = TUNER_PARAM_TYPE_PAL,
 		.ranges = tuner_temic_4009f_5_pal_ranges,
 		.count  = ARRAY_SIZE(tuner_temic_4009f_5_pal_ranges),
+		.has_tda9887 = 1,
+		.port1_invert_for_secam_lc = 1,
 	},
 };
 
@@ -648,6 +666,8 @@ static struct tuner_params tuner_panasonic_vp27_params[] = {
 		.type   = TUNER_PARAM_TYPE_NTSC,
 		.ranges = tuner_panasonic_vp27_ntsc_ranges,
 		.count  = ARRAY_SIZE(tuner_panasonic_vp27_ntsc_ranges),
+		.has_tda9887 = 1,
+		.intercarrier_mode = 1,
 	},
 };
 
@@ -782,6 +802,13 @@ static struct tuner_params tuner_philips_fq1216ame_mk4_params[] = {
 		.type   = TUNER_PARAM_TYPE_PAL,
 		.ranges = tuner_philips_fq12_6a___mk4_pal_ranges,
 		.count  = ARRAY_SIZE(tuner_philips_fq12_6a___mk4_pal_ranges),
+		.has_tda9887 = 1,
+		.port1_active = 1,
+		.port2_invert_for_secam_lc = 1,
+		.default_top_mid = -2,
+		.default_top_secam_low = -2,
+		.default_top_secam_mid = -2,
+		.default_top_secam_high = -2,
 	},
 };
 
@@ -870,6 +897,12 @@ static struct tuner_params tuner_philips_fmd1216me_mk3_params[] = {
 		.type   = TUNER_PARAM_TYPE_PAL,
 		.ranges = tuner_philips_fmd1216me_mk3_pal_ranges,
 		.count  = ARRAY_SIZE(tuner_philips_fmd1216me_mk3_pal_ranges),
+		.has_tda9887 = 1,
+		.port1_active = 1,
+		.port2_active = 1,
+		.port2_fm_high_sensitivity = 1,
+		.port2_invert_for_secam_lc = 1,
+		.port1_set_for_fm_mono = 1,
 	},
 };
 
@@ -1005,6 +1038,7 @@ static struct tuner_params tuner_samsung_tcpn_2121p30a_params[] = {
 		.type   = TUNER_PARAM_TYPE_NTSC,
 		.ranges = tuner_samsung_tcpn_2121p30a_ntsc_ranges,
 		.count  = ARRAY_SIZE(tuner_samsung_tcpn_2121p30a_ntsc_ranges),
+		.has_tda9887 = 1,
 	},
 };
 
@@ -1037,6 +1071,10 @@ static struct tuner_params tuner_samsung_tcpg_6121p30a_params[] = {
 		.type   = TUNER_PARAM_TYPE_PAL,
 		.ranges = tuner_samsung_tcpg_6121p30a_pal_ranges,
 		.count  = ARRAY_SIZE(tuner_samsung_tcpg_6121p30a_pal_ranges),
+		.has_tda9887 = 1,
+		.port1_active = 1,
+		.port2_active = 1,
+		.port2_invert_for_secam_lc = 1,
 	},
 };
 

+ 9 - 9
drivers/media/video/tveeprom.c

@@ -73,14 +73,14 @@ static struct HAUPPAUGE_TUNER_FMT
 }
 hauppauge_tuner_fmt[] =
 {
-	{ V4L2_STD_UNKNOWN," UNKNOWN" },
-	{ V4L2_STD_UNKNOWN," FM" },
-	{ V4L2_STD_PAL_BG, " PAL(B/G)" },
-	{ V4L2_STD_NTSC_M, " NTSC(M)" },
-	{ V4L2_STD_PAL_I,  " PAL(I)" },
-	{ V4L2_STD_SECAM_L," SECAM(L/L')" },
-	{ V4L2_STD_PAL_DK, " PAL(D/D1/K)" },
-	{ V4L2_STD_ATSC,   " ATSC/DVB Digital" },
+	{ V4L2_STD_UNKNOWN,                   " UNKNOWN" },
+	{ V4L2_STD_UNKNOWN,                   " FM" },
+	{ V4L2_STD_B|V4L2_STD_GH,             " PAL(B/G)" },
+	{ V4L2_STD_MN,                        " NTSC(M)" },
+	{ V4L2_STD_PAL_I,                     " PAL(I)" },
+	{ V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC, " SECAM(L/L')" },
+	{ V4L2_STD_DK,                        " PAL(D/D1/K)" },
+	{ V4L2_STD_ATSC,                      " ATSC/DVB Digital" },
 };
 
 /* This is the full list of possible tuners. Many thanks to Hauppauge for
@@ -219,7 +219,7 @@ hauppauge_tuner[] =
 	{ TUNER_ABSENT,        "Thompson DTT75105"},
 	{ TUNER_ABSENT,        "Conexant_CX24109"},
 	{ TUNER_TCL_2002N,     "TCL M2523_5N_E"},
-	{ TUNER_ABSENT,        "TCL M2523_3DB_E"},
+	{ TUNER_TCL_2002MB,    "TCL M2523_3DB_E"},
 	{ TUNER_ABSENT,        "Philips 8275A"},
 	{ TUNER_ABSENT,        "Microtune MT2060"},
 	{ TUNER_ABSENT,        "Philips FM1236 MK5"},

+ 8 - 8
drivers/media/video/videocodec.h

@@ -222,14 +222,14 @@ M                       zr36055[1] 0001 0000c001 00000000 (zr36050[1])
 /* ========================= */
 
 struct vfe_polarity {
-	int vsync_pol:1;
-	int hsync_pol:1;
-	int field_pol:1;
-	int blank_pol:1;
-	int subimg_pol:1;
-	int poe_pol:1;
-	int pvalid_pol:1;
-	int vclk_pol:1;
+	unsigned int vsync_pol:1;
+	unsigned int hsync_pol:1;
+	unsigned int field_pol:1;
+	unsigned int blank_pol:1;
+	unsigned int subimg_pol:1;
+	unsigned int poe_pol:1;
+	unsigned int pvalid_pol:1;
+	unsigned int vclk_pol:1;
 };
 
 struct vfe_settings {

+ 55 - 0
include/media/tuner-types.h

@@ -20,6 +20,7 @@ struct tuner_range {
 
 struct tuner_params {
 	enum param_type type;
+
 	/* Many Philips based tuners have a comment like this in their
 	 * datasheet:
 	 *
@@ -39,6 +40,60 @@ struct tuner_params {
 	 * static unless the control byte was sent first.
 	 */
 	unsigned int cb_first_if_lower_freq:1;
+	/* Set to 1 if this tuner uses a tda9887 */
+	unsigned int has_tda9887:1;
+	/* Many Philips tuners use tda9887 PORT1 to select the FM radio
+	   sensitivity. If this setting is 1, then set PORT1 to 1 to
+	   get proper FM reception. */
+	unsigned int port1_fm_high_sensitivity:1;
+	/* Some Philips tuners use tda9887 PORT2 to select the FM radio
+	   sensitivity. If this setting is 1, then set PORT2 to 1 to
+	   get proper FM reception. */
+	unsigned int port2_fm_high_sensitivity:1;
+	/* Most tuners with a tda9887 use QSS mode. Some (cheaper) tuners
+	   use Intercarrier mode. If this setting is 1, then the tuner
+	   needs to be set to intercarrier mode. */
+	unsigned int intercarrier_mode:1;
+	/* This setting sets the default value for PORT1.
+	   0 means inactive, 1 means active. Note: the actual bit
+	   value written to the tda9887 is inverted. So a 0 here
+	   means a 1 in the B6 bit. */
+	unsigned int port1_active:1;
+	/* This setting sets the default value for PORT2.
+	   0 means inactive, 1 means active. Note: the actual bit
+	   value written to the tda9887 is inverted. So a 0 here
+	   means a 1 in the B7 bit. */
+	unsigned int port2_active:1;
+	/* Sometimes PORT1 is inverted when the SECAM-L' standard is selected.
+	   Set this bit to 1 if this is needed. */
+	unsigned int port1_invert_for_secam_lc:1;
+	/* Sometimes PORT2 is inverted when the SECAM-L' standard is selected.
+	   Set this bit to 1 if this is needed. */
+	unsigned int port2_invert_for_secam_lc:1;
+	/* Some cards require PORT1 to be 1 for mono Radio FM and 0 for stereo. */
+	unsigned int port1_set_for_fm_mono:1;
+	/* Default tda9887 TOP value in dB for the low band. Default is 0.
+	   Range: -16:+15 */
+	signed int default_top_low:5;
+	/* Default tda9887 TOP value in dB for the mid band. Default is 0.
+	   Range: -16:+15 */
+	signed int default_top_mid:5;
+	/* Default tda9887 TOP value in dB for the high band. Default is 0.
+	   Range: -16:+15 */
+	signed int default_top_high:5;
+	/* Default tda9887 TOP value in dB for SECAM-L/L' for the low band.
+	   Default is 0. Several tuners require a different TOP value for
+	   the SECAM-L/L' standards. Range: -16:+15 */
+	signed int default_top_secam_low:5;
+	/* Default tda9887 TOP value in dB for SECAM-L/L' for the mid band.
+	   Default is 0. Several tuners require a different TOP value for
+	   the SECAM-L/L' standards. Range: -16:+15 */
+	signed int default_top_secam_mid:5;
+	/* Default tda9887 TOP value in dB for SECAM-L/L' for the high band.
+	   Default is 0. Several tuners require a different TOP value for
+	   the SECAM-L/L' standards. Range: -16:+15 */
+	signed int default_top_secam_high:5;
+
 
 	unsigned int count;
 	struct tuner_range *ranges;