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 | |
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')
7 files changed, 0 insertions, 5031 deletions
diff --git a/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/Kconfig b/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/Kconfig deleted file mode 100755 index 3bf6dcc3..00000000 --- a/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/Kconfig +++ /dev/null @@ -1,16 +0,0 @@ -# -# ZET6221 capacity touch screen driver configuration -# -config TOUCHSCREEN_ZET6221 - tristate "ZEITEC ZET6221 I2C Capacitive Touchscreen Input Driver Support" - depends on ARCH_WMT - default y - help - Say Y here if you have an WMT based board with touchscreen - attached to it. - - If unsure, say N. - - To compile this driver as a module, choose M here: the - module will be called s_wmt_ts_zet6221 - diff --git a/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/Makefile b/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/Makefile deleted file mode 100755 index 102fb212..00000000 --- a/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -KERNELDIR=../../../../
-CROSS = arm_1103_le-
-CC= $(CROSS)gcc
-LD= $(CROSS)ld
-STRIP = $(CROSS)strip
-
-DEBUG = n
-
-# Add your debugging flag (or not) to EXTRA_CFLAGS
-ifeq ($(DEBUG),y)
-# DEBFLAGS = -O -g -DSCULL_DEBUG # "-O" is needed to expand inlines
-DEBFLAGS = -O0 -g -DSCULL_DEBUG # "-O" is needed to expand inlines
-
-else
- DEBFLAGS = -O2 -Wall
-endif
-
-EXTRA_CFLAGS += $(DEBFLAGS)
-
-
-MY_MODULE_NAME=s_wmt_ts_zet6221
-
-obj-m := $(MY_MODULE_NAME).o
-$(MY_MODULE_NAME)-objs := zet6221_i2c.o wmt_ts.o zet6221_downloader.o
-
-default:
- $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) modules
- $(STRIP) --strip-debug $(MY_MODULE_NAME).ko
- rm -rf *.o *~ core .depend .*.cmd *.mod.c .tmp_versions *.order *.symvers modules.builtin
-
-clean:
- rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.order *.symvers modules.builtin
\ No newline at end of file diff --git a/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/wmt_ts.c b/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/wmt_ts.c deleted file mode 100755 index bfc65e7f..00000000 --- a/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/wmt_ts.c +++ /dev/null @@ -1,833 +0,0 @@ -#include <linux/unistd.h> -#include <linux/time.h> -#include <linux/module.h> -#include <linux/moduleparam.h> -#include <linux/init.h> -//#include <asm/semaphore.h> -#include <linux/proc_fs.h> -#include <linux/completion.h> -#include <linux/delay.h> -#include <linux/device.h> -#include <linux/interrupt.h> -#include <linux/suspend.h> -#include <linux/input.h> -#include <linux/types.h> -#include <linux/platform_device.h> -#include <mach/hardware.h> -#include <linux/i2c.h> -#include <linux/irq.h> -#include <linux/firmware.h> - -#include <asm/uaccess.h> -#include <linux/fs.h> -#include <linux/syscalls.h> - -#include "wmt_ts.h" -#include "zet6221_ts.h" - -///////////////////////////////////////////////////////////////// - -// commands for ui -#define TS_IOC_MAGIC 't' - -#define TS_IOCTL_CAL_START _IO(TS_IOC_MAGIC, 1) -#define TS_IOCTL_CAL_DONE _IOW(TS_IOC_MAGIC, 2, int*) -#define TS_IOCTL_GET_RAWDATA _IOR(TS_IOC_MAGIC, 3, int*) -#define TS_IOCTL_CAL_QUIT _IOW(TS_IOC_MAGIC, 4, int*) -#define TS_IOCTL_AUTO_CALIBRATION _IOW(TS_IOC_MAGIC, 5, int*) -#define TS_IOC_MAXNR 5 - -#define TP_INFOR_ARRAY_SIZE (sizeof(l_tpinfor)/sizeof(l_tpinfor[1])) -// -#define TS_MAJOR 11 -#define TS_DRIVER_NAME "wmtts_touch" -#define TS_NAME "wmtts" -#define WMTTS_PROC_NAME "wmtts_config" - -#define EXT_GPIO0 0 -#define EXT_GPIO1 1 -#define EXT_GPIO2 2 -#define EXT_GPIO3 3 -#define EXT_GPIO4 4 -#define EXT_GPIO5 5 -#define EXT_GPIO6 6 -#define EXT_GPIO7 7 - - - -typedef struct { - int a1; - int b1; - int c1; - int a2; - int b2; - int c2; - int delta; -}CALIBRATION_PARAMETER, *PCALIBRATION_PARAMETER; - - -static int irq_gpio; -static int rst_gpio; -static int panelres_x; -static int panelres_y; -static int s_download_option; -static int s_high_Impendence_mode; -static int lcd_exchg = 0; - - -static DECLARE_WAIT_QUEUE_HEAD(queue); -static DECLARE_WAIT_QUEUE_HEAD(ts_penup_wait_queue); - -extern struct wmtts_device zet6221_tsdev; -static struct wmtts_device* l_tsdev = &zet6221_tsdev; -struct proc_dir_entry* l_tsproc = NULL; -static struct i2c_client *l_client=NULL; -static int l_penup = 1; // 1-pen up,0-pen down -int earlysus_en = 0; - -struct tp_infor -{ - //enum tp_type type; - char name[64]; - //unsigned int i2caddr; - unsigned int xaxis; //0: x,1: x swap with y - unsigned int xdir; // 1: positive,-1: revert - unsigned int ydir; // 1: positive,-1: revert - unsigned int max_finger_num; -}; - -static int l_tpindex = -1; -static struct tp_infor l_tpinfor[1]; - -///////////////////////////////////////////////////// -// function declare -///////////////////////////////////////////////////// -extern int wmt_getsyspara(char *varname, unsigned char *varval, int *varlen); -extern int wmt_setsyspara(char *varname, unsigned char *varval); -static int ts_writeproc( struct file *file, - const char *buffer, - unsigned long count, - void *data ); -static int ts_readproc(char *page, char **start, off_t off, - int count, int *eof, void *data); -/////////////////////////////////////////////////////////////////////// - -void wmt_ts_get_firmwname(char* firmname) -{ - int offset = 0; - offset = strlen(l_tsdev->ts_id); - switch(ic_model){ - case ZET6223: - l_tpinfor[l_tpindex].name[offset] = '2'; - l_tpinfor[l_tpindex].name[offset+1] = '3'; - break; - case ZET6231: - l_tpinfor[l_tpindex].name[offset] = '3'; - l_tpinfor[l_tpindex].name[offset+1] = '1'; - break; - case ZET6251: - l_tpinfor[l_tpindex].name[offset] = '5'; - l_tpinfor[l_tpindex].name[offset+1] = '1'; - break; - case ZET6221: - default: - l_tpinfor[l_tpindex].name[offset] = '2'; - l_tpinfor[l_tpindex].name[offset+1] = '1'; - break; - } - sprintf(firmname,"%s_fw.bin",l_tpinfor[l_tpindex].name); -} - -unsigned int wmt_ts_get_xaxis(void) -{ - return l_tpinfor[l_tpindex].xaxis; -} - -unsigned int wmt_ts_get_xdir(void) -{ - return l_tpinfor[l_tpindex].xdir; -} - -unsigned int wmt_ts_get_ydir(void) -{ - return l_tpinfor[l_tpindex].ydir; -} - -unsigned int wmt_ts_get_maxfingernum(void) -{ - return l_tpinfor[l_tpindex].max_finger_num; -} - - -int wmt_ts_load_firmware(char* firmwarename, unsigned char** firmdata, int* fwlen) -{ - const struct firmware *fw_entry; - if(request_firmware(&fw_entry, firmwarename, &l_client->dev)!=0) { - printk(KERN_ERR "cat't request firmware\n"); - return -1; - } - if (fw_entry->size <= 0) { - printk(KERN_ERR "load firmware error\n"); - release_firmware(fw_entry); - return -1; - } - - //*firmdata = kzalloc(fw_entry->size + 1, GFP_KERNEL); - memcpy(*firmdata, fw_entry->data, fw_entry->size); - *fwlen = fw_entry->size; - release_firmware(fw_entry); - - return 0; -} - - - - int wmt_ts_get_gpionum(void) -{ - return irq_gpio; -} - -int wmt_ts_get_resetgpnum(void) -{ - return rst_gpio; -} - -int wmt_ts_get_lcdexchg(void) -{ - return lcd_exchg; -} - -int wmt_ts_get_resolvX(void) -{ - return panelres_x; -} - -int wmt_ts_get_resolvY(void) -{ - return panelres_y; -} - -//up:1-pen up,0-pen down -void wmt_ts_set_penup(int up) -{ - l_penup = up; -} - -// -int wmt_ts_wait_penup(void) -{ - int ret = wait_event_interruptible( - ts_penup_wait_queue, - (1==l_penup)); - return ret; -} - -// return:1-pen up,0-pen dwon -int wmt_ts_ispenup(void) -{ - return l_penup; -} - - -void wmt_ts_wakeup_penup(void) -{ - wake_up(&ts_penup_wait_queue); -} - -int wmt_is_tsirq_enable(void) -{ - int val = 0; - int num = irq_gpio; - - if(num > 11) - return 0; - - if(num<4) - val = REG32_VAL(__GPIO_BASE+0x0300) & (1<<(num*8+7)); - else if(num >= 4 && num < 8) - val = REG32_VAL(__GPIO_BASE+0x0304) & (1<<((num-4)*8+7)); - else - val = REG32_VAL(__GPIO_BASE+0x0308) & (1<<((num-8)*8+7)); - - return val?1:0; - -} - -int wmt_is_tsint(void) -{ - int num = irq_gpio; - - if (num > 11) - { - return 0; - } - return (REG32_VAL(__GPIO_BASE+0x0360) & (1<<num)) ? 1: 0; -} - -void wmt_clr_int(void) -{ - int num = irq_gpio; - - if (num > 11) - { - return; - } - REG32_VAL(__GPIO_BASE+0x0360) = 1<<num; -} - -void wmt_tsreset_init(void) -{ - int num = rst_gpio; - - REG32_VAL(__GPIO_BASE+0x0040) |= (1<<num);//&= ~(1<<num); //enable gpio - REG32_VAL(__GPIO_BASE+0x00C0) &= ~(1<<num); // out low - REG32_VAL(__GPIO_BASE+0x0080) |= (1<<num); //output enable - msleep(10); - REG32_VAL(__GPIO_BASE+0x00C0) |= (1<<num); // out high -} - -// enable:0-disable,1-enable -void wmt_enable_rst_pull(int enable) -{ - if (enable) - { - REG32_VAL(__GPIO_BASE+0x0480) |= (1<<rst_gpio); //enable pull up/down - } else { - REG32_VAL(__GPIO_BASE+0x0480) &= ~(1<<rst_gpio); //disable pull up/down - } -} - -// up:0-pull down,1-pull up -void wmt_set_rst_pull(int up) -{ - if (up) - { - REG32_VAL(__GPIO_BASE+0x04c0) |= (1<<rst_gpio); //pull up - } else { - REG32_VAL(__GPIO_BASE+0x04c0) &= ~(1<<rst_gpio); //pull down - } -} - -// high:0-low level,1-high level -void wmt_rst_output(int high) -{ - REG32_VAL(__GPIO_BASE+0x0040) |= (1<<rst_gpio); //enable gpio - if (high) - { - REG32_VAL(__GPIO_BASE+0x00C0) |= (1<<rst_gpio); // high - } else { - REG32_VAL(__GPIO_BASE+0x00C0) &= ~(1<<rst_gpio); // low - } - REG32_VAL(__GPIO_BASE+0x0080) |= (1<<rst_gpio); //set output -} - -void wmt_rst_input(void) -{ - REG32_VAL(__GPIO_BASE+0x0040) |= (1<<rst_gpio); //enable gpio - REG32_VAL(__GPIO_BASE+0x0080) &= ~(1<<rst_gpio); //set input -} - -void wmt_set_intasgp(void) -{ - REG32_VAL(__GPIO_BASE+0x0040) |= (1<<irq_gpio); //enable gpio -} - -// val:1--high,0-low -void wmt_intgp_out(int val) -{ - if (val) - { - REG32_VAL(__GPIO_BASE+0x00C0) |= (1<<irq_gpio); // high - } else { - REG32_VAL(__GPIO_BASE+0x00C0) &= ~(1<<irq_gpio); // low - } - REG32_VAL(__GPIO_BASE+0x0080) |= (1<<irq_gpio); //set output -} - -void wmt_ts_set_irqinput(void) -{ - int num = irq_gpio; - - REG32_VAL(__GPIO_BASE+0x0040) |= (1<<num); //enable gpio - REG32_VAL(__GPIO_BASE+0x0080) &= ~(1<<num); //set input -} - -unsigned int wmt_ts_irqinval(void) -{ - return REG32_VAL(__GPIO_BASE+0x0000)&(1<<irq_gpio); -} - -int wmt_set_gpirq(int type) -{ - int shift; - int offset; - unsigned long reg; - int num = irq_gpio; - - if(num >11) - return -1; - //if (num > 9) - //GPIO_PIN_SHARING_SEL_4BYTE_VAL &= ~BIT4; // gpio10,11 as gpio - REG32_VAL(__GPIO_BASE+0x0040) &= ~(1<<num);//|=(1<<num);// //enable gpio - REG32_VAL(__GPIO_BASE+0x0080) &= ~(1<<num); //set input - REG32_VAL(__GPIO_BASE+0x04c0) |= (1<<num); //pull down - REG32_VAL(__GPIO_BASE+0x0480) &= ~(1<<num); //enable pull up/down - - //set gpio irq triger type - if(num < 4){//[0,3] - shift = num; - offset = 0x0300; - }else if(num >= 4 && num < 8){//[4,7] - shift = num-4; - offset = 0x0304; - }else{// [8,11] - shift = num-8; - offset = 0x0308; - } - - reg = REG32_VAL(__GPIO_BASE + offset); - - switch(type){ - case IRQ_TYPE_LEVEL_LOW: - reg &= ~(1<<(shift*8+2)); - reg &= ~(1<<(shift*8+1)); - reg &= ~(1<<(shift*8)); - break; - case IRQ_TYPE_LEVEL_HIGH: - reg &= ~(1<<(shift*8+2)); - reg &= ~(1<<(shift*8+1)); - reg |= (1<<(shift*8)); - break; - case IRQ_TYPE_EDGE_FALLING: - reg &= ~(1<<(shift*8+2)); - reg |= (1<<(shift*8+1)); - reg &= ~(1<<(shift*8)); - break; - case IRQ_TYPE_EDGE_RISING: - reg &= ~(1<<(shift*8+2)); - reg |= (1<<(shift*8+1)); - reg |= (1<<(shift*8)); - break; - default://both edge - reg |= (1<<(shift*8+2)); - reg &= ~(1<<(shift*8+1)); - reg &= ~(1<<(shift*8)); - break; - - } - //reg |= 1<<(shift*8+7);//enable interrupt - reg &= ~(1<<(shift*8+7)); //disable int - - REG32_VAL(__GPIO_BASE + offset) = reg; - REG32_VAL(__GPIO_BASE+0x0360) = 1<<num; //clear interrupt status - msleep(5); - return 0; -} - -int wmt_enable_gpirq(void) -{ - int num = irq_gpio; - - if(num > 11) - return -1; - - if(num<4) - REG32_VAL(__GPIO_BASE+0x0300) |= 1<<(num*8+7); //enable interrupt - else if(num >= 4 && num < 8) - REG32_VAL(__GPIO_BASE+0x0304) |= 1<<((num-4)*8+7); //enable interrupt - else - REG32_VAL(__GPIO_BASE+0x0308) |= 1<<((num-8)*8+7); //enable interrupt - - return 0; -} - -int wmt_disable_gpirq(void) -{ - int num = irq_gpio; - - if(num > 11) - return -1; - - if(num<4) - REG32_VAL(__GPIO_BASE+0x0300) &= ~(1<<(num*8+7)); //enable interrupt - else if(num >= 4 && num < 8) - REG32_VAL(__GPIO_BASE+0x0304) &= ~(1<<((num-4)*8+7)); //enable interrupt - else - REG32_VAL(__GPIO_BASE+0x0308) &= ~(1<<((num-8)*8+7)); //enable interrupt - - return 0; -} - - -int wmt_get_tsirqnum(void) -{ - return IRQ_GPIO; -} - -static void wmt_ts_platform_release(struct device *device) -{ - return; -} - -static struct platform_device wmt_ts_plt_device = { - .name = TS_DRIVER_NAME, - .id = 0, - .dev = { - .release = wmt_ts_platform_release, - }, -// .num_resources = ARRAY_SIZE(wm9715_ts_resources), -// .resource = wm9715_ts_resources, -}; - -static int wmt_ts_suspend(struct platform_device *pdev, pm_message_t state) -{ - dbg("ts suspend....\n"); - return l_tsdev->suspend(pdev, state); -} -static int wmt_ts_resume(struct platform_device *pdev) -{ - dbg("ts resume....\n"); - return l_tsdev->resume(pdev); -} - -static int wmt_ts_probe(struct platform_device *pdev) -{ - l_tsproc= create_proc_entry(WMTTS_PROC_NAME, 0666, NULL/*&proc_root*/); - if (l_tsproc != NULL) - { - l_tsproc->read_proc = ts_readproc; - l_tsproc->write_proc = ts_writeproc; - } - - if (l_tsdev->probe != NULL) - return l_tsdev->probe(pdev); - else - return 0; -} - -static int wmt_ts_remove(struct platform_device *pdev) -{ - if (l_tsproc != NULL) - { - remove_proc_entry(WMTTS_PROC_NAME, NULL); - l_tsproc = NULL; - } - - if (l_tsdev->remove != NULL) - return l_tsdev->remove(pdev); - else - return 0; -} - -static struct platform_driver wmt_ts_plt_driver = { - .driver = { - .name = TS_DRIVER_NAME, - .owner = THIS_MODULE, - }, - .probe = wmt_ts_probe, - .remove = wmt_ts_remove, - .suspend = wmt_ts_suspend, - .resume = wmt_ts_resume, -}; - -static int ts_writeproc( struct file *file, - const char *buffer, - unsigned long count, - void *data ) -{ - int calibrate = 0; - int val = 0; - - if (sscanf(buffer, "calibrate=%d\n", &calibrate)) - { - if (1 == calibrate) - { - if((l_tsdev->capacitance_calibrate != NULL) && - (0 == l_tsdev->capacitance_calibrate())) - { - printk(KERN_ALERT "%s calibration successfully!\n", l_tsdev->ts_id); - } else { - printk(KERN_ALERT "%s calibration failed!\n", l_tsdev->ts_id); - } - } - } else if (sscanf(buffer, "reset=%d\n", &val)) - { - - } - return count; -} - -static int ts_readproc(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ - int len = 0; - - len = sprintf(page, - "echo calibrate=1 > /proc/wmtts_config to calibrate ts.\n"); - return len; -} - - -int is_high_impendence_mode(void) -{ - return s_high_Impendence_mode; -} - -int get_download_option(void) -{ - return s_download_option; -} - - -static int wmt_check_touch_env(void) -{ - int ret = 0; - int len = 96, i = 0; - char retval[200] = {0},*p=NULL,*s=NULL; - int Enable=0; - int val,val1; - - // Get u-boot parameter - ret = wmt_getsyspara("wmt.io.touch", retval, &len); - if(ret){ - errlog("Read wmt.io.touch Failed.\n"); - return -EIO; - } - memset(l_tpinfor,0,sizeof(l_tpinfor[0])); - - p = retval; - sscanf(p,"%d:", &Enable); - p = strchr(p,':');p++; - s = strchr(p,':'); - strncpy(l_tpinfor[0].name,p, (s-p)); - p = s+1; - dbg("ts_name=%s\n", l_tpinfor[0].name); - - ret = sscanf(p,"%d:%d:%d:%d:%d:%d:%d:%d:%d:%d", - &irq_gpio,&panelres_x,&panelres_y,&rst_gpio, - &(l_tpinfor[0].xaxis),&(l_tpinfor[0].xdir),&(l_tpinfor[0].ydir), - &(l_tpinfor[0].max_finger_num),&s_high_Impendence_mode,&s_download_option); - - if (ret < 8) - { - dbg("Wrong format ts u-boot param(%d)!\nwmt.io.touch=%s\n",ret,retval); - return -ENODEV; - } - - //check touch enable - if(Enable == 0){ - errlog("Touch Screen Is Disabled.\n"); - return -ENODEV; - } - - - /*p = strchr(retval,':'); - p++; - if(strncmp(p, l_tsdev->ts_id,strlen(l_tsdev->ts_id))){//check touch ID - //errlog(" %s!=====\n", l_tsdev->ts_id); - return -ENODEV; - }*/ - - //sscanf(p,"%s:", ); - if (strstr(l_tpinfor[0].name, l_tsdev->ts_id) == NULL) - { - errlog("Can't find %s%s!\n", l_tsdev->ts_id,"xx"); - return -ENODEV; - } - l_tpindex = 0; - -/* - p = strchr(p,':'); - p++; - sscanf(p,"%d:%d:%d:%d",&irq_gpio,&panelres_x,&panelres_y,&rst_gpio); - - */ - klog("p.x = %d, p.y = %d, gpio=%d, resetgpio=%d,xaxis=%d,xdir=%d,ydri=%d,maxfingernum=%d,high_Impendence_mode=%d,s_download_option=%d\n", - panelres_x, panelres_y, irq_gpio, rst_gpio, - l_tpinfor[0].xaxis,l_tpinfor[0].xdir,l_tpinfor[0].ydir, - l_tpinfor[0].max_finger_num,s_high_Impendence_mode,s_download_option); - - // parse touch key param - memset(retval,0,sizeof(retval)); - ret = wmt_getsyspara("wmt.io.tskeyindex", retval, &len); - if(ret){ - dbg("no touch key!\n"); - //return -EIO; - } else { - p = retval; - // the number of touch key - sscanf(retval,"%d:", &val); - dbg("tskey num:%d\n",val); - p = strchr(p,':'); - p++; - // touch key range - for (i=0;i<val;i++) - { - sscanf(p,"%d:",&val1); - p = strchr(p,':'); - p++; - zet6221_set_tskey(i, val1); - dbg("key%d:(%d)\n",i,val1); - }; - } - - memset(retval,0,sizeof(retval)); - ret = wmt_getsyspara("wmt.touch.earlysus", retval, &len); - if(!ret) { - p = retval; - sscanf(p, "%d", &earlysus_en); - } - - - memset(retval,0,sizeof(retval)); - ret = wmt_getsyspara("wmt.display.fb0", retval, &len); - if (!ret) { - int tmp[6]; - p = retval; - sscanf(p, "%d:[%d:%d:%d:%d:%d", &tmp[0], &tmp[1], &tmp[2], &tmp[3], &tmp[4], &tmp[5]); - if (tmp[4] > tmp[5]) - lcd_exchg = 1; - } - -/* memset(retval,0,sizeof(retval)); - ret = wmt_getsyspara("wmt.io.ts.2dcal", retval, &len); - if(ret){ - errlog("Read env wmt.io.ts.2dcal Failed.\n "); - //return -EIO; - } - i = 0; - while(i < sizeof(retval)){ - if(retval[i]==' ' || retval[i]==',' || retval[i]==':') - retval[i] = '\0'; - i++; - } - - i = 0; - p = retval; - while(i<7 && p < (retval + sizeof(retval))){ - if(*p == '\0') - p++; - else{ - sscanf(p,"%d",&nBuff[i]); - //printk("%d\n",nBuff[i]); - p=p+strlen(p); - i++; - } - } - //sscanf(retval,"%d %d %d %d %d %d %d %d",&nBuff[0],&nBuff[1],&nBuff[2],&nBuff[3],&nBuff[4],&nBuff[5],&nBuff[6]); - dbg("Tsc calibrate init data: [%d %d %d %d %d %d %d]\n",nBuff[0],nBuff[1],nBuff[2],nBuff[3],nBuff[4],nBuff[5],nBuff[6]); - - g_CalcParam.a1 = nBuff[0]; - g_CalcParam.b1 = nBuff[1]; - g_CalcParam.c1 = nBuff[2]; - g_CalcParam.a2 = nBuff[3]; - g_CalcParam.b2 = nBuff[4]; - g_CalcParam.c2 = nBuff[5]; - g_CalcParam.delta = nBuff[6]; - - if(g_CalcParam.delta == 0) - g_CalcParam.delta =1;//avoid divide by zero -*/ - return 0; -} - -struct i2c_board_info ts_i2c_board_info = { - .type = WMT_TS_I2C_NAME, - .flags = 0x00, - .addr = WMT_TS_I2C_ADDR, - .platform_data = NULL, - .archdata = NULL, - .irq = -1, -}; - -static int ts_i2c_register_device (void) -{ - struct i2c_board_info *ts_i2c_bi; - struct i2c_adapter *adapter = NULL; - //struct i2c_client *client = NULL; - ts_i2c_bi = &ts_i2c_board_info; - adapter = i2c_get_adapter(1);/*in bus 1*/ - - if (NULL == adapter) { - printk("can not get i2c adapter, client address error\n"); - return -1; - } - l_client = i2c_new_device(adapter, ts_i2c_bi); - if (l_client == NULL) { - printk("allocate i2c client failed\n"); - return -1; - } - i2c_put_adapter(adapter); - return 0; -} - -static void ts_i2c_unregister_device(void) -{ - if (l_client != NULL) - { - i2c_unregister_device(l_client); - l_client = NULL; - } -} - -struct i2c_client* ts_get_i2c_client(void) -{ - return l_client; -} - -static int __init wmt_ts_init(void) -{ - int ret = 0; - - if(wmt_check_touch_env()) - return -ENODEV; - - //ts_i2c_board_info.addr = l_tpinfor[l_tpindex].i2caddr; - if (ts_i2c_register_device()<0) - { - dbg("Error to run ts_i2c_register_device()!\n"); - return -1; - } - - if (l_tsdev->init() < 0){ - dbg("Errors to init %s ts IC!!!\n", l_tsdev->ts_id); - ret = -1; - goto err_init; - } - - // register device and driver of platform - ret = platform_device_register(&wmt_ts_plt_device); - if(ret){ - errlog("wmt ts plat device register failed!\n"); - return ret; - } - ret = platform_driver_register(&wmt_ts_plt_driver); - if(ret){ - errlog("can not register platform_driver_register\n"); - platform_device_unregister(&wmt_ts_plt_device); - return ret; - } - - klog("%s driver init ok!\n",l_tsdev->ts_id); - return 0; -err_init: - ts_i2c_unregister_device(); - return ret; -} - -static void __exit wmt_ts_exit(void) -{ - dbg("%s\n",__FUNCTION__); - - l_tsdev->exit(); - platform_driver_unregister(&wmt_ts_plt_driver); - platform_device_unregister(&wmt_ts_plt_device); - ts_i2c_unregister_device(); -} - - -module_init(wmt_ts_init); -module_exit(wmt_ts_exit); - -MODULE_LICENSE("GPL"); - diff --git a/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/wmt_ts.h b/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/wmt_ts.h deleted file mode 100755 index cab70586..00000000 --- a/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/wmt_ts.h +++ /dev/null @@ -1,149 +0,0 @@ - -#ifndef WMT_TSH_201010191758 -#define WMT_TSH_201010191758 - -#include <linux/platform_device.h> -#include <linux/types.h> -#include <linux/device.h> -#include <linux/suspend.h> -#include <linux/i2c.h> - - -//#define DEBUG_WMT_TS -#ifdef DEBUG_WMT_TS -#undef dbg -#define dbg(fmt, args...) printk(KERN_ALERT "[%s]: " fmt, __FUNCTION__ , ## args) - -//#define dbg(fmt, args...) if (kpadall_isrundbg()) printk(KERN_ALERT "[%s]: " fmt, __FUNCTION__, ## args) - -#else -#define dbg(fmt, args...) -#endif - -#undef errlog -#undef klog -#define errlog(fmt, args...) printk("[%s]: " fmt, __FUNCTION__, ## args) -#define klog(fmt, args...) printk("[%s]: " fmt, __FUNCTION__, ## args) - -#define WMT_TS_I2C_NAME "zet6221-ts" -#define WMT_TS_I2C_ADDR 0x76 - - -#ifndef dim -#define dim(x) (sizeof(x) / sizeof(x[0])) -#endif - -extern int earlysus_en; - -//////////////////////////////data type/////////////////////////// -typedef struct { - short pressure; - short x; - short y; - //short millisecs; -} TS_EVENT; - -struct wmtts_device -{ - //data - char* driver_name; - char* ts_id; - //function - int (*init)(void); - int (*probe)(struct platform_device *platdev); - int (*remove)(struct platform_device *pdev); - void (*exit)(void); - int (*suspend)(struct platform_device *pdev, pm_message_t state); - int (*resume)(struct platform_device *pdev); - int (*capacitance_calibrate)(void); - int (*wait_penup)(struct wmtts_device*tsdev); // waiting untill penup - int penup; // 0--pendown;1--penup - -}; - -enum { - ZET6221 = 0, - ZET6231, - ZET6223, - ZET6251, -}; -extern u8 ic_model; -extern unsigned char* flash_buffer; -extern int l_fwlen; - - -//////////////////////////function interface///////////////////////// -extern int wmt_ts_get_gpionum(void); -extern int wmt_ts_iscalibrating(void); -extern int wmt_ts_get_resolvX(void); -extern int wmt_ts_get_resolvY(void); -extern int wmt_set_gpirq(int type); -extern int wmt_get_tsirqnum(void); -extern int wmt_disable_gpirq(void); -extern int wmt_enable_gpirq(void); -extern int wmt_is_tsirq_enable(void); -extern int wmt_is_tsint(void); -extern void wmt_clr_int(void); -extern void wmt_tsreset_init(void); -extern int wmt_ts_get_resetgpnum(void); -extern int wmt_ts_get_lcdexchg(void); -extern void wmt_enable_rst_pull(int enable); -extern void wmt_set_rst_pull(int up); -extern void wmt_rst_output(int high); -extern void wmt_rst_input(void); -extern void wmt_set_intasgp(void); -extern void wmt_intgp_out(int val); -extern void wmt_ts_set_irqinput(void); -extern unsigned int wmt_ts_irqinval(void); -extern void wmt_ts_set_penup(int up); -extern int wmt_ts_wait_penup(void); -extern void wmt_ts_wakeup_penup(void); -extern struct i2c_client* ts_get_i2c_client(void); -extern int wmt_ts_ispenup(void); -extern unsigned int wmt_ts_get_maxfingernum(void); -extern unsigned int wmt_ts_get_ictype(void); -extern unsigned int wmt_ts_get_xaxis(void); -extern unsigned int wmt_ts_get_xdir(void); -extern unsigned int wmt_ts_get_ydir(void); -// short -extern unsigned int wmt_ts_get_touchheight(void); -// long -extern unsigned int wmt_ts_get_touchwidth(void); -extern void wmt_ts_get_firmwname(char* firmname); -extern int wmt_ts_load_firmware(char* firmwarename, unsigned char** firmdata, int* fwlen); - - - - -extern void TouchPanelCalibrateAPoint( - int UncalX, //@PARM The uncalibrated X coordinate - int UncalY, //@PARM The uncalibrated Y coordinate - int *pCalX, //@PARM The calibrated X coordinate - int *pCalY //@PARM The calibrated Y coordinate - ); - -//filepath:the path of firmware file; -//firmdata:store the data from firmware file; -//maxlen: the max len of firmdata; -//return:the length of firmware data,negative-parsing error. -//extern -u8 zet6221_ts_sfr(struct i2c_client *client); -int wmt_getsyspara(char *varname, unsigned char *varval, int *varlen); - - -#define HIGH_IMPENDENCE_MODE 0 -#define NOT_HIGH_IMPENDENCE_MODE 1 - -extern int is_high_impendence_mode(void); - - -#define FORCE_DOWNLOAD 1 -#define FORCE_CANCEL_DOWNLOAD 2 -extern int get_download_option(void); - - - -#endif - - - diff --git a/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/zet6221_downloader.c b/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/zet6221_downloader.c deleted file mode 100755 index ac51aa21..00000000 --- a/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/zet6221_downloader.c +++ /dev/null @@ -1,1209 +0,0 @@ -#include <linux/kernel.h> -#include <linux/i2c.h> -#include <linux/delay.h> -#include <linux/gpio.h> -#include <linux/slab.h> -//#include "zet6221_fw.h" - -#include "wmt_ts.h" - -#define ZET6221_DOWNLOADER_NAME "zet6221_downloader" -#define FEATURE_FW_CHECK_SUM 1 -//#define High_Impendence_Mode - -#define TS_INT_GPIO S3C64XX_GPN(9) /*s3c6410*/ -#define TS_RST_GPIO S3C64XX_GPN(10) /*s3c6410*/ -#define RSTPIN_ENABLE - -#define GPIO_LOW 0 -#define GPIO_HIGH 1 - -//static u8 fw_version0; -//static u8 fw_version1; - -//#define debug_mode 1 -//#define DPRINTK(fmt,args...) do { if (debug_mode) printk(KERN_EMERG "[%s][%d] "fmt"\n", __FUNCTION__, __LINE__, ##args);} while(0) - -static unsigned char zeitec_zet6221_page[131] __initdata; -static unsigned char zeitec_zet6221_page_in[131] __initdata; -unsigned char* flash_buffer = NULL; -int l_fwlen = 0; - -//static u16 fb[8] = {0x3EEA,0x3EED,0x3EF0,0x3EF3,0x3EF6,0x3EF9,0x3EFC,0x3EFF}; -static u16 fb[8] = {0x3DF1,0x3DF4,0x3DF7,0x3DFA,0x3EF6,0x3EF9,0x3EFC,0x3EFF}; -static u16 fb21[8] = {0x3DF1,0x3DF4,0x3DF7,0x3DFA,0x3EF6,0x3EF9,0x3EFC,0x3EFF}; -static u16 fb23[8] = {0x7BFC,0x7BFD,0x7BFE,0x7BFF,0x7C04,0x7C05,0x7C06,0x7C07}; -u8 ic_model = 0; - -extern int zet6221_i2c_write_tsdata(struct i2c_client *client, u8 *data, u8 length); -extern int zet6221_i2c_read_tsdata(struct i2c_client *client, u8 *data, u8 length); -extern u8 pc[]; - - - - -/************************load firmwre data from file************************/ -int zet6221_load_fw(void) -{ - char fwname[256] = {0}; - int ret = -1; - wmt_ts_get_firmwname(fwname); - ret = wmt_ts_load_firmware(fwname, &flash_buffer, &l_fwlen); - if(!ret) { - printk("Success load fw_file: %s, length %d\n", fwname, l_fwlen); - printk("%x,%x,%x,%x\n", flash_buffer[0], flash_buffer[1], flash_buffer[2], flash_buffer[3]); - printk("%x,%x,%x,%x\n", flash_buffer[l_fwlen-4], flash_buffer[l_fwlen-3], flash_buffer[l_fwlen-2], flash_buffer[l_fwlen-1]); - } - return ret; -} - -/***********************free firmware memory*******************************/ -int zet6221_free_fwmem(void) -{ - if (l_fwlen > 0 && flash_buffer != NULL ) - { - kfree(flash_buffer); - flash_buffer = NULL; - l_fwlen = 0; - } - return 0; -} -//#define I2C_CTPM_ADDRESS (0x76) - -/*********************************************************************** -[function]: - callback: write data to ctpm by i2c interface,implemented by special user; -[parameters]: - client[in] :i2c client structure; - bt_ctpm_addr[in] :the address of the ctpm; - pbt_buf[in] :data buffer; - dw_lenth[in] :the length of the data buffer; -[return]: - 1 :success; - 0 :fail; -************************************************************************/ -int i2c_write_interface(struct i2c_client *client, u8 bt_ctpm_addr, u8* pbt_buf, u16 dw_lenth) -{ - struct i2c_msg msg; - msg.addr = bt_ctpm_addr; - msg.flags = 0; - msg.len = dw_lenth; - msg.buf = pbt_buf; - return i2c_transfer(client->adapter,&msg, 1); -} - -/*********************************************************************** -[function]: - callback: read data from ctpm by i2c interface,implemented by special user; -[parameters]: - client[in] :i2c client structure; - bt_ctpm_addr[in] :the address of the ctpm; - pbt_buf[out] :data buffer; - dw_lenth[in] :the length of the data buffer; -[return]: - 1 :success; - 0 :fail; -************************************************************************/ -int i2c_read_interface(struct i2c_client *client, u8 bt_ctpm_addr, u8* pbt_buf, u16 dw_lenth) -{ - struct i2c_msg msg; - msg.addr = bt_ctpm_addr; - msg.flags = I2C_M_RD; - msg.len = dw_lenth; - msg.buf = pbt_buf; - return i2c_transfer(client->adapter,&msg, 1); -} - -/*********************************************************************** - [function]: - callback: check version; - [parameters]: - void - - [return]: - 0: different 1: same; -************************************************************************/ -u8 zet6221_ts_version(void) -{ - int i; - - if(pc == NULL){ - errlog(" pc is NULL\n"); - return 0; - } - if( flash_buffer == NULL ){ - errlog("flash_buffer \n"); - return 0; - } - -#if 1 - dbg("pc: "); - for(i=0;i<8;i++){ - dbg("%02x ",pc[i]); - } - dbg("\n"); - - dbg("src: "); - for(i=0;i<8;i++){ - dbg("%02x ", flash_buffer[fb[i]]); - } - dbg("\n"); -#endif - - mdelay(20); - - for(i=0;i<8;i++) - if(pc[i]!= flash_buffer[fb[i]]) - return 0; - return 1; -} - - -/*********************************************************************** - [function]: - callback: send password 1K (ZET6223) - [parameters]: - client[in]: struct i2c_client — represent an I2C slave device; - - [return]: - 1; -************************************************************************/ -u8 zet6221_ts_sndpwd_1k(struct i2c_client *client) -{ - u8 ts_sndpwd_cmd[3] = {0x20,0xB9,0xA3}; - - int ret; - -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, ts_sndpwd_cmd, 3); -#else - ret=zet6221_i2c_write_tsdata(client, ts_sndpwd_cmd, 3); -#endif - - - return 1; -} - - -/*********************************************************************** - [function]: - callback: send password; - [parameters]: - client[in]: struct i2c_client ???represent an I2C slave device; - - [return]: - 1; -************************************************************************/ -u8 zet6221_ts_sndpwd(struct i2c_client *client) -{ - u8 ts_sndpwd_cmd[3] = {0x20,0xC5,0x9D}; - - int ret; - -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, ts_sndpwd_cmd, 3); -#else - ret=zet6221_i2c_write_tsdata(client, ts_sndpwd_cmd, 3); -#endif - - return 1; -} - -u8 zet622x_ts_option(struct i2c_client *client) -{ - u8 ts_cmd[1] = {0x27}; - u8 ts_cmd_erase[1] = {0x28}; - u8 ts_in_data[16] = {0}; - u8 ts_out_data[18] = {0}; - int ret; - u16 model; - int i; - u8 high_impendence_data = 0; - const u8 HIGH_IMPENDENCE_MODE_DATA = 0xf1; - const u8 NOT_HIGH_IMPENDENCE_MODE_DATA = 0xf2; - - - dbg("zet622x_ts_option++\n"); - - wmt_rst_output(0); - msleep(10); - //send password - zet6221_ts_sndpwd(client); - msleep(100); - - - -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, ts_cmd, dim(ts_cmd)); -#else - ret=zet6221_i2c_write_tsdata(client, ts_cmd, dim(ts_cmd)); -#endif - msleep(2); - - -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_read_interface(client, I2C_CTPM_ADDRESS, ts_in_data, dim(ts_in_data)); -#else - ret=zet6221_i2c_read_tsdata(client, ts_in_data, dim(ts_in_data)); -#endif - //msleep(2); - - dbg("command %02x recv:\n",ts_cmd[0]); - for(i=0;i<16;i++) - { - dbg("%02x ",ts_in_data[i]); - } - dbg("\n"); - // zet6231 recv: ff ff fc 30 ff 80 31 62 ff ff ff ff ff ff ff ff - - model = 0x0; - model = ts_in_data[7]; - model = (model << 8) | ts_in_data[6]; - - switch(model) { - case 0xFFFF: - ret = 1; - ic_model = ZET6221; - for(i=0;i<8;i++) - { - fb[i]=fb21[i]; - } - - if( is_high_impendence_mode() == HIGH_IMPENDENCE_MODE ){ - high_impendence_data = HIGH_IMPENDENCE_MODE_DATA; - }else if( is_high_impendence_mode() == NOT_HIGH_IMPENDENCE_MODE ) { - high_impendence_data = NOT_HIGH_IMPENDENCE_MODE_DATA; - } - - //#if defined(High_Impendence_Mode) - if(ts_in_data[2] != high_impendence_data) - { - - if(zet6221_ts_sfr(client)==0) - { - return 0; - } - - #if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, ts_cmd_erase, dim(ts_cmd_erase)); - #else - ret=zet6221_i2c_write_tsdata(client, ts_cmd_erase, dim(ts_cmd_erase)); - #endif - - msleep(100); - dbg("erase ret=%d \n",ret); - - - for(i=2;i<18;i++) - { - ts_out_data[i]=ts_in_data[i-2]; - } - ts_out_data[0] = 0x21; - ts_out_data[1] = 0xc5; - ts_out_data[4] = high_impendence_data; - - #if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, ts_out_data, 18); - #else - ret=zet6221_i2c_write_tsdata(client, ts_out_data, 18); - #endif - - msleep(100); - dbg("write out data, ret=%d\n",ret); - - - - #if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, ts_cmd, 1); - #else - ret=zet6221_i2c_write_tsdata(client, ts_cmd, 1); - #endif - - msleep(2); - - dbg("send %02x\n",ts_cmd[0]); - - - #if defined(I2C_CTPM_ADDRESS) - ret=i2c_read_interface(client, I2C_CTPM_ADDRESS, ts_in_data, 16); - #else - ret=zet6221_i2c_read_tsdata(client, ts_in_data, 16); - #endif - //msleep(2); - dbg("command %02x recv:\n",ts_cmd[0]); - for(i=0;i<16;i++) - { - dbg("%02x ",ts_in_data[i]); - } - dbg("\n"); - - } - - //#endif - - - - break; - case 0x6223: - ret = 1; - ic_model = ZET6223; - for(i=0;i<8;i++) - { - fb[i]=fb23[i]; - } - break; - case 0x6231: - ret = 1; - ic_model = ZET6231; - for(i=0;i<8;i++) - { - fb[i]=fb23[i]; - } - break; - case 0x6251: - ic_model = ZET6251; - for(i=0;i<8;i++) - { - fb[i] = fb23[i]; - } - break; - default: - errlog("Notice: can't detect the TP IC,use ZET6231 default\n"); - ret = 1; - ic_model = ZET6231; - for(i=0;i<8;i++) - { - fb[i]=fb23[i]; - } - break; - - } - - wmt_rst_output(1); - msleep(10); - - dbg("zet622x_ts_option-- ret:%d\n",ret); - return ret; -} -/*********************************************************************** - [function]: - callback: set/check sfr information; - [parameters]: - client[in]: struct i2c_client ???represent an I2C slave device; - - [return]: - 1; -************************************************************************/ -u8 zet6221_ts_sfr(struct i2c_client *client) -{ - u8 ts_cmd[1] = {0x2C}; - u8 ts_in_data[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - u8 ts_cmd17[17] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - //u8 ts_sfr_data[16] = {0x18,0x76,0x27,0x27,0xFF,0x03,0x8E,0x14,0x00,0x38,0x82,0xEC,0x00,0x00,0x7d,0x03}; - int ret; - int i; - - dbg("zet6221_ts_sfr++"); -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, ts_cmd, 1); -#else - ret=zet6221_i2c_write_tsdata(client, ts_cmd, 1); -#endif - msleep(10); - dbg("sfr cmd : 0x%02x \n",ts_cmd[0]); - - - - dbg("sfr rcv : \n"); - -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_read_interface(client, I2C_CTPM_ADDRESS, ts_in_data, 16); -#else - ret=zet6221_i2c_read_tsdata(client, ts_in_data, 16); -#endif - msleep(10); - - if(ts_in_data[14]!=0x3D && ts_in_data[14]!=0x7D) - { - return 0; - } - - for(i=0;i<16;i++) - { - ts_cmd17[i+1]=ts_in_data[i]; - dbg("[%d]%02x\n",i,ts_in_data[i]); - } - - dbg("\n"); - - // need to check 0x3D to open write function - if(ts_in_data[14]!=0x3D) - { - ts_cmd17[15]=0x3D; - - ts_cmd17[0]=0x2B; - -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, ts_cmd17, 17); -#else - ret=zet6221_i2c_write_tsdata(client, ts_cmd17, 17); -#endif - - if(ret<0) - { - errlog("enable sfr(0x3D) failed!\n"); - return 0; - } - - } - dbg("zet6221_ts_sfr--"); - return 1; -} - -/*********************************************************************** - [function]: - callback: mass erase flash; - [parameters]: - client[in]: struct i2c_client ???represent an I2C slave device; - - [return]: - 1; -************************************************************************/ -u8 zet6221_ts_masserase(struct i2c_client *client) -{ - u8 ts_cmd[1] = {0x24}; - - int ret; - -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, ts_cmd, 1); -#else - ret=zet6221_i2c_write_tsdata(client, ts_cmd, 1); -#endif - - return 1; -} - -/*********************************************************************** - [function]: - callback: erase flash by page; - [parameters]: - client[in]: struct i2c_client ???represent an I2C slave device; - - [return]: - 1; -************************************************************************/ -u8 zet6221_ts_pageerase(struct i2c_client *client,int npage) -{ - u8 ts_cmd[3] = {0x23,0x00,0x00}; - u8 len = 0; - int ret; - - switch(ic_model) - { - case ZET6221: - ts_cmd[1]=npage; - len=2; - break; - case ZET6231: - case ZET6223: - case ZET6251: - ts_cmd[1]=npage & 0xff; - ts_cmd[2]=npage >> 8; - len=3; - break; - default: - ts_cmd[1]=npage & 0xff; - ts_cmd[2]=npage >> 8; - len=3; - break; - } -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, ts_cmd, len); -#else - ret=zet6221_i2c_write_tsdata(client, ts_cmd, len); -#endif - msleep(2); - - return 1; -} - -/*********************************************************************** - [function]: - callback: reset mcu; - [parameters]: - client[in]: struct i2c_client ???represent an I2C slave device; - - [return]: - 1; -************************************************************************/ -u8 zet6221_ts_resetmcu(struct i2c_client *client) -{ - u8 ts_cmd[1] = {0x29}; - - int ret; - -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, ts_cmd, 1); -#else - ret=zet6221_i2c_write_tsdata(client, ts_cmd, 1); -#endif - - return 1; -} - - -#define CMD_PROG_CHECK_SUM (0x36) -#define CMD_PROG_GET_CHECK_SUM (0x37) -///*********************************************************************** -/// [function]: zet622x_cmd_read_check_sum -/// [parameters]: client, page_id, buf -/// [return]: int -///************************************************************************ -int zet622x_cmd_read_check_sum(struct i2c_client *client, int page_id, u8 * buf) -{ - int ret; - int cmd_len = 3; - - buf[0]= CMD_PROG_CHECK_SUM; - buf[1]= (u8)(page_id) & 0xff; - buf[2]= (u8)(page_id >> 8); - ret=zet6221_i2c_write_tsdata(client, buf, cmd_len); - if(ret<=0) - { - printk("[ZET]: Read check sum fail"); - return ret; - } - - buf[0]= CMD_PROG_GET_CHECK_SUM; - cmd_len = 1; - ret=zet6221_i2c_write_tsdata(client, buf, cmd_len); - if(ret<=0) - { - printk("[ZET]: Read check sum fail"); - return ret; - } - - cmd_len = 1; - ret = zet6221_i2c_read_tsdata(client, buf, cmd_len); - if(ret<=0) - { - printk("[ZET]: Read check sum fail"); - return ret; - } - return 1; -} - - -/*********************************************************************** - [function]: - callback: start HW function; - [parameters]: - client[in]: struct i2c_client ???represent an I2C slave device; - - [return]: - 1; -************************************************************************/ -u8 zet6221_ts_hwcmd(struct i2c_client *client) -{ - u8 ts_cmd[1] = {0xB9}; - - int ret; - -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, ts_cmd, 1); -#else - ret=zet6221_i2c_write_tsdata(client, ts_cmd, 1); -#endif - - return 1; -} - -/*********************************************************************** -update FW -************************************************************************/ -int __init zet6221_downloader( struct i2c_client *client ) -{ - int BufLen=0; - int BufPage=0; - int BufIndex=0; - int ret; - int i; - - int nowBufLen=0; - int nowBufPage=0; - int nowBufIndex=0; - int retryCount=0; - int retryTimes = 0; - - int i2cLength=0; - int bufOffset=0; - - dbg("zet6221_downloader++\n"); - -begin_download: - -#if defined(RSTPIN_ENABLE) - //reset mcu - //gpio_direction_output(TS_RST_GPIO, GPIO_LOW); - wmt_rst_output(0); - msleep(5); -#else - zet6221_ts_hwcmd(client); - msleep(200); -#endif - //send password - //send password - ret = zet6221_ts_sndpwd(client); - dbg("zet6221_ts_sndpwd ret=%d\n",ret); - msleep(100); - -/*****compare version*******/ - - //0~3 - memset(zeitec_zet6221_page_in,0x00,131); - switch(ic_model) - { - case ZET6221: - zeitec_zet6221_page_in[0]=0x25; - zeitec_zet6221_page_in[1]=(fb[0] >> 7);//(fb[0]/128); - - i2cLength=2; - break; - case ZET6231: - case ZET6223: - case ZET6251: - default: - zeitec_zet6221_page_in[0]=0x25; - zeitec_zet6221_page_in[1]=(fb[0] >> 7) & 0xff; //(fb[0]/128); - zeitec_zet6221_page_in[2]=(fb[0] >> 7) >> 8; //(fb[0]/128); - - i2cLength=3; - break; - } -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, zeitec_zet6221_page_in, i2cLength); -#else - ret=zet6221_i2c_write_tsdata(client, zeitec_zet6221_page_in, i2cLength); - dbg("write_ret =%d, i2caddr=0x%x\n", ret, client->addr); -#endif - msleep(2); - - zeitec_zet6221_page_in[0]=0x0; - zeitec_zet6221_page_in[1]=0x0; - zeitec_zet6221_page_in[2]=0x0; -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_read_interface(client, I2C_CTPM_ADDRESS, zeitec_zet6221_page_in, 128); -#else - ret=zet6221_i2c_read_tsdata(client, zeitec_zet6221_page_in, 128); - dbg("read_ret =%d, i2caddr=0x%x\n", ret, client->addr); -#endif - - //printk("page=%d ",(fb[0] >> 7)); //(fb[0]/128)); - for(i=0;i<4;i++) - { - pc[i]=zeitec_zet6221_page_in[(fb[i] & 0x7f)]; //[(fb[i]%128)]; - dbg("offset[%d]=%d ",i,(fb[i] & 0x7f)); //(fb[i]%128)); - } - dbg("\n"); - - - // 4~7 - memset(zeitec_zet6221_page_in,0x00,131); - switch(ic_model) - { - case ZET6221: - zeitec_zet6221_page_in[0]=0x25; - zeitec_zet6221_page_in[1]=(fb[4] >> 7);//(fb[4]/128); - - i2cLength=2; - break; - case ZET6231: - case ZET6223: - case ZET6251: - zeitec_zet6221_page_in[0]=0x25; - zeitec_zet6221_page_in[1]=(fb[4] >> 7) & 0xff; //(fb[4]/128); - zeitec_zet6221_page_in[2]=(fb[4] >> 7) >> 8; //(fb[4]/128); - - i2cLength=3; - break; - } -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, zeitec_zet6221_page_in, i2cLength); -#else - ret=zet6221_i2c_write_tsdata(client, zeitec_zet6221_page_in, i2cLength); - dbg("write_ret =%d, i2caddr=0x%x\n", ret, client->addr); -#endif - - zeitec_zet6221_page_in[0]=0x0; - zeitec_zet6221_page_in[1]=0x0; - zeitec_zet6221_page_in[2]=0x0; -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_read_interface(client, I2C_CTPM_ADDRESS, zeitec_zet6221_page_in, 128); -#else - ret=zet6221_i2c_read_tsdata(client, zeitec_zet6221_page_in, 128); - dbg("read_ret =%d, i2caddr=0x%x\n", ret, client->addr); -#endif - - //printk("page=%d ",(fb[4] >> 7)); //(fb[4]/128)); - for(i=4;i<8;i++) - { - pc[i]=zeitec_zet6221_page_in[(fb[i] & 0x7f)]; //[(fb[i]%128)]; - dbg("offset[%d]=%d ",i,(fb[i] & 0x7f)); //(fb[i]%128)); - } - dbg("\n"); - -#if 1 // need to check - //page 127 - memset(zeitec_zet6221_page_in,0x00,130); - zeitec_zet6221_page_in[0]=0x25; - zeitec_zet6221_page_in[1]=127; -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, zeitec_zet6221_page_in, 2); -#else - ret=zet6221_i2c_write_tsdata(client, zeitec_zet6221_page_in, 2); -#endif - - zeitec_zet6221_page_in[0]=0x0; - zeitec_zet6221_page_in[1]=0x0; -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_read_interface(client, I2C_CTPM_ADDRESS, zeitec_zet6221_page_in, 128); -#else - ret=zet6221_i2c_read_tsdata(client, zeitec_zet6221_page_in, 128); -#endif - - for(i=0;i<128;i++) - { - // 0x3F80 = 16256 = 128x127, means skipped the first 127 page (0-126) ,use the page 127. - if(0x3F80+i < l_fwlen/*sizeof(flash_buffer)/sizeof(char)*/) //l_fwlen: the bytes of data read from firmware file - { - if(zeitec_zet6221_page_in[i]!=flash_buffer[0x3F80+i]) - { - errlog("page 127 [%d] doesn't match! continue to download! retry times:%d\n",i,retryTimes); - if( retryTimes++ >= 20){ // retry 20 times ,quit - errlog("May be I2C comunication is error\n"); - goto exit_download; - } - goto proc_sfr; - } - } - } - -#endif - - if( get_download_option() == FORCE_DOWNLOAD ){ - errlog("FORCE_DOWNLOAD\n"); - goto proc_sfr; - } - if( get_download_option() == FORCE_CANCEL_DOWNLOAD ){ - errlog("FORCE_CANCEL_DOWNLOAD\n"); - goto exit_download; - } - if(zet6221_ts_version()!=0){ - klog("tp version is the same,no need to download\n"); - goto exit_download; - } - - - -/*****compare version*******/ -proc_sfr: - //sfr - if(zet6221_ts_sfr(client)==0) - { - -#if 1 - -#if defined(RSTPIN_ENABLE) - - //gpio_direction_output(TS_RST_GPIO, GPIO_HIGH); - wmt_rst_output(1); - msleep(20); - - //gpio_direction_output(TS_RST_GPIO, GPIO_LOW); - wmt_rst_output(0); - msleep(20); - - //gpio_direction_output(TS_RST_GPIO, GPIO_HIGH); - wmt_rst_output(1); -#else - zet6221_ts_resetmcu(client); -#endif - msleep(20); - errlog("zet6221_ts_sfr error, download again\n"); - goto begin_download; - -#endif - - } - msleep(20); - - /// Fix the bug that page#504~#512 failed to write - if(ic_model == ZET6223) - { - zet6221_ts_sndpwd_1k(client); - } - - //erase - if(BufLen==0) - { - //mass erase - dbg( "mass erase\n"); - zet6221_ts_masserase(client); - msleep(200); - - BufLen=l_fwlen;/*sizeof(flash_buffer)/sizeof(char)*/; - }else - { - zet6221_ts_pageerase(client,BufPage); - msleep(200); - } - - - while(BufLen>0) - { -download_page: - - memset(zeitec_zet6221_page,0x00,131); - - klog( "Start: write page%d\n",BufPage); - nowBufIndex=BufIndex; - nowBufLen=BufLen; - nowBufPage=BufPage; - - switch(ic_model) - { - case ZET6221: - bufOffset = 2; - i2cLength=130; - - zeitec_zet6221_page[0]=0x22; - zeitec_zet6221_page[1]=BufPage; - break; - case ZET6231: - case ZET6223: - case ZET6251: - default: - bufOffset = 3; - i2cLength=131; - - zeitec_zet6221_page[0]=0x22; - zeitec_zet6221_page[1]=BufPage & 0xff; - zeitec_zet6221_page[2]=BufPage >> 8; - break; - } - if(BufLen>128) - { - for(i=0;i<128;i++) - { - zeitec_zet6221_page[i+bufOffset]=flash_buffer[BufIndex]; - BufIndex+=1; - } - zeitec_zet6221_page[0]=0x22; - zeitec_zet6221_page[1]=BufPage; - BufLen-=128; - } - else - { - for(i=0;i<BufLen;i++) - { - zeitec_zet6221_page[i+bufOffset]=flash_buffer[BufIndex]; - BufIndex+=1; - } - zeitec_zet6221_page[0]=0x22; - zeitec_zet6221_page[1]=BufPage; - BufLen=0; - } - -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, zeitec_zet6221_page, i2cLength); -#else - ret=zet6221_i2c_write_tsdata(client, zeitec_zet6221_page, i2cLength); -#endif - //msleep(200); - msleep(2); - -#if 1 - - memset(zeitec_zet6221_page_in,0x00,131); - switch(ic_model) - { - case ZET6221: - zeitec_zet6221_page_in[0]=0x25; - zeitec_zet6221_page_in[1]=BufPage; - - i2cLength=2; - break; - case ZET6231: - case ZET6223: - case ZET6251: - default: - zeitec_zet6221_page_in[0]=0x25; - zeitec_zet6221_page_in[1]=BufPage & 0xff; - zeitec_zet6221_page_in[2]=BufPage >> 8; - - i2cLength=3; - break; - } -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_write_interface(client, I2C_CTPM_ADDRESS, zeitec_zet6221_page_in, i2cLength); -#else - ret=zet6221_i2c_write_tsdata(client, zeitec_zet6221_page_in, i2cLength); -#endif - msleep(2); - - zeitec_zet6221_page_in[0]=0x0; - zeitec_zet6221_page_in[1]=0x0; - zeitec_zet6221_page_in[2]=0x0; -#if defined(I2C_CTPM_ADDRESS) - ret=i2c_read_interface(client, I2C_CTPM_ADDRESS, zeitec_zet6221_page_in, 128); -#else - ret=zet6221_i2c_read_tsdata(client, zeitec_zet6221_page_in, 128); -#endif - - for(i=0;i<128;i++) - { - if(i < nowBufLen) - { - if(zeitec_zet6221_page[i+bufOffset]!=zeitec_zet6221_page_in[i]) - { - BufIndex=nowBufIndex; - BufLen=nowBufLen; - BufPage=nowBufPage; - - if(retryCount < 5) - { - retryCount++; - goto download_page; - }else - { - //BufIndex=0; - //BufLen=0; - //BufPage=0; - retryCount=0; - -#if defined(RSTPIN_ENABLE) - //gpio_direction_output(TS_RST_GPIO, GPIO_HIGH); - wmt_rst_output(1); - msleep(20); - - //gpio_direction_output(TS_RST_GPIO, GPIO_LOW); - wmt_rst_output(0); - msleep(20); - - //gpio_direction_output(TS_RST_GPIO, GPIO_HIGH); - wmt_rst_output(1); -#else - zet6221_ts_resetmcu(client); -#endif - msleep(20); - goto begin_download; - } - - } - } - } - -#endif - retryCount=0; - BufPage+=1; - } - -exit_download: - -#if defined(RSTPIN_ENABLE) - //gpio_direction_output(TS_RST_GPIO, GPIO_HIGH); - wmt_rst_output(1); - msleep(100); -#endif - - zet6221_ts_resetmcu(client); - msleep(100); - - dbg("zet6221_downloader--\n"); - return 1; - - -} - -int zet622x_resume_downloader(struct i2c_client *client) -{ - int ret = 0; - - int BufLen=0; - int BufPage=0; - int BufIndex=0; - int bufOffset = 0; - - int nowBufLen=0; - int nowBufPage=0; - int nowBufIndex=0; - - int i2cLength = 0; - - int i = 0; - - u8 bPageBuf[256]; - -#ifdef FEATURE_FW_CHECK_SUM - u8 get_check_sum = 0; - u8 check_sum = 0; - int retry_count = 0; - u8 tmp_data[16]; -#endif ///< for FEATURE_FW_CHECK_SUM - - - ///-------------------------------------------------------------/// - /// 1. Set RST=LOW - ///-------------------------------------------------------------/// - wmt_rst_output(0); - msleep(20); - //printk("RST = LOW\n"); - - ///-------------------------------------------------------------/// - /// Send password - ///-------------------------------------------------------------/// - ret = zet6221_ts_sndpwd(client); - if(ret<=0) - { - return ret; - } - - //printk("AAA\n"); - BufLen=l_fwlen;/*sizeof(flash_buffer)/sizeof(char)*/; - //printk("BBB%d\n",BufLen); - - while(BufLen>0) - { - /// memset(zeitec_zet622x_page, 0x00, 131); - nowBufIndex=BufIndex; - nowBufLen=BufLen; - nowBufPage=BufPage; - - switch(ic_model) - { - case ZET6251: - bufOffset = 3; - i2cLength=131; - - bPageBuf[0]=0x22; - bPageBuf[1]=BufPage & 0xff; - bPageBuf[2]=BufPage >> 8; - break; - } - - if(BufLen>128) - { - for(i=0;i<128;i++) - { - bPageBuf[i + bufOffset] = flash_buffer[BufIndex]; - BufIndex += 1; - } - - BufLen = BufLen - 128; - } - else - { - for(i=0;i<BufLen;i++) - { - bPageBuf[i+bufOffset]=flash_buffer[BufIndex]; - BufIndex+=1; - } - - BufLen=0; - } - -#ifdef FEATURE_FW_CHECK_SUM -LABEL_RETRY_DOWNLOAD_PAGE: -#endif ///< for FEATURE_FW_CHECK_SUM - - ret=zet6221_i2c_write_tsdata(client, bPageBuf, i2cLength); - - if(ic_model!= ZET6251) - { - msleep(50); - } - -#ifdef FEATURE_FW_CHECK_SUM - ///---------------------------------/// - /// Get check sum - ///---------------------------------/// - for(i=0;i<128;i++) - { - if(i == 0) - { - check_sum = bPageBuf[i + bufOffset]; - } - else - { - check_sum = check_sum ^ bPageBuf[i + bufOffset]; - } - } - - ///---------------------------------/// - /// Read check sum - ///---------------------------------/// - memset(tmp_data, 0, 16); - ret = zet622x_cmd_read_check_sum(client, BufPage, &tmp_data[0]); - if(ret<=0) - { - return ret; - } - get_check_sum = tmp_data[0]; - - //printk("[ZET]: page=%3d ,Check sum : %x ,get check sum : %x\n", BufPage, check_sum, get_check_sum); - if(check_sum != get_check_sum) - { - - if(retry_count < 5) - { - retry_count++; - goto LABEL_RETRY_DOWNLOAD_PAGE; - } - else - { - retry_count = 0; - wmt_rst_output(1); - msleep(20); - wmt_rst_output(0); - msleep(20); - wmt_rst_output(1); - msleep(20); - printk("[ZET] zet622x_resume_downloader fail\n"); - return ret; - } - - } - retry_count = 0; -#endif ///< for FEATURE_FW_CHECK_SUM - - BufPage+=1; - } - - printk("[ZET] zet622x_resume_downloader OK\n"); - //printk("RST = HIGH\n"); - - ///-------------------------------------------------------------/// - /// reset_mcu command - ///-------------------------------------------------------------/// - zet6221_ts_resetmcu(client); - msleep(10); - - ///-------------------------------------------------------------/// - /// SET RST=HIGH - ///-------------------------------------------------------------/// - wmt_rst_output(1); - msleep(20); - - ///-------------------------------------------------------------/// - /// RST toggle - ///-------------------------------------------------------------/// - wmt_rst_output(0); - msleep(2); - - wmt_rst_output(1); - msleep(2); - - return ret; -} - 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"); diff --git a/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/zet6221_ts.h b/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/zet6221_ts.h deleted file mode 100755 index 671bb29d..00000000 --- a/ANDROID_3.4.5/drivers/input/touchscreen/zet6221_ts/zet6221_ts.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef ZET6221_TSH_201010191758
-#define ZET6221_TSH_201010191758
-
-extern void zet6221_set_tskey(int index,int key);
-
-#endif
|