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,