diff --git a/wpa_supplicant/binder/.clang-format b/wpa_supplicant/binder/.clang-format
index dbfdabf..42fadb5 100644
--- a/wpa_supplicant/binder/.clang-format
+++ b/wpa_supplicant/binder/.clang-format
@@ -1,4 +1,4 @@
-BasedOnStyle: LLVM
+BasedOnStyle: Google
 IndentWidth: 8
 UseTab: Always
 BreakBeforeBraces: Mozilla
diff --git a/wpa_supplicant/binder/binder.cpp b/wpa_supplicant/binder/binder.cpp
index 089645f..c93b9bc 100644
--- a/wpa_supplicant/binder/binder.cpp
+++ b/wpa_supplicant/binder/binder.cpp
@@ -21,7 +21,8 @@
 #include "utils/includes.h"
 }
 
-void wpas_binder_sock_handler(int /* sock */, void * /* eloop_ctx */, void *sock_ctx)
+void wpas_binder_sock_handler(
+    int /* sock */, void * /* eloop_ctx */, void *sock_ctx)
 {
 	struct wpas_binder_priv *priv = (wpas_binder_priv *)sock_ctx;
 	wpa_printf(
diff --git a/wpa_supplicant/binder/binder_i.h b/wpa_supplicant/binder/binder_i.h
index 5140d6d..65e8a9f 100644
--- a/wpa_supplicant/binder/binder_i.h
+++ b/wpa_supplicant/binder/binder_i.h
@@ -12,7 +12,7 @@
 
 #ifdef _cplusplus
 extern "C" {
-#endif // _cplusplus
+#endif  // _cplusplus
 
 struct wpas_binder_priv
 {
diff --git a/wpa_supplicant/binder/binder_manager.cpp b/wpa_supplicant/binder/binder_manager.cpp
index ab79f91..ef96f3a 100644
--- a/wpa_supplicant/binder/binder_manager.cpp
+++ b/wpa_supplicant/binder/binder_manager.cpp
@@ -79,8 +79,7 @@
 	// Invoke the |OnInterfaceCreated| method on all registered callbacks.
 	callWithEachSupplicantCallback(std::bind(
 	    &fi::w1::wpa_supplicant::ISupplicantCallback::OnInterfaceCreated,
-	    std::placeholders::_1,
-	    ifname));
+	    std::placeholders::_1, ifname));
 	return 0;
 }
 
@@ -123,8 +122,7 @@
 	// Invoke the |OnInterfaceRemoved| method on all registered callbacks.
 	callWithEachSupplicantCallback(std::bind(
 	    &fi::w1::wpa_supplicant::ISupplicantCallback::OnInterfaceRemoved,
-		std::placeholders::_1,
-	    ifname));
+	    std::placeholders::_1, ifname));
 	return 0;
 }
 
@@ -164,8 +162,7 @@
 	    wpa_s->ifname,
 	    std::bind(
 		&fi::w1::wpa_supplicant::IIfaceCallback::OnNetworkAdded,
-		std::placeholders::_1,
-		ssid->id));
+		std::placeholders::_1, ssid->id));
 	return 0;
 }
 
@@ -204,9 +201,10 @@
 		if (android::IInterface::asBinder(callback)->unlinkToDeath(
 			nullptr, callback.get()) != android::OK) {
 			wpa_printf(
-			    MSG_ERROR, "Error deregistering for death "
-				       "notification for "
-				       "network callback object");
+			    MSG_ERROR,
+			    "Error deregistering for death "
+			    "notification for "
+			    "network callback object");
 		}
 	}
 	network_callbacks_map_.erase(network_callback_map_iter);
@@ -403,8 +401,8 @@
  * @param ifname Name of the corresponding interface.
  * @param network_id ID of the corresponding network.
  */
-const std::string
-BinderManager::getNetworkObjectMapKey(const std::string &ifname, int network_id)
+const std::string BinderManager::getNetworkObjectMapKey(
+    const std::string &ifname, int network_id)
 {
 	return ifname + "_" + std::to_string(network_id);
 }
