Lines Matching +full:sd +full:- +full:lines
1 // SPDX-License-Identifier: GPL-2.0-or-later
15 * Copyright (C) 2009 Jean-Francois Moine (http://moinejf.free.fr)
36 struct sd { struct
44 0x00 -> 176x144, cropped
45 0x01 -> 176x144, cropped
46 0x02 -> 176x144, cropped
47 0x03 -> 176x144, cropped
48 0x04 -> 176x144, binned
49 0x05 -> 320x240
50 0x06 -> 320x240
51 0x07 -> 160x120, cropped
52 0x08 -> 160x120, cropped
53 0x09 -> 160x120, binned (note has 136 lines)
54 0x0a -> 160x120, binned (note has 136 lines)
55 0x0b -> 160x120, cropped
79 struct usb_device *dev = gspca_dev->dev; in reg_w()
82 if (gspca_dev->usb_err < 0) in reg_w()
95 gspca_dev->usb_err = ret; in reg_w()
101 struct usb_device *dev = gspca_dev->dev; in reg_r()
104 if (gspca_dev->usb_err < 0) in reg_r()
111 gspca_dev->usb_buf, in reg_r()
116 gspca_dev->usb_err = ret; in reg_r()
121 memset(gspca_dev->usb_buf, 0, 2); in reg_r()
139 gspca_dev->cam.cam_mode = vga_mode; in sd_config()
140 gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode); in sd_config()
141 gspca_dev->cam.no_urb_create = 1; in sd_config()
154 * Register 0x10 counts from 1 - 3, with 3 being "ready" in sd_init()
159 if (gspca_dev->usb_buf[0] == 3) in sd_init()
165 return gspca_dev->usb_err; in sd_init()
170 struct sd *sd = (struct sd *) gspca_dev; in sd_start() local
176 intf = usb_ifnum_to_if(sd->gspca_dev.dev, sd->gspca_dev.iface); in sd_start()
177 alt = usb_altnum_to_altsetting(intf, sd->gspca_dev.alt); in sd_start()
180 return -EIO; in sd_start()
183 if (alt->desc.bNumEndpoints < 2) in sd_start()
184 return -ENODEV; in sd_start()
186 packet_size = le16_to_cpu(alt->endpoint[0].desc.wMaxPacketSize); in sd_start()
188 n = gspca_dev->cam.cam_mode[gspca_dev->curr_mode].priv; in sd_start()
193 if (gspca_dev->usb_err) in sd_start()
194 return gspca_dev->usb_err; in sd_start()
196 /* create 4 URBs - 2 on endpoint 0x83 and 2 on 0x082 */ in sd_start()
204 le16_to_cpu(alt->endpoint[i].desc.wMaxPacketSize); in sd_start()
207 return -ENOMEM; in sd_start()
208 gspca_dev->urb[n] = urb; in sd_start()
209 urb->transfer_buffer = usb_alloc_coherent(gspca_dev->dev, in sd_start()
212 &urb->transfer_dma); in sd_start()
213 if (urb->transfer_buffer == NULL) { in sd_start()
215 return -ENOMEM; in sd_start()
218 urb->dev = gspca_dev->dev; in sd_start()
219 urb->context = gspca_dev; in sd_start()
220 urb->transfer_buffer_length = packet_size * SD_NPKT; in sd_start()
221 urb->pipe = usb_rcvisocpipe(gspca_dev->dev, in sd_start()
223 urb->transfer_flags = URB_ISO_ASAP in sd_start()
225 urb->interval = 1; in sd_start()
226 urb->complete = sd_isoc_irq; in sd_start()
227 urb->number_of_packets = SD_NPKT; in sd_start()
229 urb->iso_frame_desc[i].length = packet_size; in sd_start()
230 urb->iso_frame_desc[i].offset = packet_size * i; in sd_start()
239 struct sd *sd __maybe_unused = (struct sd *) gspca_dev; in sd_stopN()
245 if (sd->snapshot_pressed) { in sd_stopN()
246 input_report_key(gspca_dev->input_dev, KEY_CAMERA, 0); in sd_stopN()
247 input_sync(gspca_dev->input_dev); in sd_stopN()
248 sd->snapshot_pressed = 0; in sd_stopN()
256 struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context; in sd_isoc_irq()
257 struct sd *sd = (struct sd *) gspca_dev; in sd_isoc_irq() local
262 gspca_dbg(gspca_dev, D_PACK, "sd isoc irq\n"); in sd_isoc_irq()
263 if (!gspca_dev->streaming) in sd_isoc_irq()
266 if (urb->status != 0) { in sd_isoc_irq()
267 if (urb->status == -ESHUTDOWN) in sd_isoc_irq()
270 if (gspca_dev->frozen) in sd_isoc_irq()
273 gspca_err(gspca_dev, "urb status: %d\n", urb->status); in sd_isoc_irq()
281 if (urb->transfer_buffer_length > 32) { in sd_isoc_irq()
282 sd->last_data_urb = urb; in sd_isoc_irq()
287 data_urb = sd->last_data_urb; in sd_isoc_irq()
288 sd->last_data_urb = NULL; in sd_isoc_irq()
290 if (!data_urb || data_urb->start_frame != status_urb->start_frame) { in sd_isoc_irq()
295 if (data_urb->number_of_packets != status_urb->number_of_packets) { in sd_isoc_irq()
297 data_urb->number_of_packets, in sd_isoc_irq()
298 status_urb->number_of_packets); in sd_isoc_irq()
302 for (i = 0; i < status_urb->number_of_packets; i++) { in sd_isoc_irq()
303 if (data_urb->iso_frame_desc[i].status || in sd_isoc_irq()
304 status_urb->iso_frame_desc[i].status) { in sd_isoc_irq()
305 gspca_err(gspca_dev, "pkt %d data-status %d, status-status %d\n", in sd_isoc_irq()
307 data_urb->iso_frame_desc[i].status, in sd_isoc_irq()
308 status_urb->iso_frame_desc[i].status); in sd_isoc_irq()
309 gspca_dev->last_packet_type = DISCARD_PACKET; in sd_isoc_irq()
313 if (status_urb->iso_frame_desc[i].actual_length != 1) { in sd_isoc_irq()
315 status_urb->iso_frame_desc[i].actual_length); in sd_isoc_irq()
316 gspca_dev->last_packet_type = DISCARD_PACKET; in sd_isoc_irq()
320 st = *((u8 *)status_urb->transfer_buffer in sd_isoc_irq()
321 + status_urb->iso_frame_desc[i].offset); in sd_isoc_irq()
323 data = (u8 *)data_urb->transfer_buffer in sd_isoc_irq()
324 + data_urb->iso_frame_desc[i].offset; in sd_isoc_irq()
326 /* st: 0x80-0xff: frame start with frame number (ie 0-7f) in sd_isoc_irq()
341 if (sd->snapshot_pressed != button_state) { in sd_isoc_irq()
342 input_report_key(gspca_dev->input_dev, in sd_isoc_irq()
345 input_sync(gspca_dev->input_dev); in sd_isoc_irq()
346 sd->snapshot_pressed = button_state; in sd_isoc_irq()
353 data_urb->iso_frame_desc[i].actual_length); in sd_isoc_irq()
371 container_of(ctrl->handler, struct gspca_dev, ctrl_handler); in sd_s_ctrl()
373 gspca_dev->usb_err = 0; in sd_s_ctrl()
375 if (!gspca_dev->streaming) in sd_s_ctrl()
378 switch (ctrl->id) { in sd_s_ctrl()
381 reg_w(gspca_dev, ctrl->val, BRIGHTNESS_REG); in sd_s_ctrl()
386 reg_w(gspca_dev, ctrl->val, CONTRAST_REG); in sd_s_ctrl()
391 reg_w(gspca_dev, ctrl->val, SATURATION_REG); in sd_s_ctrl()
396 reg_w(gspca_dev, ctrl->val, WHITEBAL_REG); in sd_s_ctrl()
401 reg_w(gspca_dev, ctrl->val, SHARPNESS_REG); in sd_s_ctrl()
405 return gspca_dev->usb_err; in sd_s_ctrl()
414 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls()
416 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls()
431 if (hdl->error) { in sd_init_controls()
433 return hdl->error; in sd_init_controls()
438 /* sub-driver description */
451 /* -- module initialisation -- */
458 /* -- device connect -- */
462 return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd), in sd_probe()