Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=11f7078c10944437b6cf335cea50ed7da675a8b1
Commit:     11f7078c10944437b6cf335cea50ed7da675a8b1
Parent:     cb71201f20e43581857043a1f856fb61ce44bdf8
Author:     Maxim Levitsky <[EMAIL PROTECTED]>
AuthorDate: Thu Sep 27 20:44:39 2007 -0300
Committer:  Mauro Carvalho Chehab <[EMAIL PROTECTED]>
CommitDate: Wed Oct 10 00:02:59 2007 -0300

    V4L/DVB (6272): V4L: properly fix support for capturing interlaced video in 
saa7134
    
    By "capturing interlaced video" I mean that card ensures that top field
    is really top and vice versa (I think it takes the filed ID from signal)
    Properly turn on/off that support depending on signal state
    
    Signed-off-by: Maxim Levitsky <[EMAIL PROTECTED]>
    Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>
---
 drivers/media/video/saa7134/saa7134-core.c  |    8 +++++---
 drivers/media/video/saa7134/saa7134-video.c |   16 ++++++++++------
 drivers/media/video/saa7134/saa7134.h       |    2 +-
 3 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/drivers/media/video/saa7134/saa7134-core.c 
b/drivers/media/video/saa7134/saa7134-core.c
index 7f5df32..fae0bfe 100644
--- a/drivers/media/video/saa7134/saa7134-core.c
+++ b/drivers/media/video/saa7134/saa7134-core.c
@@ -594,8 +594,10 @@ static irqreturn_t saa7134_irq(int irq, void *dev_id)
                        print_irqstatus(dev,loop,report,status);
 
 
-               if (report & SAA7134_IRQ_REPORT_RDCAP /* _INTL */)
-                       saa7134_irq_video_intl(dev);
+               if ((report & SAA7134_IRQ_REPORT_RDCAP) ||
+                       (report & SAA7134_IRQ_REPORT_INTL))
+                               saa7134_irq_video_signalchange(dev);
+
 
                if ((report & SAA7134_IRQ_REPORT_DONE_RA0) &&
                    (status & 0x60) == 0)
@@ -1081,7 +1083,7 @@ static int __devinit saa7134_initdev(struct pci_dev 
*pci_dev,
        mutex_unlock(&devlist_lock);
 
        /* check for signal */
-       saa7134_irq_video_intl(dev);
+       saa7134_irq_video_signalchange(dev);
 
        if (saa7134_dmasound_init && !dev->dmasound.priv_data) {
                saa7134_dmasound_init(dev);
diff --git a/drivers/media/video/saa7134/saa7134-video.c 
b/drivers/media/video/saa7134/saa7134-video.c
index 24d5797..7c97ac1 100644
--- a/drivers/media/video/saa7134/saa7134-video.c
+++ b/drivers/media/video/saa7134/saa7134-video.c
@@ -40,7 +40,7 @@
 
 static unsigned int video_debug   = 0;
 static unsigned int gbuffers      = 8;
-static unsigned int noninterlaced = 1;
+static unsigned int noninterlaced = 0;
 static unsigned int gbufsize      = 720*576*4;
 static unsigned int gbufsize_max  = 720*576*4;
 static char secam[] = "--";
@@ -2454,7 +2454,7 @@ int saa7134_video_init2(struct saa7134_dev *dev)
        return 0;
 }
 
-void saa7134_irq_video_intl(struct saa7134_dev *dev)
+void saa7134_irq_video_signalchange(struct saa7134_dev *dev)
 {
        static const char *st[] = {
                "(no signal)", "NTSC", "PAL", "SECAM" };
@@ -2466,24 +2466,28 @@ void saa7134_irq_video_intl(struct saa7134_dev *dev)
                (st1 & 0x40) ? "not locked" : "locked",
                (st2 & 0x40) ? "no"         : "yes",
                st[st1 & 0x03]);
-       dev->nosignal = (st1 & 0x40) || (st2 & 0x40);
+       dev->nosignal = (st1 & 0x40) || (st2 & 0x40)  || !(st2 & 0x1);
 
        if (dev->nosignal) {
                /* no video signal -> mute audio */
                if (dev->ctl_automute)
                        dev->automute = 1;
                saa7134_tvaudio_setmute(dev);
-               saa_setb(SAA7134_SYNC_CTRL, 0x20);
        } else {
                /* wake up tvaudio audio carrier scan thread */
                saa7134_tvaudio_do_scan(dev);
-               if (!noninterlaced)
-                       saa_clearb(SAA7134_SYNC_CTRL, 0x20);
        }
+
+       if ((st2 & 0x80) && !noninterlaced && !dev->nosignal)
+               saa_clearb(SAA7134_SYNC_CTRL, 0x20);
+       else
+               saa_setb(SAA7134_SYNC_CTRL, 0x20);
+
        if (dev->mops && dev->mops->signal_change)
                dev->mops->signal_change(dev);
 }
 
+
 void saa7134_irq_video_done(struct saa7134_dev *dev, unsigned long status)
 {
        enum v4l2_field field;
diff --git a/drivers/media/video/saa7134/saa7134.h 
b/drivers/media/video/saa7134/saa7134.h
index 5b1f226..745b750 100644
--- a/drivers/media/video/saa7134/saa7134.h
+++ b/drivers/media/video/saa7134/saa7134.h
@@ -639,7 +639,7 @@ int saa7134_common_ioctl(struct saa7134_dev *dev,
 
 int saa7134_video_init1(struct saa7134_dev *dev);
 int saa7134_video_init2(struct saa7134_dev *dev);
-void saa7134_irq_video_intl(struct saa7134_dev *dev);
+void saa7134_irq_video_signalchange(struct saa7134_dev *dev);
 void saa7134_irq_video_done(struct saa7134_dev *dev, unsigned long status);
 
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to