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

Commit 0b056eee authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "input: touchscreen: focaltech_touch: Add report_rate node"

parents e5ced469 906e6474
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -88,6 +88,7 @@
#define FTS_REG_IDE_PARA_STATUS             0xB6
#define FTS_REG_GLOVE_MODE_EN               0xC0
#define FTS_REG_COVER_MODE_EN               0xC1
#define FTS_REG_REPORT_RATE                 0x88
#define FTS_REG_CHARGER_MODE_EN             0x8B
#define FTS_REG_GESTURE_EN                  0xD0
#define FTS_REG_GESTURE_OUTPUT_ADDRESS      0xD3
+4 −2
Original line number Diff line number Diff line
@@ -166,6 +166,8 @@ struct fts_ts_data {
	bool cover_mode;
	bool charger_mode;
	bool gesture_mode; /* gesture enable or disable, default: disable */
	int report_rate;

	/* multi-touch */
	struct ts_event *events;
	u8 *bus_tx_buf;
+64 −18
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ enum _ex_mode {
	MODE_GLOVE = 0,
	MODE_COVER,
	MODE_CHARGER,
	REPORT_RATE,
};

/*****************************************************************************
@@ -61,33 +62,30 @@ enum _ex_mode {
static int fts_ex_mode_switch(enum _ex_mode mode, u8 value)
{
	int ret = 0;
	u8 m_val = 0;

	if (value)
		m_val = 0x01;
	else
		m_val = 0x00;

	switch (mode) {
	case MODE_GLOVE:
		ret = fts_write_reg(FTS_REG_GLOVE_MODE_EN, m_val);
		if (ret < 0) {
			FTS_ERROR("MODE_GLOVE switch to %d fail", m_val);
		}
		ret = fts_write_reg(FTS_REG_GLOVE_MODE_EN, value > 0 ? 1 : 0);
		if (ret < 0)
			FTS_ERROR("MODE_GLOVE switch to %d fail", value);
		break;

	case MODE_COVER:
		ret = fts_write_reg(FTS_REG_COVER_MODE_EN, m_val);
		if (ret < 0) {
			FTS_ERROR("MODE_COVER switch to %d fail", m_val);
		}
		ret = fts_write_reg(FTS_REG_COVER_MODE_EN, value > 0 ? 1 : 0);
		if (ret < 0)
			FTS_ERROR("MODE_COVER switch to %d fail", value);
		break;

	case MODE_CHARGER:
		ret = fts_write_reg(FTS_REG_CHARGER_MODE_EN, m_val);
		if (ret < 0) {
			FTS_ERROR("MODE_CHARGER switch to %d fail", m_val);
		}
		ret = fts_write_reg(FTS_REG_CHARGER_MODE_EN, value > 0 ? 1 : 0);
		if (ret < 0)
			FTS_ERROR("MODE_CHARGER switch to %d fail", value);
		break;

	case REPORT_RATE:
		ret = fts_write_reg(FTS_REG_REPORT_RATE, value);
		if (ret < 0)
			FTS_ERROR("REPORT_RATE switch to %d fail", value);
		break;

	default:
@@ -241,6 +239,47 @@ static ssize_t fts_charger_mode_store(
	return count;
}

static ssize_t fts_report_rate_show(
	struct device *dev, struct device_attribute *attr, char *buf)
{
	int count = 0;
	u8 val = 0;
	struct fts_ts_data *ts_data = fts_data;
	struct input_dev *input_dev = ts_data->input_dev;

	mutex_lock(&input_dev->mutex);
	fts_read_reg(FTS_REG_REPORT_RATE, &val);
	count = scnprintf(buf + count, PAGE_SIZE, "Report Rate:%d\n",
			ts_data->report_rate);
	count += scnprintf(buf + count, PAGE_SIZE,
			"Report Rate Reg(0x88):%d\n", val);
	mutex_unlock(&input_dev->mutex);

	return count;
}

static ssize_t fts_report_rate_store(
	struct device *dev,
	struct device_attribute *attr, const char *buf, size_t count)
{
	int ret = 0;
	struct fts_ts_data *ts_data = fts_data;
	int rate;

	ret = kstrtoint(buf, 16, &rate);
	if (ret)
		return ret;

	if (rate != ts_data->report_rate) {
		ret = fts_ex_mode_switch(REPORT_RATE, (u8)rate);
		if (ret >= 0)
			ts_data->report_rate = rate;
	}

	FTS_DEBUG("report rate:%d", ts_data->report_rate);
	return count;
}


/* read and write charger mode
 * read example: cat fts_glove_mode        ---read  glove mode
@@ -255,10 +294,13 @@ static DEVICE_ATTR(fts_cover_mode, S_IRUGO | S_IWUSR,
static DEVICE_ATTR(fts_charger_mode, S_IRUGO | S_IWUSR,
			fts_charger_mode_show, fts_charger_mode_store);

static DEVICE_ATTR_RW(fts_report_rate);

static struct attribute *fts_touch_mode_attrs[] = {
	&dev_attr_fts_glove_mode.attr,
	&dev_attr_fts_cover_mode.attr,
	&dev_attr_fts_charger_mode.attr,
	&dev_attr_fts_report_rate.attr,
	NULL,
};

@@ -280,6 +322,9 @@ int fts_ex_mode_recovery(struct fts_ts_data *ts_data)
		fts_ex_mode_switch(MODE_CHARGER, ENABLE);
	}

	if (ts_data->report_rate > 0)
		fts_ex_mode_switch(REPORT_RATE, ts_data->report_rate);

	return 0;
}

@@ -290,6 +335,7 @@ int fts_ex_mode_init(struct fts_ts_data *ts_data)
	ts_data->glove_mode = DISABLE;
	ts_data->cover_mode = DISABLE;
	ts_data->charger_mode = DISABLE;
	ts_data->report_rate = 0;

	ret = sysfs_create_group(&ts_data->dev->kobj, &fts_touch_mode_group);
	if (ret < 0) {