summaryrefslogtreecommitdiff
path: root/drivers/media/video/gspca/spca505.c
diff options
context:
space:
mode:
authorJean-Francois Moine <moinejf@free.fr>2009-01-24 21:42:50 +0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-03-30 19:42:34 +0400
commit1de1ddf35752485fd1b7774385b72f0f618058fd (patch)
treeb7276b8703e41ce8cf220de7d6c1ccc509044ecc /drivers/media/video/gspca/spca505.c
parenta5df5c14335988317da4ba9aec64b7eb971a6ffc (diff)
downloadlinux-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.c49
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 */