summaryrefslogtreecommitdiffstats
path: root/target/linux/omap24xx/patches-2.6.38/850-musb-tusb-modular-fixes.patch
blob: 111a499227276cb1c8b108a005d05caf584cabee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -66,7 +66,7 @@ obj-$(CONFIG_TC)		+= tc/
 obj-$(CONFIG_UWB)		+= uwb/
 obj-$(CONFIG_USB_OTG_UTILS)	+= usb/otg/
 obj-$(CONFIG_USB)		+= usb/
-obj-$(CONFIG_USB_MUSB_HDRC)	+= usb/musb/
+obj-y				+= usb/musb/
 obj-$(CONFIG_PCI)		+= usb/
 obj-$(CONFIG_USB_GADGET)	+= usb/gadget/
 obj-$(CONFIG_SERIO)		+= input/serio/
--- a/drivers/usb/musb/Kconfig
+++ b/drivers/usb/musb/Kconfig
@@ -46,7 +46,7 @@ config USB_MUSB_DA8XX
 	depends on ARCH_DAVINCI_DA8XX
 
 config USB_MUSB_TUSB6010
-	bool "TUSB6010"
+	tristate "TUSB6010"
 	depends on ARCH_OMAP
 
 config USB_MUSB_OMAP2PLUS
--- a/drivers/usb/musb/tusb6010.c
+++ b/drivers/usb/musb/tusb6010.c
@@ -55,6 +55,7 @@ u8 tusb_get_revision(struct musb *musb)
 
 	return rev;
 }
+EXPORT_SYMBOL(tusb_get_revision);
 
 static int tusb_print_revision(struct musb *musb)
 {
@@ -218,6 +219,7 @@ void musb_write_fifo(struct musb_hw_ep *
 	if (len > 0)
 		tusb_fifo_write_unaligned(fifo, buf, len);
 }
+EXPORT_SYMBOL(musb_write_fifo);
 
 void musb_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *buf)
 {
@@ -264,6 +266,7 @@ void musb_read_fifo(struct musb_hw_ep *h
 	if (len > 0)
 		tusb_fifo_read_unaligned(fifo, buf, len);
 }
+EXPORT_SYMBOL(musb_read_fifo);
 
 static struct musb *the_musb;
 
@@ -1259,18 +1262,16 @@ static struct platform_driver tusb_drive
 	},
 };
 
-MODULE_DESCRIPTION("TUSB6010 MUSB Glue Layer");
-MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
-MODULE_LICENSE("GPL v2");
+//MODULE_DESCRIPTION("TUSB6010 MUSB Glue Layer");
+//MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
+//MODULE_LICENSE("GPL v2");
 
-static int __init tusb_init(void)
+int musb_hdrc_glue_init(void)
 {
 	return platform_driver_probe(&tusb_driver, tusb_probe);
 }
-subsys_initcall(tusb_init);
 
-static void __exit tusb_exit(void)
+void musb_hdrc_glue_exit(void)
 {
 	platform_driver_unregister(&tusb_driver);
 }
-module_exit(tusb_exit);
--- a/drivers/usb/musb/Makefile
+++ b/drivers/usb/musb/Makefile
@@ -13,13 +13,13 @@ musb_hdrc-$(CONFIG_USB_MUSB_HDRC_HCD)		+
 musb_hdrc-$(CONFIG_DEBUG_FS)			+= musb_debugfs.o
 
 # Hardware Glue Layer
-obj-$(CONFIG_USB_MUSB_OMAP2PLUS)		+= omap2430.o
-obj-$(CONFIG_USB_MUSB_AM35X)			+= am35x.o
-obj-$(CONFIG_USB_MUSB_TUSB6010)			+= tusb6010.o
-obj-$(CONFIG_USB_MUSB_DAVINCI)			+= davinci.o
-obj-$(CONFIG_USB_MUSB_DA8XX)			+= da8xx.o
-obj-$(CONFIG_USB_MUSB_BLACKFIN)			+= blackfin.o
-obj-$(CONFIG_USB_MUSB_UX500)			+= ux500.o
+musb_hdrc-$(CONFIG_USB_MUSB_OMAP2PLUS)		+= omap2430.o
+musb_hdrc-$(CONFIG_USB_MUSB_AM35X)		+= am35x.o
+musb_hdrc-$(CONFIG_USB_MUSB_TUSB6010)		+= tusb6010.o
+musb_hdrc-$(CONFIG_USB_MUSB_DAVINCI)		+= davinci.o
+musb_hdrc-$(CONFIG_USB_MUSB_DA8XX)		+= da8xx.o
+musb_hdrc-$(CONFIG_USB_MUSB_BLACKFIN)		+= blackfin.o
+musb_hdrc-$(CONFIG_USB_MUSB_UX500)		+= ux500.o
 
 # the kconfig must guarantee that only one of the
 # possible I/O schemes will be enabled at a time ...
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -2427,8 +2427,13 @@ static struct platform_driver musb_drive
 
 /*-------------------------------------------------------------------------*/
 
+extern int musb_hdrc_glue_init(void);
+extern void musb_hdrc_glue_exit(void);
+
 static int __init musb_init(void)
 {
+	int err;
+
 #ifdef CONFIG_USB_MUSB_HDRC_HCD
 	if (usb_disabled())
 		return 0;
@@ -2456,7 +2461,17 @@ static int __init musb_init(void)
 #endif
 		", debug=%d\n",
 		musb_driver_name, musb_debug);
-	return platform_driver_probe(&musb_driver, musb_probe);
+
+	err = musb_hdrc_glue_init();
+	if (err)
+		return err;
+	err = platform_driver_probe(&musb_driver, musb_probe);
+	if (err) {
+		musb_hdrc_glue_exit();
+		return err;
+	}
+
+	return 0;
 }
 
 /* make us init after usbcore and i2c (transceivers, regulators, etc)
@@ -2467,5 +2482,6 @@ fs_initcall(musb_init);
 static void __exit musb_cleanup(void)
 {
 	platform_driver_unregister(&musb_driver);
+	musb_hdrc_glue_exit();
 }
 module_exit(musb_cleanup);