aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-broadband-modem-mbim.c13
-rw-r--r--src/mm-broadband-modem-qmi.c19
-rw-r--r--src/mm-iface-modem-sar.c5
-rw-r--r--src/mm-iface-modem-sar.h1
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,