Lines Matching defs:mdc800
20 * Fix: mdc800 used sleep_on and slept with io_lock held.
40 * bugfix : The mdc800->state field gets set to READY after the
50 * The mdc800 driver gets assigned the USB Minor 32-47. The Registration
216 static struct mdc800_data* mdc800;
273 struct mdc800_data* mdc800=urb->context;
274 struct device *dev = &mdc800->dev->dev;
280 if (!mdc800->camera_busy)
282 mdc800->camera_busy=1;
288 if (mdc800->camera_busy && mdc800_isReady (b))
290 mdc800->camera_busy=0;
299 memcpy (mdc800->camera_response,b,8);
303 wake_up= ( mdc800->camera_request_ready > 0 )
306 ((mdc800->camera_request_ready == 1) && (!mdc800->camera_busy))
308 ((mdc800->camera_request_ready == 2) && data_received)
310 ((mdc800->camera_request_ready == 3) && (mdc800->camera_busy))
317 mdc800->camera_request_ready=0;
318 mdc800->irq_woken=1;
319 wake_up (&mdc800->irq_wait);
335 mdc800->camera_request_ready=1+mode;
337 wait_event_timeout(mdc800->irq_wait, mdc800->irq_woken,
339 mdc800->irq_woken = 0;
341 if (mdc800->camera_request_ready>0)
343 mdc800->camera_request_ready=0;
344 dev_err(&mdc800->dev->dev, "timeout waiting for camera.\n");
348 if (mdc800->state == NOT_CONNECTED)
350 printk(KERN_WARNING "mdc800: Camera gets disconnected "
352 mdc800->camera_request_ready=0;
365 struct mdc800_data* mdc800=urb->context;
369 dev_err(&mdc800->dev->dev,
372 mdc800->state=READY;
373 mdc800->written = 1;
374 wake_up (&mdc800->write_wait);
383 struct mdc800_data* mdc800=urb->context;
388 memcpy (mdc800->out, urb->transfer_buffer, 64);
389 mdc800->out_count=64;
390 mdc800->out_ptr=0;
391 mdc800->download_left-=64;
392 if (mdc800->download_left == 0)
394 mdc800->state=READY;
397 dev_err(&mdc800->dev->dev,
400 mdc800->downloaded = 1;
401 wake_up (&mdc800->download_wait);
412 .name = "mdc800%d",
433 if (mdc800->dev != NULL)
461 mdc800->endpoint[i]=-1;
466 mdc800->endpoint[i]=intf_desc->endpoint [j].desc.bEndpointAddress ;
473 if (mdc800->endpoint[i] == -1)
483 mutex_lock(&mdc800->io_lock);
488 mutex_unlock(&mdc800->io_lock);
492 mdc800->dev=dev;
493 mdc800->open=0;
497 mdc800->irq_urb,
498 mdc800->dev,
499 usb_rcvintpipe (mdc800->dev,mdc800->endpoint [1]),
500 mdc800->irq_urb_buffer,
503 mdc800,
508 mdc800->write_urb,
509 mdc800->dev,
510 usb_sndbulkpipe (mdc800->dev, mdc800->endpoint[0]),
511 mdc800->write_urb_buffer,
514 mdc800
518 mdc800->download_urb,
519 mdc800->dev,
520 usb_rcvbulkpipe (mdc800->dev, mdc800->endpoint [3]),
521 mdc800->download_urb_buffer,
524 mdc800
527 mdc800->state=READY;
529 mutex_unlock(&mdc800->io_lock);
531 usb_set_intfdata(intf, mdc800);
541 struct mdc800_data* mdc800 = usb_get_intfdata(intf);
545 if (mdc800) {
546 if (mdc800->state == NOT_CONNECTED)
553 mutex_lock(&mdc800->io_lock);
554 mdc800->state=NOT_CONNECTED;
556 usb_kill_urb(mdc800->irq_urb);
557 usb_kill_urb(mdc800->write_urb);
558 usb_kill_urb(mdc800->download_urb);
559 mutex_unlock(&mdc800->io_lock);
561 mdc800->dev = NULL;
592 return mdc800->pic_len;
611 mutex_lock(&mdc800->io_lock);
613 if (mdc800->state == NOT_CONNECTED)
618 if (mdc800->open)
624 mdc800->in_count=0;
625 mdc800->out_count=0;
626 mdc800->out_ptr=0;
627 mdc800->pic_index=0;
628 mdc800->pic_len=-1;
629 mdc800->download_left=0;
631 mdc800->camera_busy=0;
632 mdc800->camera_request_ready=0;
635 mdc800->irq_urb->dev = mdc800->dev;
636 retval = usb_submit_urb (mdc800->irq_urb, GFP_KERNEL);
638 dev_err(&mdc800->dev->dev,
644 mdc800->open=1;
645 dev_dbg(&mdc800->dev->dev, "Mustek MDC800 device opened.\n");
648 mutex_unlock(&mdc800->io_lock);
660 mutex_lock(&mdc800->io_lock);
661 if (mdc800->open && (mdc800->state != NOT_CONNECTED))
663 usb_kill_urb(mdc800->irq_urb);
664 usb_kill_urb(mdc800->write_urb);
665 usb_kill_urb(mdc800->download_urb);
666 mdc800->open=0;
673 mutex_unlock(&mdc800->io_lock);
687 mutex_lock(&mdc800->io_lock);
688 if (mdc800->state == NOT_CONNECTED)
690 mutex_unlock(&mdc800->io_lock);
693 if (mdc800->state == WORKING)
695 printk(KERN_WARNING "mdc800: Illegal State \"working\""
697 mutex_unlock(&mdc800->io_lock);
700 if (!mdc800->open)
702 mutex_unlock(&mdc800->io_lock);
710 mutex_unlock(&mdc800->io_lock);
714 sts=left > (mdc800->out_count-mdc800->out_ptr)?mdc800->out_count-mdc800->out_ptr:left;
719 if (mdc800->state == DOWNLOAD)
721 mdc800->out_count=0;
722 mdc800->out_ptr=0;
725 mdc800->download_urb->dev = mdc800->dev;
726 retval = usb_submit_urb (mdc800->download_urb, GFP_KERNEL);
728 dev_err(&mdc800->dev->dev,
731 mutex_unlock(&mdc800->io_lock);
734 wait_event_timeout(mdc800->download_wait,
735 mdc800->downloaded,
737 mdc800->downloaded = 0;
738 if (mdc800->download_urb->status != 0)
740 dev_err(&mdc800->dev->dev,
743 mdc800->download_urb->status);
744 mutex_unlock(&mdc800->io_lock);
751 mutex_unlock(&mdc800->io_lock);
758 if (copy_to_user(ptr, &mdc800->out [mdc800->out_ptr],
760 mutex_unlock(&mdc800->io_lock);
765 mdc800->out_ptr+=sts;
769 mutex_unlock(&mdc800->io_lock);
785 mutex_lock(&mdc800->io_lock);
786 if (mdc800->state != READY)
788 mutex_unlock(&mdc800->io_lock);
791 if (!mdc800->open )
793 mutex_unlock(&mdc800->io_lock);
802 mutex_unlock(&mdc800->io_lock);
808 mutex_unlock(&mdc800->io_lock);
815 mdc800->in_count=0;
816 mdc800->out_count=0;
817 mdc800->out_ptr=0;
818 mdc800->download_left=0;
822 if (mdc800->in_count < 8)
824 mdc800->in[mdc800->in_count] = c;
825 mdc800->in_count++;
829 mutex_unlock(&mdc800->io_lock);
834 if (mdc800->in_count == 8)
840 dev_err(&mdc800->dev->dev,
842 mutex_unlock(&mdc800->io_lock);
846 answersize=mdc800_getAnswerSize (mdc800->in[1]);
848 mdc800->state=WORKING;
849 memcpy (mdc800->write_urb->transfer_buffer, mdc800->in,8);
850 mdc800->write_urb->dev = mdc800->dev;
851 retval = usb_submit_urb (mdc800->write_urb, GFP_KERNEL);
853 dev_err(&mdc800->dev->dev,
856 mutex_unlock(&mdc800->io_lock);
859 wait_event_timeout(mdc800->write_wait, mdc800->written,
861 mdc800->written = 0;
862 if (mdc800->state == WORKING)
864 usb_kill_urb(mdc800->write_urb);
865 mutex_unlock(&mdc800->io_lock);
869 switch ((unsigned char) mdc800->in[1])
873 if (mdc800->pic_len < 0)
875 dev_err(&mdc800->dev->dev,
878 mdc800->state=READY;
879 mutex_unlock(&mdc800->io_lock);
882 mdc800->pic_len=-1;
886 mdc800->download_left=answersize+64;
887 mdc800->state=DOWNLOAD;
898 dev_err(&mdc800->dev->dev, "requesting answer from irq fails\n");
899 mutex_unlock(&mdc800->io_lock);
905 memcpy (mdc800->out, mdc800->camera_response,8);
908 memcpy (&mdc800->out[8], mdc800->camera_response,8);
910 mdc800->out_ptr=0;
911 mdc800->out_count=16;
914 if (mdc800->in [1] == (char) 0x07)
916 mdc800->pic_len=(int) 65536*(unsigned char) mdc800->camera_response[0]+256*(unsigned char) mdc800->camera_response[1]+(unsigned char) mdc800->camera_response[2];
918 dev_dbg(&mdc800->dev->dev, "cached imagesize = %i\n", mdc800->pic_len);
926 dev_err(&mdc800->dev->dev, "Command Timeout.\n");
927 mutex_unlock(&mdc800->io_lock);
931 mdc800->state=READY;
937 mutex_unlock(&mdc800->io_lock);
970 .name = "mdc800",
986 mdc800=kzalloc (sizeof (struct mdc800_data), GFP_KERNEL);
987 if (!mdc800)
990 mdc800->dev = NULL;
991 mdc800->state=NOT_CONNECTED;
992 mutex_init (&mdc800->io_lock);
994 init_waitqueue_head (&mdc800->irq_wait);
995 init_waitqueue_head (&mdc800->write_wait);
996 init_waitqueue_head (&mdc800->download_wait);
998 mdc800->irq_woken = 0;
999 mdc800->downloaded = 0;
1000 mdc800->written = 0;
1002 mdc800->irq_urb_buffer=kmalloc (8, GFP_KERNEL);
1003 if (!mdc800->irq_urb_buffer)
1005 mdc800->write_urb_buffer=kmalloc (8, GFP_KERNEL);
1006 if (!mdc800->write_urb_buffer)
1008 mdc800->download_urb_buffer=kmalloc (64, GFP_KERNEL);
1009 if (!mdc800->download_urb_buffer)
1012 mdc800->irq_urb=usb_alloc_urb (0, GFP_KERNEL);
1013 if (!mdc800->irq_urb)
1015 mdc800->download_urb=usb_alloc_urb (0, GFP_KERNEL);
1016 if (!mdc800->download_urb)
1018 mdc800->write_urb=usb_alloc_urb (0, GFP_KERNEL);
1019 if (!mdc800->write_urb)
1036 if (mdc800 != NULL)
1038 printk(KERN_ERR "mdc800: can't alloc memory!\n");
1040 kfree(mdc800->download_urb_buffer);
1041 kfree(mdc800->write_urb_buffer);
1042 kfree(mdc800->irq_urb_buffer);
1044 usb_free_urb(mdc800->write_urb);
1045 usb_free_urb(mdc800->download_urb);
1046 usb_free_urb(mdc800->irq_urb);
1048 kfree (mdc800);
1050 mdc800 = NULL;
1059 usb_free_urb (mdc800->irq_urb);
1060 usb_free_urb (mdc800->download_urb);
1061 usb_free_urb (mdc800->write_urb);
1063 kfree (mdc800->irq_urb_buffer);
1064 kfree (mdc800->write_urb_buffer);
1065 kfree (mdc800->download_urb_buffer);
1067 kfree (mdc800);
1068 mdc800 = NULL;