Skip to content

Commit

Permalink
Input: cyapa - add gen3 trackpad read baseline support
Browse files Browse the repository at this point in the history
Add read baseline function supported for gen3 trackpad device, it can be
used through sysfs baseline interface.

Signed-off-by: Dudley Du <dudl@cypress.com>
Tested-by: Jeremiah Mahler <jmmahler@gmail.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
  • Loading branch information
Dudley Du authored and Dmitry Torokhov committed Jan 18, 2015
1 parent 87b26d7 commit f50efd0
Showing 1 changed file with 72 additions and 0 deletions.
72 changes: 72 additions & 0 deletions drivers/input/mouse/cyapa_gen3.c
Original file line number Diff line number Diff line change
Expand Up @@ -783,6 +783,76 @@ static int cyapa_gen3_do_fw_update(struct cyapa *cyapa,
return 0;
}

static ssize_t cyapa_gen3_show_baseline(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct cyapa *cyapa = dev_get_drvdata(dev);
int max_baseline, min_baseline;
int tries;
int ret;

ret = cyapa_read_byte(cyapa, CYAPA_CMD_DEV_STATUS);
if (ret < 0) {
dev_err(dev, "Error reading dev status. err = %d\n", ret);
goto out;
}
if ((ret & CYAPA_DEV_NORMAL) != CYAPA_DEV_NORMAL) {
dev_warn(dev, "Trackpad device is busy. device state = 0x%x\n",
ret);
ret = -EAGAIN;
goto out;
}

ret = cyapa_write_byte(cyapa, CYAPA_CMD_SOFT_RESET,
OP_REPORT_BASELINE_MASK);
if (ret < 0) {
dev_err(dev, "Failed to send report baseline command. %d\n",
ret);
goto out;
}

tries = 3; /* Try for 30 to 60 ms */
do {
usleep_range(10000, 20000);

ret = cyapa_read_byte(cyapa, CYAPA_CMD_DEV_STATUS);
if (ret < 0) {
dev_err(dev, "Error reading dev status. err = %d\n",
ret);
goto out;
}
if ((ret & CYAPA_DEV_NORMAL) == CYAPA_DEV_NORMAL)
break;
} while (--tries);

if (tries == 0) {
dev_err(dev, "Device timed out going to Normal state.\n");
ret = -ETIMEDOUT;
goto out;
}

ret = cyapa_read_byte(cyapa, CYAPA_CMD_MAX_BASELINE);
if (ret < 0) {
dev_err(dev, "Failed to read max baseline. err = %d\n", ret);
goto out;
}
max_baseline = ret;

ret = cyapa_read_byte(cyapa, CYAPA_CMD_MIN_BASELINE);
if (ret < 0) {
dev_err(dev, "Failed to read min baseline. err = %d\n", ret);
goto out;
}
min_baseline = ret;

dev_dbg(dev, "Baseline report successful. Max: %d Min: %d\n",
max_baseline, min_baseline);
ret = scnprintf(buf, PAGE_SIZE, "%d %d\n", max_baseline, min_baseline);

out:
return ret;
}

/*
* cyapa_get_wait_time_for_pwr_cmd
*
Expand Down Expand Up @@ -1104,6 +1174,8 @@ const struct cyapa_dev_ops cyapa_gen3_ops = {
.bl_deactivate = cyapa_gen3_bl_deactivate,
.bl_initiate = cyapa_gen3_bl_initiate,

.show_baseline = cyapa_gen3_show_baseline,

.initialize = cyapa_gen3_initialize,

.state_parse = cyapa_gen3_state_parse,
Expand Down

0 comments on commit f50efd0

Please sign in to comment.