Lines Matching refs:acm
312 struct f_acm *acm = ep->driver_data; in acm_complete_set_line_coding() local
313 struct usb_composite_dev *cdev = acm->port.func.config->cdev; in acm_complete_set_line_coding()
317 acm->port_num, req->status); in acm_complete_set_line_coding()
322 if (req->actual != sizeof(acm->port_line_coding)) { in acm_complete_set_line_coding()
324 acm->port_num, req->actual); in acm_complete_set_line_coding()
336 acm->port_line_coding = *value; in acm_complete_set_line_coding()
342 struct f_acm *acm = func_to_acm(f); in acm_setup() local
364 || w_index != acm->ctrl_id) in acm_setup()
368 cdev->gadget->ep0->driver_data = acm; in acm_setup()
375 if (w_index != acm->ctrl_id) in acm_setup()
380 memcpy(req->buf, &acm->port_line_coding, value); in acm_setup()
386 if (w_index != acm->ctrl_id) in acm_setup()
395 acm->port_handshake_bits = w_value; in acm_setup()
410 acm->port_num, ctrl->bRequestType, ctrl->bRequest, in acm_setup()
417 acm->port_num, value); in acm_setup()
426 struct f_acm *acm = func_to_acm(f); in acm_set_alt() local
431 if (intf == acm->ctrl_id) { in acm_set_alt()
432 if (acm->notify->driver_data) { in acm_set_alt()
435 usb_ep_disable(acm->notify); in acm_set_alt()
438 if (!acm->notify->desc) in acm_set_alt()
439 if (config_ep_by_speed(cdev->gadget, f, acm->notify)) in acm_set_alt()
442 usb_ep_enable(acm->notify); in acm_set_alt()
443 acm->notify->driver_data = acm; in acm_set_alt()
445 } else if (intf == acm->data_id) { in acm_set_alt()
446 if (acm->port.in->driver_data) { in acm_set_alt()
448 "reset acm ttyGS%d\n", acm->port_num); in acm_set_alt()
449 gserial_disconnect(&acm->port); in acm_set_alt()
451 if (!acm->port.in->desc || !acm->port.out->desc) { in acm_set_alt()
453 "activate acm ttyGS%d\n", acm->port_num); in acm_set_alt()
455 acm->port.in) || in acm_set_alt()
457 acm->port.out)) { in acm_set_alt()
458 acm->port.in->desc = NULL; in acm_set_alt()
459 acm->port.out->desc = NULL; in acm_set_alt()
463 gserial_connect(&acm->port, acm->port_num); in acm_set_alt()
473 struct f_acm *acm = func_to_acm(f); in acm_disable() local
476 dev_dbg(&cdev->gadget->dev, "acm ttyGS%d deactivated\n", acm->port_num); in acm_disable()
477 gserial_disconnect(&acm->port); in acm_disable()
478 usb_ep_disable(acm->notify); in acm_disable()
479 acm->notify->driver_data = NULL; in acm_disable()
498 static int acm_cdc_notify(struct f_acm *acm, u8 type, u16 value, in acm_cdc_notify() argument
501 struct usb_ep *ep = acm->notify; in acm_cdc_notify()
508 req = acm->notify_req; in acm_cdc_notify()
509 acm->notify_req = NULL; in acm_cdc_notify()
510 acm->pending = false; in acm_cdc_notify()
520 notify->wIndex = cpu_to_le16(acm->ctrl_id); in acm_cdc_notify()
525 spin_unlock(&acm->lock); in acm_cdc_notify()
527 spin_lock(&acm->lock); in acm_cdc_notify()
530 ERROR(acm->port.func.config->cdev, in acm_cdc_notify()
532 acm->port_num, status); in acm_cdc_notify()
533 acm->notify_req = req; in acm_cdc_notify()
539 static int acm_notify_serial_state(struct f_acm *acm) in acm_notify_serial_state() argument
541 struct usb_composite_dev *cdev = acm->port.func.config->cdev; in acm_notify_serial_state()
544 spin_lock(&acm->lock); in acm_notify_serial_state()
545 if (acm->notify_req) { in acm_notify_serial_state()
547 acm->port_num, acm->serial_state); in acm_notify_serial_state()
548 status = acm_cdc_notify(acm, USB_CDC_NOTIFY_SERIAL_STATE, in acm_notify_serial_state()
549 0, &acm->serial_state, sizeof(acm->serial_state)); in acm_notify_serial_state()
551 acm->pending = true; in acm_notify_serial_state()
554 spin_unlock(&acm->lock); in acm_notify_serial_state()
560 struct f_acm *acm = req->context; in acm_cdc_notify_complete() local
566 spin_lock(&acm->lock); in acm_cdc_notify_complete()
568 doit = acm->pending; in acm_cdc_notify_complete()
569 acm->notify_req = req; in acm_cdc_notify_complete()
570 spin_unlock(&acm->lock); in acm_cdc_notify_complete()
573 acm_notify_serial_state(acm); in acm_cdc_notify_complete()
580 struct f_acm *acm = port_to_acm(port); in acm_connect() local
582 acm->serial_state |= ACM_CTRL_DSR | ACM_CTRL_DCD; in acm_connect()
583 acm_notify_serial_state(acm); in acm_connect()
588 struct f_acm *acm = port_to_acm(port); in acm_disconnect() local
590 acm->serial_state &= ~(ACM_CTRL_DSR | ACM_CTRL_DCD); in acm_disconnect()
591 acm_notify_serial_state(acm); in acm_disconnect()
596 struct f_acm *acm = port_to_acm(port); in acm_send_break() local
599 state = acm->serial_state; in acm_send_break()
604 acm->serial_state = state; in acm_send_break()
605 return acm_notify_serial_state(acm); in acm_send_break()
615 struct f_acm *acm = func_to_acm(f); in acm_bind() local
637 acm->ctrl_id = status; in acm_bind()
646 acm->data_id = status; in acm_bind()
658 acm->port.in = ep; in acm_bind()
664 acm->port.out = ep; in acm_bind()
670 acm->notify = ep; in acm_bind()
674 acm->notify_req = gs_alloc_req(ep, in acm_bind()
677 if (!acm->notify_req) in acm_bind()
680 acm->notify_req->complete = acm_cdc_notify_complete; in acm_bind()
681 acm->notify_req->context = acm; in acm_bind()
702 acm->port_num, in acm_bind()
705 acm->port.in->name, acm->port.out->name, in acm_bind()
706 acm->notify->name); in acm_bind()
710 if (acm->notify_req) in acm_bind()
711 gs_free_req(acm->notify, acm->notify_req); in acm_bind()
714 if (acm->notify) in acm_bind()
715 acm->notify->driver_data = NULL; in acm_bind()
716 if (acm->port.out) in acm_bind()
717 acm->port.out->driver_data = NULL; in acm_bind()
718 if (acm->port.in) in acm_bind()
719 acm->port.in->driver_data = NULL; in acm_bind()
728 struct f_acm *acm = func_to_acm(f); in acm_unbind() local
732 if (acm->notify_req) in acm_unbind()
733 gs_free_req(acm->notify, acm->notify_req); in acm_unbind()
738 struct f_acm *acm = func_to_acm(f); in acm_free_func() local
740 kfree(acm); in acm_free_func()
746 struct f_acm *acm; in acm_alloc_func() local
748 acm = kzalloc(sizeof(*acm), GFP_KERNEL); in acm_alloc_func()
749 if (!acm) in acm_alloc_func()
752 spin_lock_init(&acm->lock); in acm_alloc_func()
754 acm->port.connect = acm_connect; in acm_alloc_func()
755 acm->port.disconnect = acm_disconnect; in acm_alloc_func()
756 acm->port.send_break = acm_send_break; in acm_alloc_func()
758 acm->port.func.name = "acm"; in acm_alloc_func()
759 acm->port.func.strings = acm_strings; in acm_alloc_func()
761 acm->port.func.bind = acm_bind; in acm_alloc_func()
762 acm->port.func.set_alt = acm_set_alt; in acm_alloc_func()
763 acm->port.func.setup = acm_setup; in acm_alloc_func()
764 acm->port.func.disable = acm_disable; in acm_alloc_func()
767 acm->port_num = opts->port_num; in acm_alloc_func()
768 acm->port.func.unbind = acm_unbind; in acm_alloc_func()
769 acm->port.func.free_func = acm_free_func; in acm_alloc_func()
771 return &acm->port.func; in acm_alloc_func()
854 DECLARE_USB_FUNCTION_INIT(acm, acm_alloc_instance, acm_alloc_func);