/* Try to restart the card & restore previous settings */ static int ivtv_firmware_restart(struct ivtv *itv) { int rc = 0; v4l2_std_id std; if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) /* Display test image during restart */ ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_routing, SAA7127_INPUT_TYPE_TEST_IMAGE, itv->card->video_outputs[itv->active_output].video_output, 0); mutex_lock(&itv->udma.lock); rc = ivtv_firmware_init(itv); if (rc) { mutex_unlock(&itv->udma.lock); return rc; } /* Allow settings to reload */ ivtv_mailbox_cache_invalidate(itv); /* Restore encoder video standard */ std = itv->std; itv->std = 0; ivtv_s_std_enc(itv, &std); if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) { ivtv_init_mpeg_decoder(itv); /* Restore decoder video standard */ std = itv->std_out; itv->std_out = 0; ivtv_s_std_dec(itv, &std); /* Restore framebuffer if active */ if (itv->ivtvfb_restore) itv->ivtvfb_restore(itv); /* Restore alpha settings */ ivtv_set_osd_alpha(itv); /* Restore normal output */ ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_routing, SAA7127_INPUT_TYPE_NORMAL, itv->card->video_outputs[itv->active_output].video_output, 0); } mutex_unlock(&itv->udma.lock); return rc; }
int ivtv_firmware_restart(struct ivtv *itv) { int rc = 0; v4l2_std_id std; if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) /* */ ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_routing, SAA7127_INPUT_TYPE_TEST_IMAGE, itv->card->video_outputs[itv->active_output].video_output, 0); mutex_lock(&itv->udma.lock); rc = ivtv_firmware_init(itv); if (rc) { mutex_unlock(&itv->udma.lock); return rc; } /* */ ivtv_mailbox_cache_invalidate(itv); /* */ std = itv->std; itv->std = 0; ivtv_s_std_enc(itv, &std); if (itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT) { ivtv_init_mpeg_decoder(itv); /* */ std = itv->std_out; itv->std_out = 0; ivtv_s_std_dec(itv, &std); /* */ if (itv->ivtvfb_restore) itv->ivtvfb_restore(itv); /* */ ivtv_set_osd_alpha(itv); /* */ ivtv_call_hw(itv, IVTV_HW_SAA7127, video, s_routing, SAA7127_INPUT_TYPE_NORMAL, itv->card->video_outputs[itv->active_output].video_output, 0); } mutex_unlock(&itv->udma.lock); return rc; }