diff -ru v4l-dvb.org/linux/drivers/media/dvb/frontends/stv0297.c v4l-dvb/linux/drivers/media/dvb/frontends/stv0297.c --- v4l-dvb.org/linux/drivers/media/dvb/frontends/stv0297.c 2008-07-26 18:14:23.000000000 +0200 +++ v4l-dvb/linux/drivers/media/dvb/frontends/stv0297.c 2008-07-26 18:16:38.000000000 +0200 @@ -463,7 +463,9 @@ stv0297_writereg(state, 0x82, 0x0); /* set initial demodulation frequency */ - stv0297_set_initialdemodfreq(state, 7250); + stv0297_set_initialdemodfreq(state, + state->config->qam256_reduced_demodfreq & + (p->u.qam.modulation == QAM_256) ? 6718 : 7250); /* setup AGC */ stv0297_writereg_mask(state, 0x43, 0x10, 0x00); diff -ru v4l-dvb.org/linux/drivers/media/dvb/frontends/stv0297.h v4l-dvb/linux/drivers/media/dvb/frontends/stv0297.h --- v4l-dvb.org/linux/drivers/media/dvb/frontends/stv0297.h 2008-07-26 18:14:23.000000000 +0200 +++ v4l-dvb/linux/drivers/media/dvb/frontends/stv0297.h 2008-07-26 18:16:38.000000000 +0200 @@ -40,6 +40,11 @@ /* set to 1 if the device requires an i2c STOP during reading */ u8 stop_during_read:1; + + /* set to 1 if the device requires reduced demodulation frequency + * for QAM256. + */ + u8 qam256_reduced_demodfreq:1; }; #if defined(CONFIG_DVB_STV0297) || (defined(CONFIG_DVB_STV0297_MODULE) && defined(MODULE)) diff -ru v4l-dvb.org/linux/drivers/media/dvb/ttpci/av7110.c v4l-dvb/linux/drivers/media/dvb/ttpci/av7110.c --- v4l-dvb.org/linux/drivers/media/dvb/ttpci/av7110.c 2008-07-26 18:14:23.000000000 +0200 +++ v4l-dvb/linux/drivers/media/dvb/ttpci/av7110.c 2008-07-26 18:16:38.000000000 +0200 @@ -1874,6 +1874,7 @@ .inittab = nexusca_stv0297_inittab, .invert = 1, .stop_during_read = 1, + .qam256_reduced_demodfreq = 1, }; diff -ru v4l-dvb.org/linux/drivers/media/dvb/ttpci/budget-ci.c v4l-dvb/linux/drivers/media/dvb/ttpci/budget-ci.c --- v4l-dvb.org/linux/drivers/media/dvb/ttpci/budget-ci.c 2008-07-26 18:14:23.000000000 +0200 +++ v4l-dvb/linux/drivers/media/dvb/ttpci/budget-ci.c 2008-07-26 18:16:38.000000000 +0200 @@ -1061,6 +1061,7 @@ .inittab = dvbc_philips_tdm1316l_inittab, .invert = 0, .stop_during_read = 1, + .qam256_reduced_demodfreq = 0, }; static struct tda10023_config tda10023_config = { diff -ru v4l-dvb.org/linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c v4l-dvb/linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c --- v4l-dvb.org/linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c 2008-07-26 18:14:23.000000000 +0200 +++ v4l-dvb/linux/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c 2008-07-26 18:16:38.000000000 +0200 @@ -1572,6 +1572,7 @@ .demod_address = 0x1c, .inittab = dvbc_philips_tdm1316l_inittab, .invert = 0, + .qam256_reduced_demodfreq = 0, }; static void frontend_init(struct ttusb* ttusb)