aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/video/tuner-xc2028.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/media/video/tuner-xc2028.c b/drivers/media/video/tuner-xc2028.c
index c231e7a74ffb..a43a3398b7c0 100644
--- a/drivers/media/video/tuner-xc2028.c
+++ b/drivers/media/video/tuner-xc2028.c
@@ -850,16 +850,21 @@ static int generic_set_tv_freq(struct dvb_frontend *fe, u32 freq /* in Hz */ ,
850 850
851 mutex_lock(&priv->lock); 851 mutex_lock(&priv->lock);
852 852
853 /* HACK: It seems that specific firmware need to be reloaded
854 when watching analog TV and freq is changed */
855 if (new_mode != T_DIGITAL_TV)
856 priv->cur_fw.type = 0;
857
858 tuner_dbg("should set frequency %d kHz\n", freq / 1000); 853 tuner_dbg("should set frequency %d kHz\n", freq / 1000);
859 854
860 if (check_firmware(fe, new_mode, std, bandwidth) < 0) 855 if (check_firmware(fe, new_mode, std, bandwidth) < 0)
861 goto ret; 856 goto ret;
862 857
858 /* On some cases xc2028 can disable video output, if
859 * very weak signals are received. By sending a soft
860 * reset, this is re-enabled. So, it is better to always
861 * send a soft reset before changing channels, to be sure
862 * that xc2028 will be in a safe state.
863 * Maybe this might also be needed for DTV.
864 */
865 if (new_mode != T_DIGITAL_TV)
866 rc = send_seq(priv, {0x00, 0x00});
867
863 if (new_mode == T_DIGITAL_TV) { 868 if (new_mode == T_DIGITAL_TV) {
864 offset = 2750000; 869 offset = 2750000;
865 if (priv->cur_fw.type & DTV7) 870 if (priv->cur_fw.type & DTV7)