#include <linux/completion.h>
#include <asm/uaccess.h>
#include <mach/board.h>
+#include <linux/reboot.h>
#define GOODIX_I2C_NAME "Goodix-TS"
//define default resolution of the touchscreen
#define GOODIX_MULTI_TOUCH
-#define GT819_IIC_SPEED 350*1000 //400*1000
+#define GT819_IIC_SPEED 400*1000 //400*1000
#define TOUCH_MAX_WIDTH 800
#define TOUCH_MAX_HEIGHT 480
#define TOUCH_MAJOR_MAX 200
unsigned int oldcrc32 = 0xFFFFFFFF;
unsigned int ulPolynomial = 0x04c11db7;
struct i2c_client * i2c_connect_client = NULL;
+static struct early_suspend gt819_power;
static u8 gt819_fw[]=
{
#include "gt819_fw.i"
printk("i2c read state byte:0x%x\n",i2c_state_buf[0]);
if(ret < 0)
return ERROR_I2C_TRANSFER;
+ if(i2c_state_buf[0]==0xff)continue;
if(i2c_state_buf[0] & status)
return i2c_state_buf[0];
msleep(10);
if(ret < 0)
return ret;
//gt819_printf(i2c_data_buf, data_len);
+ msleep(10);
dev_info(&client->dev, "PACK[%d]:read data\n",frame_number);
memset(i2c_rd_buf, 0, sizeof(i2c_rd_buf));
ret = gt819_read_regs(client,ADDR_DAT, i2c_rd_buf, data_len);
if(ret < 0)
return ret;
//gt819_printf(i2c_data_buf, data_len);
+ msleep(10);
dev_info(&client->dev, "PACK[%d]:check data\n",frame_number);
if(memcmp(&i2c_rd_buf[4],&fw_buf[frame_number*PACK_SIZE],check_len))
{
int ret,file_len,update_need_config;
unsigned char i2c_control_buf[10];
char version[17];
+ const char version_base[17]={"GT81XNI"};
dev_info(&client->dev, "gt819 firmware update start...\n");
dev_info(&client->dev, "step 1:read version...\n");
if (ret < 0)
return ret;
dev_info(&client->dev, "done!\n");
+ version[7] = '\0';
+ if(strcmp(version ,version_base)==0)
+ {
+ sys_sync();
+ msleep(200);
+ kernel_restart(NULL);
+ }
return 0;
}
return 0;
}
+static void gt819_early_suspend(struct early_suspend *h)
+{
+ dev_info(&i2c_connect_client->dev, "gt819_early_suspend!\n");
+ gt819_suspend(i2c_connect_client,PMSG_SUSPEND);
+}
+
+static void gt819_early_resume(struct early_suspend *h)
+{
+ dev_info(&i2c_connect_client->dev, "gt819_resume_early!\n");
+ gt819_resume(i2c_connect_client);
+}
/*******************************************************
Description:
remove_proc_entry("goodix-update", NULL);
#endif
//goodix_debug_sysfs_deinit();
- gpio_direction_input(ts->irq_gpio);
- gpio_free(ts->irq_gpio);
- free_irq(client->irq, ts);
+ gpio_direction_input(ts->irq_gpio);
+ gpio_free(ts->irq_gpio);
+ free_irq(client->irq, ts);
if(ts->goodix_wq)
destroy_workqueue(ts->goodix_wq);
dev_notice(&client->dev,"The driver is removing...\n");
i2c_set_clientdata(client, NULL);
input_unregister_device(ts->input_dev);
+ unregister_early_suspend(>819_power);
+ i2c_connect_client = 0;
kfree(ts);
return 0;
}
static int gt819_init_panel(struct goodix_ts_data *ts)
{
int ret,I2cDelay;
+ int len = sizeof(config_info)-1;
uint8_t rd_cfg_buf[10];
+ struct goodix_platform_data *pdata = ts->client->dev.platform_data;
+
+ ret = gt819_set_regs(ts->client, 101, &config_info[1], len);
+ if(ret < 0)
+ {
+ pdata->platform_sleep();
+ msleep(10);
+ pdata->platform_wakeup();
+ msleep(100);
+ printk("First IIC request failed,retry!\n");
+ ret = gt819_set_regs(ts->client, 101, &config_info[1], len);
+ if(ret<0)
+ return ret;
+ }
ret = gt819_read_regs(ts->client, 101, rd_cfg_buf, 10);
if (ret < 0)
{
int ret = 0;
char version[17];
- char version_base[17]={"GT81XNI_1R05TEST"};
+ char version_base[17]={"GT81XNI_1R05_18Q"};
struct goodix_ts_data *ts;
struct goodix_platform_data *pdata = client->dev.platform_data;
const char irq_table[4] = {IRQ_TYPE_EDGE_RISING,
IRQ_TYPE_LEVEL_LOW,
IRQ_TYPE_LEVEL_HIGH};
- dev_info(&client->dev,"Install touch driver\n");
+ dev_info(&client->dev,"Install goodix touch driver\n");
if (!pdata) {
dev_err(&client->dev, "platform data is required!\n");
ts->goodix_wq = create_workqueue("goodix_wq");
if (!ts->goodix_wq) {
- printk(KERN_ALERT "creat workqueue faiked\n");
+ printk(KERN_ALERT "creat workqueue failed\n");
ret = -ENOMEM;
goto err_create_work_queue_fail;
}
- //INIT_WORK(&ts->work, goodix_ts_work_func);
+
INIT_WORK(&ts->work, gt819_queue_work);
ts->input_dev = input_allocate_device();
}
i2c_set_clientdata(client, ts);
+ gt819_power.suspend = gt819_early_suspend;
+ gt819_power.resume = gt819_early_resume;
+ gt819_power.level = 0x2;
+ register_early_suspend(>819_power);
return 0;
i2c_set_clientdata(client, NULL);
input_unregister_device(ts->input_dev);
static struct i2c_driver gt819_driver = {
.probe = gt819_probe,
.remove = gt819_remove,
- .suspend = gt819_suspend,
- .resume = gt819_resume,
.id_table = gt819_id,
.driver = {
.name = GOODIX_I2C_NAME,