Skip to content

Commit

Permalink
V4L/DVB (7297): pvrusb2: Dynamically control range of input selections
Browse files Browse the repository at this point in the history
This follows from defining the available inputs as device attributes.
This change causes the driver to adjust its list of inputs based on
those attributes.  Now, for example, the FM radio will appear as a
choice only if the hardware supports an FM radio.

Signed-off-by: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
  • Loading branch information
Mike Isely authored and Mauro Carvalho Chehab committed Apr 24, 2008
1 parent 1aaac60 commit 29bf5b1
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 4 deletions.
26 changes: 25 additions & 1 deletion drivers/media/video/pvrusb2/pvrusb2-hdw.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ static const char *control_values_srate[] = {

static const char *control_values_input[] = {
[PVR2_CVAL_INPUT_TV] = "television", /*xawtv needs this name*/
[PVR2_CVAL_INPUT_DTV] = "dtv",
[PVR2_CVAL_INPUT_RADIO] = "radio",
[PVR2_CVAL_INPUT_SVIDEO] = "s-video",
[PVR2_CVAL_INPUT_COMPOSITE] = "composite",
Expand Down Expand Up @@ -367,6 +368,27 @@ static int ctrl_get_input(struct pvr2_ctrl *cptr,int *vp)
return 0;
}

static int ctrl_check_input(struct pvr2_ctrl *cptr,int v)
{
struct pvr2_hdw *hdw = cptr->hdw;
const struct pvr2_device_desc *dsc = hdw->hdw_desc;

switch (v) {
case PVR2_CVAL_INPUT_TV:
return dsc->flag_has_analogtuner != 0;
case PVR2_CVAL_INPUT_DTV:
return dsc->flag_has_digitaltuner != 0;
case PVR2_CVAL_INPUT_SVIDEO:
return dsc->flag_has_svideo != 0;
case PVR2_CVAL_INPUT_COMPOSITE:
return dsc->flag_has_composite != 0;
case PVR2_CVAL_INPUT_RADIO:
return dsc->flag_has_fmradio != 0;
default:
return 0;
}
}

static int ctrl_set_input(struct pvr2_ctrl *cptr,int m,int v)
{
struct pvr2_hdw *hdw = cptr->hdw;
Expand All @@ -382,7 +404,8 @@ static int ctrl_set_input(struct pvr2_ctrl *cptr,int m,int v)
if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
hdw->freqSelector = 0;
hdw->freqDirty = !0;
} else if (hdw->input_val == PVR2_CVAL_INPUT_TV) {
} else if ((hdw->input_val == PVR2_CVAL_INPUT_TV) ||
(hdw->input_val == PVR2_CVAL_INPUT_DTV)) {
hdw->freqSelector = 1;
hdw->freqDirty = !0;
}
Expand Down Expand Up @@ -803,6 +826,7 @@ static const struct pvr2_ctl_info control_defs[] = {
.name = "input",
.internal_id = PVR2_CID_INPUT,
.default_value = PVR2_CVAL_INPUT_TV,
.check_value = ctrl_check_input,
DEFREF(input),
DEFENUM(control_values_input),
},{
Expand Down
7 changes: 4 additions & 3 deletions drivers/media/video/pvrusb2/pvrusb2-hdw.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,10 @@

/* Legal values for the INPUT state variable */
#define PVR2_CVAL_INPUT_TV 0
#define PVR2_CVAL_INPUT_SVIDEO 1
#define PVR2_CVAL_INPUT_COMPOSITE 2
#define PVR2_CVAL_INPUT_RADIO 3
#define PVR2_CVAL_INPUT_DTV 1
#define PVR2_CVAL_INPUT_SVIDEO 2
#define PVR2_CVAL_INPUT_COMPOSITE 3
#define PVR2_CVAL_INPUT_RADIO 4

enum pvr2_config {
pvr2_config_empty, /* No configuration */
Expand Down

0 comments on commit 29bf5b1

Please sign in to comment.