diff options
Diffstat (limited to 'drivers/media/video/et61x251')
-rw-r--r-- | drivers/media/video/et61x251/et61x251.h | 8 | ||||
-rw-r--r-- | drivers/media/video/et61x251/et61x251_core.c | 210 | ||||
-rw-r--r-- | drivers/media/video/et61x251/et61x251_sensor.h | 20 | ||||
-rw-r--r-- | drivers/media/video/et61x251/et61x251_tas5130d1b.c | 10 |
4 files changed, 124 insertions, 124 deletions
diff --git a/drivers/media/video/et61x251/et61x251.h b/drivers/media/video/et61x251/et61x251.h index eee8afc9be72..2e5ca4032489 100644 --- a/drivers/media/video/et61x251/et61x251.h +++ b/drivers/media/video/et61x251/et61x251.h | |||
@@ -180,7 +180,7 @@ et61x251_match_id(struct et61x251_device* cam, const struct usb_device_id *id) | |||
180 | 180 | ||
181 | void | 181 | void |
182 | et61x251_attach_sensor(struct et61x251_device* cam, | 182 | et61x251_attach_sensor(struct et61x251_device* cam, |
183 | struct et61x251_sensor* sensor) | 183 | struct et61x251_sensor* sensor) |
184 | { | 184 | { |
185 | memcpy(&cam->sensor, sensor, sizeof(struct et61x251_sensor)); | 185 | memcpy(&cam->sensor, sensor, sizeof(struct et61x251_sensor)); |
186 | } | 186 | } |
@@ -199,7 +199,7 @@ do { \ | |||
199 | dev_info(&cam->usbdev->dev, fmt "\n", ## args); \ | 199 | dev_info(&cam->usbdev->dev, fmt "\n", ## args); \ |
200 | else if ((level) >= 3) \ | 200 | else if ((level) >= 3) \ |
201 | dev_info(&cam->usbdev->dev, "[%s:%d] " fmt "\n", \ | 201 | dev_info(&cam->usbdev->dev, "[%s:%d] " fmt "\n", \ |
202 | __FUNCTION__, __LINE__ , ## args); \ | 202 | __FUNCTION__, __LINE__ , ## args); \ |
203 | } \ | 203 | } \ |
204 | } while (0) | 204 | } while (0) |
205 | # define KDBG(level, fmt, args...) \ | 205 | # define KDBG(level, fmt, args...) \ |
@@ -209,7 +209,7 @@ do { \ | |||
209 | pr_info("et61x251: " fmt "\n", ## args); \ | 209 | pr_info("et61x251: " fmt "\n", ## args); \ |
210 | else if ((level) == 3) \ | 210 | else if ((level) == 3) \ |
211 | pr_debug("et61x251: [%s:%d] " fmt "\n", __FUNCTION__, \ | 211 | pr_debug("et61x251: [%s:%d] " fmt "\n", __FUNCTION__, \ |
212 | __LINE__ , ## args); \ | 212 | __LINE__ , ## args); \ |
213 | } \ | 213 | } \ |
214 | } while (0) | 214 | } while (0) |
215 | # define V4LDBG(level, name, cmd) \ | 215 | # define V4LDBG(level, name, cmd) \ |
@@ -226,7 +226,7 @@ do { \ | |||
226 | #undef PDBG | 226 | #undef PDBG |
227 | #define PDBG(fmt, args...) \ | 227 | #define PDBG(fmt, args...) \ |
228 | dev_info(&cam->usbdev->dev, "[%s:%d] " fmt "\n", \ | 228 | dev_info(&cam->usbdev->dev, "[%s:%d] " fmt "\n", \ |
229 | __FUNCTION__, __LINE__ , ## args) | 229 | __FUNCTION__, __LINE__ , ## args) |
230 | 230 | ||
231 | #undef PDBGG | 231 | #undef PDBGG |
232 | #define PDBGG(fmt, args...) do {;} while(0) /* placeholder */ | 232 | #define PDBGG(fmt, args...) do {;} while(0) /* placeholder */ |
diff --git a/drivers/media/video/et61x251/et61x251_core.c b/drivers/media/video/et61x251/et61x251_core.c index 7cc01b828b3d..dfc9dd732c9d 100644 --- a/drivers/media/video/et61x251/et61x251_core.c +++ b/drivers/media/video/et61x251/et61x251_core.c | |||
@@ -44,7 +44,7 @@ | |||
44 | /*****************************************************************************/ | 44 | /*****************************************************************************/ |
45 | 45 | ||
46 | #define ET61X251_MODULE_NAME "V4L2 driver for ET61X[12]51 " \ | 46 | #define ET61X251_MODULE_NAME "V4L2 driver for ET61X[12]51 " \ |
47 | "PC Camera Controllers" | 47 | "PC Camera Controllers" |
48 | #define ET61X251_MODULE_AUTHOR "(C) 2006 Luca Risolia" | 48 | #define ET61X251_MODULE_AUTHOR "(C) 2006 Luca Risolia" |
49 | #define ET61X251_AUTHOR_EMAIL "<luca.risolia@studio.unibo.it>" | 49 | #define ET61X251_AUTHOR_EMAIL "<luca.risolia@studio.unibo.it>" |
50 | #define ET61X251_MODULE_LICENSE "GPL" | 50 | #define ET61X251_MODULE_LICENSE "GPL" |
@@ -63,68 +63,68 @@ MODULE_LICENSE(ET61X251_MODULE_LICENSE); | |||
63 | static short video_nr[] = {[0 ... ET61X251_MAX_DEVICES-1] = -1}; | 63 | static short video_nr[] = {[0 ... ET61X251_MAX_DEVICES-1] = -1}; |
64 | module_param_array(video_nr, short, NULL, 0444); | 64 | module_param_array(video_nr, short, NULL, 0444); |
65 | MODULE_PARM_DESC(video_nr, | 65 | MODULE_PARM_DESC(video_nr, |
66 | "\n<-1|n[,...]> Specify V4L2 minor mode number." | 66 | "\n<-1|n[,...]> Specify V4L2 minor mode number." |
67 | "\n -1 = use next available (default)" | 67 | "\n -1 = use next available (default)" |
68 | "\n n = use minor number n (integer >= 0)" | 68 | "\n n = use minor number n (integer >= 0)" |
69 | "\nYou can specify up to " | 69 | "\nYou can specify up to " |
70 | __MODULE_STRING(ET61X251_MAX_DEVICES) " cameras this way." | 70 | __MODULE_STRING(ET61X251_MAX_DEVICES) " cameras this way." |
71 | "\nFor example:" | 71 | "\nFor example:" |
72 | "\nvideo_nr=-1,2,-1 would assign minor number 2 to" | 72 | "\nvideo_nr=-1,2,-1 would assign minor number 2 to" |
73 | "\nthe second registered camera and use auto for the first" | 73 | "\nthe second registered camera and use auto for the first" |
74 | "\none and for every other camera." | 74 | "\none and for every other camera." |
75 | "\n"); | 75 | "\n"); |
76 | 76 | ||
77 | static short force_munmap[] = {[0 ... ET61X251_MAX_DEVICES-1] = | 77 | static short force_munmap[] = {[0 ... ET61X251_MAX_DEVICES-1] = |
78 | ET61X251_FORCE_MUNMAP}; | 78 | ET61X251_FORCE_MUNMAP}; |
79 | module_param_array(force_munmap, bool, NULL, 0444); | 79 | module_param_array(force_munmap, bool, NULL, 0444); |
80 | MODULE_PARM_DESC(force_munmap, | 80 | MODULE_PARM_DESC(force_munmap, |
81 | "\n<0|1[,...]> Force the application to unmap previously" | 81 | "\n<0|1[,...]> Force the application to unmap previously" |
82 | "\nmapped buffer memory before calling any VIDIOC_S_CROP or" | 82 | "\nmapped buffer memory before calling any VIDIOC_S_CROP or" |
83 | "\nVIDIOC_S_FMT ioctl's. Not all the applications support" | 83 | "\nVIDIOC_S_FMT ioctl's. Not all the applications support" |
84 | "\nthis feature. This parameter is specific for each" | 84 | "\nthis feature. This parameter is specific for each" |
85 | "\ndetected camera." | 85 | "\ndetected camera." |
86 | "\n 0 = do not force memory unmapping" | 86 | "\n 0 = do not force memory unmapping" |
87 | "\n 1 = force memory unmapping (save memory)" | 87 | "\n 1 = force memory unmapping (save memory)" |
88 | "\nDefault value is "__MODULE_STRING(SN9C102_FORCE_MUNMAP)"." | 88 | "\nDefault value is "__MODULE_STRING(SN9C102_FORCE_MUNMAP)"." |
89 | "\n"); | 89 | "\n"); |
90 | 90 | ||
91 | static unsigned int frame_timeout[] = {[0 ... ET61X251_MAX_DEVICES-1] = | 91 | static unsigned int frame_timeout[] = {[0 ... ET61X251_MAX_DEVICES-1] = |
92 | ET61X251_FRAME_TIMEOUT}; | 92 | ET61X251_FRAME_TIMEOUT}; |
93 | module_param_array(frame_timeout, uint, NULL, 0644); | 93 | module_param_array(frame_timeout, uint, NULL, 0644); |
94 | MODULE_PARM_DESC(frame_timeout, | 94 | MODULE_PARM_DESC(frame_timeout, |
95 | "\n<n[,...]> Timeout for a video frame in seconds." | 95 | "\n<n[,...]> Timeout for a video frame in seconds." |
96 | "\nThis parameter is specific for each detected camera." | 96 | "\nThis parameter is specific for each detected camera." |
97 | "\nDefault value is " | 97 | "\nDefault value is " |
98 | __MODULE_STRING(ET61X251_FRAME_TIMEOUT)"." | 98 | __MODULE_STRING(ET61X251_FRAME_TIMEOUT)"." |
99 | "\n"); | 99 | "\n"); |
100 | 100 | ||
101 | #ifdef ET61X251_DEBUG | 101 | #ifdef ET61X251_DEBUG |
102 | static unsigned short debug = ET61X251_DEBUG_LEVEL; | 102 | static unsigned short debug = ET61X251_DEBUG_LEVEL; |
103 | module_param(debug, ushort, 0644); | 103 | module_param(debug, ushort, 0644); |
104 | MODULE_PARM_DESC(debug, | 104 | MODULE_PARM_DESC(debug, |
105 | "\n<n> Debugging information level, from 0 to 3:" | 105 | "\n<n> Debugging information level, from 0 to 3:" |
106 | "\n0 = none (use carefully)" | 106 | "\n0 = none (use carefully)" |
107 | "\n1 = critical errors" | 107 | "\n1 = critical errors" |
108 | "\n2 = significant informations" | 108 | "\n2 = significant informations" |
109 | "\n3 = more verbose messages" | 109 | "\n3 = more verbose messages" |
110 | "\nLevel 3 is useful for testing only, when only " | 110 | "\nLevel 3 is useful for testing only, when only " |
111 | "one device is used." | 111 | "one device is used." |
112 | "\nDefault value is "__MODULE_STRING(ET61X251_DEBUG_LEVEL)"." | 112 | "\nDefault value is "__MODULE_STRING(ET61X251_DEBUG_LEVEL)"." |
113 | "\n"); | 113 | "\n"); |
114 | #endif | 114 | #endif |
115 | 115 | ||
116 | /*****************************************************************************/ | 116 | /*****************************************************************************/ |
117 | 117 | ||
118 | static u32 | 118 | static u32 |
119 | et61x251_request_buffers(struct et61x251_device* cam, u32 count, | 119 | et61x251_request_buffers(struct et61x251_device* cam, u32 count, |
120 | enum et61x251_io_method io) | 120 | enum et61x251_io_method io) |
121 | { | 121 | { |
122 | struct v4l2_pix_format* p = &(cam->sensor.pix_format); | 122 | struct v4l2_pix_format* p = &(cam->sensor.pix_format); |
123 | struct v4l2_rect* r = &(cam->sensor.cropcap.bounds); | 123 | struct v4l2_rect* r = &(cam->sensor.cropcap.bounds); |
124 | const size_t imagesize = cam->module_param.force_munmap || | 124 | const size_t imagesize = cam->module_param.force_munmap || |
125 | io == IO_READ ? | 125 | io == IO_READ ? |
126 | (p->width * p->height * p->priv) / 8 : | 126 | (p->width * p->height * p->priv) / 8 : |
127 | (r->width * r->height * p->priv) / 8; | 127 | (r->width * r->height * p->priv) / 8; |
128 | void* buff = NULL; | 128 | void* buff = NULL; |
129 | u32 i; | 129 | u32 i; |
130 | 130 | ||
@@ -216,7 +216,7 @@ int et61x251_write_reg(struct et61x251_device* cam, u8 value, u16 index) | |||
216 | *buff = value; | 216 | *buff = value; |
217 | 217 | ||
218 | res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41, | 218 | res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41, |
219 | 0, index, buff, 1, ET61X251_CTRL_TIMEOUT); | 219 | 0, index, buff, 1, ET61X251_CTRL_TIMEOUT); |
220 | if (res < 0) { | 220 | if (res < 0) { |
221 | DBG(3, "Failed to write a register (value 0x%02X, index " | 221 | DBG(3, "Failed to write a register (value 0x%02X, index " |
222 | "0x%02X, error %d)", value, index, res); | 222 | "0x%02X, error %d)", value, index, res); |
@@ -234,7 +234,7 @@ int et61x251_read_reg(struct et61x251_device* cam, u16 index) | |||
234 | int res; | 234 | int res; |
235 | 235 | ||
236 | res = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0x00, 0xc1, | 236 | res = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0x00, 0xc1, |
237 | 0, index, buff, 1, ET61X251_CTRL_TIMEOUT); | 237 | 0, index, buff, 1, ET61X251_CTRL_TIMEOUT); |
238 | if (res < 0) | 238 | if (res < 0) |
239 | DBG(3, "Failed to read a register (index 0x%02X, error %d)", | 239 | DBG(3, "Failed to read a register (index 0x%02X, error %d)", |
240 | index, res); | 240 | index, res); |
@@ -269,7 +269,7 @@ et61x251_i2c_wait(struct et61x251_device* cam, struct et61x251_sensor* sensor) | |||
269 | 269 | ||
270 | int | 270 | int |
271 | et61x251_i2c_try_read(struct et61x251_device* cam, | 271 | et61x251_i2c_try_read(struct et61x251_device* cam, |
272 | struct et61x251_sensor* sensor, u8 address) | 272 | struct et61x251_sensor* sensor, u8 address) |
273 | { | 273 | { |
274 | struct usb_device* udev = cam->usbdev; | 274 | struct usb_device* udev = cam->usbdev; |
275 | u8* data = cam->control_buffer; | 275 | u8* data = cam->control_buffer; |
@@ -280,14 +280,14 @@ et61x251_i2c_try_read(struct et61x251_device* cam, | |||
280 | data[2] = cam->sensor.rsta | 0x10; | 280 | data[2] = cam->sensor.rsta | 0x10; |
281 | data[3] = !(et61x251_read_reg(cam, 0x8b) & 0x02); | 281 | data[3] = !(et61x251_read_reg(cam, 0x8b) & 0x02); |
282 | res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41, | 282 | res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41, |
283 | 0, 0x88, data, 4, ET61X251_CTRL_TIMEOUT); | 283 | 0, 0x88, data, 4, ET61X251_CTRL_TIMEOUT); |
284 | if (res < 0) | 284 | if (res < 0) |
285 | err += res; | 285 | err += res; |
286 | 286 | ||
287 | err += et61x251_i2c_wait(cam, sensor); | 287 | err += et61x251_i2c_wait(cam, sensor); |
288 | 288 | ||
289 | res = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0x00, 0xc1, | 289 | res = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 0x00, 0xc1, |
290 | 0, 0x80, data, 8, ET61X251_CTRL_TIMEOUT); | 290 | 0, 0x80, data, 8, ET61X251_CTRL_TIMEOUT); |
291 | if (res < 0) | 291 | if (res < 0) |
292 | err += res; | 292 | err += res; |
293 | 293 | ||
@@ -302,7 +302,7 @@ et61x251_i2c_try_read(struct et61x251_device* cam, | |||
302 | 302 | ||
303 | int | 303 | int |
304 | et61x251_i2c_try_write(struct et61x251_device* cam, | 304 | et61x251_i2c_try_write(struct et61x251_device* cam, |
305 | struct et61x251_sensor* sensor, u8 address, u8 value) | 305 | struct et61x251_sensor* sensor, u8 address, u8 value) |
306 | { | 306 | { |
307 | struct usb_device* udev = cam->usbdev; | 307 | struct usb_device* udev = cam->usbdev; |
308 | u8* data = cam->control_buffer; | 308 | u8* data = cam->control_buffer; |
@@ -312,13 +312,13 @@ et61x251_i2c_try_write(struct et61x251_device* cam, | |||
312 | data[1] = cam->sensor.i2c_slave_id; | 312 | data[1] = cam->sensor.i2c_slave_id; |
313 | data[2] = cam->sensor.rsta | 0x12; | 313 | data[2] = cam->sensor.rsta | 0x12; |
314 | res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41, | 314 | res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41, |
315 | 0, 0x88, data, 3, ET61X251_CTRL_TIMEOUT); | 315 | 0, 0x88, data, 3, ET61X251_CTRL_TIMEOUT); |
316 | if (res < 0) | 316 | if (res < 0) |
317 | err += res; | 317 | err += res; |
318 | 318 | ||
319 | data[0] = value; | 319 | data[0] = value; |
320 | res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41, | 320 | res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41, |
321 | 0, 0x80, data, 1, ET61X251_CTRL_TIMEOUT); | 321 | 0, 0x80, data, 1, ET61X251_CTRL_TIMEOUT); |
322 | if (res < 0) | 322 | if (res < 0) |
323 | err += res; | 323 | err += res; |
324 | 324 | ||
@@ -335,8 +335,8 @@ et61x251_i2c_try_write(struct et61x251_device* cam, | |||
335 | 335 | ||
336 | int | 336 | int |
337 | et61x251_i2c_raw_write(struct et61x251_device* cam, u8 n, u8 data1, u8 data2, | 337 | et61x251_i2c_raw_write(struct et61x251_device* cam, u8 n, u8 data1, u8 data2, |
338 | u8 data3, u8 data4, u8 data5, u8 data6, u8 data7, | 338 | u8 data3, u8 data4, u8 data5, u8 data6, u8 data7, |
339 | u8 data8, u8 address) | 339 | u8 data8, u8 address) |
340 | { | 340 | { |
341 | struct usb_device* udev = cam->usbdev; | 341 | struct usb_device* udev = cam->usbdev; |
342 | u8* data = cam->control_buffer; | 342 | u8* data = cam->control_buffer; |
@@ -350,7 +350,7 @@ et61x251_i2c_raw_write(struct et61x251_device* cam, u8 n, u8 data1, u8 data2, | |||
350 | data[5] = data7; | 350 | data[5] = data7; |
351 | data[6] = data8; | 351 | data[6] = data8; |
352 | res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41, | 352 | res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41, |
353 | 0, 0x81, data, n-1, ET61X251_CTRL_TIMEOUT); | 353 | 0, 0x81, data, n-1, ET61X251_CTRL_TIMEOUT); |
354 | if (res < 0) | 354 | if (res < 0) |
355 | err += res; | 355 | err += res; |
356 | 356 | ||
@@ -358,14 +358,14 @@ et61x251_i2c_raw_write(struct et61x251_device* cam, u8 n, u8 data1, u8 data2, | |||
358 | data[1] = cam->sensor.i2c_slave_id; | 358 | data[1] = cam->sensor.i2c_slave_id; |
359 | data[2] = cam->sensor.rsta | 0x02 | (n << 4); | 359 | data[2] = cam->sensor.rsta | 0x02 | (n << 4); |
360 | res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41, | 360 | res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41, |
361 | 0, 0x88, data, 3, ET61X251_CTRL_TIMEOUT); | 361 | 0, 0x88, data, 3, ET61X251_CTRL_TIMEOUT); |
362 | if (res < 0) | 362 | if (res < 0) |
363 | err += res; | 363 | err += res; |
364 | 364 | ||
365 | /* Start writing through the serial interface */ | 365 | /* Start writing through the serial interface */ |
366 | data[0] = data1; | 366 | data[0] = data1; |
367 | res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41, | 367 | res = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x00, 0x41, |
368 | 0, 0x80, data, 1, ET61X251_CTRL_TIMEOUT); | 368 | 0, 0x80, data, 1, ET61X251_CTRL_TIMEOUT); |
369 | if (res < 0) | 369 | if (res < 0) |
370 | err += res; | 370 | err += res; |
371 | 371 | ||
@@ -432,11 +432,11 @@ static void et61x251_urb_complete(struct urb *urb, struct pt_regs* regs) | |||
432 | 432 | ||
433 | if (!(*f)) | 433 | if (!(*f)) |
434 | (*f) = list_entry(cam->inqueue.next, struct et61x251_frame_t, | 434 | (*f) = list_entry(cam->inqueue.next, struct et61x251_frame_t, |
435 | frame); | 435 | frame); |
436 | 436 | ||
437 | imagesize = (cam->sensor.pix_format.width * | 437 | imagesize = (cam->sensor.pix_format.width * |
438 | cam->sensor.pix_format.height * | 438 | cam->sensor.pix_format.height * |
439 | cam->sensor.pix_format.priv) / 8; | 439 | cam->sensor.pix_format.priv) / 8; |
440 | 440 | ||
441 | for (i = 0; i < urb->number_of_packets; i++) { | 441 | for (i = 0; i < urb->number_of_packets; i++) { |
442 | unsigned int len, status; | 442 | unsigned int len, status; |
@@ -476,7 +476,7 @@ start_of_frame: | |||
476 | if ((*f)->state == F_GRABBING) { | 476 | if ((*f)->state == F_GRABBING) { |
477 | if (sof && (*f)->buf.bytesused) { | 477 | if (sof && (*f)->buf.bytesused) { |
478 | if (cam->sensor.pix_format.pixelformat == | 478 | if (cam->sensor.pix_format.pixelformat == |
479 | V4L2_PIX_FMT_ET61X251) | 479 | V4L2_PIX_FMT_ET61X251) |
480 | goto end_of_frame; | 480 | goto end_of_frame; |
481 | else { | 481 | else { |
482 | DBG(3, "Not expected SOF detected " | 482 | DBG(3, "Not expected SOF detected " |
@@ -508,8 +508,8 @@ end_of_frame: | |||
508 | list_move_tail(&(*f)->frame, &cam->outqueue); | 508 | list_move_tail(&(*f)->frame, &cam->outqueue); |
509 | if (!list_empty(&cam->inqueue)) | 509 | if (!list_empty(&cam->inqueue)) |
510 | (*f) = list_entry(cam->inqueue.next, | 510 | (*f) = list_entry(cam->inqueue.next, |
511 | struct et61x251_frame_t, | 511 | struct et61x251_frame_t, |
512 | frame); | 512 | frame); |
513 | else | 513 | else |
514 | (*f) = NULL; | 514 | (*f) = NULL; |
515 | spin_unlock(&cam->queue_lock); | 515 | spin_unlock(&cam->queue_lock); |
@@ -521,7 +521,7 @@ end_of_frame: | |||
521 | 521 | ||
522 | if (sof && | 522 | if (sof && |
523 | cam->sensor.pix_format.pixelformat == | 523 | cam->sensor.pix_format.pixelformat == |
524 | V4L2_PIX_FMT_ET61X251) | 524 | V4L2_PIX_FMT_ET61X251) |
525 | goto start_of_frame; | 525 | goto start_of_frame; |
526 | } | 526 | } |
527 | } | 527 | } |
@@ -544,15 +544,15 @@ static int et61x251_start_transfer(struct et61x251_device* cam) | |||
544 | struct usb_device *udev = cam->usbdev; | 544 | struct usb_device *udev = cam->usbdev; |
545 | struct urb* urb; | 545 | struct urb* urb; |
546 | const unsigned int wMaxPacketSize[] = {0, 256, 384, 512, 640, 768, 832, | 546 | const unsigned int wMaxPacketSize[] = {0, 256, 384, 512, 640, 768, 832, |
547 | 864, 896, 920, 956, 980, 1000, | 547 | 864, 896, 920, 956, 980, 1000, |
548 | 1022}; | 548 | 1022}; |
549 | const unsigned int psz = wMaxPacketSize[ET61X251_ALTERNATE_SETTING]; | 549 | const unsigned int psz = wMaxPacketSize[ET61X251_ALTERNATE_SETTING]; |
550 | s8 i, j; | 550 | s8 i, j; |
551 | int err = 0; | 551 | int err = 0; |
552 | 552 | ||
553 | for (i = 0; i < ET61X251_URBS; i++) { | 553 | for (i = 0; i < ET61X251_URBS; i++) { |
554 | cam->transfer_buffer[i] = kzalloc(ET61X251_ISO_PACKETS * psz, | 554 | cam->transfer_buffer[i] = kzalloc(ET61X251_ISO_PACKETS * psz, |
555 | GFP_KERNEL); | 555 | GFP_KERNEL); |
556 | if (!cam->transfer_buffer[i]) { | 556 | if (!cam->transfer_buffer[i]) { |
557 | err = -ENOMEM; | 557 | err = -ENOMEM; |
558 | DBG(1, "Not enough memory"); | 558 | DBG(1, "Not enough memory"); |
@@ -653,9 +653,9 @@ static int et61x251_stream_interrupt(struct et61x251_device* cam) | |||
653 | 653 | ||
654 | cam->stream = STREAM_INTERRUPT; | 654 | cam->stream = STREAM_INTERRUPT; |
655 | timeout = wait_event_timeout(cam->wait_stream, | 655 | timeout = wait_event_timeout(cam->wait_stream, |
656 | (cam->stream == STREAM_OFF) || | 656 | (cam->stream == STREAM_OFF) || |
657 | (cam->state & DEV_DISCONNECTED), | 657 | (cam->state & DEV_DISCONNECTED), |
658 | ET61X251_URB_TIMEOUT); | 658 | ET61X251_URB_TIMEOUT); |
659 | if (cam->state & DEV_DISCONNECTED) | 659 | if (cam->state & DEV_DISCONNECTED) |
660 | return -ENODEV; | 660 | return -ENODEV; |
661 | else if (cam->stream != STREAM_OFF) { | 661 | else if (cam->stream != STREAM_OFF) { |
@@ -699,7 +699,7 @@ static u8 et61x251_strtou8(const char* buff, size_t len, ssize_t* count) | |||
699 | 699 | ||
700 | /* | 700 | /* |
701 | NOTE 1: being inside one of the following methods implies that the v4l | 701 | NOTE 1: being inside one of the following methods implies that the v4l |
702 | device exists for sure (see kobjects and reference counters) | 702 | device exists for sure (see kobjects and reference counters) |
703 | NOTE 2: buffers are PAGE_SIZE long | 703 | NOTE 2: buffers are PAGE_SIZE long |
704 | */ | 704 | */ |
705 | 705 | ||
@@ -964,13 +964,13 @@ et61x251_store_i2c_val(struct class_device* cd, const char* buf, size_t len) | |||
964 | 964 | ||
965 | 965 | ||
966 | static CLASS_DEVICE_ATTR(reg, S_IRUGO | S_IWUSR, | 966 | static CLASS_DEVICE_ATTR(reg, S_IRUGO | S_IWUSR, |
967 | et61x251_show_reg, et61x251_store_reg); | 967 | et61x251_show_reg, et61x251_store_reg); |
968 | static CLASS_DEVICE_ATTR(val, S_IRUGO | S_IWUSR, | 968 | static CLASS_DEVICE_ATTR(val, S_IRUGO | S_IWUSR, |
969 | et61x251_show_val, et61x251_store_val); | 969 | et61x251_show_val, et61x251_store_val); |
970 | static CLASS_DEVICE_ATTR(i2c_reg, S_IRUGO | S_IWUSR, | 970 | static CLASS_DEVICE_ATTR(i2c_reg, S_IRUGO | S_IWUSR, |
971 | et61x251_show_i2c_reg, et61x251_store_i2c_reg); | 971 | et61x251_show_i2c_reg, et61x251_store_i2c_reg); |
972 | static CLASS_DEVICE_ATTR(i2c_val, S_IRUGO | S_IWUSR, | 972 | static CLASS_DEVICE_ATTR(i2c_val, S_IRUGO | S_IWUSR, |
973 | et61x251_show_i2c_val, et61x251_store_i2c_val); | 973 | et61x251_show_i2c_val, et61x251_store_i2c_val); |
974 | 974 | ||
975 | 975 | ||
976 | static void et61x251_create_sysfs(struct et61x251_device* cam) | 976 | static void et61x251_create_sysfs(struct et61x251_device* cam) |
@@ -990,7 +990,7 @@ static void et61x251_create_sysfs(struct et61x251_device* cam) | |||
990 | 990 | ||
991 | static int | 991 | static int |
992 | et61x251_set_pix_format(struct et61x251_device* cam, | 992 | et61x251_set_pix_format(struct et61x251_device* cam, |
993 | struct v4l2_pix_format* pix) | 993 | struct v4l2_pix_format* pix) |
994 | { | 994 | { |
995 | int r, err = 0; | 995 | int r, err = 0; |
996 | 996 | ||
@@ -1007,7 +1007,7 @@ et61x251_set_pix_format(struct et61x251_device* cam, | |||
1007 | 1007 | ||
1008 | static int | 1008 | static int |
1009 | et61x251_set_compression(struct et61x251_device* cam, | 1009 | et61x251_set_compression(struct et61x251_device* cam, |
1010 | struct v4l2_jpegcompression* compression) | 1010 | struct v4l2_jpegcompression* compression) |
1011 | { | 1011 | { |
1012 | int r, err = 0; | 1012 | int r, err = 0; |
1013 | 1013 | ||
@@ -1049,9 +1049,9 @@ et61x251_set_crop(struct et61x251_device* cam, struct v4l2_rect* rect) | |||
1049 | { | 1049 | { |
1050 | struct et61x251_sensor* s = &cam->sensor; | 1050 | struct et61x251_sensor* s = &cam->sensor; |
1051 | u16 fmw_sx = (u16)(rect->left - s->cropcap.bounds.left + | 1051 | u16 fmw_sx = (u16)(rect->left - s->cropcap.bounds.left + |
1052 | s->active_pixel.left), | 1052 | s->active_pixel.left), |
1053 | fmw_sy = (u16)(rect->top - s->cropcap.bounds.top + | 1053 | fmw_sy = (u16)(rect->top - s->cropcap.bounds.top + |
1054 | s->active_pixel.top), | 1054 | s->active_pixel.top), |
1055 | fmw_length = (u16)(rect->width), | 1055 | fmw_length = (u16)(rect->width), |
1056 | fmw_height = (u16)(rect->height); | 1056 | fmw_height = (u16)(rect->height); |
1057 | int err = 0; | 1057 | int err = 0; |
@@ -1061,8 +1061,8 @@ et61x251_set_crop(struct et61x251_device* cam, struct v4l2_rect* rect) | |||
1061 | err += et61x251_write_reg(cam, fmw_length & 0xff, 0x6b); | 1061 | err += et61x251_write_reg(cam, fmw_length & 0xff, 0x6b); |
1062 | err += et61x251_write_reg(cam, fmw_height & 0xff, 0x6c); | 1062 | err += et61x251_write_reg(cam, fmw_height & 0xff, 0x6c); |
1063 | err += et61x251_write_reg(cam, (fmw_sx >> 8) | ((fmw_sy & 0x300) >> 6) | 1063 | err += et61x251_write_reg(cam, (fmw_sx >> 8) | ((fmw_sy & 0x300) >> 6) |
1064 | | ((fmw_length & 0x300) >> 4) | 1064 | | ((fmw_length & 0x300) >> 4) |
1065 | | ((fmw_height & 0x300) >> 2), 0x6d); | 1065 | | ((fmw_height & 0x300) >> 2), 0x6d); |
1066 | if (err) | 1066 | if (err) |
1067 | return -EIO; | 1067 | return -EIO; |
1068 | 1068 | ||
@@ -1203,8 +1203,8 @@ static int et61x251_open(struct inode* inode, struct file* filp) | |||
1203 | } | 1203 | } |
1204 | mutex_unlock(&cam->dev_mutex); | 1204 | mutex_unlock(&cam->dev_mutex); |
1205 | err = wait_event_interruptible_exclusive(cam->open, | 1205 | err = wait_event_interruptible_exclusive(cam->open, |
1206 | cam->state & DEV_DISCONNECTED | 1206 | cam->state & DEV_DISCONNECTED |
1207 | || !cam->users); | 1207 | || !cam->users); |
1208 | if (err) { | 1208 | if (err) { |
1209 | up_read(&et61x251_disconnect); | 1209 | up_read(&et61x251_disconnect); |
1210 | return err; | 1210 | return err; |
@@ -1277,7 +1277,7 @@ static int et61x251_release(struct inode* inode, struct file* filp) | |||
1277 | 1277 | ||
1278 | static ssize_t | 1278 | static ssize_t |
1279 | et61x251_read(struct file* filp, char __user * buf, | 1279 | et61x251_read(struct file* filp, char __user * buf, |
1280 | size_t count, loff_t* f_pos) | 1280 | size_t count, loff_t* f_pos) |
1281 | { | 1281 | { |
1282 | struct et61x251_device* cam = video_get_drvdata(video_devdata(filp)); | 1282 | struct et61x251_device* cam = video_get_drvdata(video_devdata(filp)); |
1283 | struct et61x251_frame_t* f, * i; | 1283 | struct et61x251_frame_t* f, * i; |
@@ -1310,7 +1310,7 @@ et61x251_read(struct file* filp, char __user * buf, | |||
1310 | 1310 | ||
1311 | if (cam->io == IO_NONE) { | 1311 | if (cam->io == IO_NONE) { |
1312 | if (!et61x251_request_buffers(cam, cam->nreadbuffers, | 1312 | if (!et61x251_request_buffers(cam, cam->nreadbuffers, |
1313 | IO_READ)) { | 1313 | IO_READ)) { |
1314 | DBG(1, "read() failed, not enough memory"); | 1314 | DBG(1, "read() failed, not enough memory"); |
1315 | mutex_unlock(&cam->fileop_mutex); | 1315 | mutex_unlock(&cam->fileop_mutex); |
1316 | return -ENOMEM; | 1316 | return -ENOMEM; |
@@ -1336,12 +1336,12 @@ et61x251_read(struct file* filp, char __user * buf, | |||
1336 | return -EAGAIN; | 1336 | return -EAGAIN; |
1337 | } | 1337 | } |
1338 | timeout = wait_event_interruptible_timeout | 1338 | timeout = wait_event_interruptible_timeout |
1339 | ( cam->wait_frame, | 1339 | ( cam->wait_frame, |
1340 | (!list_empty(&cam->outqueue)) || | 1340 | (!list_empty(&cam->outqueue)) || |
1341 | (cam->state & DEV_DISCONNECTED) || | 1341 | (cam->state & DEV_DISCONNECTED) || |
1342 | (cam->state & DEV_MISCONFIGURED), | 1342 | (cam->state & DEV_MISCONFIGURED), |
1343 | cam->module_param.frame_timeout * | 1343 | cam->module_param.frame_timeout * |
1344 | 1000 * msecs_to_jiffies(1) ); | 1344 | 1000 * msecs_to_jiffies(1) ); |
1345 | if (timeout < 0) { | 1345 | if (timeout < 0) { |
1346 | mutex_unlock(&cam->fileop_mutex); | 1346 | mutex_unlock(&cam->fileop_mutex); |
1347 | return timeout; | 1347 | return timeout; |
@@ -1408,7 +1408,7 @@ static unsigned int et61x251_poll(struct file *filp, poll_table *wait) | |||
1408 | 1408 | ||
1409 | if (cam->io == IO_NONE) { | 1409 | if (cam->io == IO_NONE) { |
1410 | if (!et61x251_request_buffers(cam, cam->nreadbuffers, | 1410 | if (!et61x251_request_buffers(cam, cam->nreadbuffers, |
1411 | IO_READ)) { | 1411 | IO_READ)) { |
1412 | DBG(1, "poll() failed, not enough memory"); | 1412 | DBG(1, "poll() failed, not enough memory"); |
1413 | goto error; | 1413 | goto error; |
1414 | } | 1414 | } |
@@ -1465,7 +1465,7 @@ static int et61x251_mmap(struct file* filp, struct vm_area_struct *vma) | |||
1465 | { | 1465 | { |
1466 | struct et61x251_device* cam = video_get_drvdata(video_devdata(filp)); | 1466 | struct et61x251_device* cam = video_get_drvdata(video_devdata(filp)); |
1467 | unsigned long size = vma->vm_end - vma->vm_start, | 1467 | unsigned long size = vma->vm_end - vma->vm_start, |
1468 | start = vma->vm_start; | 1468 | start = vma->vm_start; |
1469 | void *pos; | 1469 | void *pos; |
1470 | u32 i; | 1470 | u32 i; |
1471 | 1471 | ||
@@ -1533,13 +1533,13 @@ et61x251_vidioc_querycap(struct et61x251_device* cam, void __user * arg) | |||
1533 | .driver = "et61x251", | 1533 | .driver = "et61x251", |
1534 | .version = ET61X251_MODULE_VERSION_CODE, | 1534 | .version = ET61X251_MODULE_VERSION_CODE, |
1535 | .capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE | | 1535 | .capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE | |
1536 | V4L2_CAP_STREAMING, | 1536 | V4L2_CAP_STREAMING, |
1537 | }; | 1537 | }; |
1538 | 1538 | ||
1539 | strlcpy(cap.card, cam->v4ldev->name, sizeof(cap.card)); | 1539 | strlcpy(cap.card, cam->v4ldev->name, sizeof(cap.card)); |
1540 | if (usb_make_path(cam->usbdev, cap.bus_info, sizeof(cap.bus_info)) < 0) | 1540 | if (usb_make_path(cam->usbdev, cap.bus_info, sizeof(cap.bus_info)) < 0) |
1541 | strlcpy(cap.bus_info, cam->usbdev->dev.bus_id, | 1541 | strlcpy(cap.bus_info, cam->usbdev->dev.bus_id, |
1542 | sizeof(cap.bus_info)); | 1542 | sizeof(cap.bus_info)); |
1543 | 1543 | ||
1544 | if (copy_to_user(arg, &cap, sizeof(cap))) | 1544 | if (copy_to_user(arg, &cap, sizeof(cap))) |
1545 | return -EFAULT; | 1545 | return -EFAULT; |
@@ -1871,7 +1871,7 @@ et61x251_vidioc_g_fmt(struct et61x251_device* cam, void __user * arg) | |||
1871 | return -EINVAL; | 1871 | return -EINVAL; |
1872 | 1872 | ||
1873 | pfmt->bytesperline = (pfmt->pixelformat==V4L2_PIX_FMT_ET61X251) | 1873 | pfmt->bytesperline = (pfmt->pixelformat==V4L2_PIX_FMT_ET61X251) |
1874 | ? 0 : (pfmt->width * pfmt->priv) / 8; | 1874 | ? 0 : (pfmt->width * pfmt->priv) / 8; |
1875 | pfmt->sizeimage = pfmt->height * ((pfmt->width*pfmt->priv)/8); | 1875 | pfmt->sizeimage = pfmt->height * ((pfmt->width*pfmt->priv)/8); |
1876 | pfmt->field = V4L2_FIELD_NONE; | 1876 | pfmt->field = V4L2_FIELD_NONE; |
1877 | memcpy(&(format.fmt.pix), pfmt, sizeof(*pfmt)); | 1877 | memcpy(&(format.fmt.pix), pfmt, sizeof(*pfmt)); |
@@ -1885,7 +1885,7 @@ et61x251_vidioc_g_fmt(struct et61x251_device* cam, void __user * arg) | |||
1885 | 1885 | ||
1886 | static int | 1886 | static int |
1887 | et61x251_vidioc_try_s_fmt(struct et61x251_device* cam, unsigned int cmd, | 1887 | et61x251_vidioc_try_s_fmt(struct et61x251_device* cam, unsigned int cmd, |
1888 | void __user * arg) | 1888 | void __user * arg) |
1889 | { | 1889 | { |
1890 | struct et61x251_sensor* s = &cam->sensor; | 1890 | struct et61x251_sensor* s = &cam->sensor; |
1891 | struct v4l2_format format; | 1891 | struct v4l2_format format; |
@@ -1947,7 +1947,7 @@ et61x251_vidioc_try_s_fmt(struct et61x251_device* cam, unsigned int cmd, | |||
1947 | pix->priv = pfmt->priv; /* bpp */ | 1947 | pix->priv = pfmt->priv; /* bpp */ |
1948 | pix->colorspace = pfmt->colorspace; | 1948 | pix->colorspace = pfmt->colorspace; |
1949 | pix->bytesperline = (pix->pixelformat == V4L2_PIX_FMT_ET61X251) | 1949 | pix->bytesperline = (pix->pixelformat == V4L2_PIX_FMT_ET61X251) |
1950 | ? 0 : (pix->width * pix->priv) / 8; | 1950 | ? 0 : (pix->width * pix->priv) / 8; |
1951 | pix->sizeimage = pix->height * ((pix->width * pix->priv) / 8); | 1951 | pix->sizeimage = pix->height * ((pix->width * pix->priv) / 8); |
1952 | pix->field = V4L2_FIELD_NONE; | 1952 | pix->field = V4L2_FIELD_NONE; |
1953 | 1953 | ||
@@ -2020,7 +2020,7 @@ static int | |||
2020 | et61x251_vidioc_g_jpegcomp(struct et61x251_device* cam, void __user * arg) | 2020 | et61x251_vidioc_g_jpegcomp(struct et61x251_device* cam, void __user * arg) |
2021 | { | 2021 | { |
2022 | if (copy_to_user(arg, &cam->compression, | 2022 | if (copy_to_user(arg, &cam->compression, |
2023 | sizeof(cam->compression))) | 2023 | sizeof(cam->compression))) |
2024 | return -EFAULT; | 2024 | return -EFAULT; |
2025 | 2025 | ||
2026 | return 0; | 2026 | return 0; |
@@ -2169,7 +2169,7 @@ et61x251_vidioc_qbuf(struct et61x251_device* cam, void __user * arg) | |||
2169 | 2169 | ||
2170 | static int | 2170 | static int |
2171 | et61x251_vidioc_dqbuf(struct et61x251_device* cam, struct file* filp, | 2171 | et61x251_vidioc_dqbuf(struct et61x251_device* cam, struct file* filp, |
2172 | void __user * arg) | 2172 | void __user * arg) |
2173 | { | 2173 | { |
2174 | struct v4l2_buffer b; | 2174 | struct v4l2_buffer b; |
2175 | struct et61x251_frame_t *f; | 2175 | struct et61x251_frame_t *f; |
@@ -2188,12 +2188,12 @@ et61x251_vidioc_dqbuf(struct et61x251_device* cam, struct file* filp, | |||
2188 | if (filp->f_flags & O_NONBLOCK) | 2188 | if (filp->f_flags & O_NONBLOCK) |
2189 | return -EAGAIN; | 2189 | return -EAGAIN; |
2190 | timeout = wait_event_interruptible_timeout | 2190 | timeout = wait_event_interruptible_timeout |
2191 | ( cam->wait_frame, | 2191 | ( cam->wait_frame, |
2192 | (!list_empty(&cam->outqueue)) || | 2192 | (!list_empty(&cam->outqueue)) || |
2193 | (cam->state & DEV_DISCONNECTED) || | 2193 | (cam->state & DEV_DISCONNECTED) || |
2194 | (cam->state & DEV_MISCONFIGURED), | 2194 | (cam->state & DEV_MISCONFIGURED), |
2195 | cam->module_param.frame_timeout * | 2195 | cam->module_param.frame_timeout * |
2196 | 1000 * msecs_to_jiffies(1) ); | 2196 | 1000 * msecs_to_jiffies(1) ); |
2197 | if (timeout < 0) | 2197 | if (timeout < 0) |
2198 | return timeout; | 2198 | return timeout; |
2199 | if (cam->state & DEV_DISCONNECTED) | 2199 | if (cam->state & DEV_DISCONNECTED) |
@@ -2317,7 +2317,7 @@ et61x251_vidioc_s_parm(struct et61x251_device* cam, void __user * arg) | |||
2317 | 2317 | ||
2318 | 2318 | ||
2319 | static int et61x251_ioctl_v4l2(struct inode* inode, struct file* filp, | 2319 | static int et61x251_ioctl_v4l2(struct inode* inode, struct file* filp, |
2320 | unsigned int cmd, void __user * arg) | 2320 | unsigned int cmd, void __user * arg) |
2321 | { | 2321 | { |
2322 | struct et61x251_device* cam = video_get_drvdata(video_devdata(filp)); | 2322 | struct et61x251_device* cam = video_get_drvdata(video_devdata(filp)); |
2323 | 2323 | ||
@@ -2411,7 +2411,7 @@ static int et61x251_ioctl_v4l2(struct inode* inode, struct file* filp, | |||
2411 | 2411 | ||
2412 | 2412 | ||
2413 | static int et61x251_ioctl(struct inode* inode, struct file* filp, | 2413 | static int et61x251_ioctl(struct inode* inode, struct file* filp, |
2414 | unsigned int cmd, unsigned long arg) | 2414 | unsigned int cmd, unsigned long arg) |
2415 | { | 2415 | { |
2416 | struct et61x251_device* cam = video_get_drvdata(video_devdata(filp)); | 2416 | struct et61x251_device* cam = video_get_drvdata(video_devdata(filp)); |
2417 | int err = 0; | 2417 | int err = 0; |
@@ -2518,7 +2518,7 @@ et61x251_usb_probe(struct usb_interface* intf, const struct usb_device_id* id) | |||
2518 | mutex_lock(&cam->dev_mutex); | 2518 | mutex_lock(&cam->dev_mutex); |
2519 | 2519 | ||
2520 | err = video_register_device(cam->v4ldev, VFL_TYPE_GRABBER, | 2520 | err = video_register_device(cam->v4ldev, VFL_TYPE_GRABBER, |
2521 | video_nr[dev_nr]); | 2521 | video_nr[dev_nr]); |
2522 | if (err) { | 2522 | if (err) { |
2523 | DBG(1, "V4L2 device registration failed"); | 2523 | DBG(1, "V4L2 device registration failed"); |
2524 | if (err == -ENFILE && video_nr[dev_nr] == -1) | 2524 | if (err == -ENFILE && video_nr[dev_nr] == -1) |
diff --git a/drivers/media/video/et61x251/et61x251_sensor.h b/drivers/media/video/et61x251/et61x251_sensor.h index 56841ae8a207..65edd08dc386 100644 --- a/drivers/media/video/et61x251/et61x251_sensor.h +++ b/drivers/media/video/et61x251/et61x251_sensor.h | |||
@@ -47,7 +47,7 @@ et61x251_match_id(struct et61x251_device* cam, const struct usb_device_id *id); | |||
47 | 47 | ||
48 | extern void | 48 | extern void |
49 | et61x251_attach_sensor(struct et61x251_device* cam, | 49 | et61x251_attach_sensor(struct et61x251_device* cam, |
50 | struct et61x251_sensor* sensor); | 50 | struct et61x251_sensor* sensor); |
51 | 51 | ||
52 | /*****************************************************************************/ | 52 | /*****************************************************************************/ |
53 | 53 | ||
@@ -56,13 +56,13 @@ extern int et61x251_read_reg(struct et61x251_device*, u16 index); | |||
56 | extern int et61x251_i2c_write(struct et61x251_device*, u8 address, u8 value); | 56 | extern int et61x251_i2c_write(struct et61x251_device*, u8 address, u8 value); |
57 | extern int et61x251_i2c_read(struct et61x251_device*, u8 address); | 57 | extern int et61x251_i2c_read(struct et61x251_device*, u8 address); |
58 | extern int et61x251_i2c_try_write(struct et61x251_device*, | 58 | extern int et61x251_i2c_try_write(struct et61x251_device*, |
59 | struct et61x251_sensor*, u8 address, | 59 | struct et61x251_sensor*, u8 address, |
60 | u8 value); | 60 | u8 value); |
61 | extern int et61x251_i2c_try_read(struct et61x251_device*, | 61 | extern int et61x251_i2c_try_read(struct et61x251_device*, |
62 | struct et61x251_sensor*, u8 address); | 62 | struct et61x251_sensor*, u8 address); |
63 | extern int et61x251_i2c_raw_write(struct et61x251_device*, u8 n, u8 data1, | 63 | extern int et61x251_i2c_raw_write(struct et61x251_device*, u8 n, u8 data1, |
64 | u8 data2, u8 data3, u8 data4, u8 data5, | 64 | u8 data2, u8 data3, u8 data4, u8 data5, |
65 | u8 data6, u8 data7, u8 data8, u8 address); | 65 | u8 data6, u8 data7, u8 data8, u8 address); |
66 | 66 | ||
67 | /*****************************************************************************/ | 67 | /*****************************************************************************/ |
68 | 68 | ||
@@ -100,13 +100,13 @@ struct et61x251_sensor { | |||
100 | 100 | ||
101 | int (*init)(struct et61x251_device* cam); | 101 | int (*init)(struct et61x251_device* cam); |
102 | int (*get_ctrl)(struct et61x251_device* cam, | 102 | int (*get_ctrl)(struct et61x251_device* cam, |
103 | struct v4l2_control* ctrl); | 103 | struct v4l2_control* ctrl); |
104 | int (*set_ctrl)(struct et61x251_device* cam, | 104 | int (*set_ctrl)(struct et61x251_device* cam, |
105 | const struct v4l2_control* ctrl); | 105 | const struct v4l2_control* ctrl); |
106 | int (*set_crop)(struct et61x251_device* cam, | 106 | int (*set_crop)(struct et61x251_device* cam, |
107 | const struct v4l2_rect* rect); | 107 | const struct v4l2_rect* rect); |
108 | int (*set_pix_format)(struct et61x251_device* cam, | 108 | int (*set_pix_format)(struct et61x251_device* cam, |
109 | const struct v4l2_pix_format* pix); | 109 | const struct v4l2_pix_format* pix); |
110 | 110 | ||
111 | /* Private */ | 111 | /* Private */ |
112 | struct v4l2_queryctrl _qctrl[ET61X251_MAX_CTRLS]; | 112 | struct v4l2_queryctrl _qctrl[ET61X251_MAX_CTRLS]; |
diff --git a/drivers/media/video/et61x251/et61x251_tas5130d1b.c b/drivers/media/video/et61x251/et61x251_tas5130d1b.c index 3998d76a307a..a7d65b82b2fb 100644 --- a/drivers/media/video/et61x251/et61x251_tas5130d1b.c +++ b/drivers/media/video/et61x251/et61x251_tas5130d1b.c | |||
@@ -46,20 +46,20 @@ static int tas5130d1b_init(struct et61x251_device* cam) | |||
46 | 46 | ||
47 | 47 | ||
48 | static int tas5130d1b_set_ctrl(struct et61x251_device* cam, | 48 | static int tas5130d1b_set_ctrl(struct et61x251_device* cam, |
49 | const struct v4l2_control* ctrl) | 49 | const struct v4l2_control* ctrl) |
50 | { | 50 | { |
51 | int err = 0; | 51 | int err = 0; |
52 | 52 | ||
53 | switch (ctrl->id) { | 53 | switch (ctrl->id) { |
54 | case V4L2_CID_GAIN: | 54 | case V4L2_CID_GAIN: |
55 | err += et61x251_i2c_raw_write(cam, 2, 0x20, | 55 | err += et61x251_i2c_raw_write(cam, 2, 0x20, |
56 | 0xf6-ctrl->value, 0, 0, 0, | 56 | 0xf6-ctrl->value, 0, 0, 0, |
57 | 0, 0, 0, 0); | 57 | 0, 0, 0, 0); |
58 | break; | 58 | break; |
59 | case V4L2_CID_EXPOSURE: | 59 | case V4L2_CID_EXPOSURE: |
60 | err += et61x251_i2c_raw_write(cam, 2, 0x40, | 60 | err += et61x251_i2c_raw_write(cam, 2, 0x40, |
61 | 0x47-ctrl->value, 0, 0, 0, | 61 | 0x47-ctrl->value, 0, 0, 0, |
62 | 0, 0, 0, 0); | 62 | 0, 0, 0, 0); |
63 | break; | 63 | break; |
64 | default: | 64 | default: |
65 | return -EINVAL; | 65 | return -EINVAL; |