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);
440 f->name, ss->in_ep->name, ss->out_ep->name,
441 ss->iso_in_ep ? ss->iso_in_ep->name : "<none>",
442 ss->iso_out_ep ? ss->iso_out_ep->name : "<none>");
462 static int check_read_data(struct f_sourcesink *ss, struct usb_request *req)
466 struct usb_composite_dev *cdev = ss->function.config->cdev;
467 int max_packet_size = le16_to_cpu(ss->out_ep->desc->wMaxPacketSize);
469 if (ss->pattern == 2)
473 switch (ss->pattern) {
494 usb_ep_set_halt(ss->out_ep);
505 struct f_sourcesink *ss = ep->driver_data;
507 switch (ss->pattern) {
523 struct f_sourcesink *ss = ep->driver_data;
527 if (!ss)
530 cdev = ss->function.config->cdev;
535 if (ep == ss->out_ep) {
536 check_read_data(ss, req);
537 if (ss->pattern != 2)
548 if (ep == ss->out_ep)
549 check_read_data(ss, req);
576 static int source_sink_start_ep(struct f_sourcesink *ss, bool is_in,
587 size = ss->isoc_maxpacket *
588 (ss->isoc_mult + 1) *
589 (ss->isoc_maxburst + 1);
592 size = ss->isoc_maxpacket * (ss->isoc_mult + 1);
595 size = ss->isoc_maxpacket > 1023 ?
596 1023 : ss->isoc_maxpacket;
599 ep = is_in ? ss->iso_in_ep : ss->iso_out_ep;
600 qlen = ss->iso_qlen;
602 ep = is_in ? ss->in_ep : ss->out_ep;
603 qlen = ss->bulk_qlen;
604 size = ss->buflen;
615 else if (ss->pattern != 2)
622 cdev = ss->function.config->cdev;
634 static void disable_source_sink(struct f_sourcesink *ss)
638 cdev = ss->function.config->cdev;
639 disable_endpoints(cdev, ss->in_ep, ss->out_ep, ss->iso_in_ep,
640 ss->iso_out_ep);
641 VDBG(cdev, "%s disabled\n", ss->function.name);
645 enable_source_sink(struct usb_composite_dev *cdev, struct f_sourcesink *ss,
653 ep = ss->in_ep;
654 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep);
660 ep->driver_data = ss;
662 result = source_sink_start_ep(ss, true, false, speed);
665 ep = ss->in_ep;
671 ep = ss->out_ep;
672 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep);
678 ep->driver_data = ss;
680 result = source_sink_start_ep(ss, false, false, speed);
683 ep = ss->out_ep;
692 ep = ss->iso_in_ep;
694 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep);
700 ep->driver_data = ss;
702 result = source_sink_start_ep(ss, true, true, speed);
705 ep = ss->iso_in_ep;
713 ep = ss->iso_out_ep;
715 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep);
721 ep->driver_data = ss;
723 result = source_sink_start_ep(ss, false, true, speed);
730 ss->cur_alt = alt;
732 DBG(cdev, "%s enabled, alt intf %d\n", ss->function.name, alt);
739 struct f_sourcesink *ss = func_to_ss(f);
742 disable_source_sink(ss);
743 return enable_source_sink(cdev, ss, alt);
748 struct f_sourcesink *ss = func_to_ss(f);
750 return ss->cur_alt;
755 struct f_sourcesink *ss = func_to_ss(f);
757 disable_source_sink(ss);
837 struct f_sourcesink *ss;
840 ss = kzalloc(sizeof(*ss), GFP_KERNEL);
841 if (!ss)
850 ss->pattern = ss_opts->pattern;
851 ss->isoc_interval = ss_opts->isoc_interval;
852 ss->isoc_maxpacket = ss_opts->isoc_maxpacket;
853 ss->isoc_mult = ss_opts->isoc_mult;
854 ss->isoc_maxburst = ss_opts->isoc_maxburst;
855 ss->buflen = ss_opts->bulk_buflen;
856 ss->bulk_qlen = ss_opts->bulk_qlen;
857 ss->iso_qlen = ss_opts->iso_qlen;
859 ss->function.name = "source/sink";
860 ss->function.bind = sourcesink_bind;
861 ss->function.set_alt = sourcesink_set_alt;
862 ss->function.get_alt = sourcesink_get_alt;
863 ss->function.disable = sourcesink_disable;
864 ss->function.setup = sourcesink_setup;
865 ss->function.strings = sourcesink_strings;
867 ss->function.free_func = sourcesink_free_func;
869 return &ss->function;