Пример #1
0
static int bl86x8_ts_event_handler(struct hua_input_chip *chip, struct hua_input_device *dev)
{
	int ret;
	int count;
	struct input_dev *input = dev->input;
	struct bl86x8_data_package package;
	struct bl86x8_touch_point *p, *p_end;
	struct hua_ts_device *ts = (struct hua_ts_device *)dev;

	ret = bl86x8_read_data_package(chip, &package);
	if (ret < 0)
	{
		pr_red_info("bl86x8_read_data_package");
		hua_input_chip_recovery(chip, false);
		return ret;
	}

	count = package.td_status & 0x07;
	if (count == 0)
	{
		if (ts->touch_count)
		{
			hua_ts_mt_touch_release(input);
			ts->touch_count = 0;
		}

		return 0;
	}

	if (unlikely(count > BL86X8_POINT_COUNT))
	{
		// pr_red_info("Too much points = %d", count);
		count = BL86X8_POINT_COUNT;
	}

	for (p = package.points, p_end = p + count; p < p_end; p++)
	{
		hua_ts_report_mt_data(input, BL86X8_BUILD_AXIS(p->xh, p->xl), \
			BL86X8_BUILD_AXIS(p->yh, p->yl));
	}

	input_sync(input);
	ts->touch_count = count;

	return 0;
}
Пример #2
0
static void hua_ts_suspend(struct hua_ts_device *ts)
{
	hua_input_device_set_enable_lock(&ts->dev, false);
	hua_ts_mt_touch_release(ts->dev.input);
}