Browse Source

V4L/DVB (11175): pvrusb2: Implement sub-device specific update framework

Lay down a foundation whereby it becomes possible to send customized
updates to specific sub-devices.  (This becomes useful for routing
configuration, which is a very sub-device specific operation.)

Signed-off-by: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Mike Isely 16 years ago
parent
commit
edb9dcb885
1 changed files with 18 additions and 1 deletions
  1. 18 1
      drivers/media/video/pvrusb2/pvrusb2-hdw.c

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

@@ -105,6 +105,13 @@ MODULE_PARM_DESC(radio_freq, "specify initial radio frequency");
 /* size of a firmware chunk */
 #define FIRMWARE_CHUNK_SIZE 0x2000
 
+typedef void (*pvr2_subdev_update_func)(struct pvr2_hdw *,
+					struct v4l2_subdev *);
+
+static const pvr2_subdev_update_func pvr2_module_update_functions[] = {
+	/* ????? */
+};
+
 static const char *module_names[] = {
 	[PVR2_CLIENT_ID_MSP3400] = "msp3400",
 	[PVR2_CLIENT_ID_CX25840] = "cx25840",
@@ -2900,6 +2907,10 @@ static void pvr2_subdev_set_control(struct pvr2_hdw *hdw, int id,
    sub-devices so that they match our current control values. */
 static void pvr2_subdev_update(struct pvr2_hdw *hdw)
 {
+	struct v4l2_subdev *sd;
+	unsigned int id;
+	pvr2_subdev_update_func fp;
+
 	if (hdw->input_dirty || hdw->std_dirty) {
 		pvr2_trace(PVR2_TRACE_CHIPS,"subdev v4l2 set_standard");
 		if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
@@ -2971,7 +2982,13 @@ static void pvr2_subdev_update(struct pvr2_hdw *hdw)
 	/* Unable to set crop parameters; there is apparently no equivalent
 	   for VIDIOC_S_CROP */
 
-	/* ????? Cover special cases for specific sub-devices. */
+	v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
+		id = sd->grp_id;
+		if (id >= ARRAY_SIZE(pvr2_module_update_functions)) continue;
+		fp = pvr2_module_update_functions[id];
+		if (!fp) continue;
+		(*fp)(hdw, sd);
+	}
 
 	if (hdw->tuner_signal_stale && hdw->cropcap_stale) {
 		pvr2_hdw_status_poll(hdw);