aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc/modem_if/modem_modemctl_device_mdm6600.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/misc/modem_if/modem_modemctl_device_mdm6600.c')
-rw-r--r--drivers/misc/modem_if/modem_modemctl_device_mdm6600.c43
1 files changed, 28 insertions, 15 deletions
diff --git a/drivers/misc/modem_if/modem_modemctl_device_mdm6600.c b/drivers/misc/modem_if/modem_modemctl_device_mdm6600.c
index ad44579..38bef9a 100644
--- a/drivers/misc/modem_if/modem_modemctl_device_mdm6600.c
+++ b/drivers/misc/modem_if/modem_modemctl_device_mdm6600.c
@@ -24,12 +24,14 @@
#include <linux/sched.h>
#include <linux/platform_device.h>
-#include <linux/platform_data/modem.h>
+#include "modem.h"
#include "modem_prj.h"
#include <linux/regulator/consumer.h>
#include <plat/gpio-cfg.h>
+#include "modem_link_device_pld.h"
+
#if defined(CONFIG_MACH_M0_CTC)
#include <linux/mfd/max77693.h>
#endif
@@ -39,6 +41,8 @@
static int mdm6600_on(struct modem_ctl *mc)
{
+ struct link_device *ld = get_current_link(mc->iod);
+
pr_info("[MODEM_IF] mdm6600_on()\n");
if (!mc->gpio_cp_reset || !mc->gpio_cp_reset_msm || !mc->gpio_cp_on) {
@@ -58,6 +62,7 @@ static int mdm6600_on(struct modem_ctl *mc)
gpio_set_value(mc->gpio_pda_active, 1);
mc->iod->modem_state_changed(mc->iod, STATE_BOOTING);
+ ld->mode = LINK_MODE_BOOT;
return 0;
}
@@ -82,7 +87,8 @@ static int mdm6600_off(struct modem_ctl *mc)
static int mdm6600_reset(struct modem_ctl *mc)
{
- int ret;
+ struct link_device *ld = get_current_link(mc->iod);
+ /* int ret; */
pr_info("[MODEM_IF] mdm6600_reset()\n");
@@ -109,6 +115,9 @@ static int mdm6600_reset(struct modem_ctl *mc)
msleep(40); /* > 37.2 + 2 msec */
}
+ mc->iod->modem_state_changed(mc->iod, STATE_BOOTING);
+ ld->mode = LINK_MODE_BOOT;
+
return 0;
}
@@ -159,6 +168,7 @@ static irqreturn_t phone_active_irq_handler(int irq, void *_mc)
int cp_dump_value = 0;
int phone_state = 0;
struct modem_ctl *mc = (struct modem_ctl *)_mc;
+ struct link_device *ld;
if (!mc->gpio_cp_reset || !mc->gpio_phone_active
/*|| !mc->gpio_cp_dump_int */) {
@@ -179,11 +189,6 @@ static irqreturn_t phone_active_irq_handler(int irq, void *_mc)
} else if (phone_reset && !phone_active_value) {
if (count == 1) {
phone_state = STATE_CRASH_EXIT;
- if (mc->iod) {
- ld = get_current_link(mc->iod);
- if (ld->terminate_comm)
- ld->terminate_comm(ld, mc->iod);
- }
if (mc->iod && mc->iod->modem_state_changed)
mc->iod->modem_state_changed
(mc->iod, phone_state);
@@ -226,8 +231,11 @@ int mdm6600_init_modemctl_device(struct modem_ctl *mc, struct modem_data *pdata)
mc->vbus_on = pdata->vbus_on;
mc->vbus_off = pdata->vbus_off;
- pdev = to_platform_device(mc->dev);
- mc->irq_phone_active = platform_get_irq_byname(pdev, "cp_active_irq");
+ mc->irq_phone_active = pdata->irq_phone_active;
+ if (!mc->irq_phone_active) {
+ mif_err("%s: ERR! get irq_phone_active fail\n", mc->name);
+ return -1;
+ }
pr_info("[MODEM_IF] <%s> PHONE_ACTIVE IRQ# = %d\n",
__func__, mc->irq_phone_active);
@@ -332,7 +340,7 @@ static int mdm6600_on(struct modem_ctl *mc)
return -ENXIO;
}
- gpio_set_value(mc->gpio_pda_active, 0);
+ gpio_set_value(mc->gpio_pda_active, 1);
gpio_set_value(mc->gpio_cp_on, 1);
msleep(500);
@@ -346,8 +354,6 @@ static int mdm6600_on(struct modem_ctl *mc)
gpio_set_value(mc->gpio_cp_on, 0);
msleep(500);
- gpio_set_value(mc->gpio_pda_active, 1);
-
#if defined(CONFIG_LINK_DEVICE_PLD)
gpio_set_value(mc->gpio_fpga_cs_n, 1);
#endif
@@ -420,9 +426,13 @@ static int mdm6600_reset(struct modem_ctl *mc)
static int mdm6600_boot_on(struct modem_ctl *mc)
{
struct regulator *regulator;
+ struct link_device *ld = get_current_link(mc->iod);
+ struct pld_link_device *dpld = to_pld_link_device(ld);
pr_info("[MSM] <%s>\n", __func__);
+ dpld->recv_intr(dpld);
+
if (!mc->gpio_flm_uart_sel) {
pr_err("[MSM] no gpio data\n");
return -ENXIO;
@@ -729,8 +739,11 @@ int mdm6600_init_modemctl_device(struct modem_ctl *mc, struct modem_data *pdata)
gpio_set_value(mc->gpio_cp_reset, 0);
gpio_set_value(mc->gpio_cp_on, 0);
- pdev = to_platform_device(mc->dev);
- mc->irq_phone_active = platform_get_irq_byname(pdev, "cp_active_irq");
+ mc->irq_phone_active = pdata->irq_phone_active;
+ if (!mc->irq_phone_active) {
+ mif_err("%s: ERR! get irq_phone_active fail\n", mc->name);
+ return -1;
+ }
pr_info("[MSM] <%s> PHONE_ACTIVE IRQ# = %d\n",
__func__, mc->irq_phone_active);
@@ -754,7 +767,7 @@ int mdm6600_init_modemctl_device(struct modem_ctl *mc, struct modem_data *pdata)
}
#if defined(CONFIG_SIM_DETECT)
- mc->irq_sim_detect = platform_get_irq_byname(pdev, "sim_irq");
+ mc->irq_sim_detect = pdata->irq_sim_detect;
pr_info("[MSM] <%s> SIM_DECTCT IRQ# = %d\n",
__func__, mc->irq_sim_detect);