47 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
71 .sizeimage = 320 * 240,
81 .sizeimage = 352 * 288,
92 struct sd *
sd = (
struct sd *)gspca_dev;
98 err = pb0100_set_autogain(gspca_dev, ctrl->
val);
103 err = pb0100_set_gain(gspca_dev, ctrls->
gain->val);
106 err = pb0100_set_exposure(gspca_dev, ctrls->
exposure->val);
109 err = pb0100_set_autogain_target(gspca_dev, ctrl->
val);
116 .s_ctrl = pb0100_s_ctrl,
119 static int pb0100_init_controls(
struct sd *sd)
124 .
ops = &pb0100_ctrl_ops,
127 .name =
"Automatic Gain Target",
133 .
ops = &pb0100_ctrl_ops,
136 .name =
"Natural Light Source",
168 static int pb0100_probe(
struct sd *sd)
177 if ((sensor >> 8) != 0x64)
180 pr_info(
"Photobit pb0100 sensor detected\n");
182 sd->
gspca_dev.cam.cam_mode = pb0100_mode;
188 static int pb0100_start(
struct sd *sd)
190 int err, packet_size, max_packet_size;
191 struct usb_host_interface *alt;
200 packet_size =
le16_to_cpu(alt->endpoint[0].desc.wMaxPacketSize);
203 max_packet_size = sd->
sensor->max_packet_size[sd->
gspca_dev.curr_mode];
204 if (packet_size < max_packet_size)
235 PDEBUG(D_STREAM,
"Started stream, status: %d", err);
237 return (err < 0) ? err : 0;
240 static int pb0100_stop(
struct sd *sd)
252 PDEBUG(D_STREAM,
"Halting stream");
254 return (err < 0) ? err : 0;
261 static int pb0100_init(
struct sd *sd)
323 static int pb0100_dump(
struct sd *sd)
328 static int pb0100_set_gain(
struct gspca_dev *gspca_dev,
__s32 val)
331 struct sd *sd = (
struct sd *) gspca_dev;
337 PDEBUG(D_V4L2,
"Set green gain to %d, status: %d", val, err);
340 err = pb0100_set_red_balance(gspca_dev, ctrls->
red->val);
342 err = pb0100_set_blue_balance(gspca_dev, ctrls->
blue->val);
347 static int pb0100_set_red_balance(
struct gspca_dev *gspca_dev,
__s32 val)
350 struct sd *sd = (
struct sd *) gspca_dev;
353 val += ctrls->
gain->val;
360 PDEBUG(D_V4L2,
"Set red gain to %d, status: %d", val, err);
365 static int pb0100_set_blue_balance(
struct gspca_dev *gspca_dev,
__s32 val)
368 struct sd *sd = (
struct sd *) gspca_dev;
371 val += ctrls->
gain->val;
378 PDEBUG(D_V4L2,
"Set blue gain to %d, status: %d", val, err);
383 static int pb0100_set_exposure(
struct gspca_dev *gspca_dev,
__s32 val)
385 struct sd *sd = (
struct sd *) gspca_dev;
389 PDEBUG(D_V4L2,
"Set exposure to %d, status: %d", val, err);
394 static int pb0100_set_autogain(
struct gspca_dev *gspca_dev,
__s32 val)
397 struct sd *sd = (
struct sd *) gspca_dev;
409 PDEBUG(D_V4L2,
"Set autogain to %d (natural: %d), status: %d",
410 val, ctrls->
natural->val, err);
415 static int pb0100_set_autogain_target(
struct gspca_dev *gspca_dev,
__s32 val)
417 int err, totalpixels, brightpixels, darkpixels;
418 struct sd *sd = (
struct sd *) gspca_dev;
422 totalpixels = gspca_dev->
width * gspca_dev->
height;
423 totalpixels = totalpixels/(8*8) + totalpixels/(64*64);
425 brightpixels = (totalpixels *
val) >> 8;
426 darkpixels = totalpixels - brightpixels;
431 PDEBUG(D_V4L2,
"Set autogain target to %d, status: %d", val, err);