Lines Matching +full:break +full:- +full:control
1 // SPDX-License-Identifier: GPL-2.0+
5 * Copyright (C) 2010-2013 Johan Hovold ([email protected])
10 * Greg Kroah-Hartman ([email protected])
145 const struct usb_device_id *id = usb_get_serial_data(port->serial); in spcp8x5_port_probe()
150 return -ENOMEM; in spcp8x5_port_probe()
152 spin_lock_init(&priv->lock); in spcp8x5_port_probe()
153 priv->quirks = id->driver_info; in spcp8x5_port_probe()
157 port->port.drain_delay = 256; in spcp8x5_port_probe()
173 struct usb_device *dev = port->serial->dev; in spcp8x5_set_ctrl_line()
176 if (priv->quirks & SPCP825_QUIRK_NO_UART_STATUS) in spcp8x5_set_ctrl_line()
177 return -EPERM; in spcp8x5_set_ctrl_line()
183 dev_err(&port->dev, "failed to set control lines: %d\n", in spcp8x5_set_ctrl_line()
192 struct usb_device *dev = port->serial->dev; in spcp8x5_get_msr()
196 if (priv->quirks & SPCP825_QUIRK_NO_UART_STATUS) in spcp8x5_get_msr()
197 return -EPERM; in spcp8x5_get_msr()
201 return -ENOMEM; in spcp8x5_get_msr()
207 dev_err(&port->dev, "failed to get modem status: %d\n", ret); in spcp8x5_get_msr()
209 ret = -EIO; in spcp8x5_get_msr()
213 dev_dbg(&port->dev, "0xc0:0x22:0:6 %d - 0x02%x\n", ret, *buf); in spcp8x5_get_msr()
226 struct usb_device *dev = port->serial->dev; in spcp8x5_set_work_mode()
229 if (priv->quirks & SPCP825_QUIRK_NO_WORK_MODE) in spcp8x5_set_work_mode()
235 dev_dbg(&port->dev, "value = %#x , index = %#x\n", value, index); in spcp8x5_set_work_mode()
237 dev_err(&port->dev, "failed to set work mode: %d\n", ret); in spcp8x5_set_work_mode()
256 u8 control; in spcp8x5_dtr_rts() local
258 spin_lock_irqsave(&priv->lock, flags); in spcp8x5_dtr_rts()
260 priv->line_control = MCR_CONTROL_LINE_DTR in spcp8x5_dtr_rts()
263 priv->line_control &= ~ (MCR_CONTROL_LINE_DTR in spcp8x5_dtr_rts()
265 control = priv->line_control; in spcp8x5_dtr_rts()
266 spin_unlock_irqrestore(&priv->lock, flags); in spcp8x5_dtr_rts()
267 spcp8x5_set_ctrl_line(port, control); in spcp8x5_dtr_rts()
279 struct usb_serial *serial = port->serial; in spcp8x5_set_termios()
282 unsigned int cflag = tty->termios.c_cflag; in spcp8x5_set_termios()
287 u8 control; in spcp8x5_set_termios() local
290 if (old_termios && !tty_termios_hw_change(&tty->termios, old_termios)) in spcp8x5_set_termios()
294 spin_lock_irqsave(&priv->lock, flags); in spcp8x5_set_termios()
295 control = priv->line_control; in spcp8x5_set_termios()
296 if (old_termios && (old_termios->c_cflag & CBAUD) == B0) { in spcp8x5_set_termios()
297 priv->line_control |= MCR_DTR; in spcp8x5_set_termios()
298 if (!(old_termios->c_cflag & CRTSCTS)) in spcp8x5_set_termios()
299 priv->line_control |= MCR_RTS; in spcp8x5_set_termios()
301 if (control != priv->line_control) { in spcp8x5_set_termios()
302 control = priv->line_control; in spcp8x5_set_termios()
303 spin_unlock_irqrestore(&priv->lock, flags); in spcp8x5_set_termios()
304 spcp8x5_set_ctrl_line(port, control); in spcp8x5_set_termios()
306 spin_unlock_irqrestore(&priv->lock, flags); in spcp8x5_set_termios()
312 case 300: buf[0] = 0x00; break; in spcp8x5_set_termios()
313 case 600: buf[0] = 0x01; break; in spcp8x5_set_termios()
314 case 1200: buf[0] = 0x02; break; in spcp8x5_set_termios()
315 case 2400: buf[0] = 0x03; break; in spcp8x5_set_termios()
316 case 4800: buf[0] = 0x04; break; in spcp8x5_set_termios()
317 case 9600: buf[0] = 0x05; break; in spcp8x5_set_termios()
318 case 19200: buf[0] = 0x07; break; in spcp8x5_set_termios()
319 case 38400: buf[0] = 0x09; break; in spcp8x5_set_termios()
320 case 57600: buf[0] = 0x0a; break; in spcp8x5_set_termios()
321 case 115200: buf[0] = 0x0b; break; in spcp8x5_set_termios()
322 case 230400: buf[0] = 0x0c; break; in spcp8x5_set_termios()
323 case 460800: buf[0] = 0x0d; break; in spcp8x5_set_termios()
324 case 921600: buf[0] = 0x0e; break; in spcp8x5_set_termios()
325 /* case 1200000: buf[0] = 0x0f; break; */ in spcp8x5_set_termios()
326 /* case 2400000: buf[0] = 0x10; break; */ in spcp8x5_set_termios()
327 case 3000000: buf[0] = 0x11; break; in spcp8x5_set_termios()
328 /* case 6000000: buf[0] = 0x12; break; */ in spcp8x5_set_termios()
331 buf[0] = 0x0b; break; in spcp8x5_set_termios()
333 dev_err(&port->dev, "unsupported baudrate, using 9600\n"); in spcp8x5_set_termios()
340 break; in spcp8x5_set_termios()
343 break; in spcp8x5_set_termios()
346 break; in spcp8x5_set_termios()
350 break; in spcp8x5_set_termios()
357 /* Set Parity bit3-4 01:Odd 11:Even */ in spcp8x5_set_termios()
366 i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), in spcp8x5_set_termios()
370 dev_err(&port->dev, "Set UART format %#x failed (error = %d)\n", in spcp8x5_set_termios()
372 dev_dbg(&port->dev, "0x21:0x40:0:0 %d\n", i); in spcp8x5_set_termios()
375 /* enable hardware flow control */ in spcp8x5_set_termios()
382 struct usb_serial *serial = port->serial; in spcp8x5_open()
386 usb_clear_halt(serial->dev, port->write_urb->pipe); in spcp8x5_open()
387 usb_clear_halt(serial->dev, port->read_urb->pipe); in spcp8x5_open()
389 ret = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), in spcp8x5_open()
395 spcp8x5_set_ctrl_line(port, priv->line_control); in spcp8x5_open()
406 struct usb_serial_port *port = tty->driver_data; in spcp8x5_tiocmset()
409 u8 control; in spcp8x5_tiocmset() local
411 spin_lock_irqsave(&priv->lock, flags); in spcp8x5_tiocmset()
413 priv->line_control |= MCR_RTS; in spcp8x5_tiocmset()
415 priv->line_control |= MCR_DTR; in spcp8x5_tiocmset()
417 priv->line_control &= ~MCR_RTS; in spcp8x5_tiocmset()
419 priv->line_control &= ~MCR_DTR; in spcp8x5_tiocmset()
420 control = priv->line_control; in spcp8x5_tiocmset()
421 spin_unlock_irqrestore(&priv->lock, flags); in spcp8x5_tiocmset()
423 return spcp8x5_set_ctrl_line(port, control); in spcp8x5_tiocmset()
428 struct usb_serial_port *port = tty->driver_data; in spcp8x5_tiocmget()
439 spin_lock_irqsave(&priv->lock, flags); in spcp8x5_tiocmget()
440 mcr = priv->line_control; in spcp8x5_tiocmget()
441 spin_unlock_irqrestore(&priv->lock, flags); in spcp8x5_tiocmget()