V4L/DVB (3317): msp3400: use v4l2_std_id and determine chip capabilities.

- Replace old norm by the v4l2_std_id values.
- Add code to correctly detect the various capabilities of the
various msp chips. It's not yet used, that's going to be the next step.

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
diff --git a/drivers/media/video/msp3400-kthreads.c b/drivers/media/video/msp3400-kthreads.c
index 934f0d3..4ecbf56 100644
--- a/drivers/media/video/msp3400-kthreads.c
+++ b/drivers/media/video/msp3400-kthreads.c
@@ -203,7 +203,7 @@
 	msp_write_dsp(client, 0x000a, msp3400c_init_data[type].dsp_src);
 	msp_write_dsp(client, 0x000e, msp3400c_init_data[type].dsp_matrix);
 
-	if (HAVE_NICAM(state)) {
+	if (state->has_nicam) {
 		/* nicam prescale */
 		msp_write_dsp(client, 0x0010, 0x5a00); /* was: 0x3000 */
 	}
@@ -487,8 +487,7 @@
 		if (kthread_should_stop())
 			break;
 
-		if (VIDEO_MODE_RADIO == state->norm ||
-		    MSP_MODE_EXTERN  == state->mode) {
+		if (state->radio || MSP_MODE_EXTERN == state->mode) {
 			/* no carrier scan, just unmute */
 			v4l_dbg(1, client, "thread: no carrier scan\n");
 			msp_set_audio(client);
@@ -510,7 +509,7 @@
 		cd = msp3400c_carrier_detect_main;
 		count = ARRAY_SIZE(msp3400c_carrier_detect_main);
 
-		if (amsound && (state->norm == VIDEO_MODE_SECAM)) {
+		if (amsound && (state->std & V4L2_STD_SECAM)) {
 			/* autodetect doesn't work well with AM ... */
 			max1 = 3;
 			count = 0;
@@ -547,7 +546,7 @@
 			break;
 		}
 
-		if (amsound && (state->norm == VIDEO_MODE_SECAM)) {
+		if (amsound && (state->std & V4L2_STD_SECAM)) {
 			/* autodetect doesn't work well with AM ... */
 			cd = NULL;
 			count = 0;
@@ -576,7 +575,7 @@
 				state->nicam_on = 0;
 				msp3400c_setstereo(client, V4L2_TUNER_MODE_MONO);
 				state->watch_stereo = 1;
-			} else if (max2 == 1 && HAVE_NICAM(state)) {
+			} else if (max2 == 1 && state->has_nicam) {
 				/* B/G NICAM */
 				state->second = msp3400c_carrier_detect_55[max2].cdo;
 				msp3400c_setmode(client, MSP_MODE_FM_NICAM1);
@@ -603,8 +602,7 @@
 				state->nicam_on = 0;
 				msp3400c_setstereo(client, V4L2_TUNER_MODE_MONO);
 				state->watch_stereo = 1;
-			} else if (max2 == 0 &&
-				   state->norm == VIDEO_MODE_SECAM) {
+			} else if (max2 == 0 && (state->std & V4L2_STD_SECAM)) {
 				/* L NICAM or AM-mono */
 				state->second = msp3400c_carrier_detect_65[max2].cdo;
 				msp3400c_setmode(client, MSP_MODE_AM_NICAM);
@@ -614,7 +612,7 @@
 				/* volume prescale for SCART (AM mono input) */
 				msp_write_dsp(client, 0x000d, 0x1900);
 				state->watch_stereo = 1;
-			} else if (max2 == 0 && HAVE_NICAM(state)) {
+			} else if (max2 == 0 && state->has_nicam) {
 				/* D/K NICAM */
 				state->second = msp3400c_carrier_detect_65[max2].cdo;
 				msp3400c_setmode(client, MSP_MODE_FM_NICAM1);
@@ -689,8 +687,8 @@
 			goto restart;
 
 		/* start autodetect */
-		mode = msp_modus(client, state->norm);
-		std  = msp_standard(state->norm);
+		mode = msp_modus(client);
+		std = (state->std & V4L2_STD_NTSC) ? 0x20 : 1;
 		msp_write_dem(client, 0x30, mode);
 		msp_write_dem(client, 0x20, std);
 		state->watch_stereo = 0;
@@ -723,7 +721,7 @@
 		state->main   = msp_modelist[i].main;
 		state->second = msp_modelist[i].second;
 
-		if (amsound && (state->norm == VIDEO_MODE_SECAM) && (val != 0x0009)) {
+		if (amsound && (state->std & V4L2_STD_SECAM) && (val != 0x0009)) {
 			/* autodetection has failed, let backup */
 			v4l_dbg(1, client, "autodetection failed,"
 				" switching to backup mode: %s (0x%04x)\n",
@@ -767,12 +765,12 @@
 			msp3400c_setstereo(client,V4L2_TUNER_MODE_STEREO);
 			break;
 		case 0x0040: /* FM radio */
-			state->mode   = MSP_MODE_FM_RADIO;
+			state->mode = MSP_MODE_FM_RADIO;
 			state->rxsubchans = V4L2_TUNER_SUB_STEREO;
 			state->audmode = V4L2_TUNER_MODE_STEREO;
 			state->nicam_on = 0;
 			state->watch_stereo = 0;
-			/* not needed in theory if HAVE_RADIO(), but
+			/* not needed in theory if we have radio, but
 			   short programming enables carrier mute */
 			msp3400c_setmode(client,MSP_MODE_FM_RADIO);
 			msp3400c_setcarrier(client, MSP_CARRIER(10.7),
@@ -872,8 +870,11 @@
 	msp_write_dem(client, 0x40, state->i2s_mode);
 
 	/* step-by-step initialisation, as described in the manual */
-	modus = msp_modus(client, state->norm);
-	std   = msp_standard(state->norm);
+	modus = msp_modus(client);
+	if (state->radio)
+		std = 0x40;
+	else
+		std = (state->std & V4L2_STD_NTSC) ? 0x20 : 1;
 	modus &= ~0x03; /* STATUS_CHANGE = 0 */
 	modus |= 0x01;  /* AUTOMATIC_SOUND_DETECTION = 1 */
 	if (msp_write_dem(client, 0x30, modus))