30 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
40 .sizeimage = 356 * 292,
55 err = vv6410_set_hflip(gspca_dev, ctrl->
val);
58 err = vv6410_set_vflip(gspca_dev, ctrl->
val);
61 err = vv6410_set_analog_gain(gspca_dev, ctrl->
val);
64 err = vv6410_set_exposure(gspca_dev, ctrl->
val);
71 .s_ctrl = vv6410_s_ctrl,
74 static int vv6410_probe(
struct sd *
sd)
86 pr_info(
"vv6410 sensor detected\n");
93 static int vv6410_init_controls(
struct sd *sd)
109 static int vv6410_init(
struct sd *sd)
121 return (err < 0) ? err : 0;
124 static int vv6410_start(
struct sd *sd)
131 PDEBUG(D_CONF,
"Enabling subsampling");
152 PDEBUG(D_STREAM,
"Starting stream");
157 static int vv6410_stop(
struct sd *sd)
170 PDEBUG(D_STREAM,
"Halting stream");
172 return (err < 0) ? err : 0;
175 static int vv6410_dump(
struct sd *sd)
180 pr_info(
"Dumping all vv6410 sensor registers\n");
181 for (i = 0; i < 0xff && !
err; i++) {
184 pr_info(
"Register 0x%x contained 0x%x\n", i, data);
186 return (err < 0) ? err : 0;
189 static int vv6410_set_hflip(
struct gspca_dev *gspca_dev,
__s32 val)
193 struct sd *sd = (
struct sd *) gspca_dev;
204 PDEBUG(D_V4L2,
"Set horizontal flip to %d", val);
207 return (err < 0) ? err : 0;
210 static int vv6410_set_vflip(
struct gspca_dev *gspca_dev,
__s32 val)
214 struct sd *sd = (
struct sd *) gspca_dev;
225 PDEBUG(D_V4L2,
"Set vertical flip to %d", val);
228 return (err < 0) ? err : 0;
231 static int vv6410_set_analog_gain(
struct gspca_dev *gspca_dev,
__s32 val)
234 struct sd *sd = (
struct sd *) gspca_dev;
236 PDEBUG(D_V4L2,
"Set analog gain to %d", val);
239 return (err < 0) ? err : 0;
242 static int vv6410_set_exposure(
struct gspca_dev *gspca_dev,
__s32 val)
245 struct sd *sd = (
struct sd *) gspca_dev;
246 unsigned int fine, coarse;
248 val = (val * val >> 14) + val / 4;
253 PDEBUG(D_V4L2,
"Set coarse exposure to %d, fine expsure to %d",