Skip to content

Commit

Permalink
V4L/DVB (9685): gspca: Correct restart of webcams in spca501.
Browse files Browse the repository at this point in the history
Currently the spca501 driver only works the first time used, then the cam needs
to be unplugged or the driver reloaded, this is because currently the data
which should be send each time the stream is started is send only once.
Likewise currently the data to initialize the cam is send from the probe
function, and thus will not get send after a suspend/resume.
This patch fixes this by sending both at the right time.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Hans de Goede authored and Mauro Carvalho Chehab committed Dec 29, 2008
1 parent dff369a commit cc04342
Showing 1 changed file with 12 additions and 10 deletions.
22 changes: 12 additions & 10 deletions drivers/media/video/gspca/spca501.c
Original file line number Diff line number Diff line change
Expand Up @@ -1930,6 +1930,14 @@ static int sd_config(struct gspca_dev *gspca_dev,
sd->contrast = sd_ctrls[MY_CONTRAST].qctrl.default_value;
sd->colors = sd_ctrls[MY_COLOR].qctrl.default_value;

return 0;
}

/* 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;

switch (sd->subtype) {
case Arowana300KCMOSCamera:
case SmileIntlCamera:
Expand All @@ -1948,15 +1956,17 @@ static int sd_config(struct gspca_dev *gspca_dev,
goto error;
break;
}
PDEBUG(D_STREAM, "Initializing SPCA501 finished");
return 0;
error:
return -EINVAL;
}

/* this function is called at probe and resume time */
static int sd_init(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 mode;

switch (sd->subtype) {
case ThreeComHomeConnectLite:
Expand All @@ -1976,14 +1986,6 @@ static int sd_init(struct gspca_dev *gspca_dev)
/* Generic 501 open data */
write_vector(gspca_dev, spca501_open_data);
}
PDEBUG(D_STREAM, "Initializing SPCA501 finished");
return 0;
}

static int sd_start(struct gspca_dev *gspca_dev)
{
struct usb_device *dev = gspca_dev->dev;
int mode;

/* memorize the wanted pixel format */
mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv;
Expand Down

0 comments on commit cc04342

Please sign in to comment.