diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2005-11-16 16:41:28 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-01-04 16:48:32 -0500 |
commit | ba9dc657af86d05d2971633e57d1f6f94ed60472 (patch) | |
tree | 2b57fe680536b5a02e9dd3b8f4d1df33d6f65017 | |
parent | 733260ff9c45bd4db60f45d17e8560a4a68dff4d (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>
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); |
121 | exit: | ||
118 | return error; | 122 | return error; |
119 | } | 123 | } |
120 | 124 | ||
125 | static 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 | |||
121 | static void usb_free_dynids(struct usb_driver *usb_drv) | 135 | static 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 | ||
152 | static void usb_remove_newid_file(struct usb_driver *usb_drv) | ||
153 | { | ||
154 | } | ||
155 | |||
138 | static inline void usb_free_dynids(struct usb_driver *usb_drv) | 156 | static 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 | ||
33 | static struct usb_serial_driver airprime_device = { | 34 | static 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 | ||
37 | static int anydata_open(struct usb_serial_port *port, struct file *filp) | 38 | static 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 | ||
77 | static struct usb_serial_driver cp2101_device = { | 78 | static 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 | ||
86 | static struct usb_serial_driver cyberjack_device = { | 87 | static 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 | ||
117 | struct cypress_private { | 118 | struct 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 | ||
115 | static struct usb_serial_driver empeg_device = { | 116 | static 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 | ||
493 | static char *ftdi_chip_name[] = { | 494 | static 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 | ||
47 | static struct usb_serial_driver hp49gp_device = { | 48 | static 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 | ||
162 | static int debug; | 163 | static 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 | ||
160 | static struct usb_device_id id_table_std [] = { | 161 | static 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 | ||
126 | static struct usb_serial_driver kl5kusb105d_device = { | 127 | static 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 | ||
135 | static struct usb_serial_driver mct_u232_device = { | 136 | static 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 | ||
170 | static __u16 crc10_table[256] = { | 171 | static __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 | ||
258 | static struct usb_serial_driver ti_1port_device = { | 259 | static 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 | ||