commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=193c8bc19ec160903e447afe0bb630b9a6dd5fd0
branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk

Signed-off-by: Scott Jiang <[email protected]>
---
 drivers/media/platform/blackfin/bfin_display.c |   69 +++++++++---------------
 1 files changed, 25 insertions(+), 44 deletions(-)

diff --git a/drivers/media/platform/blackfin/bfin_display.c b/drivers/media/platform/blackfin/bfin_display.c
index 8a6d900..fb70154 100644
--- a/drivers/media/platform/blackfin/bfin_display.c
+++ b/drivers/media/platform/blackfin/bfin_display.c
@@ -310,7 +310,7 @@ static int bfin_disp_start_streaming(struct vb2_queue *vq, unsigned int count)
 	params.ppi_control = disp->cfg->ppi_control;
 	params.int_mask = disp->cfg->int_mask;
 	if (disp->cfg->outputs[disp->cur_output].capabilities
-			& V4L2_IN_CAP_CUSTOM_TIMINGS) {
+			& V4L2_IN_CAP_DV_TIMINGS) {
 		struct v4l2_bt_timings *bt = &disp->dv_timings.bt;
 
 		params.hdelay = bt->hsync + bt->hbackporch;
@@ -424,6 +424,11 @@ static struct vb2_ops bfin_disp_video_qops = {
 static int bfin_disp_g_std(struct file *file, void *priv, v4l2_std_id *std)
 {
 	struct bfin_disp_device *disp = video_drvdata(file);
+	struct bfin_display_config *config = disp->cfg;
+
+	if (!(config->outputs[disp->cur_output].capabilities
+			& V4L2_IN_CAP_STD))
+		return -ENODATA;
 
 	*std = disp->std;
 	return 0;
@@ -432,11 +437,16 @@ static int bfin_disp_g_std(struct file *file, void *priv, v4l2_std_id *std)
 static int bfin_disp_s_std(struct file *file, void *priv, v4l2_std_id *std)
 {
 	struct bfin_disp_device *disp = video_drvdata(file);
+	struct bfin_display_config *config = disp->cfg;
 	int ret;
 
 	if (vb2_is_busy(&disp->buffer_queue))
 		return -EBUSY;
 
+	if (!(config->outputs[disp->cur_output].capabilities
+			& V4L2_IN_CAP_STD))
+		return -ENODATA;
+
 	ret = v4l2_subdev_call(disp->sd, video, s_std_output, *std);
 	if (ret < 0)
 		return ret;
@@ -449,8 +459,13 @@ static int bfin_disp_g_dv_timings(struct file *file, void *priv,
 				struct v4l2_dv_timings *timings)
 {
 	struct bfin_disp_device *disp = video_drvdata(file);
+	struct bfin_display_config *config = disp->cfg;
 	int ret;
 
+	if (!(config->outputs[disp->cur_output].capabilities
+			& V4L2_IN_CAP_DV_TIMINGS))
+		return -ENODATA;
+
 	ret = v4l2_subdev_call(disp->sd, video,
 				g_dv_timings, timings);
 	if (ret < 0)
@@ -464,10 +479,16 @@ static int bfin_disp_s_dv_timings(struct file *file, void *priv,
 				struct v4l2_dv_timings *timings)
 {
 	struct bfin_disp_device *disp = video_drvdata(file);
+	struct bfin_display_config *config = disp->cfg;
 	int ret;
+
 	if (vb2_is_busy(&disp->buffer_queue))
 		return -EBUSY;
 
+	if (!(config->outputs[disp->cur_output].capabilities
+			& V4L2_IN_CAP_DV_TIMINGS))
+		return -ENODATA;
+
 	ret = v4l2_subdev_call(disp->sd, video, s_dv_timings, timings);
 	if (ret < 0)
 		return ret;
@@ -571,7 +592,6 @@ static int bfin_disp_enum_fmt_vid_out(struct file *file, void  *priv,
 	if (fmt->index >= disp->num_enc_formats)
 		return -EINVAL;
 
-	fmt->type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
 	strlcpy(fmt->description,
 		df[fmt->index].desc,
 		sizeof(fmt->description));
@@ -629,7 +649,8 @@ static int bfin_disp_querycap(struct file *file, void  *priv,
 {
 	struct bfin_disp_device *disp = video_drvdata(file);
 
-	cap->capabilities = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING;
+	cap->device_caps = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING;
+	cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
 	strlcpy(cap->driver, DISPLAY_DRV_NAME, sizeof(cap->driver));
 	strlcpy(cap->bus_info, "Blackfin Platform", sizeof(cap->bus_info));
 	strlcpy(cap->card, disp->cfg->card_name, sizeof(cap->card));
@@ -652,41 +673,6 @@ static int bfin_disp_s_parm(struct file *file, void *fh,
 	return v4l2_subdev_call(disp->sd, video, s_parm, a);
 }
 
-static int bfin_disp_g_chip_ident(struct file *file, void *priv,
-		struct v4l2_dbg_chip_ident *chip)
-{
-	struct bfin_disp_device *disp = video_drvdata(file);
-
-	chip->ident = V4L2_IDENT_NONE;
-	chip->revision = 0;
-	if (chip->match.type != V4L2_CHIP_MATCH_I2C_DRIVER &&
-			chip->match.type != V4L2_CHIP_MATCH_I2C_ADDR)
-		return -EINVAL;
-
-	return v4l2_subdev_call(disp->sd, core,
-			g_chip_ident, chip);
-}
-
-#ifdef CONFIG_VIDEO_ADV_DEBUG
-static int bfin_disp_dbg_g_register(struct file *file, void *priv,
-		struct v4l2_dbg_register *reg)
-{
-	struct bfin_disp_device *disp = video_drvdata(file);
-
-	return v4l2_subdev_call(disp->sd, core,
-			g_register, reg);
-}
-
-static int bfin_disp_dbg_s_register(struct file *file, void *priv,
-		struct v4l2_dbg_register *reg)
-{
-	struct bfin_disp_device *disp = video_drvdata(file);
-
-	return v4l2_subdev_call(disp->sd, core,
-			s_register, reg);
-}
-#endif
-
 static int bfin_disp_log_status(struct file *file, void *priv)
 {
 	struct bfin_disp_device *disp = video_drvdata(file);
@@ -716,11 +702,6 @@ static const struct v4l2_ioctl_ops bfin_disp_ioctl_ops = {
 	.vidioc_streamoff        = vb2_ioctl_streamoff,
 	.vidioc_g_parm           = bfin_disp_g_parm,
 	.vidioc_s_parm           = bfin_disp_s_parm,
-	.vidioc_g_chip_ident     = bfin_disp_g_chip_ident,
-#ifdef CONFIG_VIDEO_ADV_DEBUG
-	.vidioc_g_register       = bfin_disp_dbg_g_register,
-	.vidioc_s_register       = bfin_disp_dbg_s_register,
-#endif
 	.vidioc_log_status       = bfin_disp_log_status,
 };
 
@@ -869,7 +850,7 @@ static int bfin_disp_probe(struct platform_device *pdev)
 		}
 		disp->std = std;
 	}
-	if (config->outputs[0].capabilities & V4L2_IN_CAP_CUSTOM_TIMINGS) {
+	if (config->outputs[0].capabilities & V4L2_IN_CAP_DV_TIMINGS) {
 		struct v4l2_dv_timings dv_timings;
 		ret = v4l2_subdev_call(disp->sd, video,
 				g_dv_timings, &dv_timings);
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to