• Home
  • Raw
  • Download

Lines Matching +full:break +full:- +full:control

1 // SPDX-License-Identifier: GPL-2.0+
5 * Copyright (C) 2010-2013 Johan Hovold (jhovold@gmail.com)
10 * Greg Kroah-Hartman (greg@kroah.com)
155 const struct usb_device_id *id = usb_get_serial_data(port->serial); in spcp8x5_port_probe()
160 return -ENOMEM; in spcp8x5_port_probe()
162 spin_lock_init(&priv->lock); in spcp8x5_port_probe()
163 priv->quirks = id->driver_info; in spcp8x5_port_probe()
167 port->port.drain_delay = 256; in spcp8x5_port_probe()
185 struct usb_device *dev = port->serial->dev; in spcp8x5_set_ctrl_line()
188 if (priv->quirks & SPCP825_QUIRK_NO_UART_STATUS) in spcp8x5_set_ctrl_line()
189 return -EPERM; in spcp8x5_set_ctrl_line()
195 dev_err(&port->dev, "failed to set control lines: %d\n", in spcp8x5_set_ctrl_line()
204 struct usb_device *dev = port->serial->dev; in spcp8x5_get_msr()
208 if (priv->quirks & SPCP825_QUIRK_NO_UART_STATUS) in spcp8x5_get_msr()
209 return -EPERM; in spcp8x5_get_msr()
213 return -ENOMEM; in spcp8x5_get_msr()
219 dev_err(&port->dev, "failed to get modem status: %d\n", ret); in spcp8x5_get_msr()
221 ret = -EIO; in spcp8x5_get_msr()
225 dev_dbg(&port->dev, "0xc0:0x22:0:6 %d - 0x02%x\n", ret, *buf); in spcp8x5_get_msr()
238 struct usb_device *dev = port->serial->dev; in spcp8x5_set_work_mode()
241 if (priv->quirks & SPCP825_QUIRK_NO_WORK_MODE) in spcp8x5_set_work_mode()
247 dev_dbg(&port->dev, "value = %#x , index = %#x\n", value, index); in spcp8x5_set_work_mode()
249 dev_err(&port->dev, "failed to set work mode: %d\n", ret); in spcp8x5_set_work_mode()
268 u8 control; in spcp8x5_dtr_rts() local
270 spin_lock_irqsave(&priv->lock, flags); in spcp8x5_dtr_rts()
272 priv->line_control = MCR_CONTROL_LINE_DTR in spcp8x5_dtr_rts()
275 priv->line_control &= ~ (MCR_CONTROL_LINE_DTR in spcp8x5_dtr_rts()
277 control = priv->line_control; in spcp8x5_dtr_rts()
278 spin_unlock_irqrestore(&priv->lock, flags); in spcp8x5_dtr_rts()
279 spcp8x5_set_ctrl_line(port, control); in spcp8x5_dtr_rts()
290 struct usb_serial *serial = port->serial; in spcp8x5_set_termios()
293 unsigned int cflag = tty->termios.c_cflag; in spcp8x5_set_termios()
298 u8 control; in spcp8x5_set_termios() local
301 if (old_termios && !tty_termios_hw_change(&tty->termios, old_termios)) in spcp8x5_set_termios()
305 spin_lock_irqsave(&priv->lock, flags); in spcp8x5_set_termios()
306 control = priv->line_control; in spcp8x5_set_termios()
307 if (old_termios && (old_termios->c_cflag & CBAUD) == B0) { in spcp8x5_set_termios()
308 priv->line_control |= MCR_DTR; in spcp8x5_set_termios()
309 if (!(old_termios->c_cflag & CRTSCTS)) in spcp8x5_set_termios()
310 priv->line_control |= MCR_RTS; in spcp8x5_set_termios()
312 if (control != priv->line_control) { in spcp8x5_set_termios()
313 control = priv->line_control; in spcp8x5_set_termios()
314 spin_unlock_irqrestore(&priv->lock, flags); in spcp8x5_set_termios()
315 spcp8x5_set_ctrl_line(port, control); in spcp8x5_set_termios()
317 spin_unlock_irqrestore(&priv->lock, flags); in spcp8x5_set_termios()
323 case 300: buf[0] = 0x00; break; in spcp8x5_set_termios()
324 case 600: buf[0] = 0x01; break; in spcp8x5_set_termios()
325 case 1200: buf[0] = 0x02; break; in spcp8x5_set_termios()
326 case 2400: buf[0] = 0x03; break; in spcp8x5_set_termios()
327 case 4800: buf[0] = 0x04; break; in spcp8x5_set_termios()
328 case 9600: buf[0] = 0x05; break; in spcp8x5_set_termios()
329 case 19200: buf[0] = 0x07; break; in spcp8x5_set_termios()
330 case 38400: buf[0] = 0x09; break; in spcp8x5_set_termios()
331 case 57600: buf[0] = 0x0a; break; in spcp8x5_set_termios()
332 case 115200: buf[0] = 0x0b; break; in spcp8x5_set_termios()
333 case 230400: buf[0] = 0x0c; break; in spcp8x5_set_termios()
334 case 460800: buf[0] = 0x0d; break; in spcp8x5_set_termios()
335 case 921600: buf[0] = 0x0e; break; in spcp8x5_set_termios()
336 /* case 1200000: buf[0] = 0x0f; break; */ in spcp8x5_set_termios()
337 /* case 2400000: buf[0] = 0x10; break; */ in spcp8x5_set_termios()
338 case 3000000: buf[0] = 0x11; break; in spcp8x5_set_termios()
339 /* case 6000000: buf[0] = 0x12; break; */ in spcp8x5_set_termios()
342 buf[0] = 0x0b; break; in spcp8x5_set_termios()
344 dev_err(&port->dev, "unsupported baudrate, using 9600\n"); in spcp8x5_set_termios()
351 break; in spcp8x5_set_termios()
354 break; in spcp8x5_set_termios()
357 break; in spcp8x5_set_termios()
361 break; in spcp8x5_set_termios()
368 /* Set Parity bit3-4 01:Odd 11:Even */ in spcp8x5_set_termios()
377 i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), in spcp8x5_set_termios()
381 dev_err(&port->dev, "Set UART format %#x failed (error = %d)\n", in spcp8x5_set_termios()
383 dev_dbg(&port->dev, "0x21:0x40:0:0 %d\n", i); in spcp8x5_set_termios()
386 /* enable hardware flow control */ in spcp8x5_set_termios()
393 struct usb_serial *serial = port->serial; in spcp8x5_open()
397 usb_clear_halt(serial->dev, port->write_urb->pipe); in spcp8x5_open()
398 usb_clear_halt(serial->dev, port->read_urb->pipe); in spcp8x5_open()
400 ret = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), in spcp8x5_open()
406 spcp8x5_set_ctrl_line(port, priv->line_control); in spcp8x5_open()
417 struct usb_serial_port *port = tty->driver_data; in spcp8x5_tiocmset()
420 u8 control; in spcp8x5_tiocmset() local
422 spin_lock_irqsave(&priv->lock, flags); in spcp8x5_tiocmset()
424 priv->line_control |= MCR_RTS; in spcp8x5_tiocmset()
426 priv->line_control |= MCR_DTR; in spcp8x5_tiocmset()
428 priv->line_control &= ~MCR_RTS; in spcp8x5_tiocmset()
430 priv->line_control &= ~MCR_DTR; in spcp8x5_tiocmset()
431 control = priv->line_control; in spcp8x5_tiocmset()
432 spin_unlock_irqrestore(&priv->lock, flags); in spcp8x5_tiocmset()
434 return spcp8x5_set_ctrl_line(port, control); in spcp8x5_tiocmset()
439 struct usb_serial_port *port = tty->driver_data; in spcp8x5_tiocmget()
450 spin_lock_irqsave(&priv->lock, flags); in spcp8x5_tiocmget()
451 mcr = priv->line_control; in spcp8x5_tiocmget()
452 spin_unlock_irqrestore(&priv->lock, flags); in spcp8x5_tiocmget()