]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
media: au0828: Add new Hauppauge HVR1265 and ImpactVCB-e
authorBradford Love <brad@nextdimension.cc>
Thu, 12 Mar 2026 21:35:30 +0000 (16:35 -0500)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Tue, 17 Mar 2026 09:50:19 +0000 (10:50 +0100)
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 <brad@nextdimension.cc>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/media/dvb-frontends/au8522_decoder.c
drivers/media/usb/au0828/au0828-cards.c
drivers/media/usb/au0828/au0828-cards.h
drivers/media/usb/au0828/au0828-dvb.c
drivers/media/usb/au0828/au0828-input.c

index 58c4c489bf973f08b56c517076728f86cc85d272..58b959b272c6f15c1e3c0042ddc591199463e4a3 100644 (file)
@@ -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:
index 9ee21f8bf6fa0bde7b12b68f86acdc63e8e4a3df..9929ce5dcdcd360f7208e723f1fa624e4e55ebba 100644 (file)
@@ -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 },
        { },
 };
 
index a9cdf85f98f5eb0500f94d1051fba213c30c080d..a438aeb334a08fea9ef9d2f361062598b318dbe9 100644 (file)
@@ -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
index 5d0447ff7d06ed2d6bde86ceabaef401ae74d809..31123e6f9fc31838478b8ee03ead7556c880875c 100644 (file)
@@ -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);
index 7dec1a360da6acd1933d10d46b91795be8308ed7..319be7509c82f704a42599a47af8c035b52d4e6f 100644 (file)
@@ -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;