@@ -503,14 +501,16 @@
 	// Use the |callback.get()| as cookie so that we don't need to
 	// store a reference to this |CallbackObjectDeathNotifier| instance
 	// to use in |unlinkToDeath| later.
-	// NOTE: This may cause an immediate callback if the object is already dead,
+	// NOTE: This may cause an immediate callback if the object is already
+	// dead,
 	// so add it to the list before we register for callback!
 	callback_list.push_back(callback);
 	if (android::IInterface::asBinder(callback)->linkToDeath(
 		death_notifier, callback.get()) != android::OK) {
 		wpa_printf(
-		    MSG_ERROR, "Error registering for death notification for "
-			       "supplicant callback object");
+		    MSG_ERROR,
+		    "Error registering for death notification for "
+		    "supplicant callback object");
 		callback_list.erase(
 		    std::remove(
 			callback_list.begin(), callback_list.end(), callback),
@@ -590,4 +590,4 @@
 		method(callback);
 	}
 }
-} // namespace wpa_supplicant_binder
+}  // namespace wpa_supplicant_binder
diff --git a/wpa_supplicant/binder/binder_manager.h b/wpa_supplicant/binder/binder_manager.h
index 200d7e6..5e81078 100644
--- a/wpa_supplicant/binder/binder_manager.h
+++ b/wpa_supplicant/binder/binder_manager.h
@@ -42,10 +42,10 @@
 	int registerBinderService(struct wpa_global *global);
 	int registerInterface(struct wpa_supplicant *wpa_s);
 	int unregisterInterface(struct wpa_supplicant *wpa_s);
-	int
-	registerNetwork(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
-	int
-	unregisterNetwork(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
+	int registerNetwork(
+	    struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
+	int unregisterNetwork(
+	    struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
 	int notifyStateChange(struct wpa_supplicant *wpa_s);
 
 	// Methods called from binder objects.
@@ -73,8 +73,8 @@
 	BinderManager(const BinderManager &) = default;
 	BinderManager &operator=(const BinderManager &) = default;
 
-	const std::string
-	getNetworkObjectMapKey(const std::string &ifname, int network_id);
+	const std::string getNetworkObjectMapKey(
+	    const std::string &ifname, int network_id);
 
 	void removeSupplicantCallbackBinderObject(
 	    const android::sp<fi::w1::wpa_supplicant::ISupplicantCallback>
@@ -243,5 +243,5 @@
 static_assert(
     WPA_COMPLETED == fi::w1::wpa_supplicant::IIfaceCallback::STATE_COMPLETED,
     "State value mismatch");
-} // namespace wpa_supplicant_binder
-#endif // WPA_SUPPLICANT_BINDER_BINDER_MANAGER_H
+}  // namespace wpa_supplicant_binder
+#endif  // WPA_SUPPLICANT_BINDER_BINDER_MANAGER_H
diff --git a/wpa_supplicant/binder/iface.cpp b/wpa_supplicant/binder/iface.cpp
index cd4be06..0ff407a 100644
--- a/wpa_supplicant/binder/iface.cpp
+++ b/wpa_supplicant/binder/iface.cpp
@@ -12,16 +12,16 @@
 
 namespace wpa_supplicant_binder {
 
-#define RETURN_IF_IFACE_INVALID(wpa_s)                                         \
-	{                                                                      \
-		if (!wpa_s) {                                                  \
-			return android::binder::Status::                       \
-			    fromServiceSpecificError(                          \
-				ERROR_IFACE_INVALID, "wpa_supplicant does "    \
-						     "not control this "       \
-						     "interface.");            \
-		}                                                              \
-	} // #define RETURN_IF_IFACE_INVALID(wpa_s)
+#define RETURN_IF_IFACE_INVALID(wpa_s)                                  \
+	{                                                               \
+		if (!wpa_s) {                                           \
+			return android::binder::Status::                \
+			    fromServiceSpecificError(                   \
+				ERROR_IFACE_INVALID,                    \
+				"wpa_supplicant does not control this " \
+				"interface.");                          \
+		}                                                       \
+	}  // #define RETURN_IF_IFACE_INVALID(wpa_s)
 
 Iface::Iface(struct wpa_global *wpa_global, const char ifname[])
     : wpa_global_(wpa_global), ifname_(ifname)
@@ -175,4 +175,4 @@
 	return wpa_supplicant_get_iface(
 	    (struct wpa_global *)wpa_global_, ifname_.c_str());
 }
-} // namespace wpa_supplicant_binder
+}  // namespace wpa_supplicant_binder
diff --git a/wpa_supplicant/binder/iface.h b/wpa_supplicant/binder/iface.h
index 5a727f0..4ebf59c 100644
--- a/wpa_supplicant/binder/iface.h
+++ b/wpa_supplicant/binder/iface.h
@@ -63,6 +63,6 @@
 	DISALLOW_COPY_AND_ASSIGN(Iface);
 };
 
