Message ID | 20250119131356.1006582-10-tomasz.pakula.oficjalny@gmail.com |
---|---|
State | New |
Headers | show |
Series | HID: Upgrade the generic pidff driver and add hid-universal-pidff | expand |
On 19.01.25 14:13, Tomasz Pakuła wrote: > Some PID compliant devices automatically play effects after boot (i.e. > autocenter spring) that prevent the rendering of other effects since > it is done outside the kernel driver. > > This makes sure all the effects currently played are stopped after > resetting the device. > It brings compatibility to the Brunner CLS-P joystick and others Hi, it seems to me that the same thing would happen upon resumption from S4. Will this be handled? Regards Oliver
On Tue, 21 Jan 2025 at 11:10, Oliver Neukum <oneukum@suse.com> wrote: > > On 19.01.25 14:13, Tomasz Pakuła wrote: > > Some PID compliant devices automatically play effects after boot (i.e. > > autocenter spring) that prevent the rendering of other effects since > > it is done outside the kernel driver. > > > > This makes sure all the effects currently played are stopped after > > resetting the device. > > It brings compatibility to the Brunner CLS-P joystick and others > > Hi, > > it seems to me that the same thing would happen upon resumption > from S4. Will this be handled? > > Regards > Oliver > Turns out, the whole pidff_reset function was completely wrong and mostly didn't do anything. Is some edge cases, it could maybe enable actuators, but as it stands pidff->device_control was treated like a field to assign values to, while it actually is an array with boolean fields.
diff --git a/drivers/hid/usbhid/hid-pidff.c b/drivers/hid/usbhid/hid-pidff.c index 6b4c4ecf4943..25ae80f68507 100644 --- a/drivers/hid/usbhid/hid-pidff.c +++ b/drivers/hid/usbhid/hid-pidff.c @@ -109,8 +109,9 @@ static const u8 pidff_pool[] = { 0x80, 0x83, 0xa9 }; /* Special field key tables used to put special field keys into arrays */ #define PID_ENABLE_ACTUATORS 0 -#define PID_RESET 1 -static const u8 pidff_device_control[] = { 0x97, 0x9a }; +#define PID_STOP_ALL_EFFECTS 1 +#define PID_RESET 2 +static const u8 pidff_device_control[] = { 0x97, 0x99, 0x9a }; #define PID_CONSTANT 0 #define PID_RAMP 1 @@ -1240,6 +1241,10 @@ static void pidff_reset(struct pidff_device *pidff) hid_hw_request(hid, pidff->reports[PID_DEVICE_CONTROL], HID_REQ_SET_REPORT); hid_hw_wait(hid); + pidff->device_control->value[0] = pidff->control_id[PID_STOP_ALL_EFFECTS]; + hid_hw_request(hid, pidff->reports[PID_DEVICE_CONTROL], HID_REQ_SET_REPORT); + hid_hw_wait(hid); + pidff->device_control->value[0] = pidff->control_id[PID_ENABLE_ACTUATORS]; hid_hw_request(hid, pidff->reports[PID_DEVICE_CONTROL], HID_REQ_SET_REPORT);
Some PID compliant devices automatically play effects after boot (i.e. autocenter spring) that prevent the rendering of other effects since it is done outside the kernel driver. This makes sure all the effects currently played are stopped after resetting the device. It brings compatibility to the Brunner CLS-P joystick and others Signed-off-by: Tomasz Pakuła <tomasz.pakula.oficjalny@gmail.com> --- drivers/hid/usbhid/hid-pidff.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)