diff options
author | Ben Chan <benchan@chromium.org> | 2014-04-30 00:59:21 -0700 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2014-05-01 16:57:30 +0200 |
commit | 771c83a73a3bd4ddf5045b86bb3d64d71f9d02c1 (patch) | |
tree | d4d903b957a3c5415052793cfb2d3f859813b715 /plugins | |
parent | ae99c452eb46d0f0c36a8e44e627994ce261a726 (diff) |
huawei: treat CFUN 0 as low power state
The Huawei plugin uses +CFUN=0 to put the modem in low power mode as
+CFUN=4 isn't supported by all Huawei modems. This patch modifies the
plugin to treat CFUN 0 as the 'LOW' power state, which is necessary as
otherwise ModemManager would prevent the modem from transitioning to the
'ON' power state.
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/huawei/mm-broadband-modem-huawei.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/plugins/huawei/mm-broadband-modem-huawei.c b/plugins/huawei/mm-broadband-modem-huawei.c index b7b98a88..fe8e6005 100644 --- a/plugins/huawei/mm-broadband-modem-huawei.c +++ b/plugins/huawei/mm-broadband-modem-huawei.c @@ -2845,8 +2845,15 @@ parent_load_power_state_ready (MMIfaceModem *self, power_state = iface_modem_parent->load_power_state_finish (self, res, &error); if (error) g_simple_async_result_take_error (result, error); - else + else { + /* As modem_power_down uses +CFUN=0 to put the modem in low state, we treat + * CFUN 0 as 'LOW' power state instead of 'OFF'. Otherwise, MMIfaceModem + * would prevent the modem from transitioning back to the 'ON' power state. */ + if (power_state == MM_MODEM_POWER_STATE_OFF) + power_state = MM_MODEM_POWER_STATE_LOW; + g_simple_async_result_set_op_res_gpointer (result, GUINT_TO_POINTER (power_state), NULL); + } g_simple_async_result_complete (result); g_object_unref (result); @@ -3023,6 +3030,8 @@ huawei_modem_power_down (MMIfaceModem *self, { switch (MM_BROADBAND_MODEM_HUAWEI (self)->priv->rfswitch_support) { case FEATURE_NOT_SUPPORTED: + /* +CFUN=0 is supported on all Huawei modems but +CFUN=4 isn't, + * thus we use +CFUN=0 to put the modem in low power state. */ mm_base_modem_at_command (MM_BASE_MODEM (self), "+CFUN=0", 30, |