12504ba9fSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
20c0d06caSMauro Carvalho Chehab /*
30c0d06caSMauro Carvalho Chehab  *
40c0d06caSMauro Carvalho Chehab  *  Copyright (C) 2005 Mike Isely <isely@pobox.com>
50c0d06caSMauro Carvalho Chehab  */
60c0d06caSMauro Carvalho Chehab #ifndef __PVRUSB2_CTRL_H
70c0d06caSMauro Carvalho Chehab #define __PVRUSB2_CTRL_H
80c0d06caSMauro Carvalho Chehab 
90c0d06caSMauro Carvalho Chehab struct pvr2_ctrl;
100c0d06caSMauro Carvalho Chehab 
110c0d06caSMauro Carvalho Chehab enum pvr2_ctl_type {
120c0d06caSMauro Carvalho Chehab 	pvr2_ctl_int = 0,
130c0d06caSMauro Carvalho Chehab 	pvr2_ctl_enum = 1,
140c0d06caSMauro Carvalho Chehab 	pvr2_ctl_bitmask = 2,
150c0d06caSMauro Carvalho Chehab 	pvr2_ctl_bool = 3,
160c0d06caSMauro Carvalho Chehab };
170c0d06caSMauro Carvalho Chehab 
180c0d06caSMauro Carvalho Chehab 
190c0d06caSMauro Carvalho Chehab /* Set the given control. */
200c0d06caSMauro Carvalho Chehab int pvr2_ctrl_set_value(struct pvr2_ctrl *,int val);
210c0d06caSMauro Carvalho Chehab 
220c0d06caSMauro Carvalho Chehab /* Set/clear specific bits of the given control. */
230c0d06caSMauro Carvalho Chehab int pvr2_ctrl_set_mask_value(struct pvr2_ctrl *,int mask,int val);
240c0d06caSMauro Carvalho Chehab 
250c0d06caSMauro Carvalho Chehab /* Get the current value of the given control. */
260c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_value(struct pvr2_ctrl *,int *valptr);
270c0d06caSMauro Carvalho Chehab 
280c0d06caSMauro Carvalho Chehab /* Retrieve control's type */
290c0d06caSMauro Carvalho Chehab enum pvr2_ctl_type pvr2_ctrl_get_type(struct pvr2_ctrl *);
300c0d06caSMauro Carvalho Chehab 
310c0d06caSMauro Carvalho Chehab /* Retrieve control's maximum value (int type) */
320c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_max(struct pvr2_ctrl *);
330c0d06caSMauro Carvalho Chehab 
340c0d06caSMauro Carvalho Chehab /* Retrieve control's minimum value (int type) */
350c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_min(struct pvr2_ctrl *);
360c0d06caSMauro Carvalho Chehab 
370c0d06caSMauro Carvalho Chehab /* Retrieve control's default value (any type) */
380c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_def(struct pvr2_ctrl *, int *valptr);
390c0d06caSMauro Carvalho Chehab 
400c0d06caSMauro Carvalho Chehab /* Retrieve control's enumeration count (enum only) */
410c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_cnt(struct pvr2_ctrl *);
420c0d06caSMauro Carvalho Chehab 
430c0d06caSMauro Carvalho Chehab /* Retrieve control's valid mask bits (bit mask only) */
440c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_mask(struct pvr2_ctrl *);
450c0d06caSMauro Carvalho Chehab 
460c0d06caSMauro Carvalho Chehab /* Retrieve the control's name */
470c0d06caSMauro Carvalho Chehab const char *pvr2_ctrl_get_name(struct pvr2_ctrl *);
480c0d06caSMauro Carvalho Chehab 
490c0d06caSMauro Carvalho Chehab /* Retrieve the control's desc */
500c0d06caSMauro Carvalho Chehab const char *pvr2_ctrl_get_desc(struct pvr2_ctrl *);
510c0d06caSMauro Carvalho Chehab 
520c0d06caSMauro Carvalho Chehab /* Retrieve a control enumeration or bit mask value */
530c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_valname(struct pvr2_ctrl *,int,char *,unsigned int,
540c0d06caSMauro Carvalho Chehab 			  unsigned int *);
550c0d06caSMauro Carvalho Chehab 
560c0d06caSMauro Carvalho Chehab /* Return true if control is writable */
570c0d06caSMauro Carvalho Chehab int pvr2_ctrl_is_writable(struct pvr2_ctrl *);
580c0d06caSMauro Carvalho Chehab 
590c0d06caSMauro Carvalho Chehab /* Return V4L flags value for control (or zero if there is no v4l control
600c0d06caSMauro Carvalho Chehab    actually under this control) */
610c0d06caSMauro Carvalho Chehab unsigned int pvr2_ctrl_get_v4lflags(struct pvr2_ctrl *);
620c0d06caSMauro Carvalho Chehab 
630c0d06caSMauro Carvalho Chehab /* Return V4L ID for this control or zero if none */
640c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_v4lid(struct pvr2_ctrl *);
650c0d06caSMauro Carvalho Chehab 
660c0d06caSMauro Carvalho Chehab /* Return true if control has custom symbolic representation */
670c0d06caSMauro Carvalho Chehab int pvr2_ctrl_has_custom_symbols(struct pvr2_ctrl *);
680c0d06caSMauro Carvalho Chehab 
690c0d06caSMauro Carvalho Chehab /* Convert a given mask/val to a custom symbolic value */
700c0d06caSMauro Carvalho Chehab int pvr2_ctrl_custom_value_to_sym(struct pvr2_ctrl *,
710c0d06caSMauro Carvalho Chehab 				  int mask,int val,
720c0d06caSMauro Carvalho Chehab 				  char *buf,unsigned int maxlen,
730c0d06caSMauro Carvalho Chehab 				  unsigned int *len);
740c0d06caSMauro Carvalho Chehab 
750c0d06caSMauro Carvalho Chehab /* Convert a symbolic value to a mask/value pair */
760c0d06caSMauro Carvalho Chehab int pvr2_ctrl_custom_sym_to_value(struct pvr2_ctrl *,
770c0d06caSMauro Carvalho Chehab 				  const char *buf,unsigned int len,
780c0d06caSMauro Carvalho Chehab 				  int *maskptr,int *valptr);
790c0d06caSMauro Carvalho Chehab 
800c0d06caSMauro Carvalho Chehab /* Convert a given mask/val to a symbolic value */
810c0d06caSMauro Carvalho Chehab int pvr2_ctrl_value_to_sym(struct pvr2_ctrl *,
820c0d06caSMauro Carvalho Chehab 			   int mask,int val,
830c0d06caSMauro Carvalho Chehab 			   char *buf,unsigned int maxlen,
840c0d06caSMauro Carvalho Chehab 			   unsigned int *len);
850c0d06caSMauro Carvalho Chehab 
860c0d06caSMauro Carvalho Chehab /* Convert a symbolic value to a mask/value pair */
870c0d06caSMauro Carvalho Chehab int pvr2_ctrl_sym_to_value(struct pvr2_ctrl *,
880c0d06caSMauro Carvalho Chehab 			   const char *buf,unsigned int len,
890c0d06caSMauro Carvalho Chehab 			   int *maskptr,int *valptr);
900c0d06caSMauro Carvalho Chehab 
910c0d06caSMauro Carvalho Chehab /* Convert a given mask/val to a symbolic value - must already be
920c0d06caSMauro Carvalho Chehab    inside of critical region. */
930c0d06caSMauro Carvalho Chehab int pvr2_ctrl_value_to_sym_internal(struct pvr2_ctrl *,
940c0d06caSMauro Carvalho Chehab 			   int mask,int val,
950c0d06caSMauro Carvalho Chehab 			   char *buf,unsigned int maxlen,
960c0d06caSMauro Carvalho Chehab 			   unsigned int *len);
970c0d06caSMauro Carvalho Chehab 
980c0d06caSMauro Carvalho Chehab #endif /* __PVRUSB2_CTRL_H */
99