diff options
Diffstat (limited to 'drivers/usb/gadget/m66592-udc.c')
-rw-r--r-- | drivers/usb/gadget/m66592-udc.c | 34 |
1 files changed, 12 insertions, 22 deletions
diff --git a/drivers/usb/gadget/m66592-udc.c b/drivers/usb/gadget/m66592-udc.c index 43dcf9e1af6b..0dddd2f8ff35 100644 --- a/drivers/usb/gadget/m66592-udc.c +++ b/drivers/usb/gadget/m66592-udc.c | |||
@@ -37,7 +37,7 @@ MODULE_LICENSE("GPL"); | |||
37 | MODULE_AUTHOR("Yoshihiro Shimoda"); | 37 | MODULE_AUTHOR("Yoshihiro Shimoda"); |
38 | MODULE_ALIAS("platform:m66592_udc"); | 38 | MODULE_ALIAS("platform:m66592_udc"); |
39 | 39 | ||
40 | #define DRIVER_VERSION "18 Oct 2007" | 40 | #define DRIVER_VERSION "26 Jun 2009" |
41 | 41 | ||
42 | /* module parameters */ | 42 | /* module parameters */ |
43 | #if defined(CONFIG_SUPERH_BUILT_IN_M66592) | 43 | #if defined(CONFIG_SUPERH_BUILT_IN_M66592) |
@@ -276,24 +276,27 @@ static int pipe_buffer_setting(struct m66592 *m66592, | |||
276 | buf_bsize = 0; | 276 | buf_bsize = 0; |
277 | break; | 277 | break; |
278 | case M66592_BULK: | 278 | case M66592_BULK: |
279 | bufnum = m66592->bi_bufnum + | 279 | /* isochronous pipes may be used as bulk pipes */ |
280 | (info->pipe - M66592_BASE_PIPENUM_BULK) * 16; | 280 | if (info->pipe > M66592_BASE_PIPENUM_BULK) |
281 | m66592->bi_bufnum += 16; | 281 | bufnum = info->pipe - M66592_BASE_PIPENUM_BULK; |
282 | else | ||
283 | bufnum = info->pipe - M66592_BASE_PIPENUM_ISOC; | ||
284 | |||
285 | bufnum = M66592_BASE_BUFNUM + (bufnum * 16); | ||
282 | buf_bsize = 7; | 286 | buf_bsize = 7; |
283 | pipecfg |= M66592_DBLB; | 287 | pipecfg |= M66592_DBLB; |
284 | if (!info->dir_in) | 288 | if (!info->dir_in) |
285 | pipecfg |= M66592_SHTNAK; | 289 | pipecfg |= M66592_SHTNAK; |
286 | break; | 290 | break; |
287 | case M66592_ISO: | 291 | case M66592_ISO: |
288 | bufnum = m66592->bi_bufnum + | 292 | bufnum = M66592_BASE_BUFNUM + |
289 | (info->pipe - M66592_BASE_PIPENUM_ISOC) * 16; | 293 | (info->pipe - M66592_BASE_PIPENUM_ISOC) * 16; |
290 | m66592->bi_bufnum += 16; | ||
291 | buf_bsize = 7; | 294 | buf_bsize = 7; |
292 | break; | 295 | break; |
293 | } | 296 | } |
294 | if (m66592->bi_bufnum > M66592_MAX_BUFNUM) { | 297 | |
295 | pr_err("m66592 pipe memory is insufficient(%d)\n", | 298 | if (buf_bsize && ((bufnum + 16) >= M66592_MAX_BUFNUM)) { |
296 | m66592->bi_bufnum); | 299 | pr_err("m66592 pipe memory is insufficient\n"); |
297 | return -ENOMEM; | 300 | return -ENOMEM; |
298 | } | 301 | } |
299 | 302 | ||
@@ -313,17 +316,6 @@ static void pipe_buffer_release(struct m66592 *m66592, | |||
313 | if (info->pipe == 0) | 316 | if (info->pipe == 0) |
314 | return; | 317 | return; |
315 | 318 | ||
316 | switch (info->type) { | ||
317 | case M66592_BULK: | ||
318 | if (is_bulk_pipe(info->pipe)) | ||
319 | m66592->bi_bufnum -= 16; | ||
320 | break; | ||
321 | case M66592_ISO: | ||
322 | if (is_isoc_pipe(info->pipe)) | ||
323 | m66592->bi_bufnum -= 16; | ||
324 | break; | ||
325 | } | ||
326 | |||
327 | if (is_bulk_pipe(info->pipe)) { | 319 | if (is_bulk_pipe(info->pipe)) { |
328 | m66592->bulk--; | 320 | m66592->bulk--; |
329 | } else if (is_interrupt_pipe(info->pipe)) | 321 | } else if (is_interrupt_pipe(info->pipe)) |
@@ -1603,8 +1595,6 @@ static int __init m66592_probe(struct platform_device *pdev) | |||
1603 | m66592->timer.data = (unsigned long)m66592; | 1595 | m66592->timer.data = (unsigned long)m66592; |
1604 | m66592->reg = reg; | 1596 | m66592->reg = reg; |
1605 | 1597 | ||
1606 | m66592->bi_bufnum = M66592_BASE_BUFNUM; | ||
1607 | |||
1608 | ret = request_irq(irq, m66592_irq, IRQF_DISABLED | IRQF_SHARED, | 1598 | ret = request_irq(irq, m66592_irq, IRQF_DISABLED | IRQF_SHARED, |
1609 | udc_name, m66592); | 1599 | udc_name, m66592); |
1610 | if (ret < 0) { | 1600 | if (ret < 0) { |