V4L/DVB (4667): Changed cx88_board .dvb and .register to an enum.

Some basic cleanup in preperation for a future patch where
the cx88-mpeg functions have to deal with the port being
used by multiple frontends in (mpeg2 hw encoder and dvb demod).

Signed-off-by: Steven Toth <stoth@hauppauge.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
diff --git a/drivers/media/video/cx88/cx88-blackbird.c b/drivers/media/video/cx88/cx88-blackbird.c
index a7921f9d..8fbbac4 100644
--- a/drivers/media/video/cx88/cx88-blackbird.c
+++ b/drivers/media/video/cx88/cx88-blackbird.c
@@ -1086,7 +1086,7 @@
 		return -EINVAL;
 
 	err = -ENODEV;
-	if (!cx88_boards[core->board].blackbird)
+	if (!(cx88_boards[core->board].mpeg & CX88_BOARD_BLACKBIRD))
 		goto fail_core;
 
 	err = -ENOMEM;
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c
index 425d15d..76386d7 100644
--- a/drivers/media/video/cx88/cx88-cards.c
+++ b/drivers/media/video/cx88/cx88-cards.c
@@ -294,7 +294,7 @@
 			.type   = CX88_RADIO,
 			.gpio0  = 0x0000bd62,
 		},
-		.blackbird = 1,
+		.mpeg           = CX88_BOARD_BLACKBIRD,
 	},
 	[CX88_BOARD_IODATA_GVVCP3PCI] = {
 		.name		= "IODATA GV-VCP3/PCI",
@@ -358,7 +358,7 @@
 			.type   = CX88_RADIO,
 			.gpio0  = 0x0000fde2,
 		},
-		.blackbird = 1,
+		.mpeg           = CX88_BOARD_BLACKBIRD,
 	},
 	[CX88_BOARD_MSI_TVANYWHERE] = {
 		.name           = "MSI TV-@nywhere",
@@ -401,7 +401,7 @@
 			.gpio0  = 0x0700,
 			.gpio2  = 0x0101,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1] = {
 		.name           = "DViCO FusionHDTV DVB-T1",
@@ -418,7 +418,7 @@
 			.vmux   = 2,
 			.gpio0  = 0x000027df,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_KWORLD_LTV883] = {
 		.name           = "KWorld LTV883RF",
@@ -488,7 +488,7 @@
 			.vmux   = 2,
 			.gpio0	= 0x0f00,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_HAUPPAUGE_DVB_T1] = {
 		.name           = "Hauppauge Nova-T DVB-T",
@@ -500,7 +500,7 @@
 			.type   = CX88_VMUX_DVB,
 			.vmux   = 0,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_CONEXANT_DVB_T1] = {
 		.name           = "Conexant DVB-T reference design",
@@ -512,7 +512,7 @@
 			.type   = CX88_VMUX_DVB,
 			.vmux   = 0,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_PROVIDEO_PV259] = {
 		.name		= "Provideo PV259",
@@ -524,7 +524,7 @@
 			.type   = CX88_VMUX_TELEVISION,
 			.vmux   = 0,
 		}},
-		.blackbird = 1,
+		.mpeg           = CX88_BOARD_BLACKBIRD,
 	},
 	[CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS] = {
 		.name           = "DViCO FusionHDTV DVB-T Plus",
@@ -541,7 +541,7 @@
 			.vmux   = 2,
 			.gpio0  = 0x000027df,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_DNTV_LIVE_DVB_T] = {
 		.name		= "digitalnow DNTV Live! DVB-T",
@@ -560,7 +560,7 @@
 			.gpio0  = 0x00000700,
 			.gpio2  = 0x00000101,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_PCHDTV_HD3000] = {
 		.name           = "pcHDTV HD3000 HDTV",
@@ -599,7 +599,7 @@
 			.gpio2  = 0x00000000,
 			.gpio3  = 0x00000000,
 		},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_HAUPPAUGE_ROSLYN] = {
 		// entry added by Kaustubh D. Bhalerao <bhalerao.1@osu.edu>
@@ -633,7 +633,7 @@
 			 .gpio0  = 0xed96,
 			 .gpio2  = 0x00ff,
 		 },
