diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2005-12-13 11:48:08 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2005-12-13 11:48:08 -0800 |
commit | eff9e116197faa36249e2d68a76342cd380288b1 (patch) | |
tree | 9a1485f50422a07df2767fb672b2dafed7456865 /usb | |
parent | 8293af088e41cf8106a2e747b4ed4479858699b5 (diff) | |
download | patches-eff9e116197faa36249e2d68a76342cd380288b1.tar.gz |
usb and pci patches added
Diffstat (limited to 'usb')
-rw-r--r-- | usb/ftdi_sio-new-ids-for-teratronik-devices.patch | 55 | ||||
-rw-r--r-- | usb/isp116x-hcd.c-removed-unused-variable.patch | 37 | ||||
-rw-r--r-- | usb/usb-add-driver-for-ati-philips-usb-rf-remotes.patch | 534 | ||||
-rw-r--r-- | usb/usb-remove-unneeded-kmalloc-return-value-casts.patch | 93 | ||||
-rw-r--r-- | usb/usb-support-for-posiflex-pp-7000-retail-printer-in-linux.patch | 44 | ||||
-rw-r--r-- | usb/usb-use-array_size-macro.patch | 265 | ||||
-rw-r--r-- | usb/usbcore-fix-local-variable-clash.patch | 35 |
7 files changed, 1063 insertions, 0 deletions
diff --git a/usb/ftdi_sio-new-ids-for-teratronik-devices.patch b/usb/ftdi_sio-new-ids-for-teratronik-devices.patch new file mode 100644 index 0000000000000..0dadf63712f79 --- /dev/null +++ b/usb/ftdi_sio-new-ids-for-teratronik-devices.patch @@ -0,0 +1,55 @@ +From ian.abbott@mev.co.uk Tue Dec 13 08:23:07 2005 +Message-ID: <439EF467.1090506@mev.co.uk> +Date: Tue, 13 Dec 2005 16:18:47 +0000 +From: Ian Abbott <abbotti@mev.co.uk> +Cc: Greg KH <greg@kroah.com> +Subject: ftdi_sio: new IDs for Teratronik devices + +From: Ian Abbott <abbotti@mev.co.uk> + +This patch adds vendor and product IDs to the ftdi_sio driver's device +ID table for two devices from teratronik.de. The device IDs were +submitted by O. Wölfelschneider of Teratronik Elektronische Systeme +GmbH. + +The charset of the patch is latin-1, same as the original files. + +Please apply, thanks! (I've tried to avoid a clash with Andrew Morton's +patch to add support for Posiflex PP-7700 printer to the same driver.) + +Signed-off-by: Ian Abbott <abbotti@mev.co.uk> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + + +--- + drivers/usb/serial/ftdi_sio.c | 2 ++ + drivers/usb/serial/ftdi_sio.h | 7 +++++++ + 2 files changed, 9 insertions(+) + +--- gregkh-2.6.orig/drivers/usb/serial/ftdi_sio.c ++++ gregkh-2.6/drivers/usb/serial/ftdi_sio.c +@@ -471,6 +471,8 @@ static struct usb_device_id id_table_com + { USB_DEVICE(FTDI_VID, FTDI_ACTIVE_ROBOTS_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_MHAM_Y6_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_MHAM_Y8_PID) }, ++ { USB_DEVICE(FTDI_VID, FTDI_TERATRONIK_VCP_PID) }, ++ { USB_DEVICE(FTDI_VID, FTDI_TERATRONIK_D2XX_PID) }, + { USB_DEVICE(EVOLUTION_VID, EVOLUTION_ER1_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ARTEMIS_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16_PID) }, +--- gregkh-2.6.orig/drivers/usb/serial/ftdi_sio.h ++++ gregkh-2.6/drivers/usb/serial/ftdi_sio.h +@@ -343,6 +343,13 @@ + #define XSENS_CONVERTER_7_PID 0xD38F + + /* ++ * Teratronik product ids. ++ * Submitted by O. Wölfelschneider. ++ */ ++#define FTDI_TERATRONIK_VCP_PID 0xEC88 /* Teratronik device (preferring VCP driver on windows) */ ++#define FTDI_TERATRONIK_D2XX_PID 0xEC89 /* Teratronik device (preferring D2XX driver on windows) */ ++ ++/* + * Evolution Robotics products (http://www.evolution.com/). + * Submitted by Shawn M. Lavelle. + */ diff --git a/usb/isp116x-hcd.c-removed-unused-variable.patch b/usb/isp116x-hcd.c-removed-unused-variable.patch new file mode 100644 index 0000000000000..c990eaf3fa3bc --- /dev/null +++ b/usb/isp116x-hcd.c-removed-unused-variable.patch @@ -0,0 +1,37 @@ +From ok@artecdesign.ee Tue Dec 13 05:34:03 2005 +Date: Tue, 13 Dec 2005 15:30:20 +0200 (EET) +From: Olav Kongas <ok@artecdesign.ee> +To: Greg KH <greg@kroah.com> +cc: <daniel.marjamaki@comhem.se> +Subject: isp116x-hcd.c: Removed unused variable +Message-ID: <Pine.LNX.4.63.0512131524330.31176@pcy.artec.ee> + +From: Daniel Marjamäki <daniel.marjamaki@comhem.se> + +Removed unused variable + +Signed-off-by: Daniel Marjamäki <daniel.marjamaki@comhem.se> +Signed-off-by: Olav Kongas <ok@artecdesign.ee> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + + +--- + drivers/usb/host/isp116x-hcd.c | 2 -- + 1 file changed, 2 deletions(-) + +--- gregkh-2.6.orig/drivers/usb/host/isp116x-hcd.c ++++ gregkh-2.6/drivers/usb/host/isp116x-hcd.c +@@ -154,13 +154,11 @@ static void pack_fifo(struct isp116x *is + struct ptd *ptd; + int buflen = isp116x->atl_last_dir == PTD_DIR_IN + ? isp116x->atl_bufshrt : isp116x->atl_buflen; +- int ptd_count = 0; + + isp116x_write_reg16(isp116x, HCuPINT, HCuPINT_AIIEOT); + isp116x_write_reg16(isp116x, HCXFERCTR, buflen); + isp116x_write_addr(isp116x, HCATLPORT | ISP116x_WRITE_OFFSET); + for (ep = isp116x->atl_active; ep; ep = ep->active) { +- ++ptd_count; + ptd = &ep->ptd; + dump_ptd(ptd); + dump_ptd_out_data(ptd, ep->data); diff --git a/usb/usb-add-driver-for-ati-philips-usb-rf-remotes.patch b/usb/usb-add-driver-for-ati-philips-usb-rf-remotes.patch new file mode 100644 index 0000000000000..fc6dc7b2209ae --- /dev/null +++ b/usb/usb-add-driver-for-ati-philips-usb-rf-remotes.patch @@ -0,0 +1,534 @@ +From syrjala@kotilo.saunalahti.fi Sat Dec 10 10:34:44 2005 +Date: Sat, 10 Dec 2005 20:30:54 +0200 +From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= <syrjala@sci.fi> +Cc: greg@kroah.com +Subject: USB: add driver for ATI/Philips USB RF remotes +Message-ID: <20051210183054.GA19050@sci.fi> +Content-Disposition: inline + +Summary: Driver for ATI/Philips USB RF remotes + +This is a new input driver for ATI/Philips USB RF remotes (eg. ATI +Remote Wonder II). + +Signed-off-by: Ville Syrjälä <syrjala@sci.fi> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> +--- + drivers/usb/input/Kconfig | 14 + + drivers/usb/input/Makefile | 1 + drivers/usb/input/ati_remote2.c | 477 ++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 492 insertions(+) + +--- /dev/null ++++ gregkh-2.6/drivers/usb/input/ati_remote2.c +@@ -0,0 +1,477 @@ ++/* ++ * ati_remote2 - ATI/Philips USB RF remote driver ++ * ++ * Copyright (C) 2005 Ville Syrjala <syrjala@sci.fi> ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 ++ * as published by the Free Software Foundation. ++ */ ++ ++#include <linux/usb_input.h> ++ ++#define DRIVER_DESC "ATI/Philips USB RF remote driver" ++#define DRIVER_VERSION "0.1" ++ ++MODULE_DESCRIPTION(DRIVER_DESC); ++MODULE_VERSION(DRIVER_VERSION); ++MODULE_AUTHOR("Ville Syrjala <syrjala@sci.fi>"); ++MODULE_LICENSE("GPL"); ++ ++static unsigned int mode_mask = 0x1F; ++module_param(mode_mask, uint, 0644); ++MODULE_PARM_DESC(mode_mask, "Bitmask of modes to accept <4:PC><3:AUX4><2:AUX3><1:AUX2><0:AUX1>"); ++ ++static struct usb_device_id ati_remote2_id_table[] = { ++ { USB_DEVICE(0x0471, 0x0602) }, /* ATI Remote Wonder II */ ++ { } ++}; ++MODULE_DEVICE_TABLE(usb, ati_remote2_id_table); ++ ++static struct { ++ int hw_code; ++ int key_code; ++} ati_remote2_key_table[] = { ++ { 0x00, KEY_0 }, ++ { 0x01, KEY_1 }, ++ { 0x02, KEY_2 }, ++ { 0x03, KEY_3 }, ++ { 0x04, KEY_4 }, ++ { 0x05, KEY_5 }, ++ { 0x06, KEY_6 }, ++ { 0x07, KEY_7 }, ++ { 0x08, KEY_8 }, ++ { 0x09, KEY_9 }, ++ { 0x0c, KEY_POWER }, ++ { 0x0d, KEY_MUTE }, ++ { 0x10, KEY_VOLUMEUP }, ++ { 0x11, KEY_VOLUMEDOWN }, ++ { 0x20, KEY_CHANNELUP }, ++ { 0x21, KEY_CHANNELDOWN }, ++ { 0x28, KEY_FORWARD }, ++ { 0x29, KEY_REWIND }, ++ { 0x2c, KEY_PLAY }, ++ { 0x30, KEY_PAUSE }, ++ { 0x31, KEY_STOP }, ++ { 0x37, KEY_RECORD }, ++ { 0x38, KEY_DVD }, ++ { 0x39, KEY_TV }, ++ { 0x54, KEY_MENU }, ++ { 0x58, KEY_UP }, ++ { 0x59, KEY_DOWN }, ++ { 0x5a, KEY_LEFT }, ++ { 0x5b, KEY_RIGHT }, ++ { 0x5c, KEY_OK }, ++ { 0x78, KEY_A }, ++ { 0x79, KEY_B }, ++ { 0x7a, KEY_C }, ++ { 0x7b, KEY_D }, ++ { 0x7c, KEY_E }, ++ { 0x7d, KEY_F }, ++ { 0x82, KEY_ENTER }, ++ { 0x8e, KEY_VENDOR }, ++ { 0x96, KEY_COFFEE }, ++ { 0xa9, BTN_LEFT }, ++ { 0xaa, BTN_RIGHT }, ++ { 0xbe, KEY_QUESTION }, ++ { 0xd5, KEY_FRONT }, ++ { 0xd0, KEY_EDIT }, ++ { 0xf9, KEY_INFO }, ++ { (0x00 << 8) | 0x3f, KEY_PROG1 }, ++ { (0x01 << 8) | 0x3f, KEY_PROG2 }, ++ { (0x02 << 8) | 0x3f, KEY_PROG3 }, ++ { (0x03 << 8) | 0x3f, KEY_PROG4 }, ++ { (0x04 << 8) | 0x3f, KEY_PC }, ++ { 0, KEY_RESERVED } ++}; ++ ++struct ati_remote2 { ++ struct input_dev *idev; ++ struct usb_device *udev; ++ ++ struct usb_interface *intf[2]; ++ struct usb_endpoint_descriptor *ep[2]; ++ struct urb *urb[2]; ++ void *buf[2]; ++ dma_addr_t buf_dma[2]; ++ ++ unsigned long jiffies; ++ int mode; ++ ++ char name[64]; ++ char phys[64]; ++}; ++ ++static int ati_remote2_probe(struct usb_interface *interface, const struct usb_device_id *id); ++static void ati_remote2_disconnect(struct usb_interface *interface); ++ ++static struct usb_driver ati_remote2_driver = { ++ .name = "ati_remote2", ++ .probe = ati_remote2_probe, ++ .disconnect = ati_remote2_disconnect, ++ .id_table = ati_remote2_id_table, ++}; ++ ++static int ati_remote2_open(struct input_dev *idev) ++{ ++ struct ati_remote2 *ar2 = idev->private; ++ int r; ++ ++ r = usb_submit_urb(ar2->urb[0], GFP_KERNEL); ++ if (r) { ++ dev_err(&ar2->intf[0]->dev, ++ "%s: usb_submit_urb() = %d\n", __FUNCTION__, r); ++ return r; ++ } ++ r = usb_submit_urb(ar2->urb[1], GFP_KERNEL); ++ if (r) { ++ usb_kill_urb(ar2->urb[0]); ++ dev_err(&ar2->intf[1]->dev, ++ "%s: usb_submit_urb() = %d\n", __FUNCTION__, r); ++ return r; ++ } ++ ++ return 0; ++} ++ ++static void ati_remote2_close(struct input_dev *idev) ++{ ++ struct ati_remote2 *ar2 = idev->private; ++ ++ usb_kill_urb(ar2->urb[0]); ++ usb_kill_urb(ar2->urb[1]); ++} ++ ++static void ati_remote2_input_mouse(struct ati_remote2 *ar2, struct pt_regs *regs) ++{ ++ struct input_dev *idev = ar2->idev; ++ u8 *data = ar2->buf[0]; ++ ++ if (data[0] > 4) { ++ dev_err(&ar2->intf[0]->dev, ++ "Unknown mode byte (%02x %02x %02x %02x)\n", ++ data[3], data[2], data[1], data[0]); ++ return; ++ } ++ ++ if (!((1 << data[0]) & mode_mask)) ++ return; ++ ++ input_regs(idev, regs); ++ input_event(idev, EV_REL, REL_X, (s8) data[1]); ++ input_event(idev, EV_REL, REL_Y, (s8) data[2]); ++ input_sync(idev); ++} ++ ++static int ati_remote2_lookup(unsigned int hw_code) ++{ ++ int i; ++ ++ for (i = 0; ati_remote2_key_table[i].key_code != KEY_RESERVED; i++) ++ if (ati_remote2_key_table[i].hw_code == hw_code) ++ return i; ++ ++ return -1; ++} ++ ++static void ati_remote2_input_key(struct ati_remote2 *ar2, struct pt_regs *regs) ++{ ++ struct input_dev *idev = ar2->idev; ++ u8 *data = ar2->buf[1]; ++ int hw_code, index; ++ ++ if (data[0] > 4) { ++ dev_err(&ar2->intf[1]->dev, ++ "Unknown mode byte (%02x %02x %02x %02x)\n", ++ data[3], data[2], data[1], data[0]); ++ return; ++ } ++ ++ hw_code = data[2]; ++ /* ++ * Mode keys (AUX1-AUX4, PC) all generate the same code byte. ++ * Use the mode byte to figure out which one was pressed. ++ */ ++ if (hw_code == 0x3f) { ++ /* ++ * For some incomprehensible reason the mouse pad generates ++ * events which look identical to the events from the last ++ * pressed mode key. Naturally we don't want to generate key ++ * events for the mouse pad so we filter out any subsequent ++ * events from the same mode key. ++ */ ++ if (ar2->mode == data[0]) ++ return; ++ ++ if (data[1] == 0) ++ ar2->mode = data[0]; ++ ++ hw_code |= data[0] << 8; ++ } ++ ++ if (!((1 << data[0]) & mode_mask)) ++ return; ++ ++ index = ati_remote2_lookup(hw_code); ++ if (index < 0) { ++ dev_err(&ar2->intf[1]->dev, ++ "Unknown code byte (%02x %02x %02x %02x)\n", ++ data[3], data[2], data[1], data[0]); ++ return; ++ } ++ ++ switch (data[1]) { ++ case 0: /* release */ ++ break; ++ case 1: /* press */ ++ ar2->jiffies = jiffies + msecs_to_jiffies(idev->rep[REP_DELAY]); ++ break; ++ case 2: /* repeat */ ++ ++ /* No repeat for mouse buttons. */ ++ if (ati_remote2_key_table[index].key_code == BTN_LEFT || ++ ati_remote2_key_table[index].key_code == BTN_RIGHT) ++ return; ++ ++ if (!time_after_eq(jiffies, ar2->jiffies)) ++ return; ++ ++ ar2->jiffies = jiffies + msecs_to_jiffies(idev->rep[REP_PERIOD]); ++ break; ++ default: ++ dev_err(&ar2->intf[1]->dev, ++ "Unknown state byte (%02x %02x %02x %02x)\n", ++ data[3], data[2], data[1], data[0]); ++ return; ++ } ++ ++ input_regs(idev, regs); ++ input_event(idev, EV_KEY, ati_remote2_key_table[index].key_code, data[1]); ++ input_sync(idev); ++} ++ ++static void ati_remote2_complete_mouse(struct urb *urb, struct pt_regs *regs) ++{ ++ struct ati_remote2 *ar2 = urb->context; ++ int r; ++ ++ switch (urb->status) { ++ case 0: ++ ati_remote2_input_mouse(ar2, regs); ++ break; ++ case -ENOENT: ++ case -EILSEQ: ++ case -ECONNRESET: ++ case -ESHUTDOWN: ++ dev_dbg(&ar2->intf[0]->dev, ++ "%s(): urb status = %d\n", __FUNCTION__, urb->status); ++ return; ++ default: ++ dev_err(&ar2->intf[0]->dev, ++ "%s(): urb status = %d\n", __FUNCTION__, urb->status); ++ } ++ ++ r = usb_submit_urb(urb, GFP_ATOMIC); ++ if (r) ++ dev_err(&ar2->intf[0]->dev, ++ "%s(): usb_submit_urb() = %d\n", __FUNCTION__, r); ++} ++ ++static void ati_remote2_complete_key(struct urb *urb, struct pt_regs *regs) ++{ ++ struct ati_remote2 *ar2 = urb->context; ++ int r; ++ ++ switch (urb->status) { ++ case 0: ++ ati_remote2_input_key(ar2, regs); ++ break; ++ case -ENOENT: ++ case -EILSEQ: ++ case -ECONNRESET: ++ case -ESHUTDOWN: ++ dev_dbg(&ar2->intf[1]->dev, ++ "%s(): urb status = %d\n", __FUNCTION__, urb->status); ++ return; ++ default: ++ dev_err(&ar2->intf[1]->dev, ++ "%s(): urb status = %d\n", __FUNCTION__, urb->status); ++ } ++ ++ r = usb_submit_urb(urb, GFP_ATOMIC); ++ if (r) ++ dev_err(&ar2->intf[1]->dev, ++ "%s(): usb_submit_urb() = %d\n", __FUNCTION__, r); ++} ++ ++static int ati_remote2_input_init(struct ati_remote2 *ar2) ++{ ++ struct input_dev *idev; ++ int i; ++ ++ idev = input_allocate_device(); ++ if (!idev) ++ return -ENOMEM; ++ ++ ar2->idev = idev; ++ idev->private = ar2; ++ ++ idev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_REL); ++ idev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT); ++ idev->relbit[0] = BIT(REL_X) | BIT(REL_Y); ++ for (i = 0; ati_remote2_key_table[i].key_code != KEY_RESERVED; i++) ++ set_bit(ati_remote2_key_table[i].key_code, idev->keybit); ++ ++ idev->rep[REP_DELAY] = 250; ++ idev->rep[REP_PERIOD] = 33; ++ ++ idev->open = ati_remote2_open; ++ idev->close = ati_remote2_close; ++ ++ idev->name = ar2->name; ++ idev->phys = ar2->phys; ++ ++ usb_to_input_id(ar2->udev, &idev->id); ++ idev->cdev.dev = &ar2->udev->dev; ++ ++ i = input_register_device(idev); ++ if (i) ++ input_free_device(idev); ++ ++ return i; ++} ++ ++static int ati_remote2_urb_init(struct ati_remote2 *ar2) ++{ ++ struct usb_device *udev = ar2->udev; ++ int i, pipe, maxp; ++ ++ for (i = 0; i < 2; i++) { ++ ar2->buf[i] = usb_buffer_alloc(udev, 4, GFP_KERNEL, &ar2->buf_dma[i]); ++ if (!ar2->buf[i]) ++ return -ENOMEM; ++ ++ ar2->urb[i] = usb_alloc_urb(0, GFP_KERNEL); ++ if (!ar2->urb[i]) ++ return -ENOMEM; ++ ++ pipe = usb_rcvintpipe(udev, ar2->ep[i]->bEndpointAddress); ++ maxp = usb_maxpacket(udev, pipe, usb_pipeout(pipe)); ++ maxp = maxp > 4 ? 4 : maxp; ++ ++ usb_fill_int_urb(ar2->urb[i], udev, pipe, ar2->buf[i], maxp, ++ i ? ati_remote2_complete_key : ati_remote2_complete_mouse, ++ ar2, ar2->ep[i]->bInterval); ++ ar2->urb[i]->transfer_dma = ar2->buf_dma[i]; ++ ar2->urb[i]->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; ++ } ++ ++ return 0; ++} ++ ++static void ati_remote2_urb_cleanup(struct ati_remote2 *ar2) ++{ ++ int i; ++ ++ for (i = 0; i < 2; i++) { ++ if (ar2->urb[i]) ++ usb_free_urb(ar2->urb[i]); ++ ++ if (ar2->buf[i]) ++ usb_buffer_free(ar2->udev, 4, ar2->buf[i], ar2->buf_dma[i]); ++ } ++} ++ ++static int ati_remote2_probe(struct usb_interface *interface, const struct usb_device_id *id) ++{ ++ struct usb_device *udev = interface_to_usbdev(interface); ++ struct usb_host_interface *alt = interface->cur_altsetting; ++ struct ati_remote2 *ar2; ++ int r; ++ ++ if (alt->desc.bInterfaceNumber) ++ return -ENODEV; ++ ++ ar2 = kzalloc(sizeof (struct ati_remote2), GFP_KERNEL); ++ if (!ar2) ++ return -ENOMEM; ++ ++ ar2->udev = udev; ++ ++ ar2->intf[0] = interface; ++ ar2->ep[0] = &alt->endpoint[0].desc; ++ ++ ar2->intf[1] = usb_ifnum_to_if(udev, 1); ++ r = usb_driver_claim_interface(&ati_remote2_driver, ar2->intf[1], ar2); ++ if (r) ++ goto fail1; ++ alt = ar2->intf[1]->cur_altsetting; ++ ar2->ep[1] = &alt->endpoint[0].desc; ++ ++ r = ati_remote2_urb_init(ar2); ++ if (r) ++ goto fail2; ++ ++ usb_make_path(udev, ar2->phys, sizeof(ar2->phys)); ++ strlcat(ar2->phys, "/input0", sizeof(ar2->phys)); ++ ++ strlcat(ar2->name, "ATI Remote Wonder II", sizeof(ar2->name)); ++ ++ r = ati_remote2_input_init(ar2); ++ if (r) ++ goto fail2; ++ ++ usb_set_intfdata(interface, ar2); ++ ++ return 0; ++ ++ fail2: ++ ati_remote2_urb_cleanup(ar2); ++ ++ usb_driver_release_interface(&ati_remote2_driver, ar2->intf[1]); ++ fail1: ++ kfree(ar2); ++ ++ return r; ++} ++ ++static void ati_remote2_disconnect(struct usb_interface *interface) ++{ ++ struct ati_remote2 *ar2; ++ struct usb_host_interface *alt = interface->cur_altsetting; ++ ++ if (alt->desc.bInterfaceNumber) ++ return; ++ ++ ar2 = usb_get_intfdata(interface); ++ usb_set_intfdata(interface, NULL); ++ ++ input_unregister_device(ar2->idev); ++ ++ ati_remote2_urb_cleanup(ar2); ++ ++ usb_driver_release_interface(&ati_remote2_driver, ar2->intf[1]); ++ ++ kfree(ar2); ++} ++ ++static int __init ati_remote2_init(void) ++{ ++ int r; ++ ++ r = usb_register(&ati_remote2_driver); ++ if (r) ++ printk(KERN_ERR "ati_remote2: usb_register() = %d\n", r); ++ else ++ printk(KERN_INFO "ati_remote2: " DRIVER_DESC " " DRIVER_VERSION "\n"); ++ ++ return r; ++} ++ ++static void __exit ati_remote2_exit(void) ++{ ++ usb_deregister(&ati_remote2_driver); ++} ++ ++module_init(ati_remote2_init); ++module_exit(ati_remote2_exit); +--- gregkh-2.6.orig/drivers/usb/input/Kconfig ++++ gregkh-2.6/drivers/usb/input/Kconfig +@@ -273,6 +273,20 @@ config USB_ATI_REMOTE + To compile this driver as a module, choose M here: the module will be + called ati_remote. + ++config USB_ATI_REMOTE2 ++ tristate "ATI / Philips USB RF remote control" ++ depends on USB && INPUT ++ ---help--- ++ Say Y here if you want to use an ATI or Philips USB RF remote control. ++ These are RF remotes with USB receivers. ++ ATI Remote Wonder II comes with some ATI's All-In-Wonder video cards ++ and is also available as a separate product. ++ This driver provides mouse pointer, left and right mouse buttons, ++ and maps all the other remote buttons to keypress events. ++ ++ To compile this driver as a module, choose M here: the module will be ++ called ati_remote2. ++ + config USB_KEYSPAN_REMOTE + tristate "Keyspan DMR USB remote control (EXPERIMENTAL)" + depends on USB && INPUT && EXPERIMENTAL +--- gregkh-2.6.orig/drivers/usb/input/Makefile ++++ gregkh-2.6/drivers/usb/input/Makefile +@@ -28,6 +28,7 @@ endif + + obj-$(CONFIG_USB_AIPTEK) += aiptek.o + obj-$(CONFIG_USB_ATI_REMOTE) += ati_remote.o ++obj-$(CONFIG_USB_ATI_REMOTE2) += ati_remote2.o + obj-$(CONFIG_USB_HID) += usbhid.o + obj-$(CONFIG_USB_KBD) += usbkbd.o + obj-$(CONFIG_USB_KBTAB) += kbtab.o diff --git a/usb/usb-remove-unneeded-kmalloc-return-value-casts.patch b/usb/usb-remove-unneeded-kmalloc-return-value-casts.patch new file mode 100644 index 0000000000000..02e6da4fee94f --- /dev/null +++ b/usb/usb-remove-unneeded-kmalloc-return-value-casts.patch @@ -0,0 +1,93 @@ +From jesper.juhl@gmail.com Sun Dec 11 11:35:33 2005 +From: Jesper Juhl <jesper.juhl@gmail.com> +To: Linux Kernel Mailing List <linux-kernel@vger.kernel.org> +Subject: USB: Remove unneeded kmalloc() return value casts +Date: Sun, 11 Dec 2005 20:34:02 +0100 +Cc: "Greg Kroah-Hartman" <gregkh@suse.de>, wolfgang@iksw-muees.de, Luca Risolia <luca.risolia@studio.unibo.it>, Cesar Miquel <miquel@df.uba.ar>, Andrew Morton <akpm@osdl.org>, Jesper Juhl <jesper.juhl@gmail.com> +Content-Disposition: inline +Message-Id: <200512112034.02734.jesper.juhl@gmail.com> + + +Remove kmalloc() return value casts that we don't need from +drivers/usb/* + + +Signed-off-by: Jesper Juhl <jesper.juhl@gmail.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> +--- + drivers/usb/media/usbvideo.c | 2 +- + drivers/usb/media/w9968cf.c | 4 ++-- + drivers/usb/misc/auerswald.c | 4 ++-- + drivers/usb/misc/rio500.c | 4 ++-- + 4 files changed, 7 insertions(+), 7 deletions(-) + +--- gregkh-2.6.orig/drivers/usb/misc/auerswald.c ++++ gregkh-2.6/drivers/usb/misc/auerswald.c +@@ -767,7 +767,7 @@ static int auerbuf_setup (pauerbufctl_t + memset (bep, 0, sizeof (auerbuf_t)); + bep->list = bcp; + INIT_LIST_HEAD (&bep->buff_list); +- bep->bufp = (char *) kmalloc (bufsize, GFP_KERNEL); ++ bep->bufp = kmalloc (bufsize, GFP_KERNEL); + if (!bep->bufp) + goto bl_fail; + bep->dr = (struct usb_ctrlrequest *) kmalloc (sizeof (struct usb_ctrlrequest), GFP_KERNEL); +@@ -1123,7 +1123,7 @@ static int auerswald_int_open (pauerswal + } + } + if (!cp->intbufp) { +- cp->intbufp = (char *) kmalloc (irqsize, GFP_KERNEL); ++ cp->intbufp = kmalloc (irqsize, GFP_KERNEL); + if (!cp->intbufp) { + ret = -ENOMEM; + goto intoend; +--- gregkh-2.6.orig/drivers/usb/misc/rio500.c ++++ gregkh-2.6/drivers/usb/misc/rio500.c +@@ -465,14 +465,14 @@ static int probe_rio(struct usb_interfac + + rio->rio_dev = dev; + +- if (!(rio->obuf = (char *) kmalloc(OBUF_SIZE, GFP_KERNEL))) { ++ if (!(rio->obuf = kmalloc(OBUF_SIZE, GFP_KERNEL))) { + err("probe_rio: Not enough memory for the output buffer"); + usb_deregister_dev(intf, &usb_rio_class); + return -ENOMEM; + } + dbg("probe_rio: obuf address:%p", rio->obuf); + +- if (!(rio->ibuf = (char *) kmalloc(IBUF_SIZE, GFP_KERNEL))) { ++ if (!(rio->ibuf = kmalloc(IBUF_SIZE, GFP_KERNEL))) { + err("probe_rio: Not enough memory for the input buffer"); + usb_deregister_dev(intf, &usb_rio_class); + kfree(rio->obuf); +--- gregkh-2.6.orig/drivers/usb/media/usbvideo.c ++++ gregkh-2.6/drivers/usb/media/usbvideo.c +@@ -725,7 +725,7 @@ int usbvideo_register( + /* Allocate user_data separately because of kmalloc's limits */ + if (num_extra > 0) { + up->user_size = num_cams * num_extra; +- up->user_data = (char *) kmalloc(up->user_size, GFP_KERNEL); ++ up->user_data = kmalloc(up->user_size, GFP_KERNEL); + if (up->user_data == NULL) { + err("%s: Failed to allocate user_data (%d. bytes)", + __FUNCTION__, up->user_size); +--- gregkh-2.6.orig/drivers/usb/media/w9968cf.c ++++ gregkh-2.6/drivers/usb/media/w9968cf.c +@@ -3554,7 +3554,7 @@ w9968cf_usb_probe(struct usb_interface* + + + /* Allocate 2 bytes of memory for camera control USB transfers */ +- if (!(cam->control_buffer = (u16*)kmalloc(2, GFP_KERNEL))) { ++ if (!(cam->control_buffer = kmalloc(2, GFP_KERNEL))) { + DBG(1,"Couldn't allocate memory for camera control transfers") + err = -ENOMEM; + goto fail; +@@ -3562,7 +3562,7 @@ w9968cf_usb_probe(struct usb_interface* + memset(cam->control_buffer, 0, 2); + + /* Allocate 8 bytes of memory for USB data transfers to the FSB */ +- if (!(cam->data_buffer = (u16*)kmalloc(8, GFP_KERNEL))) { ++ if (!(cam->data_buffer = kmalloc(8, GFP_KERNEL))) { + DBG(1, "Couldn't allocate memory for data " + "transfers to the FSB") + err = -ENOMEM; diff --git a/usb/usb-support-for-posiflex-pp-7000-retail-printer-in-linux.patch b/usb/usb-support-for-posiflex-pp-7000-retail-printer-in-linux.patch new file mode 100644 index 0000000000000..8942ce4f453e7 --- /dev/null +++ b/usb/usb-support-for-posiflex-pp-7000-retail-printer-in-linux.patch @@ -0,0 +1,44 @@ +From sonic_amiga@rambler.ru Fri Dec 9 01:27:44 2005 +Message-ID: <439924A3.9050800@rambler.ru> +Date: Fri, 09 Dec 2005 09:30:59 +0300 +From: Pavel Fedin <sonic_amiga@rambler.ru> +To: greg@kroah.com +Subject: USB: Support for Posiflex PP-7000 retail printer in Linux + +This little patch adds recognition of Posiflex PP-7000 retail printer to +ftdo_sio module. The printer uses FT232BM bridge programmed with custom +VID/PID. The patch posted to lkml and sf.net was for 2.6.11.1 kernel, +here is one reworked for 2.6.12. + +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/serial/ftdi_sio.c | 1 + + drivers/usb/serial/ftdi_sio.h | 6 ++++++ + 2 files changed, 7 insertions(+) + +--- gregkh-2.6.orig/drivers/usb/serial/ftdi_sio.c ++++ gregkh-2.6/drivers/usb/serial/ftdi_sio.c +@@ -477,6 +477,7 @@ static struct usb_device_id id_table_com + { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16HR_PID) }, + { USB_DEVICE(KOBIL_VID, KOBIL_CONV_B1_PID) }, + { USB_DEVICE(KOBIL_VID, KOBIL_CONV_KAAN_PID) }, ++ { USB_DEVICE(POSIFLEX_VID, POSIFLEX_PP7000_PID) }, + { }, /* Optional parameter entry */ + { } /* Terminating entry */ + }; +--- gregkh-2.6.orig/drivers/usb/serial/ftdi_sio.h ++++ gregkh-2.6/drivers/usb/serial/ftdi_sio.h +@@ -352,6 +352,12 @@ + /* Pyramid Computer GmbH */ + #define FTDI_PYRAMID_PID 0xE6C8 /* Pyramid Appliance Display */ + ++/* ++ * Posiflex inc retail equipment (http://www.posiflex.com.tw) ++ */ ++#define POSIFLEX_VID 0x0d3a /* Vendor ID */ ++#define POSIFLEX_PP7000_PID 0x0300 /* PP-7000II thermal printer */ ++ + /* Commands */ + #define FTDI_SIO_RESET 0 /* Reset the port */ + #define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ diff --git a/usb/usb-use-array_size-macro.patch b/usb/usb-use-array_size-macro.patch new file mode 100644 index 0000000000000..caa397ac948e8 --- /dev/null +++ b/usb/usb-use-array_size-macro.patch @@ -0,0 +1,265 @@ +From kernel-janitors-bounces@lists.osdl.org Sun Dec 11 07:24:02 2005 +Date: Sun, 11 Dec 2005 16:20:08 +0100 +From: Tobias Klauser <tklauser@nuerscht.ch> +To: kernel-janitors@lists.osdl.org +Message-ID: <20051211152007.GA1545@neon.tklauser.home> +Cc: akpm@osdl.org, gregkh@suse.de +Subject: USB: Use ARRAY_SIZE macro + +Use ARRAY_SIZE macro instead of sizeof(x)/sizeof(x[0]) and remove +duplicates of ARRAY_SIZE. Some trailing whitespaces are also removed. + +Patch is compile-tested on i386. + +Signed-off-by: Tobias Klauser <tklauser@nuerscht.ch> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/gadget/dummy_hcd.c | 2 +- + drivers/usb/input/aiptek.c | 4 ++-- + drivers/usb/media/ibmcam.c | 2 +- + drivers/usb/media/sn9c102_core.c | 23 ++++++++++------------- + drivers/usb/media/w9968cf.c | 2 +- + drivers/usb/net/zd1201.c | 8 ++++---- + drivers/usb/serial/io_edgeport.c | 2 +- + drivers/usb/serial/io_edgeport.h | 3 --- + drivers/usb/serial/safe_serial.c | 2 +- + drivers/usb/serial/ti_usb_3410_5052.c | 7 ++----- + drivers/usb/storage/sddr09.c | 4 +--- + 11 files changed, 24 insertions(+), 35 deletions(-) + +--- gregkh-2.6.orig/drivers/usb/gadget/dummy_hcd.c ++++ gregkh-2.6/drivers/usb/gadget/dummy_hcd.c +@@ -138,7 +138,7 @@ static const char *const ep_name [] = { + /* or like sa1100: two fixed function endpoints */ + "ep1out-bulk", "ep2in-bulk", + }; +-#define DUMMY_ENDPOINTS (sizeof(ep_name)/sizeof(char *)) ++#define DUMMY_ENDPOINTS ARRAY_SIZE(ep_name) + + /*-------------------------------------------------------------------------*/ + +--- gregkh-2.6.orig/drivers/usb/input/aiptek.c ++++ gregkh-2.6/drivers/usb/input/aiptek.c +@@ -2093,7 +2093,7 @@ aiptek_probe(struct usb_interface *intf, + /* Programming the tablet macro keys needs to be done with a for loop + * as the keycodes are discontiguous. + */ +- for (i = 0; i < sizeof(macroKeyEvents) / sizeof(macroKeyEvents[0]); ++i) ++ for (i = 0; i < ARRAY_SIZE(macroKeyEvents); ++i) + set_bit(macroKeyEvents[i], inputdev->keybit); + + /* +@@ -2135,7 +2135,7 @@ aiptek_probe(struct usb_interface *intf, + * not an error :-) + */ + +- for (i = 0; i < sizeof(speeds) / sizeof(speeds[0]); ++i) { ++ for (i = 0; i < ARRAY_SIZE(speeds); ++i) { + aiptek->curSetting.programmableDelay = speeds[i]; + (void)aiptek_program_tablet(aiptek); + if (aiptek->inputdev->absmax[ABS_X] > 0) { +--- gregkh-2.6.orig/drivers/usb/media/ibmcam.c ++++ gregkh-2.6/drivers/usb/media/ibmcam.c +@@ -3457,7 +3457,7 @@ static void ibmcam_model3_setup_after_vi + if(init_model3_input) { + if (debug > 0) + info("Setting input to RCA."); +- for (i=0; i < (sizeof(initData)/sizeof(initData[0])); i++) { ++ for (i=0; i < ARRAY_SIZE(initData); i++) { + ibmcam_veio(uvd, initData[i].req, initData[i].value, initData[i].index); + } + } +--- gregkh-2.6.orig/drivers/usb/media/sn9c102_core.c ++++ gregkh-2.6/drivers/usb/media/sn9c102_core.c +@@ -1316,7 +1316,7 @@ static int sn9c102_init(struct sn9c102_d + struct v4l2_control ctrl; + struct v4l2_queryctrl *qctrl; + struct v4l2_rect* rect; +- u8 i = 0, n = 0; ++ u8 i = 0; + int err = 0; + + if (!(cam->state & DEV_INITIALIZED)) { +@@ -1352,7 +1352,7 @@ static int sn9c102_init(struct sn9c102_d + return err; + + if (s->pix_format.pixelformat == V4L2_PIX_FMT_SN9C10X) +- DBG(3, "Compressed video format is active, quality %d", ++ DBG(3, "Compressed video format is active, quality %d", + cam->compression.quality) + else + DBG(3, "Uncompressed video format is active") +@@ -1364,9 +1364,8 @@ static int sn9c102_init(struct sn9c102_d + } + + if (s->set_ctrl) { +- n = sizeof(s->qctrl) / sizeof(s->qctrl[0]); +- for (i = 0; i < n; i++) +- if (s->qctrl[i].id != 0 && ++ for (i = 0; i < ARRAY_SIZE(s->qctrl); i++) ++ if (s->qctrl[i].id != 0 && + !(s->qctrl[i].flags & V4L2_CTRL_FLAG_DISABLED)) { + ctrl.id = s->qctrl[i].id; + ctrl.value = qctrl[i].default_value; +@@ -1388,7 +1387,7 @@ static int sn9c102_init(struct sn9c102_d + init_waitqueue_head(&cam->wait_stream); + cam->nreadbuffers = 2; + memcpy(s->_qctrl, s->qctrl, sizeof(s->qctrl)); +- memcpy(&(s->_rect), &(s->cropcap.defrect), ++ memcpy(&(s->_rect), &(s->cropcap.defrect), + sizeof(struct v4l2_rect)); + cam->state |= DEV_INITIALIZED; + } +@@ -1810,13 +1809,12 @@ static int sn9c102_ioctl_v4l2(struct ino + { + struct sn9c102_sensor* s = cam->sensor; + struct v4l2_queryctrl qc; +- u8 i, n; ++ u8 i; + + if (copy_from_user(&qc, arg, sizeof(qc))) + return -EFAULT; + +- n = sizeof(s->qctrl) / sizeof(s->qctrl[0]); +- for (i = 0; i < n; i++) ++ for (i = 0; i < ARRAY_SIZE(s->qctrl); i++) + if (qc.id && qc.id == s->qctrl[i].id) { + memcpy(&qc, &(s->qctrl[i]), sizeof(qc)); + if (copy_to_user(arg, &qc, sizeof(qc))) +@@ -1852,7 +1850,7 @@ static int sn9c102_ioctl_v4l2(struct ino + { + struct sn9c102_sensor* s = cam->sensor; + struct v4l2_control ctrl; +- u8 i, n; ++ u8 i; + int err = 0; + + if (!s->set_ctrl) +@@ -1861,8 +1859,7 @@ static int sn9c102_ioctl_v4l2(struct ino + if (copy_from_user(&ctrl, arg, sizeof(ctrl))) + return -EFAULT; + +- n = sizeof(s->qctrl) / sizeof(s->qctrl[0]); +- for (i = 0; i < n; i++) ++ for (i = 0; i < ARRAY_SIZE(s->qctrl); i++) + if (ctrl.id == s->qctrl[i].id) { + if (ctrl.value < s->qctrl[i].minimum || + ctrl.value > s->qctrl[i].maximum) +@@ -2544,7 +2541,7 @@ sn9c102_usb_probe(struct usb_interface* + unsigned int i, n; + int err = 0, r; + +- n = sizeof(sn9c102_id_table)/sizeof(sn9c102_id_table[0]); ++ n = ARRAY_SIZE(sn9c102_id_table); + for (i = 0; i < n-1; i++) + if (le16_to_cpu(udev->descriptor.idVendor) == + sn9c102_id_table[i].idVendor && +--- gregkh-2.6.orig/drivers/usb/media/w9968cf.c ++++ gregkh-2.6/drivers/usb/media/w9968cf.c +@@ -2958,7 +2958,7 @@ static int w9968cf_v4l_ioctl(struct inod + }; + + #define V4L1_IOCTL(cmd) \ +- ((_IOC_NR((cmd)) < sizeof(v4l1_ioctls)/sizeof(char*)) ? \ ++ ((_IOC_NR((cmd)) < ARRAY_SIZE(v4l1_ioctls)) ? \ + v4l1_ioctls[_IOC_NR((cmd))] : "?") + + cam = (struct w9968cf_device*)video_get_drvdata(video_devdata(filp)); +--- gregkh-2.6.orig/drivers/usb/net/zd1201.c ++++ gregkh-2.6/drivers/usb/net/zd1201.c +@@ -1722,7 +1722,7 @@ static const struct iw_priv_args zd1201_ + IW_PRIV_TYPE_NONE, "sethostauth" }, + { ZD1201GIWHOSTAUTH, IW_PRIV_TYPE_NONE, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "gethostauth" }, +- { ZD1201SIWAUTHSTA, IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, ++ { ZD1201SIWAUTHSTA, IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, + IW_PRIV_TYPE_NONE, "authstation" }, + { ZD1201SIWMAXASSOC, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, + IW_PRIV_TYPE_NONE, "setmaxassoc" }, +@@ -1731,9 +1731,9 @@ static const struct iw_priv_args zd1201_ + }; + + static const struct iw_handler_def zd1201_iw_handlers = { +- .num_standard = sizeof(zd1201_iw_handler)/sizeof(iw_handler), +- .num_private = sizeof(zd1201_private_handler)/sizeof(iw_handler), +- .num_private_args = sizeof(zd1201_private_args)/sizeof(struct iw_priv_args), ++ .num_standard = ARRAY_SIZE(zd1201_iw_handler), ++ .num_private = ARRAY_SIZE(zd1201_private_handler), ++ .num_private_args = ARRAY_SIZE(zd1201_private_args), + .standard = (iw_handler *)zd1201_iw_handler, + .private = (iw_handler *)zd1201_private_handler, + .private_args = (struct iw_priv_args *) zd1201_private_args, +--- gregkh-2.6.orig/drivers/usb/serial/io_edgeport.c ++++ gregkh-2.6/drivers/usb/serial/io_edgeport.c +@@ -2353,7 +2353,7 @@ static int calc_baud_rate_divisor (int b + + dbg("%s - %d", __FUNCTION__, baudrate); + +- for (i = 0; i < NUM_ENTRIES(divisor_table); i++) { ++ for (i = 0; i < ARRAY_SIZE(divisor_table); i++) { + if ( divisor_table[i].BaudRate == baudrate ) { + *divisor = divisor_table[i].Divisor; + return 0; +--- gregkh-2.6.orig/drivers/usb/serial/io_edgeport.h ++++ gregkh-2.6/drivers/usb/serial/io_edgeport.h +@@ -31,9 +31,6 @@ + #ifndef HIGH8 + #define HIGH8(a) ((unsigned char)((a & 0xff00) >> 8)) + #endif +-#ifndef NUM_ENTRIES +- #define NUM_ENTRIES(x) (sizeof(x)/sizeof((x)[0])) +-#endif + + #ifndef __KERNEL__ + #define __KERNEL__ +--- gregkh-2.6.orig/drivers/usb/serial/safe_serial.c ++++ gregkh-2.6/drivers/usb/serial/safe_serial.c +@@ -425,7 +425,7 @@ static int __init safe_init (void) + if (vendor || product) { + info ("vendor: %x product: %x\n", vendor, product); + +- for (i = 0; i < (sizeof (id_table) / sizeof (struct usb_device_id)); i++) { ++ for (i = 0; i < ARRAY_SIZE(id_table); i++) { + if (!id_table[i].idVendor && !id_table[i].idProduct) { + id_table[i].idVendor = vendor; + id_table[i].idProduct = product; +--- gregkh-2.6.orig/drivers/usb/serial/ti_usb_3410_5052.c ++++ gregkh-2.6/drivers/usb/serial/ti_usb_3410_5052.c +@@ -351,17 +351,14 @@ static int __init ti_init(void) + int i,j; + int ret; + +- + /* insert extra vendor and product ids */ +- j = sizeof(ti_id_table_3410)/sizeof(struct usb_device_id) +- - TI_EXTRA_VID_PID_COUNT - 1; ++ j = ARRAY_SIZE(ti_id_table_3410) - TI_EXTRA_VID_PID_COUNT - 1; + for (i=0; i<min(vendor_3410_count,product_3410_count); i++,j++) { + ti_id_table_3410[j].idVendor = vendor_3410[i]; + ti_id_table_3410[j].idProduct = product_3410[i]; + ti_id_table_3410[j].match_flags = USB_DEVICE_ID_MATCH_DEVICE; + } +- j = sizeof(ti_id_table_5052)/sizeof(struct usb_device_id) +- - TI_EXTRA_VID_PID_COUNT - 1; ++ j = ARRAY_SIZE(ti_id_table_5052) - TI_EXTRA_VID_PID_COUNT - 1; + for (i=0; i<min(vendor_5052_count,product_5052_count); i++,j++) { + ti_id_table_5052[j].idVendor = vendor_5052[i]; + ti_id_table_5052[j].idProduct = product_5052[i]; +--- gregkh-2.6.orig/drivers/usb/storage/sddr09.c ++++ gregkh-2.6/drivers/usb/storage/sddr09.c +@@ -133,13 +133,11 @@ static struct nand_flash_dev nand_flash_ + { 0,} + }; + +-#define SIZE(a) (sizeof(a)/sizeof((a)[0])) +- + static struct nand_flash_dev * + nand_find_id(unsigned char id) { + int i; + +- for (i = 0; i < SIZE(nand_flash_ids); i++) ++ for (i = 0; i < ARRAY_SIZE(nand_flash_ids); i++) + if (nand_flash_ids[i].model_id == id) + return &(nand_flash_ids[i]); + return NULL; diff --git a/usb/usbcore-fix-local-variable-clash.patch b/usb/usbcore-fix-local-variable-clash.patch new file mode 100644 index 0000000000000..d4dbaa1c85819 --- /dev/null +++ b/usb/usbcore-fix-local-variable-clash.patch @@ -0,0 +1,35 @@ +From stern@rowland.harvard.edu Tue Dec 13 07:35:15 2005 +Date: Tue, 13 Dec 2005 10:32:13 -0500 (EST) +From: Alan Stern <stern@rowland.harvard.edu> +To: Greg KH <greg@kroah.com> +cc: "J.A. Magallon" <jamagallon@able.es> +Subject: usbcore: fix local variable clash +Message-ID: <Pine.LNX.4.44L0.0512131029580.4831-100000@iolanthe.rowland.org> + +This patch (as621) fixes a local variable conflict I accidently +introduced into usb_set_configuration. + +Signed-off-by: Alan Stern <stern@rowland.harvard.edu> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/core/message.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- gregkh-2.6.orig/drivers/usb/core/message.c ++++ gregkh-2.6/drivers/usb/core/message.c +@@ -1387,11 +1387,11 @@ free_interfaces: + if (dev->state != USB_STATE_ADDRESS) + usb_disable_device (dev, 1); // Skip ep0 + +- n = dev->bus_mA - cp->desc.bMaxPower * 2; +- if (n < 0) ++ i = dev->bus_mA - cp->desc.bMaxPower * 2; ++ if (i < 0) + dev_warn(&dev->dev, "new config #%d exceeds power " + "limit by %dmA\n", +- configuration, -n); ++ configuration, -i); + + if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), + USB_REQ_SET_CONFIGURATION, 0, configuration, 0, |