diff --git a/BoardConfig-common.mk b/BoardConfig-common.mk index 7c0ed426..fee3bb32 100644 --- a/BoardConfig-common.mk +++ b/BoardConfig-common.mk @@ -205,7 +205,7 @@ BOARD_SUPPORT_MFC_ENC_RGB := true BOARD_USE_BLOB_ALLOCATOR := false BOARD_SUPPORT_MFC_ENC_BT2020 := true BOARD_SUPPORT_FLEXIBLE_P010 := true - +BOARD_SUPPORT_MFC_VERSION := 1660 ######################## BOARD_SUPER_PARTITION_SIZE := 8531214336 diff --git a/conf/init.zuma.rc b/conf/init.zuma.rc index c7558410..b6e622e5 100644 --- a/conf/init.zuma.rc +++ b/conf/init.zuma.rc @@ -17,12 +17,8 @@ on init write /proc/vendor_sched/teo_util_threshold "2 1024 1024" # Boot time fs tuning - write /sys/block/sda/queue/iostats 0 write /sys/block/sda/queue/scheduler bfq write /sys/block/sda/queue/iosched/slice_idle 0 - write /sys/block/sda/queue/nr_requests 256 - write /dev/sys/fs/by-name/userdata/data_io_flag 56 - write /dev/sys/fs/by-name/userdata/node_io_flag 56 chown system system /proc/vendor_sched/groups/bg/set_task_group chown system system /proc/vendor_sched/groups/cam/set_task_group @@ -104,15 +100,6 @@ on init chmod 0660 /proc/vendor_sched/pmu_poll_enable chmod 0220 /proc/vendor_sched/pmu_poll_time - wait /dev/block/platform/${ro.boot.boot_devices} - symlink /dev/block/platform/${ro.boot.boot_devices} /dev/block/bootdevice - - # to access UFS/eMMC sysfs directly - symlink /sys/devices/platform/${ro.boot.boot_devices} /dev/sys/block/bootdevice - - # Disable UFS powersaving - write /dev/sys/block/bootdevice/clkgate_enable 0 - start vendor.keymaster-4-0 # ZRAM setup @@ -284,6 +271,7 @@ on init # BatteryHealthData chown system system /sys/class/power_supply/battery/first_usage_date + chown system system /sys/class/power_supply/battery/swelling_data # Battery Defender chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_cnt @@ -306,6 +294,7 @@ on init chown system system /sys/devices/platform/google,charger/bd_trigger_time chown system system /sys/devices/platform/google,charger/bd_trigger_voltage chown system system /sys/devices/platform/google,charger/bd_clear + chown system system /sys/devices/platform/google,charger/bd_state chown system system /sys/devices/platform/google,charger/charge_start_level chown system system /sys/devices/platform/google,charger/charge_stop_level chown system system /sys/devices/platform/google,cpm/dc_ctl @@ -543,15 +532,6 @@ on early-boot # Wait for insmod_sh to finish all common modules wait_for_prop vendor.common.modules.ready 1 - # Permission for Health Storage HAL - chown system system /dev/sys/block/bootdevice/manual_gc - - # Permission for Pixelstats - chown system system /dev/sys/block/bootdevice/slowio_read_cnt - chown system system /dev/sys/block/bootdevice/slowio_write_cnt - chown system system /dev/sys/block/bootdevice/slowio_unmap_cnt - chown system system /dev/sys/block/bootdevice/slowio_sync_cnt - # logbuffer chown system system /dev/logbuffer_maxfg chown system system /dev/logbuffer_maxfg_monitor @@ -669,6 +649,7 @@ on fs chown system system /sys/class/backlight/panel0-backlight/dimming_on chown system system /sys/class/backlight/panel0-backlight/hbm_mode chown system system /sys/class/backlight/panel0-backlight/local_hbm_mode + chown system system /sys/class/backlight/panel0-backlight/allow_wakeup_by_state_change chown system system /sys/devices/platform/exynos-drm/primary-panel/gamma chown system system /sys/devices/platform/exynos-drm/primary-panel/min_vrefresh chown system system /sys/devices/platform/exynos-drm/primary-panel/idle_delay_ms @@ -700,8 +681,6 @@ on fs chown system system /sys/class/dqe0/atc/gain_limit chown system system /sys/class/dqe0/atc/lt_calc_ab_shift - chown system system /sys/devices/platform/110f0000.drmdp/drm-displayport/dp_hotplug_error_code - chown system system /sys/devices/platform/19470000.drmdecon/early_wakeup chmod 0660 /sys/devices/platform/19470000.drmdecon/early_wakeup @@ -776,24 +755,6 @@ on property:init.svc.vendor.charger=running write /sys/devices/system/cpu/cpu7/online 0 on property:sys.boot_completed=1 - - # Runtime fs tuning - write /sys/block/sda/queue/nr_requests 128 - write /sys/block/sda/queue/iostats 1 - write /sys/block/sda/queue/iosched/slice_idle 0 - write /dev/sys/fs/by-name/userdata/data_io_flag 8 - write /dev/sys/fs/by-name/userdata/node_io_flag 8 - - # Permission for Pixelstats - chown system system /dev/sys/fs/by-name/userdata/compr_written_block - chown system system /dev/sys/fs/by-name/userdata/compr_saved_block - chown system system /dev/sys/fs/by-name/userdata/compr_new_inode - chown system system /dev/sys/fs/by-name/userdata/gc_segment_mode - chown system system /dev/sys/fs/by-name/userdata/gc_reclaimed_segments - chown system system /dev/sys/fs/by-name/userdata/peak_atomic_write - chown system system /dev/sys/fs/by-name/userdata/committed_atomic_block - chown system system /dev/sys/fs/by-name/userdata/revoked_atomic_block - # Enable ZRAM on boot_complete swapon_all /vendor/etc/fstab.${ro.board.platform} write /proc/sys/vm/swappiness 60 @@ -808,9 +769,6 @@ on property:sys.boot_completed=1 write /proc/sys/vm/dirty_expire_centisecs 3000 write /proc/sys/vm/dirty_background_ratio 10 - # Enable UFS powersaving - write /dev/sys/block/bootdevice/clkgate_enable 1 - # Cancel boot devfreq write /sys/devices/platform/17000010.devfreq_mif/devfreq/17000010.devfreq_mif/exynos_data/cancel_boot_freq 1 @@ -1146,16 +1104,6 @@ on charger mkdir /dev/thermal/cdev-by-name 0750 system system start vendor.thermal.symlinks - # Runtime fs tuning - write /sys/block/sda/queue/nr_requests 128 - write /sys/block/sda/queue/iostats 1 - write /sys/block/sda/queue/iosched/slice_idle 0 - write /dev/sys/fs/by-name/userdata/data_io_flag 8 - write /dev/sys/fs/by-name/userdata/node_io_flag 8 - - # Enable UFS powersaving - write /dev/sys/block/bootdevice/clkgate_enable 1 - # Cancel boot devfreq and uclamp write /sys/devices/platform/17000010.devfreq_mif/devfreq/17000010.devfreq_mif/exynos_data/cancel_boot_freq 1 write /proc/vendor_sched/groups/ta/uclamp_min 0 @@ -1182,11 +1130,6 @@ on post-fs-data && property:ro.vendor.factory=1 chmod 666 /sys/class/backlight/panel0-backlight/local_hbm_mode chmod 666 /sys/class/backlight/panel0-backlight/hbm_mode -# UFS -on property:ro.boot.mode=charger && property:init.svc.vendor.charger=running - # Enable UFS powersaving in Off Mode Charger - write /dev/sys/block/bootdevice/clkgate_enable 1 - # MTE on property:persist.device_config.runtime_native_boot.mode_override=sync # Per-core mode overrides. diff --git a/default-permissions.xml b/default-permissions.xml index 582971c7..fd29d6bc 100644 --- a/default-permissions.xml +++ b/default-permissions.xml @@ -54,6 +54,8 @@ + + diff --git a/device.mk b/device.mk index ebc305e9..3d6ea96c 100644 --- a/device.mk +++ b/device.mk @@ -76,7 +76,7 @@ PRODUCT_SOONG_NAMESPACES += \ hardware/google/pixel \ device/google/zuma \ device/google/zuma/powerstats \ - system/chre/host/hal_generic \ + vendor/google_devices/common/chre/host/hal \ vendor/google/whitechapel/tools \ vendor/google/interfaces \ vendor/google_devices/common/proprietary/confirmatioui_hal \ @@ -89,6 +89,11 @@ LOCAL_KERNEL := $(TARGET_KERNEL_DIR)/Image.lz4 # Set the environment variable to switch the Keymint HAL service to Rust TRUSTY_KEYMINT_IMPL := rust +ifeq ($(RELEASE_AVF_ENABLE_LLPVM_CHANGES),true) + # Set the environment variable to enable the Secretkeeper HAL service. + SECRETKEEPER_ENABLED := true +endif + # OEM Unlock reporting PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \ ro.oem_unlock_supported=1 @@ -175,26 +180,26 @@ PRODUCT_PRODUCT_PROPERTIES += \ # Set supported Bluetooth profiles to enabled PRODUCT_PRODUCT_PROPERTIES += \ - bluetooth.profile.asha.central.enabled=true \ - bluetooth.profile.a2dp.source.enabled=true \ - bluetooth.profile.avrcp.target.enabled=true \ - bluetooth.profile.bap.unicast.server.enabled=true \ - bluetooth.profile.bas.client.enabled=true \ - bluetooth.profile.csip.set_coordinator.enabled=true \ - bluetooth.profile.gatt.enabled=true \ - bluetooth.profile.hap.client.enabled=true \ - bluetooth.profile.hfp.ag.enabled=true \ - bluetooth.profile.hid.device.enabled=true \ - bluetooth.profile.hid.host.enabled=true \ - bluetooth.profile.map.server.enabled=true \ - bluetooth.profile.mcp.server.enabled=true \ - bluetooth.profile.opp.enabled=true \ - bluetooth.profile.pan.nap.enabled=true \ - bluetooth.profile.pan.panu.enabled=true \ - bluetooth.profile.pbap.server.enabled=true \ - bluetooth.profile.sap.server.enabled=true \ - bluetooth.profile.tbs.server.enabled=true \ - bluetooth.profile.vc.server.enabled=true + bluetooth.profile.asha.central.enabled?=true \ + bluetooth.profile.a2dp.source.enabled?=true \ + bluetooth.profile.avrcp.target.enabled?=true \ + bluetooth.profile.bap.unicast.server.enabled?=true \ + bluetooth.profile.bas.client.enabled?=true \ + bluetooth.profile.csip.set_coordinator.enabled?=true \ + bluetooth.profile.gatt.enabled?=true \ + bluetooth.profile.hap.client.enabled?=true \ + bluetooth.profile.hfp.ag.enabled?=true \ + bluetooth.profile.hid.device.enabled?=true \ + bluetooth.profile.hid.host.enabled?=true \ + bluetooth.profile.map.server.enabled?=true \ + bluetooth.profile.mcp.server.enabled?=true \ + bluetooth.profile.opp.enabled?=true \ + bluetooth.profile.pan.nap.enabled?=true \ + bluetooth.profile.pan.panu.enabled?=true \ + bluetooth.profile.pbap.server.enabled?=true \ + bluetooth.profile.sap.server.enabled?=true \ + bluetooth.profile.tbs.server.enabled?=true \ + bluetooth.profile.vc.server.enabled?=true # Carrier configuration default location PRODUCT_PROPERTY_OVERRIDES += \ @@ -208,7 +213,7 @@ PRODUCT_PROPERTY_OVERRIDES += \ persist.vendor.usb.displayport.enabled=1 else PRODUCT_PROPERTY_OVERRIDES += \ - persist.vendor.usb.displayport.enabled=0 + persist.vendor.usb.displayport.enabled=1 endif USE_LASSEN_OEMHOOK := true @@ -282,6 +287,7 @@ PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.vulkan.version-1_3.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml \ frameworks/native/data/etc/android.hardware.vulkan.level-1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.level.xml \ frameworks/native/data/etc/android.hardware.vulkan.compute-0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.compute.xml \ + frameworks/native/data/etc/android.software.contextualsearch.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.contextualsearch.xml \ frameworks/native/data/etc/android.software.vulkan.deqp.level-2023-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.vulkan.deqp.level.xml \ frameworks/native/data/etc/android.software.opengles.deqp.level-2023-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.opengles.deqp.level.xml @@ -294,8 +300,7 @@ PRODUCT_VENDOR_PROPERTIES += \ PRODUCT_VENDOR_PROPERTIES += \ ro.opengles.version=196610 \ - graphics.gpu.profiler.support=true \ - debug.renderengine.backend=skiaglthreaded \ + graphics.gpu.profiler.support=true # b/295257834 Add HDR shaders to SurfaceFlinger's pre-warming cache PRODUCT_VENDOR_PROPERTIES += ro.surface_flinger.prime_shader_cache.ultrahdr=1 @@ -385,25 +390,24 @@ PRODUCT_HOST_PACKAGES += \ PRODUCT_PACKAGES += \ messaging -# Contexthub HAL -PRODUCT_PACKAGES += \ - android.hardware.contexthub-service.generic - -# CHRE tools +# CHRE +## Tools ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) PRODUCT_PACKAGES += \ chre_power_test_client \ - chre_test_client + chre_test_client \ + chre_aidl_hal_client endif +## HAL +include device/google/gs-common/chre/hal.mk PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.context_hub.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.context_hub.xml ## Enable the CHRE Daemon -CHRE_USF_DAEMON_ENABLED := true +CHRE_USF_DAEMON_ENABLED := false CHRE_DEDICATED_TRANSPORT_CHANNEL_ENABLED := true PRODUCT_PACKAGES += \ - chre \ preloaded_nanoapps.json # Filesystem management tools @@ -551,7 +555,7 @@ PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \ android.hardware.graphics.mapper@4.0-impl \ - android.hardware.graphics.allocator-V2-service + android.hardware.graphics.allocator-V1-service PRODUCT_PACKAGES += \ android.hardware.memtrack-service.pixel \ @@ -688,6 +692,7 @@ PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.earlyGl.app.duration=16600000 PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.frame_rate_multiple_threshold=120 PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.treat_170m_as_sRGB=1 PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.hwc_hotplug_error_via_neg_vsync=1 +PRODUCT_DEFAULT_PROPERTY_OVERRIDES += debug.sf.hwc_hdcp_via_neg_vsync=1 PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.enable_layer_caching=true PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.set_idle_timer_ms?=80 @@ -710,12 +715,11 @@ PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.use_color_management=tr PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.protected_contents=true PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.display_update_imminent_timeout_ms=50 -# force to blend in P3 mode PRODUCT_PROPERTY_OVERRIDES += \ - persist.sys.sf.native_mode=2 \ - persist.sys.sf.color_mode=9 + persist.sys.sf.native_mode=2 PRODUCT_COPY_FILES += \ - device/google/zuma/display/display_colordata_cal0.pb:$(TARGET_COPY_OUT_VENDOR)/etc/display_colordata_cal0.pb + device/google/zuma/display/display_colordata_cal0.pb:$(TARGET_COPY_OUT_VENDOR)/etc/display_colordata_cal0.pb \ + device/google/zuma/display/display_colordata_cal2.pb:$(TARGET_COPY_OUT_VENDOR)/etc/display_colordata_cal2.pb # limit DPP downscale ratio PRODUCT_DEFAULT_PROPERTY_OVERRIDES += vendor.hwc.dpp.downscale=4 @@ -836,7 +840,7 @@ PRODUCT_SOONG_NAMESPACES += \ vendor/google/trusty/common PRODUCT_PACKAGES += \ - trusty_metricsd + trusty_metricsd $(call soong_config_set,google_displaycolor,displaycolor_platform,zuma) PRODUCT_PACKAGES += \ @@ -913,21 +917,6 @@ PRODUCT_PACKAGES += ShannonIms PRODUCT_PACKAGES += ShannonRcs -ifeq (,$(filter aosp_% factory_%,$(TARGET_PRODUCT))) -#ImsMediaAoc library -FEATURE_TYPE := oem_audio -SOONG_CONFIG_NAMESPACES += audio_lib -SOONG_CONFIG_audio_lib += \ - audio_type - -SOONG_CONFIG_audio_lib_audio_type := $(FEATURE_TYPE) -endif - -# ImsMedia -PRODUCT_PACKAGES += \ - ImsMediaService \ - libimsmedia - # Exynos RIL and telephony # Multi SIM(DSDS) SIM_COUNT := 2 @@ -982,6 +971,9 @@ endif # modem logging binary/configs PRODUCT_PACKAGES += modem_logging_control +# libeomservice_proxy binary/configs +PRODUCT_PACKAGES += liboemservice_proxy_default + # PILOT SCENARIOS PRODUCT_PACKAGES += \ Pixel_stability.cfg \ @@ -1029,7 +1021,7 @@ PRODUCT_PACKAGES += \ # Audio # Audio HAL Server & Default Implementations -ifeq ($(RELEASE_PIXEL_AIDL_AUDIO_HAL),true) +ifeq ($(USE_AUDIO_HAL_AIDL),true) include device/google/gs-common/audio/aidl.mk else include device/google/gs-common/audio/hidl_zuma.mk @@ -1094,6 +1086,14 @@ PRODUCT_PROPERTY_OVERRIDES += persist.vendor.enable.thermal.genl=true include device/google/gs-common/edgetpu/edgetpu.mk # Config variables for TPU chip on device. $(call soong_config_set,edgetpu_config,chip,rio) +# Include the edgetpu targets defined the namespaces below into the final image. +PRODUCT_SOONG_NAMESPACES += \ + vendor/google_devices/zuma/proprietary/gchips/tpu/metrics \ + vendor/google_devices/zuma/proprietary/gchips/tpu/tflite_delegate \ + vendor/google_devices/zuma/proprietary/gchips/tpu/darwinn_logging_service \ + vendor/google_devices/zuma/proprietary/gchips/tpu/nnapi_stable_aidl \ + vendor/google_devices/zuma/proprietary/gchips/tpu/aidl \ + vendor/google_devices/zuma/proprietary/gchips/tpu/hal # TPU firmware PRODUCT_PACKAGES += edgetpu-rio.fw @@ -1187,6 +1187,7 @@ endif # Touch service include hardware/google/pixel/input/twoshay.mk +include device/google/gs-common/touch/twoshay/aidl_zuma.mk # Allow longer timeout for incident report generation in bugreport # Overriding in /product partition instead of /vendor intentionally, diff --git a/device_framework_matrix_product.xml b/device_framework_matrix_product.xml index b5128682..ba83dfa4 100644 --- a/device_framework_matrix_product.xml +++ b/device_framework_matrix_product.xml @@ -120,30 +120,6 @@ default - - com.google.input.algos.spd - 2 - - IScreenProtectorDetectorService - default - - - - com.google.input - 1-2 - - ITouchContextService - default - - - - com.google.input.algos.gril - 2 - - IGrilAntennaTuningService - default - - hardware.qorvo.uwb @@ -195,6 +171,7 @@ com.google.pixel.modem.logmasklibrary + 1 ILiboemserviceProxy default diff --git a/display/display_colordata_cal2.pb b/display/display_colordata_cal2.pb new file mode 100644 index 00000000..9840d6a2 Binary files /dev/null and b/display/display_colordata_cal2.pb differ diff --git a/dumpstate/dump_power.cpp b/dumpstate/dump_power.cpp index a79921b1..5af853fc 100644 --- a/dumpstate/dump_power.cpp +++ b/dumpstate/dump_power.cpp @@ -152,6 +152,26 @@ void dumpAcpmStats() { readContentsOfDir(acpmTitle, acpmDir, statsSubStr, true, true); } +void dumpTcpmPsyUevent() { + const char* tcpmPsy = "tcpm-source-psy-"; + DIR *dir = opendir("/sys/class/power_supply/"); + struct dirent *entry; + + if (dir == NULL) + return; + + while ((entry = readdir(dir)) != NULL) { + if (std::string::npos != std::string(entry->d_name).find(tcpmPsy)) { + std::string fullPath("/sys/class/power_supply/" + (const std::string)entry->d_name + + "/uevent"); + dumpFileContent("Power supply property tcpm", fullPath.c_str()); + break; + } + } + + closedir(dir); +} + void dumpPowerSupplyStats() { const char* dumpList[][2] = { {"CPU PM stats", "/sys/devices/system/cpu/cpupm/cpupm/time_in_state"}, @@ -162,7 +182,6 @@ void dumpPowerSupplyStats() { {"Power supply property gcpm_pps", "/sys/class/power_supply/gcpm_pps/uevent"}, {"Power supply property main-charger", "/sys/class/power_supply/main-charger/uevent"}, {"Power supply property dc-mains", "/sys/class/power_supply/dc-mains/uevent"}, - {"Power supply property tcpm", "/sys/class/power_supply/tcpm-source-psy-11-0025/uevent"}, {"Power supply property usb", "/sys/class/power_supply/usb/uevent"}, {"Power supply property wireless", "/sys/class/power_supply/wireless/uevent"}, }; @@ -170,6 +189,8 @@ void dumpPowerSupplyStats() { for (const auto &row : dumpList) { dumpFileContent(row[0], row[1]); } + + dumpTcpmPsyUevent(); } void dumpMaxFg() { @@ -325,6 +346,7 @@ void dumpLn8411() { void dumpBatteryHealth() { const char* batteryHealth [][2] { {"Battery Health", "/sys/class/power_supply/battery/health_index_stats"}, + {"Battery Health SoC Residency", "/sys/class/power_supply/battery/swelling_data"}, {"BMS", "/dev/logbuffer_ssoc"}, {"TTF", "/dev/logbuffer_ttf"}, {"TTF details", "/sys/class/power_supply/battery/ttf_details"}, @@ -417,24 +439,49 @@ void printValuesOfDirectory(const char *directory, std::string debugfs, const ch files.clear(); } +void dumpChg() { + const std::string pmic_bus = "/sys/devices/platform/10cb0000.hsi2c/i2c-11/11-0066"; + const char* chg_reg_dump_file = "/sys/class/power_supply/main-charger/device/registers_dump"; + const std::string chg_name_cmd = "/sys/class/power_supply/main-charger/device/name"; + const std::string pmic_name_cmd = pmic_bus + "/name"; + const std::string pmic_reg_dump_file = pmic_bus + "/registers_dump"; + const std::string reg_dump_str = " registers dump"; + const char* chgConfig [][2] { + {"DC_registers dump", "/sys/class/power_supply/dc-mains/device/registers_dump"}, + }; + std::string chg_name; + std::string pmic_name; + + printf("\n"); + + int ret = android::base::ReadFileToString(chg_name_cmd, &chg_name); + if (ret && !chg_name.empty()) { + chg_name.erase(chg_name.length() - 1); // remove new line + const std::string chg_reg_dump_title = chg_name + reg_dump_str; + + /* CHG reg dump */ + dumpFileContent(chg_reg_dump_title.c_str(), chg_reg_dump_file); + } + + ret = android::base::ReadFileToString(pmic_name_cmd, &pmic_name); + if (ret && !pmic_name.empty()) { + pmic_name.erase(pmic_name.length() - 1); // remove new line + const std::string pmic_reg_dump_title = pmic_name + reg_dump_str; + + /* PMIC reg dump */ + dumpFileContent(pmic_reg_dump_title.c_str(), pmic_reg_dump_file.c_str()); + } + + for (auto &config : chgConfig) { + dumpFileContent(config[0], config[1]); + } +} + void dumpChgUserDebug() { - const char *chgDebugMax77759 [][2] { - {"max77759_chg registers dump", "/d/max77759_chg/registers"}, - {"max77729_pmic registers dump", "/d/max77729_pmic/registers"}, - }; - const char *chgDebugMax77779 [][2] { - {"max77779_chg registers dump", "/d/max77779_chg/registers"}, - {"max77779_pmic registers dump", "/d/max77779_pmic/registers"}, - }; - const std::string debugfs = "/d/"; - const char *maxFgDir = "/d/maxfg"; const char *maxFgStrMatch = "maxfg"; const char *maxFg77779StrMatch = "max77779fg"; - const char *baseChgDir = "/d/max77759_chg"; - const char *dcRegName = "DC_registers dump"; - const char *dcRegDir = "/sys/class/power_supply/dc-mains/device/registers_dump"; const char *chgTblName = "Charging table dump"; const char *chgTblDir = "/d/google_battery/chg_raw_profile"; @@ -457,20 +504,6 @@ void dumpChgUserDebug() { if (isUserBuild()) return; - if (isValidFile(dcRegDir)) { - dumpFileContent(dcRegName, dcRegDir); - } - - if (isValidDir(baseChgDir)) { - for (auto &row : chgDebugMax77759) { - dumpFileContent(row[0], row[1]); - } - } else { - for (auto &row : chgDebugMax77779) { - dumpFileContent(row[0], row[1]); - } - } - dumpFileContent(chgTblName, chgTblDir); if (isValidDir(maxFgDir)) { @@ -922,6 +955,7 @@ int main() { dumpLn8411(); dumpBatteryHealth(); dumpBatteryDefend(); + dumpChg(); dumpChgUserDebug(); dumpBatteryEeprom(); dumpChargerStats(); diff --git a/manifest.xml b/manifest.xml index a71c165d..69a1bcdd 100644 --- a/manifest.xml +++ b/manifest.xml @@ -12,28 +12,4 @@ android.hardware.boot IBootControl/default - - com.google.input.algos.spd - 2 - - IScreenProtectorDetectorService - default - - - - com.google.input - 2 - - ITouchContextService - default - - - - com.google.input.algos.gril - 2 - - IGrilAntennaTuningService - default - - diff --git a/media_codecs_performance_c2.xml b/media_codecs_performance_c2.xml index 4dcb0b4b..fb148bc0 100644 --- a/media_codecs_performance_c2.xml +++ b/media_codecs_performance_c2.xml @@ -172,61 +172,61 @@ - - - - + + + + - + - + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + @@ -240,8 +240,8 @@ - - + + @@ -258,34 +258,34 @@ - - + + - + - + - + - + - + - + - - - - + + + + - + diff --git a/modem_ml/modem_ml_models_user.conf b/modem_ml/modem_ml_models_user.conf index b606ee97..1a150570 100644 --- a/modem_ml/modem_ml_models_user.conf +++ b/modem_ml/modem_ml_models_user.conf @@ -1,3 +1,4 @@ #name,version,ml_type,compute_enable,compute_timer,train_enable,train_timer,monitor_enable_monitor_timer,execution_type,execution_timer +fr2_bps_ml_model,0,LEGACY,true,0,false,0,false,0,SYNCHRONOUS_REGULAR,5000 sample_linear_reg,0,LEGACY,false,0,false,0,false,0,SYNCHRONOUS_REGULAR,5000 -sample_fully_conn,0,LEGACY,false,0,false,0,false,0,SYNCHRONOUS_REGULAR,5000 +sample_fully_conn,88,LEGACY,false,0,false,0,false,0,SYNCHRONOUS_REGULAR,5000 diff --git a/modem_ml/modem_ml_models_userdebug.conf b/modem_ml/modem_ml_models_userdebug.conf index b606ee97..1a150570 100644 --- a/modem_ml/modem_ml_models_userdebug.conf +++ b/modem_ml/modem_ml_models_userdebug.conf @@ -1,3 +1,4 @@ #name,version,ml_type,compute_enable,compute_timer,train_enable,train_timer,monitor_enable_monitor_timer,execution_type,execution_timer +fr2_bps_ml_model,0,LEGACY,true,0,false,0,false,0,SYNCHRONOUS_REGULAR,5000 sample_linear_reg,0,LEGACY,false,0,false,0,false,0,SYNCHRONOUS_REGULAR,5000 -sample_fully_conn,0,LEGACY,false,0,false,0,false,0,SYNCHRONOUS_REGULAR,5000 +sample_fully_conn,88,LEGACY,false,0,false,0,false,0,SYNCHRONOUS_REGULAR,5000 diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml index 0c741670..921b7522 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -304,6 +304,7 @@ com.zhiliaoapp.musically:0.07 com.bilibili.app.in:0.07 com.twitter.android:0.07 + com.google.android.youtube:0.07 diff --git a/pixelstats/pixelstats-vendor.zuma.rc b/pixelstats/pixelstats-vendor.zuma.rc index 70d875ea..6f6da84d 100644 --- a/pixelstats/pixelstats-vendor.zuma.rc +++ b/pixelstats/pixelstats-vendor.zuma.rc @@ -1,4 +1,6 @@ on property:sys.boot_completed=1 + chown system system /sys/class/power_supply/maxfg_base/fg_learning_events + chown system system /sys/class/power_supply/maxfg/fg_learning_events start vendor.pixelstats_vendor on post-fs-data chown system system /sys/kernel/metrics/irq/stats_reset diff --git a/pixelstats/service.cpp b/pixelstats/service.cpp index da8545cd..bb64ea62 100644 --- a/pixelstats/service.cpp +++ b/pixelstats/service.cpp @@ -101,12 +101,41 @@ const struct SysfsCollector::SysfsPaths sysfs_paths = { .OffloadEffectsIdPath = "/sys/devices/platform/audiometrics/offload_effects_id", .OffloadEffectsDurationPath = "/sys/devices/platform/audiometrics/offload_effects_duration", .BluetoothAudioUsagePath = "/sys/devices/platform/audiometrics/bt_usage", - .GMSRPath = "/sys/class/power_supply/maxfg/gmsr" + .GMSRPath = { + "/sys/class/power_supply/maxfg/gmsr", + "/sys/class/power_supply/maxfg_base/gmsr", + }, + .DisplayPortStatsPaths = { + "/sys/devices/platform/exynos-drm/displayport/drm-displayport-stats/link_negotiation_failures", + "/sys/devices/platform/exynos-drm/displayport/drm-displayport-stats/edid_read_failures", + "/sys/devices/platform/exynos-drm/displayport/drm-displayport-stats/dpcd_read_failures", + "/sys/devices/platform/exynos-drm/displayport/drm-displayport-stats/edid_invalid_failures", + "/sys/devices/platform/exynos-drm/displayport/drm-displayport-stats/sink_count_invalid_failures", + "/sys/devices/platform/exynos-drm/displayport/drm-displayport-stats/link_unstable_failures", + }, + .HDCPStatsPaths = { + "/sys/devices/platform/hdcp/hdcp2_success_count", + "/sys/devices/platform/hdcp/hdcp2_fallback_count", + "/sys/devices/platform/hdcp/hdcp2_fail_count", + "/sys/devices/platform/hdcp/hdcp1_success_count", + "/sys/devices/platform/hdcp/hdcp1_fail_count", + "/sys/devices/platform/hdcp/hdcp0_count", + } }; const struct UeventListener::UeventPaths ueventPaths = { .AudioUevent = "/devices/virtual/amcs/amcs", - .TypeCPartnerUevent = "PRODUCT_TYPE="}; + .TypeCPartnerUevent = "PRODUCT_TYPE=", + .FGLearningPath = { + "/sys/class/power_supply/maxfg/fg_learning_events", + "/sys/class/power_supply/maxfg_base/fg_learning_events" + }, + .FwUpdatePath = "", + .FGModelLoadingPath = { + "/sys/class/power_supply/maxfg/m5_model_state", + "/sys/class/power_supply/maxfg_base/m5_model_state" + } +}; int main() { LOG(INFO) << "starting PixelStats"; diff --git a/powerstats/ZumaCommonDataProviders.cpp b/powerstats/ZumaCommonDataProviders.cpp index dc3f5342..4b2fef97 100644 --- a/powerstats/ZumaCommonDataProviders.cpp +++ b/powerstats/ZumaCommonDataProviders.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -39,6 +40,7 @@ using aidl::android::hardware::power::stats::AdaptiveDvfsStateResidencyDataProvi using aidl::android::hardware::power::stats::AocStateResidencyDataProvider; using aidl::android::hardware::power::stats::CpupmStateResidencyDataProvider; using aidl::android::hardware::power::stats::DevfreqStateResidencyDataProvider; +using aidl::android::hardware::power::stats::DisplayMrrStateResidencyDataProvider; using aidl::android::hardware::power::stats::DvfsStateResidencyDataProvider; using aidl::android::hardware::power::stats::UfsStateResidencyDataProvider; using aidl::android::hardware::power::stats::EnergyConsumerType; @@ -648,6 +650,11 @@ void addPixelStateResidencyDataProvider(std::shared_ptr p) { p->addStateResidencyDataProvider(std::move(pixelSdp)); } +void addDisplayMRR(std::shared_ptr p) { + p->addStateResidencyDataProvider(std::make_unique( + "Display", "/sys/class/drm/card0/device/primary-panel/")); +} + void addZumaCommonDataProviders(std::shared_ptr p) { setEnergyMeter(p); diff --git a/powerstats/include/ZumaCommonDataProviders.h b/powerstats/include/ZumaCommonDataProviders.h index 03976e75..5ca5481b 100644 --- a/powerstats/include/ZumaCommonDataProviders.h +++ b/powerstats/include/ZumaCommonDataProviders.h @@ -23,6 +23,7 @@ using aidl::android::hardware::power::stats::PowerStats; void addAoC(std::shared_ptr p); void addCPUclusters(std::shared_ptr p); void addDevfreq(std::shared_ptr p); +void addDisplayMRR(std::shared_ptr p); void addDvfsStats(std::shared_ptr p); void addGNSS(std::shared_ptr p); void addGPU(std::shared_ptr p); diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp index c0813d9e..7b037303 100644 --- a/usb/usb/Usb.cpp +++ b/usb/usb/Usb.cpp @@ -573,6 +573,11 @@ Usb::Usb() ALOGE("mDisplayPortActivateTimer timerfd failed: %s", strerror(errno)); abort(); } + + ALOGI("feature flag enable_usb_data_compliance_warning: %d", + usb_flags::enable_usb_data_compliance_warning()); + ALOGI("feature flag enable_input_power_limited_warning: %d", + usb_flags::enable_input_power_limited_warning()); } ScopedAStatus Usb::switchRole(const string& in_portName, const PortRole& in_role, @@ -1218,6 +1223,16 @@ static void uevent_event(uint32_t /*epevents*/, struct data *payload) { payload->usb->mPartnerUp = true; pthread_cond_signal(&payload->usb->mPartnerCV); pthread_mutex_unlock(&payload->usb->mPartnerLock); + } else if (std::regex_match(cp, std::regex("(remove)(.*)(-partner)"))) { + string drmDisconnectPath = string(kDisplayPortDrmPath) + "usbc_cable_disconnect"; + + if (payload->usb->mPartnerSupportsDisplayPort) { + ALOGI("displayport partner removed"); + if (!WriteStringToFile("1", drmDisconnectPath)) { + ALOGE("Failed to signal disconnect to drm"); + } + payload->usb->mPartnerSupportsDisplayPort = false; + } } else if (!strncmp(cp, "DEVTYPE=typec_", strlen("DEVTYPE=typec_")) || !strncmp(cp, "DRIVER=max77759tcpc", strlen("DRIVER=max77759tcpc")) || @@ -1384,6 +1399,8 @@ ScopedAStatus Usb::setCallback(const shared_ptr& in_callback) { return ScopedAStatus::ok(); } +/***** DisplayPort Alt Mode Helpers *****/ + Status Usb::getDisplayPortUsbPathHelper(string *path) { DIR *dp; Status result = Status::ERROR; @@ -1800,6 +1817,7 @@ void Usb::setupDisplayPortPoll() { int ret; ALOGI("usbdp: setup: beginning setup for displayport poll thread"); + mPartnerSupportsDisplayPort = true; /* * If thread is currently starting, then it hasn't setup DisplayPort fd's, and we can abandon diff --git a/usb/usb/Usb.h b/usb/usb/Usb.h index 4d9ab538..60064514 100644 --- a/usb/usb/Usb.h +++ b/usb/usb/Usb.h @@ -156,6 +156,11 @@ struct Usb : public BnUsb { * eventfd to monitor whether a connection results in DisplayPort Alt Mode activating. */ int mDisplayPortActivateTimer; + /* + * Indicates whether or not port partner supports DisplayPort, and is used to + * communicate to the drm when the port partner physically disconnects. + */ + bool mPartnerSupportsDisplayPort; private: pthread_t mPoll; diff --git a/usb/usb/UsbDataSessionMonitor.cpp b/usb/usb/UsbDataSessionMonitor.cpp index 77defb30..bff52f06 100644 --- a/usb/usb/UsbDataSessionMonitor.cpp +++ b/usb/usb/UsbDataSessionMonitor.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -48,6 +49,9 @@ namespace usb { #define UEVENT_MSG_LEN 2048 #define USB_STATE_MAX_LEN 20 #define DATA_ROLE_MAX_LEN 10 +#define WARNING_SURFACE_DELAY_SEC 5 +#define ENUM_FAIL_DEFAULT_COUNT_THRESHOLD 3 +#define DEVICE_FLAKY_CONNECTION_CONFIGURED_COUNT_THRESHOLD 5 constexpr char kUdcConfigfsPath[] = "/config/usb_gadget/g1/UDC"; constexpr char kNotAttachedState[] = "not attached\n"; @@ -115,6 +119,15 @@ UsbDataSessionMonitor::UsbDataSessionMonitor( if (addEpollFd(epollFd, ueventFd)) abort(); + unique_fd timerFd(timerfd_create(CLOCK_BOOTTIME, TFD_NONBLOCK)); + if (timerFd.get() == -1) { + ALOGE("create timerFd failed"); + abort(); + } + + if (addEpollFd(epollFd, timerFd)) + abort(); + if (addEpollFile(epollFd.get(), dataRolePath, mDataRoleFd) != 0) { ALOGE("monitor data role failed"); abort(); @@ -139,6 +152,7 @@ UsbDataSessionMonitor::UsbDataSessionMonitor( mEpollFd = std::move(epollFd); mUeventFd = std::move(ueventFd); + mTimerFd = std::move(timerFd); mUpdatePortStatusCb = updatePortStatusCb; if (ReadFileToString(kUdcConfigfsPath, &udc) && !udc.empty()) @@ -150,6 +164,9 @@ UsbDataSessionMonitor::UsbDataSessionMonitor( ALOGE("pthread creation failed %d", errno); abort(); } + + ALOGI("feature flag enable_report_usb_data_compliance_warning: %d", + usb_flags::enable_report_usb_data_compliance_warning()); } UsbDataSessionMonitor::~UsbDataSessionMonitor() {} @@ -223,13 +240,55 @@ void UsbDataSessionMonitor::notifyComplianceWarning() { void UsbDataSessionMonitor::evaluateComplianceWarning() { std::set newWarningSet; + int elapsedTimeSec; - // TODO: add heuristics and update newWarningSet - if (mDataRole == PortDataRole::DEVICE && mUdcBind) { - } else if (mDataRole == PortDataRole::HOST) { + elapsedTimeSec = + std::chrono::duration_cast(boot_clock::now() - mDataSessionStart) + .count(); + + if (elapsedTimeSec >= WARNING_SURFACE_DELAY_SEC) { + if (mDataRole == PortDataRole::DEVICE && mUdcBind) { + int configuredCount = std::count(mDeviceState.states.begin(), + mDeviceState.states.end(), kConfiguredState); + int defaultCount = + std::count(mDeviceState.states.begin(), mDeviceState.states.end(), kDefaultState); + + if (configuredCount == 0 && defaultCount > ENUM_FAIL_DEFAULT_COUNT_THRESHOLD) + newWarningSet.insert(ComplianceWarning::ENUMERATION_FAIL); + + if (configuredCount > DEVICE_FLAKY_CONNECTION_CONFIGURED_COUNT_THRESHOLD) + newWarningSet.insert(ComplianceWarning::FLAKY_CONNECTION); + } else if (mDataRole == PortDataRole::HOST) { + int host1StateCount = mHost1State.states.size(); + int host1ConfiguredCount = + std::count(mHost1State.states.begin(), mHost1State.states.end(), kConfiguredState); + int host1DefaultCount = + std::count(mHost1State.states.begin(), mHost1State.states.end(), kDefaultState); + int host2StateCount = mHost2State.states.size(); + int host2ConfiguredCount = + std::count(mHost2State.states.begin(), mHost2State.states.end(), kConfiguredState); + int host2DefaultCount = + std::count(mHost2State.states.begin(), mHost2State.states.end(), kDefaultState); + + if (host1ConfiguredCount == 0 && host2ConfiguredCount == 0 && + (host1DefaultCount > ENUM_FAIL_DEFAULT_COUNT_THRESHOLD || + host2DefaultCount > ENUM_FAIL_DEFAULT_COUNT_THRESHOLD)) + newWarningSet.insert(ComplianceWarning::ENUMERATION_FAIL); + + if (host1StateCount == 1 && mHost1State.states.front() == kNotAttachedState && + host2StateCount == 1 && mHost2State.states.front() == kNotAttachedState) + newWarningSet.insert(ComplianceWarning::MISSING_DATA_LINES); + } } if (newWarningSet != mWarningSet) { + std::string newWarningString; + + for (auto e : newWarningSet) { + newWarningString += toString(e) + " "; + } + ALOGI("Usb data compliance warning changed to: %s", newWarningString.c_str()); + mWarningSet = newWarningSet; notifyComplianceWarning(); } @@ -259,6 +318,26 @@ void UsbDataSessionMonitor::handleDeviceStateEvent(struct usbDeviceState *device evaluateComplianceWarning(); } +void UsbDataSessionMonitor::setupNewSession() { + mWarningSet.clear(); + mDataSessionStart = boot_clock::now(); + + if (mDataRole == PortDataRole::DEVICE) { + clearDeviceStateEvents(&mDeviceState); + } else if (mDataRole == PortDataRole::HOST) { + clearDeviceStateEvents(&mHost1State); + clearDeviceStateEvents(&mHost2State); + } + + if (mDataRole != PortDataRole::NONE) { + struct itimerspec delay = itimerspec(); + delay.it_value.tv_sec = WARNING_SURFACE_DELAY_SEC; + int ret = timerfd_settime(mTimerFd.get(), 0, &delay, NULL); + if (ret < 0) + ALOGE("timerfd_settime failed err:%d", errno); + } +} + void UsbDataSessionMonitor::handleDataRoleEvent() { int n; PortDataRole newDataRole; @@ -283,17 +362,8 @@ void UsbDataSessionMonitor::handleDataRoleEvent() { reportUsbDataSessionMetrics(); } - // Set up for the new data session - mWarningSet.clear(); mDataRole = newDataRole; - mDataSessionStart = boot_clock::now(); - - if (newDataRole == PortDataRole::DEVICE) { - clearDeviceStateEvents(&mDeviceState); - } else if (newDataRole == PortDataRole::HOST) { - clearDeviceStateEvents(&mHost1State); - clearDeviceStateEvents(&mHost2State); - } + setupNewSession(); } } @@ -328,8 +398,7 @@ void UsbDataSessionMonitor::updateUdcBindStatus(const std::string &devname) { } else if (!mUdcBind && newUdcBind) { // Gadget soft pullup: reset and start accounting for a new data session. - clearDeviceStateEvents(&mDeviceState); - mDataSessionStart = boot_clock::now(); + setupNewSession(); } } @@ -383,6 +452,23 @@ void UsbDataSessionMonitor::handleUevent() { } } +void UsbDataSessionMonitor::handleTimerEvent() { + int byteRead; + uint64_t numExpiration; + + byteRead = read(mTimerFd.get(), &numExpiration, sizeof(numExpiration)); + + if (byteRead != sizeof(numExpiration)) { + ALOGE("incorrect read size"); + } + + if (numExpiration != 1) { + ALOGE("incorrect expiration count"); + } + + evaluateComplianceWarning(); +} + void *UsbDataSessionMonitor::monitorThread(void *param) { UsbDataSessionMonitor *monitor = (UsbDataSessionMonitor *)param; struct epoll_event events[64]; @@ -400,6 +486,8 @@ void *UsbDataSessionMonitor::monitorThread(void *param) { for (int n = 0; n < nevents; ++n) { if (events[n].data.fd == monitor->mUeventFd.get()) { monitor->handleUevent(); + } else if (events[n].data.fd == monitor->mTimerFd.get()) { + monitor->handleTimerEvent(); } else if (events[n].data.fd == monitor->mDataRoleFd.get()) { monitor->handleDataRoleEvent(); } else if (events[n].data.fd == monitor->mDeviceState.fd.get()) { diff --git a/usb/usb/UsbDataSessionMonitor.h b/usb/usb/UsbDataSessionMonitor.h index 596f378f..aced8a48 100644 --- a/usb/usb/UsbDataSessionMonitor.h +++ b/usb/usb/UsbDataSessionMonitor.h @@ -75,9 +75,11 @@ class UsbDataSessionMonitor { static void *monitorThread(void *param); void handleUevent(); + void handleTimerEvent(); void handleDataRoleEvent(); void handleDeviceStateEvent(struct usbDeviceState *deviceState); void clearDeviceStateEvents(struct usbDeviceState *deviceState); + void setupNewSession(); void reportUsbDataSessionMetrics(); void evaluateComplianceWarning(); void notifyComplianceWarning(); @@ -86,6 +88,7 @@ class UsbDataSessionMonitor { pthread_t mMonitor; unique_fd mEpollFd; unique_fd mUeventFd; + unique_fd mTimerFd; unique_fd mDataRoleFd; struct usbDeviceState mDeviceState; struct usbDeviceState mHost1State; diff --git a/usb/usb/android.hardware.usb-service.rc b/usb/usb/android.hardware.usb-service.rc index 7619869a..9d10bb37 100644 --- a/usb/usb/android.hardware.usb-service.rc +++ b/usb/usb/android.hardware.usb-service.rc @@ -16,11 +16,13 @@ on post-fs chown root system /sys/devices/platform/10cb0000.hsi2c/i2c-11/11-0025/usb_limit_sink_enable chown root system /sys/devices/platform/10cb0000.hsi2c/i2c-11/11-0025/usb_limit_source_enable chown root system /sys/devices/platform/10cb0000.hsi2c/i2c-11/11-0025/update_sdp_enum_timeout + chown root graphics /sys/devices/platform/110f0000.drmdp/drm-displayport/dp_hotplug_error_code chown root system /sys/devices/platform/110f0000.drmdp/drm-displayport/hpd chown root system /sys/devices/platform/110f0000.drmdp/drm-displayport/irq_hpd chown root system /sys/devices/platform/110f0000.drmdp/drm-displayport/orientation chown root system /sys/devices/platform/110f0000.drmdp/drm-displayport/pin_assignment chown root system /sys/devices/platform/110f0000.drmdp/drm-displayport/link_status + chown root system /sys/devices/platform/110f0000.drmdp/drm-displayport/usbc_cable_disconnect chown root system /sys/devices/platform/11110000.usb/dwc3_exynos_otg_b_sess chown root system /sys/devices/platform/11110000.usb/dwc3_exynos_otg_id chown root system /sys/devices/platform/11110000.usb/usb_data_enabled @@ -39,9 +41,11 @@ on post-fs chmod 664 /sys/devices/platform/10cb0000.hsi2c/i2c-11/11-0025/usb_limit_sink_enable chmod 664 /sys/devices/platform/10cb0000.hsi2c/i2c-11/11-0025/usb_limit_source_enable chmod 664 /sys/devices/platform/10cb0000.hsi2c/i2c-11/11-0025/update_sdp_enum_timeout + chmod 664 /sys/devices/platform/110f0000.drmdp/drm-displayport/dp_hotplug_error_code chmod 664 /sys/devices/platform/110f0000.drmdp/drm-displayport/hpd chmod 664 /sys/devices/platform/110f0000.drmdp/drm-displayport/irq_hpd chmod 664 /sys/devices/platform/110f0000.drmdp/drm-displayport/orientation chmod 664 /sys/devices/platform/110f0000.drmdp/drm-displayport/pin_assignment chmod 664 /sys/devices/platform/110f0000.drmdp/drm-displayport/link_status + chmod 664 /sys/devices/platform/110f0000.drmdp/drm-displayport/usbc_cable_disconnect chmod 664 /sys/devices/platform/google,pogo/enable_usb