Browse Source

V4L/DVB (11176): pvrusb2: Tie in wm8775 sub-device handling

Signed-off-by: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Mike Isely 16 years ago
parent
commit
5f6dae802c

+ 1 - 0
drivers/media/video/pvrusb2/pvrusb2-devattr.h

@@ -39,6 +39,7 @@
 #define PVR2_CLIENT_ID_SAA7115 3
 #define PVR2_CLIENT_ID_TUNER 4
 #define PVR2_CLIENT_ID_CS53132A 5
+#define PVR2_CLIENT_ID_WM8775 6
 
 struct pvr2_device_client_desc {
 	/* One ovr PVR2_CLIENT_ID_xxxx */

+ 3 - 1
drivers/media/video/pvrusb2/pvrusb2-hdw.c

@@ -36,6 +36,7 @@
 #include "pvrusb2-encoder.h"
 #include "pvrusb2-debug.h"
 #include "pvrusb2-fx2-cmd.h"
+#include "pvrusb2-wm8775.h"
 
 #define TV_MIN_FREQ     55250000L
 #define TV_MAX_FREQ    850000000L
@@ -109,7 +110,7 @@ typedef void (*pvr2_subdev_update_func)(struct pvr2_hdw *,
 					struct v4l2_subdev *);
 
 static const pvr2_subdev_update_func pvr2_module_update_functions[] = {
-	/* ????? */
+	[PVR2_CLIENT_ID_WM8775] = pvr2_wm8775_update,
 };
 
 static const char *module_names[] = {
@@ -118,6 +119,7 @@ static const char *module_names[] = {
 	[PVR2_CLIENT_ID_SAA7115] = "saa7115",
 	[PVR2_CLIENT_ID_TUNER] = "tuner",
 	[PVR2_CLIENT_ID_CS53132A] = "cs53132a",
+	[PVR2_CLIENT_ID_WM8775] = "wm8775",
 };
 
 

+ 26 - 0
drivers/media/video/pvrusb2/pvrusb2-wm8775.c

@@ -37,6 +37,8 @@
 #include <linux/errno.h>
 #include <linux/slab.h>
 
+
+
 struct pvr2_v4l_wm8775 {
 	struct pvr2_i2c_handler handler;
 	struct pvr2_i2c_client *client;
@@ -158,6 +160,30 @@ int pvr2_i2c_wm8775_setup(struct pvr2_hdw *hdw,struct pvr2_i2c_client *cp)
 }
 
 
+void pvr2_wm8775_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd)
+{
+	if (hdw->input_dirty) {
+		struct v4l2_routing route;
+
+		memset(&route, 0, sizeof(route));
+
+		switch (hdw->input_val) {
+		case PVR2_CVAL_INPUT_RADIO:
+			route.input = 1;
+			break;
+		default:
+			/* All other cases just use the second input */
+			route.input = 2;
+			break;
+		}
+		pvr2_trace(PVR2_TRACE_CHIPS, "subdev wm8775"
+			   " set_input(val=%d route=0x%x)",
+			   hdw->input_val, route.input);
+
+		sd->ops->audio->s_routing(sd, &route);
+	}
+}
+
 
 
 /*

+ 3 - 0
drivers/media/video/pvrusb2/pvrusb2-wm8775.h

@@ -37,6 +37,9 @@
 #include "pvrusb2-i2c-track.h"
 
 int pvr2_i2c_wm8775_setup(struct pvr2_hdw *,struct pvr2_i2c_client *);
+#include "pvrusb2-hdw-internal.h"
+
+void pvr2_wm8775_update(struct pvr2_hdw *, struct v4l2_subdev *sd);
 
 
 #endif /* __PVRUSB2_WM8775_H */