]> err.no Git - linux-2.6/blobdiff - drivers/usb/serial/option.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
[linux-2.6] / drivers / usb / serial / option.c
index f4914209871db627a8674b3403836e4464542052..e7e016e60333a481190cbddcb6abc38671f398e9 100644 (file)
@@ -154,8 +154,6 @@ static int  option_send_setup(struct usb_serial_port *port);
 #define NOVATELWIRELESS_PRODUCT_MC727          0x4100
 #define NOVATELWIRELESS_PRODUCT_MC950D         0x4400
 
-#define NOVATELWIRELESS_PRODUCT_U727           0x5010
-
 /* FUTURE NOVATEL PRODUCTS */
 #define NOVATELWIRELESS_PRODUCT_EVDO_1         0x6000
 #define NOVATELWIRELESS_PRODUCT_HSPA_1         0x7000
@@ -184,6 +182,9 @@ static int  option_send_setup(struct usb_serial_port *port);
 #define AXESSTEL_VENDOR_ID                     0x1726
 #define AXESSTEL_PRODUCT_MV110H                        0x1000
 
+#define ONDA_VENDOR_ID                         0x19d2
+#define ONDA_PRODUCT_ET502HS                   0x0002
+
 #define BANDRICH_VENDOR_ID                     0x1A8D
 #define BANDRICH_PRODUCT_C100_1                        0x1002
 #define BANDRICH_PRODUCT_C100_2                        0x1003
@@ -269,7 +270,6 @@ static struct usb_device_id option_ids[] = {
        { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */
        { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */
        { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */
-       { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U727) }, /* Novatel U727 */
        { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_1) }, /* Novatel EVDO product */
        { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_1) }, /* Novatel HSPA product */
        { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_1) }, /* Novatel Embedded product */
