From 65c4f350b231ef446b3f70f2aeebe38cce68a3d0 Mon Sep 17 00:00:00 2001 From: liujian24 Date: Tue, 11 Jan 2022 11:15:44 +0800 Subject: [PATCH] Hawao:Enable power gpio for Chipone FPS WHY:FPS sensor will be overheating due to impact damage to FPS WHAT:Enable power gpio in Chipone FPS driver so that it can disable power when overheating. Change-Id: Ie32e69870cbcc53f6fafd97ac0068f79b66afbaf Reviewed-on: https://gerrit.mot.com/2166844 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: liujian Reviewed-by: Wang Wang Submit-Approved: Jira Key --- drivers/input/misc/chipone_fps_mmi/Kbuild | 7 ++++ .../misc/chipone_fps_mmi/fpsensor_spi_tee.c | 37 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/drivers/input/misc/chipone_fps_mmi/Kbuild b/drivers/input/misc/chipone_fps_mmi/Kbuild index 551429b3fb96..2f418ae4db78 100644 --- a/drivers/input/misc/chipone_fps_mmi/Kbuild +++ b/drivers/input/misc/chipone_fps_mmi/Kbuild @@ -2,4 +2,11 @@ EXTRA_CFLAGS += -Wall EXTRA_CFLAGS += -I$(ANDROID_BUILD_TOP)/motorola/kernel/modules/include +prod_list := hawao +find_target := $(foreach find, $(prod_list), $(findstring $(find), $(TARGET_PRODUCT))) +ifneq ($(find_target), ) +$(warning jianl: define SUPPORT_POWER_GPIO) +EXTRA_CFLAGS += -DSUPPORT_POWER_GPIO +endif + obj-m += fpsensor_spi_tee.o diff --git a/drivers/input/misc/chipone_fps_mmi/fpsensor_spi_tee.c b/drivers/input/misc/chipone_fps_mmi/fpsensor_spi_tee.c index 73d7a5ff6fd8..2aca0433723f 100644 --- a/drivers/input/misc/chipone_fps_mmi/fpsensor_spi_tee.c +++ b/drivers/input/misc/chipone_fps_mmi/fpsensor_spi_tee.c @@ -25,7 +25,11 @@ #define FPSENSOR_WAKEUP_OLD 2 #define FPSENSOR_SPI_VERSION "fpsensor_spi_tee_qcomm_v1.23.1" +#ifdef SUPPORT_POWER_GPIO +#define FPSENSOR_USE_QCOM_POWER_GPIO 1 +#else #define FPSENSOR_USE_QCOM_POWER_GPIO 0 +#endif #define FPSENSOR_WAKEUP_TYPE FPSENSOR_WAKEUP_SOURCE #define FP_NOTIFY 1 #define FP_NOTIFY_TYPE FPSENSOR_FB_DRM @@ -85,6 +89,33 @@ static void fpsensor_gpio_free(fpsensor_data_t *fpsensor) #endif } +#if FPSENSOR_USE_QCOM_POWER_GPIO +static void fpsensor_power_on(fpsensor_data_t *fpsensor) +{ +// struct device *dev = &fpsensor->spi->dev; + + fpsensor_debug(ERR_LOG, "fpsensor power_gpio=%d\n", fpsensor->power_gpio); + if (fpsensor->power_gpio != 0) { + // set power on + gpio_direction_output(fpsensor->power_gpio, 1); + gpio_set_value(fpsensor->power_gpio, 1); + fpsensor_debug(ERR_LOG, "fpsensor fingerprint power on\n"); + } +} +static void fpsensor_power_off(fpsensor_data_t *fpsensor) +{ +// struct device *dev = &fpsensor->spi->dev; + + fpsensor_debug(ERR_LOG, "fpsensor power_gpio=%d\n", fpsensor->power_gpio); + if (fpsensor->power_gpio != 0) { + // set power off + gpio_direction_output(fpsensor->power_gpio, 0); + gpio_set_value(fpsensor->power_gpio, 0); + fpsensor_debug(ERR_LOG, "fpsensor fingerprint power off\n"); + } +} +#endif + static void fpsensor_irq_gpio_cfg(fpsensor_data_t *fpsensor) { int error = 0; @@ -346,9 +377,15 @@ static long fpsensor_ioctl(struct file *filp, unsigned int cmd, unsigned long ar break; case FPSENSOR_IOC_ENABLE_POWER: fpsensor_debug(INFO_LOG, "%s: FPSENSOR_IOC_ENABLE_POWER ======\n", __func__); +#if FPSENSOR_USE_QCOM_POWER_GPIO + fpsensor_power_on(fpsensor_dev); +#endif break; case FPSENSOR_IOC_DISABLE_POWER: fpsensor_debug(INFO_LOG, "%s: FPSENSOR_IOC_DISABLE_POWER ======\n", __func__); +#if FPSENSOR_USE_QCOM_POWER_GPIO + fpsensor_power_off(fpsensor_dev); +#endif break; case FPSENSOR_IOC_REMOVE: if(fpsensor_dev->device_available) {