diff options
author | Srikant Patnaik | 2015-01-11 12:28:04 +0530 |
---|---|---|
committer | Srikant Patnaik | 2015-01-11 12:28:04 +0530 |
commit | 871480933a1c28f8a9fed4c4d34d06c439a7a422 (patch) | |
tree | 8718f573808810c2a1e8cb8fb6ac469093ca2784 /ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/zet6221_i2c.c | |
parent | 9d40ac5867b9aefe0722bc1f110b965ff294d30d (diff) | |
download | FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.tar.gz FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.tar.bz2 FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.zip |
Moved, renamed, and deleted files
The original directory structure was scattered and unorganized.
Changes are basically to make it look like kernel structure.
Diffstat (limited to 'ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/zet6221_i2c.c')
-rwxr-xr-x | ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/zet6221_i2c.c | 2786 |
1 files changed, 0 insertions, 2786 deletions
diff --git a/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/zet6221_i2c.c b/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/zet6221_i2c.c deleted file mode 100755 index 31818510..00000000 --- a/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/zet6221_i2c.c +++ /dev/null @@ -1,2786 +0,0 @@ -/* drivers/input/touchscreen/zet6221_i2c.c - * 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. - * ZEITEC Semiconductor Co., Ltd - * Tel: +886-3-579-0045 - * Fax: +886-3-579-9960 - * http://www.zeitecsemi.com - */ - -#include <linux/kernel.h> -#include <linux/module.h> -#include <linux/interrupt.h> -#include <linux/input.h> -#include <linux/platform_device.h> -#include <linux/jiffies.h> -#include <linux/io.h> -#include <linux/kthread.h> -#include <linux/i2c.h> -#include <linux/gpio.h> -#include <linux/delay.h> -#include <linux/wakelock.h> -#ifdef CONFIG_HAS_EARLYSUSPEND -#include <linux/earlysuspend.h> -#endif -#include <linux/slab.h> -#include <linux/irq.h> -#include <linux/errno.h> -#include <linux/fs.h> -#include <linux/file.h> -#include <asm/uaccess.h> - -#include <linux/input/mt.h> -#include "wmt_ts.h" -#include <linux/power/wmt_battery.h> -#include "../../../video/backlight/wmt_bl.h" - - -//fw update. -//#include "zet6221_fw.h" - -/* -------------- global variable definition -----------*/ -#define _MACH_MSM_TOUCH_H_ - -#define ZET_TS_ID_NAME "zet6221-ts" - -#define MJ5_TS_NAME "touch_zet6221" - -//#define TS_INT_GPIO S3C64XX_GPN(9) /*s3c6410*/ -//#define TS1_INT_GPIO AT91_PIN_PB17 /*AT91SAM9G45 external*/ -//#define TS1_INT_GPIO AT91_PIN_PA27 /*AT91SAM9G45 internal*/ -//#define TS_RST_GPIO S3C64XX_GPN(10) - -//#define MT_TYPE_B - -#define TS_RST_GPIO -#define X_MAX 800 //1024 -#define Y_MAX 480 //576 -#define FINGER_NUMBER 5 -#define KEY_NUMBER 3 //0 -//#define P_MAX 1 -#define P_MAX 255 //modify 2013-1-1 -#define D_POLLING_TIME 25000 -#define U_POLLING_TIME 25000 -#define S_POLLING_TIME 100 -#define REPORT_POLLING_TIME 3 -#define RETRY_DOWNLOAD_TIMES 2 - -#define MAX_KEY_NUMBER 8 -#define MAX_FINGER_NUMBER 16 -#define TRUE 1 -#define FALSE 0 - -//#define debug_mode 1 -//#define DPRINTK(fmt,args...) do { if (debug_mode) printk(KERN_EMERG "[%s][%d] "fmt"\n", __FUNCTION__, __LINE__, ##args);} while(0) - -//#define TRANSLATE_ENABLE 1 -#define TOPRIGHT 0 -#define TOPLEFT 1 -#define BOTTOMRIGHT 2 -#define BOTTOMLEFT 3 -#define ORIGIN BOTTOMRIGHT - -#define TIME_CHECK_CHARGE 3000 - -#define I2C_MAJOR 126 -#define I2C_MINORS 256 - - -///=============================================================================================/// -/// IOCTL control Definition -///=============================================================================================/// -#define ZET_IOCTL_CMD_FLASH_READ (20) -#define ZET_IOCTL_CMD_FLASH_WRITE (21) -#define ZET_IOCTL_CMD_RST (22) -#define ZET_IOCTL_CMD_RST_HIGH (23) -#define ZET_IOCTL_CMD_RST_LOW (24) - -#define ZET_IOCTL_CMD_DYNAMIC (25) - -#define ZET_IOCTL_CMD_FW_FILE_PATH_GET (26) -#define ZET_IOCTL_CMD_FW_FILE_PATH_SET (27) - -#define ZET_IOCTL_CMD_MDEV (28) -#define ZET_IOCTL_CMD_MDEV_GET (29) - -#define ZET_IOCTL_CMD_TRAN_TYPE_PATH_GET (30) -#define ZET_IOCTL_CMD_TRAN_TYPE_PATH_SET (31) - -#define ZET_IOCTL_CMD_IDEV (32) -#define ZET_IOCTL_CMD_IDEV_GET (33) - -#define ZET_IOCTL_CMD_MBASE (34) -#define ZET_IOCTL_CMD_MBASE_GET (35) - -#define ZET_IOCTL_CMD_INFO_SET (36) -#define ZET_IOCTL_CMD_INFO_GET (37) - -#define ZET_IOCTL_CMD_TRACE_X_SET (38) -#define ZET_IOCTL_CMD_TRACE_X_GET (39) - -#define ZET_IOCTL_CMD_TRACE_Y_SET (40) -#define ZET_IOCTL_CMD_TRACE_Y_GET (41) - -#define ZET_IOCTL_CMD_IBASE (42) -#define ZET_IOCTL_CMD_IBASE_GET (43) - -#define ZET_IOCTL_CMD_DRIVER_VER_GET (44) -#define ZET_IOCTL_CMD_MBASE_EXTERN_GET (45) - -#define IOCTL_MAX_BUF_SIZE (1024) - -///----------------------------------------------------/// -/// IOCTL ACTION -///----------------------------------------------------/// -#define IOCTL_ACTION_NONE (0) -#define IOCTL_ACTION_FLASH_DUMP (1<<0) - -static int ioctl_action = IOCTL_ACTION_NONE; - -///=============================================================================================/// -/// Transfer type -///=============================================================================================/// -#define TRAN_TYPE_DYNAMIC (0x00) -#define TRAN_TYPE_MUTUAL_SCAN_BASE (0x01) -#define TRAN_TYPE_MUTUAL_SCAN_DEV (0x02) -#define TRAN_TYPE_INIT_SCAN_BASE (0x03) -#define TRAN_TYPE_INIT_SCAN_DEV (0x04) -#define TRAN_TYPE_KEY_MUTUAL_SCAN_BASE (0x05) -#define TRAN_TYPE_KEY_MUTUAL_SCAN_DEV (0x06) -#define TRAN_TYPE_KEY_DATA (0x07) -#define TRAN_TYPE_MTK_TYPE (0x0A) -#define TRAN_TYPE_FOCAL_TYPE (0x0B) - -///=============================================================================================/// -/// TP Trace -///=============================================================================================/// -#define TP_DEFAULT_ROW (10) -#define TP_DEFAULT_COL (15) - -#define DRIVER_VERSION "$Revision: 44 $" -//static char const *revision="$Revision: 44 $"; - -///=============================================================================================/// -/// Macro Definition -///=============================================================================================/// -#define MAX_FLASH_BUF_SIZE (0x10000) - -///---------------------------------------------------------------------------------/// -/// 18. IOCTRL Debug -///---------------------------------------------------------------------------------/// -#define FEATURE_IDEV_OUT_ENABLE -#define FEATURE_MBASE_OUT_ENABLE -#define FEATURE_MDEV_OUT_ENABLE -#define FEATURE_INFO_OUT_EANBLE -#define FEATURE_IBASE_OUT_ENABLE - - - -///-------------------------------------/// -/// firmware save / load -///-------------------------------------/// -u32 data_offset = 0; -struct inode *inode = NULL; -mm_segment_t old_fs; - -char driver_version[128]; - -//#define FW_FILE_NAME "/vendor/modules/zet62xx.bin" -char fw_file_name[128]; -///-------------------------------------/// -/// Transmit Type Mode Path parameters -///-------------------------------------/// -/// External SD-Card could be -/// "/mnt/sdcard/" -/// "/mnt/extsd/" -///-------------------------------------/// - -// It should be the path where adb tools can push files in -#define TRAN_MODE_FILE_PATH "/data/local/tmp/" -char tran_type_mode_file_name[128]; -u8 *tran_data = NULL; - -///-------------------------------------/// -/// Mutual Dev Mode parameters -///-------------------------------------/// -/// External SD-Card could be -/// "/mnt/sdcard/zetmdev" -/// "/mnt/extsd/zetmdev" -///-------------------------------------/// -#ifdef FEATURE_MDEV_OUT_ENABLE - #define MDEV_FILE_NAME "zetmdev" - #define MDEV_MAX_FILE_ID (10) - #define MDEV_MAX_DATA_SIZE (2048) -///-------------------------------------/// -/// mutual dev variables -///-------------------------------------/// - u8 *mdev_data = NULL; - int mdev_file_id = 0; -#endif ///< FEATURE_MDEV_OUT_ENABLE - -///-------------------------------------/// -/// Initial Base Mode parameters -///-------------------------------------/// -/// External SD-Card could be -/// "/mnt/sdcard/zetibase" -/// "/mnt/extsd/zetibase" -///-------------------------------------/// -#ifdef FEATURE_IBASE_OUT_ENABLE - #define IBASE_FILE_NAME "zetibase" - #define IBASE_MAX_FILE_ID (10) - #define IBASE_MAX_DATA_SIZE (512) - -///-------------------------------------/// -/// initial base variables -///-------------------------------------/// - u8 *ibase_data = NULL; - int ibase_file_id = 0; -#endif ///< FEATURE_IBASE_OUT_ENABLE - -///-------------------------------------/// -/// Initial Dev Mode parameters -///-------------------------------------/// -/// External SD-Card could be -/// "/mnt/sdcard/zetidev" -/// "/mnt/extsd/zetidev" -///-------------------------------------/// -#ifdef FEATURE_IDEV_OUT_ENABLE - #define IDEV_FILE_NAME "zetidev" - #define IDEV_MAX_FILE_ID (10) - #define IDEV_MAX_DATA_SIZE (512) - -///-------------------------------------/// -/// initial dev variables -///-------------------------------------/// - u8 *idev_data = NULL; - int idev_file_id = 0; -#endif ///< FEATURE_IDEV_OUT_ENABLE - -///-------------------------------------/// -/// Mutual Base Mode parameters -///-------------------------------------/// -/// External SD-Card could be -/// "/mnt/sdcard/zetmbase" -/// "/mnt/extsd/zetmbase" -///-------------------------------------/// -#ifdef FEATURE_MBASE_OUT_ENABLE - #define MBASE_FILE_NAME "zetmbase" - #define MBASE_MAX_FILE_ID (10) - #define MBASE_MAX_DATA_SIZE (2048) - -///-------------------------------------/// -/// mutual base variables -///-------------------------------------/// - u8 *mbase_data = NULL; - int mbase_file_id = 0; -#endif ///< FEATURE_MBASE_OUT_ENABLE - -///-------------------------------------/// -/// infomation variables -///-------------------------------------/// -#ifdef FEATURE_INFO_OUT_EANBLE - #define INFO_MAX_DATA_SIZE (64) - #define INFO_DATA_SIZE (17) - #define ZET6221_INFO (0x00) - #define ZET6231_INFO (0x0B) - #define ZET6223_INFO (0x0D) - #define ZET6251_INFO (0x0C) - #define UNKNOW_INFO (0xFF) - u8 *info_data = NULL; -#endif ///< FEATURE_INFO_OUT_EANBLE -///-------------------------------------/// -/// Default transfer type -///-------------------------------------/// -u8 transfer_type = TRAN_TYPE_DYNAMIC; - -///-------------------------------------/// -/// Default TP TRACE -///-------------------------------------/// -int row = TP_DEFAULT_ROW; -int col = TP_DEFAULT_COL; - -struct msm_ts_platform_data { - unsigned int x_max; - unsigned int y_max; - unsigned int pressure_max; -}; - -struct zet6221_tsdrv { - struct i2c_client *i2c_ts; - struct work_struct work1; - struct input_dev *input; - struct timer_list polling_timer; - struct delayed_work work; // for polling - struct workqueue_struct *queue; -#ifdef CONFIG_HAS_EARLYSUSPEND - struct early_suspend early_suspend; -#endif - unsigned int gpio; /* GPIO used for interrupt of TS1*/ - unsigned int irq; - unsigned int x_max; - unsigned int y_max; - unsigned int pressure_max; -}; - -struct i2c_dev -{ - struct list_head list; - struct i2c_adapter *adap; - struct device *dev; -}; - -static struct i2c_dev *zet_i2c_dev; -static struct class *i2c_dev_class; -static LIST_HEAD (i2c_dev_list); -static DEFINE_SPINLOCK(i2c_dev_list_lock); - -struct zet6221_tsdrv * l_ts = NULL; -static int l_suspend = 0; // 1:suspend, 0:normal state - -//static int resetCount = 0; //albert++ 20120807 - - -//static u16 polling_time = S_POLLING_TIME; - -static int l_powermode = -1; -static struct mutex i2c_mutex; -static struct wake_lock downloadWakeLock; - - -//static int __devinit zet6221_ts_probe(struct i2c_client *client, const struct i2c_device_id *id); -//static int __devexit zet6221_ts_remove(struct i2c_client *dev); -extern int register_bl_notifier(struct notifier_block *nb); - -extern int unregister_bl_notifier(struct notifier_block *nb); - -extern int zet6221_downloader( struct i2c_client *client/*, unsigned short ver, unsigned char * data */); -extern int zet622x_resume_downloader(struct i2c_client *client); -extern u8 zet6221_ts_version(void); -extern u8 zet6221_ts_get_report_mode_t(struct i2c_client *client); -extern u8 zet622x_ts_option(struct i2c_client *client); -extern int zet6221_load_fw(void); -extern int zet6221_free_fwmem(void); - -void zet6221_ts_charger_mode_disable(void); -void zet6221_ts_charger_mode(void); -static int zet_fw_size(void); -static void zet_fw_save(char *file_name); -static void zet_fw_load(char *file_name); -static void zet_fw_init(void); -#ifdef FEATURE_MDEV_OUT_ENABLE -static void zet_mdev_save(char *file_name); -#endif ///< FEATURE_MDEV_OUT_ENABLE -#ifdef FEATURE_IDEV_OUT_ENABLE -static void zet_idev_save(char *file_name); -#endif ///< FEATURE_IDEV_OUT_ENABLE -#ifdef FEATURE_IBASE_OUT_ENABLE -static void zet_ibase_save(char *file_name); -#endif ///< FEATURE_IBASE_OUT_ENABLE -#ifdef FEATURE_MBASE_OUT_ENABLE -static void zet_mbase_save(char *file_name); -#endif ///< FEATURE_MBASE_OUT_ENABLE -static void zet_information_save(char *file_name); - -static struct task_struct *resume_download_task; - - - -//static int filterCount = 0; -//static u32 filterX[MAX_FINGER_NUMBER][2], filterY[MAX_FINGER_NUMBER][2]; - -//static u8 key_menu_pressed = 0x1; -//static u8 key_back_pressed = 0x1; -//static u8 key_search_pressed = 0x1; - -static u16 ResolutionX=X_MAX; -static u16 ResolutionY=Y_MAX; -static u16 FingerNum=0; -static u16 KeyNum=0; -static int bufLength=0; -static u8 xyExchange=0; -static u16 inChargerMode = 0; -static struct i2c_client *this_client; -struct workqueue_struct *ts_wq = NULL; -static int l_tskey[4][2] = { - {KEY_BACK,0}, - {KEY_MENU,0}, - {KEY_HOME,0}, - {KEY_SEARCH,0}, -}; - -u8 pc[8]; -// {IC Model, FW Version, FW version,Codebase Type=0x08, Customer ID, Project ID, Config Board No, Config Serial No} - -//Touch Screen -/*static const struct i2c_device_id zet6221_ts_idtable[] = { - { ZET_TS_ID_NAME, 0 }, - { } -}; - -static struct i2c_driver zet6221_ts_driver = { - .driver = { - .owner = THIS_MODULE, - .name = ZET_TS_ID_NAME, - }, - .probe = zet6221_ts_probe, - .remove = __devexit_p(zet6221_ts_remove), - .id_table = zet6221_ts_idtable, -}; -*/ - -void zet6221_set_tskey(int index,int key) -{ - l_tskey[index][0] = key; -} - - -void check_charger(void) -{ - mutex_lock(&i2c_mutex); - if (!wmt_charger_is_dc_plugin()) - { - klog("disable_mode\n"); - zet6221_ts_charger_mode_disable(); - } else { - klog("charge mode\n"); - zet6221_ts_charger_mode(); - } - mutex_unlock(&i2c_mutex); - l_powermode = wmt_charger_is_dc_plugin(); -} - - -void check_charger_polling(void) -{ - if(l_suspend == 1) - { - return; - } - - if (wmt_charger_is_dc_plugin() != l_powermode) - { - check_charger(); - } - - ///-------------------------------------------------------------------/// - /// IOCTL Action - ///-------------------------------------------------------------------/// - if(ioctl_action & IOCTL_ACTION_FLASH_DUMP) - { - printk("[ZET]: IOCTL_ACTION: Dump flash\n"); - zet_fw_save(fw_file_name); - ioctl_action &= ~IOCTL_ACTION_FLASH_DUMP; - } - - return; -} - - - -//extern unsigned int wmt_bat_is_batterypower(void); -/*********************************************************************** - [function]: - callback: Timer Function if there is no interrupt fuction; - [parameters]: - arg[in]: arguments; - [return]: - NULL; -************************************************************************/ - -static void polling_timer_func(struct work_struct *work) -{ - struct zet6221_tsdrv *ts = l_ts; - //schedule_work(&ts->work1); - //queue_work(ts_wq,&ts->work1); - //dbg("check mode!\n"); -/* - if (wmt_bat_is_batterypower() != l_powermode) - { - mutex_lock(&i2c_mutex); - if (wmt_bat_is_batterypower()) - { - klog("disable_mode\n"); - zet6221_ts_charger_mode_disable(); - } else { - klog("charge mode\n"); - zet6221_ts_charger_mode(); - } - mutex_unlock(&i2c_mutex); - l_powermode = wmt_bat_is_batterypower(); - } -*/ - - check_charger_polling(); - queue_delayed_work(ts->queue, &ts->work, msecs_to_jiffies(TIME_CHECK_CHARGE)); - - - //mod_timer(&ts->polling_timer,jiffies + msecs_to_jiffies(TIME_CHECK_CHARGE)); -} - - - -///********************************************************************** -/// [function]: zet622x_i2c_get_free_dev -/// [parameters]: adap -/// [return]: void -///********************************************************************** -static struct i2c_dev *zet622x_i2c_get_free_dev(struct i2c_adapter *adap) -{ - struct i2c_dev *i2c_dev; - - if (adap->nr >= I2C_MINORS) - { - printk("[ZET] : i2c-dev:out of device minors (%d) \n",adap->nr); - return ERR_PTR (-ENODEV); - } - - i2c_dev = kzalloc(sizeof(*i2c_dev), GFP_KERNEL); - if (!i2c_dev) - { - return ERR_PTR(-ENOMEM); - } - i2c_dev->adap = adap; - - spin_lock(&i2c_dev_list_lock); - list_add_tail(&i2c_dev->list, &i2c_dev_list); - spin_unlock(&i2c_dev_list_lock); - - return i2c_dev; -} - -///********************************************************************** -/// [function]: zet622x_i2c_dev_get_by_minor -/// [parameters]: index -/// [return]: i2c_dev -///********************************************************************** -static struct i2c_dev *zet622x_i2c_dev_get_by_minor(unsigned index) -{ - struct i2c_dev *i2c_dev; - spin_lock(&i2c_dev_list_lock); - - list_for_each_entry(i2c_dev, &i2c_dev_list, list) - { - printk(" [ZET] : line = %d ,i2c_dev->adapt->nr = %d,index = %d.\n",__LINE__,i2c_dev->adap->nr,index); - if(i2c_dev->adap->nr == index) - { - goto LABEL_FOUND; - } - } - i2c_dev = NULL; - -LABEL_FOUND: - spin_unlock(&i2c_dev_list_lock); - - return i2c_dev ; -} - - - -//extern int wmt_i2c_xfer_continue_if_4(struct i2c_msg *msg, unsigned int num,int bus_id); -/*********************************************************************** - [function]: - callback: read data by i2c interface; - [parameters]: - client[in]: struct i2c_client �represent an I2C slave device; - data [out]: data buffer to read; - length[in]: data length to read; - [return]: - Returns negative errno, else the number of messages executed; -************************************************************************/ -int zet6221_i2c_read_tsdata(struct i2c_client *client, u8 *data, u8 length) -{ - struct i2c_msg msg; - msg.addr = client->addr; - msg.flags = I2C_M_RD; - msg.len = length; - msg.buf = data; - return i2c_transfer(client->adapter,&msg, 1); - - /*int rc = 0; - - memset(data, 0, length); - rc = i2c_master_recv(client, data, length); - if (rc <= 0) - { - errlog("error!\n"); - return -EINVAL; - } else if (rc != length) - { - dbg("want:%d,real:%d\n", length, rc); - } - return rc;*/ -} - -/*********************************************************************** - [function]: - callback: write data by i2c interface; - [parameters]: - client[in]: struct i2c_client �represent an I2C slave device; - data [out]: data buffer to write; - length[in]: data length to write; - [return]: - Returns negative errno, else the number of messages executed; -************************************************************************/ -int zet6221_i2c_write_tsdata(struct i2c_client *client, u8 *data, u8 length) -{ - struct i2c_msg msg; - msg.addr = client->addr; - msg.flags = 0; - msg.len = length; - msg.buf = data; - return i2c_transfer(client->adapter,&msg, 1); - - /*int ret = i2c_master_recv(client, data, length); - if (ret <= 0) - { - errlog("error!\n"); - } - return ret; - */ -} - -/*********************************************************************** - [function]: - callback: coordinate traslating; - [parameters]: - px[out]: value of X axis; - py[out]: value of Y axis; - p [in]: pressed of released status of fingers; - [return]: - NULL; -************************************************************************/ -void touch_coordinate_traslating(u32 *px, u32 *py, u8 p) -{ - int i; - u8 pressure; - - #if ORIGIN == TOPRIGHT - for(i=0;i<MAX_FINGER_NUMBER;i++){ - pressure = (p >> (MAX_FINGER_NUMBER-i-1)) & 0x1; - if(pressure) - { - px[i] = X_MAX - px[i]; - } - } - #elif ORIGIN == BOTTOMRIGHT - for(i=0;i<MAX_FINGER_NUMBER;i++){ - pressure = (p >> (MAX_FINGER_NUMBER-i-1)) & 0x1; - if(pressure) - { - px[i] = X_MAX - px[i]; - py[i] = Y_MAX - py[i]; - } - } - #elif ORIGIN == BOTTOMLEFT - for(i=0;i<MAX_FINGER_NUMBER;i++){ - pressure = (p >> (MAX_FINGER_NUMBER-i-1)) & 0x1; - if(pressure) - { - py[i] = Y_MAX - py[i]; - } - } - #endif -} - -/*********************************************************************** - [function]: - callback: reset function; - [parameters]: - void; - [return]: - void; -************************************************************************/ -void ctp_reset(void) -{ -#if defined(TS_RST_GPIO) - //reset mcu - /* gpio_direction_output(TS_RST_GPIO, 1); - msleep(1); - gpio_direction_output(TS_RST_GPIO, 0); - msleep(10); - gpio_direction_output(TS_RST_GPIO, 1); - msleep(20);*/ - wmt_rst_output(1); - msleep(1); - wmt_rst_output(0); - msleep(10); - wmt_rst_output(1); - msleep(5); - dbg("has done\n"); -#else - u8 ts_reset_cmd[1] = {0xb0}; - zet6221_i2c_write_tsdata(this_client, ts_reset_cmd, 1); -#endif - -} - - -///********************************************************************** -/// [function]: zet622x_ts_parse_mutual_dev -/// [parameters]: client -/// [return]: u8 -///********************************************************************** -#ifdef FEATURE_MDEV_OUT_ENABLE -u8 zet622x_ts_parse_mutual_dev(struct i2c_client *client) -{ - int mdev_packet_size = (row+2) * (col + 2); - int ret = 0; - int idx = 0; - int len = mdev_packet_size; - char mdev_file_name_out[128]; - - int step_size = col + 2; - - while(len > 0) - { - if(len < step_size) - { - step_size = len; - } - - ret = zet6221_i2c_read_tsdata(client, &tran_data[idx], step_size); - len -= step_size; - idx += step_size; - } - - sprintf(mdev_file_name_out, "%s%s%02d.bin", tran_type_mode_file_name, MDEV_FILE_NAME, mdev_file_id); - zet_mdev_save(mdev_file_name_out); - mdev_file_id = (mdev_file_id +1)% (MDEV_MAX_FILE_ID); - return ret; -} -#endif ///< FEATURE_MDEV_OUT_ENABLE - -///********************************************************************** -/// [function]: zet622x_ts_parse_initial_base -/// [parameters]: client -/// [return]: u8 -///********************************************************************** -#ifdef FEATURE_IBASE_OUT_ENABLE -u8 zet622x_ts_parse_initial_base(struct i2c_client *client) -{ - int ibase_packet_size = (row + col) * 2; - int ret = 0; - int idx = 0; - int len = ibase_packet_size; - char ibase_file_name_out[128]; - - int step_size = ibase_packet_size; - - while(len > 0) - { - ret = zet6221_i2c_read_tsdata(client, &tran_data[idx], step_size); - len -= step_size; - } - sprintf(ibase_file_name_out, "%s%s%02d.bin", tran_type_mode_file_name, IBASE_FILE_NAME, ibase_file_id); - zet_ibase_save(ibase_file_name_out); - ibase_file_id = (ibase_file_id +1)% (IBASE_MAX_FILE_ID); - return ret; -} -#endif ///< FEATURE_IBASE_OUT_ENABLE - -///********************************************************************** -/// [function]: zet622x_ts_parse_initial_dev -/// [parameters]: client -/// [return]: u8 -///********************************************************************** -#ifdef FEATURE_IDEV_OUT_ENABLE -u8 zet622x_ts_parse_initial_dev(struct i2c_client *client) -{ - int idev_packet_size = (row + col); - int ret = 0; - int idx = 0; - int len = idev_packet_size; - char idev_file_name_out[128]; - - int step_size = idev_packet_size; - - while(len > 0) - { - ret = zet6221_i2c_read_tsdata(client, &tran_data[idx], step_size); - len -= step_size; - } - sprintf(idev_file_name_out, "%s%s%02d.bin", tran_type_mode_file_name, IDEV_FILE_NAME, idev_file_id); - zet_idev_save(idev_file_name_out); - idev_file_id = (idev_file_id +1)% (IDEV_MAX_FILE_ID); - return ret; -} -#endif ///< FEATURE_IDEV_OUT_ENABLE - -///********************************************************************** -/// [function]: zet622x_ts_parse_mutual_base -/// [parameters]: client -/// [return]: u8 -///********************************************************************** -#ifdef FEATURE_MBASE_OUT_ENABLE -u8 zet622x_ts_parse_mutual_base(struct i2c_client *client) -{ - int mbase_packet_size = (row * col * 2); - int ret = 0; - int idx = 0; - int len = mbase_packet_size; - char mbase_file_name_out[128]; - - int step_size = col*2; - - while(len > 0) - { - if(len < step_size) - { - step_size = len; - } - - ret = zet6221_i2c_read_tsdata(client, &tran_data[idx], step_size); - len -= step_size; - idx += step_size; - } - sprintf(mbase_file_name_out, "%s%s%02d.bin",tran_type_mode_file_name, MBASE_FILE_NAME, mbase_file_id); - zet_mbase_save(mbase_file_name_out); - mbase_file_id = (mbase_file_id +1)% (MBASE_MAX_FILE_ID); - return ret; -} -#endif ///< FEATURE_MBASE_OUT_ENABLE - -/*********************************************************************** - [function]: - callback: read finger information from TP; - [parameters]: - client[in]: struct i2c_client �represent an I2C slave device; - x[out]: values of X axis; - y[out]: values of Y axis; - z[out]: values of Z axis; - pr[out]: pressed of released status of fingers; - ky[out]: pressed of released status of keys; - [return]: - Packet ID; -************************************************************************/ -u8 zet6221_ts_get_xy_from_panel(struct i2c_client *client, u32 *x, u32 *y, u32 *z, u32 *pr, u32 *ky) -{ - u8 ts_data[70]; - int ret; - int i; - - memset(ts_data,0,70); - - ret=zet6221_i2c_read_tsdata(client, ts_data, bufLength); - - *pr = ts_data[1]; - *pr = (*pr << 8) | ts_data[2]; - - for(i=0;i<FingerNum;i++) - { - x[i]=(u8)((ts_data[3+4*i])>>4)*256 + (u8)ts_data[(3+4*i)+1]; - y[i]=(u8)((ts_data[3+4*i]) & 0x0f)*256 + (u8)ts_data[(3+4*i)+2]; - z[i]=(u8)((ts_data[(3+4*i)+3]) & 0x0f); - } - - //if key enable - if(KeyNum > 0) - *ky = ts_data[3+4*FingerNum]; - - return ts_data[0]; -} - -/*********************************************************************** - [function]: - callback: get dynamic report information; - [parameters]: - client[in]: struct i2c_client �represent an I2C slave device; - - [return]: - 1; -************************************************************************/ -u8 zet6221_ts_get_report_mode(struct i2c_client *client) -{ - u8 ts_report_cmd[1] = {0xb2}; - //u8 ts_reset_cmd[1] = {0xb0}; - u8 ts_in_data[17] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - - int ret; - int i; - int count=0; - - ret=zet6221_i2c_write_tsdata(client, ts_report_cmd, 1); - - if (ret > 0) - { - while(1) - { - msleep(1); - - //if (gpio_get_value(TS_INT_GPIO) == 0) - if (wmt_ts_irqinval() == 0) - { - dbg( "int low\n"); - ret=zet6221_i2c_read_tsdata(client, ts_in_data, 17); - - if(ret > 0) - { - - for(i=0;i<8;i++) - { - pc[i]=ts_in_data[i] & 0xff; - } - - if(pc[3] != 0x08) - { - errlog("=============== zet6221_ts_get_report_mode report error ===============\n"); - return 0; - } - - xyExchange = (ts_in_data[16] & 0x8) >> 3; - if(xyExchange == 1) - { - ResolutionY= ts_in_data[9] & 0xff; - ResolutionY= (ResolutionY << 8)|(ts_in_data[8] & 0xff); - ResolutionX= ts_in_data[11] & 0xff; - ResolutionX= (ResolutionX << 8) | (ts_in_data[10] & 0xff); - } - else - { - ResolutionX = ts_in_data[9] & 0xff; - ResolutionX = (ResolutionX << 8)|(ts_in_data[8] & 0xff); - ResolutionY = ts_in_data[11] & 0xff; - ResolutionY = (ResolutionY << 8) | (ts_in_data[10] & 0xff); - } - - FingerNum = (ts_in_data[15] & 0x7f); - KeyNum = (ts_in_data[15] & 0x80); - - if(KeyNum==0) - bufLength = 3+4*FingerNum; - else - bufLength = 3+4*FingerNum+1; - - //DPRINTK( "bufLength=%d\n",bufLength); - - break; - - }else - { - errlog ("=============== zet6221_ts_get_report_mode read error ===============\n"); - return 0; - } - - }else - { - //DPRINTK( "int high\n"); - if(count++ > 30) - { - errlog ("=============== zet6221_ts_get_report_mode time out ===============\n"); - return 0; - } - - } - } - - } - return 1; -} - -#if 0 -static int zet6221_is_ts(struct i2c_client *client) -{ - /*u8 ts_in_data[17] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - - ctp_reset(); - if (zet6221_i2c_read_tsdata(client, ts_in_data, 17) <= 0) - { - return 0; - } - return 1;*/ - return 1; -} -#endif - -/*********************************************************************** - [function]: - callback: get dynamic report information with timer delay; - [parameters]: - client[in]: struct i2c_client represent an I2C slave device; - - [return]: - 1; -************************************************************************/ - -u8 zet6221_ts_get_report_mode_t(struct i2c_client *client) -{ - u8 ts_report_cmd[1] = {0xb2}; - u8 ts_in_data[17] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - - int ret; - int i; - - ret=zet6221_i2c_write_tsdata(client, ts_report_cmd, 1); - msleep(10); - - dbg("ret=%d,i2c_addr=0x%x\n", ret, client->addr); - if (ret > 0) - { - //mdelay(10); - //msleep(10); - dbg("=============== zet6221_ts_get_report_mode_t ===============\n"); - ret=zet6221_i2c_read_tsdata(client, ts_in_data, 17); - - if(ret > 0) - { - - for(i=0;i<8;i++) - { - pc[i]=ts_in_data[i] & 0xff; - } - - if(pc[3] != 0x08) - { - errlog("=============== zet6221_ts_get_report_mode_t report error ===============\n"); - return 0; - } - - xyExchange = (ts_in_data[16] & 0x8) >> 3; - if(xyExchange == 1) - { - ResolutionY= ts_in_data[9] & 0xff; - ResolutionY= (ResolutionY << 8)|(ts_in_data[8] & 0xff); - ResolutionX= ts_in_data[11] & 0xff; - ResolutionX= (ResolutionX << 8) | (ts_in_data[10] & 0xff); - } - else - { - ResolutionX = ts_in_data[9] & 0xff; - ResolutionX = (ResolutionX << 8)|(ts_in_data[8] & 0xff); - ResolutionY = ts_in_data[11] & 0xff; - ResolutionY = (ResolutionY << 8) | (ts_in_data[10] & 0xff); - } - - FingerNum = (ts_in_data[15] & 0x7f); - KeyNum = (ts_in_data[15] & 0x80); - inChargerMode = (ts_in_data[16] & 0x2) >> 1; - - if(KeyNum==0) - bufLength = 3+4*FingerNum; - else - bufLength = 3+4*FingerNum+1; - - }else - { - errlog ("=============== zet6221_ts_get_report_mode_t READ ERROR ===============\n"); - return 0; - } - - }else - { - errlog("=============== zet6221_ts_get_report_mode_t WRITE ERROR ===============\n"); - return 0; - } - return 1; -} - -/*********************************************************************** - [function]: - callback: interrupt function; - [parameters]: - irq[in]: irq value; - dev_id[in]: dev_id; - - [return]: - NULL; -************************************************************************/ -static irqreturn_t zet6221_ts_interrupt(int irq, void *dev_id) -{ - struct zet6221_tsdrv *ts_drv = dev_id; - int j = 0; - if (wmt_is_tsint()) - { - wmt_clr_int(); - if (wmt_is_tsirq_enable() && l_suspend == 0) - { - wmt_disable_gpirq(); - dbg("begin..\n"); - //if (!work_pending(&l_tsdata.pen_event_work)) - if (wmt_ts_irqinval() == 0) - { - queue_work(ts_wq, &ts_drv->work1); - } else { - if(KeyNum > 0) - { - //if (0 == ky) - { - for (j=0;j<4;j++) - { - if (l_tskey[j][1] != 0) - { - l_tskey[j][1] = 0; - } - } - dbg("finish one key report!\n"); - } - } - wmt_enable_gpirq(); - } - } - return IRQ_HANDLED; - } - - return IRQ_NONE; - - /*//polling_time = D_POLLING_TIME; - - if (gpio_get_value(TS_INT_GPIO) == 0) - { - // IRQ is triggered by FALLING code here - struct zet6221_tsdrv *ts_drv = dev_id; - schedule_work(&ts_drv->work1); - //DPRINTK("TS1_INT_GPIO falling\n"); - }else - { - //DPRINTK("TS1_INT_GPIO raising\n"); - } - - return IRQ_HANDLED;*/ -} - -/*********************************************************************** - [function]: - callback: touch information handler; - [parameters]: - _work[in]: struct work_struct; - - [return]: - NULL; -************************************************************************/ -static void zet6221_ts_work(struct work_struct *_work) -{ - u32 x[MAX_FINGER_NUMBER], y[MAX_FINGER_NUMBER], z[MAX_FINGER_NUMBER], pr, ky, points; - u32 px,py,pz; - u8 ret; - u8 pressure; - int i,j; - int tx,ty; - int xmax,ymax; - int realnum = 0; - struct zet6221_tsdrv *ts = - container_of(_work, struct zet6221_tsdrv, work1); - - struct i2c_client *tsclient1 = ts->i2c_ts; - - if(l_suspend == 1) - { - return; - } - - if (bufLength == 0) - { - wmt_enable_gpirq(); - return; - } - /*if(resetCount == 1) - { - resetCount = 0; - wmt_enable_gpirq(); - return; - }*/ - - //if (gpio_get_value(TS_INT_GPIO) != 0) - if (wmt_ts_irqinval() != 0) - { - /* do not read when IRQ is triggered by RASING*/ - //DPRINTK("INT HIGH\n"); - dbg("INT HIGH....\n"); - wmt_enable_gpirq(); - return; - } - - ///-------------------------------------------/// - /// Transfer Type : Mutual Dev Mode - ///-------------------------------------------/// -#ifdef FEATURE_MDEV_OUT_ENABLE - if(transfer_type == TRAN_TYPE_MUTUAL_SCAN_DEV) - { - zet622x_ts_parse_mutual_dev(tsclient1); - wmt_enable_gpirq(); - return; - } -#endif ///< FEATURE_MDEV_OUT_ENABLE - - ///-------------------------------------------/// - /// Transfer Type : Initial Base Mode - ///-------------------------------------------/// -#ifdef FEATURE_IBASE_OUT_ENABLE - if(transfer_type == TRAN_TYPE_INIT_SCAN_BASE) - { - zet622x_ts_parse_initial_base(tsclient1); - wmt_enable_gpirq(); - return; - } -#endif ///< FEATURE_IBASE_OUT_ENABLE - - ///-------------------------------------------/// - /// Transfer Type : Initial Dev Mode - ///-------------------------------------------/// -#ifdef FEATURE_IDEV_OUT_ENABLE - if(transfer_type == TRAN_TYPE_INIT_SCAN_DEV) - { - zet622x_ts_parse_initial_dev(tsclient1); - wmt_enable_gpirq(); - return; - } -#endif ///< TRAN_TYPE_INIT_SCAN_DEV - - ///-------------------------------------------/// - /// Transfer Type : Mutual Base Mode - ///-------------------------------------------/// -#ifdef FEATURE_MBASE_OUT_ENABLE - if(transfer_type == TRAN_TYPE_MUTUAL_SCAN_BASE) - { - zet622x_ts_parse_mutual_base(tsclient1); - wmt_enable_gpirq(); - return; - } -#endif ///< FEATURE_MBASE_OUT_ENABLE - - mutex_lock(&i2c_mutex); - ret = zet6221_ts_get_xy_from_panel(tsclient1, x, y, z, &pr, &ky); - mutex_unlock(&i2c_mutex); - - if(ret == 0x3C) - { - - dbg( "x1= %d, y1= %d x2= %d, y2= %d [PR] = %d [KY] = %d\n", x[0], y[0], x[1], y[1], pr, ky); - - points = pr; - - #if defined(TRANSLATE_ENABLE) - touch_coordinate_traslating(x, y, points); - #endif - realnum = 0; - - for(i=0;i<FingerNum;i++){ - pressure = (points >> (MAX_FINGER_NUMBER-i-1)) & 0x1; - dbg( "valid=%d pressure[%d]= %d x= %d y= %d\n",points , i, pressure,x[i],y[i]); - - if(pressure) - { - px = x[i]; - py = y[i]; - pz = z[i]; - - dbg("raw%d(%d,%d) xaxis:%d ResolutionX:%d ResolutionY:%d\n", i, px, py,wmt_ts_get_xaxis(),ResolutionX,ResolutionY); - - //input_report_abs(ts->input, ABS_MT_TRACKING_ID, i); - //input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, P_MAX); - //input_report_abs(ts->input, ABS_MT_POSITION_X, x[i]); - //input_report_abs(ts->input, ABS_MT_POSITION_Y, y[i]); - if (wmt_ts_get_xaxis() == 0) - { - tx = px; - ty = py; - xmax = ResolutionX; - ymax = ResolutionY; - } else { - tx = py; - ty = px; - xmax = ResolutionY; - ymax = ResolutionX; - } - if (wmt_ts_get_xdir() == -1) - { - tx = xmax - tx; - } - if (wmt_ts_get_ydir() == -1) - { - ty = ymax - ty; - } - //tx = ResolutionY - py; - //ty = px; - dbg("rpt%d(%d,%d)\n", i, tx, ty); - //add for cross finger 2013-1-10 - #ifdef MT_TYPE_B - input_mt_slot(ts->input, i); - input_mt_report_slot_state(ts->input, MT_TOOL_FINGER,true); - #endif - input_report_abs(ts->input, ABS_MT_TRACKING_ID, i); - //input_report_key(ts->input, BTN_TOUCH, 1); - //input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, pz); - //******************************* - - if (wmt_ts_get_lcdexchg()) { - int tmp; - tmp = tx; - tx = ty; - ty = ResolutionY - tmp; - } - - input_report_abs(ts->input, ABS_MT_POSITION_X, tx /*px*/); - input_report_abs(ts->input, ABS_MT_POSITION_Y, ty /*py*/); - - #ifndef MT_TYPE_B - input_mt_sync(ts->input); - #endif - realnum++; - if (wmt_ts_ispenup()) - { - wmt_ts_set_penup(0); - } - - }else - { - //input_report_abs(ts->input, ABS_MT_TRACKING_ID, i); - //input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, 0); - //input_mt_sync(ts->input); - #ifdef MT_TYPE_B - input_mt_slot(ts->input, i); - input_mt_report_slot_state(ts->input, MT_TOOL_FINGER,false); - input_report_abs(ts->input, ABS_MT_TRACKING_ID, -1); - #endif //add cross finger 2013-1-10 - dbg("p%d not pen down\n",i); - } - } - - #ifdef MT_TYPE_B - input_mt_report_pointer_emulation(ts->input, true); - #endif //add finger cross 2013-1-10 - //printk("<<<realnum %d\n", realnum); - if (realnum != 0) - { - input_sync(ts->input); - dbg("report one point group\n"); - } else if (!wmt_ts_ispenup()) - {//********here no finger press 2013-1-10 - //add 2013-1-10 cross finger issue! - #ifdef MT_TYPE_B - for(i=0;i<FingerNum;i++){ - input_mt_slot(ts->input, i); - input_mt_report_slot_state(ts->input, MT_TOOL_FINGER,false); - input_report_abs(ts->input, ABS_MT_TRACKING_ID, -1); - } - input_mt_report_pointer_emulation(ts->input, true); - #else - //input_report_abs(ts->input, ABS_MT_TOUCH_MAJOR, 0); - //input_mt_sync(ts->input); - //input_report_abs(ts->input, ABS_MT_TRACKING_ID, -1); - //input_report_key(ts->input, BTN_TOUCH, 0); - #endif - //********************************** - input_mt_sync(ts->input); - input_sync(ts->input); - dbg("real pen up!\n"); - wmt_ts_set_penup(1); - } - - if(KeyNum > 0) - { - //for(i=0;i<MAX_KEY_NUMBER;i++) - if (0 == ky) - { - for (j=0;j<4;j++) - { - if (l_tskey[j][1] != 0) - { - l_tskey[j][1] = 0; - } - } - dbg("finish one key report!\n"); - } else { - for(i=0;i<4;i++) - { - pressure = ky & ( 0x01 << i ); - if (pressure) - { - dbg("key%d\n", i); - if (0 == l_tskey[i][1]) - { - l_tskey[i][1] = 1; // key down - input_report_key(ts->input, l_tskey[i][0], 1); - input_report_key(ts->input, l_tskey[i][0], 0); - input_sync(ts->input); - dbg("report key_%d\n", l_tskey[i][0]); - break; - } - } - - } - } - } - - dbg("normal end...\n"); - }else { - dbg("do nothing!\n"); - if(KeyNum > 0) - { - //if (0 == ky) - { - for (j=0;j<4;j++) - { - if (l_tskey[j][1] != 0) - { - l_tskey[j][1] = 0; - } - } - dbg("finish one key report!\n"); - } - } - } - wmt_enable_gpirq(); - -} - -/*********************************************************************** - [function]: - callback: charger mode enable; - [parameters]: - void - - [return]: - void -************************************************************************/ -void zet6221_ts_charger_mode() -{ - //struct zet6221_tsdrv *zet6221_ts; - u8 ts_write_charge_cmd[1] = {0xb5}; - int ret=0; - ret=zet6221_i2c_write_tsdata(this_client, ts_write_charge_cmd, 1); -} -EXPORT_SYMBOL_GPL(zet6221_ts_charger_mode); - -/*********************************************************************** - [function]: - callback: charger mode disable; - [parameters]: - void - - [return]: - void -************************************************************************/ -void zet6221_ts_charger_mode_disable(void) -{ - //struct zet6221_tsdrv *zet6221_ts; - u8 ts_write_cmd[1] = {0xb6}; - int ret=0; - ret=zet6221_i2c_write_tsdata(this_client, ts_write_cmd, 1); -} -EXPORT_SYMBOL_GPL(zet6221_ts_charger_mode_disable); - - -#ifdef CONFIG_HAS_EARLYSUSPEND -static void ts_early_suspend(struct early_suspend *handler) -{ - //Sleep Mode -/* u8 ts_sleep_cmd[1] = {0xb1}; - int ret=0; - ret=zet6221_i2c_write_tsdata(this_client, ts_sleep_cmd, 1); - return; - */ - wmt_disable_gpirq(); - l_suspend = 1; - //del_timer(&l_ts->polling_timer); - -} - -static void ts_late_resume(struct early_suspend *handler) -{ - resetCount = 1; - //if (l_suspend != 0) - { - //wmt_disable_gpirq(); - //ctp_reset(); - //wmt_set_gpirq(IRQ_TYPE_EDGE_FALLING); - wmt_enable_gpirq(); - l_suspend = 0; - } - //l_powermode = -1; - //mod_timer(&l_ts->polling_timer,jiffies + msecs_to_jiffies(TIME_CHECK_CHARGE)); - -} -#endif -static int zet_ts_suspend(struct platform_device *pdev, pm_message_t state) -{ - wmt_disable_gpirq(); - l_suspend = 1; - return 0; -} - - -/*********************************************************************** - [function]: - resume_download_thread - [parameters]: - arg - - [return]: - int; -************************************************************************/ -int resume_download_thread(void *arg) -{ - char fw_name[64]; - wake_lock(&downloadWakeLock); - sprintf(fw_name, "%szet62xx.bin", tran_type_mode_file_name); - zet_fw_load(fw_name); - //printk("Thread : Enter\n"); -// if((iRomType == ROM_TYPE_SRAM) || -// (iRomType == ROM_TYPE_OTP)) //SRAM,OTP - // { - zet622x_resume_downloader(this_client); - check_charger(); - l_suspend = 0; - //printk("zet622x download OK\n"); - // } - //printk("Thread : Leave\n"); - wake_unlock(&downloadWakeLock); - return 0; -} - -static int zet_ts_resume(struct platform_device *pdev) -{ - wmt_disable_gpirq(); - ctp_reset(); - - if(ic_model == ZET6251) { - //upload bin to flash_buffer, just for debug - resume_download_task = kthread_create(resume_download_thread, NULL , "resume_download"); - if(IS_ERR(resume_download_task)) { - errlog("cread thread failed\n"); - } - wake_up_process(resume_download_task); - } else { - check_charger(); - l_suspend = 0; - } - - wmt_set_gpirq(IRQ_TYPE_EDGE_FALLING); - if (!earlysus_en) - wmt_enable_gpirq(); - - ///--------------------------------------/// - /// Set transfer type to dynamic mode - ///--------------------------------------/// - transfer_type = TRAN_TYPE_DYNAMIC; - - return 0; -} - - -///********************************************************************** -/// [function]: zet622x_ts_set_transfer_type -/// [parameters]: void -/// [return]: void -///********************************************************************** -int zet622x_ts_set_transfer_type(u8 bTransType) -{ - u8 ts_cmd[10] = {0xC1, 0x02, TRAN_TYPE_DYNAMIC, 0x55, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00}; - int ret = 0; - ts_cmd[2] = bTransType; - ret = zet6221_i2c_write_tsdata(this_client, ts_cmd, 10); - return ret; -} - - -///********************************************************************** -/// [function]: zet622x_ts_set_transfer_type -/// [parameters]: void -/// [return]: void -///********************************************************************** -#ifdef FEATURE_INFO_OUT_EANBLE -int zet622x_ts_set_info_type(void) -{ - int ret = 1; - char info_file_name_out[128]; - - /// ic type - switch(ic_model) - { - case ZET6221: - tran_data[0] = ZET6221_INFO; - break; - case ZET6223: - tran_data[0] = ZET6223_INFO; - break; - case ZET6231: - tran_data[0] = ZET6231_INFO; - break; - case ZET6251: - tran_data[0] = ZET6251_INFO; - break; - default: - tran_data[0] = UNKNOW_INFO; - break; - } - - /// resolution - if(xyExchange== 1) - { - tran_data[16] = 0x8; - tran_data[9] = ((ResolutionY >> 8)&0xFF); - tran_data[8] = (ResolutionY &0xFF); - tran_data[11] = ((ResolutionX >> 8)&0xFF); - tran_data[10] = (ResolutionX &0xFF); - } - else - { - tran_data[16] = 0x00; - tran_data[9] = ((ResolutionX >> 8)&0xFF); - tran_data[8] = (ResolutionX &0xFF); - tran_data[11] = ((ResolutionY >> 8)&0xFF); - tran_data[10] = (ResolutionY &0xFF); - } - - /// trace X - tran_data[13] = TP_DEFAULT_COL; ///< trace x - /// trace Y - tran_data[14] = TP_DEFAULT_ROW; ///< trace y - - if(KeyNum > 0) - { - tran_data[15] = (0x80 | FingerNum); - } - else - { - tran_data[15] = FingerNum; - } - - sprintf(info_file_name_out, "%sinfo.bin",tran_type_mode_file_name); - zet_information_save(info_file_name_out); - - printk("[ZET] : ic:%d, traceX:%d, traceY:%d\n", tran_data[0],tran_data[13],tran_data[14]); - return ret; -} -#endif ///< FEATURE_INFO_OUT_EANBLE - -///*********************************************************************** -/// [function]: zet_mdev_save -/// [parameters]: char * -/// [return]: void -///************************************************************************ -static void zet_mdev_save(char *file_name) -{ - struct file *fp; - int data_total_len = (row+2) * (col + 2); - - ///-------------------------------------------------------/// - /// create the file that stores the mutual dev data - ///-------------------------------------------------------/// - fp = filp_open(file_name, O_RDWR | O_CREAT, 0644); - if(IS_ERR(fp)) - { - printk("[ZET] : Failed to open %s\n", file_name); - return; - } - old_fs = get_fs(); - set_fs(KERNEL_DS); - - vfs_write(fp, tran_data, data_total_len, &(fp->f_pos)); - memcpy(mdev_data, tran_data, data_total_len); - set_fs(old_fs); - filp_close(fp, 0); - - return; -} - -///*********************************************************************** -/// [function]: zet_idev_save -/// [parameters]: char * -/// [return]: void -///************************************************************************ -#ifdef FEATURE_IDEV_OUT_ENABLE -static void zet_idev_save(char *file_name) -{ - struct file *fp; - int data_total_len = (row + col); - - ///-------------------------------------------------------/// - /// create the file that stores the initial dev data - ///-------------------------------------------------------/// - fp = filp_open(file_name, O_RDWR | O_CREAT, 0644); - if(IS_ERR(fp)) - { - printk("[ZET] : Failed to open %s\n", file_name); - return; - } - old_fs = get_fs(); - set_fs(KERNEL_DS); - - vfs_write(fp, tran_data, data_total_len, &(fp->f_pos)); - memcpy(idev_data, tran_data, data_total_len); - set_fs(old_fs); - filp_close(fp, 0); - - return; -} -#endif ///< FEATURE_IDEV_OUT_ENABLE - -///*********************************************************************** -/// [function]: zet_ibase_save -/// [parameters]: char * -/// [return]: void -///************************************************************************ -#ifdef FEATURE_IBASE_OUT_ENABLE -static void zet_ibase_save(char *file_name) -{ - struct file *fp; - int data_total_len = (row + col) * 2; - - ///-------------------------------------------------------/// - /// create the file that stores the initial base data - ///-------------------------------------------------------/// - fp = filp_open(file_name, O_RDWR | O_CREAT, 0644); - if(IS_ERR(fp)) - { - printk("[ZET] : Failed to open %s\n", file_name); - return; - } - old_fs = get_fs(); - set_fs(KERNEL_DS); - - vfs_write(fp, tran_data, data_total_len, &(fp->f_pos)); - memcpy(ibase_data, tran_data, data_total_len); - set_fs(old_fs); - filp_close(fp, 0); - - return; -} -#endif ///< FEATURE_IBASE_OUT_ENABLE - -///*********************************************************************** -/// [function]: zet_mbase_save -/// [parameters]: char * -/// [return]: void -///************************************************************************ -#ifdef FEATURE_MBASE_OUT_ENABLE -static void zet_mbase_save(char *file_name) -{ - struct file *fp; - int data_total_len = (row * col * 2); - - ///-------------------------------------------------------/// - /// create the file that stores the mutual base data - ///-------------------------------------------------------/// - fp = filp_open(file_name, O_RDWR | O_CREAT, 0644); - if(IS_ERR(fp)) - { - printk("[ZET] : Failed to open %s\n", file_name); - return; - } - old_fs = get_fs(); - set_fs(KERNEL_DS); - - vfs_write(fp, tran_data, data_total_len, &(fp->f_pos)); - memcpy(mbase_data, tran_data, data_total_len); - set_fs(old_fs); - filp_close(fp, 0); - - return; -} -#endif ///< FEATURE_MBASE_OUT_ENABLE - -///*********************************************************************** -/// [function]: zet_information_save -/// [parameters]: char * -/// [return]: void -///************************************************************************ -#ifdef FEATURE_INFO_OUT_EANBLE -static void zet_information_save(char *file_name) -{ - struct file *fp; - int data_total_len = INFO_DATA_SIZE; - - ///-------------------------------------------------------/// - /// create the file that stores the mutual base data - ///-------------------------------------------------------/// - fp = filp_open(file_name, O_RDWR | O_CREAT, 0644); - if(IS_ERR(fp)) - { - printk("[ZET] : Failed to open %s\n", file_name); - return; - } - old_fs = get_fs(); - set_fs(KERNEL_DS); - - vfs_write(fp, tran_data, data_total_len, &(fp->f_pos)); - memcpy(info_data, tran_data, data_total_len); - set_fs(old_fs); - filp_close(fp, 0); - - return; -} -#endif ///< FEATURE_INFO_OUT_EANBLE - -///************************************************************************ -/// [function]: zet_dv_set_file_name -/// [parameters]: void -/// [return]: void -///************************************************************************ -static void zet_dv_set_file_name(char *file_name) -{ - strcpy(driver_version, file_name); -} - -///************************************************************************ -/// [function]: zet_fw_set_file_name -/// [parameters]: void -/// [return]: void -///************************************************************************ -static void zet_fw_set_file_name(void)//char *file_name) -{ - char fwname[256] = {0}; - wmt_ts_get_firmwname(fwname); - sprintf(fw_file_name,"/system/etc/firmware/%s",fwname); - //strcpy(fw_file_name, file_name); -} - -///************************************************************************ -/// [function]: zet_mdev_set_file_name -/// [parameters]: void -/// [return]: void -///************************************************************************ -static void zet_tran_type_set_file_name(char *file_name) -{ - strcpy(tran_type_mode_file_name, file_name); -} - - -///*********************************************************************** -/// [function]: zet_fw_size -/// [parameters]: void -/// [return]: void -///************************************************************************ -static int zet_fw_size(void) -{ - int flash_total_len = 0x8000; - - switch(ic_model) - { - case ZET6221: - flash_total_len = 0x4000; - break; - case ZET6223: - flash_total_len = 0x10000; - break; - case ZET6231: - case ZET6251: - default: - flash_total_len = 0x8000; - break; - } - - return flash_total_len; -} - - -///*********************************************************************** -/// [function]: zet_fw_save -/// [parameters]: file name -/// [return]: void -///************************************************************************ -static void zet_fw_save(char *file_name) -{ - struct file *fp; - int flash_total_len = 0; - - fp = filp_open(file_name, O_RDWR | O_CREAT, 0644); - if(IS_ERR(fp)) - { - printk("[ZET] : Failed to open %s\n", file_name); - return; - } - old_fs = get_fs(); - set_fs(KERNEL_DS); - - flash_total_len = zet_fw_size(); - printk("[ZET] : flash_total_len = 0x%04x\n",flash_total_len ); - - vfs_write(fp, flash_buffer, flash_total_len, &(fp->f_pos)); - - set_fs(old_fs); - - filp_close(fp, 0); - - - return; -} - -///*********************************************************************** -/// [function]: zet_fw_load -/// [parameters]: file name -/// [return]: void -///************************************************************************ -static void zet_fw_load(char *file_name) -{ - int file_length = 0; - struct file *fp; - loff_t *pos; - - //printk("[ZET]: find %s\n", file_name); - fp = filp_open(file_name, O_RDONLY, 0644); - if(IS_ERR(fp)) - { - //printk("[ZET]: No firmware file detected\n"); - return; - } - - ///----------------------------/// - /// Load from file - ///----------------------------/// - printk("[ZET]: Load from %s\n", file_name); - - old_fs = get_fs(); - set_fs(KERNEL_DS); - - /// Get file size - inode = fp->f_dentry->d_inode; - file_length = (int)inode->i_size; - //l_fwlen = file_length; - - pos = &(fp->f_pos); - - vfs_read(fp, &flash_buffer[0], file_length, pos); - - //file_length - set_fs(old_fs); - filp_close(fp, 0); - - -} - -///************************************************************************ -/// [function]: zet_fw_init -/// [parameters]: void -/// [return]: void -///************************************************************************ -static void zet_fw_init(void) -{ - //int i; - - if(flash_buffer == NULL) - { - flash_buffer = kmalloc(MAX_FLASH_BUF_SIZE, GFP_KERNEL); - } - - ///---------------------------------------------/// - /// Init the mutual dev buffer - ///---------------------------------------------/// - if(mdev_data== NULL) - { - mdev_data = kmalloc(MDEV_MAX_DATA_SIZE, GFP_KERNEL); - } - if(idev_data== NULL) - { - idev_data = kmalloc(IDEV_MAX_DATA_SIZE, GFP_KERNEL); - } - - if(mbase_data== NULL) - { - mbase_data = kmalloc(MBASE_MAX_DATA_SIZE, GFP_KERNEL); - } - if(ibase_data== NULL) - { - ibase_data = kmalloc(IBASE_MAX_DATA_SIZE, GFP_KERNEL); - } - - if(tran_data == NULL) - { - tran_data = kmalloc(MBASE_MAX_DATA_SIZE, GFP_KERNEL); - } - - if(info_data == NULL) - { - info_data = kmalloc(INFO_MAX_DATA_SIZE, GFP_KERNEL); - } - - /*printk("[ZET]: Load from header\n"); - - if(ic_model == ZET6221) - { - for(i = 0 ; i < sizeof(zeitec_zet6221_firmware) ; i++) - { - flash_buffer[i] = zeitec_zet6221_firmware[i]; - } - } - else if(ic_model == ZET6223) - { - for(i = 0 ; i < sizeof(zeitec_zet6223_firmware) ; i++) - { - flash_buffer[i] = zeitec_zet6223_firmware[i]; - } - } - else if(ic_model == ZET6231) - { - for(i = 0 ; i < sizeof(zeitec_zet6231_firmware) ; i++) - { - flash_buffer[i] = zeitec_zet6231_firmware[i]; - } - } - else if(ic_model == ZET6251) - { - for(i = 0 ; i < sizeof(zeitec_zet6251_firmware) ; i++) - { - flash_buffer[i] = zeitec_zet6251_firmware[i]; - } - } - - /// Load firmware from bin file - zet_fw_load(fw_file_name);*/ -} - -///************************************************************************ -/// [function]: zet_fw_exit -/// [parameters]: void -/// [return]: void -///************************************************************************ -static void zet_fw_exit(void) -{ - ///---------------------------------------------/// - /// free mdev_data - ///---------------------------------------------/// - if(mdev_data!=NULL) - { - kfree(mdev_data); - mdev_data = NULL; - } - - if(idev_data!=NULL) - { - kfree(idev_data); - idev_data = NULL; - } - - if(mbase_data!=NULL) - { - kfree(mbase_data); - mbase_data = NULL; - } - - if(ibase_data!=NULL) - { - kfree(ibase_data); - ibase_data = NULL; - } - - if(tran_data != NULL) - { - kfree(tran_data); - tran_data = NULL; - } - - if(info_data != NULL) - { - kfree(info_data); - info_data = NULL; - } - - - ///---------------------------------------------/// - /// free flash buffer - ///---------------------------------------------/// - if(flash_buffer!=NULL) - { - kfree(flash_buffer); - flash_buffer = NULL; -} - -} - -///************************************************************************ -/// [function]: zet_fops_open -/// [parameters]: file -/// [return]: int -///************************************************************************ -static int zet_fops_open(struct inode *inode, struct file *file) -{ - int subminor; - int ret = 0; - struct i2c_client *client; - struct i2c_adapter *adapter; - struct i2c_dev *i2c_dev; - - subminor = iminor(inode); - printk("[ZET] : ZET_FOPS_OPEN , subminor=%d\n",subminor); - - i2c_dev = zet622x_i2c_dev_get_by_minor(subminor); - if (!i2c_dev) - { - printk("error i2c_dev\n"); - return -ENODEV; - } - - adapter = i2c_get_adapter(i2c_dev->adap->nr); - if(!adapter) - { - return -ENODEV; - } - - client = kzalloc(sizeof(*client), GFP_KERNEL); - - if(!client) - { - i2c_put_adapter(adapter); - ret = -ENOMEM; - } - snprintf(client->name, I2C_NAME_SIZE, "pctp_i2c_ts%d", adapter->nr); - //client->driver = &zet622x_i2c_driver; - client->driver = this_client->driver; - client->adapter = adapter; - file->private_data = client; - - return 0; -} - - -///************************************************************************ -/// [function]: zet_fops_release -/// [parameters]: inode, file -/// [return]: int -///************************************************************************ -static int zet_fops_release (struct inode *inode, struct file *file) -{ - struct i2c_client *client = file->private_data; - - printk("[ZET] : zet_fops_release -> line : %d\n",__LINE__ ); - - i2c_put_adapter(client->adapter); - kfree(client); - file->private_data = NULL; - return 0; -} - -///************************************************************************ -/// [function]: zet_fops_read -/// [parameters]: file, buf, count, ppos -/// [return]: size_t -///************************************************************************ -static ssize_t zet_fops_read(struct file *file, char __user *buf, size_t count, - loff_t *ppos) -{ - int i; - int iCnt = 0; - char str[256]; - int len = 0; - - printk("[ZET] : zet_fops_read -> line : %d\n",__LINE__ ); - - ///-------------------------------/// - /// Print message - ///-------------------------------/// - sprintf(str, "Please check \"%s\"\n", fw_file_name); - len = strlen(str); - - ///-------------------------------/// - /// if read out - ///-------------------------------/// - if(data_offset >= len) - { - return 0; - } - - for(i = 0 ; i < count-1 ; i++) - { - buf[i] = str[data_offset]; - buf[i+1] = 0; - iCnt++; - data_offset++; - if(data_offset >= len) - { - break; - } - } - - ///-------------------------------/// - /// Save file - ///-------------------------------/// - if(data_offset == len) - { - zet_fw_save(fw_file_name); - } - return iCnt; -} - -///************************************************************************ -/// [function]: zet_fops_write -/// [parameters]: file, buf, count, ppos -/// [return]: size_t -///************************************************************************ -static ssize_t zet_fops_write(struct file *file, const char __user *buf, - size_t count, loff_t *ppos) -{ - printk("[ZET]: zet_fops_write -> %s\n", buf); - data_offset = 0; - return count; -} - -///************************************************************************ -/// [function]: ioctl -/// [parameters]: file , cmd , arg -/// [return]: long -///************************************************************************ -static long zet_fops_ioctl(struct file *file, unsigned int cmd, unsigned long arg ) -{ - u8 __user * user_buf = (u8 __user *) arg; - - u8 buf[IOCTL_MAX_BUF_SIZE]; - int data_size; - - if(copy_from_user(buf, user_buf, IOCTL_MAX_BUF_SIZE)) - { - printk("[ZET]: zet_ioctl: copy_from_user fail\n"); - return 0; - } - - printk("[ZET]: zet_ioctl -> cmd = %d, %02x, %02x\n", cmd, buf[0], buf[1]); - - if(cmd == ZET_IOCTL_CMD_FLASH_READ) - { - printk("[ZET]: zet_ioctl -> ZET_IOCTL_CMD_FLASH_DUMP cmd = %d, file=%s\n", cmd, (char *)buf); - ioctl_action |= IOCTL_ACTION_FLASH_DUMP; - } - else if(cmd == ZET_IOCTL_CMD_FLASH_WRITE) - { - printk("[ZET]: zet_ioctl -> ZET_IOCTL_CMD_FLASH_WRITE cmd = %d\n", cmd); - { //upload bin to flash_buffer - char fw_name[64]; - sprintf(fw_name, "%szet62xx.bin", tran_type_mode_file_name); - zet_fw_load(fw_name); - } - zet622x_resume_downloader(this_client); - } - else if(cmd == ZET_IOCTL_CMD_RST) - { - printk("[ZET]: zet_ioctl -> ZET_IOCTL_CMD_RST cmd = %d\n", cmd); - //ctp_reset(); - wmt_rst_output(1); - - wmt_rst_output(0); - msleep(20); - wmt_rst_output(1); - - transfer_type = TRAN_TYPE_DYNAMIC; - } - else if(cmd == ZET_IOCTL_CMD_RST_HIGH) - { - wmt_rst_output(1); - } - else if(cmd == ZET_IOCTL_CMD_RST_LOW) - { - wmt_rst_output(0); - } - else if(cmd == ZET_IOCTL_CMD_MDEV) - { - ///---------------------------------------------------/// - /// set mutual dev mode - ///---------------------------------------------------/// - zet622x_ts_set_transfer_type(TRAN_TYPE_MUTUAL_SCAN_DEV); - transfer_type = TRAN_TYPE_MUTUAL_SCAN_DEV; - - } - else if(cmd == ZET_IOCTL_CMD_IBASE) - { - ///---------------------------------------------------/// - /// set initial base mode - ///---------------------------------------------------/// - zet622x_ts_set_transfer_type(TRAN_TYPE_INIT_SCAN_BASE); - transfer_type = TRAN_TYPE_INIT_SCAN_BASE; - - } -#ifdef FEATURE_IDEV_OUT_ENABLE - else if(cmd == ZET_IOCTL_CMD_IDEV) - { - ///---------------------------------------------------/// - /// set initial dev mode - ///---------------------------------------------------/// - zet622x_ts_set_transfer_type(TRAN_TYPE_INIT_SCAN_DEV); - transfer_type = TRAN_TYPE_INIT_SCAN_DEV; - - } -#endif ///< FEATURE_IDEV_OUT_ENABLE -#ifdef FEATURE_MBASE_OUT_ENABLE - else if(cmd == ZET_IOCTL_CMD_MBASE) - { - ///---------------------------------------------------/// - /// set Mutual Base mode - ///---------------------------------------------------/// - zet622x_ts_set_transfer_type(TRAN_TYPE_MUTUAL_SCAN_BASE); - transfer_type = TRAN_TYPE_MUTUAL_SCAN_BASE; - - } -#endif ///< FEATURE_MBASE_OUT_ENABLE - else if(cmd == ZET_IOCTL_CMD_DYNAMIC) - { - zet622x_ts_set_transfer_type(TRAN_TYPE_DYNAMIC); - transfer_type = TRAN_TYPE_DYNAMIC; - } - else if(cmd == ZET_IOCTL_CMD_FW_FILE_PATH_GET) - { - memset(buf, 0x00, 64); - strcpy(buf, fw_file_name); - printk("[ZET]: zet_ioctl: Get FW_FILE_NAME = %s\n", buf); - } - else if(cmd == ZET_IOCTL_CMD_FW_FILE_PATH_SET) - { - strcpy(fw_file_name, buf); - printk("[ZET]: zet_ioctl: set FW_FILE_NAME = %s\n", buf); - - } - else if(cmd == ZET_IOCTL_CMD_MDEV_GET) - { - data_size = (row+2)*(col+2); - memcpy(buf, mdev_data, data_size); - printk("[ZET]: zet_ioctl: Get MDEV data size=%d\n", data_size); - } - else if(cmd == ZET_IOCTL_CMD_TRAN_TYPE_PATH_SET) - { - strcpy(tran_type_mode_file_name, buf); - printk("[ZET]: zet_ioctl: Set ZET_IOCTL_CMD_TRAN_TYPE_PATH_ = %s\n", buf); - } - else if(cmd == ZET_IOCTL_CMD_TRAN_TYPE_PATH_GET) - { - memset(buf, 0x00, 64); - strcpy(buf, tran_type_mode_file_name); - printk("[ZET]: zet_ioctl: Get ZET_IOCTL_CMD_TRAN_TYPE_PATH = %s\n", buf); - } - else if(cmd == ZET_IOCTL_CMD_IDEV_GET) - { - data_size = (row + col); - memcpy(buf, idev_data, data_size); - printk("[ZET]: zet_ioctl: Get IDEV data size=%d\n", data_size); - } - else if(cmd == ZET_IOCTL_CMD_IBASE_GET) - { - data_size = (row + col)*2; - memcpy(buf, ibase_data, data_size); - printk("[ZET]: zet_ioctl: Get IBASE data size=%d\n", data_size); - } - else if(cmd == ZET_IOCTL_CMD_MBASE_GET) - { - data_size = (row*col*2); - if(data_size > IOCTL_MAX_BUF_SIZE) - { - data_size = IOCTL_MAX_BUF_SIZE; - } - memcpy(buf, mbase_data, data_size); - printk("[ZET]: zet_ioctl: Get MBASE data size=%d\n", data_size); - } - else if(cmd == ZET_IOCTL_CMD_INFO_SET) - { - printk("[ZET]: zet_ioctl: ZET_IOCTL_CMD_INFO_SET\n"); - zet622x_ts_set_info_type(); - } - else if(cmd == ZET_IOCTL_CMD_INFO_GET) - { - data_size = INFO_DATA_SIZE; - memcpy(buf, info_data, data_size); - printk("[ZET]: zet_ioctl: Get INFO data size=%d,IC: %x,X:%d,Y:%d\n", data_size, info_data[0], info_data[13], info_data[14]); - } - else if(cmd == ZET_IOCTL_CMD_TRACE_X_SET) - { - printk("[ZET]: zet_ioctl: ZET_IOCTL_CMD_TRACE_X_SET\n"); - } - else if(cmd == ZET_IOCTL_CMD_TRACE_X_GET) - { - printk("[ZET]: zet_ioctl: Get TRACEX data\n"); - } - else if(cmd == ZET_IOCTL_CMD_TRACE_Y_SET) - { - printk("[ZET]: zet_ioctl: ZET_IOCTL_CMD_TRACE_Y_SET\n"); - } - else if(cmd == ZET_IOCTL_CMD_TRACE_Y_GET) - { - printk("[ZET]: zet_ioctl: Get TRACEY data \n"); - } - else if(cmd == ZET_IOCTL_CMD_DRIVER_VER_GET) - { - memset(buf, 0x00, 64); - strcpy(buf, driver_version); - printk("[ZET]: zet_ioctl: Get DRIVER_VERSION = %s\n", buf); - printk("[ZET]: zet_ioctl: Get SVN = %s\n", DRIVER_VERSION); - } - else if(cmd == ZET_IOCTL_CMD_MBASE_EXTERN_GET) - { - data_size = (row*col*2) - IOCTL_MAX_BUF_SIZE; - if(data_size < 1) - { - data_size = 1; - } - memcpy(buf, (mbase_data+IOCTL_MAX_BUF_SIZE), data_size); - printk("[ZET]: zet_ioctl: Get MBASE extern data size=%d\n", data_size); - } - - if(copy_to_user(user_buf, buf, IOCTL_MAX_BUF_SIZE)) - { - printk("[ZET]: zet_ioctl: copy_to_user fail\n"); - return 0; - } - - return 0; -} - -///************************************************************************ -/// file_operations -///************************************************************************ -static const struct file_operations zet622x_ts_fops = -{ - .owner = THIS_MODULE, - .open = zet_fops_open, - .read = zet_fops_read, - .write = zet_fops_write, - .unlocked_ioctl = zet_fops_ioctl, - .compat_ioctl = zet_fops_ioctl, - .release = zet_fops_release, -}; - -static int zet6221_ts_probe(struct i2c_client *client/*, const struct i2c_device_id *id*/) -{ - int result = -1; - int count = 0; - int download_count = 0; - int download_ok = 0; - struct input_dev *input_dev; - struct device *dev; - - - struct zet6221_tsdrv *zet6221_ts; - - dbg( "[TS] zet6221_ts_probe \n"); - - zet6221_ts = kzalloc(sizeof(struct zet6221_tsdrv), GFP_KERNEL); - l_ts = zet6221_ts; - zet6221_ts->i2c_ts = client; - //zet6221_ts->gpio = TS_INT_GPIO; /*s3c6410*/ - //zet6221_ts->gpio = TS1_INT_GPIO; - - this_client = client; - - i2c_set_clientdata(client, zet6221_ts); - - //client->driver = &zet6221_ts_driver; - ts_wq = create_singlethread_workqueue("zet6221ts_wq"); - if (!ts_wq) - { - errlog("Failed to create workqueue!\n"); - goto err_create_wq; - } - - INIT_WORK(&zet6221_ts->work1, zet6221_ts_work); - - input_dev = input_allocate_device(); - if (!input_dev || !zet6221_ts) { - result = -ENOMEM; - goto fail_alloc_mem; - } - - //i2c_set_clientdata(client, zet6221_ts); - - input_dev->name = MJ5_TS_NAME; - input_dev->phys = "zet6221_touch/input0"; - input_dev->id.bustype = BUS_HOST; - input_dev->id.vendor = 0x0001; - input_dev->id.product = 0x0002; - input_dev->id.version = 0x0100; -//bootloader - zet622x_ts_option(client); - msleep(100); - - download_count = 0; - download_ok = 0; - zet_fw_init(); - do{ - if (zet6221_load_fw()) - { - errlog("Can't load the firmware of zet62xx!\n"); - } else { - zet6221_downloader(client); - //ctp_reset(); //cancel it? need to check - } - udelay(100); - - count=0; - do{ - ctp_reset(); - - if(zet6221_ts_get_report_mode_t(client)==0) //get IC info by delay - { - ResolutionX = X_MAX; - ResolutionY = Y_MAX; - FingerNum = FINGER_NUMBER; - KeyNum = KEY_NUMBER; - if(KeyNum==0) - bufLength = 3+4*FingerNum; - else - bufLength = 3+4*FingerNum+1; - errlog("[warning] zet6221_ts_get_report_mode_t report error!!use default value\n"); - }else - { - if(zet6221_ts_version()==1) // zet6221_ts_version() depends on zet6221_downloader() - // cancel download firmware, need to comment it. - { - dbg("get report mode ok!\n"); - download_ok = 1; - } - } - count++; - }while(count<REPORT_POLLING_TIME && download_ok != 1 ); - download_count++; - }while( download_count < RETRY_DOWNLOAD_TIMES && download_ok != 1 ); - - errlog( "ResolutionX=%d ResolutionY=%d FingerNum=%d KeyNum=%d\n",ResolutionX,ResolutionY,FingerNum,KeyNum); - - input_dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); - set_bit(INPUT_PROP_DIRECT, input_dev->propbit); - if (wmt_ts_get_lcdexchg()) { - input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0, ResolutionX, 0, 0); - input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, ResolutionY, 0, 0); - } else { - input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0, ResolutionY, 0, 0); - input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, ResolutionX, 0, 0); - } - - set_bit(KEY_BACK, input_dev->keybit); - set_bit(KEY_HOME, input_dev->keybit); - set_bit(KEY_MENU, input_dev->keybit); - - //*******************************add 2013-1-10 - set_bit(ABS_MT_TRACKING_ID, input_dev->absbit); - //set_bit(ABS_MT_TOUCH_MAJOR, input_dev->absbit); - input_set_abs_params(input_dev,ABS_MT_TRACKING_ID, 0, FingerNum, 0, 0); - //input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, P_MAX, 0, 0); - //set_bit(BTN_TOUCH, input_dev->keybit); - - #ifdef MT_TYPE_B - input_mt_init_slots(input_dev, FingerNum); - #endif - //set_bit(KEY_SEARCH, input_dev->keybit); - - //input_dev->evbit[0] = BIT(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); - //input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); - - result = input_register_device(input_dev); - if (result) - goto fail_ip_reg; - - zet6221_ts->input = input_dev; - - input_set_drvdata(zet6221_ts->input, zet6221_ts); - mutex_init(&i2c_mutex); - wake_lock_init(&downloadWakeLock, WAKE_LOCK_SUSPEND, "resume_download"); - zet6221_ts->queue = create_singlethread_workqueue("ts_check_charge_queue"); - INIT_DELAYED_WORK(&zet6221_ts->work, polling_timer_func); - - //setup_timer(&zet6221_ts->polling_timer, polling_timer_func, (unsigned long)zet6221_ts); - //mod_timer(&zet6221_ts->polling_timer,jiffies + msecs_to_jiffies(TIME_CHECK_CHARGE)); - - - //s3c6410 - //result = gpio_request(zet6221_ts->gpio, "GPN"); - wmt_set_gpirq(IRQ_TYPE_EDGE_FALLING); - wmt_disable_gpirq(); - /*result = gpio_request(zet6221_ts->gpio, "GPN"); - if (result) - goto gpio_request_fail; - */ - - zet6221_ts->irq = wmt_get_tsirqnum();//gpio_to_irq(zet6221_ts->gpio); - dbg( "[TS] zet6221_ts_probe.gpid_to_irq [zet6221_ts->irq=%d]\n",zet6221_ts->irq); - - result = request_irq(zet6221_ts->irq, zet6221_ts_interrupt,IRQF_SHARED /*IRQF_TRIGGER_FALLING*/, - ZET_TS_ID_NAME, zet6221_ts); - if (result) - { - errlog("Can't alloc ts irq=%d\n", zet6221_ts->irq); - goto request_irq_fail; - } - - - ///-----------------------------------------------/// - /// Set the default firmware bin file name & mutual dev file name - ///-----------------------------------------------/// - zet_dv_set_file_name(DRIVER_VERSION); - zet_fw_set_file_name();//FW_FILE_NAME); - zet_tran_type_set_file_name(TRAN_MODE_FILE_PATH); - - ///---------------------------------/// - /// Set file operations - ///---------------------------------/// - result = register_chrdev(I2C_MAJOR, "zet_i2c_ts", &zet622x_ts_fops); - if(result) - { - printk(KERN_ERR "%s:register chrdev failed\n",__FILE__); - goto fail_register_chrdev; - } - ///---------------------------------/// - /// Create device class - ///---------------------------------/// - i2c_dev_class = class_create(THIS_MODULE,"zet_i2c_dev"); - if(IS_ERR(i2c_dev_class)) - { - result = PTR_ERR(i2c_dev_class); - goto fail_create_class; - } - ///--------------------------------------------/// - /// Get a free i2c dev - ///--------------------------------------------/// - zet_i2c_dev = zet622x_i2c_get_free_dev(client->adapter); - if(IS_ERR(zet_i2c_dev)) - { - result = PTR_ERR(zet_i2c_dev); - goto fail_get_free_dev; - } - dev = device_create(i2c_dev_class, &client->adapter->dev, - MKDEV(I2C_MAJOR,client->adapter->nr), NULL, "zet62xx_ts%d", client->adapter->nr); - if(IS_ERR(dev)) - { - result = PTR_ERR(dev); - goto fail_create_device; - } - -#ifdef CONFIG_HAS_EARLYSUSPEND - zet6221_ts->early_suspend.suspend = ts_early_suspend, - zet6221_ts->early_suspend.resume = ts_late_resume, - zet6221_ts->early_suspend.level = EARLY_SUSPEND_LEVEL_DISABLE_FB + 1;//,EARLY_SUSPEND_LEVEL_DISABLE_FB + 2; - register_early_suspend(&zet6221_ts->early_suspend); -#endif - //disable_irq(zet6221_ts->irq); - ctp_reset(); - wmt_enable_gpirq(); - queue_delayed_work(zet6221_ts->queue, &zet6221_ts->work, msecs_to_jiffies(TIME_CHECK_CHARGE)); - //mod_timer(&zet6221_ts->polling_timer,jiffies + msecs_to_jiffies(TIME_CHECK_CHARGE)); - dbg("ok\n"); - return 0; - -fail_create_device: - kfree(zet_i2c_dev); -fail_get_free_dev: - class_destroy(i2c_dev_class); -fail_create_class: - unregister_chrdev(I2C_MAJOR, "zet_i2c_ts"); -fail_register_chrdev: - free_irq(zet6221_ts->irq, zet6221_ts); -request_irq_fail: - destroy_workqueue(zet6221_ts->queue); - cancel_delayed_work_sync(&zet6221_ts->work); - //gpio_free(zet6221_ts->gpio); -//gpio_request_fail: - free_irq(zet6221_ts->irq, zet6221_ts); - wake_lock_destroy(&downloadWakeLock); - input_unregister_device(input_dev); - input_dev = NULL; -fail_ip_reg: -fail_alloc_mem: - input_free_device(input_dev); - destroy_workqueue(ts_wq); - cancel_work_sync(&zet6221_ts->work1); - zet_fw_exit(); -err_create_wq: - kfree(zet6221_ts); - return result; -} - -static int zet6221_ts_remove(void /*struct i2c_client *dev*/) -{ - struct zet6221_tsdrv *zet6221_ts = l_ts;//i2c_get_clientdata(dev); - - //del_timer(&zet6221_ts->polling_timer); -#ifdef CONFIG_HAS_EARLYSUSPEND - unregister_early_suspend(&zet6221_ts->early_suspend); -#endif - wmt_disable_gpirq(); - device_destroy(i2c_dev_class, MKDEV(I2C_MAJOR,this_client->adapter->nr)); - kfree(zet_i2c_dev); - class_destroy(i2c_dev_class); - unregister_chrdev(I2C_MAJOR, "zet_i2c_ts"); - free_irq(zet6221_ts->irq, zet6221_ts); - //gpio_free(zet6221_ts->gpio); - //del_timer_sync(&zet6221_ts->polling_timer); - destroy_workqueue(zet6221_ts->queue); - cancel_delayed_work_sync(&zet6221_ts->work); - input_unregister_device(zet6221_ts->input); - wake_lock_destroy(&downloadWakeLock); - cancel_work_sync(&zet6221_ts->work1); - destroy_workqueue(ts_wq); - zet_fw_exit(); - kfree(zet6221_ts); - - return 0; -} - -static int wmt_wakeup_bl_notify(struct notifier_block *nb, unsigned long event, - void *dummy) -{ - //printk("get notify\n"); - switch (event) { - case BL_CLOSE: - l_suspend = 1; - //printk("\nclose backlight\n\n"); - //printk("disable irq\n\n"); - wmt_disable_gpirq(); - break; - case BL_OPEN: - l_suspend = 0; - //printk("\nopen backlight\n\n"); - //printk("enable irq\n\n"); - wmt_enable_gpirq(); - break; - } - - return NOTIFY_OK; -} - -static struct notifier_block wmt_bl_notify = { - .notifier_call = wmt_wakeup_bl_notify, -}; - -static int zet6221_ts_init(void) -{ - //u8 ts_data[70]; - //int ret; - - /*ctp_reset(); - memset(ts_data,0,70); - ret=zet6221_i2c_read_tsdata(ts_get_i2c_client(), ts_data, 8); - if (ret <= 0) - { - dbg("Can't find zet6221!\n"); - return -1; - } - if (!zet6221_is_ts(ts_get_i2c_client())) - { - dbg("isn't zet6221!\n"); - return -1; - }*/ - if (zet6221_ts_probe(ts_get_i2c_client())) - { - return -1; - } - if (earlysus_en) - register_bl_notifier(&wmt_bl_notify); - //i2c_add_driver(&zet6221_ts_driver); - return 0; -} -//module_init(zet6221_ts_init); - -static void zet6221_ts_exit(void) -{ - zet6221_ts_remove(); - if (earlysus_en) - unregister_bl_notifier(&wmt_bl_notify); - //i2c_del_driver(&zet6221_ts_driver); -} -//module_exit(zet6221_ts_exit); - -void zet6221_set_ts_mode(u8 mode) -{ - dbg( "[Touch Screen]ts mode = %d \n", mode); -} -//EXPORT_SYMBOL_GPL(zet6221_set_ts_mode); - -struct wmtts_device zet6221_tsdev = { - .driver_name = WMT_TS_I2C_NAME, - .ts_id = "ZET62", - .init = zet6221_ts_init, - .exit = zet6221_ts_exit, - .suspend = zet_ts_suspend, - .resume = zet_ts_resume, -}; - - -MODULE_DESCRIPTION("ZET6221 I2C Touch Screen driver"); -MODULE_LICENSE("GPL v2"); |