Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 65db86ac authored by Mike Rapoport's avatar Mike Rapoport Committed by Dmitry Torokhov
Browse files

Input: wm97xx - add BTN_TOUCH event to wm97xx to use it with Android



Android expects BTN_TOUCH events when pen state changes. Add BTN_TOUCH
event reporting to allow use of wm97xx touchscreen controller wiht
Android devices.

Signed-off-by: default avatarMike Rapoport <mike@compulab.co.il>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent fa886612
Loading
Loading
Loading
Loading
+9 −4
Original line number Original line Diff line number Diff line
@@ -409,6 +409,7 @@ static int wm97xx_read_samples(struct wm97xx *wm)
			wm->pen_is_down = 0;
			wm->pen_is_down = 0;
			dev_dbg(wm->dev, "pen up\n");
			dev_dbg(wm->dev, "pen up\n");
			input_report_abs(wm->input_dev, ABS_PRESSURE, 0);
			input_report_abs(wm->input_dev, ABS_PRESSURE, 0);
			input_report_key(wm->input_dev, BTN_TOUCH, 0);
			input_sync(wm->input_dev);
			input_sync(wm->input_dev);
		} else if (!(rc & RC_AGAIN)) {
		} else if (!(rc & RC_AGAIN)) {
			/* We need high frequency updates only while
			/* We need high frequency updates only while
@@ -433,6 +434,7 @@ static int wm97xx_read_samples(struct wm97xx *wm)
		input_report_abs(wm->input_dev, ABS_X, data.x & 0xfff);
		input_report_abs(wm->input_dev, ABS_X, data.x & 0xfff);
		input_report_abs(wm->input_dev, ABS_Y, data.y & 0xfff);
		input_report_abs(wm->input_dev, ABS_Y, data.y & 0xfff);
		input_report_abs(wm->input_dev, ABS_PRESSURE, data.p & 0xfff);
		input_report_abs(wm->input_dev, ABS_PRESSURE, data.p & 0xfff);
		input_report_key(wm->input_dev, BTN_TOUCH, 1);
		input_sync(wm->input_dev);
		input_sync(wm->input_dev);
		wm->pen_is_down = 1;
		wm->pen_is_down = 1;
		wm->ts_reader_interval = wm->ts_reader_min_interval;
		wm->ts_reader_interval = wm->ts_reader_min_interval;
@@ -628,18 +630,21 @@ static int wm97xx_probe(struct device *dev)
	wm->input_dev->phys = "wm97xx";
	wm->input_dev->phys = "wm97xx";
	wm->input_dev->open = wm97xx_ts_input_open;
	wm->input_dev->open = wm97xx_ts_input_open;
	wm->input_dev->close = wm97xx_ts_input_close;
	wm->input_dev->close = wm97xx_ts_input_close;
	set_bit(EV_ABS, wm->input_dev->evbit);

	set_bit(ABS_X, wm->input_dev->absbit);
	__set_bit(EV_ABS, wm->input_dev->evbit);
	set_bit(ABS_Y, wm->input_dev->absbit);
	__set_bit(EV_KEY, wm->input_dev->evbit);
	set_bit(ABS_PRESSURE, wm->input_dev->absbit);
	__set_bit(BTN_TOUCH, wm->input_dev->keybit);

	input_set_abs_params(wm->input_dev, ABS_X, abs_x[0], abs_x[1],
	input_set_abs_params(wm->input_dev, ABS_X, abs_x[0], abs_x[1],
			     abs_x[2], 0);
			     abs_x[2], 0);
	input_set_abs_params(wm->input_dev, ABS_Y, abs_y[0], abs_y[1],
	input_set_abs_params(wm->input_dev, ABS_Y, abs_y[0], abs_y[1],
			     abs_y[2], 0);
			     abs_y[2], 0);
	input_set_abs_params(wm->input_dev, ABS_PRESSURE, abs_p[0], abs_p[1],
	input_set_abs_params(wm->input_dev, ABS_PRESSURE, abs_p[0], abs_p[1],
			     abs_p[2], 0);
			     abs_p[2], 0);

	input_set_drvdata(wm->input_dev, wm);
	input_set_drvdata(wm->input_dev, wm);
	wm->input_dev->dev.parent = dev;
	wm->input_dev->dev.parent = dev;

	ret = input_register_device(wm->input_dev);
	ret = input_register_device(wm->input_dev);
	if (ret < 0)
	if (ret < 0)
		goto dev_alloc_err;
		goto dev_alloc_err;