Commit 5e521401 authored by Bradford Love's avatar Bradford Love Committed by Hans Verkuil
Browse files

media: au0828: Add new Hauppauge HVR1265 and ImpactVCB-e



New HVR1265 and ImpactVCB-e devices are PCIe baords
with USB controller and essentially embedded
Hauppauge 950Q.

HVR1265 - digital+analog TV, S-Video, and audio inputs
ImpactVCB-e - Composite, S-Video, and audio inputs

This also fixes AU8522_COMPOSITE_CH4, which was missing
from video routing.

Signed-off-by: default avatarBradford Love <brad@nextdimension.cc>
Signed-off-by: default avatarHans Verkuil <hverkuil+cisco@kernel.org>
parent ca3e8eaa
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -567,6 +567,7 @@ static int au8522_s_video_routing(struct v4l2_subdev *sd,
	case AU8522_COMPOSITE_CH1:
	case AU8522_SVIDEO_CH13:
	case AU8522_COMPOSITE_CH4_SIF:
	case AU8522_COMPOSITE_CH4:
		state->vid_input = input;
		break;
	default:
+50 −0
Original line number Diff line number Diff line
@@ -105,6 +105,46 @@ struct au0828_board au0828_boards[] = {
		.tuner_addr = 0x60,
		.i2c_clk_divider = AU0828_I2C_CLK_250KHZ,
	},
	[AU0828_BOARD_HAUPPAUGE_IMPACTVCBE] = {
		.name	= "Hauppauge Impact VCB-e",
		.tuner_type = TUNER_ABSENT,
		.i2c_clk_divider = AU0828_I2C_CLK_250KHZ,
		.input = {
			{
				.type = AU0828_VMUX_COMPOSITE,
				.vmux = AU8522_COMPOSITE_CH4,
				.amux = AU8522_AUDIO_NONE,
				.audio_setup = hvr950q_cs5340_audio,
			},
			{
				.type = AU0828_VMUX_SVIDEO,
				.vmux = AU8522_SVIDEO_CH13,
				.amux = AU8522_AUDIO_NONE,
				.audio_setup = hvr950q_cs5340_audio,
			},
		},
	},
	[AU0828_BOARD_HAUPPAUGE_HVR1265] = {
		.name	= "Hauppauge HVR1265",
		.tuner_type = TUNER_XC5000,
		.tuner_addr = 0x61,
		.has_ir_i2c = 1,
		.has_analog = 1,
		.i2c_clk_divider = AU0828_I2C_CLK_250KHZ,
		.input = {
			{
				.type = AU0828_VMUX_TELEVISION,
				.vmux = AU8522_COMPOSITE_CH4_SIF,
				.amux = AU8522_AUDIO_SIF,
			},
			{
				.type = AU0828_VMUX_SVIDEO,
				.vmux = AU8522_SVIDEO_CH13,
				.amux = AU8522_AUDIO_NONE,
				.audio_setup = hvr950q_cs5340_audio,
			},
		},
	},
};

/* Tuner callback function for au0828 boards. Currently only needed
@@ -120,6 +160,8 @@ int au0828_tuner_callback(void *priv, int component, int command, int arg)
	case AU0828_BOARD_HAUPPAUGE_HVR850:
	case AU0828_BOARD_HAUPPAUGE_HVR950Q:
	case AU0828_BOARD_HAUPPAUGE_HVR950Q_MXL:
	case AU0828_BOARD_HAUPPAUGE_HVR1265:
	case AU0828_BOARD_HAUPPAUGE_IMPACTVCBE:
	case AU0828_BOARD_DVICO_FUSIONHDTV7:
		if (command == 0) {
			/* Tuner Reset Command from xc5000 */
@@ -190,6 +232,8 @@ void au0828_card_setup(struct au0828_dev *dev)
	case AU0828_BOARD_HAUPPAUGE_HVR850:
	case AU0828_BOARD_HAUPPAUGE_HVR950Q:
	case AU0828_BOARD_HAUPPAUGE_HVR950Q_MXL:
	case AU0828_BOARD_HAUPPAUGE_HVR1265:
	case AU0828_BOARD_HAUPPAUGE_IMPACTVCBE:
	case AU0828_BOARD_HAUPPAUGE_WOODBURY:
		if (dev->i2c_rc == 0)
			hauppauge_eeprom(dev, eeprom+0xa0);
@@ -248,6 +292,8 @@ void au0828_gpio_setup(struct au0828_dev *dev)
	case AU0828_BOARD_HAUPPAUGE_HVR950Q:
	case AU0828_BOARD_HAUPPAUGE_HVR950Q_MXL:
	case AU0828_BOARD_HAUPPAUGE_WOODBURY:
	case AU0828_BOARD_HAUPPAUGE_HVR1265:
	case AU0828_BOARD_HAUPPAUGE_IMPACTVCBE:
		/* GPIO's
		 * 4 - CS5340
		 * 5 - AU8522 Demodulator
@@ -340,6 +386,10 @@ struct usb_device_id au0828_usb_id_table[] = {
		.driver_info = AU0828_BOARD_HAUPPAUGE_HVR950Q },
	{ USB_DEVICE(0x2040, 0x7270),
		.driver_info = AU0828_BOARD_HAUPPAUGE_HVR950Q },
	{ USB_DEVICE(0x2040, 0x72b0),
		.driver_info = AU0828_BOARD_HAUPPAUGE_IMPACTVCBE },
	{ USB_DEVICE(0x2040, 0x72a0),
		.driver_info = AU0828_BOARD_HAUPPAUGE_HVR1265 },
	{ },
};

+2 −0
Original line number Diff line number Diff line
@@ -11,3 +11,5 @@
#define AU0828_BOARD_DVICO_FUSIONHDTV7	3
#define AU0828_BOARD_HAUPPAUGE_HVR950Q_MXL	4
#define AU0828_BOARD_HAUPPAUGE_WOODBURY	5
#define AU0828_BOARD_HAUPPAUGE_IMPACTVCBE	6
#define AU0828_BOARD_HAUPPAUGE_HVR1265		7
+1 −0
Original line number Diff line number Diff line
@@ -571,6 +571,7 @@ int au0828_dvb_register(struct au0828_dev *dev)
	switch (dev->boardnr) {
	case AU0828_BOARD_HAUPPAUGE_HVR850:
	case AU0828_BOARD_HAUPPAUGE_HVR950Q:
	case AU0828_BOARD_HAUPPAUGE_HVR1265:
		dvb->frontend = dvb_attach(au8522_attach,
				&hauppauge_hvr950q_config,
				&dev->i2c_adap);
+1 −0
Original line number Diff line number Diff line
@@ -300,6 +300,7 @@ int au0828_rc_register(struct au0828_dev *dev)
	if (dev->board.has_ir_i2c) {	/* external i2c device */
		switch (dev->boardnr) {
		case AU0828_BOARD_HAUPPAUGE_HVR950Q:
		case AU0828_BOARD_HAUPPAUGE_HVR1265:
			rc->map_name = RC_MAP_HAUPPAUGE;
			ir->get_key_i2c = au0828_get_key_au8522;
			break;