+static gboolean inactive_scan(gpointer user_data)
+{
+ struct connman_element *device = user_data;
+ struct wifi_data *data = connman_element_get_data(device);
+
+ DBG("");
+
+ if (data->cleanup_timer > 0) {
+ g_source_remove(data->cleanup_timer);
+ data->cleanup_timer = 0;
+ }
+
+ __supplicant_scan(device);
+
+ data->inactive_timer = 0;
+
+ return FALSE;
+}
+
+static void connect_known_networks(struct connman_element *device)
+{
+ struct wifi_data *data = connman_element_get_data(device);
+ GSList *list;
+
+ DBG("");
+
+ if (data->inactive_timer > 0) {
+ g_source_remove(data->inactive_timer);
+ data->inactive_timer = 0;
+ }
+
+ for (list = data->current; list; list = list->next) {
+ struct connman_element *element = list->data;
+
+ if (element->policy == CONNMAN_ELEMENT_POLICY_AUTO &&
+ element->remember == TRUE &&
+ element->available == TRUE) {
+ if (network_enable(element) == 0)
+ return;
+ }
+ }
+
+ data->inactive_timer = g_timeout_add_seconds(INACTIVE_TIMEOUT,
+ inactive_scan, device);
+}
+
+static void state_change(struct connman_element *device,