-} // namespace wpa_supplicant_binder
+}  // namespace wpa_supplicant_binder
 
-#endif // WPA_SUPPLICANT_BINDER_IFACE_H
+#endif  // WPA_SUPPLICANT_BINDER_IFACE_H
diff --git a/wpa_supplicant/binder/network.cpp b/wpa_supplicant/binder/network.cpp
index 99b8347..8bd745b 100644
--- a/wpa_supplicant/binder/network.cpp
+++ b/wpa_supplicant/binder/network.cpp
@@ -46,20 +46,20 @@
     fi::w1::wpa_supplicant::INetwork::EAP_PHASE2_METHOD_NONE;
 constexpr char const *kEapPhase2MethodStrings[kEapPhase2MethodMax] = {
     "NULL", "PAP", "MSCHAP", "MSCHAPV2", "GTC"};
-} // namespace
+}  // namespace
 
 namespace wpa_supplicant_binder {
 
-#define RETURN_IF_NETWORK_INVALID(wpa_ssid)                                    \
-	{                                                                      \
-		if (!wpa_ssid) {                                               \
-			return android::binder::Status::                       \
-			    fromServiceSpecificError(                          \
-				ERROR_NETWORK_INVALID, "wpa_supplicant does "  \
-						       "not control this "     \
-						       "network.");            \
-		}                                                              \
-	} // #define RETURN_IF_NETWORK_INVALID(wpa_ssid)
+#define RETURN_IF_NETWORK_INVALID(wpa_ssid)                             \
+	{                                                               \
+		if (!wpa_ssid) {                                        \
+			return android::binder::Status::                \
+			    fromServiceSpecificError(                   \
+				ERROR_NETWORK_INVALID,                  \
+				"wpa_supplicant does not control this " \
+				"network.");                            \
+		}                                                       \
+	}  // #define RETURN_IF_NETWORK_INVALID(wpa_ssid)
 
 Network::Network(
     struct wpa_global *wpa_global, const char ifname[], int network_id)
@@ -282,8 +282,8 @@
 	return status;
 }
 
-android::binder::Status
-Network::SetWepKey(int key_idx, const std::vector<uint8_t> &wep_key)
+android::binder::Status Network::SetWepKey(
+    int key_idx, const std::vector<uint8_t> &wep_key)
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
@@ -420,8 +420,8 @@
 	    "eap phase2");
 }
 
-android::binder::Status
-Network::SetEapIdentity(const std::vector<uint8_t> &identity)
+android::binder::Status Network::SetEapIdentity(
+    const std::vector<uint8_t> &identity)
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
@@ -431,8 +431,8 @@
 	    &(wpa_ssid->eap.identity_len), "eap identity");
 }
 
-android::binder::Status
-Network::SetEapAnonymousIdentity(const std::vector<uint8_t> &identity)
+android::binder::Status Network::SetEapAnonymousIdentity(
+    const std::vector<uint8_t> &identity)
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
@@ -443,8 +443,8 @@
 	    &(wpa_ssid->eap.anonymous_identity_len), "eap anonymous_identity");
 }
 
