Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2f861387 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

[media] cx231xx: Use parameters to describe some board variants



Instead of per-model tests all over the code, use some parameters
at the board entries to describe the model variants for:
	- devices with 417 MPEG encoder;
	- devices that use external AV;
	- devices where vbi VANC endpoint doesn't work;
	- devices with xc5000 that require different IF
	  initialization (and probably will cover also
	  xc3028).
	- devices with xceive tuner that require a reset
	  during init.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 3f25ffa2
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -759,11 +759,8 @@ int cx231xx_set_decoder_video_input(struct cx231xx *dev,
	case CX231XX_VMUX_TELEVISION:
	case CX231XX_VMUX_CABLE:
	default:
		switch (dev->model) {
		case CX231XX_BOARD_CNXT_CARRAERA:
		case CX231XX_BOARD_CNXT_RDE_250:
		case CX231XX_BOARD_CNXT_SHELBY:
		case CX231XX_BOARD_CNXT_RDU_250:
		/* TODO: Test if this is also needed for xc2028/xc3028 */
		if (dev->board.tuner_type == TUNER_XC5000) {
			/* Disable the use of  DIF   */

			status = vid_blk_read_word(dev, AFE_CTRL, &value);
@@ -820,8 +817,7 @@ int cx231xx_set_decoder_video_input(struct cx231xx *dev,
				MODE_CTRL, FLD_INPUT_MODE,
				cx231xx_set_field(FLD_INPUT_MODE,
						INPUT_MODE_CVBS_0));
			break;
		default:
		} else {
			/* Enable the DIF for the tuner */

			/* Reinitialize the DIF */
@@ -2550,7 +2546,7 @@ int cx231xx_initialize_stream_xfer(struct cx231xx *dev, u32 media_type)
		case 4:	/* ts1 */
			cx231xx_info("%s: set ts1 registers", __func__);

		if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER) {
		if (dev->board.has_417) {
			cx231xx_info(" MPEG\n");
			value &= 0xFFFFFFFC;
			value |= 0x3;
+6 −1
Original line number Diff line number Diff line
@@ -261,6 +261,9 @@ struct cx231xx_board cx231xx_boards[] = {
		.agc_analog_digital_select_gpio = 0x1c,
		.gpio_pin_status_mask = 0x4001000,
		.norm = V4L2_STD_PAL,
		.no_alt_vanc = 1,
		.external_av = 1,
		.has_417 = 1,

		.input = {{
				.type = CX231XX_VMUX_COMPOSITE1,
@@ -382,6 +385,8 @@ struct cx231xx_board cx231xx_boards[] = {
		.agc_analog_digital_select_gpio = 0x0c,
		.gpio_pin_status_mask = 0x4001000,
		.norm = V4L2_STD_NTSC,
		.no_alt_vanc = 1,
		.external_av = 1,
		.input = {{
			.type = CX231XX_VMUX_COMPOSITE1,
			.vmux = CX231XX_VIN_2_1,
@@ -772,7 +777,7 @@ static int cx231xx_init_dev(struct cx231xx **devhandle, struct usb_device *udev,
	/* Reset other chips required if they are tied up with GPIO pins */
	cx231xx_add_into_devlist(dev);

	if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER) {
	if (dev->board.has_417) {
		printk(KERN_INFO "attach 417 %d\n", dev->model);
		if (cx231xx_417_register(dev) < 0) {
			printk(KERN_ERR
+7 −9
Original line number Diff line number Diff line
@@ -571,6 +571,8 @@ int cx231xx_set_alt_setting(struct cx231xx *dev, u8 index, u8 alt)
							     alt];
		break;
	case INDEX_VANC:
		if (dev->board.no_alt_vanc)
			return 0;
		usb_interface_index =
		    dev->current_pcb_config.hs_config_info[0].interface_info.
		    vanc_index + 1;
@@ -600,8 +602,7 @@ int cx231xx_set_alt_setting(struct cx231xx *dev, u8 index, u8 alt)
		usb_interface_index, alt);
		/*To workaround error number=-71 on EP0 for videograbber,
		 need add following codes.*/
		if (dev->model != CX231XX_BOARD_CNXT_VIDEO_GRABBER &&
		    dev->model != CX231XX_BOARD_HAUPPAUGE_USBLIVE2)
		if (dev->board.no_alt_vanc)
			return -1;
	}

@@ -1301,8 +1302,7 @@ int cx231xx_dev_init(struct cx231xx *dev)
	/* init hardware */
	/* Note : with out calling set power mode function,
	afe can not be set up correctly */
	if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER ||
	    dev->model == CX231XX_BOARD_HAUPPAUGE_USBLIVE2) {
	if (dev->board.external_av) {
		errCode = cx231xx_set_power_mode(dev,
				 POLARIS_AVMODE_ENXTERNAL_AV);
		if (errCode < 0) {
@@ -1322,11 +1322,9 @@ int cx231xx_dev_init(struct cx231xx *dev)
		}
	}

	/* reset the Tuner */
	if ((dev->model == CX231XX_BOARD_CNXT_CARRAERA) ||
		(dev->model == CX231XX_BOARD_CNXT_RDE_250) ||
		(dev->model == CX231XX_BOARD_CNXT_SHELBY) ||
		(dev->model == CX231XX_BOARD_CNXT_RDU_250))
	/* reset the Tuner, if it is a Xceive tuner */
	if ((dev->board.tuner_type == TUNER_XC5000) ||
	    (dev->board.tuner_type == TUNER_XC2028))
			cx231xx_gpio_set(dev, dev->board.tuner_gpio);

	/* initialize Colibri block */
+10 −10
Original line number Diff line number Diff line
@@ -2190,8 +2190,7 @@ static int cx231xx_v4l2_open(struct file *filp)
		dev->height = norm_maxh(dev);

		/* Power up in Analog TV mode */
		if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER ||
		    dev->model == CX231XX_BOARD_HAUPPAUGE_USBLIVE2)
		if (dev->board.external_av)
			cx231xx_set_power_mode(dev,
				 POLARIS_AVMODE_ENXTERNAL_AV);
		else
@@ -2231,8 +2230,6 @@ static int cx231xx_v4l2_open(struct file *filp)
	if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
		/* Set the required alternate setting  VBI interface works in
		   Bulk mode only */
		if (dev->model != CX231XX_BOARD_CNXT_VIDEO_GRABBER &&
		    dev->model != CX231XX_BOARD_HAUPPAUGE_USBLIVE2)
		cx231xx_set_alt_setting(dev, INDEX_VANC, 0);

		videobuf_queue_vmalloc_init(&fh->vb_vidq, &cx231xx_vbi_qops,
@@ -2275,7 +2272,7 @@ void cx231xx_release_analog_resources(struct cx231xx *dev)
		cx231xx_info("V4L2 device %s deregistered\n",
			     video_device_node_name(dev->vdev));

		if (dev->model == CX231XX_BOARD_CNXT_VIDEO_GRABBER)
		if (dev->board.has_417)
			cx231xx_417_unregister(dev);

		if (video_is_registered(dev->vdev))
@@ -2302,10 +2299,13 @@ static int cx231xx_v4l2_close(struct file *filp)
	if (res_check(fh))
		res_free(fh);

	/*To workaround error number=-71 on EP0 for VideoGrabber,
		 need exclude following.*/
	if (dev->model != CX231XX_BOARD_CNXT_VIDEO_GRABBER &&
	    dev->model != CX231XX_BOARD_HAUPPAUGE_USBLIVE2)
	/*
	 * To workaround error number=-71 on EP0 for VideoGrabber,
	 *	 need exclude following.
	 * FIXME: It is probably safe to remove most of these, as we're
	 * now avoiding the alternate setting for INDEX_VANC
	 */
	if (!dev->board.no_alt_vanc)
		if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE) {
			videobuf_stop(&fh->vb_vidq);
			videobuf_mmap_free(&fh->vb_vidq);
+3 −0
Original line number Diff line number Diff line
@@ -353,7 +353,10 @@ struct cx231xx_board {

	unsigned int max_range_640_480:1;
	unsigned int has_dvb:1;
	unsigned int has_417:1;
	unsigned int valid:1;
	unsigned int no_alt_vanc:1;
	unsigned int external_av:1;

	unsigned char xclk, i2c_speed;