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);
if (powered) {
if (modem->driver->pre_sim)
modem->driver->pre_sim(modem);
- } else {
- remove_all_atoms(modem);
- modem->call_ids = 0;
}
return NULL;
if (powered) {
if (modem->driver->pre_sim)
modem->driver->pre_sim(modem);
- } else {
- remove_all_atoms(modem);
- modem->call_ids = 0;
}
}