Skip to contentSkip to conversation

cx23885: Added support for AVerTV Hybrid Express Slim HC81R (only analog)

PATCH In review Oleg Kravchenko 2 participants 6 messages Nov 3, 2012 – Nov 6, 2012 Media (V4L/DVB)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 cx23885: Added support for AVerTV Hybrid Express Slim HC81R (only analog)

Hello! Please review my patch.

Supported inputs:
Television, S-Video, Component.

Modules options:
options cx25840 firmware=v4l-cx23418-dig.fw

Quoted 1 line

From 383bec3ca55a0939f86a0b1d2aa2e562f227e4d8 Mon Sep 17 00:00:00 2001

From: Oleh Kravchenko <[email protected]>
Date: Tue, 23 Oct 2012 18:47:30 +0300
Subject: [PATCH] Added support for AVerTV Hybrid Express Slim HC81R (only
analog)

---
 drivers/media/pci/cx23885/cx23885-cards.c |   75 +++++++++++++++++++++++++++++
 drivers/media/pci/cx23885/cx23885-video.c |   15 +++++-
 drivers/media/pci/cx23885/cx23885.h       |    1 +
 3 files changed, 90 insertions(+), 1 deletions(-)
drivers/media/pci/cx23885/cx23885-cards.c +75 -0
index 6277e145..d213019 100644
@@ -572,6 +572,35 @@ struct cx23885_board cx23885_boards[] = {
 	[CX23885_BOARD_PROF_8000] = {
 		.name		= "Prof Revolution DVB-S2 8000",
 		.portb		= CX23885_MPEG_DVB,
+	},
+	[CX23885_BOARD_AVERMEDIA_HC81R] = {
+		.name		= "AVerTV Hybrid Express Slim HC81R",
+		.tuner_type	= TUNER_XC2028,
+		.tuner_addr	= 0x61, /* 0xc2 >> 1 */
+		.tuner_bus	= 1,
+		.porta		= CX23885_ANALOG_VIDEO,
+		.input          = {{
+			.type   = CX23885_VMUX_TELEVISION,
+			.vmux   = CX25840_VIN2_CH1 |
+				  CX25840_VIN5_CH2 |
+				  CX25840_NONE0_CH3 |
+				  CX25840_NONE1_CH3,
+			.amux   = CX25840_AUDIO8,
+		}, {
+			.type   = CX23885_VMUX_SVIDEO,
+			.vmux   = CX25840_VIN8_CH1 |
+				  CX25840_NONE_CH2 |
+				  CX25840_VIN7_CH3 |
+				  CX25840_SVIDEO_ON,
+			.amux   = CX25840_AUDIO6,
+		}, {
+			.type   = CX23885_VMUX_COMPONENT,
+			.vmux   = CX25840_VIN1_CH1 |
+				  CX25840_NONE_CH2 |
+				  CX25840_NONE0_CH3 |
+				  CX25840_NONE1_CH3,
+			.amux   = CX25840_AUDIO6,
+		} },
 	}
 };
 const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards);
@@ -788,6 +817,10 @@ struct cx23885_subid cx23885_subids[] = {
 		.subvendor = 0x8000,
 		.subdevice = 0x3034,
 		.card      = CX23885_BOARD_PROF_8000,
+	}, {
+		.subvendor = 0x1461,
+		.subdevice = 0xd939,
+		.card      = CX23885_BOARD_AVERMEDIA_HC81R,
 	},
 };
 const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids);
@@ -1012,6 +1045,10 @@ int cx23885_tuner_callback(void *priv, int component, int command, int arg)
 	case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF:
 		altera_ci_tuner_reset(dev, port->nr);
 		break;
+	case CX23885_BOARD_AVERMEDIA_HC81R:
+		/* XC3028L Reset Command */
+		bitmask = 1 << 2;
+		break;
 	}
 
 	if (bitmask) {
@@ -1301,6 +1338,32 @@ void cx23885_gpio_setup(struct cx23885_dev *dev)
 		/* enable irq */
 		cx_write(GPIO_ISM, 0x00000000);/* INTERRUPTS active low*/
 		break;
+	case CX23885_BOARD_AVERMEDIA_HC81R:
+		cx_clear(MC417_CTL, 1);
+		/* GPIO-0,1,2 setup direction as output */
+		cx_set(GP0_IO, 0x00070000);
+		mdelay(10);
+		/* AF9013 demod reset */
+		cx_set(GP0_IO, 0x00010001);
+		mdelay(10);
+		cx_clear(GP0_IO, 0x00010001);
+		mdelay(10);
+		cx_set(GP0_IO, 0x00010001);
+		mdelay(10);
+		/* demod tune? */
+		cx_clear(GP0_IO, 0x00030003);
+		mdelay(10);
+		cx_set(GP0_IO, 0x00020002);
+		mdelay(10);
+		cx_set(GP0_IO, 0x00010001);
+		mdelay(10);
+		cx_clear(GP0_IO, 0x00020002);
+		/* XC3028L tuner reset */
+		cx_set(GP0_IO, 0x00040004);
+		cx_clear(GP0_IO, 0x00040004);
+		cx_set(GP0_IO, 0x00040004);
+		mdelay(60);
+		break;
 	}
 }
 
