diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2016-06-15 22:39:49 -0700 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2016-07-07 19:50:23 +0200 |
commit | e851956e440231882d04a0484f90cef3f4e90324 (patch) | |
tree | 7a3a9bb24a10304d3b8ec408a78152bd09d2e6e5 | |
parent | 0e472f26d64f0a29bd65872061f6863ef78a2104 (diff) | |
download | ModemManager-qmi-over-mbim.tar.gz |
broadband-modem: run power up/down actions unconditionallyqmi-over-mbim
-rw-r--r-- | src/mm-broadband-modem-mbim.c | 5 | ||||
-rw-r--r-- | src/mm-broadband-modem.c | 13 | ||||
-rw-r--r-- | src/mm-iface-modem.c | 18 | ||||
-rw-r--r-- | src/mm-iface-modem.h | 1 |
4 files changed, 36 insertions, 1 deletions
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; |