1717#include <zephyr/modem/backend/uart.h>
1818#include <zephyr/net/ppp.h>
1919#include <zephyr/pm/device.h>
20+ #include <zephyr/pm/device.h>
21+ #include <zephyr/pm/device_runtime.h>
2022#include <zephyr/sys/atomic.h>
2123
2224#include <zephyr/logging/log.h>
@@ -191,6 +193,9 @@ struct modem_cellular_config {
191193 uint16_t startup_time_ms ;
192194 uint16_t shutdown_time_ms ;
193195 bool autostarts ;
196+ bool cmux_enable_runtime_power_save ;
197+ bool cmux_close_pipe_on_power_save ;
198+ k_timeout_t cmux_idle_timeout ;
194199 const struct modem_chat_script * init_chat_script ;
195200 const struct modem_chat_script * dial_chat_script ;
196201 const struct modem_chat_script * periodic_chat_script ;
@@ -2102,7 +2107,6 @@ static int modem_cellular_init(const struct device *dev)
21022107
21032108 k_mutex_init (& data -> api_lock );
21042109 k_work_init_delayable (& data -> timeout_work , modem_cellular_timeout_handler );
2105-
21062110 k_work_init (& data -> event_dispatch_work , modem_cellular_event_dispatch_handler );
21072111 ring_buf_init (& data -> event_rb , sizeof (data -> event_buf ), data -> event_buf );
21082112
@@ -2149,6 +2153,9 @@ static int modem_cellular_init(const struct device *dev)
21492153 .receive_buf_size = ARRAY_SIZE (data -> cmux_receive_buf ),
21502154 .transmit_buf = data -> cmux_transmit_buf ,
21512155 .transmit_buf_size = ARRAY_SIZE (data -> cmux_transmit_buf ),
2156+ .enable_runtime_power_management = config -> cmux_enable_runtime_power_save ,
2157+ .close_pipe_on_power_save = config -> cmux_close_pipe_on_power_save ,
2158+ .idle_timeout = config -> cmux_idle_timeout ,
21522159 };
21532160
21542161 modem_cmux_init (& data -> cmux , & cmux_config );
@@ -2886,11 +2893,8 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script,
28862893
28872894/* Helper to define modem instance */
28882895#define MODEM_CELLULAR_DEFINE_INSTANCE (inst , power_ms , reset_ms , startup_ms , shutdown_ms , start , \
2889- set_baudrate_script , \
2890- init_script , \
2891- dial_script , \
2892- periodic_script , \
2893- shutdown_script ) \
2896+ set_baudrate_script , init_script , dial_script , \
2897+ periodic_script , shutdown_script ) \
28942898 static const struct modem_cellular_config MODEM_CELLULAR_INST_NAME(config, inst) = { \
28952899 .uart = DEVICE_DT_GET(DT_INST_BUS(inst)), \
28962900 .power_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_power_gpios, {}), \
@@ -2899,14 +2903,19 @@ MODEM_CHAT_SCRIPT_DEFINE(sqn_gm02s_periodic_chat_script,
28992903 .dtr_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, mdm_dtr_gpios, {}), \
29002904 .power_pulse_duration_ms = (power_ms), \
29012905 .reset_pulse_duration_ms = (reset_ms), \
2902- .startup_time_ms = (startup_ms), \
2906+ .startup_time_ms = (startup_ms), \
29032907 .shutdown_time_ms = (shutdown_ms), \
29042908 .autostarts = DT_INST_PROP_OR(inst, autostarts, (start)), \
2905- .set_baudrate_chat_script = (set_baudrate_script), \
2906- .init_chat_script = (init_script), \
2907- .dial_chat_script = (dial_script), \
2909+ .cmux_enable_runtime_power_save = \
2910+ DT_INST_PROP_OR(inst, cmux_enable_runtime_power_save, 0), \
2911+ .cmux_close_pipe_on_power_save = \
2912+ DT_INST_PROP_OR(inst, cmux_close_pipe_on_power_save, 0), \
2913+ .cmux_idle_timeout = K_MSEC(DT_INST_PROP_OR(inst, cmux_idle_timeout_ms, 0)), \
2914+ .set_baudrate_chat_script = (set_baudrate_script), \
2915+ .init_chat_script = (init_script), \
2916+ .dial_chat_script = (dial_script), \
29082917 .periodic_chat_script = (periodic_script), \
2909- .shutdown_chat_script = (shutdown_script), \
2918+ .shutdown_chat_script = (shutdown_script), \
29102919 .user_pipes = MODEM_CELLULAR_GET_USER_PIPES(inst), \
29112920 .user_pipes_size = ARRAY_SIZE(MODEM_CELLULAR_GET_USER_PIPES(inst)), \
29122921 }; \
0 commit comments