-android::binder::Status
-Network::SetEapPassword(const std::vector<uint8_t> &password)
+android::binder::Status Network::SetEapPassword(
+    const std::vector<uint8_t> &password)
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
@@ -535,8 +535,8 @@
 	return android::binder::Status::ok();
 }
 
-android::binder::Status
-Network::SetEapDomainSuffixMatch(const std::string &match)
+android::binder::Status Network::SetEapDomainSuffixMatch(
+    const std::string &match)
 
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
@@ -610,8 +610,8 @@
 	return android::binder::Status::ok();
 }
 
-android::binder::Status
-Network::GetPairwiseCipher(int32_t *pairwise_cipher_mask)
+android::binder::Status Network::GetPairwiseCipher(
+    int32_t *pairwise_cipher_mask)
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
@@ -632,8 +632,8 @@
 	return android::binder::Status::ok();
 }
 
-android::binder::Status
-Network::GetWepKey(int key_idx, std::vector<uint8_t> *wep_key)
+android::binder::Status Network::GetWepKey(
+    int key_idx, std::vector<uint8_t> *wep_key)
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
@@ -898,4 +898,4 @@
 	return android::binder::Status::ok();
 }
 
-} // namespace wpa_supplicant_binder
+}  // namespace wpa_supplicant_binder
diff --git a/wpa_supplicant/binder/network.h b/wpa_supplicant/binder/network.h
index bfa5c8d..6302aa7 100644
--- a/wpa_supplicant/binder/network.h
+++ b/wpa_supplicant/binder/network.h
@@ -41,66 +41,66 @@
 
 	// Binder methods exposed in aidl.
 	android::binder::Status GetId(int *network_id_out) override;
-	android::binder::Status
-	GetInterfaceName(std::string *ifname_out) override;
+	android::binder::Status GetInterfaceName(
+	    std::string *ifname_out) override;
 	android::binder::Status RegisterCallback(
 	    const android::sp<fi::w1::wpa_supplicant::INetworkCallback>
 		&callback) override;
-	android::binder::Status
-	SetSSID(const std::vector<uint8_t> &ssid) override;
-	android::binder::Status
-	SetBSSID(const std::vector<uint8_t> &bssid) override;
+	android::binder::Status SetSSID(
+	    const std::vector<uint8_t> &ssid) override;
+	android::binder::Status SetBSSID(
+	    const std::vector<uint8_t> &bssid) override;
 	android::binder::Status SetScanSSID(bool enable) override;
 	android::binder::Status SetKeyMgmt(int32_t key_mgmt_mask) override;
 	android::binder::Status SetProto(int32_t proto_mask) override;
 	android::binder::Status SetAuthAlg(int32_t auth_alg_mask) override;
-	android::binder::Status
-	SetGroupCipher(int32_t group_cipher_mask) override;
-	android::binder::Status
-	SetPairwiseCipher(int32_t pairwise_cipher_mask) override;
-	android::binder::Status
-	SetPskPassphrase(const std::string &psk) override;
-	android::binder::Status
-	SetWepKey(int key_idx, const std::vector<uint8_t> &wep_key) override;
+	android::binder::Status SetGroupCipher(
+	    int32_t group_cipher_mask) override;
+	android::binder::Status SetPairwiseCipher(
+	    int32_t pairwise_cipher_mask) override;
+	android::binder::Status SetPskPassphrase(
+	    const std::string &psk) override;
+	android::binder::Status SetWepKey(
+	    int key_idx, const std::vector<uint8_t> &wep_key) override;
 	android::binder::Status SetWepTxKeyIdx(int32_t wep_tx_key_idx) override;
 	android::binder::Status SetRequirePMF(bool enable) override;
 	android::binder::Status SetEapMethod(int32_t method) override;
 	android::binder::Status SetEapPhase2Method(int32_t method) override;
