summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2014-04-14 16:24:28 -0500
committerDan Williams <dcbw@redhat.com>2014-05-06 21:51:25 -0500
commit837bf2e33a2bfc3fab4eace27e255f178aae03d8 (patch)
tree2b9319e9fa79b78ca36cf8e7d66b719c68349186
parente7987b918583eafde66ed6ebd03beed5afab54e2 (diff)
downloadNetworkManager-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.c28
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)");