Hi Dave,

> There's a lot of code motion in the first four patches
> (with no explanation) that seems to be greatly larger than
> the net effect of applying all four patches.
> I did so, just to see the end result, which was a lot more 'reviewable',
> ending up with this..
> 
> 
> diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
> index cf8add9..15097a4 100644
> --- a/drivers/usb/serial/pl2303.c
> +++ b/drivers/usb/serial/pl2303.c
> @@ -310,6 +310,28 @@ static unsigned int pl2303_buf_get(struct pl2303_buf 
> *pb, char *buf,
>       return count;
>  }
>  
> +static int pl2303_vendor_read(__u16 value, __u16 index,
> +             struct usb_serial *serial, unsigned char *buf)
> +{
> +     int res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
> +                     VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE,
> +                     value, index, buf, 1, 100);
> +     dbg("0x%x:0x%x:0x%x:0x%x  %d - %x", VENDOR_READ_REQUEST_TYPE,
> +                     VENDOR_READ_REQUEST, value, index, res, buf[0]);
> +     return res;
> +}
> +
> +static int pl2303_vendor_write(__u16 value, __u16 index,
> +             struct usb_serial *serial)
> +{
> +     int res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
> +                     VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE,
> +                     value, index, NULL, 0, 100);
> +     dbg("0x%x:0x%x:0x%x:0x%x  %d", VENDOR_WRITE_REQUEST_TYPE,
> +                     VENDOR_WRITE_REQUEST, value, index, res);
> +     return res;
> +}
> +
>  static int pl2303_startup(struct usb_serial *serial)
>  {
>       struct pl2303_private *priv;
> @@ -671,7 +693,7 @@ static int pl2303_open(struct usb_serial_port *port, 
> struct file *filp)
>       struct ktermios tmp_termios;
>       struct usb_serial *serial = port->serial;
>       struct pl2303_private *priv = usb_get_serial_port_data(port);
> -     unsigned char *buf;
> +     unsigned char buf;
>       int result;
>  
>       dbg("%s -  port %d", __FUNCTION__, port->number);
> @@ -681,43 +703,27 @@ static int pl2303_open(struct usb_serial_port *port, 
> struct file *filp)
>               usb_clear_halt(serial->dev, port->read_urb->pipe);
>       }
>  
> -     buf = kmalloc(10, GFP_KERNEL);
> -     if (buf==NULL)
> -             return -ENOMEM;
> -
> -#define FISH(a,b,c,d)                                                        
>         \
> -     result=usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev,0),     
> \
> -                            b, a, c, d, buf, 1, 100);                        
> \
> -     dbg("0x%x:0x%x:0x%x:0x%x  %d - %x",a,b,c,d,result,buf[0]);
> -
> -#define SOUP(a,b,c,d)                                                        
>         \
> -     result=usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev,0),     
> \
> -                            b, a, c, d, NULL, 0, 100);                       
> \
> -     dbg("0x%x:0x%x:0x%x:0x%x  %d",a,b,c,d,result);
> -
> -     FISH (VENDOR_READ_REQUEST_TYPE, VENDOR_READ_REQUEST, 0x8484, 0);
> -     SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 0x0404, 0);
> -     FISH (VENDOR_READ_REQUEST_TYPE, VENDOR_READ_REQUEST, 0x8484, 0);
> -     FISH (VENDOR_READ_REQUEST_TYPE, VENDOR_READ_REQUEST, 0x8383, 0);
> -     FISH (VENDOR_READ_REQUEST_TYPE, VENDOR_READ_REQUEST, 0x8484, 0);
> -     SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 0x0404, 1);
> -     FISH (VENDOR_READ_REQUEST_TYPE, VENDOR_READ_REQUEST, 0x8484, 0);
> -     FISH (VENDOR_READ_REQUEST_TYPE, VENDOR_READ_REQUEST, 0x8383, 0);
> -     SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 0, 1);
> -     SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 1, 0);
> +     pl2303_vendor_read(0x8484, 0, serial, &buf);
> +     pl2303_vendor_write(0x0404, 0, serial);
> +     pl2303_vendor_read(0x8484, 0, serial, &buf);
> +     pl2303_vendor_read(0x8383, 0, serial, &buf);
> +     pl2303_vendor_read(0x8484, 0, serial, &buf);
> +     pl2303_vendor_write(0x0404, 1, serial);
> +     pl2303_vendor_read(0x8484, 0, serial, &buf);
> +     pl2303_vendor_read(0x8383, 0, serial, &buf);
> +     pl2303_vendor_write(0, 1, serial);
> +     pl2303_vendor_write(1, 0, serial);
>  
>       if (priv->type == HX) {
>               /* HX chip */
> -             SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 2, 0x44);
> +             pl2303_vendor_write(2, 0x44, serial);
>               /* reset upstream data pipes */
> -             SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 8, 0);
> -             SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 9, 0);
> +             pl2303_vendor_write(8, 0, serial);
> +             pl2303_vendor_write(9, 0, serial);
>       } else {
> -             SOUP (VENDOR_WRITE_REQUEST_TYPE, VENDOR_WRITE_REQUEST, 2, 0x24);
> +             pl2303_vendor_write(2, 0x24, serial);
>       }
>  
> -     kfree(buf);
> -
>       /* Setup termios */
>       if (port->tty) {
>               pl2303_set_termios(port, &tmp_termios);

patch looks great and the code actually becomes readable now.

> After these changes, pl2303_vendor_read returns an int, and
> we assign it to a char. Is that intentional ? Does it matter?

Can't follow what you mean. The return value of it is never used. The
return value of the URB is assigned via a parameter pointer.

Regards

Marcel


-
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to