Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 30839
b: refs/heads/master
c: a761f43
h: refs/heads/master
i:
  30837: 6e98105
  30835: 070277f
  30831: 690ad7a
v: v3
  • Loading branch information
Mike Isely authored and Mauro Carvalho Chehab committed Jun 27, 2006
1 parent a9b2fd3 commit 8b43a15
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 332139635a8c0431cc2eb67adf1e983eb96728e3
refs/heads/master: a761f4311b3e31008c7d168c3a8c254a9c7e35ac
21 changes: 21 additions & 0 deletions trunk/drivers/media/video/pvrusb2/pvrusb2-ctrl.c
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,27 @@ int pvr2_ctrl_get_valname(struct pvr2_ctrl *cptr,int val,
}


/* Return V4L ID for this control or zero if none */
int pvr2_ctrl_get_v4lid(struct pvr2_ctrl *cptr)
{
if (!cptr) return 0;
return cptr->info->v4l_id;
}


unsigned int pvr2_ctrl_get_v4lflags(struct pvr2_ctrl *cptr)
{
unsigned int flags = 0;

if (cptr->info->get_v4lflags) {
flags = cptr->info->get_v4lflags(cptr);
}


return flags;
}


/* Return true if control is writable */
int pvr2_ctrl_is_writable(struct pvr2_ctrl *cptr)
{
Expand Down
7 changes: 7 additions & 0 deletions trunk/drivers/media/video/pvrusb2/pvrusb2-ctrl.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,13 @@ int pvr2_ctrl_get_valname(struct pvr2_ctrl *,int,char *,unsigned int,
/* Return true if control is writable */
int pvr2_ctrl_is_writable(struct pvr2_ctrl *);

/* Return V4L flags value for control (or zero if there is no v4l control
actually under this control) */
unsigned int pvr2_ctrl_get_v4lflags(struct pvr2_ctrl *);

/* Return V4L ID for this control or zero if none */
int pvr2_ctrl_get_v4lid(struct pvr2_ctrl *);

/* Return true if control has custom symbolic representation */
int pvr2_ctrl_has_custom_symbols(struct pvr2_ctrl *);

Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/media/video/pvrusb2/pvrusb2-hdw-internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ typedef int (*pvr2_ctlf_val_to_sym)(struct pvr2_ctrl *,int msk,int val,
typedef int (*pvr2_ctlf_sym_to_val)(struct pvr2_ctrl *,
const char *,unsigned int,
int *mskp,int *valp);
typedef unsigned int (*pvr2_ctlf_get_v4lflags)(struct pvr2_ctrl *);

/* This structure describes a specific control. A table of these is set up
in pvrusb2-hdw.c. */
Expand All @@ -111,6 +112,7 @@ struct pvr2_ctl_info {
pvr2_ctlf_sym_to_val sym_to_val; /* Custom convert symbol->value */
pvr2_ctlf_is_dirty is_dirty; /* Return true if dirty */
pvr2_ctlf_clear_dirty clear_dirty; /* Clear dirty state */
pvr2_ctlf_get_v4lflags get_v4lflags;/* Retrieve v4l flags */

/* Control's type (int, enum, bitmask) */
enum pvr2_ctl_type type;
Expand Down
26 changes: 25 additions & 1 deletion trunk/drivers/media/video/pvrusb2/pvrusb2-hdw.c
Original file line number Diff line number Diff line change
Expand Up @@ -1988,7 +1988,7 @@ struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw *hdw,
}


/* Given an ID, retrieve the control structure associated with it. */
/* Given a V4L ID, retrieve the control structure associated with it. */
struct pvr2_ctrl *pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw *hdw,unsigned int ctl_id)
{
struct pvr2_ctrl *cptr;
Expand All @@ -2005,6 +2005,30 @@ struct pvr2_ctrl *pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw *hdw,unsigned int ctl_id
}


/* Given a V4L ID for its immediate predecessor, retrieve the control
structure associated with it. */
struct pvr2_ctrl *pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw *hdw,
unsigned int ctl_id)
{
struct pvr2_ctrl *cptr,*cp2;
unsigned int idx;
int i;

/* This could be made a lot more efficient, but for now... */
cp2 = 0;
for (idx = 0; idx < hdw->control_cnt; idx++) {
cptr = hdw->controls + idx;
i = cptr->info->v4l_id;
if (!i) continue;
if (i <= ctl_id) continue;
if (cp2 && (cp2->info->v4l_id < i)) continue;
cp2 = cptr;
}
return cp2;
return 0;
}


static const char *get_ctrl_typename(enum pvr2_ctl_type tp)
{
switch (tp) {
Expand Down
4 changes: 4 additions & 0 deletions trunk/drivers/media/video/pvrusb2/pvrusb2-hdw.h
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,10 @@ struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw *,unsigned int);
/* Retrieve a control handle given its V4L ID (if any) */
struct pvr2_ctrl *pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw *,unsigned int ctl_id);

/* Retrieve a control handle given its immediate predecessor V4L ID (if any) */
struct pvr2_ctrl *pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw *,
unsigned int ctl_id);

/* Commit all control changes made up to this point */
int pvr2_hdw_commit_ctl(struct pvr2_hdw *);

Expand Down
14 changes: 12 additions & 2 deletions trunk/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
Original file line number Diff line number Diff line change
Expand Up @@ -520,12 +520,19 @@ static int pvr2_v4l2_do_ioctl(struct inode *inode, struct file *file,
ret = 0;
cptr = pvr2_hdw_get_ctrl_v4l(hdw,vc->id);
if (!cptr) {
pvr2_trace(PVR2_TRACE_ERROR_LEGS,
"QUERYCTRL id=0x%x not implemented here",
vc->id);
ret = -EINVAL;
break;
}

strlcpy(vc->name,pvr2_ctrl_get_name(cptr),sizeof(vc->name));
vc->flags = 0;
pvr2_trace(PVR2_TRACE_V4LIOCTL,
"QUERYCTRL id=0x%x mapping name=%s (%s)",
vc->id,pvr2_ctrl_get_name(cptr),
pvr2_ctrl_get_desc(cptr));
strlcpy(vc->name,pvr2_ctrl_get_desc(cptr),sizeof(vc->name));
vc->flags = pvr2_ctrl_get_v4lflags(cptr);
vc->default_value = pvr2_ctrl_get_def(cptr);
switch (pvr2_ctrl_get_type(cptr)) {
case pvr2_ctl_enum:
Expand All @@ -547,6 +554,9 @@ static int pvr2_v4l2_do_ioctl(struct inode *inode, struct file *file,
vc->step = 1;
break;
default:
pvr2_trace(PVR2_TRACE_ERROR_LEGS,
"QUERYCTRL id=0x%x name=%s not mappable",
vc->id,pvr2_ctrl_get_name(cptr));
ret = -EINVAL;
break;
}
Expand Down

0 comments on commit 8b43a15

Please sign in to comment.