diff options
author | Sebastian Andrzej Siewior <bigeasy@linutronix.de> | 2012-09-06 14:11:19 -0400 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2012-09-10 09:12:59 -0400 |
commit | 3b4a3fc0ba83265c0bfcfdfc3416e65e47441747 (patch) | |
tree | 6b9dc65f08622c1f1e717d199ab3262d9755d5a3 /drivers/usb/gadget | |
parent | 18786da4853017d983ff6911648543ca617c12d1 (diff) |
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>
Diffstat (limited to 'drivers/usb/gadget')
-rw-r--r-- | drivers/usb/gadget/Makefile | 2 | ||||
-rw-r--r-- | drivers/usb/gadget/gadget_chips.c | 94 | ||||
-rw-r--r-- | drivers/usb/gadget/gadget_chips.h | 76 |
3 files changed, 96 insertions, 76 deletions
diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile index 23d705f194ac..4fec0e8ee000 100644 --- a/drivers/usb/gadget/Makefile +++ b/drivers/usb/gadget/Makefile | |||
@@ -5,7 +5,7 @@ ccflags-$(CONFIG_USB_GADGET_DEBUG) := -DDEBUG | |||
5 | 5 | ||
6 | obj-$(CONFIG_USB_GADGET) += udc-core.o | 6 | obj-$(CONFIG_USB_GADGET) += udc-core.o |
7 | obj-$(CONFIG_USB_LIBCOMPOSITE) += libcomposite.o | 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 | obj-$(CONFIG_USB_DUMMY_HCD) += dummy_hcd.o | 9 | obj-$(CONFIG_USB_DUMMY_HCD) += dummy_hcd.o |
10 | obj-$(CONFIG_USB_NET2272) += net2272.o | 10 | obj-$(CONFIG_USB_NET2272) += net2272.o |
11 | obj-$(CONFIG_USB_NET2280) += net2280.o | 11 | obj-$(CONFIG_USB_NET2280) += net2280.o |
diff --git a/drivers/usb/gadget/gadget_chips.c b/drivers/usb/gadget/gadget_chips.c new file mode 100644 index 000000000000..6387d43d3f8c --- /dev/null +++ b/drivers/usb/gadget/gadget_chips.c | |||
@@ -0,0 +1,94 @@ | |||
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); | ||
diff --git a/drivers/usb/gadget/gadget_chips.h b/drivers/usb/gadget/gadget_chips.h index ba4e302e77d7..c7055cd1e92e 100644 --- a/drivers/usb/gadget/gadget_chips.h +++ b/drivers/usb/gadget/gadget_chips.h | |||
@@ -55,81 +55,7 @@ | |||
55 | #define gadget_is_s3c_hsotg(g) (!strcmp("s3c-hsotg", (g)->name)) | 55 | #define gadget_is_s3c_hsotg(g) (!strcmp("s3c-hsotg", (g)->name)) |
56 | #define gadget_is_s3c_hsudc(g) (!strcmp("s3c-hsudc", (g)->name)) | 56 | #define gadget_is_s3c_hsudc(g) (!strcmp("s3c-hsudc", (g)->name)) |
57 | 57 | ||
58 | /** | 58 | int usb_gadget_controller_number(struct usb_gadget *gadget); |
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 | |||
133 | 59 | ||
134 | /** | 60 | /** |
135 | * gadget_supports_altsettings - return true if altsettings work | 61 | * gadget_supports_altsettings - return true if altsettings work |