• Home
  • Raw
  • Download

Lines Matching full:cam

46 #define FRAME_SIZE_PER_DESC   frame_sizes[cam->cur_alt]
48 static void process_frame(struct camera_data *cam);
56 static void free_sbufs(struct camera_data *cam);
57 static void add_APPn(struct camera_data *cam);
58 static void add_COM(struct camera_data *cam);
59 static int submit_urbs(struct camera_data *cam);
60 static int set_alternate(struct camera_data *cam, unsigned int alt);
61 static int configure_transfer_mode(struct camera_data *cam, unsigned int alt);
87 static void process_frame(struct camera_data *cam) in process_frame() argument
91 unsigned char *inbuff = cam->workbuff->data; in process_frame()
94 cam->workbuff->num, cam->curbuff->num); in process_frame()
96 if(cam->workbuff->length > cam->workbuff->max_length) in process_frame()
97 cam->workbuff->max_length = cam->workbuff->length; in process_frame()
102 cam->workbuff->status = FRAME_ERROR; in process_frame()
110 if(!cam->first_image_seen) { in process_frame()
113 cam->first_image_seen = 1; in process_frame()
114 cam->workbuff->status = FRAME_EMPTY; in process_frame()
117 if (cam->workbuff->length > 3) { in process_frame()
118 if(cam->mmapped && in process_frame()
119 cam->workbuff->length < cam->workbuff->max_length) { in process_frame()
121 memset(cam->workbuff->data+cam->workbuff->length, in process_frame()
122 0, cam->workbuff->max_length- in process_frame()
123 cam->workbuff->length); in process_frame()
125 cam->workbuff->max_length = cam->workbuff->length; in process_frame()
126 cam->workbuff->status = FRAME_READY; in process_frame()
128 if(!cam->mmapped && cam->num_frames > 2) { in process_frame()
142 * cam->num_frames-2 frames before problems in process_frame()
145 cam->curbuff->status = FRAME_EMPTY; in process_frame()
147 cam->curbuff = cam->workbuff; in process_frame()
148 cam->workbuff = cam->workbuff->next; in process_frame()
150 cam->workbuff->num, cam->curbuff->num); in process_frame()
156 cam->workbuff->status = FRAME_ERROR; in process_frame()
166 static void add_APPn(struct camera_data *cam) in add_APPn() argument
168 if(cam->APP_len > 0) { in add_APPn()
169 cam->workbuff->data[cam->workbuff->length++] = 0xFF; in add_APPn()
170 cam->workbuff->data[cam->workbuff->length++] = 0xE0+cam->APPn; in add_APPn()
171 cam->workbuff->data[cam->workbuff->length++] = 0; in add_APPn()
172 cam->workbuff->data[cam->workbuff->length++] = cam->APP_len+2; in add_APPn()
173 memcpy(cam->workbuff->data+cam->workbuff->length, in add_APPn()
174 cam->APP_data, cam->APP_len); in add_APPn()
175 cam->workbuff->length += cam->APP_len; in add_APPn()
185 static void add_COM(struct camera_data *cam) in add_COM() argument
187 if(cam->COM_len > 0) { in add_COM()
188 cam->workbuff->data[cam->workbuff->length++] = 0xFF; in add_COM()
189 cam->workbuff->data[cam->workbuff->length++] = 0xFE; in add_COM()
190 cam->workbuff->data[cam->workbuff->length++] = 0; in add_COM()
191 cam->workbuff->data[cam->workbuff->length++] = cam->COM_len+2; in add_COM()
192 memcpy(cam->workbuff->data+cam->workbuff->length, in add_COM()
193 cam->COM_data, cam->COM_len); in add_COM()
194 cam->workbuff->length += cam->COM_len; in add_COM()
209 struct camera_data *cam = (struct camera_data *) urb->context; in cpia2_usb_complete() local
222 if (!cam->streaming || !video_is_registered(&cam->vdev)) { in cpia2_usb_complete()
224 cam->streaming, video_is_registered(&cam->vdev)); in cpia2_usb_complete()
238 if(cam->workbuff->status == FRAME_READY) { in cpia2_usb_complete()
242 for (ptr = cam->workbuff->next; in cpia2_usb_complete()
243 ptr != cam->workbuff; in cpia2_usb_complete()
252 if (ptr == cam->workbuff) in cpia2_usb_complete()
255 cam->workbuff = ptr; in cpia2_usb_complete()
258 if (cam->workbuff->status == FRAME_EMPTY || in cpia2_usb_complete()
259 cam->workbuff->status == FRAME_ERROR) { in cpia2_usb_complete()
260 cam->workbuff->status = FRAME_READING; in cpia2_usb_complete()
261 cam->workbuff->length = 0; in cpia2_usb_complete()
271 cam->workbuff->status = FRAME_ERROR; in cpia2_usb_complete()
286 cam->workbuff->status = FRAME_ERROR; in cpia2_usb_complete()
292 if(cam->workbuff->status != FRAME_READING) { in cpia2_usb_complete()
298 cam->frame_count++; in cpia2_usb_complete()
301 cam->workbuff->status); in cpia2_usb_complete()
305 if (cam->frame_size < cam->workbuff->length + n) { in cpia2_usb_complete()
307 cam->workbuff->length, n); in cpia2_usb_complete()
308 cam->workbuff->status = FRAME_ERROR; in cpia2_usb_complete()
309 if(cam->workbuff->length > cam->workbuff->max_length) in cpia2_usb_complete()
310 cam->workbuff->max_length = in cpia2_usb_complete()
311 cam->workbuff->length; in cpia2_usb_complete()
315 if (cam->workbuff->length == 0) { in cpia2_usb_complete()
327 v4l2_get_timestamp(&cam->workbuff->timestamp); in cpia2_usb_complete()
328 cam->workbuff->seq = cam->frame_count++; in cpia2_usb_complete()
329 cam->workbuff->data[0] = 0xFF; in cpia2_usb_complete()
330 cam->workbuff->data[1] = 0xD8; in cpia2_usb_complete()
331 cam->workbuff->length = 2; in cpia2_usb_complete()
332 add_APPn(cam); in cpia2_usb_complete()
333 add_COM(cam); in cpia2_usb_complete()
334 memcpy(cam->workbuff->data+cam->workbuff->length, in cpia2_usb_complete()
336 cam->workbuff->length += n-data_offset; in cpia2_usb_complete()
337 } else if (cam->workbuff->length > 0) { in cpia2_usb_complete()
338 memcpy(cam->workbuff->data + cam->workbuff->length, in cpia2_usb_complete()
340 cam->workbuff->length += n; in cpia2_usb_complete()
343 if ((cam->workbuff->length >= 3) && in cpia2_usb_complete()
344 (cam->workbuff->data[cam->workbuff->length - 3] == 0xFF) && in cpia2_usb_complete()
345 (cam->workbuff->data[cam->workbuff->length - 2] == 0xD9) && in cpia2_usb_complete()
346 (cam->workbuff->data[cam->workbuff->length - 1] == 0xFF)) { in cpia2_usb_complete()
348 cam->workbuff->data[cam->workbuff->length - 1] = 0; in cpia2_usb_complete()
349 cam->workbuff->length -= 1; in cpia2_usb_complete()
350 } else if ((cam->workbuff->length >= 2) && in cpia2_usb_complete()
351 (cam->workbuff->data[cam->workbuff->length - 2] == 0xFF) && in cpia2_usb_complete()
352 (cam->workbuff->data[cam->workbuff->length - 1] == 0xD9)) { in cpia2_usb_complete()
357 DBG("Workbuff image size = %d\n",cam->workbuff->length); in cpia2_usb_complete()
358 process_frame(cam); in cpia2_usb_complete()
362 if (waitqueue_active(&cam->wq_stream)) in cpia2_usb_complete()
363 wake_up_interruptible(&cam->wq_stream); in cpia2_usb_complete()
367 if(cam->streaming) { in cpia2_usb_complete()
369 urb->dev = cam->dev; in cpia2_usb_complete()
380 static int configure_transfer_mode(struct camera_data *cam, unsigned int alt) in configure_transfer_mode() argument
395 if (!video_is_registered(&cam->vdev)) in configure_transfer_mode()
409 cpia2_send_command(cam, &cmd); in configure_transfer_mode()
419 cpia2_send_command(cam, &cmd); in configure_transfer_mode()
430 cam->xfer_mode = XFER_BULK; in configure_transfer_mode()
434 cam->xfer_mode = XFER_ISOC; in configure_transfer_mode()
442 cpia2_send_command(cam, &cmd); in configure_transfer_mode()
452 int cpia2_usb_change_streaming_alternate(struct camera_data *cam, in cpia2_usb_change_streaming_alternate() argument
460 if(alt == cam->params.camera_state.stream_mode) in cpia2_usb_change_streaming_alternate()
463 cpia2_usb_stream_pause(cam); in cpia2_usb_change_streaming_alternate()
465 configure_transfer_mode(cam, alt); in cpia2_usb_change_streaming_alternate()
467 cam->params.camera_state.stream_mode = alt; in cpia2_usb_change_streaming_alternate()
470 cpia2_reset_camera(cam); in cpia2_usb_change_streaming_alternate()
472 cpia2_usb_stream_resume(cam); in cpia2_usb_change_streaming_alternate()
482 static int set_alternate(struct camera_data *cam, unsigned int alt) in set_alternate() argument
486 if(alt == cam->cur_alt) in set_alternate()
489 if (cam->cur_alt != USBIF_CMDONLY) { in set_alternate()
490 DBG("Changing from alt %d to %d\n", cam->cur_alt, USBIF_CMDONLY); in set_alternate()
491 ret = usb_set_interface(cam->dev, cam->iface, USBIF_CMDONLY); in set_alternate()
497 ret = usb_set_interface(cam->dev, cam->iface, alt); in set_alternate()
502 cam->old_alt = cam->cur_alt; in set_alternate()
503 cam->cur_alt = alt; in set_alternate()
512 * Free all cam->sbuf[]. All non-NULL .data and .urb members that are non-NULL
516 static void free_sbufs(struct camera_data *cam) in free_sbufs() argument
521 if(cam->sbuf[i].urb) { in free_sbufs()
522 usb_kill_urb(cam->sbuf[i].urb); in free_sbufs()
523 usb_free_urb(cam->sbuf[i].urb); in free_sbufs()
524 cam->sbuf[i].urb = NULL; in free_sbufs()
526 if(cam->sbuf[i].data) { in free_sbufs()
527 kfree(cam->sbuf[i].data); in free_sbufs()
528 cam->sbuf[i].data = NULL; in free_sbufs()
609 int cpia2_usb_transfer_cmd(struct camera_data *cam, in cpia2_usb_transfer_cmd() argument
614 struct usb_device *udev = cam->dev; in cpia2_usb_transfer_cmd()
657 static int submit_urbs(struct camera_data *cam) in submit_urbs() argument
663 if (cam->sbuf[i].data) in submit_urbs()
665 cam->sbuf[i].data = in submit_urbs()
668 if (!cam->sbuf[i].data) { in submit_urbs()
670 kfree(cam->sbuf[i].data); in submit_urbs()
671 cam->sbuf[i].data = NULL; in submit_urbs()
681 if(cam->sbuf[i].urb) { in submit_urbs()
687 usb_free_urb(cam->sbuf[j].urb); in submit_urbs()
689 kfree(cam->sbuf[j].data); in submit_urbs()
690 cam->sbuf[j].data = NULL; in submit_urbs()
695 cam->sbuf[i].urb = urb; in submit_urbs()
696 urb->dev = cam->dev; in submit_urbs()
697 urb->context = cam; in submit_urbs()
698 urb->pipe = usb_rcvisocpipe(cam->dev, 1 /*ISOC endpoint*/); in submit_urbs()
700 urb->transfer_buffer = cam->sbuf[i].data; in submit_urbs()
717 err = usb_submit_urb(cam->sbuf[i].urb, GFP_KERNEL); in submit_urbs()
732 int cpia2_usb_stream_start(struct camera_data *cam, unsigned int alternate) in cpia2_usb_stream_start() argument
737 if(cam->streaming) in cpia2_usb_stream_start()
740 if (cam->flush) { in cpia2_usb_stream_start()
743 for(i=0; i<cam->num_frames; ++i) { in cpia2_usb_stream_start()
744 cam->buffers[i].status = FRAME_EMPTY; in cpia2_usb_stream_start()
745 cam->buffers[i].length = 0; in cpia2_usb_stream_start()
747 cam->curbuff = &cam->buffers[0]; in cpia2_usb_stream_start()
748 cam->workbuff = cam->curbuff->next; in cpia2_usb_stream_start()
749 cam->flush = false; in cpia2_usb_stream_start()
752 old_alt = cam->params.camera_state.stream_mode; in cpia2_usb_stream_start()
753 cam->params.camera_state.stream_mode = 0; in cpia2_usb_stream_start()
754 ret = cpia2_usb_change_streaming_alternate(cam, alternate); in cpia2_usb_stream_start()
758 cam->params.camera_state.stream_mode = old_alt; in cpia2_usb_stream_start()
759 ret2 = set_alternate(cam, USBIF_CMDONLY); in cpia2_usb_stream_start()
765 cam->frame_count = 0; in cpia2_usb_stream_start()
766 cam->streaming = 1; in cpia2_usb_stream_start()
767 ret = cpia2_usb_stream_resume(cam); in cpia2_usb_stream_start()
777 int cpia2_usb_stream_pause(struct camera_data *cam) in cpia2_usb_stream_pause() argument
780 if(cam->streaming) { in cpia2_usb_stream_pause()
781 free_sbufs(cam); in cpia2_usb_stream_pause()
782 ret = set_alternate(cam, USBIF_CMDONLY); in cpia2_usb_stream_pause()
792 int cpia2_usb_stream_resume(struct camera_data *cam) in cpia2_usb_stream_resume() argument
795 if(cam->streaming) { in cpia2_usb_stream_resume()
796 cam->first_image_seen = 0; in cpia2_usb_stream_resume()
797 ret = set_alternate(cam, cam->params.camera_state.stream_mode); in cpia2_usb_stream_resume()
801 cpia2_do_command(cam, CPIA2_CMD_SET_USER_EFFECTS, TRANSFER_WRITE, in cpia2_usb_stream_resume()
802 cam->params.vp_params.user_effects); in cpia2_usb_stream_resume()
803 ret = submit_urbs(cam); in cpia2_usb_stream_resume()
814 int cpia2_usb_stream_stop(struct camera_data *cam) in cpia2_usb_stream_stop() argument
818 ret = cpia2_usb_stream_pause(cam); in cpia2_usb_stream_stop()
819 cam->streaming = 0; in cpia2_usb_stream_stop()
820 configure_transfer_mode(cam, 0); in cpia2_usb_stream_stop()
835 struct camera_data *cam; in cpia2_usb_probe() local
846 cam = cpia2_init_camera_struct(intf); in cpia2_usb_probe()
847 if (cam == NULL) in cpia2_usb_probe()
850 cam->dev = udev; in cpia2_usb_probe()
851 cam->iface = interface->bInterfaceNumber; in cpia2_usb_probe()
853 ret = set_alternate(cam, USBIF_CMDONLY); in cpia2_usb_probe()
856 kfree(cam); in cpia2_usb_probe()
861 if((ret = cpia2_init_camera(cam)) < 0) { in cpia2_usb_probe()
863 kfree(cam); in cpia2_usb_probe()
867 cam->params.version.firmware_revision_hi, in cpia2_usb_probe()
868 cam->params.version.firmware_revision_lo, in cpia2_usb_probe()
869 cam->params.version.asic_id, in cpia2_usb_probe()
870 cam->params.version.asic_rev); in cpia2_usb_probe()
872 cam->params.pnp_id.vendor, in cpia2_usb_probe()
873 cam->params.pnp_id.product, in cpia2_usb_probe()
874 cam->params.pnp_id.device_revision); in cpia2_usb_probe()
876 cam->params.version.sensor_flags, in cpia2_usb_probe()
877 cam->params.version.sensor_rev); in cpia2_usb_probe()
879 usb_set_intfdata(intf, cam); in cpia2_usb_probe()
881 ret = cpia2_register_camera(cam); in cpia2_usb_probe()
884 kfree(cam); in cpia2_usb_probe()
898 struct camera_data *cam = usb_get_intfdata(intf); in cpia2_usb_disconnect() local
902 cpia2_usb_stream_stop(cam); in cpia2_usb_disconnect()
904 mutex_lock(&cam->v4l2_lock); in cpia2_usb_disconnect()
906 cpia2_unregister_camera(cam); in cpia2_usb_disconnect()
907 v4l2_device_disconnect(&cam->v4l2_dev); in cpia2_usb_disconnect()
908 mutex_unlock(&cam->v4l2_lock); in cpia2_usb_disconnect()
910 if(cam->buffers) { in cpia2_usb_disconnect()
912 cam->curbuff->status = FRAME_READY; in cpia2_usb_disconnect()
913 cam->curbuff->length = 0; in cpia2_usb_disconnect()
914 wake_up_interruptible(&cam->wq_stream); in cpia2_usb_disconnect()
917 v4l2_device_put(&cam->v4l2_dev); in cpia2_usb_disconnect()
924 struct camera_data *cam = usb_get_intfdata(intf); in cpia2_usb_suspend() local
926 mutex_lock(&cam->v4l2_lock); in cpia2_usb_suspend()
927 if (cam->streaming) { in cpia2_usb_suspend()
928 cpia2_usb_stream_stop(cam); in cpia2_usb_suspend()
929 cam->streaming = 1; in cpia2_usb_suspend()
931 mutex_unlock(&cam->v4l2_lock); in cpia2_usb_suspend()
940 struct camera_data *cam = usb_get_intfdata(intf); in cpia2_usb_resume() local
942 mutex_lock(&cam->v4l2_lock); in cpia2_usb_resume()
943 v4l2_ctrl_handler_setup(&cam->hdl); in cpia2_usb_resume()
944 if (cam->streaming) { in cpia2_usb_resume()
945 cam->streaming = 0; in cpia2_usb_resume()
946 cpia2_usb_stream_start(cam, in cpia2_usb_resume()
947 cam->params.camera_state.stream_mode); in cpia2_usb_resume()
949 mutex_unlock(&cam->v4l2_lock); in cpia2_usb_resume()