aboutsummaryrefslogtreecommitdiffstats
path: root/usb
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2005-11-17 17:53:43 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2005-11-17 17:53:43 -0800
commit83af9d4ec9d9dd35d6f24f3f50db513a50a5c83c (patch)
tree4474682f2b6759acaee1366d658d562ef87acf77 /usb
parenta660c1509ae85d386ab886c2627c8bc05933e0f3 (diff)
downloadpatches-83af9d4ec9d9dd35d6f24f3f50db513a50a5c83c.tar.gz
more dynamic id fun
Diffstat (limited to 'usb')
-rw-r--r--usb/usb-dynamic-id-02.patch2
-rw-r--r--usb/usb-dynamic-id-03.patch417
2 files changed, 418 insertions, 1 deletions
diff --git a/usb/usb-dynamic-id-02.patch b/usb/usb-dynamic-id-02.patch
index 30b124b18aa7a3..ee9310d55d613a 100644
--- a/usb/usb-dynamic-id-02.patch
+++ b/usb/usb-dynamic-id-02.patch
@@ -63,7 +63,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+ int fields = 0;
+
+ fields = sscanf(buf, "%x %x", &idVendor, &idProduct);
-+ if (fields < 0)
++ if (fields < 2)
+ return -EINVAL;
+
+ dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
diff --git a/usb/usb-dynamic-id-03.patch b/usb/usb-dynamic-id-03.patch
new file mode 100644
index 00000000000000..7b75e20d8e3a4a
--- /dev/null
+++ b/usb/usb-dynamic-id-03.patch
@@ -0,0 +1,417 @@
+From foo@baz.org Wed Nov 16 13:31:19 2005
+Date: Wed, 16 Nov 2005 13:41:28 -0800
+From: Greg Kroah-Hartman <gregkh@suse.de>
+Subject: 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>
+
+
+---
+ drivers/usb/core/driver.c | 19 +++++++++++++++++++
+ drivers/usb/serial/airprime.c | 1 +
+ drivers/usb/serial/anydata.c | 1 +
+ drivers/usb/serial/belkin_sa.c | 1 +
+ drivers/usb/serial/cp2101.c | 1 +
+ drivers/usb/serial/cyberjack.c | 1 +
+ drivers/usb/serial/cypress_m8.c | 1 +
+ drivers/usb/serial/digi_acceleport.c | 1 +
+ drivers/usb/serial/empeg.c | 1 +
+ drivers/usb/serial/ftdi_sio.c | 1 +
+ drivers/usb/serial/garmin_gps.c | 1 +
+ drivers/usb/serial/generic.c | 1 +
+ drivers/usb/serial/hp4x.c | 1 +
+ drivers/usb/serial/io_edgeport.c | 1 +
+ drivers/usb/serial/io_ti.c | 1 +
+ drivers/usb/serial/ipaq.c | 1 +
+ drivers/usb/serial/ipw.c | 1 +
+ drivers/usb/serial/ir-usb.c | 1 +
+ drivers/usb/serial/keyspan.h | 1 +
+ drivers/usb/serial/keyspan_pda.c | 1 +
+ drivers/usb/serial/kl5kusb105.c | 1 +
+ drivers/usb/serial/kobil_sct.c | 1 +
+ drivers/usb/serial/mct_u232.c | 1 +
+ drivers/usb/serial/omninet.c | 1 +
+ drivers/usb/serial/option.c | 1 +
+ drivers/usb/serial/pl2303.c | 1 +
+ drivers/usb/serial/safe_serial.c | 1 +
+ drivers/usb/serial/ti_usb_3410_5052.c | 1 +
+ drivers/usb/serial/usb-serial.c | 1 +
+ drivers/usb/serial/visor.c | 1 +
+ drivers/usb/serial/whiteheat.c | 1 +
+ include/linux/usb.h | 3 +++
+ 32 files changed, 52 insertions(+)
+
+--- gregkh-2.6.orig/drivers/usb/serial/pl2303.c
++++ gregkh-2.6/drivers/usb/serial/pl2303.c
+@@ -87,6 +87,7 @@ static struct usb_driver pl2303_driver =
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table,
++ .no_dynamic_id = 1,
+ };
+
+ #define SET_LINE_REQUEST_TYPE 0x21
+--- gregkh-2.6.orig/drivers/usb/serial/usb-serial.c
++++ gregkh-2.6/drivers/usb/serial/usb-serial.c
+@@ -46,6 +46,7 @@ static struct usb_driver usb_serial_driv
+ .name = "usbserial",
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
++ .no_dynamic_id = 1,
+ };
+
+ /* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead
+--- gregkh-2.6.orig/drivers/usb/core/driver.c
++++ gregkh-2.6/drivers/usb/core/driver.c
+@@ -112,12 +112,26 @@ static int usb_create_newid_file(struct
+ {
+ int error = 0;
+
++ if (usb_drv->no_dynamic_id)
++ goto exit;
++
+ if (usb_drv->probe != NULL)
+ error = sysfs_create_file(&usb_drv->driver.kobj,
+ &driver_attr_new_id.attr);
++exit:
+ return error;
+ }
+
++static void usb_remove_newid_file(struct usb_driver *usb_drv)
++{
++ if (usb_drv->no_dynamic_id)
++ return;
++
++ if (usb_drv->probe != NULL)
++ sysfs_remove_file(&usb_drv->driver.kobj,
++ &driver_attr_new_id.attr);
++}
++
+ static void usb_free_dynids(struct usb_driver *usb_drv)
+ {
+ struct usb_dynid *dynid, *n;
+@@ -135,6 +149,10 @@ static inline int usb_create_newid_file(
+ return 0;
+ }
+
++static void usb_remove_newid_file(struct usb_driver *usb_drv)
++{
++}
++
+ static inline void usb_free_dynids(struct usb_driver *usb_drv)
+ {
+ }
+@@ -447,6 +465,7 @@ void usb_deregister(struct usb_driver *d
+ pr_info("%s: deregistering driver %s\n", usbcore_name, driver->name);
+
+ usb_lock_all_devices();
++ usb_remove_newid_file(driver);
+ usb_free_dynids(driver);
+ driver_unregister(&driver->driver);
+ usb_unlock_all_devices();
+--- gregkh-2.6.orig/include/linux/usb.h
++++ gregkh-2.6/include/linux/usb.h
+@@ -560,6 +560,8 @@ struct usb_dynids {
+ * @dynids: used internally to hold the list of dynamically added device
+ * ids for this driver.
+ * @driver: the driver model core driver structure.
++ * @no_dynamic_id: if set to 1, the USB core will not allow dynamic ids to be
++ * added to this driver by preventing the sysfs file from being created.
+ *
+ * USB drivers must provide a name, probe() and disconnect() methods,
+ * and an id_table. Other driver fields are optional.
+@@ -596,6 +598,7 @@ struct usb_driver {
+
+ struct usb_dynids dynids;
+ struct device_driver driver;
++ unsigned int no_dynamic_id:1;
+ };
+ #define to_usb_driver(d) container_of(d, struct usb_driver, driver)
+
+--- gregkh-2.6.orig/drivers/usb/serial/airprime.c
++++ gregkh-2.6/drivers/usb/serial/airprime.c
+@@ -28,6 +28,7 @@ static struct usb_driver airprime_driver
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table,
++ .no_dynamic_id = 1,
+ };
+
+ static struct usb_serial_driver airprime_device = {
+--- gregkh-2.6.orig/drivers/usb/serial/anydata.c
++++ gregkh-2.6/drivers/usb/serial/anydata.c
+@@ -32,6 +32,7 @@ static struct usb_driver anydata_driver
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table,
++ .no_dynamic_id = 1,
+ };
+
+ static int anydata_open(struct usb_serial_port *port, struct file *filp)
+--- gregkh-2.6.orig/drivers/usb/serial/belkin_sa.c
++++ gregkh-2.6/drivers/usb/serial/belkin_sa.c
+@@ -118,6 +118,7 @@ static struct usb_driver belkin_driver =
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table_combined,
++ .no_dynamic_id = 1,
+ };
+
+ /* All of the device info needed for the serial converters */
+--- gregkh-2.6.orig/drivers/usb/serial/cp2101.c
++++ gregkh-2.6/drivers/usb/serial/cp2101.c
+@@ -72,6 +72,7 @@ static struct usb_driver cp2101_driver =
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table,
++ .no_dynamic_id = 1,
+ };
+
+ static struct usb_serial_driver cp2101_device = {
+--- gregkh-2.6.orig/drivers/usb/serial/cyberjack.c
++++ gregkh-2.6/drivers/usb/serial/cyberjack.c
+@@ -81,6 +81,7 @@ static struct usb_driver cyberjack_drive
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table,
++ .no_dynamic_id = 1,
+ };
+
+ static struct usb_serial_driver cyberjack_device = {
+--- gregkh-2.6.orig/drivers/usb/serial/cypress_m8.c
++++ gregkh-2.6/drivers/usb/serial/cypress_m8.c
+@@ -112,6 +112,7 @@ static struct usb_driver cypress_driver
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table_combined,
++ .no_dynamic_id = 1,
+ };
+
+ struct cypress_private {
+--- gregkh-2.6.orig/drivers/usb/serial/digi_acceleport.c
++++ gregkh-2.6/drivers/usb/serial/digi_acceleport.c
+@@ -498,6 +498,7 @@ static struct usb_driver digi_driver = {
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table_combined,
++ .no_dynamic_id = 1,
+ };
+
+
+--- gregkh-2.6.orig/drivers/usb/serial/empeg.c
++++ gregkh-2.6/drivers/usb/serial/empeg.c
+@@ -110,6 +110,7 @@ static struct usb_driver empeg_driver =
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table,
++ .no_dynamic_id = 1,
+ };
+
+ static struct usb_serial_driver empeg_device = {
+--- gregkh-2.6.orig/drivers/usb/serial/ftdi_sio.c
++++ gregkh-2.6/drivers/usb/serial/ftdi_sio.c
+@@ -488,6 +488,7 @@ static struct usb_driver ftdi_driver = {
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table_combined,
++ .no_dynamic_id = 1,
+ };
+
+ static char *ftdi_chip_name[] = {
+--- gregkh-2.6.orig/drivers/usb/serial/garmin_gps.c
++++ gregkh-2.6/drivers/usb/serial/garmin_gps.c
+@@ -227,6 +227,7 @@ static struct usb_driver garmin_driver =
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table,
++ .no_dynamic_id = 1,
+ };
+
+
+--- gregkh-2.6.orig/drivers/usb/serial/generic.c
++++ gregkh-2.6/drivers/usb/serial/generic.c
+@@ -73,6 +73,7 @@ static struct usb_driver generic_driver
+ .probe = generic_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = generic_serial_ids,
++ .no_dynamic_id = 1,
+ };
+ #endif
+
+--- gregkh-2.6.orig/drivers/usb/serial/hp4x.c
++++ gregkh-2.6/drivers/usb/serial/hp4x.c
+@@ -42,6 +42,7 @@ static struct usb_driver hp49gp_driver =
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table,
++ .no_dynamic_id = 1,
+ };
+
+ static struct usb_serial_driver hp49gp_device = {
+--- gregkh-2.6.orig/drivers/usb/serial/io_edgeport.c
++++ gregkh-2.6/drivers/usb/serial/io_edgeport.c
+@@ -247,6 +247,7 @@ static struct usb_driver io_driver = {
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table_combined,
++ .no_dynamic_id = 1,
+ };
+
+ /* function prototypes for all of our local functions */
+--- gregkh-2.6.orig/drivers/usb/serial/io_ti.c
++++ gregkh-2.6/drivers/usb/serial/io_ti.c
+@@ -221,6 +221,7 @@ static struct usb_driver io_driver = {
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table_combined,
++ .no_dynamic_id = 1,
+ };
+
+
+--- gregkh-2.6.orig/drivers/usb/serial/ipaq.c
++++ gregkh-2.6/drivers/usb/serial/ipaq.c
+@@ -547,6 +547,7 @@ static struct usb_driver ipaq_driver = {
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = ipaq_id_table,
++ .no_dynamic_id = 1,
+ };
+
+
+--- gregkh-2.6.orig/drivers/usb/serial/ipw.c
++++ gregkh-2.6/drivers/usb/serial/ipw.c
+@@ -158,6 +158,7 @@ static struct usb_driver usb_ipw_driver
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = usb_ipw_ids,
++ .no_dynamic_id = 1,
+ };
+
+ static int debug;
+--- gregkh-2.6.orig/drivers/usb/serial/ir-usb.c
++++ gregkh-2.6/drivers/usb/serial/ir-usb.c
+@@ -130,6 +130,7 @@ static struct usb_driver ir_driver = {
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table,
++ .no_dynamic_id = 1,
+ };
+
+
+--- gregkh-2.6.orig/drivers/usb/serial/keyspan.h
++++ gregkh-2.6/drivers/usb/serial/keyspan.h
+@@ -525,6 +525,7 @@ static struct usb_driver keyspan_driver
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = keyspan_ids_combined,
++ .no_dynamic_id = 1,
+ };
+
+ /* usb_device_id table for the pre-firmware download keyspan devices */
+--- gregkh-2.6.orig/drivers/usb/serial/keyspan_pda.c
++++ gregkh-2.6/drivers/usb/serial/keyspan_pda.c
+@@ -155,6 +155,7 @@ static struct usb_driver keyspan_pda_dri
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table_combined,
++ .no_dynamic_id = 1,
+ };
+
+ static struct usb_device_id id_table_std [] = {
+--- gregkh-2.6.orig/drivers/usb/serial/kl5kusb105.c
++++ gregkh-2.6/drivers/usb/serial/kl5kusb105.c
+@@ -121,6 +121,7 @@ static struct usb_driver kl5kusb105d_dri
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table,
++ .no_dynamic_id = 1,
+ };
+
+ static struct usb_serial_driver kl5kusb105d_device = {
+--- gregkh-2.6.orig/drivers/usb/serial/kobil_sct.c
++++ gregkh-2.6/drivers/usb/serial/kobil_sct.c
+@@ -102,6 +102,7 @@ static struct usb_driver kobil_driver =
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table,
++ .no_dynamic_id = 1,
+ };
+
+
+--- gregkh-2.6.orig/drivers/usb/serial/mct_u232.c
++++ gregkh-2.6/drivers/usb/serial/mct_u232.c
+@@ -130,6 +130,7 @@ static struct usb_driver mct_u232_driver
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table_combined,
++ .no_dynamic_id = 1,
+ };
+
+ static struct usb_serial_driver mct_u232_device = {
+--- gregkh-2.6.orig/drivers/usb/serial/omninet.c
++++ gregkh-2.6/drivers/usb/serial/omninet.c
+@@ -85,6 +85,7 @@ static struct usb_driver omninet_driver
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table,
++ .no_dynamic_id = 1,
+ };
+
+
+--- gregkh-2.6.orig/drivers/usb/serial/option.c
++++ gregkh-2.6/drivers/usb/serial/option.c
+@@ -100,6 +100,7 @@ static struct usb_driver option_driver =
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = option_ids,
++ .no_dynamic_id = 1,
+ };
+
+ /* The card has three separate interfaces, wich the serial driver
+--- gregkh-2.6.orig/drivers/usb/serial/safe_serial.c
++++ gregkh-2.6/drivers/usb/serial/safe_serial.c
+@@ -165,6 +165,7 @@ static struct usb_driver safe_driver = {
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table,
++ .no_dynamic_id = 1,
+ };
+
+ static __u16 crc10_table[256] = {
+--- gregkh-2.6.orig/drivers/usb/serial/ti_usb_3410_5052.c
++++ gregkh-2.6/drivers/usb/serial/ti_usb_3410_5052.c
+@@ -253,6 +253,7 @@ static struct usb_driver ti_usb_driver =
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = ti_id_table_combined,
++ .no_dynamic_id = 1,
+ };
+
+ static struct usb_serial_driver ti_1port_device = {
+--- gregkh-2.6.orig/drivers/usb/serial/visor.c
++++ gregkh-2.6/drivers/usb/serial/visor.c
+@@ -178,6 +178,7 @@ static struct usb_driver visor_driver =
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table_combined,
++ .no_dynamic_id = 1,
+ };
+
+ /* All of the device info needed for the Handspring Visor, and Palm 4.0 devices */
+--- gregkh-2.6.orig/drivers/usb/serial/whiteheat.c
++++ gregkh-2.6/drivers/usb/serial/whiteheat.c
+@@ -132,6 +132,7 @@ static struct usb_driver whiteheat_drive
+ .probe = usb_serial_probe,
+ .disconnect = usb_serial_disconnect,
+ .id_table = id_table_combined,
++ .no_dynamic_id = 1,
+ };
+
+ /* function prototypes for the Connect Tech WhiteHEAT prerenumeration device */