Browse Source

V4L/DVB (9079): gspca: Return error code from stream start functions.

Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Jean-Francois Moine 16 years ago
parent
commit
72ab97cecb

+ 2 - 1
drivers/media/video/gspca/conex.c

@@ -837,12 +837,13 @@ static int sd_init(struct gspca_dev *gspca_dev)
 	return 0;
 	return 0;
 }
 }
 
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	cx11646_initsize(gspca_dev);
 	cx11646_initsize(gspca_dev);
 	cx11646_fw(gspca_dev);
 	cx11646_fw(gspca_dev);
 	cx_sensor(gspca_dev);
 	cx_sensor(gspca_dev);
 	cx11646_jpeg(gspca_dev);
 	cx11646_jpeg(gspca_dev);
+	return 0;
 }
 }
 
 
 static void sd_stop0(struct gspca_dev *gspca_dev)
 static void sd_stop0(struct gspca_dev *gspca_dev)

+ 2 - 1
drivers/media/video/gspca/etoms.c

@@ -691,7 +691,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 }
 }
 
 
 /* -- start the camera -- */
 /* -- start the camera -- */
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	struct sd *sd = (struct sd *) gspca_dev;
 	struct sd *sd = (struct sd *) gspca_dev;
 
 
@@ -704,6 +704,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 
 
 	reg_w_val(gspca_dev, ET_RESET_ALL, 0x08);
 	reg_w_val(gspca_dev, ET_RESET_ALL, 0x08);
 	et_video(gspca_dev, 1);		/* video on */
 	et_video(gspca_dev, 1);		/* video on */
+	return 0;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 5 - 1
drivers/media/video/gspca/gspca.c

@@ -584,7 +584,11 @@ static int gspca_init_transfer(struct gspca_dev *gspca_dev)
 			goto out;
 			goto out;
 
 
 		/* start the cam */
 		/* start the cam */
-		gspca_dev->sd_desc->start(gspca_dev);
+		ret = gspca_dev->sd_desc->start(gspca_dev);
+		if (ret < 0) {
+			destroy_urbs(gspca_dev);
+			goto out;
+		}
 		gspca_dev->streaming = 1;
 		gspca_dev->streaming = 1;
 		atomic_set(&gspca_dev->nevent, 0);
 		atomic_set(&gspca_dev->nevent, 0);
 
 

+ 1 - 1
drivers/media/video/gspca/gspca.h

@@ -93,7 +93,7 @@ struct sd_desc {
 /* mandatory operations */
 /* mandatory operations */
 	cam_cf_op config;	/* called on probe */
 	cam_cf_op config;	/* called on probe */
 	cam_op init;		/* called on probe and resume */
 	cam_op init;		/* called on probe and resume */
-	cam_v_op start;		/* called on stream on */
+	cam_op start;		/* called on stream on */
 	cam_pkt_op pkt_scan;
 	cam_pkt_op pkt_scan;
 /* optional operations */
 /* optional operations */
 	cam_v_op stopN;		/* called on stream off - main alt */
 	cam_v_op stopN;		/* called on stream off - main alt */

+ 11 - 9
drivers/media/video/gspca/mars.c

@@ -134,7 +134,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 	return 0;
 	return 0;
 }
 }
 
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	int err_code;
 	int err_code;
 	__u8 *data;
 	__u8 *data;
@@ -143,9 +143,10 @@ static void sd_start(struct gspca_dev *gspca_dev)
 	int intpipe;
 	int intpipe;
 
 
 	PDEBUG(D_STREAM, "camera start, iface %d, alt 8", gspca_dev->iface);
 	PDEBUG(D_STREAM, "camera start, iface %d, alt 8", gspca_dev->iface);
-	if (usb_set_interface(gspca_dev->dev, gspca_dev->iface, 8) < 0) {
+	err_code = usb_set_interface(gspca_dev->dev, gspca_dev->iface, 8);
+	if (err_code < 0) {
 		PDEBUG(D_ERR|D_STREAM, "Set packet size: set interface error");
 		PDEBUG(D_ERR|D_STREAM, "Set packet size: set interface error");
-		return;
+		return err_code;
 	}
 	}
 
 
 	data = gspca_dev->usb_buf;
 	data = gspca_dev->usb_buf;
@@ -154,7 +155,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 
 
 	err_code = reg_w(gspca_dev, data[0], 2);
 	err_code = reg_w(gspca_dev, data[0], 2);
 	if (err_code < 0)
 	if (err_code < 0)
