media: cx23885: Add analog frontend to Hauppauge QuadHD
authorBrad Love <brad@nextdimension.cc>
Thu, 14 Nov 2019 20:04:01 +0000 (21:04 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 21 Apr 2020 14:48:07 +0000 (16:48 +0200)
Add analog tuner frontend to 888 Hauppauge QuadHD boards

Signed-off-by: Brad Love <brad@nextdimension.cc>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/pci/cx23885/cx23885-cards.c
drivers/media/pci/cx23885/cx23885-dvb.c
drivers/media/pci/cx23885/cx23885-video.c

index 8e5a2c5..266bd52 100644 (file)
@@ -757,24 +757,47 @@ struct cx23885_board cx23885_boards[] = {
                } },
        },
        [CX23885_BOARD_HAUPPAUGE_QUADHD_DVB] = {
-               .name        = "Hauppauge WinTV-QuadHD-DVB",
+               .name         = "Hauppauge WinTV-QuadHD-DVB",
+               .porta        = CX23885_ANALOG_VIDEO,
                .portb        = CX23885_MPEG_DVB,
                .portc        = CX23885_MPEG_DVB,
+               .tuner_type     = TUNER_ABSENT,
+               .force_bff      = 1,
+               .input          = {{
+                       .type   = CX23885_VMUX_TELEVISION,
+                       .vmux   =       CX25840_VIN7_CH3 |
+                                       CX25840_VIN5_CH2 |
+                                       CX25840_VIN2_CH1 |
+                                       CX25840_DIF_ON,
+                       .amux   = CX25840_AUDIO8,
+               } },
        },
        [CX23885_BOARD_HAUPPAUGE_QUADHD_DVB_885] = {
-               .name       = "Hauppauge WinTV-QuadHD-DVB(885)",
+               .name         = "Hauppauge WinTV-QuadHD-DVB(885)",
                .portb        = CX23885_MPEG_DVB,
                .portc        = CX23885_MPEG_DVB,
+               .tuner_type   = TUNER_ABSENT,
        },
        [CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC] = {
-               .name        = "Hauppauge WinTV-QuadHD-ATSC",
+               .name         = "Hauppauge WinTV-QuadHD-ATSC",
+               .porta        = CX23885_ANALOG_VIDEO,
                .portb        = CX23885_MPEG_DVB,
                .portc        = CX23885_MPEG_DVB,
+               .tuner_type     = TUNER_ABSENT,
+               .input          = {{
+                       .type   = CX23885_VMUX_TELEVISION,
+                       .vmux   =       CX25840_VIN7_CH3 |
+                                       CX25840_VIN5_CH2 |
+                                       CX25840_VIN2_CH1 |
+                                       CX25840_DIF_ON,
+                       .amux   = CX25840_AUDIO8,
+               } },
        },
        [CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC_885] = {
-               .name       = "Hauppauge WinTV-QuadHD-ATSC(885)",
+               .name         = "Hauppauge WinTV-QuadHD-ATSC(885)",
                .portb        = CX23885_MPEG_DVB,
                .portc        = CX23885_MPEG_DVB,
+               .tuner_type   = TUNER_ABSENT,
        },
        [CX23885_BOARD_HAUPPAUGE_HVR1265_K4] = {
                .name           = "Hauppauge WinTV-HVR-1265(161111)",
index 494751a..81058d3 100644 (file)
@@ -2367,6 +2367,16 @@ static int dvb_register(struct cx23885_tsport *port)
                                goto frontend_detach;
                        }
                        port->i2c_client_tuner = client_tuner;
+
+                       /* we only attach tuner for analog on the 888 version */
+                       if (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_DVB) {
+                               pr_info("%s(): QUADHD_DVB analog setup\n",
+                                       __func__);
+                               dev->ts1.analog_fe.tuner_priv = client_tuner;
+                               memcpy(&dev->ts1.analog_fe.ops.tuner_ops,
+                                      &fe0->dvb.frontend->ops.tuner_ops,
+                                      sizeof(struct dvb_tuner_ops));
+                       }
                        break;
 
                /* port c - terrestrial/cable */
@@ -2456,6 +2466,16 @@ static int dvb_register(struct cx23885_tsport *port)
                                goto frontend_detach;
                        }
                        port->i2c_client_tuner = client_tuner;
+
+                       /* we only attach tuner for analog on the 888 version */
+                       if (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC) {
+                               pr_info("%s(): QUADHD_ATSC analog setup\n",
+                                       __func__);
+                               dev->ts1.analog_fe.tuner_priv = client_tuner;
+                               memcpy(&dev->ts1.analog_fe.ops.tuner_ops,
+                                      &fe0->dvb.frontend->ops.tuner_ops,
+                                      sizeof(struct dvb_tuner_ops));
+                       }
                        break;
 
                /* port c - terrestrial/cable */
index 000c108..a2a1dd4 100644 (file)
@@ -253,6 +253,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_HVR1265_K4) ||
+               (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC) ||
+               (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_DVB) ||
                (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1850) ||
                (dev->board == CX23885_BOARD_MYGICA_X8507) ||
                (dev->board == CX23885_BOARD_AVERMEDIA_HC81R) ||
@@ -996,7 +998,9 @@ static int cx23885_set_freq_via_ops(struct cx23885_dev *dev,
        if ((dev->board == CX23885_BOARD_HAUPPAUGE_HVR1850) ||
            (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255) ||
            (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255_22111) ||
-           (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1265_K4))
+           (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1265_K4) ||
+           (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_DVB) ||
+           (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC))
                fe = &dev->ts1.analog_fe;
 
        if (fe && fe->ops.tuner_ops.set_analog_params) {
@@ -1027,6 +1031,8 @@ int cx23885_set_frequency(struct file *file, void *priv,
        case CX23885_BOARD_HAUPPAUGE_HVR1255_22111:
        case CX23885_BOARD_HAUPPAUGE_HVR1265_K4:
        case CX23885_BOARD_HAUPPAUGE_HVR1850:
+       case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB:
+       case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC:
                ret = cx23885_set_freq_via_ops(dev, f);
                break;
        default: