aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2020-08-01 09:59:30 +0200
committerAleksander Morgado <aleksander@aleksander.es>2020-08-28 14:59:06 +0000
commite20eebff473c37868b528f5031809c18645309ac (patch)
treec9232c803cbad2a7c525fd78e709076b54374808 /src
parente7409b689876488594409e945687486adb1d9514 (diff)
base-modem: SIM switch handling at base modem level
When the SIM switch doesn't happen as part of an async hot swap detection, we should trigger the switch handling at base modem level, which e.g. doesn't require explicit cleanup of the SIM hot swap detection port context.
Diffstat (limited to 'src')
-rw-r--r--src/mm-base-modem.c22
-rw-r--r--src/mm-base-modem.h2
-rw-r--r--src/mm-broadband-modem.c19
3 files changed, 25 insertions, 18 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c
index 0805cedb..a11f15a4 100644
--- a/src/mm-base-modem.c
+++ b/src/mm-base-modem.c
@@ -1435,6 +1435,28 @@ mm_base_modem_get_product_id (MMBaseModem *self)
/*****************************************************************************/
+static void
+after_sim_switch_disable_ready (MMBaseModem *self,
+ GAsyncResult *res)
+{
+ g_autoptr(GError) error = NULL;
+
+ mm_base_modem_disable_finish (self, res, &error);
+ if (error)
+ mm_obj_err (self, "failed to disable after SIM switch event: %s", error->message);
+ else
+ mm_base_modem_set_valid (self, FALSE);
+}
+
+void
+mm_base_modem_process_sim_switch (MMBaseModem *self)
+{
+ mm_base_modem_set_reprobe (self, TRUE);
+ mm_base_modem_disable (self, (GAsyncReadyCallback) after_sim_switch_disable_ready, NULL);
+}
+
+/*****************************************************************************/
+
static gboolean
base_modem_invalid_idle (MMBaseModem *self)
{
diff --git a/src/mm-base-modem.h b/src/mm-base-modem.h
index 0c4b95f2..ef20ecba 100644
--- a/src/mm-base-modem.h
+++ b/src/mm-base-modem.h
@@ -214,4 +214,6 @@ gboolean mm_base_modem_disable_finish (MMBaseModem *self,
GAsyncResult *res,
GError **error);
+void mm_base_modem_process_sim_switch (MMBaseModem *self);
+
#endif /* MM_BASE_MODEM_H */
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index 9b10f83e..8441a2cf 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -11900,20 +11900,6 @@ mm_broadband_modem_create_device_identifier (MMBroadbandModem *self,
/*****************************************************************************/
-static void
-after_hotswap_event_disable_ready (MMBaseModem *self,
- GAsyncResult *res,
- gpointer user_data)
-{
- GError *error = NULL;
-
- mm_base_modem_disable_finish (self, res, &error);
- if (error) {
- mm_obj_err (self, "failed to disable after hotswap event: %s", error->message);
- g_error_free (error);
- } else
- mm_base_modem_set_valid (self, FALSE);
-}
void
mm_broadband_modem_sim_hot_swap_detected (MMBroadbandModem *self)
@@ -11924,10 +11910,7 @@ mm_broadband_modem_sim_hot_swap_detected (MMBroadbandModem *self)
self->priv->sim_hot_swap_ports_ctx = NULL;
}
- mm_base_modem_set_reprobe (MM_BASE_MODEM (self), TRUE);
- mm_base_modem_disable (MM_BASE_MODEM (self),
- (GAsyncReadyCallback) after_hotswap_event_disable_ready,
- NULL);
+ mm_base_modem_process_sim_switch (MM_BASE_MODEM (self));
}
/*****************************************************************************/