diff options
-rw-r--r-- | src/modem.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/modem.c b/src/modem.c index c335a387..e6fd1fe0 100644 --- a/src/modem.c +++ b/src/modem.c @@ -399,14 +399,20 @@ static int set_powered(struct ofono_modem *modem, ofono_bool_t powered) const struct ofono_modem_driver *driver = modem->driver; int err = -EINVAL; - if (driver == NULL) - return -EINVAL; - if (modem->powered_pending == powered) return -EALREADY; + /* Remove the atoms even if the driver is no longer available */ + if (powered == FALSE) { + remove_all_atoms(modem); + modem->call_ids = 0; + } + modem->powered_pending = powered; + if (driver == NULL) + return -EINVAL; + if (powered == TRUE) { if (driver->enable) err = driver->enable(modem); @@ -499,9 +505,6 @@ static DBusMessage *modem_set_property(DBusConnection *conn, if (powered) { if (modem->driver->pre_sim) modem->driver->pre_sim(modem); - } else { - remove_all_atoms(modem); - modem->call_ids = 0; } return NULL; @@ -562,9 +565,6 @@ void ofono_modem_set_powered(struct ofono_modem *modem, ofono_bool_t powered) if (powered) { if (modem->driver->pre_sim) modem->driver->pre_sim(modem); - } else { - remove_all_atoms(modem); - modem->call_ids = 0; } } |