static void bam2bam_data_suspend_work(struct work_struct *w) { struct bam_data_port *port = container_of(w, struct bam_data_port, suspend_w); struct bam_data_ch_info *d = &port->data_ch; int ret; pr_debug("%s: suspend work started\n", __func__); if (!port->is_connected) { pr_info("%s: Port is disconnected. Bailing out.\n", __func__); return; } ret = usb_bam_register_wake_cb(d->dst_connection_idx, bam_data_wake_cb, port); if (ret) { pr_err("%s(): Failed to register BAM wake callback.\n", __func__); return; } if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { usb_bam_register_start_stop_cbs(d->dst_connection_idx, bam_data_start, bam_data_stop, port); usb_bam_suspend(&d->ipa_params); } }
void bam_data_resume(u8 port_num) { struct bam_data_port *port; struct bam_data_ch_info *d; port = bam2bam_data_ports[port_num]; d = &port->data_ch; pr_debug("%s: resumed port %d\n", __func__, port_num); usb_bam_register_wake_cb(d->connection_idx, NULL, NULL); }
void bam_data_suspend(u8 port_num) { struct bam_data_port *port; struct bam_data_ch_info *d; port = bam2bam_data_ports[port_num]; d = &port->data_ch; pr_debug("%s: suspended port %d\n", __func__, port_num); usb_bam_register_wake_cb(d->connection_idx, bam_data_wake_cb, port); }
static void bam2bam_data_resume_work(struct work_struct *w) { struct bam_data_port *port = container_of(w, struct bam_data_port, resume_w); struct bam_data_ch_info *d = &port->data_ch; pr_debug("%s: resume work started\n", __func__); usb_bam_register_wake_cb(d->dst_connection_idx, NULL, NULL); if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) usb_bam_resume(&d->ipa_params); }
/** * ipa_data_resume() - Initiate USB resume functionality * @gp: Gadget IPA port * @port_num: port number used by function * * It is being used to initiate USB resume functionality * for USB bus resume case. */ void ipa_data_resume(struct gadget_ipa_port *gp, u8 port_num) { struct ipa_data_ch_info *port; unsigned long flags; struct usb_gadget *gadget = NULL; int ret; pr_debug("dev:%p port number:%d\n", gp, port_num); if (port_num >= n_ipa_ports) { pr_err("invalid ipa portno#%d\n", port_num); return; } if (!gp) { pr_err("data port is null\n"); return; } port = ipa_data_ports[port_num]; if (!port) { pr_err("port %u is NULL", port_num); return; } pr_debug("%s: resume started\n", __func__); spin_lock_irqsave(&port->port_lock, flags); gadget = port->port_usb->cdev->gadget; if (!gadget) { spin_unlock_irqrestore(&port->port_lock, flags); pr_err("%s(): Gadget is NULL.\n", __func__); return; } ret = usb_bam_register_wake_cb(port->dst_connection_idx, NULL, NULL); if (ret) { spin_unlock_irqrestore(&port->port_lock, flags); pr_err("%s(): Failed to register BAM wake callback.\n", __func__); return; } if (msm_dwc3_reset_ep_after_lpm(gadget)) { configure_fifo(port->src_bam_idx, port->port_usb->out); configure_fifo(port->dst_bam_idx, port->port_usb->in); spin_unlock_irqrestore(&port->port_lock, flags); msm_dwc3_reset_dbm_ep(port->port_usb->in); spin_lock_irqsave(&port->port_lock, flags); usb_bam_resume(&port->ipa_params); } spin_unlock_irqrestore(&port->port_lock, flags); }
static void bam2bam_data_suspend_work(struct work_struct *w) { struct bam_data_port *port = container_of(w, struct bam_data_port, suspend_w); struct bam_data_ch_info *d = &port->data_ch; pr_debug("%s: suspend work started\n", __func__); usb_bam_register_wake_cb(d->dst_connection_idx, bam_data_wake_cb, port); if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { usb_bam_register_start_stop_cbs(bam_data_start, bam_data_stop, port); usb_bam_suspend(&d->ipa_params); } }
static void bam2bam_data_resume_work(struct work_struct *w) { struct bam_data_port *port = container_of(w, struct bam_data_port, resume_w); struct bam_data_ch_info *d = &port->data_ch; struct data_port *d_port = port->port_usb; struct usb_gadget *gadget = d_port->cdev->gadget; int ret; pr_debug("%s: resume work started\n", __func__); if (!port->is_connected) { pr_info("%s: Port is disconnected. Bailing out.\n", __func__); return; } ret = usb_bam_register_wake_cb(d->dst_connection_idx, NULL, NULL); if (ret) { pr_err("%s(): Failed to un-register BAM wake callback.\n", __func__); return; } if (d->trans == USB_GADGET_XPORT_BAM2BAM_IPA) { if (gadget_is_dwc3(gadget) && msm_dwc3_reset_ep_after_lpm(gadget)) { configure_usb_data_fifo(d->src_bam_idx, port->port_usb->out, d->src_pipe_type); configure_usb_data_fifo(d->dst_bam_idx, port->port_usb->in, d->dst_pipe_type); msm_dwc3_reset_dbm_ep(port->port_usb->in); } usb_bam_resume(&d->ipa_params); } }
/** * ipa_data_suspend() - Initiate USB BAM IPA suspend functionality * @gp: Gadget IPA port * @port_num: port number used by function * * It is being used to initiate USB BAM IPA suspend functionality * for USB bus suspend functionality. */ void ipa_data_suspend(struct gadget_ipa_port *gp, u8 port_num) { struct ipa_data_ch_info *port; int ret; pr_debug("dev:%p port number:%d\n", gp, port_num); if (port_num >= n_ipa_ports) { pr_err("invalid ipa portno#%d\n", port_num); return; } if (!gp) { pr_err("data port is null\n"); return; } port = ipa_data_ports[port_num]; if (!port) { pr_err("port %u is NULL", port_num); return; } pr_debug("%s: suspend started\n", __func__); ret = usb_bam_register_wake_cb(port->dst_connection_idx, NULL, port); if (ret) { pr_err("%s(): Failed to register BAM wake callback.\n", __func__); return; } usb_bam_register_start_stop_cbs(port->dst_connection_idx, ipa_data_start, ipa_data_stop, port); usb_bam_suspend(&port->ipa_params); }