mirror of
https://github.com/torvalds/linux.git
synced 2024-12-21 02:21:36 +00:00
Input: atmel_mxt_ts - report pressure information from the driver
Atmel mxt1386 touch controller has the touch pressure information so let's report it to the user space. [dtor@mail.ru: added ABS_RESSURE reporting for ST emulation.] Signed-off-by: Yufeng Shen <miletus@chromium.org> Acked-by: Wanlong Gao <gaowanlong@cn.fujitsu.com> Acked-by: Henrik Rydberg <rydberg@euromail.se> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
parent
c331eb580a
commit
28ac293363
@ -244,6 +244,7 @@ struct mxt_finger {
|
||||
int x;
|
||||
int y;
|
||||
int area;
|
||||
int pressure;
|
||||
};
|
||||
|
||||
/* Each client has this additional data */
|
||||
@ -536,6 +537,8 @@ static void mxt_input_report(struct mxt_data *data, int single_id)
|
||||
finger[id].x);
|
||||
input_report_abs(input_dev, ABS_MT_POSITION_Y,
|
||||
finger[id].y);
|
||||
input_report_abs(input_dev, ABS_MT_PRESSURE,
|
||||
finger[id].pressure);
|
||||
} else {
|
||||
finger[id].status = 0;
|
||||
}
|
||||
@ -546,6 +549,8 @@ static void mxt_input_report(struct mxt_data *data, int single_id)
|
||||
if (status != MXT_RELEASE) {
|
||||
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_PRESSURE, finger[single_id].pressure);
|
||||
}
|
||||
|
||||
input_sync(input_dev);
|
||||
@ -560,6 +565,7 @@ static void mxt_input_touchevent(struct mxt_data *data,
|
||||
int x;
|
||||
int y;
|
||||
int area;
|
||||
int pressure;
|
||||
|
||||
/* Check the touch is present on the screen */
|
||||
if (!(status & MXT_DETECT)) {
|
||||
@ -584,6 +590,7 @@ static void mxt_input_touchevent(struct mxt_data *data,
|
||||
y = y >> 2;
|
||||
|
||||
area = message->message[4];
|
||||
pressure = message->message[5];
|
||||
|
||||
dev_dbg(dev, "[%d] %s x: %d, y: %d, area: %d\n", id,
|
||||
status & MXT_MOVE ? "moved" : "pressed",
|
||||
@ -594,6 +601,7 @@ static void mxt_input_touchevent(struct mxt_data *data,
|
||||
finger[id].x = x;
|
||||
finger[id].y = y;
|
||||
finger[id].area = area;
|
||||
finger[id].pressure = pressure;
|
||||
|
||||
mxt_input_report(data, id);
|
||||
}
|
||||
@ -1116,6 +1124,8 @@ static int __devinit mxt_probe(struct i2c_client *client,
|
||||
0, data->max_x, 0, 0);
|
||||
input_set_abs_params(input_dev, ABS_Y,
|
||||
0, data->max_y, 0, 0);
|
||||
input_set_abs_params(input_dev, ABS_PRESSURE,
|
||||
0, 255, 0, 0);
|
||||
|
||||
/* For multi touch */
|
||||
input_mt_init_slots(input_dev, MXT_MAX_FINGER);
|
||||
@ -1125,6 +1135,8 @@ static int __devinit mxt_probe(struct i2c_client *client,
|
||||
0, data->max_x, 0, 0);
|
||||
input_set_abs_params(input_dev, ABS_MT_POSITION_Y,
|
||||
0, data->max_y, 0, 0);
|
||||
input_set_abs_params(input_dev, ABS_MT_PRESSURE,
|
||||
0, 255, 0, 0);
|
||||
|
||||
input_set_drvdata(input_dev, data);
|
||||
i2c_set_clientdata(client, data);
|
||||
|
Loading…
Reference in New Issue
Block a user