@@ -1515,6 +1578,17 @@ void cx23885_card_setup(struct cx23885_dev *dev)
 	}
 
 	switch (dev->board) {
+	case CX23885_BOARD_AVERMEDIA_HC81R:
+		/* Defaults for VID B */
+		ts1->gen_ctrl_val  = 0x4; /* Parallel */
+		ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
+		ts1->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
+		/* Defaults for VID C */
+		/* DREQ_POL, SMODE, PUNC_CLK, MCLK_POL Serial bus + punc clk */
+		ts2->gen_ctrl_val  = 0x10e;
+		ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
+		ts2->src_sel_val     = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
+		break;
 	case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP:
 	case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:
 		ts2->gen_ctrl_val  = 0xc; /* Serial bus + punctured clock */
@@ -1636,6 +1710,7 @@ void cx23885_card_setup(struct cx23885_dev *dev)
 	case CX23885_BOARD_MPX885:
 	case CX23885_BOARD_MYGICA_X8507:
 	case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL:
+	case CX23885_BOARD_AVERMEDIA_HC81R:
 		dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev,
 				&dev->i2c_bus[2].i2c_adap,
 				"cx25840", 0x88 >> 1, NULL);
drivers/media/pci/cx23885/cx23885-video.c +14 -1
index 1a21926..f131888 100644
@@ -509,7 +509,8 @@ static int cx23885_video_mux(struct cx23885_dev *dev, unsigned int input)
 		(dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255) ||
 		(dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255_22111) ||
 		(dev->board == CX23885_BOARD_HAUPPAUGE_HVR1850) ||
-		(dev->board == CX23885_BOARD_MYGICA_X8507)) {
+		(dev->board == CX23885_BOARD_MYGICA_X8507) ||
+		(dev->board == CX23885_BOARD_AVERMEDIA_HC81R)) {
 		/* Configure audio routing */
 		v4l2_subdev_call(dev->sd_cx25840, audio, s_routing,
 			INPUT(input)->amux, 0, 0);
@@ -1878,6 +1879,18 @@ int cx23885_video_register(struct cx23885_dev *dev)
 				};
 				v4l2_subdev_call(sd, tuner, s_config, &cfg);
 			}
+
+			if (dev->board == CX23885_BOARD_AVERMEDIA_HC81R) {
+				struct xc2028_ctrl ctrl = {
+					.fname = "xc3028L-v36.fw",
+					.max_len = 64
+				};
+				struct v4l2_priv_tun_config cfg = {
+					.tuner = dev->tuner_type,
+					.priv = &ctrl
+				};
+				v4l2_subdev_call(sd, tuner, s_config, &cfg);
+			}
 		}
 	}
 
drivers/media/pci/cx23885/cx23885.h +1 -0
index 67f40d3..f0c4705 100644
@@ -91,6 +91,7 @@
 #define CX23885_BOARD_TEVII_S471               35
 #define CX23885_BOARD_HAUPPAUGE_HVR1255_22111  36
 #define CX23885_BOARD_PROF_8000                37
+#define CX23885_BOARD_AVERMEDIA_HC81R          38
 
 #define GPIO_0 0x00000001
 #define GPIO_1 0x00000002
Signature · 1 line
1.7.8.6
#1 lore raw
Quoted 7 lines · Oleg Kravchenko

Hello! Please review my patch.

Supported inputs:
Television, S-Video, Component.

Modules options:
options cx25840 firmware=v4l-cx23418-dig.fw

Hi,

Please do not use the CX23418 digitizer firmware with the CX2388[578] chips. Use the proper cx23885 digitizer firmware. You need the proper firmware to get the best results in detecting the audio standard in broadcast analog video.

Regards,
Andy

#2 lore raw

субота, 03-лис-2012 16:41:10 Andy Walls написано:

Quoted 11 lines
Quoted 7 lines · Oleg Kravchenko

