diff options
Diffstat (limited to 'drivers/usb/serial/ftdi_sio.c')
-rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 1ab2a6191013..77ef4c481f3c 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
@@ -1783,6 +1783,10 @@ static int ftdi_set_bitmode(struct usb_serial_port *port, u8 mode) | |||
1783 | int result; | 1783 | int result; |
1784 | u16 val; | 1784 | u16 val; |
1785 | 1785 | ||
1786 | result = usb_autopm_get_interface(serial->interface); | ||
1787 | if (result) | ||
1788 | return result; | ||
1789 | |||
1786 | val = (mode << 8) | (priv->gpio_output << 4) | priv->gpio_value; | 1790 | val = (mode << 8) | (priv->gpio_output << 4) | priv->gpio_value; |
1787 | result = usb_control_msg(serial->dev, | 1791 | result = usb_control_msg(serial->dev, |
1788 | usb_sndctrlpipe(serial->dev, 0), | 1792 | usb_sndctrlpipe(serial->dev, 0), |
@@ -1795,6 +1799,8 @@ static int ftdi_set_bitmode(struct usb_serial_port *port, u8 mode) | |||
1795 | val, result); | 1799 | val, result); |
1796 | } | 1800 | } |
1797 | 1801 | ||
1802 | usb_autopm_put_interface(serial->interface); | ||
1803 | |||
1798 | return result; | 1804 | return result; |
1799 | } | 1805 | } |
1800 | 1806 | ||
@@ -1846,9 +1852,15 @@ static int ftdi_read_cbus_pins(struct usb_serial_port *port) | |||
1846 | unsigned char *buf; | 1852 | unsigned char *buf; |
1847 | int result; | 1853 | int result; |
1848 | 1854 | ||
1855 | result = usb_autopm_get_interface(serial->interface); | ||
1856 | if (result) | ||
1857 | return result; | ||
1858 | |||
1849 | buf = kmalloc(1, GFP_KERNEL); | 1859 | buf = kmalloc(1, GFP_KERNEL); |
1850 | if (!buf) | 1860 | if (!buf) { |
1861 | usb_autopm_put_interface(serial->interface); | ||
1851 | return -ENOMEM; | 1862 | return -ENOMEM; |
1863 | } | ||
1852 | 1864 | ||
1853 | result = usb_control_msg(serial->dev, | 1865 | result = usb_control_msg(serial->dev, |
1854 | usb_rcvctrlpipe(serial->dev, 0), | 1866 | usb_rcvctrlpipe(serial->dev, 0), |
@@ -1863,6 +1875,7 @@ static int ftdi_read_cbus_pins(struct usb_serial_port *port) | |||
1863 | } | 1875 | } |
1864 | 1876 | ||
1865 | kfree(buf); | 1877 | kfree(buf); |
1878 | usb_autopm_put_interface(serial->interface); | ||
1866 | 1879 | ||
1867 | return result; | 1880 | return result; |
1868 | } | 1881 | } |