diff options
author | Dan Williams <dcbw@redhat.com> | 2014-04-14 16:24:28 -0500 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2014-05-06 21:51:25 -0500 |
commit | 837bf2e33a2bfc3fab4eace27e255f178aae03d8 (patch) | |
tree | 2b9319e9fa79b78ca36cf8e7d66b719c68349186 | |
parent | e7987b918583eafde66ed6ebd03beed5afab54e2 (diff) | |
download | NetworkManager-dcbw/wwan-fixes.tar.gz |
wwan: set modem to low power state when disablingdcbw/wwan-fixes
When WWAN airplane mode is enabled, set modems to low power state to
ensure they are in airplane mode if either (a) the machine does not
have an rfkill switch, or (b) the modem is not tied to any rfkill
switch (eg, external USB/SDIO/etc).
-rw-r--r-- | src/devices/wwan/nm-modem-broadband.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/devices/wwan/nm-modem-broadband.c b/src/devices/wwan/nm-modem-broadband.c index 5541bc5ea6..5adb733d29 100644 --- a/src/devices/wwan/nm-modem-broadband.c +++ b/src/devices/wwan/nm-modem-broadband.c @@ -533,13 +533,39 @@ get_user_pass (NMModem *modem, /* Query/Update enabled state */ static void +set_power_state_low_ready (MMModem *modem, + GAsyncResult *result, + NMModemBroadband *self) +{ + GError *error = NULL; + + if (!mm_modem_set_power_state_finish (modem, result, &error)) { + /* Log but ignore errors; not all modems support low power state */ + nm_log_dbg (LOGD_MB, "(%s) failed to set modem low power state: %s", + nm_modem_get_uid (NM_MODEM (self)), + error && error->message ? error->message : "(unknown)"); + g_clear_error (&error); + } + + /* Balance refcount */ + g_object_unref (self); +} + +static void modem_disable_ready (MMModem *modem_iface, GAsyncResult *res, NMModemBroadband *self) { GError *error = NULL; - if (!mm_modem_disable_finish (modem_iface, res, &error)) { + if (mm_modem_disable_finish (modem_iface, res, &error)) { + /* Once disabled, move to low-power mode */ + mm_modem_set_power_state (modem_iface, + MM_MODEM_POWER_STATE_LOW, + NULL, + (GAsyncReadyCallback) set_power_state_low_ready, + g_object_ref (self)); + } else { nm_log_warn (LOGD_MB, "(%s) failed to disable modem: %s", nm_modem_get_uid (NM_MODEM (self)), error && error->message ? error->message : "(unknown)"); |