Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=333408f21590d50397f3004e3f87070fa8f52c51
Commit:     333408f21590d50397f3004e3f87070fa8f52c51
Parent:     872aad45d6174570dd2e1defc3efee50f2cfcc72
Author:     Trent Piepho <[EMAIL PROTECTED]>
AuthorDate: Tue Jul 3 15:08:10 2007 -0300
Committer:  Mauro Carvalho Chehab <[EMAIL PROTECTED]>
CommitDate: Tue Jul 3 15:11:14 2007 -0300

    V4L/DVB (5808): Bttv: fix v4l1 breaking the driver
    
    If one uses a V4L *one* application, such as vlc or mplayer's v4l driver, as
    the first user after the driver is loaded, the driver wedges itself and will
    never capture properly.  Even if one uses a V4L2 application later, it still
    won't work.
    
    If one uses a V4L *two* application first, such as tvtime or mplayer's v4l2
    driver, then the driver will be ok.  One can then run a V4L1 application, 
and
    it will work.
    
    It turns out the problem is with norm changing and the crop support that was
    added in 2.6.21.  The driver defaults to PAL, and keeps the last norm it was
    set too across opens.  If one changes the norm via V4L1, the cropping
    parameters are not reset like they should be, and they'll remain broken 
across
    device opens.
    
    This patch removes the direct setting of btv->tvnorm in the V4L1 ioctl
    VIDIOCSCHAN handler.  The norm is set via the existing call to set_input(),
    which calls set_tvnorm(), which will reset the cropping values now that it 
is
    able to detect the norm change.
    
    Signed-off-by: Trent Piepho <[EMAIL PROTECTED]>
    Signed-off-by: Michael Krufky <[EMAIL PROTECTED]>
    Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>
---
 drivers/media/video/bt8xx/bttv-driver.c |   13 ++++++-------
 1 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/drivers/media/video/bt8xx/bttv-driver.c 
b/drivers/media/video/bt8xx/bttv-driver.c
index 1c38723..b1fedb0 100644
--- a/drivers/media/video/bt8xx/bttv-driver.c
+++ b/drivers/media/video/bt8xx/bttv-driver.c
@@ -1331,7 +1331,7 @@ set_tvnorm(struct bttv *btv, unsigned int norm)
 
 /* Call with btv->lock down. */
 static void
-set_input(struct bttv *btv, unsigned int input)
+set_input(struct bttv *btv, unsigned int input, unsigned int norm)
 {
        unsigned long flags;
 
@@ -1350,7 +1350,7 @@ set_input(struct bttv *btv, unsigned int input)
        }
        audio_input(btv,(input == bttv_tvcards[btv->c.type].tuner ?
                       TVAUDIO_INPUT_TUNER : TVAUDIO_INPUT_EXTERN));
-       set_tvnorm(btv,btv->tvnorm);
+       set_tvnorm(btv, norm);
        i2c_vidiocschan(btv);
 }
 
@@ -1441,7 +1441,7 @@ static void bttv_reinit_bt848(struct bttv *btv)
 
        init_bt848(btv);
        btv->pll.pll_current = -1;
-       set_input(btv,btv->input);
+       set_input(btv, btv->input, btv->tvnorm);
 }
 
 static int get_control(struct bttv *btv, struct v4l2_control *c)
@@ -2011,8 +2011,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned 
int cmd, void *arg)
                        return 0;
                }
 
-               btv->tvnorm = v->norm;
-               set_input(btv,v->channel);
+               set_input(btv, v->channel, v->norm);
                mutex_unlock(&btv->lock);
                return 0;
        }
@@ -2148,7 +2147,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned 
int cmd, void *arg)
                if (*i > bttv_tvcards[btv->c.type].video_inputs)
                        return -EINVAL;
                mutex_lock(&btv->lock);
-               set_input(btv,*i);
+               set_input(btv, *i, btv->tvnorm);
                mutex_unlock(&btv->lock);
                return 0;
        }
@@ -4780,7 +4779,7 @@ static int __devinit bttv_probe(struct pci_dev *dev,
                bt848_hue(btv,32768);
                bt848_sat(btv,32768);
                audio_mute(btv, 1);
-               set_input(btv,0);
+               set_input(btv, 0, btv->tvnorm);
                bttv_crop_reset(&btv->crop[0], btv->tvnorm);
                btv->crop[1] = btv->crop[0]; /* current = default */
                disclaim_vbi_lines(btv);
-
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