-		return;
+		return err_code;
 
 
 	/*
 	/*
 	   Initialize the MR97113 chip register
 	   Initialize the MR97113 chip register
@@ -180,14 +181,14 @@ static void sd_start(struct gspca_dev *gspca_dev)
 
 
 	err_code = reg_w(gspca_dev, data[0], 11);
 	err_code = reg_w(gspca_dev, data[0], 11);
 	if (err_code < 0)
 	if (err_code < 0)
-		return;
+		return err_code;
 
 
 	data[0] = 0x23;		/* address */
 	data[0] = 0x23;		/* address */
 	data[1] = 0x09;		/* reg 35, append frame header */
 	data[1] = 0x09;		/* reg 35, append frame header */
 
 
 	err_code = reg_w(gspca_dev, data[0], 2);
 	err_code = reg_w(gspca_dev, data[0], 2);
 	if (err_code < 0)
 	if (err_code < 0)
-		return;
+		return err_code;
 
 
 	data[0] = 0x3c;		/* address */
 	data[0] = 0x3c;		/* address */
 /*	if (gspca_dev->width == 1280) */
 /*	if (gspca_dev->width == 1280) */
@@ -198,7 +199,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 				 *	(unit: 4KB) 200KB */
 				 *	(unit: 4KB) 200KB */
 	err_code = reg_w(gspca_dev, data[0], 2);
 	err_code = reg_w(gspca_dev, data[0], 2);
 	if (err_code < 0)
 	if (err_code < 0)
-		return;
+		return err_code;
 
 
 	if (0) {			/* fixed dark-gain */
 	if (0) {			/* fixed dark-gain */
 		data[1] = 0;		/* reg 94, Y Gain (1.75) */
 		data[1] = 0;		/* reg 94, Y Gain (1.75) */
@@ -240,13 +241,13 @@ static void sd_start(struct gspca_dev *gspca_dev)
 
 
 	err_code = reg_w(gspca_dev, data[0], 6);
 	err_code = reg_w(gspca_dev, data[0], 6);
 	if (err_code < 0)
 	if (err_code < 0)
-		return;
+		return err_code;
 
 
 	data[0] = 0x67;
 	data[0] = 0x67;
 	data[1] = 0x13;		/* reg 103, first pixel B, disable sharpness */
 	data[1] = 0x13;		/* reg 103, first pixel B, disable sharpness */
 	err_code = reg_w(gspca_dev, data[0], 2);
 	err_code = reg_w(gspca_dev, data[0], 2);
 	if (err_code < 0)
 	if (err_code < 0)
-		return;
+		return err_code;
 
 
 	/*
 	/*
 	 * initialize the value of MI sensor...
 	 * initialize the value of MI sensor...
@@ -326,6 +327,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 	data[0] = 0x00;
 	data[0] = 0x00;
 	data[1] = 0x4d;		/* ISOC transfering enable... */
 	data[1] = 0x4d;		/* ISOC transfering enable... */
 	reg_w(gspca_dev, data[0], 2);
 	reg_w(gspca_dev, data[0], 2);
+	return err_code;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 3 - 2
drivers/media/video/gspca/ov519.c

@@ -1854,7 +1854,7 @@ static int set_ov_sensor_window(struct sd *sd)
 }
 }
 
 
 /* -- start the camera -- */
 /* -- start the camera -- */
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	struct sd *sd = (struct sd *) gspca_dev;
 	struct sd *sd = (struct sd *) gspca_dev;
 	int ret;
 	int ret;
@@ -1871,9 +1871,10 @@ static void sd_start(struct gspca_dev *gspca_dev)
 		goto out;
 		goto out;
 	PDEBUG(D_STREAM, "camera started alt: 0x%02x", gspca_dev->alt);
 	PDEBUG(D_STREAM, "camera started alt: 0x%02x", gspca_dev->alt);
 	ov51x_led_control(sd, 1);
 	ov51x_led_control(sd, 1);
-	return;
+	return 0;
 out:
 out:
 	PDEBUG(D_ERR, "camera start error:%d", ret);
 	PDEBUG(D_ERR, "camera start error:%d", ret);
+	return ret;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 2 - 1
drivers/media/video/gspca/pac207.c

@@ -281,7 +281,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 }
 }
 
 
 /* -- start the camera -- */
 /* -- start the camera -- */
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	struct sd *sd = (struct sd *) gspca_dev;
 	struct sd *sd = (struct sd *) gspca_dev;
 	__u8 mode;
 	__u8 mode;
