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 */ , mutex_lock(&priv->lock); - /* HACK: It seems that specific firmware need to be reloaded - when watching analog TV and freq is changed */ - if (new_mode != T_DIGITAL_TV) - priv->cur_fw.type = 0; - tuner_dbg("should set frequency %d kHz\n", freq / 1000); if (check_firmware(fe, new_mode, std, bandwidth) < 0) goto ret; + /* On some cases xc2028 can disable video output, if + * very weak signals are received. By sending a soft + * reset, this is re-enabled. So, it is better to always + * send a soft reset before changing channels, to be sure + * that xc2028 will be in a safe state. + * Maybe this might also be needed for DTV. + */ + if (new_mode != T_DIGITAL_TV) + rc = send_seq(priv, {0x00, 0x00}); + if (new_mode == T_DIGITAL_TV) { offset = 2750000; if (priv->cur_fw.type & DTV7)