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