summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video
diff options
context:
space:
mode:
authorMike Isely <isely@pobox.com>2008-02-06 20:27:03 -0600
committerMike Isely <isely@pobox.com>2008-02-06 20:27:03 -0600
commit8950cc6625ee60e52951c8ab45de3fc081a8ea79 (patch)
tree0eccecde0213aecb997e9152d8e9407fc4ed7050 /linux/drivers/media/video
parentfc177d0abcf30013e2b986a3b29af3ad7c240cad (diff)
downloadmediapointer-dvb-s2-8950cc6625ee60e52951c8ab45de3fc081a8ea79.tar.gz
mediapointer-dvb-s2-8950cc6625ee60e52951c8ab45de3fc081a8ea79.tar.bz2
pvrusb2: Allow digital streaming without encoder firmware
From: Mike Isely <isely@pobox.com> The encoder is not a part of the pipeline when in digital mode, so streaming is OK in this case even when the encoder's firmware is not loaded. Modify the driver core handling of this scenario to permit streaming. Signed-off-by: Mike Isely <isely@pobox.com>
Diffstat (limited to 'linux/drivers/media/video')
-rw-r--r--linux/drivers/media/video/pvrusb2/pvrusb2-hdw.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/linux/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/linux/drivers/media/video/pvrusb2/pvrusb2-hdw.c
index 872a21165..e5b3fad72 100644
--- a/linux/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+++ b/linux/drivers/media/video/pvrusb2/pvrusb2-hdw.c
@@ -3446,6 +3446,7 @@ static void pvr2_hdw_cmd_modeswitch(struct pvr2_hdw *hdw,int digitalFl)
default: break;
}
+ pvr2_hdw_untrip_unlocked(hdw);
hdw->pathway_state = cmode;
}
@@ -3908,6 +3909,7 @@ static int pvr2_hdw_state_eval(struct pvr2_hdw *hdw)
unsigned int st;
int state_updated = 0;
int callback_flag = 0;
+ int analog_mode;
pvr2_trace(PVR2_TRACE_STBITS,
"Drive state check START");
@@ -3918,17 +3920,20 @@ static int pvr2_hdw_state_eval(struct pvr2_hdw *hdw)
/* Process all state and get back over disposition */
state_updated = pvr2_hdw_state_update(hdw);
+ analog_mode = (hdw->pathway_state != PVR2_PATHWAY_DIGITAL);
+
/* Update master state based upon all other states. */
if (!hdw->flag_ok) {
st = PVR2_STATE_DEAD;
} else if (hdw->fw1_state != FW1_STATE_OK) {
st = PVR2_STATE_COLD;
- } else if (!hdw->state_encoder_ok) {
+ } else if (analog_mode && !hdw->state_encoder_ok) {
st = PVR2_STATE_WARM;
- } else if (hdw->flag_tripped || hdw->flag_decoder_missed) {
+ } else if (hdw->flag_tripped ||
+ (analog_mode && hdw->flag_decoder_missed)) {
st = PVR2_STATE_ERROR;
} else if (hdw->state_usbstream_run &&
- ((hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
+ (!analog_mode ||
(hdw->state_encoder_run && hdw->state_decoder_run))) {
st = PVR2_STATE_RUN;
} else {