From 08b54c888b4d12fb62dfcf4bc426a87ce117a190 Mon Sep 17 00:00:00 2001 From: hhb Date: Wed, 29 Jun 2011 18:11:40 +0800 Subject: [PATCH] rk29:touch screen -> modify gt818's INT port and SHUTDOWN port control when resume or suspned --- drivers/input/touchscreen/gt818_ts.c | 54 ++++++++++++---------------- drivers/input/touchscreen/gt818_ts.h | 18 +++++++--- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/drivers/input/touchscreen/gt818_ts.c b/drivers/input/touchscreen/gt818_ts.c index 1b2b943cfd58..b9e86f94c6d4 100644 --- a/drivers/input/touchscreen/gt818_ts.c +++ b/drivers/input/touchscreen/gt818_ts.c @@ -95,7 +95,7 @@ static int i2c_read_bytes(struct i2c_client *client, u8 *buf, int len) msgs[1].len = len-2; msgs[1].buf = &buf[2]; msgs[1].scl_rate = GT818_I2C_SCL; - //msgs[1].udelay = client->udelay; + msgs[1].udelay = client->udelay; ret = i2c_transfer(client->adapter, msgs, 2); if(ret < 0) @@ -114,7 +114,7 @@ static int i2c_write_bytes(struct i2c_client *client,u8 *data,int len) msg.len = len; msg.buf = data; msg.scl_rate = GT818_I2C_SCL; - //msg.udelay = client->udelay; + msg.udelay = client->udelay; ret = i2c_transfer(client->adapter, &msg, 1); if(ret < 0) printk("%s:i2c_transfer fail =%d\n",__func__, ret); @@ -150,7 +150,6 @@ static int i2c_end_cmd(struct gt818_ts_data *ts) static int goodix_init_panel(struct gt818_ts_data *ts) { int ret = -1; -// unsigned char i2c_control_buf[3] = {0x06,0x92,0x03}; #if 1 u8 config_info[] = { @@ -192,7 +191,6 @@ static int goodix_init_panel(struct gt818_ts_data *ts) }; #endif -// ret = i2c_write_bytes(ts->client, i2c_control_buf, (sizeof(i2c_control_buf)/sizeof(i2c_control_buf[0]))); ret = i2c_write_bytes(ts->client, config_info, (sizeof(config_info)/sizeof(config_info[0]))); if (ret < 0) return ret; @@ -433,12 +431,8 @@ static int goodix_ts_power(struct gt818_ts_data * ts, int on) int ret = -1; struct gt818_platform_data *pdata = ts->client->dev.platform_data; unsigned char i2c_control_buf[3] = {0x06,0x92,0x01}; //suspend cmd - unsigned char i2c_config_buf[3] = {0x06,0x92,0x01}; - - #ifdef INT_PORT if(ts != NULL && !ts->use_irq) return -2; -#endif switch(on) { case 0: @@ -461,6 +455,12 @@ static int goodix_ts_power(struct gt818_ts_data * ts, int on) return ret; case 1: + + gpio_pull_updown(pdata->gpio_pendown, 1); + gpio_direction_output(pdata->gpio_pendown, 0); + msleep(1); + gpio_direction_output(pdata->gpio_pendown, 1); + msleep(1); gpio_direction_input(pdata->gpio_pendown); gpio_pull_updown(pdata->gpio_pendown, 0); msleep(2); @@ -518,16 +518,14 @@ static int goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id i2c_set_clientdata(client, ts); //init int and reset ports -#ifdef INT_PORT - ret = gpio_request(INT_PORT, "TS_INT"); //Request IO + ret = gpio_request(pdata->gpio_pendown, "TS_INT"); //Request IO if (ret){ - dev_err(&client->dev, "Failed to request GPIO:%d, ERRNO:%d\n",(int)INT_PORT, ret); + dev_err(&client->dev, "Failed to request GPIO:%d, ERRNO:%d\n",(int)pdata->gpio_pendown, ret); goto err_gpio_request_failed; } rk29_mux_api_set(pdata->pendown_iomux_name, pdata->pendown_iomux_mode); - gpio_direction_input(INT_PORT); - gpio_pull_updown(INT_PORT, 0); -#endif + gpio_direction_input(pdata->gpio_pendown); + gpio_pull_updown(pdata->gpio_pendown, 0); ret = gpio_request(pdata->gpio_reset, "gt818_resetPin"); if(ret){ @@ -538,6 +536,7 @@ static int goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id #if 1 for(retry = 0; retry < 4; retry++) { + gpio_pull_updown(pdata->gpio_reset, 1); gpio_direction_output(pdata->gpio_reset, 0); msleep(2); gpio_direction_input(pdata->gpio_reset); @@ -583,8 +582,8 @@ static int goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id ts->input_dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) ; ts->input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); -// ts->input_dev->absbit[0] = BIT(ABS_MT_POSITION_X) | BIT(ABS_MT_POSITION_Y) | -// BIT(ABS_MT_TOUCH_MAJOR) | BIT(ABS_MT_WIDTH_MAJOR); // for android + ts->input_dev->absbit[0] = BIT_MASK(ABS_MT_POSITION_X) | BIT_MASK(ABS_MT_POSITION_Y) | + BIT_MASK(ABS_MT_TOUCH_MAJOR) | BIT_MASK(ABS_MT_WIDTH_MAJOR); // for android #ifdef HAVE_TOUCH_KEY @@ -626,9 +625,7 @@ static int goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id ts->bad_data = 0; // finger_list.length = 0; -#ifdef INT_PORT - - client->irq = TS_INT; //If not defined in client + client->irq = gpio_to_irq(pdata->gpio_pendown); //If not defined in client if (client->irq) { @@ -646,18 +643,17 @@ static int goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id client->name, ts); if (ret != 0) { dev_err(&client->dev,"Cannot allocate ts INT!ERRNO:%d\n", ret); - gpio_direction_input(INT_PORT); - gpio_free(INT_PORT); + gpio_direction_input(pdata->gpio_pendown); + gpio_free(pdata->gpio_pendown); goto err_gpio_request_failed; } else { disable_irq(client->irq); ts->use_irq = 1; - dev_dbg(&client->dev,"Reques EIRQ %d succesd on GPIO:%d\n",TS_INT,INT_PORT); + dev_dbg(&client->dev,"Reques EIRQ %d succesd on GPIO:%d\n", client->irq, pdata->gpio_pendown); } } -#endif err_gpio_request_failed: ts->power = goodix_ts_power; @@ -688,10 +684,8 @@ err_init_godix_ts: { ts->use_irq = 0; free_irq(client->irq,ts); - #ifdef INT_PORT - gpio_direction_input(INT_PORT); - gpio_free(INT_PORT); - #endif + gpio_direction_input(pdata->gpio_pendown); + gpio_free(pdata->gpio_pendown); } else hrtimer_cancel(&ts->timer); @@ -723,10 +717,8 @@ static int goodix_ts_remove(struct i2c_client *client) #endif if (ts && ts->use_irq) { - #ifdef INT_PORT - gpio_direction_input(INT_PORT); - gpio_free(INT_PORT); - #endif + gpio_direction_input(pdata->gpio_pendown); + gpio_free(pdata->gpio_pendown); free_irq(client->irq, ts); } else if(ts) diff --git a/drivers/input/touchscreen/gt818_ts.h b/drivers/input/touchscreen/gt818_ts.h index f269a2e0f3e5..e969bc4ad08b 100644 --- a/drivers/input/touchscreen/gt818_ts.h +++ b/drivers/input/touchscreen/gt818_ts.h @@ -1,10 +1,18 @@ -/* - * drivers/input/touchscreen/gt818_ts.h +/* drivers/input/touchscreen/gt818_ts.h * - * Copyright (C) 2011 Goodix, Inc. + * Copyright (C) 2011 Rockcip, Inc. * - * Author: Felix - * Date: 2011.04.28 + * 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. + * + * Author: hhb@rock-chips.com + * Date: 2011.06.20 */ #ifndef _LINUX_GOODIX_TOUCH_H -- 2.34.1