The new usb_control_msg_send() nicely wraps usb_control_msg() with proper error check. Hence use the wrapper instead of calling usb_control_msg() directly. Signed-off-by: Himadri Pandya <himadrispandya@xxxxxxxxx> --- drivers/usb/serial/ipw.c | 107 +++++++++++++-------------------------- 1 file changed, 36 insertions(+), 71 deletions(-) diff --git a/drivers/usb/serial/ipw.c b/drivers/usb/serial/ipw.c index d04c7cc5c1c2..3c3895b4dff8 100644 --- a/drivers/usb/serial/ipw.c +++ b/drivers/usb/serial/ipw.c @@ -134,26 +134,16 @@ static int ipw_open(struct tty_struct *tty, struct usb_serial_port *port) struct usb_device *udev = port->serial->dev; struct device *dev = &port->dev; u8 buf_flow_static[16] = IPW_BYTES_FLOWINIT; - u8 *buf_flow_init; int result; - buf_flow_init = kmemdup(buf_flow_static, 16, GFP_KERNEL); - if (!buf_flow_init) - return -ENOMEM; - /* --1: Tell the modem to initialize (we think) From sniffs this is * always the first thing that gets sent to the modem during * opening of the device */ dev_dbg(dev, "%s: Sending SIO_INIT (we guess)\n", __func__); - result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), - IPW_SIO_INIT, - USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_OUT, - 0, - 0, /* index */ - NULL, - 0, - 100000); - if (result < 0) + result = usb_control_msg_send(udev, 0, IPW_SIO_INIT, USB_TYPE_VENDOR | + USB_RECIP_INTERFACE | USB_DIR_OUT, 0, + 0, NULL, 0, 100000, GFP_KERNEL); + if (result) dev_err(dev, "Init of modem failed (error = %d)\n", result); /* reset the bulk pipes */ @@ -166,31 +156,22 @@ static int ipw_open(struct tty_struct *tty, struct usb_serial_port *port) /*--3: Tell the modem to open the floodgates on the rx bulk channel */ dev_dbg(dev, "%s:asking modem for RxRead (RXBULK_ON)\n", __func__); - result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), - IPW_SIO_RXCTL, - USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_OUT, - IPW_RXBULK_ON, - 0, /* index */ - NULL, - 0, - 100000); - if (result < 0) + result = usb_control_msg_send(udev, 0, IPW_SIO_RXCTL, USB_TYPE_VENDOR | + USB_RECIP_INTERFACE | USB_DIR_OUT, + IPW_RXBULK_ON, 0, NULL, 0, 100000, + GFP_KERNEL); + if (result) dev_err(dev, "Enabling bulk RxRead failed (error = %d)\n", result); /*--4: setup the initial flowcontrol */ - dev_dbg(dev, "%s:setting init flowcontrol (%s)\n", __func__, buf_flow_init); - result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), - IPW_SIO_HANDFLOW, - USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_OUT, - 0, - 0, - buf_flow_init, - 0x10, - 200000); - if (result < 0) + dev_dbg(dev, "%s:setting init flowcontrol (%s)\n", __func__, buf_flow_static); + result = usb_control_msg_send(udev, 0, IPW_SIO_HANDFLOW, + USB_TYPE_VENDOR | USB_RECIP_INTERFACE | + USB_DIR_OUT, 0, 0, &buf_flow_static, 0x10, + 200000, GFP_KERNEL); + if (result) dev_err(dev, "initial flowcontrol failed (error = %d)\n", result); - kfree(buf_flow_init); return 0; } @@ -223,26 +204,20 @@ static void ipw_dtr_rts(struct usb_serial_port *port, int on) dev_dbg(dev, "%s: on = %d\n", __func__, on); - result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), - IPW_SIO_SET_PIN, - USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_OUT, - on ? IPW_PIN_SETDTR : IPW_PIN_CLRDTR, - 0, - NULL, - 0, - 200000); - if (result < 0) + result = usb_control_msg_send(udev, 0, IPW_SIO_SET_PIN, + USB_TYPE_VENDOR | USB_RECIP_INTERFACE | + USB_DIR_OUT, + on ? IPW_PIN_SETDTR : IPW_PIN_CLRDTR, 0, + NULL, 0, 200000, GFP_KERNEL); + if (result) dev_err(dev, "setting dtr failed (error = %d)\n", result); - result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), - IPW_SIO_SET_PIN, USB_TYPE_VENDOR | - USB_RECIP_INTERFACE | USB_DIR_OUT, - on ? IPW_PIN_SETRTS : IPW_PIN_CLRRTS, - 0, - NULL, - 0, - 200000); - if (result < 0) + result = usb_control_msg_send(udev, 0, IPW_SIO_SET_PIN, + USB_TYPE_VENDOR | USB_RECIP_INTERFACE | + USB_DIR_OUT, + on ? IPW_PIN_SETRTS : IPW_PIN_CLRRTS, + 0, NULL, 0, 200000, GFP_KERNEL); + if (result) dev_err(dev, "setting rts failed (error = %d)\n", result); } @@ -254,30 +229,20 @@ static void ipw_close(struct usb_serial_port *port) /*--3: purge */ dev_dbg(dev, "%s:sending purge\n", __func__); - result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), - IPW_SIO_PURGE, USB_TYPE_VENDOR | - USB_RECIP_INTERFACE | USB_DIR_OUT, - 0x03, - 0, - NULL, - 0, - 200000); - if (result < 0) + result = usb_control_msg_send(udev, 0, IPW_SIO_PURGE, USB_TYPE_VENDOR | + USB_RECIP_INTERFACE | USB_DIR_OUT, 0x03, + 0, NULL, 0, 200000, GFP_KERNEL); + if (result) dev_err(dev, "purge failed (error = %d)\n", result); /* send RXBULK_off (tell modem to stop transmitting bulk data on rx chan) */ - result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), - IPW_SIO_RXCTL, - USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_OUT, - IPW_RXBULK_OFF, - 0, /* index */ - NULL, - 0, - 100000); - - if (result < 0) + result = usb_control_msg_send(udev, 0, IPW_SIO_RXCTL, USB_TYPE_VENDOR | + USB_RECIP_INTERFACE | USB_DIR_OUT, + IPW_RXBULK_OFF, 0, NULL, 0, 100000, GFP_KERNEL); + + if (result) dev_err(dev, "Disabling bulk RxRead failed (error = %d)\n", result); usb_wwan_close(port); -- 2.17.1