-	android::binder::Status
-	SetEapIdentity(const std::vector<uint8_t> &identity) override;
-	android::binder::Status
-	SetEapAnonymousIdentity(const std::vector<uint8_t> &identity) override;
-	android::binder::Status
-	SetEapPassword(const std::vector<uint8_t> &password) override;
+	android::binder::Status SetEapIdentity(
+	    const std::vector<uint8_t> &identity) override;
+	android::binder::Status SetEapAnonymousIdentity(
+	    const std::vector<uint8_t> &identity) override;
+	android::binder::Status SetEapPassword(
+	    const std::vector<uint8_t> &password) override;
 	android::binder::Status SetEapCACert(const std::string &path) override;
 	android::binder::Status SetEapCAPath(const std::string &path) override;
-	android::binder::Status
-	SetEapClientCert(const std::string &path) override;
-	android::binder::Status
-	SetEapPrivateKey(const std::string &path) override;
-	android::binder::Status
-	SetEapSubjectMatch(const std::string &match) override;
-	android::binder::Status
-	SetEapAltSubjectMatch(const std::string &match) override;
+	android::binder::Status SetEapClientCert(
+	    const std::string &path) override;
+	android::binder::Status SetEapPrivateKey(
+	    const std::string &path) override;
+	android::binder::Status SetEapSubjectMatch(
+	    const std::string &match) override;
+	android::binder::Status SetEapAltSubjectMatch(
+	    const std::string &match) override;
 	android::binder::Status SetEapEngine(bool enable) override;
 	android::binder::Status SetEapEngineID(const std::string &id) override;
-	android::binder::Status
-	SetEapDomainSuffixMatch(const std::string &match) override;
+	android::binder::Status SetEapDomainSuffixMatch(
+	    const std::string &match) override;
 	android::binder::Status GetSSID(std::vector<uint8_t> *ssid) override;
 	android::binder::Status GetBSSID(std::vector<uint8_t> *bssid) override;
 	android::binder::Status GetScanSSID(bool *enable) override;
 	android::binder::Status GetKeyMgmt(int32_t *key_mgmt_mask) override;
 	android::binder::Status GetProto(int32_t *proto_mask) override;
 	android::binder::Status GetAuthAlg(int32_t *auth_alg_mask) override;
-	android::binder::Status
-	GetGroupCipher(int32_t *group_cipher_mask) override;
-	android::binder::Status
-	GetPairwiseCipher(int32_t *pairwise_cipher_mask) override;
+	android::binder::Status GetGroupCipher(
+	    int32_t *group_cipher_mask) override;
+	android::binder::Status GetPairwiseCipher(
+	    int32_t *pairwise_cipher_mask) override;
 	android::binder::Status GetPskPassphrase(std::string *psk) override;
-	android::binder::Status
-	GetWepKey(int key_idx, std::vector<uint8_t> *wep_key) override;
-	android::binder::Status
-	GetWepTxKeyIdx(int32_t *wep_tx_key_idx) override;
+	android::binder::Status GetWepKey(
+	    int key_idx, std::vector<uint8_t> *wep_key) override;
+	android::binder::Status GetWepTxKeyIdx(
+	    int32_t *wep_tx_key_idx) override;
 	android::binder::Status GetRequirePMF(bool *enable) override;
 	android::binder::Status Enable(bool no_connect) override;
 	android::binder::Status Disable() override;
@@ -140,6 +140,6 @@
 	DISALLOW_COPY_AND_ASSIGN(Network);
 };
 
-} // namespace wpa_supplicant_binder
+}  // namespace wpa_supplicant_binder
 
