diff options
author | Aleksander Morgado <aleksandermj@chromium.org> | 2023-12-01 13:19:01 +0000 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2023-12-12 11:22:30 +0000 |
commit | c592cde3f0e09a1538ec062dfdeff20f8a10ea88 (patch) | |
tree | bbd4bd222644d7581ac88a39ae2d56ce84b02169 /src/mm-base-manager.c | |
parent | bbd11cda4b9d4d3ec3b96ed563fdbab07cc4e5c2 (diff) |
base-manager: allow using the low power modem setting with quick suspend/resume
Kind of defeats the purpose of the quick suspend/resume, but I can see
how this could be useful.
E.g. in ChromeOS the modems are put in low power mode during suspend
(triggered by the connection manager) and the quick suspend/resume is
also enabled by default for a quicker resume process that doesn't
involve full modem reprobe.
Diffstat (limited to 'src/mm-base-manager.c')
-rw-r--r-- | src/mm-base-manager.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c index 930cd504..eec4cd86 100644 --- a/src/mm-base-manager.c +++ b/src/mm-base-manager.c @@ -656,6 +656,7 @@ mm_base_manager_start (MMBaseManager *self, typedef struct { MMBaseManager *self; gboolean low_power; + gboolean remove; } DisableContext; static void @@ -691,7 +692,10 @@ shutdown_low_power_ready (MMIfaceModem *modem, if (!mm_iface_modem_set_power_state_finish (modem, res, &error)) mm_obj_info (ctx->self, "changing to low power state failed: %s", error->message); - remove_device_after_disable (MM_BASE_MODEM (modem), ctx); + if (ctx->remove) + remove_device_after_disable (MM_BASE_MODEM (modem), ctx); + else + disable_context_free (ctx); } static void @@ -714,7 +718,10 @@ shutdown_disable_ready (MMBaseModem *modem, return; } - remove_device_after_disable (modem, ctx); + if (ctx->remove) + remove_device_after_disable (modem, ctx); + else + disable_context_free (ctx); } static void @@ -732,6 +739,8 @@ foreach_disable (gpointer key, ctx = g_slice_new0 (DisableContext); ctx->self = g_object_ref (foreach_ctx->self); ctx->low_power = foreach_ctx->low_power; + ctx->remove = foreach_ctx->remove; + mm_base_modem_disable (modem, (GAsyncReadyCallback)shutdown_disable_ready, ctx); } @@ -752,7 +761,8 @@ foreach_remove (gpointer key, void mm_base_manager_shutdown (MMBaseManager *self, gboolean disable, - gboolean low_power) + gboolean low_power, + gboolean remove) { g_return_if_fail (self != NULL); g_return_if_fail (MM_IS_BASE_MANAGER (self)); @@ -764,6 +774,7 @@ mm_base_manager_shutdown (MMBaseManager *self, DisableContext foreach_ctx = { .self = self, .low_power = low_power, + .remove = remove, }; g_hash_table_foreach (self->priv->devices, (GHFunc)foreach_disable, &foreach_ctx); @@ -774,8 +785,10 @@ mm_base_manager_shutdown (MMBaseManager *self, return; } - /* Otherwise, just remove directly */ - g_hash_table_foreach_remove (self->priv->devices, (GHRFunc)foreach_remove, self); + if (remove) { + /* Otherwise, just remove directly */ + g_hash_table_foreach_remove (self->priv->devices, (GHRFunc)foreach_remove, self); + } } guint32 |