diff options
author | Jean-Francois Moine <moinejf@free.fr> | 2009-01-24 21:42:50 +0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-03-30 19:42:34 +0400 |
commit | 1de1ddf35752485fd1b7774385b72f0f618058fd (patch) | |
tree | b7276b8703e41ce8cf220de7d6c1ccc509044ecc /drivers/media/video/gspca/spca505.c | |
parent | a5df5c14335988317da4ba9aec64b7eb971a6ffc (diff) | |
download | linux-1de1ddf35752485fd1b7774385b72f0f618058fd.tar.xz |
V4L/DVB (10387): gspca - spca505: Move some sequences from probe to streamon.
The webcams worked only one time after connection.
Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/gspca/spca505.c')
-rw-r--r-- | drivers/media/video/gspca/spca505.c | 49 |
1 files changed, 24 insertions, 25 deletions
diff --git a/drivers/media/video/gspca/spca505.c b/drivers/media/video/gspca/spca505.c index b9139b1edac9..4fc54d8b84aa 100644 --- a/drivers/media/video/gspca/spca505.c +++ b/drivers/media/video/gspca/spca505.c @@ -650,31 +650,6 @@ static int sd_config(struct gspca_dev *gspca_dev, /* this function is called at probe and resume time */ static int sd_init(struct gspca_dev *gspca_dev) { - struct sd *sd = (struct sd *) gspca_dev; - int ret; - - if (sd->subtype == Nxultra) - write_vector(gspca_dev, spca505b_open_data_ccd); - else - write_vector(gspca_dev, spca505_open_data_ccd); - ret = reg_read(gspca_dev, 0x06, 0x16); - - if (ret < 0) { - PDEBUG(D_ERR|D_CONF, - "register read failed err: %d", - ret); - return ret; - } - if (ret != 0x0101) { - PDEBUG(D_ERR|D_CONF, - "After vector read returns 0x%04x should be 0x0101", - ret); - } - - ret = reg_write(gspca_dev->dev, 0x06, 0x16, 0x0a); - if (ret < 0) - return ret; - reg_write(gspca_dev->dev, 0x05, 0xc2, 0x12); return 0; } @@ -689,6 +664,7 @@ static void setbrightness(struct gspca_dev *gspca_dev) static int sd_start(struct gspca_dev *gspca_dev) { + struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; int ret, mode; static u8 mode_tb[][3] = { @@ -700,6 +676,29 @@ static int sd_start(struct gspca_dev *gspca_dev) {0x05, 0x40, 0x40} /* 160x120 */ }; + if (sd->subtype == Nxultra) + write_vector(gspca_dev, spca505b_open_data_ccd); + else + write_vector(gspca_dev, spca505_open_data_ccd); + ret = reg_read(gspca_dev, 0x06, 0x16); + + if (ret < 0) { + PDEBUG(D_ERR|D_CONF, + "register read failed err: %d", + ret); + return ret; + } + if (ret != 0x0101) { + PDEBUG(D_ERR|D_CONF, + "After vector read returns 0x%04x should be 0x0101", + ret); + } + + ret = reg_write(gspca_dev->dev, 0x06, 0x16, 0x0a); + if (ret < 0) + return ret; + reg_write(gspca_dev->dev, 0x05, 0xc2, 0x12); + /* necessary because without it we can see stream * only once after loading module */ /* stopping usb registers Tomasz change */ |