]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/usb/serial/oti6858.c
keyspan: use request_firmware()
[linux-2.6-omap-h63xx.git] / drivers / usb / serial / oti6858.c
index a3847d6c946eac309fe899b8698cdb34bbe29276..a9625c180dc3502206d2d967224a1d6ea31d2bf5 100644 (file)
@@ -98,7 +98,7 @@ struct oti6858_buf {
 
 /* format of the control packet */
 struct oti6858_control_pkt {
-       u16     divisor;        /* baud rate = 96000000 / (16 * divisor), LE */
+       __le16  divisor;        /* baud rate = 96000000 / (16 * divisor), LE */
 #define OTI6858_MAX_BAUD_RATE  3000000
        u8      frame_fmt;
 #define FMT_STOP_BITS_MASK     0xc0
@@ -179,9 +179,6 @@ static struct usb_serial_driver oti6858_device = {
                .name =         "oti6858",
        },
        .id_table =             id_table,
-       .num_interrupt_in =     1,
-       .num_bulk_in =          1,
-       .num_bulk_out =         1,
        .num_ports =            1,
        .open =                 oti6858_open,
        .close =                oti6858_close,
@@ -214,7 +211,7 @@ struct oti6858_private {
        struct delayed_work delayed_write_work;
 
        struct {
-               u16 divisor;
+               __le16 divisor;
                u8 frame_fmt;
                u8 control;
        } pending_setup;
@@ -238,10 +235,10 @@ static void setup_line(struct work_struct *work)
        unsigned long flags;
        int result;
 
-       dbg("%s(port = %d)", __FUNCTION__, port->number);
+       dbg("%s(port = %d)", __func__, port->number);
 
        if ((new_setup = kmalloc(OTI6858_CTRL_PKT_SIZE, GFP_KERNEL)) == NULL) {
-               dev_err(&port->dev, "%s(): out of memory!\n", __FUNCTION__);
+               dev_err(&port->dev, "%s(): out of memory!\n", __func__);
                /* we will try again */
                schedule_delayed_work(&priv->delayed_setup_work, msecs_to_jiffies(2));
                return;
@@ -256,7 +253,7 @@ static void setup_line(struct work_struct *work)
                                100);
 
        if (result != OTI6858_CTRL_PKT_SIZE) {
-               dev_err(&port->dev, "%s(): error reading status\n", __FUNCTION__);
+               dev_err(&port->dev, "%s(): error reading status\n", __func__);
                kfree(new_setup);
                /* we will try again */
                schedule_delayed_work(&priv->delayed_setup_work, msecs_to_jiffies(2));
@@ -289,12 +286,12 @@ static void setup_line(struct work_struct *work)
        priv->setup_done = 1;
        spin_unlock_irqrestore(&priv->lock, flags);
 
-       dbg("%s(): submitting interrupt urb", __FUNCTION__);
+       dbg("%s(): submitting interrupt urb", __func__);
        port->interrupt_in_urb->dev = port->serial->dev;
        result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
        if (result != 0) {
                dev_err(&port->dev, "%s(): usb_submit_urb() failed"
-                               " with error %d\n", __FUNCTION__, result);
+                               " with error %d\n", __func__, result);
        }
 }
 
@@ -306,7 +303,7 @@ void send_data(struct work_struct *work)
        unsigned long flags;
        unsigned char allow;
 
-       dbg("%s(port = %d)", __FUNCTION__, port->number);
+       dbg("%s(port = %d)", __func__, port->number);
 
        spin_lock_irqsave(&priv->lock, flags);
        if (priv->flags.write_urb_in_use) {
@@ -334,12 +331,12 @@ void send_data(struct work_struct *work)
        if (count == 0) {
                priv->flags.write_urb_in_use = 0;
 
-               dbg("%s(): submitting interrupt urb", __FUNCTION__);
+               dbg("%s(): submitting interrupt urb", __func__);
                port->interrupt_in_urb->dev = port->serial->dev;
                result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
                if (result != 0) {
                        dev_err(&port->dev, "%s(): usb_submit_urb() failed"
-                               " with error %d\n", __FUNCTION__, result);
+                               " with error %d\n", __func__, result);
                }
                return;
        }
@@ -353,7 +350,7 @@ void send_data(struct work_struct *work)
        result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
        if (result != 0) {
                dev_err(&port->dev, "%s(): usb_submit_urb() failed"
-                              " with error %d\n", __FUNCTION__, result);
+                              " with error %d\n", __func__, result);
                priv->flags.write_urb_in_use = 0;
        }
 
@@ -404,7 +401,7 @@ static int oti6858_write(struct usb_serial_port *port,
        struct oti6858_private *priv = usb_get_serial_port_data(port);
        unsigned long flags;
 
-       dbg("%s(port = %d, count = %d)", __FUNCTION__, port->number, count);
+       dbg("%s(port = %d, count = %d)", __func__, port->number, count);
 
        if (!count)
                return count;
@@ -422,7 +419,7 @@ static int oti6858_write_room(struct usb_serial_port *port)
        int room = 0;
        unsigned long flags;
 
-       dbg("%s(port = %d)", __FUNCTION__, port->number);
+       dbg("%s(port = %d)", __func__, port->number);
 
        spin_lock_irqsave(&priv->lock, flags);
        room = oti6858_buf_space_avail(priv->buf);
@@ -437,7 +434,7 @@ static int oti6858_chars_in_buffer(struct usb_serial_port *port)
        int chars = 0;
        unsigned long flags;
 
-       dbg("%s(port = %d)", __FUNCTION__, port->number);
+       dbg("%s(port = %d)", __func__, port->number);
 
        spin_lock_irqsave(&priv->lock, flags);
        chars = oti6858_buf_data_avail(priv->buf);
@@ -453,13 +450,13 @@ static void oti6858_set_termios(struct usb_serial_port *port,
        unsigned long flags;
        unsigned int cflag;
        u8 frame_fmt, control;
-       u16 divisor;
+       __le16 divisor;
        int br;
 
-       dbg("%s(port = %d)", __FUNCTION__, port->number);
+       dbg("%s(port = %d)", __func__, port->number);
 
        if (!port->tty || !port->tty->termios) {
-               dbg("%s(): no tty structures", __FUNCTION__);
+               dbg("%s(): no tty structures", __func__);
                return;
        }
 
@@ -508,11 +505,12 @@ static void oti6858_set_termios(struct usb_serial_port *port,
                divisor = 0;
        } else {
                int real_br;
+               int new_divisor;
                br = min(br, OTI6858_MAX_BAUD_RATE);
 
-               divisor = (96000000 + 8 * br) / (16 * br);
-               real_br = 96000000 / (16 * divisor);
-               divisor = cpu_to_le16(divisor);
+               new_divisor = (96000000 + 8 * br) / (16 * br);
+               real_br = 96000000 / (16 * new_divisor);
+               divisor = cpu_to_le16(new_divisor);
                tty_encode_baud_rate(port->tty, real_br, real_br);
        }
 
@@ -575,7 +573,7 @@ static int oti6858_open(struct usb_serial_port *port, struct file *filp)
        unsigned long flags;
        int result;
 
-       dbg("%s(port = %d)", __FUNCTION__, port->number);
+       dbg("%s(port = %d)", __func__, port->number);
 
        usb_clear_halt(serial->dev, port->write_urb->pipe);
        usb_clear_halt(serial->dev, port->read_urb->pipe);
@@ -584,7 +582,7 @@ static int oti6858_open(struct usb_serial_port *port, struct file *filp)
                return 0;
 
        if ((buf = kmalloc(OTI6858_CTRL_PKT_SIZE, GFP_KERNEL)) == NULL) {
-               dev_err(&port->dev, "%s(): out of memory!\n", __FUNCTION__);
+               dev_err(&port->dev, "%s(): out of memory!\n", __func__);
                return -ENOMEM;
        }
 
@@ -613,12 +611,12 @@ static int oti6858_open(struct usb_serial_port *port, struct file *filp)
        spin_unlock_irqrestore(&priv->lock, flags);
        kfree(buf);
 
-       dbg("%s(): submitting interrupt urb", __FUNCTION__);
+       dbg("%s(): submitting interrupt urb", __func__);
        port->interrupt_in_urb->dev = serial->dev;
        result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
        if (result != 0) {
                dev_err(&port->dev, "%s(): usb_submit_urb() failed"
-                              " with error %d\n", __FUNCTION__, result);
+                              " with error %d\n", __func__, result);
                oti6858_close(port, NULL);
                return -EPROTO;
        }
@@ -637,14 +635,14 @@ static void oti6858_close(struct usb_serial_port *port, struct file *filp)
        long timeout;
        wait_queue_t wait;
 
-       dbg("%s(port = %d)", __FUNCTION__, port->number);
+       dbg("%s(port = %d)", __func__, port->number);
 
        /* wait for data to drain from the buffer */
        spin_lock_irqsave(&priv->lock, flags);
        timeout = 30 * HZ;      /* PL2303_CLOSING_WAIT */
        init_waitqueue_entry(&wait, current);
        add_wait_queue(&port->tty->write_wait, &wait);
-       dbg("%s(): entering wait loop", __FUNCTION__);
+       dbg("%s(): entering wait loop", __func__);
        for (;;) {
                set_current_state(TASK_INTERRUPTIBLE);
                if (oti6858_buf_data_avail(priv->buf) == 0
@@ -657,7 +655,7 @@ static void oti6858_close(struct usb_serial_port *port, struct file *filp)
        }
        set_current_state(TASK_RUNNING);
        remove_wait_queue(&port->tty->write_wait, &wait);
-       dbg("%s(): after wait loop", __FUNCTION__);
+       dbg("%s(): after wait loop", __func__);
 
        /* clear out any remaining data in the buffer */
        oti6858_buf_clear(priv->buf);
@@ -678,7 +676,7 @@ static void oti6858_close(struct usb_serial_port *port, struct file *filp)
        */
                timeout = 2*HZ;
        schedule_timeout_interruptible(timeout);
-       dbg("%s(): after schedule_timeout_interruptible()", __FUNCTION__);
+       dbg("%s(): after schedule_timeout_interruptible()", __func__);
 
        /* cancel scheduled setup */
        cancel_delayed_work(&priv->delayed_setup_work);
@@ -686,7 +684,7 @@ static void oti6858_close(struct usb_serial_port *port, struct file *filp)
        flush_scheduled_work();
 
        /* shutdown our urbs */
-       dbg("%s(): shutting down urbs", __FUNCTION__);
+       dbg("%s(): shutting down urbs", __func__);
        usb_kill_urb(port->write_urb);
        usb_kill_urb(port->read_urb);
        usb_kill_urb(port->interrupt_in_urb);
@@ -709,7 +707,7 @@ static int oti6858_tiocmset(struct usb_serial_port *port, struct file *file,
        u8 control;
 
        dbg("%s(port = %d, set = 0x%08x, clear = 0x%08x)",
-                               __FUNCTION__, port->number, set, clear);
+                               __func__, port->number, set, clear);
 
        if (!usb_get_intfdata(port->serial->interface))
                return -ENODEV;
@@ -741,7 +739,7 @@ static int oti6858_tiocmget(struct usb_serial_port *port, struct file *file)
        unsigned pin_state;
        unsigned result = 0;
 
-       dbg("%s(port = %d)", __FUNCTION__, port->number);
+       dbg("%s(port = %d)", __func__, port->number);
 
        if (!usb_get_intfdata(port->serial->interface))
                return -ENODEV;
@@ -764,7 +762,7 @@ static int oti6858_tiocmget(struct usb_serial_port *port, struct file *file)
        if ((pin_state & PIN_DCD) != 0)
                result |= TIOCM_CD;
 
-       dbg("%s() = 0x%08x", __FUNCTION__, result);
+       dbg("%s() = 0x%08x", __func__, result);
 
        return result;
 }
@@ -811,13 +809,9 @@ static int oti6858_ioctl(struct usb_serial_port *port, struct file *file,
        unsigned int x;
 
        dbg("%s(port = %d, cmd = 0x%04x, arg = 0x%08lx)",
-                               __FUNCTION__, port->number, cmd, arg);
+                               __func__, port->number, cmd, arg);
 
        switch (cmd) {
-               case TCFLSH:
-                       /* FIXME */
-                       return 0;
-
                case TIOCMBIS:
                        if (copy_from_user(&x, user_arg, sizeof(x)))
                                return -EFAULT;
@@ -829,11 +823,11 @@ static int oti6858_ioctl(struct usb_serial_port *port, struct file *file,
                        return oti6858_tiocmset(port, NULL, 0, x);
 
                case TIOCMIWAIT:
-                       dbg("%s(): TIOCMIWAIT", __FUNCTION__);
+                       dbg("%s(): TIOCMIWAIT", __func__);
                        return wait_modem_info(port, arg);
 
                default:
-                       dbg("%s(): 0x%04x not supported", __FUNCTION__, cmd);
+                       dbg("%s(): 0x%04x not supported", __func__, cmd);
                        break;
        }
 
@@ -844,10 +838,10 @@ static void oti6858_break_ctl(struct usb_serial_port *port, int break_state)
 {
        int state;
 
-       dbg("%s(port = %d)", __FUNCTION__, port->number);
+       dbg("%s(port = %d)", __func__, port->number);
 
        state = (break_state == 0) ? 0 : 1;
-       dbg("%s(): turning break %s", __FUNCTION__, state ? "on" : "off");
+       dbg("%s(): turning break %s", __func__, state ? "on" : "off");
 
        /* FIXME */
 /*
@@ -855,7 +849,7 @@ static void oti6858_break_ctl(struct usb_serial_port *port, int break_state)
                                  BREAK_REQUEST, BREAK_REQUEST_TYPE, state,
                                  0, NULL, 0, 100);
        if (result != 0)
-               dbg("%s(): error sending break", __FUNCTION__);
+               dbg("%s(): error sending break", __func__);
  */
 }
 
@@ -864,7 +858,7 @@ static void oti6858_shutdown(struct usb_serial *serial)
        struct oti6858_private *priv;
        int i;
 
-       dbg("%s()", __FUNCTION__);
+       dbg("%s()", __func__);
 
        for (i = 0; i < serial->num_ports; ++i) {
                priv = usb_get_serial_port_data(serial->port[i]);
@@ -878,13 +872,13 @@ static void oti6858_shutdown(struct usb_serial *serial)
 
 static void oti6858_read_int_callback(struct urb *urb)
 {
-       struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
+       struct usb_serial_port *port =  urb->context;
        struct oti6858_private *priv = usb_get_serial_port_data(port);
        int transient = 0, can_recv = 0, resubmit = 1;
        int status = urb->status;
 
        dbg("%s(port = %d, status = %d)",
-                               __FUNCTION__, port->number, status);
+                               __func__, port->number, status);
 
        switch (status) {
        case 0:
@@ -895,11 +889,11 @@ static void oti6858_read_int_callback(struct urb *urb)
        case -ESHUTDOWN:
                /* this urb is terminated, clean up */
                dbg("%s(): urb shutting down with status: %d",
-                                       __FUNCTION__, status);
+                                       __func__, status);
                return;
        default:
                dbg("%s(): nonzero urb status received: %d",
-                                       __FUNCTION__, status);
+                                       __func__, status);
                break;
        }
 
@@ -916,7 +910,7 @@ static void oti6858_read_int_callback(struct urb *urb)
                                        priv->setup_done = 0;
                                        resubmit = 0;
                                        dbg("%s(): scheduling setup_line()",
-                                           __FUNCTION__);
+                                           __func__);
                                        schedule_delayed_work(&priv->delayed_setup_work, 0);
                                }
                        }
