aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2005-11-16 16:41:28 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2006-01-04 16:48:32 -0500
commitba9dc657af86d05d2971633e57d1f6f94ed60472 (patch)
tree2b57fe680536b5a02e9dd3b8f4d1df33d6f65017
parent733260ff9c45bd4db60f45d17e8560a4a68dff4d (diff)
[PATCH] USB: allow usb drivers to disable dynamic ids
This lets drivers, like the usb-serial ones, disable the ability to add ids from sysfs. The usb-serial drivers are "odd" in that they are really usb-serial bus drivers, not usb bus drivers, so the dynamic id logic will have to go into the usb-serial bus core for those drivers to get that ability. Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/usb/core/driver.c19
-rw-r--r--drivers/usb/serial/airprime.c1
-rw-r--r--drivers/usb/serial/anydata.c1
-rw-r--r--drivers/usb/serial/belkin_sa.c1
-rw-r--r--drivers/usb/serial/cp2101.c1
-rw-r--r--drivers/usb/serial/cyberjack.c1
-rw-r--r--drivers/usb/serial/cypress_m8.c1
-rw-r--r--drivers/usb/serial/digi_acceleport.c1
-rw-r--r--drivers/usb/serial/empeg.c1
-rw-r--r--drivers/usb/serial/ftdi_sio.c1
-rw-r--r--drivers/usb/serial/garmin_gps.c1
-rw-r--r--drivers/usb/serial/generic.c1
-rw-r--r--drivers/usb/serial/hp4x.c1
-rw-r--r--drivers/usb/serial/io_edgeport.c1
-rw-r--r--drivers/usb/serial/io_ti.c1
-rw-r--r--drivers/usb/serial/ipaq.c1
-rw-r--r--drivers/usb/serial/ipw.c1
-rw-r--r--drivers/usb/serial/ir-usb.c1
-rw-r--r--drivers/usb/serial/keyspan.h1
-rw-r--r--drivers/usb/serial/keyspan_pda.c1
-rw-r--r--drivers/usb/serial/kl5kusb105.c1
-rw-r--r--drivers/usb/serial/kobil_sct.c1
-rw-r--r--drivers/usb/serial/mct_u232.c1
-rw-r--r--drivers/usb/serial/omninet.c1
-rw-r--r--drivers/usb/serial/option.c1
-rw-r--r--drivers/usb/serial/pl2303.c1
-rw-r--r--drivers/usb/serial/safe_serial.c1
-rw-r--r--drivers/usb/serial/ti_usb_3410_5052.c1
-rw-r--r--drivers/usb/serial/usb-serial.c1
-rw-r--r--drivers/usb/serial/visor.c1
-rw-r--r--drivers/usb/serial/whiteheat.c1
-rw-r--r--include/linux/usb.h3
32 files changed, 52 insertions, 0 deletions
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index 1c0611045379..5e65bc258e1b 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -112,12 +112,26 @@ static int usb_create_newid_file(struct usb_driver *usb_drv)
112{ 112{
113 int error = 0; 113 int error = 0;
114 114
115 if (usb_drv->no_dynamic_id)
116 goto exit;
117
115 if (usb_drv->probe != NULL) 118 if (usb_drv->probe != NULL)
116 error = sysfs_create_file(&usb_drv->driver.kobj, 119 error = sysfs_create_file(&usb_drv->driver.kobj,
117 &driver_attr_new_id.attr); 120 &driver_attr_new_id.attr);
121exit:
118 return error; 122 return error;
119} 123}
120 124
125static void usb_remove_newid_file(struct usb_driver *usb_drv)
126{
127 if (usb_drv->no_dynamic_id)
128 return;
129
130 if (usb_drv->probe != NULL)
131 sysfs_remove_file(&usb_drv->driver.kobj,
132 &driver_attr_new_id.attr);
133}
134
121static void usb_free_dynids(struct usb_driver *usb_drv) 135static void usb_free_dynids(struct usb_driver *usb_drv)
122{ 136{
123 struct usb_dynid *dynid, *n; 137 struct usb_dynid *dynid, *n;
@@ -135,6 +149,10 @@ static inline int usb_create_newid_file(struct usb_driver *usb_drv)
135 return 0; 149 return 0;
136} 150}
137 151
152static void usb_remove_newid_file(struct usb_driver *usb_drv)
153{
154}
155
138static inline void usb_free_dynids(struct usb_driver *usb_drv) 156static inline void usb_free_dynids(struct usb_driver *usb_drv)
139{ 157{
140} 158}
@@ -447,6 +465,7 @@ void usb_deregister(struct usb_driver *driver)
447 pr_info("%s: deregistering driver %s\n", usbcore_name, driver->name); 465 pr_info("%s: deregistering driver %s\n", usbcore_name, driver->name);
448 466
449 usb_lock_all_devices(); 467 usb_lock_all_devices();
468 usb_remove_newid_file(driver);
450 usb_free_dynids(driver); 469 usb_free_dynids(driver);
451 driver_unregister(&driver->driver); 470 driver_unregister(&driver->driver);
452 usb_unlock_all_devices(); 471 usb_unlock_all_devices();
diff --git a/drivers/usb/serial/airprime.c b/drivers/usb/serial/airprime.c
index 1f29d8837327..2ef9945a6c07 100644
--- a/drivers/usb/serial/airprime.c
+++ b/drivers/usb/serial/airprime.c
@@ -28,6 +28,7 @@ static struct usb_driver airprime_driver = {
28 .probe = usb_serial_probe, 28 .probe = usb_serial_probe,
29 .disconnect = usb_serial_disconnect, 29 .disconnect = usb_serial_disconnect,
30 .id_table = id_table, 30 .id_table = id_table,
31 .no_dynamic_id = 1,
31}; 32};
32 33
33static struct usb_serial_driver airprime_device = { 34static struct usb_serial_driver airprime_device = {
diff --git a/drivers/usb/serial/anydata.c b/drivers/usb/serial/anydata.c
index 18022a74a3dc..7a171e034b59 100644
--- a/drivers/usb/serial/anydata.c
+++ b/drivers/usb/serial/anydata.c
@@ -32,6 +32,7 @@ static struct usb_driver anydata_driver = {
32 .probe = usb_serial_probe, 32 .probe = usb_serial_probe,
33 .disconnect = usb_serial_disconnect, 33 .disconnect = usb_serial_disconnect,
34 .id_table = id_table, 34 .id_table = id_table,
35 .no_dynamic_id = 1,
35}; 36};
36 37
37static int anydata_open(struct usb_serial_port *port, struct file *filp) 38static int anydata_open(struct usb_serial_port *port, struct file *filp)
diff --git a/drivers/usb/serial/belkin_sa.c b/drivers/usb/serial/belkin_sa.c
index 84bc0ee4f061..69039bd9fc5e 100644
--- a/drivers/usb/serial/belkin_sa.c
+++ b/drivers/usb/serial/belkin_sa.c
@@ -118,6 +118,7 @@ static struct usb_driver belkin_driver = {
118 .probe = usb_serial_probe, 118 .probe = usb_serial_probe,
119 .disconnect = usb_serial_disconnect, 119 .disconnect = usb_serial_disconnect,
120 .id_table = id_table_combined, 120 .id_table = id_table_combined,
121 .no_dynamic_id = 1,
121}; 122};
122 123
123/* All of the device info needed for the serial converters */ 124/* All of the device info needed for the serial converters */
diff --git a/drivers/usb/serial/cp2101.c b/drivers/usb/serial/cp2101.c
index c9787001cf2a..813bab37e076 100644
--- a/drivers/usb/serial/cp2101.c
+++ b/drivers/usb/serial/cp2101.c
@@ -72,6 +72,7 @@ static struct usb_driver cp2101_driver = {
72 .probe = usb_serial_probe, 72 .probe = usb_serial_probe,
73 .disconnect = usb_serial_disconnect, 73 .disconnect = usb_serial_disconnect,
74 .id_table = id_table, 74 .id_table = id_table,
75 .no_dynamic_id = 1,
75}; 76};
76 77
77static struct usb_serial_driver cp2101_device = { 78static struct usb_serial_driver cp2101_device = {
diff --git a/drivers/usb/serial/cyberjack.c b/drivers/usb/serial/cyberjack.c
index e581e4ae8483..8c10e4004905 100644
--- a/drivers/usb/serial/cyberjack.c
+++ b/drivers/usb/serial/cyberjack.c
@@ -81,6 +81,7 @@ static struct usb_driver cyberjack_driver = {
81 .probe = usb_serial_probe, 81 .probe = usb_serial_probe,
82 .disconnect = usb_serial_disconnect, 82 .disconnect = usb_serial_disconnect,
83 .id_table = id_table, 83 .id_table = id_table,
84 .no_dynamic_id = 1,
84}; 85};
85 86
86static struct usb_serial_driver cyberjack_device = { 87static struct usb_serial_driver cyberjack_device = {
diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c
index af9290ed257b..af18355e94cc 100644
--- a/drivers/usb/serial/cypress_m8.c
+++ b/drivers/usb/serial/cypress_m8.c
@@ -112,6 +112,7 @@ static struct usb_driver cypress_driver = {
112 .probe = usb_serial_probe, 112 .probe = usb_serial_probe,
113 .disconnect = usb_serial_disconnect, 113 .disconnect = usb_serial_disconnect,
114 .id_table = id_table_combined, 114 .id_table = id_table_combined,
115 .no_dynamic_id = 1,
115}; 116};
116 117
117struct cypress_private { 118struct cypress_private {
diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c
index dc74644a603d..c50cec95f49b 100644
--- a/drivers/usb/serial/digi_acceleport.c
+++ b/drivers/usb/serial/digi_acceleport.c
@@ -498,6 +498,7 @@ static struct usb_driver digi_driver = {
498 .probe = usb_serial_probe, 498 .probe = usb_serial_probe,
499 .disconnect = usb_serial_disconnect, 499 .disconnect = usb_serial_disconnect,
500 .id_table = id_table_combined, 500 .id_table = id_table_combined,
501 .no_dynamic_id = 1,
501}; 502};
502 503
503 504
diff --git a/drivers/usb/serial/empeg.c b/drivers/usb/serial/empeg.c
index 0b0546dcc7b9..e5e40064caf2 100644
--- a/drivers/usb/serial/empeg.c
+++ b/drivers/usb/serial/empeg.c
@@ -110,6 +110,7 @@ static struct usb_driver empeg_driver = {
110 .probe = usb_serial_probe, 110 .probe = usb_serial_probe,
111 .disconnect = usb_serial_disconnect, 111 .disconnect = usb_serial_disconnect,
112 .id_table = id_table, 112 .id_table = id_table,
113 .no_dynamic_id = 1,
113}; 114};
114 115
115static struct usb_serial_driver empeg_device = { 116static struct usb_serial_driver empeg_device = {
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index 06e04b442ff1..857fe791d702 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -488,6 +488,7 @@ static struct usb_driver ftdi_driver = {
488 .probe = usb_serial_probe, 488 .probe = usb_serial_probe,
489 .disconnect = usb_serial_disconnect, 489 .disconnect = usb_serial_disconnect,
490 .id_table = id_table_combined, 490 .id_table = id_table_combined,
491 .no_dynamic_id = 1,
491}; 492};
492 493
493static char *ftdi_chip_name[] = { 494static char *ftdi_chip_name[] = {
diff --git a/drivers/usb/serial/garmin_gps.c b/drivers/usb/serial/garmin_gps.c
index 35820bda7ae1..198a322286f9 100644
--- a/drivers/usb/serial/garmin_gps.c
+++ b/drivers/usb/serial/garmin_gps.c
@@ -227,6 +227,7 @@ static struct usb_driver garmin_driver = {
227 .probe = usb_serial_probe, 227 .probe = usb_serial_probe,
228 .disconnect = usb_serial_disconnect, 228 .disconnect = usb_serial_disconnect,
229 .id_table = id_table, 229 .id_table = id_table,
230 .no_dynamic_id = 1,
230}; 231};
231 232
232 233
diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c
index 53a47c31cd0e..c00a440dc421 100644
--- a/drivers/usb/serial/generic.c
+++ b/drivers/usb/serial/generic.c
@@ -73,6 +73,7 @@ static struct usb_driver generic_driver = {
73 .probe = generic_probe, 73 .probe = generic_probe,
74 .disconnect = usb_serial_disconnect, 74 .disconnect = usb_serial_disconnect,
75 .id_table = generic_serial_ids, 75 .id_table = generic_serial_ids,
76 .no_dynamic_id = 1,
76}; 77};
77#endif 78#endif
78 79
diff --git a/drivers/usb/serial/hp4x.c b/drivers/usb/serial/hp4x.c
index 8eadfb705601..e588c3fe632d 100644
--- a/drivers/usb/serial/hp4x.c
+++ b/drivers/usb/serial/hp4x.c
@@ -42,6 +42,7 @@ static struct usb_driver hp49gp_driver = {
42 .probe = usb_serial_probe, 42 .probe = usb_serial_probe,
43 .disconnect = usb_serial_disconnect, 43 .disconnect = usb_serial_disconnect,
44 .id_table = id_table, 44 .id_table = id_table,
45 .no_dynamic_id = 1,
45}; 46};
46 47
47static struct usb_serial_driver hp49gp_device = { 48static struct usb_serial_driver hp49gp_device = {
diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
index dc4c498bd1ed..276bd425a474 100644
--- a/drivers/usb/serial/io_edgeport.c
+++ b/drivers/usb/serial/io_edgeport.c
@@ -247,6 +247,7 @@ static struct usb_driver io_driver = {
247 .probe = usb_serial_probe, 247 .probe = usb_serial_probe,
248 .disconnect = usb_serial_disconnect, 248 .disconnect = usb_serial_disconnect,
249 .id_table = id_table_combined, 249 .id_table = id_table_combined,
250 .no_dynamic_id = 1,
250}; 251};
251 252
252/* function prototypes for all of our local functions */ 253/* function prototypes for all of our local functions */
diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
index 832b6d6734c0..8b2e4c78abcd 100644
--- a/drivers/usb/serial/io_ti.c
+++ b/drivers/usb/serial/io_ti.c
@@ -221,6 +221,7 @@ static struct usb_driver io_driver = {
221 .probe = usb_serial_probe, 221 .probe = usb_serial_probe,
222 .disconnect = usb_serial_disconnect, 222 .disconnect = usb_serial_disconnect,
223 .id_table = id_table_combined, 223 .id_table = id_table_combined,
224 .no_dynamic_id = 1,
224}; 225};
225 226
226 227
diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c
index d5d066488100..efb568be7015 100644
--- a/drivers/usb/serial/ipaq.c
+++ b/drivers/usb/serial/ipaq.c
@@ -547,6 +547,7 @@ static struct usb_driver ipaq_driver = {
547 .probe = usb_serial_probe, 547 .probe = usb_serial_probe,
548 .disconnect = usb_serial_disconnect, 548 .disconnect = usb_serial_disconnect,
549 .id_table = ipaq_id_table, 549 .id_table = ipaq_id_table,
550 .no_dynamic_id = 1,
550}; 551};
551 552
552 553
diff --git a/drivers/usb/serial/ipw.c b/drivers/usb/serial/ipw.c
index 7744b8148bc5..64e2cda2a84a 100644
--- a/drivers/usb/serial/ipw.c
+++ b/drivers/usb/serial/ipw.c
@@ -157,6 +157,7 @@ static struct usb_driver usb_ipw_driver = {
157 .probe = usb_serial_probe, 157 .probe = usb_serial_probe,
158 .disconnect = usb_serial_disconnect, 158 .disconnect = usb_serial_disconnect,
159 .id_table = usb_ipw_ids, 159 .id_table = usb_ipw_ids,
160 .no_dynamic_id = 1,
160}; 161};
161 162
162static int debug; 163static int debug;
diff --git a/drivers/usb/serial/ir-usb.c b/drivers/usb/serial/ir-usb.c
index 19f329e9bdcf..647431c1ccb1 100644
--- a/drivers/usb/serial/ir-usb.c
+++ b/drivers/usb/serial/ir-usb.c
@@ -130,6 +130,7 @@ static struct usb_driver ir_driver = {
130 .probe = usb_serial_probe, 130 .probe = usb_serial_probe,
131 .disconnect = usb_serial_disconnect, 131 .disconnect = usb_serial_disconnect,
132 .id_table = id_table, 132 .id_table = id_table,
133 .no_dynamic_id = 1,
133}; 134};
134 135
135 136
diff --git a/drivers/usb/serial/keyspan.h b/drivers/usb/serial/keyspan.h
index 5cfc13b5e56f..4e6f626f6062 100644
--- a/drivers/usb/serial/keyspan.h
+++ b/drivers/usb/serial/keyspan.h
@@ -525,6 +525,7 @@ static struct usb_driver keyspan_driver = {
525 .probe = usb_serial_probe, 525 .probe = usb_serial_probe,
526 .disconnect = usb_serial_disconnect, 526 .disconnect = usb_serial_disconnect,
527 .id_table = keyspan_ids_combined, 527 .id_table = keyspan_ids_combined,
528 .no_dynamic_id = 1,
528}; 529};
529 530
530/* usb_device_id table for the pre-firmware download keyspan devices */ 531/* usb_device_id table for the pre-firmware download keyspan devices */
diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c
index cd4f48bd83b6..0d1f15268549 100644
--- a/drivers/usb/serial/keyspan_pda.c
+++ b/drivers/usb/serial/keyspan_pda.c
@@ -155,6 +155,7 @@ static struct usb_driver keyspan_pda_driver = {
155 .probe = usb_serial_probe, 155 .probe = usb_serial_probe,
156 .disconnect = usb_serial_disconnect, 156 .disconnect = usb_serial_disconnect,
157 .id_table = id_table_combined, 157 .id_table = id_table_combined,
158 .no_dynamic_id = 1,
158}; 159};
159 160
160static struct usb_device_id id_table_std [] = { 161static struct usb_device_id id_table_std [] = {
diff --git a/drivers/usb/serial/kl5kusb105.c b/drivers/usb/serial/kl5kusb105.c
index a8951c0fd020..bd68638b7c35 100644
--- a/drivers/usb/serial/kl5kusb105.c
+++ b/drivers/usb/serial/kl5kusb105.c
@@ -121,6 +121,7 @@ static struct usb_driver kl5kusb105d_driver = {
121 .probe = usb_serial_probe, 121 .probe = usb_serial_probe,
122 .disconnect = usb_serial_disconnect, 122 .disconnect = usb_serial_disconnect,
123 .id_table = id_table, 123 .id_table = id_table,
124 .no_dynamic_id = 1,
124}; 125};
125 126
126static struct usb_serial_driver kl5kusb105d_device = { 127static struct usb_serial_driver kl5kusb105d_device = {
diff --git a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c
index 9456dd9dd136..4c853afea385 100644
--- a/drivers/usb/serial/kobil_sct.c
+++ b/drivers/usb/serial/kobil_sct.c
@@ -102,6 +102,7 @@ static struct usb_driver kobil_driver = {
102 .probe = usb_serial_probe, 102 .probe = usb_serial_probe,
103 .disconnect = usb_serial_disconnect, 103 .disconnect = usb_serial_disconnect,
104 .id_table = id_table, 104 .id_table = id_table,
105 .no_dynamic_id = 1,
105}; 106};
106 107
107 108
diff --git a/drivers/usb/serial/mct_u232.c b/drivers/usb/serial/mct_u232.c
index ca5dbadb9b7e..b0415e7542c4 100644
--- a/drivers/usb/serial/mct_u232.c
+++ b/drivers/usb/serial/mct_u232.c
@@ -130,6 +130,7 @@ static struct usb_driver mct_u232_driver = {
130 .probe = usb_serial_probe, 130 .probe = usb_serial_probe,
131 .disconnect = usb_serial_disconnect, 131 .disconnect = usb_serial_disconnect,
132 .id_table = id_table_combined, 132 .id_table = id_table_combined,
133 .no_dynamic_id = 1,
133}; 134};
134 135
135static struct usb_serial_driver mct_u232_device = { 136static struct usb_serial_driver mct_u232_device = {
diff --git a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c
index 3caf97072ac0..b595befb24cf 100644
--- a/drivers/usb/serial/omninet.c
+++ b/drivers/usb/serial/omninet.c
@@ -85,6 +85,7 @@ static struct usb_driver omninet_driver = {
85 .probe = usb_serial_probe, 85 .probe = usb_serial_probe,
86 .disconnect = usb_serial_disconnect, 86 .disconnect = usb_serial_disconnect,
87 .id_table = id_table, 87 .id_table = id_table,
88 .no_dynamic_id = 1,
88}; 89};
89 90
90 91
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index 7716000045b7..4ee657eaaa0b 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -100,6 +100,7 @@ static struct usb_driver option_driver = {
100 .probe = usb_serial_probe, 100 .probe = usb_serial_probe,
101 .disconnect = usb_serial_disconnect, 101 .disconnect = usb_serial_disconnect,
102 .id_table = option_ids, 102 .id_table = option_ids,
103 .no_dynamic_id = 1,
103}; 104};
104 105
105/* The card has three separate interfaces, wich the serial driver 106/* The card has three separate interfaces, wich the serial driver
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
index 41a45a5025b2..e302a320444c 100644
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -87,6 +87,7 @@ static struct usb_driver pl2303_driver = {
87 .probe = usb_serial_probe, 87 .probe = usb_serial_probe,
88 .disconnect = usb_serial_disconnect, 88 .disconnect = usb_serial_disconnect,
89 .id_table = id_table, 89 .id_table = id_table,
90 .no_dynamic_id = 1,
90}; 91};
91 92
92#define SET_LINE_REQUEST_TYPE 0x21 93#define SET_LINE_REQUEST_TYPE 0x21
diff --git a/drivers/usb/serial/safe_serial.c b/drivers/usb/serial/safe_serial.c
index c22bdc0c4dfd..f8241c152043 100644
--- a/drivers/usb/serial/safe_serial.c
+++ b/drivers/usb/serial/safe_serial.c
@@ -165,6 +165,7 @@ static struct usb_driver safe_driver = {
165 .probe = usb_serial_probe, 165 .probe = usb_serial_probe,
166 .disconnect = usb_serial_disconnect, 166 .disconnect = usb_serial_disconnect,
167 .id_table = id_table, 167 .id_table = id_table,
168 .no_dynamic_id = 1,
168}; 169};
169 170
170static __u16 crc10_table[256] = { 171static __u16 crc10_table[256] = {
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 205dbf7201da..17a1f09483bd 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -253,6 +253,7 @@ static struct usb_driver ti_usb_driver = {
253 .probe = usb_serial_probe, 253 .probe = usb_serial_probe,
254 .disconnect = usb_serial_disconnect, 254 .disconnect = usb_serial_disconnect,
255 .id_table = ti_id_table_combined, 255 .id_table = ti_id_table_combined,
256 .no_dynamic_id = 1,
256}; 257};
257 258
258static struct usb_serial_driver ti_1port_device = { 259static struct usb_serial_driver ti_1port_device = {
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
index 0c4881d18cd5..2ac37b52485a 100644
--- a/drivers/usb/serial/usb-serial.c
+++ b/drivers/usb/serial/usb-serial.c
@@ -46,6 +46,7 @@ static struct usb_driver usb_serial_driver = {
46 .name = "usbserial", 46 .name = "usbserial",
47 .probe = usb_serial_probe, 47 .probe = usb_serial_probe,
48 .disconnect = usb_serial_disconnect, 48 .disconnect = usb_serial_disconnect,
49 .no_dynamic_id = 1,
49}; 50};
50 51
51/* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead 52/* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead
diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c
index a473c1c34559..2973f5564c06 100644
--- a/drivers/usb/serial/visor.c
+++ b/drivers/usb/serial/visor.c
@@ -178,6 +178,7 @@ static struct usb_driver visor_driver = {
178 .probe = usb_serial_probe, 178 .probe = usb_serial_probe,
179 .disconnect = usb_serial_disconnect, 179 .disconnect = usb_serial_disconnect,
180 .id_table = id_table_combined, 180 .id_table = id_table_combined,
181 .no_dynamic_id = 1,
181}; 182};
182 183
183/* All of the device info needed for the Handspring Visor, and Palm 4.0 devices */ 184/* All of the device info needed for the Handspring Visor, and Palm 4.0 devices */
diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c
index 18c3183be769..19c6386bb692 100644
--- a/drivers/usb/serial/whiteheat.c
+++ b/drivers/usb/serial/whiteheat.c
@@ -132,6 +132,7 @@ static struct usb_driver whiteheat_driver = {
132 .probe = usb_serial_probe, 132 .probe = usb_serial_probe,
133 .disconnect = usb_serial_disconnect, 133 .disconnect = usb_serial_disconnect,
134 .id_table = id_table_combined, 134 .id_table = id_table_combined,
135 .no_dynamic_id = 1,
135}; 136};
136 137
137/* function prototypes for the Connect Tech WhiteHEAT prerenumeration device */ 138/* function prototypes for the Connect Tech WhiteHEAT prerenumeration device */
diff --git a/include/linux/usb.h b/include/linux/usb.h
index 0dd96ef78c13..8d5829936bc4 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -561,6 +561,8 @@ struct usb_dynids {
561 * @dynids: used internally to hold the list of dynamically added device 561 * @dynids: used internally to hold the list of dynamically added device
562 * ids for this driver. 562 * ids for this driver.
563 * @driver: the driver model core driver structure. 563 * @driver: the driver model core driver structure.
564 * @no_dynamic_id: if set to 1, the USB core will not allow dynamic ids to be
565 * added to this driver by preventing the sysfs file from being created.
564 * 566 *
565 * USB drivers must provide a name, probe() and disconnect() methods, 567 * USB drivers must provide a name, probe() and disconnect() methods,
566 * and an id_table. Other driver fields are optional. 568 * and an id_table. Other driver fields are optional.
@@ -597,6 +599,7 @@ struct usb_driver {
597 599
598 struct usb_dynids dynids; 600 struct usb_dynids dynids;
599 struct device_driver driver; 601 struct device_driver driver;
602 unsigned int no_dynamic_id:1;
600}; 603};
601#define to_usb_driver(d) container_of(d, struct usb_driver, driver) 604#define to_usb_driver(d) container_of(d, struct usb_driver, driver)
602 605