diff options
Diffstat (limited to 'drivers/media/video/gspca/gspca.h')
-rw-r--r-- | drivers/media/video/gspca/gspca.h | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/drivers/media/video/gspca/gspca.h b/drivers/media/video/gspca/gspca.h new file mode 100644 index 000000000000..3fd2c4eee204 --- /dev/null +++ b/drivers/media/video/gspca/gspca.h | |||
@@ -0,0 +1,176 @@ | |||
1 | #ifndef GSPCAV2_H | ||
2 | #define GSPCAV2_H | ||
3 | |||
4 | #include <linux/module.h> | ||
5 | #include <linux/version.h> | ||
6 | #include <linux/kernel.h> | ||
7 | #include <linux/usb.h> | ||
8 | #include <linux/videodev2.h> | ||
9 | #include <media/v4l2-common.h> | ||
10 | #include <linux/mutex.h> | ||
11 | |||
12 | #ifdef CONFIG_VIDEO_ADV_DEBUG | ||
13 | /* GSPCA our debug messages */ | ||
14 | extern int gspca_debug; | ||
15 | #define PDEBUG(level, fmt, args...) \ | ||
16 | do {\ | ||
17 | if (gspca_debug & (level)) \ | ||
18 | printk(KERN_INFO MODULE_NAME ": " fmt "\n", ## args); \ | ||
19 | } while (0) | ||
20 | #define D_ERR 0x01 | ||
21 | #define D_PROBE 0x02 | ||
22 | #define D_CONF 0x04 | ||
23 | #define D_STREAM 0x08 | ||
24 | #define D_FRAM 0x10 | ||
25 | #define D_PACK 0x20 | ||
26 | #define D_USBI 0x40 | ||
27 | #define D_USBO 0x80 | ||
28 | #define D_V4L2 0x0100 | ||
29 | #else | ||
30 | #define PDEBUG(level, fmt, args...) | ||
31 | #endif | ||
32 | #undef err | ||
33 | #define err(fmt, args...) \ | ||
34 | do {\ | ||
35 | printk(KERN_ERR MODULE_NAME ": " fmt "\n", ## args); \ | ||
36 | } while (0) | ||
37 | #undef info | ||
38 | #define info(fmt, args...) \ | ||
39 | do {\ | ||
40 | printk(KERN_INFO MODULE_NAME ": " fmt "\n", ## args); \ | ||
41 | } while (0) | ||
42 | #undef warn | ||
43 | #define warn(fmt, args...) \ | ||
44 | do {\ | ||
45 | printk(KERN_WARNING MODULE_NAME ": " fmt "\n", ## args); \ | ||
46 | } while (0) | ||
47 | |||
48 | #define GSPCA_MAX_FRAMES 16 /* maximum number of video frame buffers */ | ||
49 | /* ISOC transfers */ | ||
50 | #define MAX_NURBS 16 /* max number of URBs */ | ||
51 | #define ISO_MAX_PKT 32 /* max number of packets in an ISOC transfer */ | ||
52 | #define ISO_MAX_SIZE 0x8000 /* max size of one URB buffer (32 Kb) */ | ||
53 | |||
54 | /* device information - set at probe time */ | ||
55 | struct cam { | ||
56 | char *dev_name; | ||
57 | struct v4l2_pix_format *cam_mode; /* size nmodes */ | ||
58 | char nmodes; | ||
59 | __u8 epaddr; | ||
60 | }; | ||
61 | |||
62 | struct gspca_dev; | ||
63 | struct gspca_frame; | ||
64 | |||
65 | /* subdriver operations */ | ||
66 | typedef int (*cam_op) (struct gspca_dev *); | ||
67 | typedef void (*cam_v_op) (struct gspca_dev *); | ||
68 | typedef int (*cam_cf_op) (struct gspca_dev *, const struct usb_device_id *); | ||
69 | typedef int (*cam_jpg_op) (struct gspca_dev *, | ||
70 | struct v4l2_jpegcompression *); | ||
71 | typedef int (*cam_qmnu_op) (struct gspca_dev *, | ||
72 | struct v4l2_querymenu *); | ||
73 | typedef void (*cam_pkt_op) (struct gspca_dev *gspca_dev, | ||
74 | struct gspca_frame *frame, | ||
75 | __u8 *data, | ||
76 | int len); | ||
77 | |||
78 | struct ctrl { | ||
79 | struct v4l2_queryctrl qctrl; | ||
80 | int (*set)(struct gspca_dev *, __s32); | ||
81 | int (*get)(struct gspca_dev *, __s32 *); | ||
82 | }; | ||
83 | |||
84 | /* subdriver description */ | ||
85 | struct sd_desc { | ||
86 | /* information */ | ||
87 | const char *name; /* sub-driver name */ | ||
88 | /* controls */ | ||
89 | const struct ctrl *ctrls; | ||
90 | int nctrls; | ||
91 | /* operations */ | ||
92 | cam_cf_op config; /* called on probe */ | ||
93 | cam_op open; /* called on open */ | ||
94 | cam_v_op start; /* called on stream on */ | ||
95 | cam_v_op stopN; /* called on stream off - main alt */ | ||
96 | cam_v_op stop0; /* called on stream off - alt 0 */ | ||
97 | cam_v_op close; /* called on close */ | ||
98 | cam_pkt_op pkt_scan; | ||
99 | /* optional operations */ | ||
100 | cam_v_op dq_callback; /* called when a frame has been dequeued */ | ||
101 | cam_jpg_op get_jcomp; | ||
102 | cam_jpg_op set_jcomp; | ||
103 | cam_qmnu_op querymenu; | ||
104 | }; | ||
105 | |||
106 | /* packet types when moving from iso buf to frame buf */ | ||
107 | #define DISCARD_PACKET 0 | ||
108 | #define FIRST_PACKET 1 | ||
109 | #define INTER_PACKET 2 | ||
110 | #define LAST_PACKET 3 | ||
111 | |||
112 | struct gspca_frame { | ||
113 | __u8 *data; /* frame buffer */ | ||
114 | __u8 *data_end; /* end of frame while filling */ | ||
115 | int vma_use_count; | ||
116 | struct v4l2_buffer v4l2_buf; | ||
117 | }; | ||
118 | |||
119 | struct gspca_dev { | ||
120 | struct video_device vdev; /* !! must be the first item */ | ||
121 | struct file_operations fops; | ||
122 | struct usb_device *dev; | ||
123 | struct file *capt_file; /* file doing video capture */ | ||
124 | |||
125 | struct cam cam; /* device information */ | ||
126 | const struct sd_desc *sd_desc; /* subdriver description */ | ||
127 | |||
128 | __u8 usb_buf[8]; /* buffer for USB exchanges */ | ||
129 | struct urb *urb[MAX_NURBS]; | ||
130 | |||
131 | __u8 *frbuf; /* buffer for nframes */ | ||
132 | struct gspca_frame frame[GSPCA_MAX_FRAMES]; | ||
133 | __u32 frsz; /* frame size */ | ||
134 | char nframes; /* number of frames */ | ||
135 | char fr_i; /* frame being filled */ | ||
136 | char fr_q; /* next frame to queue */ | ||
137 | char fr_o; /* next frame to dequeue */ | ||
138 | signed char fr_queue[GSPCA_MAX_FRAMES]; /* frame queue */ | ||
139 | char last_packet_type; | ||
140 | |||
141 | __u8 iface; /* USB interface number */ | ||
142 | __u8 alt; /* USB alternate setting */ | ||
143 | __u8 curr_mode; /* current camera mode */ | ||
144 | __u32 pixfmt; /* current mode parameters */ | ||
145 | __u16 width; | ||
146 | __u16 height; | ||
147 | |||
148 | atomic_t nevent; /* number of frames done */ | ||
149 | wait_queue_head_t wq; /* wait queue */ | ||
150 | struct mutex usb_lock; /* usb exchange protection */ | ||
151 | struct mutex read_lock; /* read protection */ | ||
152 | struct mutex queue_lock; /* ISOC queue protection */ | ||
153 | __u32 sequence; /* frame sequence number */ | ||
154 | char streaming; | ||
155 | char users; /* number of opens */ | ||
156 | char present; /* device connected */ | ||
157 | char nbufread; /* number of buffers for read() */ | ||
158 | char nurbs; /* number of allocated URBs */ | ||
159 | char memory; /* memory type (V4L2_MEMORY_xxx) */ | ||
160 | __u8 nbalt; /* number of USB alternate settings */ | ||
161 | }; | ||
162 | |||
163 | int gspca_dev_probe(struct usb_interface *intf, | ||
164 | const struct usb_device_id *id, | ||
165 | const struct sd_desc *sd_desc, | ||
166 | int dev_size, | ||
167 | struct module *module); | ||
168 | void gspca_disconnect(struct usb_interface *intf); | ||
169 | struct gspca_frame *gspca_frame_add(struct gspca_dev *gspca_dev, | ||
170 | int packet_type, | ||
171 | struct gspca_frame *frame, | ||
172 | const __u8 *data, | ||
173 | int len); | ||
174 | int gspca_auto_gain_n_exposure(struct gspca_dev *gspca_dev, int avg_lum, | ||
175 | int desired_avg_lum, int deadzone, int gain_knee, int exposure_knee); | ||
176 | #endif /* GSPCAV2_H */ | ||