V4L/DVB (12549): v4l2: video device: Add FM TX controls default configurations
authorEduardo Valentin <eduardo.valentin@nokia.com>
Tue, 11 Aug 2009 21:49:12 +0000 (18:49 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 12 Sep 2009 15:19:19 +0000 (12:19 -0300)
This patch adds basic configurations for FM TX extended controls.
That includes controls names, menu strings, pointer identification,
type classification and flags configuration.

Signed-off-by: Eduardo Valentin <eduardo.valentin@nokia.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/v4l2-common.c
drivers/media/video/v4l2-compat-ioctl32.c

index 536150c3406771eeb4d6e4721e2a5c48a0b85605..3a0c64935b0ed43d1ada0444b7803f49f3f9e0f8 100644 (file)
@@ -342,6 +342,12 @@ const char **v4l2_ctrl_get_menu(u32 id)
                "Sepia",
                NULL
        };
+       static const char *tune_preemphasis[] = {
+               "No preemphasis",
+               "50 useconds",
+               "75 useconds",
+               NULL,
+       };
 
        switch (id) {
                case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
@@ -380,6 +386,8 @@ const char **v4l2_ctrl_get_menu(u32 id)
                        return camera_exposure_auto;
                case V4L2_CID_COLORFX:
                        return colorfx;
+               case V4L2_CID_TUNE_PREEMPHASIS:
+                       return tune_preemphasis;
                default:
                        return NULL;
        }
@@ -478,6 +486,28 @@ const char *v4l2_ctrl_get_name(u32 id)
        case V4L2_CID_ZOOM_CONTINUOUS:          return "Zoom, Continuous";
        case V4L2_CID_PRIVACY:                  return "Privacy";
 
+       /* FM Radio Modulator control */
+       case V4L2_CID_FM_TX_CLASS:              return "FM Radio Modulator Controls";
+       case V4L2_CID_RDS_TX_DEVIATION:         return "RDS Signal Deviation";
+       case V4L2_CID_RDS_TX_PI:                return "RDS Program ID";
+       case V4L2_CID_RDS_TX_PTY:               return "RDS Program Type";
+       case V4L2_CID_RDS_TX_PS_NAME:           return "RDS PS Name";
+       case V4L2_CID_RDS_TX_RADIO_TEXT:        return "RDS Radio Text";
+       case V4L2_CID_AUDIO_LIMITER_ENABLED:    return "Audio Limiter Feature Enabled";
+       case V4L2_CID_AUDIO_LIMITER_RELEASE_TIME: return "Audio Limiter Release Time";
+       case V4L2_CID_AUDIO_LIMITER_DEVIATION:  return "Audio Limiter Deviation";
+       case V4L2_CID_AUDIO_COMPRESSION_ENABLED: return "Audio Compression Feature Enabled";
+       case V4L2_CID_AUDIO_COMPRESSION_GAIN:   return "Audio Compression Gain";
+       case V4L2_CID_AUDIO_COMPRESSION_THRESHOLD: return "Audio Compression Threshold";
+       case V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME: return "Audio Compression Attack Time";
+       case V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME: return "Audio Compression Release Time";
+       case V4L2_CID_PILOT_TONE_ENABLED:       return "Pilot Tone Feature Enabled";
+       case V4L2_CID_PILOT_TONE_DEVIATION:     return "Pilot Tone Deviation";
+       case V4L2_CID_PILOT_TONE_FREQUENCY:     return "Pilot Tone Frequency";
+       case V4L2_CID_TUNE_PREEMPHASIS: return "Pre-emphasis settings";
+       case V4L2_CID_TUNE_POWER_LEVEL:         return "Tune Power Level";
+       case V4L2_CID_TUNE_ANTENNA_CAPACITOR:   return "Tune Antenna Capacitor";
+
        default:
                return NULL;
        }
@@ -510,6 +540,9 @@ int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 ste
        case V4L2_CID_EXPOSURE_AUTO_PRIORITY:
        case V4L2_CID_FOCUS_AUTO:
        case V4L2_CID_PRIVACY:
+       case V4L2_CID_AUDIO_LIMITER_ENABLED:
+       case V4L2_CID_AUDIO_COMPRESSION_ENABLED:
+       case V4L2_CID_PILOT_TONE_ENABLED:
                qctrl->type = V4L2_CTRL_TYPE_BOOLEAN;
                min = 0;
                max = step = 1;
@@ -538,12 +571,18 @@ int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 ste
        case V4L2_CID_MPEG_STREAM_VBI_FMT:
        case V4L2_CID_EXPOSURE_AUTO:
        case V4L2_CID_COLORFX:
+       case V4L2_CID_TUNE_PREEMPHASIS:
                qctrl->type = V4L2_CTRL_TYPE_MENU;
                step = 1;
                break;
+       case V4L2_CID_RDS_TX_PS_NAME:
+       case V4L2_CID_RDS_TX_RADIO_TEXT:
+               qctrl->type = V4L2_CTRL_TYPE_STRING;
+               break;
        case V4L2_CID_USER_CLASS:
        case V4L2_CID_CAMERA_CLASS:
        case V4L2_CID_MPEG_CLASS:
+       case V4L2_CID_FM_TX_CLASS:
                qctrl->type = V4L2_CTRL_TYPE_CTRL_CLASS;
                qctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY;
                min = max = step = def = 0;
@@ -572,6 +611,17 @@ int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 ste
        case V4L2_CID_BLUE_BALANCE:
        case V4L2_CID_GAMMA:
        case V4L2_CID_SHARPNESS:
+       case V4L2_CID_RDS_TX_DEVIATION:
+       case V4L2_CID_AUDIO_LIMITER_RELEASE_TIME:
+       case V4L2_CID_AUDIO_LIMITER_DEVIATION:
+       case V4L2_CID_AUDIO_COMPRESSION_GAIN:
+       case V4L2_CID_AUDIO_COMPRESSION_THRESHOLD:
+       case V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME:
+       case V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME:
+       case V4L2_CID_PILOT_TONE_DEVIATION:
+       case V4L2_CID_PILOT_TONE_FREQUENCY:
+       case V4L2_CID_TUNE_POWER_LEVEL:
+       case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
                qctrl->flags |= V4L2_CTRL_FLAG_SLIDER;
                break;
        case V4L2_CID_PAN_RELATIVE:
index f788c41a3a5ca598119317ab0b1b635cc8d5949a..997975d5e024b06934e0a4d1d39bba4c091be85b 100644 (file)
@@ -616,14 +616,16 @@ struct v4l2_ext_control32 {
    for now this will do. */
 
 /* Return non-zero if this control is a pointer type. Currently only
- * type STRING is a pointer type.
- *
- * Note that there are currently no controls of this type, but at least the
- * compat32 code is in place to properly handle such controls. Please
- * remove this note once the first pointer controls are added. */
+   type STRING is a pointer type. */
 static inline int ctrl_is_pointer(u32 id)
 {
-       return 0;
+       switch (id) {
+       case V4L2_CID_RDS_TX_PS_NAME:
+       case V4L2_CID_RDS_TX_RADIO_TEXT:
+               return 1;
+       default:
+               return 0;
+       }
 }
 
 static int get_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext_controls32 __user *up)