mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-08 21:22:09 -04:00
Devon:Bringup Egistec FPS ETS_617
WHY:Bringup Egistec FPS ETS_617 WHAT:Add ETS_617 drivers Change-Id: Ibe4851fe447e1abea93222a698d5b2cdcbbff276 Reviewed-on: https://gerrit.mot.com/2228365 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: liujian <liujian24@lenovo.com> Reviewed-by: Wang Wang <wangwang1@lenovo.com> Submit-Approved: Jira Key
This commit is contained in:
parent
4b1cef88f2
commit
a508396ba3
6 changed files with 1680 additions and 0 deletions
19
drivers/input/misc/ets_bix_mmi/Android.mk
Normal file
19
drivers/input/misc/ets_bix_mmi/Android.mk
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
DLKM_DIR := motorola/kernel/modules
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
ifeq ($(DLKM_INSTALL_TO_VENDOR_OUT),true)
|
||||
ETS_FPS_MMI_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/modules/
|
||||
else
|
||||
ETS_FPS_MMI_MODULE_PATH := $(KERNEL_MODULES_OUT)
|
||||
endif
|
||||
|
||||
ifeq ($(EGIS_FPS_PANEL_NOTIFICATIONS),true)
|
||||
KERNEL_CFLAGS += CONFIG_EGIS_PANEL_NOTIFICATIONS=y
|
||||
endif
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := ets_bix_mmi.ko
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_PATH := $(ETS_FPS_MMI_MODULE_PATH)
|
||||
include $(DLKM_DIR)/AndroidKernelModule.mk
|
||||
|
||||
18
drivers/input/misc/ets_bix_mmi/Kbuild
Normal file
18
drivers/input/misc/ets_bix_mmi/Kbuild
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
# add -Wall to try to catch everything we can.
|
||||
EXTRA_CFLAGS += -Wall
|
||||
EXTRA_CFLAGS += -I$(ANDROID_BUILD_TOP)/motorola/kernel/modules/include \
|
||||
-I$(ANDROID_BUILD_TOP)/motorola/kernel/modules/drivers/input/misc/ets_bix_mmi
|
||||
|
||||
ifneq ($(filter m y,$(CONFIG_EGIS_PANEL_NOTIFICATIONS)),)
|
||||
EXTRA_CFLAGS += -DCONFIG_PANEL_NOTIFICATIONS
|
||||
endif
|
||||
|
||||
#ifneq ($(filter m y,$(CONFIG_ET721_FOD)),)
|
||||
# EXTRA_CFLAGS += -DET721_FOD
|
||||
#endif
|
||||
|
||||
ets_bix_mmi-y += etxxx_fp.o
|
||||
|
||||
|
||||
obj-m += ets_bix_mmi.o
|
||||
|
||||
10
drivers/input/misc/ets_bix_mmi/Makefile
Normal file
10
drivers/input/misc/ets_bix_mmi/Makefile
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
KERNEL_SRC ?= /lib/modules/$(shell uname -r)/build
|
||||
|
||||
all:
|
||||
$(MAKE) -C $(KERNEL_SRC) M=$(shell pwd) modules $(KBUILD_OPTIONS)
|
||||
|
||||
modules_install:
|
||||
$(MAKE) INSTALL_MOD_STRIP=1 -C $(KERNEL_SRC) M=$(shell pwd) modules_install
|
||||
|
||||
clean:
|
||||
$(MAKE) -C $(KERNEL_SRC) M=$(PWD) clean
|
||||
1416
drivers/input/misc/ets_bix_mmi/etxxx_fp.c
Executable file
1416
drivers/input/misc/ets_bix_mmi/etxxx_fp.c
Executable file
File diff suppressed because it is too large
Load diff
216
drivers/input/misc/ets_bix_mmi/etxxx_fp.h
Executable file
216
drivers/input/misc/ets_bix_mmi/etxxx_fp.h
Executable file
|
|
@ -0,0 +1,216 @@
|
|||
#ifndef _FP_LINUX_DIRVER_H_
|
||||
#define _FP_LINUX_DIRVER_H_
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/irq.h>
|
||||
#include <asm/irq.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/cdev.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/spi/spi.h>
|
||||
|
||||
#define DRIVER_VERSION "20220110"
|
||||
#define USE_PIN_CTRL
|
||||
//#define PLATFORM_SPI
|
||||
//#define MTK_PLATFORM
|
||||
//#define LSI_PLATFORM
|
||||
#define EGIS_DEBUG
|
||||
|
||||
#define DEBUG_PRINT(fmt, arg...) \
|
||||
printk(KERN_DEBUG "[EGISFP]" fmt, ##arg)
|
||||
|
||||
#define INFO_PRINT(fmt, arg...) \
|
||||
printk("[EGISFP]" fmt, ##arg)
|
||||
#define ERROR_PRINT(fmt, arg...) \
|
||||
printk(KERN_ERR "[EGISFP]" fmt, ##arg)
|
||||
|
||||
#define EGIS_FP_MAJOR 100 /* assigned */
|
||||
#define N_SPI_MINORS 32 /* ... up to 256 */
|
||||
|
||||
#define EGIS_DEV_NAME "esfp0"
|
||||
#define EGIS_INPUT_NAME "egis_fp" /*"egis_fp" */
|
||||
|
||||
#define EGIS_CHRD_DRIVER_NAME "egis_fp"
|
||||
#define EGIS_CLASS_NAME "egis_fp"
|
||||
|
||||
/* ------------------------- Opcode -------------------------------------*/
|
||||
#define FP_REGISTER_READ 0x01
|
||||
#define FP_REGISTER_WRITE 0x02
|
||||
#define FP_GET_ONE_IMG 0x03
|
||||
#define FP_SENSOR_RESET 0x04
|
||||
#define FP_POWER_ONOFF 0x05
|
||||
#define FP_SET_SPI_CLOCK 0x06
|
||||
#define FP_RESET_SET 0x07
|
||||
#define FP_WAKELOCK_ENABLE 0x08
|
||||
#define FP_WAKELOCK_DISABLE 0x09
|
||||
#define FP_GET_RESOURCE 0x11
|
||||
#define FP_FREE_RESOURCE 0x12
|
||||
|
||||
#define GET_IO_STUS 0x21
|
||||
#define SEND_NAVI_EVENT 0x31
|
||||
/* trigger signal initial routine*/
|
||||
#define INT_TRIGGER_INIT 0xa4
|
||||
/* trigger signal close routine*/
|
||||
#define INT_TRIGGER_CLOSE 0xa5
|
||||
/* read trigger status*/
|
||||
#define INT_TRIGGER_READ 0xa6
|
||||
/* polling trigger status*/
|
||||
#define INT_TRIGGER_POLLING 0xa7
|
||||
/* polling abort*/
|
||||
#define INT_TRIGGER_ABORT 0xa8
|
||||
|
||||
#define FP_FREE_GPIO 0xaf
|
||||
#define FP_SPICLK_ENABLE 0xaa
|
||||
#define FP_SPICLK_DISABLE 0xab
|
||||
#define DELETE_DEVICE_NODE 0xac
|
||||
|
||||
#define FP_SPIPIN_SETTING 0xad
|
||||
#define FP_SPIPIN_PULLLOW 0xae
|
||||
|
||||
#define FP_POWERSETUP 0xb0
|
||||
#define FP_WAKELOCK_TIMEOUT_ENABLE 0xb1
|
||||
#define FP_WAKELOCK_TIMEOUT_DISABLE 0xb2
|
||||
#define GET_SCREEN_ONOFF 0xb3
|
||||
|
||||
#define DRDY_IRQ_ENABLE 1
|
||||
#define DRDY_IRQ_DISABLE 0
|
||||
|
||||
#define EDGE_TRIGGER_FALLING 0x0
|
||||
#define EDGE_TRIGGER_RISING 0x1
|
||||
#define LEVEL_TRIGGER_LOW 0x2
|
||||
#define LEVEL_TRIGGER_HIGH 0x3
|
||||
#define WAKE_HOLD_TIME 2000 //ms
|
||||
|
||||
#define SPI_DEFAULT_SPEED (1000000 * 20) //20M
|
||||
|
||||
#define Tpwr_off_delay 50
|
||||
#define Tpwr_on_delay 3
|
||||
#define Rst_off_delay 10
|
||||
#define Rst_on_delay 3
|
||||
|
||||
#define EGIS_NAV_INPUT_UP KEY_UP
|
||||
#define EGIS_NAV_INPUT_DOWN KEY_DOWN
|
||||
#define EGIS_NAV_INPUT_LEFT KEY_LEFT
|
||||
#define EGIS_NAV_INPUT_RIGHT KEY_RIGHT
|
||||
#define EGIS_NAV_INPUT_CLICK KEY_PAGEUP
|
||||
#define EGIS_NAV_INPUT_DOUBLE_CLICK KEY_PAGEDOWN
|
||||
#define EGIS_NAV_INPUT_LONG_PRESS KEY_HOME
|
||||
#define EGIS_NAV_INPUT_FINGER_DOWN 254
|
||||
#define EGIS_NAV_INPUT_FINGER_UP KEY_MENU
|
||||
|
||||
enum egis_navi_event
|
||||
{
|
||||
NAVI_EVENT_ON,
|
||||
NAVI_EVENT_OFF,
|
||||
NAVI_EVENT_UP,
|
||||
NAVI_EVENT_DOWN,
|
||||
NAVI_EVENT_LEFT,
|
||||
NAVI_EVENT_RIGHT,
|
||||
NAVI_EVENT_CLICK,
|
||||
NAVI_EVENT_DOUBLE_CLICK,
|
||||
NAVI_EVENT_LONG_PRESS,
|
||||
};
|
||||
|
||||
struct egis_key_map_t
|
||||
{
|
||||
unsigned int type;
|
||||
unsigned int code;
|
||||
};
|
||||
|
||||
struct egisfp_interrupt_desc_t
|
||||
{
|
||||
int gpio;
|
||||
int number;
|
||||
char *name;
|
||||
int int_count;
|
||||
int irq_mode;
|
||||
struct timer_list timer;
|
||||
int finger_on;
|
||||
int detect_period;
|
||||
int detect_threshold;
|
||||
int drdy_irq_flag;
|
||||
int drdy_irq_abort;
|
||||
};
|
||||
|
||||
struct egisfp_ioctl_cmd_t
|
||||
{
|
||||
uint32_t int_mode;
|
||||
uint32_t detect_period;
|
||||
uint32_t detect_threshold;
|
||||
uint32_t power_on;
|
||||
};
|
||||
|
||||
/* ------------------------- Structure ------------------------------*/
|
||||
struct egisfp_dev_t
|
||||
{
|
||||
dev_t devt;
|
||||
spinlock_t spi_lock;
|
||||
struct platform_device *dd;
|
||||
struct list_head device_entry;
|
||||
/* buffer is NULL unless this device is open (users > 0) */
|
||||
struct mutex buf_lock;
|
||||
unsigned users;
|
||||
u8 *buffer;
|
||||
unsigned int irqPin; /* interrupt GPIO pin number */
|
||||
unsigned int rstPin; /* Reset GPIO pin number */
|
||||
unsigned int vdd_18v_Pin; /* Vdd GPIO pin number */
|
||||
unsigned int vcc_33v_Pin; /* Vcc GPIO pin number */
|
||||
struct input_dev *input_dev;
|
||||
int navigation_enable;
|
||||
int pars_dtsi_done;
|
||||
int platforminit_done;
|
||||
int gpio_irq;
|
||||
spinlock_t irq_lock;
|
||||
int request_irq_done;
|
||||
struct wakeup_source wakeup_source_fp;
|
||||
int ctrl_power;
|
||||
int pwr_by_gpio;
|
||||
int power_enable;
|
||||
int screen_onoff;
|
||||
int call_back_registered;
|
||||
struct regulator *vcc;
|
||||
struct regulator *vdd;
|
||||
uint32_t regulator_current;
|
||||
uint32_t regulator_voltage_max;
|
||||
uint32_t regulator_voltage_min;
|
||||
int clk_enabled;
|
||||
struct egisfp_interrupt_desc_t fps_ints;
|
||||
int clk_speed;
|
||||
struct pinctrl *pinctrl;
|
||||
struct pinctrl_state *spi_active;
|
||||
struct pinctrl_state *spi_default;
|
||||
struct pinctrl_state *reset_high;
|
||||
struct pinctrl_state *reset_low;
|
||||
struct pinctrl_state *vcc_high;
|
||||
struct pinctrl_state *vcc_low;
|
||||
struct pinctrl_state *irq_active;
|
||||
struct notifier_block notifier;
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)
|
||||
struct drm_panel *active_panel;
|
||||
#endif
|
||||
};
|
||||
|
||||
int egisfp_platforminit(struct egisfp_dev_t *egis_dev);
|
||||
int egisfp_platformfree(struct egisfp_dev_t *egis_dev);
|
||||
/* interrupt init */
|
||||
int egisfp_interrupt_init(struct egisfp_dev_t *egis_dev, int int_mode, int detect_period, int detect_threshold);
|
||||
/* interrupt free */
|
||||
int egisfp_interrupt_free(struct egisfp_dev_t *egis_dev);
|
||||
void egisfp_interrupt_abort(struct egisfp_dev_t *egis_dev);
|
||||
unsigned int egisfp_interrupt_poll(struct file *file, struct poll_table_struct *wait);
|
||||
int egisfp_parse_dt(struct egisfp_dev_t *egis_dev);
|
||||
int do_egisfp_power_onoff(struct egisfp_dev_t *egis_dev, struct egisfp_ioctl_cmd_t *ioctl_data);
|
||||
int do_egisfp_reset(struct egisfp_dev_t *egis_dev);
|
||||
int do_egisfp_reset_set(struct egisfp_dev_t *egis_dev, int reset_high_low);
|
||||
int egisfp_check_ioctl_permission(struct egisfp_dev_t *egis_dev, unsigned int cmd);
|
||||
int egisfp_set_screen_onoff(int on);
|
||||
#endif
|
||||
1
drivers/input/misc/ets_bix_mmi/generator_condition.txt
Executable file
1
drivers/input/misc/ets_bix_mmi/generator_condition.txt
Executable file
|
|
@ -0,0 +1 @@
|
|||
lenovo;EC617;ET6XX;QCOM_PLATFORM;USE_PIN_CTRL;EGIS_DEBUG;CONFIG_DRM
|
||||
Loading…
Reference in a new issue