From 6a540254966f8a01de0f7c78a27db17458c2d8f5 Mon Sep 17 00:00:00 2001
From: Mike Isely <isely@pobox.com>
Date: Sun, 2 Dec 2007 23:51:34 -0300
Subject: [PATCH] V4L/DVB (6705): pvrusb2: Implement default standard selection
 based on device type

This adds a default video standard setting to the pvr2_device_desc
structure for describing device types.  With this change it is
possible to set a reasonable default standard based on device type.

Signed-off-by: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
---
 drivers/media/video/pvrusb2/pvrusb2-devattr.c | 3 +--
 drivers/media/video/pvrusb2/pvrusb2-devattr.h | 7 +++++++
 drivers/media/video/pvrusb2/pvrusb2-hdw.c     | 6 +++++-
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/drivers/media/video/pvrusb2/pvrusb2-devattr.c b/drivers/media/video/pvrusb2/pvrusb2-devattr.c
index e4a311a81000..eed64571ca0b 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-devattr.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-devattr.c
@@ -29,9 +29,8 @@ pvr2_device_desc structures.
 
 #include "pvrusb2-devattr.h"
 #include <linux/usb.h>
-/* All this is needed in order to pull in tuner type ids... */
+/* This is needed in order to pull in tuner type ids... */
 #include <linux/i2c.h>
-#include <linux/videodev2.h>
 #include <media/tuner.h>
 
 /* Known major hardware variants, keyed from device ID */
diff --git a/drivers/media/video/pvrusb2/pvrusb2-devattr.h b/drivers/media/video/pvrusb2/pvrusb2-devattr.h
index b9517e1cac08..830f27961e1e 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-devattr.h
+++ b/drivers/media/video/pvrusb2/pvrusb2-devattr.h
@@ -22,6 +22,7 @@
 #define __PVRUSB2_DEVATTR_H
 
 #include <linux/mod_devicetable.h>
+#include <linux/videodev2.h>
 
 /*
 
@@ -69,6 +70,12 @@ struct pvr2_device_desc {
 	   driver could not discover the type any other way). */
 	int default_tuner_type;
 
+	/* Initial standard bits to use for this device, if not zero.
+	   Anything set here is also implied as an available standard.
+	   Note: This is ignored if overridden on the module load line via
+	   the video_std module option. */
+	v4l2_std_id default_std_mask;
+
 	/* If set, we don't bother trying to load cx23416 firmware. */
 	char flag_skip_cx23416_firmware;
 
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
index a45721f78848..08b513b6014f 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
@@ -1439,8 +1439,12 @@ static v4l2_std_id get_default_standard(struct pvr2_hdw *hdw)
 	int tp = 0;
 	if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
 		tp = video_std[unit_number];
+		if (tp) return tp;
 	}
-	return tp;
+	if (hdw->hdw_desc->default_std_mask) {
+		return hdw->hdw_desc->default_std_mask;
+	}
+	return 0;
 }