policy: Add AutoEnable config option

This option is used to configure policy for auto enabling adapters when
found. This includes adapters found on start as well as adapters that
are plugged in later on.

Some distributions use legacy "hciconfig hci0 up" in boot-scripts to
automatically enable controllers on start. But that is causing SMP
kernel code to not being properly initialized.

This patch allows distributions to automatically enable adapters in
race free manner even if no agent is provided eg. in login screen.
diff --git a/plugins/policy.c b/plugins/policy.c
index 6bb8268..218a3ed 100644
--- a/plugins/policy.c
+++ b/plugins/policy.c
@@ -80,6 +80,8 @@
 static unsigned int service_id = 0;
 static GSList *devices = NULL;
 
+static bool auto_enable = false;
+
 struct policy_data {
 	struct btd_device *dev;
 
@@ -743,6 +745,20 @@
 	reconnect_set_timer(reconnect);
 }
 
+static int policy_adapter_probe(struct btd_adapter *adapter)
+{
+	DBG("");
+
+	btd_adapter_restore_powered(adapter);
+
+	return 0;
+}
+
+static struct btd_adapter_driver policy_driver = {
+	.name	= "policy",
+	.probe	= policy_adapter_probe,
+};
+
 static int policy_init(void)
 {
 	GError *gerr = NULL;
@@ -758,7 +774,7 @@
 						sizeof(*reconnect_intervals);
 		reconnect_intervals = g_memdup(default_intervals,
 						reconnect_intervals_len);
-		goto add_cb;
+		goto done;
 	}
 
 	reconnect_uuids = g_key_file_get_string_list(conf, "Policy",
@@ -788,12 +804,18 @@
 						reconnect_intervals_len);
 	}
 
-add_cb:
+	auto_enable = g_key_file_get_boolean(conf, "Policy", "AutoEnable",
+									NULL);
+
+done:
 	if (reconnect_uuids && reconnect_uuids[0] && reconnect_attempts) {
 		btd_add_disconnect_cb(disconnect_cb);
 		btd_add_conn_fail_cb(conn_fail_cb);
 	}
 
+	if (auto_enable)
+		btd_register_adapter_driver(&policy_driver);
+
 	return 0;
 }
 
@@ -812,6 +834,9 @@
 	g_slist_free_full(devices, policy_remove);
 
 	btd_service_remove_state_cb(service_id);
+
+	if (auto_enable)
+		btd_unregister_adapter_driver(&policy_driver);
 }
 
 BLUETOOTH_PLUGIN_DEFINE(policy, VERSION, BLUETOOTH_PLUGIN_PRIORITY_DEFAULT,
diff --git a/src/main.conf b/src/main.conf
index 6780d9a..372fd8c 100644
--- a/src/main.conf
+++ b/src/main.conf
@@ -82,3 +82,8 @@
 # If the number of attempts defined in ReconnectAttempts is bigger than the
 # set of intervals the last interval is repeated until the last attempt.
 #ReconnectIntervals=1, 2, 4, 8, 16, 32, 64
+
+# AutoEnable defines option to enable all controllers when they are found.
+# This includes adapters present on start as well as adapters that are plugged
+# in later on. Defaults to 'false'.
+#AutoEnable=false