-#endif // WPA_SUPPLICANT_BINDER_NETWORK_H
+#endif  // WPA_SUPPLICANT_BINDER_NETWORK_H
diff --git a/wpa_supplicant/binder/parcelable_iface_params.cpp b/wpa_supplicant/binder/parcelable_iface_params.cpp
index 9bd24c7..5bf8337 100644
--- a/wpa_supplicant/binder/parcelable_iface_params.cpp
+++ b/wpa_supplicant/binder/parcelable_iface_params.cpp
@@ -14,8 +14,8 @@
 namespace w1 {
 namespace wpa_supplicant {
 
-android::status_t
-ParcelableIfaceParams::writeToParcel(android::Parcel *parcel) const
+android::status_t ParcelableIfaceParams::writeToParcel(
+    android::Parcel *parcel) const
 {
 	android::status_t status;
 	status = parcel->writeString8(ifname_);
@@ -33,8 +33,8 @@
 	return parcel->writeString8(config_file_);
 }
 
-android::status_t
-ParcelableIfaceParams::readFromParcel(const android::Parcel *parcel)
+android::status_t ParcelableIfaceParams::readFromParcel(
+    const android::Parcel *parcel)
 {
 	android::status_t status;
 	status = parcel->readString8(&ifname_);
@@ -52,6 +52,6 @@
 	return parcel->readString8(&config_file_);
 }
 
-} // namespace fi
-} // namespace w1
-} // namespace wpa_supplicant
+}  // namespace fi
+}  // namespace w1
+}  // namespace wpa_supplicant
diff --git a/wpa_supplicant/binder/supplicant.cpp b/wpa_supplicant/binder/supplicant.cpp
index 9588f40..c35e91f 100644
--- a/wpa_supplicant/binder/supplicant.cpp
+++ b/wpa_supplicant/binder/supplicant.cpp
@@ -13,7 +13,6 @@
 namespace wpa_supplicant_binder {
 
 Supplicant::Supplicant(struct wpa_global *global) : wpa_global_(global) {}
-
 android::binder::Status Supplicant::CreateInterface(
     const fi::w1::wpa_supplicant::ParcelableIfaceParams &params,
     android::sp<fi::w1::wpa_supplicant::IIface> *iface_object_out)
@@ -116,8 +115,8 @@
 	return android::binder::Status::ok();
 }
 
-android::binder::Status
-Supplicant::SetDebugParams(int level, bool show_timestamp, bool show_keys)
+android::binder::Status Supplicant::SetDebugParams(
+    int level, bool show_timestamp, bool show_keys)
 {
 	int internal_level;
 	if (convertDebugLevelToInternalLevel(level, &internal_level)) {
@@ -148,8 +147,8 @@
 	return android::binder::Status::ok();
 }
 
-android::binder::Status
-Supplicant::GetDebugShowTimestamp(bool *show_timestamp_out)
+android::binder::Status Supplicant::GetDebugShowTimestamp(
+    bool *show_timestamp_out)
 {
 	*show_timestamp_out = wpa_debug_timestamp ? true : false;
 	return android::binder::Status::ok();
diff --git a/wpa_supplicant/binder/supplicant.h b/wpa_supplicant/binder/supplicant.h
index 33ba3b0..2eef988 100644
--- a/wpa_supplicant/binder/supplicant.h
+++ b/wpa_supplicant/binder/supplicant.h
@@ -40,17 +40,17 @@
 	    const fi::w1::wpa_supplicant::ParcelableIfaceParams &params,
 	    android::sp<fi::w1::wpa_supplicant::IIface> *iface_object_out)
 	    override;
-	android::binder::Status
-	RemoveInterface(const std::string &ifname) override;
+	android::binder::Status RemoveInterface(
+	    const std::string &ifname) override;
 	android::binder::Status GetInterface(
 	    const std::string &ifname,
 	    android::sp<fi::w1::wpa_supplicant::IIface> *iface_object_out)
 	    override;
-	android::binder::Status
-	SetDebugParams(int level, bool show_timestamp, bool show_keys) override;
+	android::binder::Status SetDebugParams(
+	    int level, bool show_timestamp, bool show_keys) override;
 	android::binder::Status GetDebugLevel(int *level_out) override;
-	android::binder::Status
-	GetDebugShowTimestamp(bool *show_timestamp_out) override;
+	android::binder::Status GetDebugShowTimestamp(
+	    bool *show_timestamp_out) override;
 	android::binder::Status GetDebugShowKeys(bool *show_keys_out) override;
 	android::binder::Status RegisterCallback(
 	    const android::sp<fi::w1::wpa_supplicant::ISupplicantCallback>
