[PATCH] v4l: 686: change the number of lines in the input signal when the

- Change the number of lines in the input signal when the video standard is
  changed.

- Fix comments style.

Signed-off-by: Robert W. Boone <rboone@rtd.com>
Signed-off-by: Nickolay V. Shmyrev <nshmyrev@yandex.ru>
Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
diff --git a/drivers/media/video/saa7134/saa6752hs.c b/drivers/media/video/saa7134/saa6752hs.c
index 382911c..dac720e 100644
--- a/drivers/media/video/saa7134/saa6752hs.c
+++ b/drivers/media/video/saa7134/saa6752hs.c
@@ -57,6 +57,7 @@
 	struct i2c_client             client;
 	struct v4l2_mpeg_compression  params;
 	enum saa6752hs_videoformat    video_format;
+	v4l2_std_id                   standard;
 };
 
 enum saa6752hs_command {
@@ -74,58 +75,58 @@
 /* ---------------------------------------------------------------------- */
 
 static u8 PAT[] = {
-	0xc2, // i2c register
-	0x00, // table number for encoder
+	0xc2, /* i2c register */
+	0x00, /* table number for encoder */
 
-	0x47, // sync
-	0x40, 0x00, // transport_error_indicator(0), payload_unit_start(1), transport_priority(0), pid(0)
-	0x10, // transport_scrambling_control(00), adaptation_field_control(01), continuity_counter(0)
+	0x47, /* sync */
+	0x40, 0x00, /* transport_error_indicator(0), payload_unit_start(1), transport_priority(0), pid(0) */
+	0x10, /* transport_scrambling_control(00), adaptation_field_control(01), continuity_counter(0) */
 
-	0x00, // PSI pointer to start of table
+	0x00, /* PSI pointer to start of table */
 
-	0x00, // tid(0)
-	0xb0, 0x0d, // section_syntax_indicator(1), section_length(13)
+	0x00, /* tid(0) */
+	0xb0, 0x0d, /* section_syntax_indicator(1), section_length(13) */
 
-	0x00, 0x01, // transport_stream_id(1)
+	0x00, 0x01, /* transport_stream_id(1) */
 
-	0xc1, // version_number(0), current_next_indicator(1)
+	0xc1, /* version_number(0), current_next_indicator(1) */
 
-	0x00, 0x00, // section_number(0), last_section_number(0)
+	0x00, 0x00, /* section_number(0), last_section_number(0) */
 
-	0x00, 0x01, // program_number(1)
+	0x00, 0x01, /* program_number(1) */
 
-	0xe0, 0x00, // PMT PID
+	0xe0, 0x00, /* PMT PID */
 
-	0x00, 0x00, 0x00, 0x00 // CRC32
+	0x00, 0x00, 0x00, 0x00 /* CRC32 */
 };
 
 static u8 PMT[] = {
-	0xc2, // i2c register
-	0x01, // table number for encoder
+	0xc2, /* i2c register */
+	0x01, /* table number for encoder */
 
-	0x47, // sync
-	0x40, 0x00, // transport_error_indicator(0), payload_unit_start(1), transport_priority(0), pid
-	0x10, // transport_scrambling_control(00), adaptation_field_control(01), continuity_counter(0)
+	0x47, /* sync */
+	0x40, 0x00, /* transport_error_indicator(0), payload_unit_start(1), transport_priority(0), pid */
+	0x10, /* transport_scrambling_control(00), adaptation_field_control(01), continuity_counter(0) */
 
-	0x00, // PSI pointer to start of table
+	0x00, /* PSI pointer to start of table */
 
-	0x02, // tid(2)
-	0xb0, 0x17, // section_syntax_indicator(1), section_length(23)
+	0x02, /* tid(2) */
+	0xb0, 0x17, /* section_syntax_indicator(1), section_length(23) */
 
-	0x00, 0x01, // program_number(1)
+	0x00, 0x01, /* program_number(1) */
 
-	0xc1, // version_number(0), current_next_indicator(1)
+	0xc1, /* version_number(0), current_next_indicator(1) */
 
-	0x00, 0x00, // section_number(0), last_section_number(0)
+	0x00, 0x00, /* section_number(0), last_section_number(0) */
 
-	0xe0, 0x00, // PCR_PID
+	0xe0, 0x00, /* PCR_PID */
 
-	0xf0, 0x00, // program_info_length(0)
+	0xf0, 0x00, /* program_info_length(0) */
 
-	0x02, 0xe0, 0x00, 0xf0, 0x00, // video stream type(2), pid
-	0x04, 0xe0, 0x00, 0xf0, 0x00, // audio stream type(4), pid
+	0x02, 0xe0, 0x00, 0xf0, 0x00, /* video stream type(2), pid */
+	0x04, 0xe0, 0x00, 0xf0, 0x00, /* audio stream type(4), pid */
 
-	0x00, 0x00, 0x00, 0x00 // CRC32
+	0x00, 0x00, 0x00, 0x00 /* CRC32 */
 };
 
 static struct v4l2_mpeg_compression param_defaults =
@@ -166,7 +167,7 @@
 	unsigned long timeout;
 	int status = 0;
 
-	// execute the command
+	/* execute the command */
 	switch(command) {
   	case SAA6752HS_COMMAND_RESET:
   		buf[0] = 0x00;
@@ -200,11 +201,11 @@
 		return -EINVAL;
 	}
 
-  	// set it and wait for it to be so
+  	/* set it and wait for it to be so */
 	i2c_master_send(client, buf, 1);
 	timeout = jiffies + HZ * 3;
 	for (;;) {
-		// get the current status
+		/* get the current status */
 		buf[0] = 0x10;
 	  	i2c_master_send(client, buf, 1);
 		i2c_master_recv(client, buf, 1);
@@ -216,14 +217,12 @@
 			break;
 		}
 
-		// wait a bit
 		msleep(10);
 	}
 
