Commit 49cb6b04 authored by Jean-Francois Moine's avatar Jean-Francois Moine Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (11715): gspca - main: Set the number of packets per ISOC message.



The number of packets per isochronous message may now be set by the subdrivers
(default value 32).

Signed-off-by: default avatarJean-Francois Moine <moinejf@free.fr>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 59746e13
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -513,9 +513,9 @@ static int create_urbs(struct gspca_dev *gspca_dev,

		/* See paragraph 5.9 / table 5-11 of the usb 2.0 spec. */
		psize = (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
		npkt = ISO_MAX_SIZE / psize;
		if (npkt > ISO_MAX_PKT)
			npkt = ISO_MAX_PKT;
		npkt = gspca_dev->cam.npkt;
		if (npkt == 0)
			npkt = 32;		/* default value */
		bsize = psize * npkt;
		PDEBUG(D_STREAM,
			"isoc %d pkts size %d = bsize:%d",
+2 −2
Original line number Diff line number Diff line
@@ -44,8 +44,6 @@ extern int gspca_debug;
#define GSPCA_MAX_FRAMES 16	/* maximum number of video frame buffers */
/* image transfers */
#define MAX_NURBS 4		/* max number of URBs */
#define ISO_MAX_PKT 32		/* max number of packets in an ISOC transfer */
#define ISO_MAX_SIZE 0x8000	/* max size of one URB buffer (32 Kb) */

/* device information - set at probe time */
struct cam {
@@ -57,6 +55,8 @@ struct cam {
				 * - when 0 and bulk_size != 0 means
				 *   1 URB and submit done by subdriver */
	u8 bulk;		/* image transfer by 0:isoc / 1:bulk */
	u8 npkt;		/* number of packets in an ISOC message
				 * 0 is the default value: 32 packets */
	u32 input_flags;	/* value for ENUM_INPUT status flags */
};

+2 −0
Original line number Diff line number Diff line
@@ -877,6 +877,8 @@ static int sd_config(struct gspca_dev *gspca_dev,
		cam->cam_mode = sif_mode;
		cam->nmodes = ARRAY_SIZE(sif_mode);
	}
	cam->npkt = 36;			/* 36 packets per ISOC message */

	sd->brightness = BRIGHTNESS_DEF;
	sd->gain = GAIN_DEF;
	sd->exposure = EXPOSURE_DEF;
+1 −0
Original line number Diff line number Diff line
@@ -1280,6 +1280,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
	cam = &gspca_dev->cam;
	cam->cam_mode = vga_mode;
	cam->nmodes = ARRAY_SIZE(vga_mode);
	cam->npkt = 24;			/* 24 packets per ISOC message */

	sd->bridge = id->driver_info >> 16;
	sd->sensor = id->driver_info >> 8;
+13 −1
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ struct sd {
	char bridge;
#define BRIDGE_VC0321 0
#define BRIDGE_VC0323 1
	char sensor;
	u8 sensor;
#define SENSOR_HV7131R 0
#define SENSOR_MI0360 1
#define SENSOR_MI1310_SOC 2
@@ -2453,6 +2453,17 @@ static int sd_config(struct gspca_dev *gspca_dev,
	struct usb_device *dev = gspca_dev->dev;
	struct cam *cam;
	int sensor;
	static u8 npkt[] = {	/* number of packets per ISOC message */
		64,		/* HV7131R 0 */
		32,		/* MI0360 1 */
		32,		/* MI1310_SOC 2 */
		64,		/* MI1320 3 */
		128,		/* MI1320_SOC 4 */
		32,		/* OV7660 5 */
		64,		/* OV7670 6 */
		128,		/* PO1200 7 */
		128,		/* PO3130NC 8 */
	};

	cam = &gspca_dev->cam;
	sd->bridge = id->driver_info;
@@ -2515,6 +2526,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
			break;
		}
	}
	cam->npkt = npkt[sd->sensor];

	sd->hflip = HFLIP_DEF;
	sd->vflip = VFLIP_DEF;