From: Bradford Love Date: Thu, 12 Mar 2026 21:35:30 +0000 (-0500) Subject: media: au0828: Add new Hauppauge HVR1265 and ImpactVCB-e X-Git-Tag: v7.1-rc1~169^2~139 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5e521401d058b4b4bce9689e5897e286f1d4d8b0;p=thirdparty%2Fkernel%2Flinux.git 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: Bradford Love Signed-off-by: Hans Verkuil --- diff --git a/drivers/media/dvb-frontends/au8522_decoder.c b/drivers/media/dvb-frontends/au8522_decoder.c index 58c4c489bf973..58b959b272c6f 100644 --- a/drivers/media/dvb-frontends/au8522_decoder.c +++ b/drivers/media/dvb-frontends/au8522_decoder.c @@ -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: diff --git a/drivers/media/usb/au0828/au0828-cards.c b/drivers/media/usb/au0828/au0828-cards.c index 9ee21f8bf6fa0..9929ce5dcdcd3 100644 --- a/drivers/media/usb/au0828/au0828-cards.c +++ b/drivers/media/usb/au0828/au0828-cards.c @@ -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 }, { }, }; diff --git a/drivers/media/usb/au0828/au0828-cards.h b/drivers/media/usb/au0828/au0828-cards.h index a9cdf85f98f5e..a438aeb334a08 100644 --- a/drivers/media/usb/au0828/au0828-cards.h +++ b/drivers/media/usb/au0828/au0828-cards.h @@ -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 diff --git a/drivers/media/usb/au0828/au0828-dvb.c b/drivers/media/usb/au0828/au0828-dvb.c index 5d0447ff7d06e..31123e6f9fc31 100644 --- a/drivers/media/usb/au0828/au0828-dvb.c +++ b/drivers/media/usb/au0828/au0828-dvb.c @@ -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); diff --git a/drivers/media/usb/au0828/au0828-input.c b/drivers/media/usb/au0828/au0828-input.c index 7dec1a360da6a..319be7509c82f 100644 --- a/drivers/media/usb/au0828/au0828-input.c +++ b/drivers/media/usb/au0828/au0828-input.c @@ -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;