@@ -323,6 +323,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 	sd->sof_read = 0;
 	sd->sof_read = 0;
 	sd->autogain_ignore_frames = 0;
 	sd->autogain_ignore_frames = 0;
 	atomic_set(&sd->avg_lum, -1);
 	atomic_set(&sd->avg_lum, -1);
+	return 0;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 2 - 1
drivers/media/video/gspca/pac7311.c

@@ -675,7 +675,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 	return 0;
 	return 0;
 }
 }
 
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	struct sd *sd = (struct sd *) gspca_dev;
 	struct sd *sd = (struct sd *) gspca_dev;
 
 
@@ -724,6 +724,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 		reg_w(gspca_dev, 0x78, 0x01);
 		reg_w(gspca_dev, 0x78, 0x01);
 	else
 	else
 		reg_w(gspca_dev, 0x78, 0x05);
 		reg_w(gspca_dev, 0x78, 0x05);
+	return 0;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 2 - 1
drivers/media/video/gspca/sonixb.c

@@ -892,7 +892,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 }
 }
 
 
 /* -- start the camera -- */
 /* -- start the camera -- */
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	struct sd *sd = (struct sd *) gspca_dev;
 	struct sd *sd = (struct sd *) gspca_dev;
 	struct cam *cam = &gspca_dev->cam;
 	struct cam *cam = &gspca_dev->cam;
@@ -976,6 +976,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 	sd->frames_to_drop = 0;
 	sd->frames_to_drop = 0;
 	sd->autogain_ignore_frames = 0;
 	sd->autogain_ignore_frames = 0;
 	atomic_set(&sd->avg_lum, -1);
 	atomic_set(&sd->avg_lum, -1);
+	return 0;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 2 - 1
drivers/media/video/gspca/sonixj.c

@@ -1203,7 +1203,7 @@ static void setvflip(struct sd *sd)
 }
 }
 
 
 /* -- start the camera -- */
 /* -- start the camera -- */
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	struct sd *sd = (struct sd *) gspca_dev;
 	struct sd *sd = (struct sd *) gspca_dev;
 	int i;
 	int i;
@@ -1357,6 +1357,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 	}
 	}
 	setautogain(gspca_dev);
 	setautogain(gspca_dev);
 	reg_w1(gspca_dev, 0x01, reg1);
 	reg_w1(gspca_dev, 0x01, reg1);
+	return 0;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 2 - 1
drivers/media/video/gspca/spca500.c

@@ -660,7 +660,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 	return 0;
 	return 0;
 }
 }
 
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	struct sd *sd = (struct sd *) gspca_dev;
 	struct sd *sd = (struct sd *) gspca_dev;
 	int err;
 	int err;
@@ -867,6 +867,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 		write_vector(gspca_dev, Clicksmart510_defaults);
 		write_vector(gspca_dev, Clicksmart510_defaults);
 		break;
 		break;
 	}
 	}
+	return 0;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 2 - 1
drivers/media/video/gspca/spca501.c

@@ -1980,7 +1980,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 	return 0;
 	return 0;
 }
 }
 
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	struct usb_device *dev = gspca_dev->dev;
 	struct usb_device *dev = gspca_dev->dev;
 	int mode;
 	int mode;
@@ -2012,6 +2012,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 	setbrightness(gspca_dev);
 	setbrightness(gspca_dev);
 	setcontrast(gspca_dev);
 	setcontrast(gspca_dev);
 	setcolors(gspca_dev);
 	setcolors(gspca_dev);
+	return 0;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 2 - 1
drivers/media/video/gspca/spca505.c

@@ -688,7 +688,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 	return 0;
 	return 0;
 }
 }
 
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	struct usb_device *dev = gspca_dev->dev;
 	struct usb_device *dev = gspca_dev->dev;
 	int ret;
 	int ret;
@@ -733,6 +733,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 /*	reg_write(dev, 0x5, 0x0, 0x0); */
 /*	reg_write(dev, 0x5, 0x0, 0x0); */
 /*	reg_write(dev, 0x5, 0x0, 0x1); */
 /*	reg_write(dev, 0x5, 0x0, 0x1); */
 /*	reg_write(dev, 0x5, 0x11, 0x2); */
 /*	reg_write(dev, 0x5, 0x11, 0x2); */
+	return ret;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 2 - 1
drivers/media/video/gspca/spca506.c

