linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] Replace the obsolete preset API by timings API
@ 2012-08-08 12:30 Prabhakar Lad
  2012-08-08 12:30 ` [PATCH 1/2] dm644x: replace the obsolete preset API by the " Prabhakar Lad
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Prabhakar Lad @ 2012-08-08 12:30 UTC (permalink / raw)
  To: LMML, LAK
  Cc: dlos, Hans Verkuil, linux-kernel, Sekhar Nori,
	Mauro Carvalho Chehab, Prabhakar Lad

This first patch replaces the obsolete preset API by timings
API for davinci VPBE, appropriate chnages in machine file for
dm644x in which VPBE is enabled. And the second patch adds support for 
timings API for ths7303 driver. Sending them as s series 
since VPBE uses the ths7303 driver.

Hans Verkuil (1):
  dm644x: replace the obsolete preset API by the timings API.

Manjunath Hadli (1):
  ths7303: enable THS7303 for HD modes

 arch/arm/mach-davinci/board-dm644x-evm.c   |   15 ++--
 arch/arm/mach-davinci/dm644x.c             |   17 +---
 drivers/media/video/davinci/vpbe.c         |  110 ++++++++++++----------------
 drivers/media/video/davinci/vpbe_display.c |   60 +++++++--------
 drivers/media/video/davinci/vpbe_venc.c    |   25 +++---
 drivers/media/video/ths7303.c              |  107 +++++++++++++++++++++++----
 include/media/davinci/vpbe.h               |   14 ++--
 include/media/davinci/vpbe_types.h         |    8 +--
 include/media/davinci/vpbe_venc.h          |    2 +-
 9 files changed, 202 insertions(+), 156 deletions(-)


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/2] dm644x: replace the obsolete preset API by the timings API.
  2012-08-08 12:30 [PATCH 0/2] Replace the obsolete preset API by timings API Prabhakar Lad
@ 2012-08-08 12:30 ` Prabhakar Lad
  2012-09-28 12:44   ` Prabhakar Lad
  2012-10-01 11:29   ` Sekhar Nori
  2012-08-08 12:30 ` [PATCH 2/2] ths7303: enable THS7303 for HD modes Prabhakar Lad
  2012-09-18  5:10 ` [PATCH 0/2] Replace the obsolete preset API by timings API Prabhakar Lad
  2 siblings, 2 replies; 8+ messages in thread
From: Prabhakar Lad @ 2012-08-08 12:30 UTC (permalink / raw)
  To: LMML, LAK
  Cc: dlos, Hans Verkuil, linux-kernel, Sekhar Nori,
	Mauro Carvalho Chehab, Hans Verkuil, Lad, Prabhakar,
	Manjunath Hadli

From: Hans Verkuil <hans.verkuil@cisco.com>

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>
---
 arch/arm/mach-davinci/board-dm644x-evm.c   |   15 ++--
 arch/arm/mach-davinci/dm644x.c             |   17 +---
 drivers/media/video/davinci/vpbe.c         |  110 ++++++++++++----------------
 drivers/media/video/davinci/vpbe_display.c |   60 +++++++--------
 drivers/media/video/davinci/vpbe_venc.c    |   25 +++---
 include/media/davinci/vpbe.h               |   14 ++--
 include/media/davinci/vpbe_types.h         |    8 +--
 include/media/davinci/vpbe_venc.h          |    2 +-
 8 files changed, 111 insertions(+), 140 deletions(-)

diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c
index d34ed55..3baf56d 100644
--- a/arch/arm/mach-davinci/board-dm644x-evm.c
+++ b/arch/arm/mach-davinci/board-dm644x-evm.c
@@ -23,6 +23,7 @@
 #include <linux/phy.h>
 #include <linux/clk.h>
 #include <linux/videodev2.h>
+#include <linux/v4l2-dv-timings.h>
 #include <linux/export.h>
 
 #include <media/tvp514x.h>
