void diag_smd_notify(void *ctxt, unsigned event) { struct diag_smd_info *smd_info = (struct diag_smd_info *)ctxt; if (!smd_info) return; if (event == SMD_EVENT_CLOSE) { smd_info->ch = 0; wake_up(&driver->smd_wait_q); if (smd_info->type == SMD_DATA_TYPE) { smd_info->notify_context = event; queue_work(driver->diag_cntl_wq, &(smd_info->diag_notify_update_smd_work)); } else if (smd_info->type == SMD_DCI_TYPE) { /* Notify the clients of the close */ diag_dci_notify_client(smd_info->peripheral_mask, DIAG_STATUS_CLOSED); } return; } else if (event == SMD_EVENT_OPEN) { if (smd_info->ch_save) smd_info->ch = smd_info->ch_save; if (smd_info->type == SMD_CNTL_TYPE) { smd_info->notify_context = event; queue_work(driver->diag_cntl_wq, &(smd_info->diag_notify_update_smd_work)); } else if (smd_info->type == SMD_DCI_TYPE) { smd_info->notify_context = event; queue_work(driver->diag_dci_wq, &(smd_info->diag_notify_update_smd_work)); /* Notify the clients of the open */ diag_dci_notify_client(smd_info->peripheral_mask, DIAG_STATUS_OPEN); } } wake_up(&driver->smd_wait_q); if (smd_info->type == SMD_DCI_TYPE) queue_work(driver->diag_dci_wq, &(smd_info->diag_read_smd_work)); else queue_work(driver->diag_wq, &(smd_info->diag_read_smd_work)); }
static int diag_dci_probe(struct platform_device *pdev) { int err = 0; if (pdev->id == SMD_APPS_MODEM) { err = smd_open("DIAG_2", &driver->ch_dci, driver, diag_smd_dci_notify); if (err) pr_err("diag: cannot open DCI port, Id = %d, err =" " %d\n", pdev->id, err); else diag_dci_notify_client(DIAG_CON_MPSS); } return err; }
void diag_hsic_dci_close(int ch_id) { if (diag_hsic_dci[ch_id].hsic_device_enabled) { diag_hsic_dci[ch_id].hsic_ch = 0; if (diag_hsic_dci[ch_id].hsic_device_opened) { diag_hsic_dci[ch_id].hsic_device_opened = 0; diag_bridge_close(hsic_dci_bridge_map[ch_id]); dci_ops_tbl[DCI_MDM_PROC].peripheral_status = 0; diag_dci_notify_client(DIAG_CON_APSS, DIAG_STATUS_CLOSED, DCI_MDM_PROC); pr_debug("diag: %s: closed successfully ch %d\n", __func__, ch_id); } else { pr_debug("diag: %s: already closed ch %d\n", __func__, ch_id); } } else { pr_debug("diag: %s: HSIC device already removed ch %d\n", __func__, ch_id); } }