@@ -293,14 +293,17 @@ static struct usb_device_id option_ids[] = {
        { USB_DEVICE(DELL_VENDOR_ID, 0x8133) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
        { USB_DEVICE(DELL_VENDOR_ID, 0x8136) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */
        { USB_DEVICE(DELL_VENDOR_ID, 0x8137) }, /* Dell Wireless HSDPA 5520 */
+       { USB_DEVICE(DELL_VENDOR_ID, 0x8138) }, /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */
        { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) },
        { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) },
        { USB_DEVICE(AXESSTEL_VENDOR_ID, AXESSTEL_PRODUCT_MV110H) },
+       { USB_DEVICE(ONDA_VENDOR_ID, ONDA_PRODUCT_ET502HS) },
        { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) },
        { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) },
        { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
        { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
        { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */
+       { USB_DEVICE(0x19d2, 0x0001) },         /* Telstra NextG CDMA */
        { } /* Terminating entry */
 };
 MODULE_DEVICE_TABLE(usb, option_ids);
@@ -408,24 +411,24 @@ module_exit(option_exit);
 
 static void option_rx_throttle(struct usb_serial_port *port)
 {
-       dbg("%s", __FUNCTION__);
+       dbg("%s", __func__);
 }
 
 static void option_rx_unthrottle(struct usb_serial_port *port)
 {
-       dbg("%s", __FUNCTION__);
+       dbg("%s", __func__);
 }
 
 static void option_break_ctl(struct usb_serial_port *port, int break_state)
 {
        /* Unfortunately, I don't know how to send a break */
-       dbg("%s", __FUNCTION__);
+       dbg("%s", __func__);
 }
 
 static void option_set_termios(struct usb_serial_port *port,
                        struct ktermios *old_termios)
 {
-       dbg("%s", __FUNCTION__);
+       dbg("%s", __func__);
        /* Doesn't support option setting */
        tty_termios_copy_hw(port->tty->termios, old_termios);
        option_send_setup(port);
@@ -486,7 +489,7 @@ static int option_write(struct usb_serial_port *port,
 
        portdata = usb_get_serial_port_data(port);
 
-       dbg("%s: write (%d chars)", __FUNCTION__, count);
+       dbg("%s: write (%d chars)", __func__, count);
 
        i = 0;
        left = count;
@@ -507,7 +510,7 @@ static int option_write(struct usb_serial_port *port,
                        dbg("usb_write %p failed (err=%d)",
                                this_urb, this_urb->status);
 
-               dbg("%s: endpoint %d buf %d", __FUNCTION__,
+               dbg("%s: endpoint %d buf %d", __func__,
                        usb_pipeendpoint(this_urb->pipe), i);
 
                /* send the data */
@@ -529,7 +532,7 @@ static int option_write(struct usb_serial_port *port,
        }
 
        count -= left;
-       dbg("%s: wrote (did %d)", __FUNCTION__, count);
+       dbg("%s: wrote (did %d)", __func__, count);
        return count;
 }
 
@@ -542,14 +545,14 @@ static void option_indat_callback(struct urb *urb)
        unsigned char *data = urb->transfer_buffer;
        int status = urb->status;
 
-       dbg("%s: %p", __FUNCTION__, urb);
+       dbg("%s: %p", __func__, urb);
 
        endpoint = usb_pipeendpoint(urb->pipe);
-       port = (struct usb_serial_port *) urb->context;
+       port =  urb->context;
 
        if (status) {
                dbg("%s: nonzero status: %d on endpoint %02x.",
-                   __FUNCTION__, status, endpoint);
+                   __func__, status, endpoint);
        } else {
                tty = port->tty;
                if (urb->actual_length) {
@@ -557,7 +560,7 @@ static void option_indat_callback(struct urb *urb)
                        tty_insert_flip_string(tty, data, urb->actual_length);
                        tty_flip_buffer_push(tty);
                } else {
-                       dbg("%s: empty read urb received", __FUNCTION__);
+                       dbg("%s: empty read urb received", __func__);
                }
 
                /* Resubmit urb so we continue receiving */
@@ -565,7 +568,7 @@ static void option_indat_callback(struct urb *urb)
                        err = usb_submit_urb(urb, GFP_ATOMIC);
                        if (err)
                                printk(KERN_ERR "%s: resubmit read urb failed. "
-                                       "(%d)", __FUNCTION__, err);
+                                       "(%d)", __func__, err);
                }
        }
        return;
@@ -577,9 +580,9 @@ static void option_outdat_callback(struct urb *urb)
        struct option_port_private *portdata;
        int i;
 
-       dbg("%s", __FUNCTION__);
+       dbg("%s", __func__);
 
-       port = (struct usb_serial_port *) urb->context;
+       port =  urb->context;
 
        usb_serial_port_softint(port);
 
@@ -597,19 +600,19 @@ static void option_instat_callback(struct urb *urb)
 {
        int err;
        int status = urb->status;
-       struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
+       struct usb_serial_port *port =  urb->context;
        struct option_port_private *portdata = usb_get_serial_port_data(port);
        struct usb_serial *serial = port->serial;
 
-       dbg("%s", __FUNCTION__);
-       dbg("%s: urb %p port %p has data %p", __FUNCTION__,urb,port,portdata);
+       dbg("%s", __func__);
+       dbg("%s: urb %p port %p has data %p", __func__,urb,port,portdata);
 
        if (status == 0) {
                struct usb_ctrlrequest *req_pkt =
                                (struct usb_ctrlrequest *)urb->transfer_buffer;
 
                if (!req_pkt) {
-                       dbg("%s: NULL req_pkt\n", __FUNCTION__);
+                       dbg("%s: NULL req_pkt\n", __func__);
                        return;
                }
                if ((req_pkt->bRequestType == 0xA1) &&
@@ -619,7 +622,7 @@ static void option_instat_callback(struct urb *urb)
                                        urb->transfer_buffer +
                                        sizeof(struct usb_ctrlrequest));
 
-                       dbg("%s: signal x%x", __FUNCTION__, signals);
+                       dbg("%s: signal x%x", __func__, signals);
 
                        old_dcd_state = portdata->dcd_state;
                        portdata->cts_state = 1;
@@ -631,11 +634,11 @@ static void option_instat_callback(struct urb *urb)
                                        old_dcd_state && !portdata->dcd_state)
                                tty_hangup(port->tty);
                } else {
-                       dbg("%s: type %x req %x", __FUNCTION__,
+                       dbg("%s: type %x req %x", __func__,
                                req_pkt->bRequestType,req_pkt->bRequest);
                }
        } else
-               dbg("%s: error %d", __FUNCTION__, status);
+               dbg("%s: error %d", __func__, status);
 
        /* Resubmit urb so we continue receiving IRQ data */
        if (status != -ESHUTDOWN) {
@@ -643,7 +646,7 @@ static void option_instat_callback(struct urb *urb)
                err = usb_submit_urb(urb, GFP_ATOMIC);
                if (err)
                        dbg("%s: resubmit intr urb failed. (%d)",
-                               __FUNCTION__, err);
+                               __func__, err);
        }
 }
 
@@ -656,13 +659,14 @@ static int option_write_room(struct usb_serial_port *port)
 
        portdata = usb_get_serial_port_data(port);
 
+
        for (i=0; i < N_OUT_URB; i++) {
                this_urb = portdata->out_urbs[i];
                if (this_urb && !test_bit(i, &portdata->out_busy))
                        data_len += OUT_BUFLEN;
        }
 
