project device/generic/car/
diff --git a/common/car.mk b/common/car.mk
index 5fea1f7..4579924 100644
--- a/common/car.mk
+++ b/common/car.mk
@@ -55,7 +55,8 @@ PRODUCT_COPY_FILES += \
 
 # Enable landscape
 PRODUCT_COPY_FILES += \
-    frameworks/native/data/etc/android.hardware.screen.landscape.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.screen.landscape.xml
+    frameworks/native/data/etc/android.hardware.screen.landscape.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.screen.landscape.xml \
+    frameworks/native/data/etc/android.hardware.screen.portrait.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.screen.portrait.xml
 
 # Used to embed a map in an activity view
 PRODUCT_COPY_FILES += \

project device/lineage/car/
diff --git a/lineage_car.mk b/lineage_car.mk
index a0a52b1..2c98b75 100644
--- a/lineage_car.mk
+++ b/lineage_car.mk
@@ -3,4 +3,5 @@ PRODUCT_PACKAGES += \
     CarSettingsProviderOverlay
 
 PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
+    config.override_forced_orient=true \
     persist.bluetooth.enablenewavrcp=false \

project device/lineage/sepolicy/
diff --git a/common/private/adbroot.te b/common/private/adbroot.te
index de201a6..828ce90 100644
--- a/common/private/adbroot.te
+++ b/common/private/adbroot.te
@@ -7,6 +7,9 @@ binder_use(adbroot)
 binder_service(adbroot)
 add_service(adbroot, adbroot_service)
 
+allow adbroot package_native_service:service_manager find;
+binder_call(adbroot, system_server)
+
 allow adbroot adbroot_data_file:dir rw_dir_perms;
 allow adbroot adbroot_data_file:file create_file_perms;
 

project device/samsung/gta4xlwifi/
diff --git a/lineage_gta4xlwifi.mk b/lineage_gta4xlwifi.mk
index d2098bb..45c7dc4 100644
--- a/lineage_gta4xlwifi.mk
+++ b/lineage_gta4xlwifi.mk
@@ -27,7 +27,18 @@ TARGET_SCREEN_HEIGHT := 2000
 TARGET_SCREEN_WIDTH := 1200
 
 ## Inherit some common Lineage stuff
-$(call inherit-product, vendor/lineage/config/common_full_tablet_wifionly.mk)
+# $(call inherit-product, vendor/lineage/config/common_full_tablet_wifionly.mk)
+TARGET_DISABLE_EPPE := true
+$(call inherit-product, vendor/lineage/config/common_car.mk)
+$(call inherit-product, device/lineage/car/lineage_car_vendor.mk)
+
+PRODUCT_PRODUCT_PROPERTIES += \
+    persist.adb.tcp.port=5555 \
+    persist.service.adb.enable=1 \
+    persist.service.debuggable=1 \
+    persist.sys.usb.config=mtp,adb \
+    ro.secure=0 \
+    ro.adb.secure=0
 
 ## Enable updating of APEXes
 $(call inherit-product, $(SRC_TARGET_DIR)/product/updatable_apex.mk)

project frameworks/base/
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index 99b15db780dc..e94c3b19e7d2 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -28,7 +28,7 @@
     <string name="def_bluetooth_disabled_profiles" translatable="false">0</string>
     <bool name="def_auto_time">true</bool>
     <bool name="def_auto_time_zone">true</bool>
-    <bool name="def_accelerometer_rotation">false</bool>
+    <bool name="def_accelerometer_rotation">true</bool>
     <!-- Default screen brightness, from 0 to 255.  102 is 40%. -->
     <integer name="def_screen_brightness">102</integer>
     <bool name="def_screen_brightness_automatic_mode">false</bool>