-		.blackbird = 1,
+		.mpeg           = CX88_BOARD_BLACKBIRD,
 	},
 	[CX88_BOARD_DIGITALLOGIC_MEC] = {
 		.name           = "Digital-Logic MICROSPACE Entertainment Center (MEC)",
@@ -659,7 +659,7 @@
 			.type   = CX88_RADIO,
 			.gpio0  = 0x00009d00,
 		},
-		.blackbird = 1,
+		.mpeg           = CX88_BOARD_BLACKBIRD,
 	},
 	[CX88_BOARD_IODATA_GVBCTV7E] = {
 		.name           = "IODATA GV/BCTV7E",
@@ -727,7 +727,7 @@
 			.vmux   = 2,
 			.gpio0  = 0x97e9,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_ADSTECH_DVB_T_PCI] = {
 		.name           = "ADS Tech Instant TV DVB-T PCI",
@@ -746,7 +746,7 @@
 			.gpio0  = 0x0700,
 			.gpio2  = 0x0101,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1] = {
 		.name           = "TerraTec Cinergy 1400 DVB-T",
@@ -755,7 +755,7 @@
 			.type   = CX88_VMUX_DVB,
 			.vmux   = 0,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD] = {
 		.name           = "DViCO FusionHDTV 5 Gold",
@@ -777,7 +777,7 @@
 			.vmux   = 2,
 			.gpio0  = 0x87f9,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_AVERMEDIA_ULTRATV_MC_550] = {
 		.name           = "AverMedia UltraTV Media Center PCI 550",
@@ -786,7 +786,7 @@
 		.tuner_addr     = ADDR_UNSET,
 		.radio_addr     = ADDR_UNSET,
 		.tda9887_conf   = TDA9887_PRESENT,
-		.blackbird      = 1,
+		.mpeg           = CX88_BOARD_BLACKBIRD,
 		.input          = {{
 			.type   = CX88_VMUX_COMPOSITE1,
 			.vmux   = 0,
@@ -854,7 +854,7 @@
 			.gpio2  = 0x00000001,
 			.gpio3  = 0x00000000,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_WINFAST_DTV1000] = {
 		.name           = "WinFast DTV1000-T",
@@ -866,7 +866,7 @@
 			.type   = CX88_VMUX_DVB,
 			.vmux   = 0,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_AVERTV_303] = {
 		.name           = "AVerTV 303 (M126)",
@@ -914,7 +914,7 @@
 			.type	= CX88_VMUX_SVIDEO,
 			.vmux	= 2,
 		}},
-		.dvb		= 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_HAUPPAUGE_NOVASE2_S1] = {
 		.name		= "Hauppauge Nova-SE2 DVB-S",
@@ -926,7 +926,7 @@
 			.type	= CX88_VMUX_DVB,
 			.vmux	= 0,
 		}},
-		.dvb		= 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_KWORLD_DVBS_100] = {
 		.name		= "KWorld DVB-S 100",
@@ -944,7 +944,7 @@
 			.type	= CX88_VMUX_SVIDEO,
 			.vmux	= 2,
 		}},
-		.dvb		= 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_HAUPPAUGE_HVR1100] = {
 		.name		= "Hauppauge WinTV-HVR1100 DVB-T/Hybrid",
@@ -964,7 +964,7 @@
 			.vmux	= 2,
 		}},
 		/* fixme: Add radio support */
-		.dvb		= 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_HAUPPAUGE_HVR1100LP] = {
 		.name		= "Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile)",
@@ -981,7 +981,7 @@
 			.vmux	= 1,
 		}},
 		/* fixme: Add radio support */
