33
33
struct gspca_dev gspca_dev; /* !! must be the first item */
35
__u8 packet[ISO_MAX_SIZE + 128];
36
/* !! no more than 128 ff in an ISO packet */
38
35
unsigned char brightness;
39
36
unsigned char contrast;
40
37
unsigned char colors;
41
38
unsigned char autogain;
40
#define QUALITY_MIN 70
41
#define QUALITY_MAX 95
42
#define QUALITY_DEF 85
45
45
#define BRIDGE_SPCA504 0
46
46
#define BRIDGE_SPCA504B 1
850
851
cam->nmodes = sizeof vga_mode2 / sizeof vga_mode2[0];
853
sd->qindex = 5; /* set the quantization table */
854
854
sd->brightness = sd_ctrls[SD_BRIGHTNESS].qctrl.default_value;
855
855
sd->contrast = sd_ctrls[SD_CONTRAST].qctrl.default_value;
856
856
sd->colors = sd_ctrls[SD_COLOR].qctrl.default_value;
857
sd->quality = QUALITY_DEF;
974
/* create the JPEG header */
975
sd->jpeg_hdr = kmalloc(JPEG_HDR_SZ, GFP_KERNEL);
976
jpeg_define(sd->jpeg_hdr, gspca_dev->height, gspca_dev->width,
977
0x22); /* JPEG 411 */
978
jpeg_set_qual(sd->jpeg_hdr, sd->quality);
973
980
if (sd->bridge == BRIDGE_SPCA504B)
974
981
spca504B_setQtable(gspca_dev);
975
982
spca504B_SetSizeType(gspca_dev);
1089
static void sd_stop0(struct gspca_dev *gspca_dev)
1091
struct sd *sd = (struct sd *) gspca_dev;
1093
kfree(sd->jpeg_hdr);
1082
1096
static void sd_pkt_scan(struct gspca_dev *gspca_dev,
1083
1097
struct gspca_frame *frame, /* target */
1084
1098
__u8 *data, /* isoc packet */
1157
1170
/* put the JPEG header in the new frame */
1158
jpeg_put_header(gspca_dev, frame,
1159
((struct sd *) gspca_dev)->qindex,
1171
gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
1172
sd->jpeg_hdr, JPEG_HDR_SZ);
1163
1175
/* add 0x00 after 0xff */
1164
for (i = len; --i >= 0; )
1165
if (data[i] == 0xff)
1167
if (i < 0) { /* no 0xff */
1168
gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
1173
for (i = 0; i < len; i++) {
1178
gspca_frame_add(gspca_dev, INTER_PACKET, frame,
1179
sd->packet, d - sd->packet);
1178
if (data[i] == 0xff) {
1179
gspca_frame_add(gspca_dev, INTER_PACKET, frame,
1188
gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
1182
1191
static void setbrightness(struct gspca_dev *gspca_dev)
1201
static void getbrightness(struct gspca_dev *gspca_dev)
1203
struct sd *sd = (struct sd *) gspca_dev;
1204
__u16 brightness = 0;
1206
switch (sd->bridge) {
1208
/* case BRIDGE_SPCA533: */
1209
/* case BRIDGE_SPCA504B: */
1210
/* case BRIDGE_SPCA504: */
1211
/* case BRIDGE_SPCA504C: */
1212
brightness = reg_r_12(gspca_dev, 0x00, 0x21a7, 2);
1214
case BRIDGE_SPCA536:
1215
brightness = reg_r_12(gspca_dev, 0x00, 0x20f0, 2);
1218
sd->brightness = ((brightness & 0xff) - 128) % 255;
1221
1210
static void setcontrast(struct gspca_dev *gspca_dev)
1223
1212
struct sd *sd = (struct sd *) gspca_dev;
1240
static void getcontrast(struct gspca_dev *gspca_dev)
1242
struct sd *sd = (struct sd *) gspca_dev;
1244
switch (sd->bridge) {
1246
/* case BRIDGE_SPCA533: */
1247
/* case BRIDGE_SPCA504B: */
1248
/* case BRIDGE_SPCA504: */
1249
/* case BRIDGE_SPCA504C: */
1250
sd->contrast = reg_r_12(gspca_dev, 0x00, 0x21a8, 2);
1252
case BRIDGE_SPCA536:
1253
sd->contrast = reg_r_12(gspca_dev, 0x00, 0x20f1, 2);
1258
1229
static void setcolors(struct gspca_dev *gspca_dev)
1260
1231
struct sd *sd = (struct sd *) gspca_dev;
1277
static void getcolors(struct gspca_dev *gspca_dev)
1279
struct sd *sd = (struct sd *) gspca_dev;
1281
switch (sd->bridge) {
1283
/* case BRIDGE_SPCA533: */
1284
/* case BRIDGE_SPCA504B: */
1285
/* case BRIDGE_SPCA504: */
1286
/* case BRIDGE_SPCA504C: */
1287
sd->colors = reg_r_12(gspca_dev, 0x00, 0x21ae, 2) >> 1;
1289
case BRIDGE_SPCA536:
1290
sd->colors = reg_r_12(gspca_dev, 0x00, 0x20f6, 2) >> 1;
1295
1248
static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val)
1297
1250
struct sd *sd = (struct sd *) gspca_dev;
1318
static int sd_set_jcomp(struct gspca_dev *gspca_dev,
1319
struct v4l2_jpegcompression *jcomp)
1321
struct sd *sd = (struct sd *) gspca_dev;
1323
if (jcomp->quality < QUALITY_MIN)
1324
sd->quality = QUALITY_MIN;
1325
else if (jcomp->quality > QUALITY_MAX)
1326
sd->quality = QUALITY_MAX;
1328
sd->quality = jcomp->quality;
1329
if (gspca_dev->streaming)
1330
jpeg_set_qual(sd->jpeg_hdr, sd->quality);
1334
static int sd_get_jcomp(struct gspca_dev *gspca_dev,
1335
struct v4l2_jpegcompression *jcomp)
1337
struct sd *sd = (struct sd *) gspca_dev;
1339
memset(jcomp, 0, sizeof *jcomp);
1340
jcomp->quality = sd->quality;
1341
jcomp->jpeg_markers = V4L2_JPEG_MARKER_DHT
1342
| V4L2_JPEG_MARKER_DQT;
1368
1346
/* sub-driver description */
1369
1347
static const struct sd_desc sd_desc = {
1370
1348
.name = MODULE_NAME,
1465
1446
/* -- module insert / remove -- */
1466
1447
static int __init sd_mod_init(void)
1468
if (usb_register(&sd_driver) < 0)
1450
ret = usb_register(&sd_driver);
1470
1453
PDEBUG(D_PROBE, "registered");