diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-broadband-modem-mbim.c | 13 | ||||
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 19 | ||||
-rw-r--r-- | src/mm-iface-modem-sar.c | 5 | ||||
-rw-r--r-- | src/mm-iface-modem-sar.h | 1 |
4 files changed, 32 insertions, 6 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c index 14b1571f..c9c11435 100644 --- a/src/mm-broadband-modem-mbim.c +++ b/src/mm-broadband-modem-mbim.c @@ -8205,9 +8205,18 @@ sar_load_power_level (MMIfaceModemSar *_self, static gboolean sar_enable_finish (MMIfaceModemSar *self, GAsyncResult *res, + guint *out_sar_power_level, GError **error) { - return g_task_propagate_boolean (G_TASK (res), error); + guint level; + + if (!g_task_propagate_boolean (G_TASK (res), error)) + return FALSE; + + level = GPOINTER_TO_UINT (g_task_get_task_data (G_TASK (res))); + if (out_sar_power_level) + *out_sar_power_level = level; + return TRUE; } static void @@ -8253,6 +8262,8 @@ sar_enable (MMIfaceModemSar *_self, config_state->antenna_index = 0xFFFFFFFF; config_state->backoff_index = mm_iface_modem_sar_get_power_level (_self); + g_task_set_task_data (task, GUINT_TO_POINTER (config_state->backoff_index), NULL); + message = mbim_message_ms_sar_config_set_new (MBIM_SAR_CONTROL_MODE_OS, enable ? MBIM_SAR_BACKOFF_STATE_ENABLED : MBIM_SAR_BACKOFF_STATE_DISABLED, 1, (const MbimSarConfigState **)&config_state, NULL); diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index 8a666fa0..4040b2a6 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -8468,9 +8468,18 @@ sar_load_power_level (MMIfaceModemSar *self, static gboolean sar_enable_finish (MMIfaceModemSar *self, GAsyncResult *res, + guint *out_sar_power_level, GError **error) { - return g_task_propagate_boolean (G_TASK (res), error); + QmiSarRfState level; + + if (!g_task_propagate_boolean (G_TASK (res), error)) + return FALSE; + + level = GPOINTER_TO_UINT (g_task_get_task_data (G_TASK (res))); + if (out_sar_power_level) + *out_sar_power_level = level; + return TRUE; } static void @@ -8499,6 +8508,7 @@ sar_enable (MMIfaceModemSar *self, g_autoptr(QmiMessageSarRfSetStateInput) input = NULL; GTask *task; QmiClient *client = NULL; + QmiSarRfState level; if (!mm_shared_qmi_ensure_client (MM_SHARED_QMI (self), QMI_SERVICE_SAR, &client, @@ -8507,9 +8517,10 @@ sar_enable (MMIfaceModemSar *self, task = g_task_new (self, NULL, callback, user_data); input = qmi_message_sar_rf_set_state_input_new (); - qmi_message_sar_rf_set_state_input_set_state (input, - enable ? QMI_SAR_ENABLE_POWER_INDEX : QMI_SAR_DISABLED_POWER_INDEX, - NULL); + + level = enable ? QMI_SAR_ENABLE_POWER_INDEX : QMI_SAR_DISABLED_POWER_INDEX; + qmi_message_sar_rf_set_state_input_set_state (input, level, NULL); + g_task_set_task_data (task, GUINT_TO_POINTER (level), NULL); qmi_client_sar_rf_set_state ( QMI_CLIENT_SAR (client), diff --git a/src/mm-iface-modem-sar.c b/src/mm-iface-modem-sar.c index 84a04969..63105d63 100644 --- a/src/mm-iface-modem-sar.c +++ b/src/mm-iface-modem-sar.c @@ -78,12 +78,15 @@ enable_ready (MMIfaceModemSar *self, HandleEnableContext *ctx) { GError *error = NULL; + guint power_level = 0; - if (!MM_IFACE_MODEM_SAR_GET_INTERFACE (ctx->self)->enable_finish (self, res, &error)) + if (!MM_IFACE_MODEM_SAR_GET_INTERFACE (ctx->self)->enable_finish (self, res, &power_level, &error)) g_dbus_method_invocation_take_error (ctx->invocation, error); else { /* Update current features in the interface */ mm_gdbus_modem_sar_set_state (ctx->skeleton, ctx->enable); + if (ctx->enable) + mm_gdbus_modem_sar_set_power_level (ctx->skeleton, power_level); mm_gdbus_modem_sar_complete_enable (ctx->skeleton, ctx->invocation); } diff --git a/src/mm-iface-modem-sar.h b/src/mm-iface-modem-sar.h index 633ccdfc..e6518f18 100644 --- a/src/mm-iface-modem-sar.h +++ b/src/mm-iface-modem-sar.h @@ -48,6 +48,7 @@ struct _MMIfaceModemSar { gpointer user_data); gboolean (* enable_finish) (MMIfaceModemSar *self, GAsyncResult *res, + guint *out_sar_power_level, GError **error); /* Get SAR state (async) */ void (* load_state) (MMIfaceModemSar *self, |