mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 22:30:54 +07:00
V4L/DVB (8987): cx88: Add support for the Hauppauge HVR4000 and HVR4000-LITE (S2) boards
Adding support for Hauppauge's cx88 S2 based products, based on the cx24116 DVB-S2 demodulator. Signed-off-by: Steven Toth <stoth@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
0d46748c3f
commit
5bd1b66359
@ -66,3 +66,5 @@
|
||||
65 -> DViCO FusionHDTV 7 Gold [18ac:d610]
|
||||
66 -> Prolink Pixelview MPEG 8000GT [1554:4935]
|
||||
67 -> Kworld PlusTV HD PCI 120 (ATSC 120) [17de:08c1]
|
||||
68 -> Hauppauge WinTV-HVR4000 DVB-S/S2/T/Hybrid [0070:6900,0070:6904,0070:6902]
|
||||
69 -> Hauppauge WinTV-HVR4000(Lite) DVB-S/S2 [0070:6905,0070:6906]
|
||||
|
@ -1664,6 +1664,51 @@ static const struct cx88_board cx88_boards[] = {
|
||||
},
|
||||
.mpeg = CX88_MPEG_DVB,
|
||||
},
|
||||
[CX88_BOARD_HAUPPAUGE_HVR4000] = {
|
||||
.name = "Hauppauge WinTV-HVR4000 DVB-S/S2/T/Hybrid",
|
||||
.tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
|
||||
.radio_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.radio_addr = ADDR_UNSET,
|
||||
.tda9887_conf = TDA9887_PRESENT,
|
||||
/*
|
||||
* GPIO0 (WINTV2000)
|
||||
*
|
||||
* Analogue SAT DVB-T
|
||||
* Antenna 0xc4bf 0xc4bb
|
||||
* Composite 0xc4bf 0xc4bb
|
||||
* S-Video 0xc4bf 0xc4bb
|
||||
* Composite1 0xc4ff 0xc4fb
|
||||
* S-Video1 0xc4ff 0xc4fb
|
||||
*/
|
||||
.input = {{
|
||||
.type = CX88_VMUX_TELEVISION,
|
||||
.vmux = 0,
|
||||
.gpio0 = 0xc4bf,
|
||||
}, {
|
||||
.type = CX88_VMUX_COMPOSITE1,
|
||||
.vmux = 1,
|
||||
.gpio0 = 0xc4bf,
|
||||
}, {
|
||||
.type = CX88_VMUX_SVIDEO,
|
||||
.vmux = 2,
|
||||
.gpio0 = 0xc4bf,
|
||||
} },
|
||||
/* fixme: Add radio support */
|
||||
.mpeg = CX88_MPEG_DVB,
|
||||
},
|
||||
[CX88_BOARD_HAUPPAUGE_HVR4000LITE] = {
|
||||
.name = "Hauppauge WinTV-HVR4000(Lite) DVB-S/S2",
|
||||
.tuner_type = UNSET,
|
||||
.radio_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.radio_addr = ADDR_UNSET,
|
||||
.input = {{
|
||||
.type = CX88_VMUX_DVB,
|
||||
.vmux = 0,
|
||||
} },
|
||||
.mpeg = CX88_MPEG_DVB,
|
||||
},
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
@ -2013,6 +2058,26 @@ static const struct cx88_subid cx88_subids[] = {
|
||||
.subvendor = 0x17de,
|
||||
.subdevice = 0x08c1,
|
||||
.card = CX88_BOARD_KWORLD_ATSC_120,
|
||||
}, {
|
||||
.subvendor = 0x0070,
|
||||
.subdevice = 0x6900,
|
||||
.card = CX88_BOARD_HAUPPAUGE_HVR4000,
|
||||
}, {
|
||||
.subvendor = 0x0070,
|
||||
.subdevice = 0x6904,
|
||||
.card = CX88_BOARD_HAUPPAUGE_HVR4000,
|
||||
}, {
|
||||
.subvendor = 0x0070,
|
||||
.subdevice = 0x6902,
|
||||
.card = CX88_BOARD_HAUPPAUGE_HVR4000,
|
||||
}, {
|
||||
.subvendor = 0x0070,
|
||||
.subdevice = 0x6905,
|
||||
.card = CX88_BOARD_HAUPPAUGE_HVR4000LITE,
|
||||
}, {
|
||||
.subvendor = 0x0070,
|
||||
.subdevice = 0x6906,
|
||||
.card = CX88_BOARD_HAUPPAUGE_HVR4000LITE,
|
||||
},
|
||||
};
|
||||
|
||||
@ -2065,6 +2130,13 @@ static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data)
|
||||
case 14669: /* WinTV-HVR3000 (OEM, no IR, no b/panel video - Low profile) */
|
||||
case 28552: /* WinTV-PVR 'Roslyn' (No IR) */
|
||||
case 34519: /* WinTV-PCI-FM */
|
||||
case 69009:
|
||||
/* WinTV-HVR4000 (DVBS/S2/T, Video and IR, back panel inputs) */
|
||||
case 69100: /* WinTV-HVR4000LITE (DVBS/S2, IR) */
|
||||
case 69500: /* WinTV-HVR4000LITE (DVBS/S2, No IR) */
|
||||
case 69559:
|
||||
/* WinTV-HVR4000 (DVBS/S2/T, Video no IR, back panel inputs) */
|
||||
case 69569: /* WinTV-HVR4000 (DVBS/S2/T, Video no IR) */
|
||||
case 90002: /* Nova-T-PCI (9002) */
|
||||
case 92001: /* Nova-S-Plus (Video and IR) */
|
||||
case 92002: /* Nova-S-Plus (Video and IR) */
|
||||
@ -2415,6 +2487,11 @@ static void cx88_card_setup_pre_i2c(struct cx88_core *core)
|
||||
/* Enable the xc5000 tuner */
|
||||
cx_set(MO_GP0_IO, 0x00001010);
|
||||
break;
|
||||
case CX88_BOARD_HAUPPAUGE_HVR4000:
|
||||
case CX88_BOARD_HAUPPAUGE_HVR4000LITE:
|
||||
/* Init GPIO to allow tuner to attach */
|
||||
cx_write(MO_GP0_IO, 0x0000c4bf);
|
||||
udelay(1000);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2489,6 +2566,8 @@ static void cx88_card_setup(struct cx88_core *core)
|
||||
case CX88_BOARD_HAUPPAUGE_HVR1100LP:
|
||||
case CX88_BOARD_HAUPPAUGE_HVR3000:
|
||||
case CX88_BOARD_HAUPPAUGE_HVR1300:
|
||||
case CX88_BOARD_HAUPPAUGE_HVR4000:
|
||||
case CX88_BOARD_HAUPPAUGE_HVR4000LITE:
|
||||
if (0 == core->i2c_rc)
|
||||
hauppauge_eeprom(core, eeprom);
|
||||
break;
|
||||
|
@ -48,6 +48,7 @@
|
||||
#include "tuner-simple.h"
|
||||
#include "tda9887.h"
|
||||
#include "s5h1411.h"
|
||||
#include "cx24116.h"
|
||||
|
||||
MODULE_DESCRIPTION("driver for cx2388x based DVB cards");
|
||||
MODULE_AUTHOR("Chris Pascoe <c.pascoe@itee.uq.edu.au>");
|
||||
@ -518,6 +519,35 @@ static int attach_xc3028(u8 addr, struct cx8802_dev *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cx24116_set_ts_param(struct dvb_frontend *fe,
|
||||
int is_punctured)
|
||||
{
|
||||
struct cx8802_dev *dev = fe->dvb->priv;
|
||||
dev->ts_gen_cntrl = 0x2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cx24116_reset_device(struct dvb_frontend *fe)
|
||||
{
|
||||
struct cx8802_dev *dev = fe->dvb->priv;
|
||||
struct cx88_core *core = dev->core;
|
||||
|
||||
/* Reset the part */
|
||||
cx_write(MO_SRST_IO, 0);
|
||||
msleep(10);
|
||||
cx_write(MO_SRST_IO, 1);
|
||||
msleep(10);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct cx24116_config hauppauge_hvr4000_config = {
|
||||
.demod_address = 0x05,
|
||||
.set_ts_params = cx24116_set_ts_param,
|
||||
.reset_device = cx24116_reset_device,
|
||||
};
|
||||
|
||||
static int dvb_register(struct cx8802_dev *dev)
|
||||
{
|
||||
struct cx88_core *core = dev->core;
|
||||
@ -876,6 +906,18 @@ static int dvb_register(struct cx8802_dev *dev)
|
||||
goto frontend_detach;
|
||||
}
|
||||
break;
|
||||
case CX88_BOARD_HAUPPAUGE_HVR4000:
|
||||
case CX88_BOARD_HAUPPAUGE_HVR4000LITE:
|
||||
/* Support for DVB-S only, not DVB-T support */
|
||||
dev->dvb.frontend = dvb_attach(cx24116_attach,
|
||||
&hauppauge_hvr4000_config,
|
||||
&dev->core->i2c_adap);
|
||||
if (dev->dvb.frontend) {
|
||||
dvb_attach(isl6421_attach, dev->dvb.frontend,
|
||||
&dev->core->i2c_adap,
|
||||
0x08, 0x00, 0x00);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printk(KERN_ERR "%s/2: The frontend of your DVB/ATSC card isn't supported yet\n",
|
||||
core->name);
|
||||
|
@ -224,6 +224,8 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci)
|
||||
case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1:
|
||||
case CX88_BOARD_HAUPPAUGE_HVR1100:
|
||||
case CX88_BOARD_HAUPPAUGE_HVR3000:
|
||||
case CX88_BOARD_HAUPPAUGE_HVR4000:
|
||||
case CX88_BOARD_HAUPPAUGE_HVR4000LITE:
|
||||
ir_codes = ir_codes_hauppauge_new;
|
||||
ir_type = IR_TYPE_RC5;
|
||||
ir->sampling = 1;
|
||||
@ -462,6 +464,8 @@ void cx88_ir_irq(struct cx88_core *core)
|
||||
case CX88_BOARD_HAUPPAUGE_HVR1100:
|
||||
case CX88_BOARD_HAUPPAUGE_HVR3000:
|
||||
case CX88_BOARD_PINNACLE_PCTV_HD_800i:
|
||||
case CX88_BOARD_HAUPPAUGE_HVR4000:
|
||||
case CX88_BOARD_HAUPPAUGE_HVR4000LITE:
|
||||
ircode = ir_decode_biphase(ir->samples, ir->scount, 5, 7);
|
||||
ir_dprintk("biphase decoded: %x\n", ircode);
|
||||
if ((ircode & 0xfffff000) != 0x3000)
|
||||
|
@ -221,6 +221,8 @@ extern struct sram_channel cx88_sram_channels[];
|
||||
#define CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD 65
|
||||
#define CX88_BOARD_PROLINK_PV_8000GT 66
|
||||
#define CX88_BOARD_KWORLD_ATSC_120 67
|
||||
#define CX88_BOARD_HAUPPAUGE_HVR4000 68
|
||||
#define CX88_BOARD_HAUPPAUGE_HVR4000LITE 69
|
||||
|
||||
enum cx88_itype {
|
||||
CX88_VMUX_COMPOSITE1 = 1,
|
||||
|
Loading…
Reference in New Issue
Block a user