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:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user