From e851956e440231882d04a0484f90cef3f4e90324 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Wed, 15 Jun 2016 22:39:49 -0700 Subject: broadband-modem: run power up/down actions unconditionally --- src/mm-broadband-modem-mbim.c | 5 +++++ src/mm-broadband-modem.c | 13 +++++++++++++ src/mm-iface-modem.c | 18 +++++++++++++++++- src/mm-iface-modem.h | 1 + 4 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c index 2711780e9..9c72d9f63 100644 --- a/src/mm-broadband-modem-mbim.c +++ b/src/mm-broadband-modem-mbim.c @@ -3129,6 +3129,11 @@ mm_broadband_modem_mbim_new (const gchar *device, MM_BASE_MODEM_PLUGIN, plugin, MM_BASE_MODEM_VENDOR_ID, vendor_id, MM_BASE_MODEM_PRODUCT_ID, product_id, + /* We require power set operations always, even if the + * one reported by the modem is already the same one. + * This is so that we can apply the FCC auth unconditionally + * during power up. */ + MM_IFACE_MODEM_FORCE_POWER, TRUE, NULL); } diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index e1fd7ca35..a8ac26a3a 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -112,6 +112,7 @@ enum { PROP_MODEM_MESSAGING_SMS_DEFAULT_STORAGE, PROP_MODEM_VOICE_CALL_LIST, PROP_MODEM_SIMPLE_STATUS, + PROP_MODEM_FORCE_POWER, PROP_LAST }; @@ -141,6 +142,7 @@ struct _MMBroadbandModemPrivate { guint modem_cind_max_signal_quality; guint modem_cind_indicator_roaming; guint modem_cind_indicator_service; + gboolean modem_force_power; /*<--- Modem 3GPP interface --->*/ /* Properties */ @@ -10091,6 +10093,9 @@ set_property (GObject *object, g_clear_object (&self->priv->modem_simple_status); self->priv->modem_simple_status = g_value_dup_object (value); break; + case PROP_MODEM_FORCE_POWER: + self->priv->modem_force_power = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -10193,6 +10198,9 @@ get_property (GObject *object, case PROP_MODEM_SIMPLE_STATUS: g_value_set_object (value, self->priv->modem_simple_status); break; + case PROP_MODEM_FORCE_POWER: + g_value_set_boolean (value, self->priv->modem_force_power); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -10221,6 +10229,7 @@ mm_broadband_modem_init (MMBroadbandModem *self) self->priv->modem_messaging_sms_default_storage = MM_SMS_STORAGE_UNKNOWN; self->priv->current_sms_mem1_storage = MM_SMS_STORAGE_UNKNOWN; self->priv->current_sms_mem2_storage = MM_SMS_STORAGE_UNKNOWN; + self->priv->modem_force_power = FALSE; } static void @@ -10671,4 +10680,8 @@ mm_broadband_modem_class_init (MMBroadbandModemClass *klass) g_object_class_override_property (object_class, PROP_MODEM_SIMPLE_STATUS, MM_IFACE_MODEM_SIMPLE_STATUS); + + g_object_class_override_property (object_class, + PROP_MODEM_FORCE_POWER, + MM_IFACE_MODEM_FORCE_POWER); } diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c index 516ed78e2..dd19ba28d 100644 --- a/src/mm-iface-modem.c +++ b/src/mm-iface-modem.c @@ -3287,8 +3287,16 @@ modem_power_off_ready (MMIfaceModem *self, static void set_power_state (SetPowerStateContext *ctx) { + gboolean force_power; + + g_object_get (ctx->self, + MM_IFACE_MODEM_FORCE_POWER, &force_power, + NULL); + /* Already done if we're in the desired power state */ - if (ctx->previous_real_power_state == ctx->power_state) { + if (force_power) + mm_dbg ("Power operation forced by the plugin"); + else if (ctx->previous_real_power_state == ctx->power_state) { mm_dbg ("No need to change power state: already in '%s' power state", mm_modem_power_state_get_string (ctx->power_state)); /* If the real and cached ones are different, set the real one */ @@ -5120,6 +5128,14 @@ iface_modem_init (gpointer g_iface) MM_TYPE_BEARER_LIST, G_PARAM_READWRITE)); + g_object_interface_install_property + (g_iface, + g_param_spec_boolean (MM_IFACE_MODEM_FORCE_POWER, + "Force power", + "Force power set operation even if reported the same one", + FALSE, + G_PARAM_READWRITE)); + initialized = TRUE; } diff --git a/src/mm-iface-modem.h b/src/mm-iface-modem.h index 74ea9f924..ab2f55d63 100644 --- a/src/mm-iface-modem.h +++ b/src/mm-iface-modem.h @@ -36,6 +36,7 @@ #define MM_IFACE_MODEM_STATE "iface-modem-state" #define MM_IFACE_MODEM_SIM "iface-modem-sim" #define MM_IFACE_MODEM_BEARER_LIST "iface-modem-bearer-list" +#define MM_IFACE_MODEM_FORCE_POWER "iface-modem-force-power" typedef struct _MMIfaceModem MMIfaceModem; -- cgit v1.2.1