@@ -931,7 +925,7 @@ static void oti6858_read_int_callback(struct urb *urb)
                                        priv->setup_done = 0;
                                        resubmit = 0;
                                        dbg("%s(): scheduling setup_line()",
-                                           __FUNCTION__);
+                                           __func__);
                                        schedule_delayed_work(&priv->delayed_setup_work, 0);
                                }
                        }
@@ -960,7 +954,7 @@ static void oti6858_read_int_callback(struct urb *urb)
                if (result != 0) {
                        priv->flags.read_urb_in_use = 0;
                        dev_err(&port->dev, "%s(): usb_submit_urb() failed,"
-                                       " error %d\n", __FUNCTION__, result);
+                                       " error %d\n", __func__, result);
                } else {
                        resubmit = 0;
                }
@@ -979,20 +973,20 @@ static void oti6858_read_int_callback(struct urb *urb)
        if (resubmit) {
                int result;
 
-//             dbg("%s(): submitting interrupt urb", __FUNCTION__);
+//             dbg("%s(): submitting interrupt urb", __func__);
                urb->dev = port->serial->dev;
                result = usb_submit_urb(urb, GFP_ATOMIC);
                if (result != 0) {
                        dev_err(&urb->dev->dev,
                                        "%s(): usb_submit_urb() failed with"
-                                       " error %d\n", __FUNCTION__, result);
+                                       " error %d\n", __func__, result);
                }
        }
 }
 
 static void oti6858_read_bulk_callback(struct urb *urb)
 {
-       struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
+       struct usb_serial_port *port =  urb->context;
        struct oti6858_private *priv = usb_get_serial_port_data(port);
        struct tty_struct *tty;
        unsigned char *data = urb->transfer_buffer;
@@ -1001,7 +995,7 @@ static void oti6858_read_bulk_callback(struct urb *urb)
        int result;
 
        dbg("%s(port = %d, status = %d)",
-                               __FUNCTION__, port->number, status);
+                               __func__, port->number, status);
 
        spin_lock_irqsave(&priv->lock, flags);
        priv->flags.read_urb_in_use = 0;
