Lines Matching refs:mos_parport

83 	struct mos7715_parport  *mos_parport;  member
253 static inline int mos7715_change_mode(struct mos7715_parport *mos_parport, in mos7715_change_mode() argument
256 mos_parport->shadowECR = mode; in mos7715_change_mode()
257 write_mos_reg(mos_parport->serial, dummy, MOS7720_ECR, in mos7715_change_mode()
258 mos_parport->shadowECR); in mos7715_change_mode()
264 struct mos7715_parport *mos_parport = in destroy_mos_parport() local
267 kfree(mos_parport); in destroy_mos_parport()
274 struct mos7715_parport *mos_parport = urbtrack->mos_parport; in destroy_urbtracker() local
279 kref_put(&mos_parport->ref_count, destroy_mos_parport); in destroy_urbtracker()
291 struct mos7715_parport *mos_parport = from_tasklet(mos_parport, t, in send_deferred_urbs() local
298 if (unlikely(mos_parport->serial == NULL)) in send_deferred_urbs()
301 dev = &mos_parport->serial->dev->dev; in send_deferred_urbs()
304 if (!mutex_trylock(&mos_parport->serial->disc_mutex)) { in send_deferred_urbs()
306 tasklet_schedule(&mos_parport->urb_tasklet); in send_deferred_urbs()
311 if (unlikely(mos_parport->serial->disconnected)) { in send_deferred_urbs()
312 mutex_unlock(&mos_parport->serial->disc_mutex); in send_deferred_urbs()
316 spin_lock_irqsave(&mos_parport->listlock, flags); in send_deferred_urbs()
317 if (list_empty(&mos_parport->deferred_urbs)) { in send_deferred_urbs()
318 spin_unlock_irqrestore(&mos_parport->listlock, flags); in send_deferred_urbs()
319 mutex_unlock(&mos_parport->serial->disc_mutex); in send_deferred_urbs()
325 list_for_each_safe(cursor, next, &mos_parport->deferred_urbs) in send_deferred_urbs()
326 list_move_tail(cursor, &mos_parport->active_urbs); in send_deferred_urbs()
327 list_for_each_entry_safe(urbtrack, tmp, &mos_parport->active_urbs, in send_deferred_urbs()
337 spin_unlock_irqrestore(&mos_parport->listlock, flags); in send_deferred_urbs()
338 mutex_unlock(&mos_parport->serial->disc_mutex); in send_deferred_urbs()
352 spin_lock_irqsave(&urbtrack->mos_parport->listlock, flags); in async_complete()
354 spin_unlock_irqrestore(&urbtrack->mos_parport->listlock, flags); in async_complete()
358 static int write_parport_reg_nonblock(struct mos7715_parport *mos_parport, in write_parport_reg_nonblock() argument
364 struct usb_serial *serial = mos_parport->serial; in write_parport_reg_nonblock()
392 kref_get(&mos_parport->ref_count); in write_parport_reg_nonblock()
393 urbtrack->mos_parport = mos_parport; in write_parport_reg_nonblock()
402 spin_lock_irqsave(&mos_parport->listlock, flags); in write_parport_reg_nonblock()
404 &mos_parport->deferred_urbs); in write_parport_reg_nonblock()
405 spin_unlock_irqrestore(&mos_parport->listlock, flags); in write_parport_reg_nonblock()
406 tasklet_schedule(&mos_parport->urb_tasklet); in write_parport_reg_nonblock()
419 spin_lock_irqsave(&mos_parport->listlock, flags); in write_parport_reg_nonblock()
420 list_add_tail(&urbtrack->urblist_entry, &mos_parport->active_urbs); in write_parport_reg_nonblock()
421 spin_unlock_irqrestore(&mos_parport->listlock, flags); in write_parport_reg_nonblock()
427 spin_lock_irqsave(&mos_parport->listlock, flags); in write_parport_reg_nonblock()
429 spin_unlock_irqrestore(&mos_parport->listlock, flags); in write_parport_reg_nonblock()
450 struct mos7715_parport *mos_parport; in parport_prologue() local
453 mos_parport = pp->private_data; in parport_prologue()
454 if (unlikely(mos_parport == NULL)) { in parport_prologue()
459 mos_parport->msg_pending = true; /* synch usb call pending */ in parport_prologue()
460 reinit_completion(&mos_parport->syncmsg_compl); in parport_prologue()
463 mutex_lock(&mos_parport->serial->disc_mutex); in parport_prologue()
464 if (mos_parport->serial->disconnected) { in parport_prologue()
466 mutex_unlock(&mos_parport->serial->disc_mutex); in parport_prologue()
467 mos_parport->msg_pending = false; in parport_prologue()
468 complete(&mos_parport->syncmsg_compl); in parport_prologue()
481 struct mos7715_parport *mos_parport = pp->private_data; in parport_epilogue() local
482 mutex_unlock(&mos_parport->serial->disc_mutex); in parport_epilogue()
483 mos_parport->msg_pending = false; in parport_epilogue()
484 complete(&mos_parport->syncmsg_compl); in parport_epilogue()
489 struct mos7715_parport *mos_parport = pp->private_data; in parport_mos7715_write_data() local
493 mos7715_change_mode(mos_parport, SPP); in parport_mos7715_write_data()
494 write_mos_reg(mos_parport->serial, dummy, MOS7720_DPR, (__u8)d); in parport_mos7715_write_data()
500 struct mos7715_parport *mos_parport = pp->private_data; in parport_mos7715_read_data() local
505 read_mos_reg(mos_parport->serial, dummy, MOS7720_DPR, &d); in parport_mos7715_read_data()
512 struct mos7715_parport *mos_parport = pp->private_data; in parport_mos7715_write_control() local
517 data = ((__u8)d & 0x0f) | (mos_parport->shadowDCR & 0xf0); in parport_mos7715_write_control()
518 write_mos_reg(mos_parport->serial, dummy, MOS7720_DCR, data); in parport_mos7715_write_control()
519 mos_parport->shadowDCR = data; in parport_mos7715_write_control()
525 struct mos7715_parport *mos_parport; in parport_mos7715_read_control() local
529 mos_parport = pp->private_data; in parport_mos7715_read_control()
530 if (unlikely(mos_parport == NULL)) { in parport_mos7715_read_control()
534 dcr = mos_parport->shadowDCR & 0x0f; in parport_mos7715_read_control()
543 struct mos7715_parport *mos_parport = pp->private_data; in parport_mos7715_frob_control() local
550 mos_parport->shadowDCR = (mos_parport->shadowDCR & (~mask)) ^ val; in parport_mos7715_frob_control()
551 write_mos_reg(mos_parport->serial, dummy, MOS7720_DCR, in parport_mos7715_frob_control()
552 mos_parport->shadowDCR); in parport_mos7715_frob_control()
553 dcr = mos_parport->shadowDCR & 0x0f; in parport_mos7715_frob_control()
561 struct mos7715_parport *mos_parport; in parport_mos7715_read_status() local
564 mos_parport = pp->private_data; in parport_mos7715_read_status()
565 if (unlikely(mos_parport == NULL)) { /* release called */ in parport_mos7715_read_status()
569 status = atomic_read(&mos_parport->shadowDSR) & 0xf8; in parport_mos7715_read_status()
584 struct mos7715_parport *mos_parport = pp->private_data; in parport_mos7715_data_forward() local
588 mos7715_change_mode(mos_parport, PS2); in parport_mos7715_data_forward()
589 mos_parport->shadowDCR &= ~0x20; in parport_mos7715_data_forward()
590 write_mos_reg(mos_parport->serial, dummy, MOS7720_DCR, in parport_mos7715_data_forward()
591 mos_parport->shadowDCR); in parport_mos7715_data_forward()
597 struct mos7715_parport *mos_parport = pp->private_data; in parport_mos7715_data_reverse() local
601 mos7715_change_mode(mos_parport, PS2); in parport_mos7715_data_reverse()
602 mos_parport->shadowDCR |= 0x20; in parport_mos7715_data_reverse()
603 write_mos_reg(mos_parport->serial, dummy, MOS7720_DCR, in parport_mos7715_data_reverse()
604 mos_parport->shadowDCR); in parport_mos7715_data_reverse()
619 struct mos7715_parport *mos_parport; in parport_mos7715_save_state() local
622 mos_parport = pp->private_data; in parport_mos7715_save_state()
623 if (unlikely(mos_parport == NULL)) { /* release called */ in parport_mos7715_save_state()
627 s->u.pc.ctr = mos_parport->shadowDCR; in parport_mos7715_save_state()
628 s->u.pc.ecr = mos_parport->shadowECR; in parport_mos7715_save_state()
636 struct mos7715_parport *mos_parport; in parport_mos7715_restore_state() local
639 mos_parport = pp->private_data; in parport_mos7715_restore_state()
640 if (unlikely(mos_parport == NULL)) { /* release called */ in parport_mos7715_restore_state()
644 mos_parport->shadowDCR = s->u.pc.ctr; in parport_mos7715_restore_state()
645 mos_parport->shadowECR = s->u.pc.ecr; in parport_mos7715_restore_state()
646 write_parport_reg_nonblock(mos_parport, MOS7720_DCR, in parport_mos7715_restore_state()
647 mos_parport->shadowDCR); in parport_mos7715_restore_state()
648 write_parport_reg_nonblock(mos_parport, MOS7720_ECR, in parport_mos7715_restore_state()
649 mos_parport->shadowECR); in parport_mos7715_restore_state()
658 struct mos7715_parport *mos_parport = pp->private_data; in parport_mos7715_write_compat() local
663 mos7715_change_mode(mos_parport, PPF); in parport_mos7715_write_compat()
664 retval = usb_bulk_msg(mos_parport->serial->dev, in parport_mos7715_write_compat()
665 usb_sndbulkpipe(mos_parport->serial->dev, 2), in parport_mos7715_write_compat()
670 dev_err(&mos_parport->serial->dev->dev, in parport_mos7715_write_compat()
710 struct mos7715_parport *mos_parport; in mos7715_parport_init() local
713 mos_parport = kzalloc(sizeof(struct mos7715_parport), GFP_KERNEL); in mos7715_parport_init()
714 if (!mos_parport) in mos7715_parport_init()
717 mos_parport->msg_pending = false; in mos7715_parport_init()
718 kref_init(&mos_parport->ref_count); in mos7715_parport_init()
719 spin_lock_init(&mos_parport->listlock); in mos7715_parport_init()
720 INIT_LIST_HEAD(&mos_parport->active_urbs); in mos7715_parport_init()
721 INIT_LIST_HEAD(&mos_parport->deferred_urbs); in mos7715_parport_init()
722 usb_set_serial_data(serial, mos_parport); /* hijack private pointer */ in mos7715_parport_init()
723 mos_parport->serial = serial; in mos7715_parport_init()
724 tasklet_setup(&mos_parport->urb_tasklet, send_deferred_urbs); in mos7715_parport_init()
725 init_completion(&mos_parport->syncmsg_compl); in mos7715_parport_init()
728 write_mos_reg(mos_parport->serial, dummy, MOS7720_PP_REG, (__u8)0x80); in mos7715_parport_init()
729 write_mos_reg(mos_parport->serial, dummy, MOS7720_PP_REG, (__u8)0x00); in mos7715_parport_init()
732 mos_parport->shadowDCR = DCR_INIT_VAL; in mos7715_parport_init()
733 write_mos_reg(mos_parport->serial, dummy, MOS7720_DCR, in mos7715_parport_init()
734 mos_parport->shadowDCR); in mos7715_parport_init()
735 mos_parport->shadowECR = ECR_INIT_VAL; in mos7715_parport_init()
736 write_mos_reg(mos_parport->serial, dummy, MOS7720_ECR, in mos7715_parport_init()
737 mos_parport->shadowECR); in mos7715_parport_init()
740 mos_parport->pp = parport_register_port(0, PARPORT_IRQ_NONE, in mos7715_parport_init()
743 if (mos_parport->pp == NULL) { in mos7715_parport_init()
746 kref_put(&mos_parport->ref_count, destroy_mos_parport); in mos7715_parport_init()
749 mos_parport->pp->private_data = mos_parport; in mos7715_parport_init()
750 mos_parport->pp->modes = PARPORT_MODE_COMPAT | PARPORT_MODE_PCSPP; in mos7715_parport_init()
751 mos_parport->pp->dev = &serial->interface->dev; in mos7715_parport_init()
752 parport_announce_port(mos_parport->pp); in mos7715_parport_init()
905 struct mos7715_parport *mos_parport = port->serial->private; in mos7715_interrupt_callback() local
906 if (unlikely(mos_parport == NULL)) in mos7715_interrupt_callback()
908 atomic_set(&mos_parport->shadowDSR, data[2]); in mos7715_interrupt_callback()
1878 struct mos7715_parport *mos_parport = in mos7720_release() local
1883 mos_parport->pp->private_data = NULL; in mos7720_release()
1887 if (mos_parport->msg_pending) in mos7720_release()
1888 wait_for_completion_timeout(&mos_parport->syncmsg_compl, in mos7720_release()
1891 parport_remove_port(mos_parport->pp); in mos7720_release()
1893 mos_parport->serial = NULL; in mos7720_release()
1896 tasklet_kill(&mos_parport->urb_tasklet); in mos7720_release()
1899 spin_lock_irqsave(&mos_parport->listlock, flags); in mos7720_release()
1901 &mos_parport->active_urbs, in mos7720_release()
1904 spin_unlock_irqrestore(&mos_parport->listlock, flags); in mos7720_release()
1905 parport_del_port(mos_parport->pp); in mos7720_release()
1907 kref_put(&mos_parport->ref_count, destroy_mos_parport); in mos7720_release()