From 254c126236d70a4a9cbe1c5b4d4d8834789a9424 Mon Sep 17 00:00:00 2001 From: Benjamin Lindqvist Date: Thu, 4 Mar 2021 14:18:13 +0100 Subject: [PATCH] drivers: modem: optional factory reset at modem boot Some modems, under some conditions, have a tendency to get stuck without a connection due to cached state. We have observed this on some Simcom LTE modems after large cellular outages. The modems are unable to escape their cached state for some reason unless they're factory reset (or a cache clearence is forced in some other way). This commit allows for the modem to be factory reset at each boot. This minimizes dependencies on external state by ensuring each power-up is as similar as possible. Signed-off-by: Benjamin Lindqvist --- drivers/modem/Kconfig.gsm | 8 ++++++++ drivers/modem/gsm_ppp.c | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/drivers/modem/Kconfig.gsm b/drivers/modem/Kconfig.gsm index e4ced9ab8f3..780461d39fa 100644 --- a/drivers/modem/Kconfig.gsm +++ b/drivers/modem/Kconfig.gsm @@ -61,4 +61,12 @@ config MODEM_GSM_MANUAL_MCCMNO the network provider and may need to be changed if auto is not selected. +config MODEM_GSM_FACTORY_RESET_AT_BOOT + bool "Factory reset modem at boot" + help + If this is enabled, the modem will be reset to factory default + settings first thing in the initialization sequence. This is + helpful if your modem has a tendency to get stuck due to cached + state. + endif diff --git a/drivers/modem/gsm_ppp.c b/drivers/modem/gsm_ppp.c index 371e22aa7a1..cb98a41176a 100644 --- a/drivers/modem/gsm_ppp.c +++ b/drivers/modem/gsm_ppp.c @@ -366,6 +366,16 @@ static void gsm_finalize_connection(struct gsm_modem *gsm) } } + if (IS_ENABLED(CONFIG_MODEM_GSM_FACTORY_RESET_AT_BOOT)) { + (void)modem_cmd_send_nolock(&gsm->context.iface, + &gsm->context.cmd_handler, + &response_cmds[0], + ARRAY_SIZE(response_cmds), + "AT&F", &gsm->sem_response, + GSM_CMD_AT_TIMEOUT); + k_sleep(K_SECONDS(1)); + } + (void)gsm_setup_mccmno(gsm); ret = modem_cmd_handler_setup_cmds_nolock(&gsm->context.iface,