From: Michael Hunold <hunold@linuxtv.org>

- alps_tdlb7 + alps_tdmb7: Changed to use full i2c reads in probing instead
  of i2c pings to be compatable with ttusb

- nxt6000: bugfix by Robert Cook: FE_RESET did the same as FE_INIT, thus
  invalidating current channel settings on FE_RESET

- sp887x: fixed typo

- Makefile: add nxt6000 frontend driver to Makefiles

- Kconfig: DVB_TDA1004X and DVB_NXT6000 do not depend on !STANDALONE (i.e. 
  no compile-time firmware image necessary)

- ves1820: turn off ves1820 test output pins

- ves1820: verbose-print AFC only if carrier has been recovered

- ves1820: change AFC handling as suggested by Robert Schlabbach, use bit 1
  of the SYNC register for FE_HAS_SIGNAL


---

 25-akpm/drivers/media/dvb/frontends/Kconfig      |   16 ++++++++++++++--
 25-akpm/drivers/media/dvb/frontends/Makefile     |    1 +
 25-akpm/drivers/media/dvb/frontends/alps_tdlb7.c |    7 +++++--
 25-akpm/drivers/media/dvb/frontends/alps_tdmb7.c |    7 +++++--
 25-akpm/drivers/media/dvb/frontends/nxt6000.c    |    4 ++--
 25-akpm/drivers/media/dvb/frontends/sp887x.c     |    2 +-
 25-akpm/drivers/media/dvb/frontends/ves1820.c    |   20 ++++++++++----------
 7 files changed, 38 insertions(+), 19 deletions(-)

