diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2005-11-17 17:53:43 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2005-11-17 17:53:43 -0800 |
commit | 83af9d4ec9d9dd35d6f24f3f50db513a50a5c83c (patch) | |
tree | 4474682f2b6759acaee1366d658d562ef87acf77 /usb | |
parent | a660c1509ae85d386ab886c2627c8bc05933e0f3 (diff) | |
download | patches-83af9d4ec9d9dd35d6f24f3f50db513a50a5c83c.tar.gz |
more dynamic id fun
Diffstat (limited to 'usb')
-rw-r--r-- | usb/usb-dynamic-id-02.patch | 2 | ||||
-rw-r--r-- | usb/usb-dynamic-id-03.patch | 417 |
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 */ |