Merge Android 24Q2 Release (ab/11526283) to aosp-main-future

Bug: 337098550
Merged-In: I065f8e844d13d1d6d36c36ef689ff6c34b3e3fa6
Change-Id: I3e04f83e98e907febe6820c0a1f5abd18a3bd91a
This commit is contained in:
Xin Li 2024-05-06 12:09:15 -07:00
commit 64fedf02c7
27 changed files with 345 additions and 440 deletions

View file

@ -190,6 +190,7 @@ BOARD_PERSISTIMAGE_FILE_SYSTEM_TYPE := ext4
# Video Codec # Video Codec
######################## ########################
# 1. Exynos C2 # 1. Exynos C2
BOARD_USE_CODEC2_HIDL_1_2 := true
BOARD_USE_CSC_FILTER := false BOARD_USE_CSC_FILTER := false
BOARD_USE_DEC_SW_CSC := true BOARD_USE_DEC_SW_CSC := true
BOARD_USE_ENC_SW_CSC := true BOARD_USE_ENC_SW_CSC := true
@ -380,6 +381,9 @@ BOARD_BUILD_VENDOR_RAMDISK_IMAGE := true
KERNEL_MODULE_DIR := $(TARGET_KERNEL_DIR) KERNEL_MODULE_DIR := $(TARGET_KERNEL_DIR)
KERNEL_MODULES := $(wildcard $(KERNEL_MODULE_DIR)/*.ko) KERNEL_MODULES := $(wildcard $(KERNEL_MODULE_DIR)/*.ko)
ifneq ($(wildcard $(KERNEL_MODULE_DIR)/system_dlkm.modules.blocklist),)
BOARD_SYSTEM_KERNEL_MODULES_BLOCKLIST_FILE := $(KERNEL_MODULE_DIR)/system_dlkm.modules.blocklist
endif
BOARD_VENDOR_KERNEL_MODULES_BLOCKLIST_FILE := $(KERNEL_MODULE_DIR)/vendor_dlkm.modules.blocklist BOARD_VENDOR_KERNEL_MODULES_BLOCKLIST_FILE := $(KERNEL_MODULE_DIR)/vendor_dlkm.modules.blocklist
# Prebuilt kernel modules that are *not* listed in vendor_kernel_boot.modules.load # Prebuilt kernel modules that are *not* listed in vendor_kernel_boot.modules.load
@ -411,6 +415,9 @@ else
BOARD_VENDOR_KERNEL_MODULES := $(KERNEL_MODULES) BOARD_VENDOR_KERNEL_MODULES := $(KERNEL_MODULES)
endif endif
BOARD_SYSTEM_KERNEL_MODULES_LOAD := $(strip $(shell cat $(KERNEL_MODULE_DIR)/system_dlkm.modules.load))
BOARD_SYSTEM_KERNEL_MODULES := $(addprefix $(KERNEL_MODULE_DIR)/, $(notdir $(BOARD_SYSTEM_KERNEL_MODULES_LOAD)))
# Using BUILD_COPY_HEADERS # Using BUILD_COPY_HEADERS
BUILD_BROKEN_USES_BUILD_COPY_HEADERS := true BUILD_BROKEN_USES_BUILD_COPY_HEADERS := true

View file

@ -20,12 +20,8 @@ on init
write /proc/vendor_sched/teo_util_threshold "1024 1024 1024" write /proc/vendor_sched/teo_util_threshold "1024 1024 1024"
# Boot time fs tuning # Boot time fs tuning
write /sys/block/sda/queue/iostats 0
write /sys/block/sda/queue/scheduler bfq write /sys/block/sda/queue/scheduler bfq
write /sys/block/sda/queue/iosched/slice_idle 0 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/bg/set_task_group
chown system system /proc/vendor_sched/groups/cam/set_task_group chown system system /proc/vendor_sched/groups/cam/set_task_group
@ -105,15 +101,6 @@ on init
chmod 0220 /proc/vendor_sched/pmu_poll_enable chmod 0220 /proc/vendor_sched/pmu_poll_enable
chmod 0220 /proc/vendor_sched/pmu_poll_time 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 start vendor.keymaster-4-0
# ZRAM setup # ZRAM setup
@ -238,12 +225,7 @@ on init
chown system system /dev/maxfg_history chown system system /dev/maxfg_history
# Dump eeprom # Dump eeprom
chown system system /sys/devices/platform/10970000.hsi2c/i2c-5/5-0050/eeprom chown system system /sys/devices/platform/10da0000.hsi2c/i2c-15/15-0050/eeprom
chown system system /sys/devices/platform/10970000.hsi2c/i2c-4/4-0050/eeprom
chown system system /sys/devices/platform/10da0000.hsi2c/i2c-5/5-0050/eeprom
chown system system /sys/devices/platform/10da0000.hsi2c/i2c-6/6-0050/eeprom
chown system system /sys/devices/platform/10da0000.hsi2c/i2c-7/7-0050/eeprom
chown system system /sys/devices/platform/10da0000.hsi2c/i2c-9/9-0050/eeprom
# Loading common kernel modules in background # Loading common kernel modules in background
start init_display start init_display
@ -288,6 +270,7 @@ on init
# BatteryHealthData # BatteryHealthData
chown system system /sys/class/power_supply/battery/first_usage_date chown system system /sys/class/power_supply/battery/first_usage_date
chown system system /sys/devices/platform/google,battery/power_supply/battery/swelling_data
# Battery Defender # Battery Defender
chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_cnt chown system system /sys/devices/platform/google,battery/power_supply/battery/bd_trickle_cnt
@ -310,6 +293,7 @@ on init
chown system system /sys/devices/platform/google,charger/bd_trigger_time 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_trigger_voltage
chown system system /sys/devices/platform/google,charger/bd_clear 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_start_level
chown system system /sys/devices/platform/google,charger/charge_stop_level chown system system /sys/devices/platform/google,charger/charge_stop_level
chown system system /sys/devices/platform/google,cpm/dc_ctl chown system system /sys/devices/platform/google,cpm/dc_ctl
@ -461,15 +445,6 @@ on early-boot
# Wait for insmod_sh to finish all common modules # Wait for insmod_sh to finish all common modules
wait_for_prop vendor.common.modules.ready 1 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
# PCIe link stats for pixelstats # PCIe link stats for pixelstats
chown system system /sys/devices/platform/11920000.pcie/link_stats/complete_timeout_irqs chown system system /sys/devices/platform/11920000.pcie/link_stats/complete_timeout_irqs
chown system system /sys/devices/platform/11920000.pcie/link_stats/link_down_irqs chown system system /sys/devices/platform/11920000.pcie/link_stats/link_down_irqs
@ -507,6 +482,7 @@ on early-boot
chown system system /dev/logbuffer_cpm chown system system /dev/logbuffer_cpm
chown system system /dev/logbuffer_bd chown system system /dev/logbuffer_bd
chown system system /dev/logbuffer_dual_batt chown system system /dev/logbuffer_dual_batt
chown system system /dev/logbuffer_cpif
on boot on boot
@ -590,6 +566,7 @@ on fs
chown system system /sys/class/backlight/panel0-backlight/dimming_on 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/hbm_mode
chown system system /sys/class/backlight/panel0-backlight/local_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/gamma
chown system system /sys/devices/platform/exynos-drm/primary-panel/min_vrefresh 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 chown system system /sys/devices/platform/exynos-drm/primary-panel/idle_delay_ms
@ -687,21 +664,6 @@ on property:init.svc.vendor.charger=running
write /sys/devices/system/cpu/cpu7/online 0 write /sys/devices/system/cpu/cpu7/online 0
on property:sys.boot_completed=1 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
# Enable ZRAM on boot_complete # Enable ZRAM on boot_complete
swapon_all /vendor/etc/fstab.${ro.board.platform} swapon_all /vendor/etc/fstab.${ro.board.platform}
write /proc/sys/vm/swappiness 60 write /proc/sys/vm/swappiness 60
@ -713,9 +675,6 @@ on property:sys.boot_completed=1
write /proc/sys/vm/dirty_expire_centisecs 3000 write /proc/sys/vm/dirty_expire_centisecs 3000
write /proc/sys/vm/dirty_background_ratio 10 write /proc/sys/vm/dirty_background_ratio 10
# Enable UFS powersaving
write /dev/sys/block/bootdevice/clkgate_enable 1
# Reset DDR frequency # Reset DDR frequency
write /sys/devices/platform/17000010.devfreq_mif/devfreq/17000010.devfreq_mif/exynos_data/cancel_boot_freq 1 write /sys/devices/platform/17000010.devfreq_mif/devfreq/17000010.devfreq_mif/exynos_data/cancel_boot_freq 1
write /sys/devices/platform/17000020.devfreq_int/devfreq/17000020.devfreq_int/exynos_data/cancel_boot_freq 1 write /sys/devices/platform/17000020.devfreq_int/devfreq/17000020.devfreq_int/exynos_data/cancel_boot_freq 1
@ -769,11 +728,11 @@ on property:sys.boot_completed=1
write /proc/vendor_sched/pmu_poll_enable 0 write /proc/vendor_sched/pmu_poll_enable 0
# Make devices on the critical path for suspend/resume asynchronous # Make devices on the critical path for suspend/resume asynchronous
write /sys/devices/platform/acpm_mfd_bus@18110000/i2c-8/i2c-s2mpg13mfd/power/async "enabled" write /sys/devices/platform/acpm_mfd_bus@18110000/i2c-21/21-002f/power/async "enabled"
write /sys/devices/platform/acpm_mfd_bus@18110000/i2c-8/power/async "enabled" write /sys/devices/platform/acpm_mfd_bus@18110000/i2c-21/power/async "enabled"
write /sys/devices/platform/acpm_mfd_bus@18110000/power/async "enabled" write /sys/devices/platform/acpm_mfd_bus@18110000/power/async "enabled"
write /sys/devices/platform/acpm_mfd_bus@18100000/i2c-7/i2c-s2mpg12mfd/power/async "enabled" write /sys/devices/platform/acpm_mfd_bus@18100000/i2c-20/20-001f/power/async "enabled"
write /sys/devices/platform/acpm_mfd_bus@18100000/i2c-7/power/async "enabled" write /sys/devices/platform/acpm_mfd_bus@18100000/i2c-20/power/async "enabled"
write /sys/devices/platform/acpm_mfd_bus@18100000/power/async "enabled" write /sys/devices/platform/acpm_mfd_bus@18100000/power/async "enabled"
write /sys/devices/platform/dbgdev-pd-hsi0/power/async "enabled" write /sys/devices/platform/dbgdev-pd-hsi0/power/async "enabled"
write /sys/devices/platform/fixedregulator@0/regulator/regulator.2/power/async "enabled" write /sys/devices/platform/fixedregulator@0/regulator/regulator.2/power/async "enabled"
@ -924,6 +883,7 @@ on post-fs-data
chown bluetooth system /proc/bluetooth/sleep/btwake chown bluetooth system /proc/bluetooth/sleep/btwake
chown bluetooth system /proc/bluetooth/sleep/lpm chown bluetooth system /proc/bluetooth/sleep/lpm
chown bluetooth system /proc/bluetooth/sleep/btwrite chown bluetooth system /proc/bluetooth/sleep/btwrite
mkdir /data/vendor/bluetooth 0770 bluetooth system
on post-fs-data on post-fs-data
mkdir /data/vendor/powerstats 0771 system system mkdir /data/vendor/powerstats 0771 system system
@ -937,9 +897,9 @@ on property:vendor.brownout.mitigation.ready=1
write /sys/devices/virtual/pmic/mitigation/clock_ratio/tpu_light_clk_ratio 0x80041c3 #DFS write /sys/devices/virtual/pmic/mitigation/clock_ratio/tpu_light_clk_ratio 0x80041c3 #DFS
write /sys/devices/virtual/pmic/mitigation/clock_ratio/cpu1_heavy_clk_ratio 0xfff041c0 #DFS write /sys/devices/virtual/pmic/mitigation/clock_ratio/cpu1_heavy_clk_ratio 0xfff041c0 #DFS
write /sys/devices/virtual/pmic/mitigation/clock_ratio/cpu2_heavy_clk_ratio 0xfff041c0 #DFS write /sys/devices/virtual/pmic/mitigation/clock_ratio/cpu2_heavy_clk_ratio 0xfff041c0 #DFS
write /sys/devices/virtual/pmic/mitigation/clock_ratio/gpu_light_clk_ratio 0x80041c3 #DFS write /sys/devices/virtual/pmic/mitigation/clock_ratio/gpu_light_clk_ratio 0xfff041c1 #DFS
write /sys/devices/virtual/pmic/mitigation/clock_ratio/cpu2_light_clk_ratio 0xfff041c3 #OCP write /sys/devices/virtual/pmic/mitigation/clock_ratio/cpu2_light_clk_ratio 0xfff041c3 #OCP
write /sys/devices/virtual/pmic/mitigation/clock_ratio/gpu_heavy_clk_ratio 0xfff04381 #OCP write /sys/devices/virtual/pmic/mitigation/clock_ratio/gpu_heavy_clk_ratio 0xfff04385 #OCP
write /sys/devices/virtual/pmic/mitigation/clock_ratio/tpu_heavy_clk_ratio 0xfff041c1 #OCP write /sys/devices/virtual/pmic/mitigation/clock_ratio/tpu_heavy_clk_ratio 0xfff041c1 #OCP
write /sys/devices/virtual/pmic/mitigation/triggered_lvl/uvlo1_lvl 3200 write /sys/devices/virtual/pmic/mitigation/triggered_lvl/uvlo1_lvl 3200
write /sys/devices/virtual/pmic/mitigation/triggered_lvl/smpl_lvl 3100 write /sys/devices/virtual/pmic/mitigation/triggered_lvl/smpl_lvl 3100
@ -1025,16 +985,6 @@ on charger
mkdir /dev/thermal/cdev-by-name 0750 system system mkdir /dev/thermal/cdev-by-name 0750 system system
start vendor.thermal.symlinks 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 # Cancel boot devfreq and uclamp
write /sys/devices/platform/17000010.devfreq_mif/devfreq/17000010.devfreq_mif/exynos_data/cancel_boot_freq 1 write /sys/devices/platform/17000010.devfreq_mif/devfreq/17000010.devfreq_mif/exynos_data/cancel_boot_freq 1
write /sys/devices/platform/17000020.devfreq_int/devfreq/17000020.devfreq_int/exynos_data/cancel_boot_freq 1 write /sys/devices/platform/17000020.devfreq_int/devfreq/17000020.devfreq_int/exynos_data/cancel_boot_freq 1
@ -1075,10 +1025,7 @@ on property:persist.vendor.softmaxfreq.cl1=*
on property:persist.vendor.softmaxfreq.cl2=* on property:persist.vendor.softmaxfreq.cl2=*
write /sys/devices/platform/exynos-acme/freq_qos_max "6 ${persist.vendor.softmaxfreq.cl2}" write /sys/devices/platform/exynos-acme/freq_qos_max "6 ${persist.vendor.softmaxfreq.cl2}"
# UFS
on property:ro.boot.mode=charger && property:init.svc.vendor.charger=running 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
# Disable dock-defend in Off Mode Charger # Disable dock-defend in Off Mode Charger
write /sys/devices/platform/google,charger/dd_state -1 write /sys/devices/platform/google,charger/dd_state -1

View file

@ -55,7 +55,6 @@
/dev/video55 0666 system graphics /dev/video55 0666 system graphics
/dev/g2d 0660 system graphics /dev/g2d 0660 system graphics
/dev/fimg2d 0666 system graphics /dev/fimg2d 0666 system graphics
/dev/i2c-2 0660 system system
/dev/HPD 0660 system system /dev/HPD 0660 system system
# wfd # wfd

View file

@ -45,6 +45,8 @@
package="com.google.android.apps.camera.services"> package="com.google.android.apps.camera.services">
<!-- Camera --> <!-- Camera -->
<permission name="android.permission.CAMERA" fixed="false"/> <permission name="android.permission.CAMERA" fixed="false"/>
<!-- Camera Connectivity -->
<permission name="android.permission.ACCESS_FINE_LOCATION" fixed="false"/>
<permission name="android.permission.POST_NOTIFICATIONS" fixed="false"/> <permission name="android.permission.POST_NOTIFICATIONS" fixed="false"/>
<permission name="android.permission.BLUETOOTH_CONNECT" fixed="false"/> <permission name="android.permission.BLUETOOTH_CONNECT" fixed="false"/>
<permission name="android.permission.BLUETOOTH_SCAN" fixed="false"/> <permission name="android.permission.BLUETOOTH_SCAN" fixed="false"/>

View file

@ -37,6 +37,10 @@ include device/google/gs-common/sota_app/factoryota.mk
include device/google/gs-common/misc_writer/misc_writer.mk include device/google/gs-common/misc_writer/misc_writer.mk
include device/google/gs-common/gyotaku_app/gyotaku.mk include device/google/gs-common/gyotaku_app/gyotaku.mk
include device/google/gs-common/bootctrl/bootctrl_aidl.mk include device/google/gs-common/bootctrl/bootctrl_aidl.mk
include device/google/gs-common/betterbug/betterbug.mk
ifneq ($(filter cheetah felix panther, $(TARGET_PRODUCT)),)
include device/google/gs-common/bcmbt/dump/dumplog.mk
endif
TARGET_BOARD_PLATFORM := gs201 TARGET_BOARD_PLATFORM := gs201
@ -68,7 +72,7 @@ PRODUCT_SOONG_NAMESPACES += \
hardware/google/pixel \ hardware/google/pixel \
device/google/gs201 \ device/google/gs201 \
device/google/gs201/powerstats \ device/google/gs201/powerstats \
system/chre/host/hal_generic \ vendor/google_devices/common/chre/host/hal \
vendor/google/whitechapel/tools \ vendor/google/whitechapel/tools \
vendor/google/interfaces \ vendor/google/interfaces \
vendor/google_devices/common/proprietary/confirmatioui_hal \ vendor/google_devices/common/proprietary/confirmatioui_hal \
@ -281,8 +285,7 @@ PRODUCT_VENDOR_PROPERTIES += \
PRODUCT_VENDOR_PROPERTIES += \ PRODUCT_VENDOR_PROPERTIES += \
ro.opengles.version=196610 \ ro.opengles.version=196610 \
graphics.gpu.profiler.support=true \ graphics.gpu.profiler.support=true
debug.renderengine.backend=skiaglthreaded
# b/295257834 Add HDR shaders to SurfaceFlinger's pre-warming cache # b/295257834 Add HDR shaders to SurfaceFlinger's pre-warming cache
PRODUCT_VENDOR_PROPERTIES += ro.surface_flinger.prime_shader_cache.ultrahdr=1 PRODUCT_VENDOR_PROPERTIES += ro.surface_flinger.prime_shader_cache.ultrahdr=1
@ -367,25 +370,21 @@ PRODUCT_HOST_PACKAGES += \
PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \
messaging messaging
# Contexthub HAL # CHRE
PRODUCT_PACKAGES += \ ## tools
android.hardware.contexthub-service.generic
# CHRE tools
ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \
chre_power_test_client \ chre_power_test_client \
chre_test_client chre_test_client \
chre_aidl_hal_client
endif endif
## HAL
include device/google/gs-common/chre/hal.mk
PRODUCT_COPY_FILES += \ PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.context_hub.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.context_hub.xml 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_DEDICATED_TRANSPORT_CHANNEL_ENABLED := true CHRE_DEDICATED_TRANSPORT_CHANNEL_ENABLED := true
PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \
chre \
preloaded_nanoapps.json preloaded_nanoapps.json
# Filesystem management tools # Filesystem management tools
@ -518,7 +517,7 @@ PRODUCT_PACKAGES += \
PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \
android.hardware.graphics.mapper@4.0-impl \ android.hardware.graphics.mapper@4.0-impl \
android.hardware.graphics.allocator-V2-service android.hardware.graphics.allocator-V1-service
PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \
android.hardware.memtrack-service.pixel \ android.hardware.memtrack-service.pixel \
@ -704,10 +703,8 @@ 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.protected_contents=true
PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.display_update_imminent_timeout_ms=50 PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.display_update_imminent_timeout_ms=50
# force to blend in P3 mode
PRODUCT_PROPERTY_OVERRIDES += \ PRODUCT_PROPERTY_OVERRIDES += \
persist.sys.sf.native_mode=2 \ persist.sys.sf.native_mode=2
persist.sys.sf.color_mode=9
PRODUCT_COPY_FILES += \ PRODUCT_COPY_FILES += \
device/google/gs201/display/display_colordata_cal0.pb:$(TARGET_COPY_OUT_VENDOR)/etc/display_colordata_cal0.pb device/google/gs201/display/display_colordata_cal0.pb:$(TARGET_COPY_OUT_VENDOR)/etc/display_colordata_cal0.pb
@ -750,30 +747,14 @@ endif
$(call soong_config_set,bigo,soc,gs201) $(call soong_config_set,bigo,soc,gs201)
# 1. Codec 2.0 # 1. Codec 2.0
# exynos service # for settings used by different C2 hal
PRODUCT_SOONG_NAMESPACES += vendor/samsung_slsi/codec2 include device/google/gs-common/mediacodec/common/mediacodec_common.mk
# for Exynos C2 Hal
include device/google/gs-common/mediacodec/samsung/mediacodec_samsung.mk
PRODUCT_COPY_FILES += \ PRODUCT_COPY_FILES += \
device/google/gs201/media_codecs_performance_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance_c2.xml \ device/google/gs201/media_codecs_performance_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance_c2.xml \
PRODUCT_PACKAGES += \
samsung.hardware.media.c2@1.0-service \
codec2.vendor.base.policy \
codec2.vendor.ext.policy \
libExynosC2ComponentStore \
libExynosC2H264Dec \
libExynosC2H264Enc \
libExynosC2HevcDec \
libExynosC2HevcEnc \
libExynosC2Mpeg4Dec \
libExynosC2Mpeg4Enc \
libExynosC2H263Dec \
libExynosC2H263Enc \
libExynosC2Vp8Dec \
libExynosC2Vp8Enc \
libExynosC2Vp9Dec \
libExynosC2Vp9Enc
PRODUCT_PROPERTY_OVERRIDES += \ PRODUCT_PROPERTY_OVERRIDES += \
debug.stagefright.c2-poolmask=458752 \ debug.stagefright.c2-poolmask=458752 \
debug.c2.use_dmabufheaps=1 \ debug.c2.use_dmabufheaps=1 \
@ -1082,6 +1063,14 @@ PRODUCT_PROPERTY_OVERRIDES += persist.vendor.enable.thermal.genl=true
include device/google/gs-common/edgetpu/edgetpu.mk include device/google/gs-common/edgetpu/edgetpu.mk
# Config variables for TPU chip on device. # Config variables for TPU chip on device.
$(call soong_config_set,edgetpu_config,chip,janeiro) $(call soong_config_set,edgetpu_config,chip,janeiro)
# Include the edgetpu targets defined the namespaces below into the final image.
PRODUCT_SOONG_NAMESPACES += \
vendor/google_devices/gs201/proprietary/gchips/tpu/metrics \
vendor/google_devices/gs201/proprietary/gchips/tpu/tflite_delegate \
vendor/google_devices/gs201/proprietary/gchips/tpu/darwinn_logging_service \
vendor/google_devices/gs201/proprietary/gchips/tpu/nnapi_stable_aidl \
vendor/google_devices/gs201/proprietary/gchips/tpu/aidl \
vendor/google_devices/gs201/proprietary/gchips/tpu/hal
# TPU firmware # TPU firmware
PRODUCT_PACKAGES += edgetpu-janeiro.fw PRODUCT_PACKAGES += edgetpu-janeiro.fw
@ -1168,3 +1157,6 @@ include hardware/google/pixel/HardwareInfo/HardwareInfo.mk
# UFS: the script is used to select the corresponding firmware to run FFU. # UFS: the script is used to select the corresponding firmware to run FFU.
PRODUCT_PACKAGES += ufs_firmware_update.sh PRODUCT_PACKAGES += ufs_firmware_update.sh
# Touch service
include device/google/gs-common/touch/twoshay/aidl_gs101.mk

View file

@ -84,14 +84,6 @@
<instance>default</instance> <instance>default</instance>
</interface> </interface>
</hal> </hal>
<hal format="aidl" optional="true">
<name>com.google.input</name>
<version>2</version>
<interface>
<name>ITouchContextService</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl" optional="true"> <hal format="aidl" optional="true">
<name>hardware.qorvo.uwb</name> <name>hardware.qorvo.uwb</name>
<version>2</version> <version>2</version>
@ -142,13 +134,6 @@
<instance>sced0</instance> <instance>sced0</instance>
</interface> </interface>
</hal> </hal>
<hal format="aidl" optional="true">
<name>com.google.pixel.modem.logmasklibrary</name>
<interface>
<name>ILiboemserviceProxy</name>
<instance>default</instance>
</interface>
</hal>
<hal format="hidl" optional="true"> <hal format="hidl" optional="true">
<name>vendor.samsung_slsi.telephony.hardware.radioExternal</name> <name>vendor.samsung_slsi.telephony.hardware.radioExternal</name>
<version>1.1</version> <version>1.1</version>

View file

@ -1,7 +1,6 @@
#!/vendor/bin/sh #!/vendor/bin/sh
for f in /sys/devices/platform/10d60000.hsi2c/i2c-*/i2c-max77759tcpc; do max77759tcpc_path=/sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025
if [ -d $f ]; then if [ -d $max77759tcpc_path ]; then
echo 0 > $f/contaminant_detection; echo 0 > $max77759tcpc_path/contaminant_detection;
fi fi
done

View file

@ -37,7 +37,7 @@ else
fi fi
echo "\n------ Power supply property tcpm ------" echo "\n------ Power supply property tcpm ------"
cat "/sys/class/power_supply/tcpm-source-psy-8-0025/uevent" cat /sys/class/power_supply/tcpm-source-psy-*/uevent
echo "\n------ Power supply property usb ------" echo "\n------ Power supply property usb ------"
cat "/sys/class/power_supply/usb/uevent" cat "/sys/class/power_supply/usb/uevent"
echo "\n------ Power supply property wireless ------" echo "\n------ Power supply property wireless ------"
@ -100,23 +100,21 @@ then
fi fi
echo "\n------ TCPC ------" echo "\n------ TCPC ------"
for f in /sys/devices/platform/10d60000.hsi2c/i2c-*/i2c-max77759tcpc max77759tcpc_path="/sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025"
do
echo "registers:" echo "registers:"
cat $f/registers cat $max77759tcpc_path/registers
echo "frs:" echo "frs:"
cat $f/frs cat $max77759tcpc_path/frs
echo "auto_discharge:" echo "auto_discharge:"
cat $f/auto_discharge cat $max77759tcpc_path/auto_discharge
echo "bc12_enabled:" echo "bc12_enabled:"
cat $f/bc12_enabled cat $max77759tcpc_path/bc12_enabled
echo "cc_toggle_enable:" echo "cc_toggle_enable:"
cat $f/cc_toggle_enable cat $max77759tcpc_path/cc_toggle_enable
echo "contaminant_detection:" echo "contaminant_detection:"
cat $f/contaminant_detection cat $max77759tcpc_path/contaminant_detection
echo "contaminant_detection_status:" echo "contaminant_detection_status:"
cat $f/contaminant_detection_status cat $max77759tcpc_path/contaminant_detection_status
done
echo "\n------ PD Engine ------" echo "\n------ PD Engine ------"
cat "/dev/logbuffer_usbpd" cat "/dev/logbuffer_usbpd"
@ -129,6 +127,8 @@ cat "/dev/logbuffer_pca9468"
echo "\n------ Battery Health ------" echo "\n------ Battery Health ------"
cat "/sys/class/power_supply/battery/health_index_stats" cat "/sys/class/power_supply/battery/health_index_stats"
echo "\n------ Battery Health SoC Residency ------"
cat "/sys/class/power_supply/battery/swelling_data"
echo "\n------ BMS ------" echo "\n------ BMS ------"
cat "/dev/logbuffer_ssoc" cat "/dev/logbuffer_ssoc"
echo "\n------ TTF ------" echo "\n------ TTF ------"
@ -165,14 +165,15 @@ do
echo "$f: `cat $f`" echo "$f: `cat $f`"
done done
if [ $build_type = "userdebug" ]
then
echo "\n------ DC_registers dump ------" echo "\n------ DC_registers dump ------"
cat "/sys/class/power_supply/pca94xx-mains/device/registers_dump" cat "/sys/class/power_supply/pca94xx-mains/device/registers_dump"
echo "\n------ max77759_chg registers dump ------" echo "\n------ max77759_chg registers dump ------"
cat "/d/max77759_chg/registers" cat "/sys/class/power_supply/main-charger/device/registers_dump"
echo "\n------ max77729_pmic registers dump ------" echo "\n------ max77729_pmic registers dump ------"
cat "/d/max77729_pmic/registers" cat /sys/devices/platform/*.hsi2c/i2c-*/*-0066/registers_dump
if [ $build_type = "userdebug" ]
then
echo "\n------ Charging table dump ------" echo "\n------ Charging table dump ------"
cat "/d/google_battery/chg_raw_profile" cat "/d/google_battery/chg_raw_profile"
@ -218,34 +219,9 @@ then
fi fi
echo "\n------ Battery EEPROM ------" echo "\n------ Battery EEPROM ------"
if [ -e "/sys/devices/platform/10970000.hsi2c/i2c-4/4-0050/eeprom" ] if [ -e "/sys/devices/platform/10da0000.hsi2c/i2c-15/15-0050/eeprom" ]
then then
xxd /sys/devices/platform/10970000.hsi2c/i2c-4/4-0050/eeprom xxd /sys/devices/platform/10da0000.hsi2c/i2c-15/15-0050/eeprom
fi
if [ -e "/sys/devices/platform/10970000.hsi2c/i2c-5/5-0050/eeprom" ]
then
xxd /sys/devices/platform/10970000.hsi2c/i2c-5/5-0050/eeprom
fi
if [ -e "/sys/devices/platform/10da0000.hsi2c/i2c-5/5-0050/eeprom" ]
then
xxd /sys/devices/platform/10da0000.hsi2c/i2c-5/5-0050/eeprom
fi
if [ -e "/sys/devices/platform/10da0000.hsi2c/i2c-6/6-0050/eeprom" ]
then
xxd /sys/devices/platform/10da0000.hsi2c/i2c-6/6-0050/eeprom
fi
if [ -e "/sys/devices/platform/10da0000.hsi2c/i2c-7/7-0050/eeprom" ]
then
xxd /sys/devices/platform/10da0000.hsi2c/i2c-7/7-0050/eeprom
fi
if [ -e "/sys/devices/platform/10da0000.hsi2c/i2c-9/9-0050/eeprom" ]
then
xxd /sys/devices/platform/10da0000.hsi2c/i2c-9/9-0050/eeprom
fi fi
echo "\n------ Charger Stats ------" echo "\n------ Charger Stats ------"

View file

@ -159,3 +159,17 @@ Op9P1ZW2kjqv5D2+q/qtaePAyHn3B05UZrQYUmx7LaHNO7op6dZgCdoR0sVsR+Fc
Zyr0AhgiuTWrjtUEOGx2qJVwAsHkpqtlN+DaGT08dT64LvIf0bfGvmtm++/WEDWJ Zyr0AhgiuTWrjtUEOGx2qJVwAsHkpqtlN+DaGT08dT64LvIf0bfGvmtm++/WEDWJ
HInwg85pGm+sEkYbYFRBD0woPBsL3g== HInwg85pGm+sEkYbYFRBD0woPBsL3g==
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQsw
CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURp
Z2lDZXJ0IFRMUyBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2
MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ
bmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNTB2MBAG
ByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1TzvdlHJS
7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp
0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICIS
B4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49
BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQ
LgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4
DXZDjC5Ty3zfDBeWUA==
-----END CERTIFICATE-----

View file

@ -86,14 +86,6 @@
<transport>hwbinder</transport> <transport>hwbinder</transport>
<fqname>@1.3::IDevice/google-edgetpu</fqname> <fqname>@1.3::IDevice/google-edgetpu</fqname>
</hal> </hal>
<hal format="aidl">
<name>com.google.input</name>
<version>2</version>
<interface>
<name>ITouchContextService</name>
<instance>default</instance>
</interface>
</hal>
<hal format="aidl"> <hal format="aidl">
<name>vendor.google.google_battery</name> <name>vendor.google.google_battery</name>
<version>2-3</version> <version>2-3</version>

View file

@ -12,12 +12,4 @@
<name>android.hardware.boot</name> <name>android.hardware.boot</name>
<fqname>IBootControl/default</fqname> <fqname>IBootControl/default</fqname>
</hal> </hal>
<hal format="aidl">
<name>com.google.input</name>
<version>2</version>
<interface>
<name>ITouchContextService</name>
<instance>default</instance>
</interface>
</hal>
</manifest> </manifest>

View file

@ -5,8 +5,16 @@
<version>1.0</version> <version>1.0</version>
<interface> <interface>
<name>IComponentStore</name> <name>IComponentStore</name>
<instance>default</instance>
<instance>default1</instance> <instance>default1</instance>
</interface> </interface>
</hal> </hal>
<hal format="hidl">
<name>android.hardware.media.c2</name>
<transport>hwbinder</transport>
<version>1.2</version>
<interface>
<name>IComponentStore</name>
<instance>default</instance>
</interface>
</hal>
</manifest> </manifest>

View file

@ -2,7 +2,7 @@
<hal format="hidl"> <hal format="hidl">
<name>android.hardware.media.c2</name> <name>android.hardware.media.c2</name>
<transport>hwbinder</transport> <transport>hwbinder</transport>
<version>1.0</version> <version>1.2</version>
<interface> <interface>
<name>IComponentStore</name> <name>IComponentStore</name>
<instance>default</instance> <instance>default</instance>

View file

@ -174,10 +174,10 @@
<Limit name="measured-frame-rate-1280x720" range="65-71" /> <Limit name="measured-frame-rate-1280x720" range="65-71" />
</MediaCodec> </MediaCodec>
<MediaCodec name="c2.android.av1-dav1d.decoder" type="video/av01" update="true"> <MediaCodec name="c2.android.av1-dav1d.decoder" type="video/av01" update="true">
<Limit name="measured-frame-rate-352x288" range="358-383" /> <Limit name="measured-frame-rate-352x288" range="848-1033" />
<Limit name="measured-frame-rate-640x360" range="207-221" /> <Limit name="measured-frame-rate-640x360" range="450-685" />
<Limit name="measured-frame-rate-720x480" range="106-148" /> <Limit name="measured-frame-rate-720x480" range="406-484" />
<Limit name="measured-frame-rate-1280x720" range="65-71" /> <Limit name="measured-frame-rate-1280x720" range="148-187" />
</MediaCodec> </MediaCodec>
</Decoders> </Decoders>

View file

@ -309,6 +309,7 @@
<item>com.zhiliaoapp.musically:0.07</item> <item>com.zhiliaoapp.musically:0.07</item>
<item>com.bilibili.app.in:0.07</item> <item>com.bilibili.app.in:0.07</item>
<item>com.twitter.android:0.07</item> <item>com.twitter.android:0.07</item>
<item>com.google.android.youtube:0.07</item>
</string-array> </string-array>
<!-- Pre-scale volume at volume step 1 for Absolute Volume --> <!-- Pre-scale volume at volume step 1 for Absolute Volume -->

View file

@ -1,4 +1,6 @@
on property:sys.boot_completed=1 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 start vendor.pixelstats_vendor
on post-fs-data on post-fs-data
chown system system /sys/kernel/metrics/irq/stats_reset chown system system /sys/kernel/metrics/irq/stats_reset

View file

@ -88,13 +88,26 @@ const struct SysfsCollector::SysfsPaths sysfs_paths = {
.IRQStatsResetPath = "/sys/kernel/metrics/irq/stats_reset", .IRQStatsResetPath = "/sys/kernel/metrics/irq/stats_reset",
.ModemPcieLinkStatsPath = "/sys/devices/platform/11920000.pcie/link_stats", .ModemPcieLinkStatsPath = "/sys/devices/platform/11920000.pcie/link_stats",
.WifiPcieLinkStatsPath = "/sys/devices/platform/14520000.pcie/link_stats", .WifiPcieLinkStatsPath = "/sys/devices/platform/14520000.pcie/link_stats",
.GMSRPath = "/sys/class/power_supply/maxfg/gmsr", .GMSRPath = {
"/sys/class/power_supply/maxfg/gmsr",
"/sys/class/power_supply/maxfg_base/gmsr",
},
.TotalCallCountPath = "/sys/devices/platform/audiometrics/call_count" .TotalCallCountPath = "/sys/devices/platform/audiometrics/call_count"
}; };
const struct UeventListener::UeventPaths ueventPaths = { const struct UeventListener::UeventPaths ueventPaths = {
.AudioUevent = "/devices/virtual/amcs/amcs", .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() { int main() {
LOG(INFO) << "starting PixelStats"; LOG(INFO) << "starting PixelStats";

View file

@ -19,6 +19,7 @@
#include <AdaptiveDvfsStateResidencyDataProvider.h> #include <AdaptiveDvfsStateResidencyDataProvider.h>
#include <AocTimedStateResidencyDataProvider.h> #include <AocTimedStateResidencyDataProvider.h>
#include <DevfreqStateResidencyDataProvider.h> #include <DevfreqStateResidencyDataProvider.h>
#include <DisplayMrrStateResidencyDataProvider.h>
#include <DvfsStateResidencyDataProvider.h> #include <DvfsStateResidencyDataProvider.h>
#include <UfsStateResidencyDataProvider.h> #include <UfsStateResidencyDataProvider.h>
#include <dataproviders/GenericStateResidencyDataProvider.h> #include <dataproviders/GenericStateResidencyDataProvider.h>
@ -37,6 +38,7 @@
using aidl::android::hardware::power::stats::AdaptiveDvfsStateResidencyDataProvider; using aidl::android::hardware::power::stats::AdaptiveDvfsStateResidencyDataProvider;
using aidl::android::hardware::power::stats::AocTimedStateResidencyDataProvider; using aidl::android::hardware::power::stats::AocTimedStateResidencyDataProvider;
using aidl::android::hardware::power::stats::DevfreqStateResidencyDataProvider; 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::DvfsStateResidencyDataProvider;
using aidl::android::hardware::power::stats::UfsStateResidencyDataProvider; using aidl::android::hardware::power::stats::UfsStateResidencyDataProvider;
using aidl::android::hardware::power::stats::EnergyConsumerType; using aidl::android::hardware::power::stats::EnergyConsumerType;
@ -608,6 +610,15 @@ void addCamera(std::shared_ptr<PowerStats> p) {
{"VSYS_PWR_CAM"})); {"VSYS_PWR_CAM"}));
} }
void addDisplayMrrByEntity(std::shared_ptr<PowerStats> p, std::string name, std::string path) {
p->addStateResidencyDataProvider(std::make_unique<DisplayMrrStateResidencyDataProvider>(
name, path));
}
void addDisplayMrr(std::shared_ptr<PowerStats> p) {
addDisplayMrrByEntity(p, "Display", "/sys/class/drm/card0/device/primary-panel/");
}
void addGs201CommonDataProviders(std::shared_ptr<PowerStats> p) { void addGs201CommonDataProviders(std::shared_ptr<PowerStats> p) {
setEnergyMeter(p); setEnergyMeter(p);

View file

@ -24,6 +24,8 @@ void addAoC(std::shared_ptr<PowerStats> p);
void addCPUclusters(std::shared_ptr<PowerStats> p); void addCPUclusters(std::shared_ptr<PowerStats> p);
void addCamera(std::shared_ptr<PowerStats> p); void addCamera(std::shared_ptr<PowerStats> p);
void addDevfreq(std::shared_ptr<PowerStats> p); void addDevfreq(std::shared_ptr<PowerStats> p);
void addDisplayMrr(std::shared_ptr<PowerStats> p);
void addDisplayMrrByEntity(std::shared_ptr<PowerStats> p, std::string name, std::string path);
void addDvfsStats(std::shared_ptr<PowerStats> p); void addDvfsStats(std::shared_ptr<PowerStats> p);
void addGNSS(std::shared_ptr<PowerStats> p); void addGNSS(std::shared_ptr<PowerStats> p);
void addGs201CommonDataProviders(std::shared_ptr<PowerStats> p); void addGs201CommonDataProviders(std::shared_ptr<PowerStats> p);

View file

@ -17,7 +17,6 @@
#define LOG_TAG "android.hardware.usb.gadget.aidl-service" #define LOG_TAG "android.hardware.usb.gadget.aidl-service"
#include "UsbGadget.h" #include "UsbGadget.h"
#include <dirent.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdio.h> #include <stdio.h>
#include <sys/inotify.h> #include <sys/inotify.h>
@ -29,6 +28,7 @@
#include <android-base/properties.h> #include <android-base/properties.h>
#include <aidl/android/frameworks/stats/IStats.h> #include <aidl/android/frameworks/stats/IStats.h>
#include <pixelusb/I2cHelper.h>
namespace aidl { namespace aidl {
namespace android { namespace android {
@ -37,39 +37,19 @@ namespace usb {
namespace gadget { namespace gadget {
using ::android::base::GetBoolProperty; using ::android::base::GetBoolProperty;
using ::android::hardware::google::pixel::usb::getI2cClientPath;
using ::android::hardware::google::pixel::usb::kUvcEnabled; using ::android::hardware::google::pixel::usb::kUvcEnabled;
string enabledPath; string enabledPath;
constexpr char kHsi2cPath[] = "/sys/devices/platform/10d60000.hsi2c"; constexpr char kHsi2cPath[] = "/sys/devices/platform/10d60000.hsi2c";
constexpr char kI2CPath[] = "/sys/devices/platform/10d60000.hsi2c/i2c-"; constexpr char kTcpcDevName[] = "i2c-max77759tcpc";
constexpr char kAccessoryLimitCurrent[] = "i2c-max77759tcpc/usb_limit_accessory_current"; constexpr char kI2cClientId[] = "0025";
constexpr char kAccessoryLimitCurrentEnable[] = "i2c-max77759tcpc/usb_limit_accessory_enable"; constexpr char kAccessoryLimitCurrent[] = "usb_limit_accessory_current";
constexpr char kUpdateSdpEnumTimeout[] = "i2c-max77759tcpc/update_sdp_enum_timeout"; constexpr char kAccessoryLimitCurrentEnable[] = "usb_limit_accessory_enable";
constexpr char kUpdateSdpEnumTimeout[] = "update_sdp_enum_timeout";
Status getI2cBusHelper(string *name) { UsbGadget::UsbGadget() : mGadgetIrqPath(""),
DIR *dp; mI2cClientPath("") {
dp = opendir(kHsi2cPath);
if (dp != NULL) {
struct dirent *ep;
while ((ep = readdir(dp))) {
if (ep->d_type == DT_DIR) {
if (string::npos != string(ep->d_name).find("i2c-")) {
std::strtok(ep->d_name, "-");
*name = std::strtok(NULL, "-");
}
}
}
closedir(dp);
return Status::SUCCESS;
}
ALOGE("Failed to open %s", kHsi2cPath);
return Status::ERROR;
}
UsbGadget::UsbGadget() : mGadgetIrqPath("") {
if (access(OS_DESC_PATH, R_OK) != 0) { if (access(OS_DESC_PATH, R_OK) != 0) {
ALOGE("configfs setup not done yet"); ALOGE("configfs setup not done yet");
abort(); abort();
@ -389,14 +369,16 @@ ScopedAStatus UsbGadget::reset(const shared_ptr<IUsbGadgetCallback> &callback,
} }
void UsbGadget::updateSdpEnumTimeout() { void UsbGadget::updateSdpEnumTimeout() {
string i2c_node, update_sdp_enum_timeout_path; string update_sdp_enum_timeout_path;
Status status = getI2cBusHelper(&i2c_node); if (mI2cClientPath.empty()) {
if (status != Status::SUCCESS) { mI2cClientPath = getI2cClientPath(kHsi2cPath, kTcpcDevName, kI2cClientId);
if (mI2cClientPath.empty()) {
ALOGE("%s: Unable to locate i2c bus node", __func__); ALOGE("%s: Unable to locate i2c bus node", __func__);
} }
}
update_sdp_enum_timeout_path = kI2CPath + i2c_node + "/" + kUpdateSdpEnumTimeout; update_sdp_enum_timeout_path = mI2cClientPath + kUpdateSdpEnumTimeout;
if (!WriteStringToFile("1", update_sdp_enum_timeout_path)) { if (!WriteStringToFile("1", update_sdp_enum_timeout_path)) {
ALOGE("%s: Unable to write to %s.", __func__, update_sdp_enum_timeout_path.c_str()); ALOGE("%s: Unable to write to %s.", __func__, update_sdp_enum_timeout_path.c_str());
} else { } else {
@ -494,15 +476,20 @@ ScopedAStatus UsbGadget::setCurrentUsbFunctions(long functions,
std::unique_lock<std::mutex> lk(mLockSetCurrentFunction); std::unique_lock<std::mutex> lk(mLockSetCurrentFunction);
std::string current_usb_power_operation_mode, current_usb_type; std::string current_usb_power_operation_mode, current_usb_type;
std::string usb_limit_sink_enable; std::string usb_limit_sink_enable;
std::string accessoryCurrentLimitEnablePath, accessoryCurrentLimitPath;
string accessoryCurrentLimitEnablePath, accessoryCurrentLimitPath, path;
mCurrentUsbFunctions = functions; mCurrentUsbFunctions = functions;
mCurrentUsbFunctionsApplied = false; mCurrentUsbFunctionsApplied = false;
getI2cBusHelper(&path); if (mI2cClientPath.empty()) {
accessoryCurrentLimitPath = kI2CPath + path + "/" + kAccessoryLimitCurrent; mI2cClientPath = getI2cClientPath(kHsi2cPath, kTcpcDevName, kI2cClientId);
accessoryCurrentLimitEnablePath = kI2CPath + path + "/" + kAccessoryLimitCurrentEnable; if (mI2cClientPath.empty()) {
ALOGE("%s: Unable to locate i2c bus node", __func__);
}
}
accessoryCurrentLimitPath = mI2cClientPath + kAccessoryLimitCurrent;
accessoryCurrentLimitEnablePath = mI2cClientPath + kAccessoryLimitCurrentEnable;
// Get the gadget IRQ number before tearDownGadget() // Get the gadget IRQ number before tearDownGadget()
if (mGadgetIrqPath.empty()) if (mGadgetIrqPath.empty())

View file

@ -118,6 +118,7 @@ struct UsbGadget : public BnUsbGadget {
// Indicates to the kernel that the gadget service is ready and the kernel can // Indicates to the kernel that the gadget service is ready and the kernel can
// set SDP timeout to a lower value. // set SDP timeout to a lower value.
void updateSdpEnumTimeout(); void updateSdpEnumTimeout();
std::string mI2cClientPath;
private: private:
Status tearDownGadget(); Status tearDownGadget();

View file

@ -7,7 +7,7 @@ on post-fs
chown root system /sys/class/typec/port0/power_role chown root system /sys/class/typec/port0/power_role
chown root system /sys/class/typec/port0/data_role chown root system /sys/class/typec/port0/data_role
chown root system /sys/class/typec/port0/port_type chown root system /sys/class/typec/port0/port_type
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-2/i2c-max77759tcpc/contaminant_detection chown root system /sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025/contaminant_detection
chown root system /sys/devices/platform/11210000.usb/dwc3_exynos_otg_b_sess chown root system /sys/devices/platform/11210000.usb/dwc3_exynos_otg_b_sess
chown root system /sys/devices/platform/11210000.usb/dwc3_exynos_otg_id chown root system /sys/devices/platform/11210000.usb/dwc3_exynos_otg_id
chown root system /sys/devices/platform/11210000.usb/usb_data_enabled chown root system /sys/devices/platform/11210000.usb/usb_data_enabled

View file

@ -43,8 +43,9 @@
#include <aidl/android/frameworks/stats/IStats.h> #include <aidl/android/frameworks/stats/IStats.h>
#include <android_hardware_usb_flags.h> #include <android_hardware_usb_flags.h>
#include <pixelusb/UsbGadgetAidlCommon.h>
#include <pixelstats/StatsHelper.h> #include <pixelstats/StatsHelper.h>
#include <pixelusb/I2cHelper.h>
#include <pixelusb/UsbGadgetAidlCommon.h>
namespace usb_flags = android::hardware::usb::flags; namespace usb_flags = android::hardware::usb::flags;
@ -55,6 +56,7 @@ using android::base::Trim;
using android::hardware::google::pixel::getStatsService; using android::hardware::google::pixel::getStatsService;
using android::hardware::google::pixel::PixelAtoms::VendorUsbPortOverheat; using android::hardware::google::pixel::PixelAtoms::VendorUsbPortOverheat;
using android::hardware::google::pixel::reportUsbPortOverheat; using android::hardware::google::pixel::reportUsbPortOverheat;
using android::hardware::google::pixel::usb::getI2cClientPath;
using android::String8; using android::String8;
using android::Vector; using android::Vector;
@ -67,18 +69,19 @@ volatile bool destroyThread;
string enabledPath; string enabledPath;
constexpr char kHsi2cPath[] = "/sys/devices/platform/10d60000.hsi2c"; constexpr char kHsi2cPath[] = "/sys/devices/platform/10d60000.hsi2c";
constexpr char kI2CPath[] = "/sys/devices/platform/10d60000.hsi2c/i2c-"; constexpr char kTcpcDevName[] = "i2c-max77759tcpc";
constexpr char kI2cClientId[] = "0025";
constexpr char kComplianceWarningsPath[] = "device/non_compliant_reasons"; constexpr char kComplianceWarningsPath[] = "device/non_compliant_reasons";
constexpr char kComplianceWarningBC12[] = "bc12"; constexpr char kComplianceWarningBC12[] = "bc12";
constexpr char kComplianceWarningDebugAccessory[] = "debug-accessory"; constexpr char kComplianceWarningDebugAccessory[] = "debug-accessory";
constexpr char kComplianceWarningMissingRp[] = "missing_rp"; constexpr char kComplianceWarningMissingRp[] = "missing_rp";
constexpr char kComplianceWarningOther[] = "other"; constexpr char kComplianceWarningOther[] = "other";
constexpr char kComplianceWarningInputPowerLimited[] = "input_power_limited"; constexpr char kComplianceWarningInputPowerLimited[] = "input_power_limited";
constexpr char kContaminantDetectionPath[] = "i2c-max77759tcpc/contaminant_detection"; constexpr char kContaminantDetectionPath[] = "contaminant_detection";
constexpr char kStatusPath[] = "i2c-max77759tcpc/contaminant_detection_status"; constexpr char kStatusPath[] = "contaminant_detection_status";
constexpr char kSinkLimitEnable[] = "i2c-max77759tcpc/usb_limit_sink_enable"; constexpr char kSinkLimitEnable[] = "usb_limit_sink_enable";
constexpr char kSourceLimitEnable[] = "i2c-max77759tcpc/usb_limit_source_enable"; constexpr char kSourceLimitEnable[] = "usb_limit_source_enable";
constexpr char kSinkLimitCurrent[] = "i2c-max77759tcpc/usb_limit_sink_current"; constexpr char kSinkLimitCurrent[] = "usb_limit_sink_current";
constexpr char kTypecPath[] = "/sys/class/typec"; constexpr char kTypecPath[] = "/sys/class/typec";
constexpr char kDisableContatminantDetection[] = "vendor.usb.contaminantdisable"; constexpr char kDisableContatminantDetection[] = "vendor.usb.contaminantdisable";
constexpr char kOverheatStatsPath[] = "/sys/devices/platform/google,usbc_port_cooling_dev/"; constexpr char kOverheatStatsPath[] = "/sys/devices/platform/google,usbc_port_cooling_dev/";
@ -245,31 +248,9 @@ ScopedAStatus Usb::resetUsbPort(const std::string& in_portName, int64_t in_trans
return ::ndk::ScopedAStatus::ok(); return ::ndk::ScopedAStatus::ok();
} }
Status getI2cBusHelper(string *name) { Status queryMoistureDetectionStatus(android::hardware::usb::Usb *usb,
DIR *dp; std::vector<PortStatus> *currentPortStatus) {
string enabled, status, DetectedPath;
dp = opendir(kHsi2cPath);
if (dp != NULL) {
struct dirent *ep;
while ((ep = readdir(dp))) {
if (ep->d_type == DT_DIR) {
if (string::npos != string(ep->d_name).find("i2c-")) {
std::strtok(ep->d_name, "-");
*name = std::strtok(NULL, "-");
}
}
}
closedir(dp);
return Status::SUCCESS;
}
ALOGE("Failed to open %s", kHsi2cPath);
return Status::ERROR;
}
Status queryMoistureDetectionStatus(std::vector<PortStatus> *currentPortStatus) {
string enabled, status, path, DetectedPath;
(*currentPortStatus)[0].supportedContaminantProtectionModes (*currentPortStatus)[0].supportedContaminantProtectionModes
.push_back(ContaminantProtectionMode::FORCE_DISABLE); .push_back(ContaminantProtectionMode::FORCE_DISABLE);
@ -278,8 +259,15 @@ Status queryMoistureDetectionStatus(std::vector<PortStatus> *currentPortStatus)
(*currentPortStatus)[0].supportsEnableContaminantPresenceDetection = true; (*currentPortStatus)[0].supportsEnableContaminantPresenceDetection = true;
(*currentPortStatus)[0].supportsEnableContaminantPresenceProtection = false; (*currentPortStatus)[0].supportsEnableContaminantPresenceProtection = false;
getI2cBusHelper(&path); if (usb->mI2cClientPath.empty()) {
enabledPath = kI2CPath + path + "/" + kContaminantDetectionPath; usb->mI2cClientPath = getI2cClientPath(kHsi2cPath, kTcpcDevName, kI2cClientId);
if (usb->mI2cClientPath.empty()) {
ALOGE("%s: Unable to locate i2c bus node", __func__);
return Status::ERROR;
}
}
enabledPath = usb->mI2cClientPath + kContaminantDetectionPath;
if (!ReadFileToString(enabledPath, &enabled)) { if (!ReadFileToString(enabledPath, &enabled)) {
ALOGE("Failed to open moisture_detection_enabled"); ALOGE("Failed to open moisture_detection_enabled");
return Status::ERROR; return Status::ERROR;
@ -287,7 +275,7 @@ Status queryMoistureDetectionStatus(std::vector<PortStatus> *currentPortStatus)
enabled = Trim(enabled); enabled = Trim(enabled);
if (enabled == "1") { if (enabled == "1") {
DetectedPath = kI2CPath + path + "/" + kStatusPath; DetectedPath = usb->mI2cClientPath + kStatusPath;
if (!ReadFileToString(DetectedPath, &status)) { if (!ReadFileToString(DetectedPath, &status)) {
ALOGE("Failed to open moisture_detected"); ALOGE("Failed to open moisture_detected");
return Status::ERROR; return Status::ERROR;
@ -562,7 +550,8 @@ Usb::Usb()
ThrottlingSeverity::NONE)}, kSamplingIntervalSec), ThrottlingSeverity::NONE)}, kSamplingIntervalSec),
mUsbDataEnabled(true), mUsbDataEnabled(true),
mUsbHubVendorCmdValue(GL852G_VENDOR_CMD_VALUE_DEFAULT), mUsbHubVendorCmdValue(GL852G_VENDOR_CMD_VALUE_DEFAULT),
mUsbHubVendorCmdIndex(GL852G_VENDOR_CMD_INDEX_DEFAULT) { mUsbHubVendorCmdIndex(GL852G_VENDOR_CMD_INDEX_DEFAULT),
mI2cClientPath("") {
pthread_condattr_t attr; pthread_condattr_t attr;
if (pthread_condattr_init(&attr)) { if (pthread_condattr_init(&attr)) {
ALOGE("pthread_condattr_init failed: %s", strerror(errno)); ALOGE("pthread_condattr_init failed: %s", strerror(errno));
@ -584,6 +573,11 @@ Usb::Usb()
ALOGE("pthread creation failed %d\n", errno); ALOGE("pthread creation failed %d\n", errno);
abort(); 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, ScopedAStatus Usb::switchRole(const string& in_portName, const PortRole& in_role,
@ -645,12 +639,19 @@ ScopedAStatus Usb::limitPowerTransfer(const string& in_portName, bool in_limit,
int64_t in_transactionId) { int64_t in_transactionId) {
bool sessionFail = false, success; bool sessionFail = false, success;
std::vector<PortStatus> currentPortStatus; std::vector<PortStatus> currentPortStatus;
string path, sinkLimitEnablePath, currentLimitPath, sourceLimitEnablePath; string sinkLimitEnablePath, currentLimitPath, sourceLimitEnablePath;
getI2cBusHelper(&path); if (mI2cClientPath.empty()) {
sinkLimitEnablePath = kI2CPath + path + "/" + kSinkLimitEnable; mI2cClientPath = getI2cClientPath(kHsi2cPath, kTcpcDevName, kI2cClientId);
currentLimitPath = kI2CPath + path + "/" + kSinkLimitCurrent; if (mI2cClientPath.empty()) {
sourceLimitEnablePath = kI2CPath + path + "/" + kSourceLimitEnable; ALOGE("%s: Unable to locate i2c bus node", __func__);
return ScopedAStatus::ok();
}
}
sinkLimitEnablePath = mI2cClientPath + kSinkLimitEnable;
currentLimitPath = mI2cClientPath + kSinkLimitCurrent;
sourceLimitEnablePath = mI2cClientPath + kSourceLimitEnable;
pthread_mutex_lock(&mLock); pthread_mutex_lock(&mLock);
if (in_limit) { if (in_limit) {
@ -690,11 +691,19 @@ ScopedAStatus Usb::limitPowerTransfer(const string& in_portName, bool in_limit,
return ScopedAStatus::ok(); return ScopedAStatus::ok();
} }
Status queryPowerTransferStatus(std::vector<PortStatus> *currentPortStatus) { Status queryPowerTransferStatus(android::hardware::usb::Usb *usb,
string limitedPath, enabled, path; std::vector<PortStatus> *currentPortStatus) {
string limitedPath, enabled;
getI2cBusHelper(&path); if (usb->mI2cClientPath.empty()) {
limitedPath = kI2CPath + path + "/" + kSinkLimitEnable; usb->mI2cClientPath = getI2cClientPath(kHsi2cPath, kTcpcDevName, kI2cClientId);
if (usb->mI2cClientPath.empty()) {
ALOGE("%s: Unable to locate i2c bus node", __func__);
return Status::ERROR;
}
}
limitedPath = usb->mI2cClientPath + kSinkLimitEnable;
if (!ReadFileToString(limitedPath, &enabled)) { if (!ReadFileToString(limitedPath, &enabled)) {
ALOGE("Failed to open limit_sink_enable"); ALOGE("Failed to open limit_sink_enable");
return Status::ERROR; return Status::ERROR;
@ -948,8 +957,8 @@ void queryVersionHelper(android::hardware::usb::Usb *usb,
Status status; Status status;
pthread_mutex_lock(&usb->mLock); pthread_mutex_lock(&usb->mLock);
status = getPortStatusHelper(usb, currentPortStatus); status = getPortStatusHelper(usb, currentPortStatus);
queryMoistureDetectionStatus(currentPortStatus); queryMoistureDetectionStatus(usb, currentPortStatus);
queryPowerTransferStatus(currentPortStatus); queryPowerTransferStatus(usb, currentPortStatus);
queryNonCompliantChargerStatus(currentPortStatus); queryNonCompliantChargerStatus(currentPortStatus);
queryUsbDataSession(usb, currentPortStatus); queryUsbDataSession(usb, currentPortStatus);
if (usb->mCallback != NULL) { if (usb->mCallback != NULL) {

View file

@ -99,6 +99,7 @@ struct Usb : public BnUsb {
// Usb hub vendor command settings for JK level tuning // Usb hub vendor command settings for JK level tuning
int mUsbHubVendorCmdValue; int mUsbHubVendorCmdValue;
int mUsbHubVendorCmdIndex; int mUsbHubVendorCmdIndex;
std::string mI2cClientPath;
private: private:
pthread_t mPoll; pthread_t mPoll;

View file

@ -26,6 +26,7 @@
#include <pixelstats/StatsHelper.h> #include <pixelstats/StatsHelper.h>
#include <pixelusb/CommonUtils.h> #include <pixelusb/CommonUtils.h>
#include <sys/epoll.h> #include <sys/epoll.h>
#include <sys/timerfd.h>
#include <utils/Log.h> #include <utils/Log.h>
#include <regex> #include <regex>
@ -48,6 +49,9 @@ namespace usb {
#define UEVENT_MSG_LEN 2048 #define UEVENT_MSG_LEN 2048
#define USB_STATE_MAX_LEN 20 #define USB_STATE_MAX_LEN 20
#define DATA_ROLE_MAX_LEN 10 #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 kUdcConfigfsPath[] = "/config/usb_gadget/g1/UDC";
constexpr char kNotAttachedState[] = "not attached\n"; constexpr char kNotAttachedState[] = "not attached\n";
@ -115,6 +119,15 @@ UsbDataSessionMonitor::UsbDataSessionMonitor(
if (addEpollFd(epollFd, ueventFd)) if (addEpollFd(epollFd, ueventFd))
abort(); 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) { if (addEpollFile(epollFd.get(), dataRolePath, mDataRoleFd) != 0) {
ALOGE("monitor data role failed"); ALOGE("monitor data role failed");
abort(); abort();
@ -139,6 +152,7 @@ UsbDataSessionMonitor::UsbDataSessionMonitor(
mEpollFd = std::move(epollFd); mEpollFd = std::move(epollFd);
mUeventFd = std::move(ueventFd); mUeventFd = std::move(ueventFd);
mTimerFd = std::move(timerFd);
mUpdatePortStatusCb = updatePortStatusCb; mUpdatePortStatusCb = updatePortStatusCb;
if (ReadFileToString(kUdcConfigfsPath, &udc) && !udc.empty()) if (ReadFileToString(kUdcConfigfsPath, &udc) && !udc.empty())
@ -150,6 +164,9 @@ UsbDataSessionMonitor::UsbDataSessionMonitor(
ALOGE("pthread creation failed %d", errno); ALOGE("pthread creation failed %d", errno);
abort(); abort();
} }
ALOGI("feature flag enable_report_usb_data_compliance_warning: %d",
usb_flags::enable_report_usb_data_compliance_warning());
} }
UsbDataSessionMonitor::~UsbDataSessionMonitor() {} UsbDataSessionMonitor::~UsbDataSessionMonitor() {}
@ -223,13 +240,55 @@ void UsbDataSessionMonitor::notifyComplianceWarning() {
void UsbDataSessionMonitor::evaluateComplianceWarning() { void UsbDataSessionMonitor::evaluateComplianceWarning() {
std::set<ComplianceWarning> newWarningSet; std::set<ComplianceWarning> newWarningSet;
int elapsedTimeSec;
// TODO: add heuristics and update newWarningSet elapsedTimeSec =
std::chrono::duration_cast<std::chrono::seconds>(boot_clock::now() - mDataSessionStart)
.count();
if (elapsedTimeSec >= WARNING_SURFACE_DELAY_SEC) {
if (mDataRole == PortDataRole::DEVICE && mUdcBind) { 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) { } 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) { 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; mWarningSet = newWarningSet;
notifyComplianceWarning(); notifyComplianceWarning();
} }
@ -259,6 +318,26 @@ void UsbDataSessionMonitor::handleDeviceStateEvent(struct usbDeviceState *device
evaluateComplianceWarning(); 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() { void UsbDataSessionMonitor::handleDataRoleEvent() {
int n; int n;
PortDataRole newDataRole; PortDataRole newDataRole;
@ -283,17 +362,8 @@ void UsbDataSessionMonitor::handleDataRoleEvent() {
reportUsbDataSessionMetrics(); reportUsbDataSessionMetrics();
} }
// Set up for the new data session
mWarningSet.clear();
mDataRole = newDataRole; mDataRole = newDataRole;
mDataSessionStart = boot_clock::now(); setupNewSession();
if (newDataRole == PortDataRole::DEVICE) {
clearDeviceStateEvents(&mDeviceState);
} else if (newDataRole == PortDataRole::HOST) {
clearDeviceStateEvents(&mHost1State);
clearDeviceStateEvents(&mHost2State);
}
} }
} }
@ -328,8 +398,7 @@ void UsbDataSessionMonitor::updateUdcBindStatus(const std::string &devname) {
} else if (!mUdcBind && newUdcBind) { } else if (!mUdcBind && newUdcBind) {
// Gadget soft pullup: reset and start accounting for a new data session. // Gadget soft pullup: reset and start accounting for a new data session.
clearDeviceStateEvents(&mDeviceState); setupNewSession();
mDataSessionStart = boot_clock::now();
} }
} }
@ -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) { void *UsbDataSessionMonitor::monitorThread(void *param) {
UsbDataSessionMonitor *monitor = (UsbDataSessionMonitor *)param; UsbDataSessionMonitor *monitor = (UsbDataSessionMonitor *)param;
struct epoll_event events[64]; struct epoll_event events[64];
@ -400,6 +486,8 @@ void *UsbDataSessionMonitor::monitorThread(void *param) {
for (int n = 0; n < nevents; ++n) { for (int n = 0; n < nevents; ++n) {
if (events[n].data.fd == monitor->mUeventFd.get()) { if (events[n].data.fd == monitor->mUeventFd.get()) {
monitor->handleUevent(); monitor->handleUevent();
} else if (events[n].data.fd == monitor->mTimerFd.get()) {
monitor->handleTimerEvent();
} else if (events[n].data.fd == monitor->mDataRoleFd.get()) { } else if (events[n].data.fd == monitor->mDataRoleFd.get()) {
monitor->handleDataRoleEvent(); monitor->handleDataRoleEvent();
} else if (events[n].data.fd == monitor->mDeviceState.fd.get()) { } else if (events[n].data.fd == monitor->mDeviceState.fd.get()) {

View file

@ -75,9 +75,11 @@ class UsbDataSessionMonitor {
static void *monitorThread(void *param); static void *monitorThread(void *param);
void handleUevent(); void handleUevent();
void handleTimerEvent();
void handleDataRoleEvent(); void handleDataRoleEvent();
void handleDeviceStateEvent(struct usbDeviceState *deviceState); void handleDeviceStateEvent(struct usbDeviceState *deviceState);
void clearDeviceStateEvents(struct usbDeviceState *deviceState); void clearDeviceStateEvents(struct usbDeviceState *deviceState);
void setupNewSession();
void reportUsbDataSessionMetrics(); void reportUsbDataSessionMetrics();
void evaluateComplianceWarning(); void evaluateComplianceWarning();
void notifyComplianceWarning(); void notifyComplianceWarning();
@ -86,6 +88,7 @@ class UsbDataSessionMonitor {
pthread_t mMonitor; pthread_t mMonitor;
unique_fd mEpollFd; unique_fd mEpollFd;
unique_fd mUeventFd; unique_fd mUeventFd;
unique_fd mTimerFd;
unique_fd mDataRoleFd; unique_fd mDataRoleFd;
struct usbDeviceState mDeviceState; struct usbDeviceState mDeviceState;
struct usbDeviceState mHost1State; struct usbDeviceState mHost1State;

View file

@ -8,146 +8,20 @@ on post-fs
chown root system /sys/class/typec/port0/power_role chown root system /sys/class/typec/port0/power_role
chown root system /sys/class/typec/port0/data_role chown root system /sys/class/typec/port0/data_role
chown root system /sys/class/typec/port0/port_type chown root system /sys/class/typec/port0/port_type
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-0/i2c-max77759tcpc/contaminant_detection chown root system /sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025/contaminant_detection
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-1/i2c-max77759tcpc/contaminant_detection chown root system /sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025/usb_limit_accessory_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-2/i2c-max77759tcpc/contaminant_detection chown root system /sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025/usb_limit_accessory_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-3/i2c-max77759tcpc/contaminant_detection chown root system /sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025/usb_limit_sink_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-4/i2c-max77759tcpc/contaminant_detection chown root system /sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025/usb_limit_sink_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-5/i2c-max77759tcpc/contaminant_detection chown root system /sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025/usb_limit_source_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-6/i2c-max77759tcpc/contaminant_detection chown root system /sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025/update_sdp_enum_timeout
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-7/i2c-max77759tcpc/contaminant_detection
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-8/i2c-max77759tcpc/contaminant_detection
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-9/i2c-max77759tcpc/contaminant_detection
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-0/i2c-max77759tcpc/usb_limit_accessory_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-1/i2c-max77759tcpc/usb_limit_accessory_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-2/i2c-max77759tcpc/usb_limit_accessory_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-3/i2c-max77759tcpc/usb_limit_accessory_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-4/i2c-max77759tcpc/usb_limit_accessory_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-5/i2c-max77759tcpc/usb_limit_accessory_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-6/i2c-max77759tcpc/usb_limit_accessory_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-7/i2c-max77759tcpc/usb_limit_accessory_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-8/i2c-max77759tcpc/usb_limit_accessory_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-9/i2c-max77759tcpc/usb_limit_accessory_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-0/i2c-max77759tcpc/usb_limit_accessory_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-1/i2c-max77759tcpc/usb_limit_accessory_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-2/i2c-max77759tcpc/usb_limit_accessory_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-3/i2c-max77759tcpc/usb_limit_accessory_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-4/i2c-max77759tcpc/usb_limit_accessory_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-5/i2c-max77759tcpc/usb_limit_accessory_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-6/i2c-max77759tcpc/usb_limit_accessory_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-7/i2c-max77759tcpc/usb_limit_accessory_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-8/i2c-max77759tcpc/usb_limit_accessory_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-9/i2c-max77759tcpc/usb_limit_accessory_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-0/i2c-max77759tcpc/usb_limit_sink_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-1/i2c-max77759tcpc/usb_limit_sink_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-2/i2c-max77759tcpc/usb_limit_sink_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-3/i2c-max77759tcpc/usb_limit_sink_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-4/i2c-max77759tcpc/usb_limit_sink_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-5/i2c-max77759tcpc/usb_limit_sink_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-6/i2c-max77759tcpc/usb_limit_sink_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-7/i2c-max77759tcpc/usb_limit_sink_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-8/i2c-max77759tcpc/usb_limit_sink_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-9/i2c-max77759tcpc/usb_limit_sink_current
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-0/i2c-max77759tcpc/usb_limit_sink_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-1/i2c-max77759tcpc/usb_limit_sink_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-2/i2c-max77759tcpc/usb_limit_sink_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-3/i2c-max77759tcpc/usb_limit_sink_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-4/i2c-max77759tcpc/usb_limit_sink_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-5/i2c-max77759tcpc/usb_limit_sink_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-6/i2c-max77759tcpc/usb_limit_sink_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-7/i2c-max77759tcpc/usb_limit_sink_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-8/i2c-max77759tcpc/usb_limit_sink_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-9/i2c-max77759tcpc/usb_limit_sink_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-0/i2c-max77759tcpc/usb_limit_source_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-1/i2c-max77759tcpc/usb_limit_source_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-2/i2c-max77759tcpc/usb_limit_source_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-3/i2c-max77759tcpc/usb_limit_source_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-4/i2c-max77759tcpc/usb_limit_source_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-5/i2c-max77759tcpc/usb_limit_source_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-6/i2c-max77759tcpc/usb_limit_source_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-7/i2c-max77759tcpc/usb_limit_source_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-8/i2c-max77759tcpc/usb_limit_source_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-9/i2c-max77759tcpc/usb_limit_source_enable
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-0/i2c-max77759tcpc/update_sdp_enum_timeout
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-1/i2c-max77759tcpc/update_sdp_enum_timeout
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-2/i2c-max77759tcpc/update_sdp_enum_timeout
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-3/i2c-max77759tcpc/update_sdp_enum_timeout
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-4/i2c-max77759tcpc/update_sdp_enum_timeout
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-5/i2c-max77759tcpc/update_sdp_enum_timeout
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-6/i2c-max77759tcpc/update_sdp_enum_timeout
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-7/i2c-max77759tcpc/update_sdp_enum_timeout
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-8/i2c-max77759tcpc/update_sdp_enum_timeout
chown root system /sys/devices/platform/10d60000.hsi2c/i2c-9/i2c-max77759tcpc/update_sdp_enum_timeout
chmod 664 /sys/class/typec/port0/power_role chmod 664 /sys/class/typec/port0/power_role
chmod 664 /sys/class/typec/port0/data_role chmod 664 /sys/class/typec/port0/data_role
chmod 664 /sys/class/typec/port0/port_type chmod 664 /sys/class/typec/port0/port_type
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-0/i2c-max77759tcpc/contaminant_detection chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025/contaminant_detection
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-1/i2c-max77759tcpc/contaminant_detection chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025/usb_limit_accessory_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-2/i2c-max77759tcpc/contaminant_detection chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025/usb_limit_accessory_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-3/i2c-max77759tcpc/contaminant_detection chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025/usb_limit_sink_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-4/i2c-max77759tcpc/contaminant_detection chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025/usb_limit_sink_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-5/i2c-max77759tcpc/contaminant_detection chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025/usb_limit_source_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-6/i2c-max77759tcpc/contaminant_detection chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-13/13-0025/update_sdp_enum_timeout
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-7/i2c-max77759tcpc/contaminant_detection
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-8/i2c-max77759tcpc/contaminant_detection
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-9/i2c-max77759tcpc/contaminant_detection
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-0/i2c-max77759tcpc/usb_limit_accessory_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-1/i2c-max77759tcpc/usb_limit_accessory_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-2/i2c-max77759tcpc/usb_limit_accessory_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-3/i2c-max77759tcpc/usb_limit_accessory_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-4/i2c-max77759tcpc/usb_limit_accessory_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-5/i2c-max77759tcpc/usb_limit_accessory_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-6/i2c-max77759tcpc/usb_limit_accessory_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-7/i2c-max77759tcpc/usb_limit_accessory_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-8/i2c-max77759tcpc/usb_limit_accessory_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-9/i2c-max77759tcpc/usb_limit_accessory_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-0/i2c-max77759tcpc/usb_limit_accessory_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-1/i2c-max77759tcpc/usb_limit_accessory_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-2/i2c-max77759tcpc/usb_limit_accessory_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-3/i2c-max77759tcpc/usb_limit_accessory_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-4/i2c-max77759tcpc/usb_limit_accessory_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-5/i2c-max77759tcpc/usb_limit_accessory_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-6/i2c-max77759tcpc/usb_limit_accessory_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-7/i2c-max77759tcpc/usb_limit_accessory_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-8/i2c-max77759tcpc/usb_limit_accessory_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-9/i2c-max77759tcpc/usb_limit_accessory_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-0/i2c-max77759tcpc/usb_limit_sink_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-1/i2c-max77759tcpc/usb_limit_sink_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-2/i2c-max77759tcpc/usb_limit_sink_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-3/i2c-max77759tcpc/usb_limit_sink_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-4/i2c-max77759tcpc/usb_limit_sink_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-5/i2c-max77759tcpc/usb_limit_sink_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-6/i2c-max77759tcpc/usb_limit_sink_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-7/i2c-max77759tcpc/usb_limit_sink_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-8/i2c-max77759tcpc/usb_limit_sink_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-9/i2c-max77759tcpc/usb_limit_sink_current
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-0/i2c-max77759tcpc/usb_limit_sink_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-1/i2c-max77759tcpc/usb_limit_sink_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-2/i2c-max77759tcpc/usb_limit_sink_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-3/i2c-max77759tcpc/usb_limit_sink_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-4/i2c-max77759tcpc/usb_limit_sink_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-5/i2c-max77759tcpc/usb_limit_sink_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-6/i2c-max77759tcpc/usb_limit_sink_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-7/i2c-max77759tcpc/usb_limit_sink_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-8/i2c-max77759tcpc/usb_limit_sink_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-9/i2c-max77759tcpc/usb_limit_sink_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-0/i2c-max77759tcpc/usb_limit_source_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-1/i2c-max77759tcpc/usb_limit_source_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-2/i2c-max77759tcpc/usb_limit_source_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-3/i2c-max77759tcpc/usb_limit_source_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-4/i2c-max77759tcpc/usb_limit_source_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-5/i2c-max77759tcpc/usb_limit_source_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-6/i2c-max77759tcpc/usb_limit_source_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-7/i2c-max77759tcpc/usb_limit_source_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-8/i2c-max77759tcpc/usb_limit_source_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-9/i2c-max77759tcpc/usb_limit_source_enable
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-0/i2c-max77759tcpc/update_sdp_enum_timeout
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-1/i2c-max77759tcpc/update_sdp_enum_timeout
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-2/i2c-max77759tcpc/update_sdp_enum_timeout
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-3/i2c-max77759tcpc/update_sdp_enum_timeout
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-4/i2c-max77759tcpc/update_sdp_enum_timeout
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-5/i2c-max77759tcpc/update_sdp_enum_timeout
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-6/i2c-max77759tcpc/update_sdp_enum_timeout
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-7/i2c-max77759tcpc/update_sdp_enum_timeout
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-8/i2c-max77759tcpc/update_sdp_enum_timeout
chmod 664 /sys/devices/platform/10d60000.hsi2c/i2c-9/i2c-max77759tcpc/update_sdp_enum_timeout