36 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
38 #define MODULE_NAME "sq905"
41 #include <linux/slab.h>
50 #define SQ905_CMD_TIMEOUT 500
51 #define SQ905_DATA_TIMEOUT 1000
54 #define SQ905_MAX_TRANSFER 0x8000
55 #define FRAME_HEADER_LEN 64
61 #define SQ905_BULK_READ 0x03
62 #define SQ905_COMMAND 0x06
63 #define SQ905_PING 0x07
64 #define SQ905_READ_DONE 0xc0
70 #define SQ905_HIRES_MASK 0x00000300
71 #define SQ905_ORIENTATION_MASK 0x00000100
76 #define SQ905_CONFIG 0x20
77 #define SQ905_DATA 0x30
78 #define SQ905_CLEAR 0xa0
79 #define SQ905_CAPTURE_LOW 0x60
80 #define SQ905_CAPTURE_MED 0x61
81 #define SQ905_CAPTURE_HIGH 0x62
98 .sizeimage = 160 * 120,
103 .sizeimage = 320 * 240,
108 .sizeimage = 640 * 480,
122 usb_sndctrlpipe(gspca_dev->
dev, 0),
128 pr_err(
"%s: usb_control_msg failed (%d)\n", __func__, ret);
133 usb_sndctrlpipe(gspca_dev->
dev, 0),
139 pr_err(
"%s: usb_control_msg failed 2 (%d)\n", __func__, ret);
149 static int sq905_ack_frame(
struct gspca_dev *gspca_dev)
155 usb_sndctrlpipe(gspca_dev->
dev, 0),
161 pr_err(
"%s: usb_control_msg failed (%d)\n", __func__, ret);
172 sq905_read_data(
struct gspca_dev *gspca_dev,
u8 *
data,
int size,
int need_lock)
181 usb_sndctrlpipe(gspca_dev->
dev, 0),
189 pr_err(
"%s: usb_control_msg failed (%d)\n", __func__, ret);
193 usb_rcvbulkpipe(gspca_dev->
dev, 0x81),
197 if (ret < 0 || act_len != size) {
198 pr_err(
"bulk read fail (%d) len %d/%d\n", ret, act_len, size);
215 struct gspca_dev *gspca_dev = &dev->
gspca_dev;
227 pr_err(
"Couldn't allocate USB buffer\n");
231 frame_sz = gspca_dev->
cam.cam_mode[gspca_dev->
curr_mode].sizeimage
236 if (gspca_dev->frozen)
241 bytes_left = frame_sz;
248 while (bytes_left > 0 && gspca_dev->
present) {
251 ret = sq905_read_data(gspca_dev, buffer, data_len, 1);
255 "Got %d bytes out of %d for frame",
256 data_len, bytes_left);
266 }
else if (bytes_left == 0) {
283 ret = sq905_ack_frame(gspca_dev);
299 static int sd_config(
struct gspca_dev *gspca_dev,
303 struct sd *dev = (
struct sd *) gspca_dev;
316 static void sd_stop0(
struct gspca_dev *gspca_dev)
318 struct sd *dev = (
struct sd *) gspca_dev;
329 static int sd_init(
struct gspca_dev *gspca_dev)
340 ret = sq905_command(gspca_dev,
SQ905_ID);
343 ret = sq905_read_data(gspca_dev, gspca_dev->
usb_buf, 4, 0);
353 PDEBUG(D_CONF,
"SQ905 camera ID %08x detected", ident);
354 gspca_dev->
cam.cam_mode = sq905_mode;
357 gspca_dev->
cam.nmodes--;
368 static int sd_start(
struct gspca_dev *gspca_dev)
370 struct sd *dev = (
struct sd *) gspca_dev;
377 PDEBUG(D_STREAM,
"Start streaming at high resolution");
381 PDEBUG(D_STREAM,
"Start streaming at medium resolution");
385 PDEBUG(D_STREAM,
"Start streaming at low resolution");
402 {USB_DEVICE(0x2770, 0x9120)},
427 static struct usb_driver sd_driver = {
429 .id_table = device_table,
433 .suspend = gspca_suspend,
434 .resume = gspca_resume,
435 .reset_resume = gspca_resume,