Input: atmel_mxt_ts - report pressure information from the driver

Atmel mxt1386 touch controller has the touch pressure information but
the current driver atmel_mxt_ts does not expose it to the user space.
This patch makes the driver report the touch pressure information to
user space.

ChangeLog:
v2: fixed indentation as commented by Wanlong Gao
v3: added signed-off-by

Change-Id: Ib30cca618d964793e026a675823d9ed8d4e912b9
Signed-off-by: Yufeng Shen <miletus@chromium.org>
Signed-off-by: Amy Maloche <amaloche@codeaurora.org>
This commit is contained in:
Yufeng Shen
2011-10-11 12:28:21 -07:00
committed by Amy Maloche
parent b3f768c52b
commit e6eb36a842

View File

@@ -269,6 +269,7 @@ struct mxt_finger {
int x; int x;
int y; int y;
int area; int area;
int pressure;
}; };
/* Each client has this additional data */ /* Each client has this additional data */
@@ -568,6 +569,8 @@ static void mxt_input_report(struct mxt_data *data, int single_id)
finger[id].x); finger[id].x);
input_report_abs(input_dev, ABS_MT_POSITION_Y, input_report_abs(input_dev, ABS_MT_POSITION_Y,
finger[id].y); finger[id].y);
input_report_abs(input_dev, ABS_MT_PRESSURE,
finger[id].pressure);
input_mt_sync(input_dev); input_mt_sync(input_dev);
if (finger[id].status == MXT_RELEASE) if (finger[id].status == MXT_RELEASE)
@@ -581,6 +584,8 @@ static void mxt_input_report(struct mxt_data *data, int single_id)
if (status != MXT_RELEASE) { if (status != MXT_RELEASE) {
input_report_abs(input_dev, ABS_X, finger[single_id].x); input_report_abs(input_dev, ABS_X, finger[single_id].x);
input_report_abs(input_dev, ABS_Y, finger[single_id].y); input_report_abs(input_dev, ABS_Y, finger[single_id].y);
input_report_abs(input_dev,
ABS_PRESSURE, finger[single_id].pressure);
} }
input_sync(input_dev); input_sync(input_dev);
@@ -595,6 +600,7 @@ static void mxt_input_touchevent(struct mxt_data *data,
int x; int x;
int y; int y;
int area; int area;
int pressure;
/* Check the touch is present on the screen */ /* Check the touch is present on the screen */
if (!(status & MXT_DETECT)) { if (!(status & MXT_DETECT)) {
@@ -619,6 +625,7 @@ static void mxt_input_touchevent(struct mxt_data *data,
y = y >> 2; y = y >> 2;
area = message->message[4]; area = message->message[4];
pressure = message->message[5];
dev_dbg(dev, "[%d] %s x: %d, y: %d, area: %d\n", id, dev_dbg(dev, "[%d] %s x: %d, y: %d, area: %d\n", id,
status & MXT_MOVE ? "moved" : "pressed", status & MXT_MOVE ? "moved" : "pressed",
@@ -629,6 +636,7 @@ static void mxt_input_touchevent(struct mxt_data *data,
finger[id].x = x; finger[id].x = x;
finger[id].y = y; finger[id].y = y;
finger[id].area = area; finger[id].area = area;
finger[id].pressure = pressure;
mxt_input_report(data, id); mxt_input_report(data, id);
} }
@@ -1472,6 +1480,8 @@ static int __devinit mxt_probe(struct i2c_client *client,
0, data->pdata->x_size, 0, 0); 0, data->pdata->x_size, 0, 0);
input_set_abs_params(input_dev, ABS_Y, input_set_abs_params(input_dev, ABS_Y,
0, data->pdata->y_size, 0, 0); 0, data->pdata->y_size, 0, 0);
input_set_abs_params(input_dev, ABS_PRESSURE,
0, 255, 0, 0);
/* For multi touch */ /* For multi touch */
input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
@@ -1480,6 +1490,8 @@ static int __devinit mxt_probe(struct i2c_client *client,
0, data->pdata->x_size, 0, 0); 0, data->pdata->x_size, 0, 0);
input_set_abs_params(input_dev, ABS_MT_POSITION_Y, input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
0, data->pdata->y_size, 0, 0); 0, data->pdata->y_size, 0, 0);
input_set_abs_params(input_dev, ABS_MT_PRESSURE,
0, 255, 0, 0);
input_set_drvdata(input_dev, data); input_set_drvdata(input_dev, data);
i2c_set_clientdata(client, data); i2c_set_clientdata(client, data);