From db31558c7d1640042744698870b796408133fba5 Mon Sep 17 00:00:00 2001 From: Yong Cong Sin Date: Thu, 20 Jan 2022 23:34:05 +0800 Subject: [PATCH] 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 --- drivers/modem/gsm_ppp.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/modem/gsm_ppp.c b/drivers/modem/gsm_ppp.c index 9341575414b..1fdcd4cc70b 100644 --- a/drivers/modem/gsm_ppp.c +++ b/drivers/modem/gsm_ppp.c @@ -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; + 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 (gsm->attached) { @@ -947,7 +949,8 @@ static void mux_setup(struct k_work *work) LOG_INF("PPP channel %d connected to %s", 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; } @@ -1007,7 +1010,8 @@ static void gsm_configure(struct k_work *work) 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)