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.
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
Reference in New Issue
Block a user