Lines Matching refs:mdc800
229 static struct mdc800_data* mdc800; variable
286 struct mdc800_data* mdc800=urb->context; in mdc800_usb_irq() local
287 struct device *dev = &mdc800->dev->dev; in mdc800_usb_irq()
293 if (!mdc800->camera_busy) in mdc800_usb_irq()
295 mdc800->camera_busy=1; in mdc800_usb_irq()
301 if (mdc800->camera_busy && mdc800_isReady (b)) in mdc800_usb_irq()
303 mdc800->camera_busy=0; in mdc800_usb_irq()
312 memcpy (mdc800->camera_response,b,8); in mdc800_usb_irq()
316 wake_up= ( mdc800->camera_request_ready > 0 ) in mdc800_usb_irq()
319 ((mdc800->camera_request_ready == 1) && (!mdc800->camera_busy)) in mdc800_usb_irq()
321 ((mdc800->camera_request_ready == 2) && data_received) in mdc800_usb_irq()
323 ((mdc800->camera_request_ready == 3) && (mdc800->camera_busy)) in mdc800_usb_irq()
330 mdc800->camera_request_ready=0; in mdc800_usb_irq()
331 mdc800->irq_woken=1; in mdc800_usb_irq()
332 wake_up (&mdc800->irq_wait); in mdc800_usb_irq()
348 mdc800->camera_request_ready=1+mode; in mdc800_usb_waitForIRQ()
350 wait_event_timeout(mdc800->irq_wait, mdc800->irq_woken, in mdc800_usb_waitForIRQ()
352 mdc800->irq_woken = 0; in mdc800_usb_waitForIRQ()
354 if (mdc800->camera_request_ready>0) in mdc800_usb_waitForIRQ()
356 mdc800->camera_request_ready=0; in mdc800_usb_waitForIRQ()
357 dev_err(&mdc800->dev->dev, "timeout waiting for camera.\n"); in mdc800_usb_waitForIRQ()
361 if (mdc800->state == NOT_CONNECTED) in mdc800_usb_waitForIRQ()
365 mdc800->camera_request_ready=0; in mdc800_usb_waitForIRQ()
378 struct mdc800_data* mdc800=urb->context; in mdc800_usb_write_notify() local
382 dev_err(&mdc800->dev->dev, in mdc800_usb_write_notify()
385 mdc800->state=READY; in mdc800_usb_write_notify()
386 mdc800->written = 1; in mdc800_usb_write_notify()
387 wake_up (&mdc800->write_wait); in mdc800_usb_write_notify()
396 struct mdc800_data* mdc800=urb->context; in mdc800_usb_download_notify() local
401 memcpy (mdc800->out, urb->transfer_buffer, 64); in mdc800_usb_download_notify()
402 mdc800->out_count=64; in mdc800_usb_download_notify()
403 mdc800->out_ptr=0; in mdc800_usb_download_notify()
404 mdc800->download_left-=64; in mdc800_usb_download_notify()
405 if (mdc800->download_left == 0) in mdc800_usb_download_notify()
407 mdc800->state=READY; in mdc800_usb_download_notify()
410 dev_err(&mdc800->dev->dev, in mdc800_usb_download_notify()
413 mdc800->downloaded = 1; in mdc800_usb_download_notify()
414 wake_up (&mdc800->download_wait); in mdc800_usb_download_notify()
446 if (mdc800->dev != NULL) in mdc800_usb_probe()
474 mdc800->endpoint[i]=-1; in mdc800_usb_probe()
479 mdc800->endpoint[i]=intf_desc->endpoint [j].desc.bEndpointAddress ; in mdc800_usb_probe()
486 if (mdc800->endpoint[i] == -1) in mdc800_usb_probe()
496 mutex_lock(&mdc800->io_lock); in mdc800_usb_probe()
501 mutex_unlock(&mdc800->io_lock); in mdc800_usb_probe()
505 mdc800->dev=dev; in mdc800_usb_probe()
506 mdc800->open=0; in mdc800_usb_probe()
510 mdc800->irq_urb, in mdc800_usb_probe()
511 mdc800->dev, in mdc800_usb_probe()
512 usb_rcvintpipe (mdc800->dev,mdc800->endpoint [1]), in mdc800_usb_probe()
513 mdc800->irq_urb_buffer, in mdc800_usb_probe()
516 mdc800, in mdc800_usb_probe()
521 mdc800->write_urb, in mdc800_usb_probe()
522 mdc800->dev, in mdc800_usb_probe()
523 usb_sndbulkpipe (mdc800->dev, mdc800->endpoint[0]), in mdc800_usb_probe()
524 mdc800->write_urb_buffer, in mdc800_usb_probe()
527 mdc800 in mdc800_usb_probe()
531 mdc800->download_urb, in mdc800_usb_probe()
532 mdc800->dev, in mdc800_usb_probe()
533 usb_rcvbulkpipe (mdc800->dev, mdc800->endpoint [3]), in mdc800_usb_probe()
534 mdc800->download_urb_buffer, in mdc800_usb_probe()
537 mdc800 in mdc800_usb_probe()
540 mdc800->state=READY; in mdc800_usb_probe()
542 mutex_unlock(&mdc800->io_lock); in mdc800_usb_probe()
544 usb_set_intfdata(intf, mdc800); in mdc800_usb_probe()
554 struct mdc800_data* mdc800 = usb_get_intfdata(intf); in mdc800_usb_disconnect() local
558 if (mdc800) { in mdc800_usb_disconnect()
559 if (mdc800->state == NOT_CONNECTED) in mdc800_usb_disconnect()
566 mutex_lock(&mdc800->io_lock); in mdc800_usb_disconnect()
567 mdc800->state=NOT_CONNECTED; in mdc800_usb_disconnect()
569 usb_kill_urb(mdc800->irq_urb); in mdc800_usb_disconnect()
570 usb_kill_urb(mdc800->write_urb); in mdc800_usb_disconnect()
571 usb_kill_urb(mdc800->download_urb); in mdc800_usb_disconnect()
572 mutex_unlock(&mdc800->io_lock); in mdc800_usb_disconnect()
574 mdc800->dev = NULL; in mdc800_usb_disconnect()
605 return mdc800->pic_len; in mdc800_getAnswerSize()
624 mutex_lock(&mdc800->io_lock); in mdc800_device_open()
626 if (mdc800->state == NOT_CONNECTED) in mdc800_device_open()
631 if (mdc800->open) in mdc800_device_open()
637 mdc800->in_count=0; in mdc800_device_open()
638 mdc800->out_count=0; in mdc800_device_open()
639 mdc800->out_ptr=0; in mdc800_device_open()
640 mdc800->pic_index=0; in mdc800_device_open()
641 mdc800->pic_len=-1; in mdc800_device_open()
642 mdc800->download_left=0; in mdc800_device_open()
644 mdc800->camera_busy=0; in mdc800_device_open()
645 mdc800->camera_request_ready=0; in mdc800_device_open()
648 mdc800->irq_urb->dev = mdc800->dev; in mdc800_device_open()
649 retval = usb_submit_urb (mdc800->irq_urb, GFP_KERNEL); in mdc800_device_open()
651 dev_err(&mdc800->dev->dev, in mdc800_device_open()
657 mdc800->open=1; in mdc800_device_open()
658 dev_dbg(&mdc800->dev->dev, "Mustek MDC800 device opened.\n"); in mdc800_device_open()
661 mutex_unlock(&mdc800->io_lock); in mdc800_device_open()
673 mutex_lock(&mdc800->io_lock); in mdc800_device_release()
674 if (mdc800->open && (mdc800->state != NOT_CONNECTED)) in mdc800_device_release()
676 usb_kill_urb(mdc800->irq_urb); in mdc800_device_release()
677 usb_kill_urb(mdc800->write_urb); in mdc800_device_release()
678 usb_kill_urb(mdc800->download_urb); in mdc800_device_release()
679 mdc800->open=0; in mdc800_device_release()
686 mutex_unlock(&mdc800->io_lock); in mdc800_device_release()
700 mutex_lock(&mdc800->io_lock); in mdc800_device_read()
701 if (mdc800->state == NOT_CONNECTED) in mdc800_device_read()
703 mutex_unlock(&mdc800->io_lock); in mdc800_device_read()
706 if (mdc800->state == WORKING) in mdc800_device_read()
710 mutex_unlock(&mdc800->io_lock); in mdc800_device_read()
713 if (!mdc800->open) in mdc800_device_read()
715 mutex_unlock(&mdc800->io_lock); in mdc800_device_read()
723 mutex_unlock(&mdc800->io_lock); in mdc800_device_read()
727 sts=left > (mdc800->out_count-mdc800->out_ptr)?mdc800->out_count-mdc800->out_ptr:left; in mdc800_device_read()
732 if (mdc800->state == DOWNLOAD) in mdc800_device_read()
734 mdc800->out_count=0; in mdc800_device_read()
735 mdc800->out_ptr=0; in mdc800_device_read()
738 mdc800->download_urb->dev = mdc800->dev; in mdc800_device_read()
739 retval = usb_submit_urb (mdc800->download_urb, GFP_KERNEL); in mdc800_device_read()
741 dev_err(&mdc800->dev->dev, in mdc800_device_read()
744 mutex_unlock(&mdc800->io_lock); in mdc800_device_read()
747 wait_event_timeout(mdc800->download_wait, in mdc800_device_read()
748 mdc800->downloaded, in mdc800_device_read()
750 mdc800->downloaded = 0; in mdc800_device_read()
751 if (mdc800->download_urb->status != 0) in mdc800_device_read()
753 dev_err(&mdc800->dev->dev, in mdc800_device_read()
756 mdc800->download_urb->status); in mdc800_device_read()
757 mutex_unlock(&mdc800->io_lock); in mdc800_device_read()
764 mutex_unlock(&mdc800->io_lock); in mdc800_device_read()
771 if (copy_to_user(ptr, &mdc800->out [mdc800->out_ptr], in mdc800_device_read()
773 mutex_unlock(&mdc800->io_lock); in mdc800_device_read()
778 mdc800->out_ptr+=sts; in mdc800_device_read()
782 mutex_unlock(&mdc800->io_lock); in mdc800_device_read()
798 mutex_lock(&mdc800->io_lock); in mdc800_device_write()
799 if (mdc800->state != READY) in mdc800_device_write()
801 mutex_unlock(&mdc800->io_lock); in mdc800_device_write()
804 if (!mdc800->open ) in mdc800_device_write()
806 mutex_unlock(&mdc800->io_lock); in mdc800_device_write()
815 mutex_unlock(&mdc800->io_lock); in mdc800_device_write()
821 mutex_unlock(&mdc800->io_lock); in mdc800_device_write()
828 mdc800->in_count=0; in mdc800_device_write()
829 mdc800->out_count=0; in mdc800_device_write()
830 mdc800->out_ptr=0; in mdc800_device_write()
831 mdc800->download_left=0; in mdc800_device_write()
835 if (mdc800->in_count < 8) in mdc800_device_write()
837 mdc800->in[mdc800->in_count] = c; in mdc800_device_write()
838 mdc800->in_count++; in mdc800_device_write()
842 mutex_unlock(&mdc800->io_lock); in mdc800_device_write()
847 if (mdc800->in_count == 8) in mdc800_device_write()
853 dev_err(&mdc800->dev->dev, in mdc800_device_write()
855 mutex_unlock(&mdc800->io_lock); in mdc800_device_write()
859 answersize=mdc800_getAnswerSize (mdc800->in[1]); in mdc800_device_write()
861 mdc800->state=WORKING; in mdc800_device_write()
862 memcpy (mdc800->write_urb->transfer_buffer, mdc800->in,8); in mdc800_device_write()
863 mdc800->write_urb->dev = mdc800->dev; in mdc800_device_write()
864 retval = usb_submit_urb (mdc800->write_urb, GFP_KERNEL); in mdc800_device_write()
866 dev_err(&mdc800->dev->dev, in mdc800_device_write()
869 mutex_unlock(&mdc800->io_lock); in mdc800_device_write()
872 wait_event_timeout(mdc800->write_wait, mdc800->written, in mdc800_device_write()
874 mdc800->written = 0; in mdc800_device_write()
875 if (mdc800->state == WORKING) in mdc800_device_write()
877 usb_kill_urb(mdc800->write_urb); in mdc800_device_write()
878 mutex_unlock(&mdc800->io_lock); in mdc800_device_write()
882 switch ((unsigned char) mdc800->in[1]) in mdc800_device_write()
886 if (mdc800->pic_len < 0) in mdc800_device_write()
888 dev_err(&mdc800->dev->dev, in mdc800_device_write()
891 mdc800->state=READY; in mdc800_device_write()
892 mutex_unlock(&mdc800->io_lock); in mdc800_device_write()
895 mdc800->pic_len=-1; in mdc800_device_write()
898 mdc800->download_left=answersize+64; in mdc800_device_write()
899 mdc800->state=DOWNLOAD; in mdc800_device_write()
910 dev_err(&mdc800->dev->dev, "requesting answer from irq fails\n"); in mdc800_device_write()
911 mutex_unlock(&mdc800->io_lock); in mdc800_device_write()
917 memcpy (mdc800->out, mdc800->camera_response,8); in mdc800_device_write()
920 memcpy (&mdc800->out[8], mdc800->camera_response,8); in mdc800_device_write()
922 mdc800->out_ptr=0; in mdc800_device_write()
923 mdc800->out_count=16; in mdc800_device_write()
926 if (mdc800->in [1] == (char) 0x07) in mdc800_device_write()
928 …mdc800->pic_len=(int) 65536*(unsigned char) mdc800->camera_response[0]+256*(unsigned char) mdc800-… in mdc800_device_write()
930 dev_dbg(&mdc800->dev->dev, "cached imagesize = %i\n", mdc800->pic_len); in mdc800_device_write()
938 dev_err(&mdc800->dev->dev, "Command Timeout.\n"); in mdc800_device_write()
939 mutex_unlock(&mdc800->io_lock); in mdc800_device_write()
943 mdc800->state=READY; in mdc800_device_write()
949 mutex_unlock(&mdc800->io_lock); in mdc800_device_write()
998 mdc800=kzalloc (sizeof (struct mdc800_data), GFP_KERNEL); in usb_mdc800_init()
999 if (!mdc800) in usb_mdc800_init()
1002 mdc800->dev = NULL; in usb_mdc800_init()
1003 mdc800->state=NOT_CONNECTED; in usb_mdc800_init()
1004 mutex_init (&mdc800->io_lock); in usb_mdc800_init()
1006 init_waitqueue_head (&mdc800->irq_wait); in usb_mdc800_init()
1007 init_waitqueue_head (&mdc800->write_wait); in usb_mdc800_init()
1008 init_waitqueue_head (&mdc800->download_wait); in usb_mdc800_init()
1010 mdc800->irq_woken = 0; in usb_mdc800_init()
1011 mdc800->downloaded = 0; in usb_mdc800_init()
1012 mdc800->written = 0; in usb_mdc800_init()
1014 mdc800->irq_urb_buffer=kmalloc (8, GFP_KERNEL); in usb_mdc800_init()
1015 if (!mdc800->irq_urb_buffer) in usb_mdc800_init()
1017 mdc800->write_urb_buffer=kmalloc (8, GFP_KERNEL); in usb_mdc800_init()
1018 if (!mdc800->write_urb_buffer) in usb_mdc800_init()
1020 mdc800->download_urb_buffer=kmalloc (64, GFP_KERNEL); in usb_mdc800_init()
1021 if (!mdc800->download_urb_buffer) in usb_mdc800_init()
1024 mdc800->irq_urb=usb_alloc_urb (0, GFP_KERNEL); in usb_mdc800_init()
1025 if (!mdc800->irq_urb) in usb_mdc800_init()
1027 mdc800->download_urb=usb_alloc_urb (0, GFP_KERNEL); in usb_mdc800_init()
1028 if (!mdc800->download_urb) in usb_mdc800_init()
1030 mdc800->write_urb=usb_alloc_urb (0, GFP_KERNEL); in usb_mdc800_init()
1031 if (!mdc800->write_urb) in usb_mdc800_init()
1048 if (mdc800 != NULL) in usb_mdc800_init()
1052 kfree(mdc800->download_urb_buffer); in usb_mdc800_init()
1053 kfree(mdc800->write_urb_buffer); in usb_mdc800_init()
1054 kfree(mdc800->irq_urb_buffer); in usb_mdc800_init()
1056 usb_free_urb(mdc800->write_urb); in usb_mdc800_init()
1057 usb_free_urb(mdc800->download_urb); in usb_mdc800_init()
1058 usb_free_urb(mdc800->irq_urb); in usb_mdc800_init()
1060 kfree (mdc800); in usb_mdc800_init()
1062 mdc800 = NULL; in usb_mdc800_init()
1071 usb_free_urb (mdc800->irq_urb); in usb_mdc800_cleanup()
1072 usb_free_urb (mdc800->download_urb); in usb_mdc800_cleanup()
1073 usb_free_urb (mdc800->write_urb); in usb_mdc800_cleanup()
1075 kfree (mdc800->irq_urb_buffer); in usb_mdc800_cleanup()
1076 kfree (mdc800->write_urb_buffer); in usb_mdc800_cleanup()
1077 kfree (mdc800->download_urb_buffer); in usb_mdc800_cleanup()
1079 kfree (mdc800); in usb_mdc800_cleanup()
1080 mdc800 = NULL; in usb_mdc800_cleanup()