-       dbg("%s: %d", __FUNCTION__, data_len);
+       dbg("%s: %d", __func__, data_len);
        return data_len;
 }
 
@@ -677,10 +681,12 @@ static int option_chars_in_buffer(struct usb_serial_port *port)
 
        for (i=0; i < N_OUT_URB; i++) {
                this_urb = portdata->out_urbs[i];
+               /* FIXME: This locking is insufficient as this_urb may
+                  go unused during the test */
                if (this_urb && test_bit(i, &portdata->out_busy))
                        data_len += this_urb->transfer_buffer_length;
        }
-       dbg("%s: %d", __FUNCTION__, data_len);
+       dbg("%s: %d", __func__, data_len);
        return data_len;
 }
 
@@ -693,7 +699,7 @@ static int option_open(struct usb_serial_port *port, struct file *filp)
 
        portdata = usb_get_serial_port_data(port);
 
-       dbg("%s", __FUNCTION__);
+       dbg("%s", __func__);
 
        /* Set some sane defaults */
        portdata->rts_state = 1;
@@ -705,7 +711,7 @@ static int option_open(struct usb_serial_port *port, struct file *filp)
                if (! urb)
                        continue;
                if (urb->dev != serial->dev) {
-                       dbg("%s: dev %p != %p", __FUNCTION__,
+                       dbg("%s: dev %p != %p", __func__,
                                urb->dev, serial->dev);
                        continue;
                }
@@ -719,7 +725,7 @@ static int option_open(struct usb_serial_port *port, struct file *filp)
                err = usb_submit_urb(urb, GFP_KERNEL);
                if (err) {
                        dbg("%s: submit urb %d failed (%d) %d",
-                               __FUNCTION__, i, err,
+                               __func__, i, err,
                                urb->transfer_buffer_length);
                }
        }
@@ -747,7 +753,7 @@ static void option_close(struct usb_serial_port *port, struct file *filp)
        struct usb_serial *serial = port->serial;
        struct option_port_private *portdata;
 
-       dbg("%s", __FUNCTION__);
+       dbg("%s", __func__);
        portdata = usb_get_serial_port_data(port);
 
        portdata->rts_state = 0;
@@ -780,7 +786,7 @@ static struct urb *option_setup_urb(struct usb_serial *serial, int endpoint,
 
        urb = usb_alloc_urb(0, GFP_KERNEL);             /* No ISO */
        if (urb == NULL) {
-               dbg("%s: alloc for endpoint %d failed.", __FUNCTION__, endpoint);
+               dbg("%s: alloc for endpoint %d failed.", __func__, endpoint);
                return NULL;
        }
 
@@ -799,7 +805,7 @@ static void option_setup_urbs(struct usb_serial *serial)
        struct usb_serial_port *port;
        struct option_port_private *portdata;
 
-       dbg("%s", __FUNCTION__);
+       dbg("%s", __func__);
 
        for (i = 0; i < serial->num_ports; i++) {
                port = serial->port[i];
@@ -832,7 +838,7 @@ static int option_send_setup(struct usb_serial_port *port)
        struct usb_serial *serial = port->serial;
        struct option_port_private *portdata;
        int ifNum = serial->interface->cur_altsetting->desc.bInterfaceNumber;
-       dbg("%s", __FUNCTION__);
+       dbg("%s", __func__);
 
        portdata = usb_get_serial_port_data(port);
 
@@ -858,7 +864,7 @@ static int option_startup(struct usb_serial *serial)
        struct option_port_private *portdata;
        u8 *buffer;
 
-       dbg("%s", __FUNCTION__);
+       dbg("%s", __func__);
 
        /* Now setup per port private data */
        for (i = 0; i < serial->num_ports; i++) {
@@ -866,7 +872,7 @@ static int option_startup(struct usb_serial *serial)
                portdata = kzalloc(sizeof(*portdata), GFP_KERNEL);
                if (!portdata) {
                        dbg("%s: kmalloc for option_port_private (%d) failed!.",
-                                       __FUNCTION__, i);
+                                       __func__, i);
                        return (1);
                }
 
@@ -891,7 +897,7 @@ static int option_startup(struct usb_serial *serial)
                err = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
                if (err)
                        dbg("%s: submit irq_in urb failed %d",
-                               __FUNCTION__, err);
+                               __func__, err);
        }
 
        option_setup_urbs(serial);
@@ -915,7 +921,7 @@ static void option_shutdown(struct usb_serial *serial)
        struct usb_serial_port *port;
        struct option_port_private *portdata;
 
-       dbg("%s", __FUNCTION__);
+       dbg("%s", __func__);
 
        /* Stop reading/writing urbs */
        for (i = 0; i < serial->num_ports; ++i) {