Commit Graph

20 Commits

Author SHA1 Message Date
Benjamin Tissoires 7dd8db6894 HID: alps: allow incoming reports when only the trackstick is opened
If userspace only reads the trackstick node, and no one is listening to
the touchpad nor the hidraw node then, the device is not powered on.

Add open/close callbacks to allow users to disable the touchpad in Gnome
while keeping the trackstick active.

Link: https://bugzilla.redhat.com/show_bug.cgi?id=1559632
Link: https://gitlab.gnome.org/GNOME/mutter/issues/128
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2018-10-26 17:27:13 +02:00
Christophe JAILLET a317e55957 HID: alps: Fix some style in 't4_read_write_register()'
Better indent the code to improve readability.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2018-04-26 14:33:35 +02:00
Christophe JAILLET 69934012f3 HID: alps: Check errors returned by 't4_read_write_register()'
If only the first 't4_read_write_register()' call fails, the error code
will be overwritten and lost.
Directly report the error instead.

While at it, log some errors if 't4_read_write_register()' fails, as done
in the rest of the driver.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2018-04-26 14:33:35 +02:00
Christophe JAILLET edb6cb3d7c HID: alps: Save a memory allocation in 't4_read_write_register()' when writing data
if 'read_flag' is false, there is no need to allocate and free memory.
We can simply avoid the memory allocation and pass NULL to kfree.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2018-04-26 14:33:35 +02:00
Christophe JAILLET 605f077290 HID: alps: Report an error if we receive invalid data in 't4_read_write_register()'
If the data received is not what is expected, we should return an error.

Otherwise, we return 0 or a positive value which will be interpreted as
success, but '*read_val' has not been updated.

Fixes: 73196ebe13 ("HID: alps: add support for Alps T4 Touchpad device")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2018-04-26 14:33:35 +02:00
Masaki Ota 287b8e1197 HID: alps: add new U1 device ID
Add new U1 device Product ID This device is used on HP Elite book x360 series.

[jkosina@suse.cz: update changelog]
Signed-off-by: Masaki Ota <masaki.ota@jp.alps.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2017-10-17 12:41:23 +02:00
Masaki Ota 73196ebe13 HID: alps: add support for Alps T4 Touchpad device
- Define T4 device specification value for support T4 device.

- Creeate "t4_contact_data" and "t4_input_report" structure for decoding and
  storing T4-specific data

- Create "t4_calc_check_sum()" function for calculating checksum value to send
  to the device. T4 needs to send this value when reading or writing device
  address value.

- Create "t4_read_write_register()" function for reading and writing device
  address value.

- Create "t4_raw_event()" function for decodin XYZ, palm and button data.

- Replace "MAX_TOUCHES" fixed variable to "max_fingers" variable.

- Add T4 devuce product ID. (0x120C)

T4 device is used on HP EliteBook 1000 series and Zbook Stduio

[jkosina@suse.cz: rewrite changelog]
Signed-off-by: Masaki Ota <masaki.ota@jp.alps.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2017-10-17 12:40:15 +02:00
Masaki Ota 5992262d59 HID: alps: remove variables local to u1_init() from the device struct
Move dev_ctrl, dev_type, sen_line_num_x, sen_line_num_y, pitch_x, pitch_y,
resolution, btn_info from u1_dev structure to "u1_init()", because these
variables are only used in there.

[jkosina@suse.cz: rewrite changelog]
Signed-off-by: Masaki Ota <masaki.ota@jp.alps.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2017-10-17 11:35:21 +02:00
Masaki Ota c7083d3f53 HID: alps: properly handle max_fingers and minimum on X and Y axis
Create x_min, y_min and max_fingers variables for set correct XY minimum value
and the number of max finger on each devices.

[jkosina@suse.cz: update shortlog]
Signed-off-by: Masaki Ota <masaki.ota@jp.alps.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2017-10-17 11:35:21 +02:00
Masaki Ota 5d8c720d3b HID: alps: Separate U1 device code
Create 'static int u1_init()' and factor out U1 device initialization code from
main initialization and introduce per-device 'has_sp' flag.

