hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/usb/serial/mos7720.c
....@@ -284,11 +284,12 @@
284284 * port callback had to be deferred because the disconnect mutex could not be
285285 * obtained at the time.
286286 */
287
-static void send_deferred_urbs(unsigned long _mos_parport)
287
+static void send_deferred_urbs(struct tasklet_struct *t)
288288 {
289289 int ret_val;
290290 unsigned long flags;
291
- struct mos7715_parport *mos_parport = (void *)_mos_parport;
291
+ struct mos7715_parport *mos_parport = from_tasklet(mos_parport, t,
292
+ urb_tasklet);
292293 struct urbtracker *urbtrack, *tmp;
293294 struct list_head *cursor, *next;
294295 struct device *dev;
....@@ -720,8 +721,7 @@
720721 INIT_LIST_HEAD(&mos_parport->deferred_urbs);
721722 usb_set_serial_data(serial, mos_parport); /* hijack private pointer */
722723 mos_parport->serial = serial;
723
- tasklet_init(&mos_parport->urb_tasklet, send_deferred_urbs,
724
- (unsigned long) mos_parport);
724
+ tasklet_setup(&mos_parport->urb_tasklet, send_deferred_urbs);
725725 init_completion(&mos_parport->syncmsg_compl);
726726
727727 /* cycle parallel port reset bit */
....@@ -1792,69 +1792,20 @@
17921792 return 0;
17931793 }
17941794
1795
-static int set_modem_info(struct moschip_port *mos7720_port, unsigned int cmd,
1796
- unsigned int __user *value)
1795
+static int get_serial_info(struct tty_struct *tty,
1796
+ struct serial_struct *ss)
17971797 {
1798
- unsigned int mcr;
1799
- unsigned int arg;
1798
+ struct usb_serial_port *port = tty->driver_data;
1799
+ struct moschip_port *mos7720_port = usb_get_serial_port_data(port);
18001800
1801
- struct usb_serial_port *port;
1802
-
1803
- if (mos7720_port == NULL)
1804
- return -1;
1805
-
1806
- port = (struct usb_serial_port *)mos7720_port->port;
1807
- mcr = mos7720_port->shadowMCR;
1808
-
1809
- if (copy_from_user(&arg, value, sizeof(int)))
1810
- return -EFAULT;
1811
-
1812
- switch (cmd) {
1813
- case TIOCMBIS:
1814
- if (arg & TIOCM_RTS)
1815
- mcr |= UART_MCR_RTS;
1816
- if (arg & TIOCM_DTR)
1817
- mcr |= UART_MCR_RTS;
1818
- if (arg & TIOCM_LOOP)
1819
- mcr |= UART_MCR_LOOP;
1820
- break;
1821
-
1822
- case TIOCMBIC:
1823
- if (arg & TIOCM_RTS)
1824
- mcr &= ~UART_MCR_RTS;
1825
- if (arg & TIOCM_DTR)
1826
- mcr &= ~UART_MCR_RTS;
1827
- if (arg & TIOCM_LOOP)
1828
- mcr &= ~UART_MCR_LOOP;
1829
- break;
1830
-
1831
- }
1832
-
1833
- mos7720_port->shadowMCR = mcr;
1834
- write_mos_reg(port->serial, port->port_number, MOS7720_MCR,
1835
- mos7720_port->shadowMCR);
1836
-
1837
- return 0;
1838
-}
1839
-
1840
-static int get_serial_info(struct moschip_port *mos7720_port,
1841
- struct serial_struct __user *retinfo)
1842
-{
1843
- struct serial_struct tmp;
1844
-
1845
- memset(&tmp, 0, sizeof(tmp));
1846
-
1847
- tmp.type = PORT_16550A;
1848
- tmp.line = mos7720_port->port->minor;
1849
- tmp.port = mos7720_port->port->port_number;
1850
- tmp.irq = 0;
1851
- tmp.xmit_fifo_size = NUM_URBS * URB_TRANSFER_BUFFER_SIZE;
1852
- tmp.baud_base = 9600;
1853
- tmp.close_delay = 5*HZ;
1854
- tmp.closing_wait = 30*HZ;
1855
-
1856
- if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
1857
- return -EFAULT;
1801
+ ss->type = PORT_16550A;
1802
+ ss->line = mos7720_port->port->minor;
1803
+ ss->port = mos7720_port->port->port_number;
1804
+ ss->irq = 0;
1805
+ ss->xmit_fifo_size = NUM_URBS * URB_TRANSFER_BUFFER_SIZE;
1806
+ ss->baud_base = 9600;
1807
+ ss->close_delay = 5*HZ;
1808
+ ss->closing_wait = 30*HZ;
18581809 return 0;
18591810 }
18601811
....@@ -1873,18 +1824,6 @@
18731824 dev_dbg(&port->dev, "%s TIOCSERGETLSR\n", __func__);
18741825 return get_lsr_info(tty, mos7720_port,
18751826 (unsigned int __user *)arg);
1876
-
1877
- /* FIXME: These should be using the mode methods */
1878
- case TIOCMBIS:
1879
- case TIOCMBIC:
1880
- dev_dbg(&port->dev, "%s TIOCMSET/TIOCMBIC/TIOCMSET\n", __func__);
1881
- return set_modem_info(mos7720_port, cmd,
1882
- (unsigned int __user *)arg);
1883
-
1884
- case TIOCGSERIAL:
1885
- dev_dbg(&port->dev, "%s TIOCGSERIAL\n", __func__);
1886
- return get_serial_info(mos7720_port,
1887
- (struct serial_struct __user *)arg);
18881827 }
18891828
18901829 return -ENOIOCTLCMD;
....@@ -2017,6 +1956,7 @@
20171956 .ioctl = mos7720_ioctl,
20181957 .tiocmget = mos7720_tiocmget,
20191958 .tiocmset = mos7720_tiocmset,
1959
+ .get_serial = get_serial_info,
20201960 .set_termios = mos7720_set_termios,
20211961 .write = mos7720_write,
20221962 .write_room = mos7720_write_room,