static int sierra_startup(struct usb_serial *serial) { struct usb_serial_port *port; struct sierra_port_private *portdata; struct urb *urb; int i; int j; dev_dbg(&serial->dev->dev, "%s", __func__); /* Set Device mode to D0 */ sierra_set_power_state(serial->dev, 0x0000); /* Check NMEA and set */ if (nmea) sierra_vsc_set_nmea(serial->dev, 1); /* Now setup per port private data */ for (i = 0; i < serial->num_ports; i++) { port = serial->port[i]; portdata = kzalloc(sizeof(*portdata), GFP_KERNEL); if (!portdata) { dev_dbg(&port->dev, "%s: kmalloc for " "sierra_port_private (%d) failed!.", __func__, i); return -ENOMEM; } spin_lock_init(&portdata->lock); for (j = 0; j < N_IN_URB; j++) { portdata->in_buffer[j] = kmalloc(IN_BUFLEN, GFP_KERNEL); if (!portdata->in_buffer[j]) { for (--j; j >= 0; j--) kfree(portdata->in_buffer[j]); kfree(portdata); return -ENOMEM; } } usb_set_serial_port_data(port, portdata); /* initialize the in urbs */ for (j = 0; j < N_IN_URB; ++j) { urb = usb_alloc_urb(0, GFP_KERNEL); if (urb == NULL) { dev_dbg(&port->dev, "%s: alloc for in " "port failed.", __func__); continue; } /* Fill URB using supplied data. */ usb_fill_bulk_urb(urb, serial->dev, usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress), portdata->in_buffer[j], IN_BUFLEN, sierra_indat_callback, port); portdata->in_urbs[j] = urb; } } return 0; }
static int sierra_startup(struct usb_serial *serial) { struct sierra_intf_private *intfdata; intfdata = kzalloc(sizeof(*intfdata), GFP_KERNEL); if (!intfdata) return -ENOMEM; spin_lock_init(&intfdata->susp_lock); usb_set_serial_data(serial, intfdata); /* Set Device mode to D0 */ sierra_set_power_state(serial->dev, 0x0000); /* Check NMEA and set */ if (nmea) sierra_vsc_set_nmea(serial->dev, 1); return 0; }