diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
index e92ea6af8bc0ab5729ad269a162744d141a27dfa..8a96f260af5b58bafb66fff8bbb1b7787854e6c5 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
@@ -2983,6 +2983,26 @@ static void pvr2_subdev_update(struct pvr2_hdw *hdw)
 		v4l2_device_call_all(&hdw->v4l2_dev, 0, video, s_fmt, &fmt);
 	}
 
+	if (hdw->srate_dirty) {
+		u32 val;
+		pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_audio %d",
+			   hdw->srate_val);
+		switch (hdw->srate_val) {
+		default:
+		case V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000:
+			val = 48000;
+			break;
+		case V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100:
+			val = 44100;
+			break;
+		case V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000:
+			val = 32000;
+			break;
+		}
+		v4l2_device_call_all(&hdw->v4l2_dev, 0,
+				     audio, s_clock_freq, val);
+	}
+
 	/* Unable to set crop parameters; there is apparently no equivalent
 	   for VIDIOC_S_CROP */
 
diff --git a/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c b/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
index ad28c5d3ad83ff08871cb559b8bb67f14909fce8..1c9ed5e85c80cacc4f66e7872f930105b20666ee 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
@@ -249,24 +249,6 @@ int pvr2_i2c_decoder_v4l_setup(struct pvr2_hdw *hdw,
 
 void pvr2_saa7115_subdev_update(struct pvr2_hdw *hdw, struct v4l2_subdev *sd)
 {
-	if (hdw->srate_dirty) {
-		u32 val;
-		pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_audio %d",
-			   hdw->srate_val);
-		switch (hdw->srate_val) {
-		default:
-		case V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000:
-			val = 48000;
-			break;
-		case V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100:
-			val = 44100;
-			break;
-		case V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000:
-			val = 32000;
-			break;
-		}
-		sd->ops->audio->s_clock_freq(sd, val);
-	}
 	if (hdw->input_dirty) {
 		struct v4l2_routing route;
 		const struct routing_scheme *sp;