aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/v4l2-core/v4l2-ctrls.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/v4l2-core/v4l2-ctrls.c')
-rw-r--r--drivers/media/v4l2-core/v4l2-ctrls.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index 6ff002bd5909..55c683254102 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -735,6 +735,8 @@ const char *v4l2_ctrl_get_name(u32 id)
735 case V4L2_CID_MPEG_VIDEO_DEC_PTS: return "Video Decoder PTS"; 735 case V4L2_CID_MPEG_VIDEO_DEC_PTS: return "Video Decoder PTS";
736 case V4L2_CID_MPEG_VIDEO_DEC_FRAME: return "Video Decoder Frame Count"; 736 case V4L2_CID_MPEG_VIDEO_DEC_FRAME: return "Video Decoder Frame Count";
737 case V4L2_CID_MPEG_VIDEO_VBV_DELAY: return "Initial Delay for VBV Control"; 737 case V4L2_CID_MPEG_VIDEO_VBV_DELAY: return "Initial Delay for VBV Control";
738 case V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE: return "Horizontal MV Search Range";
739 case V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE: return "Vertical MV Search Range";
738 case V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER: return "Repeat Sequence Header"; 740 case V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER: return "Repeat Sequence Header";
739 741
740 /* VPX controls */ 742 /* VPX controls */
@@ -857,6 +859,17 @@ const char *v4l2_ctrl_get_name(u32 id)
857 case V4L2_CID_FM_RX_CLASS: return "FM Radio Receiver Controls"; 859 case V4L2_CID_FM_RX_CLASS: return "FM Radio Receiver Controls";
858 case V4L2_CID_TUNE_DEEMPHASIS: return "De-Emphasis"; 860 case V4L2_CID_TUNE_DEEMPHASIS: return "De-Emphasis";
859 case V4L2_CID_RDS_RECEPTION: return "RDS Reception"; 861 case V4L2_CID_RDS_RECEPTION: return "RDS Reception";
862
863 case V4L2_CID_RF_TUNER_CLASS: return "RF Tuner Controls";
864 case V4L2_CID_RF_TUNER_LNA_GAIN_AUTO: return "LNA Gain, Auto";
865 case V4L2_CID_RF_TUNER_LNA_GAIN: return "LNA Gain";
866 case V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO: return "Mixer Gain, Auto";
867 case V4L2_CID_RF_TUNER_MIXER_GAIN: return "Mixer Gain";
868 case V4L2_CID_RF_TUNER_IF_GAIN_AUTO: return "IF Gain, Auto";
869 case V4L2_CID_RF_TUNER_IF_GAIN: return "IF Gain";
870 case V4L2_CID_RF_TUNER_BANDWIDTH_AUTO: return "Bandwidth, Auto";
871 case V4L2_CID_RF_TUNER_BANDWIDTH: return "Bandwidth";
872 case V4L2_CID_RF_TUNER_PLL_LOCK: return "PLL Lock";
860 default: 873 default:
861 return NULL; 874 return NULL;
862 } 875 }
@@ -906,10 +919,19 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
906 case V4L2_CID_WIDE_DYNAMIC_RANGE: 919 case V4L2_CID_WIDE_DYNAMIC_RANGE:
907 case V4L2_CID_IMAGE_STABILIZATION: 920 case V4L2_CID_IMAGE_STABILIZATION:
908 case V4L2_CID_RDS_RECEPTION: 921 case V4L2_CID_RDS_RECEPTION:
922 case V4L2_CID_RF_TUNER_LNA_GAIN_AUTO:
923 case V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO:
924 case V4L2_CID_RF_TUNER_IF_GAIN_AUTO:
925 case V4L2_CID_RF_TUNER_BANDWIDTH_AUTO:
926 case V4L2_CID_RF_TUNER_PLL_LOCK:
909 *type = V4L2_CTRL_TYPE_BOOLEAN; 927 *type = V4L2_CTRL_TYPE_BOOLEAN;
910 *min = 0; 928 *min = 0;
911 *max = *step = 1; 929 *max = *step = 1;
912 break; 930 break;
931 case V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE:
932 case V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE:
933 *type = V4L2_CTRL_TYPE_INTEGER;
934 break;
913 case V4L2_CID_PAN_RESET: 935 case V4L2_CID_PAN_RESET:
914 case V4L2_CID_TILT_RESET: 936 case V4L2_CID_TILT_RESET:
915 case V4L2_CID_FLASH_STROBE: 937 case V4L2_CID_FLASH_STROBE:
@@ -991,6 +1013,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
991 case V4L2_CID_IMAGE_PROC_CLASS: 1013 case V4L2_CID_IMAGE_PROC_CLASS:
992 case V4L2_CID_DV_CLASS: 1014 case V4L2_CID_DV_CLASS:
993 case V4L2_CID_FM_RX_CLASS: 1015 case V4L2_CID_FM_RX_CLASS:
1016 case V4L2_CID_RF_TUNER_CLASS:
994 *type = V4L2_CTRL_TYPE_CTRL_CLASS; 1017 *type = V4L2_CTRL_TYPE_CTRL_CLASS;
995 /* You can neither read not write these */ 1018 /* You can neither read not write these */
996 *flags |= V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_WRITE_ONLY; 1019 *flags |= V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_WRITE_ONLY;
@@ -1063,6 +1086,10 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
1063 case V4L2_CID_PILOT_TONE_FREQUENCY: 1086 case V4L2_CID_PILOT_TONE_FREQUENCY:
1064 case V4L2_CID_TUNE_POWER_LEVEL: 1087 case V4L2_CID_TUNE_POWER_LEVEL:
1065 case V4L2_CID_TUNE_ANTENNA_CAPACITOR: 1088 case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
1089 case V4L2_CID_RF_TUNER_LNA_GAIN:
1090 case V4L2_CID_RF_TUNER_MIXER_GAIN:
1091 case V4L2_CID_RF_TUNER_IF_GAIN:
1092 case V4L2_CID_RF_TUNER_BANDWIDTH:
1066 *flags |= V4L2_CTRL_FLAG_SLIDER; 1093 *flags |= V4L2_CTRL_FLAG_SLIDER;
1067 break; 1094 break;
1068 case V4L2_CID_PAN_RELATIVE: 1095 case V4L2_CID_PAN_RELATIVE:
@@ -1081,6 +1108,9 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
1081 case V4L2_CID_DV_RX_POWER_PRESENT: 1108 case V4L2_CID_DV_RX_POWER_PRESENT:
1082 *flags |= V4L2_CTRL_FLAG_READ_ONLY; 1109 *flags |= V4L2_CTRL_FLAG_READ_ONLY;
1083 break; 1110 break;
1111 case V4L2_CID_RF_TUNER_PLL_LOCK:
1112 *flags |= V4L2_CTRL_FLAG_VOLATILE;
1113 break;
1084 } 1114 }
1085} 1115}
1086EXPORT_SYMBOL(v4l2_ctrl_fill); 1116EXPORT_SYMBOL(v4l2_ctrl_fill);
@@ -1921,7 +1951,8 @@ void v4l2_ctrl_cluster(unsigned ncontrols, struct v4l2_ctrl **controls)
1921 int i; 1951 int i;
1922 1952
1923 /* The first control is the master control and it must not be NULL */ 1953 /* The first control is the master control and it must not be NULL */
1924 BUG_ON(ncontrols == 0 || controls[0] == NULL); 1954 if (WARN_ON(ncontrols == 0 || controls[0] == NULL))
1955 return;
1925 1956
1926 for (i = 0; i < ncontrols; i++) { 1957 for (i = 0; i < ncontrols; i++) {
1927 if (controls[i]) { 1958 if (controls[i]) {