diff options
author | Kamil Debski <k.debski@samsung.com> | 2013-05-23 11:51:54 +0200 |
---|---|---|
committer | Chanho Park <chanho61.park@samsung.com> | 2014-11-18 11:43:21 +0900 |
commit | 48e56c2161f3bbc3a32a6120671361fdf0cc66f1 (patch) | |
tree | bdf8c65e1e3fcecb0eb02b5a9891410689608ea3 /drivers | |
parent | 5605b9d941fac1b687afc5f438f1d8250cb0c759 (diff) | |
download | linux-3.10-48e56c2161f3bbc3a32a6120671361fdf0cc66f1.tar.gz linux-3.10-48e56c2161f3bbc3a32a6120671361fdf0cc66f1.tar.bz2 linux-3.10-48e56c2161f3bbc3a32a6120671361fdf0cc66f1.zip |
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 <k.debski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/misc/modem_if/modem_modemctl_device_xmm6262.c | 70 | ||||
-rw-r--r-- | drivers/misc/modem_if/sipc4_modem.c | 4 |
2 files changed, 64 insertions, 10 deletions
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 <linux/delay.h> #include <linux/platform_device.h> #include <plat/devs.h> +#include <plat/gpio-cfg.h> #include <linux/platform_data/modem.h> #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); } |