S3C OTG udc driver isochronous support
Barry Song
21cnbao at gmail.com
Sun Dec 26 11:36:09 EST 2010
Hi All,
After checking the S3C OTG udc drivers in drivers/usb/gadget, i didn't
find it can support isochronous endpoint. According to datasheet of
S3C6410, EPtype field of DIEPCTLn and DOEPCTLn is read-only. Current
S3C OTG udc driver list ep0~ep9, which are control endpoint and
bulk/int endpoint according to the source codes:
static struct s3c_udc memory = {
.usb_address = 0,
.gadget = {
.ops = &s3c_udc_ops,
.ep0 = &memory.ep[0].ep,
.name = driver_name,
.dev = {
.bus_id = "gadget",
.release = nop_release,
},
},
/* control endpoint */
.ep[0] = {
.ep = {
.name = ep0name,
.ops = &s3c_ep_ops,
.maxpacket = EP0_FIFO_SIZE,
},
.dev = &memory,
.bEndpointAddress = 0,
.bmAttributes = 0,
.ep_type = ep_control,
.fifo = (unsigned int) S3C_UDC_OTG_EP0_FIFO,
},
/* first group of endpoints */
.ep[1] = {
.ep = {
.name = "ep1-bulk",
.ops = &s3c_ep_ops,
.maxpacket = EP_FIFO_SIZE,
},
.dev = &memory,
.bEndpointAddress = USB_DIR_OUT | 1,
.bmAttributes = USB_ENDPOINT_XFER_BULK,
.ep_type = ep_bulk_out,
.fifo = (unsigned int) S3C_UDC_OTG_EP1_FIFO,
},
.ep[2] = {
.ep = {
.name = "ep2-bulk",
.ops = &s3c_ep_ops,
.maxpacket = EP_FIFO_SIZE,
},
.dev = &memory,
.bEndpointAddress = USB_DIR_IN | 2,
.bmAttributes = USB_ENDPOINT_XFER_BULK,
.ep_type = ep_bulk_in,
.fifo = (unsigned int) S3C_UDC_OTG_EP2_FIFO,
},
.ep[3] = {
.ep = {
.name = "ep3-int",
.ops = &s3c_ep_ops,
.maxpacket = EP_FIFO_SIZE,
},
.dev = &memory,
.bEndpointAddress = USB_DIR_IN | 3,
.bmAttributes = USB_ENDPOINT_XFER_INT,
.ep_type = ep_interrupt,
.fifo = (unsigned int) S3C_UDC_OTG_EP3_FIFO,
},
.ep[4] = {
.ep = {
.name = "ep4-bulk",
.ops = &s3c_ep_ops,
.maxpacket = EP_FIFO_SIZE,
},
.dev = &memory,
.bEndpointAddress = USB_DIR_OUT | 4,
.bmAttributes = USB_ENDPOINT_XFER_BULK,
.ep_type = ep_bulk_out,
.fifo = (unsigned int) S3C_UDC_OTG_EP4_FIFO,
},
.ep[5] = {
.ep = {
.name = "ep5-bulk",
.ops = &s3c_ep_ops,
.maxpacket = EP_FIFO_SIZE,
},
.dev = &memory,
.bEndpointAddress = USB_DIR_IN | 5,
.bmAttributes = USB_ENDPOINT_XFER_BULK,
.ep_type = ep_bulk_in,
.fifo = (unsigned int) S3C_UDC_OTG_EP5_FIFO,
},
.ep[6] = {
.ep = {
.name = "ep6-int",
.ops = &s3c_ep_ops,
.maxpacket = EP_FIFO_SIZE,
},
.dev = &memory,
.bEndpointAddress = USB_DIR_IN | 6,
.bmAttributes = USB_ENDPOINT_XFER_INT,
.ep_type = ep_interrupt,
.fifo = (unsigned int) S3C_UDC_OTG_EP6_FIFO,
},
.ep[7] = {
.ep = {
.name = "ep7-bulk",
.ops = &s3c_ep_ops,
.maxpacket = EP_FIFO_SIZE,
},
.dev = &memory,
.bEndpointAddress = USB_DIR_OUT | 7,
.bmAttributes = USB_ENDPOINT_XFER_BULK,
.ep_type = ep_bulk_out,
.fifo = (unsigned int) S3C_UDC_OTG_EP7_FIFO,
},
.ep[8] = {
.ep = {
.name = "ep8-bulk",
.ops = &s3c_ep_ops,
.maxpacket = EP_FIFO_SIZE,
},
.dev = &memory,
.bEndpointAddress = USB_DIR_IN | 8,
.bmAttributes = USB_ENDPOINT_XFER_BULK,
.ep_type = ep_bulk_in,
.fifo = (unsigned int) S3C_UDC_OTG_EP8_FIFO,
},
.ep[9] = {
.ep = {
.name = "ep9-int",
.ops = &s3c_ep_ops,
.maxpacket = EP_FIFO_SIZE,
},
.dev = &memory,
.bEndpointAddress = USB_DIR_IN | 9,
.bmAttributes = USB_ENDPOINT_XFER_INT,
.ep_type = ep_interrupt,
.fifo = (unsigned int) S3C_UDC_OTG_EP9_FIFO,
},
};
ep10~ep14 are not in the list. So is it possible ep10~ep14 are iso
endpoints? I guess only samsung engineers can answer this question.
And has anybody improved the udc driver to support ISO mode? Here i
want to use this mode to support g_webcam gadget.
Thanks
Barry
More information about the linux-arm-kernel
mailing list