diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-20 14:26:30 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-20 14:26:30 -0400 |
commit | ed378a52dabf77b406b447fd3238f83ea24b71fa (patch) | |
tree | 07e1a7ec2d1c08767ee81b9910f5912b80502632 /drivers/usb/class/cdc-acm.c | |
parent | 843ec558f91b8e8fdb6efc908f2c0506407cc750 (diff) | |
parent | 11207b6fe05438b2e87a26435cd98db3d55e6fa7 (diff) |
Merge tag 'usb-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB merge for 3.4-rc1 from Greg KH:
"Here's the big USB merge for the 3.4-rc1 merge window.
Lots of gadget driver reworks here, driver updates, xhci changes, some
new drivers added, usb-serial core reworking to fix some bugs, and
other various minor things.
There are some patches touching arch code, but they have all been
acked by the various arch maintainers."
* tag 'usb-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (302 commits)
net: qmi_wwan: add support for ZTE MF820D
USB: option: add ZTE MF820D
usb: gadget: f_fs: Remove lock is held before freeing checks
USB: option: make interface blacklist work again
usb/ub: deprecate & schedule for removal the "Low Performance USB Block" driver
USB: ohci-pxa27x: add clk_prepare/clk_unprepare calls
USB: use generic platform driver on ath79
USB: EHCI: Add a generic platform device driver
USB: OHCI: Add a generic platform device driver
USB: ftdi_sio: new PID: LUMEL PD12
USB: ftdi_sio: add support for FT-X series devices
USB: serial: mos7840: Fixed MCS7820 device attach problem
usb: Don't make USB_ARCH_HAS_{XHCI,OHCI,EHCI} depend on USB_SUPPORT.
usb gadget: fix a section mismatch when compiling g_ffs with CONFIG_USB_FUNCTIONFS_ETH
USB: ohci-nxp: Remove i2c_write(), use smbus
USB: ohci-nxp: Support for LPC32xx
USB: ohci-nxp: Rename symbols from pnx4008 to nxp
USB: OHCI-HCD: Rename ohci-pnx4008 to ohci-nxp
usb: gadget: Kconfig: fix typo for 'different'
usb: dwc3: pci: fix another failure path in dwc3_pci_probe()
...
Diffstat (limited to 'drivers/usb/class/cdc-acm.c')
-rw-r--r-- | drivers/usb/class/cdc-acm.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index 6bb8472155c6..b32ccb461019 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #include <linux/serial.h> | 39 | #include <linux/serial.h> |
40 | #include <linux/tty_driver.h> | 40 | #include <linux/tty_driver.h> |
41 | #include <linux/tty_flip.h> | 41 | #include <linux/tty_flip.h> |
42 | #include <linux/serial.h> | ||
42 | #include <linux/module.h> | 43 | #include <linux/module.h> |
43 | #include <linux/mutex.h> | 44 | #include <linux/mutex.h> |
44 | #include <linux/uaccess.h> | 45 | #include <linux/uaccess.h> |
@@ -768,10 +769,37 @@ static int acm_tty_tiocmset(struct tty_struct *tty, | |||
768 | return acm_set_control(acm, acm->ctrlout = newctrl); | 769 | return acm_set_control(acm, acm->ctrlout = newctrl); |
769 | } | 770 | } |
770 | 771 | ||
772 | static int get_serial_info(struct acm *acm, struct serial_struct __user *info) | ||
773 | { | ||
774 | struct serial_struct tmp; | ||
775 | |||
776 | if (!info) | ||
777 | return -EINVAL; | ||
778 | |||
779 | memset(&tmp, 0, sizeof(tmp)); | ||
780 | tmp.flags = ASYNC_LOW_LATENCY; | ||
781 | tmp.xmit_fifo_size = acm->writesize; | ||
782 | tmp.baud_base = le32_to_cpu(acm->line.dwDTERate); | ||
783 | |||
784 | if (copy_to_user(info, &tmp, sizeof(tmp))) | ||
785 | return -EFAULT; | ||
786 | else | ||
787 | return 0; | ||
788 | } | ||
789 | |||
771 | static int acm_tty_ioctl(struct tty_struct *tty, | 790 | static int acm_tty_ioctl(struct tty_struct *tty, |
772 | unsigned int cmd, unsigned long arg) | 791 | unsigned int cmd, unsigned long arg) |
773 | { | 792 | { |
774 | return -ENOIOCTLCMD; | 793 | struct acm *acm = tty->driver_data; |
794 | int rv = -ENOIOCTLCMD; | ||
795 | |||
796 | switch (cmd) { | ||
797 | case TIOCGSERIAL: /* gets serial port data */ | ||
798 | rv = get_serial_info(acm, (struct serial_struct __user *) arg); | ||
799 | break; | ||
800 | } | ||
801 | |||
802 | return rv; | ||
775 | } | 803 | } |
776 | 804 | ||
777 | static const __u32 acm_tty_speed[] = { | 805 | static const __u32 acm_tty_speed[] = { |