Commit f1aa095a authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge kroah.com:/home/greg/linux/BK/bleed-2.5

into kroah.com:/home/greg/linux/BK/usb-2.6
parents 8c8c3970 fa04f891
...@@ -2007,6 +2007,8 @@ static int usb_audio_ioctl_mixdev(struct inode *inode, struct file *file, unsign ...@@ -2007,6 +2007,8 @@ static int usb_audio_ioctl_mixdev(struct inode *inode, struct file *file, unsign
if (cmd == SOUND_MIXER_INFO) { if (cmd == SOUND_MIXER_INFO) {
mixer_info info; mixer_info info;
memset(&info, 0, sizeof(info));
strncpy(info.id, "USB_AUDIO", sizeof(info.id)); strncpy(info.id, "USB_AUDIO", sizeof(info.id));
strncpy(info.name, "USB Audio Class Driver", sizeof(info.name)); strncpy(info.name, "USB Audio Class Driver", sizeof(info.name));
info.modify_counter = ms->modcnt; info.modify_counter = ms->modcnt;
...@@ -2016,6 +2018,8 @@ static int usb_audio_ioctl_mixdev(struct inode *inode, struct file *file, unsign ...@@ -2016,6 +2018,8 @@ static int usb_audio_ioctl_mixdev(struct inode *inode, struct file *file, unsign
} }
if (cmd == SOUND_OLD_MIXER_INFO) { if (cmd == SOUND_OLD_MIXER_INFO) {
_old_mixer_info info; _old_mixer_info info;
memset(&info, 0, sizeof(info));
strncpy(info.id, "USB_AUDIO", sizeof(info.id)); strncpy(info.id, "USB_AUDIO", sizeof(info.id));
strncpy(info.name, "USB Audio Class Driver", sizeof(info.name)); strncpy(info.name, "USB Audio Class Driver", sizeof(info.name));
if (copy_to_user((void __user *)arg, &info, sizeof(info))) if (copy_to_user((void __user *)arg, &info, sizeof(info)))
......
/* /*
* acm.c Version 0.21 * acm.c Version 0.22
* *
* Copyright (c) 1999 Armin Fuerst <fuerst@in.tum.de> * Copyright (c) 1999 Armin Fuerst <fuerst@in.tum.de>
* Copyright (c) 1999 Pavel Machek <pavel@suse.cz> * Copyright (c) 1999 Pavel Machek <pavel@suse.cz>
...@@ -24,6 +24,8 @@ ...@@ -24,6 +24,8 @@
* v0.19 - fixed CLOCAL handling (thanks to Richard Shih-Ping Chan) * v0.19 - fixed CLOCAL handling (thanks to Richard Shih-Ping Chan)
* v0.20 - switched to probing on interface (rather than device) class * v0.20 - switched to probing on interface (rather than device) class
* v0.21 - revert to probing on device for devices with multiple configs * v0.21 - revert to probing on device for devices with multiple configs
* v0.22 - probe only the control interface. if usbcore doesn't choose the
* config we want, sysadmin changes bConfigurationValue in sysfs.
*/ */
/* /*
...@@ -139,7 +141,8 @@ struct acm_line { ...@@ -139,7 +141,8 @@ struct acm_line {
struct acm { struct acm {
struct usb_device *dev; /* the corresponding usb device */ struct usb_device *dev; /* the corresponding usb device */
struct usb_interface *iface; /* the interfaces - +0 control +1 data */ struct usb_interface *control; /* control interface */
struct usb_interface *data; /* data interface */
struct tty_struct *tty; /* the corresponding tty */ struct tty_struct *tty; /* the corresponding tty */
struct urb *ctrlurb, *readurb, *writeurb; /* urbs */ struct urb *ctrlurb, *readurb, *writeurb; /* urbs */
struct acm_line line; /* line coding (bits, stop, parity) */ struct acm_line line; /* line coding (bits, stop, parity) */
...@@ -167,12 +170,15 @@ static int acm_ctrl_msg(struct acm *acm, int request, int value, void *buf, int ...@@ -167,12 +170,15 @@ static int acm_ctrl_msg(struct acm *acm, int request, int value, void *buf, int
{ {
int retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0), int retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0),
request, USB_RT_ACM, value, request, USB_RT_ACM, value,
acm->iface[0].altsetting[0].desc.bInterfaceNumber, acm->control->altsetting[0].desc.bInterfaceNumber,
buf, len, HZ * 5); buf, len, HZ * 5);
dbg("acm_control_msg: rq: 0x%02x val: %#x len: %#x result: %d", request, value, len, retval); dbg("acm_control_msg: rq: 0x%02x val: %#x len: %#x result: %d", request, value, len, retval);
return retval < 0 ? retval : 0; return retval < 0 ? retval : 0;
} }
/* devices aren't required to support these requests.
* the cdc acm descriptor tells whether they do...
*/
#define acm_set_control(acm, control) acm_ctrl_msg(acm, ACM_REQ_SET_CONTROL, control, NULL, 0) #define acm_set_control(acm, control) acm_ctrl_msg(acm, ACM_REQ_SET_CONTROL, control, NULL, 0)
#define acm_set_line(acm, line) acm_ctrl_msg(acm, ACM_REQ_SET_LINE, 0, line, sizeof(struct acm_line)) #define acm_set_line(acm, line) acm_ctrl_msg(acm, ACM_REQ_SET_LINE, 0, line, sizeof(struct acm_line))
#define acm_send_break(acm, ms) acm_ctrl_msg(acm, ACM_REQ_SEND_BREAK, ms, NULL, 0) #define acm_send_break(acm, ms) acm_ctrl_msg(acm, ACM_REQ_SEND_BREAK, ms, NULL, 0)
...@@ -211,7 +217,7 @@ static void acm_ctrl_irq(struct urb *urb, struct pt_regs *regs) ...@@ -211,7 +217,7 @@ static void acm_ctrl_irq(struct urb *urb, struct pt_regs *regs)
case ACM_IRQ_NETWORK: case ACM_IRQ_NETWORK:
dbg("%s network", data[0] ? "connected to" : "disconnected from"); dbg("%s network", dr->wValue ? "connected to" : "disconnected from");
break; break;
case ACM_IRQ_LINE_STATE: case ACM_IRQ_LINE_STATE:
...@@ -546,17 +552,15 @@ static int acm_probe (struct usb_interface *intf, ...@@ -546,17 +552,15 @@ static int acm_probe (struct usb_interface *intf,
struct usb_device *dev; struct usb_device *dev;
struct acm *acm; struct acm *acm;
struct usb_host_config *cfacm; struct usb_host_config *cfacm;
struct usb_interface *data;
struct usb_host_interface *ifcom, *ifdata; struct usb_host_interface *ifcom, *ifdata;
struct usb_endpoint_descriptor *epctrl, *epread, *epwrite; struct usb_endpoint_descriptor *epctrl, *epread, *epwrite;
int readsize, ctrlsize, minor, i, j; int readsize, ctrlsize, minor, j;
unsigned char *buf; unsigned char *buf;
dev = interface_to_usbdev (intf); dev = interface_to_usbdev (intf);
for (i = 0; i < dev->descriptor.bNumConfigurations; i++) {
cfacm = dev->config + i;
dbg("probing config %d", cfacm->desc.bConfigurationValue); cfacm = dev->actconfig;
for (j = 0; j < cfacm->desc.bNumInterfaces - 1; j++) { for (j = 0; j < cfacm->desc.bNumInterfaces - 1; j++) {
...@@ -564,19 +568,23 @@ static int acm_probe (struct usb_interface *intf, ...@@ -564,19 +568,23 @@ static int acm_probe (struct usb_interface *intf,
usb_interface_claimed(cfacm->interface[j + 1])) usb_interface_claimed(cfacm->interface[j + 1]))
continue; continue;
ifcom = cfacm->interface[j]->altsetting + 0; /* We know we're probe()d with the control interface.
* FIXME ACM doesn't guarantee the data interface is
* adjacent to the control interface, or that if one
* is there it's not for call management ... so use
* the cdc union descriptor whenever there is one.
*/
ifcom = intf->altsetting + 0;
if (intf == cfacm->interface[j]) {
ifdata = cfacm->interface[j + 1]->altsetting + 0; ifdata = cfacm->interface[j + 1]->altsetting + 0;
data = cfacm->interface[j + 1];
if (ifdata->desc.bInterfaceClass != 10 || ifdata->desc.bNumEndpoints < 2) { } else if (intf == cfacm->interface[j + 1]) {
ifcom = cfacm->interface[j + 1]->altsetting + 0;
ifdata = cfacm->interface[j]->altsetting + 0; ifdata = cfacm->interface[j]->altsetting + 0;
if (ifdata->desc.bInterfaceClass != 10 || ifdata->desc.bNumEndpoints < 2) data = cfacm->interface[j];
} else
continue; continue;
}
if (ifcom->desc.bInterfaceClass != 2 || ifcom->desc.bInterfaceSubClass != 2 || if (ifdata->desc.bInterfaceClass != 10 || ifdata->desc.bNumEndpoints < 2)
ifcom->desc.bInterfaceProtocol < 1 || ifcom->desc.bInterfaceProtocol > 6 ||
ifcom->desc.bNumEndpoints < 1)
continue; continue;
epctrl = &ifcom->endpoint[0].desc; epctrl = &ifcom->endpoint[0].desc;
...@@ -593,15 +601,6 @@ static int acm_probe (struct usb_interface *intf, ...@@ -593,15 +601,6 @@ static int acm_probe (struct usb_interface *intf,
epwrite = &ifdata->endpoint[0].desc; epwrite = &ifdata->endpoint[0].desc;
} }
/* FIXME don't scan every config. it's either correct
* when we probe(), or some other task must fix this.
*/
if (dev->actconfig != cfacm) {
err("need inactive config #%d",
cfacm->desc.bConfigurationValue);
return -ENODEV;
}
for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++); for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
if (acm_table[minor]) { if (acm_table[minor]) {
err("no more free acm devices"); err("no more free acm devices");
...@@ -617,7 +616,8 @@ static int acm_probe (struct usb_interface *intf, ...@@ -617,7 +616,8 @@ static int acm_probe (struct usb_interface *intf,
ctrlsize = epctrl->wMaxPacketSize; ctrlsize = epctrl->wMaxPacketSize;
readsize = epread->wMaxPacketSize; readsize = epread->wMaxPacketSize;
acm->writesize = epwrite->wMaxPacketSize; acm->writesize = epwrite->wMaxPacketSize;
acm->iface = cfacm->interface[j]; acm->control = intf;
acm->data = data;
acm->minor = minor; acm->minor = minor;
acm->dev = dev; acm->dev = dev;
...@@ -665,7 +665,7 @@ static int acm_probe (struct usb_interface *intf, ...@@ -665,7 +665,7 @@ static int acm_probe (struct usb_interface *intf,
buf += readsize, acm->writesize, acm_write_bulk, acm); buf += readsize, acm->writesize, acm_write_bulk, acm);
acm->writeurb->transfer_flags |= URB_NO_FSBR; acm->writeurb->transfer_flags |= URB_NO_FSBR;
info("ttyACM%d: USB ACM device", minor); dev_info(&intf->dev, "ttyACM%d: USB ACM device", minor);
acm_set_control(acm, acm->ctrlout); acm_set_control(acm, acm->ctrlout);
...@@ -673,8 +673,7 @@ static int acm_probe (struct usb_interface *intf, ...@@ -673,8 +673,7 @@ static int acm_probe (struct usb_interface *intf,
acm->line.databits = 8; acm->line.databits = 8;
acm_set_line(acm, &acm->line); acm_set_line(acm, &acm->line);
usb_driver_claim_interface(&acm_driver, acm->iface + 0, acm); usb_driver_claim_interface(&acm_driver, data, acm);
usb_driver_claim_interface(&acm_driver, acm->iface + 1, acm);
tty_register_device(acm_tty_driver, minor, &intf->dev); tty_register_device(acm_tty_driver, minor, &intf->dev);
...@@ -682,7 +681,6 @@ static int acm_probe (struct usb_interface *intf, ...@@ -682,7 +681,6 @@ static int acm_probe (struct usb_interface *intf,
usb_set_intfdata (intf, acm); usb_set_intfdata (intf, acm);
return 0; return 0;
} }
}
return -EIO; return -EIO;
} }
...@@ -705,8 +703,7 @@ static void acm_disconnect(struct usb_interface *intf) ...@@ -705,8 +703,7 @@ static void acm_disconnect(struct usb_interface *intf)
kfree(acm->ctrlurb->transfer_buffer); kfree(acm->ctrlurb->transfer_buffer);
usb_driver_release_interface(&acm_driver, acm->iface + 0); usb_driver_release_interface(&acm_driver, acm->data);
usb_driver_release_interface(&acm_driver, acm->iface + 1);
if (!acm->used) { if (!acm->used) {
tty_unregister_device(acm_tty_driver, acm->minor); tty_unregister_device(acm_tty_driver, acm->minor);
...@@ -727,8 +724,15 @@ static void acm_disconnect(struct usb_interface *intf) ...@@ -727,8 +724,15 @@ static void acm_disconnect(struct usb_interface *intf)
*/ */
static struct usb_device_id acm_ids[] = { static struct usb_device_id acm_ids[] = {
{ USB_DEVICE_INFO(USB_CLASS_COMM, 0, 0) }, /* control interfaces with various AT-command sets */
{ USB_DEVICE_INFO(USB_CLASS_COMM, 2, 0) }, { USB_INTERFACE_INFO(USB_CLASS_COMM, 2, 1) },
{ USB_INTERFACE_INFO(USB_CLASS_COMM, 2, 2) },
{ USB_INTERFACE_INFO(USB_CLASS_COMM, 2, 3) },
{ USB_INTERFACE_INFO(USB_CLASS_COMM, 2, 4) },
{ USB_INTERFACE_INFO(USB_CLASS_COMM, 2, 5) },
{ USB_INTERFACE_INFO(USB_CLASS_COMM, 2, 6) },
/* NOTE: COMM/2/0xff is likely MSFT RNDIS ... NOT a modem!! */
{ } { }
}; };
...@@ -736,7 +740,7 @@ MODULE_DEVICE_TABLE (usb, acm_ids); ...@@ -736,7 +740,7 @@ MODULE_DEVICE_TABLE (usb, acm_ids);
static struct usb_driver acm_driver = { static struct usb_driver acm_driver = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.name = "acm", .name = "cdc_acm",
.probe = acm_probe, .probe = acm_probe,
.disconnect = acm_disconnect, .disconnect = acm_disconnect,
.id_table = acm_ids, .id_table = acm_ids,
......
...@@ -1001,8 +1001,10 @@ int usb_reset_configuration(struct usb_device *dev) ...@@ -1001,8 +1001,10 @@ int usb_reset_configuration(struct usb_device *dev)
int i, retval; int i, retval;
struct usb_host_config *config; struct usb_host_config *config;
/* dev->serialize guards all config changes */ /* caller must own dev->serialize (config won't change)
down(&dev->serialize); * and the usb bus readlock (so driver bindings are stable);
* so calls during probe() are fine
*/
for (i = 1; i < 16; ++i) { for (i = 1; i < 16; ++i) {
usb_disable_endpoint(dev, i); usb_disable_endpoint(dev, i);
...@@ -1016,7 +1018,7 @@ int usb_reset_configuration(struct usb_device *dev) ...@@ -1016,7 +1018,7 @@ int usb_reset_configuration(struct usb_device *dev)
NULL, 0, HZ * USB_CTRL_SET_TIMEOUT); NULL, 0, HZ * USB_CTRL_SET_TIMEOUT);
if (retval < 0) { if (retval < 0) {
dev->state = USB_STATE_ADDRESS; dev->state = USB_STATE_ADDRESS;
goto done; return retval;
} }
dev->toggle[0] = dev->toggle[1] = 0; dev->toggle[0] = dev->toggle[1] = 0;
...@@ -1029,9 +1031,7 @@ int usb_reset_configuration(struct usb_device *dev) ...@@ -1029,9 +1031,7 @@ int usb_reset_configuration(struct usb_device *dev)
intf->act_altsetting = 0; intf->act_altsetting = 0;
usb_enable_interface(dev, intf); usb_enable_interface(dev, intf);
} }
done: return 0;
up(&dev->serialize);
return (retval < 0) ? retval : 0;
} }
/** /**
......
...@@ -812,7 +812,7 @@ ep0_read (struct file *fd, char *buf, size_t len, loff_t *ptr) ...@@ -812,7 +812,7 @@ ep0_read (struct file *fd, char *buf, size_t len, loff_t *ptr)
if (dev->setup_out_error) if (dev->setup_out_error)
retval = -EIO; retval = -EIO;
else { else {
len = min (len, dev->req->actual); len = min (len, (size_t)dev->req->actual);
// FIXME don't call this with the spinlock held ... // FIXME don't call this with the spinlock held ...
if (copy_to_user (buf, &dev->req->buf, len)) if (copy_to_user (buf, &dev->req->buf, len))
retval = -EFAULT; retval = -EFAULT;
...@@ -1670,7 +1670,7 @@ dev_config (struct file *fd, const char *buf, size_t len, loff_t *ptr) ...@@ -1670,7 +1670,7 @@ dev_config (struct file *fd, const char *buf, size_t len, loff_t *ptr)
fail: fail:
spin_unlock_irq (&dev->lock); spin_unlock_irq (&dev->lock);
pr_debug ("%s: %s fail %d, %p\n", shortname, __FUNCTION__, value, dev); pr_debug ("%s: %s fail %Zd, %p\n", shortname, __FUNCTION__, value, dev);
kfree (dev->buf); kfree (dev->buf);
dev->buf = 0; dev->buf = 0;
return value; return value;
......
...@@ -539,6 +539,7 @@ vicam_ioctl(struct inode *inode, struct file *file, unsigned int ioctlnr, unsign ...@@ -539,6 +539,7 @@ vicam_ioctl(struct inode *inode, struct file *file, unsigned int ioctlnr, unsign
struct video_capability b; struct video_capability b;
DBG("VIDIOCGCAP\n"); DBG("VIDIOCGCAP\n");
memset(&b, 0, sizeof(b));
strcpy(b.name, "ViCam-based Camera"); strcpy(b.name, "ViCam-based Camera");
b.type = VID_TYPE_CAPTURE; b.type = VID_TYPE_CAPTURE;
b.channels = 1; b.channels = 1;
......
...@@ -711,6 +711,7 @@ brlvger_ioctl(struct inode *inode, struct file *file, ...@@ -711,6 +711,7 @@ brlvger_ioctl(struct inode *inode, struct file *file,
case BRLVGER_GET_INFO: { case BRLVGER_GET_INFO: {
struct brlvger_info vi; struct brlvger_info vi;
memset(&vi, 0, sizeof(vi));
strlcpy(vi.driver_version, DRIVER_VERSION, strlcpy(vi.driver_version, DRIVER_VERSION,
sizeof(vi.driver_version)); sizeof(vi.driver_version));
strlcpy(vi.driver_banner, longbanner, strlcpy(vi.driver_banner, longbanner,
......
...@@ -493,8 +493,11 @@ static void ax8817x_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 i ...@@ -493,8 +493,11 @@ static void ax8817x_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 i
(void *)req, data, size, (void *)req, data, size,
ax8817x_async_cmd_callback, req); ax8817x_async_cmd_callback, req);
if((status = usb_submit_urb(urb, GFP_ATOMIC)) < 0) if((status = usb_submit_urb(urb, GFP_ATOMIC)) < 0) {
deverr(dev, "Error submitting the control message: status=%d", status); deverr(dev, "Error submitting the control message: status=%d", status);
kfree(req);
usb_free_urb(urb);
}
} }
static void ax8817x_set_multicast(struct net_device *net) static void ax8817x_set_multicast(struct net_device *net)
...@@ -514,7 +517,7 @@ static void ax8817x_set_multicast(struct net_device *net) ...@@ -514,7 +517,7 @@ static void ax8817x_set_multicast(struct net_device *net)
* for our 8 byte filter buffer * for our 8 byte filter buffer
* to avoid allocating memory that * to avoid allocating memory that
* is tricky to free later */ * is tricky to free later */
u8 *multi_filter = (u8 *)dev->data; u8 *multi_filter = (u8 *)&dev->data;
struct dev_mc_list *mc_list = net->mc_list; struct dev_mc_list *mc_list = net->mc_list;
u32 crc_bits; u32 crc_bits;
int i; int i;
......
...@@ -17,6 +17,15 @@ ...@@ -17,6 +17,15 @@
* See http://ftdi-usb-sio.sourceforge.net for upto date testing info * See http://ftdi-usb-sio.sourceforge.net for upto date testing info
* and extra documentation * and extra documentation
* *
* (21/Oct/2003) Ian Abbott
* Renamed some VID/PID macros for Matrix Orbital and Perle Systems
* devices. Removed Matrix Orbital and Perle Systems devices from the
* 8U232AM device table, but left them in the FT232BM table, as they are
* known to use only FT232BM.
*
* (17/Oct/2003) Scott Allen
* Added vid/pid for Perle Systems UltraPort USB serial converters
*
* (21/Sep/2003) Ian Abbott * (21/Sep/2003) Ian Abbott
* Added VID/PID for Omnidirectional Control Technology US101 USB to * Added VID/PID for Omnidirectional Control Technology US101 USB to
* RS-232 adapter (also rebadged as Dick Smith Electronics XH6381). * RS-232 adapter (also rebadged as Dick Smith Electronics XH6381).
...@@ -285,13 +294,6 @@ static struct usb_device_id id_table_8U232AM [] = { ...@@ -285,13 +294,6 @@ static struct usb_device_id id_table_8U232AM [] = {
{ USB_DEVICE_VER(FTDI_VID, FTDI_XF_642_PID, 0, 0x3ff) }, { USB_DEVICE_VER(FTDI_VID, FTDI_XF_642_PID, 0, 0x3ff) },
{ USB_DEVICE_VER(FTDI_VID, FTDI_VNHCPCUSB_D_PID, 0, 0x3ff) }, { USB_DEVICE_VER(FTDI_VID, FTDI_VNHCPCUSB_D_PID, 0, 0x3ff) },
{ USB_DEVICE_VER(FTDI_VID, FTDI_DSS20_PID, 0, 0x3ff) }, { USB_DEVICE_VER(FTDI_VID, FTDI_DSS20_PID, 0, 0x3ff) },
{ USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_0_PID, 0, 0x3ff) },
{ USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_1_PID, 0, 0x3ff) },
{ USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_2_PID, 0, 0x3ff) },
{ USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_3_PID, 0, 0x3ff) },
{ USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_4_PID, 0, 0x3ff) },
{ USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_5_PID, 0, 0x3ff) },
{ USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_6_PID, 0, 0x3ff) },
{ USB_DEVICE_VER(SEALEVEL_VID, SEALEVEL_2101_PID, 0, 0x3ff) }, { USB_DEVICE_VER(SEALEVEL_VID, SEALEVEL_2101_PID, 0, 0x3ff) },
{ USB_DEVICE_VER(SEALEVEL_VID, SEALEVEL_2102_PID, 0, 0x3ff) }, { USB_DEVICE_VER(SEALEVEL_VID, SEALEVEL_2102_PID, 0, 0x3ff) },
{ USB_DEVICE_VER(SEALEVEL_VID, SEALEVEL_2103_PID, 0, 0x3ff) }, { USB_DEVICE_VER(SEALEVEL_VID, SEALEVEL_2103_PID, 0, 0x3ff) },
...@@ -358,13 +360,14 @@ static struct usb_device_id id_table_FT232BM [] = { ...@@ -358,13 +360,14 @@ static struct usb_device_id id_table_FT232BM [] = {
{ USB_DEVICE_VER(FTDI_VID, FTDI_XF_642_PID, 0x400, 0xffff) }, { USB_DEVICE_VER(FTDI_VID, FTDI_XF_642_PID, 0x400, 0xffff) },
{ USB_DEVICE_VER(FTDI_VID, FTDI_VNHCPCUSB_D_PID, 0x400, 0xffff) }, { USB_DEVICE_VER(FTDI_VID, FTDI_VNHCPCUSB_D_PID, 0x400, 0xffff) },
{ USB_DEVICE_VER(FTDI_VID, FTDI_DSS20_PID, 0x400, 0xffff) }, { USB_DEVICE_VER(FTDI_VID, FTDI_DSS20_PID, 0x400, 0xffff) },
{ USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_0_PID, 0x400, 0xffff) }, { USB_DEVICE_VER(FTDI_VID, FTDI_MTXORB_0_PID, 0x400, 0xffff) },
{ USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_1_PID, 0x400, 0xffff) }, { USB_DEVICE_VER(FTDI_VID, FTDI_MTXORB_1_PID, 0x400, 0xffff) },
{ USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_2_PID, 0x400, 0xffff) }, { USB_DEVICE_VER(FTDI_VID, FTDI_MTXORB_2_PID, 0x400, 0xffff) },
{ USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_3_PID, 0x400, 0xffff) }, { USB_DEVICE_VER(FTDI_VID, FTDI_MTXORB_3_PID, 0x400, 0xffff) },
{ USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_4_PID, 0x400, 0xffff) }, { USB_DEVICE_VER(FTDI_VID, FTDI_MTXORB_4_PID, 0x400, 0xffff) },
{ USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_5_PID, 0x400, 0xffff) }, { USB_DEVICE_VER(FTDI_VID, FTDI_MTXORB_5_PID, 0x400, 0xffff) },
{ USB_DEVICE_VER(FTDI_MTXORB_VID, FTDI_MTXORB_6_PID, 0x400, 0xffff) }, { USB_DEVICE_VER(FTDI_VID, FTDI_MTXORB_6_PID, 0x400, 0xffff) },
{ USB_DEVICE_VER(FTDI_VID, FTDI_PERLE_ULTRAPORT_PID, 0x400, 0xffff) },
{ USB_DEVICE_VER(SEALEVEL_VID, SEALEVEL_2101_PID, 0x400, 0xffff) }, { USB_DEVICE_VER(SEALEVEL_VID, SEALEVEL_2101_PID, 0x400, 0xffff) },
{ USB_DEVICE_VER(SEALEVEL_VID, SEALEVEL_2102_PID, 0x400, 0xffff) }, { USB_DEVICE_VER(SEALEVEL_VID, SEALEVEL_2102_PID, 0x400, 0xffff) },
{ USB_DEVICE_VER(SEALEVEL_VID, SEALEVEL_2103_PID, 0x400, 0xffff) }, { USB_DEVICE_VER(SEALEVEL_VID, SEALEVEL_2103_PID, 0x400, 0xffff) },
...@@ -444,13 +447,14 @@ static struct usb_device_id id_table_combined [] = { ...@@ -444,13 +447,14 @@ static struct usb_device_id id_table_combined [] = {
{ USB_DEVICE(FTDI_VID, FTDI_DSS20_PID) }, { USB_DEVICE(FTDI_VID, FTDI_DSS20_PID) },
{ USB_DEVICE(FTDI_NF_RIC_VID, FTDI_NF_RIC_PID) }, { USB_DEVICE(FTDI_NF_RIC_VID, FTDI_NF_RIC_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_VNHCPCUSB_D_PID) }, { USB_DEVICE(FTDI_VID, FTDI_VNHCPCUSB_D_PID) },
{ USB_DEVICE(FTDI_MTXORB_VID, FTDI_MTXORB_0_PID) }, { USB_DEVICE_VER(FTDI_VID, FTDI_MTXORB_0_PID, 0x400, 0xffff) },
{ USB_DEVICE(FTDI_MTXORB_VID, FTDI_MTXORB_1_PID) }, { USB_DEVICE_VER(FTDI_VID, FTDI_MTXORB_1_PID, 0x400, 0xffff) },
{ USB_DEVICE(FTDI_MTXORB_VID, FTDI_MTXORB_2_PID) }, { USB_DEVICE_VER(FTDI_VID, FTDI_MTXORB_2_PID, 0x400, 0xffff) },
{ USB_DEVICE(FTDI_MTXORB_VID, FTDI_MTXORB_3_PID) }, { USB_DEVICE_VER(FTDI_VID, FTDI_MTXORB_3_PID, 0x400, 0xffff) },
{ USB_DEVICE(FTDI_MTXORB_VID, FTDI_MTXORB_4_PID) }, { USB_DEVICE_VER(FTDI_VID, FTDI_MTXORB_4_PID, 0x400, 0xffff) },
{ USB_DEVICE(FTDI_MTXORB_VID, FTDI_MTXORB_5_PID) }, { USB_DEVICE_VER(FTDI_VID, FTDI_MTXORB_5_PID, 0x400, 0xffff) },
{ USB_DEVICE(FTDI_MTXORB_VID, FTDI_MTXORB_6_PID) }, { USB_DEVICE_VER(FTDI_VID, FTDI_MTXORB_6_PID, 0x400, 0xffff) },
{ USB_DEVICE_VER(FTDI_VID, FTDI_PERLE_ULTRAPORT_PID, 0x400, 0xffff) },
{ USB_DEVICE(SEALEVEL_VID, SEALEVEL_2101_PID) }, { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2101_PID) },
{ USB_DEVICE(SEALEVEL_VID, SEALEVEL_2102_PID) }, { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2102_PID) },
{ USB_DEVICE(SEALEVEL_VID, SEALEVEL_2103_PID) }, { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2103_PID) },
......
...@@ -50,7 +50,6 @@ ...@@ -50,7 +50,6 @@
* The following are the values for the Matrix Orbital LCD displays, * The following are the values for the Matrix Orbital LCD displays,
* which are the FT232BM ( similar to the 8U232AM ) * which are the FT232BM ( similar to the 8U232AM )
*/ */
#define FTDI_MTXORB_VID FTDI_VID /* Matrix Orbital Product Id */
#define FTDI_MTXORB_0_PID 0xFA00 /* Matrix Orbital Product Id */ #define FTDI_MTXORB_0_PID 0xFA00 /* Matrix Orbital Product Id */
#define FTDI_MTXORB_1_PID 0xFA01 /* Matrix Orbital Product Id */ #define FTDI_MTXORB_1_PID 0xFA01 /* Matrix Orbital Product Id */
#define FTDI_MTXORB_2_PID 0xFA02 /* Matrix Orbital Product Id */ #define FTDI_MTXORB_2_PID 0xFA02 /* Matrix Orbital Product Id */
...@@ -59,6 +58,12 @@ ...@@ -59,6 +58,12 @@
#define FTDI_MTXORB_5_PID 0xFA05 /* Matrix Orbital Product Id */ #define FTDI_MTXORB_5_PID 0xFA05 /* Matrix Orbital Product Id */
#define FTDI_MTXORB_6_PID 0xFA06 /* Matrix Orbital Product Id */ #define FTDI_MTXORB_6_PID 0xFA06 /* Matrix Orbital Product Id */
/*
* The following are the values for the Perle Systems
* UltraPort USB serial converters
*/
#define FTDI_PERLE_ULTRAPORT_PID 0xF0C0 /* Perle UltraPort Product Id */
/* /*
* The following are the values for the Sealevel SeaLINK+ adapters. * The following are the values for the Sealevel SeaLINK+ adapters.
* (Original list sent by Tuan Hoang. Ian Abbott renamed the macros and * (Original list sent by Tuan Hoang. Ian Abbott renamed the macros and
......
...@@ -1906,6 +1906,7 @@ static int edge_ioctl (struct usb_serial_port *port, struct file *file, unsigned ...@@ -1906,6 +1906,7 @@ static int edge_ioctl (struct usb_serial_port *port, struct file *file, unsigned
case TIOCGICOUNT: case TIOCGICOUNT:
cnow = edge_port->icount; cnow = edge_port->icount;
memset(&icount, 0, sizeof(icount));
icount.cts = cnow.cts; icount.cts = cnow.cts;
icount.dsr = cnow.dsr; icount.dsr = cnow.dsr;
icount.rng = cnow.rng; icount.rng = cnow.rng;
......
...@@ -548,10 +548,10 @@ UNUSUAL_DEV( 0x07c4, 0xa400, 0x0000, 0xffff, ...@@ -548,10 +548,10 @@ UNUSUAL_DEV( 0x07c4, 0xa400, 0x0000, 0xffff,
* - They don't like the INQUIRY command. So we must handle this command * - They don't like the INQUIRY command. So we must handle this command
* of the SCSI layer ourselves. * of the SCSI layer ourselves.
*/ */
UNUSUAL_DEV( 0x07cf, 0x1001, 0x1000, 0x5009, UNUSUAL_DEV( 0x07cf, 0x1001, 0x1000, 0x9999,
"Casio", "Casio",
"QV DigitalCamera", "QV DigitalCamera",
US_SC_8070, US_PR_CB, NULL, US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_INQUIRY ), US_FL_FIX_INQUIRY ),
/* Submitted by Hartmut Wahl <hwahl@hwahl.de>*/ /* Submitted by Hartmut Wahl <hwahl@hwahl.de>*/
...@@ -631,6 +631,16 @@ UNUSUAL_DEV( 0x0d96, 0x410a, 0x0001, 0xffff, ...@@ -631,6 +631,16 @@ UNUSUAL_DEV( 0x0d96, 0x410a, 0x0001, 0xffff,
US_SC_DEVICE, US_PR_DEVICE, NULL, US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_INQUIRY), US_FL_FIX_INQUIRY),
/*
* Entry for Jenoptik JD 5200z3
*
* email: car.busse@gmx.de
*/
UNUSUAL_DEV( 0x0d96, 0x5200, 0x0001, 0x0200,
"Jenoptik",
"JD 5200 z3",
US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_FIX_INQUIRY),
/* Reported by Kevin Cernekee <kpc-usbdev@gelato.uiuc.edu> /* Reported by Kevin Cernekee <kpc-usbdev@gelato.uiuc.edu>
* Tested on hardware version 1.10. * Tested on hardware version 1.10.
* Entry is needed only for the initializer function override. * Entry is needed only for the initializer function override.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment