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