@@ -1009,20 +1003,20 @@ static void oti6858_read_bulk_callback(struct urb *urb)
 
        if (status != 0) {
                if (!port->open_count) {
-                       dbg("%s(): port is closed, exiting", __FUNCTION__);
+                       dbg("%s(): port is closed, exiting", __func__);
                        return;
                }
                /*
                if (status == -EPROTO) {
                        // PL2303 mysteriously fails with -EPROTO reschedule the read
-                       dbg("%s - caught -EPROTO, resubmitting the urb", __FUNCTION__);
+                       dbg("%s - caught -EPROTO, resubmitting the urb", __func__);
                        result = usb_submit_urb(urb, GFP_ATOMIC);
                        if (result)
-                               dev_err(&urb->dev->dev, "%s - failed resubmitting read urb, error %d\n", __FUNCTION__, result);
+                               dev_err(&urb->dev->dev, "%s - failed resubmitting read urb, error %d\n", __func__, result);
                        return;
                }
                */
-               dbg("%s(): unable to handle the error, exiting", __FUNCTION__);
+               dbg("%s(): unable to handle the error, exiting", __func__);
                return;
        }
 
@@ -1038,20 +1032,20 @@ static void oti6858_read_bulk_callback(struct urb *urb)
                result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
                if (result != 0) {
                        dev_err(&port->dev, "%s(): usb_submit_urb() failed,"
-                                       " error %d\n", __FUNCTION__, result);
+                                       " error %d\n", __func__, result);
                }
        }
 }
 
 static void oti6858_write_bulk_callback(struct urb *urb)
 {
-       struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
+       struct usb_serial_port *port =  urb->context;
        struct oti6858_private *priv = usb_get_serial_port_data(port);
        int status = urb->status;
        int result;
 
        dbg("%s(port = %d, status = %d)",
-                               __FUNCTION__, port->number, status);
+                               __func__, port->number, status);
 
        switch (status) {
        case 0:
@@ -1062,21 +1056,21 @@ static void oti6858_write_bulk_callback(struct urb *urb)
        case -ESHUTDOWN:
                /* this urb is terminated, clean up */
                dbg("%s(): urb shutting down with status: %d",
-                                       __FUNCTION__, status);
+                                       __func__, status);
                priv->flags.write_urb_in_use = 0;
                return;
        default:
                /* error in the urb, so we have to resubmit it */
                dbg("%s(): nonzero write bulk status received: %d",
-                                       __FUNCTION__, status);
-               dbg("%s(): overflow in write", __FUNCTION__);
+                                       __func__, status);
+               dbg("%s(): overflow in write", __func__);
 
                port->write_urb->transfer_buffer_length = 1;
                port->write_urb->dev = port->serial->dev;
                result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
                if (result) {
                        dev_err(&port->dev, "%s(): usb_submit_urb() failed,"
-                                       " error %d\n", __FUNCTION__, result);
+                                       " error %d\n", __func__, result);
                } else {
                        return;
                }
@@ -1086,11 +1080,11 @@ static void oti6858_write_bulk_callback(struct urb *urb)
 
        // schedule the interrupt urb if we are still open */
        port->interrupt_in_urb->dev = port->serial->dev;
-       dbg("%s(): submitting interrupt urb", __FUNCTION__);
+       dbg("%s(): submitting interrupt urb", __func__);
        result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
        if (result != 0) {
                dev_err(&port->dev, "%s(): failed submitting int urb,"
-                                       " error %d\n", __FUNCTION__, result);
+                                       " error %d\n", __func__, result);
        }
 }