diff --git a/gps/brcm/Android.bp b/gps/brcm/Android.bp
new file mode 100644
index 0000000..c0ffc2c
--- /dev/null
+++ b/gps/brcm/Android.bp
@@ -0,0 +1,215 @@
+// Copyright (C) 2020 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+cc_prebuilt_library_shared {
+ name: "android.hardware.gnss@2.1-impl-google",
+ arch: {
+ arm64: {
+ srcs: ["bin/android.hardware.gnss@2.1-impl-google.so"],
+ shared_libs: [
+ "liblog",
+ "libhidlbase",
+ // "libhidltransport",
+ "libutils",
+ "android.hardware.gnss@1.0",
+ "android.hardware.gnss@1.1",
+ "android.hardware.gnss@2.0",
+ "android.hardware.gnss@2.1",
+ "android.hardware.gnss.measurement_corrections@1.0",
+ "android.hardware.gnss.visibility_control@1.0",
+ "android.hardware.gnss-V2-ndk",
+ "libhardware",
+ "libc++",
+ "libc",
+ "libm",
+ "libdl",
+ ],
+ },
+ },
+ compile_multilib: "64",
+ vendor: true,
+ relative_install_path: "hw",
+ strip: {
+ none: true,
+ },
+ // Bypass because libhidltransport is deprecated
+ check_elf_files: false,
+}
+
+cc_prebuilt_binary {
+ name: "android.hardware.gnss@2.1-service-brcm",
+ arch: {
+ arm64: {
+ srcs: ["bin/android.hardware.gnss@2.1-service-brcm"],
+ shared_libs: [
+ "liblog",
+ "libutils",
+ "libhardware",
+ "android.hardware.gnss@1.0",
+ "libhidlbase",
+ "android.hardware.gnss@1.1",
+ "android.hardware.gnss@2.0",
+ "android.hardware.gnss@2.1",
+ "android.hardware.gnss-V2-ndk",
+ "libc++",
+ "libc",
+ "libm",
+ "libdl",
+ ],
+ },
+ },
+ compile_multilib: "64",
+ vendor: true,
+ relative_install_path: "hw",
+ strip: {
+ none: true,
+ },
+ // Bypass because libhidltransport is deprecated
+ // Bypass because libhwbinder is deprecated
+ check_elf_files: false,
+ vintf_fragments: ["android.hardware.gnss@2.1-service-brcm.xml"]
+}
+
+cc_prebuilt_library_shared {
+ name: "flp.default",
+ arch: {
+ arm64: {
+ srcs: ["bin/flp.default.so"],
+ shared_libs: [
+ "liblog",
+ "libcutils",
+ "libutils",
+ "libc++",
+ "libc",
+ "libm",
+ "libdl",
+ ],
+ },
+ },
+ compile_multilib: "64",
+ vendor: true,
+ relative_install_path: "hw",
+ strip: {
+ none: true,
+ },
+ // Bypass because soname mismatch
+ check_elf_files: false,
+}
+
+cc_prebuilt_binary {
+ name: "gpsd",
+ arch: {
+ arm64: {
+ srcs: ["bin/gpsd"],
+ shared_libs: [
+ "liblog",
+ "libutils",
+ "libhardware_legacy",
+ "libcutils",
+ "libssl",
+ "libcrypto",
+ "android.frameworks.sensorservice@1.0",
+ "libhidlbase",
+ "libandroid_net",
+ "libc++",
+ "libc",
+ "libm",
+ "libdl",
+ ],
+ },
+ },
+ compile_multilib: "64",
+ vendor: true,
+ relative_install_path: "hw",
+ strip: {
+ none: true,
+ },
+ // Bypass because libsitril-gps is Android.mk module
+ check_elf_files: false,
+}
+
+cc_prebuilt_library_shared {
+ name: "gps.default",
+ arch: {
+ arm64: {
+ srcs: ["bin/gps.default.so"],
+ shared_libs: [
+ "liblog",
+ "libcutils",
+ "libutils",
+ "libc++",
+ "libc",
+ "libm",
+ "libdl",
+ ],
+ },
+ },
+ compile_multilib: "64",
+ vendor: true,
+ relative_install_path: "hw",
+ strip: {
+ none: true,
+ },
+ // Bypass because soname mismatch
+ check_elf_files: false,
+}
+
+cc_prebuilt_binary {
+ name: "lhd",
+ arch: {
+ arm64: {
+ srcs: ["bin/lhd"],
+ shared_libs: [
+ "liblog",
+ "libutils",
+ "libhardware_legacy",
+ "libc++",
+ "libc",
+ "libm",
+ "libz",
+ "android.hardware.contexthub@1.0",
+ "libhidlbase",
+ "libdl",
+ ],
+ },
+ },
+ compile_multilib: "64",
+ vendor: true,
+ relative_install_path: "hw",
+ strip: {
+ none: true,
+ },
+}
+
+cc_prebuilt_binary {
+ name: "scd",
+ arch: {
+ arm64: {
+ srcs: ["bin/scd"],
+ shared_libs: [
+ "liblog",
+ "libutils",
+ "libssl",
+ "libcrypto",
+ "libandroid_net",
+ ],
+ },
+ },
+ compile_multilib: "64",
+ vendor: true,
+ relative_install_path: "hw",
+ strip: {
+ none: true,
+ },
+}
diff --git a/gps/brcm/android.hardware.gnss@2.1-service-brcm.xml b/gps/brcm/android.hardware.gnss@2.1-service-brcm.xml
new file mode 100644
index 0000000..97538b8
--- /dev/null
+++ b/gps/brcm/android.hardware.gnss@2.1-service-brcm.xml
@@ -0,0 +1,7 @@
+
+
+ android.hardware.gnss
+ 2
+ IGnss/default
+
+
diff --git a/gps/brcm/bin/android.hardware.gnss@2.1-impl-google.so b/gps/brcm/bin/android.hardware.gnss@2.1-impl-google.so
new file mode 100755
index 0000000..53f8a7d
Binary files /dev/null and b/gps/brcm/bin/android.hardware.gnss@2.1-impl-google.so differ
diff --git a/gps/brcm/bin/android.hardware.gnss@2.1-service-brcm b/gps/brcm/bin/android.hardware.gnss@2.1-service-brcm
new file mode 100755
index 0000000..58df6c6
Binary files /dev/null and b/gps/brcm/bin/android.hardware.gnss@2.1-service-brcm differ
diff --git a/gps/brcm/bin/flp.default.so b/gps/brcm/bin/flp.default.so
new file mode 100755
index 0000000..5927607
Binary files /dev/null and b/gps/brcm/bin/flp.default.so differ
diff --git a/gps/brcm/bin/gps.default.so b/gps/brcm/bin/gps.default.so
new file mode 100755
index 0000000..343e47e
Binary files /dev/null and b/gps/brcm/bin/gps.default.so differ
diff --git a/gps/brcm/bin/gpsd b/gps/brcm/bin/gpsd
new file mode 100755
index 0000000..c39f6ac
Binary files /dev/null and b/gps/brcm/bin/gpsd differ
diff --git a/gps/brcm/bin/lhd b/gps/brcm/bin/lhd
new file mode 100755
index 0000000..019a703
Binary files /dev/null and b/gps/brcm/bin/lhd differ
diff --git a/gps/brcm/bin/scd b/gps/brcm/bin/scd
new file mode 100755
index 0000000..9dd12b5
Binary files /dev/null and b/gps/brcm/bin/scd differ
diff --git a/gps/brcm/device.mk b/gps/brcm/device.mk
new file mode 100644
index 0000000..f44f37d
--- /dev/null
+++ b/gps/brcm/device.mk
@@ -0,0 +1,16 @@
+BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/gps/brcm/sepolicy
+PRODUCT_COPY_FILES += \
+ device/google/gs-common/gps/brcm/firmware/SensorHub.patch:$(TARGET_COPY_OUT_VENDOR)/firmware/SensorHub.patch
+
+PRODUCT_PACKAGES += \
+ android.hardware.gnss@2.1-impl-google \
+ gps.default \
+ flp.default \
+ gpsd \
+ lhd \
+ scd \
+ android.hardware.gnss@2.1-service-brcm \
+ android.hardware.location.gps.prebuilt.xml
+
+PRODUCT_PACKAGES_DEBUG += \
+ init.gps_log.rc
diff --git a/gps/brcm/firmware/SensorHub.patch b/gps/brcm/firmware/SensorHub.patch
new file mode 100644
index 0000000..be98bf3
--- /dev/null
+++ b/gps/brcm/firmware/SensorHub.patch
@@ -0,0 +1,7050 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gps/brcm/sepolicy/file.te b/gps/brcm/sepolicy/file.te
new file mode 100644
index 0000000..5d9dd83
--- /dev/null
+++ b/gps/brcm/sepolicy/file.te
@@ -0,0 +1,2 @@
+type sysfs_gps, sysfs_type, fs_type;
+type sysfs_gps_assert, sysfs_type, fs_type;
diff --git a/gps/brcm/sepolicy/file_contexts b/gps/brcm/sepolicy/file_contexts
new file mode 100644
index 0000000..8ae128e
--- /dev/null
+++ b/gps/brcm/sepolicy/file_contexts
@@ -0,0 +1,12 @@
+# gnss/gps data/log files
+/data/vendor/gps(/.*)? u:object_r:vendor_gps_file:s0
+
+# devices
+/dev/bbd_control u:object_r:vendor_gnss_device:s0
+/dev/ttyBCM u:object_r:vendor_gnss_device:s0
+
+# vendor binaries
+/vendor/bin/hw/scd u:object_r:scd_exec:s0
+/vendor/bin/hw/lhd u:object_r:lhd_exec:s0
+/vendor/bin/hw/gpsd u:object_r:gpsd_exec:s0
+/vendor/bin/hw/android\.hardware\.gnss@[0-9]\.[0-9]-service-brcm u:object_r:hal_gnss_default_exec:s0
diff --git a/gps/brcm/sepolicy/genfs_contexts b/gps/brcm/sepolicy/genfs_contexts
new file mode 100644
index 0000000..49dfdd0
--- /dev/null
+++ b/gps/brcm/sepolicy/genfs_contexts
@@ -0,0 +1,4 @@
+# GPS
+genfscon sysfs /devices/platform/10940000.spi/spi_master/spi5/spi5.0/nstandby u:object_r:sysfs_gps:s0
+genfscon sysfs /devices/virtual/pps/pps0/assert_elapsed u:object_r:sysfs_gps_assert:s0
+
diff --git a/gps/brcm/sepolicy/gpsd.te b/gps/brcm/sepolicy/gpsd.te
new file mode 100644
index 0000000..2e5a497
--- /dev/null
+++ b/gps/brcm/sepolicy/gpsd.te
@@ -0,0 +1,20 @@
+init_daemon_domain(gpsd)
+
+# Allow gpsd to obtain wakelock
+wakelock_use(gpsd)
+
+# Allow gpsd access data vendor gps files
+allow gpsd vendor_gps_file:dir create_dir_perms;
+allow gpsd vendor_gps_file:file create_file_perms;
+allow gpsd vendor_gps_file:fifo_file create_file_perms;
+
+# Allow gpsd to access rild
+binder_call(gpsd, rild);
+allow gpsd hal_exynos_rild_hwservice:hwservice_manager find;
+
+# Allow gpsd to access sensor service
+binder_call(gpsd, system_server);
+allow gpsd fwk_sensor_hwservice:hwservice_manager find;
+
+# Allow gpsd to access pps gpio
+allow gpsd sysfs_gps_assert:file r_file_perms;
diff --git a/gps/brcm/sepolicy/hal_gnss_default.te b/gps/brcm/sepolicy/hal_gnss_default.te
new file mode 100644
index 0000000..e300423
--- /dev/null
+++ b/gps/brcm/sepolicy/hal_gnss_default.te
@@ -0,0 +1,4 @@
+# Allow hal_gnss_default access data vendor gps files
+allow hal_gnss_default vendor_gps_file:dir create_dir_perms;
+allow hal_gnss_default vendor_gps_file:file create_file_perms;
+allow hal_gnss_default vendor_gps_file:fifo_file create_file_perms;
diff --git a/gps/brcm/sepolicy/lhd.te b/gps/brcm/sepolicy/lhd.te
new file mode 100644
index 0000000..e980897
--- /dev/null
+++ b/gps/brcm/sepolicy/lhd.te
@@ -0,0 +1,23 @@
+type lhd, domain;
+type lhd_exec, vendor_file_type, exec_type, file_type;
+init_daemon_domain(lhd)
+
+# Allow lhd access PixelLogger unix socket in debug build only
+userdebug_or_eng(`
+ typeattribute lhd mlstrustedsubject;
+ allow lhd logger_app:unix_stream_socket connectto;
+')
+
+# Allow lhd access data vendor gps files
+allow lhd vendor_gps_file:dir create_dir_perms;
+allow lhd vendor_gps_file:file create_file_perms;
+allow lhd vendor_gps_file:fifo_file create_file_perms;
+
+# Allow lhd to obtain wakelock
+wakelock_use(lhd)
+
+# Allow lhd access /dev/bbd_control file
+allow lhd vendor_gnss_device:chr_file rw_file_perms;
+
+# Allow lhd access nstandby gpio
+allow lhd sysfs_gps:file rw_file_perms;
diff --git a/gps/brcm/sepolicy/scd.te b/gps/brcm/sepolicy/scd.te
new file mode 100644
index 0000000..28aaee0
--- /dev/null
+++ b/gps/brcm/sepolicy/scd.te
@@ -0,0 +1,17 @@
+type scd, domain;
+type scd_exec, vendor_file_type, exec_type, file_type;
+init_daemon_domain(scd)
+
+# Allow scd access PixelLogger unix socket in debug build only
+userdebug_or_eng(`
+ typeattribute scd mlstrustedsubject;
+ allow scd logger_app:unix_stream_socket connectto;
+')
+
+# Allow a base set of permissions required for network access.
+net_domain(scd);
+
+# Allow scd access data vendor gps files
+allow scd vendor_gps_file:dir create_dir_perms;
+allow scd vendor_gps_file:file create_file_perms;
+allow scd vendor_gps_file:fifo_file create_file_perms;