Skip to content

Commit 087267a

Browse files
vytvirkartben
authored andcommitted
drivers: modem: add support for Quectel EG800Q
Added support for Quectel EG800Q LTE Cat 1bis modem. Signed-off-by: Vytautas Virvičius <[email protected]>
1 parent 8708964 commit 087267a

File tree

4 files changed

+86
-3
lines changed

4 files changed

+86
-3
lines changed

drivers/modem/Kconfig.cellular

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ config MODEM_CELLULAR
1919
DT_HAS_U_BLOX_SARA_R5_ENABLED || DT_HAS_SWIR_HL7800_ENABLED || \
2020
DT_HAS_TELIT_ME910G1_ENABLED || DT_HAS_TELIT_ME310G1_ENABLED || \
2121
DT_HAS_QUECTEL_EG25_G_ENABLED || DT_HAS_NORDIC_NRF91_SLM_ENABLED || \
22-
DT_HAS_SQN_GM02S_ENABLED || DT_HAS_U_BLOX_LARA_R6_ENABLED)
22+
DT_HAS_SQN_GM02S_ENABLED || DT_HAS_U_BLOX_LARA_R6_ENABLED || \
23+
DT_HAS_QUECTEL_EG800Q_ENABLED)
2324
help
2425
This driver uses the generic 3gpp AT commands, along
2526
with the standard protocols CMUX and PPP, to configure

drivers/modem/modem_cellular.c

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,8 @@ MODEM_CHAT_MATCHES_DEFINE(dial_abort_matches,
525525
MODEM_CHAT_MATCH("NO CARRIER", "", NULL),
526526
MODEM_CHAT_MATCH("NO DIALTONE", "", NULL));
527527

528-
#if DT_HAS_COMPAT_STATUS_OKAY(swir_hl7800) || DT_HAS_COMPAT_STATUS_OKAY(sqn_gm02s)
528+
#if DT_HAS_COMPAT_STATUS_OKAY(swir_hl7800) || DT_HAS_COMPAT_STATUS_OKAY(sqn_gm02s) || \
529+
DT_HAS_COMPAT_STATUS_OKAY(quectel_eg800q)
529530
MODEM_CHAT_MATCH_DEFINE(connect_match, "CONNECT", "", NULL);
530531
#endif
531532

@@ -2022,6 +2023,54 @@ MODEM_CHAT_SCRIPT_DEFINE(quectel_eg25_g_periodic_chat_script,
20222023
modem_cellular_chat_callback_handler, 4);
20232024
#endif
20242025

2026+
#if DT_HAS_COMPAT_STATUS_OKAY(quectel_eg800q)
2027+
MODEM_CHAT_SCRIPT_CMDS_DEFINE(quectel_eg800q_init_chat_script_cmds,
2028+
MODEM_CHAT_SCRIPT_CMD_RESP("AT", ok_match),
2029+
MODEM_CHAT_SCRIPT_CMD_RESP("ATE0", ok_match),
2030+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CFUN?", ok_match),
2031+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CFUN=4", ok_match),
2032+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CMEE=1", ok_match),
2033+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CEREG=1", ok_match),
2034+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CEREG?", ok_match),
2035+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CGSN", imei_match),
2036+
MODEM_CHAT_SCRIPT_CMD_RESP("", ok_match),
2037+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CGMM", cgmm_match),
2038+
MODEM_CHAT_SCRIPT_CMD_RESP("", ok_match),
2039+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CGMI", cgmi_match),
2040+
MODEM_CHAT_SCRIPT_CMD_RESP("", ok_match),
2041+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CGMR", cgmr_match),
2042+
MODEM_CHAT_SCRIPT_CMD_RESP("", ok_match),
2043+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CIMI", cimi_match),
2044+
MODEM_CHAT_SCRIPT_CMD_RESP("", ok_match),
2045+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CMUX=0,0,5,127", ok_match));
2046+
2047+
MODEM_CHAT_SCRIPT_DEFINE(quectel_eg800q_init_chat_script, quectel_eg800q_init_chat_script_cmds,
2048+
abort_matches, modem_cellular_chat_callback_handler, 30);
2049+
2050+
MODEM_CHAT_SCRIPT_CMDS_DEFINE(quectel_eg800q_dial_chat_script_cmds,
2051+
MODEM_CHAT_SCRIPT_CMD_RESP_MULT("AT+CGACT=0,1", allow_match),
2052+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CGDCONT=1,\"IP\","
2053+
"\""CONFIG_MODEM_CELLULAR_APN"\"",
2054+
ok_match),
2055+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CFUN=1", ok_match),
2056+
/* this at command is required as a small delay before performing
2057+
* dialing, otherwise we get 'NO CARRIER' and abort
2058+
*/
2059+
MODEM_CHAT_SCRIPT_CMD_RESP_NONE("AT", 500),
2060+
MODEM_CHAT_SCRIPT_CMD_RESP("ATD*99***1#", connect_match),);
2061+
2062+
MODEM_CHAT_SCRIPT_DEFINE(quectel_eg800q_dial_chat_script, quectel_eg800q_dial_chat_script_cmds,
2063+
dial_abort_matches, modem_cellular_chat_callback_handler, 10);
2064+
2065+
MODEM_CHAT_SCRIPT_CMDS_DEFINE(quectel_eg800q_periodic_chat_script_cmds,
2066+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CEREG?", ok_match),
2067+
MODEM_CHAT_SCRIPT_CMD_RESP("AT+CSQ", csq_match));
2068+
2069+
MODEM_CHAT_SCRIPT_DEFINE(quectel_eg800q_periodic_chat_script,
2070+
quectel_eg800q_periodic_chat_script_cmds, abort_matches,
2071+
modem_cellular_chat_callback_handler, 4);
2072+
#endif
2073+
20252074
#if DT_HAS_COMPAT_STATUS_OKAY(simcom_sim7080)
20262075
MODEM_CHAT_SCRIPT_CMDS_DEFINE(simcom_sim7080_init_chat_script_cmds,
20272076
MODEM_CHAT_SCRIPT_CMD_RESP_NONE("AT", 100),
@@ -2551,6 +2600,25 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script,
25512600
&quectel_eg25_g_dial_chat_script, \
25522601
&quectel_eg25_g_periodic_chat_script, NULL)
25532602

