Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d4015493 authored by Jean-François Moine's avatar Jean-François Moine Committed by Mauro Carvalho Chehab
Browse files

[media] gspca - mars: Propagate USB errors to higher level

parent e3b4d2c6
Loading
Loading
Loading
Loading
+18 −34
Original line number Diff line number Diff line
@@ -133,21 +133,25 @@ static const __u8 mi_data[0x20] = {
};

/* write <len> bytes from gspca_dev->usb_buf */
static int reg_w(struct gspca_dev *gspca_dev,
static void reg_w(struct gspca_dev *gspca_dev,
		 int len)
{
	int alen, ret;

	if (gspca_dev->usb_err < 0)
		return;

	ret = usb_bulk_msg(gspca_dev->dev,
			usb_sndbulkpipe(gspca_dev->dev, 4),
			gspca_dev->usb_buf,
			len,
			&alen,
			500);	/* timeout in milliseconds */
	if (ret < 0)
	if (ret < 0) {
		err("reg write [%02x] error %d",
			gspca_dev->usb_buf[0], ret);
	return ret;
		gspca_dev->usb_err = ret;
	}
}

static void mi_w(struct gspca_dev *gspca_dev,
@@ -226,7 +230,6 @@ 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;
	int err_code;
	u8 *data;
	int i;

@@ -239,9 +242,7 @@ static int sd_start(struct gspca_dev *gspca_dev)

	data[0] = 0x01;		/* address */
	data[1] = 0x01;
	err_code = reg_w(gspca_dev, 2);
	if (err_code < 0)
		return err_code;
	reg_w(gspca_dev, 2);

	/*
	   Initialize the MR97113 chip register
@@ -263,16 +264,12 @@ static int sd_start(struct gspca_dev *gspca_dev)
/*jfm: from win trace*/
	data[10] = 0x18;

	err_code = reg_w(gspca_dev, 11);
	if (err_code < 0)
		return err_code;
	reg_w(gspca_dev, 11);

	data[0] = 0x23;		/* address */
	data[1] = 0x09;		/* reg 35, append frame header */

	err_code = reg_w(gspca_dev, 2);
	if (err_code < 0)
		return err_code;
	reg_w(gspca_dev, 2);

	data[0] = 0x3c;		/* address */
/*	if (gspca_dev->width == 1280) */
@@ -281,9 +278,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
/*	else */
	data[1] = 50;		/* 50 reg 60, pc-cam frame size
				 *	(unit: 4KB) 200KB */
	err_code = reg_w(gspca_dev, 2);
	if (err_code < 0)
		return err_code;
	reg_w(gspca_dev, 2);

	/* auto dark-gain */
	data[0] = 0x5e;		/* address */
@@ -297,32 +292,24 @@ static int sd_start(struct gspca_dev *gspca_dev)
	data[4] = sd->ctrls[BRIGHTNESS].val; /* reg 0x61 = brightness */
	data[5] = 0x00;

	err_code = reg_w(gspca_dev, 6);
	if (err_code < 0)
		return err_code;
	reg_w(gspca_dev, 6);

	data[0] = 0x67;
/*jfm: from win trace*/
	data[1] = sd->ctrls[SHARPNESS].val * 4 + 3;
	data[2] = 0x14;
	err_code = reg_w(gspca_dev, 3);
	if (err_code < 0)
		return err_code;
	reg_w(gspca_dev, 3);

	data[0] = 0x69;
	data[1] = 0x2f;
	data[2] = 0x28;
	data[3] = 0x42;
	err_code = reg_w(gspca_dev, 4);
	if (err_code < 0)
		return err_code;
	reg_w(gspca_dev, 4);

	data[0] = 0x63;
	data[1] = 0x07;
	err_code = reg_w(gspca_dev, 2);
	reg_w(gspca_dev, 2);
/*jfm: win trace - many writes here to reg 0x64*/
	if (err_code < 0)
		return err_code;

	/* initialize the MI sensor */
	for (i = 0; i < sizeof mi_data; i++)
@@ -331,18 +318,15 @@ static int sd_start(struct gspca_dev *gspca_dev)
	data[0] = 0x00;
	data[1] = 0x4d;		/* ISOC transfering enable... */
	reg_w(gspca_dev, 2);
	return 0;

	return gspca_dev->usb_err;
}

static void sd_stopN(struct gspca_dev *gspca_dev)
{
	int result;

	gspca_dev->usb_buf[0] = 1;
	gspca_dev->usb_buf[1] = 0;
	result = reg_w(gspca_dev, 2);
	if (result < 0)
		PDEBUG(D_ERR, "Camera Stop failed");
	reg_w(gspca_dev, 2);
}

static void sd_pkt_scan(struct gspca_dev *gspca_dev,