On Sat, 2009-09-26 at 00:16 +0300, Aleksandr V. Piskunov wrote: > cx25840: > Disable 6.5MHz carrier autodetection for PAL, always assume its DK. > Only try to autodetect 6.5MHz carrier for SECAM if user accepts both > system DK and L. > > Signed-off-by: Aleksandr V. Piskunov <alexandr.v.piskunov@xxxxxxxxx> Aleksandr, Looks good for CX2584[0123] chips. It is not right for CX2388[578] or CX2310[12] chips, but the original code doesn't do the right thing anyway for those chips, AFAICT. In those chips auto-detection of DK vs. L for 6.5 MHz sound carriers doesn't appear to exist, and hence the bit positions and meanings have changed slightly. Your fix get us closer to doing the right thing for those devices. The rest of the fix for those devices is for another day... Reviewed-by: Andy Walls <awalls@xxxxxxxxx> > diff --git a/linux/drivers/media/video/cx25840/cx25840-core.c b/linux/drivers/media/video/cx25840/cx25840-core.c > --- a/linux/drivers/media/video/cx25840/cx25840-core.c > +++ b/linux/drivers/media/video/cx25840/cx25840-core.c > @@ -647,13 +647,30 @@ > } > cx25840_write(client, 0x80b, 0x00); > } else if (std & V4L2_STD_PAL) { > - /* Follow tuner change procedure for PAL */ > + /* Autodetect audio standard and audio system */ > cx25840_write(client, 0x808, 0xff); > - cx25840_write(client, 0x80b, 0x10); > + /* Since system PAL-L is pretty much non-existant and > + not used by any public broadcast network, force > + 6.5 MHz carrier to be interpreted as System DK, > + this avoids DK audio detection instability */ > + cx25840_write(client, 0x80b, 0x00); > } else if (std & V4L2_STD_SECAM) { > - /* Select autodetect for SECAM */ > + /* Autodetect audio standard and audio system */ > cx25840_write(client, 0x808, 0xff); > - cx25840_write(client, 0x80b, 0x10); > + /* If only one of SECAM-DK / SECAM-L is required, then force > + 6.5MHz carrier, else autodetect it */ > + if ((std & V4L2_STD_SECAM_DK) && > + !(std & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC))) { > + /* 6.5 MHz carrier to be interpreted as System DK */ > + cx25840_write(client, 0x80b, 0x00); > + } else if (!(std & V4L2_STD_SECAM_DK) && > + (std & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC))) { > + /* 6.5 MHz carrier to be interpreted as System L */ > + cx25840_write(client, 0x80b, 0x08); > + } else { > + /* 6.5 MHz carrier to be autodetected */ > + cx25840_write(client, 0x80b, 0x10); > + } > } > > cx25840_and_or(client, 0x810, ~0x01, 0); > > -- > To unsubscribe from this list: send the line "unsubscribe linux-media" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html