Hello! Please review my patch.

Supported inputs:
Television, S-Video, Component.

Modules options:
options cx25840 firmware=v4l-cx23418-dig.fw

Hi,

Quoted 7 lines

Please do not use the CX23418 digitizer firmware with the CX2388[578] chips.
Use the proper cx23885 digitizer firmware. You need the proper firmware
to get the best results in detecting the audio standard in broadcast analog video.

Regards,
Andy

Windows driver use v4l-cx23418-dig.fw 95bc688d3e7599fd5800161e9971cc55 merlinAVC.rom 95bc688d3e7599fd5800161e9971cc55 /lib/firmware/v4l-cx23418-dig.fw

So, i think this is a proper firmware :)

#3 lore raw
Quoted 17 lines · Oleg Kravchenko

субота, 03-лис-2012 16:41:10 Andy Walls написано:

Quoted 16 lines
Quoted 7 lines · Oleg Kravchenko

Hello! Please review my patch.

Supported inputs:
Television, S-Video, Component.

Modules options:
options cx25840 firmware=v4l-cx23418-dig.fw

Hi,

Please do not use the CX23418 digitizer firmware with the CX2388[578] chips.
Use the proper cx23885 digitizer firmware. You need the proper firmware
to get the best results in detecting the audio standard in broadcast analog video.

Quoted 8 lines
Quoted 2 lines

Regards,
Andy

Windows driver use v4l-cx23418-dig.fw 95bc688d3e7599fd5800161e9971cc55 merlinAVC.rom 95bc688d3e7599fd5800161e9971cc55 /lib/firmware/v4l-cx23418-dig.fw

So, i think this is a proper firmware :)

Maybe it is, but it is not the v4l-cx23418-dig.fw file:

$ md5sum /lib/firmware/v4l-cx23418-dig.fw 
b3704908fd058485f3ef136941b2e513  /lib/firmware/v4l-cx23418-dig.fw

Which can be extracted from this (double) gzipped tar archive:
http://dl.ivtvdriver.org/ivtv/firmware/cx18-firmware.tar.gz
(After downloading the file, rename it to cx18-firmware.tar.gz.gz. Sorry, I don't know how to stop the web server from gzipping things twice. :( )

Mauro or Hans,

Linuxtv.org seems to be serving up the wrong firmware for the CX23418's built in CX25843 core:
http://www.linuxtv.org/downloads/firmware/v4l-cx23418-dig.fw

$ md5sum Downloads/linuxtv.org-v4l-cx23418-dig.fw
95bc688d3e7599fd5800161e9971cc55 Downloads/linuxtv.org-v4l-cx23418-dig.fw

Can either of you please put the proper firmware file in place at LinuxTV.org?

Thanks.

Regards,
Andy

#4 lore raw

неділя, 04-лис-2012 16:49:00 Andy Walls написано:

Quoted 33 lines · Oleg Kravchenko
Quoted 21 lines

субота, 03-лис-2012 16:41:10 Andy Walls написано:

Quoted 20 lines
Quoted 7 lines · Oleg Kravchenko

Hello! Please review my patch.

Supported inputs:
Television, S-Video, Component.

Modules options:
options cx25840 firmware=v4l-cx23418-dig.fw

Hi,

Please do not use the CX23418 digitizer firmware with the CX2388[578] chips.> >
Use the proper cx23885 digitizer firmware. You need the proper firmware

to get the best results in detecting the audio standard in broadcast analog
video.

Quoted 8 lines
Quoted 2 lines

Regards,
Andy

Windows driver use v4l-cx23418-dig.fw 95bc688d3e7599fd5800161e9971cc55 merlinAVC.rom 95bc688d3e7599fd5800161e9971cc55 /lib/firmware/v4l-cx23418-dig.fw

So, i think this is a proper firmware :)

Maybe it is, but it is not the v4l-cx23418-dig.fw file:

Quoted 8 lines
$ md5sum /lib/firmware/v4l-cx23418-dig.fw
b3704908fd058485f3ef136941b2e513  /lib/firmware/v4l-cx23418-dig.fw

Which can be extracted from this (double) gzipped tar archive:
http://dl.ivtvdriver.org/ivtv/firmware/cx18-firmware.tar.gz
(After downloading the file, rename it to cx18-firmware.tar.gz.gz. Sorry, I don't know how to stop the web server from gzipping things twice. :( )

Ok, i am change /etc/modprobe.d/avermedia_hc81r.conf to:
options cx25840 firmware=merlinAVC.rom