int xmm6262_init_modemctl_device(struct modem_ctl *mc, struct modem_data *pdata) { int ret = 0; struct platform_device *pdev; mc->gpio_reset_req_n = pdata->gpio_reset_req_n; mc->gpio_cp_on = pdata->gpio_cp_on; mc->gpio_cp_reset = pdata->gpio_cp_reset; mc->gpio_pda_active = pdata->gpio_pda_active; mc->gpio_phone_active = pdata->gpio_phone_active; mc->gpio_cp_dump_int = pdata->gpio_cp_dump_int; mc->gpio_flm_uart_sel = pdata->gpio_flm_uart_sel; mc->gpio_cp_warm_reset = pdata->gpio_cp_warm_reset; mc->gpio_revers_bias_clear = pdata->gpio_revers_bias_clear; mc->gpio_revers_bias_restore = pdata->gpio_revers_bias_restore; pdev = to_platform_device(mc->dev); mc->irq_phone_active = gpio_to_irq(mc->gpio_phone_active); xmm6262_get_ops(mc); ret = request_irq(mc->irq_phone_active, phone_active_irq_handler, IRQF_NO_SUSPEND | IRQF_TRIGGER_HIGH, "phone_active", mc); if (ret) { mif_err("failed to request_irq:%d\n", ret); return ret; } ret = enable_irq_wake(mc->irq_phone_active); if (ret) mif_err("failed to enable_irq_wake:%d\n", ret); return ret; }
int xmm6262_init_modemctl_device(struct modem_ctl *mc, struct modem_data *pdata) { int ret = 0; struct platform_device *pdev; mc->gpio_reset_req_n = pdata->gpio_reset_req_n; mc->gpio_cp_on = pdata->gpio_cp_on; mc->gpio_cp_reset = pdata->gpio_cp_reset; mc->gpio_pda_active = pdata->gpio_pda_active; mc->gpio_phone_active = pdata->gpio_phone_active; mc->gpio_cp_dump_int = pdata->gpio_cp_dump_int; mc->gpio_ap_dump_int = pdata->gpio_ap_dump_int; mc->gpio_flm_uart_sel = pdata->gpio_flm_uart_sel; mc->gpio_cp_warm_reset = pdata->gpio_cp_warm_reset; mc->gpio_sim_detect = pdata->gpio_sim_detect; mc->sim_polarity = pdata->sim_polarity; mc->gpio_revers_bias_clear = pdata->gpio_revers_bias_clear; mc->gpio_revers_bias_restore = pdata->gpio_revers_bias_restore; #ifdef CONFIG_SEC_DUAL_MODEM_MODE mc->gpio_sim_io_sel = pdata->gpio_sim_io_sel; mc->gpio_cp_ctrl1 = pdata->gpio_cp_ctrl1; mc->gpio_cp_ctrl2 = pdata->gpio_cp_ctrl2; #endif pdev = to_platform_device(mc->dev); mc->irq_phone_active = gpio_to_irq(mc->gpio_phone_active); if (mc->gpio_sim_detect) mc->irq_sim_detect = gpio_to_irq(mc->gpio_sim_detect); xmm6262_get_ops(mc); ret = request_irq(mc->irq_phone_active, phone_active_irq_handler, IRQF_NO_SUSPEND | IRQF_TRIGGER_HIGH, "phone_active", mc); if (ret) { mif_err("failed to request_irq:%d\n", ret); goto err_phone_active_request_irq; } ret = enable_irq_wake(mc->irq_phone_active); if (ret) { mif_err("failed to enable_irq_wake:%d\n", ret); goto err_phone_active_set_wake_irq; } /* initialize sim_state if gpio_sim_detect exists */ mc->sim_state.online = false; mc->sim_state.changed = false; if (mc->gpio_sim_detect) { ret = request_irq(mc->irq_sim_detect, sim_detect_irq_handler, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "sim_detect", mc); if (ret) { mif_err("failed to request_irq: %d\n", ret); goto err_sim_detect_request_irq; } ret = enable_irq_wake(mc->irq_sim_detect); if (ret) { mif_err("failed to enable_irq_wake: %d\n", ret); goto err_sim_detect_set_wake_irq; } /* initialize sim_state => insert: gpio=0, remove: gpio=1 */ mc->sim_state.online = gpio_get_value(mc->gpio_sim_detect) == mc->sim_polarity; ret = mif_init_sim_shutdown(mc); if (ret) { mif_err("failed to sim fake shutdown init: %d\n", ret); goto err_sim_detect_set_wake_irq; } } return ret; err_sim_detect_set_wake_irq: free_irq(mc->irq_sim_detect, mc); err_sim_detect_request_irq: mc->sim_state.online = false; mc->sim_state.changed = false; err_phone_active_set_wake_irq: free_irq(mc->irq_phone_active, mc); err_phone_active_request_irq: return ret; }
int xmm6262_init_modemctl_device(struct modem_ctl *mc, struct modem_data *pdata) { int ret = 0; struct platform_device *pdev; mc->gpio_reset_req_n = pdata->gpio_reset_req_n; mc->gpio_cp_on = pdata->gpio_cp_on; mc->gpio_cp_reset = pdata->gpio_cp_reset; mc->gpio_pda_active = pdata->gpio_pda_active; mc->gpio_phone_active = pdata->gpio_phone_active; mc->gpio_cp_dump_int = pdata->gpio_cp_dump_int; mc->gpio_ap_dump_int = pdata->gpio_ap_dump_int; mc->gpio_flm_uart_sel = pdata->gpio_flm_uart_sel; mc->gpio_cp_warm_reset = pdata->gpio_cp_warm_reset; mc->gpio_sim_detect = pdata->gpio_sim_detect; mc->sim_polarity = pdata->sim_polarity; mc->gpio_revers_bias_clear = pdata->gpio_revers_bias_clear; mc->gpio_revers_bias_restore = pdata->gpio_revers_bias_restore; pdev = to_platform_device(mc->dev); mc->irq_phone_active = gpio_to_irq(mc->gpio_phone_active); if (mc->gpio_sim_detect) mc->irq_sim_detect = gpio_to_irq(mc->gpio_sim_detect); xmm6262_get_ops(mc); mc->msd->loopback_start = xmm6262_start_loopback; ret = request_irq(mc->irq_phone_active, phone_active_irq_handler, IRQF_NO_SUSPEND | IRQF_TRIGGER_HIGH, "phone_active", mc); if (ret) { mif_err("failed to request_irq:%d\n", ret); goto err_phone_active_request_irq; } ret = enable_irq_wake(mc->irq_phone_active); if (ret) { mif_err("failed to enable_irq_wake:%d\n", ret); goto err_phone_active_set_wake_irq; } /* initialize sim_state if gpio_sim_detect exists */ mc->sim_state.online = false; mc->sim_state.changed = false; if (mc->gpio_sim_detect) { ret = request_irq(mc->irq_sim_detect, sim_detect_irq_handler, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "sim_detect", mc); if (ret) { mif_err("failed to request_irq: %d\n", ret); goto err_sim_detect_request_irq; } ret = enable_irq_wake(mc->irq_sim_detect); if (ret) { mif_err("failed to enable_irq_wake: %d\n", ret); goto err_sim_detect_set_wake_irq; } /* initialize sim_state => insert: gpio=0, remove: gpio=1 */ mc->sim_state.online = gpio_get_value(mc->gpio_sim_detect) == mc->sim_polarity; } /* CP Slient logging channel is ACM:1 */ mc->fixed_log_ch = 1; return ret; err_sim_detect_set_wake_irq: free_irq(mc->irq_sim_detect, mc); err_sim_detect_request_irq: mc->sim_state.online = false; mc->sim_state.changed = false; err_phone_active_set_wake_irq: free_irq(mc->irq_phone_active, mc); err_phone_active_request_irq: return ret; }