Lines Matching refs:cam
37 #define FRAME_SIZE_PER_DESC frame_sizes[cam->cur_alt]
39 static void process_frame(struct camera_data *cam);
47 static void free_sbufs(struct camera_data *cam);
48 static void add_APPn(struct camera_data *cam);
49 static void add_COM(struct camera_data *cam);
50 static int submit_urbs(struct camera_data *cam);
51 static int set_alternate(struct camera_data *cam, unsigned int alt);
52 static int configure_transfer_mode(struct camera_data *cam, unsigned int alt);
78 static void process_frame(struct camera_data *cam)
82 unsigned char *inbuff = cam->workbuff->data;
85 cam->workbuff->num, cam->curbuff->num);
87 if(cam->workbuff->length > cam->workbuff->max_length)
88 cam->workbuff->max_length = cam->workbuff->length;
93 cam->workbuff->status = FRAME_ERROR;
101 if(!cam->first_image_seen) {
104 cam->first_image_seen = 1;
105 cam->workbuff->status = FRAME_EMPTY;
108 if (cam->workbuff->length > 3) {
109 if(cam->mmapped &&
110 cam->workbuff->length < cam->workbuff->max_length) {
112 memset(cam->workbuff->data+cam->workbuff->length,
113 0, cam->workbuff->max_length-
114 cam->workbuff->length);
116 cam->workbuff->max_length = cam->workbuff->length;
117 cam->workbuff->status = FRAME_READY;
119 if(!cam->mmapped && cam->num_frames > 2) {
133 * cam->num_frames-2 frames before problems
136 cam->curbuff->status = FRAME_EMPTY;
138 cam->curbuff = cam->workbuff;
139 cam->workbuff = cam->workbuff->next;
141 cam->workbuff->num, cam->curbuff->num);
147 cam->workbuff->status = FRAME_ERROR;
157 static void add_APPn(struct camera_data *cam)
159 if(cam->APP_len > 0) {
160 cam->workbuff->data[cam->workbuff->length++] = 0xFF;
161 cam->workbuff->data[cam->workbuff->length++] = 0xE0+cam->APPn;
162 cam->workbuff->data[cam->workbuff->length++] = 0;
163 cam->workbuff->data[cam->workbuff->length++] = cam->APP_len+2;
164 memcpy(cam->workbuff->data+cam->workbuff->length,
165 cam->APP_data, cam->APP_len);
166 cam->workbuff->length += cam->APP_len;
176 static void add_COM(struct camera_data *cam)
178 if(cam->COM_len > 0) {
179 cam->workbuff->data[cam->workbuff->length++] = 0xFF;
180 cam->workbuff->data[cam->workbuff->length++] = 0xFE;
181 cam->workbuff->data[cam->workbuff->length++] = 0;
182 cam->workbuff->data[cam->workbuff->length++] = cam->COM_len+2;
183 memcpy(cam->workbuff->data+cam->workbuff->length,
184 cam->COM_data, cam->COM_len);
185 cam->workbuff->length += cam->COM_len;
200 struct camera_data *cam = (struct camera_data *) urb->context;
213 if (!cam->streaming || !video_is_registered(&cam->vdev)) {
215 cam->streaming, video_is_registered(&cam->vdev));
229 if(cam->workbuff->status == FRAME_READY) {
233 for (ptr = cam->workbuff->next;
234 ptr != cam->workbuff;
243 if (ptr == cam->workbuff)
246 cam->workbuff = ptr;
249 if (cam->workbuff->status == FRAME_EMPTY ||
250 cam->workbuff->status == FRAME_ERROR) {
251 cam->workbuff->status = FRAME_READING;
252 cam->workbuff->length = 0;
262 cam->workbuff->status = FRAME_ERROR;
277 cam->workbuff->status = FRAME_ERROR;
283 if(cam->workbuff->status != FRAME_READING) {
289 cam->frame_count++;
292 cam->workbuff->status);
296 if (cam->frame_size < cam->workbuff->length + n) {
298 cam->workbuff->length, n);
299 cam->workbuff->status = FRAME_ERROR;
300 if(cam->workbuff->length > cam->workbuff->max_length)
301 cam->workbuff->max_length =
302 cam->workbuff->length;
306 if (cam->workbuff->length == 0) {
318 cam->workbuff->ts = ktime_get_ns();
319 cam->workbuff->seq = cam->frame_count++;
320 cam->workbuff->data[0] = 0xFF;
321 cam->workbuff->data[1] = 0xD8;
322 cam->workbuff->length = 2;
323 add_APPn(cam);
324 add_COM(cam);
325 memcpy(cam->workbuff->data+cam->workbuff->length,
327 cam->workbuff->length += n-data_offset;
328 } else if (cam->workbuff->length > 0) {
329 memcpy(cam->workbuff->data + cam->workbuff->length,
331 cam->workbuff->length += n;
334 if ((cam->workbuff->length >= 3) &&
335 (cam->workbuff->data[cam->workbuff->length - 3] == 0xFF) &&
336 (cam->workbuff->data[cam->workbuff->length - 2] == 0xD9) &&
337 (cam->workbuff->data[cam->workbuff->length - 1] == 0xFF)) {
339 cam->workbuff->data[cam->workbuff->length - 1] = 0;
340 cam->workbuff->length -= 1;
341 } else if ((cam->workbuff->length >= 2) &&
342 (cam->workbuff->data[cam->workbuff->length - 2] == 0xFF) &&
343 (cam->workbuff->data[cam->workbuff->length - 1] == 0xD9)) {
348 DBG("Workbuff image size = %d\n",cam->workbuff->length);
349 process_frame(cam);
353 if (waitqueue_active(&cam->wq_stream))
354 wake_up_interruptible(&cam->wq_stream);
358 if(cam->streaming) {
360 urb->dev = cam->dev;
371 static int configure_transfer_mode(struct camera_data *cam, unsigned int alt)
386 if (!video_is_registered(&cam->vdev))
400 cpia2_send_command(cam, &cmd);
410 cpia2_send_command(cam, &cmd);
421 cam->xfer_mode = XFER_BULK;
425 cam->xfer_mode = XFER_ISOC;
433 cpia2_send_command(cam, &cmd);
443 int cpia2_usb_change_streaming_alternate(struct camera_data *cam,
451 if(alt == cam->params.camera_state.stream_mode)
454 cpia2_usb_stream_pause(cam);
456 configure_transfer_mode(cam, alt);
458 cam->params.camera_state.stream_mode = alt;
461 cpia2_reset_camera(cam);
463 cpia2_usb_stream_resume(cam);
473 static int set_alternate(struct camera_data *cam, unsigned int alt)
477 if(alt == cam->cur_alt)
480 if (cam->cur_alt != USBIF_CMDONLY) {
481 DBG("Changing from alt %d to %d\n", cam->cur_alt, USBIF_CMDONLY);
482 ret = usb_set_interface(cam->dev, cam->iface, USBIF_CMDONLY);
488 ret = usb_set_interface(cam->dev, cam->iface, alt);
493 cam->old_alt = cam->cur_alt;
494 cam->cur_alt = alt;
503 * Free all cam->sbuf[]. All non-NULL .data and .urb members that are non-NULL
507 static void free_sbufs(struct camera_data *cam)
512 if(cam->sbuf[i].urb) {
513 usb_kill_urb(cam->sbuf[i].urb);
514 usb_free_urb(cam->sbuf[i].urb);
515 cam->sbuf[i].urb = NULL;
517 if(cam->sbuf[i].data) {
518 kfree(cam->sbuf[i].data);
519 cam->sbuf[i].data = NULL;
600 int cpia2_usb_transfer_cmd(struct camera_data *cam,
605 struct usb_device *udev = cam->dev;
648 static int submit_urbs(struct camera_data *cam)
654 if (cam->sbuf[i].data)
656 cam->sbuf[i].data =
659 if (!cam->sbuf[i].data) {
661 kfree(cam->sbuf[i].data);
662 cam->sbuf[i].data = NULL;
672 if(cam->sbuf[i].urb) {
678 usb_free_urb(cam->sbuf[j].urb);
680 kfree(cam->sbuf[j].data);
681 cam->sbuf[j].data = NULL;
686 cam->sbuf[i].urb = urb;
687 urb->dev = cam->dev;
688 urb->context = cam;
689 urb->pipe = usb_rcvisocpipe(cam->dev, 1 /*ISOC endpoint*/);
691 urb->transfer_buffer = cam->sbuf[i].data;
708 err = usb_submit_urb(cam->sbuf[i].urb, GFP_KERNEL);
723 int cpia2_usb_stream_start(struct camera_data *cam, unsigned int alternate)
728 if(cam->streaming)
731 if (cam->flush) {
734 for(i=0; i<cam->num_frames; ++i) {
735 cam->buffers[i].status = FRAME_EMPTY;
736 cam->buffers[i].length = 0;
738 cam->curbuff = &cam->buffers[0];
739 cam->workbuff = cam->curbuff->next;
740 cam->flush = false;
743 old_alt = cam->params.camera_state.stream_mode;
744 cam->params.camera_state.stream_mode = 0;
745 ret = cpia2_usb_change_streaming_alternate(cam, alternate);
749 cam->params.camera_state.stream_mode = old_alt;
750 ret2 = set_alternate(cam, USBIF_CMDONLY);
756 cam->frame_count = 0;
757 cam->streaming = 1;
758 ret = cpia2_usb_stream_resume(cam);
768 int cpia2_usb_stream_pause(struct camera_data *cam)
771 if(cam->streaming) {
772 free_sbufs(cam);
773 ret = set_alternate(cam, USBIF_CMDONLY);
783 int cpia2_usb_stream_resume(struct camera_data *cam)
786 if(cam->streaming) {
787 cam->first_image_seen = 0;
788 ret = set_alternate(cam, cam->params.camera_state.stream_mode);
792 cpia2_do_command(cam, CPIA2_CMD_SET_USER_EFFECTS, TRANSFER_WRITE,
793 cam->params.vp_params.user_effects);
794 ret = submit_urbs(cam);
805 int cpia2_usb_stream_stop(struct camera_data *cam)
809 ret = cpia2_usb_stream_pause(cam);
810 cam->streaming = 0;
811 configure_transfer_mode(cam, 0);
826 struct camera_data *cam;
837 cam = cpia2_init_camera_struct(intf);
838 if (cam == NULL)
841 cam->dev = udev;
842 cam->iface = interface->bInterfaceNumber;
844 ret = set_alternate(cam, USBIF_CMDONLY);
851 if((ret = cpia2_init_camera(cam)) < 0) {
856 cam->params.version.firmware_revision_hi,
857 cam->params.version.firmware_revision_lo,
858 cam->params.version.asic_id,
859 cam->params.version.asic_rev);
861 cam->params.pnp_id.vendor,
862 cam->params.pnp_id.product,
863 cam->params.pnp_id.device_revision);
865 cam->params.version.sensor_flags,
866 cam->params.version.sensor_rev);
868 usb_set_intfdata(intf, cam);
870 ret = cpia2_register_camera(cam);
879 cpia2_deinit_camera_struct(cam, intf);
890 struct camera_data *cam = usb_get_intfdata(intf);
894 cpia2_usb_stream_stop(cam);
896 mutex_lock(&cam->v4l2_lock);
898 cpia2_unregister_camera(cam);
899 v4l2_device_disconnect(&cam->v4l2_dev);
900 mutex_unlock(&cam->v4l2_lock);
902 if(cam->buffers) {
904 cam->curbuff->status = FRAME_READY;
905 cam->curbuff->length = 0;
906 wake_up_interruptible(&cam->wq_stream);
909 v4l2_device_put(&cam->v4l2_dev);
916 struct camera_data *cam = usb_get_intfdata(intf);
918 mutex_lock(&cam->v4l2_lock);
919 if (cam->streaming) {
920 cpia2_usb_stream_stop(cam);
921 cam->streaming = 1;
923 mutex_unlock(&cam->v4l2_lock);
932 struct camera_data *cam = usb_get_intfdata(intf);
934 mutex_lock(&cam->v4l2_lock);
935 v4l2_ctrl_handler_setup(&cam->hdl);
936 if (cam->streaming) {
937 cam->streaming = 0;
938 cpia2_usb_stream_start(cam,
939 cam->params.camera_state.stream_mode);
941 mutex_unlock(&cam->v4l2_lock);