diff options
author | Jiri Kosina <jkosina@suse.cz> | 2011-09-15 09:08:05 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2011-09-15 09:08:18 -0400 |
commit | e060c38434b2caa78efe7cedaff4191040b65a15 (patch) | |
tree | 407361230bf6733f63d8e788e4b5e6566ee04818 /drivers/media/video/pwc/pwc.h | |
parent | 10e4ac572eeffe5317019bd7330b6058a400dfc2 (diff) | |
parent | cc39c6a9bbdebfcf1a7dee64d83bf302bc38d941 (diff) |
Merge branch 'master' into for-next
Fast-forward merge with Linus to be able to merge patches
based on more recent version of the tree.
Diffstat (limited to 'drivers/media/video/pwc/pwc.h')
-rw-r--r-- | drivers/media/video/pwc/pwc.h | 409 |
1 files changed, 221 insertions, 188 deletions
diff --git a/drivers/media/video/pwc/pwc.h b/drivers/media/video/pwc/pwc.h index 083f8b15df73..0e4e2d7b7872 100644 --- a/drivers/media/video/pwc/pwc.h +++ b/drivers/media/video/pwc/pwc.h | |||
@@ -29,7 +29,6 @@ | |||
29 | #include <linux/usb.h> | 29 | #include <linux/usb.h> |
30 | #include <linux/spinlock.h> | 30 | #include <linux/spinlock.h> |
31 | #include <linux/wait.h> | 31 | #include <linux/wait.h> |
32 | #include <linux/version.h> | ||
33 | #include <linux/mutex.h> | 32 | #include <linux/mutex.h> |
34 | #include <linux/mm.h> | 33 | #include <linux/mm.h> |
35 | #include <linux/slab.h> | 34 | #include <linux/slab.h> |
@@ -37,19 +36,16 @@ | |||
37 | #include <linux/videodev2.h> | 36 | #include <linux/videodev2.h> |
38 | #include <media/v4l2-common.h> | 37 | #include <media/v4l2-common.h> |
39 | #include <media/v4l2-ioctl.h> | 38 | #include <media/v4l2-ioctl.h> |
39 | #include <media/v4l2-ctrls.h> | ||
40 | #include <media/videobuf2-vmalloc.h> | ||
40 | #ifdef CONFIG_USB_PWC_INPUT_EVDEV | 41 | #ifdef CONFIG_USB_PWC_INPUT_EVDEV |
41 | #include <linux/input.h> | 42 | #include <linux/input.h> |
42 | #endif | 43 | #endif |
43 | 44 | ||
44 | #include "pwc-uncompress.h" | ||
45 | #include <media/pwc-ioctl.h> | 45 | #include <media/pwc-ioctl.h> |
46 | 46 | ||
47 | /* Version block */ | 47 | /* Version block */ |
48 | #define PWC_MAJOR 10 | 48 | #define PWC_VERSION "10.0.15" |
49 | #define PWC_MINOR 0 | ||
50 | #define PWC_EXTRAMINOR 12 | ||
51 | #define PWC_VERSION_CODE KERNEL_VERSION(PWC_MAJOR,PWC_MINOR,PWC_EXTRAMINOR) | ||
52 | #define PWC_VERSION "10.0.14" | ||
53 | #define PWC_NAME "pwc" | 49 | #define PWC_NAME "pwc" |
54 | #define PFX PWC_NAME ": " | 50 | #define PFX PWC_NAME ": " |
55 | 51 | ||
@@ -81,9 +77,9 @@ | |||
81 | #define PWC_DEBUG_LEVEL (PWC_DEBUG_LEVEL_MODULE) | 77 | #define PWC_DEBUG_LEVEL (PWC_DEBUG_LEVEL_MODULE) |
82 | 78 | ||
83 | #define PWC_DEBUG(level, fmt, args...) do {\ | 79 | #define PWC_DEBUG(level, fmt, args...) do {\ |
84 | if ((PWC_DEBUG_LEVEL_ ##level) & pwc_trace) \ | 80 | if ((PWC_DEBUG_LEVEL_ ##level) & pwc_trace) \ |
85 | printk(KERN_DEBUG PFX fmt, ##args); \ | 81 | printk(KERN_DEBUG PFX fmt, ##args); \ |
86 | } while(0) | 82 | } while (0) |
87 | 83 | ||
88 | #define PWC_ERROR(fmt, args...) printk(KERN_ERR PFX fmt, ##args) | 84 | #define PWC_ERROR(fmt, args...) printk(KERN_ERR PFX fmt, ##args) |
89 | #define PWC_WARNING(fmt, args...) printk(KERN_WARNING PFX fmt, ##args) | 85 | #define PWC_WARNING(fmt, args...) printk(KERN_WARNING PFX fmt, ##args) |
@@ -110,25 +106,21 @@ | |||
110 | #define FEATURE_CODEC1 0x0002 | 106 | #define FEATURE_CODEC1 0x0002 |
111 | #define FEATURE_CODEC2 0x0004 | 107 | #define FEATURE_CODEC2 0x0004 |
112 | 108 | ||
113 | /* Turn certain features on/off */ | ||
114 | #define PWC_INT_PIPE 0 | ||
115 | |||
116 | /* Ignore errors in the first N frames, to allow for startup delays */ | 109 | /* Ignore errors in the first N frames, to allow for startup delays */ |
117 | #define FRAME_LOWMARK 5 | 110 | #define FRAME_LOWMARK 5 |
118 | 111 | ||
119 | /* Size and number of buffers for the ISO pipe. */ | 112 | /* Size and number of buffers for the ISO pipe. */ |
120 | #define MAX_ISO_BUFS 2 | 113 | #define MAX_ISO_BUFS 3 |
121 | #define ISO_FRAMES_PER_DESC 10 | 114 | #define ISO_FRAMES_PER_DESC 10 |
122 | #define ISO_MAX_FRAME_SIZE 960 | 115 | #define ISO_MAX_FRAME_SIZE 960 |
123 | #define ISO_BUFFER_SIZE (ISO_FRAMES_PER_DESC * ISO_MAX_FRAME_SIZE) | 116 | #define ISO_BUFFER_SIZE (ISO_FRAMES_PER_DESC * ISO_MAX_FRAME_SIZE) |
124 | 117 | ||
125 | /* Frame buffers: contains compressed or uncompressed video data. */ | ||
126 | #define MAX_FRAMES 5 | ||
127 | /* Maximum size after decompression is 640x480 YUV data, 1.5 * 640 * 480 */ | 118 | /* Maximum size after decompression is 640x480 YUV data, 1.5 * 640 * 480 */ |
128 | #define PWC_FRAME_SIZE (460800 + TOUCAM_HEADER_SIZE + TOUCAM_TRAILER_SIZE) | 119 | #define PWC_FRAME_SIZE (460800 + TOUCAM_HEADER_SIZE + TOUCAM_TRAILER_SIZE) |
129 | 120 | ||
130 | /* Absolute maximum number of buffers available for mmap() */ | 121 | /* Absolute minimum and maximum number of buffers available for mmap() */ |
131 | #define MAX_IMAGES 10 | 122 | #define MIN_FRAMES 2 |
123 | #define MAX_FRAMES 16 | ||
132 | 124 | ||
133 | /* Some macros to quickly find the type of a webcam */ | 125 | /* Some macros to quickly find the type of a webcam */ |
134 | #define DEVICE_USE_CODEC1(x) ((x)<675) | 126 | #define DEVICE_USE_CODEC1(x) ((x)<675) |
@@ -136,149 +128,221 @@ | |||
136 | #define DEVICE_USE_CODEC3(x) ((x)>=700) | 128 | #define DEVICE_USE_CODEC3(x) ((x)>=700) |
137 | #define DEVICE_USE_CODEC23(x) ((x)>=675) | 129 | #define DEVICE_USE_CODEC23(x) ((x)>=675) |
138 | 130 | ||
139 | /* The following structures were based on cpia.h. Why reinvent the wheel? :-) */ | 131 | /* from pwc-dec.h */ |
140 | struct pwc_iso_buf | 132 | #define PWCX_FLAG_PLANAR 0x0001 |
141 | { | 133 | |
142 | void *data; | 134 | /* Request types: video */ |
143 | int length; | 135 | #define SET_LUM_CTL 0x01 |
144 | int read; | 136 | #define GET_LUM_CTL 0x02 |
145 | struct urb *urb; | 137 | #define SET_CHROM_CTL 0x03 |
146 | }; | 138 | #define GET_CHROM_CTL 0x04 |
139 | #define SET_STATUS_CTL 0x05 | ||
140 | #define GET_STATUS_CTL 0x06 | ||
141 | #define SET_EP_STREAM_CTL 0x07 | ||
142 | #define GET_EP_STREAM_CTL 0x08 | ||
143 | #define GET_XX_CTL 0x09 | ||
144 | #define SET_XX_CTL 0x0A | ||
145 | #define GET_XY_CTL 0x0B | ||
146 | #define SET_XY_CTL 0x0C | ||
147 | #define SET_MPT_CTL 0x0D | ||
148 | #define GET_MPT_CTL 0x0E | ||
149 | |||
150 | /* Selectors for the Luminance controls [GS]ET_LUM_CTL */ | ||
151 | #define AGC_MODE_FORMATTER 0x2000 | ||
152 | #define PRESET_AGC_FORMATTER 0x2100 | ||
153 | #define SHUTTER_MODE_FORMATTER 0x2200 | ||
154 | #define PRESET_SHUTTER_FORMATTER 0x2300 | ||
155 | #define PRESET_CONTOUR_FORMATTER 0x2400 | ||
156 | #define AUTO_CONTOUR_FORMATTER 0x2500 | ||
157 | #define BACK_LIGHT_COMPENSATION_FORMATTER 0x2600 | ||
158 | #define CONTRAST_FORMATTER 0x2700 | ||
159 | #define DYNAMIC_NOISE_CONTROL_FORMATTER 0x2800 | ||
160 | #define FLICKERLESS_MODE_FORMATTER 0x2900 | ||
161 | #define AE_CONTROL_SPEED 0x2A00 | ||
162 | #define BRIGHTNESS_FORMATTER 0x2B00 | ||
163 | #define GAMMA_FORMATTER 0x2C00 | ||
164 | |||
165 | /* Selectors for the Chrominance controls [GS]ET_CHROM_CTL */ | ||
166 | #define WB_MODE_FORMATTER 0x1000 | ||
167 | #define AWB_CONTROL_SPEED_FORMATTER 0x1100 | ||
168 | #define AWB_CONTROL_DELAY_FORMATTER 0x1200 | ||
169 | #define PRESET_MANUAL_RED_GAIN_FORMATTER 0x1300 | ||
170 | #define PRESET_MANUAL_BLUE_GAIN_FORMATTER 0x1400 | ||
171 | #define COLOUR_MODE_FORMATTER 0x1500 | ||
172 | #define SATURATION_MODE_FORMATTER1 0x1600 | ||
173 | #define SATURATION_MODE_FORMATTER2 0x1700 | ||
174 | |||
175 | /* Selectors for the Status controls [GS]ET_STATUS_CTL */ | ||
176 | #define SAVE_USER_DEFAULTS_FORMATTER 0x0200 | ||
177 | #define RESTORE_USER_DEFAULTS_FORMATTER 0x0300 | ||
178 | #define RESTORE_FACTORY_DEFAULTS_FORMATTER 0x0400 | ||
179 | #define READ_AGC_FORMATTER 0x0500 | ||
180 | #define READ_SHUTTER_FORMATTER 0x0600 | ||
181 | #define READ_RED_GAIN_FORMATTER 0x0700 | ||
182 | #define READ_BLUE_GAIN_FORMATTER 0x0800 | ||
183 | |||
184 | /* Formatters for the motorized pan & tilt [GS]ET_MPT_CTL */ | ||
185 | #define PT_RELATIVE_CONTROL_FORMATTER 0x01 | ||
186 | #define PT_RESET_CONTROL_FORMATTER 0x02 | ||
187 | #define PT_STATUS_FORMATTER 0x03 | ||
147 | 188 | ||
148 | /* intermediate buffers with raw data from the USB cam */ | 189 | /* intermediate buffers with raw data from the USB cam */ |
149 | struct pwc_frame_buf | 190 | struct pwc_frame_buf |
150 | { | 191 | { |
151 | void *data; | 192 | struct vb2_buffer vb; /* common v4l buffer stuff -- must be first */ |
152 | volatile int filled; /* number of bytes filled */ | 193 | struct list_head list; |
153 | struct pwc_frame_buf *next; /* list */ | 194 | void *data; |
154 | }; | 195 | int filled; /* number of bytes filled */ |
155 | |||
156 | /* additionnal informations used when dealing image between kernel and userland */ | ||
157 | struct pwc_imgbuf | ||
158 | { | ||
159 | unsigned long offset; /* offset of this buffer in the big array of image_data */ | ||
160 | int vma_use_count; /* count the number of time this memory is mapped */ | ||
161 | }; | 196 | }; |
162 | 197 | ||
163 | struct pwc_device | 198 | struct pwc_device |
164 | { | 199 | { |
165 | struct video_device vdev; | 200 | struct video_device vdev; |
166 | 201 | struct mutex modlock; | |
167 | /* Pointer to our usb_device, may be NULL after unplug */ | 202 | |
168 | struct usb_device *udev; | 203 | /* Pointer to our usb_device, may be NULL after unplug */ |
169 | 204 | struct usb_device *udev; | |
170 | int type; /* type of cam (645, 646, 675, 680, 690, 720, 730, 740, 750) */ | 205 | /* Protects the setting of udev to NULL by our disconnect handler */ |
171 | int release; /* release number */ | 206 | struct mutex udevlock; |
172 | int features; /* feature bits */ | 207 | |
173 | char serial[30]; /* serial number (string) */ | 208 | /* type of cam (645, 646, 675, 680, 690, 720, 730, 740, 750) */ |
174 | int error_status; /* set when something goes wrong with the cam (unplugged, USB errors) */ | 209 | int type; |
175 | int usb_init; /* set when the cam has been initialized over USB */ | 210 | int release; /* release number */ |
176 | 211 | int features; /* feature bits */ | |
177 | /*** Video data ***/ | 212 | char serial[30]; /* serial number (string) */ |
178 | int vopen; /* flag */ | 213 | |
179 | int vendpoint; /* video isoc endpoint */ | 214 | /*** Video data ***/ |
180 | int vcinterface; /* video control interface */ | 215 | struct file *capt_file; /* file doing video capture */ |
181 | int valternate; /* alternate interface needed */ | 216 | int vendpoint; /* video isoc endpoint */ |
182 | int vframes, vsize; /* frames-per-second & size (see PSZ_*) */ | 217 | int vcinterface; /* video control interface */ |
183 | int pixfmt; /* pixelformat: V4L2_PIX_FMT_YUV420 or raw: _PWC1, _PWC2 */ | 218 | int valternate; /* alternate interface needed */ |
184 | int vframe_count; /* received frames */ | 219 | int vframes, vsize; /* frames-per-second & size (see PSZ_*) */ |
185 | int vframes_dumped; /* counter for dumped frames */ | 220 | int pixfmt; /* pixelformat: V4L2_PIX_FMT_YUV420 or _PWCX */ |
186 | int vframes_error; /* frames received in error */ | 221 | int vframe_count; /* received frames */ |
187 | int vmax_packet_size; /* USB maxpacket size */ | 222 | int vmax_packet_size; /* USB maxpacket size */ |
188 | int vlast_packet_size; /* for frame synchronisation */ | 223 | int vlast_packet_size; /* for frame synchronisation */ |
189 | int visoc_errors; /* number of contiguous ISOC errors */ | 224 | int visoc_errors; /* number of contiguous ISOC errors */ |
190 | int vcompression; /* desired compression factor */ | 225 | int vcompression; /* desired compression factor */ |
191 | int vbandlength; /* compressed band length; 0 is uncompressed */ | 226 | int vbandlength; /* compressed band length; 0 is uncompressed */ |
192 | char vsnapshot; /* snapshot mode */ | 227 | char vsnapshot; /* snapshot mode */ |
193 | char vsync; /* used by isoc handler */ | 228 | char vsync; /* used by isoc handler */ |
194 | char vmirror; /* for ToUCaM series */ | 229 | char vmirror; /* for ToUCaM series */ |
195 | char unplugged; | 230 | char power_save; /* Do powersaving for this cam */ |
196 | 231 | ||
197 | int cmd_len; | 232 | int cmd_len; |
198 | unsigned char cmd_buf[13]; | 233 | unsigned char cmd_buf[13]; |
199 | 234 | ||
200 | /* The image acquisition requires 3 to 4 steps: | 235 | struct urb *urbs[MAX_ISO_BUFS]; |
201 | 1. data is gathered in short packets from the USB controller | 236 | char iso_init; |
202 | 2. data is synchronized and packed into a frame buffer | 237 | |
203 | 3a. in case data is compressed, decompress it directly into image buffer | 238 | /* videobuf2 queue and queued buffers list */ |
204 | 3b. in case data is uncompressed, copy into image buffer with viewport | 239 | struct vb2_queue vb_queue; |
205 | 4. data is transferred to the user process | 240 | struct list_head queued_bufs; |
206 | 241 | spinlock_t queued_bufs_lock; | |
207 | Note that MAX_ISO_BUFS != MAX_FRAMES != MAX_IMAGES.... | 242 | |
208 | We have in effect a back-to-back-double-buffer system. | 243 | /* |
209 | */ | 244 | * Frame currently being filled, this only gets touched by the |
210 | /* 1: isoc */ | 245 | * isoc urb complete handler, and by stream start / stop since |
211 | struct pwc_iso_buf sbuf[MAX_ISO_BUFS]; | 246 | * start / stop touch it before / after starting / killing the urbs |
212 | char iso_init; | 247 | * no locking is needed around this |
213 | 248 | */ | |
214 | /* 2: frame */ | 249 | struct pwc_frame_buf *fill_buf; |
215 | struct pwc_frame_buf *fbuf; /* all frames */ | 250 | |
216 | struct pwc_frame_buf *empty_frames, *empty_frames_tail; /* all empty frames */ | 251 | int frame_header_size, frame_trailer_size; |
217 | struct pwc_frame_buf *full_frames, *full_frames_tail; /* all filled frames */ | 252 | int frame_size; |
218 | struct pwc_frame_buf *fill_frame; /* frame currently being filled */ | 253 | int frame_total_size; /* including header & trailer */ |
219 | struct pwc_frame_buf *read_frame; /* frame currently read by user process */ | 254 | int drop_frames; |
220 | int frame_header_size, frame_trailer_size; | 255 | |
221 | int frame_size; | 256 | void *decompress_data; /* private data for decompression engine */ |
222 | int frame_total_size; /* including header & trailer */ | 257 | |
223 | int drop_frames; | 258 | /* |
224 | 259 | * We have an 'image' and a 'view', where 'image' is the fixed-size img | |
225 | /* 3: decompression */ | 260 | * as delivered by the camera, and 'view' is the size requested by the |
226 | void *decompress_data; /* private data for decompression engine */ | 261 | * program. The camera image is centered in this viewport, laced with |
227 | 262 | * a gray or black border. view_min <= image <= view <= view_max; | |
228 | /* 4: image */ | 263 | */ |
229 | /* We have an 'image' and a 'view', where 'image' is the fixed-size image | 264 | int image_mask; /* supported sizes */ |
230 | as delivered by the camera, and 'view' is the size requested by the | 265 | struct pwc_coord view_min, view_max; /* minimum and maximum view */ |
231 | program. The camera image is centered in this viewport, laced with | 266 | struct pwc_coord abs_max; /* maximum supported size */ |
232 | a gray or black border. view_min <= image <= view <= view_max; | 267 | struct pwc_coord image, view; /* image and viewport size */ |
233 | */ | 268 | struct pwc_coord offset; /* offset of the viewport */ |
234 | int image_mask; /* bitmask of supported sizes */ | 269 | |
235 | struct pwc_coord view_min, view_max; /* minimum and maximum viewable sizes */ | 270 | /*** motorized pan/tilt feature */ |
236 | struct pwc_coord abs_max; /* maximum supported size with compression */ | 271 | struct pwc_mpt_range angle_range; |
237 | struct pwc_coord image, view; /* image and viewport size */ | 272 | int pan_angle; /* in degrees * 100 */ |
238 | struct pwc_coord offset; /* offset within the viewport */ | 273 | int tilt_angle; /* absolute angle; 0,0 is home */ |
239 | 274 | ||
240 | void *image_data; /* total buffer, which is subdivided into ... */ | 275 | /* |
241 | struct pwc_imgbuf images[MAX_IMAGES];/* ...several images... */ | 276 | * Set to 1 when the user push the button, reset to 0 |
242 | int fill_image; /* ...which are rotated. */ | 277 | * when this value is read from sysfs. |
243 | int len_per_image; /* length per image */ | 278 | */ |
244 | int image_read_pos; /* In case we read data in pieces, keep track of were we are in the imagebuffer */ | 279 | int snapshot_button_status; |
245 | int image_used[MAX_IMAGES]; /* For MCAPTURE and SYNC */ | ||
246 | |||
247 | struct mutex modlock; /* to prevent races in video_open(), etc */ | ||
248 | spinlock_t ptrlock; /* for manipulating the buffer pointers */ | ||
249 | |||
250 | /*** motorized pan/tilt feature */ | ||
251 | struct pwc_mpt_range angle_range; | ||
252 | int pan_angle; /* in degrees * 100 */ | ||
253 | int tilt_angle; /* absolute angle; 0,0 is home position */ | ||
254 | int snapshot_button_status; /* set to 1 when the user push the button, reset to 0 when this value is read */ | ||
255 | #ifdef CONFIG_USB_PWC_INPUT_EVDEV | 280 | #ifdef CONFIG_USB_PWC_INPUT_EVDEV |
256 | struct input_dev *button_dev; /* webcam snapshot button input */ | 281 | struct input_dev *button_dev; /* webcam snapshot button input */ |
257 | char button_phys[64]; | 282 | char button_phys[64]; |
258 | #endif | 283 | #endif |
259 | 284 | ||
260 | /*** Misc. data ***/ | 285 | /* controls */ |
261 | wait_queue_head_t frameq; /* When waiting for a frame to finish... */ | 286 | struct v4l2_ctrl_handler ctrl_handler; |
262 | #if PWC_INT_PIPE | 287 | u16 saturation_fmt; |
263 | void *usb_int_handler; /* for the interrupt endpoint */ | 288 | struct v4l2_ctrl *brightness; |
264 | #endif | 289 | struct v4l2_ctrl *contrast; |
290 | struct v4l2_ctrl *saturation; | ||
291 | struct v4l2_ctrl *gamma; | ||
292 | struct { | ||
293 | /* awb / red-blue balance cluster */ | ||
294 | struct v4l2_ctrl *auto_white_balance; | ||
295 | struct v4l2_ctrl *red_balance; | ||
296 | struct v4l2_ctrl *blue_balance; | ||
297 | /* usb ctrl transfers are slow, so we cache things */ | ||
298 | int color_bal_valid; | ||
299 | unsigned long last_color_bal_update; /* In jiffies */ | ||
300 | s32 last_red_balance; | ||
301 | s32 last_blue_balance; | ||
302 | }; | ||
303 | struct { | ||
304 | /* autogain / gain cluster */ | ||
305 | struct v4l2_ctrl *autogain; | ||
306 | struct v4l2_ctrl *gain; | ||
307 | int gain_valid; | ||
308 | unsigned long last_gain_update; /* In jiffies */ | ||
309 | s32 last_gain; | ||
310 | }; | ||
311 | struct { | ||
312 | /* exposure_auto / exposure cluster */ | ||
313 | struct v4l2_ctrl *exposure_auto; | ||
314 | struct v4l2_ctrl *exposure; | ||
315 | int exposure_valid; | ||
316 | unsigned long last_exposure_update; /* In jiffies */ | ||
317 | s32 last_exposure; | ||
318 | }; | ||
319 | struct v4l2_ctrl *colorfx; | ||
320 | struct { | ||
321 | /* autocontour/contour cluster */ | ||
322 | struct v4l2_ctrl *autocontour; | ||
323 | struct v4l2_ctrl *contour; | ||
324 | }; | ||
325 | struct v4l2_ctrl *backlight; | ||
326 | struct v4l2_ctrl *flicker; | ||
327 | struct v4l2_ctrl *noise_reduction; | ||
328 | struct v4l2_ctrl *save_user; | ||
329 | struct v4l2_ctrl *restore_user; | ||
330 | struct v4l2_ctrl *restore_factory; | ||
331 | struct { | ||
332 | /* motor control cluster */ | ||
333 | struct v4l2_ctrl *motor_pan; | ||
334 | struct v4l2_ctrl *motor_tilt; | ||
335 | struct v4l2_ctrl *motor_pan_reset; | ||
336 | struct v4l2_ctrl *motor_tilt_reset; | ||
337 | }; | ||
338 | /* CODEC3 models have both gain and exposure controlled by autogain */ | ||
339 | struct v4l2_ctrl *autogain_expo_cluster[3]; | ||
265 | }; | 340 | }; |
266 | 341 | ||
267 | #ifdef __cplusplus | ||
268 | extern "C" { | ||
269 | #endif | ||
270 | |||
271 | /* Global variables */ | 342 | /* Global variables */ |
272 | #ifdef CONFIG_USB_PWC_DEBUG | 343 | #ifdef CONFIG_USB_PWC_DEBUG |
273 | extern int pwc_trace; | 344 | extern int pwc_trace; |
274 | #endif | 345 | #endif |
275 | extern int pwc_mbufs; | ||
276 | |||
277 | /** functions in pwc-if.c */ | ||
278 | int pwc_handle_frame(struct pwc_device *pdev); | ||
279 | void pwc_next_image(struct pwc_device *pdev); | ||
280 | int pwc_isoc_init(struct pwc_device *pdev); | ||
281 | void pwc_isoc_cleanup(struct pwc_device *pdev); | ||
282 | 346 | ||
283 | /** Functions in pwc-misc.c */ | 347 | /** Functions in pwc-misc.c */ |
284 | /* sizes in pixels */ | 348 | /* sizes in pixels */ |
@@ -291,50 +355,25 @@ void pwc_construct(struct pwc_device *pdev); | |||
291 | /* Request a certain video mode. Returns < 0 if not possible */ | 355 | /* Request a certain video mode. Returns < 0 if not possible */ |
292 | extern int pwc_set_video_mode(struct pwc_device *pdev, int width, int height, int frames, int compression, int snapshot); | 356 | extern int pwc_set_video_mode(struct pwc_device *pdev, int width, int height, int frames, int compression, int snapshot); |
293 | extern unsigned int pwc_get_fps(struct pwc_device *pdev, unsigned int index, unsigned int size); | 357 | extern unsigned int pwc_get_fps(struct pwc_device *pdev, unsigned int index, unsigned int size); |
294 | /* Calculate the number of bytes per image (not frame) */ | ||
295 | extern int pwc_mpt_reset(struct pwc_device *pdev, int flags); | 358 | extern int pwc_mpt_reset(struct pwc_device *pdev, int flags); |
296 | extern int pwc_mpt_set_angle(struct pwc_device *pdev, int pan, int tilt); | 359 | extern int pwc_mpt_set_angle(struct pwc_device *pdev, int pan, int tilt); |
297 | |||
298 | /* Various controls; should be obvious. Value 0..65535, or < 0 on error */ | ||
299 | extern int pwc_get_brightness(struct pwc_device *pdev); | ||
300 | extern int pwc_set_brightness(struct pwc_device *pdev, int value); | ||
301 | extern int pwc_get_contrast(struct pwc_device *pdev); | ||
302 | extern int pwc_set_contrast(struct pwc_device *pdev, int value); | ||
303 | extern int pwc_get_gamma(struct pwc_device *pdev); | ||
304 | extern int pwc_set_gamma(struct pwc_device *pdev, int value); | ||
305 | extern int pwc_get_saturation(struct pwc_device *pdev, int *value); | ||
306 | extern int pwc_set_saturation(struct pwc_device *pdev, int value); | ||
307 | extern int pwc_set_leds(struct pwc_device *pdev, int on_value, int off_value); | 360 | extern int pwc_set_leds(struct pwc_device *pdev, int on_value, int off_value); |
308 | extern int pwc_get_cmos_sensor(struct pwc_device *pdev, int *sensor); | 361 | extern int pwc_get_cmos_sensor(struct pwc_device *pdev, int *sensor); |
309 | extern int pwc_restore_user(struct pwc_device *pdev); | 362 | extern int send_control_msg(struct pwc_device *pdev, |
310 | extern int pwc_save_user(struct pwc_device *pdev); | 363 | u8 request, u16 value, void *buf, int buflen); |
311 | extern int pwc_restore_factory(struct pwc_device *pdev); | 364 | |
312 | 365 | /* Control get / set helpers */ | |
313 | /* exported for use by v4l2 controls */ | 366 | int pwc_get_u8_ctrl(struct pwc_device *pdev, u8 request, u16 value, int *data); |
314 | extern int pwc_get_red_gain(struct pwc_device *pdev, int *value); | 367 | int pwc_set_u8_ctrl(struct pwc_device *pdev, u8 request, u16 value, u8 data); |
315 | extern int pwc_set_red_gain(struct pwc_device *pdev, int value); | 368 | int pwc_get_s8_ctrl(struct pwc_device *pdev, u8 request, u16 value, int *data); |
316 | extern int pwc_get_blue_gain(struct pwc_device *pdev, int *value); | 369 | #define pwc_set_s8_ctrl pwc_set_u8_ctrl |
317 | extern int pwc_set_blue_gain(struct pwc_device *pdev, int value); | 370 | int pwc_get_u16_ctrl(struct pwc_device *pdev, u8 request, u16 value, int *dat); |
318 | extern int pwc_get_awb(struct pwc_device *pdev); | 371 | int pwc_set_u16_ctrl(struct pwc_device *pdev, u8 request, u16 value, u16 data); |
319 | extern int pwc_set_awb(struct pwc_device *pdev, int mode); | 372 | int pwc_button_ctrl(struct pwc_device *pdev, u16 value); |
320 | extern int pwc_set_agc(struct pwc_device *pdev, int mode, int value); | 373 | int pwc_init_controls(struct pwc_device *pdev); |
321 | extern int pwc_get_agc(struct pwc_device *pdev, int *value); | ||
322 | extern int pwc_set_shutter_speed(struct pwc_device *pdev, int mode, int value); | ||
323 | extern int pwc_get_shutter_speed(struct pwc_device *pdev, int *value); | ||
324 | |||
325 | extern int pwc_set_colour_mode(struct pwc_device *pdev, int colour); | ||
326 | extern int pwc_get_colour_mode(struct pwc_device *pdev, int *colour); | ||
327 | extern int pwc_set_contour(struct pwc_device *pdev, int contour); | ||
328 | extern int pwc_get_contour(struct pwc_device *pdev, int *contour); | ||
329 | extern int pwc_set_backlight(struct pwc_device *pdev, int backlight); | ||
330 | extern int pwc_get_backlight(struct pwc_device *pdev, int *backlight); | ||
331 | extern int pwc_set_flicker(struct pwc_device *pdev, int flicker); | ||
332 | extern int pwc_get_flicker(struct pwc_device *pdev, int *flicker); | ||
333 | extern int pwc_set_dynamic_noise(struct pwc_device *pdev, int noise); | ||
334 | extern int pwc_get_dynamic_noise(struct pwc_device *pdev, int *noise); | ||
335 | 374 | ||
336 | /* Power down or up the camera; not supported by all models */ | 375 | /* Power down or up the camera; not supported by all models */ |
337 | extern int pwc_camera_power(struct pwc_device *pdev, int power); | 376 | extern void pwc_camera_power(struct pwc_device *pdev, int power); |
338 | 377 | ||
339 | /* Private ioctl()s; see pwc-ioctl.h */ | 378 | /* Private ioctl()s; see pwc-ioctl.h */ |
340 | extern long pwc_ioctl(struct pwc_device *pdev, unsigned int cmd, void *arg); | 379 | extern long pwc_ioctl(struct pwc_device *pdev, unsigned int cmd, void *arg); |
@@ -343,12 +382,6 @@ extern const struct v4l2_ioctl_ops pwc_ioctl_ops; | |||
343 | 382 | ||
344 | /** pwc-uncompress.c */ | 383 | /** pwc-uncompress.c */ |
345 | /* Expand frame to image, possibly including decompression. Uses read_frame and fill_image */ | 384 | /* Expand frame to image, possibly including decompression. Uses read_frame and fill_image */ |
346 | extern int pwc_decompress(struct pwc_device *pdev); | 385 | int pwc_decompress(struct pwc_device *pdev, struct pwc_frame_buf *fbuf); |
347 | |||
348 | #ifdef __cplusplus | ||
349 | } | ||
350 | #endif | ||
351 | |||
352 | 386 | ||
353 | #endif | 387 | #endif |
354 | /* vim: set cino= formatoptions=croql cindent shiftwidth=8 tabstop=8: */ | ||