vserver 1.9.3
[linux-2.6.git] / drivers / media / video / adv7175.c
index 16bfdb9..74fefc2 100644 (file)
@@ -156,6 +156,22 @@ adv7175_write_block (struct i2c_client *client,
        return ret;
 }
 
+static void
+set_subcarrier_freq (struct i2c_client *client,
+                    int                pass_through)
+{
+       /* for some reason pass_through NTSC needs
+        * a different sub-carrier freq to remain stable. */
+       if(pass_through)
+               adv7175_write(client, 0x02, 0x00);
+       else
+               adv7175_write(client, 0x02, 0x55);
+
+       adv7175_write(client, 0x03, 0x55);
+       adv7175_write(client, 0x04, 0x55);
+       adv7175_write(client, 0x05, 0x25);
+}
+
 #ifdef ENCODER_DUMP
 static void
 dump (struct i2c_client *client)
@@ -322,6 +338,10 @@ adv7175_command (struct i2c_client *client,
 
                case 0:
                        adv7175_write(client, 0x01, 0x00);
+
+                       if (encoder->norm == VIDEO_MODE_NTSC)
+                               set_subcarrier_freq(client, 1);
+
                        adv7175_write(client, 0x0c, TR1CAPT);   /* TR1 */
                        if (encoder->norm == VIDEO_MODE_SECAM)
                                adv7175_write(client, 0x0d, 0x49);      // Disable genlock
@@ -334,6 +354,10 @@ adv7175_command (struct i2c_client *client,
 
                case 1:
                        adv7175_write(client, 0x01, 0x00);
+
+                       if (encoder->norm == VIDEO_MODE_NTSC)
+                               set_subcarrier_freq(client, 0);
+
                        adv7175_write(client, 0x0c, TR1PLAY);   /* TR1 */
                        adv7175_write(client, 0x0d, 0x49);
                        adv7175_write(client, 0x07, TR0MODE | TR0RST);
@@ -343,6 +367,10 @@ adv7175_command (struct i2c_client *client,
 
                case 2:
                        adv7175_write(client, 0x01, 0x80);
+
+                       if (encoder->norm == VIDEO_MODE_NTSC)
+                               set_subcarrier_freq(client, 0);
+
                        adv7175_write(client, 0x0d, 0x49);
                        adv7175_write(client, 0x07, TR0MODE | TR0RST);
                        adv7175_write(client, 0x07, TR0MODE);