static int __init init_modem(void) { sprd6500_modem_cfg_gpio(); gsm_modem_res[0].start = gpio_to_irq(GPIO_PHONE_ACTIVE); gsm_modem_res[0].end = gpio_to_irq(GPIO_PHONE_ACTIVE); platform_device_register(&gsm_modem); mif_info("board init_sprd6500_modem done\n"); return 0; }
static int msm_sprd6500_probe(struct platform_device *pdev) { pr_info("%s\n", __func__); sprd6500_modem_cfg_gpio(&(pdev->dev)); gsm_modem_res[0].start = gpio_to_irq(gsm_modem_data.gpio_phone_active); gsm_modem_res[0].end = gpio_to_irq(gsm_modem_data.gpio_phone_active); mif_info("board init_sprd6500_modem done\n"); return 0; }
int sprd6500_init_modemctl_device(struct modem_ctl *mc, struct modem_data *pdata) { int ret = 0; struct platform_device *pdev; pr_err("[MODEM_IF:SC6500] <%s> start\n", __func__); pdev = to_platform_device(mc->dev); #if 0 //def CONFIG_OF sprd6500_modem_cfg_gpio(pdev); #endif mc->gpio_cp_on = pdata->gpio_cp_on; 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_sim_detect = pdata->gpio_sim_detect; mc->gpio_ap_cp_int1 = pdata->gpio_ap_cp_int1; mc->gpio_ap_cp_int2 = pdata->gpio_ap_cp_int2; mc->gpio_uart_sel = pdata->gpio_uart_sel; #ifdef CONFIG_SEC_DUAL_MODEM_MODE mc->gpio_sim_sel = pdata->gpio_sim_sel; #endif #if defined(CONFIG_LINK_DEVICE_PLD) mc->gpio_fpga1_cs_n = pdata->gpio_fpga1_cs_n; #endif gpio_set_value(mc->gpio_cp_on, 0); mc->irq_phone_active = platform_get_irq_byname(pdev, "cp_active_irq"); pr_info("[MODEM_IF:SC6500] <%s> PHONE_ACTIVE IRQ# = %d\n", __func__, mc->irq_phone_active); sprd6500_get_ops(mc); if (mc->irq_phone_active) { ret = request_irq(mc->irq_phone_active, phone_active_irq_handler, IRQF_TRIGGER_HIGH, "esc_active", mc); if (ret) { pr_err("[MODEM_IF:SC6500] <%s> failed to request_irq IRQ# %d (err=%d)\n", __func__, mc->irq_phone_active, ret); dump_stack(); return ret; } #if 1 // don't enable wake option in temp enable_irq(mc->irq_phone_active); #else ret = enable_irq_wake(mc->irq_phone_active); if (ret) { pr_err("[MODEM_IF:SC6500] %s: failed to enable_irq_wake IRQ# %d (err=%d)\n", __func__, mc->irq_phone_active, ret); free_irq(mc->irq_phone_active, mc); return ret; } #endif } #if defined(CONFIG_SIM_DETECT) mc->irq_sim_detect = platform_get_irq_byname(pdev, "sim_irq"); pr_info("[MODEM_IF:SC6500] <%s> SIM_DECTCT IRQ# = %d\n", __func__, mc->irq_sim_detect); if (mc->irq_sim_detect) { ret = request_irq(mc->irq_sim_detect, sim_detect_irq_handler, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "esc_sim_detect", mc); if (ret) { mif_err("failed to request_irq: %d\n", ret); mc->sim_state.online = false; mc->sim_state.changed = false; return ret; } ret = enable_irq_wake(mc->irq_sim_detect); if (ret) { mif_err("failed to enable_irq_wake: %d\n", ret); free_irq(mc->irq_sim_detect, mc); mc->sim_state.online = false; mc->sim_state.changed = false; return ret; } /* initialize sim_state => insert: gpio=0, remove: gpio=1 */ mc->sim_state.online = !gpio_get_value(mc->gpio_sim_detect); } #endif return ret; }