Commit 0cb73639 authored by Igor M. Liplianin's avatar Igor M. Liplianin Committed by Mauro Carvalho Chehab

[media] cx88: add support for TeVii S464 PCI card

The card uses ds3000 demod from Montage.
Signed-off-by: default avatarIgor M. Liplianin <liplianin@me.by>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent dcc8a122
...@@ -982,6 +982,8 @@ static int ds3000_set_frontend(struct dvb_frontend *fe, ...@@ -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 { ...@@ -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[] = { ...@@ -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[] = { ...@@ -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) ...@@ -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 @@ ...@@ -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 = { ...@@ -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) ...@@ -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) ...@@ -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[]; ...@@ -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,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment