sm8450-common: udfps: Update fod_finger_state node based on actual udfps state

Change-Id: I9f468457acfe373b9fdab7df7a9065905629263c
This commit is contained in:
Arian
2025-01-07 17:42:19 +01:00
parent b12c61816a
commit e5a374590f
3 changed files with 21 additions and 0 deletions

View File

@@ -49,8 +49,10 @@ on boot
chmod 0660 /dev/xiaomi-touch
# Touchscreen sensors
chown system system /sys/class/touch/touch_dev/fod_finger_state
chown system system /sys/class/touch/touch_dev/fod_longpress_gesture_enabled
chown system system /sys/class/touch/touch_dev/fod_press_status
chmod 0660 /sys/class/touch/touch_dev/fod_finger_state
chmod 0660 /sys/class/touch/touch_dev/fod_longpress_gesture_enabled
chmod 0660 /sys/class/touch/touch_dev/fod_press_status

View File

@@ -7,6 +7,7 @@ genfscon sysfs /devices/platform/soc/soc:xm_battmngr/power_supply/usb u:object_r
genfscon sysfs /devices/platform/soc/soc:fingerprint_fpc u:object_r:vendor_sysfs_fingerprint:s0
# Sensors
genfscon sysfs /devices/virtual/touch/touch_dev/fod_finger_state u:object_r:vendor_sysfs_sensors:s0
genfscon sysfs /devices/virtual/touch/touch_dev/fod_longpress_gesture_enabled u:object_r:vendor_sysfs_sensors:s0
genfscon sysfs /devices/virtual/touch/touch_dev/fod_press_status u:object_r:vendor_sysfs_sensors:s0
genfscon sysfs /devices/virtual/touch/touch_dev/gesture_double_tap_enabled u:object_r:vendor_sysfs_sensors:s0

View File

@@ -17,6 +17,7 @@
#include <thread>
#include <display/drm/mi_disp.h>
#include <linux/xiaomi_touch.h>
#include "UdfpsHandler.h"
@@ -34,6 +35,7 @@
#define PARAM_FOD_RELEASED 0
#define DISP_FEATURE_PATH "/dev/mi_display/disp_feature"
#define TOUCH_DEV_PATH "/dev/xiaomi-touch"
using ::aidl::android::hardware::biometrics::fingerprint::AcquiredInfo;
@@ -73,6 +75,7 @@ class XiaomiSm8450UdfpsHander : public UdfpsHandler {
void init(fingerprint_device_t* device) {
mDevice = device;
disp_fd_ = android::base::unique_fd(open(DISP_FEATURE_PATH, O_RDWR));
touch_fd_ = android::base::unique_fd(open(TOUCH_DEV_PATH, O_RDWR));
// Thread to listen for fod ui changes
std::thread([this]() {
@@ -134,6 +137,13 @@ class XiaomiSm8450UdfpsHander : public UdfpsHandler {
mDevice->extCmd(mDevice, COMMAND_FOD_PRESS_Y, y);
mDevice->extCmd(mDevice, COMMAND_FOD_PRESS_STATUS, PARAM_FOD_PRESSED);
// Update fod_finger_state node in case hwmodule polls it
struct touch_mode_request touchRequest = {
.mode = TOUCH_MODE_FOD_FINGER_STATE,
.value = 1,
};
ioctl(touch_fd_.get(), TOUCH_IOC_SET_CUR_VALUE, &touchRequest);
// Request HBM
disp_local_hbm_req req;
req.base.flag = 0;
@@ -155,6 +165,13 @@ class XiaomiSm8450UdfpsHander : public UdfpsHandler {
req.base.disp_id = MI_DISP_PRIMARY;
req.local_hbm_value = LHBM_TARGET_BRIGHTNESS_OFF_FINGER_UP;
ioctl(disp_fd_.get(), MI_DISP_IOCTL_SET_LOCAL_HBM, &req);
// Update fod_finger_state node in case hwmodule polls it
struct touch_mode_request touchRequest = {
.mode = TOUCH_MODE_FOD_FINGER_STATE,
.value = 0,
};
ioctl(touch_fd_.get(), TOUCH_IOC_SET_CUR_VALUE, &touchRequest);
}
void onAcquired(int32_t result, int32_t vendorCode) {
@@ -171,6 +188,7 @@ class XiaomiSm8450UdfpsHander : public UdfpsHandler {
private:
fingerprint_device_t* mDevice;
android::base::unique_fd disp_fd_;
android::base::unique_fd touch_fd_;
};
static UdfpsHandler* create() {