project packages/modules/adb/
diff --git a/Android.bp b/Android.bp
index 0a808e9d..427b6e7b 100644
--- a/Android.bp
+++ b/Android.bp
@@ -800,9 +800,12 @@ cc_binary {
     ],
     shared_libs: [
         "libbase",
+        "libbinder",
         "libbinder_ndk",
+        "libcutils",
         "liblog",
         "libutils",
+        "packagemanager_aidl-cpp",
     ],
     static_libs: [
         "adbroot_aidl_interface-ndk",
diff --git a/root/adbroot_service.cpp b/root/adbroot_service.cpp
index 710a521e..287e47a8 100644
--- a/root/adbroot_service.cpp
+++ b/root/adbroot_service.cpp
@@ -15,10 +15,14 @@
  */
 
 #include <android/binder_manager.h>
+#include <android/content/pm/IPackageManagerNative.h>
 #include <android-base/file.h>
 #include <android-base/logging.h>
 #include <android-base/properties.h>
 #include <android-base/strings.h>
+#include <binder/IBinder.h>
+#include <binder/IServiceManager.h>
+#include <cutils/multiuser.h>
 #include <private/android_filesystem_config.h>
 
 #include "adbroot_service.h"
@@ -33,6 +37,32 @@ static ndk::ScopedAStatus SecurityException(const std::string& msg) {
 }
 }  // anonymous namespace
 
+namespace android {
+static bool isAutomotive() {
+    sp<IServiceManager> serviceManager = defaultServiceManager();
+    if (serviceManager.get() == nullptr) {
+        LOG(ERROR) << "Unable to access native ServiceManager";
+        return false;
+    }
+    sp<content::pm::IPackageManagerNative> packageManager;
+    sp<IBinder> binder = serviceManager->waitForService(String16("package_native"));
+    packageManager = interface_cast<content::pm::IPackageManagerNative>(binder);
+    if (packageManager == nullptr) {
+        LOG(ERROR) << "Unable to access native PackageManager";
+        return false;
+    }
+    bool isAutomotive = false;
+    binder::Status status =
+        packageManager->hasSystemFeature(String16("android.hardware.type.automotive"), 0,
+                                         &isAutomotive);
+    if (!status.isOk()) {
+        LOG(ERROR) << "Calling hasSystemFeature failed: " << status.exceptionMessage().c_str();
+        return false;
+    }
+    return isAutomotive;
+}
+}  // namespace android
+
 namespace aidl {
 namespace android {
 namespace adbroot {
@@ -43,6 +73,11 @@ using ::android::base::SetProperty;
 using ::android::base::Trim;
 using ::android::base::WriteStringToFile;
 
+static inline bool isAutomotive(uid_t uid) {
+    appid_t appid = multiuser_get_app_id(uid);
+    return appid == AID_SYSTEM && ::android::isAutomotive();
+}
+
 ADBRootService::ADBRootService() : enabled_(false) {
     std::string buf;
     if (ReadFileToString(kStoragePath + kEnabled, &buf)) {
@@ -62,7 +97,7 @@ void ADBRootService::Register() {
 
 ndk::ScopedAStatus ADBRootService::isSupported(bool* _aidl_return) {
     uid_t uid = AIBinder_getCallingUid();
-    if (uid != AID_SYSTEM && uid != AID_SHELL) {
+    if (uid != AID_SYSTEM && uid != AID_SHELL && !isAutomotive(uid)) {
         return SecurityException("Caller must be system or shell");
     }
 
@@ -73,7 +108,7 @@ ndk::ScopedAStatus ADBRootService::isSupported(bool* _aidl_return) {
 
 ndk::ScopedAStatus ADBRootService::setEnabled(bool enabled) {
     uid_t uid = AIBinder_getCallingUid();
-    if (uid != AID_SYSTEM) {
+    if (uid != AID_SYSTEM && !isAutomotive(uid)) {
         return SecurityException("Caller must be system");
     }
 
@@ -95,7 +130,7 @@ ndk::ScopedAStatus ADBRootService::setEnabled(bool enabled) {
 
 ndk::ScopedAStatus ADBRootService::getEnabled(bool* _aidl_return) {
     uid_t uid = AIBinder_getCallingUid();
-    if (uid != AID_SYSTEM && uid != AID_SHELL) {
+    if (uid != AID_SYSTEM && uid != AID_SHELL && !isAutomotive(uid)) {
         return SecurityException("Caller must be system or shell");
     }