Lines Matching refs:ss

320 	struct f_sourcesink	*ss = func_to_ss(f);
332 ss->in_ep = usb_ep_autoconfig(cdev->gadget, &fs_source_desc);
333 if (!ss->in_ep) {
340 ss->out_ep = usb_ep_autoconfig(cdev->gadget, &fs_sink_desc);
341 if (!ss->out_ep)
345 if (ss->isoc_interval < 1)
346 ss->isoc_interval = 1;
347 if (ss->isoc_interval > 16)
348 ss->isoc_interval = 16;
349 if (ss->isoc_mult > 2)
350 ss->isoc_mult = 2;
351 if (ss->isoc_maxburst > 15)
352 ss->isoc_maxburst = 15;
355 fs_iso_source_desc.wMaxPacketSize = ss->isoc_maxpacket > 1023 ?
356 1023 : ss->isoc_maxpacket;
357 fs_iso_source_desc.bInterval = ss->isoc_interval;
358 fs_iso_sink_desc.wMaxPacketSize = ss->isoc_maxpacket > 1023 ?
359 1023 : ss->isoc_maxpacket;
360 fs_iso_sink_desc.bInterval = ss->isoc_interval;
363 ss->iso_in_ep = usb_ep_autoconfig(cdev->gadget, &fs_iso_source_desc);
364 if (!ss->iso_in_ep)
367 ss->iso_out_ep = usb_ep_autoconfig(cdev->gadget, &fs_iso_sink_desc);
368 if (!ss->iso_out_ep) {
369 usb_ep_autoconfig_release(ss->iso_in_ep);
370 ss->iso_in_ep = NULL;
382 if (ss->isoc_maxpacket > 1024)
383 ss->isoc_maxpacket = 1024;
394 hs_iso_source_desc.wMaxPacketSize = ss->isoc_maxpacket;
395 hs_iso_source_desc.wMaxPacketSize |= ss->isoc_mult << 11;
396 hs_iso_source_desc.bInterval = ss->isoc_interval;
400 hs_iso_sink_desc.wMaxPacketSize = ss->isoc_maxpacket;
401 hs_iso_sink_desc.wMaxPacketSize |= ss->isoc_mult << 11;
402 hs_iso_sink_desc.bInterval = ss->isoc_interval;
416 ss_iso_source_desc.wMaxPacketSize = ss->isoc_maxpacket;
417 ss_iso_source_desc.bInterval = ss->isoc_interval;
418 ss_iso_source_comp_desc.bmAttributes = ss->isoc_mult;
419 ss_iso_source_comp_desc.bMaxBurst = ss->isoc_maxburst;
420 ss_iso_source_comp_desc.wBytesPerInterval = ss->isoc_maxpacket *
421 (ss->isoc_mult + 1) * (ss->isoc_maxburst + 1);
425 ss_iso_sink_desc.wMaxPacketSize = ss->isoc_maxpacket;
426 ss_iso_sink_desc.bInterval = ss->isoc_interval;
427 ss_iso_sink_comp_desc.bmAttributes = ss->isoc_mult;
428 ss_iso_sink_comp_desc.bMaxBurst = ss->isoc_maxburst;
429 ss_iso_sink_comp_desc.wBytesPerInterval = ss->isoc_maxpacket *
430 (ss->isoc_mult + 1) * (ss->isoc_maxburst + 1);
442 f->name, ss->in_ep->name, ss->out_ep->name,
443 ss->iso_in_ep ? ss->iso_in_ep->name : "<none>",
444 ss->iso_out_ep ? ss->iso_out_ep->name : "<none>");
464 static int check_read_data(struct f_sourcesink *ss, struct usb_request *req)
468 struct usb_composite_dev *cdev = ss->function.config->cdev;
469 int max_packet_size = le16_to_cpu(ss->out_ep->desc->wMaxPacketSize);
471 if (ss->pattern == 2)
475 switch (ss->pattern) {
496 usb_ep_set_halt(ss->out_ep);
507 struct f_sourcesink *ss = ep->driver_data;
509 switch (ss->pattern) {
525 struct f_sourcesink *ss = ep->driver_data;
529 if (!ss)
532 cdev = ss->function.config->cdev;
537 if (ep == ss->out_ep) {
538 check_read_data(ss, req);
539 if (ss->pattern != 2)
550 if (ep == ss->out_ep)
551 check_read_data(ss, req);
577 static int source_sink_start_ep(struct f_sourcesink *ss, bool is_in,
588 size = ss->isoc_maxpacket *
589 (ss->isoc_mult + 1) *
590 (ss->isoc_maxburst + 1);
593 size = ss->isoc_maxpacket * (ss->isoc_mult + 1);
596 size = ss->isoc_maxpacket > 1023 ?
597 1023 : ss->isoc_maxpacket;
600 ep = is_in ? ss->iso_in_ep : ss->iso_out_ep;
601 qlen = ss->iso_qlen;
603 ep = is_in ? ss->in_ep : ss->out_ep;
604 qlen = ss->bulk_qlen;
605 size = ss->buflen;
616 else if (ss->pattern != 2)
623 cdev = ss->function.config->cdev;
635 static void disable_source_sink(struct f_sourcesink *ss)
639 cdev = ss->function.config->cdev;
640 disable_endpoints(cdev, ss->in_ep, ss->out_ep, ss->iso_in_ep,
641 ss->iso_out_ep);
642 VDBG(cdev, "%s disabled\n", ss->function.name);
646 enable_source_sink(struct usb_composite_dev *cdev, struct f_sourcesink *ss,
654 ep = ss->in_ep;
655 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep);
661 ep->driver_data = ss;
663 result = source_sink_start_ep(ss, true, false, speed);
666 ep = ss->in_ep;
672 ep = ss->out_ep;
673 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep);
679 ep->driver_data = ss;
681 result = source_sink_start_ep(ss, false, false, speed);
684 ep = ss->out_ep;
693 ep = ss->iso_in_ep;
695 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep);
701 ep->driver_data = ss;
703 result = source_sink_start_ep(ss, true, true, speed);
706 ep = ss->iso_in_ep;
714 ep = ss->iso_out_ep;
716 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep);
722 ep->driver_data = ss;
724 result = source_sink_start_ep(ss, false, true, speed);
731 ss->cur_alt = alt;
733 DBG(cdev, "%s enabled, alt intf %d\n", ss->function.name, alt);
740 struct f_sourcesink *ss = func_to_ss(f);
743 disable_source_sink(ss);
744 return enable_source_sink(cdev, ss, alt);
749 struct f_sourcesink *ss = func_to_ss(f);
751 return ss->cur_alt;
756 struct f_sourcesink *ss = func_to_ss(f);
758 disable_source_sink(ss);
838 struct f_sourcesink *ss;
841 ss = kzalloc(sizeof(*ss), GFP_KERNEL);
842 if (!ss)
851 ss->pattern = ss_opts->pattern;
852 ss->isoc_interval = ss_opts->isoc_interval;
853 ss->isoc_maxpacket = ss_opts->isoc_maxpacket;
854 ss->isoc_mult = ss_opts->isoc_mult;
855 ss->isoc_maxburst = ss_opts->isoc_maxburst;
856 ss->buflen = ss_opts->bulk_buflen;
857 ss->bulk_qlen = ss_opts->bulk_qlen;
858 ss->iso_qlen = ss_opts->iso_qlen;
860 ss->function.name = "source/sink";
861 ss->function.bind = sourcesink_bind;
862 ss->function.set_alt = sourcesink_set_alt;
863 ss->function.get_alt = sourcesink_get_alt;
864 ss->function.disable = sourcesink_disable;
865 ss->function.setup = sourcesink_setup;
866 ss->function.strings = sourcesink_strings;
868 ss->function.free_func = sourcesink_free_func;
870 return &ss->function;