@@ -620,7 +621,7 @@ static struct vpbe_enc_mode_info dm644xevm_enc_std_timing[] = {
 	{
 		.name		= "ntsc",
 		.timings_type	= VPBE_ENC_STD,
-		.timings	= {V4L2_STD_525_60},
+		.std_id		= V4L2_STD_525_60,
 		.interlaced	= 1,
 		.xres		= 720,
 		.yres		= 480,
@@ -632,7 +633,7 @@ static struct vpbe_enc_mode_info dm644xevm_enc_std_timing[] = {
 	{
 		.name		= "pal",
 		.timings_type	= VPBE_ENC_STD,
-		.timings	= {V4L2_STD_625_50},
+		.std_id		= V4L2_STD_625_50,
 		.interlaced	= 1,
 		.xres		= 720,
 		.yres		= 576,
@@ -647,8 +648,8 @@ static struct vpbe_enc_mode_info dm644xevm_enc_std_timing[] = {
 static struct vpbe_enc_mode_info dm644xevm_enc_preset_timing[] = {
 	{
 		.name		= "480p59_94",
-		.timings_type	= VPBE_ENC_DV_PRESET,
-		.timings	= {V4L2_DV_480P59_94},
+		.timings_type	= VPBE_ENC_CUSTOM_TIMINGS,
+		.dv_timings	= V4L2_DV_BT_CEA_720X480P59_94,
 		.interlaced	= 0,
 		.xres		= 720,
 		.yres		= 480,
@@ -659,8 +660,8 @@ static struct vpbe_enc_mode_info dm644xevm_enc_preset_timing[] = {
 	},
 	{
 		.name		= "576p50",
-		.timings_type	= VPBE_ENC_DV_PRESET,
-		.timings	= {V4L2_DV_576P50},
+		.timings_type	= VPBE_ENC_CUSTOM_TIMINGS,
+		.dv_timings	= V4L2_DV_BT_CEA_720X576P50,
 		.interlaced	= 0,
 		.xres		= 720,
 		.yres		= 576,
@@ -698,7 +699,7 @@ static struct vpbe_output dm644xevm_vpbe_outputs[] = {
 			.index		= 1,
 			.name		= "Component",
 			.type		= V4L2_OUTPUT_TYPE_ANALOG,
-			.capabilities	= V4L2_OUT_CAP_PRESETS,
+			.capabilities	= V4L2_OUT_CAP_CUSTOM_TIMINGS,
 		},
 		.subdev_name	= VPBE_VENC_SUBDEV_NAME,
 		.default_mode	= "480p59_94",
diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c
index c8b8666..79d2880 100644
--- a/arch/arm/mach-davinci/dm644x.c
+++ b/arch/arm/mach-davinci/dm644x.c
@@ -701,7 +701,7 @@ static struct resource dm644x_venc_resources[] = {
 #define DM644X_VPSS_DACCLKEN                  BIT(4)
 
 static int dm644x_venc_setup_clock(enum vpbe_enc_timings_type type,
-				   unsigned int mode)
+				   unsigned int pclock)
 {
 	int ret = 0;
 	u32 v = DM644X_VPSS_VENCLKEN;
@@ -711,27 +711,18 @@ static int dm644x_venc_setup_clock(enum vpbe_enc_timings_type type,
 		v |= DM644X_VPSS_DACCLKEN;
 		writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL));
 		break;
-	case VPBE_ENC_DV_PRESET:
-		switch (mode) {
-		case V4L2_DV_480P59_94:
-		case V4L2_DV_576P50:
+	case VPBE_ENC_CUSTOM_TIMINGS:
+		if (pclock <= 27000000) {
 			v |= DM644X_VPSS_MUXSEL_PLL2_MODE |
 			     DM644X_VPSS_DACCLKEN;
 			writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL));
-			break;
-		case V4L2_DV_720P60:
-		case V4L2_DV_1080I60:
-		case V4L2_DV_1080P30:
+		} else {
 			/*
 			 * For HD, use external clock source since
 			 * HD requires higher clock rate
 			 */
 			v |= DM644X_VPSS_MUXSEL_VPBECLK_MODE;
 			writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL));
-			break;
-		default:
-			ret = -EINVAL;
-			break;
 		}
 		break;
 	default:
diff --git a/drivers/media/video/davinci/vpbe.c b/drivers/media/video/davinci/vpbe.c
index c4a82a1..bc27b2a 100644
--- a/drivers/media/video/davinci/vpbe.c
+++ b/drivers/media/video/davinci/vpbe.c
@@ -174,26 +174,6 @@ static int vpbe_get_current_mode_info(struct vpbe_device *vpbe_dev,
 	return 0;
 }
 
-static int vpbe_get_dv_preset_info(struct vpbe_device *vpbe_dev,
-				   unsigned int dv_preset)
-{
-	struct vpbe_config *cfg = vpbe_dev->cfg;
-	struct vpbe_enc_mode_info var;
-	int curr_output = vpbe_dev->current_out_index;
-	int i;
-
-	for (i = 0; i < vpbe_dev->cfg->outputs[curr_output].num_modes; i++) {
-		var = cfg->outputs[curr_output].modes[i];
-		if ((var.timings_type & VPBE_ENC_DV_PRESET) &&
-		  (var.timings.dv_preset == dv_preset)) {
-			vpbe_dev->current_timings = var;
-			return 0;
-		}
-	}
-
-	return -EINVAL;
-}
-
 /* Get std by std id */
 static int vpbe_get_std_info(struct vpbe_device *vpbe_dev,
 			     v4l2_std_id std_id)
@@ -206,7 +186,7 @@ static int vpbe_get_std_info(struct vpbe_device *vpbe_dev,
 	for (i = 0; i < vpbe_dev->cfg->outputs[curr_output].num_modes; i++) {
 		var = cfg->outputs[curr_output].modes[i];
 		if ((var.timings_type & VPBE_ENC_STD) &&
-		  (var.timings.std_id & std_id)) {
+		  (var.std_id & std_id)) {
 			vpbe_dev->current_timings = var;
 			return 0;
 		}
@@ -344,38 +324,42 @@ static unsigned int vpbe_get_output(struct vpbe_device *vpbe_dev)
 }
 
 /**
- * vpbe_s_dv_preset - Set the given preset timings in the encoder
+ * vpbe_s_dv_timings - Set the given preset timings in the encoder
  *
- * Sets the preset if supported by the current encoder. Return the status.
+ * Sets the timings if supported by the current encoder. Return the status.
  * 0 - success & -EINVAL on error
  */
-static int vpbe_s_dv_preset(struct vpbe_device *vpbe_dev,
-		     struct v4l2_dv_preset *dv_preset)
+static int vpbe_s_dv_timings(struct vpbe_device *vpbe_dev,
+		     struct v4l2_dv_timings *dv_timings)
 {
 	struct vpbe_config *cfg = vpbe_dev->cfg;
 	int out_index = vpbe_dev->current_out_index;
+	struct vpbe_output *output = &cfg->outputs[out_index];
 	int sd_index = vpbe_dev->current_sd_index;
-	int ret;
+	int ret, i;
 
 
 	if (!(cfg->outputs[out_index].output.capabilities &
-	    V4L2_OUT_CAP_PRESETS))
+	    V4L2_OUT_CAP_CUSTOM_TIMINGS))
 		return -EINVAL;
 
-	ret = vpbe_get_dv_preset_info(vpbe_dev, dv_preset->preset);
-
-	if (ret)
-		return ret;
-
+	for (i = 0; i < output->num_modes; i++) {
+		if (output->modes[i].timings_type == VPBE_ENC_CUSTOM_TIMINGS &&
+		    !memcmp(&output->modes[i].dv_timings,
+				dv_timings, sizeof(*dv_timings)))
+			break;
+	}
+	if (i >= output->num_modes)
+		return -EINVAL;
+	vpbe_dev->current_timings = output->modes[i];
 	mutex_lock(&vpbe_dev->lock);
 
-
 	ret = v4l2_subdev_call(vpbe_dev->encoders[sd_index], video,
-					s_dv_preset, dv_preset);
+					s_dv_timings, dv_timings);
 	if (!ret && (vpbe_dev->amp != NULL)) {
 		/* Call amplifier subdevice */
 		ret = v4l2_subdev_call(vpbe_dev->amp, video,
-				s_dv_preset, dv_preset);
+				s_dv_timings, dv_timings);
 	}
 	/* set the lcd controller output for the given mode */
 	if (!ret) {
@@ -392,17 +376,17 @@ static int vpbe_s_dv_preset(struct vpbe_device *vpbe_dev,
 }
 
 /**
- * vpbe_g_dv_preset - Get the preset in the current encoder
+ * vpbe_g_dv_timings - Get the timings in the current encoder
  *
- * Get the preset in the current encoder. Return the status. 0 - success
+ * Get the timings in the current encoder. Return the status. 0 - success
  * -EINVAL on error
  */
-static int vpbe_g_dv_preset(struct vpbe_device *vpbe_dev,
-		     struct v4l2_dv_preset *dv_preset)
+static int vpbe_g_dv_timings(struct vpbe_device *vpbe_dev,
+		     struct v4l2_dv_timings *dv_timings)
 {
 	if (vpbe_dev->current_timings.timings_type &
-	  VPBE_ENC_DV_PRESET) {
-		dv_preset->preset = vpbe_dev->current_timings.timings.dv_preset;
+	  VPBE_ENC_CUSTOM_TIMINGS) {
+		*dv_timings = vpbe_dev->current_timings.dv_timings;
 		return 0;
 	}
 
@@ -410,13 +394,13 @@ static int vpbe_g_dv_preset(struct vpbe_device *vpbe_dev,
 }
 
 /**
- * vpbe_enum_dv_presets - Enumerate the dv presets in the current encoder
+ * vpbe_enum_dv_timings - Enumerate the dv timings in the current encoder
  *
- * Get the preset in the current encoder. Return the status. 0 - success
+ * Get the timings in the current encoder. Return the status. 0 - success
  * -EINVAL on error
  */
-static int vpbe_enum_dv_presets(struct vpbe_device *vpbe_dev,
-			 struct v4l2_dv_enum_preset *preset_info)
+static int vpbe_enum_dv_timings(struct vpbe_device *vpbe_dev,
+			 struct v4l2_enum_dv_timings *timings)
 {
 	struct vpbe_config *cfg = vpbe_dev->cfg;
 	int out_index = vpbe_dev->current_out_index;
@@ -424,12 +408,12 @@ static int vpbe_enum_dv_presets(struct vpbe_device *vpbe_dev,
 	int j = 0;
 	int i;
 
-	if (!(output->output.capabilities & V4L2_OUT_CAP_PRESETS))
+	if (!(output->output.capabilities & V4L2_OUT_CAP_CUSTOM_TIMINGS))
 		return -EINVAL;
 
 	for (i = 0; i < output->num_modes; i++) {
-		if (output->modes[i].timings_type == VPBE_ENC_DV_PRESET) {
-			if (j == preset_info->index)
+		if (output->modes[i].timings_type == VPBE_ENC_CUSTOM_TIMINGS) {
+			if (j == timings->index)
 				break;
 			j++;
 		}
@@ -437,9 +421,8 @@ static int vpbe_enum_dv_presets(struct vpbe_device *vpbe_dev,
 
 	if (i == output->num_modes)
 		return -EINVAL;
-
-	return v4l_fill_dv_preset_info(output->modes[i].timings.dv_preset,
-					preset_info);
+	timings->timings = output->modes[i].dv_timings;
+	return 0;
 }
 
 /**
@@ -489,10 +472,10 @@ static int vpbe_s_std(struct vpbe_device *vpbe_dev, v4l2_std_id *std_id)
  */
 static int vpbe_g_std(struct vpbe_device *vpbe_dev, v4l2_std_id *std_id)
 {
-	struct vpbe_enc_mode_info cur_timings = vpbe_dev->current_timings;
+	struct vpbe_enc_mode_info *cur_timings = &vpbe_dev->current_timings;
 
-	if (cur_timings.timings_type & VPBE_ENC_STD) {
-		*std_id = cur_timings.timings.std_id;
+	if (cur_timings->timings_type & VPBE_ENC_STD) {
+		*std_id = cur_timings->std_id;
 		return 0;
 	}
 
@@ -511,7 +494,7 @@ static int vpbe_set_mode(struct vpbe_device *vpbe_dev,
 {
 	struct vpbe_enc_mode_info *preset_mode = NULL;
 	struct vpbe_config *cfg = vpbe_dev->cfg;
-	struct v4l2_dv_preset dv_preset;
+	struct v4l2_dv_timings dv_timings;
 	struct osd_state *osd_device;
 	int out_index = vpbe_dev->current_out_index;
 	int ret = 0;
@@ -530,11 +513,12 @@ static int vpbe_set_mode(struct vpbe_device *vpbe_dev,
 			 */
 			if (preset_mode->timings_type & VPBE_ENC_STD)
 				return vpbe_s_std(vpbe_dev,
-						 &preset_mode->timings.std_id);
-			if (preset_mode->timings_type & VPBE_ENC_DV_PRESET) {
-				dv_preset.preset =
-					preset_mode->timings.dv_preset;
-				return vpbe_s_dv_preset(vpbe_dev, &dv_preset);
+						 &preset_mode->std_id);
+			if (preset_mode->timings_type &
+						VPBE_ENC_CUSTOM_TIMINGS) {
+				dv_timings =
+					preset_mode->dv_timings;
+				return vpbe_s_dv_timings(vpbe_dev, &dv_timings);
 			}
 		}
 	}
@@ -810,9 +794,9 @@ static struct vpbe_device_ops vpbe_dev_ops = {
 	.enum_outputs = vpbe_enum_outputs,
 	.set_output = vpbe_set_output,
 	.get_output = vpbe_get_output,
-	.s_dv_preset = vpbe_s_dv_preset,
-	.g_dv_preset = vpbe_g_dv_preset,
-	.enum_dv_presets = vpbe_enum_dv_presets,
+	.s_dv_timings = vpbe_s_dv_timings,
+	.g_dv_timings = vpbe_g_dv_timings,
+	.enum_dv_timings = vpbe_enum_dv_timings,
 	.s_std = vpbe_s_std,
 	.g_std = vpbe_g_std,
 	.initialize = vpbe_initialize,
diff --git a/drivers/media/video/davinci/vpbe_display.c b/drivers/media/video/davinci/vpbe_display.c
index 6fe7034..2fbf3bc 100644
--- a/drivers/media/video/davinci/vpbe_display.c
+++ b/drivers/media/video/davinci/vpbe_display.c
@@ -393,7 +393,7 @@ vpbe_disp_calculate_scale_factor(struct vpbe_display *disp_dev,
 	int h_scale;
 	int v_scale;
 
-	v4l2_std_id standard_id = vpbe_dev->current_timings.timings.std_id;
+	v4l2_std_id standard_id = vpbe_dev->current_timings.std_id;
 
 	/*
 	 * Application initially set the image format. Current display
@@ -943,7 +943,7 @@ static int vpbe_display_g_std(struct file *file, void *priv,
 
 	/* Get the standard from the current encoder */
 	if (vpbe_dev->current_timings.timings_type & VPBE_ENC_STD) {
-		*std_id = vpbe_dev->current_timings.timings.std_id;
+		*std_id = vpbe_dev->current_timings.std_id;
 		return 0;
 	}
 
@@ -1029,29 +1029,29 @@ static int vpbe_display_g_output(struct file *file, void *priv,
 }
 
 /**
- * vpbe_display_enum_dv_presets - Enumerate the dv presets
+ * vpbe_display_enum_dv_timings - Enumerate the dv timings
  *
- * enum the preset in the current encoder. Return the status. 0 - success
+ * enum the timings in the current encoder. Return the status. 0 - success
  * -EINVAL on error
  */
 static int
-vpbe_display_enum_dv_presets(struct file *file, void *priv,
-			struct v4l2_dv_enum_preset *preset)
+vpbe_display_enum_dv_timings(struct file *file, void *priv,
+			struct v4l2_enum_dv_timings *timings)
 {
 	struct vpbe_fh *fh = priv;
 	struct vpbe_device *vpbe_dev = fh->disp_dev->vpbe_dev;
 	int ret;
 
-	v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_ENUM_DV_PRESETS\n");
+	v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_ENUM_DV_TIMINGS\n");
 
 	/* Enumerate outputs */
-	if (NULL == vpbe_dev->ops.enum_dv_presets)
+	if (NULL == vpbe_dev->ops.enum_dv_timings)
 		return -EINVAL;
 
-	ret = vpbe_dev->ops.enum_dv_presets(vpbe_dev, preset);
+	ret = vpbe_dev->ops.enum_dv_timings(vpbe_dev, timings);
 	if (ret) {
 		v4l2_err(&vpbe_dev->v4l2_dev,
-			"Failed to enumerate dv presets info\n");
+			"Failed to enumerate dv timings info\n");
 		return -EINVAL;
 	}
 
@@ -1059,21 +1059,21 @@ vpbe_display_enum_dv_presets(struct file *file, void *priv,
 }
 
 /**
- * vpbe_display_s_dv_preset - Set the dv presets
+ * vpbe_display_s_dv_timings - Set the dv timings
  *
- * Set the preset in the current encoder. Return the status. 0 - success
+ * Set the timings in the current encoder. Return the status. 0 - success
  * -EINVAL on error
  */
 static int
-vpbe_display_s_dv_preset(struct file *file, void *priv,
-				struct v4l2_dv_preset *preset)
+vpbe_display_s_dv_timings(struct file *file, void *priv,
+				struct v4l2_dv_timings *timings)
 {
 	struct vpbe_fh *fh = priv;
 	struct vpbe_layer *layer = fh->layer;
 	struct vpbe_device *vpbe_dev = fh->disp_dev->vpbe_dev;
 	int ret;
 
-	v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_S_DV_PRESETS\n");
+	v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_S_DV_TIMINGS\n");
 
 
 	/* If streaming is started, return error */
@@ -1083,13 +1083,13 @@ vpbe_display_s_dv_preset(struct file *file, void *priv,
 	}
 
 	/* Set the given standard in the encoder */
-	if (!vpbe_dev->ops.s_dv_preset)
+	if (!vpbe_dev->ops.s_dv_timings)
 		return -EINVAL;
 
-	ret = vpbe_dev->ops.s_dv_preset(vpbe_dev, preset);
+	ret = vpbe_dev->ops.s_dv_timings(vpbe_dev, timings);
 	if (ret) {
 		v4l2_err(&vpbe_dev->v4l2_dev,
-			"Failed to set the dv presets info\n");
+			"Failed to set the dv timings info\n");
 		return -EINVAL;
 	}
 	/* set the current norm to zero to be consistent. If STD is used
@@ -1101,26 +1101,25 @@ vpbe_display_s_dv_preset(struct file *file, void *priv,
 }
 
 /**
- * vpbe_display_g_dv_preset - Set the dv presets
+ * vpbe_display_g_dv_timings - Set the dv timings
  *
- * Get the preset in the current encoder. Return the status. 0 - success
+ * Get the timings in the current encoder. Return the status. 0 - success
  * -EINVAL on error
  */
 static int
-vpbe_display_g_dv_preset(struct file *file, void *priv,
-				struct v4l2_dv_preset *dv_preset)
+vpbe_display_g_dv_timings(struct file *file, void *priv,
+				struct v4l2_dv_timings *dv_timings)
 {
 	struct vpbe_fh *fh = priv;
 	struct vpbe_device *vpbe_dev = fh->disp_dev->vpbe_dev;
 
-	v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_G_DV_PRESETS\n");
+	v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_G_DV_TIMINGS\n");
 
 	/* Get the given standard in the encoder */
 
 	if (vpbe_dev->current_timings.timings_type &
-				VPBE_ENC_DV_PRESET) {
-		dv_preset->preset =
-			vpbe_dev->current_timings.timings.dv_preset;
+				VPBE_ENC_CUSTOM_TIMINGS) {
+		*dv_timings = vpbe_dev->current_timings.dv_timings;
 	} else {
 		return -EINVAL;
 	}
@@ -1560,9 +1559,9 @@ static const struct v4l2_ioctl_ops vpbe_ioctl_ops = {
 	.vidioc_enum_output	 = vpbe_display_enum_output,
 	.vidioc_s_output	 = vpbe_display_s_output,
 	.vidioc_g_output	 = vpbe_display_g_output,
-	.vidioc_s_dv_preset	 = vpbe_display_s_dv_preset,
-	.vidioc_g_dv_preset	 = vpbe_display_g_dv_preset,
-	.vidioc_enum_dv_presets	 = vpbe_display_enum_dv_presets,
+	.vidioc_s_dv_timings	 = vpbe_display_s_dv_timings,
+	.vidioc_g_dv_timings	 = vpbe_display_g_dv_timings,
+	.vidioc_enum_dv_timings	 = vpbe_display_enum_dv_timings,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
 	.vidioc_g_register	 = vpbe_display_g_register,
 	.vidioc_s_register	 = vpbe_display_s_register,
@@ -1630,8 +1629,7 @@ static __devinit int init_vpbe_layer(int i, struct vpbe_display *disp_dev,
 			VPBE_ENC_STD) {
 		vbd->tvnorms = (V4L2_STD_525_60 | V4L2_STD_625_50);
 		vbd->current_norm =
-			disp_dev->vpbe_dev->
-			current_timings.timings.std_id;
+			disp_dev->vpbe_dev->current_timings.std_id;
 	} else
 		vbd->current_norm = 0;
 
diff --git a/drivers/media/video/davinci/vpbe_venc.c b/drivers/media/video/davinci/vpbe_venc.c
index b21ecc8..86d47c3 100644
--- a/drivers/media/video/davinci/vpbe_venc.c
+++ b/drivers/media/video/davinci/vpbe_venc.c
@@ -298,7 +298,7 @@ static int venc_set_480p59_94(struct v4l2_subdev *sd)
 		return -EINVAL;
 
 	/* Setup clock at VPSS & VENC for SD */
-	if (pdata->setup_clock(VPBE_ENC_DV_PRESET, V4L2_DV_480P59_94) < 0)
+	if (pdata->setup_clock(VPBE_ENC_CUSTOM_TIMINGS, 27000000) < 0)
 		return -EINVAL;
 
 	venc_enabledigitaloutput(sd, 0);
@@ -345,7 +345,7 @@ static int venc_set_576p50(struct v4l2_subdev *sd)
 	  (pdata->venc_type != VPBE_VERSION_2))
 		return -EINVAL;
 	/* Setup clock at VPSS & VENC for SD */
-	if (pdata->setup_clock(VPBE_ENC_DV_PRESET, V4L2_DV_576P50) < 0)
+	if (pdata->setup_clock(VPBE_ENC_CUSTOM_TIMINGS, 27000000) < 0)
 		return -EINVAL;
 
 	venc_enabledigitaloutput(sd, 0);
@@ -385,7 +385,7 @@ static int venc_set_720p60_internal(struct v4l2_subdev *sd)
 	struct venc_state *venc = to_state(sd);
 	struct venc_platform_data *pdata = venc->pdata;
 
-	if (pdata->setup_clock(VPBE_ENC_DV_PRESET, V4L2_DV_720P60) < 0)
+	if (pdata->setup_clock(VPBE_ENC_CUSTOM_TIMINGS, 74250000) < 0)
 		return -EINVAL;
 
 	venc_enabledigitaloutput(sd, 0);
@@ -413,7 +413,7 @@ static int venc_set_1080i30_internal(struct v4l2_subdev *sd)
 	struct venc_state *venc = to_state(sd);
 	struct venc_platform_data *pdata = venc->pdata;
 
-	if (pdata->setup_clock(VPBE_ENC_DV_PRESET, V4L2_DV_1080P30) < 0)
+	if (pdata->setup_clock(VPBE_ENC_CUSTOM_TIMINGS, 74250000) < 0)
 		return -EINVAL;
 
 	venc_enabledigitaloutput(sd, 0);
@@ -446,26 +446,27 @@ static int venc_s_std_output(struct v4l2_subdev *sd, v4l2_std_id norm)
 	return -EINVAL;
 }
 
-static int venc_s_dv_preset(struct v4l2_subdev *sd,
-			    struct v4l2_dv_preset *dv_preset)
+static int venc_s_dv_timings(struct v4l2_subdev *sd,
+			    struct v4l2_dv_timings *dv_timings)
 {
 	struct venc_state *venc = to_state(sd);
+	u32 height = dv_timings->bt.height;
 	int ret;
 
-	v4l2_dbg(debug, 1, sd, "venc_s_dv_preset\n");
+	v4l2_dbg(debug, 1, sd, "venc_s_dv_timings\n");
 
-	if (dv_preset->preset == V4L2_DV_576P50)
+	if (height == 576)
 		return venc_set_576p50(sd);
-	else if (dv_preset->preset == V4L2_DV_480P59_94)
+	else if (height == 480)
 		return venc_set_480p59_94(sd);
-	else if ((dv_preset->preset == V4L2_DV_720P60) &&
+	else if ((height == 720) &&
 			(venc->pdata->venc_type == VPBE_VERSION_2)) {
 		/* TBD setup internal 720p mode here */
 		ret = venc_set_720p60_internal(sd);
 		/* for DM365 VPBE, there is DAC inside */
 		vdaccfg_write(sd, VDAC_CONFIG_HD_V2);
 		return ret;
-	} else if ((dv_preset->preset == V4L2_DV_1080I30) &&
+	} else if ((height == 1080) &&
 		(venc->pdata->venc_type == VPBE_VERSION_2)) {
 		/* TBD setup internal 1080i mode here */
 		ret = venc_set_1080i30_internal(sd);
@@ -518,7 +519,7 @@ static const struct v4l2_subdev_core_ops venc_core_ops = {
 static const struct v4l2_subdev_video_ops venc_video_ops = {
 	.s_routing = venc_s_routing,
 	.s_std_output = venc_s_std_output,
-	.s_dv_preset = venc_s_dv_preset,
+	.s_dv_timings = venc_s_dv_timings,
 };
 
 static const struct v4l2_subdev_ops venc_ops = {
diff --git a/include/media/davinci/vpbe.h b/include/media/davinci/vpbe.h
index 8bc1b3c..a7ca488 100644
--- a/include/media/davinci/vpbe.h
+++ b/include/media/davinci/vpbe.h
@@ -35,7 +35,7 @@ struct osd_config_info {
 struct vpbe_output {
 	struct v4l2_output output;
 	/*
-	 * If output capabilities include dv_preset, list supported presets
+	 * If output capabilities include dv_timings, list supported timings
 	 * below
 	 */
 	char *subdev_name;
@@ -120,16 +120,16 @@ struct vpbe_device_ops {
 	unsigned int (*get_output)(struct vpbe_device *vpbe_dev);
 
 	/* Set DV preset at current output */
-	int (*s_dv_preset)(struct vpbe_device *vpbe_dev,
-			   struct v4l2_dv_preset *dv_preset);
+	int (*s_dv_timings)(struct vpbe_device *vpbe_dev,
+			   struct v4l2_dv_timings *dv_timings);
 
 	/* Get DV presets supported at the output */
-	int (*g_dv_preset)(struct vpbe_device *vpbe_dev,
-			   struct v4l2_dv_preset *dv_preset);
+	int (*g_dv_timings)(struct vpbe_device *vpbe_dev,
+			   struct v4l2_dv_timings *dv_timings);
 
 	/* Enumerate the DV Presets supported at the output */
-	int (*enum_dv_presets)(struct vpbe_device *vpbe_dev,
-			       struct v4l2_dv_enum_preset *preset_info);
+	int (*enum_dv_timings)(struct vpbe_device *vpbe_dev,
+			       struct v4l2_enum_dv_timings *timings_info);
 
 	/* Set std at the output */
 	int (*s_std)(struct vpbe_device *vpbe_dev, v4l2_std_id *std_id);
diff --git a/include/media/davinci/vpbe_types.h b/include/media/davinci/vpbe_types.h
index 727f551..9b85396 100644
--- a/include/media/davinci/vpbe_types.h
+++ b/include/media/davinci/vpbe_types.h
@@ -32,11 +32,6 @@ enum vpbe_enc_timings_type {
 	VPBE_ENC_TIMINGS_INVALID = 0x8,
 };
 
-union vpbe_timings {
-	v4l2_std_id std_id;
-	unsigned int dv_preset;
-};
-
 /*
  * struct vpbe_enc_mode_info
  * @name: ptr to name string of the standard, "NTSC", "PAL" etc
@@ -73,7 +68,8 @@ union vpbe_timings {
 struct vpbe_enc_mode_info {
 	unsigned char *name;
 	enum vpbe_enc_timings_type timings_type;
-	union vpbe_timings timings;
+	v4l2_std_id std_id;
+	struct v4l2_dv_timings dv_timings;
 	unsigned int interlaced;
 	unsigned int xres;
 	unsigned int yres;
diff --git a/include/media/davinci/vpbe_venc.h b/include/media/davinci/vpbe_venc.h
index 6b57334..cc78c2e 100644
--- a/include/media/davinci/vpbe_venc.h
+++ b/include/media/davinci/vpbe_venc.h
@@ -32,7 +32,7 @@ struct venc_platform_data {
 	int (*setup_pinmux)(enum v4l2_mbus_pixelcode if_type,
 			    int field);
 	int (*setup_clock)(enum vpbe_enc_timings_type type,
-			   unsigned int mode);
+			   unsigned int pixclock);
 	int (*setup_if_config)(enum v4l2_mbus_pixelcode pixcode);
 	/* Number of LCD outputs supported */
 	int num_lcd_outputs;
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] ths7303: enable THS7303 for HD modes
  2012-08-08 12:30 [PATCH 0/2] Replace the obsolete preset API by timings API Prabhakar Lad
  2012-08-08 12:30 ` [PATCH 1/2] dm644x: replace the obsolete preset API by the " Prabhakar Lad
@ 2012-08-08 12:30 ` Prabhakar Lad
  2012-09-18  5:10 ` [PATCH 0/2] Replace the obsolete preset API by timings API Prabhakar Lad
  2 siblings, 0 replies; 8+ messages in thread
From: Prabhakar Lad @ 2012-08-08 12:30 UTC (permalink / raw)
  To: LMML, LAK
  Cc: dlos, Hans Verkuil, linux-kernel, Sekhar Nori,
	Mauro Carvalho Chehab, Manjunath Hadli, Lad, Prabhakar

From: Manjunath Hadli <manjunath.hadli@ti.com>

add filter settings for high def modes like 1080i,
1080p,720p and others and implementing dv_timings.

Signed-off-by: Manjunath Hadli <manjunath.hadli@ti.com>
Signed-off-by: Lad, Prabhakar <prabhakar.lad@ti.com>
---
 drivers/media/video/ths7303.c |  107 ++++++++++++++++++++++++++++++++++------
 1 files changed, 91 insertions(+), 16 deletions(-)

diff --git a/drivers/media/video/ths7303.c b/drivers/media/video/ths7303.c
index e5c0eed..d997583 100644
--- a/drivers/media/video/ths7303.c
+++ b/drivers/media/video/ths7303.c
@@ -28,6 +28,18 @@
 #include <media/v4l2-subdev.h>
 #include <media/v4l2-chip-ident.h>
 
+#define THS7303_CHANNEL_1	1
+#define THS7303_CHANNEL_2	2
+#define THS7303_CHANNEL_3	3
+
+enum ths7303_filter_mode {
+	THS7303_FILTER_MODE_480I_576I,
+	THS7303_FILTER_MODE_480P_576P,
+	THS7303_FILTER_MODE_720P_1080I,
+	THS7303_FILTER_MODE_1080P,
+	THS7303_FILTER_MODE_DISABLE
+};
+
 MODULE_DESCRIPTION("TI THS7303 video amplifier driver");
 MODULE_AUTHOR("Chaithrika U S");
 MODULE_LICENSE("GPL");
@@ -37,35 +49,97 @@ module_param(debug, int, 0644);
 MODULE_PARM_DESC(debug, "Debug level 0-1");
 
 /* following function is used to set ths7303 */
-static int ths7303_setvalue(struct v4l2_subdev *sd, v4l2_std_id std)
+int ths7303_setval(struct v4l2_subdev *sd, enum ths7303_filter_mode mode)
 {
+	u8 input_bias_chroma = 3;
+	u8 input_bias_luma = 3;
+	int disable = 0;
 	int err = 0;
-	u8 val;
-	struct i2c_client *client;
+	u8 val = 0;
+	u8 temp;
 
-	client = v4l2_get_subdevdata(sd);
+	struct i2c_client *client = v4l2_get_subdevdata(sd);
 
-	if (std & (V4L2_STD_ALL & ~V4L2_STD_SECAM)) {
-		val = 0x02;
-		v4l2_dbg(1, debug, sd, "setting value for SDTV format\n");
-	} else {
-		val = 0x00;
-		v4l2_dbg(1, debug, sd, "disabling all channels\n");
+	if (!client)
+		return -EINVAL;
+
+
+	switch (mode) {
+	case THS7303_FILTER_MODE_1080P:
+		val = (3 << 6);
+		val |= (3 << 3);
+		break;
+	case THS7303_FILTER_MODE_720P_1080I:
+		val = (2 << 6);
+		val |= (2 << 3);
+		break;
+	case THS7303_FILTER_MODE_480P_576P:
+		val = (1 << 6);
+		val |= (1 << 3);
+		break;
+	case THS7303_FILTER_MODE_480I_576I:
+		break;
+	case THS7303_FILTER_MODE_DISABLE:
+		pr_info("mode disabled\n");
+		/* disable all channels */
+		disable = 1;
+	default:
+		/* disable all channels */
+		disable = 1;
 	}
+	/* Setup channel 2 - Luma - Green */
+	temp = val;
+	if (!disable)
+		val |= input_bias_luma;
+	err = i2c_smbus_write_byte_data(client, THS7303_CHANNEL_2, val);
+	if (err)
+		goto out;
 
-	err |= i2c_smbus_write_byte_data(client, 0x01, val);
-	err |= i2c_smbus_write_byte_data(client, 0x02, val);
-	err |= i2c_smbus_write_byte_data(client, 0x03, val);
+	/* setup two chroma channels */
+	if (!disable)
+		temp |= input_bias_chroma;
 
+	err = i2c_smbus_write_byte_data(client, THS7303_CHANNEL_1, temp);
 	if (err)
-		v4l2_err(sd, "write failed\n");
+		goto out;
 
+	err = i2c_smbus_write_byte_data(client, THS7303_CHANNEL_3, temp);
+	if (err)
+		goto out;
+	return err;
+out:
+	pr_info("write byte data failed\n");
 	return err;
 }
 
 static int ths7303_s_std_output(struct v4l2_subdev *sd, v4l2_std_id norm)
 {
-	return ths7303_setvalue(sd, norm);
+	if (norm & (V4L2_STD_ALL & ~V4L2_STD_SECAM))
+		return ths7303_setval(sd, THS7303_FILTER_MODE_480I_576I);
+	else
+		return ths7303_setval(sd, THS7303_FILTER_MODE_DISABLE);
+}
+
+/* for setting filter for HD output */
+static int ths7303_s_dv_timings(struct v4l2_subdev *sd,
+			       struct v4l2_dv_timings *dv_timings)
+{
+	u32 height = dv_timings->bt.height;
+	int interlaced = dv_timings->bt.interlaced;
+	int res = 0;
+
+	if (height == 1080 && !interlaced)
+		res = ths7303_setval(sd, THS7303_FILTER_MODE_1080P);
+	else if ((height == 720 && !interlaced) ||
+			(height == 1080 && interlaced))
+		res = ths7303_setval(sd, THS7303_FILTER_MODE_720P_1080I);
+	else if ((height == 480 || height == 576) && !interlaced)
+		res = ths7303_setval(sd, THS7303_FILTER_MODE_480P_576P);
+	else
+		/* disable all channels */
+		res = ths7303_setval(sd, THS7303_FILTER_MODE_DISABLE);
+
+	return res;
 }
 
 static int ths7303_g_chip_ident(struct v4l2_subdev *sd,
@@ -78,6 +152,7 @@ static int ths7303_g_chip_ident(struct v4l2_subdev *sd,
 
 static const struct v4l2_subdev_video_ops ths7303_video_ops = {
 	.s_std_output	= ths7303_s_std_output,
+	.s_dv_timings    = ths7303_s_dv_timings,
 };
 
 static const struct v4l2_subdev_core_ops ths7303_core_ops = {
@@ -107,7 +182,7 @@ static int ths7303_probe(struct i2c_client *client,
 
 	v4l2_i2c_subdev_init(sd, client, &ths7303_ops);
 
-	return ths7303_setvalue(sd, std_id);
+	return ths7303_s_std_output(sd, std_id);
 }
 
 static int ths7303_remove(struct i2c_client *client)
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/2] Replace the obsolete preset API by timings API
  2012-08-08 12:30 [PATCH 0/2] Replace the obsolete preset API by timings API Prabhakar Lad
  2012-08-08 12:30 ` [PATCH 1/2] dm644x: replace the obsolete preset API by the " Prabhakar Lad
  2012-08-08 12:30 ` [PATCH 2/2] ths7303: enable THS7303 for HD modes Prabhakar Lad
@ 2012-09-18  5:10 ` Prabhakar Lad
  2 siblings, 0 replies; 8+ messages in thread
From: Prabhakar Lad @ 2012-09-18  5:10 UTC (permalink / raw)
  To: Mauro Carvalho Chehab, Sekhar Nori
  Cc: LMML, LAK, dlos, linux-kernel, Hans Verkuil, Prabhakar Lad,
	Manjunath Hadli

Hi Mauro/Sekhar

On Wed, Aug 8, 2012 at 6:00 PM, Prabhakar Lad <prabhakar.lad@ti.com> wrote:
> This first patch replaces the obsolete preset API by timings
> API for davinci VPBE, appropriate chnages in machine file for
> dm644x in which VPBE is enabled. And the second patch adds support for
> timings API for ths7303 driver. Sending them as s series
> since VPBE uses the ths7303 driver.
>
> Hans Verkuil (1):
>   dm644x: replace the obsolete preset API by the timings API.
>
> Manjunath Hadli (1):
>   ths7303: enable THS7303 for HD modes
>
Can you pull this patchset ? Please inform me if anything is
needed from my side.

Regards,
--Prabhakar

>  arch/arm/mach-davinci/board-dm644x-evm.c   |   15 ++--
>  arch/arm/mach-davinci/dm644x.c             |   17 +---
>  drivers/media/video/davinci/vpbe.c         |  110 ++++++++++++----------------
>  drivers/media/video/davinci/vpbe_display.c |   60 +++++++--------
>  drivers/media/video/davinci/vpbe_venc.c    |   25 +++---
>  drivers/media/video/ths7303.c              |  107 +++++++++++++++++++++++----
>  include/media/davinci/vpbe.h               |   14 ++--
>  include/media/davinci/vpbe_types.h         |    8 +--
>  include/media/davinci/vpbe_venc.h          |    2 +-
>  9 files changed, 202 insertions(+), 156 deletions(-)
>
> _______________________________________________
> Davinci-linux-open-source mailing list
> Davinci-linux-open-source@linux.davincidsp.com
> http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] dm644x: replace the obsolete preset API by the timings API.
  2012-08-08 12:30 ` [PATCH 1/2] dm644x: replace the obsolete preset API by the " Prabhakar Lad
@ 2012-09-28 12:44   ` Prabhakar Lad
  2012-09-28 12:52     ` Hans Verkuil
  2012-10-01 11:29   ` Sekhar Nori
  1 sibling, 1 reply; 8+ messages in thread
From: Prabhakar Lad @ 2012-09-28 12:44 UTC (permalink / raw)
  To: Kevin Hilman
  Cc: LMML, LAK, dlos, linux-kernel, Mauro Carvalho Chehab,
	Hans Verkuil, Hans Verkuil, Prabhakar Lad, Manjunath Hadli,
	Sekhar Nori

Hi Kevin,

On Wed, Aug 8, 2012 at 6:00 PM, Prabhakar Lad <prabhakar.lad@ti.com> wrote:
> From: Hans Verkuil <hans.verkuil@cisco.com>
>
> 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>
> ---
>  arch/arm/mach-davinci/board-dm644x-evm.c   |   15 ++--
>  arch/arm/mach-davinci/dm644x.c             |   17 +---
>  drivers/media/video/davinci/vpbe.c         |  110 ++++++++++++----------------
>  drivers/media/video/davinci/vpbe_display.c |   60 +++++++--------
>  drivers/media/video/davinci/vpbe_venc.c    |   25 +++---
>  include/media/davinci/vpbe.h               |   14 ++--
>  include/media/davinci/vpbe_types.h         |    8 +--
>  include/media/davinci/vpbe_venc.h          |    2 +-
>  8 files changed, 111 insertions(+), 140 deletions(-)
>
Can you ACK this patch? Since this patch needs to go from Mauro's tree
due to changes in media drivers folder structure.

Regards,
--Prabhakar Lad

> diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c
> index d34ed55..3baf56d 100644
> --- a/arch/arm/mach-davinci/board-dm644x-evm.c
> +++ b/arch/arm/mach-davinci/board-dm644x-evm.c
> @@ -23,6 +23,7 @@
>  #include <linux/phy.h>
>  #include <linux/clk.h>
>  #include <linux/videodev2.h>
> +#include <linux/v4l2-dv-timings.h>
>  #include <linux/export.h>
>
>  #include <media/tvp514x.h>
> @@ -620,7 +621,7 @@ static struct vpbe_enc_mode_info dm644xevm_enc_std_timing[] = {
>         {
>                 .name           = "ntsc",
>                 .timings_type   = VPBE_ENC_STD,
> -               .timings        = {V4L2_STD_525_60},
> +               .std_id         = V4L2_STD_525_60,
>                 .interlaced     = 1,
>                 .xres           = 720,
>                 .yres           = 480,
> @@ -632,7 +633,7 @@ static struct vpbe_enc_mode_info dm644xevm_enc_std_timing[] = {
>         {
>                 .name           = "pal",
>                 .timings_type   = VPBE_ENC_STD,
> -               .timings        = {V4L2_STD_625_50},
> +               .std_id         = V4L2_STD_625_50,
>                 .interlaced     = 1,
>                 .xres           = 720,
>                 .yres           = 576,
> @@ -647,8 +648,8 @@ static struct vpbe_enc_mode_info dm644xevm_enc_std_timing[] = {
>  static struct vpbe_enc_mode_info dm644xevm_enc_preset_timing[] = {
>         {
>                 .name           = "480p59_94",
> -               .timings_type   = VPBE_ENC_DV_PRESET,
> -               .timings        = {V4L2_DV_480P59_94},
> +               .timings_type   = VPBE_ENC_CUSTOM_TIMINGS,
> +               .dv_timings     = V4L2_DV_BT_CEA_720X480P59_94,
>                 .interlaced     = 0,
>                 .xres           = 720,
>                 .yres           = 480,
> @@ -659,8 +660,8 @@ static struct vpbe_enc_mode_info dm644xevm_enc_preset_timing[] = {
>         },
>         {
>                 .name           = "576p50",
> -               .timings_type   = VPBE_ENC_DV_PRESET,
> -               .timings        = {V4L2_DV_576P50},
> +               .timings_type   = VPBE_ENC_CUSTOM_TIMINGS,
> +               .dv_timings     = V4L2_DV_BT_CEA_720X576P50,
>                 .interlaced     = 0,
>                 .xres           = 720,
>                 .yres           = 576,
> @@ -698,7 +699,7 @@ static struct vpbe_output dm644xevm_vpbe_outputs[] = {
>                         .index          = 1,
>                         .name           = "Component",
>                         .type           = V4L2_OUTPUT_TYPE_ANALOG,
> -                       .capabilities   = V4L2_OUT_CAP_PRESETS,
> +                       .capabilities   = V4L2_OUT_CAP_CUSTOM_TIMINGS,
>                 },
>                 .subdev_name    = VPBE_VENC_SUBDEV_NAME,
>                 .default_mode   = "480p59_94",
> diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c
> index c8b8666..79d2880 100644
> --- a/arch/arm/mach-davinci/dm644x.c
> +++ b/arch/arm/mach-davinci/dm644x.c
> @@ -701,7 +701,7 @@ static struct resource dm644x_venc_resources[] = {
>  #define DM644X_VPSS_DACCLKEN                  BIT(4)
>
>  static int dm644x_venc_setup_clock(enum vpbe_enc_timings_type type,
> -                                  unsigned int mode)
> +                                  unsigned int pclock)
>  {
>         int ret = 0;
>         u32 v = DM644X_VPSS_VENCLKEN;
> @@ -711,27 +711,18 @@ static int dm644x_venc_setup_clock(enum vpbe_enc_timings_type type,
>                 v |= DM644X_VPSS_DACCLKEN;
>                 writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL));
>                 break;
> -       case VPBE_ENC_DV_PRESET:
> -               switch (mode) {
> -               case V4L2_DV_480P59_94:
> -               case V4L2_DV_576P50:
> +       case VPBE_ENC_CUSTOM_TIMINGS:
> +               if (pclock <= 27000000) {
>                         v |= DM644X_VPSS_MUXSEL_PLL2_MODE |
>                              DM644X_VPSS_DACCLKEN;
>                         writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL));
> -                       break;
> -               case V4L2_DV_720P60:
> -               case V4L2_DV_1080I60:
> -               case V4L2_DV_1080P30:
> +               } else {
>                         /*
>                          * For HD, use external clock source since
>                          * HD requires higher clock rate
>                          */
>                         v |= DM644X_VPSS_MUXSEL_VPBECLK_MODE;
>                         writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL));
> -                       break;
> -               default:
> -                       ret = -EINVAL;
> -                       break;
>                 }
>                 break;
>         default:
> diff --git a/drivers/media/video/davinci/vpbe.c b/drivers/media/video/davinci/vpbe.c
> index c4a82a1..bc27b2a 100644
> --- a/drivers/media/video/davinci/vpbe.c
> +++ b/drivers/media/video/davinci/vpbe.c
> @@ -174,26 +174,6 @@ static int vpbe_get_current_mode_info(struct vpbe_device *vpbe_dev,
>         return 0;
>  }
>
> -static int vpbe_get_dv_preset_info(struct vpbe_device *vpbe_dev,
> -                                  unsigned int dv_preset)
> -{
> -       struct vpbe_config *cfg = vpbe_dev->cfg;
> -       struct vpbe_enc_mode_info var;
> -       int curr_output = vpbe_dev->current_out_index;
> -       int i;
> -
> -       for (i = 0; i < vpbe_dev->cfg->outputs[curr_output].num_modes; i++) {
> -               var = cfg->outputs[curr_output].modes[i];
> -               if ((var.timings_type & VPBE_ENC_DV_PRESET) &&
> -                 (var.timings.dv_preset == dv_preset)) {
> -                       vpbe_dev->current_timings = var;
> -                       return 0;
> -               }
> -       }
> -
> -       return -EINVAL;
> -}
> -
>  /* Get std by std id */
>  static int vpbe_get_std_info(struct vpbe_device *vpbe_dev,
>                              v4l2_std_id std_id)
> @@ -206,7 +186,7 @@ static int vpbe_get_std_info(struct vpbe_device *vpbe_dev,
>         for (i = 0; i < vpbe_dev->cfg->outputs[curr_output].num_modes; i++) {
>                 var = cfg->outputs[curr_output].modes[i];
>                 if ((var.timings_type & VPBE_ENC_STD) &&
> -                 (var.timings.std_id & std_id)) {
> +                 (var.std_id & std_id)) {
>                         vpbe_dev->current_timings = var;
>                         return 0;
>                 }
> @@ -344,38 +324,42 @@ static unsigned int vpbe_get_output(struct vpbe_device *vpbe_dev)
>  }
>
>  /**
> - * vpbe_s_dv_preset - Set the given preset timings in the encoder
> + * vpbe_s_dv_timings - Set the given preset timings in the encoder
>   *
> - * Sets the preset if supported by the current encoder. Return the status.
> + * Sets the timings if supported by the current encoder. Return the status.
>   * 0 - success & -EINVAL on error
>   */
> -static int vpbe_s_dv_preset(struct vpbe_device *vpbe_dev,
> -                    struct v4l2_dv_preset *dv_preset)
> +static int vpbe_s_dv_timings(struct vpbe_device *vpbe_dev,
> +                    struct v4l2_dv_timings *dv_timings)
>  {
>         struct vpbe_config *cfg = vpbe_dev->cfg;
>         int out_index = vpbe_dev->current_out_index;
> +       struct vpbe_output *output = &cfg->outputs[out_index];
>         int sd_index = vpbe_dev->current_sd_index;
> -       int ret;
> +       int ret, i;
>
>
>         if (!(cfg->outputs[out_index].output.capabilities &
> -           V4L2_OUT_CAP_PRESETS))
> +           V4L2_OUT_CAP_CUSTOM_TIMINGS))
>                 return -EINVAL;
>
> -       ret = vpbe_get_dv_preset_info(vpbe_dev, dv_preset->preset);
> -
> -       if (ret)
> -               return ret;
> -
> +       for (i = 0; i < output->num_modes; i++) {
> +               if (output->modes[i].timings_type == VPBE_ENC_CUSTOM_TIMINGS &&
> +                   !memcmp(&output->modes[i].dv_timings,
> +                               dv_timings, sizeof(*dv_timings)))
> +                       break;
> +       }
> +       if (i >= output->num_modes)
> +               return -EINVAL;
> +       vpbe_dev->current_timings = output->modes[i];
>         mutex_lock(&vpbe_dev->lock);
>
> -
>         ret = v4l2_subdev_call(vpbe_dev->encoders[sd_index], video,
> -                                       s_dv_preset, dv_preset);
> +                                       s_dv_timings, dv_timings);
>         if (!ret && (vpbe_dev->amp != NULL)) {
>                 /* Call amplifier subdevice */
>                 ret = v4l2_subdev_call(vpbe_dev->amp, video,
> -                               s_dv_preset, dv_preset);
> +                               s_dv_timings, dv_timings);
>         }
>         /* set the lcd controller output for the given mode */
>         if (!ret) {
> @@ -392,17 +376,17 @@ static int vpbe_s_dv_preset(struct vpbe_device *vpbe_dev,
>  }
>
>  /**
> - * vpbe_g_dv_preset - Get the preset in the current encoder
> + * vpbe_g_dv_timings - Get the timings in the current encoder
>   *
> - * Get the preset in the current encoder. Return the status. 0 - success
> + * Get the timings in the current encoder. Return the status. 0 - success
>   * -EINVAL on error
>   */
> -static int vpbe_g_dv_preset(struct vpbe_device *vpbe_dev,
> -                    struct v4l2_dv_preset *dv_preset)
> +static int vpbe_g_dv_timings(struct vpbe_device *vpbe_dev,
> +                    struct v4l2_dv_timings *dv_timings)
>  {
>         if (vpbe_dev->current_timings.timings_type &
> -         VPBE_ENC_DV_PRESET) {
> -               dv_preset->preset = vpbe_dev->current_timings.timings.dv_preset;
> +         VPBE_ENC_CUSTOM_TIMINGS) {
> +               *dv_timings = vpbe_dev->current_timings.dv_timings;
>                 return 0;
>         }
>
> @@ -410,13 +394,13 @@ static int vpbe_g_dv_preset(struct vpbe_device *vpbe_dev,
>  }
>
>  /**
> - * vpbe_enum_dv_presets - Enumerate the dv presets in the current encoder
> + * vpbe_enum_dv_timings - Enumerate the dv timings in the current encoder
>   *
> - * Get the preset in the current encoder. Return the status. 0 - success
> + * Get the timings in the current encoder. Return the status. 0 - success
>   * -EINVAL on error
>   */
> -static int vpbe_enum_dv_presets(struct vpbe_device *vpbe_dev,
> -                        struct v4l2_dv_enum_preset *preset_info)
> +static int vpbe_enum_dv_timings(struct vpbe_device *vpbe_dev,
> +                        struct v4l2_enum_dv_timings *timings)
>  {
>         struct vpbe_config *cfg = vpbe_dev->cfg;
>         int out_index = vpbe_dev->current_out_index;
> @@ -424,12 +408,12 @@ static int vpbe_enum_dv_presets(struct vpbe_device *vpbe_dev,
>         int j = 0;
>         int i;
>
> -       if (!(output->output.capabilities & V4L2_OUT_CAP_PRESETS))
> +       if (!(output->output.capabilities & V4L2_OUT_CAP_CUSTOM_TIMINGS))
>                 return -EINVAL;
>
>         for (i = 0; i < output->num_modes; i++) {
> -               if (output->modes[i].timings_type == VPBE_ENC_DV_PRESET) {
> -                       if (j == preset_info->index)
> +               if (output->modes[i].timings_type == VPBE_ENC_CUSTOM_TIMINGS) {
> +                       if (j == timings->index)
>                                 break;
>                         j++;
>                 }
> @@ -437,9 +421,8 @@ static int vpbe_enum_dv_presets(struct vpbe_device *vpbe_dev,
>
>         if (i == output->num_modes)
>                 return -EINVAL;
> -
> -       return v4l_fill_dv_preset_info(output->modes[i].timings.dv_preset,
> -                                       preset_info);
> +       timings->timings = output->modes[i].dv_timings;
> +       return 0;
>  }
>
>  /**
> @@ -489,10 +472,10 @@ static int vpbe_s_std(struct vpbe_device *vpbe_dev, v4l2_std_id *std_id)
>   */
>  static int vpbe_g_std(struct vpbe_device *vpbe_dev, v4l2_std_id *std_id)
>  {
> -       struct vpbe_enc_mode_info cur_timings = vpbe_dev->current_timings;
> +       struct vpbe_enc_mode_info *cur_timings = &vpbe_dev->current_timings;
>
> -       if (cur_timings.timings_type & VPBE_ENC_STD) {
> -               *std_id = cur_timings.timings.std_id;
> +       if (cur_timings->timings_type & VPBE_ENC_STD) {
> +               *std_id = cur_timings->std_id;
>                 return 0;
>         }
>
> @@ -511,7 +494,7 @@ static int vpbe_set_mode(struct vpbe_device *vpbe_dev,
>  {
>         struct vpbe_enc_mode_info *preset_mode = NULL;
>         struct vpbe_config *cfg = vpbe_dev->cfg;
> -       struct v4l2_dv_preset dv_preset;
> +       struct v4l2_dv_timings dv_timings;
>         struct osd_state *osd_device;
>         int out_index = vpbe_dev->current_out_index;
>         int ret = 0;
> @@ -530,11 +513,12 @@ static int vpbe_set_mode(struct vpbe_device *vpbe_dev,
>                          */
>                         if (preset_mode->timings_type & VPBE_ENC_STD)
>                                 return vpbe_s_std(vpbe_dev,
> -                                                &preset_mode->timings.std_id);
> -                       if (preset_mode->timings_type & VPBE_ENC_DV_PRESET) {
> -                               dv_preset.preset =
> -                                       preset_mode->timings.dv_preset;
> -                               return vpbe_s_dv_preset(vpbe_dev, &dv_preset);
> +                                                &preset_mode->std_id);
> +                       if (preset_mode->timings_type &
> +                                               VPBE_ENC_CUSTOM_TIMINGS) {
> +                               dv_timings =
> +                                       preset_mode->dv_timings;
> +                               return vpbe_s_dv_timings(vpbe_dev, &dv_timings);
>                         }
>                 }
>         }
> @@ -810,9 +794,9 @@ static struct vpbe_device_ops vpbe_dev_ops = {
>         .enum_outputs = vpbe_enum_outputs,
>         .set_output = vpbe_set_output,
>         .get_output = vpbe_get_output,
> -       .s_dv_preset = vpbe_s_dv_preset,
> -       .g_dv_preset = vpbe_g_dv_preset,
> -       .enum_dv_presets = vpbe_enum_dv_presets,
> +       .s_dv_timings = vpbe_s_dv_timings,
> +       .g_dv_timings = vpbe_g_dv_timings,
> +       .enum_dv_timings = vpbe_enum_dv_timings,
>         .s_std = vpbe_s_std,
>         .g_std = vpbe_g_std,
>         .initialize = vpbe_initialize,
> diff --git a/drivers/media/video/davinci/vpbe_display.c b/drivers/media/video/davinci/vpbe_display.c
> index 6fe7034..2fbf3bc 100644
> --- a/drivers/media/video/davinci/vpbe_display.c
> +++ b/drivers/media/video/davinci/vpbe_display.c
> @@ -393,7 +393,7 @@ vpbe_disp_calculate_scale_factor(struct vpbe_display *disp_dev,
>         int h_scale;
>         int v_scale;
>
> -       v4l2_std_id standard_id = vpbe_dev->current_timings.timings.std_id;
> +       v4l2_std_id standard_id = vpbe_dev->current_timings.std_id;
>
>         /*
>          * Application initially set the image format. Current display
> @@ -943,7 +943,7 @@ static int vpbe_display_g_std(struct file *file, void *priv,
>
>         /* Get the standard from the current encoder */
>         if (vpbe_dev->current_timings.timings_type & VPBE_ENC_STD) {
> -               *std_id = vpbe_dev->current_timings.timings.std_id;
> +               *std_id = vpbe_dev->current_timings.std_id;
>                 return 0;
>         }
>
> @@ -1029,29 +1029,29 @@ static int vpbe_display_g_output(struct file *file, void *priv,
>  }
>
>  /**
> - * vpbe_display_enum_dv_presets - Enumerate the dv presets
> + * vpbe_display_enum_dv_timings - Enumerate the dv timings
>   *
> - * enum the preset in the current encoder. Return the status. 0 - success
> + * enum the timings in the current encoder. Return the status. 0 - success
>   * -EINVAL on error
>   */
>  static int
> -vpbe_display_enum_dv_presets(struct file *file, void *priv,
> -                       struct v4l2_dv_enum_preset *preset)
> +vpbe_display_enum_dv_timings(struct file *file, void *priv,
> +                       struct v4l2_enum_dv_timings *timings)
>  {
>         struct vpbe_fh *fh = priv;
>         struct vpbe_device *vpbe_dev = fh->disp_dev->vpbe_dev;
>         int ret;
>
> -       v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_ENUM_DV_PRESETS\n");
> +       v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_ENUM_DV_TIMINGS\n");
>
>         /* Enumerate outputs */
> -       if (NULL == vpbe_dev->ops.enum_dv_presets)
> +       if (NULL == vpbe_dev->ops.enum_dv_timings)
>                 return -EINVAL;
>
> -       ret = vpbe_dev->ops.enum_dv_presets(vpbe_dev, preset);
> +       ret = vpbe_dev->ops.enum_dv_timings(vpbe_dev, timings);
>         if (ret) {
>                 v4l2_err(&vpbe_dev->v4l2_dev,
> -                       "Failed to enumerate dv presets info\n");
> +                       "Failed to enumerate dv timings info\n");
>                 return -EINVAL;
>         }
>
> @@ -1059,21 +1059,21 @@ vpbe_display_enum_dv_presets(struct file *file, void *priv,
>  }
>
>  /**
> - * vpbe_display_s_dv_preset - Set the dv presets
> + * vpbe_display_s_dv_timings - Set the dv timings
>   *
> - * Set the preset in the current encoder. Return the status. 0 - success
> + * Set the timings in the current encoder. Return the status. 0 - success
>   * -EINVAL on error
>   */
>  static int
> -vpbe_display_s_dv_preset(struct file *file, void *priv,
> -                               struct v4l2_dv_preset *preset)
> +vpbe_display_s_dv_timings(struct file *file, void *priv,
> +                               struct v4l2_dv_timings *timings)
>  {
>         struct vpbe_fh *fh = priv;
>         struct vpbe_layer *layer = fh->layer;
>         struct vpbe_device *vpbe_dev = fh->disp_dev->vpbe_dev;
>         int ret;
>
> -       v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_S_DV_PRESETS\n");
> +       v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_S_DV_TIMINGS\n");
>
>
>         /* If streaming is started, return error */
> @@ -1083,13 +1083,13 @@ vpbe_display_s_dv_preset(struct file *file, void *priv,
>         }
>
>         /* Set the given standard in the encoder */
> -       if (!vpbe_dev->ops.s_dv_preset)
> +       if (!vpbe_dev->ops.s_dv_timings)
>                 return -EINVAL;
>
> -       ret = vpbe_dev->ops.s_dv_preset(vpbe_dev, preset);
> +       ret = vpbe_dev->ops.s_dv_timings(vpbe_dev, timings);
>         if (ret) {
>                 v4l2_err(&vpbe_dev->v4l2_dev,
> -                       "Failed to set the dv presets info\n");
> +                       "Failed to set the dv timings info\n");
>                 return -EINVAL;
>         }
>         /* set the current norm to zero to be consistent. If STD is used
> @@ -1101,26 +1101,25 @@ vpbe_display_s_dv_preset(struct file *file, void *priv,
>  }
>
>  /**
> - * vpbe_display_g_dv_preset - Set the dv presets
> + * vpbe_display_g_dv_timings - Set the dv timings
>   *
> - * Get the preset in the current encoder. Return the status. 0 - success
> + * Get the timings in the current encoder. Return the status. 0 - success
>   * -EINVAL on error
>   */
>  static int
> -vpbe_display_g_dv_preset(struct file *file, void *priv,
> -                               struct v4l2_dv_preset *dv_preset)
> +vpbe_display_g_dv_timings(struct file *file, void *priv,
> +                               struct v4l2_dv_timings *dv_timings)
>  {
>         struct vpbe_fh *fh = priv;
>         struct vpbe_device *vpbe_dev = fh->disp_dev->vpbe_dev;
>
> -       v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_G_DV_PRESETS\n");
> +       v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "VIDIOC_G_DV_TIMINGS\n");
>
>         /* Get the given standard in the encoder */
>
>         if (vpbe_dev->current_timings.timings_type &
> -                               VPBE_ENC_DV_PRESET) {
> -               dv_preset->preset =
> -                       vpbe_dev->current_timings.timings.dv_preset;
> +                               VPBE_ENC_CUSTOM_TIMINGS) {
> +               *dv_timings = vpbe_dev->current_timings.dv_timings;
>         } else {
>                 return -EINVAL;
>         }
> @@ -1560,9 +1559,9 @@ static const struct v4l2_ioctl_ops vpbe_ioctl_ops = {
>         .vidioc_enum_output      = vpbe_display_enum_output,
>         .vidioc_s_output         = vpbe_display_s_output,
>         .vidioc_g_output         = vpbe_display_g_output,
> -       .vidioc_s_dv_preset      = vpbe_display_s_dv_preset,
> -       .vidioc_g_dv_preset      = vpbe_display_g_dv_preset,
> -       .vidioc_enum_dv_presets  = vpbe_display_enum_dv_presets,
> +       .vidioc_s_dv_timings     = vpbe_display_s_dv_timings,
> +       .vidioc_g_dv_timings     = vpbe_display_g_dv_timings,
> +       .vidioc_enum_dv_timings  = vpbe_display_enum_dv_timings,
>  #ifdef CONFIG_VIDEO_ADV_DEBUG
>         .vidioc_g_register       = vpbe_display_g_register,
>         .vidioc_s_register       = vpbe_display_s_register,
> @@ -1630,8 +1629,7 @@ static __devinit int init_vpbe_layer(int i, struct vpbe_display *disp_dev,
>                         VPBE_ENC_STD) {
>                 vbd->tvnorms = (V4L2_STD_525_60 | V4L2_STD_625_50);
>                 vbd->current_norm =
> -                       disp_dev->vpbe_dev->
> -                       current_timings.timings.std_id;
> +                       disp_dev->vpbe_dev->current_timings.std_id;
>         } else
>                 vbd->current_norm = 0;
>
> diff --git a/drivers/media/video/davinci/vpbe_venc.c b/drivers/media/video/davinci/vpbe_venc.c
> index b21ecc8..86d47c3 100644
> --- a/drivers/media/video/davinci/vpbe_venc.c
> +++ b/drivers/media/video/davinci/vpbe_venc.c
> @@ -298,7 +298,7 @@ static int venc_set_480p59_94(struct v4l2_subdev *sd)
>                 return -EINVAL;
>
>         /* Setup clock at VPSS & VENC for SD */
> -       if (pdata->setup_clock(VPBE_ENC_DV_PRESET, V4L2_DV_480P59_94) < 0)
> +       if (pdata->setup_clock(VPBE_ENC_CUSTOM_TIMINGS, 27000000) < 0)
>                 return -EINVAL;
>
>         venc_enabledigitaloutput(sd, 0);
> @@ -345,7 +345,7 @@ static int venc_set_576p50(struct v4l2_subdev *sd)
>           (pdata->venc_type != VPBE_VERSION_2))
>                 return -EINVAL;
>         /* Setup clock at VPSS & VENC for SD */
> -       if (pdata->setup_clock(VPBE_ENC_DV_PRESET, V4L2_DV_576P50) < 0)
> +       if (pdata->setup_clock(VPBE_ENC_CUSTOM_TIMINGS, 27000000) < 0)
>                 return -EINVAL;
>
>         venc_enabledigitaloutput(sd, 0);
> @@ -385,7 +385,7 @@ static int venc_set_720p60_internal(struct v4l2_subdev *sd)
>         struct venc_state *venc = to_state(sd);
>         struct venc_platform_data *pdata = venc->pdata;
>
> -       if (pdata->setup_clock(VPBE_ENC_DV_PRESET, V4L2_DV_720P60) < 0)
> +       if (pdata->setup_clock(VPBE_ENC_CUSTOM_TIMINGS, 74250000) < 0)
>                 return -EINVAL;
>
>         venc_enabledigitaloutput(sd, 0);
> @@ -413,7 +413,7 @@ static int venc_set_1080i30_internal(struct v4l2_subdev *sd)
>         struct venc_state *venc = to_state(sd);
>         struct venc_platform_data *pdata = venc->pdata;
>
> -       if (pdata->setup_clock(VPBE_ENC_DV_PRESET, V4L2_DV_1080P30) < 0)
> +       if (pdata->setup_clock(VPBE_ENC_CUSTOM_TIMINGS, 74250000) < 0)
>                 return -EINVAL;
>
>         venc_enabledigitaloutput(sd, 0);
> @@ -446,26 +446,27 @@ static int venc_s_std_output(struct v4l2_subdev *sd, v4l2_std_id norm)
>         return -EINVAL;
>  }
>
> -static int venc_s_dv_preset(struct v4l2_subdev *sd,
> -                           struct v4l2_dv_preset *dv_preset)
> +static int venc_s_dv_timings(struct v4l2_subdev *sd,
> +                           struct v4l2_dv_timings *dv_timings)
>  {
>         struct venc_state *venc = to_state(sd);
> +       u32 height = dv_timings->bt.height;
>         int ret;
>
> -       v4l2_dbg(debug, 1, sd, "venc_s_dv_preset\n");
> +       v4l2_dbg(debug, 1, sd, "venc_s_dv_timings\n");
>
> -       if (dv_preset->preset == V4L2_DV_576P50)
> +       if (height == 576)
>                 return venc_set_576p50(sd);
> -       else if (dv_preset->preset == V4L2_DV_480P59_94)
> +       else if (height == 480)
>                 return venc_set_480p59_94(sd);
> -       else if ((dv_preset->preset == V4L2_DV_720P60) &&
> +       else if ((height == 720) &&
>                         (venc->pdata->venc_type == VPBE_VERSION_2)) {
>                 /* TBD setup internal 720p mode here */
>                 ret = venc_set_720p60_internal(sd);
>                 /* for DM365 VPBE, there is DAC inside */
>                 vdaccfg_write(sd, VDAC_CONFIG_HD_V2);
>                 return ret;
> -       } else if ((dv_preset->preset == V4L2_DV_1080I30) &&
> +       } else if ((height == 1080) &&
>                 (venc->pdata->venc_type == VPBE_VERSION_2)) {
>                 /* TBD setup internal 1080i mode here */
>                 ret = venc_set_1080i30_internal(sd);
> @@ -518,7 +519,7 @@ static const struct v4l2_subdev_core_ops venc_core_ops = {
>  static const struct v4l2_subdev_video_ops venc_video_ops = {
>         .s_routing = venc_s_routing,
>         .s_std_output = venc_s_std_output,
> -       .s_dv_preset = venc_s_dv_preset,
> +       .s_dv_timings = venc_s_dv_timings,
>  };
>
>  static const struct v4l2_subdev_ops venc_ops = {
> diff --git a/include/media/davinci/vpbe.h b/include/media/davinci/vpbe.h
> index 8bc1b3c..a7ca488 100644
> --- a/include/media/davinci/vpbe.h
> +++ b/include/media/davinci/vpbe.h
> @@ -35,7 +35,7 @@ struct osd_config_info {
>  struct vpbe_output {
>         struct v4l2_output output;
>         /*
> -        * If output capabilities include dv_preset, list supported presets
> +        * If output capabilities include dv_timings, list supported timings
>          * below
>          */
>         char *subdev_name;
> @@ -120,16 +120,16 @@ struct vpbe_device_ops {
>         unsigned int (*get_output)(struct vpbe_device *vpbe_dev);
>
>         /* Set DV preset at current output */
> -       int (*s_dv_preset)(struct vpbe_device *vpbe_dev,
> -                          struct v4l2_dv_preset *dv_preset);
> +       int (*s_dv_timings)(struct vpbe_device *vpbe_dev,
> +                          struct v4l2_dv_timings *dv_timings);
>
>         /* Get DV presets supported at the output */
> -       int (*g_dv_preset)(struct vpbe_device *vpbe_dev,
> -                          struct v4l2_dv_preset *dv_preset);
> +       int (*g_dv_timings)(struct vpbe_device *vpbe_dev,
> +                          struct v4l2_dv_timings *dv_timings);
>
>         /* Enumerate the DV Presets supported at the output */
> -       int (*enum_dv_presets)(struct vpbe_device *vpbe_dev,
> -                              struct v4l2_dv_enum_preset *preset_info);
> +       int (*enum_dv_timings)(struct vpbe_device *vpbe_dev,
> +                              struct v4l2_enum_dv_timings *timings_info);
>
>         /* Set std at the output */
>         int (*s_std)(struct vpbe_device *vpbe_dev, v4l2_std_id *std_id);
> diff --git a/include/media/davinci/vpbe_types.h b/include/media/davinci/vpbe_types.h
> index 727f551..9b85396 100644
> --- a/include/media/davinci/vpbe_types.h
> +++ b/include/media/davinci/vpbe_types.h
> @@ -32,11 +32,6 @@ enum vpbe_enc_timings_type {
>         VPBE_ENC_TIMINGS_INVALID = 0x8,
>  };
>
> -union vpbe_timings {
> -       v4l2_std_id std_id;
> -       unsigned int dv_preset;
> -};
> -
>  /*
>   * struct vpbe_enc_mode_info
>   * @name: ptr to name string of the standard, "NTSC", "PAL" etc
> @@ -73,7 +68,8 @@ union vpbe_timings {
>  struct vpbe_enc_mode_info {
>         unsigned char *name;
>         enum vpbe_enc_timings_type timings_type;
> -       union vpbe_timings timings;
> +       v4l2_std_id std_id;
> +       struct v4l2_dv_timings dv_timings;
>         unsigned int interlaced;
>         unsigned int xres;
>         unsigned int yres;
> diff --git a/include/media/davinci/vpbe_venc.h b/include/media/davinci/vpbe_venc.h
> index 6b57334..cc78c2e 100644
> --- a/include/media/davinci/vpbe_venc.h
> +++ b/include/media/davinci/vpbe_venc.h
> @@ -32,7 +32,7 @@ struct venc_platform_data {
>         int (*setup_pinmux)(enum v4l2_mbus_pixelcode if_type,
>                             int field);
>         int (*setup_clock)(enum vpbe_enc_timings_type type,
> -                          unsigned int mode);
> +                          unsigned int pixclock);
>         int (*setup_if_config)(enum v4l2_mbus_pixelcode pixcode);
>         /* Number of LCD outputs supported */
>         int num_lcd_outputs;
> --
> 1.7.0.4
>
> _______________________________________________
> Davinci-linux-open-source mailing list
> Davinci-linux-open-source@linux.davincidsp.com
> http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] dm644x: replace the obsolete preset API by the timings API.
  2012-09-28 12:44   ` Prabhakar Lad
@ 2012-09-28 12:52     ` Hans Verkuil
  2012-09-28 12:55       ` Prabhakar Lad
  0 siblings, 1 reply; 8+ messages in thread
From: Hans Verkuil @ 2012-09-28 12:52 UTC (permalink / raw)
  To: Prabhakar Lad
  Cc: Kevin Hilman, LMML, LAK, dlos, linux-kernel,
	Mauro Carvalho Chehab, Hans Verkuil, Hans Verkuil, Prabhakar Lad,
	Manjunath Hadli, Sekhar Nori

Hi Prabhakar!

On Fri September 28 2012 14:44:59 Prabhakar Lad wrote:
> Hi Kevin,
> 
> On Wed, Aug 8, 2012 at 6:00 PM, Prabhakar Lad <prabhakar.lad@ti.com> wrote:
> > From: Hans Verkuil <hans.verkuil@cisco.com>
> >
> > 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>
> > ---
> >  arch/arm/mach-davinci/board-dm644x-evm.c   |   15 ++--
> >  arch/arm/mach-davinci/dm644x.c             |   17 +---
> >  drivers/media/video/davinci/vpbe.c         |  110 ++++++++++++----------------
> >  drivers/media/video/davinci/vpbe_display.c |   60 +++++++--------
> >  drivers/media/video/davinci/vpbe_venc.c    |   25 +++---
> >  include/media/davinci/vpbe.h               |   14 ++--
> >  include/media/davinci/vpbe_types.h         |    8 +--
> >  include/media/davinci/vpbe_venc.h          |    2 +-
> >  8 files changed, 111 insertions(+), 140 deletions(-)
> >
> Can you ACK this patch? Since this patch needs to go from Mauro's tree
> due to changes in media drivers folder structure.
> 
> Regards,
> --Prabhakar Lad
> 

...

> > -static int vpbe_s_dv_preset(struct vpbe_device *vpbe_dev,
> > -                    struct v4l2_dv_preset *dv_preset)
> > +static int vpbe_s_dv_timings(struct vpbe_device *vpbe_dev,
> > +                    struct v4l2_dv_timings *dv_timings)
> >  {
> >         struct vpbe_config *cfg = vpbe_dev->cfg;
> >         int out_index = vpbe_dev->current_out_index;
> > +       struct vpbe_output *output = &cfg->outputs[out_index];
> >         int sd_index = vpbe_dev->current_sd_index;
> > -       int ret;
> > +       int ret, i;
> >
> >
> >         if (!(cfg->outputs[out_index].output.capabilities &
> > -           V4L2_OUT_CAP_PRESETS))
> > +           V4L2_OUT_CAP_CUSTOM_TIMINGS))

Can you make a follow-up patch that renames V4L2_IN/OUT_CAP_CUSTOM_TIMINGS to
V4L2_IN/OUT_CAP_DV_TIMINGS? The old name for this define is deprecated, so it
would be nice to fix this in this driver as well.

The code that adds the new define names went in just two days ago, so as far
as I am concerned there is no need to modify the patch again. A follow-up
patch is sufficient.

Regards,

	Hans

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] dm644x: replace the obsolete preset API by the timings API.
  2012-09-28 12:52     ` Hans Verkuil
@ 2012-09-28 12:55       ` Prabhakar Lad
  0 siblings, 0 replies; 8+ messages in thread
From: Prabhakar Lad @ 2012-09-28 12:55 UTC (permalink / raw)
  To: Hans Verkuil
  Cc: Kevin Hilman, LMML, LAK, dlos, linux-kernel,
	Mauro Carvalho Chehab, Hans Verkuil, Hans Verkuil, Prabhakar Lad,
	Manjunath Hadli, Sekhar Nori

Hi Hans,

On Fri, Sep 28, 2012 at 6:22 PM, Hans Verkuil <hverkuil@xs4all.nl> wrote:
> Hi Prabhakar!
>
> On Fri September 28 2012 14:44:59 Prabhakar Lad wrote:
>> Hi Kevin,
>>
>> On Wed, Aug 8, 2012 at 6:00 PM, Prabhakar Lad <prabhakar.lad@ti.com> wrote:
>> > From: Hans Verkuil <hans.verkuil@cisco.com>
>> >
>> > 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>
>> > ---
>> >  arch/arm/mach-davinci/board-dm644x-evm.c   |   15 ++--
>> >  arch/arm/mach-davinci/dm644x.c             |   17 +---
>> >  drivers/media/video/davinci/vpbe.c         |  110 ++++++++++++----------------
>> >  drivers/media/video/davinci/vpbe_display.c |   60 +++++++--------
>> >  drivers/media/video/davinci/vpbe_venc.c    |   25 +++---
>> >  include/media/davinci/vpbe.h               |   14 ++--
>> >  include/media/davinci/vpbe_types.h         |    8 +--
>> >  include/media/davinci/vpbe_venc.h          |    2 +-
>> >  8 files changed, 111 insertions(+), 140 deletions(-)
>> >
>> Can you ACK this patch? Since this patch needs to go from Mauro's tree
>> due to changes in media drivers folder structure.
>>
>> Regards,
>> --Prabhakar Lad
>>
>
> ...
>
>> > -static int vpbe_s_dv_preset(struct vpbe_device *vpbe_dev,
>> > -                    struct v4l2_dv_preset *dv_preset)
>> > +static int vpbe_s_dv_timings(struct vpbe_device *vpbe_dev,
>> > +                    struct v4l2_dv_timings *dv_timings)
>> >  {
>> >         struct vpbe_config *cfg = vpbe_dev->cfg;
>> >         int out_index = vpbe_dev->current_out_index;
>> > +       struct vpbe_output *output = &cfg->outputs[out_index];
>> >         int sd_index = vpbe_dev->current_sd_index;
>> > -       int ret;
>> > +       int ret, i;
>> >
>> >
>> >         if (!(cfg->outputs[out_index].output.capabilities &
>> > -           V4L2_OUT_CAP_PRESETS))
>> > +           V4L2_OUT_CAP_CUSTOM_TIMINGS))
>
> Can you make a follow-up patch that renames V4L2_IN/OUT_CAP_CUSTOM_TIMINGS to
> V4L2_IN/OUT_CAP_DV_TIMINGS? The old name for this define is deprecated, so it
> would be nice to fix this in this driver as well.
>
> The code that adds the new define names went in just two days ago, so as far
> as I am concerned there is no need to modify the patch again. A follow-up
> patch is sufficient.
>
Ok, I'll create a follow up patch.

Regards,
--Prabhakar

> Regards,
>
>         Hans
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] dm644x: replace the obsolete preset API by the timings API.
  2012-08-08 12:30 ` [PATCH 1/2] dm644x: replace the obsolete preset API by the " Prabhakar Lad
  2012-09-28 12:44   ` Prabhakar Lad
@ 2012-10-01 11:29   ` Sekhar Nori
  1 sibling, 0 replies; 8+ messages in thread
From: Sekhar Nori @ 2012-10-01 11:29 UTC (permalink / raw)
  To: Prabhakar Lad
  Cc: LMML, LAK, dlos, Hans Verkuil, linux-kernel,
	Mauro Carvalho Chehab, Hans Verkuil, Manjunath Hadli

On 8/8/2012 6:00 PM, Prabhakar Lad wrote:
> From: Hans Verkuil <hans.verkuil@cisco.com>
> 
> 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>

Please have a patch description. For the DaVinci platform portion:

Acked-by: Sekhar Nori <nsekhar@ti.com>

Thanks,
Sekhar

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2012-10-01 11:29 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-08-08 12:30 [PATCH 0/2] Replace the obsolete preset API by timings API Prabhakar Lad
2012-08-08 12:30 ` [PATCH 1/2] dm644x: replace the obsolete preset API by the " Prabhakar Lad
2012-09-28 12:44   ` Prabhakar Lad
2012-09-28 12:52     ` Hans Verkuil
2012-09-28 12:55       ` Prabhakar Lad
2012-10-01 11:29   ` Sekhar Nori
2012-08-08 12:30 ` [PATCH 2/2] ths7303: enable THS7303 for HD modes Prabhakar Lad
2012-09-18  5:10 ` [PATCH 0/2] Replace the obsolete preset API by timings API Prabhakar Lad

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).