Lines Matching refs:gspca_dev
42 struct gspca_dev gspca_dev; /* !! must be the first item */ member
49 static int stv_sndctrl(struct gspca_dev *gspca_dev, int set, u8 req, u16 val, in stv_sndctrl() argument
59 pipe = usb_rcvctrlpipe(gspca_dev->dev, 0); in stv_sndctrl()
63 pipe = usb_sndctrlpipe(gspca_dev->dev, 0); in stv_sndctrl()
67 pipe = usb_rcvctrlpipe(gspca_dev->dev, 0); in stv_sndctrl()
71 pipe = usb_sndctrlpipe(gspca_dev->dev, 0); in stv_sndctrl()
75 ret = usb_control_msg(gspca_dev->dev, pipe, in stv_sndctrl()
77 val, 0, gspca_dev->usb_buf, size, 500); in stv_sndctrl()
86 static int stv0680_handle_error(struct gspca_dev *gspca_dev, int ret) in stv0680_handle_error() argument
88 stv_sndctrl(gspca_dev, 0, 0x80, 0, 0x02); /* Get Last Error */ in stv0680_handle_error()
90 gspca_dev->usb_buf[0], gspca_dev->usb_buf[1]); in stv0680_handle_error()
94 static int stv0680_get_video_mode(struct gspca_dev *gspca_dev) in stv0680_get_video_mode() argument
97 memset(gspca_dev->usb_buf, 0, 8); in stv0680_get_video_mode()
98 gspca_dev->usb_buf[0] = 0x0f; in stv0680_get_video_mode()
100 if (stv_sndctrl(gspca_dev, 0, 0x87, 0, 0x08) != 0x08) { in stv0680_get_video_mode()
102 return stv0680_handle_error(gspca_dev, -EIO); in stv0680_get_video_mode()
105 return gspca_dev->usb_buf[0]; /* 01 = VGA, 03 = QVGA, 00 = CIF */ in stv0680_get_video_mode()
108 static int stv0680_set_video_mode(struct gspca_dev *gspca_dev, u8 mode) in stv0680_set_video_mode() argument
110 struct sd *sd = (struct sd *) gspca_dev; in stv0680_set_video_mode()
115 memset(gspca_dev->usb_buf, 0, 8); in stv0680_set_video_mode()
116 gspca_dev->usb_buf[0] = mode; in stv0680_set_video_mode()
118 if (stv_sndctrl(gspca_dev, 3, 0x07, 0x0100, 0x08) != 0x08) { in stv0680_set_video_mode()
120 return stv0680_handle_error(gspca_dev, -EIO); in stv0680_set_video_mode()
124 if (stv0680_get_video_mode(gspca_dev) != mode) { in stv0680_set_video_mode()
135 static int sd_config(struct gspca_dev *gspca_dev, in sd_config() argument
139 struct sd *sd = (struct sd *) gspca_dev; in sd_config()
140 struct cam *cam = &gspca_dev->cam; in sd_config()
147 if (stv_sndctrl(gspca_dev, 0, 0x88, 0x5678, 0x02) != 0x02 || in sd_config()
148 gspca_dev->usb_buf[0] != 0x56 || gspca_dev->usb_buf[1] != 0x78) { in sd_config()
150 return stv0680_handle_error(gspca_dev, -ENODEV); in sd_config()
154 if (stv_sndctrl(gspca_dev, 2, 0x06, 0x0200, 0x09) != 0x09) in sd_config()
155 return stv0680_handle_error(gspca_dev, -ENODEV); in sd_config()
157 if (stv_sndctrl(gspca_dev, 2, 0x06, 0x0200, 0x22) != 0x22 || in sd_config()
158 gspca_dev->usb_buf[7] != 0xa0 || gspca_dev->usb_buf[8] != 0x23) { in sd_config()
160 return stv0680_handle_error(gspca_dev, -ENODEV); in sd_config()
162 if (stv_sndctrl(gspca_dev, 0, 0x8a, 0, 0x02) != 0x02) in sd_config()
163 return stv0680_handle_error(gspca_dev, -ENODEV); in sd_config()
164 if (stv_sndctrl(gspca_dev, 0, 0x8b, 0, 0x24) != 0x24) in sd_config()
165 return stv0680_handle_error(gspca_dev, -ENODEV); in sd_config()
166 if (stv_sndctrl(gspca_dev, 0, 0x85, 0, 0x10) != 0x10) in sd_config()
167 return stv0680_handle_error(gspca_dev, -ENODEV); in sd_config()
169 if (!(gspca_dev->usb_buf[7] & 0x09)) { in sd_config()
173 if (gspca_dev->usb_buf[7] & 0x01) in sd_config()
175 if (gspca_dev->usb_buf[7] & 0x02) in sd_config()
177 if (gspca_dev->usb_buf[7] & 0x04) in sd_config()
179 if (gspca_dev->usb_buf[7] & 0x08) in sd_config()
182 if (gspca_dev->usb_buf[7] & 0x01) in sd_config()
189 gspca_dev->usb_buf[0], gspca_dev->usb_buf[1]); in sd_config()
191 gspca_dev->usb_buf[2], gspca_dev->usb_buf[3]); in sd_config()
193 (gspca_dev->usb_buf[4]*16) + (gspca_dev->usb_buf[5]>>4)); in sd_config()
196 ret = stv0680_get_video_mode(gspca_dev); in sd_config()
201 ret = stv0680_set_video_mode(gspca_dev, sd->video_mode); in sd_config()
206 if (stv_sndctrl(gspca_dev, 0, 0x8f, 0, 0x10) != 0x10) in sd_config()
207 return stv0680_handle_error(gspca_dev, -EIO); in sd_config()
211 cam->bulk_size = (gspca_dev->usb_buf[0] << 24) | in sd_config()
212 (gspca_dev->usb_buf[1] << 16) | in sd_config()
213 (gspca_dev->usb_buf[2] << 8) | in sd_config()
214 (gspca_dev->usb_buf[3]); in sd_config()
215 sd->mode.width = (gspca_dev->usb_buf[4] << 8) | in sd_config()
216 (gspca_dev->usb_buf[5]); /* 322, 356, 644 */ in sd_config()
217 sd->mode.height = (gspca_dev->usb_buf[6] << 8) | in sd_config()
218 (gspca_dev->usb_buf[7]); /* 242, 292, 484 */ in sd_config()
231 ret = stv0680_set_video_mode(gspca_dev, sd->orig_mode); in sd_config()
235 if (stv_sndctrl(gspca_dev, 2, 0x06, 0x0100, 0x12) != 0x12 || in sd_config()
236 gspca_dev->usb_buf[8] != 0x53 || gspca_dev->usb_buf[9] != 0x05) { in sd_config()
238 return stv0680_handle_error(gspca_dev, -EIO); in sd_config()
245 static int sd_init(struct gspca_dev *gspca_dev) in sd_init() argument
251 static int sd_start(struct gspca_dev *gspca_dev) in sd_start() argument
254 struct sd *sd = (struct sd *) gspca_dev; in sd_start()
256 ret = stv0680_set_video_mode(gspca_dev, sd->video_mode); in sd_start()
260 if (stv_sndctrl(gspca_dev, 0, 0x85, 0, 0x10) != 0x10) in sd_start()
261 return stv0680_handle_error(gspca_dev, -EIO); in sd_start()
267 if (stv_sndctrl(gspca_dev, 1, 0x09, sd->video_mode << 8, 0x0) != 0x0) in sd_start()
268 return stv0680_handle_error(gspca_dev, -EIO); in sd_start()
273 static void sd_stopN(struct gspca_dev *gspca_dev) in sd_stopN() argument
276 if (stv_sndctrl(gspca_dev, 1, 0x04, 0x0000, 0x0) != 0x0) in sd_stopN()
277 stv0680_handle_error(gspca_dev, -EIO); in sd_stopN()
280 static void sd_stop0(struct gspca_dev *gspca_dev) in sd_stop0() argument
282 struct sd *sd = (struct sd *) gspca_dev; in sd_stop0()
284 if (!sd->gspca_dev.present) in sd_stop0()
287 stv0680_set_video_mode(gspca_dev, sd->orig_mode); in sd_stop0()
290 static void sd_pkt_scan(struct gspca_dev *gspca_dev, in sd_pkt_scan() argument
294 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan()
301 gspca_dev->last_packet_type = DISCARD_PACKET; in sd_pkt_scan()
308 gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); in sd_pkt_scan()
311 gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); in sd_pkt_scan()