Skip to content

Commit 8e07777

Browse files
vThibofabiobaltieri
authored andcommitted
drivers: modem: modem_cellular: Add Sequans GM02S Modem
Adds the necessary defines with init, dial and periodic chat scripts to support the Sequans GM02S Modem. Modification to cxreg handler to process GM02S +CEREG response. Signed-off-by: Thibo Verheyde <thibo@dptechnics.com>
1 parent e402b03 commit 8e07777

File tree

2 files changed

+76
-3
lines changed

2 files changed

+76
-3
lines changed

drivers/modem/Kconfig.cellular

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ config MODEM_CELLULAR
1616
DT_HAS_SIMCOM_SIM7080_ENABLED || DT_HAS_U_BLOX_SARA_R4_ENABLED || \
1717
DT_HAS_U_BLOX_SARA_R5_ENABLED || DT_HAS_SWIR_HL7800_ENABLED || \
1818
DT_HAS_TELIT_ME910G1_ENABLED || DT_HAS_QUECTEL_EG25_G_ENABLED || \
19-
DT_HAS_NORDIC_NRF91_SLM_ENABLED)
19+
DT_HAS_NORDIC_NRF91_SLM_ENABLED || DT_HAS_SQN_GM02S_ENABLED)
2020
help
2121
This driver uses the generic 3gpp AT commands, along
2222
with the standard protocols CMUX and PPP, to configure

drivers/modem/modem_cellular.c

Lines changed: 75 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ static void modem_cellular_chat_on_cxreg(struct modem_chat *chat, char **argv, u
408408

409409
if (argc == 2) {
410410
registration_status = atoi(argv[1]);
411-
} else if (argc == 3) {
411+
} else if (argc == 3 || argc == 6) {
412412
registration_status = atoi(argv[2]);
413413
} else {
414414
return;
@@ -458,7 +458,7 @@ MODEM_CHAT_MATCHES_DEFINE(dial_abort_matches,
458458
MODEM_CHAT_MATCH("NO CARRIER", "", NULL),
459459
MODEM_CHAT_MATCH("NO DIALTONE", "", NULL));
460460

461-
#if DT_HAS_COMPAT_STATUS_OKAY(swir_hl7800)
461+
#if DT_HAS_COMPAT_STATUS_OKAY(swir_hl7800) || DT_HAS_COMPAT_STATUS_OKAY(sqn_gm02s)
462462
MODEM_CHAT_MATCH_DEFINE(connect_match, "CONNECT", "", NULL);
463463
#endif
464464

@@ -2038,6 +2038,45 @@ MODEM_CHAT_SCRIPT_DEFINE(nordic_nrf91_slm_periodic_chat_script,
20382038
modem_cellular_chat_callback_handler, 4);
20392039
#endif
20402040

2041+
#if DT_HAS_COMPAT_STATUS_OKAY(sqn_gm02s)
2042+
MODEM_CHAT_SCRIPT_CMDS_DEFINE(sqn_gm02s_init_chat_script_cmds,
2043+
MODEM_CHAT_SCRIPT_CMD_RESP("ATE0", ok_match),
2044+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CFUN=4", ok_match),
2045+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CMEE=1", ok_match),
2046+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CEREG=1", ok_match),
2047+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CEREG?", ok_match),
2048+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CGSN", imei_match),
2049+
MODEM_CHAT_SCRIPT_CMD_RESP("", ok_match),
2050+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CGMM", cgmm_match),
2051+
MODEM_CHAT_SCRIPT_CMD_RESP("", ok_match),
2052+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CGMI", cgmi_match),
2053+
MODEM_CHAT_SCRIPT_CMD_RESP("", ok_match),
2054+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CGMR", cgmr_match),
2055+
MODEM_CHAT_SCRIPT_CMD_RESP("", ok_match),
2056+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CMUX=0,0,5,127", ok_match));
2057+
2058+
MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_init_chat_script, sqn_gm02s_init_chat_script_cmds,
2059+
abort_matches, modem_cellular_chat_callback_handler, 10);
2060+
2061+
MODEM_CHAT_SCRIPT_CMDS_DEFINE(sqn_gm02s_dial_chat_script_cmds,
2062+
MODEM_CHAT_SCRIPT_CMD_RESP_MULT("AT+CGACT=0,1", allow_match),
2063+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CGDCONT=1,\"IP\","
2064+
"\""CONFIG_MODEM_CELLULAR_APN"\"",
2065+
ok_match),
2066+
MODEM_CHAT_SCRIPT_CMD_RESP_NONE("AT+CFUN=1", 10000),
2067+
MODEM_CHAT_SCRIPT_CMD_RESP("ATD*99***1#", connect_match));
2068+
2069+
MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_dial_chat_script, sqn_gm02s_dial_chat_script_cmds,
2070+
dial_abort_matches, modem_cellular_chat_callback_handler, 15);
2071+
2072+
MODEM_CHAT_SCRIPT_CMDS_DEFINE(sqn_gm02s_periodic_chat_script_cmds,
2073+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CEREG?", ok_match));
2074+
2075+
MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script,
2076+
sqn_gm02s_periodic_chat_script_cmds, abort_matches,
2077+
modem_cellular_chat_callback_handler, 4);
2078+
#endif
2079+
20412080
#define MODEM_CELLULAR_INST_NAME(name, inst) \
20422081
_CONCAT(_CONCAT(_CONCAT(name, _), DT_DRV_COMPAT), inst)
20432082

@@ -2302,6 +2341,36 @@ MODEM_CHAT_SCRIPT_DEFINE(nordic_nrf91_slm_periodic_chat_script,
23022341
&MODEM_CELLULAR_INST_NAME(config, inst), POST_KERNEL, 99, \
23032342
&modem_cellular_api);
23042343

2344+
#define MODEM_CELLULAR_DEVICE_SQN_GM02S(inst) \
2345+
MODEM_PPP_DEFINE(MODEM_CELLULAR_INST_NAME(ppp, inst), NULL, 98, 1500, 64); \
2346+
\
2347+
static struct modem_cellular_data MODEM_CELLULAR_INST_NAME(data, inst) = { \
2348+
.chat_delimiter = "\r", \
2349+
.chat_filter = "\n", \
2350+
.ppp = &MODEM_CELLULAR_INST_NAME(ppp, inst), \
2351+
}; \
2352+
\
2353+
static struct modem_cellular_config MODEM_CELLULAR_INST_NAME(config, inst) = { \
2354+
.uart = DEVICE_DT_GET(DT_INST_BUS(inst)), \
2355+
.power_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_power_gpios, {}), \
2356+
.reset_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_reset_gpios, {}), \
2357+
.autostarts = true, \
2358+
.power_pulse_duration_ms = 1500, \
2359+
.reset_pulse_duration_ms = 100, \
2360+
.startup_time_ms = 2000, \
2361+
.shutdown_time_ms = 5000, \
2362+
.init_chat_script = &sqn_gm02s_init_chat_script, \
2363+
.dial_chat_script = &sqn_gm02s_dial_chat_script, \
2364+
.periodic_chat_script = &sqn_gm02s_periodic_chat_script, \
2365+
}; \
2366+
\
2367+
PM_DEVICE_DT_INST_DEFINE(inst, modem_cellular_pm_action); \
2368+
\
2369+
DEVICE_DT_INST_DEFINE(inst, modem_cellular_init, PM_DEVICE_DT_INST_GET(inst), \
2370+
&MODEM_CELLULAR_INST_NAME(data, inst), \
2371+
&MODEM_CELLULAR_INST_NAME(config, inst), POST_KERNEL, 99, \
2372+
&modem_cellular_api);
2373+
23052374
#define DT_DRV_COMPAT quectel_bg95
23062375
DT_INST_FOREACH_STATUS_OKAY(MODEM_CELLULAR_DEVICE_QUECTEL_BG95)
23072376
#undef DT_DRV_COMPAT
@@ -2337,3 +2406,7 @@ DT_INST_FOREACH_STATUS_OKAY(MODEM_CELLULAR_DEVICE_TELIT_ME910G1)
23372406
#define DT_DRV_COMPAT nordic_nrf91_slm
23382407
DT_INST_FOREACH_STATUS_OKAY(MODEM_CELLULAR_DEVICE_NORDIC_NRF91_SLM)
23392408
#undef DT_DRV_COMPAT
2409+
2410+
#define DT_DRV_COMPAT sqn_gm02s
2411+
DT_INST_FOREACH_STATUS_OKAY(MODEM_CELLULAR_DEVICE_SQN_GM02S)
2412+
#undef DT_DRV_COMPAT

0 commit comments

Comments
 (0)