Skip to content

Commit 7270168

Browse files
SeppoTakalokartben
authored andcommitted
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 a9bc72a commit 7270168

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
@@ -84,6 +84,7 @@ enum modem_cellular_event {
8484
MODEM_CELLULAR_EVENT_SCRIPT_SUCCESS,
8585
MODEM_CELLULAR_EVENT_SCRIPT_FAILED,
8686
MODEM_CELLULAR_EVENT_CMUX_CONNECTED,
87+
MODEM_CELLULAR_EVENT_CMUX_DISCONNECTED,
8788
MODEM_CELLULAR_EVENT_DLCI1_OPENED,
8889
MODEM_CELLULAR_EVENT_DLCI2_OPENED,
8990
MODEM_CELLULAR_EVENT_TIMEOUT,
@@ -261,6 +262,8 @@ static const char *modem_cellular_event_str(enum modem_cellular_event event)
261262
return "script failed";
262263
case MODEM_CELLULAR_EVENT_CMUX_CONNECTED:
263264
return "cmux connected";
265+
case MODEM_CELLULAR_EVENT_CMUX_DISCONNECTED:
266+
return "cmux disconnected";
264267
case MODEM_CELLULAR_EVENT_DLCI1_OPENED:
265268
return "dlci1 opened";
266269
case MODEM_CELLULAR_EVENT_DLCI2_OPENED:
@@ -1454,6 +1457,7 @@ static int modem_cellular_on_dormant_state_leave(struct modem_cellular_data *dat
14541457

14551458
static int modem_cellular_on_init_power_off_state_enter(struct modem_cellular_data *data)
14561459
{
1460+
modem_cmux_disconnect_async(&data->cmux);
14571461
modem_cellular_start_timer(data, K_MSEC(2000));
14581462
return 0;
14591463
}
@@ -1465,6 +1469,9 @@ static void modem_cellular_init_power_off_event_handler(struct modem_cellular_da
14651469
(const struct modem_cellular_config *)data->dev->config;
14661470

14671471
switch (evt) {
1472+
case MODEM_CELLULAR_EVENT_CMUX_DISCONNECTED:
1473+
modem_cellular_stop_timer(data);
1474+
__fallthrough;
14681475
case MODEM_CELLULAR_EVENT_TIMEOUT:
14691476
/* Shutdown script can only be used if cmd_pipe is available, i.e. we are not in
14701477
* some intermediary state without a pipe for commands available
@@ -1864,7 +1871,9 @@ static void modem_cellular_cmux_handler(struct modem_cmux *cmux, enum modem_cmux
18641871
case MODEM_CMUX_EVENT_CONNECTED:
18651872
modem_cellular_delegate_event(data, MODEM_CELLULAR_EVENT_CMUX_CONNECTED);
18661873
break;
1867-
1874+
case MODEM_CMUX_EVENT_DISCONNECTED:
1875+
modem_cellular_delegate_event(data, MODEM_CELLULAR_EVENT_CMUX_DISCONNECTED);
1876+
break;
18681877
default:
18691878
break;
18701879
}

0 commit comments

Comments
 (0)