Lines Matching refs:ss

301 	struct f_sourcesink		*ss = ep->driver_data;  in ss_alloc_ep_req()  local
303 return alloc_ep_req(ep, len, ss->buflen); in ss_alloc_ep_req()
337 struct f_sourcesink *ss = func_to_ss(f); in sourcesink_bind() local
349 ss->in_ep = usb_ep_autoconfig(cdev->gadget, &fs_source_desc); in sourcesink_bind()
350 if (!ss->in_ep) { in sourcesink_bind()
357 ss->out_ep = usb_ep_autoconfig(cdev->gadget, &fs_sink_desc); in sourcesink_bind()
358 if (!ss->out_ep) in sourcesink_bind()
362 if (ss->isoc_interval < 1) in sourcesink_bind()
363 ss->isoc_interval = 1; in sourcesink_bind()
364 if (ss->isoc_interval > 16) in sourcesink_bind()
365 ss->isoc_interval = 16; in sourcesink_bind()
366 if (ss->isoc_mult > 2) in sourcesink_bind()
367 ss->isoc_mult = 2; in sourcesink_bind()
368 if (ss->isoc_maxburst > 15) in sourcesink_bind()
369 ss->isoc_maxburst = 15; in sourcesink_bind()
372 fs_iso_source_desc.wMaxPacketSize = ss->isoc_maxpacket > 1023 ? in sourcesink_bind()
373 1023 : ss->isoc_maxpacket; in sourcesink_bind()
374 fs_iso_source_desc.bInterval = ss->isoc_interval; in sourcesink_bind()
375 fs_iso_sink_desc.wMaxPacketSize = ss->isoc_maxpacket > 1023 ? in sourcesink_bind()
376 1023 : ss->isoc_maxpacket; in sourcesink_bind()
377 fs_iso_sink_desc.bInterval = ss->isoc_interval; in sourcesink_bind()
380 ss->iso_in_ep = usb_ep_autoconfig(cdev->gadget, &fs_iso_source_desc); in sourcesink_bind()
381 if (!ss->iso_in_ep) in sourcesink_bind()
384 ss->iso_out_ep = usb_ep_autoconfig(cdev->gadget, &fs_iso_sink_desc); in sourcesink_bind()
385 if (!ss->iso_out_ep) { in sourcesink_bind()
386 usb_ep_autoconfig_release(ss->iso_in_ep); in sourcesink_bind()
387 ss->iso_in_ep = NULL; in sourcesink_bind()
399 if (ss->isoc_maxpacket > 1024) in sourcesink_bind()
400 ss->isoc_maxpacket = 1024; in sourcesink_bind()
411 hs_iso_source_desc.wMaxPacketSize = ss->isoc_maxpacket; in sourcesink_bind()
412 hs_iso_source_desc.wMaxPacketSize |= ss->isoc_mult << 11; in sourcesink_bind()
413 hs_iso_source_desc.bInterval = ss->isoc_interval; in sourcesink_bind()
417 hs_iso_sink_desc.wMaxPacketSize = ss->isoc_maxpacket; in sourcesink_bind()
418 hs_iso_sink_desc.wMaxPacketSize |= ss->isoc_mult << 11; in sourcesink_bind()
419 hs_iso_sink_desc.bInterval = ss->isoc_interval; in sourcesink_bind()
433 ss_iso_source_desc.wMaxPacketSize = ss->isoc_maxpacket; in sourcesink_bind()
434 ss_iso_source_desc.bInterval = ss->isoc_interval; in sourcesink_bind()
435 ss_iso_source_comp_desc.bmAttributes = ss->isoc_mult; in sourcesink_bind()
436 ss_iso_source_comp_desc.bMaxBurst = ss->isoc_maxburst; in sourcesink_bind()
437 ss_iso_source_comp_desc.wBytesPerInterval = ss->isoc_maxpacket * in sourcesink_bind()
438 (ss->isoc_mult + 1) * (ss->isoc_maxburst + 1); in sourcesink_bind()
442 ss_iso_sink_desc.wMaxPacketSize = ss->isoc_maxpacket; in sourcesink_bind()
443 ss_iso_sink_desc.bInterval = ss->isoc_interval; in sourcesink_bind()
444 ss_iso_sink_comp_desc.bmAttributes = ss->isoc_mult; in sourcesink_bind()
445 ss_iso_sink_comp_desc.bMaxBurst = ss->isoc_maxburst; in sourcesink_bind()
446 ss_iso_sink_comp_desc.wBytesPerInterval = ss->isoc_maxpacket * in sourcesink_bind()
447 (ss->isoc_mult + 1) * (ss->isoc_maxburst + 1); in sourcesink_bind()
458 f->name, ss->in_ep->name, ss->out_ep->name, in sourcesink_bind()
459 ss->iso_in_ep ? ss->iso_in_ep->name : "<none>", in sourcesink_bind()
460 ss->iso_out_ep ? ss->iso_out_ep->name : "<none>"); in sourcesink_bind()
480 static int check_read_data(struct f_sourcesink *ss, struct usb_request *req) in check_read_data() argument
484 struct usb_composite_dev *cdev = ss->function.config->cdev; in check_read_data()
485 int max_packet_size = le16_to_cpu(ss->out_ep->desc->wMaxPacketSize); in check_read_data()
487 if (ss->pattern == 2) in check_read_data()
491 switch (ss->pattern) { in check_read_data()
512 usb_ep_set_halt(ss->out_ep); in check_read_data()
523 struct f_sourcesink *ss = ep->driver_data; in reinit_write_data() local
525 switch (ss->pattern) { in reinit_write_data()
541 struct f_sourcesink *ss = ep->driver_data; in source_sink_complete() local
545 if (!ss) in source_sink_complete()
548 cdev = ss->function.config->cdev; in source_sink_complete()
553 if (ep == ss->out_ep) { in source_sink_complete()
554 check_read_data(ss, req); in source_sink_complete()
555 if (ss->pattern != 2) in source_sink_complete()
566 if (ep == ss->out_ep) in source_sink_complete()
567 check_read_data(ss, req); in source_sink_complete()
593 static int source_sink_start_ep(struct f_sourcesink *ss, bool is_in, in source_sink_start_ep() argument
604 size = ss->isoc_maxpacket * in source_sink_start_ep()
605 (ss->isoc_mult + 1) * in source_sink_start_ep()
606 (ss->isoc_maxburst + 1); in source_sink_start_ep()
609 size = ss->isoc_maxpacket * (ss->isoc_mult + 1); in source_sink_start_ep()
612 size = ss->isoc_maxpacket > 1023 ? in source_sink_start_ep()
613 1023 : ss->isoc_maxpacket; in source_sink_start_ep()
616 ep = is_in ? ss->iso_in_ep : ss->iso_out_ep; in source_sink_start_ep()
619 ep = is_in ? ss->in_ep : ss->out_ep; in source_sink_start_ep()
629 else if (ss->pattern != 2) in source_sink_start_ep()
636 cdev = ss->function.config->cdev; in source_sink_start_ep()
650 static void disable_source_sink(struct f_sourcesink *ss) in disable_source_sink() argument
654 cdev = ss->function.config->cdev; in disable_source_sink()
655 disable_endpoints(cdev, ss->in_ep, ss->out_ep, ss->iso_in_ep, in disable_source_sink()
656 ss->iso_out_ep); in disable_source_sink()
657 VDBG(cdev, "%s disabled\n", ss->function.name); in disable_source_sink()
661 enable_source_sink(struct usb_composite_dev *cdev, struct f_sourcesink *ss, in enable_source_sink() argument
669 ep = ss->in_ep; in enable_source_sink()
670 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep); in enable_source_sink()
676 ep->driver_data = ss; in enable_source_sink()
678 result = source_sink_start_ep(ss, true, false, speed); in enable_source_sink()
681 ep = ss->in_ep; in enable_source_sink()
687 ep = ss->out_ep; in enable_source_sink()
688 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep); in enable_source_sink()
694 ep->driver_data = ss; in enable_source_sink()
696 result = source_sink_start_ep(ss, false, false, speed); in enable_source_sink()
699 ep = ss->out_ep; in enable_source_sink()
708 ep = ss->iso_in_ep; in enable_source_sink()
710 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep); in enable_source_sink()
716 ep->driver_data = ss; in enable_source_sink()
718 result = source_sink_start_ep(ss, true, true, speed); in enable_source_sink()
721 ep = ss->iso_in_ep; in enable_source_sink()
729 ep = ss->iso_out_ep; in enable_source_sink()
731 result = config_ep_by_speed(cdev->gadget, &(ss->function), ep); in enable_source_sink()
737 ep->driver_data = ss; in enable_source_sink()
739 result = source_sink_start_ep(ss, false, true, speed); in enable_source_sink()
746 ss->cur_alt = alt; in enable_source_sink()
748 DBG(cdev, "%s enabled, alt intf %d\n", ss->function.name, alt); in enable_source_sink()
755 struct f_sourcesink *ss = func_to_ss(f); in sourcesink_set_alt() local
758 disable_source_sink(ss); in sourcesink_set_alt()
759 return enable_source_sink(cdev, ss, alt); in sourcesink_set_alt()
764 struct f_sourcesink *ss = func_to_ss(f); in sourcesink_get_alt() local
766 return ss->cur_alt; in sourcesink_get_alt()
771 struct f_sourcesink *ss = func_to_ss(f); in sourcesink_disable() local
773 disable_source_sink(ss); in sourcesink_disable()
853 struct f_sourcesink *ss; in source_sink_alloc_func() local
856 ss = kzalloc(sizeof(*ss), GFP_KERNEL); in source_sink_alloc_func()
857 if (!ss) in source_sink_alloc_func()
866 ss->pattern = ss_opts->pattern; in source_sink_alloc_func()
867 ss->isoc_interval = ss_opts->isoc_interval; in source_sink_alloc_func()
868 ss->isoc_maxpacket = ss_opts->isoc_maxpacket; in source_sink_alloc_func()
869 ss->isoc_mult = ss_opts->isoc_mult; in source_sink_alloc_func()
870 ss->isoc_maxburst = ss_opts->isoc_maxburst; in source_sink_alloc_func()
871 ss->buflen = ss_opts->bulk_buflen; in source_sink_alloc_func()
873 ss->function.name = "source/sink"; in source_sink_alloc_func()
874 ss->function.bind = sourcesink_bind; in source_sink_alloc_func()
875 ss->function.set_alt = sourcesink_set_alt; in source_sink_alloc_func()
876 ss->function.get_alt = sourcesink_get_alt; in source_sink_alloc_func()
877 ss->function.disable = sourcesink_disable; in source_sink_alloc_func()
878 ss->function.setup = sourcesink_setup; in source_sink_alloc_func()
879 ss->function.strings = sourcesink_strings; in source_sink_alloc_func()
881 ss->function.free_func = sourcesink_free_func; in source_sink_alloc_func()
883 return &ss->function; in source_sink_alloc_func()