-	// delay a bit to let encoder settle
+	/* delay a bit to let encoder settle */
 	msleep(50);
 
-	// done
   	return status;
 }
 
@@ -233,44 +232,43 @@
 {
   	u8 buf[3];
 
-	// set the bitrate mode
+	/* set the bitrate mode */
 	buf[0] = 0x71;
 	buf[1] = (params->vi_bitrate.mode == V4L2_BITRATE_VBR) ? 0 : 1;
 	i2c_master_send(client, buf, 2);
 
-	// set the video bitrate
+	/* set the video bitrate */
 	if (params->vi_bitrate.mode == V4L2_BITRATE_VBR) {
-		// set the target bitrate
+		/* set the target bitrate */
 		buf[0] = 0x80;
 	    	buf[1] = params->vi_bitrate.target >> 8;
 	  	buf[2] = params->vi_bitrate.target & 0xff;
 		i2c_master_send(client, buf, 3);
 
-		// set the max bitrate
+		/* set the max bitrate */
 		buf[0] = 0x81;
 	    	buf[1] = params->vi_bitrate.max >> 8;
 	  	buf[2] = params->vi_bitrate.max & 0xff;
 		i2c_master_send(client, buf, 3);
 	} else {
-		// set the target bitrate (no max bitrate for CBR)
+		/* set the target bitrate (no max bitrate for CBR) */
   		buf[0] = 0x81;
 	    	buf[1] = params->vi_bitrate.target >> 8;
 	  	buf[2] = params->vi_bitrate.target & 0xff;
 		i2c_master_send(client, buf, 3);
 	}
 
-	// set the audio bitrate
+	/* set the audio bitrate */
  	buf[0] = 0x94;
 	buf[1] = (256 == params->au_bitrate.target) ? 0 : 1;
 	i2c_master_send(client, buf, 2);
 
-	// set the total bitrate
+	/* set the total bitrate */
 	buf[0] = 0xb1;
   	buf[1] = params->st_bitrate.target >> 8;
   	buf[2] = params->st_bitrate.target & 0xff;
 	i2c_master_send(client, buf, 3);
 
-	// return success
 	return 0;
 }
 
@@ -376,36 +374,43 @@
 
 	h = i2c_get_clientdata(client);
 
-	// Set video format - must be done first as it resets other settings
+	/* Set video format - must be done first as it resets other settings */
 	buf[0] = 0x41;
 	buf[1] = h->video_format;
 	i2c_master_send(client, buf, 2);
 