-		.dvb		= 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_DNTV_LIVE_DVB_T_PRO] = {
 		.name           = "digitalnow DNTV Live! DVB-T Pro",
@@ -1008,7 +1008,7 @@
 			 .type  = CX88_RADIO,
 			 .gpio0 = 0xf80808,
 		},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_KWORLD_DVB_T_CX22702] = {
 		/* Kworld V-stream Xpert DVB-T with Thomson tuner */
@@ -1030,7 +1030,7 @@
 			.gpio0  = 0x0700,
 			.gpio2  = 0x0101,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL] = {
 		.name           = "DViCO FusionHDTV DVB-T Dual Digital",
@@ -1047,7 +1047,7 @@
 			.vmux   = 2,
 			.gpio0  = 0x000067df,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT] = {
 		/* FIXME: Audio not working for s-video / composite inputs. */
@@ -1075,7 +1075,7 @@
 			.gpio0  = 0x3de6,
 			.gpio2  = 0x00ff,
 		},
-		.blackbird      = 1,
+		.mpeg           = CX88_BOARD_BLACKBIRD,
 	},
 	[CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID] = {
 		.name           = "DViCO FusionHDTV DVB-T Hybrid",
@@ -1096,7 +1096,7 @@
 			.vmux   = 2,
 			.gpio0  = 0x0000a75b,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_PCHDTV_HD5500] = {
 		.name           = "pcHDTV HD5500 HDTV",
@@ -1118,7 +1118,7 @@
 			.vmux   = 2,
 			.gpio0  = 0x87f9,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_KWORLD_MCE200_DELUXE] = {
 		/* FIXME: tested TV input only, disabled composite,
@@ -1134,7 +1134,7 @@
 			.vmux   = 0,
 			.gpio0  = 0x0000BDE6
 		}},
-		.blackbird = 1,
+		.mpeg           = CX88_BOARD_BLACKBIRD,
 	},
 	[CX88_BOARD_PIXELVIEW_PLAYTV_P7000] = {
 		/* FIXME: SVideo, Composite and FM inputs are untested */
@@ -1150,7 +1150,7 @@
 			.vmux   = 0,
 			.gpio0  = 0x5da6,
 		}},
-		.blackbird = 1,
+		.mpeg           = CX88_BOARD_BLACKBIRD,
 	},
 	[CX88_BOARD_NPGTECH_REALTV_TOP10FM] = {
 		.name           = "NPG Tech Real TV FM Top 10",
@@ -1192,7 +1192,7 @@
 			.gpio2  = 0x00017304,
 			.gpio3  = 0x02000000,
 		}},
-		.dvb            = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_GENIATECH_DVBS] = {
 		.name          = "Geniatech DVB-S",
@@ -1207,7 +1207,7 @@
 			.type  = CX88_VMUX_COMPOSITE1,
 			.vmux  = 1,
 		}},
-		.dvb      = 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 	[CX88_BOARD_HAUPPAUGE_HVR3000] = {
 		/* FIXME: Add dvb & radio support */
@@ -1302,7 +1302,7 @@
 			.gpio0	= 0xe780,
 		}},
 		/* fixme: Add radio support */
-		.dvb		= 1,
+		.mpeg           = CX88_BOARD_DVB,
 	},
 };
 const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards);
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c
index c87041d..32775f6 100644
--- a/drivers/media/video/cx88/cx88-dvb.c
+++ b/drivers/media/video/cx88/cx88-dvb.c
@@ -802,7 +802,7 @@
 		return -EINVAL;
 
 	err = -ENODEV;
-	if (!cx88_boards[core->board].dvb)
+	if (!(cx88_boards[core->board].mpeg & CX88_BOARD_DVB))
 		goto fail_core;
 
 	err = -ENOMEM;
diff --git a/drivers/media/video/cx88/cx88-i2c.c b/drivers/media/video/cx88/cx88-i2c.c
index 27b5dbb..440c417 100644
--- a/drivers/media/video/cx88/cx88-i2c.c
+++ b/drivers/media/video/cx88/cx88-i2c.c
@@ -220,7 +220,7 @@
 
 	if (core->tuner_type != TUNER_ABSENT)
 		core->i2c_adap.class |= I2C_CLASS_TV_ANALOG;
-	if (cx88_boards[core->board].dvb)
+	if (cx88_boards[core->board].mpeg & CX88_BOARD_DVB)
 		core->i2c_adap.class |= I2C_CLASS_TV_DIGITAL;
 
 	core->i2c_adap.dev.parent = &pci->dev;
