On Thu, Sep 25, 2003 at 08:15:33PM -0700, Neil Whelchel wrote:
> Hello,
> This patch adds support for interrupt_out to match the existing
> interrupt_in support in usb-serial. I thought that it would be cleaner in
> the long run to have the support here as to reproducing similar
> functionality in (possibly many) other places.
> It also adds a few more debugging messages, and makes a few existing ones
> more specific. (I needed them for writing a driver, it is likely someone
> else might need them under similar conditions.)

Looks good, but I have a few minor comments:

> @@ -1026,14 +1043,16 @@
> 
>         /* descriptor matches, let's find the endpoints needed */
>         /* check out the endpoints */
> +       dbg("checking for endpoints");
>         iface_desc = &interface->altsetting[0];
> +       dbg("this device claims to have %d 
> endpoints",iface_desc->desc.bNumEndpoints);

I don't think the first new dbg() line needs to be there, as the second
one will tell us this.

>         for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
>                 endpoint = &iface_desc->endpoint[i].desc;
> 
>                 if ((endpoint->bEndpointAddress & 0x80) &&
>                     ((endpoint->bmAttributes & 3) == 0x02)) {
>                         /* we found a bulk in endpoint */
> -                       dbg("found bulk in");
> +                       dbg("found bulk in on endpoint %d",i);

Ah, that's a nice change, thanks.

>         }
> -
> +       dbg("found %d bulk_in, %d bulk_out, %d interrupt_in %d interrupt_out", 
> num_bulk_in, num_bulk_out, num_interrupt_in, num_interrupt_out);
>  #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
>         /* BEGIN HORRIBLE HACK FOR PL2303 */
>         /* this is needed due to the looney way its endpoints are set up */

Keep an extra line after the dbg() comment here please.

> +       for (i = 0; i < num_interrupt_out; ++i) {
> +               endpoint = interrupt_out_endpoint[i];
> +               port = serial->port[i];
> +               port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
> +               if (!port->interrupt_out_urb) {
> +                       dev_err(&interface->dev, "No free urbs available\n");
> +                       goto probe_error;
> +               }
> +               buffer_size = endpoint->wMaxPacketSize;
> +               port->interrupt_out_size = buffer_size;
> +               port->interrupt_out_endpointAddress = endpoint->bEndpointAddress;
> +               port->interrupt_out_buffer = kmalloc (buffer_size, GFP_KERNEL);
> +               if (!port->interrupt_out_buffer) {
> +                       dev_err(&interface->dev, "Couldn't allocate 
> interrupt_out_buffer\n");
> +                       goto probe_error;
> +               }
> +               usb_fill_int_urb (port->interrupt_out_urb, dev,
> +                                  usb_sndintpipe (dev,
> +                                                   endpoint->bEndpointAddress),
> +                                  port->interrupt_out_buffer, buffer_size,
> +                                  serial->type->write_int_callback, port,
> +                                  endpoint->bInterval);
> +       }
> +
> +
> +

Hm, so what happens if the driver does not define a write_int_callback
function?  We don't provide a default one, so it might be pretty easy to
oops a driver this way.  Care to provide a default dummy one?

> @@ -193,6 +202,8 @@
>   *     of the devices this structure can support.
>   * @num_interrupt_in: the number of interrupt in endpoints this device will
>   *     have.
> + * @num_interrupt_out: the number of interrupt out endpoints this device will
> + *     have.
>   * @num_bulk_in: the number of bulk in endpoints this device will have.
>   * @num_bulk_out: the number of bulk out endpoints this device will have.
>   * @num_ports: the number of different ports this device will have.
> @@ -225,6 +236,7 @@
>         char    *short_name;
>         const struct usb_device_id *id_table;
>         char    num_interrupt_in;
> +       char    num_interrupt_out;

I don't think you use this, right?  Hm, looks like we don't use the
num_interrupt_in field either.  I guess I could remove those, for some
reason I thought I did in the past...

thanks,

greg k-h


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to