[jkosina@suse.cz: rewrite changelog]
Signed-off-by: Masaki Ota <masaki.ota@jp.alps.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2017-10-17 11:35:21 +02:00
Masaki Ota ce6abcf83b HID: alps: delete unnecessary struct u1_dev devInfo
Delete "struct u1_dev devInfo" structure, because u1_dev structure is already
declared as "struct u1_dev *data".

[jkosina@suse.cz: rewrite changelog]
Signed-off-by: Masaki Ota <masaki.ota@jp.alps.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2017-10-17 11:35:20 +02:00
Jiri Kosina 179023e6af Merge branches 'for-4.8/upstream-fixes', 'for-4.9/alps', 'for-4.9/hid-input', 'for-4.9/intel-ish', 'for-4.9/kye-uclogic-waltop-fixes', 'for-4.9/logitech', 'for-4.9/sony', 'for-4.9/upstream' and 'for-4.9/wacom' into for-linus 2016-10-07 09:59:48 +02:00
Masaki Ota 9a54cf462d HID: alps: fix multitouch cursor issue
Issue reproduction procedure:

1. three or more fingers put on Touchpad.
2. release fingers from Touchpad.
3. move the cursor by one finger.
4. the cursor does not move.

Cause:

We do not notify multi fingers state correctly to input subsystem.  For
example, when three fingers release from Touchpad, fingers state is 3 -> 0. It
needs to notify first, second and third finger's releasing state.

Fix this by not breaking out on z axis and move x,y,z input handling
code to the correct place so that it's in fact per-finger.

[jkosina@suse.cz: reword changelog]
Signed-off-by: Masaki Ota <masaki.ota@jp.alps.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2016-09-27 13:50:09 +02:00
Wei Yongjun 46a41b512f HID: alps: fix error return code in alps_input_configured()
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

While at it, remove redundant input_free_device(NULL) call.

[jkosina@suse.cz: ammend changelog]
Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2016-09-22 11:10:06 +02:00
Kai-Heng Feng 04fd4cb0b0 HID: alps: fix stick device not working after resume
The stick device does not work after resume, add U1_SP_ABS_MODE flag can
make the device work after resume.

This has been discovered by pure guesswork, based on how the existing code uses
U1_TP_ABS_MODE flag on both initialization and resume.

I also tested the the patch on an ALPS touchpad without stick device, did not
notice any side effect on suspend/resume, so I made the U1_SP_ABS_MODE flag
mandatory.

[jkosina@suse.cz: made changelog more verbose]
Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2016-09-22 11:07:16 +02:00
Axel Lin 7ee2eaa364 HID: alps: Fix memory leak
A kfree(readbuf) call was missed if hid_hw_raw_request() fails, fix it.
Also avoid mixing direct return with goto in the error paths.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2016-09-19 14:42:22 +02:00
Masaki Ota 819d64e51d HID: alps: a few cleanups
Remove an unnecessary codes.
Change input_ivent() function to appropriate function.
Add the device ID of "HID_DEVICE_ID_ALPS_U1_DUAL".

[jkosina@suse.cz: removed unnecessary bitshifts of values passed
 input_report_key() as spotted by Dmitry]
Signed-off-by: Masaki Ota <masaki.ota@jp.alps.com>
Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2016-06-23 08:56:36 +02:00
Jiri Kosina 63b3a7d0f9 HID: alps: pass correct sizes to hid_hw_raw_request()
Calculating size of the report as sizeof(pointer) always passess the length
corresponding to the pointer type, not the underlying data report.

Reported-by: kbuild test robot <fengguang.wu@intel.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2016-06-20 11:16:18 +02:00
Jiri Kosina 41f61ecc50 HID: alps: struct u1_dev *priv is internal to the driver
... and therefore should be marked static.

Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2016-06-17 23:15:04 +02:00
Masaki Ota 2562756dde HID: add Alps I2C HID Touchpad-Stick support
Add support Alps I2C HID Touchpad and Stick device.

Signed-off-by: Masaki Ota <masaki.ota@jp.alps.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2016-06-17 23:12:04 +02:00