diff options
author | codeworkx <codeworkx@cyanogenmod.com> | 2012-09-22 09:48:20 +0200 |
---|---|---|
committer | codeworkx <codeworkx@cyanogenmod.com> | 2012-09-22 14:02:16 +0200 |
commit | 2489007e7d740ccbc3e0a202914e243ad5178787 (patch) | |
tree | b8e6380ea7b1da63474ad68a5dba997e01146043 /drivers/misc/modem_if/modem_modemctl_device_xmm6262.c | |
parent | 5f67568eb31e3a813c7c52461dcf66ade15fc2e7 (diff) | |
download | kernel_samsung_smdk4412-2489007e7d740ccbc3e0a202914e243ad5178787.zip kernel_samsung_smdk4412-2489007e7d740ccbc3e0a202914e243ad5178787.tar.gz kernel_samsung_smdk4412-2489007e7d740ccbc3e0a202914e243ad5178787.tar.bz2 |
merge opensource jb u5
Change-Id: I1aaec157aa196f3448eff8636134fce89a814cf2
Diffstat (limited to 'drivers/misc/modem_if/modem_modemctl_device_xmm6262.c')
-rw-r--r-- | drivers/misc/modem_if/modem_modemctl_device_xmm6262.c | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/drivers/misc/modem_if/modem_modemctl_device_xmm6262.c b/drivers/misc/modem_if/modem_modemctl_device_xmm6262.c index 10b0811..4d0b69c 100644 --- a/drivers/misc/modem_if/modem_modemctl_device_xmm6262.c +++ b/drivers/misc/modem_if/modem_modemctl_device_xmm6262.c @@ -39,6 +39,12 @@ static int xmm6262_on(struct modem_ctl *mc) if (mc->gpio_revers_bias_clear) mc->gpio_revers_bias_clear(); +#ifdef CONFIG_SEC_DUAL_MODEM_MODE + gpio_set_value(mc->gpio_sim_io_sel, 0); + gpio_set_value(mc->gpio_cp_ctrl1, 1); + gpio_set_value(mc->gpio_cp_ctrl2, 0); +#endif + /* TODO */ gpio_set_value(mc->gpio_reset_req_n, 0); gpio_set_value(mc->gpio_cp_on, 0); @@ -137,15 +143,19 @@ static irqreturn_t phone_active_irq_handler(int irq, void *_mc) mif_info("PA EVENT : reset =%d, pa=%d, cp_dump=%d\n", phone_reset, phone_active_value, cp_dump_value); - if (phone_reset && phone_active_value) + if (phone_reset && phone_active_value) { phone_state = STATE_BOOTING; - else if (phone_reset && !phone_active_value) { - if (cp_dump_value) - phone_state = STATE_CRASH_EXIT; - else - phone_state = STATE_CRASH_RESET; - } else + } else if (mc->dev->power.is_suspended && !phone_active_value) { + /*fixing dpm timeout by port2 resume retry*/ + mif_err("CP reset while dpm resume\n"); + xmm6262_off(mc); + phone_state = STATE_CRASH_RESET; + } else if (phone_reset && !phone_active_value) { + phone_state = + (cp_dump_value) ? STATE_CRASH_EXIT : STATE_CRASH_RESET; + } else { phone_state = STATE_OFFLINE; + } if (mc->iod && mc->iod->modem_state_changed) mc->iod->modem_state_changed(mc->iod, phone_state); @@ -168,7 +178,8 @@ static irqreturn_t sim_detect_irq_handler(int irq, void *_mc) if (mc->iod && mc->iod->sim_state_changed) mc->iod->sim_state_changed(mc->iod, - !gpio_get_value(mc->gpio_sim_detect)); + gpio_get_value(mc->gpio_sim_detect) == mc->sim_polarity + ); return IRQ_HANDLED; } @@ -196,10 +207,17 @@ int xmm6262_init_modemctl_device(struct modem_ctl *mc, 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); @@ -241,7 +259,8 @@ int xmm6262_init_modemctl_device(struct modem_ctl *mc, } /* initialize sim_state => insert: gpio=0, remove: gpio=1 */ - mc->sim_state.online = !gpio_get_value(mc->gpio_sim_detect); + mc->sim_state.online = + gpio_get_value(mc->gpio_sim_detect) == mc->sim_polarity; } return ret; |