static int mdm9x25_setup_hw(struct mdm_ctrl *mdm, struct esoc_clink_ops const *ops, struct platform_device *pdev) { int ret; struct esoc_clink *esoc; pr_info("[MIF] %s\n", __func__); mdm->dev = &pdev->dev; esoc = devm_kzalloc(mdm->dev, sizeof(*esoc), GFP_KERNEL); if (IS_ERR(esoc)) { dev_err(mdm->dev, "cannot allocate esoc device\n"); return PTR_ERR(esoc); } mdm->mdm_queue = alloc_workqueue("mdm_queue", 0, 0); if (!mdm->mdm_queue) { dev_err(mdm->dev, "could not create mdm_queue\n"); return -ENOMEM; } mdm->irq_mask = 0; mdm->ready = false; ret = mdm_dt_parse_gpios(mdm); if (ret) return ret; dev_err(mdm->dev, "parsing gpio done\n"); ret = mdm_configure_ipc(mdm, pdev); if (ret) return ret; dev_err(mdm->dev, "ipc configure done\n"); esoc->name = MDM9x25_LABEL; esoc->link_name = MDM9x25_HSIC; esoc->clink_ops = ops; esoc->parent = mdm->dev; esoc->owner = THIS_MODULE; esoc->np = pdev->dev.of_node; set_esoc_clink_data(esoc, mdm); ret = esoc_clink_register(esoc); if (ret) { dev_err(mdm->dev, "esoc registration failed\n"); return ret; } dev_dbg(mdm->dev, "esoc registration done\n"); init_completion(&mdm->debug_done); INIT_WORK(&mdm->mdm_status_work, mdm_status_fn); INIT_WORK(&mdm->restart_reason_work, mdm_get_restart_reason); INIT_DELAYED_WORK(&mdm->mdm2ap_status_check_work, mdm2ap_status_check); mdm->get_restart_reason = false; mdm->cp_crash_occurrence= false; mdm->debug_fail = false; mdm->esoc = esoc; mdm->init = 0; return 0; }
static int mdm9x35_setup_hw(struct mdm_ctrl *mdm, struct esoc_clink_ops const *ops, struct platform_device *pdev) { int ret; struct device_node *node; struct esoc_clink *esoc; mdm->dev = &pdev->dev; node = pdev->dev.of_node; esoc = devm_kzalloc(mdm->dev, sizeof(*esoc), GFP_KERNEL); if (IS_ERR(esoc)) { dev_err(mdm->dev, "cannot allocate esoc device\n"); return PTR_ERR(esoc); } mdm->mdm_queue = alloc_workqueue("mdm_queue", 0, 0); if (!mdm->mdm_queue) { dev_err(mdm->dev, "could not create mdm_queue\n"); return -ENOMEM; } mdm->irq_mask = 0; mdm->ready = false; ret = mdm_dt_parse_gpios(mdm); if (ret) return ret; dev_dbg(mdm->dev, "parsing gpio done\n"); ret = mdm_configure_ipc(mdm, pdev); if (ret) return ret; dev_dbg(mdm->dev, "ipc configure done\n"); esoc->name = MDM9x35_LABEL; mdm->dual_interface = of_property_read_bool(node, "qcom,mdm-dual-link"); /* Check if link gpio is available */ if (gpio_is_valid(MDM_GPIO(mdm, MDM_LINK_DETECT))) { if (mdm->dual_interface) { if (gpio_get_value(MDM_GPIO(mdm, MDM_LINK_DETECT))) esoc->link_name = MDM9x35_DUAL_LINK; else esoc->link_name = MDM9x35_PCIE; } else { if (gpio_get_value(MDM_GPIO(mdm, MDM_LINK_DETECT))) esoc->link_name = MDM9x35_HSIC; else esoc->link_name = MDM9x35_PCIE; } } else if (mdm->dual_interface) esoc->link_name = MDM9x35_DUAL_LINK; else esoc->link_name = MDM9x35_HSIC; esoc->clink_ops = ops; esoc->parent = mdm->dev; esoc->owner = THIS_MODULE; esoc->np = pdev->dev.of_node; set_esoc_clink_data(esoc, mdm); ret = esoc_clink_register(esoc); if (ret) { dev_err(mdm->dev, "esoc registration failed\n"); return ret; } dev_dbg(mdm->dev, "esoc registration done\n"); init_completion(&mdm->debug_done); INIT_WORK(&mdm->mdm_status_work, mdm_status_fn); INIT_WORK(&mdm->restart_reason_work, mdm_get_restart_reason); INIT_DELAYED_WORK(&mdm->mdm2ap_status_check_work, mdm2ap_status_check); mdm->get_restart_reason = false; mdm->debug_fail = false; mdm->esoc = esoc; mdm->init = 0; return 0; }