drivers: modem: gsm: Convert gsm_finalize_connection to work

Convert gsm_finalize_connection into a work so that the caller
work won't have to run again when gsm_finalize_connection
reschedule gsm_configure_work on error.

Signed-off-by: Yong Cong Sin <yongcong.sin@gmail.com>
This commit is contained in:
Yong Cong Sin 2022-01-20 23:34:05 +08:00 committed by Carles Cufí
commit db31558c7d

View file

@ -598,9 +598,11 @@ static void rssi_handler(struct k_work *work)
} }
static void gsm_finalize_connection(struct gsm_modem *gsm) static void gsm_finalize_connection(struct k_work *work)
{ {
int ret = 0; int ret = 0;
struct k_work_delayable *dwork = k_work_delayable_from_work(work);
struct gsm_modem *gsm = CONTAINER_OF(dwork, struct gsm_modem, gsm_configure_work);
/* If already attached, jump right to RSSI readout */ /* If already attached, jump right to RSSI readout */
if (gsm->attached) { if (gsm->attached) {
@ -947,7 +949,8 @@ static void mux_setup(struct k_work *work)
LOG_INF("PPP channel %d connected to %s", LOG_INF("PPP channel %d connected to %s",
DLCI_PPP, gsm->ppp_dev->name); DLCI_PPP, gsm->ppp_dev->name);
gsm_finalize_connection(gsm); k_work_init_delayable(&gsm->gsm_configure_work, gsm_finalize_connection);
(void)gsm_work_reschedule(&gsm->gsm_configure_work, K_NO_WAIT);
break; break;
} }
@ -1007,7 +1010,8 @@ static void gsm_configure(struct k_work *work)
return; return;
} }
gsm_finalize_connection(gsm); k_work_init_delayable(&gsm->gsm_configure_work, gsm_finalize_connection);
(void)gsm_work_reschedule(&gsm->gsm_configure_work, K_NO_WAIT);
} }
void gsm_ppp_start(const struct device *dev) void gsm_ppp_start(const struct device *dev)