diff --git a/drivers/media/video/cx88/cx88-mpeg.c b/drivers/media/video/cx88/cx88-mpeg.c
index 138a4f6..957f37c 100644
--- a/drivers/media/video/cx88/cx88-mpeg.c
+++ b/drivers/media/video/cx88/cx88-mpeg.c
@@ -65,8 +65,17 @@
 
 	/* FIXME: this needs a review.
 	 * also: move to cx88-blackbird + cx88-dvb source files? */
+	if (cx88_boards[core->board].mpeg == (CX88_BOARD_DVB | CX88_BOARD_BLACKBIRD) ) {
+		/* Report a warning until the mini driver patch is applied,
+		 * else the following conditions will set the dma registers incorrectly.
+		 * This will be removed in the next major patch and changes to the conditions
+		 * will be made.
+		 */
+		printk(KERN_INFO "%s() board->(CX88_BOARD_DVB | CX88_BOARD_BLACKBIRD) is invalid\n", __FUNCTION__);
+		return -EINVAL;
+	}
 
-	if (cx88_boards[core->board].dvb) {
+	if (cx88_boards[core->board].mpeg & CX88_BOARD_DVB) {
 		/* negedge driven & software reset */
 		cx_write(TS_GEN_CNTRL, 0x0040 | dev->ts_gen_cntrl);
 		udelay(100);
@@ -92,7 +101,7 @@
 		udelay(100);
 	}
 
-	if (cx88_boards[core->board].blackbird) {
+	if (cx88_boards[core->board].mpeg & CX88_BOARD_BLACKBIRD) {
 		cx_write(MO_PINMUX_IO, 0x88); /* enable MPEG parallel IO */
 
 		cx_write(TS_GEN_CNTRL, 0x46); /* punctured clock TS & posedge driven & software reset */
diff --git a/drivers/media/video/cx88/cx88-tvaudio.c b/drivers/media/video/cx88/cx88-tvaudio.c
index 741e7c5e..b6e2bf9 100644
--- a/drivers/media/video/cx88/cx88-tvaudio.c
+++ b/drivers/media/video/cx88/cx88-tvaudio.c
@@ -142,7 +142,7 @@
 	cx_write(AUD_RATE_THRES_DMD, 0x000000C0);
 	cx88_start_audio_dma(core);
 
-	if (cx88_boards[core->board].blackbird) {
+	if (cx88_boards[core->board].mpeg & CX88_BOARD_BLACKBIRD) {
 		/* sets sound input from external adc */
 		switch (core->board) {
 		case CX88_BOARD_HAUPPAUGE_ROSLYN:
@@ -164,7 +164,7 @@
 		cx_write(AUD_I2SCNTL, 0);
 		/* cx_write(AUD_APB_IN_RATE_ADJ, 0); */
 	}
-	if ((always_analog) || (!cx88_boards[core->board].blackbird)) {
+	if ((always_analog) || (!(cx88_boards[core->board].mpeg & CX88_BOARD_BLACKBIRD))) {
 		ctl |= EN_DAC_ENABLE;
 		cx_write(AUD_CTL, ctl);
 	}
diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h
index 2371ab4..5c4e845 100644
--- a/drivers/media/video/cx88/cx88.h
+++ b/drivers/media/video/cx88/cx88.h
@@ -74,6 +74,12 @@
 	FM_DEEMPH_75
 };
 
+enum cx88_board_type {
+	CX88_BOARD_NONE = 0,
+	CX88_BOARD_DVB,
+	CX88_BOARD_BLACKBIRD
+};
+
 /* ----------------------------------------------------------- */
 /* tv norms                                                    */
 
@@ -231,8 +237,7 @@
 	int                     tda9887_conf;
 	struct cx88_input       input[MAX_CX88_INPUT];
 	struct cx88_input       radio;
-	unsigned int            blackbird:1;
-	unsigned int            dvb:1;
+	enum cx88_board_type    mpeg;
 	enum audiochip          audio_chip;
 };