/* allocate private data */ static int ch341_attach(struct usb_serial *serial) { struct ch341_private *priv; int r; dbg("ch341_attach()"); /* private data */ priv = kzalloc(sizeof(struct ch341_private), GFP_KERNEL); if (!priv) return -ENOMEM; spin_lock_init(&priv->lock); init_waitqueue_head(&priv->delta_msr_wait); priv->baud_rate = DEFAULT_BAUD_RATE; priv->line_control = CH341_BIT_RTS | CH341_BIT_DTR; r = ch341_configure(serial->dev, priv); if (r < 0) goto error; usb_set_serial_port_data(serial->port[0], priv); return 0; error: kfree(priv); return r; }
/* open this device, set default parameters */ static int ch341_open(struct tty_struct *tty, struct usb_serial_port *port) { struct usb_serial *serial = port->serial; struct ch341_private *priv = usb_get_serial_port_data(serial->port[0]); int r; priv->baud_rate = DEFAULT_BAUD_RATE; r = ch341_configure(serial->dev, priv); if (r) goto out; r = ch341_set_handshake(serial->dev, priv->line_control); if (r) goto out; r = ch341_set_baudrate(serial->dev, priv); if (r) goto out; dbg("%s - submitting interrupt urb", __func__); r = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); if (r) { dev_err(&port->dev, "%s - failed submitting interrupt urb," " error %d\n", __func__, r); ch341_close(port); goto out; } r = usb_serial_generic_open(tty, port); out: return r; }
/* open this device, set default parameters */ static int ch341_open(struct tty_struct *tty, struct usb_serial_port *port) { struct usb_serial *serial = port->serial; struct ch341_private *priv = usb_get_serial_port_data(port); int r; r = ch341_configure(serial->dev, priv); if (r) goto out; if (tty) ch341_set_termios(tty, port, NULL); dev_dbg(&port->dev, "%s - submitting interrupt urb\n", __func__); r = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); if (r) { dev_err(&port->dev, "%s - failed to submit interrupt urb: %d\n", __func__, r); goto out; } r = usb_serial_generic_open(tty, port); out: return r; }
/* open this device, set default parameters */ static int ch341_open(struct usb_serial_port *port, struct file *filp) { struct usb_serial *serial = port->serial; struct ch341_private *priv = usb_get_serial_port_data(serial->port[0]); int r; dbg("ch341_open()"); priv->baud_rate = DEFAULT_BAUD_RATE; priv->dtr = 1; priv->rts = 1; r = ch341_configure(serial->dev, priv); if (r) goto out; r = ch341_set_handshake(serial->dev, priv); if (r) goto out; r = ch341_set_baudrate(serial->dev, priv); if (r) goto out; r = usb_serial_generic_open(port, filp); out: return r; }
/* allocate private data */ static int ch341_attach(struct usb_serial *serial) { struct ch341_private *priv; int r; dbg("ch341_attach()"); /* private data */ priv = kzalloc(sizeof(struct ch341_private), GFP_KERNEL); if (!priv) return -ENOMEM; priv->baud_rate = DEFAULT_BAUD_RATE; priv->dtr = 1; priv->rts = 1; r = ch341_configure(serial->dev, priv); if (r < 0) goto error; usb_set_serial_port_data(serial->port[0], priv); return 0; error: kfree(priv); return r; }
static int ch341_reset_resume(struct usb_serial *serial) { struct ch341_private *priv; priv = usb_get_serial_port_data(serial->port[0]); /* reconfigure ch341 serial port after bus-reset */ ch341_configure(serial->dev, priv); return 0; }
static int ch341_reset_resume(struct usb_interface *intf) { struct usb_device *dev = interface_to_usbdev(intf); struct usb_serial *serial = NULL; struct ch341_private *priv; serial = usb_get_intfdata(intf); priv = usb_get_serial_port_data(serial->port[0]); /*reconfigure ch341 serial port after bus-reset*/ ch341_configure(dev, priv); usb_serial_resume(intf); return 0; }
static int ch341_port_probe(struct usb_serial_port *port) { struct ch341_private *priv; int r; priv = kzalloc(sizeof(struct ch341_private), GFP_KERNEL); if (!priv) return -ENOMEM; spin_lock_init(&priv->lock); priv->baud_rate = DEFAULT_BAUD_RATE; priv->line_control = CH341_BIT_RTS | CH341_BIT_DTR; r = ch341_configure(port->serial->dev, priv); if (r < 0) goto error; usb_set_serial_port_data(port, priv); return 0; error: kfree(priv); return r; }