| /* |
| * |
| * FocalTech TouchScreen driver. |
| * |
| * Copyright (c) 2010-2016, Focaltech Ltd. All rights reserved. |
| * |
| * This software is licensed under the terms of the GNU General Public |
| * License version 2, as published by the Free Software Foundation, and |
| * may be copied, distributed, and modified under those terms. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| */ |
| /***************************************************************************** |
| * |
| * File Name: focaltech_core.h |
| |
| * Author: Focaltech Driver Team |
| * |
| * Created: 2016-08-08 |
| * |
| * Abstract: |
| * |
| * Reference: |
| * |
| *****************************************************************************/ |
| |
| #ifndef __LINUX_FOCALTECH_CORE_H__ |
| #define __LINUX_FOCALTECH_CORE_H__ |
| /***************************************************************************** |
| * Included header files |
| *****************************************************************************/ |
| #include <linux/i2c.h> |
| #include <linux/input.h> |
| #include <linux/input/mt.h> |
| #include <linux/slab.h> |
| #include <linux/interrupt.h> |
| #include <linux/delay.h> |
| #include <linux/kernel.h> |
| #include <linux/module.h> |
| #include <linux/gpio.h> |
| #include <linux/of_gpio.h> |
| #include <linux/regulator/consumer.h> |
| #include <linux/firmware.h> |
| #include <linux/debugfs.h> |
| #include <linux/mutex.h> |
| #include <linux/wait.h> |
| #include <linux/time.h> |
| #include <linux/workqueue.h> |
| #include <linux/fs.h> |
| #include <linux/proc_fs.h> |
| #include <asm/uaccess.h> |
| #include <linux/version.h> |
| #include <linux/types.h> |
| #include <linux/sched.h> |
| #include <linux/kthread.h> |
| #include <linux/init.h> |
| #include <linux/cdev.h> |
| #include <linux/device.h> |
| #include <linux/mount.h> |
| #include <linux/netdevice.h> |
| #include <linux/unistd.h> |
| #include <linux/ioctl.h> |
| #include "focaltech_common.h" |
| |
| /***************************************************************************** |
| * Private constant and macro definitions using #define |
| *****************************************************************************/ |
| #define LEN_FLASH_ECC_MAX 0xFFFE |
| |
| #define FTS_WORKQUEUE_NAME "fts_wq" |
| |
| #define FTS_MAX_POINTS 10 |
| #define FTS_KEY_WIDTH 50 |
| #define FTS_ONE_TCH_LEN 6 |
| #define POINT_READ_BUF (3 + FTS_ONE_TCH_LEN * FTS_MAX_POINTS) |
| |
| #define FTS_MAX_ID 0x0F |
| #define FTS_TOUCH_X_H_POS 3 |
| #define FTS_TOUCH_X_L_POS 4 |
| #define FTS_TOUCH_Y_H_POS 5 |
| #define FTS_TOUCH_Y_L_POS 6 |
| #define FTS_TOUCH_PRE_POS 7 |
| #define FTS_TOUCH_AREA_POS 8 |
| #define FTS_TOUCH_POINT_NUM 2 |
| #define FTS_TOUCH_EVENT_POS 3 |
| #define FTS_TOUCH_ID_POS 5 |
| #define FTS_COORDS_ARR_SIZE 4 |
| |
| #define FTS_TOUCH_DOWN 0 |
| #define FTS_TOUCH_UP 1 |
| #define FTS_TOUCH_CONTACT 2 |
| |
| #define FTS_SYSFS_ECHO_ON(buf) ((strnicmp(buf, "1", 1) == 0) || \ |
| (strnicmp(buf, "on", 2) == 0)) |
| #define FTS_SYSFS_ECHO_OFF(buf) ((strnicmp(buf, "0", 1) == 0) || \ |
| (strnicmp(buf, "off", 3) == 0)) |
| |
| /***************************************************************************** |
| * Private enumerations, structures and unions using typedef |
| *****************************************************************************/ |
| |
| struct fts_ts_platform_data { |
| u32 fts_chip_type; |
| u32 irq_gpio; |
| u32 irq_gpio_flags; |
| u32 reset_gpio; |
| u32 reset_gpio_flags; |
| bool have_key; |
| u32 key_number; |
| u32 keys[4]; |
| u32 key_y_coord; |
| u32 key_x_coords[4]; |
| u32 x_max; |
| u32 y_max; |
| u32 x_min; |
| u32 y_min; |
| u32 max_touch_number; |
| |
| bool swap; |
| bool scaling_down_half; |
| }; |
| |
| struct ts_event { |
| u16 au16_x[FTS_MAX_POINTS]; /*x coordinate */ |
| u16 au16_y[FTS_MAX_POINTS]; /*y coordinate */ |
| u16 pressure[FTS_MAX_POINTS]; |
| /* touch event: 0 -- down; 1-- up; 2 -- contact */ |
| u8 au8_touch_event[FTS_MAX_POINTS]; |
| u8 au8_finger_id[FTS_MAX_POINTS]; /*touch ID */ |
| u8 area[FTS_MAX_POINTS]; |
| u8 touch_point; |
| u8 point_num; |
| }; |
| |
| struct fts_ts_data { |
| struct i2c_client *client; |
| struct input_dev *input_dev; |
| struct ts_event event; |
| const struct fts_ts_platform_data *pdata; |
| #if FTS_PSENSOR_EN |
| struct fts_psensor_platform_data *psensor_pdata; |
| #endif |
| struct work_struct touch_event_work; |
| struct workqueue_struct *ts_workqueue; |
| struct regulator *vdd; |
| struct regulator *vcc_i2c; |
| spinlock_t irq_lock; |
| u16 addr; |
| bool suspended; |
| u8 fw_ver[3]; |
| u8 fw_vendor_id; |
| int touchs; |
| int irq_disable; |
| |
| #if defined(CONFIG_FB) |
| struct notifier_block fb_notif; |
| #elif defined(CONFIG_HAS_EARLYSUSPEND) |
| struct early_suspend early_suspend; |
| #endif |
| }; |
| |
| #if FTS_PSENSOR_EN |
| struct fts_psensor_platform_data { |
| struct input_dev *input_psensor_dev; |
| struct sensors_classdev ps_cdev; |
| int tp_psensor_opened; |
| char tp_psensor_data; /* 0 near, 1 far */ |
| struct fts_ts_data *data; |
| }; |
| |
| int fts_sensor_init(struct fts_ts_data *data); |
| int fts_sensor_read_data(struct fts_ts_data *data); |
| int fts_sensor_suspend(struct fts_ts_data *data); |
| int fts_sensor_resume(struct fts_ts_data *data); |
| int fts_sensor_remove(struct fts_ts_data *data); |
| #endif |
| |
| /***************************************************************************** |
| * Static variables |
| *****************************************************************************/ |
| extern struct i2c_client *fts_i2c_client; |
| extern struct fts_ts_data *fts_wq_data; |
| extern struct input_dev *fts_input_dev; |
| |
| #endif /* __LINUX_FOCALTECH_CORE_H__ */ |