aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/pvrusb2/pvrusb2-hdw.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/pvrusb2/pvrusb2-hdw.c')
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-hdw.c150
1 files changed, 143 insertions, 7 deletions
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
index 539fe17105e7..4f6bb58ca5fc 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
@@ -264,6 +264,7 @@ static void pvr2_hdw_internal_find_stdenum(struct pvr2_hdw *hdw);
264static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw); 264static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw);
265static void pvr2_hdw_quiescent_timeout(unsigned long); 265static void pvr2_hdw_quiescent_timeout(unsigned long);
266static void pvr2_hdw_encoder_wait_timeout(unsigned long); 266static void pvr2_hdw_encoder_wait_timeout(unsigned long);
267static void pvr2_hdw_encoder_run_timeout(unsigned long);
267static int pvr2_issue_simple_cmd(struct pvr2_hdw *,u32); 268static int pvr2_issue_simple_cmd(struct pvr2_hdw *,u32);
268static int pvr2_send_request_ex(struct pvr2_hdw *hdw, 269static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
269 unsigned int timeout,int probe_fl, 270 unsigned int timeout,int probe_fl,
@@ -1236,6 +1237,14 @@ int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
1236 time we configure the encoder, then we'll fully configure it. */ 1237 time we configure the encoder, then we'll fully configure it. */
1237 hdw->enc_cur_valid = 0; 1238 hdw->enc_cur_valid = 0;
1238 1239
1240 /* Encoder is about to be reset so note that as far as we're
1241 concerned now, the encoder has never been run. */
1242 del_timer_sync(&hdw->encoder_run_timer);
1243 if (hdw->state_encoder_runok) {
1244 hdw->state_encoder_runok = 0;
1245 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
1246 }
1247
1239 /* First prepare firmware loading */ 1248 /* First prepare firmware loading */
1240 ret |= pvr2_write_register(hdw, 0x0048, 0xffffffff); /*interrupt mask*/ 1249 ret |= pvr2_write_register(hdw, 0x0048, 0xffffffff); /*interrupt mask*/
1241 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000088); /*gpio dir*/ 1250 ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000088); /*gpio dir*/
@@ -1882,6 +1891,10 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
1882 hdw->encoder_wait_timer.data = (unsigned long)hdw; 1891 hdw->encoder_wait_timer.data = (unsigned long)hdw;
1883 hdw->encoder_wait_timer.function = pvr2_hdw_encoder_wait_timeout; 1892 hdw->encoder_wait_timer.function = pvr2_hdw_encoder_wait_timeout;
1884 1893
1894 init_timer(&hdw->encoder_run_timer);
1895 hdw->encoder_run_timer.data = (unsigned long)hdw;
1896 hdw->encoder_run_timer.function = pvr2_hdw_encoder_run_timeout;
1897
1885 hdw->master_state = PVR2_STATE_DEAD; 1898 hdw->master_state = PVR2_STATE_DEAD;
1886 1899
1887 init_waitqueue_head(&hdw->state_wait_data); 1900 init_waitqueue_head(&hdw->state_wait_data);
@@ -2082,6 +2095,7 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
2082 fail: 2095 fail:
2083 if (hdw) { 2096 if (hdw) {
2084 del_timer_sync(&hdw->quiescent_timer); 2097 del_timer_sync(&hdw->quiescent_timer);
2098 del_timer_sync(&hdw->encoder_run_timer);
2085 del_timer_sync(&hdw->encoder_wait_timer); 2099 del_timer_sync(&hdw->encoder_wait_timer);
2086 if (hdw->workqueue) { 2100 if (hdw->workqueue) {
2087 flush_workqueue(hdw->workqueue); 2101 flush_workqueue(hdw->workqueue);
@@ -2144,6 +2158,7 @@ void pvr2_hdw_destroy(struct pvr2_hdw *hdw)
2144 hdw->workqueue = NULL; 2158 hdw->workqueue = NULL;
2145 } 2159 }
2146 del_timer_sync(&hdw->quiescent_timer); 2160 del_timer_sync(&hdw->quiescent_timer);
2161 del_timer_sync(&hdw->encoder_run_timer);
2147 del_timer_sync(&hdw->encoder_wait_timer); 2162 del_timer_sync(&hdw->encoder_wait_timer);
2148 if (hdw->fw_buffer) { 2163 if (hdw->fw_buffer) {
2149 kfree(hdw->fw_buffer); 2164 kfree(hdw->fw_buffer);
@@ -3584,23 +3599,116 @@ static int state_eval_encoder_config(struct pvr2_hdw *hdw)
3584} 3599}
3585 3600
3586 3601
3602/* Return true if the encoder should not be running. */
3603static int state_check_disable_encoder_run(struct pvr2_hdw *hdw)
3604{
3605 if (!hdw->state_encoder_ok) {
3606 /* Encoder isn't healthy at the moment, so stop it. */
3607 return !0;
3608 }
3609 if (!hdw->state_pathway_ok) {
3610 /* Mode is not understood at the moment (i.e. it wants to
3611 change), so encoder must be stopped. */
3612 return !0;
3613 }
3614
3615 switch (hdw->pathway_state) {
3616 case PVR2_PATHWAY_ANALOG:
3617 if (!hdw->state_decoder_run) {
3618 /* We're in analog mode and the decoder is not
3619 running; thus the encoder should be stopped as
3620 well. */
3621 return !0;
3622 }
3623 break;
3624 case PVR2_PATHWAY_DIGITAL:
3625 if (hdw->state_encoder_runok) {
3626 /* This is a funny case. We're in digital mode so
3627 really the encoder should be stopped. However
3628 if it really is running, only kill it after
3629 runok has been set. This gives a chance for the
3630 onair quirk to function (encoder must run
3631 briefly first, at least once, before onair
3632 digital streaming can work). */
3633 return !0;
3634 }
3635 break;
3636 default:
3637 /* Unknown mode; so encoder should be stopped. */
3638 return !0;
3639 }
3640
3641 /* If we get here, we haven't found a reason to stop the
3642 encoder. */
3643 return 0;
3644}
3645
3646
3647/* Return true if the encoder should be running. */
3648static int state_check_enable_encoder_run(struct pvr2_hdw *hdw)
3649{
3650 if (!hdw->state_encoder_ok) {
3651 /* Don't run the encoder if it isn't healthy... */
3652 return 0;
3653 }
3654 if (!hdw->state_pathway_ok) {
3655 /* Don't run the encoder if we don't (yet) know what mode
3656 we need to be in... */
3657 return 0;
3658 }
3659
3660 switch (hdw->pathway_state) {
3661 case PVR2_PATHWAY_ANALOG:
3662 if (hdw->state_decoder_run) {
3663 /* In analog mode, if the decoder is running, then
3664 run the encoder. */
3665 return !0;
3666 }
3667 break;
3668 case PVR2_PATHWAY_DIGITAL:
3669 if ((hdw->hdw_desc->digital_control_scheme ==
3670 PVR2_DIGITAL_SCHEME_ONAIR) &&
3671 !hdw->state_encoder_runok) {
3672 /* This is a quirk. OnAir hardware won't stream
3673 digital until the encoder has been run at least
3674 once, for a minimal period of time (empiricially
3675 measured to be 1/4 second). So if we're on
3676 OnAir hardware and the encoder has never been
3677 run at all, then start the encoder. Normal
3678 state machine logic in the driver will
3679 automatically handle the remaining bits. */
3680 return !0;
3681 }
3682 break;
3683 default:
3684 /* For completeness (unknown mode; encoder won't run ever) */
3685 break;
3686 }
3687 /* If we get here, then we haven't found any reason to run the
3688 encoder, so don't run it. */
3689 return 0;
3690}
3691
3692
3587/* Evaluate whether or not state_encoder_run can change */ 3693/* Evaluate whether or not state_encoder_run can change */
3588static int state_eval_encoder_run(struct pvr2_hdw *hdw) 3694static int state_eval_encoder_run(struct pvr2_hdw *hdw)
3589{ 3695{
3590 if (hdw->state_encoder_run) { 3696 if (hdw->state_encoder_run) {
3697 if (!state_check_disable_encoder_run(hdw)) return 0;
3591 if (hdw->state_encoder_ok) { 3698 if (hdw->state_encoder_ok) {
3592 if (hdw->state_decoder_run && 3699 del_timer_sync(&hdw->encoder_run_timer);
3593 hdw->state_pathway_ok) return 0;
3594 if (pvr2_encoder_stop(hdw) < 0) return !0; 3700 if (pvr2_encoder_stop(hdw) < 0) return !0;
3595 } 3701 }
3596 hdw->state_encoder_run = 0; 3702 hdw->state_encoder_run = 0;
3597 } else { 3703 } else {
3598 if (!hdw->state_encoder_ok) return 0; 3704 if (!state_check_enable_encoder_run(hdw)) return 0;
3599 if (!hdw->state_decoder_run) return 0;
3600 if (!hdw->state_pathway_ok) return 0;
3601 if (hdw->pathway_state != PVR2_PATHWAY_ANALOG) return 0;
3602 if (pvr2_encoder_start(hdw) < 0) return !0; 3705 if (pvr2_encoder_start(hdw) < 0) return !0;
3603 hdw->state_encoder_run = !0; 3706 hdw->state_encoder_run = !0;
3707 if (!hdw->state_encoder_runok) {
3708 hdw->encoder_run_timer.expires =
3709 jiffies + (HZ*250/1000);
3710 add_timer(&hdw->encoder_run_timer);
3711 }
3604 } 3712 }
3605 trace_stbit("state_encoder_run",hdw->state_encoder_run); 3713 trace_stbit("state_encoder_run",hdw->state_encoder_run);
3606 return !0; 3714 return !0;
@@ -3629,6 +3737,19 @@ static void pvr2_hdw_encoder_wait_timeout(unsigned long data)
3629} 3737}
3630 3738
3631 3739
3740/* Timeout function for encoder run timer. */
3741static void pvr2_hdw_encoder_run_timeout(unsigned long data)
3742{
3743 struct pvr2_hdw *hdw = (struct pvr2_hdw *)data;
3744 if (!hdw->state_encoder_runok) {
3745 hdw->state_encoder_runok = !0;
3746 trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
3747 hdw->state_stale = !0;
3748 queue_work(hdw->workqueue,&hdw->workpoll);
3749 }
3750}
3751
3752
3632/* Evaluate whether or not state_decoder_run can change */ 3753/* Evaluate whether or not state_decoder_run can change */
3633static int state_eval_decoder_run(struct pvr2_hdw *hdw) 3754static int state_eval_decoder_run(struct pvr2_hdw *hdw)
3634{ 3755{
@@ -3718,6 +3839,16 @@ static int state_eval_usbstream_run(struct pvr2_hdw *hdw)
3718 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) && 3839 } else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
3719 (hdw->hdw_desc->flag_digital_requires_cx23416)) { 3840 (hdw->hdw_desc->flag_digital_requires_cx23416)) {
3720 if (!hdw->state_encoder_ok) return 0; 3841 if (!hdw->state_encoder_ok) return 0;
3842 if (hdw->state_encoder_run) return 0;
3843 if (hdw->hdw_desc->digital_control_scheme ==
3844 PVR2_DIGITAL_SCHEME_ONAIR) {
3845 /* OnAir digital receivers won't stream
3846 unless the analog encoder has run first.
3847 Why? I have no idea. But don't even
3848 try until we know the analog side is
3849 known to have run. */
3850 if (!hdw->state_encoder_runok) return 0;
3851 }
3721 } 3852 }
3722 if (pvr2_hdw_cmd_usbstream(hdw,!0) < 0) return 0; 3853 if (pvr2_hdw_cmd_usbstream(hdw,!0) < 0) return 0;
3723 hdw->state_usbstream_run = !0; 3854 hdw->state_usbstream_run = !0;
@@ -3861,7 +3992,12 @@ static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw *hdw,int which,
3861 (hdw->state_encoder_ok ? 3992 (hdw->state_encoder_ok ?
3862 "" : " <encode:init>"), 3993 "" : " <encode:init>"),
3863 (hdw->state_encoder_run ? 3994 (hdw->state_encoder_run ?
3864 " <encode:run>" : " <encode:stop>"), 3995 (hdw->state_encoder_runok ?
3996 " <encode:run>" :
3997 " <encode:firstrun>") :
3998 (hdw->state_encoder_runok ?
3999 " <encode:stop>" :
4000 " <encode:virgin>")),
3865 (hdw->state_encoder_config ? 4001 (hdw->state_encoder_config ?
3866 " <encode:configok>" : 4002 " <encode:configok>" :
3867 (hdw->state_encoder_waitok ? 4003 (hdw->state_encoder_waitok ?