[media] cx88: add support for TeVii S464 PCI card
The card uses ds3000 demod from Montage. Signed-off-by: Igor M. Liplianin <liplianin@me.by> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
dcc8a12223
commit
0cb73639cf
@ -982,6 +982,8 @@ static int ds3000_set_frontend(struct dvb_frontend *fe,
|
|||||||
|
|
||||||
dprintk("%s() ", __func__);
|
dprintk("%s() ", __func__);
|
||||||
|
|
||||||
|
if (state->config->set_ts_params)
|
||||||
|
state->config->set_ts_params(fe, 0);
|
||||||
/* Tune */
|
/* Tune */
|
||||||
/* unknown */
|
/* unknown */
|
||||||
ds3000_tuner_writereg(state, 0x07, 0x02);
|
ds3000_tuner_writereg(state, 0x07, 0x02);
|
||||||
|
@ -28,6 +28,8 @@ struct ds3000_config {
|
|||||||
/* the demodulator's i2c address */
|
/* the demodulator's i2c address */
|
||||||
u8 demod_address;
|
u8 demod_address;
|
||||||
u8 ci_mode;
|
u8 ci_mode;
|
||||||
|
/* Set device param to start dma */
|
||||||
|
int (*set_ts_params)(struct dvb_frontend *fe, int is_punctured);
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(CONFIG_DVB_DS3000) || \
|
#if defined(CONFIG_DVB_DS3000) || \
|
||||||
|
@ -1953,6 +1953,18 @@ static const struct cx88_board cx88_boards[] = {
|
|||||||
} },
|
} },
|
||||||
.mpeg = CX88_MPEG_DVB,
|
.mpeg = CX88_MPEG_DVB,
|
||||||
},
|
},
|
||||||
|
[CX88_BOARD_TEVII_S464] = {
|
||||||
|
.name = "TeVii S464 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,
|
||||||
|
},
|
||||||
[CX88_BOARD_OMICOM_SS4_PCI] = {
|
[CX88_BOARD_OMICOM_SS4_PCI] = {
|
||||||
.name = "Omicom SS4 DVB-S/S2 PCI",
|
.name = "Omicom SS4 DVB-S/S2 PCI",
|
||||||
.tuner_type = UNSET,
|
.tuner_type = UNSET,
|
||||||
@ -2528,6 +2540,10 @@ static const struct cx88_subid cx88_subids[] = {
|
|||||||
.subvendor = 0xd460,
|
.subvendor = 0xd460,
|
||||||
.subdevice = 0x9022,
|
.subdevice = 0x9022,
|
||||||
.card = CX88_BOARD_TEVII_S460,
|
.card = CX88_BOARD_TEVII_S460,
|
||||||
|
}, {
|
||||||
|
.subvendor = 0xd464,
|
||||||
|
.subdevice = 0x9022,
|
||||||
|
.card = CX88_BOARD_TEVII_S464,
|
||||||
}, {
|
}, {
|
||||||
.subvendor = 0xA044,
|
.subvendor = 0xA044,
|
||||||
.subdevice = 0x2011,
|
.subdevice = 0x2011,
|
||||||
@ -3286,6 +3302,7 @@ static void cx88_card_setup(struct cx88_core *core)
|
|||||||
}
|
}
|
||||||
case CX88_BOARD_TEVII_S420:
|
case CX88_BOARD_TEVII_S420:
|
||||||
case CX88_BOARD_TEVII_S460:
|
case CX88_BOARD_TEVII_S460:
|
||||||
|
case CX88_BOARD_TEVII_S464:
|
||||||
case CX88_BOARD_OMICOM_SS4_PCI:
|
case CX88_BOARD_OMICOM_SS4_PCI:
|
||||||
case CX88_BOARD_TBS_8910:
|
case CX88_BOARD_TBS_8910:
|
||||||
case CX88_BOARD_TBS_8920:
|
case CX88_BOARD_TBS_8920:
|
||||||
|
@ -57,6 +57,7 @@
|
|||||||
#include "stb6100.h"
|
#include "stb6100.h"
|
||||||
#include "stb6100_proc.h"
|
#include "stb6100_proc.h"
|
||||||
#include "mb86a16.h"
|
#include "mb86a16.h"
|
||||||
|
#include "ds3000.h"
|
||||||
|
|
||||||
MODULE_DESCRIPTION("driver for cx2388x based DVB cards");
|
MODULE_DESCRIPTION("driver for cx2388x based DVB cards");
|
||||||
MODULE_AUTHOR("Chris Pascoe <c.pascoe@itee.uq.edu.au>");
|
MODULE_AUTHOR("Chris Pascoe <c.pascoe@itee.uq.edu.au>");
|
||||||
@ -648,6 +649,20 @@ static const struct cx24116_config tevii_s460_config = {
|
|||||||
.reset_device = cx24116_reset_device,
|
.reset_device = cx24116_reset_device,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int ds3000_set_ts_param(struct dvb_frontend *fe,
|
||||||
|
int is_punctured)
|
||||||
|
{
|
||||||
|
struct cx8802_dev *dev = fe->dvb->priv;
|
||||||
|
dev->ts_gen_cntrl = 4;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct ds3000_config tevii_ds3000_config = {
|
||||||
|
.demod_address = 0x68,
|
||||||
|
.set_ts_params = ds3000_set_ts_param,
|
||||||
|
};
|
||||||
|
|
||||||
static const struct stv0900_config prof_7301_stv0900_config = {
|
static const struct stv0900_config prof_7301_stv0900_config = {
|
||||||
.demod_address = 0x6a,
|
.demod_address = 0x6a,
|
||||||
/* demod_mode = 0,*/
|
/* demod_mode = 0,*/
|
||||||
@ -1381,6 +1396,14 @@ static int dvb_register(struct cx8802_dev *dev)
|
|||||||
if (fe0->dvb.frontend != NULL)
|
if (fe0->dvb.frontend != NULL)
|
||||||
fe0->dvb.frontend->ops.set_voltage = tevii_dvbs_set_voltage;
|
fe0->dvb.frontend->ops.set_voltage = tevii_dvbs_set_voltage;
|
||||||
break;
|
break;
|
||||||
|
case CX88_BOARD_TEVII_S464:
|
||||||
|
fe0->dvb.frontend = dvb_attach(ds3000_attach,
|
||||||
|
&tevii_ds3000_config,
|
||||||
|
&core->i2c_adap);
|
||||||
|
if (fe0->dvb.frontend != NULL)
|
||||||
|
fe0->dvb.frontend->ops.set_voltage =
|
||||||
|
tevii_dvbs_set_voltage;
|
||||||
|
break;
|
||||||
case CX88_BOARD_OMICOM_SS4_PCI:
|
case CX88_BOARD_OMICOM_SS4_PCI:
|
||||||
case CX88_BOARD_TBS_8920:
|
case CX88_BOARD_TBS_8920:
|
||||||
case CX88_BOARD_PROF_7300:
|
case CX88_BOARD_PROF_7300:
|
||||||
|
@ -373,6 +373,7 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci)
|
|||||||
ir_codes = RC_MAP_TBS_NEC;
|
ir_codes = RC_MAP_TBS_NEC;
|
||||||
ir->sampling = 0xff00; /* address */
|
ir->sampling = 0xff00; /* address */
|
||||||
break;
|
break;
|
||||||
|
case CX88_BOARD_TEVII_S464:
|
||||||
case CX88_BOARD_TEVII_S460:
|
case CX88_BOARD_TEVII_S460:
|
||||||
case CX88_BOARD_TEVII_S420:
|
case CX88_BOARD_TEVII_S420:
|
||||||
ir_codes = RC_MAP_TEVII_NEC;
|
ir_codes = RC_MAP_TEVII_NEC;
|
||||||
|
@ -241,6 +241,7 @@ extern const struct sram_channel const cx88_sram_channels[];
|
|||||||
#define CX88_BOARD_PROF_7301 83
|
#define CX88_BOARD_PROF_7301 83
|
||||||
#define CX88_BOARD_SAMSUNG_SMT_7020 84
|
#define CX88_BOARD_SAMSUNG_SMT_7020 84
|
||||||
#define CX88_BOARD_TWINHAN_VP1027_DVBS 85
|
#define CX88_BOARD_TWINHAN_VP1027_DVBS 85
|
||||||
|
#define CX88_BOARD_TEVII_S464 86
|
||||||
|
|
||||||
enum cx88_itype {
|
enum cx88_itype {
|
||||||
CX88_VMUX_COMPOSITE1 = 1,
|
CX88_VMUX_COMPOSITE1 = 1,
|
||||||
|
Loading…
Reference in New Issue
Block a user