Skip to content

Commit

Permalink
V4L/DVB (7407): tuner-simple: add module options to specify rf input
Browse files Browse the repository at this point in the history
Add module options to tuner-simple, called "atv_input" and "dtv_input"
to specify which rf input to use on devices with multiple rf inputs.
If the module option is not specified, then the driver will autoselect
the rf input, as per previous behavior.

Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
  • Loading branch information
Michael Krufky authored and Mauro Carvalho Chehab committed Apr 24, 2008
1 parent 26f1b94 commit 6551161
Showing 1 changed file with 47 additions and 12 deletions.
59 changes: 47 additions & 12 deletions drivers/media/video/tuner-simple.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,22 @@ static int debug;
module_param(debug, int, 0644);
MODULE_PARM_DESC(debug, "enable verbose debug messages");

#define TUNER_SIMPLE_MAX 64
static unsigned int simple_devcount;

static int offset;
module_param(offset, int, 0664);
MODULE_PARM_DESC(offset, "Allows to specify an offset for tuner");

static unsigned int atv_input[TUNER_SIMPLE_MAX] = \
{ [0 ... (TUNER_SIMPLE_MAX-1)] = 0 };
static unsigned int dtv_input[TUNER_SIMPLE_MAX] = \
{ [0 ... (TUNER_SIMPLE_MAX-1)] = 0 };
module_param_array(atv_input, int, NULL, 0644);
module_param_array(dtv_input, int, NULL, 0644);
MODULE_PARM_DESC(atv_input, "specify atv rf input, 0 for autoselect");
MODULE_PARM_DESC(dtv_input, "specify dtv rf input, 0 for autoselect");

/* ---------------------------------------------------------------------- */

/* tv standard selection for Temic 4046 FM5
Expand Down Expand Up @@ -92,6 +104,7 @@ static DEFINE_MUTEX(tuner_simple_list_mutex);
static LIST_HEAD(hybrid_tuner_instance_list);

struct tuner_simple_priv {
unsigned int nr;
u16 last_div;

struct tuner_i2c_props i2c_props;
Expand Down Expand Up @@ -364,7 +377,6 @@ static int simple_std_setup(struct dvb_frontend *fe,
*cb &= ~0x03;
if (!(params->std & V4L2_STD_ATSC))
*cb |= 2;
/* FIXME: input */
break;

case TUNER_MICROTUNE_4042FI5:
Expand Down Expand Up @@ -396,10 +408,11 @@ static int simple_std_setup(struct dvb_frontend *fe,
tuner_warn("i2c i/o error: rc == %d "
"(should be 2)\n", rc);
priv->i2c_props.addr = tuneraddr;
/* FIXME: input */
break;
}
}
if (atv_input[priv->nr])
simple_set_rf_input(fe, config, cb, atv_input[priv->nr]);

return 0;
}
Expand Down Expand Up @@ -770,16 +783,19 @@ static void simple_set_dvb(struct dvb_frontend *fe, u8 *buf,
{
unsigned int new_rf;

switch (params->u.vsb.modulation) {
case QAM_64:
case QAM_256:
new_rf = 1;
break;
case VSB_8:
default:
new_rf = 0;
break;
}
if (dtv_input[priv->nr])
new_rf = dtv_input[priv->nr];
else
switch (params->u.vsb.modulation) {
case QAM_64:
case QAM_256:
new_rf = 1;
break;
case VSB_8:
default:
new_rf = 0;
break;
}
simple_set_rf_input(fe, &buf[2], &buf[3], new_rf);
break;
}
Expand Down Expand Up @@ -1025,6 +1041,7 @@ struct dvb_frontend *simple_tuner_attach(struct dvb_frontend *fe,

priv->type = type;
priv->tun = &tuners[type];
priv->nr = simple_devcount++;
break;
default:
fe->tuner_priv = priv;
Expand All @@ -1038,6 +1055,24 @@ struct dvb_frontend *simple_tuner_attach(struct dvb_frontend *fe,

tuner_info("type set to %d (%s)\n", type, priv->tun->name);

if ((debug) || ((atv_input[priv->nr] > 0) ||
(dtv_input[priv->nr] > 0))) {
if (0 == atv_input[priv->nr])
tuner_info("tuner %d atv rf input will be "
"autoselected\n", priv->nr);
else
tuner_info("tuner %d atv rf input will be "
"set to input %d (insmod option)\n",
priv->nr, atv_input[priv->nr]);
if (0 == dtv_input[priv->nr])
tuner_info("tuner %d dtv rf input will be "
"autoselected\n", priv->nr);
else
tuner_info("tuner %d dtv rf input will be "
"set to input %d (insmod option)\n",
priv->nr, dtv_input[priv->nr]);
}

strlcpy(fe->ops.tuner_ops.info.name, priv->tun->name,
sizeof(fe->ops.tuner_ops.info.name));

Expand Down

0 comments on commit 6551161

Please sign in to comment.