1 #ifndef GSPCAV2_H 2 #define GSPCAV2_H 3 4 #include <linux/module.h> 5 #include <linux/kernel.h> 6 #include <linux/usb.h> 7 #include <linux/videodev2.h> 8 #include <media/v4l2-common.h> 9 #include <media/v4l2-ctrls.h> 10 #include <media/v4l2-device.h> 11 #include <linux/mutex.h> 12 13 /* compilation option */ 14 /*#define GSPCA_DEBUG 1*/ 15 16 #ifdef GSPCA_DEBUG 17 /* GSPCA our debug messages */ 18 extern int gspca_debug; 19 #define PDEBUG(level, fmt, ...) \ 20 do { \ 21 if (gspca_debug & (level)) \ 22 pr_info(fmt, ##__VA_ARGS__); \ 23 } while (0) 24 25 #define D_ERR 0x01 26 #define D_PROBE 0x02 27 #define D_CONF 0x04 28 #define D_STREAM 0x08 29 #define D_FRAM 0x10 30 #define D_PACK 0x20 31 #define D_USBI 0x00 32 #define D_USBO 0x00 33 #define D_V4L2 0x0100 34 #else 35 #define PDEBUG(level, fmt, ...) do {} while(0) 36 #endif 37 38 #define GSPCA_MAX_FRAMES 16 /* maximum number of video frame buffers */ 39 /* image transfers */ 40 #define MAX_NURBS 4 /* max number of URBs */ 41 42 43 /* used to list framerates supported by a camera mode (resolution) */ 44 struct framerates { 45 const u8 *rates; 46 int nrates; 47 }; 48 49 /* control definition */ 50 struct gspca_ctrl { 51 s16 val; /* current value */ 52 s16 def; /* default value */ 53 s16 min, max; /* minimum and maximum values */ 54 }; 55 56 /* device information - set at probe time */ 57 struct cam { 58 const struct v4l2_pix_format *cam_mode; /* size nmodes */ 59 const struct framerates *mode_framerates; /* must have size nmodes, 60 * just like cam_mode */ 61 struct gspca_ctrl *ctrls; /* control table - size nctrls */ 62 /* may be NULL */ 63 u32 bulk_size; /* buffer size when image transfer by bulk */ 64 u32 input_flags; /* value for ENUM_INPUT status flags */ 65 u8 nmodes; /* size of cam_mode */ 66 u8 no_urb_create; /* don't create transfer URBs */ 67 u8 bulk_nurbs; /* number of URBs in bulk mode 68 * - cannot be > MAX_NURBS 69 * - when 0 and bulk_size != 0 means 70 * 1 URB and submit done by subdriver */ 71 u8 bulk; /* image transfer by 0:isoc / 1:bulk */ 72 u8 npkt; /* number of packets in an ISOC message 73 * 0 is the default value: 32 packets */ 74 u8 needs_full_bandwidth;/* Set this flag to notify the bandwidth calc. 75 * code that the cam fills all image buffers to 76 * the max, even when using compression. */ 77 }; 78 79 struct gspca_dev; 80 struct gspca_frame; 81 82 /* subdriver operations */ 83 typedef int (*cam_op) (struct gspca_dev *); 84 typedef void (*cam_v_op) (struct gspca_dev *); 85 typedef int (*cam_cf_op) (struct gspca_dev *, const struct usb_device_id *); 86 typedef int (*cam_get_jpg_op) (struct gspca_dev *, 87 struct v4l2_jpegcompression *); 88 typedef int (*cam_set_jpg_op) (struct gspca_dev *, 89 const struct v4l2_jpegcompression *); 90 typedef int (*cam_reg_op) (struct gspca_dev *, 91 struct v4l2_dbg_register *); 92 typedef int (*cam_ident_op) (struct gspca_dev *, 93 struct v4l2_dbg_chip_ident *); 94 typedef void (*cam_streamparm_op) (struct gspca_dev *, 95 struct v4l2_streamparm *); 96 typedef int (*cam_qmnu_op) (struct gspca_dev *, 97 struct v4l2_querymenu *); 98 typedef void (*cam_pkt_op) (struct gspca_dev *gspca_dev, 99 u8 *data, 100 int len); 101 typedef int (*cam_int_pkt_op) (struct gspca_dev *gspca_dev, 102 u8 *data, 103 int len); 104 105 struct ctrl { 106 struct v4l2_queryctrl qctrl; 107 int (*set)(struct gspca_dev *, __s32); 108 int (*get)(struct gspca_dev *, __s32 *); 109 cam_v_op set_control; 110 }; 111 112 /* subdriver description */ 113 struct sd_desc { 114 /* information */ 115 const char *name; /* sub-driver name */ 116 /* controls */ 117 const struct ctrl *ctrls; /* static control definition */ 118 int nctrls; 119 /* mandatory operations */ 120 cam_cf_op config; /* called on probe */ 121 cam_op init; /* called on probe and resume */ 122 cam_op init_controls; /* called on probe */ 123 cam_op start; /* called on stream on after URBs creation */ 124 cam_pkt_op pkt_scan; 125 /* optional operations */ 126 cam_op isoc_init; /* called on stream on before getting the EP */ 127 cam_op isoc_nego; /* called when URB submit failed with NOSPC */ 128 cam_v_op stopN; /* called on stream off - main alt */ 129 cam_v_op stop0; /* called on stream off & disconnect - alt 0 */ 130 cam_v_op dq_callback; /* called when a frame has been dequeued */ 131 cam_get_jpg_op get_jcomp; 132 cam_set_jpg_op set_jcomp; 133 cam_qmnu_op querymenu; 134 cam_streamparm_op get_streamparm; 135 cam_streamparm_op set_streamparm; 136 #ifdef CONFIG_VIDEO_ADV_DEBUG 137 cam_reg_op set_register; 138 cam_reg_op get_register; 139 #endif 140 cam_ident_op get_chip_ident; 141 #if defined(CONFIG_INPUT) || defined(CONFIG_INPUT_MODULE) 142 cam_int_pkt_op int_pkt_scan; 143 /* other_input makes the gspca core create gspca_dev->input even when 144 int_pkt_scan is NULL, for cams with non interrupt driven buttons */ 145 u8 other_input; 146 #endif 147 }; 148 149 /* packet types when moving from iso buf to frame buf */ 150 enum gspca_packet_type { 151 DISCARD_PACKET, 152 FIRST_PACKET, 153 INTER_PACKET, 154 LAST_PACKET 155 }; 156 157 struct gspca_frame { 158 __u8 *data; /* frame buffer */ 159 int vma_use_count; 160 struct v4l2_buffer v4l2_buf; 161 }; 162 163 struct gspca_dev { 164 struct video_device vdev; /* !! must be the first item */ 165 struct module *module; /* subdriver handling the device */ 166 struct v4l2_device v4l2_dev; 167 struct usb_device *dev; 168 struct file *capt_file; /* file doing video capture */ 169 /* protected by queue_lock */ 170 #if defined(CONFIG_INPUT) || defined(CONFIG_INPUT_MODULE) 171 struct input_dev *input_dev; 172 char phys[64]; /* physical device path */ 173 #endif 174 175 struct cam cam; /* device information */ 176 const struct sd_desc *sd_desc; /* subdriver description */ 177 unsigned ctrl_dis; /* disabled controls (bit map) */ 178 unsigned ctrl_inac; /* inactive controls (bit map) */ 179 struct v4l2_ctrl_handler ctrl_handler; 180 181 /* autogain and exposure or gain control cluster, these are global as 182 the autogain/exposure functions in autogain_functions.c use them */ 183 struct { 184 struct v4l2_ctrl *autogain; 185 struct v4l2_ctrl *exposure; 186 struct v4l2_ctrl *gain; 187 int exp_too_low_cnt, exp_too_high_cnt; 188 }; 189 190 #define USB_BUF_SZ 64 191 __u8 *usb_buf; /* buffer for USB exchanges */ 192 struct urb *urb[MAX_NURBS]; 193 #if defined(CONFIG_INPUT) || defined(CONFIG_INPUT_MODULE) 194 struct urb *int_urb; 195 #endif 196 197 __u8 *frbuf; /* buffer for nframes */ 198 struct gspca_frame frame[GSPCA_MAX_FRAMES]; 199 u8 *image; /* image beeing filled */ 200 __u32 frsz; /* frame size */ 201 u32 image_len; /* current length of image */ 202 atomic_t fr_q; /* next frame to queue */ 203 atomic_t fr_i; /* frame being filled */ 204 signed char fr_queue[GSPCA_MAX_FRAMES]; /* frame queue */ 205 char nframes; /* number of frames */ 206 u8 fr_o; /* next frame to dequeue */ 207 __u8 last_packet_type; 208 __s8 empty_packet; /* if (-1) don't check empty packets */ 209 __u8 streaming; /* protected by both mutexes (*) */ 210 211 __u8 curr_mode; /* current camera mode */ 212 __u32 pixfmt; /* current mode parameters */ 213 __u16 width; 214 __u16 height; 215 __u32 sequence; /* frame sequence number */ 216 217 wait_queue_head_t wq; /* wait queue */ 218 struct mutex usb_lock; /* usb exchange protection */ 219 struct mutex queue_lock; /* ISOC queue protection */ 220 int usb_err; /* USB error - protected by usb_lock */ 221 u16 pkt_size; /* ISOC packet size */ 222 #ifdef CONFIG_PM 223 char frozen; /* suspend - resume */ 224 #endif 225 char present; /* device connected */ 226 char nbufread; /* number of buffers for read() */ 227 char memory; /* memory type (V4L2_MEMORY_xxx) */ 228 __u8 iface; /* USB interface number */ 229 __u8 alt; /* USB alternate setting */ 230 u8 audio; /* presence of audio device */ 231 232 /* (*) These variables are proteced by both usb_lock and queue_lock, 233 that is any code setting them is holding *both*, which means that 234 any code getting them needs to hold at least one of them */ 235 }; 236 237 int gspca_dev_probe(struct usb_interface *intf, 238 const struct usb_device_id *id, 239 const struct sd_desc *sd_desc, 240 int dev_size, 241 struct module *module); 242 int gspca_dev_probe2(struct usb_interface *intf, 243 const struct usb_device_id *id, 244 const struct sd_desc *sd_desc, 245 int dev_size, 246 struct module *module); 247 void gspca_disconnect(struct usb_interface *intf); 248 void gspca_frame_add(struct gspca_dev *gspca_dev, 249 enum gspca_packet_type packet_type, 250 const u8 *data, 251 int len); 252 #ifdef CONFIG_PM 253 int gspca_suspend(struct usb_interface *intf, pm_message_t message); 254 int gspca_resume(struct usb_interface *intf); 255 #endif 256 int gspca_expo_autogain(struct gspca_dev *gspca_dev, int avg_lum, 257 int desired_avg_lum, int deadzone, int gain_knee, int exposure_knee); 258 int gspca_coarse_grained_expo_autogain(struct gspca_dev *gspca_dev, 259 int avg_lum, int desired_avg_lum, int deadzone); 260 261 #endif /* GSPCAV2_H */ 262