Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usb: gadget: move usb_gadget_controller_number() into a .c file and libcomposite

After I moved the function from the header file to the c file I see:

| $ size drivers/usb/gadget/gadget_chips.o
| text data bss dec hex filename
| 1048 0 0 1048 418 drivers/usb/gadget/gadget_chips.o

That is almost a KiB which is removed from each user.
As Felipe pointed out, the function / usage is very dumb actually. This is
used for the following reasons:
- epautoconf ep hint (could provide a per-gadget callback)
- miss-features. currently the missing altsetting on pxa's and something
ZLP related on musbhdrc (looks like an optimisation which could be
implemented in musb itself if it is correct)
- unique BCD accross all UDCs. Not sure how important this is.

Acked-by: Michal Nazarewicz <mina86@mina86.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>

authored by

Sebastian Andrzej Siewior and committed by
Felipe Balbi
3b4a3fc0 18786da4

+96 -76
+1 -1
drivers/usb/gadget/Makefile
··· 5 5 6 6 obj-$(CONFIG_USB_GADGET) += udc-core.o 7 7 obj-$(CONFIG_USB_LIBCOMPOSITE) += libcomposite.o 8 - libcomposite-y := usbstring.o config.o epautoconf.o 8 + libcomposite-y := usbstring.o config.o epautoconf.o gadget_chips.o 9 9 obj-$(CONFIG_USB_DUMMY_HCD) += dummy_hcd.o 10 10 obj-$(CONFIG_USB_NET2272) += net2272.o 11 11 obj-$(CONFIG_USB_NET2280) += net2280.o
+94
drivers/usb/gadget/gadget_chips.c
··· 1 + /* 2 + * USB device controllers have lots of quirks. Use these macros in 3 + * gadget drivers or other code that needs to deal with them, and which 4 + * autoconfigures instead of using early binding to the hardware. 5 + * 6 + * This SHOULD eventually work like the ARM mach_is_*() stuff, driven by 7 + * some config file that gets updated as new hardware is supported. 8 + * (And avoiding all runtime comparisons in typical one-choice configs!) 9 + * 10 + * NOTE: some of these controller drivers may not be available yet. 11 + * Some are available on 2.4 kernels; several are available, but not 12 + * yet pushed in the 2.6 mainline tree. 13 + */ 14 + 15 + #include <linux/usb/gadget.h> 16 + #include <linux/module.h> 17 + 18 + #include "gadget_chips.h" 19 + 20 + /** 21 + * usb_gadget_controller_number - support bcdDevice id convention 22 + * @gadget: the controller being driven 23 + * 24 + * Return a 2-digit BCD value associated with the peripheral controller, 25 + * suitable for use as part of a bcdDevice value, or a negative error code. 26 + * 27 + * NOTE: this convention is purely optional, and has no meaning in terms of 28 + * any USB specification. If you want to use a different convention in your 29 + * gadget driver firmware -- maybe a more formal revision ID -- feel free. 30 + * 31 + * Hosts see these bcdDevice numbers, and are allowed (but not encouraged!) 32 + * to change their behavior accordingly. For example it might help avoiding 33 + * some chip bug. 34 + */ 35 + int usb_gadget_controller_number(struct usb_gadget *gadget) 36 + { 37 + if (gadget_is_net2280(gadget)) 38 + return 0x01; 39 + else if (gadget_is_dummy(gadget)) 40 + return 0x02; 41 + else if (gadget_is_pxa(gadget)) 42 + return 0x03; 43 + else if (gadget_is_goku(gadget)) 44 + return 0x06; 45 + else if (gadget_is_omap(gadget)) 46 + return 0x08; 47 + else if (gadget_is_pxa27x(gadget)) 48 + return 0x11; 49 + else if (gadget_is_s3c2410(gadget)) 50 + return 0x12; 51 + else if (gadget_is_at91(gadget)) 52 + return 0x13; 53 + else if (gadget_is_imx(gadget)) 54 + return 0x14; 55 + else if (gadget_is_musbhdrc(gadget)) 56 + return 0x16; 57 + else if (gadget_is_atmel_usba(gadget)) 58 + return 0x18; 59 + else if (gadget_is_fsl_usb2(gadget)) 60 + return 0x19; 61 + else if (gadget_is_amd5536udc(gadget)) 62 + return 0x20; 63 + else if (gadget_is_m66592(gadget)) 64 + return 0x21; 65 + else if (gadget_is_fsl_qe(gadget)) 66 + return 0x22; 67 + else if (gadget_is_ci13xxx_pci(gadget)) 68 + return 0x23; 69 + else if (gadget_is_langwell(gadget)) 70 + return 0x24; 71 + else if (gadget_is_r8a66597(gadget)) 72 + return 0x25; 73 + else if (gadget_is_s3c_hsotg(gadget)) 74 + return 0x26; 75 + else if (gadget_is_pch(gadget)) 76 + return 0x27; 77 + else if (gadget_is_ci13xxx_msm(gadget)) 78 + return 0x28; 79 + else if (gadget_is_renesas_usbhs(gadget)) 80 + return 0x29; 81 + else if (gadget_is_s3c_hsudc(gadget)) 82 + return 0x30; 83 + else if (gadget_is_net2272(gadget)) 84 + return 0x31; 85 + else if (gadget_is_dwc3(gadget)) 86 + return 0x32; 87 + else if (gadget_is_lpc32xx(gadget)) 88 + return 0x33; 89 + else if (gadget_is_bcm63xx(gadget)) 90 + return 0x34; 91 + 92 + return -ENOENT; 93 + } 94 + EXPORT_SYMBOL_GPL(usb_gadget_controller_number);
+1 -75
drivers/usb/gadget/gadget_chips.h
··· 55 55 #define gadget_is_s3c_hsotg(g) (!strcmp("s3c-hsotg", (g)->name)) 56 56 #define gadget_is_s3c_hsudc(g) (!strcmp("s3c-hsudc", (g)->name)) 57 57 58 - /** 59 - * usb_gadget_controller_number - support bcdDevice id convention 60 - * @gadget: the controller being driven 61 - * 62 - * Return a 2-digit BCD value associated with the peripheral controller, 63 - * suitable for use as part of a bcdDevice value, or a negative error code. 64 - * 65 - * NOTE: this convention is purely optional, and has no meaning in terms of 66 - * any USB specification. If you want to use a different convention in your 67 - * gadget driver firmware -- maybe a more formal revision ID -- feel free. 68 - * 69 - * Hosts see these bcdDevice numbers, and are allowed (but not encouraged!) 70 - * to change their behavior accordingly. For example it might help avoiding 71 - * some chip bug. 72 - */ 73 - static inline int usb_gadget_controller_number(struct usb_gadget *gadget) 74 - { 75 - if (gadget_is_net2280(gadget)) 76 - return 0x01; 77 - else if (gadget_is_dummy(gadget)) 78 - return 0x02; 79 - else if (gadget_is_pxa(gadget)) 80 - return 0x03; 81 - else if (gadget_is_goku(gadget)) 82 - return 0x06; 83 - else if (gadget_is_omap(gadget)) 84 - return 0x08; 85 - else if (gadget_is_pxa27x(gadget)) 86 - return 0x11; 87 - else if (gadget_is_s3c2410(gadget)) 88 - return 0x12; 89 - else if (gadget_is_at91(gadget)) 90 - return 0x13; 91 - else if (gadget_is_imx(gadget)) 92 - return 0x14; 93 - else if (gadget_is_musbhdrc(gadget)) 94 - return 0x16; 95 - else if (gadget_is_atmel_usba(gadget)) 96 - return 0x18; 97 - else if (gadget_is_fsl_usb2(gadget)) 98 - return 0x19; 99 - else if (gadget_is_amd5536udc(gadget)) 100 - return 0x20; 101 - else if (gadget_is_m66592(gadget)) 102 - return 0x21; 103 - else if (gadget_is_fsl_qe(gadget)) 104 - return 0x22; 105 - else if (gadget_is_ci13xxx_pci(gadget)) 106 - return 0x23; 107 - else if (gadget_is_langwell(gadget)) 108 - return 0x24; 109 - else if (gadget_is_r8a66597(gadget)) 110 - return 0x25; 111 - else if (gadget_is_s3c_hsotg(gadget)) 112 - return 0x26; 113 - else if (gadget_is_pch(gadget)) 114 - return 0x27; 115 - else if (gadget_is_ci13xxx_msm(gadget)) 116 - return 0x28; 117 - else if (gadget_is_renesas_usbhs(gadget)) 118 - return 0x29; 119 - else if (gadget_is_s3c_hsudc(gadget)) 120 - return 0x30; 121 - else if (gadget_is_net2272(gadget)) 122 - return 0x31; 123 - else if (gadget_is_dwc3(gadget)) 124 - return 0x32; 125 - else if (gadget_is_lpc32xx(gadget)) 126 - return 0x33; 127 - else if (gadget_is_bcm63xx(gadget)) 128 - return 0x34; 129 - 130 - return -ENOENT; 131 - } 132 - 58 + int usb_gadget_controller_number(struct usb_gadget *gadget); 133 59 134 60 /** 135 61 * gadget_supports_altsettings - return true if altsettings work