@@ -422,7 +422,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 	return 0;
 	return 0;
 }
 }
 
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	struct usb_device *dev = gspca_dev->dev;
 	struct usb_device *dev = gspca_dev->dev;
 	__u16 norme;
 	__u16 norme;
@@ -549,6 +549,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 	PDEBUG(D_STREAM, "webcam started");
 	PDEBUG(D_STREAM, "webcam started");
 	spca506_GetNormeInput(gspca_dev, &norme, &channel);
 	spca506_GetNormeInput(gspca_dev, &norme, &channel);
 	spca506_SetNormeInput(gspca_dev, norme, channel);
 	spca506_SetNormeInput(gspca_dev, norme, channel);
+	return 0;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 2 - 1
drivers/media/video/gspca/spca508.c

@@ -1528,7 +1528,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 	return 0;
 	return 0;
 }
 }
 
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	int mode;
 	int mode;
 
 
@@ -1546,6 +1546,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 		break;
 		break;
 	}
 	}
 	reg_write(gspca_dev->dev, 0x8112, 0x10 | 0x20);
 	reg_write(gspca_dev->dev, 0x8112, 0x10 | 0x20);
+	return 0;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 4 - 2
drivers/media/video/gspca/spca561.c

@@ -699,7 +699,7 @@ static void setautogain(struct gspca_dev *gspca_dev)
 		sd->ag_cnt = -1;
 		sd->ag_cnt = -1;
 }
 }
 
 
-static void sd_start_12a(struct gspca_dev *gspca_dev)
+static int sd_start_12a(struct gspca_dev *gspca_dev)
 {
 {
 	struct usb_device *dev = gspca_dev->dev;
 	struct usb_device *dev = gspca_dev->dev;
 	int Clck = 0x8a; /* lower 0x8X values lead to fps > 30 */
 	int Clck = 0x8a; /* lower 0x8X values lead to fps > 30 */
@@ -725,8 +725,9 @@ static void sd_start_12a(struct gspca_dev *gspca_dev)
 	setwhite(gspca_dev);
 	setwhite(gspca_dev);
 	setautogain(gspca_dev);
 	setautogain(gspca_dev);
 	setexposure(gspca_dev);
 	setexposure(gspca_dev);
+	return 0;
 }
 }
-static void sd_start_72a(struct gspca_dev *gspca_dev)
+static int sd_start_72a(struct gspca_dev *gspca_dev)
 {
 {
 	struct usb_device *dev = gspca_dev->dev;
 	struct usb_device *dev = gspca_dev->dev;
 	int Clck;
 	int Clck;
@@ -750,6 +751,7 @@ static void sd_start_72a(struct gspca_dev *gspca_dev)
 	reg_w_val(dev, 0x8700, Clck);	/* 0x27 clock */
 	reg_w_val(dev, 0x8700, Clck);	/* 0x27 clock */
 	reg_w_val(dev, 0x8112, 0x10 | 0x20);
 	reg_w_val(dev, 0x8112, 0x10 | 0x20);
 	setautogain(gspca_dev);
 	setautogain(gspca_dev);
+	return 0;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 3 - 2
drivers/media/video/gspca/stk014.c

@@ -324,7 +324,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 }
 }
 
 
 /* -- start the camera -- */
 /* -- start the camera -- */
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	int ret, value;
 	int ret, value;
 
 
@@ -374,9 +374,10 @@ static void sd_start(struct gspca_dev *gspca_dev)
 	set_par(gspca_dev, 0x01000000);
 	set_par(gspca_dev, 0x01000000);
 	set_par(gspca_dev, 0x01000000);
 	set_par(gspca_dev, 0x01000000);
 	PDEBUG(D_STREAM, "camera started alt: 0x%02x", gspca_dev->alt);
 	PDEBUG(D_STREAM, "camera started alt: 0x%02x", gspca_dev->alt);
-	return;
+	return 0;
 out:
 out:
 	PDEBUG(D_ERR|D_STREAM, "camera start err %d", ret);
 	PDEBUG(D_ERR|D_STREAM, "camera start err %d", ret);
+	return ret;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 2 - 1
drivers/media/video/gspca/sunplus.c

@@ -961,7 +961,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 	return 0;
 	return 0;
 }
 }
 
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	struct sd *sd = (struct sd *) gspca_dev;
 	struct sd *sd = (struct sd *) gspca_dev;
 	struct usb_device *dev = gspca_dev->dev;
 	struct usb_device *dev = gspca_dev->dev;
@@ -1042,6 +1042,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 		break;
 		break;
 	}
 	}
 	sp5xx_initContBrigHueRegisters(gspca_dev);
 	sp5xx_initContBrigHueRegisters(gspca_dev);
+	return 0;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 2 - 1
drivers/media/video/gspca/t613.c

@@ -849,7 +849,7 @@ static int sd_getlowlight(struct gspca_dev *gspca_dev, __s32 *val)
 	return 0;
 	return 0;
 }
 }
 
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	int mode;
 	int mode;
 
 
@@ -898,6 +898,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 	setbrightness(gspca_dev);
 	setbrightness(gspca_dev);
 	setcontrast(gspca_dev);
 	setcontrast(gspca_dev);
 	setcolors(gspca_dev);
 	setcolors(gspca_dev);
+	return 0;
 }
 }
 
 
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
 static void sd_pkt_scan(struct gspca_dev *gspca_dev,

+ 2 - 1
drivers/media/video/gspca/tv8532.c

@@ -390,7 +390,7 @@ static void setbrightness(struct gspca_dev *gspca_dev)
 }
 }
 
 
 /* -- start the camera -- */
 /* -- start the camera -- */
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	reg_w_1(gspca_dev, TV8532_AD_SLOPE, 0x32);
 	reg_w_1(gspca_dev, TV8532_AD_SLOPE, 0x32);
 	reg_w_1(gspca_dev, TV8532_AD_BITCTRL, 0x00);
 	reg_w_1(gspca_dev, TV8532_AD_BITCTRL, 0x00);
@@ -443,6 +443,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 	/************************************************/
 	/************************************************/
 	tv_8532_PollReg(gspca_dev);
 	tv_8532_PollReg(gspca_dev);
 	reg_w_1(gspca_dev, TV8532_UDP_UPDATE, 0x00);	/* 0x31 */
 	reg_w_1(gspca_dev, TV8532_UDP_UPDATE, 0x00);	/* 0x31 */
+	return 0;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 3 - 2
drivers/media/video/gspca/vc032x.c

@@ -1501,7 +1501,7 @@ static void setlightfreq(struct gspca_dev *gspca_dev)
 	usb_exchange(gspca_dev, ov7660_freq_tb[sd->lightfreq]);
 	usb_exchange(gspca_dev, ov7660_freq_tb[sd->lightfreq]);
 }
 }
 
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	struct sd *sd = (struct sd *) gspca_dev;
 	struct sd *sd = (struct sd *) gspca_dev;
 	const __u8 *GammaT = NULL;
 	const __u8 *GammaT = NULL;
@@ -1585,7 +1585,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 		break;
 		break;
 	default:
 	default:
 		PDEBUG(D_PROBE, "Damned !! no sensor found Bye");
 		PDEBUG(D_PROBE, "Damned !! no sensor found Bye");
-		return;
+		return -EMEDIUMTYPE;
 	}
 	}
 	if (GammaT && MatrixT) {
 	if (GammaT && MatrixT) {
 		put_tab_to_reg(gspca_dev, GammaT, 17, 0xb84a);
 		put_tab_to_reg(gspca_dev, GammaT, 17, 0xb84a);
@@ -1621,6 +1621,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 		setautogain(gspca_dev);
 		setautogain(gspca_dev);
 		setlightfreq(gspca_dev);
 		setlightfreq(gspca_dev);
 	}
 	}
+	return 0;
 }
 }
 
 
 static void sd_stopN(struct gspca_dev *gspca_dev)
 static void sd_stopN(struct gspca_dev *gspca_dev)

+ 2 - 1
drivers/media/video/gspca/zc3xx.c

@@ -7178,7 +7178,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
 	return 0;
 	return 0;
 }
 }
 
 
-static void sd_start(struct gspca_dev *gspca_dev)
+static int sd_start(struct gspca_dev *gspca_dev)
 {
 {
 	struct sd *sd = (struct sd *) gspca_dev;
 	struct sd *sd = (struct sd *) gspca_dev;
 	struct usb_device *dev = gspca_dev->dev;
 	struct usb_device *dev = gspca_dev->dev;
@@ -7331,6 +7331,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
 		reg_w(dev, 0x02, 0x0008);
 		reg_w(dev, 0x02, 0x0008);
 		break;
 		break;
 	}
 	}
+	return 0;
 }
 }
 
 
 static void sd_stop0(struct gspca_dev *gspca_dev)
 static void sd_stop0(struct gspca_dev *gspca_dev)