mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-21 13:45:53 -04:00
The already fixed bug in SDL only affected conditional effects. This should fix FFB in Forza Horizion 4/5 on Moza Devices as Forza Horizon flips the constant force direction instead of using negative magnitude values. Changing the direction in the effect directly in pidff_upload_effect() would affect it's value in further operations like comparing to the old effect and/or just reading the effect values in the user application. This, in turn, would lead to constant PID_SET_EFFECT spam as the effect direction would constantly not match the value that's set by the application. This way, it's still transparent to any software/API. Only affects conditional effects now so it's better for it to explicitly state that in the name. If any HW ever needs fixed direction for other effects, we'll add more quirks. Signed-off-by: Tomasz Pakuła <tomasz.pakula.oficjalny@gmail.com> Reviewed-by: Oleg Makarenko <oleg@makarenk.ooo> Signed-off-by: Jiri Kosina <jkosina@suse.com>
33 lines
966 B
C
33 lines
966 B
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
#ifndef __HID_PIDFF_H
|
|
#define __HID_PIDFF_H
|
|
|
|
#include <linux/hid.h>
|
|
|
|
/* HID PIDFF quirks */
|
|
|
|
/* Delay field (0xA7) missing. Skip it during set effect report upload */
|
|
#define HID_PIDFF_QUIRK_MISSING_DELAY BIT(0)
|
|
|
|
/* Missing Paramter block offset (0x23). Skip it during SET_CONDITION upload */
|
|
#define HID_PIDFF_QUIRK_MISSING_PBO BIT(1)
|
|
|
|
/* Initialise device control field even if logical_minimum != 1 */
|
|
#define HID_PIDFF_QUIRK_PERMISSIVE_CONTROL BIT(2)
|
|
|
|
/* Use fixed 0x4000 direction during SET_EFFECT report upload */
|
|
#define HID_PIDFF_QUIRK_FIX_CONDITIONAL_DIRECTION BIT(3)
|
|
|
|
/* Force all periodic effects to be uploaded as SINE */
|
|
#define HID_PIDFF_QUIRK_PERIODIC_SINE_ONLY BIT(4)
|
|
|
|
#ifdef CONFIG_HID_PID
|
|
int hid_pidff_init(struct hid_device *hid);
|
|
int hid_pidff_init_with_quirks(struct hid_device *hid, u32 initial_quirks);
|
|
#else
|
|
#define hid_pidff_init NULL
|
|
#define hid_pidff_init_with_quirks NULL
|
|
#endif
|
|
|
|
#endif
|