On Wednesday 20 June 2007, Haavard Skinnemoen wrote: > This is a driver for the Atmel USBA UDC which can be found integrated > on AT32AP700x AVR32 processors.
Hmm, scripts/checkpatch.pl reports a few issues (see at the end). Mostly extraneous brackets; but please fix. Also, it won't build against 2.6.23-rc1 ... that's more serious!! In the header file: * I'm still not a fan of those bitfield macros -- I think they obfuscate what's going on. Especially for one-bit fields!! * Please make the to_usba_X() things into inline functions, so any type errors will obviously be reported by GCC and so folk don't need to guess. * Most of those ep_is_X() #defines should expand in-line; they don't shrink code or promote clarity. * The DEBUG_FS ifdefs should be ifdeffed USB_GADGET_DEBUG_FILES (updating that to not rely purely on PROC_FS?) or somesuch. Kconfig, Makefile: * Please put this in alphabetical order; let's not worsen things! You want this to be the default, not the discrete Renesas chip, in any case ... Driver ".c" file (partial comments) * I see DMA_ADDR_INVALID == MAX_DMA_ADDRESS ... bug waiting to happen?! * Those debug macros belong in the header file, ditto the other #defines * The {alloc,free}_buffer() routines need to be deleted. (They were incorrect in any case, since they didn't return dma-coherent memory. Like many implementations. Which is why those methods are now gone.) * Building it showed other errors too: drivers/usb/gadget/atmel_usba_udc.c: In function ‘do_test_mode’: drivers/usb/gadget/atmel_usba_udc.c:1246: error: ‘pdev’ undeclared (first use in this function) drivers/usb/gadget/atmel_usba_udc.c:1246: error: (Each undeclared identifier is reported only once drivers/usb/gadget/atmel_usba_udc.c:1246: error: for each function it appears in.) drivers/usb/gadget/atmel_usba_udc.c: In function ‘usba_udc_probe’: drivers/usb/gadget/atmel_usba_udc.c:1985: warning: ‘deprecated_irq_flag’ is deprecated (declared at include/linux/interrupt.h:66) drivers/usb/gadget/atmel_usba_udc.c:2000: error: ‘GPIO_PIN_NONE’ undeclared (first use in t * SA_SAMPLE_RANDOM is a bad idea here anyway ... the host can easily control that source of "random" data. * I see a fair number of four-space and other odd indents... tabs only! * If you don't handle remote wakeup requests, report errors ... but of course, setting that feature to "off" should work! :) * Use platform_driver_probe(), shrink the runtime footprint; and use __init not __devinit. * Likewise, in this case use __exit and friends not __devexit * Request any vbus irq in probe(); it can be disabled until the gadget driver is ready. * Your gadget driver registration code omits the sanity checks the other drivers have ... which means gadget driver bugs will show up late, and maybe in unfriendly ways (like oopsing). * Likewise it assumes there will be an unbind() method ... but it's OK to not have one of thise, especially for static linking. Well, that's all for a quick surface scan. If you can get me a version resolving the issues noted here, I can start to get closer to a technical review. - Dave p.s. Random note: this is almost the smallest of the high speed drivers, at least so far as bytes in main C file go: 86768 amd5536udc.c 79169 net2280.c 66463 fsl_usb2_udc.c 50965 atmel_usba_udc.c 41080 m66592-udc.c And musb_hdrc is bigger than all of those, even if you discount the host side support. ;) ========== scripts/checkpatch.pl output WARNING: declaring multiple variables together should be avoided #202: FILE: drivers/usb/gadget/atmel_usba_udc.c:117: + size_t len, remaining, actual = 0; ERROR: braces {} are not necessary for single statement blocks #498: FILE: drivers/usb/gadget/atmel_usba_udc.c:413: + } else if (transaction_len == ep->ep.maxpacket + && req->req.zero) { + req->last_transaction = 0; + } WARNING: declaring multiple variables together should be avoided #571: FILE: drivers/usb/gadget/atmel_usba_udc.c:486: + unsigned int bytecount, nr_busy; WARNING: declaring multiple variables together should be avoided #662: FILE: drivers/usb/gadget/atmel_usba_udc.c:577: + unsigned long flags, ept_cfg, maxpacket; ERROR: braces {} are not necessary for single statement blocks #743: FILE: drivers/usb/gadget/atmel_usba_udc.c:658: + } else { + usba_writel(udc, INT_ENB, + (usba_readl(udc, INT_ENB) + | USBA_BF(EPT_INT, 1 << ep->index))); + } ERROR: braces {} are not necessary for single statement blocks #1075: FILE: drivers/usb/gadget/atmel_usba_udc.c:990: + if (!list_empty(&ep->queue) + || ((value && ep_is_in(ep) + && (usba_ep_readl(ep, STA) + & USBA_BF(BUSY_BANKS, -1L))))) { + ret = -EAGAIN; + } else { ERROR: Macros with complex values should be enclosed in parenthesis #1135: FILE: drivers/usb/gadget/atmel_usba_udc.c:1050: +{ \ ERROR: no space between function name and open parenthesis '(' #1221: FILE: drivers/usb/gadget/atmel_usba_udc.c:1136: + list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) { ERROR: braces {} are not necessary for single statement blocks #1378: FILE: drivers/usb/gadget/atmel_usba_udc.c:1293: + if (crq->bRequestType == (USB_DIR_IN | USB_RECIP_DEVICE)) { + /* Self-powered, no remote wakeup */ + status = __constant_cpu_to_le16(1 << 0); + } else if (crq->bRequestType ERROR: braces {} are not necessary for single statement blocks #1381: FILE: drivers/usb/gadget/atmel_usba_udc.c:1296: + } else if (crq->bRequestType + == (USB_DIR_IN | USB_RECIP_INTERFACE)) { + status = __constant_cpu_to_le16(0); + } else if (crq->bRequestType ERROR: braces {} are not necessary for single statement blocks #1395: FILE: drivers/usb/gadget/atmel_usba_udc.c:1310: + } else { + goto delegate; + } ERROR: braces {} are not necessary for single statement blocks #1410: FILE: drivers/usb/gadget/atmel_usba_udc.c:1325: + if (feature_is_dev_remote_wakeup(crq)) { + /* TODO: Handle REMOTE_WAKEUP */ + } else { ERROR: braces {} are not necessary for single statement blocks #1412: FILE: drivers/usb/gadget/atmel_usba_udc.c:1327: + } else { + /* Can't CLEAR_FEATURE TEST_MODE */ + goto stall; + } ERROR: braces {} are not necessary for single statement blocks #1429: FILE: drivers/usb/gadget/atmel_usba_udc.c:1344: + } else { + goto delegate; + } ERROR: braces {} are not necessary for single statement blocks #1444: FILE: drivers/usb/gadget/atmel_usba_udc.c:1359: + } else if (feature_is_dev_remote_wakeup(crq)) { + /* TODO: Handle REMOTE_WAKEUP */ + } else { ERROR: braces {} are not necessary for single statement blocks #1446: FILE: drivers/usb/gadget/atmel_usba_udc.c:1361: + } else { + goto stall; + } ERROR: braces {} are not necessary for single statement blocks #1678: FILE: drivers/usb/gadget/atmel_usba_udc.c:1593: + if (ret < 0) { + /* Let the host know that we failed */ + set_protocol_stall(udc, ep); + } WARNING: declaring multiple variables together should be avoided #1744: FILE: drivers/usb/gadget/atmel_usba_udc.c:1659: + u32 status, control, pending; WARNING: declaring multiple variables together should be avoided #2004: FILE: drivers/usb/gadget/atmel_usba_udc.c:1919: + int irq, ret, i; Your patch has style problems, please review. If any of these errors are false positives report them to the maintainer, see CHECKPATCH in MAINTAINERS. ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel