@@ -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 )
462462MODEM_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
23062375DT_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
23382407DT_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