diff options
| author | Dudley Du <dudl@cypress.com> | 2015-01-18 01:12:32 -0500 |
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2015-01-18 03:10:31 -0500 |
| commit | f50efd06e0d156ba7bdb12898c9c1dc75fc4e199 (patch) | |
| tree | afc76addd52bb35b9e55f0ca74de4169091e8bcb /drivers/input | |
| parent | 87b26d7288cef960a650015ae13771d44d45d202 (diff) | |
Input: cyapa - add gen3 trackpad read baseline support
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>
Diffstat (limited to 'drivers/input')
| -rw-r--r-- | drivers/input/mouse/cyapa_gen3.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/drivers/input/mouse/cyapa_gen3.c b/drivers/input/mouse/cyapa_gen3.c index 214d45afc9f2..6e04e4b08e63 100644 --- a/drivers/input/mouse/cyapa_gen3.c +++ b/drivers/input/mouse/cyapa_gen3.c | |||
| @@ -783,6 +783,76 @@ static int cyapa_gen3_do_fw_update(struct cyapa *cyapa, | |||
| 783 | return 0; | 783 | return 0; |
| 784 | } | 784 | } |
| 785 | 785 | ||
| 786 | static ssize_t cyapa_gen3_show_baseline(struct device *dev, | ||
| 787 | struct device_attribute *attr, char *buf) | ||
| 788 | { | ||
| 789 | struct cyapa *cyapa = dev_get_drvdata(dev); | ||
| 790 | int max_baseline, min_baseline; | ||
| 791 | int tries; | ||
| 792 | int ret; | ||
| 793 | |||
| 794 | ret = cyapa_read_byte(cyapa, CYAPA_CMD_DEV_STATUS); | ||
| 795 | if (ret < 0) { | ||
| 796 | dev_err(dev, "Error reading dev status. err = %d\n", ret); | ||
| 797 | goto out; | ||
| 798 | } | ||
| 799 | if ((ret & CYAPA_DEV_NORMAL) != CYAPA_DEV_NORMAL) { | ||
| 800 | dev_warn(dev, "Trackpad device is busy. device state = 0x%x\n", | ||
| 801 | ret); | ||
| 802 | ret = -EAGAIN; | ||
| 803 | goto out; | ||
| 804 | } | ||
| 805 | |||
| 806 | ret = cyapa_write_byte(cyapa, CYAPA_CMD_SOFT_RESET, | ||
| 807 | OP_REPORT_BASELINE_MASK); | ||
| 808 | if (ret < 0) { | ||
| 809 | dev_err(dev, "Failed to send report baseline command. %d\n", | ||
| 810 | ret); | ||
| 811 | goto out; | ||
| 812 | } | ||
| 813 | |||
| 814 | tries = 3; /* Try for 30 to 60 ms */ | ||
| 815 | do { | ||
| 816 | usleep_range(10000, 20000); | ||
| 817 | |||
| 818 | ret = cyapa_read_byte(cyapa, CYAPA_CMD_DEV_STATUS); | ||
| 819 | if (ret < 0) { | ||
| 820 | dev_err(dev, "Error reading dev status. err = %d\n", | ||
| 821 | ret); | ||
| 822 | goto out; | ||
| 823 | } | ||
| 824 | if ((ret & CYAPA_DEV_NORMAL) == CYAPA_DEV_NORMAL) | ||
| 825 | break; | ||
| 826 | } while (--tries); | ||
| 827 | |||
| 828 | if (tries == 0) { | ||
| 829 | dev_err(dev, "Device timed out going to Normal state.\n"); | ||
| 830 | ret = -ETIMEDOUT; | ||
| 831 | goto out; | ||
| 832 | } | ||
| 833 | |||
| 834 | ret = cyapa_read_byte(cyapa, CYAPA_CMD_MAX_BASELINE); | ||
| 835 | if (ret < 0) { | ||
| 836 | dev_err(dev, "Failed to read max baseline. err = %d\n", ret); | ||
| 837 | goto out; | ||
| 838 | } | ||
| 839 | max_baseline = ret; | ||
| 840 | |||
| 841 | ret = cyapa_read_byte(cyapa, CYAPA_CMD_MIN_BASELINE); | ||
| 842 | if (ret < 0) { | ||
| 843 | dev_err(dev, "Failed to read min baseline. err = %d\n", ret); | ||
| 844 | goto out; | ||
| 845 | } | ||
| 846 | min_baseline = ret; | ||
| 847 | |||
| 848 | dev_dbg(dev, "Baseline report successful. Max: %d Min: %d\n", | ||
| 849 | max_baseline, min_baseline); | ||
| 850 | ret = scnprintf(buf, PAGE_SIZE, "%d %d\n", max_baseline, min_baseline); | ||
| 851 | |||
| 852 | out: | ||
| 853 | return ret; | ||
| 854 | } | ||
| 855 | |||
| 786 | /* | 856 | /* |
| 787 | * cyapa_get_wait_time_for_pwr_cmd | 857 | * cyapa_get_wait_time_for_pwr_cmd |
| 788 | * | 858 | * |
| @@ -1104,6 +1174,8 @@ const struct cyapa_dev_ops cyapa_gen3_ops = { | |||
| 1104 | .bl_deactivate = cyapa_gen3_bl_deactivate, | 1174 | .bl_deactivate = cyapa_gen3_bl_deactivate, |
| 1105 | .bl_initiate = cyapa_gen3_bl_initiate, | 1175 | .bl_initiate = cyapa_gen3_bl_initiate, |
| 1106 | 1176 | ||
| 1177 | .show_baseline = cyapa_gen3_show_baseline, | ||
| 1178 | |||
| 1107 | .initialize = cyapa_gen3_initialize, | 1179 | .initialize = cyapa_gen3_initialize, |
| 1108 | 1180 | ||
| 1109 | .state_parse = cyapa_gen3_state_parse, | 1181 | .state_parse = cyapa_gen3_state_parse, |
