Re: [PATCH v15 07/12] input: cyapa: add gen3 trackpad device read baseline function support

From: Jeremiah Mahler
Date: Mon Dec 15 2014 - 09:12:08 EST


Dudley,

On Mon, Dec 15, 2014 at 02:23:18PM +0800, Dudley Du wrote:
> Add read baseline function supported for gen3 trackpad device,
> it can be used through sysfs baseline interface.
> TEST=test on Chromebooks.
>
> Signed-off-by: Dudley Du <dudley.dulixin@xxxxxxxxx>
> ---
> drivers/input/mouse/cyapa_gen3.c | 71 ++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 71 insertions(+)
>
> diff --git a/drivers/input/mouse/cyapa_gen3.c b/drivers/input/mouse/cyapa_gen3.c
> index 9851337..f42e008 100644
> --- a/drivers/input/mouse/cyapa_gen3.c
> +++ b/drivers/input/mouse/cyapa_gen3.c
> @@ -754,6 +754,75 @@ 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 = 3;
Perhaps just declare tries here, then initialize and document it near
where it will be used.

+ 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
> *
> @@ -1067,6 +1136,8 @@ const struct cyapa_dev_ops cyapa_gen3_ops = {
> .update_fw = cyapa_gen3_do_fw_update,
> .bl_deactivate = cyapa_gen3_bl_deactivate,
>
> + .show_baseline = cyapa_gen3_show_baseline,
> +
> .state_parse = cyapa_gen3_state_parse,
> .operational_check = cyapa_gen3_do_operational_check,
>
> --
> 1.9.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-input" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html

--
- Jeremiah Mahler
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/