Skip to content

Commit fd59bb4

Browse files
committed
drivers: modem: cellular: Close down CMUX before shut down
Properly close down the CMUX channel before shutting down the modem. The CMUX Close-Down command should indicate the remote end to clean up, even if we don't have shutdown script or power-key GPIO. Signed-off-by: Seppo Takalo <[email protected]>
1 parent 2e31ca7 commit fd59bb4

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

drivers/modem/modem_cellular.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ enum modem_cellular_event {
8686
MODEM_CELLULAR_EVENT_SCRIPT_SUCCESS,
8787
MODEM_CELLULAR_EVENT_SCRIPT_FAILED,
8888
MODEM_CELLULAR_EVENT_CMUX_CONNECTED,
89+
MODEM_CELLULAR_EVENT_CMUX_DISCONNECTED,
8990
MODEM_CELLULAR_EVENT_DLCI1_OPENED,
9091
MODEM_CELLULAR_EVENT_DLCI2_OPENED,
9192
MODEM_CELLULAR_EVENT_TIMEOUT,
@@ -270,6 +271,8 @@ static const char *modem_cellular_event_str(enum modem_cellular_event event)
270271
return "script failed";
271272
case MODEM_CELLULAR_EVENT_CMUX_CONNECTED:
272273
return "cmux connected";
274+
case MODEM_CELLULAR_EVENT_CMUX_DISCONNECTED:
275+
return "cmux disconnected";
273276
case MODEM_CELLULAR_EVENT_DLCI1_OPENED:
274277
return "dlci1 opened";
275278
case MODEM_CELLULAR_EVENT_DLCI2_OPENED:
@@ -1466,6 +1469,7 @@ static int modem_cellular_on_dormant_state_leave(struct modem_cellular_data *dat
14661469

14671470
static int modem_cellular_on_init_power_off_state_enter(struct modem_cellular_data *data)
14681471
{
1472+
modem_cmux_disconnect_async(&data->cmux);
14691473
modem_cellular_start_timer(data, K_MSEC(2000));
14701474
return 0;
14711475
}
@@ -1477,6 +1481,9 @@ static void modem_cellular_init_power_off_event_handler(struct modem_cellular_da
14771481
(const struct modem_cellular_config *)data->dev->config;
14781482

14791483
switch (evt) {
1484+
case MODEM_CELLULAR_EVENT_CMUX_DISCONNECTED:
1485+
modem_cellular_stop_timer(data);
1486+
__fallthrough;
14801487
case MODEM_CELLULAR_EVENT_TIMEOUT:
14811488
/* Shutdown script can only be used if cmd_pipe is available, i.e. we are not in
14821489
* some intermediary state without a pipe for commands available
@@ -1876,7 +1883,9 @@ static void modem_cellular_cmux_handler(struct modem_cmux *cmux, enum modem_cmux
18761883
case MODEM_CMUX_EVENT_CONNECTED:
18771884
modem_cellular_delegate_event(data, MODEM_CELLULAR_EVENT_CMUX_CONNECTED);
18781885
break;
1879-
1886+
case MODEM_CMUX_EVENT_DISCONNECTED:
1887+
modem_cellular_delegate_event(data, MODEM_CELLULAR_EVENT_CMUX_DISCONNECTED);
1888+
break;
18801889
default:
18811890
break;
18821891
}

0 commit comments

Comments
 (0)