2603+
#define MODEM_CELLULAR_DEVICE_QUECTEL_EG800Q(inst) \
2604+
MODEM_PPP_DEFINE(MODEM_CELLULAR_INST_NAME(ppp, inst), NULL, 98, 1500, 64); \
2605+
\
2606+
static struct modem_cellular_data MODEM_CELLULAR_INST_NAME(data, inst) = { \
2607+
.chat_delimiter = "\r", \
2608+
.chat_filter = "\n", \
2609+
.ppp = &MODEM_CELLULAR_INST_NAME(ppp, inst), \
2610+
}; \
2611+
\
2612+
MODEM_CELLULAR_DEFINE_AND_INIT_USER_PIPES(inst, \
2613+
(user_pipe_0, 3), \
2614+
(user_pipe_1, 4)) \
2615+
\
2616+
MODEM_CELLULAR_DEFINE_INSTANCE(inst, 1500, 500, 15000, 5000, false, \
2617+
NULL, \
2618+
&quectel_eg800q_init_chat_script, \
2619+
&quectel_eg800q_dial_chat_script, \
2620+
&quectel_eg800q_periodic_chat_script, NULL)
2621+
25542622
#define MODEM_CELLULAR_DEVICE_SIMCOM_SIM7080(inst) \
25552623
MODEM_PPP_DEFINE(MODEM_CELLULAR_INST_NAME(ppp, inst), NULL, 98, 1500, 64); \
25562624
\
@@ -2729,6 +2797,10 @@ DT_INST_FOREACH_STATUS_OKAY(MODEM_CELLULAR_DEVICE_QUECTEL_BG95)
27292797
DT_INST_FOREACH_STATUS_OKAY(MODEM_CELLULAR_DEVICE_QUECTEL_EG25_G)
27302798
#undef DT_DRV_COMPAT
27312799

2800+
#define DT_DRV_COMPAT quectel_eg800q
2801+
DT_INST_FOREACH_STATUS_OKAY(MODEM_CELLULAR_DEVICE_QUECTEL_EG800Q)
2802+
#undef DT_DRV_COMPAT
2803+
27322804
#define DT_DRV_COMPAT simcom_sim7080
27332805
DT_INST_FOREACH_STATUS_OKAY(MODEM_CELLULAR_DEVICE_SIMCOM_SIM7080)
27342806
#undef DT_DRV_COMPAT
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
description: Quectel EG800Q modem
2+
3+
compatible: "quectel,eg800q"
4+
5+
include: uart-device.yaml
6+
7+
properties:
8+
mdm-power-gpios:
9+
type: phandle-array
10+
required: true

subsys/modem/Kconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ config MODEM_CMUX_DEFAULT_MTU_127
3535
DT_HAS_SIMCOM_SIM7080_ENABLED || DT_HAS_U_BLOX_SARA_R4_ENABLED || \
3636
DT_HAS_U_BLOX_SARA_R5_ENABLED || DT_HAS_SWIR_HL7800_ENABLED || \
3737
DT_HAS_TELIT_ME910G1_ENABLED || DT_HAS_TELIT_ME310G1_ENABLED || \
38-
DT_HAS_SQN_GM02S_ENABLED)
38+
DT_HAS_SQN_GM02S_ENABLED || DT_HAS_QUECTEL_EG800Q_ENABLED)
3939
help
4040
Use the default MTU size of 127 bytes for the CMUX module on certain modems.
4141
This must match the AT+CMUX commands in the modem_cellular driver.

0 commit comments

Comments
 (0)