mirror of
https://github.com/DigitalDevices/dddvb.git
synced 2025-12-26 23:26:46 +01:00
add auto delivery system adjustment
This commit is contained in:
@@ -659,7 +659,7 @@ static struct mci_cfg *ddb_max_cfgs [] = {
|
||||
|
||||
struct dvb_frontend *ddb_mx_attach(struct ddb_input *input, int nr, int tuner, int type)
|
||||
{
|
||||
return ddb_mci_attach(input, ddb_max_cfgs[type & 3], nr, tuner);
|
||||
return ddb_mci_attach(input, ddb_max_cfgs[type & 3], nr, tuner, (type & 4) >> 2);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(ddb_mx_attach);
|
||||
|
||||
@@ -555,8 +555,8 @@ int ddb_fe_attach_mci(struct ddb_input *input, u32 type)
|
||||
fm = 3;
|
||||
if (!demod)
|
||||
ddb_mci_cmd_link_simple(link, MCI_CMD_SET_INPUT_CONFIG,
|
||||
0xff, (delmode & 0x10) | 3);
|
||||
dvb->fe = ddb_mx_attach(input, demod, tuner, 3);
|
||||
0xff, 3);
|
||||
dvb->fe = ddb_mx_attach(input, demod, tuner, 3 | (delmode & 4));
|
||||
dvb->input = 0;
|
||||
break;
|
||||
case DDB_TUNER_MCI_M8A:
|
||||
@@ -586,8 +586,8 @@ int ddb_fe_attach_mci(struct ddb_input *input, u32 type)
|
||||
}
|
||||
if (!demod)
|
||||
ddb_mci_cmd_link_simple(link, MCI_CMD_SET_INPUT_CONFIG,
|
||||
0xff, mode | (delmode & 0x10));
|
||||
dvb->fe = ddb_mx_attach(input, demod, tuner, mmode);
|
||||
0xff, mode);
|
||||
dvb->fe = ddb_mx_attach(input, demod, tuner, mmode | (delmode & 4));
|
||||
dvb->input = tuner;
|
||||
fm = 0;
|
||||
break;
|
||||
|
||||
@@ -402,8 +402,37 @@ static struct mci_base *match_base(void *key)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
enum fe_delivery_system todelsys[16] = {
|
||||
SYS_DVBS, SYS_DVBS2, SYS_DVBS2, SYS_DVBC_ANNEX_A,
|
||||
SYS_DVBT, SYS_DVBT2, SYS_DVBC2, SYS_DVBC_ANNEX_B,
|
||||
SYS_ISDBT, SYS_ISDBC, SYS_ISDBS, SYS_ISDBS3,
|
||||
SYS_ATSC, SYS_ATSC3, SYS_UNDEFINED, SYS_UNDEFINED
|
||||
};
|
||||
|
||||
static void adjust_caps(struct mci *mci)
|
||||
{
|
||||
int i, j;
|
||||
u16 dels;
|
||||
|
||||
memset(&mci->cmd, 0, sizeof(struct mci_command));
|
||||
mci->cmd.command = MCI_CMD_GET_CAPABILITIES;
|
||||
if (ddb_mci_cmd(mci, &mci->cmd, &mci->result))
|
||||
return;
|
||||
if (mci->signal_info.status & 0x80)
|
||||
return;
|
||||
dels = mci->result.mx_capabilities.standards;
|
||||
printk("CAPS = %02x\n", dels);
|
||||
for (i = j = 0; i < 16; i++) {
|
||||
if (dels & (1 << i))
|
||||
mci->fe.ops.delsys[j++] = todelsys[i];
|
||||
}
|
||||
if (j < 16)
|
||||
mci->fe.ops.delsys[j] = 0;
|
||||
}
|
||||
|
||||
struct dvb_frontend *ddb_mci_attach(struct ddb_input *input,
|
||||
struct mci_cfg *cfg, int nr, int tuner)
|
||||
struct mci_cfg *cfg, int nr,
|
||||
int tuner, u8 flags)
|
||||
{
|
||||
struct ddb_port *port = input->port;
|
||||
struct ddb *dev = port->dev;
|
||||
@@ -440,6 +469,8 @@ struct dvb_frontend *ddb_mci_attach(struct ddb_input *input,
|
||||
cfg->base_init(base);
|
||||
}
|
||||
memcpy(&state->fe.ops, cfg->fe_ops, sizeof(struct dvb_frontend_ops));
|
||||
if (flags & 1)
|
||||
adjust_caps(state);
|
||||
state->fe.demodulator_priv = state;
|
||||
state->nr = nr;
|
||||
state->demod = nr;
|
||||
|
||||
@@ -659,5 +659,5 @@ struct dvb_frontend *ddb_sx8_attach(struct ddb_input *input, int nr, int tuner,
|
||||
int (**fn_set_input)(struct dvb_frontend *fe, int input))
|
||||
{
|
||||
*fn_set_input = set_input;
|
||||
return ddb_mci_attach(input, &ddb_max_sx8_cfg, nr, tuner);
|
||||
return ddb_mci_attach(input, &ddb_max_sx8_cfg, nr, tuner, 0);
|
||||
}
|
||||
|
||||
@@ -580,7 +580,7 @@ int ddb_lnb_init_fmode(struct ddb *dev, struct ddb_link *link, u32 fm);
|
||||
struct ddb_irq *ddb_irq_set(struct ddb *dev, u32 link, u32 nr,
|
||||
void (*handler)(void *), void *data);
|
||||
|
||||
struct dvb_frontend *ddb_mci_attach(struct ddb_input *input, struct mci_cfg *cfg, int nr, int tuner);
|
||||
struct dvb_frontend *ddb_mci_attach(struct ddb_input *input, struct mci_cfg *cfg, int nr, int tuner, u8 flags);
|
||||
struct dvb_frontend *ddb_sx8_attach(struct ddb_input *input, int nr, int tuner,
|
||||
int (**fn_set_input)(struct dvb_frontend *fe, int input));
|
||||
struct dvb_frontend *ddb_mx_attach(struct ddb_input *input, int nr, int tuner, int type);
|
||||
|
||||
Reference in New Issue
Block a user