diff -puN drivers/media/dvb/frontends/alps_tdlb7.c~dvb-05-frontend-updates drivers/media/dvb/frontends/alps_tdlb7.c
--- 25/drivers/media/dvb/frontends/alps_tdlb7.c~dvb-05-frontend-updates	Mon Feb 23 14:05:11 2004
+++ 25-akpm/drivers/media/dvb/frontends/alps_tdlb7.c	Mon Feb 23 14:05:11 2004
@@ -665,11 +665,14 @@ static int tdlb7_ioctl (struct dvb_front
 
 static int tdlb7_attach (struct dvb_i2c_bus *i2c, void **data)
 {
-	struct i2c_msg msg = { addr: 0x71, flags: 0, buf: NULL, len: 0 };
+        u8 b0 [] = { 0x02 , 0x00 };
+        u8 b1 [] = { 0, 0 };
+        struct i2c_msg msg [] = { { addr: 0x71, flags: 0, buf: b0, len: 2 },
+                                  { addr: 0x71, flags: I2C_M_RD, buf: b1, len: 2 } };
 
 	dprintk ("%s\n", __FUNCTION__);
 
-	if (i2c->xfer (i2c, &msg, 1) != 1)
+        if (i2c->xfer (i2c, msg, 2) != 2)
                 return -ENODEV;
 
 	sp8870_firmware_upload(i2c);
diff -puN drivers/media/dvb/frontends/alps_tdmb7.c~dvb-05-frontend-updates drivers/media/dvb/frontends/alps_tdmb7.c
--- 25/drivers/media/dvb/frontends/alps_tdmb7.c~dvb-05-frontend-updates	Mon Feb 23 14:05:11 2004
+++ 25-akpm/drivers/media/dvb/frontends/alps_tdmb7.c	Mon Feb 23 14:05:11 2004
@@ -404,11 +404,14 @@ static int tdmb7_ioctl (struct dvb_front
 
 static int tdmb7_attach (struct dvb_i2c_bus *i2c, void **data)
 {
-	struct i2c_msg msg = { .addr = 0x43, .flags = 0, .buf = NULL,. len = 0 };
+        u8 b0 [] = { 0x7 };
+        u8 b1 [] = { 0 };
+        struct i2c_msg msg [] = { { .addr = 0x43, .flags = 0, .buf = b0, .len = 1 },
+                                  { .addr = 0x43, .flags = I2C_M_RD, .buf = b1, .len = 1 } };
 
 	dprintk ("%s\n", __FUNCTION__);
 
-	if (i2c->xfer (i2c, &msg, 1) != 1)
+        if (i2c->xfer (i2c, msg, 2) != 2)
                 return -ENODEV;
 
 	return dvb_register_frontend (tdmb7_ioctl, i2c, NULL, &tdmb7_info);
diff -puN drivers/media/dvb/frontends/Kconfig~dvb-05-frontend-updates drivers/media/dvb/frontends/Kconfig
--- 25/drivers/media/dvb/frontends/Kconfig~dvb-05-frontend-updates	Mon Feb 23 14:05:11 2004
+++ 25-akpm/drivers/media/dvb/frontends/Kconfig	Mon Feb 23 14:05:11 2004
@@ -154,8 +154,8 @@ config DVB_VES1X93
 	  right one will get autodetected.
 
 config DVB_TDA1004X
-	tristate "Frontends with external TDA1004X demodulators (OFDM)"
-	depends on DVB_CORE && !STANDALONE
+	tristate "Frontends with external TDA10045H or TDA10046H demodulators (OFDM)"
+	depends on DVB_CORE
 	help
 	  A DVB-T tuner module. Say Y when you want to support this frontend.
 
@@ -173,3 +173,15 @@ config DVB_TDA1004X_FIRMWARE_FILE
             wget http://www.technotrend.de/new/215/TTweb_215a_budget_20_05_2003.zip
             unzip -j TTweb_215a_budget_20_05_2003.zip Software/Oem/PCI/App/ttlcdacc.dll
             mv ttlcdacc.dll /usr/lib/hotplug/firmware/tda1004x.bin
+	  Note: even if you're using a USB device, you MUST get the file from the
+	  TechnoTrend PCI drivers.
+
+config DVB_NXT6000
+	tristate "Frontends with NxtWave Communications NXT6000 demodulator (OFDM)"
+	depends on DVB_CORE
+	help
+	  A DVB-T tuner module. Say Y when you want to support this frontend.
+
+	  If you don't know what tuner module is soldered on your
+	  DVB adapter simply enable all supported frontends, the
+	  right one will get autodetected.
diff -puN drivers/media/dvb/frontends/Makefile~dvb-05-frontend-updates drivers/media/dvb/frontends/Makefile
--- 25/drivers/media/dvb/frontends/Makefile~dvb-05-frontend-updates	Mon Feb 23 14:05:11 2004
+++ 25-akpm/drivers/media/dvb/frontends/Makefile	Mon Feb 23 14:05:11 2004
@@ -17,3 +17,4 @@ obj-$(CONFIG_DVB_VES1820) += ves1820.o
 obj-$(CONFIG_DVB_VES1X93) += ves1x93.o
 obj-$(CONFIG_DVB_TDA1004X) += tda1004x.o
 obj-$(CONFIG_DVB_SP887X) += sp887x.o
+obj-$(CONFIG_DVB_NXT6000) += nxt6000.o
diff -puN drivers/media/dvb/frontends/nxt6000.c~dvb-05-frontend-updates drivers/media/dvb/frontends/nxt6000.c
--- 25/drivers/media/dvb/frontends/nxt6000.c~dvb-05-frontend-updates	Mon Feb 23 14:05:11 2004
+++ 25-akpm/drivers/media/dvb/frontends/nxt6000.c	Mon Feb 23 14:05:11 2004
@@ -758,11 +758,11 @@ static int nxt6000_ioctl(struct dvb_fron
 		}
 	
 		case FE_INIT:
-		case FE_RESET:
-		
 			nxt6000_reset(fe);
 			nxt6000_setup(fe);
+		break;
 
+	case FE_RESET:
 			break;
 		
 		case FE_SET_FRONTEND:
diff -puN drivers/media/dvb/frontends/sp887x.c~dvb-05-frontend-updates drivers/media/dvb/frontends/sp887x.c
--- 25/drivers/media/dvb/frontends/sp887x.c~dvb-05-frontend-updates	Mon Feb 23 14:05:11 2004
+++ 25-akpm/drivers/media/dvb/frontends/sp887x.c	Mon Feb 23 14:05:11 2004
@@ -58,7 +58,7 @@ static char *sp887x_firmware = DVB_SP887
 
 static
 struct dvb_frontend_info sp887x_info = {
-	.name = "Microtune MT7072DTF",
+	.name = "Microtune MT7202DTF",
 	.type = FE_OFDM,
 	.frequency_min =  50500000,
 	.frequency_max = 858000000,
diff -puN drivers/media/dvb/frontends/ves1820.c~dvb-05-frontend-updates drivers/media/dvb/frontends/ves1820.c
--- 25/drivers/media/dvb/frontends/ves1820.c~dvb-05-frontend-updates	Mon Feb 23 14:05:11 2004
+++ 25-akpm/drivers/media/dvb/frontends/ves1820.c	Mon Feb 23 14:05:11 2004
@@ -120,7 +120,7 @@ static struct dvb_frontend_info ves1820_
 static u8 ves1820_inittab [] =
 {
 	0x69, 0x6A, 0x9B, 0x12, 0x12, 0x46, 0x26, 0x1A,
-	0x43, 0x6A, 0xAA, 0xAA, 0x1E, 0x85, 0x43, 0x28,
+	0x43, 0x6A, 0xAA, 0xAA, 0x1E, 0x85, 0x43, 0x20,
 	0xE0, 0x00, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00,
 	0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
 	0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -380,7 +380,7 @@ static int ves1820_ioctl (struct dvb_fro
 
                 sync = ves1820_readreg (fe, 0x11);
 
-		if (sync & 2)
+		if (sync & 1)
 			*status |= FE_HAS_SIGNAL;
 
 		if (sync & 2)
@@ -440,13 +440,14 @@ static int ves1820_ioctl (struct dvb_fro
 		s8 afc = 0;
                 
                 sync = ves1820_readreg (fe, 0x11);
-		if (sync & 2)
-			/* AFC only valid when carrier has been recovered */
 			afc = ves1820_readreg(fe, 0x19);
-		if (verbose)
-			printk ("DVB: VES1820(%d): AFC (%d) %dHz\n",
+		if (verbose) {
+			/* AFC only valid when carrier has been recovered */
+			printk(sync & 2 ? "DVB: VES1820(%d): AFC (%d) %dHz\n" :
+					  "DVB: VES1820(%d): [AFC (%d) %dHz]\n",
 					fe->i2c->adapter->num, afc,
-				-((s32)(p->u.qam.symbol_rate >> 3) * afc >> 7));
+			       -((s32)p->u.qam.symbol_rate * afc) >> 10);
+		}
 
 		p->inversion = HAS_INVERSION(reg0) ? INVERSION_ON : INVERSION_OFF;
 		p->u.qam.modulation = ((reg0 >> 2) & 7) + QAM_16;
@@ -454,9 +455,8 @@ static int ves1820_ioctl (struct dvb_fro
 		p->u.qam.fec_inner = FEC_NONE;
 
 		p->frequency = ((p->frequency + 31250) / 62500) * 62500;
-		/* To prevent overflow, shift symbol rate first a
-		   couple of bits. */
-		p->frequency -= (s32)(p->u.qam.symbol_rate >> 3) * afc >> 7;
+		if (sync & 2)
+			p->frequency -= ((s32)p->u.qam.symbol_rate * afc) >> 10;
 		break;
 	}
 	case FE_SLEEP:

_