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

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
...@@ -513,9 +513,9 @@ static int create_urbs(struct gspca_dev *gspca_dev, ...@@ -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. */ /* See paragraph 5.9 / table 5-11 of the usb 2.0 spec. */
psize = (psize & 0x07ff) * (1 + ((psize >> 11) & 3)); psize = (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
npkt = ISO_MAX_SIZE / psize; npkt = gspca_dev->cam.npkt;
if (npkt > ISO_MAX_PKT) if (npkt == 0)
npkt = ISO_MAX_PKT; npkt = 32; /* default value */
bsize = psize * npkt; bsize = psize * npkt;
PDEBUG(D_STREAM, PDEBUG(D_STREAM,
"isoc %d pkts size %d = bsize:%d", "isoc %d pkts size %d = bsize:%d",
......
...@@ -44,8 +44,6 @@ extern int gspca_debug; ...@@ -44,8 +44,6 @@ extern int gspca_debug;
#define GSPCA_MAX_FRAMES 16 /* maximum number of video frame buffers */ #define GSPCA_MAX_FRAMES 16 /* maximum number of video frame buffers */
/* image transfers */ /* image transfers */
#define MAX_NURBS 4 /* max number of URBs */ #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 */ /* device information - set at probe time */
struct cam { struct cam {
...@@ -57,6 +55,8 @@ struct cam { ...@@ -57,6 +55,8 @@ struct cam {
* - when 0 and bulk_size != 0 means * - when 0 and bulk_size != 0 means
* 1 URB and submit done by subdriver */ * 1 URB and submit done by subdriver */
u8 bulk; /* image transfer by 0:isoc / 1:bulk */ 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 */ u32 input_flags; /* value for ENUM_INPUT status flags */
}; };
......
...@@ -877,6 +877,8 @@ static int sd_config(struct gspca_dev *gspca_dev, ...@@ -877,6 +877,8 @@ static int sd_config(struct gspca_dev *gspca_dev,
cam->cam_mode = sif_mode; cam->cam_mode = sif_mode;
cam->nmodes = ARRAY_SIZE(sif_mode); cam->nmodes = ARRAY_SIZE(sif_mode);
} }
cam->npkt = 36; /* 36 packets per ISOC message */
sd->brightness = BRIGHTNESS_DEF; sd->brightness = BRIGHTNESS_DEF;
sd->gain = GAIN_DEF; sd->gain = GAIN_DEF;
sd->exposure = EXPOSURE_DEF; sd->exposure = EXPOSURE_DEF;
......
...@@ -1280,6 +1280,7 @@ static int sd_config(struct gspca_dev *gspca_dev, ...@@ -1280,6 +1280,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
cam = &gspca_dev->cam; cam = &gspca_dev->cam;
cam->cam_mode = vga_mode; cam->cam_mode = vga_mode;
cam->nmodes = ARRAY_SIZE(vga_mode); cam->nmodes = ARRAY_SIZE(vga_mode);
cam->npkt = 24; /* 24 packets per ISOC message */
sd->bridge = id->driver_info >> 16; sd->bridge = id->driver_info >> 16;
sd->sensor = id->driver_info >> 8; sd->sensor = id->driver_info >> 8;
......
...@@ -42,7 +42,7 @@ struct sd { ...@@ -42,7 +42,7 @@ struct sd {
char bridge; char bridge;
#define BRIDGE_VC0321 0 #define BRIDGE_VC0321 0
#define BRIDGE_VC0323 1 #define BRIDGE_VC0323 1
char sensor; u8 sensor;
#define SENSOR_HV7131R 0 #define SENSOR_HV7131R 0
#define SENSOR_MI0360 1 #define SENSOR_MI0360 1
#define SENSOR_MI1310_SOC 2 #define SENSOR_MI1310_SOC 2
...@@ -2453,6 +2453,17 @@ static int sd_config(struct gspca_dev *gspca_dev, ...@@ -2453,6 +2453,17 @@ static int sd_config(struct gspca_dev *gspca_dev,
struct usb_device *dev = gspca_dev->dev; struct usb_device *dev = gspca_dev->dev;
struct cam *cam; struct cam *cam;
int sensor; 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; cam = &gspca_dev->cam;
sd->bridge = id->driver_info; sd->bridge = id->driver_info;
...@@ -2515,6 +2526,7 @@ static int sd_config(struct gspca_dev *gspca_dev, ...@@ -2515,6 +2526,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
break; break;
} }
} }
cam->npkt = npkt[sd->sensor];
sd->hflip = HFLIP_DEF; sd->hflip = HFLIP_DEF;
sd->vflip = VFLIP_DEF; sd->vflip = VFLIP_DEF;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment