diff options
Diffstat (limited to 'drivers/input/touchscreen/atmel_mxt_ts.c')
| -rw-r--r-- | drivers/input/touchscreen/atmel_mxt_ts.c | 12 | 
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c index ae00604a6a8..f5d66859f23 100644 --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c @@ -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);  |