From 48e56c2161f3bbc3a32a6120671361fdf0cc66f1 Mon Sep 17 00:00:00 2001 From: Kamil Debski Date: Thu, 23 May 2013 11:51:54 +0200 Subject: modem_if: Move code from board-m0-modems.c to the xmm6262 driver Moved code from the board file to the driver of the xmm6262 chip. Also handling of sim card detection has been commented out. Signed-off-by: Kamil Debski Signed-off-by: Kyungmin Park --- .../misc/modem_if/modem_modemctl_device_xmm6262.c | 70 +++++++++++++++++++--- drivers/misc/modem_if/sipc4_modem.c | 4 +- 2 files changed, 64 insertions(+), 10 deletions(-) (limited to 'drivers') diff --git a/drivers/misc/modem_if/modem_modemctl_device_xmm6262.c b/drivers/misc/modem_if/modem_modemctl_device_xmm6262.c index 015a8732ee7..09569069ae6 100644 --- a/drivers/misc/modem_if/modem_modemctl_device_xmm6262.c +++ b/drivers/misc/modem_if/modem_modemctl_device_xmm6262.c @@ -23,9 +23,52 @@ #include #include #include +#include #include #include "modem_prj.h" +static void xmm_gpio_revers_bias_clear(struct modem_ctl *mc) +{ + gpio_direction_output(mc->gpio_pda_active, 0); + gpio_direction_output(mc->gpio_phone_active, 0); + gpio_direction_output(mc->gpio_cp_dump_int, 0); + gpio_direction_output(mc->mdm_data->link_pm_data->gpio_link_active, 0); + gpio_direction_output(mc->mdm_data->link_pm_data->gpio_link_hostwake, 0); + gpio_direction_output(mc->mdm_data->link_pm_data->gpio_link_slavewake, 0); + + gpio_direction_output(mc->gpio_reset_req_n, 0); /* added by K */ + gpio_direction_output(mc->gpio_cp_on, 0); /* added by K */ + gpio_direction_output(mc->gpio_cp_reset, 0); /* added by K */ + +/* + if (umts_modem_data.gpio_sim_detect) + gpio_direction_output(umts_modem_data.gpio_sim_detect, 0); +*/ + + msleep(20); +} + +static void xmm_gpio_revers_bias_restore(struct modem_ctl *mc) +{ +/* + unsigned gpio_sim_detect = umts_modem_data.gpio_sim_detect; +*/ + + s3c_gpio_cfgpin(mc->gpio_phone_active, S3C_GPIO_SFN(0xF)); + s3c_gpio_cfgpin(mc->mdm_data->link_pm_data->gpio_link_hostwake, + S3C_GPIO_SFN(0xF)); + gpio_direction_input(mc->gpio_cp_dump_int); + +/* if (gpio_sim_detect) { + gpio_direction_input(gpio_sim_detect); + s3c_gpio_cfgpin(gpio_sim_detect, S3C_GPIO_SFN(0xF)); + s3c_gpio_setpull(gpio_sim_detect, S3C_GPIO_PULL_NONE); + irq_set_irq_type(gpio_to_irq(gpio_sim_detect), + IRQ_TYPE_EDGE_BOTH); + enable_irq_wake(gpio_to_irq(gpio_sim_detect)); + } */ +} + static int xmm6262_on(struct modem_ctl *mc) { mif_info("\n"); @@ -35,8 +78,7 @@ static int xmm6262_on(struct modem_ctl *mc) return -ENXIO; } - if (mc->gpio_revers_bias_clear) - mc->gpio_revers_bias_clear(); + xmm_gpio_revers_bias_clear(mc); /* TODO */ gpio_set_value(mc->gpio_reset_req_n, 0); @@ -52,8 +94,9 @@ static int xmm6262_on(struct modem_ctl *mc) udelay(60); gpio_set_value(mc->gpio_cp_on, 0); msleep(20); - if (mc->gpio_revers_bias_restore) - mc->gpio_revers_bias_restore(); + + xmm_gpio_revers_bias_restore(mc); + gpio_set_value(mc->gpio_pda_active, 1); mc->phone_state = STATE_BOOTING; @@ -83,8 +126,7 @@ static int xmm6262_reset(struct modem_ctl *mc) if (!mc->gpio_cp_reset || !mc->gpio_reset_req_n) return -ENXIO; - if (mc->gpio_revers_bias_clear) - mc->gpio_revers_bias_clear(); + xmm_gpio_revers_bias_clear(mc); gpio_set_value(mc->gpio_cp_reset, 0); gpio_set_value(mc->gpio_reset_req_n, 0); @@ -105,8 +147,20 @@ static int xmm6262_reset(struct modem_ctl *mc) gpio_set_value(mc->gpio_cp_on, 0); msleep(20); - if (mc->gpio_revers_bias_restore) - mc->gpio_revers_bias_restore(); + xmm_gpio_revers_bias_restore(mc); + +/* vvv added by Kamil */ + gpio_direction_input(mc->mdm_data->link_pm_data->gpio_link_hostwake); + gpio_direction_input(mc->gpio_phone_active); + gpio_direction_input(mc->gpio_cp_dump_int); + + gpio_set_value(mc->gpio_pda_active, 1); + + msleep(10); + + gpio_set_value(mc->mdm_data->link_pm_data->gpio_link_active, 1); + gpio_set_value(mc->mdm_data->link_pm_data->gpio_link_slavewake, 1); +/* ^^^ added by Kamil */ mc->phone_state = STATE_BOOTING; diff --git a/drivers/misc/modem_if/sipc4_modem.c b/drivers/misc/modem_if/sipc4_modem.c index 30560e05d26..3f22f6a8497 100644 --- a/drivers/misc/modem_if/sipc4_modem.c +++ b/drivers/misc/modem_if/sipc4_modem.c @@ -450,9 +450,9 @@ static struct modem_data *modem_parse_dt(struct platform_device *pdev, struct de dt_parse_err: if (mc && mc->link_pm_data) - free(mc->link_pm_data); + kfree(mc->link_pm_data); if (mc) - free(mc); + kfree(mc); return ERR_PTR(err); } -- cgit v1.2.3