[media] vpif: replace preset with the timings API
authorHans Verkuil <hans.verkuil@cisco.com>
Tue, 18 Sep 2012 10:18:47 +0000 (07:18 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 26 Sep 2012 20:00:02 +0000 (17:00 -0300)
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Lad, Prabhakar <prabhakar.lad@ti.com>
Signed-off-by: Manjunath Hadli <manjunath.hadli@ti.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/platform/davinci/vpif.c
drivers/media/platform/davinci/vpif.h
drivers/media/platform/davinci/vpif_capture.c
drivers/media/platform/davinci/vpif_capture.h
drivers/media/platform/davinci/vpif_display.c
drivers/media/platform/davinci/vpif_display.h

index 9bd3caa34a3e61ee3d535fe5126ae1d7c67783fb..cff3c0ab501f6751c745fbdf9461a3dc745f837e 100644 (file)
@@ -25,6 +25,8 @@
 #include <linux/io.h>
 #include <linux/clk.h>
 #include <linux/err.h>
+#include <linux/v4l2-dv-timings.h>
+
 #include <mach/hardware.h>
 
 #include "vpif.h"
@@ -65,7 +67,7 @@ const struct vpif_channel_config_params ch_params[] = {
                .capture_format = 0,
                .vbi_supported = 0,
                .hd_sd = 1,
-               .dv_preset = V4L2_DV_480P59_94,
+               .dv_timings = V4L2_DV_BT_CEA_720X480P59_94,
        },
        {
                .name = "576p50",
@@ -82,7 +84,7 @@ const struct vpif_channel_config_params ch_params[] = {
                .capture_format = 0,
                .vbi_supported = 0,
                .hd_sd = 1,
-               .dv_preset = V4L2_DV_576P50,
+               .dv_timings = V4L2_DV_BT_CEA_720X576P50,
        },
        {
                .name = "720p50",
@@ -99,7 +101,7 @@ const struct vpif_channel_config_params ch_params[] = {
                .capture_format = 0,
                .vbi_supported = 0,
                .hd_sd = 1,
-               .dv_preset = V4L2_DV_720P50,
+               .dv_timings = V4L2_DV_BT_CEA_1280X720P50,
        },
        {
                .name = "720p60",
@@ -116,7 +118,7 @@ const struct vpif_channel_config_params ch_params[] = {
                .capture_format = 0,
                .vbi_supported = 0,
                .hd_sd = 1,
-               .dv_preset = V4L2_DV_720P60,
+               .dv_timings = V4L2_DV_BT_CEA_1280X720P60,
        },
        {
                .name = "1080I50",
@@ -136,7 +138,7 @@ const struct vpif_channel_config_params ch_params[] = {
                .capture_format = 0,
                .vbi_supported = 0,
                .hd_sd = 1,
-               .dv_preset = V4L2_DV_1080I50,
+               .dv_timings = V4L2_DV_BT_CEA_1920X1080I50,
        },
        {
                .name = "1080I60",
@@ -156,7 +158,7 @@ const struct vpif_channel_config_params ch_params[] = {
                .capture_format = 0,
                .vbi_supported = 0,
                .hd_sd = 1,
-               .dv_preset = V4L2_DV_1080I60,
+               .dv_timings = V4L2_DV_BT_CEA_1920X1080I60,
        },
        {
                .name = "1080p60",
@@ -173,7 +175,7 @@ const struct vpif_channel_config_params ch_params[] = {
                .capture_format = 0,
                .vbi_supported = 0,
                .hd_sd = 1,
-               .dv_preset = V4L2_DV_1080P60,
+               .dv_timings = V4L2_DV_BT_CEA_1920X1080P60,
        },
 
        /* SDTV formats */
index c2ce4d97c279cd8aaf24983da4ea29124a6f48ce..a1ab6a0f4e9e53406d2fb91027b0479f63a35767 100644 (file)
@@ -533,7 +533,7 @@ static inline void channel2_clipping_enable(int enable)
        }
 }
 
-/* function to enable clipping (for both active and blanking regions) on ch 2 */
+/* function to enable clipping (for both active and blanking regions) on ch 3 */
 static inline void channel3_clipping_enable(int enable)
 {
        if (enable) {
@@ -634,7 +634,7 @@ struct vpif_channel_config_params {
                                         * supports capturing vbi or not */
        u8 hd_sd;                       /* HDTV (1) or SDTV (0) format */
        v4l2_std_id stdid;              /* SDTV format */
-       u32 dv_preset;                  /* HDTV format */
+       struct v4l2_dv_timings dv_timings;      /* HDTV format */
 };
 
 extern const unsigned int vpif_ch_params_count;
index 1b625b065c3268f3b81f97fe93a52f8974e06b2c..13aa46dc2f336347a23f58296a411440ae80bd62 100644 (file)
@@ -551,7 +551,8 @@ static int vpif_update_std_info(struct channel_obj *ch)
                        }
                } else {
                        vpif_dbg(2, debug, "HD format\n");
-                       if (config->dv_preset == vid_ch->dv_preset) {
+                       if (!memcmp(&config->dv_timings, &vid_ch->dv_timings,
+                               sizeof(vid_ch->dv_timings))) {
                                memcpy(std_info, config, sizeof(*config));
                                break;
                        }
@@ -1384,8 +1385,7 @@ static int vpif_s_std(struct file *file, void *priv, v4l2_std_id *std_id)
 
        /* Call encoder subdevice function to set the standard */
        ch->video.stdid = *std_id;
-       ch->video.dv_preset = V4L2_DV_INVALID;
-       memset(&ch->video.bt_timings, 0, sizeof(ch->video.bt_timings));
+       memset(&ch->video.dv_timings, 0, sizeof(ch->video.dv_timings));
 
        /* Get the information about the standard */
        if (vpif_update_std_info(ch)) {
@@ -1719,108 +1719,37 @@ static int vpif_cropcap(struct file *file, void *priv,
 }
 
 /**
- * vpif_enum_dv_presets() - ENUM_DV_PRESETS handler
+ * vpif_enum_dv_timings() - ENUM_DV_TIMINGS handler
  * @file: file ptr
  * @priv: file handle
- * @preset: input preset
+ * @timings: input timings
  */
-static int vpif_enum_dv_presets(struct file *file, void *priv,
-               struct v4l2_dv_enum_preset *preset)
+static int
+vpif_enum_dv_timings(struct file *file, void *priv,
+                    struct v4l2_enum_dv_timings *timings)
 {
        struct vpif_fh *fh = priv;
        struct channel_obj *ch = fh->channel;
 
        return v4l2_subdev_call(vpif_obj.sd[ch->curr_sd_index],
-                       video, enum_dv_presets, preset);
+                               video, enum_dv_timings, timings);
 }
 
 /**
- * vpif_query_dv_presets() - QUERY_DV_PRESET handler
+ * vpif_query_dv_timings() - QUERY_DV_TIMINGS handler
  * @file: file ptr
  * @priv: file handle
- * @preset: input preset
+ * @timings: input timings
  */
-static int vpif_query_dv_preset(struct file *file, void *priv,
-               struct v4l2_dv_preset *preset)
+static int
+vpif_query_dv_timings(struct file *file, void *priv,
+                     struct v4l2_dv_timings *timings)
 {
        struct vpif_fh *fh = priv;
        struct channel_obj *ch = fh->channel;
 
        return v4l2_subdev_call(vpif_obj.sd[ch->curr_sd_index],
-                      video, query_dv_preset, preset);
-}
-/**
- * vpif_s_dv_presets() - S_DV_PRESETS handler
- * @file: file ptr
- * @priv: file handle
- * @preset: input preset
- */
-static int vpif_s_dv_preset(struct file *file, void *priv,
-               struct v4l2_dv_preset *preset)
-{
-       struct vpif_fh *fh = priv;
-       struct channel_obj *ch = fh->channel;
-       struct common_obj *common = &ch->common[VPIF_VIDEO_INDEX];
-       int ret = 0;
-
-       if (common->started) {
-               vpif_dbg(1, debug, "streaming in progress\n");
-               return -EBUSY;
-       }
-
-       if ((VPIF_CHANNEL0_VIDEO == ch->channel_id) ||
-           (VPIF_CHANNEL1_VIDEO == ch->channel_id)) {
-               if (!fh->initialized) {
-                       vpif_dbg(1, debug, "Channel Busy\n");
-                       return -EBUSY;
-               }
-       }
-
-       ret = v4l2_prio_check(&ch->prio, fh->prio);
-       if (ret)
-               return ret;
-
-       fh->initialized = 1;
-
-       /* Call encoder subdevice function to set the standard */
-       if (mutex_lock_interruptible(&common->lock))
-               return -ERESTARTSYS;
-
-       ch->video.dv_preset = preset->preset;
-       ch->video.stdid = V4L2_STD_UNKNOWN;
-       memset(&ch->video.bt_timings, 0, sizeof(ch->video.bt_timings));
-
-       /* Get the information about the standard */
-       if (vpif_update_std_info(ch)) {
-               vpif_dbg(1, debug, "Error getting the standard info\n");
-               ret = -EINVAL;
-       } else {
-               /* Configure the default format information */
-               vpif_config_format(ch);
-
-               ret = v4l2_subdev_call(vpif_obj.sd[ch->curr_sd_index],
-                               video, s_dv_preset, preset);
-       }
-
-       mutex_unlock(&common->lock);
-
-       return ret;
-}
-/**
- * vpif_g_dv_presets() - G_DV_PRESETS handler
- * @file: file ptr
- * @priv: file handle
- * @preset: input preset
- */
-static int vpif_g_dv_preset(struct file *file, void *priv,
-               struct v4l2_dv_preset *preset)
-{
-       struct vpif_fh *fh = priv;
-       struct channel_obj *ch = fh->channel;
-
-       preset->preset = ch->video.dv_preset;
-
-       return 0;
+                               video, query_dv_timings, timings);
 }
 
 /**
@@ -1837,7 +1766,7 @@ static int vpif_s_dv_timings(struct file *file, void *priv,
        struct vpif_params *vpifparams = &ch->vpifparams;
        struct vpif_channel_config_params *std_info = &vpifparams->std_info;
        struct video_obj *vid_ch = &ch->video;
-       struct v4l2_bt_timings *bt = &vid_ch->bt_timings;
+       struct v4l2_bt_timings *bt = &vid_ch->dv_timings.bt;
        int ret;
 
        if (timings->type != V4L2_DV_BT_656_1120) {
@@ -1873,7 +1802,7 @@ static int vpif_s_dv_timings(struct file *file, void *priv,
                return -EINVAL;
        }
 
-       *bt = timings->bt;
+       vid_ch->dv_timings = *timings;
 
        /* Configure video port timings */
 
@@ -1916,10 +1845,8 @@ static int vpif_s_dv_timings(struct file *file, void *priv,
        std_info->vbi_supported = 0;
        std_info->hd_sd = 1;
        std_info->stdid = 0;
-       std_info->dv_preset = V4L2_DV_INVALID;
 
        vid_ch->stdid = 0;
-       vid_ch->dv_preset = V4L2_DV_INVALID;
        return 0;
 }
 
@@ -1935,9 +1862,8 @@ static int vpif_g_dv_timings(struct file *file, void *priv,
        struct vpif_fh *fh = priv;
        struct channel_obj *ch = fh->channel;
        struct video_obj *vid_ch = &ch->video;
-       struct v4l2_bt_timings *bt = &vid_ch->bt_timings;
 
-       timings->bt = *bt;
+       *timings = vid_ch->dv_timings;
 
        return 0;
 }
@@ -2040,10 +1966,8 @@ static const struct v4l2_ioctl_ops vpif_ioctl_ops = {
        .vidioc_streamon                = vpif_streamon,
        .vidioc_streamoff               = vpif_streamoff,
        .vidioc_cropcap                 = vpif_cropcap,
-       .vidioc_enum_dv_presets         = vpif_enum_dv_presets,
-       .vidioc_s_dv_preset             = vpif_s_dv_preset,
-       .vidioc_g_dv_preset             = vpif_g_dv_preset,
-       .vidioc_query_dv_preset         = vpif_query_dv_preset,
+       .vidioc_enum_dv_timings         = vpif_enum_dv_timings,
+       .vidioc_query_dv_timings        = vpif_query_dv_timings,
        .vidioc_s_dv_timings            = vpif_s_dv_timings,
        .vidioc_g_dv_timings            = vpif_g_dv_timings,
        .vidioc_g_chip_ident            = vpif_g_chip_ident,
index 3511510f43ee32098732e0f480f1067579404a69..aa6d3daffda8be52c02ef6328834c42b7390874f 100644 (file)
@@ -54,8 +54,7 @@ struct video_obj {
        enum v4l2_field buf_field;
        /* Currently selected or default standard */
        v4l2_std_id stdid;
-       u32 dv_preset;
-       struct v4l2_bt_timings bt_timings;
+       struct v4l2_dv_timings dv_timings;
        /* This is to track the last input that is passed to application */
        u32 input_idx;
 };
index ff6e43293ce49e5896a7881fc48bffa6b7372ecf..8003c56487bb8ebd6c3d3e5424b5a38a1babaaeb 100644 (file)
@@ -499,12 +499,6 @@ static int vpif_update_std_info(struct channel_obj *ch)
                                memcpy(std_info, config, sizeof(*config));
                                break;
                        }
-               } else {
-                       vpif_dbg(2, debug, "HD format\n");
-                       if (config->dv_preset == vid_ch->dv_preset) {
-                               memcpy(std_info, config, sizeof(*config));
-                               break;
-                       }
                }
        }
 
@@ -523,10 +517,10 @@ static int vpif_update_resolution(struct channel_obj *ch)
        struct vpif_params *vpifparams = &ch->vpifparams;
        struct vpif_channel_config_params *std_info = &vpifparams->std_info;
 
-       if (!vid_ch->stdid && !vid_ch->dv_preset && !vid_ch->bt_timings.height)
+       if (!vid_ch->stdid && !vid_ch->dv_timings.bt.height)
                return -EINVAL;
 
-       if (vid_ch->stdid || vid_ch->dv_preset) {
+       if (vid_ch->stdid) {
                if (vpif_update_std_info(ch))
                        return -EINVAL;
        }
@@ -1055,9 +1049,7 @@ static int vpif_s_std(struct file *file, void *priv, v4l2_std_id *std_id)
 
        /* Call encoder subdevice function to set the standard */
        ch->video.stdid = *std_id;
-       ch->video.dv_preset = V4L2_DV_INVALID;
-       memset(&ch->video.bt_timings, 0, sizeof(ch->video.bt_timings));
-
+       memset(&ch->video.dv_timings, 0, sizeof(ch->video.dv_timings));
        /* Get the information about the standard */
        if (vpif_update_resolution(ch))
                return -EINVAL;
@@ -1287,87 +1279,23 @@ static int vpif_s_priority(struct file *file, void *priv, enum v4l2_priority p)
 }
 
 /**
- * vpif_enum_dv_presets() - ENUM_DV_PRESETS handler
+ * vpif_enum_dv_timings() - ENUM_DV_TIMINGS handler
  * @file: file ptr
  * @priv: file handle
- * @preset: input preset
+ * @timings: input timings
  */
-static int vpif_enum_dv_presets(struct file *file, void *priv,
-               struct v4l2_dv_enum_preset *preset)
+static int
+vpif_enum_dv_timings(struct file *file, void *priv,
+                    struct v4l2_enum_dv_timings *timings)
 {
        struct vpif_fh *fh = priv;
        struct channel_obj *ch = fh->channel;
        struct video_obj *vid_ch = &ch->video;
 
        return v4l2_subdev_call(vpif_obj.sd[vid_ch->output_id],
-                       video, enum_dv_presets, preset);
+                       video, enum_dv_timings, timings);
 }
 
-/**
- * vpif_s_dv_presets() - S_DV_PRESETS handler
- * @file: file ptr
- * @priv: file handle
- * @preset: input preset
- */
-static int vpif_s_dv_preset(struct file *file, void *priv,
-               struct v4l2_dv_preset *preset)
-{
-       struct vpif_fh *fh = priv;
-       struct channel_obj *ch = fh->channel;
-       struct common_obj *common = &ch->common[VPIF_VIDEO_INDEX];
-       struct video_obj *vid_ch = &ch->video;
-       int ret = 0;
-
-       if (common->started) {
-               vpif_dbg(1, debug, "streaming in progress\n");
-               return -EBUSY;
-       }
-
-       ret = v4l2_prio_check(&ch->prio, fh->prio);
-       if (ret != 0)
-               return ret;
-
-       fh->initialized = 1;
-
-       /* Call encoder subdevice function to set the standard */
-       if (mutex_lock_interruptible(&common->lock))
-               return -ERESTARTSYS;
-
-       ch->video.dv_preset = preset->preset;
-       ch->video.stdid = V4L2_STD_UNKNOWN;
-       memset(&ch->video.bt_timings, 0, sizeof(ch->video.bt_timings));
-
-       /* Get the information about the standard */
-       if (vpif_update_resolution(ch)) {
-               ret = -EINVAL;
-       } else {
-               /* Configure the default format information */
-               vpif_config_format(ch);
-
-               ret = v4l2_subdev_call(vpif_obj.sd[vid_ch->output_id],
-                               video, s_dv_preset, preset);
-       }
-
-       mutex_unlock(&common->lock);
-
-       return ret;
-}
-/**
- * vpif_g_dv_presets() - G_DV_PRESETS handler
- * @file: file ptr
- * @priv: file handle
- * @preset: input preset
- */
-static int vpif_g_dv_preset(struct file *file, void *priv,
-               struct v4l2_dv_preset *preset)
-{
-       struct vpif_fh *fh = priv;
-       struct channel_obj *ch = fh->channel;
-
-       preset->preset = ch->video.dv_preset;
-
-       return 0;
-}
 /**
  * vpif_s_dv_timings() - S_DV_TIMINGS handler
  * @file: file ptr
@@ -1382,7 +1310,7 @@ static int vpif_s_dv_timings(struct file *file, void *priv,
        struct vpif_params *vpifparams = &ch->vpifparams;
        struct vpif_channel_config_params *std_info = &vpifparams->std_info;
        struct video_obj *vid_ch = &ch->video;
-       struct v4l2_bt_timings *bt = &vid_ch->bt_timings;
+       struct v4l2_bt_timings *bt = &vid_ch->dv_timings.bt;
        int ret;
 
        if (timings->type != V4L2_DV_BT_656_1120) {
@@ -1418,7 +1346,7 @@ static int vpif_s_dv_timings(struct file *file, void *priv,
                return -EINVAL;
        }
 
-       *bt = timings->bt;
+       vid_ch->dv_timings = *timings;
 
        /* Configure video port timings */
 
@@ -1462,10 +1390,7 @@ static int vpif_s_dv_timings(struct file *file, void *priv,
        std_info->vbi_supported = 0;
        std_info->hd_sd = 1;
        std_info->stdid = 0;
-       std_info->dv_preset = V4L2_DV_INVALID;
-
        vid_ch->stdid = 0;
-       vid_ch->dv_preset = V4L2_DV_INVALID;
 
        return 0;
 }
@@ -1482,9 +1407,8 @@ static int vpif_g_dv_timings(struct file *file, void *priv,
        struct vpif_fh *fh = priv;
        struct channel_obj *ch = fh->channel;
        struct video_obj *vid_ch = &ch->video;
-       struct v4l2_bt_timings *bt = &vid_ch->bt_timings;
 
-       timings->bt = *bt;
+       *timings = vid_ch->dv_timings;
 
        return 0;
 }
@@ -1588,9 +1512,7 @@ static const struct v4l2_ioctl_ops vpif_ioctl_ops = {
        .vidioc_s_output                = vpif_s_output,
        .vidioc_g_output                = vpif_g_output,
        .vidioc_cropcap                 = vpif_cropcap,
-       .vidioc_enum_dv_presets         = vpif_enum_dv_presets,
-       .vidioc_s_dv_preset             = vpif_s_dv_preset,
-       .vidioc_g_dv_preset             = vpif_g_dv_preset,
+       .vidioc_enum_dv_timings         = vpif_enum_dv_timings,
        .vidioc_s_dv_timings            = vpif_s_dv_timings,
        .vidioc_g_dv_timings            = vpif_g_dv_timings,
        .vidioc_g_chip_ident            = vpif_g_chip_ident,
index 8967ffb4405846ec6ffa0213eb747a19448af232..1263de6d3faec5c406a38017c34f6219f980ad8c 100644 (file)
@@ -62,8 +62,7 @@ struct video_obj {
                                         * most recent displayed frame only */
        v4l2_std_id stdid;              /* Currently selected or default
                                         * standard */
-       u32 dv_preset;
-       struct v4l2_bt_timings bt_timings;
+       struct v4l2_dv_timings dv_timings;
        u32 output_id;                  /* Current output id */
 };