-        // set bitrate
+	/* Set number of lines in input signal */
+	buf[0] = 0x40;
+	buf[1] = 0x00;
+	if (h->standard & V4L2_STD_525_60)
+		buf[1] = 0x01;
+	i2c_master_send(client, buf, 2);
+
+        /* set bitrate */
         saa6752hs_set_bitrate(client, &h->params);
 
-	// Set GOP structure {3, 13}
+	/* Set GOP structure {3, 13} */
 	buf[0] = 0x72;
 	buf[1] = 0x03;
 	buf[2] = 0x0D;
 	i2c_master_send(client,buf,3);
 
-    	// Set minimum Q-scale {4}
+    	/* Set minimum Q-scale {4} */
 	buf[0] = 0x82;
 	buf[1] = 0x04;
 	i2c_master_send(client,buf,2);
 
-    	// Set maximum Q-scale {12}
+    	/* Set maximum Q-scale {12} */
 	buf[0] = 0x83;
 	buf[1] = 0x0C;
 	i2c_master_send(client,buf,2);
 
-    	// Set Output Protocol
+    	/* Set Output Protocol */
 	buf[0] = 0xD0;
 	buf[1] = 0x81;
 	i2c_master_send(client,buf,2);
 
-    	// Set video output stream format {TS}
+    	/* Set video output stream format {TS} */
 	buf[0] = 0xB0;
 	buf[1] = 0x05;
 	i2c_master_send(client,buf,2);
@@ -436,39 +441,39 @@
 	localPMT[sizeof(PMT) - 2] = (crc >> 8) & 0xFF;
 	localPMT[sizeof(PMT) - 1] = crc & 0xFF;
 
-    	// Set Audio PID
+    	/* Set Audio PID */
 	buf[0] = 0xC1;
 	buf[1] = (h->params.ts_pid_audio >> 8) & 0xFF;
 	buf[2] = h->params.ts_pid_audio & 0xFF;
 	i2c_master_send(client,buf,3);
 
-	// Set Video PID
+	/* Set Video PID */
 	buf[0] = 0xC0;
 	buf[1] = (h->params.ts_pid_video >> 8) & 0xFF;
 	buf[2] = h->params.ts_pid_video & 0xFF;
 	i2c_master_send(client,buf,3);
 
- 	// Set PCR PID
+ 	/* Set PCR PID */
 	buf[0] = 0xC4;
 	buf[1] = (h->params.ts_pid_pcr >> 8) & 0xFF;
 	buf[2] = h->params.ts_pid_pcr & 0xFF;
 	i2c_master_send(client,buf,3);
 
-	// Send SI tables
+	/* Send SI tables */
 	i2c_master_send(client,localPAT,sizeof(PAT));
 	i2c_master_send(client,localPMT,sizeof(PMT));
 
-	// mute then unmute audio. This removes buzzing artefacts
+	/* mute then unmute audio. This removes buzzing artefacts */
 	buf[0] = 0xa4;
 	buf[1] = 1;
 	i2c_master_send(client, buf, 2);
   	buf[1] = 0;
 	i2c_master_send(client, buf, 2);
 
-	// start it going
+	/* start it going */
 	saa6752hs_chip_command(client, SAA6752HS_COMMAND_START);
 
-	// readout current state
+	/* readout current state */
 	buf[0] = 0xE1;
 	buf[1] = 0xA7;
 	buf[2] = 0xFE;
@@ -477,7 +482,7 @@
 	i2c_master_send(client, buf, 5);
 	i2c_master_recv(client, buf2, 4);
 
-	// change aspect ratio
+	/* change aspect ratio */
 	buf[0] = 0xE0;
 	buf[1] = 0xA7;
 	buf[2] = 0xFE;
@@ -498,7 +503,6 @@
 	buf[8] = buf2[3];
 	i2c_master_send(client, buf, 9);
 
-   	// return success
 	return 0;
 }
 
@@ -516,6 +520,9 @@
 	h->client.adapter = adap;
 	h->client.addr = addr;
 
+	/* Assume 625 input lines */
+	h->standard = 0;
+
 	i2c_set_clientdata(&h->client, h);
         i2c_attach_client(&h->client);
 	return 0;
@@ -576,6 +583,9 @@
 		saa6752hs_set_subsampling(client, f);
 		break;
 	}
+	case VIDIOC_S_STD:
+		h->standard = *((v4l2_std_id *) arg);
+		break;
 	default:
 		/* nothing */
 		break;