static int i2400mu_bus_dev_start(struct i2400m *i2400m) { int result; struct i2400mu *i2400mu = container_of(i2400m, struct i2400mu, i2400m); struct device *dev = &i2400mu->usb_iface->dev; d_fnstart(3, dev, "(i2400m %p)\n", i2400m); result = i2400mu_tx_setup(i2400mu); if (result < 0) goto error_usb_tx_setup; result = i2400mu_rx_setup(i2400mu); if (result < 0) goto error_usb_rx_setup; result = i2400mu_notification_setup(i2400mu); if (result < 0) goto error_notif_setup; d_fnend(3, dev, "(i2400m %p) = %d\n", i2400m, result); return result; error_notif_setup: i2400mu_rx_release(i2400mu); error_usb_rx_setup: i2400mu_tx_release(i2400mu); error_usb_tx_setup: d_fnend(3, dev, "(i2400m %p) = void\n", i2400m); return result; }
static int i2400mu_resume(struct usb_interface *iface) { int ret = 0; struct device *dev = &iface->dev; struct i2400mu *i2400mu = usb_get_intfdata(iface); struct i2400m *i2400m = &i2400mu->i2400m; d_fnstart(3, dev, "(iface %p)\n", iface); if (i2400m->updown == 0) { d_printf(1, dev, "fw was down, no resume neeed\n"); goto out; } d_printf(1, dev, "fw was up, resuming\n"); i2400mu_notification_setup(i2400mu); out: d_fnend(3, dev, "(iface %p) = %d\n", iface, ret); return ret; }
static int i2400mu_resume(struct usb_interface *iface) { int ret = 0; struct device *dev = &iface->dev; struct i2400mu *i2400mu = usb_get_intfdata(iface); struct i2400m *i2400m = &i2400mu->i2400m; d_fnstart(3, dev, "(iface %p)\n", iface); if (i2400m->updown == 0) { d_printf(1, dev, "fw was down, no resume neeed\n"); goto out; } d_printf(1, dev, "fw was up, resuming\n"); i2400mu_notification_setup(i2400mu); /* USB has flow control, so we don't need to give it time to * come back; otherwise, we'd use something like a get-state * command... */ out: d_fnend(3, dev, "(iface %p) = %d\n", iface, ret); return ret; }