summaryrefslogtreecommitdiff
path: root/drivers/input/touchscreen
diff options
context:
space:
mode:
authorRobert Collins <rcollins@nvidia.com>2011-06-15 14:43:41 -0700
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:47:08 -0800
commit4e8c72b0280cba496c8397b80c363deebdd88717 (patch)
tree4b8cc66c3d43c440642b7e6840c7fcce67f0fde8 /drivers/input/touchscreen
parent39719e13c46683a26ee9f325f7444d181be47be1 (diff)
Input: atmel_mxt_touch: NVIDIA touch customization
* Fix suspend/resume bug to prevent unecessary i2cinterrupts when suspended. * Change input device name to match NVDA IDC name. * Add I2C address defines. * Change "printk" to "dev_info" function calls. BUG 826854 Original-Change-Id: Ic1b25bc469b86d8a26e876e80973597d9f6fb107 Reviewed-on: http://git-master/r/35285 Reviewed-by: Robert R Collins <rcollins@nvidia.com> Tested-by: Robert R Collins <rcollins@nvidia.com> Reviewed-by: Scott Williams <scwilliams@nvidia.com> Reviewed-by: Narendra Damahe <ndamahe@nvidia.com> Reviewed-by: Daniel Willemsen <dwillemsen@nvidia.com> Rebase-Id: Rcba51c79d3c004372c0be18538f14f56a2249bc0
Diffstat (limited to 'drivers/input/touchscreen')
-rw-r--r--drivers/input/touchscreen/atmel_mxt_ts.c50
1 files changed, 31 insertions, 19 deletions
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index bbc6c151d1d1..bcd22758ce39 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -3,6 +3,7 @@
*
* Copyright (C) 2010 Samsung Electronics Co.Ltd
* Copyright (C) 2011 Atmel Corporation
+ * Copyright (C) 2011 NVIDIA Corporation
* Author: Joonyoung Shim <jy0922.shim@samsung.com>
*
* This program is free software; you can redistribute it and/or modify it
@@ -265,6 +266,7 @@ struct mxt_data {
u16 last_address;
u8 actv_cycle_time;
u8 idle_cycle_time;
+ u8 is_stopped;
struct mutex access_mutex;
};
@@ -411,6 +413,7 @@ static int __mxt_read_reg(struct i2c_client *client,
{
struct i2c_msg xfer[2];
u8 buf[2];
+ int retval = 0;
struct mxt_data *data = i2c_get_clientdata(client);
if ((data->last_address == reg) && (reg == data->msg_address)) {
@@ -419,11 +422,9 @@ static int __mxt_read_reg(struct i2c_client *client,
dev_err(&client->dev,
"%s: Failure reading maxTouch device\n",
__func__);
- mutex_unlock(&data->access_mutex);
- return -EIO;
+ retval = -EIO;
}
- mutex_unlock(&data->access_mutex);
- return 0;
+ goto mxt_read_exit;
}
buf[0] = reg & 0xff;
@@ -444,13 +445,14 @@ static int __mxt_read_reg(struct i2c_client *client,
mutex_lock(&data->access_mutex);
if (i2c_transfer(client->adapter, xfer, 2) != 2) {
dev_err(&client->dev, "%s: i2c transfer failed\n", __func__);
- mutex_unlock(&data->access_mutex);
- return -EIO;
+ retval = -EIO;
}
- mutex_unlock(&data->access_mutex);
data->last_address = reg;
- return 0;
+
+mxt_read_exit:
+ mutex_unlock(&data->access_mutex);
+ return retval;
}
static int mxt_read_reg(struct i2c_client *client, u16 reg, u8 *val)
@@ -461,6 +463,7 @@ static int mxt_read_reg(struct i2c_client *client, u16 reg, u8 *val)
static int mxt_write_reg(struct i2c_client *client, u16 reg, u8 val)
{
u8 buf[3];
+ int retval = 0;
struct mxt_data *data = i2c_get_clientdata(client);
buf[0] = reg & 0xff;
@@ -470,12 +473,14 @@ static int mxt_write_reg(struct i2c_client *client, u16 reg, u8 val)
mutex_lock(&data->access_mutex);
if (i2c_master_send(client, buf, 3) != 3) {
dev_err(&client->dev, "%s: i2c send failed\n", __func__);
- mutex_unlock(&data->access_mutex);
- return -EIO;
+ retval = -EIO;
+ goto mxt_write_exit;
}
data->last_address = reg + 1;
+
+mxt_write_exit:
mutex_unlock(&data->access_mutex);
- return 0;
+ return retval;
}
static int mxt_read_object_table(struct i2c_client *client,
@@ -1145,20 +1150,21 @@ static const struct attribute_group mxt_attr_group = {
static void mxt_start(struct mxt_data *data)
{
int error;
-
- printk(KERN_WARNING "in MXT_START(), idle time: %d %d", data->idle_cycle_time, data->actv_cycle_time);
+ struct device *dev = &data->client->dev;
+ dev_info(dev, "in MXT_START(), idle time: %d %d", data->idle_cycle_time, data->actv_cycle_time);
/* Restore the cycle time settings to wake from sleep */
error = mxt_write_object(data, MXT_GEN_POWER_T7, MXT_POWER_ACTVACQINT,
data->actv_cycle_time);
if (error)
- printk("\n\nresume failed!");
+ dev_info(dev, "\n\nResume failed!");
error = mxt_write_object(data, MXT_GEN_POWER_T7, MXT_POWER_IDLEACQINT,
data->idle_cycle_time);
if (error)
- printk("\n\nresume failed!");
+ dev_info(dev, "\n\nResume failed!");
- printk(KERN_WARNING "Restored ACTV %d, IDLE %d", data->actv_cycle_time,
+ dev_info(dev, "Restored ACTV %d, IDLE %d", data->actv_cycle_time,
data->idle_cycle_time);
+ data->is_stopped = 0;
}
static void mxt_stop(struct mxt_data *data)
@@ -1166,6 +1172,10 @@ static void mxt_stop(struct mxt_data *data)
u8 actv_cycle_time;
u8 idle_cycle_time;
int error;
+ struct device *dev = &data->client->dev;
+
+ if (data->is_stopped)
+ return;
error = mxt_read_object(data, MXT_GEN_POWER_T7, MXT_POWER_ACTVACQINT,
@@ -1191,12 +1201,13 @@ static void mxt_stop(struct mxt_data *data)
if (error)
goto i2c_error;
- printk(KERN_WARNING "MXT Suspended, saved ACTV %d and IDLE %d",
+ dev_info(dev, "MXT Suspended, saved ACTV %d and IDLE %d",
actv_cycle_time, idle_cycle_time);
+ data->is_stopped = 1;
return;
i2c_error:
- printk(KERN_WARNING "MXT Suspend failed!");
+ dev_info(dev, "MXT Suspend failed!");
}
@@ -1234,7 +1245,7 @@ static int __devinit mxt_probe(struct i2c_client *client,
goto err_free_mem;
}
- input_dev->name = "Atmel maXTouch Touchscreen";
+ input_dev->name = "atmel-maxtouch";
input_dev->id.bustype = BUS_I2C;
input_dev->dev.parent = &client->dev;
input_dev->open = mxt_input_open;
@@ -1244,6 +1255,7 @@ static int __devinit mxt_probe(struct i2c_client *client,
data->input_dev = input_dev;
data->pdata = pdata;
data->irq = client->irq;
+ data->is_stopped = 0;
mxt_calc_resolution(data);